Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Dieser Commit ist enthalten in:
yoyosource 2024-05-16 15:31:00 +02:00
Commit 3370e211f9
3 geänderte Dateien mit 41 neuen und 26 gelöschten Zeilen

Datei anzeigen

@ -29,11 +29,14 @@ import de.steamwar.entity.REntityServer;
import lombok.Cleanup; import lombok.Cleanup;
import lombok.Getter; import lombok.Getter;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.io.*; import java.io.*;
import java.lang.ref.SoftReference; import java.lang.ref.SoftReference;
import java.util.*; import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
@ -308,16 +311,28 @@ public class Trace {
/** /**
* Loads the records of this trace from storage to memory * Loads the records of this trace from storage to memory
*/ */
@SneakyThrows
private void loadRecords() { private void loadRecords() {
List<TNTPoint> records = new ArrayList<>(); List<TNTPoint> records = new ArrayList<>();
long readBytes = 0;
try {
FileInputStream fileInputStream = new FileInputStream(recordsSaveFile);
FileInputStream fileInputStream = new FileInputStream(recordsSaveFile); @Cleanup
ObjectInputStream inputStream = new ObjectInputStream(new GZIPInputStream(fileInputStream));
long fileLenght = recordsSaveFile.length();
while (fileInputStream.getChannel().position() < fileLenght) {
records.add((TNTPoint) inputStream.readObject());
readBytes = fileInputStream.getChannel().position();
}
} catch (EOFException e) {
Logger logger = Bukkit.getLogger();
logger.log(Level.WARNING, "EOF in trace read detected in " + uuid);
logger.log(Level.WARNING, "Read " + readBytes + "/" + recordsSaveFile.length() + " Bytes");
logger.log(Level.WARNING, "Read so far: " + records);
@Cleanup e.printStackTrace();
ObjectInputStream inputStream = new ObjectInputStream(new GZIPInputStream(fileInputStream)); } catch (IOException | ClassNotFoundException e) {
while (fileInputStream.getChannel().position() < recordsSaveFile.length()) { e.printStackTrace();
records.add((TNTPoint) inputStream.readObject());
} }
Map<Integer, List<TNTPoint>> histories = new HashMap<>(); Map<Integer, List<TNTPoint>> histories = new HashMap<>();

Datei anzeigen

@ -113,7 +113,7 @@ public class TraceRecorder implements Listener {
public void stopRecording(Region region) { public void stopRecording(Region region) {
TraceRecordingWrapper wrappedTrace = activeTraces.getOrDefault(region, null); TraceRecordingWrapper wrappedTrace = activeTraces.getOrDefault(region, null);
if (wrappedTrace == null) return; if (wrappedTrace == null) return;
wrappedTrace.finalizeRecording(); wrappedTrace.finalizeRecording();
activeTraces.remove(region); activeTraces.remove(region);
for (TNTPrimed tnt : trackedTNT.getOrDefault(region, Collections.emptyList())) { for (TNTPrimed tnt : trackedTNT.getOrDefault(region, Collections.emptyList())) {
@ -247,10 +247,9 @@ public class TraceRecorder implements Listener {
* *
* @param event * @param event
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onTNTExplode(EntityExplodeEvent event) { public void onTNTExplode(EntityExplodeEvent event) {
if (!(event.getEntity() instanceof TNTPrimed)) return; if (!(event.getEntity() instanceof TNTPrimed)) return;
Region region = tntSpawnRegion.getOrDefault((TNTPrimed) event.getEntity(), null); Region region = tntSpawnRegion.getOrDefault((TNTPrimed) event.getEntity(), null);
if (region == null) return; if (region == null) return;
trackedTNT.get(region).remove((TNTPrimed) event.getEntity()); trackedTNT.get(region).remove((TNTPrimed) event.getEntity());

Datei anzeigen

@ -26,10 +26,7 @@ import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -120,26 +117,30 @@ public abstract class ViewFlag {
@Override @Override
public void modify(REntityServer server, List<TraceEntity> entities) { public void modify(REntityServer server, List<TraceEntity> entities) {
for (TraceEntity entity : entities) { for (TraceEntity entity : entities) {
TNTPoint current = entity.getRecords().get(0); TNTPoint representative = entity.getRecords().get(0);
if (current.isExplosion()) continue; Optional<TNTPoint> prev = representative.getPrevious();
TNTPoint next = current.getNext().orElse(null);
if (next == null) continue;
Location pos = current.getLocation().clone(); if (prev.isEmpty()) continue;
pos.setY(next.getLocation().getY());
if (pos.distanceSquared(current.getLocation()) >= 1.0 / 256.0) { TNTPoint previous = prev.get();
RFallingBlockEntity y = new RFallingBlockEntity(server, pos, Material.WHITE_STAINED_GLASS);
Location delta = representative.getLocation().clone().subtract(previous.getLocation());
Location yLocation = previous.getLocation().clone().add(0, delta.getY(), 0);
if (yLocation.distanceSquared(representative.getLocation()) >= 1.0 / 256.0 && yLocation.distanceSquared(previous.getLocation()) >= 1.0 / 256.0) {
RFallingBlockEntity y = new RFallingBlockEntity(server, yLocation, Material.WHITE_STAINED_GLASS);
y.setNoGravity(true); y.setNoGravity(true);
} }
if (current.getVelocity().getX() >= current.getVelocity().getZ()) { Location secoundLocation;
pos.setX(next.getLocation().getX()); if (delta.getX() >= delta.getZ()) {
secoundLocation = previous.getLocation().clone().add(delta.getX(), delta.getY(), 0);
} else { } else {
pos.setZ(next.getLocation().getZ()); secoundLocation = previous.getLocation().clone().add(0, delta.getY(), delta.getZ());
} }
if (pos.distanceSquared(next.getLocation()) >= 1.0 / 256.0) {
RFallingBlockEntity second = new RFallingBlockEntity(server, pos, Material.WHITE_STAINED_GLASS); if (secoundLocation.distanceSquared(representative.getLocation()) >= 1.0 / 256.0 && secoundLocation.distanceSquared(previous.getLocation()) >= 1.0 / 256.0) {
RFallingBlockEntity second = new RFallingBlockEntity(server, secoundLocation, Material.WHITE_STAINED_GLASS);
second.setNoGravity(true); second.setNoGravity(true);
} }
} }