Tracer-entity #147
@ -1,5 +1,6 @@
|
||||
package de.steamwar.bausystem.tracernew;
|
||||
|
||||
import de.steamwar.bausystem.commands.CommandTPSLimiter;
|
||||
import de.steamwar.bausystem.tracernew.data.RecordStatus;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
@ -9,6 +10,13 @@ public class DataHolder {
|
||||
public static final World world = Bukkit.getWorlds().get(0);
|
||||
|
||||
public static RecordStatus status = RecordStatus.IDLE;
|
||||
public static long recordStart = System.currentTimeMillis();
|
||||
public static long lastExplosion = System.currentTimeMillis();
|
||||
|
||||
public static boolean isAutoStop() {
|
||||
if (!isRecordingAuto()) return false;
|
||||
return System.currentTimeMillis() - lastExplosion > (20.0 / CommandTPSLimiter.getCurrentTPSLimit()) * 50 * 80;
|
||||
}
|
||||
|
||||
public static boolean isRecording() {
|
||||
return status == RecordStatus.RECORD || status == RecordStatus.RECORD_AUTO;
|
||||
|
@ -0,0 +1,22 @@
|
||||
package de.steamwar.bausystem.tracernew.recorder;
|
||||
|
||||
import de.steamwar.bausystem.tracernew.DataHolder;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
|
||||
public class ExplodeListener implements Listener {
|
||||
|
||||
public void onEntityExplode(EntityExplodeEvent event) {
|
||||
if (!(event.getEntity() instanceof TNTPrimed))
|
||||
return;
|
||||
|
||||
if (DataHolder.isRecordingAuto())
|
||||
RecordManager.stopAuto();
|
||||
if (DataHolder.isIdleAuto())
|
||||
RecordManager.updateAuto();
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,87 @@
|
||||
package de.steamwar.bausystem.tracernew.recorder;
|
||||
|
||||
import de.steamwar.bausystem.BauSystem;
|
||||
import de.steamwar.bausystem.tracer.TraceManager;
|
||||
import de.steamwar.bausystem.tracernew.DataHolder;
|
||||
import de.steamwar.bausystem.tracernew.data.RecordStatus;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import static de.steamwar.bausystem.tracernew.recorder.TNTRecorder.*;
|
||||
|
||||
public class RecordManager {
|
||||
|
||||
public static void recordCommands(Player player, String[] args) {
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "start":
|
||||
start();
|
||||
player.sendMessage(BauSystem.PREFIX + "§aAufnahme gestartet");
|
||||
break;
|
||||
case "stop":
|
||||
stop();
|
||||
player.sendMessage(BauSystem.PREFIX + "§cTNT-Tracer gestoppt");
|
||||
break;
|
||||
case "auto":
|
||||
case "toggleauto":
|
||||
toggleAuto();
|
||||
if (DataHolder.isIdleNotAuto() || DataHolder.isRecordingNotAuto()) {
|
||||
player.sendMessage(BauSystem.PREFIX + "§cAutomatischer TNT-Tracer deaktiviert");
|
||||
} else {
|
||||
player.sendMessage(BauSystem.PREFIX + "§aAutomatischer TNT-Tracer aktiviert");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void toggleAuto() {
|
||||
switch (DataHolder.status) {
|
||||
case IDLE:
|
||||
DataHolder.status = RecordStatus.IDLE_AUTO;
|
||||
break;
|
||||
case RECORD:
|
||||
DataHolder.status = RecordStatus.RECORD_AUTO;
|
||||
break;
|
||||
case IDLE_AUTO:
|
||||
DataHolder.status = RecordStatus.IDLE;
|
||||
break;
|
||||
case RECORD_AUTO:
|
||||
DataHolder.status = RecordStatus.RECORD;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void start() {
|
||||
DataHolder.status = RecordStatus.RECORD;
|
||||
TraceManager.startFrame();
|
||||
startRecording();
|
||||
}
|
||||
|
||||
public static void startAuto() {
|
||||
DataHolder.status = RecordStatus.RECORD_AUTO;
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§7Automatischer TNT-Tracer §8- §aAufnahme gestartet")));
|
||||
TraceManager.startFrame();
|
||||
startRecording();
|
||||
}
|
||||
|
||||
public static void updateAuto() {
|
||||
update();
|
||||
}
|
||||
|
||||
public static void stop() {
|
||||
DataHolder.status = RecordStatus.IDLE;
|
||||
stopRecording();
|
||||
TraceManager.stopFrame();
|
||||
}
|
||||
|
||||
static void stopAuto() {
|
||||
DataHolder.status = RecordStatus.IDLE_AUTO;
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§7Automatischer TNT-Tracer §8- §aAufnahme gestoppt")));
|
||||
stopRecording();
|
||||
TraceManager.stopFrame();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -9,24 +9,22 @@ import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static de.steamwar.bausystem.tracer.recorder.RecordManager.stopAuto;
|
||||
import static de.steamwar.bausystem.tracernew.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();
|
||||
DataHolder.lastExplosion = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
static void startRecording() {
|
||||
if (task != null) return;
|
||||
recordStart = System.currentTimeMillis();
|
||||
lastExplosion = System.currentTimeMillis();
|
||||
DataHolder.recordStart = System.currentTimeMillis();
|
||||
DataHolder.lastExplosion = System.currentTimeMillis();
|
||||
task = Bukkit.getScheduler().runTaskTimer(BauSystem.getPlugin(), TNTRecorder::run, 1, 1);
|
||||
run();
|
||||
}
|
||||
@ -45,7 +43,7 @@ public class TNTRecorder {
|
||||
.map(e -> (TNTPrimed)e);
|
||||
TraceListener.onTick(tntPrimedStream);
|
||||
|
||||
if (DataHolder.isRecordingAuto() && System.currentTimeMillis() - lastExplosion > 4500) {
|
||||
if (DataHolder.isAutoStop()) {
|
||||
stopAuto();
|
||||
}
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren