Do not hide entities with the BauSystem hullhider

HullHider gets a hideEntities parameter: the fight still hides entities inside
hidden hulls, /hullhider only hides blocks. As the TechHider also dropped
spawn packets at hidden positions, ForPlayer#canAccessEntitySpawn decides
about them now, which the BauTechHider always allows.
This commit is contained in:
2026-10-31 15:57:25 +01:00
parent edb13fb7df
commit d76c396268
6 changed files with 34 additions and 11 deletions
@@ -36,7 +36,6 @@ import de.steamwar.techhider.ObfuscationConfig;
import net.md_5.bungee.api.ChatMessageType;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@@ -61,7 +60,8 @@ public class HullHiderCommand extends SWCommand implements Listener {
}
@Linked
private final HullHider<Region> hullHider = new HullHider<>();
// Only blocks are hidden, entities stay visible
private final HullHider<Region> hullHider = new HullHider<>(false);
// Read on netty threads by the BauTechHider
private final Map<Region, HiddenHull> hulls = new ConcurrentHashMap<>();
private final Map<Region, Set<Player>> hidden = new ConcurrentHashMap<>();
@@ -143,9 +143,6 @@ public class HullHiderCommand extends SWCommand implements Listener {
private void onTick() {
if (hidden.isEmpty()) return;
for (Entity entity : world().getEntities()) {
hullHider.checkEntity(entity);
}
hullHider.sendUncoveredBlocks();
}
@@ -30,7 +30,6 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.entity.Player;
import java.util.ArrayList;
@@ -38,6 +37,7 @@ import java.util.List;
/**
* The single TechHider of the server. It combines the hiding rules of the spectator techhider, /techhider and /xray and the hulls of /hullhider per player.
* Entities are never hidden.
*/
@Linked
public class BauTechHider implements AccessPrivilegeProvider {
@@ -128,10 +128,13 @@ public class BauTechHider implements AccessPrivilegeProvider {
@Override
public boolean canAccessEntity(int entityId) {
if (hulls.length == 0) return true;
return true;
}
net.minecraft.world.entity.Entity nmsEntity = ((CraftWorld) player.getWorld()).getHandle().moonrise$getEntityLookup().get(entityId);
return nmsEntity == null || canAccessPosition(nmsEntity.getBlockX(), nmsEntity.getBlockY(), nmsEntity.getBlockZ());
// Entities are not hidden, even if they spawn inside a hidden hull
@Override
public boolean canAccessEntitySpawn(int entityId, int blockX, int blockY, int blockZ) {
return true;
}
@Override