diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/region/FreezeListener.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/region/FreezeListener.java index fb15e84e..d0b63900 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/region/FreezeListener.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/region/FreezeListener.java @@ -3,7 +3,7 @@ package de.steamwar.bausystem.features.region; import de.steamwar.bausystem.BauSystem; 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.flags.FreezeMode; import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.core.Core; import de.steamwar.core.TrickyTrialsWrapper; diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java index c0c5a3d5..18b8760a 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java @@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.script.lua.libs; import de.steamwar.bausystem.features.loader.Loader; import de.steamwar.bausystem.region.Region; +import de.steamwar.bausystem.region.RegionSystem; import de.steamwar.bausystem.region.flags.*; import de.steamwar.linkage.Linked; import org.bukkit.entity.Player; @@ -28,6 +29,7 @@ import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.lib.OneArgFunction; +import java.util.UUID; import java.util.function.Supplier; @Linked @@ -41,13 +43,14 @@ public class RegionLib implements LuaLib { private LuaTable create(Supplier region, Player player) { LuaTable table = LuaValue.tableOf(); - table.set("name", getter(() -> region.get().getName())); + table.set("name", getter(() -> region.get().getID().toString())); + table.set("id", getter(() -> region.get().getID().toString())); table.set("type", getter(() -> { Region region1 = region.get(); if (region1.getType().isGlobal()) { return "global"; } - return region1.getPrototype().getName(); + return region1.getType().name().toLowerCase(); })); LuaValue tntLib = LuaValue.tableOf(); @@ -72,16 +75,16 @@ public class RegionLib implements LuaLib { Loader loader = Loader.getLoader(player); table.set("loader", getter(() -> loader == null ? "OFF" : loader.getStage().name())); - table.set("copyPoint", getter(() -> toPos(region.get().getCopyPoint()))); - table.set("minPointBuild", getter(() -> toPos(region.get().getMinPointBuild()))); - table.set("maxPointBuild", getter(() -> toPos(region.get().getMaxPointBuild()))); - table.set("minPointBuildExtension", getter(() -> toPos(region.get().getMinPointBuildExtension()))); - table.set("maxPointBuildExtension", getter(() -> toPos(region.get().getMaxPointBuildExtension()))); - table.set("testblockPoint", getter(() -> toPos(region.get().getTestBlockPoint()))); - table.set("minPointTestblock", getter(() -> toPos(region.get().getMinPointTestblock()))); - table.set("maxPointTestblock", getter(() -> toPos(region.get().getMaxPointTestblock()))); - table.set("minPointTestblockExtension", getter(() -> toPos(region.get().getMinPointTestblockExtension()))); - table.set("maxPointTestblockExtension", getter(() -> toPos(region.get().getMaxPointTestblockExtension()))); + table.set("copyPoint", getter(() -> toPos(region.get().getBuildArea().getCopyPoint()))); + table.set("minPointBuild", getter(() -> toPos(region.get().getBuildArea().getMinPoint(false)))); + table.set("maxPointBuild", getter(() -> toPos(region.get().getBuildArea().getMinPoint(false)))); + table.set("minPointBuildExtension", getter(() -> toPos(region.get().getBuildArea().getMinPoint(true)))); + table.set("maxPointBuildExtension", getter(() -> toPos(region.get().getBuildArea().getMinPoint(true)))); + table.set("testblockPoint", getter(() -> toPos(region.get().getTestblockArea().getCopyPoint()))); + table.set("minPointTestblock", getter(() -> toPos(region.get().getTestblockArea().getMinPoint(false)))); + table.set("maxPointTestblock", getter(() -> toPos(region.get().getTestblockArea().getMinPoint(false)))); + table.set("minPointTestblockExtension", getter(() -> toPos(region.get().getTestblockArea().getMinPoint(true)))); + table.set("maxPointTestblockExtension", getter(() -> toPos(region.get().getTestblockArea().getMinPoint(true)))); return table; } @@ -92,11 +95,11 @@ public class RegionLib implements LuaLib { table.set("get", new OneArgFunction() { @Override public LuaValue call(LuaValue arg) { - return create(() -> Region.getREGION_MAP().get(arg.checkjstring()), player); + return create(() -> RegionSystem.INSTANCE.getRegion(UUID.fromString(arg.checkjstring())).orElse(RegionSystem.INSTANCE.getGlobalRegion()), player); } }); - table.set("list", getter(() -> LuaValue.listOf(Region.getREGION_MAP().values().stream().map(region -> create(() -> region, player)).toArray(LuaTable[]::new)))); + table.set("list", getter(() -> LuaValue.listOf(RegionSystem.INSTANCE.getRegions().map(region -> create(() -> region, player)).toArray(LuaTable[]::new)))); return table; } diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/StorageLib.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/StorageLib.java index 51a35bd7..37454427 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/StorageLib.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/StorageLib.java @@ -75,7 +75,7 @@ public class StorageLib implements LuaLib, Enable, Disable { jsonObject.keySet().forEach(key -> { map.put(key, fromJson(jsonObject.get(key))); }); - Region region = RegionSystem.INSTANCE.getRegion(regionStorage.getName().substring(0, regionStorage.getName().length() - ".json".length())).orElse(null); + Region region = RegionSystem.INSTANCE.getRegion(UUID.fromString(regionStorage.getName().substring(0, regionStorage.getName().length() - ".json".length()))).orElse(null); REGION_STORAGE.put(region, map); } catch (Exception e) {} } @@ -144,7 +144,7 @@ public class StorageLib implements LuaLib, Enable, Disable { regionStorageDirectory.mkdirs(); for (Map.Entry> entry : REGION_STORAGE.entrySet()) { try { - FileWriter fileWriter = new FileWriter(new File(regionStorageDirectory, entry.getKey().getName() + ".json")); + FileWriter fileWriter = new FileWriter(new File(regionStorageDirectory, entry.getKey().getID().toString() + ".json")); gson.toJson(toJson(entry.getValue()), fileWriter); fileWriter.close(); } catch (IOException e) {} diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/execute/StabFinalizer.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/execute/StabFinalizer.java index 5c0d77aa..79148cc3 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/execute/StabFinalizer.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/execute/StabFinalizer.java @@ -19,10 +19,9 @@ package de.steamwar.bausystem.features.simulator.execute; -import de.steamwar.bausystem.features.tracer.Trace; import de.steamwar.bausystem.features.tracer.TraceRecorder; +import de.steamwar.bausystem.region.flags.ColorMode; import de.steamwar.bausystem.region.flags.Flag; -import de.steamwar.bausystem.region.flags.flagvalues.ColorMode; import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.utils.PasteBuilder; @@ -38,8 +37,10 @@ public class StabFinalizer extends StabStep { protected void start() { try { PasteBuilder.ClipboardProvider clipboardProvider = new PasteBuilder.ClipboardProviderImpl(data.clipboard); - PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider) - .color(data.region.getPlain(Flag.COLOR, ColorMode.class).getColor()); + PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider); + if (data.region.hasFlag(Flag.COLOR).isReadable()) { + pasteBuilder.color(data.region.getFlag(Flag.COLOR).get().getColor()); + } data.region.reset(pasteBuilder, RegionType.TESTBLOCK, RegionExtensionType.EXTENSION); } catch (SecurityException e) { stop(); diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/execute/StabGenerator.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/execute/StabGenerator.java index 4a15ebcb..a53e0093 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/execute/StabGenerator.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/execute/StabGenerator.java @@ -22,7 +22,6 @@ package de.steamwar.bausystem.features.simulator.execute; import de.steamwar.bausystem.features.simulator.data.tnt.TNTPhase; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.flags.Flag; -import de.steamwar.bausystem.region.flags.flagvalues.ColorMode; import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.utils.PasteBuilder; @@ -56,7 +55,8 @@ public class StabGenerator extends StabStep implements Listener { public void onEntityExplode(EntityExplodeEvent event) { if (Region.getRegion(event.getEntity().getLocation()) == data.region) { event.blockList().forEach(block -> { - if (!data.region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) return; + if (!data.region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) + return; int component = data.direction.component.apply(block.getLocation().toVector()); destroyedBlocksPerSlice.computeIfAbsent(component, __ -> new HashSet<>()) .add(block.getLocation()); @@ -72,8 +72,10 @@ public class StabGenerator extends StabStep implements Listener { protected void start() { try { PasteBuilder.ClipboardProvider clipboardProvider = new PasteBuilder.ClipboardProviderImpl(data.clipboard); - PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider) - .color(data.region.getPlain(Flag.COLOR, ColorMode.class).getColor()); + PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider); + if (data.region.hasFlag(Flag.COLOR).isReadable()) { + pasteBuilder.color(data.region.getFlag(Flag.COLOR).get().getColor()); + } data.region.reset(pasteBuilder, RegionType.TESTBLOCK, RegionExtensionType.EXTENSION); } catch (SecurityException e) { stop(); diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceRepository.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceRepository.java index e20ec561..0765d92b 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceRepository.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceRepository.java @@ -32,7 +32,7 @@ public class TraceRepository { @Cleanup ObjectInputStream reader = new ObjectInputStream(new GZIPInputStream(new FileInputStream(recordsFile))); UUID uuid = UUID.fromString(reader.readUTF()); - Region region = RegionSystem.INSTANCE.getRegion(reader.readUTF()).orElse(null); + Region region = RegionSystem.INSTANCE.getRegion(UUID.fromString(reader.readUTF())).orElse(null); if (region == null) return null; Date date = (Date) reader.readObject(); int serialisationVersion = reader.readInt(); @@ -48,7 +48,7 @@ public class TraceRepository { protected static void writeTrace(Trace trace, List records) { ObjectOutputStream outputStream = new ObjectOutputStream(new GZIPOutputStream(new FileOutputStream(trace.getRecordsSaveFile()))); outputStream.writeUTF(trace.getUuid().toString()); - outputStream.writeUTF(trace.getRegion().getName()); + outputStream.writeUTF(trace.getRegion().getID().toString()); outputStream.writeObject(trace.getDate()); outputStream.writeInt(SERIALISATION_VERSION); diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java index 6c8dce46..74a4fcec 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java @@ -28,6 +28,7 @@ import org.bukkit.Location; import javax.annotation.Nullable; import java.io.File; import java.util.Optional; +import java.util.UUID; public interface Region { @@ -35,6 +36,8 @@ public interface Region { return RegionSystem.INSTANCE.get(location); } + UUID getID(); + RegionType getType(); & Flag.Value> RegionFlagPolicy hasFlag(@NonNull Flag flag); diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionSystem.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionSystem.java index 9c480219..26ee4bc6 100644 --- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionSystem.java +++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/region/RegionSystem.java @@ -23,6 +23,7 @@ import org.bukkit.Location; import java.lang.reflect.InvocationTargetException; import java.util.Optional; +import java.util.UUID; import java.util.stream.Stream; public interface RegionSystem { @@ -35,7 +36,7 @@ public interface RegionSystem { Region getGlobalRegion(); Region get(Location location); - Optional getRegion(String name); + Optional getRegion(UUID id); Stream getRegions(); @@ -68,7 +69,7 @@ public interface RegionSystem { } @Override - public Optional getRegion(String name) { + public Optional getRegion(UUID id) { throw new UnsupportedOperationException(); }