From e1ff37bea2f533340cd4292fb3bf7c450bf08af0 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Sat, 31 Oct 2026 20:09:45 +0100 Subject: [PATCH] Apply the gamemode techhider with /hullhider Players using /hullhider also get the techhider of the region's gamemode in the build area, like in a fight: its hidden blocks are replaced and occlude in the hull. --- .../features/hullhider/HullHiderCommand.java | 20 ++++++++++++++++--- .../features/techhider/BauTechHider.java | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/hullhider/HullHiderCommand.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/hullhider/HullHiderCommand.java index 2b2a99aa..f0ee5ecf 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/hullhider/HullHiderCommand.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/hullhider/HullHiderCommand.java @@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.hullhider; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.features.techhider.HiddenHull; +import de.steamwar.bausystem.features.techhider.HidingRule; import de.steamwar.bausystem.features.techhider.TechHiderCommand; import de.steamwar.bausystem.features.xray.XrayCommand; import de.steamwar.bausystem.region.Point; @@ -63,6 +64,7 @@ public class HullHiderCommand extends SWCommand implements Listener { private final HullHider hullHider = new HullHider<>(false); // Read on netty threads by the BauTechHider private final Map hulls = new ConcurrentHashMap<>(); + private final Map hidingRules = new ConcurrentHashMap<>(); private final Map> hidden = new ConcurrentHashMap<>(); @LinkedInstance @@ -99,10 +101,12 @@ public class HullHiderCommand extends SWCommand implements Listener { Point max = region.getBuildArea().getMaxPoint(true); HullRegion hullRegion = HullRegion.fromInclusive(min.getX(), min.getY(), min.getZ(), max.getX(), max.getY(), max.getZ()); - // Only the hidden blocks of an active techhider occlude, the hull hider is used without one - Hull hull = new Hull(BauSystem.getInstance(), world(), hullRegion, false, Collections.emptySet(), new Viewers.VisibleByDefault()); + // The techhider of the gamemode is applied as well, its hidden blocks occlude as they are replaced by the obfuscation block + ObfuscationConfig obfuscation = ObfuscationConfig.of(region.getGameModeConfig().Techhider); + Hull hull = new Hull(BauSystem.getInstance(), world(), hullRegion, false, region.getGameModeConfig().Techhider.HiddenBlocks, new Viewers.VisibleByDefault()); hullHider.addHull(region, hull); - hulls.put(region, new HiddenHull(hull, ObfuscationConfig.of(region.getGameModeConfig().Techhider).getObfuscationState())); + hulls.put(region, new HiddenHull(hull, obfuscation.getObfuscationState())); + hidingRules.put(region, HidingRule.of(region.getBuildArea(), obfuscation)); } hidden.computeIfAbsent(region, rg -> ConcurrentHashMap.newKeySet()).add(player); @@ -123,6 +127,7 @@ public class HullHiderCommand extends SWCommand implements Listener { if (players.isEmpty()) { hidden.remove(region); hulls.remove(region); + hidingRules.remove(region); hullHider.removeHull(region); } else { hullHider.removeViewer(player, region); @@ -130,6 +135,15 @@ public class HullHiderCommand extends SWCommand implements Listener { } } + public void addHidingRules(Player player, List rules) { + hidden.forEach((region, players) -> { + HidingRule rule = hidingRules.get(region); + if (rule != null && players.contains(player)) { + rules.add(rule); + } + }); + } + public void addHiddenHulls(Player player, List hiddenHulls) { hidden.forEach((region, players) -> { HiddenHull hiddenHull = hulls.get(region); diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/techhider/BauTechHider.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/techhider/BauTechHider.java index 9b91d6a4..99a7f255 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/techhider/BauTechHider.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/techhider/BauTechHider.java @@ -69,6 +69,7 @@ public class BauTechHider implements AccessPrivilegeProvider { List rules = new ArrayList<>(); xrayCommand.addHidingRules(p, rules); techHiderCommand.addHidingRules(p, rules); + hullHiderCommand.addHidingRules(p, rules); spectatorListener.addHidingRules(p, rules); List hulls = new ArrayList<>();