Trace Refactor #233
@ -43,12 +43,12 @@ public class Recorder implements Listener {
|
|||||||
public TraceManager manager;
|
public TraceManager manager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map for all traces beeing activly recorded
|
* Map for all traces being actively recorded
|
||||||
*/
|
*/
|
||||||
private final Map<Region, Trace> activeTraces = new HashMap<>();
|
private final Map<Region, Trace> activeTraces = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map for all tnts being traced, by region
|
* Map for all TNTs being traced, by region
|
||||||
*/
|
*/
|
||||||
private final Map<Region, List<TNTPrimed>> trackedTNT = new HashMap<>();
|
private final Map<Region, List<TNTPrimed>> trackedTNT = new HashMap<>();
|
||||||
|
|
||||||
@ -58,22 +58,39 @@ public class Recorder implements Listener {
|
|||||||
private final Map<TNTPrimed, Region> tntSpawnRegion = new HashMap<>();
|
private final Map<TNTPrimed, Region> tntSpawnRegion = new HashMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maps a tracked tnt entity to the last record taken of it
|
* Maps a tracked tnt entity to its entire recording history
|
||||||
*/
|
*/
|
||||||
private final Map<TNTPrimed, List<TNTRecord>> historyMap = new HashMap<>();
|
private final Map<TNTPrimed, List<TNTRecord>> historyMap = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Regions where auto-trace is enabled
|
||||||
|
*/
|
||||||
|
private final Set<Region> autoTraceRegions = new HashSet<>();
|
||||||
|
|
||||||
public Recorder(){
|
public Recorder(){
|
||||||
BauSystem.runTaskTimer(BauSystem.getInstance(), this::record, 0, 1);
|
BauSystem.runTaskTimer(BauSystem.getInstance(), this::record, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Toggles auto trace for the given region
|
||||||
|
*
|
||||||
|
* @param region
|
||||||
|
*/
|
||||||
|
public void toggleAutoTrace(Region region) {
|
||||||
|
if (autoTraceRegions.contains(region))
|
||||||
|
autoTraceRegions.remove(region);
|
||||||
|
else
|
||||||
|
autoTraceRegions.add(region);
|
||||||
|
}
|
||||||
|
|
||||||
/** Starts a recording at the given region
|
/** Starts a recording at the given region
|
||||||
*
|
*
|
||||||
* @param region region to be recorded
|
* @param region region to be recorded
|
||||||
|
* @
|
||||||
*/
|
*/
|
||||||
public int startRecording(Region region){
|
public void startRecording(Region region){
|
||||||
|
if(activeTraces.containsKey(region)) return;
|
||||||
Trace trace = new Trace(region);
|
Trace trace = new Trace(region);
|
||||||
activeTraces.put(region, trace);
|
activeTraces.put(region, trace);
|
||||||
return manager.add(trace);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Stops the recording at the given region
|
/** Stops the recording at the given region
|
||||||
@ -81,7 +98,8 @@ public class Recorder implements Listener {
|
|||||||
* @param region region to stop recording
|
* @param region region to stop recording
|
||||||
*/
|
*/
|
||||||
public void stopRecording(Region region){
|
public void stopRecording(Region region){
|
||||||
Trace trace = activeTraces.get(region);
|
Trace trace = activeTraces.getOrDefault(region, null);
|
||||||
|
if (trace == null) return;
|
||||||
trace.setRecords(Collections.unmodifiableList(trace.getRecords()));
|
trace.setRecords(Collections.unmodifiableList(trace.getRecords()));
|
||||||
|
|
||||||
activeTraces.remove(region);
|
activeTraces.remove(region);
|
||||||
@ -136,6 +154,10 @@ public class Recorder implements Listener {
|
|||||||
if(!(event.getEntity() instanceof TNTPrimed)) return;
|
if(!(event.getEntity() instanceof TNTPrimed)) return;
|
||||||
|
|
||||||
Region region = Region.getRegion(event.getLocation());
|
Region region = Region.getRegion(event.getLocation());
|
||||||
|
|
||||||
|
if(autoTraceRegions.contains(region) && !activeTraces.containsKey(region))
|
||||||
|
startRecording(region);
|
||||||
|
|
||||||
if(activeTraces.containsKey(region)){
|
if(activeTraces.containsKey(region)){
|
||||||
//Check whether set for tracking already exists. Creating it if necessary
|
//Check whether set for tracking already exists. Creating it if necessary
|
||||||
if(!trackedTNT.containsKey(region))
|
if(!trackedTNT.containsKey(region))
|
||||||
|
@ -29,33 +29,24 @@ import java.util.stream.Collectors;
|
|||||||
@Linked
|
@Linked
|
||||||
public class TraceManager implements Listener {
|
public class TraceManager implements Listener {
|
||||||
/**
|
/**
|
||||||
* Map of all current traces
|
* List of all current traces
|
||||||
*/
|
*/
|
||||||
private final Map<Integer, Trace> traces = new HashMap<>();
|
private final List<Trace> traces = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility variable to keep track of the next open trace id
|
|
||||||
*/
|
|
||||||
private int currOpenId = 0;
|
|
||||||
|
|
||||||
/** Adds a new trace to the global record
|
/** Adds a new trace to the global record
|
||||||
*
|
*
|
||||||
* @param trace Trace to be added
|
* @param trace Trace to be added
|
||||||
* @return id of the newly added trace
|
|
||||||
*/
|
*/
|
||||||
protected int add(Trace trace){
|
protected void add(Trace trace){
|
||||||
int id = currOpenId;
|
traces.add(trace);
|
||||||
traces.put(id, trace);
|
|
||||||
currOpenId++;
|
|
||||||
return id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Removes the trace with the given id
|
/** Removes the trace with the given id
|
||||||
*
|
*
|
||||||
* @param id Id of the trace to be removed
|
* @param index index of the trace to be removed
|
||||||
*/
|
*/
|
||||||
public void remove(int id){
|
public void remove(int index){
|
||||||
traces.remove(id);
|
traces.remove(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Clears all traces
|
/** Clears all traces
|
||||||
@ -63,7 +54,6 @@ public class TraceManager implements Listener {
|
|||||||
*/
|
*/
|
||||||
public void clear(){
|
public void clear(){
|
||||||
traces.clear();
|
traces.clear();
|
||||||
currOpenId = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Methode to get all traces in a certain region
|
/** Methode to get all traces in a certain region
|
||||||
@ -72,21 +62,19 @@ public class TraceManager implements Listener {
|
|||||||
* @return All traces recorded in the given Region
|
* @return All traces recorded in the given Region
|
||||||
*/
|
*/
|
||||||
public Set<Trace> get(Region region){
|
public Set<Trace> get(Region region){
|
||||||
return traces.values()
|
return traces.stream()
|
||||||
.stream()
|
|
||||||
.filter((Trace trace) -> trace.getRegion() == region)
|
.filter((Trace trace) -> trace.getRegion() == region)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Methode to get the trace with specific id
|
/** Methode to get the trace with specific id
|
||||||
*
|
*
|
||||||
* @param id id of the trace
|
* @param index index of the trace
|
||||||
* @return the trace with given id or null if no trace with id is found
|
* @return the trace with given id or null if no trace with id is found
|
||||||
*/
|
*/
|
||||||
public Optional<Trace> get(int id){
|
public Optional<Trace> get(int index){
|
||||||
Trace ret = traces.get(id);
|
if(index < traces.size())
|
||||||
if(traces.containsKey(id))
|
return Optional.of(traces.get(index));
|
||||||
return Optional.of(traces.get(id));
|
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +82,7 @@ public class TraceManager implements Listener {
|
|||||||
*
|
*
|
||||||
* @return fresh set of all current traces
|
* @return fresh set of all current traces
|
||||||
*/
|
*/
|
||||||
public Set<Trace> getAll(){
|
public List<Trace> getAll(){
|
||||||
return new HashSet<>(traces.values());
|
return new ArrayList<>(traces);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren