diff --git a/FightSystem_18/src/de/steamwar/fightsystem/utils/HullHiderWrapper18.java b/FightSystem_18/src/de/steamwar/fightsystem/utils/HullHiderWrapper18.java index 97413f7..86da5d9 100644 --- a/FightSystem_18/src/de/steamwar/fightsystem/utils/HullHiderWrapper18.java +++ b/FightSystem_18/src/de/steamwar/fightsystem/utils/HullHiderWrapper18.java @@ -27,7 +27,10 @@ import net.minecraft.core.SectionPosition; import net.minecraft.network.protocol.game.PacketPlayOutBlockChange; import net.minecraft.network.protocol.game.PacketPlayOutMultiBlockChange; import net.minecraft.world.level.block.state.IBlockData; +import org.bukkit.Material; +import org.bukkit.block.data.BlockData; +import java.util.ArrayList; import java.util.List; @@ -36,20 +39,23 @@ public class HullHiderWrapper18 implements HullHiderWrapper { private static final Reflection.MethodInvoker getState = Reflection.getTypedMethod(Reflection.getClass("{obc}.block.data.CraftBlockData"), "getState", IBlockData.class); @Override public Object generateBlockChangePacket(List changes) { - Object[] blockdata = new Object[changes.size()]; + List blockdata = new ArrayList<>(changes.size()); - for(int i = 0; i < changes.size(); i++) { - Hull.IntVector change = changes.get(i); - blockdata[i] = getState.invoke(Config.world.getBlockData(change.getX(), change.getY(), change.getZ())); - } + changes.removeIf(change -> { + //BlockData data = Config.world.getBlockData(change.getX(), change.getY(), change.getZ()); + BlockData data = Material.EMERALD_BLOCK.createBlockData(); + boolean unchanged = data.getMaterial() == Config.ObfuscateWith; + if(!unchanged) + blockdata.add(getState.invoke(data)); + return unchanged; + }); - return generateBlockChangePacket(changes, blockdata); + return generateBlockChangePacket(changes, blockdata.toArray()); } private Object generateBlockChangePacket(List changes, Object[] blockdata) { if(changes.size() > 1) { Hull.IntVector section = changes.get(0); - //section = new Hull.IntVector(ProtocolUtils.posToChunk(section.getX()), ProtocolUtils.posToChunk(section.getY()), ProtocolUtils.posToChunk(section.getZ())); section = new Hull.IntVector(section.getX() >> 4, section.getY() >> 4, section.getZ() >> 4); int xOffset = 16*section.getX(); int yOffset = 16*section.getY(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/Config.java b/FightSystem_Core/src/de/steamwar/fightsystem/Config.java index dba60ee..d3bd706 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/Config.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/Config.java @@ -122,7 +122,7 @@ public class Config { public static final boolean TechhiderActive; public static final Set HiddenBlocks; public static final Set HiddenBlockEntities; - public static final String ObfuscateWith; + public static final Material ObfuscateWith; //event parameter private static final int EventKampfID; @@ -213,7 +213,7 @@ public class Config { ForbiddenItems = Collections.unmodifiableSet(config.getStringList("Kits.ForbiddenItems").stream().map(Material::valueOf).collect(Collectors.toSet())); TechhiderActive = config.getBoolean("Techhider.Active", false); - ObfuscateWith = config.getString("Techhider.ObfuscateWith", "end_stone").toUpperCase(); + ObfuscateWith = Material.getMaterial(config.getString("Techhider.ObfuscateWith", "end_stone").toUpperCase()); HiddenBlocks = config.getStringList("Techhider.HiddenBlocks").stream().map(String::toUpperCase).map(Material::getMaterial).collect(Collectors.toSet()); HiddenBlockEntities = Collections.unmodifiableSet(new HashSet<>(config.getStringList("Techhider.HiddenBlockEntities"))); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java b/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java index cb1dddb..6296e37 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/record/PacketProcessor.java @@ -89,7 +89,7 @@ public class PacketProcessor implements Listener { private final BukkitTask task; private final LinkedList syncList = new LinkedList<>(); private final Set hiddenBlockIds = Config.HiddenBlocks.stream().flatMap(m -> BlockIds.impl.materialToAllIds(m).stream()).collect(Collectors.toSet()); - private final int obfuscateWith = BlockIds.impl.materialToId(Material.getMaterial(Config.ObfuscateWith.toUpperCase())); + private final int obfuscateWith = BlockIds.impl.materialToId(Config.ObfuscateWith); private final FreezeWorld freezer = new FreezeWorld(); private final REntityServer entityServer = new REntityServer(); private final Map entities = new HashMap<>();