Block HullHider #416
@ -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<Hull.IntVector> changes) {
|
||||
Object[] blockdata = new Object[changes.size()];
|
||||
List<Object> 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<Hull.IntVector> 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();
|
||||
|
@ -122,7 +122,7 @@ public class Config {
|
||||
public static final boolean TechhiderActive;
|
||||
public static final Set<Material> HiddenBlocks;
|
||||
public static final Set<String> 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")));
|
||||
|
||||
|
@ -89,7 +89,7 @@ public class PacketProcessor implements Listener {
|
||||
private final BukkitTask task;
|
||||
private final LinkedList<Runnable> syncList = new LinkedList<>();
|
||||
private final Set<Integer> 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<Integer, REntity> entities = new HashMap<>();
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren