diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java index 12a3844..0a0ff33 100644 --- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java +++ b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java @@ -13,6 +13,8 @@ import com.songoda.core.database.SQLiteConnector; import com.songoda.core.gui.GuiManager; import com.songoda.core.hooks.HologramManager; 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.ultimatestacker.commands.*; 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.utils.EntityUtils; 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.bukkit.Bukkit; import org.bukkit.Location; @@ -50,14 +44,18 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.plugin.PluginManager; +import java.io.File; +import java.util.*; + public class UltimateStacker extends SongodaPlugin { private static UltimateStacker INSTANCE; private final static Set whitelist = new HashSet(); - private final static Set blacklist = new HashSet();; + private final static Set blacklist = new HashSet(); private final Config mobFile = new Config(this, "mobs.yml"); private final Config itemFile = new Config(this, "items.yml"); @@ -88,7 +86,7 @@ public class UltimateStacker extends SongodaPlugin { // Register WorldGuard WorldGuardHook.addHook("mob-stacking", true); } - + @Override public void onPluginDisable() { this.dataManager.bulkUpdateSpawners(this.spawnerStackManager.getStacks()); @@ -102,12 +100,12 @@ public class UltimateStacker extends SongodaPlugin { // Setup Config Settings.setupConfig(); - this.setLocale(Settings.LANGUGE_MODE.getString(), false); + this.setLocale(Settings.LANGUGE_MODE.getString(), false); blacklist.clear(); whitelist.clear(); whitelist.addAll(Settings.ITEM_WHITELIST.getStringList()); blacklist.addAll(Settings.ITEM_BLACKLIST.getStringList()); - + // Setup plugin commands this.commandManager = new CommandManager(this); this.commandManager.addCommand(new CommandUltimateStacker()) @@ -252,15 +250,15 @@ public class UltimateStacker extends SongodaPlugin { public List getExtraConfig() { return Arrays.asList(mobFile, itemFile, spawnerFile); } - + @Override public void onConfigReload() { blacklist.clear(); whitelist.clear(); whitelist.addAll(Settings.ITEM_WHITELIST.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.entityUtils = new EntityUtils(); @@ -339,7 +337,7 @@ public class UltimateStacker extends SongodaPlugin { public void updateHologram(SpawnerStack stack) { // 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(); if (block.getType() != CompatibleMaterial.SPAWNER.getBlockMaterial()) return; // grab the spawner block @@ -357,17 +355,18 @@ public class UltimateStacker extends SongodaPlugin { // verify that this is a spawner if (block.getType() != CompatibleMaterial.SPAWNER.getMaterial()) return; // 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 SpawnerStack spawner = getSpawnerStackManager().getSpawner(block); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this, () -> updateHologram(spawner), 10L); } //////// Convenient API ////////// + /** * 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 */ public static void updateItemAmount(Item item, int newAmount) { @@ -448,10 +447,10 @@ public class UltimateStacker extends SongodaPlugin { */ public static boolean isMaterialBlacklisted(ItemStack item) { CompatibleMaterial mat = CompatibleMaterial.getMaterial(item); - if(mat == null) { + if (mat == null) { // this shouldn't happen, but just in case? 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()) { return isMaterialBlacklisted(mat.name()) || isMaterialBlacklisted(mat.getMaterial(), mat.getData()); } else { diff --git a/src/main/java/com/songoda/ultimatestacker/entity/EntityStack.java b/src/main/java/com/songoda/ultimatestacker/entity/EntityStack.java index 49524f5..9c442f7 100644 --- a/src/main/java/com/songoda/ultimatestacker/entity/EntityStack.java +++ b/src/main/java/com/songoda/ultimatestacker/entity/EntityStack.java @@ -144,6 +144,7 @@ public class EntityStack { private void handleSingleStackDeath(LivingEntity killed, List drops, EntityDeathEvent event) { EntityStackManager stackManager = plugin.getEntityStackManager(); + LivingEntity newEntity = plugin.getEntityUtils().newEntity(killed); updateHealth(newEntity); diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/BlockListeners.java b/src/main/java/com/songoda/ultimatestacker/listeners/BlockListeners.java index 85ad728..1ba7787 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/BlockListeners.java +++ b/src/main/java/com/songoda/ultimatestacker/listeners/BlockListeners.java @@ -1,6 +1,8 @@ package com.songoda.ultimatestacker.listeners; 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.events.SpawnerBreakEvent; import com.songoda.ultimatestacker.events.SpawnerPlaceEvent; @@ -192,6 +194,9 @@ public class BlockListeners implements Listener { } 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.getItemMeta().getDisplayName().contains(":")) { int amt = NumberUtils.toInt(item.getItemMeta().getDisplayName().replace("\u00A7", "").replace(";", "").split(":")[0], 1); diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java b/src/main/java/com/songoda/ultimatestacker/utils/Methods.java index ecd12f6..2ba7a97 100644 --- a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java +++ b/src/main/java/com/songoda/ultimatestacker/utils/Methods.java @@ -1,34 +1,27 @@ package com.songoda.ultimatestacker.utils; 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.ultimatestacker.UltimateStacker; import com.songoda.ultimatestacker.settings.Settings; -import java.util.Arrays; -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.*; import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Item; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; +import org.bukkit.entity.*; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.ItemMeta; 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 static void updateInventory(Item item, Inventory inventory) { @@ -172,18 +165,10 @@ public class Methods { cs.setSpawnedType(entityType); ((BlockStateMeta) meta).setBlockState(cs); item.setItemMeta(meta); - return item; - } - public static String formatTitle(String text) { - if (text == null || text.equals("")) - return ""; - if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_9)) { - if (text.length() > 31) - text = text.substring(0, 29) + "..."; - } - text = formatText(text); - return text; + NBTItem nbtItem = NmsManager.getNbt().of(item); + nbtItem.set("spawner_stack_size", amount); + return nbtItem.finish(); } public static boolean isInt(String number) {