SteamWar/BauSystem2.0
Archiviert
12
0

Optimize frozen region checks
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Signed-off-by: yoyosource <yoyosource@nidido.de>
Dieser Commit ist enthalten in:
yoyosource 2022-06-11 22:04:57 +02:00
Ursprung d0d902786e
Commit 0ad94d9716
6 geänderte Dateien mit 27 neuen und 30 gelöschten Zeilen

Datei anzeigen

@ -527,7 +527,7 @@ SIMULATOR_WAND_LORE_2 = §eSneaking §8- §7Free movement
SIMULATOR_WAND_LORE_3 = §eLeft click §8- §7Start the simulation SIMULATOR_WAND_LORE_3 = §eLeft click §8- §7Start the simulation
SIMULATOR_WAND_LORE_4 = §eRight click in air §8- §7Opens the gui SIMULATOR_WAND_LORE_4 = §eRight click in air §8- §7Opens the gui
SIMULATOR_REGION_FREEZED = §cSimulator cannot be used inside freezed regions SIMULATOR_REGION_FROZEN = §cSimulator cannot be used inside frozen regions
## Other ## Other
SIMULATOR_PLUS_ONE = §7+1 SIMULATOR_PLUS_ONE = §7+1

Datei anzeigen

@ -528,7 +528,7 @@ SIMULATOR_WAND_LORE_2 = §eSneaken §8- §7Freie Bewegung
SIMULATOR_WAND_LORE_3 = §eLinksklick §8- §7Starte die Simulation SIMULATOR_WAND_LORE_3 = §eLinksklick §8- §7Starte die Simulation
SIMULATOR_WAND_LORE_4 = §eRechtsklick Luft §8- §7Öffne die GUI SIMULATOR_WAND_LORE_4 = §eRechtsklick Luft §8- §7Öffne die GUI
SIMULATOR_REGION_FREEZED = §cSimulator kann nicht in eingefrorenen Regionen genutzt werden SIMULATOR_REGION_FROZEN = §cSimulator kann nicht in eingefrorenen Regionen genutzt werden
## Other ## Other
SIMULATOR_PLUS_ONE = §7+1 SIMULATOR_PLUS_ONE = §7+1

Datei anzeigen

@ -29,8 +29,6 @@ import de.steamwar.bausystem.features.simulator.tnt.TNTElement;
import de.steamwar.bausystem.features.simulator.tnt.TNTGroup; import de.steamwar.bausystem.features.simulator.tnt.TNTGroup;
import de.steamwar.bausystem.features.tracer.record.RecordStateMachine; import de.steamwar.bausystem.features.tracer.record.RecordStateMachine;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode;
import de.steamwar.bausystem.shared.Pair; import de.steamwar.bausystem.shared.Pair;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -213,26 +211,15 @@ public class TNTSimulator {
} }
public void start(Player p) { public void start(Player p) {
for (SimulatorElement element : tntElementList) {
if (element instanceof TNTElement) {
if (Region.getRegion(element.getPosition().toLocation(SimulatorStorage.WORLD)).get(Flag.FREEZE) == FreezeMode.ACTIVE) {
BauSystem.MESSAGE.send("SIMULATOR_REGION_FREEZED", p);
return;
}
} else if (element instanceof TNTGroup) {
for (TNTElement tntElement : ((TNTGroup) element).getElements()) {
if (Region.getRegion(tntElement.getPosition().toLocation(SimulatorStorage.WORLD)).get(Flag.FREEZE) == FreezeMode.ACTIVE) {
BauSystem.MESSAGE.send("SIMULATOR_REGION_FREEZED", p);
return;
}
}
}
}
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
Map<Integer, Map<Integer, Set<Pair<Runnable, Integer>>>> result = new HashMap<>(); Map<Integer, Map<Integer, Set<Pair<Runnable, Integer>>>> result = new HashMap<>();
boolean regionFrozen = false;
for (SimulatorElement element : tntElementList) { for (SimulatorElement element : tntElementList) {
element.locations(result, region, p.getLocation()); regionFrozen |= element.locations(result, region, p.getLocation());
}
if (regionFrozen) {
BauSystem.MESSAGE.send("SIMULATOR_REGION_FROZEN", p);
return;
} }
playerShowMode.forEach((player, simulatorEntityShowMode) -> { playerShowMode.forEach((player, simulatorEntityShowMode) -> {

Datei anzeigen

@ -49,7 +49,7 @@ public interface SimulatorElement {
void hide(SimulatorEntityShowMode showMode); void hide(SimulatorEntityShowMode showMode);
SWItem menu(Player p); SWItem menu(Player p);
void locations(Map<Integer, Map<Integer, Set<Pair<Runnable, Integer>>>> result, Region region, Location location); // Ticks to subtick order to spawning runnable to count of activations boolean locations(Map<Integer, Map<Integer, Set<Pair<Runnable, Integer>>>> result, Region region, Location location); // Ticks to subtick order to spawning runnable to count of activations
// Observer // Observer
default void change() { default void change() {

Datei anzeigen

@ -25,6 +25,8 @@ import de.steamwar.bausystem.features.simulator.OrderUtils;
import de.steamwar.bausystem.features.simulator.SimulatorStorage; import de.steamwar.bausystem.features.simulator.SimulatorStorage;
import de.steamwar.bausystem.features.simulator.show.SimulatorEntityShowMode; import de.steamwar.bausystem.features.simulator.show.SimulatorEntityShowMode;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode;
import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.shared.Pair; import de.steamwar.bausystem.shared.Pair;
@ -167,11 +169,15 @@ public class TNTElement implements SimulatorElement {
} }
@Override @Override
public void locations(Map<Integer, Map<Integer, Set<Pair<Runnable, Integer>>>> result, Region region, Location radius) { public boolean locations(Map<Integer, Map<Integer, Set<Pair<Runnable, Integer>>>> result, Region region, Location radius) {
if (disabled) return; if (disabled) return false;
Location location = getPosition().toLocation(SimulatorStorage.WORLD); Location location = getPosition().toLocation(SimulatorStorage.WORLD);
if (location.distanceSquared(radius) > 10000 || !region.inRegion(location, RegionType.NORMAL, RegionExtensionType.NORMAL)) { if (location.distanceSquared(radius) > 10000 || !region.inRegion(location, RegionType.NORMAL, RegionExtensionType.NORMAL)) {
return; return false;
}
Region thisRegion = Region.getRegion(location);
if (thisRegion.getFlagStorage().get(Flag.FREEZE) == FreezeMode.ACTIVE) {
return true;
} }
result.computeIfAbsent(getTickOffset(), ignore -> new HashMap<>()) result.computeIfAbsent(getTickOffset(), ignore -> new HashMap<>())
@ -184,6 +190,7 @@ public class TNTElement implements SimulatorElement {
if (!zVelocity) tntPrimed.setVelocity(tntPrimed.getVelocity().setZ(0)); if (!zVelocity) tntPrimed.setVelocity(tntPrimed.getVelocity().setZ(0));
}); });
}, count)); }, count));
return false;
} }
public void setCount(int count) { public void setCount(int count) {

Datei anzeigen

@ -139,11 +139,14 @@ public class TNTGroup implements SimulatorElement {
} }
@Override @Override
public void locations(Map<Integer, Map<Integer, Set<Pair<Runnable, Integer>>>> result, Region region, Location location) { public boolean locations(Map<Integer, Map<Integer, Set<Pair<Runnable, Integer>>>> result, Region region, Location location) {
if (disabled) return; if (disabled) return false;
elements.forEach(tntElement -> { for (TNTElement element : elements) {
tntElement.locations(result, region, location); if (element.locations(result, region, location)) {
}); return true;
}
}
return false;
} }
public void setTickOffset(int tickOffset) { public void setTickOffset(int tickOffset) {