Trace Refactor #233
@ -136,4 +136,15 @@ public class TNTRecord {
|
||||
", velocity=" + velocity +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if(!(obj instanceof TNTRecord)) return false;
|
||||
TNTRecord record = (TNTRecord) obj;
|
||||
|
||||
if(record.isExplosion() != explosion) return false;
|
||||
if(!record.getLocation().equals(location)) return false;
|
||||
if(!record.getVelocity().equals(velocity)) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -23,12 +23,14 @@ import de.steamwar.bausystem.features.tpslimit.TPSUtils;
|
||||
import de.steamwar.bausystem.features.tracer.rendering.BundleFilter;
|
||||
import de.steamwar.bausystem.features.tracer.rendering.TraceEntity;
|
||||
import de.steamwar.bausystem.features.tracer.rendering.ViewFlag;
|
||||
import de.steamwar.bausystem.features.tracer.rendering.dynamicFlags.IsolateFlag;
|
||||
import de.steamwar.bausystem.region.Region;
|
||||
import de.steamwar.entity.REntityServer;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class Trace {
|
||||
/**
|
||||
@ -199,6 +201,15 @@ public class Trace {
|
||||
for(ViewFlag flag : flags) {
|
||||
flag.modify(server, entities);
|
||||
}
|
||||
|
||||
server.setCallback(((player, rEntity, entityAction) -> {
|
||||
for(TraceEntity entity: entities){
|
||||
if(((TraceEntity) rEntity).equals(entity)){
|
||||
entity.printIntoChat(player);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
/** Bundles the passed TNTRecords based on whether they are at the same location
|
||||
@ -236,6 +247,37 @@ public class Trace {
|
||||
return bundles;
|
||||
}
|
||||
|
||||
/** Toggles the isolated render for the given records and player
|
||||
*
|
||||
* @param player the player the trace is shown to
|
||||
* @param records the record for which isolation is toggled
|
||||
*/
|
||||
public void isolate(Player player, TNTRecord... records){
|
||||
IsolateFlag isolationFlag = null;
|
||||
|
||||
ViewFlag[] viewFlags = viewFlagMap.get(player);
|
||||
if(viewFlags != null) {
|
||||
isolationFlag = Stream.of(viewFlags)
|
||||
.filter(IsolateFlag.class::isInstance)
|
||||
.map(IsolateFlag.class::cast)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
if (viewFlags == null || isolationFlag == null) {
|
||||
viewFlags = new ViewFlag[1];
|
||||
}
|
||||
if (isolationFlag == null) {
|
||||
isolationFlag = new IsolateFlag();
|
||||
}
|
||||
viewFlags[0] = isolationFlag;
|
||||
|
||||
for(TNTRecord record: records)
|
||||
isolationFlag.toggleId(record.getTntId());
|
||||
|
||||
render(player, viewFlags, BundleFilter.STRICT);
|
||||
}
|
||||
|
||||
/** Hides this trail for the given player
|
||||
*
|
||||
* @param player
|
||||
@ -249,13 +291,6 @@ public class Trace {
|
||||
server.close();
|
||||
}
|
||||
|
||||
/** Returns the flags used by the given player to render the trace or null if not present
|
||||
*
|
||||
* @param player
|
||||
* @return
|
||||
*/
|
||||
protected ViewFlag[] getViewFlags(Player player){return viewFlagMap.get(player);}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Trace{" +
|
||||
|
@ -92,29 +92,7 @@ public class TraceCommand extends SWCommand {
|
||||
|
||||
@Register(value = "isolate", description = "TRACE_COMMAND_HELP_SHOW")
|
||||
public void isolate(Player player, Trace trace, @ErrorMessage("test") TNTRecord... records){
|
||||
IsolateFlag isolationFlag = null;
|
||||
|
||||
ViewFlag[] viewFlags = trace.getViewFlags(player);
|
||||
if(viewFlags != null) {
|
||||
isolationFlag = Stream.of(viewFlags)
|
||||
.filter(IsolateFlag.class::isInstance)
|
||||
.map(IsolateFlag.class::cast)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
if (viewFlags == null || isolationFlag == null) {
|
||||
viewFlags = new ViewFlag[1];
|
||||
}
|
||||
if (isolationFlag == null) {
|
||||
isolationFlag = new IsolateFlag();
|
||||
}
|
||||
viewFlags[0] = isolationFlag;
|
||||
|
||||
for(TNTRecord record: records)
|
||||
isolationFlag.toggleId(record.getTntId());
|
||||
|
||||
trace.render(player, viewFlags, BundleFilter.STRICT);
|
||||
trace.isolate(player, records);
|
||||
}
|
||||
//TODO warning if nothing is shown
|
||||
|
||||
|
@ -26,6 +26,7 @@ import de.steamwar.entity.RFallingBlockEntity;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityInteractEvent;
|
||||
@ -44,10 +45,9 @@ public class TraceEntity extends RFallingBlockEntity {
|
||||
super(server, location, isExplosion ? Material.RED_STAINED_GLASS : Material.TNT);
|
||||
setNoGravity(true);
|
||||
this.records = records;
|
||||
}
|
||||
|
||||
server.setCallback(((player, rEntity, entityAction) -> {
|
||||
if (entityAction != REntityServer.EntityAction.INTERACT) return;
|
||||
|
||||
public void printIntoChat(Player player){
|
||||
TNTRecord representative = records.get(0);
|
||||
|
||||
BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_HEADER", player);
|
||||
@ -58,9 +58,13 @@ public class TraceEntity extends RFallingBlockEntity {
|
||||
BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_X", player, representative.getVelocity().getX() + "");
|
||||
BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_Y", player, representative.getVelocity().getY() + "");
|
||||
BauSystem.MESSAGE.sendPrefixless("TNT_CLICK_VELOCITY_Z", player, representative.getVelocity().getZ() + "");
|
||||
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if(!(object instanceof TraceEntity)) return false;
|
||||
TraceEntity entity = (TraceEntity) object;
|
||||
|
||||
return records.get(0).equals(entity.getRecords().get(0));
|
||||
}
|
||||
}
|
||||
|
@ -103,7 +103,6 @@ public abstract class ViewFlag {
|
||||
public void modify(REntityServer server, List<TraceEntity> entities) {}
|
||||
};
|
||||
|
||||
//TODO fix?
|
||||
public static ViewFlag MICROMOTION = new ViewFlag(true, false, "micromotion", "m") {
|
||||
@Override
|
||||
public List<TNTRecord> filter(List<TNTRecord> records) {
|
||||
@ -139,7 +138,6 @@ public abstract class ViewFlag {
|
||||
public void modify(REntityServer server, List<TraceEntity> entities) {}
|
||||
};
|
||||
|
||||
//TODO fix?
|
||||
public static ViewFlag ADVANCED = new ViewFlag(true, false, "advanced", "a") {
|
||||
@Override
|
||||
public List<TNTRecord> filter(List<TNTRecord> records) {return records;}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren