Added support for pre-1.13 MC, adjusted list of transparency blocks

master
Aleksey-Terzi 2018-10-06 13:19:32 +03:00
parent 9fa505a079
commit 972286af6c
21 changed files with 1559 additions and 706 deletions

View File

@ -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<Integer> getMaterialIds(Material material);
int getTypeId(int combinedBlockId);
boolean sendBlockChange(Player player, Location blockLocation);
}

View File

@ -4,7 +4,7 @@
<groupId>com.lishid</groupId>
<artifactId>orebfuscator</artifactId>
<version>4.4.0-SNAPSHOT</version>
<version>4.4.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Orebfuscator4</name>

View File

@ -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<ChunkMapBuffer> _buffer = new ThreadLocal<ChunkMapBuffer>() {

View File

@ -343,7 +343,8 @@ public class OrebfuscatorCommandExecutor {
private static void commandTransparentBlocks(CommandSender sender, String[] args) {
Material[] materials = Material.values();
List<String> blockNames = new ArrayList<>();
List<String> transparentBlockNames = new ArrayList<>();
List<String> 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);
}

View File

@ -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<Integer> 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<Integer> ids = NmsInstance.current.getMaterialIds(material);
for (int id : ids) {
transparentBlocks[id] = 1;
}
}
Set<Integer> lavaIds = NmsInstance.current.getMaterialIds(Material.LAVA);
for (int id : lavaIds) {
transparentBlocks[id] = (byte)(engineMode == 1 ? 0 : 1);
}
return transparentBlocks;
}
}

View File

@ -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) {

View File

@ -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;

View File

@ -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

View File

@ -1 +0,0 @@
11:false //minecraft:lava

View File

@ -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() {

View File

@ -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<Integer> getMaterialIds(Material material) {
return null;
}
Set<Integer> ids = new HashSet<>();
int blockId = material.getId() << 4;
Block block = Block.getById(material.getId());
ImmutableList<IBlockData> 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<Integer> convertMaterialsToSet(Material[] materials) {
Set<Integer> ids = new HashSet<>();
for(Material material : materials) {
ids.addAll(getMaterialIds(material));
}
return ids;
}
private int[] convertMaterialsToIds(Material[] materials) {
Set<Integer> ids = convertMaterialsToSet(materials);
int[] result = new int[ids.size()];
int index = 0;
for(int id : ids) {
result[index++] = id;
}
return result;
}
}

View File

@ -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() {

View File

@ -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<Integer> getMaterialIds(Material material) {
return null;
}
Set<Integer> ids = new HashSet<>();
int blockId = material.getId() << 4;
Block block = Block.getById(material.getId());
ImmutableList<IBlockData> 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<Integer> convertMaterialsToSet(Material[] materials) {
Set<Integer> ids = new HashSet<>();
for(Material material : materials) {
ids.addAll(getMaterialIds(material));
}
return ids;
}
private int[] convertMaterialsToIds(Material[] materials) {
Set<Integer> ids = convertMaterialsToSet(materials);
int[] result = new int[ids.size()];
int index = 0;
for(int id : ids) {
result[index++] = id;
}
return result;
}
}

View File

@ -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() {

View File

@ -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<Integer> getMaterialIds(Material material) {
return null;
}
Set<Integer> ids = new HashSet<>();
int blockId = material.getId() << 4;
Block block = Block.getById(material.getId());
ImmutableList<IBlockData> 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<Integer> convertMaterialsToSet(Material[] materials) {
Set<Integer> ids = new HashSet<>();
for(Material material : materials) {
ids.addAll(getMaterialIds(material));
}
return ids;
}
private int[] convertMaterialsToIds(Material[] materials) {
Set<Integer> ids = convertMaterialsToSet(materials);
int[] result = new int[ids.size()];
int index = 0;
for(int id : ids) {
result[index++] = id;
}
return result;
}
}

View File

@ -44,6 +44,7 @@ public class NmsManager implements INmsManager {
private Set<Integer> BLOCK_ID_SIGNS;
private ConfigDefaults configDefaults;
private Material[] extraTransparentBlocks;
private int maxLoadedCacheFiles;
private HashMap<Material, Set<Integer>> 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);

View File

@ -37,6 +37,7 @@ public class NmsManager implements INmsManager {
private ConfigDefaults configDefaults;
private int maxLoadedCacheFiles;
private Material[] extraTransparentBlocks;
private HashMap<Material, Set<Integer>> 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);

View File

@ -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() {

View File

@ -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<Integer> getMaterialIds(Material material) {
return null;
}
Set<Integer> ids = new HashSet<>();
int blockId = material.getId() << 4;
Block block = Block.getById(material.getId());
ImmutableList<IBlockData> 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<Integer> convertMaterialsToSet(Material[] materials) {
Set<Integer> ids = new HashSet<>();
for(Material material : materials) {
ids.addAll(getMaterialIds(material));
}
return ids;
}
private int[] convertMaterialsToIds(Material[] materials) {
Set<Integer> ids = convertMaterialsToSet(materials);
int[] result = new int[ids.size()];
int index = 0;
for(int id : ids) {
result[index++] = id;
}
return result;
}
}

View File

@ -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;
}

View File

@ -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<Integer> getMaterialIds(Material material) {
return null;
}
Set<Integer> ids = new HashSet<>();
int blockId = material.getId() << 4;
Block block = Block.getById(material.getId());
ImmutableList<IBlockData> 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<Integer> convertMaterialsToSet(Material[] materials) {
Set<Integer> ids = new HashSet<>();
for(Material material : materials) {
ids.addAll(getMaterialIds(material));
}
return ids;
}
private int[] convertMaterialsToIds(Material[] materials) {
Set<Integer> ids = convertMaterialsToSet(materials);
int[] result = new int[ids.size()];
int index = 0;
for(int id : ids) {
result[index++] = id;
}
return result;
}
}