diff --git a/pom.xml b/pom.xml index 9ef5b81b..70124df3 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,11 @@ leaderheads 1.0 + + com.songoda + epicspawners + LATEST + org.spigotmc spigot diff --git a/src/main/java/me/goodandevil/skyblock/levelling/LevellingManager.java b/src/main/java/me/goodandevil/skyblock/levelling/LevellingManager.java index b00dd663..6d812765 100644 --- a/src/main/java/me/goodandevil/skyblock/levelling/LevellingManager.java +++ b/src/main/java/me/goodandevil/skyblock/levelling/LevellingManager.java @@ -1,21 +1,5 @@ package me.goodandevil.skyblock.levelling; -import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; - -import org.bukkit.Bukkit; -import org.bukkit.ChunkSnapshot; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitRunnable; - import me.goodandevil.skyblock.SkyBlock; import me.goodandevil.skyblock.api.event.island.IslandLevelChangeEvent; import me.goodandevil.skyblock.config.FileManager.Config; @@ -26,197 +10,225 @@ import me.goodandevil.skyblock.utils.version.Materials; import me.goodandevil.skyblock.utils.version.NMSUtil; import me.goodandevil.skyblock.utils.version.Sounds; import me.goodandevil.skyblock.world.WorldManager; +import org.bukkit.Bukkit; +import org.bukkit.ChunkSnapshot; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +import java.io.File; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; public class LevellingManager { - private final SkyBlock skyblock; + private final SkyBlock skyblock; - private List materialStorage = new ArrayList<>(); + private List materialStorage = new ArrayList<>(); - public LevellingManager(SkyBlock skyblock) { - this.skyblock = skyblock; + public LevellingManager(SkyBlock skyblock) { + this.skyblock = skyblock; - registerMaterials(); - } + registerMaterials(); + } - public void calculatePoints(Player player, Island island) { - WorldManager worldManager = skyblock.getWorldManager(); + public void calculatePoints(Player player, Island island) { + WorldManager worldManager = skyblock.getWorldManager(); - Chunk chunk = new Chunk(skyblock, island); - chunk.prepare(); + Chunk chunk = new Chunk(skyblock, island); + chunk.prepare(); - int NMSVersion = NMSUtil.getVersionNumber(); + int NMSVersion = NMSUtil.getVersionNumber(); - new BukkitRunnable() { - @SuppressWarnings("deprecation") - @Override - public void run() { - if (chunk.isComplete()) { - cancel(); + new BukkitRunnable() { + @SuppressWarnings("deprecation") + @Override + public void run() { + if (!chunk.isComplete()) return; + cancel(); - Map materials = new HashMap<>(); + Map materials = new HashMap<>(); - Method getBlockTypeMethod = null; - Method getBlockTypeIdMethod = null; - Method getBlockTypeDataMethod = null; - Method getMaterialMethod = null; + Method getBlockTypeMethod = null; + Method getBlockTypeIdMethod = null; + Method getBlockTypeDataMethod = null; + Method getMaterialMethod = null; - int worldMaxHeight = 0; + int worldMaxHeight = 0; - for (IslandWorld worldList : IslandWorld.values()) { - org.bukkit.World world = worldManager.getWorld(worldList); + for (IslandWorld worldList : IslandWorld.values()) { + org.bukkit.World world = worldManager.getWorld(worldList); - if (worldMaxHeight == 0 || worldMaxHeight > world.getMaxHeight()) { - worldMaxHeight = world.getMaxHeight(); - } - } + if (worldMaxHeight == 0 || worldMaxHeight > world.getMaxHeight()) { + worldMaxHeight = world.getMaxHeight(); + } + } - for (ChunkSnapshot chunkSnapshotList : chunk.getChunkSnapshots()) { - for (int x = 0; x < 16; x++) { - for (int z = 0; z < 16; z++) { - for (int y = 0; y < worldMaxHeight; y++) { - try { - org.bukkit.Material blockMaterial = org.bukkit.Material.AIR; - int blockData = 0; + for (ChunkSnapshot chunkSnapshotList : chunk.getChunkSnapshots()) { + for (int x = 0; x < 16; x++) { + for (int z = 0; z < 16; z++) { + for (int y = 0; y < worldMaxHeight; y++) { + try { + org.bukkit.Material blockMaterial = org.bukkit.Material.AIR; + int blockData = 0; - if (NMSVersion > 12) { - if (getBlockTypeMethod == null) { - getBlockTypeMethod = chunkSnapshotList.getClass() - .getMethod("getBlockType", int.class, int.class, int.class); - } + if (NMSVersion > 12) { + if (getBlockTypeMethod == null) { + getBlockTypeMethod = chunkSnapshotList.getClass() + .getMethod("getBlockType", int.class, int.class, int.class); + } - blockMaterial = (org.bukkit.Material) getBlockTypeMethod - .invoke(chunkSnapshotList, x, y, z); - } else { - if (getBlockTypeIdMethod == null) { - getBlockTypeIdMethod = chunkSnapshotList.getClass() - .getMethod("getBlockTypeId", int.class, int.class, int.class); - } + blockMaterial = (org.bukkit.Material) getBlockTypeMethod + .invoke(chunkSnapshotList, x, y, z); + } else { + if (getBlockTypeIdMethod == null) { + getBlockTypeIdMethod = chunkSnapshotList.getClass() + .getMethod("getBlockTypeId", int.class, int.class, int.class); + } - if (getBlockTypeDataMethod == null) { - getBlockTypeDataMethod = chunkSnapshotList.getClass() - .getMethod("getBlockData", int.class, int.class, int.class); - } + if (getBlockTypeDataMethod == null) { + getBlockTypeDataMethod = chunkSnapshotList.getClass() + .getMethod("getBlockData", int.class, int.class, int.class); + } - if (getMaterialMethod == null) { - getMaterialMethod = blockMaterial.getClass().getMethod("getMaterial", - int.class); - } + if (getMaterialMethod == null) { + getMaterialMethod = blockMaterial.getClass().getMethod("getMaterial", + int.class); + } - blockMaterial = (org.bukkit.Material) getMaterialMethod.invoke( - blockMaterial, - (int) getBlockTypeIdMethod.invoke(chunkSnapshotList, x, y, z)); - blockData = (int) getBlockTypeDataMethod.invoke(chunkSnapshotList, x, y, z); - } + blockMaterial = (org.bukkit.Material) getMaterialMethod.invoke( + blockMaterial, + (int) getBlockTypeIdMethod.invoke(chunkSnapshotList, x, y, z)); + blockData = (int) getBlockTypeDataMethod.invoke(chunkSnapshotList, x, y, z); + } - if (blockMaterial != org.bukkit.Material.AIR) { - for (Material materialList : materialStorage) { - if (materialList == null) continue; - ItemStack is = materialList.getItemStack(); + if (blockMaterial == org.bukkit.Material.AIR) continue; - if (blockMaterial == materialList.getItemStack().getType()) { - if (NMSVersion < 13) { - if (!(blockData == is.getDurability())) { - continue; - } - } + for (Material materialList : materialStorage) { + if (materialList == null) continue; + ItemStack is = materialList.getItemStack(); - if (materials.containsKey(materialList.getMaterials().name())) { - materials.put(materialList.getMaterials().name(), - materials.get(materialList.getMaterials().name()) + 1); - } else { - materials.put(materialList.getMaterials().name(), 1); - } - } - } - } - } catch (IllegalAccessException | IllegalArgumentException - | InvocationTargetException | NoSuchMethodException | SecurityException e) { - e.printStackTrace(); - } - } - } - } - } + if (blockMaterial != materialList.getItemStack().getType()) continue; + if (NMSVersion < 13) { + if (!(blockData == is.getDurability())) { + continue; + } + } - if (materials.size() == 0) { - if (player != null) { - skyblock.getMessageManager().sendMessage(player, skyblock.getFileManager() - .getConfig(new File(skyblock.getDataFolder(), "language.yml")) - .getFileConfiguration().getString("Command.Island.Level.Materials.Message")); - skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); - } - } else { - IslandLevel level = island.getLevel(); - level.setLastCalculatedPoints(level.getPoints()); - level.setLastCalculatedLevel(level.getLevel()); - level.setMaterials(materials); + int amount = 1; + if (blockMaterial == Materials.SPAWNER.parseMaterial() + && Bukkit.getPluginManager().isPluginEnabled("EpicSpawners")) { + World world = Bukkit.getWorld(chunkSnapshotList.getWorldName()); + com.songoda.epicspawners.api.EpicSpawners epicSpawners = + com.songoda.epicspawners.api.EpicSpawnersAPI.getImplementation(); + Location location = new Location(world, chunkSnapshotList.getX() * 16 + x, y, chunkSnapshotList.getZ() * 16 + z); + if (epicSpawners.getSpawnerManager().isSpawner(location)) { + amount = epicSpawners.getSpawnerManager() + .getSpawnerFromWorld(location).getSpawnerDataCount(); + } + } - Bukkit.getServer().getPluginManager().callEvent( - new IslandLevelChangeEvent(island.getAPIWrapper(), island.getAPIWrapper().getLevel())); + if (materials.containsKey(materialList.getMaterials().name())) { + materials.put(materialList.getMaterials().name(), + materials.get(materialList.getMaterials().name()) + amount); + } else { + materials.put(materialList.getMaterials().name(), amount); + } + } + } catch (IllegalAccessException | IllegalArgumentException + | InvocationTargetException | NoSuchMethodException | SecurityException e) { + e.printStackTrace(); + } + } + } + } + } - if (player != null) { - me.goodandevil.skyblock.menus.Levelling.getInstance().open(player); - } - } - } - } - }.runTaskTimerAsynchronously(skyblock, 0L, 1L); - } + if (materials.size() == 0) { + if (player != null) { + skyblock.getMessageManager().sendMessage(player, skyblock.getFileManager() + .getConfig(new File(skyblock.getDataFolder(), "language.yml")) + .getFileConfiguration().getString("Command.Island.Level.Materials.Message")); + skyblock.getSoundManager().playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); + } + } else { + IslandLevel level = island.getLevel(); + level.setLastCalculatedPoints(level.getPoints()); + level.setLastCalculatedLevel(level.getLevel()); + level.setMaterials(materials); - public void registerMaterials() { - Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "levelling.yml")); - FileConfiguration configLoad = config.getFileConfiguration(); + Bukkit.getServer().getPluginManager().callEvent( + new IslandLevelChangeEvent(island.getAPIWrapper(), island.getAPIWrapper().getLevel())); - if (configLoad.getString("Materials") != null) { - for (String materialList : configLoad.getConfigurationSection("Materials").getKeys(false)) { - try { - Materials materials = Materials.fromString(materialList); + if (player != null) { + me.goodandevil.skyblock.menus.Levelling.getInstance().open(player); + } + } + } + }.runTaskTimerAsynchronously(skyblock, 0L, 1L); + } - if (!containsMaterials(materials)) { - addMaterial(materials, configLoad.getInt("Materials." + materialList + ".Points")); - } - } catch (Exception e) { - Bukkit.getServer().getLogger().log(Level.WARNING, "SkyBlock | Error: The material '" + materialList - + "' is not a Material type. Make sure the material name is a 1.13 material name. Please correct this in the 'levelling.yml' file."); - } - } - } - } + public void registerMaterials() { + Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "levelling.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); - public void unregisterMaterials() { - materialStorage.clear(); - } + if (configLoad.getString("Materials") != null) { + for (String materialList : configLoad.getConfigurationSection("Materials").getKeys(false)) { + try { + Materials materials = Materials.fromString(materialList); - public void addMaterial(Materials materials, int points) { - materialStorage.add(new Material(materials, points)); - } + if (!containsMaterials(materials)) { + addMaterial(materials, configLoad.getInt("Materials." + materialList + ".Points")); + } + } catch (Exception e) { + Bukkit.getServer().getLogger().log(Level.WARNING, "SkyBlock | Error: The material '" + materialList + + "' is not a Material type. Make sure the material name is a 1.13 material name. Please correct this in the 'levelling.yml' file."); + } + } + } + } - public void removeMaterial(Material material) { - materialStorage.remove(material); - } + public void unregisterMaterials() { + materialStorage.clear(); + } - public boolean containsMaterials(Materials materials) { - for (Material materialList : materialStorage) { - if (materialList.getMaterials().name().equals(materials.name())) { - return true; - } - } + public void addMaterial(Materials materials, int points) { + materialStorage.add(new Material(materials, points)); + } - return false; - } + public void removeMaterial(Material material) { + materialStorage.remove(material); + } - public Material getMaterial(Materials materials) { - for (Material materialList : materialStorage) { - if (materialList.getMaterials().name().equals(materials.name())) { - return materialList; - } - } + public boolean containsMaterials(Materials materials) { + for (Material materialList : materialStorage) { + if (materialList.getMaterials().name().equals(materials.name())) { + return true; + } + } - return null; - } + return false; + } - public List getMaterials() { - return materialStorage; - } + public Material getMaterial(Materials materials) { + for (Material materialList : materialStorage) { + if (materialList.getMaterials().name().equals(materials.name())) { + return materialList; + } + } + + return null; + } + + public List getMaterials() { + return materialStorage; + } } diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Block.java b/src/main/java/me/goodandevil/skyblock/listeners/Block.java index 96ede4c9..91bb3caf 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Block.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Block.java @@ -105,6 +105,8 @@ public class Block implements Listener { @SuppressWarnings("deprecation") Materials materials = Materials.getMaterials(block.getType(), block.getData()); + Bukkit.broadcastMessage("testt"); + if (materials == null) return; IslandLevel level = island.getLevel(); @@ -169,7 +171,8 @@ public class Block implements Listener { } } - if (event.isCancelled() || configLoad.getBoolean("Island.Block.Level.Enable")) return; + if (event.isCancelled() || !configLoad.getBoolean("Island.Block.Level.Enable")) return; + @SuppressWarnings("deprecation") Materials materials = Materials.getMaterials(block.getType(), block.getData()); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index cd2028b2..0bdeebfb 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -198,7 +198,7 @@ Island: Level: # When enabled, any changes to a block will be made to the levelling materials # calculated for an island. - Enable: false + Enable: true Piston: # Prevent Piston blocks being retracted or extended when connected to a circuit # [!] Prevents Pistons extending out of Island border bug