From 972286af6cb725b418ca8fbaeae4d106281c0dd9 Mon Sep 17 00:00:00 2001 From: Aleksey-Terzi Date: Sat, 6 Oct 2018 13:19:32 +0300 Subject: [PATCH] Added support for pre-1.13 MC, adjusted list of transparency blocks --- .../lishid/orebfuscator/nms/INmsManager.java | 4 +- Plugin/pom.xml | 2 +- .../chunkmap/ChunkMapManager.java | 1 - .../commands/OrebfuscatorCommandExecutor.java | 18 +- .../orebfuscator/config/ConfigManager.java | 23 +- .../config/OrebfuscatorConfig.java | 6 +- .../obfuscation/Calculations.java | 2 - .../resources/transparent_blocks.txt | 219 ------------- .../resources/transparent_blocks_mode1.txt | 1 - .../orebfuscator/nms/v1_10_R1/BlockInfo.java | 3 +- .../orebfuscator/nms/v1_10_R1/NmsManager.java | 297 ++++++++++++----- .../orebfuscator/nms/v1_11_R1/BlockInfo.java | 3 +- .../orebfuscator/nms/v1_11_R1/NmsManager.java | 297 ++++++++++++----- .../orebfuscator/nms/v1_12_R1/BlockInfo.java | 3 +- .../orebfuscator/nms/v1_12_R1/NmsManager.java | 307 ++++++++++++------ .../orebfuscator/nms/v1_13_R1/NmsManager.java | 236 +++++++++++++- .../orebfuscator/nms/v1_13_R2/NmsManager.java | 241 +++++++++++++- .../orebfuscator/nms/v1_9_R1/BlockInfo.java | 3 +- .../orebfuscator/nms/v1_9_R1/NmsManager.java | 297 ++++++++++++----- .../orebfuscator/nms/v1_9_R2/BlockInfo.java | 5 +- .../orebfuscator/nms/v1_9_R2/NmsManager.java | 297 ++++++++++++----- 21 files changed, 1559 insertions(+), 706 deletions(-) delete mode 100644 Plugin/src/main/resources/resources/transparent_blocks.txt delete mode 100644 Plugin/src/main/resources/resources/transparent_blocks_mode1.txt diff --git a/API/src/main/java/com/lishid/orebfuscator/nms/INmsManager.java b/API/src/main/java/com/lishid/orebfuscator/nms/INmsManager.java index 3010a53..a987de3 100644 --- a/API/src/main/java/com/lishid/orebfuscator/nms/INmsManager.java +++ b/API/src/main/java/com/lishid/orebfuscator/nms/INmsManager.java @@ -18,6 +18,8 @@ import java.util.Set; public interface INmsManager { ConfigDefaults getConfigDefaults(); + Material[] getExtraTransparentBlocks(); + void setMaxLoadedCacheFiles(int value); INBT createNBT(); @@ -52,7 +54,5 @@ public interface INmsManager { Set getMaterialIds(Material material); - int getTypeId(int combinedBlockId); - boolean sendBlockChange(Player player, Location blockLocation); } \ No newline at end of file diff --git a/Plugin/pom.xml b/Plugin/pom.xml index 088c6cc..b2c6e5b 100644 --- a/Plugin/pom.xml +++ b/Plugin/pom.xml @@ -4,7 +4,7 @@ com.lishid orebfuscator - 4.4.0-SNAPSHOT + 4.4.1-SNAPSHOT jar Orebfuscator4 diff --git a/Plugin/src/main/java/com/lishid/orebfuscator/chunkmap/ChunkMapManager.java b/Plugin/src/main/java/com/lishid/orebfuscator/chunkmap/ChunkMapManager.java index 336f9b7..be1ebd4 100644 --- a/Plugin/src/main/java/com/lishid/orebfuscator/chunkmap/ChunkMapManager.java +++ b/Plugin/src/main/java/com/lishid/orebfuscator/chunkmap/ChunkMapManager.java @@ -9,7 +9,6 @@ import java.io.IOException; import java.util.Arrays; import com.lishid.orebfuscator.NmsInstance; -import com.lishid.orebfuscator.utils.MaterialHelper; public class ChunkMapManager { private static final ThreadLocal _buffer = new ThreadLocal() { diff --git a/Plugin/src/main/java/com/lishid/orebfuscator/commands/OrebfuscatorCommandExecutor.java b/Plugin/src/main/java/com/lishid/orebfuscator/commands/OrebfuscatorCommandExecutor.java index e93de03..ad9756d 100644 --- a/Plugin/src/main/java/com/lishid/orebfuscator/commands/OrebfuscatorCommandExecutor.java +++ b/Plugin/src/main/java/com/lishid/orebfuscator/commands/OrebfuscatorCommandExecutor.java @@ -343,7 +343,8 @@ public class OrebfuscatorCommandExecutor { private static void commandTransparentBlocks(CommandSender sender, String[] args) { Material[] materials = Material.values(); - List blockNames = new ArrayList<>(); + List transparentBlockNames = new ArrayList<>(); + List nonTransparentBlockNames = new ArrayList<>(); for (Material material : materials) { if(material.isBlock()) { @@ -351,17 +352,26 @@ public class OrebfuscatorCommandExecutor { boolean isTransparent = Orebfuscator.config.isBlockTransparent(blockId); if(isTransparent) { - blockNames.add(material.name()); + transparentBlockNames.add(material.name()); + } else { + nonTransparentBlockNames.add(material.name()); } } } - Collections.sort(blockNames); + Collections.sort(transparentBlockNames); + Collections.sort(nonTransparentBlockNames); StringBuilder blocks = new StringBuilder(); blocks.append("Transparent blocks:"); - for (String blockName : blockNames) { + for (String blockName : transparentBlockNames) { + blocks.append("\n - " + blockName); + } + + blocks.append("\nNon-Transparent blocks:"); + + for (String blockName : nonTransparentBlockNames) { blocks.append("\n - " + blockName); } diff --git a/Plugin/src/main/java/com/lishid/orebfuscator/config/ConfigManager.java b/Plugin/src/main/java/com/lishid/orebfuscator/config/ConfigManager.java index 9bd7c0c..0ffba5a 100644 --- a/Plugin/src/main/java/com/lishid/orebfuscator/config/ConfigManager.java +++ b/Plugin/src/main/java/com/lishid/orebfuscator/config/ConfigManager.java @@ -11,6 +11,7 @@ import java.util.logging.Logger; import com.lishid.orebfuscator.DeprecatedMethods; import com.lishid.orebfuscator.NmsInstance; +import com.lishid.orebfuscator.Orebfuscator; import com.lishid.orebfuscator.utils.MaterialHelper; import org.bukkit.Material; import org.bukkit.World; @@ -262,7 +263,7 @@ public class ConfigManager { } private byte[] generateTransparentBlocks(int engineMode) { - byte[] transparentBlocks = new byte[NmsInstance.current.getTypeId(MaterialHelper.getMaxId() + 1)]; + byte[] transparentBlocks = new byte[MaterialHelper.getMaxId() + 1]; Material[] allMaterials = Material.values(); @@ -270,16 +271,32 @@ public class ConfigManager { if(material.isBlock()) { boolean isTransparent = DeprecatedMethods.isTransparent(material); - if(!isTransparent) { + if(isTransparent) { Set ids = NmsInstance.current.getMaterialIds(material); for (int id : ids) { - transparentBlocks[NmsInstance.current.getTypeId(id)] = 1; + transparentBlocks[id] = 1; } } } } + Material[] extraTransparentBlocks = NmsInstance.current.getExtraTransparentBlocks(); + + for(Material material : extraTransparentBlocks) { + Set ids = NmsInstance.current.getMaterialIds(material); + + for (int id : ids) { + transparentBlocks[id] = 1; + } + } + + Set lavaIds = NmsInstance.current.getMaterialIds(Material.LAVA); + + for (int id : lavaIds) { + transparentBlocks[id] = (byte)(engineMode == 1 ? 0 : 1); + } + return transparentBlocks; } } \ No newline at end of file diff --git a/Plugin/src/main/java/com/lishid/orebfuscator/config/OrebfuscatorConfig.java b/Plugin/src/main/java/com/lishid/orebfuscator/config/OrebfuscatorConfig.java index 669fd9a..0eac047 100644 --- a/Plugin/src/main/java/com/lishid/orebfuscator/config/OrebfuscatorConfig.java +++ b/Plugin/src/main/java/com/lishid/orebfuscator/config/OrebfuscatorConfig.java @@ -5,11 +5,8 @@ package com.lishid.orebfuscator.config; -import java.util.HashSet; import java.util.Map; -import com.lishid.orebfuscator.NmsInstance; -import com.lishid.orebfuscator.utils.Globals; import org.bukkit.entity.Player; import com.lishid.orebfuscator.Orebfuscator; @@ -257,8 +254,7 @@ public class OrebfuscatorConfig { // Helper methods public boolean isBlockTransparent(int id) { - int blockTypeId = NmsInstance.current.getTypeId(id); - return this.transparentBlocks[blockTypeId] == 0; + return this.transparentBlocks[id] == 1; } public boolean obfuscateForPlayer(Player player) { diff --git a/Plugin/src/main/java/com/lishid/orebfuscator/obfuscation/Calculations.java b/Plugin/src/main/java/com/lishid/orebfuscator/obfuscation/Calculations.java index bafa54b..3828044 100644 --- a/Plugin/src/main/java/com/lishid/orebfuscator/obfuscation/Calculations.java +++ b/Plugin/src/main/java/com/lishid/orebfuscator/obfuscation/Calculations.java @@ -24,8 +24,6 @@ import java.util.Random; import com.lishid.orebfuscator.NmsInstance; import com.lishid.orebfuscator.utils.Globals; -import com.lishid.orebfuscator.utils.MaterialHelper; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.entity.Player; diff --git a/Plugin/src/main/resources/resources/transparent_blocks.txt b/Plugin/src/main/resources/resources/transparent_blocks.txt deleted file mode 100644 index aed201a..0000000 --- a/Plugin/src/main/resources/resources/transparent_blocks.txt +++ /dev/null @@ -1,219 +0,0 @@ -0:true //minecraft:air -1:false //minecraft:stone -2:false //minecraft:grass -3:false //minecraft:dirt -4:false //minecraft:cobblestone -5:false //minecraft:planks -6:true //minecraft:sapling -7:false //minecraft:bedrock -8:true //minecraft:flowing_water -9:true //minecraft:water -10:true //minecraft:flowing_lava -11:true //minecraft:lava -12:false //minecraft:sand -13:false //minecraft:gravel -14:false //minecraft:gold_ore -15:false //minecraft:iron_ore -16:false //minecraft:coal_ore -17:false //minecraft:log -18:true //minecraft:leaves -19:false //minecraft:sponge -20:true //minecraft:glass -21:false //minecraft:lapis_ore -22:false //minecraft:lapis_block -23:false //minecraft:dispenser -24:false //minecraft:sandstone -25:false //minecraft:noteblock -26:true //minecraft:bed -27:true //minecraft:golden_rail -28:true //minecraft:detector_rail -29:false //minecraft:sticky_piston -30:true //minecraft:web -31:true //minecraft:tallgrass -32:true //minecraft:deadbush -33:false //minecraft:piston -34:true //minecraft:piston_head -35:false //minecraft:wool -36:true //minecraft:piston_extension -37:true //minecraft:yellow_flower -38:true //minecraft:red_flower -39:true //minecraft:brown_mushroom -40:true //minecraft:red_mushroom -41:false //minecraft:gold_block -42:false //minecraft:iron_block -43:false //minecraft:double_stone_slab -44:true //minecraft:stone_slab -45:false //minecraft:brick_block -46:false //minecraft:tnt -47:false //minecraft:bookshelf -48:false //minecraft:mossy_cobblestone -49:false //minecraft:obsidian -50:true //minecraft:torch -51:true //minecraft:fire -52:true //minecraft:mob_spawner -53:true //minecraft:oak_stairs -54:true //minecraft:chest -55:true //minecraft:redstone_wire -56:false //minecraft:diamond_ore -57:false //minecraft:diamond_block -58:false //minecraft:crafting_table -59:true //minecraft:wheat -60:false //minecraft:farmland -61:false //minecraft:furnace -62:false //minecraft:lit_furnace -63:true //minecraft:standing_sign -64:true //minecraft:wooden_door -65:true //minecraft:ladder -66:true //minecraft:rail -67:true //minecraft:stone_stairs -68:true //minecraft:wall_sign -69:true //minecraft:lever -70:true //minecraft:stone_pressure_plate -71:true //minecraft:iron_door -72:true //minecraft:wooden_pressure_plate -73:false //minecraft:redstone_ore -74:false //minecraft:lit_redstone_ore -75:true //minecraft:unlit_redstone_torch -76:true //minecraft:redstone_torch -77:true //minecraft:stone_button -78:true //minecraft:snow_layer -79:true //minecraft:ice -80:false //minecraft:snow -81:true //minecraft:cactus -82:false //minecraft:clay -83:true //minecraft:reeds -84:false //minecraft:jukebox -85:true //minecraft:fence -86:false //minecraft:pumpkin -87:false //minecraft:netherrack -88:false //minecraft:soul_sand -89:false //minecraft:glowstone -90:true //minecraft:portal -91:false //minecraft:lit_pumpkin -92:true //minecraft:cake -93:true //minecraft:unpowered_repeater -94:true //minecraft:powered_repeater -95:true //minecraft:stained_glass -96:true //minecraft:trapdoor -97:false //minecraft:monster_egg -98:false //minecraft:stonebrick -99:false //minecraft:brown_mushroom_block -100:false //minecraft:red_mushroom_block -101:true //minecraft:iron_bars -102:true //minecraft:glass_pane -103:false //minecraft:melon_block -104:true //minecraft:pumpkin_stem -105:true //minecraft:melon_stem -106:true //minecraft:vine -107:true //minecraft:fence_gate -108:true //minecraft:brick_stairs -109:true //minecraft:stone_brick_stairs -110:false //minecraft:mycelium -111:true //minecraft:waterlily -112:false //minecraft:nether_brick -113:true //minecraft:nether_brick_fence -114:true //minecraft:nether_brick_stairs -115:true //minecraft:nether_wart -116:false //minecraft:enchanting_table -117:true //minecraft:brewing_stand -118:true //minecraft:cauldron -119:true //minecraft:end_portal -120:true //minecraft:end_portal_frame -121:false //minecraft:end_stone -122:true //minecraft:dragon_egg -123:false //minecraft:redstone_lamp -124:false //minecraft:lit_redstone_lamp -125:false //minecraft:double_wooden_slab -126:true //minecraft:wooden_slab -127:true //minecraft:cocoa -128:true //minecraft:sandstone_stairs -129:false //minecraft:emerald_ore -130:true //minecraft:ender_chest -131:true //minecraft:tripwire_hook -132:true //minecraft:tripwire -133:false //minecraft:emerald_block -134:true //minecraft:spruce_stairs -135:true //minecraft:birch_stairs -136:true //minecraft:jungle_stairs -137:false //minecraft:command_block -138:true //minecraft:beacon -139:true //minecraft:cobblestone_wall -140:true //minecraft:flower_pot -141:true //minecraft:carrots -142:true //minecraft:potatoes -143:true //minecraft:wooden_button -144:true //minecraft:skull -145:true //minecraft:anvil -146:true //minecraft:trapped_chest -147:true //minecraft:light_weighted_pressure_plate -148:true //minecraft:heavy_weighted_pressure_plate -149:true //minecraft:unpowered_comparator -150:true //minecraft:powered_comparator -151:true //minecraft:daylight_detector -152:false //minecraft:redstone_block -153:false //minecraft:quartz_ore -154:true //minecraft:hopper -155:false //minecraft:quartz_block -156:true //minecraft:quartz_stairs -157:true //minecraft:activator_rail -158:false //minecraft:dropper -159:false //minecraft:stained_hardened_clay -160:true //minecraft:stained_glass_pane -161:true //minecraft:leaves2 -162:false //minecraft:log2 -163:true //minecraft:acacia_stairs -164:true //minecraft:dark_oak_stairs -165:true //minecraft:slime -166:true //minecraft:barrier -167:true //minecraft:iron_trapdoor -168:false //minecraft:prismarine -169:false //minecraft:sea_lantern -170:false //minecraft:hay_block -171:true //minecraft:carpet -172:false //minecraft:hardened_clay -173:false //minecraft:coal_block -174:true //minecraft:packed_ice -175:true //minecraft:double_plant -176:true //minecraft:standing_banner -177:true //minecraft:wall_banner -178:true //minecraft:daylight_detector_inverted -179:false //minecraft:red_sandstone -180:true //minecraft:red_sandstone_stairs -181:false //minecraft:double_stone_slab2 -182:true //minecraft:stone_slab2 -183:true //minecraft:spruce_fence_gate -184:true //minecraft:birch_fence_gate -185:true //minecraft:jungle_fence_gate -186:true //minecraft:dark_oak_fence_gate -187:true //minecraft:acacia_fence_gate -188:true //minecraft:spruce_fence -189:true //minecraft:birch_fence -190:true //minecraft:jungle_fence -191:true //minecraft:dark_oak_fence -192:true //minecraft:acacia_fence -193:true //minecraft:spruce_door -194:true //minecraft:birch_door -195:true //minecraft:jungle_door -196:true //minecraft:acacia_door -197:true //minecraft:dark_oak_door -198:true //minecraft:end_rod -199:true //minecraft:chorus_plant -200:true //minecraft:chorus_flower -201:false //minecraft:purpur_block -202:false //minecraft:purpur_pillar -203:true //minecraft:purpur_stairs -204:false //minecraft:purpur_double_slab -205:true //minecraft:purpur_slab -206:false //minecraft:end_bricks -207:true //minecraft:beetroots -208:true //minecraft:grass_path -209:true //minecraft:end_gateway -210:false //minecraft:repeating_command_block -211:false //minecraft:chain_command_block -212:true //minecraft:frosted_ice -213:false //minecraft:magma_block -214:false //minecraft:nether_wart_block -215:false //minecraft:red_nether_brick -216:false //minecraft:bone_block -217:true //minecraft:structure_void -255:false //minecraft:structure_block \ No newline at end of file diff --git a/Plugin/src/main/resources/resources/transparent_blocks_mode1.txt b/Plugin/src/main/resources/resources/transparent_blocks_mode1.txt deleted file mode 100644 index d763625..0000000 --- a/Plugin/src/main/resources/resources/transparent_blocks_mode1.txt +++ /dev/null @@ -1 +0,0 @@ -11:false //minecraft:lava \ No newline at end of file diff --git a/v1_10_R1/src/main/java/com/lishid/orebfuscator/nms/v1_10_R1/BlockInfo.java b/v1_10_R1/src/main/java/com/lishid/orebfuscator/nms/v1_10_R1/BlockInfo.java index 1a389e3..2bd71d9 100644 --- a/v1_10_R1/src/main/java/com/lishid/orebfuscator/nms/v1_10_R1/BlockInfo.java +++ b/v1_10_R1/src/main/java/com/lishid/orebfuscator/nms/v1_10_R1/BlockInfo.java @@ -36,7 +36,8 @@ public class BlockInfo implements IBlockInfo { } public int getCombinedId() { - return Block.getCombinedId(this.blockData); + Block block = this.blockData.getBlock(); + return (Block.getId(block) << 4) | block.toLegacyData(this.blockData); } public IBlockData getBlockData() { diff --git a/v1_10_R1/src/main/java/com/lishid/orebfuscator/nms/v1_10_R1/NmsManager.java b/v1_10_R1/src/main/java/com/lishid/orebfuscator/nms/v1_10_R1/NmsManager.java index 7490d3f..cd8f917 100644 --- a/v1_10_R1/src/main/java/com/lishid/orebfuscator/nms/v1_10_R1/NmsManager.java +++ b/v1_10_R1/src/main/java/com/lishid/orebfuscator/nms/v1_10_R1/NmsManager.java @@ -6,6 +6,7 @@ package com.lishid.orebfuscator.nms.v1_10_R1; +import com.google.common.collect.ImmutableList; import com.lishid.orebfuscator.types.ConfigDefaults; import net.minecraft.server.v1_10_R1.Block; import net.minecraft.server.v1_10_R1.BlockPosition; @@ -31,10 +32,12 @@ import com.lishid.orebfuscator.nms.INBT; import com.lishid.orebfuscator.nms.INmsManager; import com.lishid.orebfuscator.types.BlockCoord; +import java.util.HashSet; import java.util.Set; public class NmsManager implements INmsManager { private ConfigDefaults configDefaults; + private Material[] extraTransparentBlocks; private int maxLoadedCacheFiles; public NmsManager() { @@ -42,110 +45,199 @@ public class NmsManager implements INmsManager { // Default World - this.configDefaults.defaultProximityHiderBlockIds = new int[] { - getMaterialId(Material.DISPENSER), - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST), - getMaterialId(Material.HOPPER), - getMaterialId(Material.WORKBENCH), - getMaterialId(Material.FURNACE), - getMaterialId(Material.BURNING_FURNACE), - getMaterialId(Material.ENCHANTMENT_TABLE), - getMaterialId(Material.EMERALD_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.ANVIL), - getMaterialId(Material.TRAPPED_CHEST), - getMaterialId(Material.DIAMOND_ORE) - }; + this.configDefaults.defaultProximityHiderBlockIds = convertMaterialsToIds(new Material[] { + Material.DISPENSER, + Material.MOB_SPAWNER, + Material.CHEST, + Material.HOPPER, + Material.WORKBENCH, + Material.FURNACE, + Material.BURNING_FURNACE, + Material.ENCHANTMENT_TABLE, + Material.EMERALD_ORE, + Material.ENDER_CHEST, + Material.ANVIL, + Material.TRAPPED_CHEST, + Material.DIAMOND_ORE + }); - this.configDefaults.defaultDarknessBlockIds = new int[] { - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST) - }; + this.configDefaults.defaultDarknessBlockIds = convertMaterialsToIds(new Material[] { + Material.MOB_SPAWNER, + Material.CHEST + }); - this.configDefaults.defaultMode1BlockId = getMaterialId(Material.STONE); - this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialId(Material.STONE); + this.configDefaults.defaultMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); + this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialIds(Material.STONE).iterator().next(); // The End - this.configDefaults.endWorldRandomBlockIds = new int[] { - getMaterialId(Material.BEDROCK), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.ENDER_STONE), - getMaterialId(Material.PURPUR_BLOCK), - getMaterialId(Material.END_BRICKS) - }; + this.configDefaults.endWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.BEDROCK, + Material.OBSIDIAN, + Material.ENDER_STONE, + Material.PURPUR_BLOCK, + Material.END_BRICKS + }); - this.configDefaults.endWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.ENDER_STONE) - }; + this.configDefaults.endWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.ENDER_STONE + }); - this.configDefaults.endWorldMode1BlockId = getMaterialId(Material.ENDER_STONE); - this.configDefaults.endWorldRequiredObfuscateBlockIds = new int[] { getMaterialId(Material.ENDER_STONE) }; + this.configDefaults.endWorldMode1BlockId = getMaterialIds(Material.ENDER_STONE).iterator().next(); + this.configDefaults.endWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { Material.ENDER_STONE }); // Nether World - this.configDefaults.netherWorldRandomBlockIds = new int[] { - getMaterialId(Material.GRAVEL), - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.SOUL_SAND), - getMaterialId(Material.NETHER_BRICK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.GRAVEL, + Material.NETHERRACK, + Material.SOUL_SAND, + Material.NETHER_BRICK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldMode1BlockId = getMaterialId(Material.NETHERRACK); + this.configDefaults.netherWorldMode1BlockId = getMaterialIds(Material.NETHERRACK).iterator().next(); - this.configDefaults.netherWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK) - }; + this.configDefaults.netherWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK + }); // Normal World - this.configDefaults.normalWorldRandomBlockIds = new int[] { - getMaterialId(Material.STONE), - getMaterialId(Material.COBBLESTONE), - getMaterialId(Material.WOOD), - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.TNT), - getMaterialId(Material.MOSSY_COBBLESTONE), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE, + Material.COBBLESTONE, + Material.WOOD, + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.TNT, + Material.MOSSY_COBBLESTONE, + Material.OBSIDIAN, + Material.DIAMOND_ORE, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.CHEST), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.CHEST, + Material.DIAMOND_ORE, + Material.ENDER_CHEST, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldMode1BlockId = getMaterialId(Material.STONE); + this.configDefaults.normalWorldMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); - this.configDefaults.normalWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.STONE) + this.configDefaults.normalWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE + }); + + // Extra transparent blocks + + this.extraTransparentBlocks = new Material[] { + Material.ACACIA_DOOR, + Material.ACACIA_FENCE, + Material.ACACIA_FENCE_GATE, + Material.ACACIA_STAIRS, + Material.ANVIL, + Material.BEACON, + Material.BED_BLOCK, + Material.BIRCH_DOOR, + Material.BIRCH_FENCE, + Material.BIRCH_FENCE_GATE, + Material.BIRCH_WOOD_STAIRS, + Material.BREWING_STAND, + Material.BRICK_STAIRS, + Material.CACTUS, + Material.CAKE_BLOCK, + Material.CAULDRON, + Material.COBBLESTONE_STAIRS, + Material.COBBLE_WALL, + Material.DARK_OAK_DOOR, + Material.DARK_OAK_FENCE, + Material.DARK_OAK_FENCE_GATE, + Material.DARK_OAK_STAIRS, + Material.DAYLIGHT_DETECTOR, + Material.DAYLIGHT_DETECTOR_INVERTED, + Material.DRAGON_EGG, + Material.ENCHANTMENT_TABLE, + Material.FENCE, + Material.FENCE_GATE, + Material.GLASS, + Material.HOPPER, + Material.ICE, + Material.IRON_DOOR_BLOCK, + Material.IRON_FENCE, + Material.IRON_PLATE, + Material.IRON_TRAPDOOR, + Material.JUNGLE_DOOR, + Material.JUNGLE_FENCE, + Material.JUNGLE_FENCE_GATE, + Material.JUNGLE_WOOD_STAIRS, + Material.LAVA, + Material.LEAVES, + Material.LEAVES_2, + Material.MOB_SPAWNER, + Material.NETHER_BRICK_STAIRS, + Material.NETHER_FENCE, + Material.PACKED_ICE, + Material.PISTON_BASE, + Material.PISTON_EXTENSION, + Material.PISTON_MOVING_PIECE, + Material.PISTON_STICKY_BASE, + Material.PURPUR_SLAB, + Material.PURPUR_STAIRS, + Material.QUARTZ_STAIRS, + Material.RED_SANDSTONE_STAIRS, + Material.SANDSTONE_STAIRS, + Material.SIGN_POST, + Material.SLIME_BLOCK, + Material.SMOOTH_STAIRS, + Material.SPRUCE_DOOR, + Material.SPRUCE_FENCE, + Material.SPRUCE_FENCE_GATE, + Material.SPRUCE_WOOD_STAIRS, + Material.STAINED_GLASS, + Material.STAINED_GLASS_PANE, + Material.STANDING_BANNER, + Material.STATIONARY_LAVA, + Material.STATIONARY_WATER, + Material.STEP, + Material.STONE_PLATE, + Material.STONE_SLAB2, + Material.THIN_GLASS, + Material.TRAP_DOOR, + Material.WALL_BANNER, + Material.WALL_SIGN, + Material.WATER, + Material.WEB, + Material.WOODEN_DOOR, + Material.WOOD_PLATE, + Material.WOOD_STAIRS, + Material.WOOD_STEP }; } public ConfigDefaults getConfigDefaults() { return this.configDefaults; } + + public Material[] getExtraTransparentBlocks() { + return this.extraTransparentBlocks; + } public void setMaxLoadedCacheFiles(int value) { this.maxLoadedCacheFiles = value; @@ -218,9 +310,12 @@ public class NmsManager implements INmsManager { || item == Material.DIAMOND_HOE; } + @SuppressWarnings("deprecation") public boolean isSign(int combinedBlockId) { - return combinedBlockId == getMaterialId(Material.WALL_SIGN) - || combinedBlockId == getMaterialId(Material.SIGN_POST); + int typeId = combinedBlockId >> 4; + + return typeId == Material.WALL_SIGN.getId() + || typeId == Material.SIGN_POST.getId(); } public boolean isAir(int combinedBlockId) { @@ -249,16 +344,17 @@ public class NmsManager implements INmsManager { } @SuppressWarnings("deprecation") - public int getMaterialId(Material material) { - return material.getId() << 4; - } - public Set getMaterialIds(Material material) { - return null; - } + Set ids = new HashSet<>(); + int blockId = material.getId() << 4; + Block block = Block.getById(material.getId()); + ImmutableList blockDataList = block.t().a(); - public int getTypeId(int combinedBlockId) { - return combinedBlockId & ~(0x0F); + for(IBlockData blockData : blockDataList) { + ids.add(blockId | block.toLegacyData(blockData)); + } + + return ids; } @SuppressWarnings("deprecation") @@ -289,4 +385,27 @@ public class NmsManager implements INmsManager { return chunk != null ? chunk.getBlockData(new BlockPosition(x, y, z)) : null; } + + private Set convertMaterialsToSet(Material[] materials) { + Set ids = new HashSet<>(); + + for(Material material : materials) { + ids.addAll(getMaterialIds(material)); + } + + return ids; + } + + private int[] convertMaterialsToIds(Material[] materials) { + Set ids = convertMaterialsToSet(materials); + + int[] result = new int[ids.size()]; + int index = 0; + + for(int id : ids) { + result[index++] = id; + } + + return result; + } } diff --git a/v1_11_R1/src/main/java/com/lishid/orebfuscator/nms/v1_11_R1/BlockInfo.java b/v1_11_R1/src/main/java/com/lishid/orebfuscator/nms/v1_11_R1/BlockInfo.java index c4ebb57..97c7290 100644 --- a/v1_11_R1/src/main/java/com/lishid/orebfuscator/nms/v1_11_R1/BlockInfo.java +++ b/v1_11_R1/src/main/java/com/lishid/orebfuscator/nms/v1_11_R1/BlockInfo.java @@ -36,7 +36,8 @@ public class BlockInfo implements IBlockInfo { } public int getCombinedId() { - return Block.getCombinedId(this.blockData); + Block block = this.blockData.getBlock(); + return (Block.getId(block) << 4) | block.toLegacyData(this.blockData); } public IBlockData getBlockData() { diff --git a/v1_11_R1/src/main/java/com/lishid/orebfuscator/nms/v1_11_R1/NmsManager.java b/v1_11_R1/src/main/java/com/lishid/orebfuscator/nms/v1_11_R1/NmsManager.java index af0b4cf..d1d675f 100644 --- a/v1_11_R1/src/main/java/com/lishid/orebfuscator/nms/v1_11_R1/NmsManager.java +++ b/v1_11_R1/src/main/java/com/lishid/orebfuscator/nms/v1_11_R1/NmsManager.java @@ -6,6 +6,7 @@ package com.lishid.orebfuscator.nms.v1_11_R1; +import com.google.common.collect.ImmutableList; import com.lishid.orebfuscator.types.ConfigDefaults; import net.minecraft.server.v1_11_R1.Block; import net.minecraft.server.v1_11_R1.BlockPosition; @@ -31,10 +32,12 @@ import com.lishid.orebfuscator.nms.INBT; import com.lishid.orebfuscator.nms.INmsManager; import com.lishid.orebfuscator.types.BlockCoord; +import java.util.HashSet; import java.util.Set; public class NmsManager implements INmsManager { private ConfigDefaults configDefaults; + private Material[] extraTransparentBlocks; private int maxLoadedCacheFiles; public NmsManager() { @@ -42,110 +45,199 @@ public class NmsManager implements INmsManager { // Default World - this.configDefaults.defaultProximityHiderBlockIds = new int[] { - getMaterialId(Material.DISPENSER), - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST), - getMaterialId(Material.HOPPER), - getMaterialId(Material.WORKBENCH), - getMaterialId(Material.FURNACE), - getMaterialId(Material.BURNING_FURNACE), - getMaterialId(Material.ENCHANTMENT_TABLE), - getMaterialId(Material.EMERALD_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.ANVIL), - getMaterialId(Material.TRAPPED_CHEST), - getMaterialId(Material.DIAMOND_ORE) - }; + this.configDefaults.defaultProximityHiderBlockIds = convertMaterialsToIds(new Material[] { + Material.DISPENSER, + Material.MOB_SPAWNER, + Material.CHEST, + Material.HOPPER, + Material.WORKBENCH, + Material.FURNACE, + Material.BURNING_FURNACE, + Material.ENCHANTMENT_TABLE, + Material.EMERALD_ORE, + Material.ENDER_CHEST, + Material.ANVIL, + Material.TRAPPED_CHEST, + Material.DIAMOND_ORE + }); - this.configDefaults.defaultDarknessBlockIds = new int[] { - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST) - }; + this.configDefaults.defaultDarknessBlockIds = convertMaterialsToIds(new Material[] { + Material.MOB_SPAWNER, + Material.CHEST + }); - this.configDefaults.defaultMode1BlockId = getMaterialId(Material.STONE); - this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialId(Material.STONE); + this.configDefaults.defaultMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); + this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialIds(Material.STONE).iterator().next(); // The End - this.configDefaults.endWorldRandomBlockIds = new int[] { - getMaterialId(Material.BEDROCK), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.ENDER_STONE), - getMaterialId(Material.PURPUR_BLOCK), - getMaterialId(Material.END_BRICKS) - }; + this.configDefaults.endWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.BEDROCK, + Material.OBSIDIAN, + Material.ENDER_STONE, + Material.PURPUR_BLOCK, + Material.END_BRICKS + }); - this.configDefaults.endWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.ENDER_STONE) - }; + this.configDefaults.endWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.ENDER_STONE + }); - this.configDefaults.endWorldMode1BlockId = getMaterialId(Material.ENDER_STONE); - this.configDefaults.endWorldRequiredObfuscateBlockIds = new int[] { getMaterialId(Material.ENDER_STONE) }; + this.configDefaults.endWorldMode1BlockId = getMaterialIds(Material.ENDER_STONE).iterator().next(); + this.configDefaults.endWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { Material.ENDER_STONE }); // Nether World - this.configDefaults.netherWorldRandomBlockIds = new int[] { - getMaterialId(Material.GRAVEL), - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.SOUL_SAND), - getMaterialId(Material.NETHER_BRICK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.GRAVEL, + Material.NETHERRACK, + Material.SOUL_SAND, + Material.NETHER_BRICK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldMode1BlockId = getMaterialId(Material.NETHERRACK); + this.configDefaults.netherWorldMode1BlockId = getMaterialIds(Material.NETHERRACK).iterator().next(); - this.configDefaults.netherWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK) - }; + this.configDefaults.netherWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK + }); // Normal World - this.configDefaults.normalWorldRandomBlockIds = new int[] { - getMaterialId(Material.STONE), - getMaterialId(Material.COBBLESTONE), - getMaterialId(Material.WOOD), - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.TNT), - getMaterialId(Material.MOSSY_COBBLESTONE), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE, + Material.COBBLESTONE, + Material.WOOD, + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.TNT, + Material.MOSSY_COBBLESTONE, + Material.OBSIDIAN, + Material.DIAMOND_ORE, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.CHEST), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.CHEST, + Material.DIAMOND_ORE, + Material.ENDER_CHEST, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldMode1BlockId = getMaterialId(Material.STONE); + this.configDefaults.normalWorldMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); - this.configDefaults.normalWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.STONE) + this.configDefaults.normalWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE + }); + + // Extra transparent blocks + + this.extraTransparentBlocks = new Material[] { + Material.ACACIA_DOOR, + Material.ACACIA_FENCE, + Material.ACACIA_FENCE_GATE, + Material.ACACIA_STAIRS, + Material.ANVIL, + Material.BEACON, + Material.BED_BLOCK, + Material.BIRCH_DOOR, + Material.BIRCH_FENCE, + Material.BIRCH_FENCE_GATE, + Material.BIRCH_WOOD_STAIRS, + Material.BREWING_STAND, + Material.BRICK_STAIRS, + Material.CACTUS, + Material.CAKE_BLOCK, + Material.CAULDRON, + Material.COBBLESTONE_STAIRS, + Material.COBBLE_WALL, + Material.DARK_OAK_DOOR, + Material.DARK_OAK_FENCE, + Material.DARK_OAK_FENCE_GATE, + Material.DARK_OAK_STAIRS, + Material.DAYLIGHT_DETECTOR, + Material.DAYLIGHT_DETECTOR_INVERTED, + Material.DRAGON_EGG, + Material.ENCHANTMENT_TABLE, + Material.FENCE, + Material.FENCE_GATE, + Material.GLASS, + Material.HOPPER, + Material.ICE, + Material.IRON_DOOR_BLOCK, + Material.IRON_FENCE, + Material.IRON_PLATE, + Material.IRON_TRAPDOOR, + Material.JUNGLE_DOOR, + Material.JUNGLE_FENCE, + Material.JUNGLE_FENCE_GATE, + Material.JUNGLE_WOOD_STAIRS, + Material.LAVA, + Material.LEAVES, + Material.LEAVES_2, + Material.MOB_SPAWNER, + Material.NETHER_BRICK_STAIRS, + Material.NETHER_FENCE, + Material.PACKED_ICE, + Material.PISTON_BASE, + Material.PISTON_EXTENSION, + Material.PISTON_MOVING_PIECE, + Material.PISTON_STICKY_BASE, + Material.PURPUR_SLAB, + Material.PURPUR_STAIRS, + Material.QUARTZ_STAIRS, + Material.RED_SANDSTONE_STAIRS, + Material.SANDSTONE_STAIRS, + Material.SIGN_POST, + Material.SLIME_BLOCK, + Material.SMOOTH_STAIRS, + Material.SPRUCE_DOOR, + Material.SPRUCE_FENCE, + Material.SPRUCE_FENCE_GATE, + Material.SPRUCE_WOOD_STAIRS, + Material.STAINED_GLASS, + Material.STAINED_GLASS_PANE, + Material.STANDING_BANNER, + Material.STATIONARY_LAVA, + Material.STATIONARY_WATER, + Material.STEP, + Material.STONE_PLATE, + Material.STONE_SLAB2, + Material.THIN_GLASS, + Material.TRAP_DOOR, + Material.WALL_BANNER, + Material.WALL_SIGN, + Material.WATER, + Material.WEB, + Material.WOODEN_DOOR, + Material.WOOD_PLATE, + Material.WOOD_STAIRS, + Material.WOOD_STEP }; } public ConfigDefaults getConfigDefaults() { return this.configDefaults; } + + public Material[] getExtraTransparentBlocks() { + return this.extraTransparentBlocks; + } public void setMaxLoadedCacheFiles(int value) { this.maxLoadedCacheFiles = value; @@ -218,9 +310,12 @@ public class NmsManager implements INmsManager { || item == Material.DIAMOND_HOE; } + @SuppressWarnings("deprecation") public boolean isSign(int combinedBlockId) { - return combinedBlockId == getMaterialId(Material.WALL_SIGN) - || combinedBlockId == getMaterialId(Material.SIGN_POST); + int typeId = combinedBlockId >> 4; + + return typeId == Material.WALL_SIGN.getId() + || typeId == Material.SIGN_POST.getId(); } public boolean isAir(int combinedBlockId) { @@ -249,16 +344,17 @@ public class NmsManager implements INmsManager { } @SuppressWarnings("deprecation") - public int getMaterialId(Material material) { - return material.getId() << 4; - } - public Set getMaterialIds(Material material) { - return null; - } + Set ids = new HashSet<>(); + int blockId = material.getId() << 4; + Block block = Block.getById(material.getId()); + ImmutableList blockDataList = block.s().a(); - public int getTypeId(int combinedBlockId) { - return combinedBlockId & ~(0x0F); + for(IBlockData blockData : blockDataList) { + ids.add(blockId | block.toLegacyData(blockData)); + } + + return ids; } @SuppressWarnings("deprecation") @@ -289,4 +385,27 @@ public class NmsManager implements INmsManager { return chunk != null ? chunk.getBlockData(new BlockPosition(x, y, z)) : null; } + + private Set convertMaterialsToSet(Material[] materials) { + Set ids = new HashSet<>(); + + for(Material material : materials) { + ids.addAll(getMaterialIds(material)); + } + + return ids; + } + + private int[] convertMaterialsToIds(Material[] materials) { + Set ids = convertMaterialsToSet(materials); + + int[] result = new int[ids.size()]; + int index = 0; + + for(int id : ids) { + result[index++] = id; + } + + return result; + } } diff --git a/v1_12_R1/src/main/java/com/lishid/orebfuscator/nms/v1_12_R1/BlockInfo.java b/v1_12_R1/src/main/java/com/lishid/orebfuscator/nms/v1_12_R1/BlockInfo.java index 70d904b..a96aea5 100644 --- a/v1_12_R1/src/main/java/com/lishid/orebfuscator/nms/v1_12_R1/BlockInfo.java +++ b/v1_12_R1/src/main/java/com/lishid/orebfuscator/nms/v1_12_R1/BlockInfo.java @@ -36,7 +36,8 @@ public class BlockInfo implements IBlockInfo { } public int getCombinedId() { - return Block.getCombinedId(this.blockData); + Block block = this.blockData.getBlock(); + return (Block.getId(block) << 4) | block.toLegacyData(this.blockData); } public IBlockData getBlockData() { diff --git a/v1_12_R1/src/main/java/com/lishid/orebfuscator/nms/v1_12_R1/NmsManager.java b/v1_12_R1/src/main/java/com/lishid/orebfuscator/nms/v1_12_R1/NmsManager.java index 33a1f41..487c1e9 100644 --- a/v1_12_R1/src/main/java/com/lishid/orebfuscator/nms/v1_12_R1/NmsManager.java +++ b/v1_12_R1/src/main/java/com/lishid/orebfuscator/nms/v1_12_R1/NmsManager.java @@ -6,16 +6,9 @@ package com.lishid.orebfuscator.nms.v1_12_R1; +import com.google.common.collect.ImmutableList; import com.lishid.orebfuscator.types.ConfigDefaults; -import net.minecraft.server.v1_12_R1.Block; -import net.minecraft.server.v1_12_R1.BlockPosition; -import net.minecraft.server.v1_12_R1.Chunk; -import net.minecraft.server.v1_12_R1.ChunkProviderServer; -import net.minecraft.server.v1_12_R1.IBlockData; -import net.minecraft.server.v1_12_R1.IChatBaseComponent; -import net.minecraft.server.v1_12_R1.Packet; -import net.minecraft.server.v1_12_R1.TileEntity; -import net.minecraft.server.v1_12_R1.WorldServer; +import net.minecraft.server.v1_12_R1.*; import org.bukkit.Location; import org.bukkit.Material; @@ -31,10 +24,12 @@ import com.lishid.orebfuscator.nms.INBT; import com.lishid.orebfuscator.nms.INmsManager; import com.lishid.orebfuscator.types.BlockCoord; +import java.util.HashSet; import java.util.Set; public class NmsManager implements INmsManager { private ConfigDefaults configDefaults; + private Material[] extraTransparentBlocks; private int maxLoadedCacheFiles; public NmsManager() { @@ -42,110 +37,199 @@ public class NmsManager implements INmsManager { // Default World - this.configDefaults.defaultProximityHiderBlockIds = new int[] { - getMaterialId(Material.DISPENSER), - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST), - getMaterialId(Material.HOPPER), - getMaterialId(Material.WORKBENCH), - getMaterialId(Material.FURNACE), - getMaterialId(Material.BURNING_FURNACE), - getMaterialId(Material.ENCHANTMENT_TABLE), - getMaterialId(Material.EMERALD_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.ANVIL), - getMaterialId(Material.TRAPPED_CHEST), - getMaterialId(Material.DIAMOND_ORE) - }; + this.configDefaults.defaultProximityHiderBlockIds = convertMaterialsToIds(new Material[] { + Material.DISPENSER, + Material.MOB_SPAWNER, + Material.CHEST, + Material.HOPPER, + Material.WORKBENCH, + Material.FURNACE, + Material.BURNING_FURNACE, + Material.ENCHANTMENT_TABLE, + Material.EMERALD_ORE, + Material.ENDER_CHEST, + Material.ANVIL, + Material.TRAPPED_CHEST, + Material.DIAMOND_ORE + }); - this.configDefaults.defaultDarknessBlockIds = new int[] { - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST) - }; + this.configDefaults.defaultDarknessBlockIds = convertMaterialsToIds(new Material[] { + Material.MOB_SPAWNER, + Material.CHEST + }); - this.configDefaults.defaultMode1BlockId = getMaterialId(Material.STONE); - this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialId(Material.STONE); + this.configDefaults.defaultMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); + this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialIds(Material.STONE).iterator().next(); // The End - this.configDefaults.endWorldRandomBlockIds = new int[] { - getMaterialId(Material.BEDROCK), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.ENDER_STONE), - getMaterialId(Material.PURPUR_BLOCK), - getMaterialId(Material.END_BRICKS) - }; + this.configDefaults.endWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.BEDROCK, + Material.OBSIDIAN, + Material.ENDER_STONE, + Material.PURPUR_BLOCK, + Material.END_BRICKS + }); - this.configDefaults.endWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.ENDER_STONE) - }; + this.configDefaults.endWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.ENDER_STONE + }); - this.configDefaults.endWorldMode1BlockId = getMaterialId(Material.ENDER_STONE); - this.configDefaults.endWorldRequiredObfuscateBlockIds = new int[] { getMaterialId(Material.ENDER_STONE) }; + this.configDefaults.endWorldMode1BlockId = getMaterialIds(Material.ENDER_STONE).iterator().next(); + this.configDefaults.endWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { Material.ENDER_STONE }); // Nether World - this.configDefaults.netherWorldRandomBlockIds = new int[] { - getMaterialId(Material.GRAVEL), - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.SOUL_SAND), - getMaterialId(Material.NETHER_BRICK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.GRAVEL, + Material.NETHERRACK, + Material.SOUL_SAND, + Material.NETHER_BRICK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldMode1BlockId = getMaterialId(Material.NETHERRACK); + this.configDefaults.netherWorldMode1BlockId = getMaterialIds(Material.NETHERRACK).iterator().next(); - this.configDefaults.netherWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK) - }; + this.configDefaults.netherWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK + }); // Normal World - this.configDefaults.normalWorldRandomBlockIds = new int[] { - getMaterialId(Material.STONE), - getMaterialId(Material.COBBLESTONE), - getMaterialId(Material.WOOD), - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.TNT), - getMaterialId(Material.MOSSY_COBBLESTONE), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE, + Material.COBBLESTONE, + Material.WOOD, + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.TNT, + Material.MOSSY_COBBLESTONE, + Material.OBSIDIAN, + Material.DIAMOND_ORE, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.CHEST), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.CHEST, + Material.DIAMOND_ORE, + Material.ENDER_CHEST, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldMode1BlockId = getMaterialId(Material.STONE); + this.configDefaults.normalWorldMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); - this.configDefaults.normalWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.STONE) + this.configDefaults.normalWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE + }); + + // Extra transparent blocks + + this.extraTransparentBlocks = new Material[] { + Material.ACACIA_DOOR, + Material.ACACIA_FENCE, + Material.ACACIA_FENCE_GATE, + Material.ACACIA_STAIRS, + Material.ANVIL, + Material.BEACON, + Material.BED_BLOCK, + Material.BIRCH_DOOR, + Material.BIRCH_FENCE, + Material.BIRCH_FENCE_GATE, + Material.BIRCH_WOOD_STAIRS, + Material.BREWING_STAND, + Material.BRICK_STAIRS, + Material.CACTUS, + Material.CAKE_BLOCK, + Material.CAULDRON, + Material.COBBLESTONE_STAIRS, + Material.COBBLE_WALL, + Material.DARK_OAK_DOOR, + Material.DARK_OAK_FENCE, + Material.DARK_OAK_FENCE_GATE, + Material.DARK_OAK_STAIRS, + Material.DAYLIGHT_DETECTOR, + Material.DAYLIGHT_DETECTOR_INVERTED, + Material.DRAGON_EGG, + Material.ENCHANTMENT_TABLE, + Material.FENCE, + Material.FENCE_GATE, + Material.GLASS, + Material.HOPPER, + Material.ICE, + Material.IRON_DOOR_BLOCK, + Material.IRON_FENCE, + Material.IRON_PLATE, + Material.IRON_TRAPDOOR, + Material.JUNGLE_DOOR, + Material.JUNGLE_FENCE, + Material.JUNGLE_FENCE_GATE, + Material.JUNGLE_WOOD_STAIRS, + Material.LAVA, + Material.LEAVES, + Material.LEAVES_2, + Material.MOB_SPAWNER, + Material.NETHER_BRICK_STAIRS, + Material.NETHER_FENCE, + Material.PACKED_ICE, + Material.PISTON_BASE, + Material.PISTON_EXTENSION, + Material.PISTON_MOVING_PIECE, + Material.PISTON_STICKY_BASE, + Material.PURPUR_SLAB, + Material.PURPUR_STAIRS, + Material.QUARTZ_STAIRS, + Material.RED_SANDSTONE_STAIRS, + Material.SANDSTONE_STAIRS, + Material.SIGN_POST, + Material.SLIME_BLOCK, + Material.SMOOTH_STAIRS, + Material.SPRUCE_DOOR, + Material.SPRUCE_FENCE, + Material.SPRUCE_FENCE_GATE, + Material.SPRUCE_WOOD_STAIRS, + Material.STAINED_GLASS, + Material.STAINED_GLASS_PANE, + Material.STANDING_BANNER, + Material.STATIONARY_LAVA, + Material.STATIONARY_WATER, + Material.STEP, + Material.STONE_PLATE, + Material.STONE_SLAB2, + Material.THIN_GLASS, + Material.TRAP_DOOR, + Material.WALL_BANNER, + Material.WALL_SIGN, + Material.WATER, + Material.WEB, + Material.WOODEN_DOOR, + Material.WOOD_PLATE, + Material.WOOD_STAIRS, + Material.WOOD_STEP }; } public ConfigDefaults getConfigDefaults() { return this.configDefaults; } + + public Material[] getExtraTransparentBlocks() { + return this.extraTransparentBlocks; + } public void setMaxLoadedCacheFiles(int value) { this.maxLoadedCacheFiles = value; @@ -218,9 +302,12 @@ public class NmsManager implements INmsManager { || item == Material.DIAMOND_HOE; } + @SuppressWarnings("deprecation") public boolean isSign(int combinedBlockId) { - return combinedBlockId == getMaterialId(Material.WALL_SIGN) - || combinedBlockId == getMaterialId(Material.SIGN_POST); + int typeId = combinedBlockId >> 4; + + return typeId == Material.WALL_SIGN.getId() + || typeId == Material.SIGN_POST.getId(); } public boolean isAir(int combinedBlockId) { @@ -249,16 +336,17 @@ public class NmsManager implements INmsManager { } @SuppressWarnings("deprecation") - public int getMaterialId(Material material) { - return material.getId() << 4; - } - public Set getMaterialIds(Material material) { - return null; - } + Set ids = new HashSet<>(); + int blockId = material.getId() << 4; + Block block = Block.getById(material.getId()); + ImmutableList blockDataList = block.s().a(); - public int getTypeId(int combinedBlockId) { - return combinedBlockId & ~(0x0F); + for(IBlockData blockData : blockDataList) { + ids.add(blockId | block.toLegacyData(blockData)); + } + + return ids; } @SuppressWarnings("deprecation") @@ -289,4 +377,27 @@ public class NmsManager implements INmsManager { return chunk != null ? chunk.getBlockData(new BlockPosition(x, y, z)) : null; } + + private Set convertMaterialsToSet(Material[] materials) { + Set ids = new HashSet<>(); + + for(Material material : materials) { + ids.addAll(getMaterialIds(material)); + } + + return ids; + } + + private int[] convertMaterialsToIds(Material[] materials) { + Set ids = convertMaterialsToSet(materials); + + int[] result = new int[ids.size()]; + int index = 0; + + for(int id : ids) { + result[index++] = id; + } + + return result; + } } diff --git a/v1_13_R1/src/main/java/com/lishid/orebfuscator/nms/v1_13_R1/NmsManager.java b/v1_13_R1/src/main/java/com/lishid/orebfuscator/nms/v1_13_R1/NmsManager.java index dab1188..1d190c5 100644 --- a/v1_13_R1/src/main/java/com/lishid/orebfuscator/nms/v1_13_R1/NmsManager.java +++ b/v1_13_R1/src/main/java/com/lishid/orebfuscator/nms/v1_13_R1/NmsManager.java @@ -44,6 +44,7 @@ public class NmsManager implements INmsManager { private Set BLOCK_ID_SIGNS; private ConfigDefaults configDefaults; + private Material[] extraTransparentBlocks; private int maxLoadedCacheFiles; private HashMap> materialIds; @@ -158,6 +159,233 @@ public class NmsManager implements INmsManager { this.configDefaults.normalWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { Material.STONE }); + + // Extra transparent blocks + + this.extraTransparentBlocks = new Material[] { + Material.ACACIA_DOOR, + Material.ACACIA_FENCE, + Material.ACACIA_FENCE_GATE, + Material.ACACIA_LEAVES, + Material.ACACIA_PRESSURE_PLATE, + Material.ACACIA_SLAB, + Material.ACACIA_STAIRS, + Material.ACACIA_TRAPDOOR, + Material.ANVIL, + Material.BEACON, + Material.BIRCH_DOOR, + Material.BIRCH_FENCE, + Material.BIRCH_FENCE_GATE, + Material.BIRCH_LEAVES, + Material.BIRCH_PRESSURE_PLATE, + Material.BIRCH_SLAB, + Material.BIRCH_STAIRS, + Material.BIRCH_TRAPDOOR, + Material.BLACK_BANNER, + Material.BLACK_BED, + Material.BLACK_STAINED_GLASS, + Material.BLACK_STAINED_GLASS_PANE, + Material.BLACK_WALL_BANNER, + Material.BLUE_BANNER, + Material.BLUE_BED, + Material.BLUE_ICE, + Material.BLUE_STAINED_GLASS, + Material.BLUE_STAINED_GLASS_PANE, + Material.BLUE_WALL_BANNER, + Material.BREWING_STAND, + Material.BRICK_SLAB, + Material.BRICK_STAIRS, + Material.BRAIN_CORAL, + Material.BRAIN_CORAL_FAN, + Material.BRAIN_CORAL_WALL_FAN, + Material.BROWN_BANNER, + Material.BROWN_BED, + Material.BROWN_STAINED_GLASS, + Material.BROWN_STAINED_GLASS_PANE, + Material.BROWN_WALL_BANNER, + Material.BUBBLE_COLUMN, + Material.BUBBLE_CORAL, + Material.BUBBLE_CORAL_FAN, + Material.BUBBLE_CORAL_WALL_FAN, + Material.CACTUS, + Material.CAKE, + Material.CAULDRON, + Material.CHIPPED_ANVIL, + Material.COBBLESTONE_SLAB, + Material.COBBLESTONE_STAIRS, + Material.COBBLESTONE_WALL, + Material.COBWEB, + Material.CONDUIT, + Material.CYAN_BANNER, + Material.CYAN_BED, + Material.CYAN_STAINED_GLASS, + Material.CYAN_STAINED_GLASS_PANE, + Material.CYAN_WALL_BANNER, + Material.DAMAGED_ANVIL, + Material.DARK_OAK_DOOR, + Material.DARK_OAK_FENCE, + Material.DARK_OAK_FENCE_GATE, + Material.DARK_OAK_LEAVES, + Material.DARK_OAK_PRESSURE_PLATE, + Material.DARK_OAK_SLAB, + Material.DARK_OAK_STAIRS, + Material.DARK_OAK_TRAPDOOR, + Material.DARK_PRISMARINE_SLAB, + Material.DARK_PRISMARINE_STAIRS, + Material.DAYLIGHT_DETECTOR, + Material.DEAD_BRAIN_CORAL_FAN, + Material.DEAD_BRAIN_CORAL_WALL_FAN, + Material.DEAD_BUBBLE_CORAL_FAN, + Material.DEAD_BUBBLE_CORAL_WALL_FAN, + Material.DEAD_FIRE_CORAL_FAN, + Material.DEAD_FIRE_CORAL_WALL_FAN, + Material.DEAD_HORN_CORAL_FAN, + Material.DEAD_HORN_CORAL_WALL_FAN, + Material.DEAD_TUBE_CORAL_FAN, + Material.DEAD_TUBE_CORAL_WALL_FAN, + Material.DRAGON_EGG, + Material.FARMLAND, + Material.FIRE_CORAL, + Material.FIRE_CORAL_FAN, + Material.FIRE_CORAL_WALL_FAN, + Material.FROSTED_ICE, + Material.GLASS, + Material.GLASS_PANE, + Material.GRAY_BANNER, + Material.GRAY_BED, + Material.GRAY_STAINED_GLASS, + Material.GRAY_STAINED_GLASS_PANE, + Material.GRAY_WALL_BANNER, + Material.GREEN_BANNER, + Material.GREEN_BED, + Material.GREEN_STAINED_GLASS, + Material.GREEN_STAINED_GLASS_PANE, + Material.GREEN_WALL_BANNER, + Material.HEAVY_WEIGHTED_PRESSURE_PLATE, + Material.HOPPER, + Material.HORN_CORAL, + Material.HORN_CORAL_FAN, + Material.HORN_CORAL_WALL_FAN, + Material.ICE, + Material.IRON_BARS, + Material.IRON_DOOR, + Material.IRON_TRAPDOOR, + Material.JUNGLE_DOOR, + Material.JUNGLE_FENCE, + Material.JUNGLE_FENCE_GATE, + Material.JUNGLE_LEAVES, + Material.JUNGLE_PRESSURE_PLATE, + Material.JUNGLE_SLAB, + Material.JUNGLE_STAIRS, + Material.JUNGLE_TRAPDOOR, + Material.KELP, + Material.KELP_PLANT, + Material.LIGHT_BLUE_BANNER, + Material.LIGHT_BLUE_BED, + Material.LIGHT_BLUE_STAINED_GLASS, + Material.LIGHT_BLUE_STAINED_GLASS_PANE, + Material.LIGHT_BLUE_WALL_BANNER, + Material.LIGHT_GRAY_BANNER, + Material.LIGHT_GRAY_BED, + Material.LIGHT_GRAY_STAINED_GLASS, + Material.LIGHT_GRAY_STAINED_GLASS_PANE, + Material.LIGHT_GRAY_WALL_BANNER, + Material.LIGHT_WEIGHTED_PRESSURE_PLATE, + Material.LIME_BANNER, + Material.LIME_BED, + Material.LIME_STAINED_GLASS, + Material.LIME_STAINED_GLASS_PANE, + Material.LIME_WALL_BANNER, + Material.MAGENTA_BANNER, + Material.MAGENTA_BED, + Material.MAGENTA_STAINED_GLASS, + Material.MAGENTA_STAINED_GLASS_PANE, + Material.MAGENTA_WALL_BANNER, + Material.MOSSY_COBBLESTONE_WALL, + Material.MOVING_PISTON, + Material.NETHER_BRICK_FENCE, + Material.NETHER_BRICK_SLAB, + Material.NETHER_BRICK_STAIRS, + Material.OAK_DOOR, + Material.OAK_FENCE, + Material.OAK_FENCE_GATE, + Material.OAK_LEAVES, + Material.OAK_PRESSURE_PLATE, + Material.OAK_SLAB, + Material.OAK_STAIRS, + Material.OAK_TRAPDOOR, + Material.ORANGE_BANNER, + Material.ORANGE_BED, + Material.ORANGE_STAINED_GLASS, + Material.ORANGE_STAINED_GLASS_PANE, + Material.ORANGE_WALL_BANNER, + Material.PACKED_ICE, + Material.PETRIFIED_OAK_SLAB, + Material.PINK_BANNER, + Material.PINK_BED, + Material.PINK_STAINED_GLASS, + Material.PINK_STAINED_GLASS_PANE, + Material.PINK_WALL_BANNER, + Material.PISTON, + Material.PISTON_HEAD, + Material.PRISMARINE_BRICK_SLAB, + Material.PRISMARINE_BRICK_STAIRS, + Material.PRISMARINE_SLAB, + Material.PRISMARINE_STAIRS, + Material.PURPLE_BANNER, + Material.PURPLE_BED, + Material.PURPLE_STAINED_GLASS, + Material.PURPLE_STAINED_GLASS_PANE, + Material.PURPLE_WALL_BANNER, + Material.PURPUR_SLAB, + Material.PURPUR_STAIRS, + Material.QUARTZ_SLAB, + Material.QUARTZ_STAIRS, + Material.RED_BANNER, + Material.RED_BED, + Material.RED_SANDSTONE_SLAB, + Material.RED_SANDSTONE_STAIRS, + Material.RED_STAINED_GLASS, + Material.RED_STAINED_GLASS_PANE, + Material.RED_WALL_BANNER, + Material.SANDSTONE_SLAB, + Material.SANDSTONE_STAIRS, + Material.SEAGRASS, + Material.SEA_PICKLE, + Material.SIGN, + Material.SLIME_BLOCK, + Material.SPAWNER, + Material.SPRUCE_DOOR, + Material.SPRUCE_FENCE, + Material.SPRUCE_FENCE_GATE, + Material.SPRUCE_LEAVES, + Material.SPRUCE_PRESSURE_PLATE, + Material.SPRUCE_SLAB, + Material.SPRUCE_STAIRS, + Material.SPRUCE_TRAPDOOR, + Material.STICKY_PISTON, + Material.STONE_BRICK_SLAB, + Material.STONE_BRICK_STAIRS, + Material.STONE_PRESSURE_PLATE, + Material.STONE_SLAB, + Material.TALL_SEAGRASS, + Material.TUBE_CORAL, + Material.TUBE_CORAL_FAN, + Material.TUBE_CORAL_WALL_FAN, + Material.TURTLE_EGG, + Material.WALL_SIGN, + Material.WATER, + Material.WHITE_BANNER, + Material.WHITE_BED, + Material.WHITE_STAINED_GLASS, + Material.WHITE_STAINED_GLASS_PANE, + Material.WHITE_WALL_BANNER, + Material.YELLOW_BANNER, + Material.YELLOW_BED, + Material.YELLOW_STAINED_GLASS, + Material.YELLOW_STAINED_GLASS_PANE, + Material.YELLOW_WALL_BANNER + }; } private void initBlockIds() { @@ -184,6 +412,10 @@ public class NmsManager implements INmsManager { return this.configDefaults; } + public Material[] getExtraTransparentBlocks() { + return this.extraTransparentBlocks; + } + public void setMaxLoadedCacheFiles(int value) { this.maxLoadedCacheFiles = value; } @@ -281,10 +513,6 @@ public class NmsManager implements INmsManager { return this.materialIds.get(material); } - public int getTypeId(int combinedBlockId) { - return combinedBlockId; - } - public boolean sendBlockChange(Player player, Location blockLocation) { IBlockData blockData = getBlockData(blockLocation.getWorld(), blockLocation.getBlockX(), blockLocation.getBlockY(), blockLocation.getBlockZ(), false); diff --git a/v1_13_R2/src/main/java/com/lishid/orebfuscator/nms/v1_13_R2/NmsManager.java b/v1_13_R2/src/main/java/com/lishid/orebfuscator/nms/v1_13_R2/NmsManager.java index c0987dd..b6f4dfd 100644 --- a/v1_13_R2/src/main/java/com/lishid/orebfuscator/nms/v1_13_R2/NmsManager.java +++ b/v1_13_R2/src/main/java/com/lishid/orebfuscator/nms/v1_13_R2/NmsManager.java @@ -37,6 +37,7 @@ public class NmsManager implements INmsManager { private ConfigDefaults configDefaults; private int maxLoadedCacheFiles; + private Material[] extraTransparentBlocks; private HashMap> materialIds; public NmsManager() { @@ -150,6 +151,238 @@ public class NmsManager implements INmsManager { this.configDefaults.normalWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { Material.STONE }); + + // Extra transparent blocks + + this.extraTransparentBlocks = new Material[] { + Material.ACACIA_DOOR, + Material.ACACIA_FENCE, + Material.ACACIA_FENCE_GATE, + Material.ACACIA_LEAVES, + Material.ACACIA_PRESSURE_PLATE, + Material.ACACIA_SLAB, + Material.ACACIA_STAIRS, + Material.ACACIA_TRAPDOOR, + Material.ANVIL, + Material.BEACON, + Material.BIRCH_DOOR, + Material.BIRCH_FENCE, + Material.BIRCH_FENCE_GATE, + Material.BIRCH_LEAVES, + Material.BIRCH_PRESSURE_PLATE, + Material.BIRCH_SLAB, + Material.BIRCH_STAIRS, + Material.BIRCH_TRAPDOOR, + Material.BLACK_BANNER, + Material.BLACK_BED, + Material.BLACK_STAINED_GLASS, + Material.BLACK_STAINED_GLASS_PANE, + Material.BLACK_WALL_BANNER, + Material.BLUE_BANNER, + Material.BLUE_BED, + Material.BLUE_ICE, + Material.BLUE_STAINED_GLASS, + Material.BLUE_STAINED_GLASS_PANE, + Material.BLUE_WALL_BANNER, + Material.BREWING_STAND, + Material.BRICK_SLAB, + Material.BRICK_STAIRS, + Material.BRAIN_CORAL, + Material.BRAIN_CORAL_FAN, + Material.BRAIN_CORAL_WALL_FAN, + Material.BROWN_BANNER, + Material.BROWN_BED, + Material.BROWN_STAINED_GLASS, + Material.BROWN_STAINED_GLASS_PANE, + Material.BROWN_WALL_BANNER, + Material.BUBBLE_COLUMN, + Material.BUBBLE_CORAL, + Material.BUBBLE_CORAL_FAN, + Material.BUBBLE_CORAL_WALL_FAN, + Material.CACTUS, + Material.CAKE, + Material.CAULDRON, + Material.CHIPPED_ANVIL, + Material.COBBLESTONE_SLAB, + Material.COBBLESTONE_STAIRS, + Material.COBBLESTONE_WALL, + Material.COBWEB, + Material.CONDUIT, + Material.CYAN_BANNER, + Material.CYAN_BED, + Material.CYAN_STAINED_GLASS, + Material.CYAN_STAINED_GLASS_PANE, + Material.CYAN_WALL_BANNER, + Material.DAMAGED_ANVIL, + Material.DARK_OAK_DOOR, + Material.DARK_OAK_FENCE, + Material.DARK_OAK_FENCE_GATE, + Material.DARK_OAK_LEAVES, + Material.DARK_OAK_PRESSURE_PLATE, + Material.DARK_OAK_SLAB, + Material.DARK_OAK_STAIRS, + Material.DARK_OAK_TRAPDOOR, + Material.DARK_PRISMARINE_SLAB, + Material.DARK_PRISMARINE_STAIRS, + Material.DAYLIGHT_DETECTOR, + Material.DEAD_BRAIN_CORAL, + Material.DEAD_BRAIN_CORAL_FAN, + Material.DEAD_BRAIN_CORAL_WALL_FAN, + Material.DEAD_BUBBLE_CORAL, + Material.DEAD_BUBBLE_CORAL_FAN, + Material.DEAD_BUBBLE_CORAL_WALL_FAN, + Material.DEAD_FIRE_CORAL, + Material.DEAD_FIRE_CORAL_FAN, + Material.DEAD_FIRE_CORAL_WALL_FAN, + Material.DEAD_HORN_CORAL, + Material.DEAD_HORN_CORAL_FAN, + Material.DEAD_HORN_CORAL_WALL_FAN, + Material.DEAD_TUBE_CORAL, + Material.DEAD_TUBE_CORAL_FAN, + Material.DEAD_TUBE_CORAL_WALL_FAN, + Material.DRAGON_EGG, + Material.FARMLAND, + Material.FIRE_CORAL, + Material.FIRE_CORAL_FAN, + Material.FIRE_CORAL_WALL_FAN, + Material.FROSTED_ICE, + Material.GLASS, + Material.GLASS_PANE, + Material.GRAY_BANNER, + Material.GRAY_BED, + Material.GRAY_STAINED_GLASS, + Material.GRAY_STAINED_GLASS_PANE, + Material.GRAY_WALL_BANNER, + Material.GREEN_BANNER, + Material.GREEN_BED, + Material.GREEN_STAINED_GLASS, + Material.GREEN_STAINED_GLASS_PANE, + Material.GREEN_WALL_BANNER, + Material.HEAVY_WEIGHTED_PRESSURE_PLATE, + Material.HOPPER, + Material.HORN_CORAL, + Material.HORN_CORAL_FAN, + Material.HORN_CORAL_WALL_FAN, + Material.ICE, + Material.IRON_BARS, + Material.IRON_DOOR, + Material.IRON_TRAPDOOR, + Material.JUNGLE_DOOR, + Material.JUNGLE_FENCE, + Material.JUNGLE_FENCE_GATE, + Material.JUNGLE_LEAVES, + Material.JUNGLE_PRESSURE_PLATE, + Material.JUNGLE_SLAB, + Material.JUNGLE_STAIRS, + Material.JUNGLE_TRAPDOOR, + Material.KELP, + Material.KELP_PLANT, + Material.LIGHT_BLUE_BANNER, + Material.LIGHT_BLUE_BED, + Material.LIGHT_BLUE_STAINED_GLASS, + Material.LIGHT_BLUE_STAINED_GLASS_PANE, + Material.LIGHT_BLUE_WALL_BANNER, + Material.LIGHT_GRAY_BANNER, + Material.LIGHT_GRAY_BED, + Material.LIGHT_GRAY_STAINED_GLASS, + Material.LIGHT_GRAY_STAINED_GLASS_PANE, + Material.LIGHT_GRAY_WALL_BANNER, + Material.LIGHT_WEIGHTED_PRESSURE_PLATE, + Material.LIME_BANNER, + Material.LIME_BED, + Material.LIME_STAINED_GLASS, + Material.LIME_STAINED_GLASS_PANE, + Material.LIME_WALL_BANNER, + Material.MAGENTA_BANNER, + Material.MAGENTA_BED, + Material.MAGENTA_STAINED_GLASS, + Material.MAGENTA_STAINED_GLASS_PANE, + Material.MAGENTA_WALL_BANNER, + Material.MOSSY_COBBLESTONE_WALL, + Material.MOVING_PISTON, + Material.NETHER_BRICK_FENCE, + Material.NETHER_BRICK_SLAB, + Material.NETHER_BRICK_STAIRS, + Material.OAK_DOOR, + Material.OAK_FENCE, + Material.OAK_FENCE_GATE, + Material.OAK_LEAVES, + Material.OAK_PRESSURE_PLATE, + Material.OAK_SLAB, + Material.OAK_STAIRS, + Material.OAK_TRAPDOOR, + Material.ORANGE_BANNER, + Material.ORANGE_BED, + Material.ORANGE_STAINED_GLASS, + Material.ORANGE_STAINED_GLASS_PANE, + Material.ORANGE_WALL_BANNER, + Material.PACKED_ICE, + Material.PETRIFIED_OAK_SLAB, + Material.PINK_BANNER, + Material.PINK_BED, + Material.PINK_STAINED_GLASS, + Material.PINK_STAINED_GLASS_PANE, + Material.PINK_WALL_BANNER, + Material.PISTON, + Material.PISTON_HEAD, + Material.PRISMARINE_BRICK_SLAB, + Material.PRISMARINE_BRICK_STAIRS, + Material.PRISMARINE_SLAB, + Material.PRISMARINE_STAIRS, + Material.PURPLE_BANNER, + Material.PURPLE_BED, + Material.PURPLE_STAINED_GLASS, + Material.PURPLE_STAINED_GLASS_PANE, + Material.PURPLE_WALL_BANNER, + Material.PURPUR_SLAB, + Material.PURPUR_STAIRS, + Material.QUARTZ_SLAB, + Material.QUARTZ_STAIRS, + Material.RED_BANNER, + Material.RED_BED, + Material.RED_SANDSTONE_SLAB, + Material.RED_SANDSTONE_STAIRS, + Material.RED_STAINED_GLASS, + Material.RED_STAINED_GLASS_PANE, + Material.RED_WALL_BANNER, + Material.SANDSTONE_SLAB, + Material.SANDSTONE_STAIRS, + Material.SEAGRASS, + Material.SEA_PICKLE, + Material.SIGN, + Material.SLIME_BLOCK, + Material.SPAWNER, + Material.SPRUCE_DOOR, + Material.SPRUCE_FENCE, + Material.SPRUCE_FENCE_GATE, + Material.SPRUCE_LEAVES, + Material.SPRUCE_PRESSURE_PLATE, + Material.SPRUCE_SLAB, + Material.SPRUCE_STAIRS, + Material.SPRUCE_TRAPDOOR, + Material.STICKY_PISTON, + Material.STONE_BRICK_SLAB, + Material.STONE_BRICK_STAIRS, + Material.STONE_PRESSURE_PLATE, + Material.STONE_SLAB, + Material.TALL_SEAGRASS, + Material.TUBE_CORAL, + Material.TUBE_CORAL_FAN, + Material.TUBE_CORAL_WALL_FAN, + Material.TURTLE_EGG, + Material.WALL_SIGN, + Material.WATER, + Material.WHITE_BANNER, + Material.WHITE_BED, + Material.WHITE_STAINED_GLASS, + Material.WHITE_STAINED_GLASS_PANE, + Material.WHITE_WALL_BANNER, + Material.YELLOW_BANNER, + Material.YELLOW_BED, + Material.YELLOW_STAINED_GLASS, + Material.YELLOW_STAINED_GLASS_PANE, + Material.YELLOW_WALL_BANNER + }; } private void initBlockIds() { @@ -172,6 +405,10 @@ public class NmsManager implements INmsManager { }); } + public Material[] getExtraTransparentBlocks() { + return this.extraTransparentBlocks; + } + public ConfigDefaults getConfigDefaults() { return this.configDefaults; } @@ -273,10 +510,6 @@ public class NmsManager implements INmsManager { return this.materialIds.get(material); } - public int getTypeId(int combinedBlockId) { - return combinedBlockId; - } - public boolean sendBlockChange(Player player, Location blockLocation) { IBlockData blockData = getBlockData(blockLocation.getWorld(), blockLocation.getBlockX(), blockLocation.getBlockY(), blockLocation.getBlockZ(), false); diff --git a/v1_9_R1/src/main/java/com/lishid/orebfuscator/nms/v1_9_R1/BlockInfo.java b/v1_9_R1/src/main/java/com/lishid/orebfuscator/nms/v1_9_R1/BlockInfo.java index a389cb5..17f7302 100644 --- a/v1_9_R1/src/main/java/com/lishid/orebfuscator/nms/v1_9_R1/BlockInfo.java +++ b/v1_9_R1/src/main/java/com/lishid/orebfuscator/nms/v1_9_R1/BlockInfo.java @@ -36,7 +36,8 @@ public class BlockInfo implements IBlockInfo { } public int getCombinedId() { - return Block.getCombinedId(this.blockData); + Block block = this.blockData.getBlock(); + return (Block.getId(block) << 4) | block.toLegacyData(this.blockData); } public IBlockData getBlockData() { diff --git a/v1_9_R1/src/main/java/com/lishid/orebfuscator/nms/v1_9_R1/NmsManager.java b/v1_9_R1/src/main/java/com/lishid/orebfuscator/nms/v1_9_R1/NmsManager.java index 42cbc46..4e369a2 100644 --- a/v1_9_R1/src/main/java/com/lishid/orebfuscator/nms/v1_9_R1/NmsManager.java +++ b/v1_9_R1/src/main/java/com/lishid/orebfuscator/nms/v1_9_R1/NmsManager.java @@ -6,6 +6,7 @@ package com.lishid.orebfuscator.nms.v1_9_R1; +import com.google.common.collect.ImmutableList; import com.lishid.orebfuscator.types.ConfigDefaults; import net.minecraft.server.v1_9_R1.Block; import net.minecraft.server.v1_9_R1.BlockPosition; @@ -31,10 +32,12 @@ import com.lishid.orebfuscator.nms.INBT; import com.lishid.orebfuscator.nms.INmsManager; import com.lishid.orebfuscator.types.BlockCoord; +import java.util.HashSet; import java.util.Set; public class NmsManager implements INmsManager { private ConfigDefaults configDefaults; + private Material[] extraTransparentBlocks; private int maxLoadedCacheFiles; public NmsManager() { @@ -42,104 +45,189 @@ public class NmsManager implements INmsManager { // Default World - this.configDefaults.defaultProximityHiderBlockIds = new int[] { - getMaterialId(Material.DISPENSER), - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST), - getMaterialId(Material.HOPPER), - getMaterialId(Material.WORKBENCH), - getMaterialId(Material.FURNACE), - getMaterialId(Material.BURNING_FURNACE), - getMaterialId(Material.ENCHANTMENT_TABLE), - getMaterialId(Material.EMERALD_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.ANVIL), - getMaterialId(Material.TRAPPED_CHEST), - getMaterialId(Material.DIAMOND_ORE) - }; + this.configDefaults.defaultProximityHiderBlockIds = convertMaterialsToIds(new Material[] { + Material.DISPENSER, + Material.MOB_SPAWNER, + Material.CHEST, + Material.HOPPER, + Material.WORKBENCH, + Material.FURNACE, + Material.BURNING_FURNACE, + Material.ENCHANTMENT_TABLE, + Material.EMERALD_ORE, + Material.ENDER_CHEST, + Material.ANVIL, + Material.TRAPPED_CHEST, + Material.DIAMOND_ORE + }); - this.configDefaults.defaultDarknessBlockIds = new int[] { - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST) - }; + this.configDefaults.defaultDarknessBlockIds = convertMaterialsToIds(new Material[] { + Material.MOB_SPAWNER, + Material.CHEST + }); - this.configDefaults.defaultMode1BlockId = getMaterialId(Material.STONE); - this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialId(Material.STONE); + this.configDefaults.defaultMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); + this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialIds(Material.STONE).iterator().next(); // The End - this.configDefaults.endWorldRandomBlockIds = new int[] { - getMaterialId(Material.BEDROCK), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.ENDER_STONE), - getMaterialId(Material.PURPUR_BLOCK), - getMaterialId(Material.END_BRICKS) - }; + this.configDefaults.endWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.BEDROCK, + Material.OBSIDIAN, + Material.ENDER_STONE, + Material.PURPUR_BLOCK, + Material.END_BRICKS + }); - this.configDefaults.endWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.ENDER_STONE) - }; + this.configDefaults.endWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.ENDER_STONE + }); - this.configDefaults.endWorldMode1BlockId = getMaterialId(Material.ENDER_STONE); - this.configDefaults.endWorldRequiredObfuscateBlockIds = new int[] { getMaterialId(Material.ENDER_STONE) }; + this.configDefaults.endWorldMode1BlockId = getMaterialIds(Material.ENDER_STONE).iterator().next(); + this.configDefaults.endWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { Material.ENDER_STONE }); // Nether World - this.configDefaults.netherWorldRandomBlockIds = new int[] { - getMaterialId(Material.GRAVEL), - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.SOUL_SAND), - getMaterialId(Material.NETHER_BRICK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.GRAVEL, + Material.NETHERRACK, + Material.SOUL_SAND, + Material.NETHER_BRICK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldMode1BlockId = getMaterialId(Material.NETHERRACK); + this.configDefaults.netherWorldMode1BlockId = getMaterialIds(Material.NETHERRACK).iterator().next(); - this.configDefaults.netherWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK) - }; + this.configDefaults.netherWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK + }); // Normal World - this.configDefaults.normalWorldRandomBlockIds = new int[] { - getMaterialId(Material.STONE), - getMaterialId(Material.COBBLESTONE), - getMaterialId(Material.WOOD), - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.TNT), - getMaterialId(Material.MOSSY_COBBLESTONE), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE, + Material.COBBLESTONE, + Material.WOOD, + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.TNT, + Material.MOSSY_COBBLESTONE, + Material.OBSIDIAN, + Material.DIAMOND_ORE, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.CHEST), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.CHEST, + Material.DIAMOND_ORE, + Material.ENDER_CHEST, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldMode1BlockId = getMaterialId(Material.STONE); + this.configDefaults.normalWorldMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); - this.configDefaults.normalWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.STONE) + this.configDefaults.normalWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE + }); + + // Extra transparent blocks + + this.extraTransparentBlocks = new Material[] { + Material.ACACIA_DOOR, + Material.ACACIA_FENCE, + Material.ACACIA_FENCE_GATE, + Material.ACACIA_STAIRS, + Material.ANVIL, + Material.BEACON, + Material.BED_BLOCK, + Material.BIRCH_DOOR, + Material.BIRCH_FENCE, + Material.BIRCH_FENCE_GATE, + Material.BIRCH_WOOD_STAIRS, + Material.BREWING_STAND, + Material.BRICK_STAIRS, + Material.CACTUS, + Material.CAKE_BLOCK, + Material.CAULDRON, + Material.COBBLESTONE_STAIRS, + Material.COBBLE_WALL, + Material.DARK_OAK_DOOR, + Material.DARK_OAK_FENCE, + Material.DARK_OAK_FENCE_GATE, + Material.DARK_OAK_STAIRS, + Material.DAYLIGHT_DETECTOR, + Material.DAYLIGHT_DETECTOR_INVERTED, + Material.DRAGON_EGG, + Material.ENCHANTMENT_TABLE, + Material.FENCE, + Material.FENCE_GATE, + Material.GLASS, + Material.HOPPER, + Material.ICE, + Material.IRON_DOOR_BLOCK, + Material.IRON_FENCE, + Material.IRON_PLATE, + Material.IRON_TRAPDOOR, + Material.JUNGLE_DOOR, + Material.JUNGLE_FENCE, + Material.JUNGLE_FENCE_GATE, + Material.JUNGLE_WOOD_STAIRS, + Material.LAVA, + Material.LEAVES, + Material.LEAVES_2, + Material.MOB_SPAWNER, + Material.NETHER_BRICK_STAIRS, + Material.NETHER_FENCE, + Material.PACKED_ICE, + Material.PISTON_BASE, + Material.PISTON_EXTENSION, + Material.PISTON_MOVING_PIECE, + Material.PISTON_STICKY_BASE, + Material.PURPUR_SLAB, + Material.PURPUR_STAIRS, + Material.QUARTZ_STAIRS, + Material.RED_SANDSTONE_STAIRS, + Material.SANDSTONE_STAIRS, + Material.SIGN_POST, + Material.SLIME_BLOCK, + Material.SMOOTH_STAIRS, + Material.SPRUCE_DOOR, + Material.SPRUCE_FENCE, + Material.SPRUCE_FENCE_GATE, + Material.SPRUCE_WOOD_STAIRS, + Material.STAINED_GLASS, + Material.STAINED_GLASS_PANE, + Material.STANDING_BANNER, + Material.STATIONARY_LAVA, + Material.STATIONARY_WATER, + Material.STEP, + Material.STONE_PLATE, + Material.STONE_SLAB2, + Material.THIN_GLASS, + Material.TRAP_DOOR, + Material.WALL_BANNER, + Material.WALL_SIGN, + Material.WATER, + Material.WEB, + Material.WOODEN_DOOR, + Material.WOOD_PLATE, + Material.WOOD_STAIRS, + Material.WOOD_STEP }; } @@ -147,6 +235,10 @@ public class NmsManager implements INmsManager { return this.configDefaults; } + public Material[] getExtraTransparentBlocks() { + return this.extraTransparentBlocks; + } + public void setMaxLoadedCacheFiles(int value) { this.maxLoadedCacheFiles = value; } @@ -211,9 +303,12 @@ public class NmsManager implements INmsManager { || item == Material.DIAMOND_HOE; } + @SuppressWarnings("deprecation") public boolean isSign(int combinedBlockId) { - return combinedBlockId == getMaterialId(Material.WALL_SIGN) - || combinedBlockId == getMaterialId(Material.SIGN_POST); + int typeId = combinedBlockId >> 4; + + return typeId == Material.WALL_SIGN.getId() + || typeId == Material.SIGN_POST.getId(); } public boolean isAir(int combinedBlockId) { @@ -242,16 +337,17 @@ public class NmsManager implements INmsManager { } @SuppressWarnings("deprecation") - public int getMaterialId(Material material) { - return material.getId() << 4; - } - public Set getMaterialIds(Material material) { - return null; - } + Set ids = new HashSet<>(); + int blockId = material.getId() << 4; + Block block = Block.getById(material.getId()); + ImmutableList blockDataList = block.t().a(); - public int getTypeId(int combinedBlockId) { - return combinedBlockId & ~(0x0F); + for(IBlockData blockData : blockDataList) { + ids.add(blockId | block.toLegacyData(blockData)); + } + + return ids; } @SuppressWarnings("deprecation") @@ -282,4 +378,27 @@ public class NmsManager implements INmsManager { return chunk != null ? chunk.getBlockData(new BlockPosition(x, y, z)) : null; } + + private Set convertMaterialsToSet(Material[] materials) { + Set ids = new HashSet<>(); + + for(Material material : materials) { + ids.addAll(getMaterialIds(material)); + } + + return ids; + } + + private int[] convertMaterialsToIds(Material[] materials) { + Set ids = convertMaterialsToSet(materials); + + int[] result = new int[ids.size()]; + int index = 0; + + for(int id : ids) { + result[index++] = id; + } + + return result; + } } \ No newline at end of file diff --git a/v1_9_R2/src/main/java/com/lishid/orebfuscator/nms/v1_9_R2/BlockInfo.java b/v1_9_R2/src/main/java/com/lishid/orebfuscator/nms/v1_9_R2/BlockInfo.java index 3dd334a..c4880b4 100644 --- a/v1_9_R2/src/main/java/com/lishid/orebfuscator/nms/v1_9_R2/BlockInfo.java +++ b/v1_9_R2/src/main/java/com/lishid/orebfuscator/nms/v1_9_R2/BlockInfo.java @@ -36,9 +36,10 @@ public class BlockInfo implements IBlockInfo { } public int getCombinedId() { - return Block.getCombinedId(this.blockData); + Block block = this.blockData.getBlock(); + return (Block.getId(block) << 4) | block.toLegacyData(this.blockData); } - + public IBlockData getBlockData() { return this.blockData; } diff --git a/v1_9_R2/src/main/java/com/lishid/orebfuscator/nms/v1_9_R2/NmsManager.java b/v1_9_R2/src/main/java/com/lishid/orebfuscator/nms/v1_9_R2/NmsManager.java index 2dff4f3..27d3bfe 100644 --- a/v1_9_R2/src/main/java/com/lishid/orebfuscator/nms/v1_9_R2/NmsManager.java +++ b/v1_9_R2/src/main/java/com/lishid/orebfuscator/nms/v1_9_R2/NmsManager.java @@ -6,6 +6,7 @@ package com.lishid.orebfuscator.nms.v1_9_R2; +import com.google.common.collect.ImmutableList; import com.lishid.orebfuscator.types.ConfigDefaults; import net.minecraft.server.v1_9_R2.Block; import net.minecraft.server.v1_9_R2.BlockPosition; @@ -31,10 +32,12 @@ import com.lishid.orebfuscator.nms.INBT; import com.lishid.orebfuscator.nms.INmsManager; import com.lishid.orebfuscator.types.BlockCoord; +import java.util.HashSet; import java.util.Set; public class NmsManager implements INmsManager { private ConfigDefaults configDefaults; + private Material[] extraTransparentBlocks; private int maxLoadedCacheFiles; public NmsManager() { @@ -42,110 +45,199 @@ public class NmsManager implements INmsManager { // Default World - this.configDefaults.defaultProximityHiderBlockIds = new int[] { - getMaterialId(Material.DISPENSER), - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST), - getMaterialId(Material.HOPPER), - getMaterialId(Material.WORKBENCH), - getMaterialId(Material.FURNACE), - getMaterialId(Material.BURNING_FURNACE), - getMaterialId(Material.ENCHANTMENT_TABLE), - getMaterialId(Material.EMERALD_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.ANVIL), - getMaterialId(Material.TRAPPED_CHEST), - getMaterialId(Material.DIAMOND_ORE) - }; + this.configDefaults.defaultProximityHiderBlockIds = convertMaterialsToIds(new Material[] { + Material.DISPENSER, + Material.MOB_SPAWNER, + Material.CHEST, + Material.HOPPER, + Material.WORKBENCH, + Material.FURNACE, + Material.BURNING_FURNACE, + Material.ENCHANTMENT_TABLE, + Material.EMERALD_ORE, + Material.ENDER_CHEST, + Material.ANVIL, + Material.TRAPPED_CHEST, + Material.DIAMOND_ORE + }); - this.configDefaults.defaultDarknessBlockIds = new int[] { - getMaterialId(Material.MOB_SPAWNER), - getMaterialId(Material.CHEST) - }; + this.configDefaults.defaultDarknessBlockIds = convertMaterialsToIds(new Material[] { + Material.MOB_SPAWNER, + Material.CHEST + }); - this.configDefaults.defaultMode1BlockId = getMaterialId(Material.STONE); - this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialId(Material.STONE); + this.configDefaults.defaultMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); + this.configDefaults.defaultProximityHiderSpecialBlockId = getMaterialIds(Material.STONE).iterator().next(); // The End - this.configDefaults.endWorldRandomBlockIds = new int[] { - getMaterialId(Material.BEDROCK), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.ENDER_STONE), - getMaterialId(Material.PURPUR_BLOCK), - getMaterialId(Material.END_BRICKS) - }; + this.configDefaults.endWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.BEDROCK, + Material.OBSIDIAN, + Material.ENDER_STONE, + Material.PURPUR_BLOCK, + Material.END_BRICKS + }); - this.configDefaults.endWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.ENDER_STONE) - }; + this.configDefaults.endWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.ENDER_STONE + }); - this.configDefaults.endWorldMode1BlockId = getMaterialId(Material.ENDER_STONE); - this.configDefaults.endWorldRequiredObfuscateBlockIds = new int[] { getMaterialId(Material.ENDER_STONE) }; + this.configDefaults.endWorldMode1BlockId = getMaterialIds(Material.ENDER_STONE).iterator().next(); + this.configDefaults.endWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { Material.ENDER_STONE }); // Nether World - this.configDefaults.netherWorldRandomBlockIds = new int[] { - getMaterialId(Material.GRAVEL), - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.SOUL_SAND), - getMaterialId(Material.NETHER_BRICK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.GRAVEL, + Material.NETHERRACK, + Material.SOUL_SAND, + Material.NETHER_BRICK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK), - getMaterialId(Material.QUARTZ_ORE) - }; + this.configDefaults.netherWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK, + Material.QUARTZ_ORE + }); - this.configDefaults.netherWorldMode1BlockId = getMaterialId(Material.NETHERRACK); + this.configDefaults.netherWorldMode1BlockId = getMaterialIds(Material.NETHERRACK).iterator().next(); - this.configDefaults.netherWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.NETHERRACK) - }; + this.configDefaults.netherWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.NETHERRACK + }); // Normal World - this.configDefaults.normalWorldRandomBlockIds = new int[] { - getMaterialId(Material.STONE), - getMaterialId(Material.COBBLESTONE), - getMaterialId(Material.WOOD), - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.TNT), - getMaterialId(Material.MOSSY_COBBLESTONE), - getMaterialId(Material.OBSIDIAN), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldRandomBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE, + Material.COBBLESTONE, + Material.WOOD, + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.TNT, + Material.MOSSY_COBBLESTONE, + Material.OBSIDIAN, + Material.DIAMOND_ORE, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldObfuscateBlockIds = new int[] { - getMaterialId(Material.GOLD_ORE), - getMaterialId(Material.IRON_ORE), - getMaterialId(Material.COAL_ORE), - getMaterialId(Material.LAPIS_ORE), - getMaterialId(Material.CHEST), - getMaterialId(Material.DIAMOND_ORE), - getMaterialId(Material.ENDER_CHEST), - getMaterialId(Material.REDSTONE_ORE), - getMaterialId(Material.CLAY), - getMaterialId(Material.EMERALD_ORE) - }; + this.configDefaults.normalWorldObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.GOLD_ORE, + Material.IRON_ORE, + Material.COAL_ORE, + Material.LAPIS_ORE, + Material.CHEST, + Material.DIAMOND_ORE, + Material.ENDER_CHEST, + Material.REDSTONE_ORE, + Material.CLAY, + Material.EMERALD_ORE + }); - this.configDefaults.normalWorldMode1BlockId = getMaterialId(Material.STONE); + this.configDefaults.normalWorldMode1BlockId = getMaterialIds(Material.STONE).iterator().next(); - this.configDefaults.normalWorldRequiredObfuscateBlockIds = new int[] { - getMaterialId(Material.STONE) + this.configDefaults.normalWorldRequiredObfuscateBlockIds = convertMaterialsToIds(new Material[] { + Material.STONE + }); + + // Extra transparent blocks + + this.extraTransparentBlocks = new Material[] { + Material.ACACIA_DOOR, + Material.ACACIA_FENCE, + Material.ACACIA_FENCE_GATE, + Material.ACACIA_STAIRS, + Material.ANVIL, + Material.BEACON, + Material.BED_BLOCK, + Material.BIRCH_DOOR, + Material.BIRCH_FENCE, + Material.BIRCH_FENCE_GATE, + Material.BIRCH_WOOD_STAIRS, + Material.BREWING_STAND, + Material.BRICK_STAIRS, + Material.CACTUS, + Material.CAKE_BLOCK, + Material.CAULDRON, + Material.COBBLESTONE_STAIRS, + Material.COBBLE_WALL, + Material.DARK_OAK_DOOR, + Material.DARK_OAK_FENCE, + Material.DARK_OAK_FENCE_GATE, + Material.DARK_OAK_STAIRS, + Material.DAYLIGHT_DETECTOR, + Material.DAYLIGHT_DETECTOR_INVERTED, + Material.DRAGON_EGG, + Material.ENCHANTMENT_TABLE, + Material.FENCE, + Material.FENCE_GATE, + Material.GLASS, + Material.HOPPER, + Material.ICE, + Material.IRON_DOOR_BLOCK, + Material.IRON_FENCE, + Material.IRON_PLATE, + Material.IRON_TRAPDOOR, + Material.JUNGLE_DOOR, + Material.JUNGLE_FENCE, + Material.JUNGLE_FENCE_GATE, + Material.JUNGLE_WOOD_STAIRS, + Material.LAVA, + Material.LEAVES, + Material.LEAVES_2, + Material.MOB_SPAWNER, + Material.NETHER_BRICK_STAIRS, + Material.NETHER_FENCE, + Material.PACKED_ICE, + Material.PISTON_BASE, + Material.PISTON_EXTENSION, + Material.PISTON_MOVING_PIECE, + Material.PISTON_STICKY_BASE, + Material.PURPUR_SLAB, + Material.PURPUR_STAIRS, + Material.QUARTZ_STAIRS, + Material.RED_SANDSTONE_STAIRS, + Material.SANDSTONE_STAIRS, + Material.SIGN_POST, + Material.SLIME_BLOCK, + Material.SMOOTH_STAIRS, + Material.SPRUCE_DOOR, + Material.SPRUCE_FENCE, + Material.SPRUCE_FENCE_GATE, + Material.SPRUCE_WOOD_STAIRS, + Material.STAINED_GLASS, + Material.STAINED_GLASS_PANE, + Material.STANDING_BANNER, + Material.STATIONARY_LAVA, + Material.STATIONARY_WATER, + Material.STEP, + Material.STONE_PLATE, + Material.STONE_SLAB2, + Material.THIN_GLASS, + Material.TRAP_DOOR, + Material.WALL_BANNER, + Material.WALL_SIGN, + Material.WATER, + Material.WEB, + Material.WOODEN_DOOR, + Material.WOOD_PLATE, + Material.WOOD_STAIRS, + Material.WOOD_STEP }; } public ConfigDefaults getConfigDefaults() { return this.configDefaults; } + + public Material[] getExtraTransparentBlocks() { + return this.extraTransparentBlocks; + } public void setMaxLoadedCacheFiles(int value) { this.maxLoadedCacheFiles = value; @@ -211,9 +303,12 @@ public class NmsManager implements INmsManager { || item == Material.DIAMOND_HOE; } + @SuppressWarnings("deprecation") public boolean isSign(int combinedBlockId) { - return combinedBlockId == getMaterialId(Material.WALL_SIGN) - || combinedBlockId == getMaterialId(Material.SIGN_POST); + int typeId = combinedBlockId >> 4; + + return typeId == Material.WALL_SIGN.getId() + || typeId == Material.SIGN_POST.getId(); } public boolean isAir(int combinedBlockId) { @@ -242,16 +337,17 @@ public class NmsManager implements INmsManager { } @SuppressWarnings("deprecation") - public int getMaterialId(Material material) { - return material.getId() << 4; - } - public Set getMaterialIds(Material material) { - return null; - } + Set ids = new HashSet<>(); + int blockId = material.getId() << 4; + Block block = Block.getById(material.getId()); + ImmutableList blockDataList = block.t().a(); - public int getTypeId(int combinedBlockId) { - return combinedBlockId & ~(0x0F); + for(IBlockData blockData : blockDataList) { + ids.add(blockId | block.toLegacyData(blockData)); + } + + return ids; } @SuppressWarnings("deprecation") @@ -282,4 +378,27 @@ public class NmsManager implements INmsManager { return chunk != null ? chunk.getBlockData(new BlockPosition(x, y, z)) : null; } + + private Set convertMaterialsToSet(Material[] materials) { + Set ids = new HashSet<>(); + + for(Material material : materials) { + ids.addAll(getMaterialIds(material)); + } + + return ids; + } + + private int[] convertMaterialsToIds(Material[] materials) { + Set ids = convertMaterialsToSet(materials); + + int[] result = new int[ids.size()]; + int index = 0; + + for(int id : ids) { + result[index++] = id; + } + + return result; + } }