diff --git a/pom.xml b/pom.xml index f5f8a505..2f082082 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.songoda skyblock - 2.2.1 + 2.2.2 clean install FabledSkyblock-${project.version} diff --git a/src/main/java/com/songoda/skyblock/api/structure/Structure.java b/src/main/java/com/songoda/skyblock/api/structure/Structure.java index 7d84f148..7f1f6e04 100644 --- a/src/main/java/com/songoda/skyblock/api/structure/Structure.java +++ b/src/main/java/com/songoda/skyblock/api/structure/Structure.java @@ -8,9 +8,9 @@ public interface Structure { String getName(); - CompatibleMaterial getMaterials(); + CompatibleMaterial getMaterial(); - void setMaterials(CompatibleMaterial materials); + void setMaterial(CompatibleMaterial material); String getOverworldFile(); diff --git a/src/main/java/com/songoda/skyblock/blockscanner/BlockScanner.java b/src/main/java/com/songoda/skyblock/blockscanner/BlockScanner.java index 345a529d..0dac9ab7 100644 --- a/src/main/java/com/songoda/skyblock/blockscanner/BlockScanner.java +++ b/src/main/java/com/songoda/skyblock/blockscanner/BlockScanner.java @@ -93,7 +93,7 @@ public final class BlockScanner extends BukkitRunnable { final ConfigurationSection liquidSection = config.getConfigurationSection("Island.World." + env + ".Liquid"); for (List sub : parts) { - queueWork(world, liquidSection.getBoolean("Enable") ? liquidSection.getInt("Height") + 1 : 0, sub); + queueWork(world, liquidSection.getBoolean("Enable") && !config.getBoolean("Island.Levelling.ScanLiquid") ? liquidSection.getInt("Height") + 1 : 0, sub); } } @@ -114,9 +114,9 @@ public final class BlockScanner extends BukkitRunnable { for (int z = 0; z < 16; z++) { for (int y = scanY; y < 256; y++) { - final Material type = VERSION > 12 ? shot.getBlockType(x, y, z) : MaterialIDHelper.getLegacyMaterial(getBlockTypeID(shot, x, y, z)); + final CompatibleMaterial type = CompatibleMaterial.getMaterial(shot.getBlockType(x, y, z)); - if (type == Material.AIR) continue; + if (type == CompatibleMaterial.AIR || type == CompatibleMaterial.WATER) continue; blocks.add(new BlockInfo(world, x + (cX), y, z + (cZ))); } diff --git a/src/main/java/com/songoda/skyblock/challenge/challenge/Challenge.java b/src/main/java/com/songoda/skyblock/challenge/challenge/Challenge.java index 16306683..2ccb1a0d 100644 --- a/src/main/java/com/songoda/skyblock/challenge/challenge/Challenge.java +++ b/src/main/java/com/songoda/skyblock/challenge/challenge/Challenge.java @@ -257,9 +257,6 @@ public class Challenge { throw new IllegalArgumentException( "\"" + id + "\" isn't a correct Minecraft EntityType (value = \"" + value + "\")"); } - if (et == null) - throw new IllegalArgumentException( - "\"" + id + "\" isn't a correct Minecraft EntityType (value = \"" + value + "\")"); int amount = 1; if (index != -1) { String strAmount = value.substring(index + 1); diff --git a/src/main/java/com/songoda/skyblock/challenge/challenge/ChallengeCategory.java b/src/main/java/com/songoda/skyblock/challenge/challenge/ChallengeCategory.java index 7da312e4..709e3c2a 100644 --- a/src/main/java/com/songoda/skyblock/challenge/challenge/ChallengeCategory.java +++ b/src/main/java/com/songoda/skyblock/challenge/challenge/ChallengeCategory.java @@ -68,7 +68,7 @@ public class ChallengeCategory { + ") at challenge " + name + "(" + id + "): " + ex.getMessage()); } } - Bukkit.getLogger().info("[FabledSkyBlock] " + ChatColor.GREEN + " Category " + name + ChatColor.GREEN + Bukkit.getConsoleSender().sendMessage("[FabledSkyBlock] " + ChatColor.GREEN + "Category " + name + ChatColor.GREEN + " loaded with " + ChatColor.GOLD + challenges.size() + ChatColor.GREEN + " challenges"); } diff --git a/src/main/java/com/songoda/skyblock/challenge/challenge/ChallengeManager.java b/src/main/java/com/songoda/skyblock/challenge/challenge/ChallengeManager.java index b0114f4a..96008a7d 100644 --- a/src/main/java/com/songoda/skyblock/challenge/challenge/ChallengeManager.java +++ b/src/main/java/com/songoda/skyblock/challenge/challenge/ChallengeManager.java @@ -4,6 +4,7 @@ import java.io.File; import java.util.HashMap; import java.util.logging.Level; +import com.songoda.core.compatibility.CompatibleMaterial; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.configuration.ConfigurationSection; @@ -40,7 +41,7 @@ public class ChallengeManager { Bukkit.getLogger().log(Level.SEVERE, "Error while loading challenges:", ex); return; } - Bukkit.getLogger().info("[FabledSkyBlock] " + ChatColor.GREEN + " challenges loaded with " + ChatColor.GOLD + Bukkit.getConsoleSender().sendMessage("[FabledSkyBlock] " + ChatColor.GREEN + " challenges loaded with " + ChatColor.GOLD + categories.size() + ChatColor.GREEN + " categories"); } diff --git a/src/main/java/com/songoda/skyblock/challenge/defaultinv/DefaultInventory.java b/src/main/java/com/songoda/skyblock/challenge/defaultinv/DefaultInventory.java index 8adf7340..b53a49ee 100644 --- a/src/main/java/com/songoda/skyblock/challenge/defaultinv/DefaultInventory.java +++ b/src/main/java/com/songoda/skyblock/challenge/defaultinv/DefaultInventory.java @@ -4,6 +4,7 @@ import java.io.File; import java.util.ArrayList; import java.util.List; +import com.songoda.core.compatibility.CompatibleMaterial; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -38,13 +39,14 @@ public class DefaultInventory { String name = ChatColor.translateAlternateColorCodes('&', configLoad.getString(k + ".name")); List lore = toColor(configLoad.getStringList(k + ".lore")); int redirect = configLoad.getInt(k + ".redirect"); - Material item = Material.matchMaterial(strItem); - if (item == null || item == Material.AIR) { + CompatibleMaterial material = CompatibleMaterial.getMaterial(strItem); + if (material == null || material == CompatibleMaterial.AIR) { Bukkit.getLogger().warning("Item " + strItem + " is not a Material"); continue; } - ItemStack is = new ItemStack(item, amount); + ItemStack is = material.getItem(); + is.setAmount(amount); ItemMeta im = is.getItemMeta(); im.setDisplayName(name); im.setLore(lore); diff --git a/src/main/java/com/songoda/skyblock/challenge/inventory/inv/ChallengeInventory.java b/src/main/java/com/songoda/skyblock/challenge/inventory/inv/ChallengeInventory.java index c1043c13..9d956657 100644 --- a/src/main/java/com/songoda/skyblock/challenge/inventory/inv/ChallengeInventory.java +++ b/src/main/java/com/songoda/skyblock/challenge/inventory/inv/ChallengeInventory.java @@ -100,7 +100,7 @@ public class ChallengeInventory implements InventoryProvider { // Update inv.updateItem(ic.getCol(), ic.getRow(), is2); } else - p.playSound(p.getLocation(), Sound.BLOCK_GLASS_BREAK, 1, 1); + p.playSound(p.getLocation(), CompatibleSound.BLOCK_GLASS_BREAK.getSound(), 1, 1); }; inv.set(ic.getCol(), ic.getRow(), ClickableItem.of(is, consumer)); } diff --git a/src/main/java/com/songoda/skyblock/levelling/rework/IslandLevelManager.java b/src/main/java/com/songoda/skyblock/levelling/rework/IslandLevelManager.java index 4c0640cd..ecda1a27 100644 --- a/src/main/java/com/songoda/skyblock/levelling/rework/IslandLevelManager.java +++ b/src/main/java/com/songoda/skyblock/levelling/rework/IslandLevelManager.java @@ -39,19 +39,6 @@ import com.songoda.skyblock.utils.version.NMSUtil; public final class IslandLevelManager { - private static final Set CHECKED_DOUBLE_TYPES; - - static { - CHECKED_DOUBLE_TYPES = EnumSet.noneOf(Material.class); - - CHECKED_DOUBLE_TYPES.add(CompatibleMaterial.SUNFLOWER.getMaterial()); - CHECKED_DOUBLE_TYPES.add(CompatibleMaterial.LILAC.getMaterial()); - CHECKED_DOUBLE_TYPES.add(CompatibleMaterial.LARGE_FERN.getMaterial()); - CHECKED_DOUBLE_TYPES.add(CompatibleMaterial.ROSE_BUSH.getMaterial()); - CHECKED_DOUBLE_TYPES.add(CompatibleMaterial.PEONY.getMaterial()); - CHECKED_DOUBLE_TYPES.add(CompatibleMaterial.TALL_GRASS.getMaterial()); - } - private final static int VERSION = NMSUtil.getVersionNumber(); private Map inScan; private Map worth; @@ -65,14 +52,6 @@ public final class IslandLevelManager { reloadWorth(); } - public static boolean isDoubleCheckedBlock(Block block) { - return CHECKED_DOUBLE_TYPES.contains(parseType(block)); - } - - private static CompatibleMaterial parseType(Block block) { - return CompatibleMaterial.getBlockMaterial(block.getType()); - } - public void startScan(Player attemptScanner, Island island) { if (!Bukkit.isPrimaryThread()) { @@ -185,52 +164,44 @@ public final class IslandLevelManager { if (blockType == CompatibleMaterial.AIR) return EMPTY; - CompatibleMaterial compMaterial = parseType(block); + CompatibleMaterial compMaterial = CompatibleMaterial.getMaterial(block); if (compMaterial == null) return EMPTY; - Material finalType = compMaterial.getMaterial(); - - if (finalType == null) return EMPTY; - final Location blockLocation = block.getLocation(); if (scan.getDoubleBlocks().contains(blockLocation)) return EMPTY; - if (CHECKED_DOUBLE_TYPES.contains(finalType)) { - + if (compMaterial.isTall()) { final Block belowBlock = block.getRelative(BlockFace.DOWN); - final CompatibleMaterial belowType = parseType(belowBlock); + final CompatibleMaterial belowMaterial = CompatibleMaterial.getMaterial(belowBlock); - if (CHECKED_DOUBLE_TYPES.contains(belowType)) { + if (belowMaterial.isTall()) { block = belowBlock; - blockType = belowType; + blockType = belowMaterial; scan.getDoubleBlocks().add(belowBlock.getLocation()); } else { scan.getDoubleBlocks().add(block.getRelative(BlockFace.UP).getLocation()); } - } else if (finalType == CompatibleMaterial.SPAWNER.getBlockMaterial()) { - finalType = CompatibleSpawners.getSpawner(((CreatureSpawner) block.getState()).getSpawnedType()).getMaterial(); } final List calculators = CalculatorRegistry.getCalculators(blockType); final StackableManager stackableManager = SkyBlock.getInstance().getStackableManager(); - final CompatibleMaterial finalCompatMat = CompatibleMaterial.getMaterial(finalType); - final long stackSize = stackableManager == null ? 0 : stackableManager.getStackSizeOf(blockLocation, finalCompatMat); + final long stackSize = stackableManager == null ? 0 : stackableManager.getStackSizeOf(blockLocation, compMaterial); if (calculators == null) { - if (stackSize > 1) return new AmountMaterialPair(finalCompatMat, stackSize); + if (stackSize > 1) return new AmountMaterialPair(compMaterial, stackSize); - AmountMaterialPair cachedPair = cachedPairs.get(finalType); + AmountMaterialPair cachedPair = cachedPairs.get(compMaterial); if (cachedPair != null) return cachedPair; - cachedPair = new AmountMaterialPair(finalCompatMat, 1); - cachedPairs.put(finalCompatMat, cachedPair); + cachedPair = new AmountMaterialPair(compMaterial, 1); + cachedPairs.put(compMaterial, cachedPair); return cachedPair; } @@ -243,7 +214,7 @@ public final class IslandLevelManager { if (amount == 0) amount = 1; - return new AmountMaterialPair(finalCompatMat, amount + stackSize); + return new AmountMaterialPair(compMaterial, amount + stackSize); } } diff --git a/src/main/java/com/songoda/skyblock/listeners/Block.java b/src/main/java/com/songoda/skyblock/listeners/Block.java index bedd9e71..0efeab18 100644 --- a/src/main/java/com/songoda/skyblock/listeners/Block.java +++ b/src/main/java/com/songoda/skyblock/listeners/Block.java @@ -140,11 +140,11 @@ public class Block implements Listener { if (event.isCancelled() || !configLoad.getBoolean("Island.Block.Level.Enable")) return; - if (IslandLevelManager.isDoubleCheckedBlock(block)) { + if (CompatibleMaterial.getMaterial(block).isTall()) { final org.bukkit.block.Block belowBlock = block.getRelative(BlockFace.DOWN); - if (IslandLevelManager.isDoubleCheckedBlock(belowBlock)) { + if (CompatibleMaterial.getMaterial(belowBlock).isTall()) { block = belowBlock; } diff --git a/src/main/java/com/songoda/skyblock/menus/Creator.java b/src/main/java/com/songoda/skyblock/menus/Creator.java index 642fa591..28a6c0ef 100644 --- a/src/main/java/com/songoda/skyblock/menus/Creator.java +++ b/src/main/java/com/songoda/skyblock/menus/Creator.java @@ -101,7 +101,7 @@ public class Creator { ItemStack is = event.getItem(); for (Structure structureList : skyblock.getStructureManager().getStructures()) { - if ((is.getType() == structureList.getMaterials().getMaterial()) && (is.hasItemMeta()) + if ((is.getType() == structureList.getMaterial().getMaterial()) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName() .equals(ChatColor.translateAlternateColorCodes('&', configLoad .getString("Menu.Creator.Selector.Item.Island.Displayname") @@ -229,7 +229,7 @@ public class Creator { } } - nInv.addItem(nInv.createItem(structure.getMaterials().getItem(), + nInv.addItem(nInv.createItem(structure.getMaterial().getItem(), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Creator.Selector.Item.Island.Displayname") .replace("%displayname", structure.getDisplayname())), diff --git a/src/main/java/com/songoda/skyblock/menus/admin/Creator.java b/src/main/java/com/songoda/skyblock/menus/admin/Creator.java index 345870dd..ea06377c 100644 --- a/src/main/java/com/songoda/skyblock/menus/admin/Creator.java +++ b/src/main/java/com/songoda/skyblock/menus/admin/Creator.java @@ -106,7 +106,7 @@ public class Creator implements Listener { inventorySlot++; Structure structure = structures.get(index); - nInv.addItem(nInv.createItem(structure.getMaterials().getItem(), + nInv.addItem(nInv.createItem(structure.getMaterial().getItem(), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Creator.Browse.Item.Structure.Displayname") .replace("%structure", structure.getName())), @@ -235,7 +235,7 @@ public class Creator implements Listener { nInv.addItem(nInv.createItem(new ItemStack(CompatibleMaterial.DIAMOND.getMaterial()), configLoad.getString("Menu.Admin.Creator.Options.Item.Item.Displayname"), configLoad.getStringList("Menu.Admin.Creator.Options.Item.Item.Lore"), - new Placeholder[]{new Placeholder("%material", structure.getMaterials().name())}, null, null), + new Placeholder[]{new Placeholder("%material", structure.getMaterial().name())}, null, null), 6); nInv.addItem(nInv.createItem(new ItemStack(CompatibleMaterial.GOLD_NUGGET.getMaterial()), configLoad.getString("Menu.Admin.Creator.Options.Item.DeletionCost.Displayname"), @@ -1148,7 +1148,7 @@ public class Creator implements Listener { materials.getItem().setData(event.getCurrentItem().getData()); if (materials != null) { - structure.setMaterials(materials); + structure.setMaterial(materials); Bukkit.getServer().getScheduler().runTaskAsynchronously(skyblock, () -> { Config config113 = fileManager @@ -1156,7 +1156,7 @@ public class Creator implements Listener { FileConfiguration configLoad113 = config113.getFileConfiguration(); configLoad113.set("Structures." + structure.getName() + ".Item.Material", - structure.getMaterials().name()); + structure.getMaterial().name()); try { configLoad113.save(config113.getFile()); @@ -1193,7 +1193,7 @@ public class Creator implements Listener { if (is.hasItemMeta() && is.getItemMeta().hasDisplayName()) { for (Structure structureList : structureManager.getStructures()) { - if (event.getCurrentItem().getType() == structureList.getMaterials().getMaterial() + if (event.getCurrentItem().getType() == structureList.getMaterial().getMaterial() && ChatColor.stripColor(is.getItemMeta().getDisplayName()) .equals(structureList.getName())) { if (event.getClick() == ClickType.LEFT) { diff --git a/src/main/java/com/songoda/skyblock/structure/Structure.java b/src/main/java/com/songoda/skyblock/structure/Structure.java index b19b8e15..23523534 100644 --- a/src/main/java/com/songoda/skyblock/structure/Structure.java +++ b/src/main/java/com/songoda/skyblock/structure/Structure.java @@ -8,7 +8,7 @@ import java.util.List; public class Structure implements com.songoda.skyblock.api.structure.Structure { - private CompatibleMaterial materials; + private CompatibleMaterial material; private String name; private String overworldFile; @@ -23,11 +23,11 @@ public class Structure implements com.songoda.skyblock.api.structure.Structure { private double deletionCost; - public Structure(String name, CompatibleMaterial materials, String overworldFile, String netherFile, String endFile, + public Structure(String name, CompatibleMaterial material, String overworldFile, String netherFile, String endFile, String displayName, boolean permission, List description, List commands, double deletionCost) { this.name = name; - this.materials = materials; + this.material = material; this.overworldFile = overworldFile; this.netherFile = netherFile; this.endFile = endFile; @@ -42,12 +42,12 @@ public class Structure implements com.songoda.skyblock.api.structure.Structure { return name; } - public CompatibleMaterial getMaterials() { - return materials; + public CompatibleMaterial getMaterial() { + return material; } - public void setMaterials(CompatibleMaterial materials) { - this.materials = materials; + public void setMaterial(CompatibleMaterial material) { + this.material = material; } public String getOverworldFile() { diff --git a/src/main/java/com/songoda/skyblock/utils/structure/StructureUtil.java b/src/main/java/com/songoda/skyblock/utils/structure/StructureUtil.java index c471a427..08ac1456 100644 --- a/src/main/java/com/songoda/skyblock/utils/structure/StructureUtil.java +++ b/src/main/java/com/songoda/skyblock/utils/structure/StructureUtil.java @@ -4,6 +4,7 @@ import com.google.common.io.Files; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; +import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.skyblock.SkyBlock; import com.songoda.skyblock.config.FileManager; import com.songoda.skyblock.utils.Compression; @@ -18,16 +19,11 @@ import com.songoda.skyblock.utils.world.entity.EntityUtil; import java.io.FileInputStream; import java.util.Base64; -import net.minecraft.server.v1_15_R1.ChunkSection; -import net.minecraft.server.v1_15_R1.IBlockData; -import net.minecraft.server.v1_15_R1.World; -import net.minecraft.server.v1_15_R1.WorldServer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; @@ -58,22 +54,23 @@ public final class StructureUtil { String originBlockLocation = ""; - for (Block blockList : blocks.keySet()) { - Location location = blocks.get(blockList); + for (Block block : blocks.keySet()) { + Location location = blocks.get(block); + CompatibleMaterial material = CompatibleMaterial.getMaterial(block); if (location.isOriginLocation()) { originBlockLocation = location.getX() + ":" + location.getY() + ":" + location.getZ() + ":" + positions[0].getWorld().getName(); - if (blockList.getType() == Material.AIR) { - blockData.add(BlockUtil.convertBlockToBlockData(blockList, location.getX(), location.getY(), location.getZ())); + if (material == CompatibleMaterial.AIR) { + blockData.add(BlockUtil.convertBlockToBlockData(block, location.getX(), location.getY(), location.getZ())); } } - if (blockList.getType() == Material.AIR) { + if (material == CompatibleMaterial.AIR) { continue; } - blockData.add(BlockUtil.convertBlockToBlockData(blockList, location.getX(), location.getY(), location.getZ())); + blockData.add(BlockUtil.convertBlockToBlockData(block, location.getX(), location.getY(), location.getZ())); } for (Entity entityList : entities.keySet()) { @@ -174,13 +171,13 @@ public final class StructureUtil { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(SkyBlock.getInstance(), () -> { try { org.bukkit.Location blockRotationLocation = LocationUtil.rotateLocation(new org.bukkit.Location(location.getWorld(), blockDataList.getX(), blockDataList.getY(), blockDataList.getZ()), type); - org.bukkit.Location blockLocation = new org.bukkit.Location(location.getWorld(), location.getX() - Math.abs(Integer.valueOf(storage.getOriginLocation().split(":")[0])), - location.getY() - Integer.valueOf(storage.getOriginLocation().split(":")[1]), location.getZ() + Math.abs(Integer.valueOf(storage.getOriginLocation().split(":")[2]))); + org.bukkit.Location blockLocation = new org.bukkit.Location(location.getWorld(), location.getX() - Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[0])), + location.getY() - Integer.parseInt(storage.getOriginLocation().split(":")[1]), location.getZ() + Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[2]))); blockLocation.add(blockRotationLocation); BlockUtil.convertBlockDataToBlock(blockLocation.getBlock(), blockDataList); } catch (Exception e) { SkyBlock.getInstance().getLogger() - .warning("Unable to convert BlockData to Block for type {" + blockDataList.getMaterial() + ":" + blockDataList.getData() + "} in structure {" + structure.getStructureFile() + "}"); + .warning("Unable to convert BlockData to Block for type {" + blockDataList.getCompatibleMaterial() + ":" + blockDataList.getData() + "} in structure {" + structure.getStructureFile() + "}"); } }); } @@ -191,8 +188,8 @@ public final class StructureUtil { Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(SkyBlock.getInstance(), () -> { try { org.bukkit.Location blockRotationLocation = LocationUtil.rotateLocation(new org.bukkit.Location(location.getWorld(), entityDataList.getX(), entityDataList.getY(), entityDataList.getZ()), type); - org.bukkit.Location blockLocation = new org.bukkit.Location(location.getWorld(), location.getX() - Math.abs(Integer.valueOf(storage.getOriginLocation().split(":")[0])), - location.getY() - Integer.valueOf(storage.getOriginLocation().split(":")[1]), location.getZ() + Math.abs(Integer.valueOf(storage.getOriginLocation().split(":")[2]))); + org.bukkit.Location blockLocation = new org.bukkit.Location(location.getWorld(), location.getX() - Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[0])), + location.getY() - Integer.parseInt(storage.getOriginLocation().split(":")[1]), location.getZ() + Math.abs(Integer.parseInt(storage.getOriginLocation().split(":")[2]))); blockLocation.add(blockRotationLocation); EntityUtil.convertEntityDataToEntity(entityDataList, blockLocation, type); } catch (Exception e) { diff --git a/src/main/java/com/songoda/skyblock/utils/world/block/BlockData.java b/src/main/java/com/songoda/skyblock/utils/world/block/BlockData.java index 19ba9426..d9fcdf7d 100644 --- a/src/main/java/com/songoda/skyblock/utils/world/block/BlockData.java +++ b/src/main/java/com/songoda/skyblock/utils/world/block/BlockData.java @@ -1,10 +1,10 @@ package com.songoda.skyblock.utils.world.block; import com.songoda.core.compatibility.CompatibleMaterial; +import org.bukkit.Bukkit; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.SkullType; -import org.bukkit.block.Biome; import org.bukkit.block.BlockFace; import org.bukkit.entity.EntityType; import org.bukkit.potion.PotionEffectType; @@ -17,9 +17,9 @@ import java.util.Map; @SuppressWarnings("deprecation") public class BlockData { - private String material = Material.AIR.toString(); - private String blockData = ""; - private String biome = Biome.PLAINS.toString(); + private CompatibleMaterial compatibleMaterial; + private String material; + private String biome; private String stateType = BlockStateType.NORMAL.toString(); private String dataType = BlockDataType.NORMAL.toString(); private String baseColor = Color.WHITE.toString(); @@ -46,7 +46,7 @@ public class BlockData { private int fuelLevel = 0; private int delay = 0; - private byte data = (byte) 0; + private byte data; private short burnTime = (short) 0; private short cookTime = (short) 0; @@ -55,10 +55,8 @@ public class BlockData { private boolean exactTeleport = true; - public BlockData(String material, byte data, int x, int y, int z, String biome) { - this.material = material; - this.data = data; - + public BlockData(CompatibleMaterial material, int x, int y, int z, String biome) { + this.compatibleMaterial = material; this.x = x; this.y = y; this.z = z; @@ -66,20 +64,14 @@ public class BlockData { this.biome = biome; } - public String getMaterial() { - return this.material; + public CompatibleMaterial getCompatibleMaterial() { + if (compatibleMaterial == null) + return CompatibleMaterial.getMaterial(material); + return compatibleMaterial; } - public void setMaterial(String material) { - this.material = material; - } - - public String getBlockData() { - return blockData; - } - - public void setBlockData(String blockData) { - this.blockData = blockData; + public void setMaterial(CompatibleMaterial material) { + this.compatibleMaterial = material; } public String getBiome() { diff --git a/src/main/java/com/songoda/skyblock/utils/world/block/BlockUtil.java b/src/main/java/com/songoda/skyblock/utils/world/block/BlockUtil.java index 3ed8a741..9eab1af6 100644 --- a/src/main/java/com/songoda/skyblock/utils/world/block/BlockUtil.java +++ b/src/main/java/com/songoda/skyblock/utils/world/block/BlockUtil.java @@ -1,6 +1,7 @@ package com.songoda.skyblock.utils.world.block; import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.utils.BlockUtils; import com.songoda.skyblock.utils.item.ItemStackUtil; import com.songoda.skyblock.utils.version.NMSUtil; import org.bukkit.*; @@ -18,18 +19,14 @@ import java.util.ArrayList; import java.util.List; @SuppressWarnings("deprecation") -public final class BlockUtil { +public final class BlockUtil extends BlockUtils { public static BlockData convertBlockToBlockData(Block block, int x, int y, int z) { - BlockData blockData = new BlockData(block.getType().toString(), block.getData(), x, y, z, block.getBiome().toString()); + BlockData blockData = new BlockData(CompatibleMaterial.getMaterial(block), x, y, z, block.getBiome().toString()); int NMSVersion = NMSUtil.getVersionNumber(); blockData.setVersion(NMSVersion); - if (NMSVersion > 12) { - blockData.setBlockData(block.getBlockData().getAsString()); - } - BlockState blockState = block.getState(); MaterialData materialData = blockState.getData(); @@ -249,14 +246,10 @@ public final class BlockUtil { public static void convertBlockDataToBlock(Block block, BlockData blockData) { int NMSVersion = NMSUtil.getVersionNumber(); - Material material = null; + CompatibleMaterial material = blockData.getCompatibleMaterial(); + if (material == null) return; - if (NMSVersion > 12 && blockData.getVersion() > 12 && blockData.getBlockData() != null) { - block.setBlockData(Bukkit.getServer().createBlockData(blockData.getBlockData())); - } else { - material = CompatibleMaterial.getMaterial(blockData.getMaterial()).getMaterial(); - setBlockFast(block.getWorld(), block.getX(), block.getY(), block.getZ(), material, blockData.getData()); - } + setBlockFast(block.getWorld(), block.getX(), block.getY(), block.getZ(), material, blockData.getData()); // TODO Create a class to support biome changes // block.setBiome(Biome.valueOf(blockData.getBiome().toUpperCase())); @@ -420,9 +413,10 @@ public final class BlockUtil { stairs.setFacingDirection(BlockFace.valueOf(blockData.getFacing())); state.setData(stairs); } else if (blockDataType == BlockDataType.FLOWERPOT) { - if (NMSVersion >= 8 && NMSVersion <= 12) { + setBlockFast(block.getWorld(), block.getX(), block.getY() - 1, block.getZ(), CompatibleMaterial.STONE, (byte) 0); + if (NMSVersion >= 8 && NMSVersion <= 12) { if (block.getLocation().clone().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.AIR) { - setBlockFast(block.getWorld(), block.getX(), block.getY() - 1, block.getZ(), Material.STONE, (byte) 0); + setBlockFast(block.getWorld(), block.getX(), block.getY() - 1, block.getZ(), CompatibleMaterial.STONE, (byte) 0); } if (blockData.getFlower() != null && !blockData.getFlower().isEmpty()) { @@ -430,10 +424,10 @@ public final class BlockUtil { String[] flower = blockData.getFlower().split(":"); int materialData = Integer.parseInt(flower[1]); - material = CompatibleMaterial.getMaterial(flower[0].toUpperCase()).getMaterial(); + material = CompatibleMaterial.getMaterial(flower[0].toUpperCase()); if (material != null) { - ItemStack is = new ItemStack(material, 1, (byte) materialData); + ItemStack is = new ItemStack(material.getMaterial(), 1, (byte) materialData); World world = block.getWorld(); @@ -468,16 +462,16 @@ public final class BlockUtil { if (blockData.getVersion() > 12) { if (NMSVersion > 12) { - material = Material.valueOf(flower[0].toUpperCase()); + material = CompatibleMaterial.valueOf(flower[0].toUpperCase()); } } else { if (NMSVersion < 13) { - material = Material.valueOf(flower[0].toUpperCase()); + material = CompatibleMaterial.valueOf(flower[0].toUpperCase()); } } if (material != null) { - flowerPot.setContents(new MaterialData(material, (byte) Integer.parseInt(flower[1]))); + flowerPot.setContents(new MaterialData(material.getMaterial(), (byte) Integer.parseInt(flower[1]))); } state.setData(flowerPot); @@ -485,7 +479,7 @@ public final class BlockUtil { } } - if (blockData.getMaterial().equals("DOUBLE_PLANT")) { + if (blockData.getCompatibleMaterial().equals("DOUBLE_PLANT")) { Block topBlock = block.getLocation().add(0.0D, 1.0D, 0.0D).getBlock(); Block bottomBlock = block.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock(); @@ -516,36 +510,4 @@ public final class BlockUtil { return nearbyBlocks; } - - private static Class IBlockDataClass = NMSUtil.getNMSClass("IBlockData"); - private static Class blocksClass = NMSUtil.getNMSClass("Blocks"); - - - private static void setBlockFast(World world, int x, int y, int z, Material material, byte data) { - try { - Object worldHandle = world.getClass().getMethod("getHandle").invoke(world); - Object chunk = worldHandle.getClass().getMethod("getChunkAt", int.class, int.class).invoke(worldHandle, x >> 4, z >> 4); - Object blockPosition = NMSUtil.getNMSClass("BlockPosition").getConstructor(int.class, int.class, int.class).newInstance(x & 0xF, y, z & 0xF); - - if (NMSUtil.getVersionNumber() > 12) { - Object block = blocksClass.getField(material.name()).get(null); - Object IBlockData = block.getClass().getMethod("getBlockData").invoke(block); - worldHandle.getClass().getMethod("setTypeAndData", blockPosition.getClass(), IBlockDataClass, int.class).invoke(worldHandle, blockPosition, IBlockData, 2); - - try { - chunk.getClass().getMethod("a", blockPosition.getClass(), IBlockDataClass, boolean.class).invoke(chunk, blockPosition, IBlockData, true); - } catch (Exception ignored) { - chunk.getClass().getMethod("setType", blockPosition.getClass(), IBlockDataClass, boolean.class).invoke(chunk, blockPosition, IBlockData, true); - } - } else { - Object IBlockData = NMSUtil.getNMSClass("Block").getMethod("getByCombinedId", int.class).invoke(null, material.getId() + (data << 12)); - worldHandle.getClass().getMethod("setTypeAndData", blockPosition.getClass(), IBlockDataClass, int.class).invoke(worldHandle, blockPosition, IBlockData, 3); - chunk.getClass().getMethod("a", blockPosition.getClass(), IBlockDataClass).invoke(chunk, blockPosition, IBlockData); - } - } catch (Exception e) { - Block block = world.getBlockAt(x, y, z); - block.getState().setRawData(data); - block.setType(material); - } - } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 8d901432..47a08ba2 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -178,6 +178,8 @@ Island: # time cycle or be fixed. Cycle: false Levelling: + # Should the level scanner scan water? + ScanLiquid: false # Run a scan automatically when pasting an island structure ScanAutomatically: true # Include Points: 0 in the '/is level' GUI