mirror of
https://github.com/songoda/UltimateStacker.git
synced 2024-09-27 14:12:59 +02:00
Added nbt support for spawners.
This commit is contained in:
parent
f8e2d62e4e
commit
5334503cd1
@ -13,6 +13,8 @@ import com.songoda.core.database.SQLiteConnector;
|
|||||||
import com.songoda.core.gui.GuiManager;
|
import com.songoda.core.gui.GuiManager;
|
||||||
import com.songoda.core.hooks.HologramManager;
|
import com.songoda.core.hooks.HologramManager;
|
||||||
import com.songoda.core.hooks.WorldGuardHook;
|
import com.songoda.core.hooks.WorldGuardHook;
|
||||||
|
import com.songoda.core.nms.NmsManager;
|
||||||
|
import com.songoda.core.nms.nbt.NBTItem;
|
||||||
import com.songoda.core.utils.TextUtils;
|
import com.songoda.core.utils.TextUtils;
|
||||||
import com.songoda.ultimatestacker.commands.*;
|
import com.songoda.ultimatestacker.commands.*;
|
||||||
import com.songoda.ultimatestacker.database.DataManager;
|
import com.songoda.ultimatestacker.database.DataManager;
|
||||||
@ -32,14 +34,6 @@ import com.songoda.ultimatestacker.storage.types.StorageYaml;
|
|||||||
import com.songoda.ultimatestacker.tasks.StackingTask;
|
import com.songoda.ultimatestacker.tasks.StackingTask;
|
||||||
import com.songoda.ultimatestacker.utils.EntityUtils;
|
import com.songoda.ultimatestacker.utils.EntityUtils;
|
||||||
import com.songoda.ultimatestacker.utils.Methods;
|
import com.songoda.ultimatestacker.utils.Methods;
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.apache.commons.lang.WordUtils;
|
import org.apache.commons.lang.WordUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -50,14 +44,18 @@ import org.bukkit.entity.EntityType;
|
|||||||
import org.bukkit.entity.Item;
|
import org.bukkit.entity.Item;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public class UltimateStacker extends SongodaPlugin {
|
public class UltimateStacker extends SongodaPlugin {
|
||||||
|
|
||||||
private static UltimateStacker INSTANCE;
|
private static UltimateStacker INSTANCE;
|
||||||
private final static Set<String> whitelist = new HashSet();
|
private final static Set<String> whitelist = new HashSet();
|
||||||
private final static Set<String> blacklist = new HashSet();;
|
private final static Set<String> blacklist = new HashSet();
|
||||||
|
|
||||||
private final Config mobFile = new Config(this, "mobs.yml");
|
private final Config mobFile = new Config(this, "mobs.yml");
|
||||||
private final Config itemFile = new Config(this, "items.yml");
|
private final Config itemFile = new Config(this, "items.yml");
|
||||||
@ -88,7 +86,7 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
// Register WorldGuard
|
// Register WorldGuard
|
||||||
WorldGuardHook.addHook("mob-stacking", true);
|
WorldGuardHook.addHook("mob-stacking", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPluginDisable() {
|
public void onPluginDisable() {
|
||||||
this.dataManager.bulkUpdateSpawners(this.spawnerStackManager.getStacks());
|
this.dataManager.bulkUpdateSpawners(this.spawnerStackManager.getStacks());
|
||||||
@ -102,12 +100,12 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
|
|
||||||
// Setup Config
|
// Setup Config
|
||||||
Settings.setupConfig();
|
Settings.setupConfig();
|
||||||
this.setLocale(Settings.LANGUGE_MODE.getString(), false);
|
this.setLocale(Settings.LANGUGE_MODE.getString(), false);
|
||||||
blacklist.clear();
|
blacklist.clear();
|
||||||
whitelist.clear();
|
whitelist.clear();
|
||||||
whitelist.addAll(Settings.ITEM_WHITELIST.getStringList());
|
whitelist.addAll(Settings.ITEM_WHITELIST.getStringList());
|
||||||
blacklist.addAll(Settings.ITEM_BLACKLIST.getStringList());
|
blacklist.addAll(Settings.ITEM_BLACKLIST.getStringList());
|
||||||
|
|
||||||
// Setup plugin commands
|
// Setup plugin commands
|
||||||
this.commandManager = new CommandManager(this);
|
this.commandManager = new CommandManager(this);
|
||||||
this.commandManager.addCommand(new CommandUltimateStacker())
|
this.commandManager.addCommand(new CommandUltimateStacker())
|
||||||
@ -252,15 +250,15 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
public List<Config> getExtraConfig() {
|
public List<Config> getExtraConfig() {
|
||||||
return Arrays.asList(mobFile, itemFile, spawnerFile);
|
return Arrays.asList(mobFile, itemFile, spawnerFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConfigReload() {
|
public void onConfigReload() {
|
||||||
blacklist.clear();
|
blacklist.clear();
|
||||||
whitelist.clear();
|
whitelist.clear();
|
||||||
whitelist.addAll(Settings.ITEM_WHITELIST.getStringList());
|
whitelist.addAll(Settings.ITEM_WHITELIST.getStringList());
|
||||||
blacklist.addAll(Settings.ITEM_BLACKLIST.getStringList());
|
blacklist.addAll(Settings.ITEM_BLACKLIST.getStringList());
|
||||||
|
|
||||||
this.setLocale(getConfig().getString("System.Language Mode"), true);
|
this.setLocale(getConfig().getString("System.Language Mode"), true);
|
||||||
this.locale.reloadMessages();
|
this.locale.reloadMessages();
|
||||||
|
|
||||||
this.entityUtils = new EntityUtils();
|
this.entityUtils = new EntityUtils();
|
||||||
@ -339,7 +337,7 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
|
|
||||||
public void updateHologram(SpawnerStack stack) {
|
public void updateHologram(SpawnerStack stack) {
|
||||||
// are holograms enabled?
|
// are holograms enabled?
|
||||||
if(!Settings.SPAWNER_HOLOGRAMS.getBoolean() || !HologramManager.getManager().isEnabled()) return;
|
if (!Settings.SPAWNER_HOLOGRAMS.getBoolean() || !HologramManager.getManager().isEnabled()) return;
|
||||||
Block block = stack.getLocation().getBlock();
|
Block block = stack.getLocation().getBlock();
|
||||||
if (block.getType() != CompatibleMaterial.SPAWNER.getBlockMaterial()) return;
|
if (block.getType() != CompatibleMaterial.SPAWNER.getBlockMaterial()) return;
|
||||||
// grab the spawner block
|
// grab the spawner block
|
||||||
@ -357,17 +355,18 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
// verify that this is a spawner
|
// verify that this is a spawner
|
||||||
if (block.getType() != CompatibleMaterial.SPAWNER.getMaterial()) return;
|
if (block.getType() != CompatibleMaterial.SPAWNER.getMaterial()) return;
|
||||||
// are holograms enabled?
|
// are holograms enabled?
|
||||||
if(!Settings.SPAWNER_HOLOGRAMS.getBoolean() || !HologramManager.getManager().isEnabled()) return;
|
if (!Settings.SPAWNER_HOLOGRAMS.getBoolean() || !HologramManager.getManager().isEnabled()) return;
|
||||||
// update this hologram in a tick
|
// update this hologram in a tick
|
||||||
SpawnerStack spawner = getSpawnerStackManager().getSpawner(block);
|
SpawnerStack spawner = getSpawnerStackManager().getSpawner(block);
|
||||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, () -> updateHologram(spawner), 10L);
|
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, () -> updateHologram(spawner), 10L);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////// Convenient API //////////
|
//////// Convenient API //////////
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the stacked amount for this item
|
* Change the stacked amount for this item
|
||||||
*
|
*
|
||||||
* @param item item entity to update
|
* @param item item entity to update
|
||||||
* @param newAmount number of items this item represents
|
* @param newAmount number of items this item represents
|
||||||
*/
|
*/
|
||||||
public static void updateItemAmount(Item item, int newAmount) {
|
public static void updateItemAmount(Item item, int newAmount) {
|
||||||
@ -448,10 +447,10 @@ public class UltimateStacker extends SongodaPlugin {
|
|||||||
*/
|
*/
|
||||||
public static boolean isMaterialBlacklisted(ItemStack item) {
|
public static boolean isMaterialBlacklisted(ItemStack item) {
|
||||||
CompatibleMaterial mat = CompatibleMaterial.getMaterial(item);
|
CompatibleMaterial mat = CompatibleMaterial.getMaterial(item);
|
||||||
if(mat == null) {
|
if (mat == null) {
|
||||||
// this shouldn't happen, but just in case?
|
// this shouldn't happen, but just in case?
|
||||||
return item == null ? false : (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
|
return item == null ? false : (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)
|
||||||
? isMaterialBlacklisted(item.getType()) : isMaterialBlacklisted(item.getType(), item.getData().getData()));
|
? isMaterialBlacklisted(item.getType()) : isMaterialBlacklisted(item.getType(), item.getData().getData()));
|
||||||
} else if (mat.usesData()) {
|
} else if (mat.usesData()) {
|
||||||
return isMaterialBlacklisted(mat.name()) || isMaterialBlacklisted(mat.getMaterial(), mat.getData());
|
return isMaterialBlacklisted(mat.name()) || isMaterialBlacklisted(mat.getMaterial(), mat.getData());
|
||||||
} else {
|
} else {
|
||||||
|
@ -144,6 +144,7 @@ public class EntityStack {
|
|||||||
|
|
||||||
private void handleSingleStackDeath(LivingEntity killed, List<Drop> drops, EntityDeathEvent event) {
|
private void handleSingleStackDeath(LivingEntity killed, List<Drop> drops, EntityDeathEvent event) {
|
||||||
EntityStackManager stackManager = plugin.getEntityStackManager();
|
EntityStackManager stackManager = plugin.getEntityStackManager();
|
||||||
|
|
||||||
LivingEntity newEntity = plugin.getEntityUtils().newEntity(killed);
|
LivingEntity newEntity = plugin.getEntityUtils().newEntity(killed);
|
||||||
|
|
||||||
updateHealth(newEntity);
|
updateHealth(newEntity);
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package com.songoda.ultimatestacker.listeners;
|
package com.songoda.ultimatestacker.listeners;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
|
import com.songoda.core.nms.NmsManager;
|
||||||
|
import com.songoda.core.nms.nbt.NBTItem;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
import com.songoda.ultimatestacker.events.SpawnerBreakEvent;
|
import com.songoda.ultimatestacker.events.SpawnerBreakEvent;
|
||||||
import com.songoda.ultimatestacker.events.SpawnerPlaceEvent;
|
import com.songoda.ultimatestacker.events.SpawnerPlaceEvent;
|
||||||
@ -192,6 +194,9 @@ public class BlockListeners implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int getSpawnerAmount(ItemStack item) {
|
private int getSpawnerAmount(ItemStack item) {
|
||||||
|
NBTItem nbtItem = NmsManager.getNbt().of(item);
|
||||||
|
if (nbtItem.has("spawner_stack_size"))
|
||||||
|
return nbtItem.getNBTObject("spawner_stack_size").asInt();
|
||||||
if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return 1;
|
if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return 1;
|
||||||
if (item.getItemMeta().getDisplayName().contains(":")) {
|
if (item.getItemMeta().getDisplayName().contains(":")) {
|
||||||
int amt = NumberUtils.toInt(item.getItemMeta().getDisplayName().replace("\u00A7", "").replace(";", "").split(":")[0], 1);
|
int amt = NumberUtils.toInt(item.getItemMeta().getDisplayName().replace("\u00A7", "").replace(";", "").split(":")[0], 1);
|
||||||
|
@ -1,34 +1,27 @@
|
|||||||
package com.songoda.ultimatestacker.utils;
|
package com.songoda.ultimatestacker.utils;
|
||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.compatibility.ServerVersion;
|
import com.songoda.core.nms.NmsManager;
|
||||||
|
import com.songoda.core.nms.nbt.NBTItem;
|
||||||
import com.songoda.core.utils.TextUtils;
|
import com.songoda.core.utils.TextUtils;
|
||||||
import com.songoda.ultimatestacker.UltimateStacker;
|
import com.songoda.ultimatestacker.UltimateStacker;
|
||||||
import com.songoda.ultimatestacker.settings.Settings;
|
import com.songoda.ultimatestacker.settings.Settings;
|
||||||
import java.util.Arrays;
|
import org.bukkit.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.GameMode;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.CreatureSpawner;
|
import org.bukkit.block.CreatureSpawner;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Item;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.BlockStateMeta;
|
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
public class Methods {
|
public class Methods {
|
||||||
|
|
||||||
public static void updateInventory(Item item, Inventory inventory) {
|
public static void updateInventory(Item item, Inventory inventory) {
|
||||||
@ -172,18 +165,10 @@ public class Methods {
|
|||||||
cs.setSpawnedType(entityType);
|
cs.setSpawnedType(entityType);
|
||||||
((BlockStateMeta) meta).setBlockState(cs);
|
((BlockStateMeta) meta).setBlockState(cs);
|
||||||
item.setItemMeta(meta);
|
item.setItemMeta(meta);
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String formatTitle(String text) {
|
NBTItem nbtItem = NmsManager.getNbt().of(item);
|
||||||
if (text == null || text.equals(""))
|
nbtItem.set("spawner_stack_size", amount);
|
||||||
return "";
|
return nbtItem.finish();
|
||||||
if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) {
|
|
||||||
if (text.length() > 31)
|
|
||||||
text = text.substring(0, 29) + "...";
|
|
||||||
}
|
|
||||||
text = formatText(text);
|
|
||||||
return text;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isInt(String number) {
|
public static boolean isInt(String number) {
|
||||||
|
Loading…
Reference in New Issue
Block a user