From dc79b80cc0a547966c69829efeb5e67d70ebe4dc Mon Sep 17 00:00:00 2001 From: jojo Date: Thu, 19 Nov 2020 13:00:12 +0100 Subject: [PATCH] Initial TNT-Tracer --- .../bausystem/tracernew/DataHolder.java | 37 +++++++++++++ .../bausystem/tracernew/TraceHolder.java | 4 ++ .../tracernew/data/RecordStatus.java | 26 +++++++++ .../bausystem/tracernew/data/TNTTrace.java | 4 ++ .../tracernew/recorder/RecordManager.java | 4 ++ .../tracernew/recorder/TNTRecorder.java | 53 +++++++++++++++++++ 6 files changed, 128 insertions(+) create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/tracernew/DataHolder.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/tracernew/TraceHolder.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/tracernew/data/RecordStatus.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/tracernew/data/TNTTrace.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/tracernew/recorder/RecordManager.java create mode 100644 BauSystem_Main/src/de/steamwar/bausystem/tracernew/recorder/TNTRecorder.java diff --git a/BauSystem_Main/src/de/steamwar/bausystem/tracernew/DataHolder.java b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/DataHolder.java new file mode 100644 index 0000000..e449674 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/DataHolder.java @@ -0,0 +1,37 @@ +package de.steamwar.bausystem.tracernew; + +import de.steamwar.bausystem.tracernew.data.RecordStatus; +import org.bukkit.Bukkit; +import org.bukkit.World; + +public class DataHolder { + + public static final World world = Bukkit.getWorlds().get(0); + + public static RecordStatus status = RecordStatus.IDLE; + + public static boolean isRecording() { + return status == RecordStatus.RECORD || status == RecordStatus.RECORD_AUTO; + } + + public static boolean isRecordingAuto() { + return status == RecordStatus.RECORD_AUTO; + } + + public static boolean isRecordingNotAuto() { + return status == RecordStatus.RECORD; + } + + public static boolean isIdle() { + return status == RecordStatus.IDLE || status == RecordStatus.IDLE_AUTO; + } + + public static boolean isIdleAuto() { + return status == RecordStatus.IDLE_AUTO; + } + + public static boolean isIdleNotAuto() { + return status == RecordStatus.IDLE; + } + +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/tracernew/TraceHolder.java b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/TraceHolder.java new file mode 100644 index 0000000..6d1115b --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/TraceHolder.java @@ -0,0 +1,4 @@ +package de.steamwar.bausystem.tracernew; + +public class TraceHolder { +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/tracernew/data/RecordStatus.java b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/data/RecordStatus.java new file mode 100644 index 0000000..7da8547 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/data/RecordStatus.java @@ -0,0 +1,26 @@ +package de.steamwar.bausystem.tracernew.data; + +public enum RecordStatus { + + RECORD("§aan", true), + RECORD_AUTO("§aan", true), + IDLE("§caus", false), + IDLE_AUTO("§eauto", false); + + String name; + boolean tracing; + + RecordStatus(String value, boolean tracing) { + this.name = value; + this.tracing = tracing; + } + + public String getName() { + return name; + } + + public boolean isTracing() { + return tracing; + } + +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/tracernew/data/TNTTrace.java b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/data/TNTTrace.java new file mode 100644 index 0000000..0f58dbf --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/data/TNTTrace.java @@ -0,0 +1,4 @@ +package de.steamwar.bausystem.tracernew.data; + +public class TNTTrace { +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/tracernew/recorder/RecordManager.java b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/recorder/RecordManager.java new file mode 100644 index 0000000..c2d0830 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/recorder/RecordManager.java @@ -0,0 +1,4 @@ +package de.steamwar.bausystem.tracernew.recorder; + +public class RecordManager { +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/tracernew/recorder/TNTRecorder.java b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/recorder/TNTRecorder.java new file mode 100644 index 0000000..d6f1806 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/tracernew/recorder/TNTRecorder.java @@ -0,0 +1,53 @@ +package de.steamwar.bausystem.tracernew.recorder; + +import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.tracer.TraceListener; +import de.steamwar.bausystem.tracernew.DataHolder; +import org.bukkit.Bukkit; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.scheduler.BukkitTask; + +import java.util.stream.Stream; + +import static de.steamwar.bausystem.tracer.recorder.RecordManager.stopAuto; + +public class TNTRecorder { + + private static BukkitTask task = null; + public static long recordStart = System.currentTimeMillis(); + public static long lastExplosion = System.currentTimeMillis(); + + static void update() { + if (task == null) return; + if (!DataHolder.isRecordingAuto()) return; + lastExplosion = System.currentTimeMillis(); + } + + static void startRecording() { + if (task != null) return; + recordStart = System.currentTimeMillis(); + lastExplosion = System.currentTimeMillis(); + task = Bukkit.getScheduler().runTaskTimer(BauSystem.getPlugin(), TNTRecorder::run, 1, 1); + run(); + } + + static void stopRecording() { + if (task == null) return; + task.cancel(); + task = null; + } + + private static void run() { + DataHolder.world.getEntitiesByClass(TNTPrimed.class).stream() + Stream tntPrimedStream = DataHolder.world.getEntities() + .stream() + .filter(e -> e instanceof TNTPrimed) + .map(e -> (TNTPrimed)e); + TraceListener.onTick(tntPrimedStream); + + if (DataHolder.isRecordingAuto() && System.currentTimeMillis() - lastExplosion > 4500) { + stopAuto(); + } + } + +}