From 116442a51e23775e052c2c4cf45b5abe1ed5356c Mon Sep 17 00:00:00 2001 From: Brianna O'Keefe Date: Mon, 5 Nov 2018 23:41:58 -0500 Subject: [PATCH] legacy --- pom.xml | 2 +- .../ultimatestacker/UltimateStacker.java | 21 +++++++++- .../events/BlockListeners.java | 10 ++--- .../ultimatestacker/spawner/SpawnerStack.java | 13 ++++++- .../ultimatestacker/utils/Methods.java | 2 +- .../ultimatestacker/utils/Reflection.java | 39 +++++++++++++++++++ .../ultimatestacker/utils/ServerVersion.java | 26 +++++++++++++ src/main/resources/plugin.yml | 1 - 8 files changed, 104 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/songoda/ultimatestacker/utils/Reflection.java create mode 100644 src/main/java/com/songoda/ultimatestacker/utils/ServerVersion.java diff --git a/pom.xml b/pom.xml index 4d3cf21..99502ff 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ org.spigotmc spigot - 1.13.2 + 1.12.2 com.songoda diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java index b1c0478..55f9cad 100644 --- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java +++ b/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java @@ -16,7 +16,9 @@ import com.songoda.ultimatestacker.storage.types.StorageMysql; import com.songoda.ultimatestacker.storage.types.StorageYaml; import com.songoda.ultimatestacker.entity.EntityStackManager; import com.songoda.ultimatestacker.tasks.StackingTask; +import com.songoda.ultimatestacker.utils.ServerVersion; import com.songoda.ultimatestacker.utils.SettingsManager; +import org.apache.commons.lang.ArrayUtils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -51,7 +53,8 @@ public class UltimateStacker extends JavaPlugin { private CommandManager commandManager; private StackingTask stackingTask; private HologramHandler hologramHandler; - + + private ServerVersion serverVersion = ServerVersion.fromPackageName(Bukkit.getServer().getClass().getPackage().getName()); private Storage storage; public void onDisable() { @@ -265,6 +268,22 @@ public class UltimateStacker extends JavaPlugin { return null; } + public ServerVersion getServerVersion() { + return serverVersion; + } + + public boolean isServerVersion(ServerVersion version) { + return serverVersion == version; + } + + public boolean isServerVersion(ServerVersion... versions) { + return ArrayUtils.contains(versions, serverVersion); + } + + public boolean isServerVersionAtLeast(ServerVersion version) { + return serverVersion.ordinal() >= version.ordinal(); + } + public HologramHandler getHologramHandler() { return hologramHandler; } diff --git a/src/main/java/com/songoda/ultimatestacker/events/BlockListeners.java b/src/main/java/com/songoda/ultimatestacker/events/BlockListeners.java index dfb66f7..3d20178 100644 --- a/src/main/java/com/songoda/ultimatestacker/events/BlockListeners.java +++ b/src/main/java/com/songoda/ultimatestacker/events/BlockListeners.java @@ -33,9 +33,9 @@ public class BlockListeners implements Listener { public void onSpawnerInteract(PlayerInteractEvent event) { Block block = event.getClickedBlock(); Player player = event.getPlayer(); - ItemStack item = event.getPlayer().getInventory().getItemInMainHand(); + ItemStack item = event.getPlayer().getInventory().getItemInHand(); - if (block == null || item == null || block.getType() != Material.SPAWNER || item.getType() != Material.SPAWNER || event.getAction() == Action.LEFT_CLICK_BLOCK) return; + if (block == null || item == null || block.getType() != Material.MOB_SPAWNER || item.getType() != Material.MOB_SPAWNER || event.getAction() == Action.LEFT_CLICK_BLOCK) return; if (!instance.getConfig().getBoolean("Main.Stack Spawners")) return; @@ -85,7 +85,7 @@ public class BlockListeners implements Listener { public void onSpawnerPlace(BlockPlaceEvent event) { Block block = event.getBlock(); - if (block == null || block.getType() != Material.SPAWNER) return; + if (block == null || block.getType() != Material.MOB_SPAWNER) return; if (!instance.getConfig().getBoolean("Main.Stack Spawners")) return; @@ -98,7 +98,7 @@ public class BlockListeners implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onBlockBreak(BlockBreakEvent event) { Block block = event.getBlock(); - if (block.getType() != Material.SPAWNER) return; + if (block.getType() != Material.MOB_SPAWNER) return; if (!instance.getConfig().getBoolean("Main.Stack Spawners")) return; @@ -107,7 +107,7 @@ public class BlockListeners implements Listener { EntityType blockType = cs.getSpawnedType(); Player player = event.getPlayer(); - ItemStack item = player.getInventory().getItemInMainHand(); + ItemStack item = player.getInventory().getItemInHand(); SpawnerStack stack = instance.getSpawnerStackManager().getSpawner(block); diff --git a/src/main/java/com/songoda/ultimatestacker/spawner/SpawnerStack.java b/src/main/java/com/songoda/ultimatestacker/spawner/SpawnerStack.java index 7ac1abe..946becd 100644 --- a/src/main/java/com/songoda/ultimatestacker/spawner/SpawnerStack.java +++ b/src/main/java/com/songoda/ultimatestacker/spawner/SpawnerStack.java @@ -1,8 +1,15 @@ package com.songoda.ultimatestacker.spawner; +import com.songoda.ultimatestacker.UltimateStacker; +import com.songoda.ultimatestacker.utils.Reflection; +import com.songoda.ultimatestacker.utils.ServerVersion; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.block.CreatureSpawner; +import java.lang.reflect.Field; +import java.lang.reflect.Method; + public class SpawnerStack { private final Location location; @@ -25,7 +32,11 @@ public class SpawnerStack { this.amount = amount; CreatureSpawner creatureSpawner = (CreatureSpawner)location.getBlock().getState(); - creatureSpawner.setSpawnCount(4 * amount); + if (UltimateStacker.getInstance().isServerVersionAtLeast(ServerVersion.V1_12)) { + creatureSpawner.setSpawnCount(4 * amount); + } else { + Reflection.setRange(creatureSpawner, 4 * amount); + } creatureSpawner.update(); } diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java b/src/main/java/com/songoda/ultimatestacker/utils/Methods.java index aa30133..a340e72 100644 --- a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java +++ b/src/main/java/com/songoda/ultimatestacker/utils/Methods.java @@ -98,7 +98,7 @@ public class Methods { } public static ItemStack getSpawnerItem(EntityType entityType, int amount) { - ItemStack item = new ItemStack(Material.SPAWNER, 1); + ItemStack item = new ItemStack(Material.MOB_SPAWNER, 1); ItemMeta meta = item.getItemMeta(); meta.setDisplayName(Methods.compileSpawnerName(entityType, amount)); CreatureSpawner cs = (CreatureSpawner) ((BlockStateMeta)meta).getBlockState(); diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Reflection.java b/src/main/java/com/songoda/ultimatestacker/utils/Reflection.java new file mode 100644 index 0000000..5a0883c --- /dev/null +++ b/src/main/java/com/songoda/ultimatestacker/utils/Reflection.java @@ -0,0 +1,39 @@ +package com.songoda.ultimatestacker.utils; + +import org.bukkit.Bukkit; +import org.bukkit.block.CreatureSpawner; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class Reflection { + private static Class clazzCraftCreatureSpawner, clazzTileEntityMobSpawner = null; + private static Method methodGetTileEntity, methodGetSpawner; + private static Field fieldSpawnRange; + + public static CreatureSpawner setRange(CreatureSpawner creatureSpawner, int amount) { + try { + if (clazzCraftCreatureSpawner == null) { + String ver = Bukkit.getServer().getClass().getPackage().getName().substring(23); + clazzCraftCreatureSpawner = Class.forName("org.bukkit.craftbukkit." + ver + ".block.CraftCreatureSpawner"); + clazzTileEntityMobSpawner = Class.forName("net.minecraft.server." + ver + ".TileEntityMobSpawner"); + Class clazzMobSpawnerAbstract = Class.forName("net.minecraft.server." + ver + ".MobSpawnerAbstract"); + methodGetTileEntity = clazzCraftCreatureSpawner.getDeclaredMethod("getTileEntity"); + methodGetSpawner = clazzTileEntityMobSpawner.getDeclaredMethod("getSpawner"); + fieldSpawnRange = clazzMobSpawnerAbstract.getDeclaredField("spawnRange"); + fieldSpawnRange.setAccessible(true); + } + + Object objCraftCreatureSpawner = clazzCraftCreatureSpawner.cast(creatureSpawner); + Object objTileEntityMobSpawner = clazzTileEntityMobSpawner.cast(methodGetTileEntity.invoke(objCraftCreatureSpawner)); + Object objMobSpawnerAbstract = methodGetSpawner.invoke(objTileEntityMobSpawner); + fieldSpawnRange.set(objMobSpawnerAbstract, amount); + + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } + return creatureSpawner; + } + + +} diff --git a/src/main/java/com/songoda/ultimatestacker/utils/ServerVersion.java b/src/main/java/com/songoda/ultimatestacker/utils/ServerVersion.java new file mode 100644 index 0000000..f7579d0 --- /dev/null +++ b/src/main/java/com/songoda/ultimatestacker/utils/ServerVersion.java @@ -0,0 +1,26 @@ +package com.songoda.ultimatestacker.utils; + +public enum ServerVersion { + + UNKNOWN("unknown_server_version"), + V1_7("org.bukkit.craftbukkit.v1_7"), + V1_8("org.bukkit.craftbukkit.v1_8"), + V1_9("org.bukkit.craftbukkit.v1_9"), + V1_10("org.bukkit.craftbukkit.v1_10"), + V1_11("org.bukkit.craftbukkit.v1_11"), + V1_12("org.bukkit.craftbukkit.v1_12"), + V1_13("org.bukkit.craftbukkit.v1_13"); + + + private final String packagePrefix; + + private ServerVersion(String packagePrefix) { + this.packagePrefix = packagePrefix; + } + + public static ServerVersion fromPackageName(String packageName) { + for (ServerVersion version : values()) + if (packageName.startsWith(version.packagePrefix)) return version; + return ServerVersion.UNKNOWN; + } +} \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d2cc8fe..61e1e00 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,6 @@ version: 1 depend: [Arconix] main: com.songoda.ultimatestacker.UltimateStacker author: songoda -api-version: 1.13 commands: UltimateStacker: description: I have no idea.