From 5e3082c7d8b6b7b6ef5e7774349e3cb3da0d996c Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 5 Aug 2018 10:04:19 +1000 Subject: SPIGOT-4230: Improve legacy block types --- src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java | 2 +- src/main/java/org/bukkit/craftbukkit/util/Commodore.java | 3 ++- src/main/java/org/bukkit/craftbukkit/util/CraftEvil.java | 9 +++++++++ src/main/java/org/bukkit/craftbukkit/util/CraftLegacy.java | 10 +++++++++- 4 files changed, 21 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java index c48b394d..dfddbaf8 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -45,7 +45,7 @@ public class CraftBlock implements Block { return getNMS().getBlock(); } - protected net.minecraft.server.IBlockData getNMS() { + public net.minecraft.server.IBlockData getNMS() { return world.getType(position); } diff --git a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java index c31bb74d..d172a1ae 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java @@ -228,7 +228,8 @@ public class Commodore if ( EVIL.contains( owner + " " + desc + " " + name ) || ( owner.startsWith( "org/bukkit/block/" ) && ( desc + " " + name ).equals( "()I getTypeId" ) ) - || ( owner.startsWith( "org/bukkit/block/" ) && ( desc + " " + name ).equals( "(I)Z setTypeId" ) ) ) + || ( owner.startsWith( "org/bukkit/block/" ) && ( desc + " " + name ).equals( "(I)Z setTypeId" ) ) + || ( owner.startsWith( "org/bukkit/block/" ) && ( desc + " " + name ).equals( "()Lorg/bukkit/Material; getType" ) ) ) { Type[] args = Type.getArgumentTypes( desc ); Type[] newArgs = new Type[ args.length + 1 ]; diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftEvil.java b/src/main/java/org/bukkit/craftbukkit/util/CraftEvil.java index 609606e1..db77fbe7 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftEvil.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftEvil.java @@ -9,6 +9,7 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.craftbukkit.block.CraftBlock; +import org.bukkit.craftbukkit.block.CraftBlockState; import org.bukkit.inventory.ItemStack; /** @@ -34,6 +35,14 @@ public class CraftEvil { return getId(world.getBlockAt(location).getType()); } + public static Material getType(Block block) { + return CraftLegacy.toLegacyMaterial(((CraftBlock) block).getNMS()); + } + + public static Material getType(BlockState block) { + return CraftLegacy.toLegacyMaterial(((CraftBlockState) block).getHandle()); + } + public static int getTypeId(Block block) { return getId(block.getType()); } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftLegacy.java b/src/main/java/org/bukkit/craftbukkit/util/CraftLegacy.java index 3a92ac94..83ac79f7 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftLegacy.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftLegacy.java @@ -134,6 +134,14 @@ public class CraftLegacy { } public static byte toLegacyData(IBlockData blockData) { + return toLegacy(blockData).getData(); + } + + public static Material toLegacyMaterial(IBlockData blockData) { + return toLegacy(blockData).getItemType(); + } + + public static MaterialData toLegacy(IBlockData blockData) { MaterialData mappedData; // Try exact match first @@ -143,7 +151,7 @@ public class CraftLegacy { mappedData = blockToMaterial.get(blockData.getBlock()); } - return (mappedData == null) ? 0 : mappedData.getData(); + return (mappedData == null) ? new MaterialData(Material.LEGACY_AIR) : mappedData; } public static Material fromLegacy(Material material) { -- cgit v1.2.3