forked from SteamWar/SteamWar
Add filling off Hull for reset and paste with either visible blocks or occluding blocks
This commit is contained in:
@@ -158,6 +158,8 @@ public class FightSchematic extends StateDependent {
|
|||||||
FreezeWorld freezer = new FreezeWorld();
|
FreezeWorld freezer = new FreezeWorld();
|
||||||
|
|
||||||
team.teleportToSpawn();
|
team.teleportToSpawn();
|
||||||
|
// TODO: Implement hull generation based on clipboard content!
|
||||||
|
FightSystem.getHullHider().fill(team, false);
|
||||||
Vector dims = WorldeditWrapper.impl.getDimensions(clipboard);
|
Vector dims = WorldeditWrapper.impl.getDimensions(clipboard);
|
||||||
WorldeditWrapper.impl.pasteClipboard(
|
WorldeditWrapper.impl.pasteClipboard(
|
||||||
clipboard,
|
clipboard,
|
||||||
|
|||||||
@@ -68,6 +68,13 @@ public class FightWorld extends StateDependent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void resetWorld() {
|
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<Entity> entities = new ArrayList<>();
|
List<Entity> entities = new ArrayList<>();
|
||||||
Recording.iterateOverEntities(Objects::nonNull, entity -> {
|
Recording.iterateOverEntities(Objects::nonNull, entity -> {
|
||||||
if (entity.getType() != EntityType.PLAYER && (!Config.GameModeConfig.Arena.Leaveable || Config.ArenaRegion.inRegion(entity.getLocation()))) {
|
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.forEach(Entity::remove);
|
||||||
entities.clear();
|
entities.clear();
|
||||||
|
|
||||||
World backup = new WorldCreator(Config.world.getName() + "/backup").createWorld();
|
FightSystem.getHullHider().getHullMap().values().forEach(hull -> hull.fill(true));
|
||||||
assert backup != null;
|
|
||||||
Config.ArenaRegion.forEachChunk((x, z) -> {
|
Config.ArenaRegion.forEachChunk((x, z) -> {
|
||||||
CraftbukkitWrapper.impl.resetChunk(Config.world, backup, x, z);
|
|
||||||
for (Player p : Bukkit.getOnlinePlayers()) {
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
de.steamwar.core.CraftbukkitWrapper.sendChunk(p, x, z);
|
de.steamwar.core.CraftbukkitWrapper.sendChunk(p, x, z);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Bukkit.unloadWorld(backup, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,6 +165,15 @@ public class Hull {
|
|||||||
rentities.remove(entity);
|
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() {
|
public void initialize() {
|
||||||
visibility.clear();
|
visibility.clear();
|
||||||
occluding.clear();
|
occluding.clear();
|
||||||
|
|||||||
@@ -19,8 +19,6 @@
|
|||||||
|
|
||||||
package de.steamwar.fightsystem.utils;
|
package de.steamwar.fightsystem.utils;
|
||||||
|
|
||||||
import com.comphenix.tinyprotocol.TinyProtocol;
|
|
||||||
import de.steamwar.Reflection;
|
|
||||||
import de.steamwar.entity.REntity;
|
import de.steamwar.entity.REntity;
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
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.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.listener.Recording;
|
import de.steamwar.fightsystem.listener.Recording;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
import de.steamwar.fightsystem.states.StateDependent;
|
|
||||||
import de.steamwar.fightsystem.states.StateDependentListener;
|
import de.steamwar.fightsystem.states.StateDependentListener;
|
||||||
import de.steamwar.fightsystem.states.StateDependentTask;
|
import de.steamwar.fightsystem.states.StateDependentTask;
|
||||||
import lombok.Getter;
|
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.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -54,8 +44,6 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.function.BiFunction;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class HullHider implements Listener {
|
public class HullHider implements Listener {
|
||||||
|
|
||||||
@@ -79,10 +67,13 @@ public class HullHider implements Listener {
|
|||||||
|
|
||||||
public void initialize(FightTeam team) {
|
public void initialize(FightTeam team) {
|
||||||
if (!TechHiderWrapper.ENABLED) return;
|
if (!TechHiderWrapper.ENABLED) return;
|
||||||
|
|
||||||
hullMap.get(team).initialize();
|
hullMap.get(team).initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void fill(FightTeam team, boolean visible) {
|
||||||
|
if (!TechHiderWrapper.ENABLED) return;
|
||||||
|
hullMap.get(team).fill(visible);
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onJoin(PlayerJoinEvent e) {
|
public void onJoin(PlayerJoinEvent e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user