From b49c75d6bd6520394fc2dae00c2fa9920c174cf6 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Thu, 26 Oct 2023 22:31:30 +0200 Subject: [PATCH] Add storage api and implement SimulatorStorage --- BauSystem_15/build.gradle | 4 +- BauSystem_18/build.gradle | 4 +- BauSystem_19/build.gradle | 4 +- BauSystem_20/build.gradle | 4 +- BauSystem_Linkage/build.gradle | 4 +- BauSystem_Main/build.gradle | 4 +- .../features/simulator/SimulatorStorage.java | 2 +- .../features/simulator2/SimulatorStorage.java | 66 +++++++++++++++++-- .../features/simulator2/SimulatorWatcher.java | 2 + .../SimulatorFormatSimulatorLoader.java | 2 +- .../simulator2/storage/SimulatorSaver.java | 5 +- 11 files changed, 77 insertions(+), 24 deletions(-) diff --git a/BauSystem_15/build.gradle b/BauSystem_15/build.gradle index 87ae1928..180c7022 100644 --- a/BauSystem_15/build.gradle +++ b/BauSystem_15/build.gradle @@ -27,8 +27,8 @@ version '1.0' compileJava.options.encoding = 'UTF-8' -sourceCompatibility = 1.8 -targetCompatibility = 1.8 +sourceCompatibility = 11 +targetCompatibility = 11 sourceSets { main { diff --git a/BauSystem_18/build.gradle b/BauSystem_18/build.gradle index 8deb57fd..8fb54099 100644 --- a/BauSystem_18/build.gradle +++ b/BauSystem_18/build.gradle @@ -27,8 +27,8 @@ version '1.0' compileJava.options.encoding = 'UTF-8' -sourceCompatibility = 1.8 -targetCompatibility = 1.8 +sourceCompatibility = 11 +targetCompatibility = 11 sourceSets { main { diff --git a/BauSystem_19/build.gradle b/BauSystem_19/build.gradle index fb86e3ac..e7be349d 100644 --- a/BauSystem_19/build.gradle +++ b/BauSystem_19/build.gradle @@ -27,8 +27,8 @@ version '1.0' compileJava.options.encoding = 'UTF-8' -sourceCompatibility = 1.8 -targetCompatibility = 1.8 +sourceCompatibility = 11 +targetCompatibility = 11 sourceSets { main { diff --git a/BauSystem_20/build.gradle b/BauSystem_20/build.gradle index bfb7c724..be167e64 100644 --- a/BauSystem_20/build.gradle +++ b/BauSystem_20/build.gradle @@ -27,8 +27,8 @@ version '1.0' compileJava.options.encoding = 'UTF-8' -sourceCompatibility = 1.8 -targetCompatibility = 1.8 +sourceCompatibility = 11 +targetCompatibility = 11 sourceSets { main { diff --git a/BauSystem_Linkage/build.gradle b/BauSystem_Linkage/build.gradle index 2169557f..de3818a5 100644 --- a/BauSystem_Linkage/build.gradle +++ b/BauSystem_Linkage/build.gradle @@ -27,8 +27,8 @@ version '1.0' compileJava.options.encoding = 'UTF-8' -sourceCompatibility = 1.8 -targetCompatibility = 1.8 +sourceCompatibility = 11 +targetCompatibility = 11 sourceSets { main { diff --git a/BauSystem_Main/build.gradle b/BauSystem_Main/build.gradle index 62d604cf..bf61d861 100644 --- a/BauSystem_Main/build.gradle +++ b/BauSystem_Main/build.gradle @@ -27,8 +27,8 @@ version '1.0' compileJava.options.encoding = 'UTF-8' -sourceCompatibility = 1.8 -targetCompatibility = 1.8 +sourceCompatibility = 11 +targetCompatibility = 11 sourceSets { main { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorStorage.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorStorage.java index a549e0a2..5103136a 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorStorage.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorStorage.java @@ -48,7 +48,7 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -@Linked +// @Linked public class SimulatorStorage implements Enable, Disable { public static final World WORLD = Bukkit.getWorlds().get(0); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorStorage.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorStorage.java index 8c49a66a..7bae9ba9 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorStorage.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorStorage.java @@ -22,21 +22,28 @@ package de.steamwar.bausystem.features.simulator2; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.features.simulator2.data.Simulator; -import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorPageGui; +import de.steamwar.bausystem.features.simulator2.storage.SimFormatSimulatorLoader; +import de.steamwar.bausystem.features.simulator2.storage.SimulatorFormatSimulatorLoader; +import de.steamwar.bausystem.features.simulator2.storage.SimulatorSaver; +import de.steamwar.bausystem.features.simulator2.storage.YAPIONFormatSimulatorLoader; import de.steamwar.bausystem.utils.ItemUtils; import de.steamwar.inventory.SWItem; +import de.steamwar.linkage.Linked; +import de.steamwar.linkage.api.Enable; +import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; +import java.io.File; +import java.util.*; -public class SimulatorStorage { +@Linked +public class SimulatorStorage implements Enable { + public static final File simulatorsDir = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "simulators"); private static Map simulatorMap = new HashMap<>(); private static NamespacedKey simulatorSelection = SWUtils.getNamespaceKey("simulator_selection"); @@ -65,8 +72,53 @@ public class SimulatorStorage { simulatorMap.putIfAbsent(name, simulator); } - private static Simulator loadSimulator(String name) { - return SimulatorTestCommand.SIMULATOR; // TODO: Implement Loading and legacy Loading + @Override + public void enable() { + SimFormatSimulatorLoader simFormatSimulatorLoader = new SimFormatSimulatorLoader(); + SimulatorFormatSimulatorLoader simulatorFormatSimulatorLoader = new SimulatorFormatSimulatorLoader(); + YAPIONFormatSimulatorLoader yapionFormatSimulatorLoader = new YAPIONFormatSimulatorLoader(); + + for (File file : simulatorsDir.listFiles()) { + try { + List simulators = simFormatSimulatorLoader.load(file) + .orElse(null); + if (simulators != null) { + simulators.forEach(simulator -> { + simulatorMap.put(simulator.getName(), simulator); + }); + continue; + } + } catch (Exception e) { + // Ignore + } + + try { + List simulators = simulatorFormatSimulatorLoader.load(file) + .orElse(null); + if (simulators != null) { + simulators.forEach(simulator -> { + simulatorMap.put(simulator.getName(), simulator); + SimulatorSaver.saveSimulator(simulatorsDir, simulator); + }); + continue; + } + } catch (Exception e) { + // Ignore + } + + try { + List simulators = yapionFormatSimulatorLoader.load(file) + .orElse(null); + if (simulators != null) { + simulators.forEach(simulator -> { + simulatorMap.put(simulator.getName(), simulator); + SimulatorSaver.saveSimulator(simulatorsDir, simulator); + }); + } + } catch (Exception e) { + // Ignore + } + } } public static void openSimulatorSelector(Player player) { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorWatcher.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorWatcher.java index eb888615..edb97005 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorWatcher.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/SimulatorWatcher.java @@ -23,6 +23,7 @@ import de.steamwar.bausystem.features.simulator2.data.Simulator; import de.steamwar.bausystem.features.simulator2.data.SimulatorElement; import de.steamwar.bausystem.features.simulator2.data.SimulatorGroup; import de.steamwar.bausystem.features.simulator2.data.tnt.TNTElement; +import de.steamwar.bausystem.features.simulator2.storage.SimulatorSaver; import de.steamwar.bausystem.shared.Pair; import de.steamwar.entity.REntity; import de.steamwar.entity.REntityServer; @@ -69,6 +70,7 @@ public class SimulatorWatcher { simulatorRunnablePair.getValue().run(); } }); + SimulatorSaver.saveSimulator(SimulatorStorage.simulatorsDir, simulator); } @Linked diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/storage/SimulatorFormatSimulatorLoader.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/storage/SimulatorFormatSimulatorLoader.java index 86bc406e..3783f833 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/storage/SimulatorFormatSimulatorLoader.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/storage/SimulatorFormatSimulatorLoader.java @@ -66,7 +66,7 @@ public class SimulatorFormatSimulatorLoader implements SimulatorLoader { } } - file.delete(); + // file.delete(); return Optional.of(Collections.singletonList(simulator)); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/storage/SimulatorSaver.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/storage/SimulatorSaver.java index bb19c48d..9f1fadb1 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/storage/SimulatorSaver.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator2/storage/SimulatorSaver.java @@ -41,13 +41,12 @@ public class SimulatorSaver { YAPIONObject groupObject = new YAPIONObject(); groupObject.add("material", group.getMaterial().name()); groupObject.add("disabled", group.isDisabled()); - groups.add(groupObject); YAPIONArray elements = new YAPIONArray(); group.getElements().forEach(element -> { YAPIONObject elementObject = new YAPIONObject(); elementObject.add("type", element.getType()); - elementObject.add("material", element.getMaterial()); + elementObject.add("material", element.getMaterial().name()); elementObject.add("disabled", element.isDisabled()); elementObject.add("x", element.getPosition().getX()); elementObject.add("y", element.getPosition().getY()); @@ -73,7 +72,7 @@ public class SimulatorSaver { File file = new File(directory, simulator.getName() + ".sim"); try { - simulatorObject.toJSON(new FileOutput(file)).close(); + simulatorObject.toJSONLossy(new FileOutput(file)).close(); } catch (IOException e) { // Ignore }