From 72b23ad11643e3715cda529c0bb9ebb30861b062 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Fri, 22 May 2026 16:24:34 +0200 Subject: [PATCH] Add filling off Hull for reset and paste with either visible blocks or occluding blocks --- .../fightsystem/fight/FightSchematic.java | 2 ++ .../steamwar/fightsystem/fight/FightWorld.java | 13 +++++++++---- .../src/de/steamwar/fightsystem/utils/Hull.java | 9 +++++++++ .../steamwar/fightsystem/utils/HullHider.java | 17 ++++------------- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightSchematic.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightSchematic.java index 790a1cec..c8174349 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightSchematic.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightSchematic.java @@ -158,6 +158,8 @@ public class FightSchematic extends StateDependent { FreezeWorld freezer = new FreezeWorld(); team.teleportToSpawn(); + // TODO: Implement hull generation based on clipboard content! + FightSystem.getHullHider().fill(team, false); Vector dims = WorldeditWrapper.impl.getDimensions(clipboard); WorldeditWrapper.impl.pasteClipboard( clipboard, diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightWorld.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightWorld.java index 5663fe33..83c15170 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightWorld.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/fight/FightWorld.java @@ -68,6 +68,13 @@ public class FightWorld extends StateDependent { } public static void resetWorld() { + World backup = new WorldCreator(Config.world.getName() + "/backup").createWorld(); + assert backup != null; + Config.ArenaRegion.forEachChunk((x, z) -> { + CraftbukkitWrapper.impl.resetChunk(Config.world, backup, x, z); + }); + Bukkit.unloadWorld(backup, false); + List entities = new ArrayList<>(); Recording.iterateOverEntities(Objects::nonNull, entity -> { if (entity.getType() != EntityType.PLAYER && (!Config.GameModeConfig.Arena.Leaveable || Config.ArenaRegion.inRegion(entity.getLocation()))) { @@ -77,14 +84,12 @@ public class FightWorld extends StateDependent { entities.forEach(Entity::remove); entities.clear(); - World backup = new WorldCreator(Config.world.getName() + "/backup").createWorld(); - assert backup != null; + FightSystem.getHullHider().getHullMap().values().forEach(hull -> hull.fill(true)); + Config.ArenaRegion.forEachChunk((x, z) -> { - CraftbukkitWrapper.impl.resetChunk(Config.world, backup, x, z); for (Player p : Bukkit.getOnlinePlayers()) { de.steamwar.core.CraftbukkitWrapper.sendChunk(p, x, z); } }); - Bukkit.unloadWorld(backup, false); } } \ No newline at end of file diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/Hull.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/Hull.java index 72af266e..3ac2528d 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/Hull.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/Hull.java @@ -165,6 +165,15 @@ public class Hull { rentities.remove(entity); } + public void fill(boolean visible) { + visibility.set(0, visibility.size(), visible); + occluding.set(0, occluding.size(), !visible); + uncoveredSurface.clear(); + for (BitSet directionalVisibility : visibilityDirections.values()) { + directionalVisibility.set(0, directionalVisibility.size(), visible); + } + } + public void initialize() { visibility.clear(); occluding.clear(); diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/HullHider.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/HullHider.java index 3b4555c6..58bfce48 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/HullHider.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/utils/HullHider.java @@ -19,8 +19,6 @@ package de.steamwar.fightsystem.utils; -import com.comphenix.tinyprotocol.TinyProtocol; -import de.steamwar.Reflection; import de.steamwar.entity.REntity; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.fight.Fight; @@ -28,17 +26,9 @@ import de.steamwar.fightsystem.fight.FightPlayer; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.listener.Recording; import de.steamwar.fightsystem.states.FightState; -import de.steamwar.fightsystem.states.StateDependent; import de.steamwar.fightsystem.states.StateDependentListener; import de.steamwar.fightsystem.states.StateDependentTask; import lombok.Getter; -import net.minecraft.core.Vec3i; -import net.minecraft.network.protocol.game.ClientboundExplodePacket; -import net.minecraft.network.protocol.game.ClientboundLevelEventPacket; -import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket; -import net.minecraft.network.protocol.game.ClientboundSoundPacket; -import org.bukkit.Bukkit; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -54,8 +44,6 @@ import org.bukkit.event.player.PlayerQuitEvent; import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.function.BiFunction; -import java.util.function.Function; public class HullHider implements Listener { @@ -79,10 +67,13 @@ public class HullHider implements Listener { public void initialize(FightTeam team) { if (!TechHiderWrapper.ENABLED) return; - hullMap.get(team).initialize(); } + public void fill(FightTeam team, boolean visible) { + if (!TechHiderWrapper.ENABLED) return; + hullMap.get(team).fill(visible); + } @EventHandler(priority = EventPriority.HIGH) public void onJoin(PlayerJoinEvent e) {