diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TNTPosition.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TNTPosition.java deleted file mode 100644 index cdbd6227..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TNTPosition.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer; - -import de.steamwar.bausystem.features.tracer.show.Record; -import de.steamwar.bausystem.shared.Position; -import lombok.Getter; -import lombok.Setter; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.util.Vector; - -import java.lang.instrument.Instrumentation; - -@Getter -public class TNTPosition extends Position { - - private final Record.TNTRecord record; - private final int fuseTicks; - private final long timeTicks; - private final Vector previousLocation; - private final Vector velocity; - private final UpdateOrder updateOrder; - private final boolean source; - private final boolean exploded; - - @Setter - private boolean microMotion; - - public TNTPosition(Record.TNTRecord record, TNTPrimed entity, long timeTicks, Vector previousLocation, Vector velocity, UpdateOrder updateOrder, boolean source, boolean exploded) { - super(entity.getLocation().toVector()); - this.record = record; - this.fuseTicks = entity.getFuseTicks(); - this.timeTicks = timeTicks; - this.previousLocation = previousLocation; - this.velocity = velocity; - this.updateOrder = updateOrder; - this.source = source; - this.exploded = exploded; - } - - @Override - public String toString() { - return "Position{" + - "location=" + super.getLocation() + - '}'; - } - - public enum UpdateOrder { - /** - * X is Bigger so comes later - */ - X, - - /** - * Z is Bigger so comes later - */ - Z - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceScoreboardElement.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceScoreboardElement.java deleted file mode 100644 index 87ae3876..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceScoreboardElement.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2023 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.tracer.record.Recorder; -import de.steamwar.bausystem.features.tracer.show.Record; -import de.steamwar.bausystem.features.tracer.show.StoredRecords; -import de.steamwar.bausystem.region.Region; -import de.steamwar.bausystem.utils.ScoreboardElement; -import de.steamwar.linkage.Linked; -import org.bukkit.entity.Player; - -import java.util.List; - -@Linked -public class TraceScoreboardElement implements ScoreboardElement { - - @Override - public ScoreboardGroup getGroup() { - return ScoreboardGroup.OTHER; - } - - @Override - public int order() { - return 1; - } - - @Override - public String get(Region region, Player p) { - String traceScore = Recorder.INSTANCE.get(region).scoreboard(p); - if (traceScore != null) { - return "§e" + BauSystem.MESSAGE.parse("SCOREBOARD_TRACE", p) + "§8: " + traceScore; - } - List records = StoredRecords.getRecords(region); - if (records.isEmpty()) { - return null; - } - if (records.stream().allMatch(record -> record.getTnt().isEmpty())) { - return null; - } - return "§e" + BauSystem.MESSAGE.parse("SCOREBOARD_TRACE", p) + "§8: " + BauSystem.MESSAGE.parse("TRACE_HAS_TRACES", p); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TracerBauGuiItem.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TracerBauGuiItem.java deleted file mode 100644 index 5df27f45..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TracerBauGuiItem.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.Permission; -import de.steamwar.bausystem.SWUtils; -import de.steamwar.bausystem.features.tracer.record.*; -import de.steamwar.bausystem.linkage.specific.BauGuiItem; -import de.steamwar.bausystem.region.Region; -import de.steamwar.inventory.SWInventory; -import de.steamwar.inventory.SWItem; -import de.steamwar.linkage.Linked; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.ClickType; -import org.bukkit.inventory.ItemStack; - -import java.util.Arrays; -import java.util.Collections; - -@Linked -public class TracerBauGuiItem extends BauGuiItem { - - public TracerBauGuiItem() { - super(21); - } - - @Override - public ItemStack getItem(Player player) { - Region region = Region.getRegion(player.getLocation()); - return SWUtils.setCustomModelData(new SWItem(Material.OBSERVER, BauSystem.MESSAGE.parse("TRACE_GUI_ITEM_NAME", player), Arrays.asList(BauSystem.MESSAGE.parse("TRACE_GUI_ITEM_LORE", player, Recorder.INSTANCE.get(region).scoreboard(player))), false, clickType -> { - }), 1).getItemStack(); - } - - private static void open(Player p) { - Region region = Region.getRegion(p.getLocation()); - TraceRecorder traceRecorder = Recorder.INSTANCE.get(region); - SWInventory inv = new SWInventory(p, 9, BauSystem.MESSAGE.parse("TRACE_GUI_NAME", p)); - if (traceRecorder instanceof ActiveTracer) { - if (traceRecorder instanceof AutoTraceRecorder) { - inv.setItem(1, new SWItem(Material.GRAY_DYE, BauSystem.MESSAGE.parse("TRACE_GUI_TRACE_ACTIVE_AUTO", p))); - } else { - inv.setItem(1, new SWItem(Material.GREEN_DYE, BauSystem.MESSAGE.parse("TRACE_GUI_TRACE_ACTIVE", p), clickType -> { - p.performCommand("trace stop"); - open(p); - })); - } - } else { - inv.setItem(1, new SWItem(Material.RED_DYE, BauSystem.MESSAGE.parse("TRACE_GUI_TRACE_INACTIVE", p), clickType -> { - p.performCommand("trace start"); - open(p); - })); - } - if (traceRecorder instanceof AutoTraceRecorder) { - inv.setItem(3, new SWItem(Material.ENDER_EYE, BauSystem.MESSAGE.parse("TRACE_GUI_AUTO_TRACE_ACTIVE", p), clickType -> { - p.performCommand("trace auto"); - open(p); - })); - } else { - inv.setItem(3, new SWItem(Material.FIREWORK_STAR, BauSystem.MESSAGE.parse("TRACE_GUI_AUTO_TRACE_INACTIVE", p), clickType -> { - p.performCommand("trace auto"); - open(p); - })); - } - inv.setItem(7, new SWItem(Material.BARRIER, BauSystem.MESSAGE.parse("TRACE_GUI_DELETE", p), clickType -> { - p.performCommand("trace delete"); - open(p); - })); - - inv.open(); - } - - @Override - public boolean click(ClickType click, Player p) { - open(p); - return false; - } - - @Override - public Permission permission() { - return Permission.WORLD; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/ActiveTracer.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/ActiveTracer.java deleted file mode 100644 index b0dfeeed..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/ActiveTracer.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -public interface ActiveTracer { -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/AutoIgniteTraceRecorder.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/AutoIgniteTraceRecorder.java deleted file mode 100644 index 9eb2f0b8..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/AutoIgniteTraceRecorder.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -public class AutoIgniteTraceRecorder extends AutoTraceRecorder implements ActiveTracer { - - @Override - protected String getInactivityMessage() { - return "TRACE_IDLE_AUTO_IGNITE"; - } - - @Override - protected String getScriptState() { - return "IDLE_AUTO_IGNITE"; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/AutoTraceRecorder.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/AutoTraceRecorder.java deleted file mode 100644 index ba947f31..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/AutoTraceRecorder.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.tpslimit.TPSUtils; -import de.steamwar.bausystem.features.tracer.TNTPosition; -import de.steamwar.bausystem.features.tracer.show.Record; -import de.steamwar.bausystem.features.tracer.show.StoredRecords; -import de.steamwar.bausystem.features.tracer.show.TraceShowManager; -import de.steamwar.bausystem.region.Region; -import lombok.Getter; -import lombok.Setter; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Supplier; - -public abstract class AutoTraceRecorder implements TraceRecorder { - - protected boolean recording = false; - private long startTime = TPSUtils.currentRealTick.get(); - - private final Map recordMap = new HashMap<>(); - private Record record; - - protected Region region; - private Supplier recordSupplier; - - @Setter - @Getter - private TraceRecordAutoDeletion traceRecordAutoDeletion = TraceRecordAutoDeletion.NEVER; - private Record lastRecord; - - private Record.TNTRecord getRecord(TNTPrimed tntPrimed) { - return recordMap.computeIfAbsent(tntPrimed, __ -> record.spawn()); - } - - protected abstract String getInactivityMessage(); - protected void stoppedRecording() { - } - - @Override - public final String scoreboard(Player player) { - if (recording) { - return BauSystem.MESSAGE.parse("TRACE_RECORD", player) + " §8| §e" + (TPSUtils.currentRealTick.get() - startTime) + " §7" + BauSystem.MESSAGE.parse("SCOREBOARD_TRACE_TICKS", player); - } else { - return BauSystem.MESSAGE.parse(getInactivityMessage(), player); - } - } - - private void startRecording() { - if (lastRecord != null && traceRecordAutoDeletion.test(lastRecord)) { - StoredRecords.remove(region, lastRecord); - TraceShowManager.reshow(region); - } - startTime = TPSUtils.currentRealTick.get(); - record = recordSupplier.get(); - recording = true; - } - - @Override - public void init(Region region, Supplier recordSupplier) { - this.region = region; - this.recordSupplier = recordSupplier; - } - - @Override - public void postClear() { - recordMap.clear(); - record = recordSupplier.get(); - } - - @Override - public final void spawn(TNTPrimed tntPrimed) { - if (!recording) { - startRecording(); - } - getRecord(tntPrimed).source(tntPrimed); - } - - @Override - public final void tick(TNTPrimed tntPrimed) { - if (recording) { - getRecord(tntPrimed).location(tntPrimed); - } - } - - @Override - public final void explode(TNTPrimed tntPrimed, boolean inBuildRegion, boolean inTestblockRegion) { - if (recording) { - Record.TNTRecord tntRecord = getRecord(tntPrimed); - if (inBuildRegion) tntRecord.setInBuildArea(true); - if (inTestblockRegion) tntRecord.setInTestblockArea(true); - tntRecord.explode(tntPrimed); - recordMap.remove(tntPrimed); - - if (recordMap.isEmpty() || recordMap.keySet().stream().allMatch(TNTPrimed::isDead)) { - recording = false; - lastRecord = record; - record = null; - stoppedRecording(); - } - } - } - - protected abstract String getScriptState(); - - @Override - public String scriptState() { - return recording ? "RECORDING" : getScriptState(); - } - - @Override - public long scriptTime() { - return TPSUtils.currentRealTick.get() - startTime; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/Recorder.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/Recorder.java deleted file mode 100644 index 5c89155a..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/Recorder.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.tracer.show.Record; -import de.steamwar.bausystem.features.tracer.show.StoredRecords; -import de.steamwar.bausystem.region.Region; -import de.steamwar.bausystem.region.utils.RegionExtensionType; -import de.steamwar.bausystem.region.utils.RegionType; -import de.steamwar.linkage.Linked; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntitySpawnEvent; - -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Collectors; - -@Linked -public class Recorder implements Listener { - - public static Recorder INSTANCE; - - { - INSTANCE = this; - } - - private static class DisabledTracerRecorder implements TraceRecorder { - @Override - public String scoreboard(Player player) { - return null; - } - - @Override - public void spawn(TNTPrimed tntPrimed) { - } - - @Override - public void tick(TNTPrimed tntPrimed) { - } - - @Override - public void explode(TNTPrimed tntPrimed, boolean inBuildArea, boolean inTestblockRegion) { - } - - @Override - public String scriptState() { - return "IDLE"; - } - - @Override - public long scriptTime() { - return 0; - } - } - private static final DisabledTracerRecorder DISABLED = new DisabledTracerRecorder(); - - private Map regionTraceRecorderMap = new HashMap<>(); - private Map tntTraceRecorderMap = new HashMap<>(); - - private TraceRecorder get(TNTPrimed tntPrimed) { - return get(tntTraceRecorderMap.computeIfAbsent(tntPrimed, e -> Region.getRegion(e.getLocation()))); - } - - public TraceRecorder get(Region region) { - return regionTraceRecorderMap.getOrDefault(region, DISABLED); - } - - public void set(Region region, TraceRecorder traceRecorder) { - regionTraceRecorderMap.put(region, traceRecorder); - traceRecorder.init(region, () -> { - Record record = new Record(region); - StoredRecords.add(region, record); - return record; - }); - tntTraceRecorderMap.forEach((tntPrimed, rg) -> { - if (rg == region) { - traceRecorder.tick(tntPrimed); - } - }); - } - - public void remove(Region region) { - regionTraceRecorderMap.remove(region); - } - - public void postClear(Region region) { - get(region).postClear(); - } - - @EventHandler - public void onEntitySpawn(EntitySpawnEvent event) { - Entity entity = event.getEntity(); - if (!(entity instanceof TNTPrimed)) { - return; - } - get((TNTPrimed) entity).spawn((TNTPrimed) entity); - } - - { - BauSystem.runTaskTimer(BauSystem.getInstance(), () -> { - tick(); - tntTraceRecorderMap.keySet() - .stream() - .filter(e -> !e.isValid()) - .collect(Collectors.toList()) - .forEach(tntTraceRecorderMap::remove); - }, 1, 1); - } - - private void tick() { - TNTPrimedIterator.impl.iterator().forEach(tntPrimed -> { - get(tntPrimed).tick(tntPrimed); - }); - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public void onEntityExplode(EntityExplodeEvent event) { - Entity entity = event.getEntity(); - if (!(entity instanceof TNTPrimed)) { - return; - } - TraceRecorder traceRecorder = get((TNTPrimed) entity); - Region region = tntTraceRecorderMap.get((TNTPrimed) entity); - boolean inBuildRegion = event.blockList().stream().anyMatch(block -> region.inRegion(block.getLocation(), RegionType.BUILD, RegionExtensionType.EXTENSION)); - boolean inTestblockRegion = event.blockList().stream().anyMatch(block -> region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)); - traceRecorder.explode((TNTPrimed) entity, inBuildRegion, inTestblockRegion); - tntTraceRecorderMap.remove(entity); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/SimpleTraceRecorder.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/SimpleTraceRecorder.java deleted file mode 100644 index 875d25b5..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/SimpleTraceRecorder.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.tpslimit.TPSUtils; -import de.steamwar.bausystem.features.tracer.show.Record; -import de.steamwar.bausystem.region.Region; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Supplier; - -public class SimpleTraceRecorder implements TraceRecorder, ActiveTracer { - - private final long startTime = TPSUtils.currentRealTick.get(); - private final Map recordMap = new HashMap<>(); - private Record record; - - @Override - public String scoreboard(Player player) { - return BauSystem.MESSAGE.parse("TRACE_RECORD", player) + " §8| §e" + (TPSUtils.currentRealTick.get() - startTime) + " §7" + BauSystem.MESSAGE.parse("SCOREBOARD_TRACE_TICKS", player); - } - - @Override - public void init(Region region, Supplier recordSupplier) { - record = recordSupplier.get(); - } - - @Override - public void postClear() { - recordMap.clear(); - } - - private Record.TNTRecord getRecord(TNTPrimed tntPrimed) { - return recordMap.computeIfAbsent(tntPrimed, __ -> record.spawn()); - } - - @Override - public void spawn(TNTPrimed tntPrimed) { - getRecord(tntPrimed).source(tntPrimed); - } - - @Override - public void tick(TNTPrimed tntPrimed) { - getRecord(tntPrimed).location(tntPrimed); - } - - @Override - public void explode(TNTPrimed tntPrimed, boolean inBuildRegion, boolean inTestblockRegion) { - Record.TNTRecord tntRecord = getRecord(tntPrimed); - if (inBuildRegion) tntRecord.setInBuildArea(true); - if (inTestblockRegion) tntRecord.setInTestblockArea(true); - tntRecord.explode(tntPrimed); - recordMap.remove(tntPrimed); - } - - @Override - public String scriptState() { - return "RECORD"; - } - - @Override - public long scriptTime() { - return TPSUtils.currentRealTick.get() - startTime; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/SingleTraceRecorder.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/SingleTraceRecorder.java deleted file mode 100644 index 7f878869..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/SingleTraceRecorder.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -public class SingleTraceRecorder extends AutoTraceRecorder { - - @Override - protected String getInactivityMessage() { - return "TRACE_IDLE_SINGLE"; - } - - @Override - protected void stoppedRecording() { - Recorder.INSTANCE.remove(region); - } - - @Override - protected String getScriptState() { - return "IDLE_SINGLE"; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TNTPrimedIterator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TNTPrimedIterator.java deleted file mode 100644 index a6f05b5e..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TNTPrimedIterator.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.core.VersionDependent; -import org.bukkit.entity.TNTPrimed; - -import java.util.stream.Stream; - -public interface TNTPrimedIterator { - TNTPrimedIterator impl = VersionDependent.getVersionImpl(BauSystem.getInstance()); - - Stream iterator(); -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TraceRecordAutoDeletion.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TraceRecordAutoDeletion.java deleted file mode 100644 index a99eff0e..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TraceRecordAutoDeletion.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2023 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -import de.steamwar.bausystem.features.tracer.show.Record; - -public enum TraceRecordAutoDeletion { - - ALWAYS { - @Override - public boolean test(Record record) { - return true; - } - }, - NEVER { - @Override - public boolean test(Record record) { - return false; - } - }, - NO_BUILD_DESTROY { - @Override - public boolean test(Record record) { - return record.getTnt().stream().noneMatch(Record.TNTRecord::isInBuildArea); - } - }, - BUILD_DESTROY { - @Override - public boolean test(Record record) { - return record.getTnt().stream().anyMatch(Record.TNTRecord::isInBuildArea); - } - }, - NO_TESTBLOCK_DESTROY { - @Override - public boolean test(Record record) { - return record.getTnt().stream().noneMatch(Record.TNTRecord::isInTestblockArea); - } - }, - TESTBLOCK_DESTROY { - @Override - public boolean test(Record record) { - return record.getTnt().stream().anyMatch(Record.TNTRecord::isInTestblockArea); - } - }, - ; - - public abstract boolean test(Record record); -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TraceRecorder.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TraceRecorder.java deleted file mode 100644 index ee1ca2e1..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/TraceRecorder.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.record; - -import de.steamwar.bausystem.features.tracer.show.Record; -import de.steamwar.bausystem.region.Region; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; - -import java.util.function.Supplier; - -public interface TraceRecorder { - - String scoreboard(Player player); - default void init(Region region, Supplier recordSupplier) { - } - default void postClear() { - } - void spawn(TNTPrimed tntPrimed); - void tick(TNTPrimed tntPrimed); - void explode(TNTPrimed tntPrimed, boolean inBuildRegion, boolean inTestblockRegion); - - String scriptState(); - long scriptTime(); -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/EntityShowMode.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/EntityShowMode.java deleted file mode 100644 index ce45434a..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/EntityShowMode.java +++ /dev/null @@ -1,289 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2023 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.show; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.tracer.TNTPosition; -import de.steamwar.bausystem.shared.RoundedPosition; -import de.steamwar.bausystem.shared.ShowMode; -import de.steamwar.bausystem.utils.FlatteningWrapper; -import de.steamwar.entity.REntity; -import de.steamwar.entity.REntityServer; -import de.steamwar.entity.RFallingBlockEntity; -import net.md_5.bungee.api.chat.ClickEvent; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.util.Vector; - -import java.util.*; -import java.util.function.BiConsumer; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class EntityShowMode implements ShowMode { - - private final int factor; - private final Player player; - private final ShowModeParameter showModeParameter; - - private REntityServer entityServer; - - private final Map tntEntityMap = new HashMap<>(); - private final Map explodeEntityMap = new HashMap<>(); - private final Map updateEntityMap = new HashMap<>(); - - public EntityShowMode(Player player, ShowModeParameter showModeParameter, int factor) { - this.player = player; - this.showModeParameter = showModeParameter; - this.factor = factor; - } - - @Override - public void show(TNTPosition position) { - if (entityServer == null) { - entityServer = new REntityServer(); - entityServer.setCallback((player, rEntity, entityAction) -> { - if (entityAction != REntityServer.EntityAction.INTERACT) return; - TNTPosition tntPosition = Stream.concat(tntEntityMap.values().stream(), explodeEntityMap.values().stream()) - .filter(entityStack -> entityStack.entity == rEntity) - .findFirst() - .map(entityStack -> entityStack.tntPosition) - .orElse(null); - if (tntPosition == null) return; - - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_HEADER", player); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_FUSE_TIME", player, tntPosition.getFuseTicks()); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_X", player, tntPosition.getLocation().getX() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_Y", player, tntPosition.getLocation().getY() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_POSITION_Z", player, tntPosition.getLocation().getZ() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_X", player, tntPosition.getVelocity().getX() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_Y", player, tntPosition.getVelocity().getY() + ""); - BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_Z", player, tntPosition.getVelocity().getZ() + ""); - }); - entityServer.addPlayer(player); - } - - if (showModeParameter.isBuildDestroyOnly() && !position.getRecord().isInBuildArea()) { - return; - } - - if (showModeParameter.isTestblockDestroyOnly() && !position.getRecord().isInTestblockArea()) { - return; - } - - if (showModeParameter.isMicroMotion() && !position.getRecord().isHasMicroMotion()) { - return; - } - - boolean exploded = position.getRecord().getPositions().stream().anyMatch(TNTPosition::isExploded); - boolean hideWater = !showModeParameter.isWater() && exploded && checkWater(position.getLocation()); - - if (showModeParameter.isExplodeOnly()) { - if (position.isExploded()) { - generatePositions(position, false, false); - } - if (!showModeParameter.isSourceOnly() && !showModeParameter.isMicroMotionLocation() && !hideWater) { - return; - } - } - - if (showModeParameter.isSourceOnly()) { - if (position.isSource()) { - generatePositions(position, false, false); - } - if (!showModeParameter.isMicroMotionLocation() && !hideWater) { - return; - } - } - - if (showModeParameter.isMicroMotionLocation()) { - if (position.isMicroMotion()) { - generatePositions(position, false, false); - } - if (!hideWater) { - return; - } - } - - - if (hideWater) { - if (position.isExploded()) { - for (TNTPosition pos : position.getRecord().getPositions()) { - generatePositions(pos, showModeParameter.isInterpolateY(), showModeParameter.isInterpolateXZ(), (positionType, vector) -> { - RoundedPosition roundedPosition = new RoundedPosition(vector, factor); - Map map; - if (positionType == PositionType.TNT) { - map = tntEntityMap; - } else if (positionType == PositionType.EXPLODE) { - map = explodeEntityMap; - } else { - map = updateEntityMap; - } - map.computeIfPresent(roundedPosition, (roundedPosition1, entityStack) -> { - if (!entityStack.remove(pos.getRecord())) { - return null; - } - return entityStack; - }); - }); - } - } - return; - } - - generatePositions(position, showModeParameter.isInterpolateY(), showModeParameter.isInterpolateXZ()); - } - - @Override - public void hide() { - tntEntityMap.clear(); - explodeEntityMap.clear(); - updateEntityMap.clear(); - if (entityServer != null) { - entityServer.close(); - entityServer = null; - } - } - - private void generatePositions(TNTPosition position, boolean interpolateY, boolean interpolateXZ) { - generatePositions(position, interpolateY, interpolateXZ, (positionType, vector) -> { - RoundedPosition roundedPosition = new RoundedPosition(vector, factor); - EntityStack entityStack; - if (positionType == PositionType.TNT) { - entityStack = tntEntityMap.computeIfAbsent(roundedPosition, i -> new EntityStack(position, vector, positionType, position.getFuseTicks())); - } else if (positionType == PositionType.EXPLODE) { - entityStack = explodeEntityMap.computeIfAbsent(roundedPosition, i -> new EntityStack(position, vector, positionType, position.getFuseTicks())); - } else { - entityStack = updateEntityMap.computeIfAbsent(roundedPosition, i -> new EntityStack(position, vector, positionType, position.getFuseTicks())); - } - entityStack.add(position.getRecord()); - }); - } - - private boolean checkWater(Vector position) { - return FlatteningWrapper.impl.inWater(player.getWorld(), position); - } - - private REntity createEntity(Vector position, PositionType positionType) { - Material material; - if (positionType == PositionType.TNT) { - material = Material.TNT; - } else if (positionType == PositionType.EXPLODE) { - material = Material.RED_STAINED_GLASS; - } else { - material = Material.WHITE_STAINED_GLASS; - } - RFallingBlockEntity entity = new RFallingBlockEntity(entityServer, position.toLocation(player.getWorld()), material); - entity.setNoGravity(true); - return entity; - } - - private class EntityStack { - - private final TNTPosition tntPosition; - private final Vector position; - private final PositionType positionType; - private final int fuseTicks; - - private REntity entity; - private int count; - private List records = new ArrayList<>(); - - public EntityStack(TNTPosition tntPosition, Vector position, PositionType positionType, int fuseTicks) { - this.tntPosition = tntPosition; - this.position = position; - this.positionType = positionType; - this.fuseTicks = fuseTicks; - } - - public void add(Record.TNTRecord record) { - records.add(record); - if (entity == null) { - entity = createEntity(position, positionType); - } - count++; - - int nameShows = 0; - if (showModeParameter.isFuse()) nameShows++; - if (showModeParameter.isCount()) nameShows++; - if (showModeParameter.isEntityId()) nameShows++; - if (showModeParameter.isCalculationOrder()) nameShows++; - - List toShow = new ArrayList<>(); - if (showModeParameter.isFuse()) { - toShow.add((nameShows > 1 ? "F:" : "") + fuseTicks); - } - if (showModeParameter.isCount()) { - toShow.add((nameShows > 1 ? "C:" : "") + new HashSet<>(records).size()); - } - if (showModeParameter.isEntityId()) { - toShow.add((nameShows > 1 ? "I:" : "") + record.getEntityId()); - } - /* - if (showModeParameter.isCalculationOrder()) { - toShow.add((nameShows > 1 ? "O:" : "") + record.getEntityId()); - } - */ - - if (!toShow.isEmpty()) { - entity.setDisplayName(String.join(" ", toShow)); - } - } - - public boolean remove(Record.TNTRecord record) { - if (entity == null) return false; - records.remove(record); - count--; - if (count == 0) { - entity.die(); - entity = null; - return false; - } - return true; - } - } - - public static void generatePositions(TNTPosition position, boolean interpolateY, boolean interpolateXZ, BiConsumer positionCallback) { - positionCallback.accept(position.isExploded() ? PositionType.EXPLODE : PositionType.TNT, position.getLocation()); - if (position.getPreviousLocation() == null) return; - - if (interpolateY) { - Vector updatePointY = position.getPreviousLocation().clone().setY(position.getLocation().getY()); - if (!position.getLocation().equals(updatePointY)) { - positionCallback.accept(PositionType.UPDATE, updatePointY); - } - } - - if (interpolateXZ) { - Vector updatePointXZ = position.getUpdateOrder() == TNTPosition.UpdateOrder.X - ? position.getLocation().clone().setZ(position.getPreviousLocation().getZ()) - : position.getLocation().clone().setX(position.getPreviousLocation().getX()); - if (!position.getLocation().equals(updatePointXZ)) { - positionCallback.accept(PositionType.UPDATE, updatePointXZ); - } - } - } - - public enum PositionType { - TNT, - EXPLODE, - UPDATE - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/Record.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/Record.java deleted file mode 100644 index ac8d4e02..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/Record.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.show; - -import de.steamwar.bausystem.features.tpslimit.TPSUtils; -import de.steamwar.bausystem.features.tracer.TNTPosition; -import de.steamwar.bausystem.region.Region; -import de.steamwar.bausystem.shared.ShowMode; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.util.Vector; - -import java.util.ArrayList; -import java.util.List; - -@RequiredArgsConstructor -public class Record { - - @Getter - private final List tnt = new ArrayList<>(); - private final Region region; - private final long startTicks = TPSUtils.currentTick.get(); - - public int size() { - return tnt.size(); - } - - public void showAll(ShowMode traceShowMode) { - tnt.forEach(tntRecord -> tntRecord.getPositions().forEach(traceShowMode::show)); - } - - public TNTRecord spawn() { - TNTRecord record = new TNTRecord(this, region); - tnt.add(record); - return record; - } - - public void clear() { - tnt.clear(); - } - - private void checkMicroMotion(Vector explosionPosition) { - for (TNTRecord tntRecord : tnt) { - List positions = tntRecord.positions; - if (positions.isEmpty()) continue; - TNTPosition position = positions.get(positions.size() - 1); - if (position.isExploded()) continue; - if (position.getLocation().distanceSquared(explosionPosition) > 64) continue; - - Vector velocity = position.getVelocity(); - if (velocity.getY() == 0 && ((velocity.getX() != 0 && Math.abs(velocity.getX()) < 0.001) || (velocity.getZ() != 0 && Math.abs(velocity.getZ()) < 0.001))) { - if (!tntRecord.hasMicroMotion) { - positions.forEach(tntPosition -> TraceShowManager.show(region, tntPosition)); - } - tntRecord.hasMicroMotion = true; - position.setMicroMotion(true); - } - } - } - - public static class TNTRecord { - - @Getter - private int entityId; - - private Record record; - - @Getter - private final Region region; - - @Getter - private final List positions = new ArrayList<>(); - - @Getter - @Setter - private boolean inBuildArea = false; - - @Getter - @Setter - private boolean inTestblockArea = false; - - @Getter - private boolean hasMicroMotion = false; - - public TNTRecord(Record record, Region region) { - this.record = record; - this.region = region; - } - - public void source(TNTPrimed tntPrimed) { - add(tntPrimed, true, false); - } - - public void location(TNTPrimed tntPrimed) { - add(tntPrimed, false, false); - } - - public void explode(TNTPrimed tntPrimed) { - add(tntPrimed, false, true); - record.checkMicroMotion(tntPrimed.getLocation().toVector()); - } - - private void add(TNTPrimed tntPrimed, boolean source, boolean exploded) { - entityId = tntPrimed.getEntityId(); - - TNTPosition position; - if (positions.isEmpty()) { - position = new TNTPosition(this, tntPrimed, TPSUtils.currentTick.get() - record.startTicks, null, tntPrimed.getVelocity(), null, source, exploded); - } else { - TNTPosition tntPosition = positions.get(positions.size() - 1); - Vector lastVelocity = tntPrimed.getLocation().toVector().clone().subtract(tntPosition.getLocation()); - TNTPosition.UpdateOrder updateOrder = Math.abs(lastVelocity.getX()) >= Math.abs(lastVelocity.getZ()) ? TNTPosition.UpdateOrder.X : TNTPosition.UpdateOrder.Z; - position = new TNTPosition(this, tntPrimed, TPSUtils.currentTick.get() - record.startTicks, positions.get(positions.size() - 1).getLocation(), tntPrimed.getVelocity(), updateOrder, source, exploded); - } - positions.add(position); - TraceShowManager.show(region, position); - } - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/ShowModeParameter.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/ShowModeParameter.java deleted file mode 100644 index 72089326..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/ShowModeParameter.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.show; - -import lombok.Getter; - -@Getter -public class ShowModeParameter { - private boolean water = false; - private boolean interpolateY = false; - private boolean interpolateXZ = false; - private boolean sourceOnly = false; - private boolean explodeOnly = false; - private boolean fuse = false; - private boolean count = false; - private boolean buildDestroyOnly = false; - private boolean testblockDestroyOnly = false; - private boolean microMotion = false; - private boolean microMotionLocation = false; - private boolean entityId = false; - private boolean calculationOrder = false; - - public void enableWater() { - this.water = true; - } - - public void disableWater() { - this.water = false; - } - - public void enableInterpolateY() { - this.interpolateY = true; - } - - public void enableInterpolateXZ() { - this.interpolateXZ = true; - } - - public void enableSourceOnly() { - this.sourceOnly = true; - } - - public void enableExplodeOnly() { - this.explodeOnly = true; - } - - public void enableFuse() { - this.fuse = true; - } - - public void enableCount() { - this.count = true; - } - - public void enableBuildDestroyOnly() { - this.buildDestroyOnly = true; - } - - public void enableTestblockDestroyOnly() { - this.testblockDestroyOnly = true; - } - - public void enableMicroMotion() { - this.microMotion = true; - } - - public void enableMicroMotionLocation() { - this.microMotionLocation = true; - } - - public void enableEntityId() { - entityId = true; - } - - public void enableCalculationOrder() { - calculationOrder = true; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/ShowModeParameterType.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/ShowModeParameterType.java deleted file mode 100644 index 763df5d4..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/ShowModeParameterType.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.show; - -import lombok.Getter; - -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Consumer; -import java.util.function.Supplier; - -public enum ShowModeParameterType { - - WATER(ShowModeParameter::enableWater, Arrays.asList("-water"), "EXPLODE", "SOURCE", "BUILD_DESTROY_ONLY"), - INTERPOLATE_Y(ShowModeParameter::enableInterpolateY, Arrays.asList("-interpolatey", "-interpolate-y", "-interpolate_y", "-y"), "ADVANCED"), - INTERPOLATE_XZ(ShowModeParameter::enableInterpolateXZ, Arrays.asList("-interpolatex", "-interpolate-x", "-interpolate_x", "-x", "-interpolatez", "-interpolate-z", "-interpolate_z", "-z", "-interpolatexz", "-interpolate-xz", "-interpolate_xz", "-xz"), "ADVANCED"), - ADVANCED(showModeParameter -> { - showModeParameter.enableInterpolateY(); - showModeParameter.enableInterpolateXZ(); - }, Arrays.asList("-advanced", "-a"), "INTERPOLATE_Y", "INTERPOLATE_XZ"), - SOURCE(ShowModeParameter::enableSourceOnly, Arrays.asList("-source", "-sourceonly", "-ignite"), "FUSE", "ADVANCED", "INTERPOLATE_Y", "INTERPOLATE_XZ", "WATER"), - EXPLODE(ShowModeParameter::enableExplodeOnly, Arrays.asList("-explode", "-explodeonly"), "FUSE", "ADVANCED", "INTERPOLATE_Y", "INTERPOLATE_XZ", "WATER"), - FUSE(ShowModeParameter::enableFuse, Arrays.asList("-fuse", "-f"), "EXPLODE", "SOURCE"), - COUNT(ShowModeParameter::enableCount, Arrays.asList("-count", "-c")), - BUILD_DESTROY_ONLY(ShowModeParameter::enableBuildDestroyOnly, Arrays.asList("-builddestroy", "-builddestoryonly"), "WATER", "TESTBLOCK_DESTROY_ONLY"), - TESTBLOCK_DESTROY_ONLY(ShowModeParameter::enableTestblockDestroyOnly, Arrays.asList("-testblockdestroy", "-testblockdestroyonly"), "WATER", "BUILD_DESTROY_ONLY"), - MICROMOTION(ShowModeParameter::enableMicroMotion, Arrays.asList("-micromotion", "-micro", "-m")), - MICROMOTION_LOCATION(ShowModeParameter::enableMicroMotionLocation, Arrays.asList("-micromotionloc", "-microloc", "-mloc", "-micromotionlocation", "-microlocation", "-mlocation")), - ENTITY_ID(ShowModeParameter::enableEntityId, Arrays.asList("-entityid", "-id")), - // CALCULATION_ORDER(ShowModeParameter::enableCalculationOrder, Arrays.asList("-calc", "-calcorder", "-calculation", "-calculationorder")), - ; - - @Getter - private final Consumer showModeParameterConsumer; - - @Getter - private List tabCompletes; - - @Getter - private final Supplier removed; - private AtomicReference cached = new AtomicReference<>(); - - ShowModeParameterType(Consumer showModeParameterConsumer, List tabCompletes, String... removed) { - this.showModeParameterConsumer = showModeParameterConsumer; - this.tabCompletes = tabCompletes; - this.removed = () -> { - if (cached.get() == null) { - ShowModeParameterType[] showModeParameterTypes = new ShowModeParameterType[removed.length]; - for (int i = 0; i < removed.length; i++) { - showModeParameterTypes[i] = ShowModeParameterType.valueOf(removed[i]); - } - cached.set(showModeParameterTypes); - return showModeParameterTypes; - } - return cached.get(); - }; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/StoredRecords.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/StoredRecords.java deleted file mode 100644 index 91bc2272..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/StoredRecords.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.show; - -import de.steamwar.bausystem.features.tracer.TNTPosition; -import de.steamwar.bausystem.features.tracer.record.Recorder; -import de.steamwar.bausystem.region.Region; -import de.steamwar.bausystem.shared.ShowMode; -import lombok.experimental.UtilityClass; - -import java.util.*; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -@UtilityClass -public class StoredRecords { - - private static final Map> records = new HashMap<>(); - - public static void add(Region region, Record record) { - records.computeIfAbsent(region, k -> new ArrayList<>()).add(record); - } - - public static void remove(Region region, Record record) { - records.computeIfAbsent(region, k -> new ArrayList<>()).remove(record); - } - - public static void clear(Region region) { - records.remove(region); - TraceShowManager.clear(region); - Recorder.INSTANCE.postClear(region); - } - - public static List getRecords() { - return records.values().stream() - .flatMap(Collection::stream) - .collect(Collectors.toList()); - } - - public static List getRecords(Region region) { - return records.getOrDefault(region, Collections.emptyList()); - } - - static void show(Region region, Predicate traceShowFilter, ShowMode traceShowMode) { - records.getOrDefault(region, new ArrayList<>()).forEach(record -> { - record.getTnt().forEach(tntRecord -> { - tntRecord.getPositions().stream() - .filter(traceShowFilter) - .forEach(traceShowMode::show); - }); - }); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/TraceShowManager.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/TraceShowManager.java deleted file mode 100644 index 695c8115..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/TraceShowManager.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2022 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer.show; - -import de.steamwar.bausystem.BauSystem; -import de.steamwar.bausystem.features.tracer.TNTPosition; -import de.steamwar.bausystem.region.Region; -import de.steamwar.bausystem.shared.ShowMode; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerQuitEvent; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Predicate; - -public class TraceShowManager implements Listener { - private TraceShowManager() { - } - - private static final Map>> showModes = new HashMap<>(); - private static final Map>> showFilters = new HashMap<>(); - - public static void show(Player player, ShowMode traceShowMode) { - Region region = Region.getRegion(player.getLocation()); - _hide(region, player, true); - - Map> regionalShowModes = showModes.computeIfAbsent(region, __ -> new HashMap<>()); - regionalShowModes.put(player, traceShowMode); - StoredRecords.show(region, getShowFilter(player, region), traceShowMode); - } - - public static void hide(Player player) { - Region region = Region.getRegion(player.getLocation()); - _hide(region, player, true); - - showFilters.getOrDefault(region, new HashMap<>()).remove(player); - } - - public static void setShowFilter(Player player, Predicate showFilter) { - Region region = Region.getRegion(player.getLocation()); - Map> regionShowFilters = showFilters.computeIfAbsent(region, __ -> new HashMap<>()); - if (showFilter == null) { - regionShowFilters.remove(player); - } else { - regionShowFilters.put(player, showFilter); - } - - _hide(region, player, false); - ShowMode showMode = showModes.computeIfAbsent(region, __ -> new HashMap<>()).computeIfAbsent(player, __ -> new EntityShowMode(player, new ShowModeParameter(), 16)); - StoredRecords.show(region, getShowFilter(player, region), showMode); - } - - public static void reshow(Region region) { - Map> regionalShowModes = showModes.get(region); - if (regionalShowModes == null) { - return; - } - for (Map.Entry> entry : regionalShowModes.entrySet()) { - entry.getValue().hide(); - StoredRecords.show(region, getShowFilter(entry.getKey(), region), entry.getValue()); - } - } - - private static void _hide(Region region, Player player, boolean remove) { - Map> regionalShowModes = showModes.get(region); - if (regionalShowModes == null) { - return; - } - ShowMode showMode; - if (remove) { - showMode = regionalShowModes.remove(player); - } else { - showMode = regionalShowModes.get(player); - } - if (showMode == null) { - return; - } - showMode.hide(); - } - - private static Predicate getShowFilter(Player player, Region region) { - return showFilters.getOrDefault(region, new HashMap<>()).getOrDefault(player, tntPosition -> true); - } - - /* Only to be called by record */ - static void show(Region region, TNTPosition tnt) { - Map> regionalShowModes = showModes.get(region); - if (regionalShowModes == null) { - return; - } - regionalShowModes.forEach((player, tntPositionShowMode) -> { - if (getShowFilter(player, region).test(tnt)) { - tntPositionShowMode.show(tnt); - } - }); - } - - /* Only to be called by StoredRecords */ - static void clear(Region region) { - Map> regionalShowModes = showModes.get(region); - if (regionalShowModes == null) { - return; - } - regionalShowModes.values().forEach(ShowMode::hide); - } - - /* Internal if player leaves*/ - static { - Bukkit.getPluginManager().registerEvents(new TraceShowManager(), BauSystem.getInstance()); - } - - @EventHandler - public void onLeave(PlayerQuitEvent event) { - showModes.forEach((region, playerShowModeMap) -> { - ShowMode showMode = playerShowModeMap.remove(event.getPlayer()); - if (showMode != null) showMode.hide(); - }); - showFilters.forEach((region, playerPredicateMap) -> { - playerPredicateMap.remove(event.getPlayer()); - }); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer2/TraceCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tracer2/TraceCommand.java deleted file mode 100644 index d99ed495..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tracer2/TraceCommand.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2023 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.features.tracer2; - -import de.steamwar.bausystem.region.Region; -import de.steamwar.command.SWCommand; -import de.steamwar.linkage.Linked; -import de.steamwar.linkage.LinkedInstance; -import org.bukkit.entity.Player; - -import java.util.Collections; -import java.util.HashSet; - -@Linked -public class TraceCommand extends SWCommand { - - @LinkedInstance - public Recorder recorder; - - int traceId = 0; - public TraceCommand(){super("tracetest");} - - @Register(value = "start") - public void test(Player player){ - Region region = Region.getRegion(player.getLocation()); - - traceId = recorder.startRecording(region); - System.out.println(traceId); - } - - @Register(value = "stop") - public void test2(Player player){ - Region region = Region.getRegion(player.getLocation()); - recorder.stopRecording(region); - Trace trace = recorder.manager.get(traceId); - if(trace != null) - System.out.println(trace.getRecords()); - } - - @Register(value = "show") - public void test3(Player player){ - Trace trace = recorder.manager.get(traceId); - trace.render(player, Collections.emptyList(), BundleFilter.DEFAULT); - } -}