diff --git a/BauSystem_Main/build.gradle b/BauSystem_Main/build.gradle index 2e9a8d6c..865e5318 100644 --- a/BauSystem_Main/build.gradle +++ b/BauSystem_Main/build.gradle @@ -43,9 +43,6 @@ sourceSets { } dependencies { - // implementation 'yoyosource:YAPION:0.25.3' - implementation files("${projectDir}/../libs/YAPION-SNAPSHOT.jar") - compileOnly 'org.projectlombok:lombok:1.18.22' testCompileOnly 'org.projectlombok:lombok:1.18.22' annotationProcessor 'org.projectlombok:lombok:1.18.22' diff --git a/BauSystem_Main/src/BauSystem.properties b/BauSystem_Main/src/BauSystem.properties index 20842c72..2ac3e530 100644 --- a/BauSystem_Main/src/BauSystem.properties +++ b/BauSystem_Main/src/BauSystem.properties @@ -802,8 +802,6 @@ REGION_REGION_HELP_RESTORE=§8/§eregion restore §8- §7Resets the region, with REGION_REGION_HELP_RESTORE_SCHEMATIC=§8/§eregion restore §8[§7Schematic§8] §8- §7Resets the region, withoout removing your builds REGION_REGION_HELP_COPYPOINT=§8/§eregion copypoint §8- §7Teleport to the regions copy point REGION_REGION_HELP_TESTBLOCKPOINT=§8/§eregion testblockpoint §8- §7Teleport to the regions dummy point -REGION_REGION_HELP_CHANGETYPE_INFO=§8/§eregion changetype §8- §7Returns the region type -REGION_REGION_HELP_CHANGETYPE=§8/§eregion changetype §8[§7Type§8] §8- §8Sets the region type REGION_REGION_HELP_CHANGESKIN_INFO=§8/§eregion changeskin §8- §7Returns the region skin REGION_REGION_HELP_CHANGESKIN=§8/§eregion changeskin §8[§7Skin§8] §8- §8Sets the region skin REGION_REGION_NOTHING_UNDO=§cNothing left to undo @@ -820,12 +818,6 @@ REGION_REGION_TP_TEST_BLOCK=§7Teleported to the tesblock REGION_REGION_TP_UNKNOWN=§cUndefined teleport point REGION_REGION_NO_REGION=§cYou are not inside any region REGION_REGION_NO_PERMS=§cYou are not allowed to change the region -REGION_REGION_CHANGETYPE_INFO=§7RRegion type is §e{0} -REGION_REGION_CHANGETYPE_UNKNOWN=§cRegion type is invalid -REGION_REGION_CHANGETYPE_INVALID=§cRegion type is not allowed here -REGION_REGION_CHANGETYPE_CHANGE=§7Region type changed to §e{0} -REGION_REGION_CHANGETYPE_CHANGE_UPDATE=§7Click §e§lHERE §7to change the region type -REGION_REGION_CHANGETYPE_CHANGE_UPDATE_HOVER=§8/§ereset REGION_REGION_CHANGESKIN_INFO=§7Region skin is §e{0} REGION_REGION_CHANGESKIN_INFO_CREATOR=§7Skin created by §e{0} REGION_REGION_CHANGESKIN_UNKNOWN=§cRegion skin is invalid diff --git a/BauSystem_Main/src/BauSystem_de.properties b/BauSystem_Main/src/BauSystem_de.properties index 32c5e03d..0b36ee82 100644 --- a/BauSystem_Main/src/BauSystem_de.properties +++ b/BauSystem_Main/src/BauSystem_de.properties @@ -765,8 +765,6 @@ REGION_REGION_HELP_RESTORE=§8/§eregion restore §8- §7Setzte die Region zurü REGION_REGION_HELP_RESTORE_SCHEMATIC=§8/§eregion restore §8[§7Schematic§8] §8- §7Setzte die Region zurück, ohne das Gebaute zu löschen REGION_REGION_HELP_COPYPOINT=§8/§eregion copypoint §8- §7Teleportiere dich zum Regions Kopierpunkt REGION_REGION_HELP_TESTBLOCKPOINT=§8/§eregion testblockpoint §8- §7Teleportiere dich zum Regions Testblockpunkt -REGION_REGION_HELP_CHANGETYPE_INFO=§8/§eregion changetype §8- §7Gebe den Regions Type aus -REGION_REGION_HELP_CHANGETYPE=§8/§eregion changetype §8[§7Type§8] §8- §8Setzte den Regions Type REGION_REGION_HELP_CHANGESKIN_INFO=§8/§eregion changeskin §8- §7Gebe den Regions Skin aus REGION_REGION_HELP_CHANGESKIN=§8/§eregion changeskin §8[§7Skin§8] §8- §8Setzte den Regions Skin REGION_REGION_NOTHING_UNDO=§cNichts zum rückgängig machen @@ -783,12 +781,6 @@ REGION_REGION_TP_TEST_BLOCK=§7Zum Testblock teleportiert REGION_REGION_TP_UNKNOWN=§cNicht definierter Teleportierpunkt REGION_REGION_NO_REGION=§cDu bist in keiner Region REGION_REGION_NO_PERMS=§cDu darfst hier nicht die Region verändern -REGION_REGION_CHANGETYPE_INFO=§7Regions Type ist §e{0} -REGION_REGION_CHANGETYPE_UNKNOWN=§cRegions Type ist nicht valide -REGION_REGION_CHANGETYPE_INVALID=§cRegions Type ist nicht erlaubt hier -REGION_REGION_CHANGETYPE_CHANGE=§7Regions Type ist auf §e{0}§7 geändert -REGION_REGION_CHANGETYPE_CHANGE_UPDATE=§7Klicke §e§lHIER §7um den Type anzuwenden -REGION_REGION_CHANGETYPE_CHANGE_UPDATE_HOVER=§8/§ereset REGION_REGION_CHANGESKIN_INFO=§7Regions Skin ist §e{0} REGION_REGION_CHANGESKIN_INFO_CREATOR=§7Skin erstellt von §e{0} REGION_REGION_CHANGESKIN_UNKNOWN=§cRegions Skin ist nicht valide diff --git a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java index 0d38af4e..67c289e0 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java @@ -26,11 +26,10 @@ import de.steamwar.bausystem.features.tpslimit.TPSLimitUtils; import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tpslimit.TPSWarpUtils; import de.steamwar.bausystem.features.world.RamUsage; +import de.steamwar.bausystem.linkage.LinkageUtils; import de.steamwar.bausystem.region.loader.PrototypeLoader; import de.steamwar.bausystem.region.loader.RegionLoader; -import de.steamwar.bausystem.region.loader.Updater; import de.steamwar.bausystem.worlddata.WorldData; -import de.steamwar.bausystem.linkage.LinkageUtils; import de.steamwar.message.Message; import lombok.Getter; import org.bukkit.Bukkit; @@ -79,9 +78,6 @@ public class BauSystem extends JavaPlugin implements Listener { return; } - new Updater(PrototypeLoader.file, PrototypeLoader::load); - new Updater(RegionLoader.file, RegionLoader::load); - LinkageUtils.link(); RamUsage.init(); @@ -107,8 +103,8 @@ public class BauSystem extends JavaPlugin implements Listener { public void onDisable() { LinkageUtils.unlink(); - WorldData.write(); - Config.getInstance().saveAll(); + WorldData.getInstance().save(); + Config.saveAll(); TinyProtocol.instance.close(); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/config/ConfigField.java b/BauSystem_Main/src/de/steamwar/bausystem/config/ConfigField.java new file mode 100644 index 00000000..1132c7d6 --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/config/ConfigField.java @@ -0,0 +1,31 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2023 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bausystem.config; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ConfigField { + boolean required() default false; +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/config/YamlConfig.java b/BauSystem_Main/src/de/steamwar/bausystem/config/YamlConfig.java new file mode 100644 index 00000000..a9d247fb --- /dev/null +++ b/BauSystem_Main/src/de/steamwar/bausystem/config/YamlConfig.java @@ -0,0 +1,95 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2023 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bausystem.config; + +import de.steamwar.sql.UserConfig; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.ConfigurationSerialization; + +import java.io.StringReader; +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +public class YamlConfig implements ConfigurationSerializable { + + public static void register(Class configType) { + ConfigurationSerialization.registerClass(configType); + } + + public static YamlConfiguration fromUserConfig(UUID uuid, String name) { + String config = UserConfig.getConfig(uuid, name); + if(config == null) + return new YamlConfiguration(); + + return YamlConfiguration.loadConfiguration(new StringReader(config)); + } + + public YamlConfig() {} + + public YamlConfig(ConfigurationSection configuration) { + this(configuration.getValues(false)); + } + + public YamlConfig(Map map) { + Arrays.stream(getClass().getDeclaredFields()) + .filter(field -> field.isAnnotationPresent(ConfigField.class)) + .forEach(field -> { + String name = field.getName(); + try { + field.setAccessible(true); + field.set(this, map.containsKey(name) ? map.get(name) : getClass().getDeclaredField(name.toUpperCase() + "_DEFAULT").get(null)); + } catch (NoSuchFieldException e) { + if(field.getAnnotation(ConfigField.class).required()) + throw new IllegalStateException(getClass().getName() + "." + field.getName() + " is required", e); + } catch (IllegalAccessException e) { + throw new IllegalStateException(getClass().getName() + "." + field.getName() + " is inaccessible for deserializer", e); + } + }); + } + + @Override + public Map serialize() { + return Arrays.stream(getClass().getDeclaredFields()) + .filter(field -> field.isAnnotationPresent(ConfigField.class)) + .collect(Collectors.toMap( + Field::getName, + field -> { + try { + field.setAccessible(true); + return field.get(this); + } catch (IllegalAccessException e) { + throw new IllegalStateException(getClass().getName() + "." + field.getName() + " is inaccessible for serializer", e); + } + } + )); + } + + public YamlConfiguration toYaml() { + YamlConfiguration config = new YamlConfiguration(); + for(Map.Entry entry : serialize().entrySet()) + config.set(entry.getKey(), entry.getValue()); + return config; + } +} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/configplayer/Config.java b/BauSystem_Main/src/de/steamwar/bausystem/configplayer/Config.java index 2f929687..f2be052c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/configplayer/Config.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/configplayer/Config.java @@ -19,129 +19,120 @@ package de.steamwar.bausystem.configplayer; -import de.steamwar.bausystem.configplayer.serializer.ConfigurationSerializableSerializer; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import de.steamwar.linkage.Linked; import de.steamwar.sql.UserConfig; import lombok.Getter; -import org.bukkit.Bukkit; +import lombok.Setter; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; -import yapion.hierarchy.output.StringOutput; -import yapion.hierarchy.types.YAPIONObject; -import yapion.parser.YAPIONParser; -import yapion.serializing.SerializeManager; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import java.util.logging.Level; -@Linked -public class Config implements Listener { +public class Config extends YamlConfig { - static { - SerializeManager.add(new ConfigurationSerializableSerializer()); + private static final Map playerConfigurations = new HashMap<>(); + + public static Config get(Player player) { //TODO: NULL + return playerConfigurations.computeIfAbsent(player.getUniqueId(), uuid -> new Config(uuid, fromUserConfig(uuid, "bausystem"))); } - @Getter - private static Config instance; - - { - instance = this; - } - - private final Map playerConfigurations = new HashMap<>(); - - private static final Map CONFIG_CONVERTER_MAP = new HashMap<>(); - - public static void addConfigConverter(ConfigConverter configConverter) { - CONFIG_CONVERTER_MAP.putIfAbsent(configConverter.version(), configConverter); - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - get(event.getPlayer()); - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) { - save(event.getPlayer()); - playerConfigurations.remove(event.getPlayer().getUniqueId()); - } - - /** - * Get a PlayerConfig, optionally loads it from the DataBase and migrates it if necessary. - * - * @param player the player from whom to get the config. - * @return the config object - */ - public YAPIONObject get(Player player) { - UUID uuid = player.getUniqueId(); - if (!playerConfigurations.containsKey(uuid)) { - String s = UserConfig.getConfig(uuid, "bausystem"); - YAPIONObject yapionObject; - if (s == null) { - yapionObject = ConfigCreator.createDefaultConfig(); - } else { - yapionObject = YAPIONParser.parse(s); - } - yapionObject = update(yapionObject); - playerConfigurations.put(uuid, yapionObject); - return yapionObject; - } - return playerConfigurations.get(uuid); - } - - public void saveAll() { - playerConfigurations.forEach((uuid, yapionObject) -> { - String string = yapionObject.toYAPION(new StringOutput()).getResult(); - UserConfig.updatePlayerConfig(uuid, "bausystem", string); - }); + public static void saveAll() { + playerConfigurations.forEach((uuid, config) -> config.save()); playerConfigurations.clear(); } - /** - * Save a PlayerConfig, this does not remove the key value mapping from the map. - * - * @param player the player to save the config. - */ - public void save(Player player) { - UUID uuid = player.getUniqueId(); - if (playerConfigurations.containsKey(uuid)) { - YAPIONObject yapionObject = playerConfigurations.get(uuid); - String string = yapionObject.toYAPION(new StringOutput()).getResult(); - UserConfig.updatePlayerConfig(uuid, "bausystem", string); + private final UUID uuid; + + @Getter + @Setter + @ConfigField + private boolean nightvision; + + @Getter + @Setter + @ConfigField + private boolean simulatorAutoTrace; + + @Getter + @Setter + @ConfigField + private boolean detonatorAutostart; + + @Getter + @Setter + @ConfigField + private boolean blockCounter; + + @Getter + @Setter + @ConfigField + private boolean smartPlace; + + @Getter + @Setter + @ConfigField + private boolean inventoryFill; + + @Getter + @ConfigField + private final Map baugui = new HashMap<>(); + + private Config(UUID uuid, ConfigurationSection configuration) { + super(configuration); + this.uuid = uuid; + + if(baugui.isEmpty()) { + // 0: ? | 1: ? | 2: 10 | 3: 3 | 4: 7 | 5: 17 | 6: 15 | 7: ? | 8: ? + // 9: 5 | 10: ? | 11: ? | 12: ? | 13: ? | 14: ? | 15: ? | 16: ? | 17: 16 + // 18: 4 | 19: ? | 20: 19 | 21: 21 | 22: 9 | 23: 0 | 24: 1 | 25: ? | 26: 11 + // 27: 6 | 28: ? | 29: ? | 30: ? | 31: ? | 32: ? | 33: ? | 34: ? | 35: 18 + // 36: ? | 37: 23 | 38: 20 | 39: 8 | 40: 22 | 41: 26 | 42: 12 | 43: 14 | 44: ? + + baugui.put("size", 45); + baugui.put("10", 2); + baugui.put("3", 3); + baugui.put("7", 4); + baugui.put("17", 5); + baugui.put("15", 6); + baugui.put("5", 9); + baugui.put("16", 17); + baugui.put("4", 18); + baugui.put("19", 20); + baugui.put("21", 21); + baugui.put("9", 22); + baugui.put("0", 23); + baugui.put("1", 24); + baugui.put("11", 26); + baugui.put("6", 27); + baugui.put("18", 35); + baugui.put("23", 37); + baugui.put("20", 38); + baugui.put("8", 39); + baugui.put("22", 40); + baugui.put("26", 41); + baugui.put("12", 42); + baugui.put("14", 43); } } - private YAPIONObject update(YAPIONObject yapionObject) { - int version = yapionObject.getPlainValue("@version"); - while (version < ConfigCreator.currentVersion) { - ConfigConverter configConverter = CONFIG_CONVERTER_MAP.getOrDefault(version, null); - if (configConverter == null) { - Bukkit.getLogger().log(Level.SEVERE, "No updater found for version " + version); - return ConfigCreator.createDefaultConfig(); - } - try { - configConverter.update(yapionObject); - } catch (Exception e) { - Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e); - return ConfigCreator.createDefaultConfig(); - } - int newVersion = yapionObject.getPlainValue("@version"); - if (version == newVersion) { - Bukkit.getLogger().log(Level.SEVERE, "Version Tag was the same after conversion"); - return ConfigCreator.createDefaultConfig(); - } - if (newVersion < version) { - Bukkit.getLogger().log(Level.SEVERE, "Version Tag was earlier after conversion"); - return ConfigCreator.createDefaultConfig(); - } - version = newVersion; + public void save() { + UserConfig.updatePlayerConfig(uuid, "bausystem", toYaml().saveToString()); + } + + @Linked + public static class ConfigListener implements Listener { + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + get(event.getPlayer()).save(); + playerConfigurations.remove(event.getPlayer().getUniqueId()); } - return yapionObject; } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/configplayer/ConfigConverter.java b/BauSystem_Main/src/de/steamwar/bausystem/configplayer/ConfigConverter.java deleted file mode 100644 index bf9f1fdf..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/configplayer/ConfigConverter.java +++ /dev/null @@ -1,37 +0,0 @@ -package de.steamwar.bausystem.configplayer; - -import yapion.hierarchy.types.YAPIONObject; - -/** - * A new {@link ConfigConverter} should be written when you remove anything - * from the Config or modify any mayor part. When you move anything from - * any key to any other key you should write a new {@link ConfigConverter}. - * For adding any new key you should be able to get the default without - * having it in the Config. Anything you need to change you should also - * change the {@link ConfigCreator} accordingly, to produce the new Config. - */ -public interface ConfigConverter { - - /** - * This describes the version this Converter can convert from. The version - * it should convert to is the version 1 above this number. But this is not - * a necessity. In the config Object as parameter given in {@link #update(YAPIONObject)} - * you should update the @version variable in the root object to the - * new version this converter produced. - * - * @return the version number - */ - int version(); - - /** - * This method should update everything needed to go from a lower config - * version to a higher. It should update the @version variable - * accordingly. Anything else is up the implementation. If anything goes wrong - * do not silently exit this method, throw an Exception. The updater Code will - * deal with it. Never leave the inputted object in a corrupted state. - * - * @param config the config object to update - */ - void update(YAPIONObject config); - -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/configplayer/ConfigCreator.java b/BauSystem_Main/src/de/steamwar/bausystem/configplayer/ConfigCreator.java deleted file mode 100644 index f2d8a4a8..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/configplayer/ConfigCreator.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.configplayer; - -import de.steamwar.bausystem.features.hotbar.DefaultHotbar; -import lombok.experimental.UtilityClass; -import yapion.hierarchy.types.YAPIONObject; - -@UtilityClass -public class ConfigCreator { - - public static final int currentVersion = 1; - - public YAPIONObject createDefaultConfig() { - YAPIONObject yapionObject = new YAPIONObject(); - // This call should never be touched - yapionObject.add("@version", currentVersion); - - // Any initialising goes into here - yapionObject.add("baugui", defaultBauGui()); - - // Default Hotbar Gui - yapionObject.add("hotbar", DefaultHotbar.defaultHotbar()); - return yapionObject; - } - - private YAPIONObject defaultBauGui() { - YAPIONObject yapionObject = new YAPIONObject(); - - // 0: ? | 1: ? | 2: 10 | 3: 3 | 4: 7 | 5: 17 | 6: 15 | 7: ? | 8: ? - // 9: 5 | 10: ? | 11: ? | 12: ? | 13: ? | 14: ? | 15: ? | 16: ? | 17: 16 - // 18: 4 | 19: ? | 20: 19 | 21: 21 | 22: 9 | 23: 0 | 24: 1 | 25: ? | 26: 11 - // 27: 6 | 28: ? | 29: ? | 30: ? | 31: ? | 32: ? | 33: ? | 34: ? | 35: 18 - // 36: ? | 37: 23 | 38: 20 | 39: 8 | 40: 22 | 41: 26 | 42: 12 | 43: 14 | 44: ? - - yapionObject.add("10", 2).add("3", 3).add("7", 4).add("17", 5).add("15", 6); - yapionObject.add("5", 9).add("4", 18).add("6", 27); - yapionObject.add("16", 17).add("11", 26).add("18", 35); - yapionObject.add("19", 20).add("21", 21).add("9", 22).add("0", 23).add("1", 24); - yapionObject.add("23", 37).add("20", 38).add("8", 39).add("22", 40).add("26", 41).add("12", 42).add("14", 43); - yapionObject.add("size", 45); - return yapionObject; - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/configplayer/serializer/ConfigurationSerializableSerializer.java b/BauSystem_Main/src/de/steamwar/bausystem/configplayer/serializer/ConfigurationSerializableSerializer.java deleted file mode 100644 index eecd1ef1..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/configplayer/serializer/ConfigurationSerializableSerializer.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.configplayer.serializer; - -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.bukkit.configuration.serialization.ConfigurationSerialization; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import yapion.hierarchy.api.groups.YAPIONAnyType; -import yapion.hierarchy.types.YAPIONObject; -import yapion.serializing.api.SerializerObject; -import yapion.serializing.data.DeserializeData; -import yapion.serializing.data.SerializeData; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import static yapion.utils.IdentifierUtils.TYPE_IDENTIFIER; - -public class ConfigurationSerializableSerializer extends SerializerObject { - - @Override - public Class type() { - return ConfigurationSerializable.class; - } - - @Override - public boolean isInterface() { - return true; - } - - @Override - public YAPIONObject serialize(SerializeData serializeData) { - YAPIONObject yapionObject = new YAPIONObject(); - yapionObject.add(TYPE_IDENTIFIER, serializeData.object.getClass().getTypeName()); - if (serializeData.object instanceof ItemStack) { - yapionObject.add(TYPE_IDENTIFIER, ItemStack.class.getTypeName()); - } - if (serializeData.object instanceof ItemMeta) { - yapionObject.add(TYPE_IDENTIFIER, ItemMeta.class.getTypeName()); - } - Map serializeDataMap = serializeData.object.serialize(); - serializeDataMap.forEach((s, o) -> { - YAPIONAnyType yapionAnyType = serializeData.serialize(o); - if (yapionAnyType instanceof YAPIONObject) { - YAPIONObject object = (YAPIONObject) yapionAnyType; - if (object.containsKey(TYPE_IDENTIFIER) && object.getPlainValue(TYPE_IDENTIFIER).equals("com.google.common.collect.RegularImmutableList")) { - object.put(TYPE_IDENTIFIER, ArrayList.class.getTypeName()); - } - } - yapionObject.add(s, yapionAnyType); - }); - return yapionObject; - } - - @Override - public ConfigurationSerializable deserialize(DeserializeData deserializeData) { - Map deserializeDataMap = new HashMap<>(); - deserializeData.object.forEach((s, yapionAnyType) -> { - if (s.equals(TYPE_IDENTIFIER)) { - if (yapionAnyType.toString().equals("(org.bukkit.inventory.meta.ItemMeta)")) { - deserializeDataMap.put("==", "ItemMeta"); - } else { - deserializeDataMap.put("==", deserializeData.deserialize(yapionAnyType)); - } - return; - } - deserializeDataMap.put(s, deserializeData.deserialize(yapionAnyType)); - }); - return ConfigurationSerialization.deserializeObject(deserializeDataMap); - } -} \ No newline at end of file diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/detonator/Detonator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/detonator/Detonator.java index 80d5b33b..599581c7 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/detonator/Detonator.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/detonator/Detonator.java @@ -79,7 +79,7 @@ public class Detonator { public static void activateDetonator(DetonatorStorage detonator) { Player p = detonator.getPlayer(); - if (Config.getInstance().get(p).getPlainValueOrDefault("detonator-autostart", false)) { + if (Config.get(p).isDetonatorAutostart()) { AutostartListener.instance.activate(p); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/detonator/DetonatorCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/detonator/DetonatorCommand.java index bb71245d..79bf0aef 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/detonator/DetonatorCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/detonator/DetonatorCommand.java @@ -76,8 +76,8 @@ public class DetonatorCommand extends SWCommand { @Register(value = "autostart", description = "DETONATOR_HELP_AUTOSTART") public void toggleAutostartTimer(Player p) { - boolean current = Config.getInstance().get(p).getPlainValueOrDefault("detonator-autostart", false); - Config.getInstance().get(p).put("detonator-autostart", !current); + boolean current = Config.get(p).isDetonatorAutostart(); + Config.get(p).setDetonatorAutostart(!current); if (!current) { BauSystem.MESSAGE.send("DETONATOR_AUTOSTART_ENABLE", p); } else { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/BauGUI.java b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/BauGUI.java index 74a915da..0c86c552 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/BauGUI.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/BauGUI.java @@ -67,7 +67,7 @@ public class BauGUI { if (!updating) { OPEN_INVS.add(p); } - BauGuiMapping mapping = BauGuiMapping.getGuiMapping(p); + BauGuiMapping mapping = new BauGuiMapping(p); SWInventory inv = new SWInventory(p, mapping.getSize(), BauSystem.MESSAGE.parse("GUI_NAME", p)); getITEMS().values().forEach(item -> { if (!mapping.isShown(item.getId())) { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiEditor.java b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiEditor.java index 733e7213..7db74be0 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiEditor.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiEditor.java @@ -53,7 +53,7 @@ public class BauGuiEditor implements Listener { private static final List open_Edits = new ArrayList<>(); public static void openGuiEditor(Player p, ItemStack cursor) { - BauGuiMapping mapping = BauGuiMapping.getGuiMapping(p); + BauGuiMapping mapping = new BauGuiMapping(p); Inventory inv = Bukkit.createInventory(null, mapping.getSize() + 9, BauSystem.MESSAGE.parse("GUI_EDITOR_TITLE", p)); for (Map.Entry e : mapping.getMapping().entrySet()) { if (e.getValue() >= 0) { @@ -78,7 +78,6 @@ public class BauGuiEditor implements Listener { p.openInventory(inv); p.getOpenInventory().setCursor(cursor == null ? new SWItem().getItemStack() : cursor); open_Edits.add(p); - BauGuiMapping.startWatchdog(); } private static ItemStack addId(ItemStack itemStack, int id) { @@ -101,7 +100,7 @@ public class BauGuiEditor implements Listener { ItemStack i = event.getCurrentItem(); Player p = (Player) event.getWhoClicked(); - BauGuiMapping mapping = BauGuiMapping.getGuiMapping(p); + BauGuiMapping mapping = new BauGuiMapping(p); if (event.getClickedInventory() == p.getInventory()) { event.setCancelled(true); } @@ -194,13 +193,10 @@ public class BauGuiEditor implements Listener { } private void saveMapping(Player p) { - saveMapping(p.getOpenInventory(), BauGuiMapping.getGuiMapping(p)); + saveMapping(p.getOpenInventory(), new BauGuiMapping(p)); } private void saveMapping(InventoryView view, BauGuiMapping mapping) { - if (mapping.isSaved()) { - return; - } HashMap newMapping = new HashMap<>(); for (int i = 0; i < view.getTopInventory().getContents().length; i++) { @@ -216,7 +212,6 @@ public class BauGuiEditor implements Listener { } mapping.setMapping(newMapping); - mapping.save(); } @EventHandler @@ -227,7 +222,7 @@ public class BauGuiEditor implements Listener { Player p = (Player) event.getPlayer(); - saveMapping(event.getView(), BauGuiMapping.getGuiMapping(p)); + saveMapping(event.getView(), new BauGuiMapping(p)); open_Edits.remove(p); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiMapping.java b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiMapping.java index 90cc1fb4..8c00309d 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiMapping.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/gui/editor/BauGuiMapping.java @@ -19,82 +19,50 @@ package de.steamwar.bausystem.features.gui.editor; -import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.configplayer.Config; -import de.steamwar.bausystem.features.gui.BauGUI; -import de.steamwar.bausystem.linkage.specific.BauGuiItem; import lombok.Getter; -import lombok.Setter; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitTask; -import yapion.hierarchy.types.YAPIONObject; -import java.util.*; +import java.util.Map; +import java.util.stream.Collectors; public class BauGuiMapping { - private static final HashMap fromUUID = new HashMap<>(); - private static final List mappings = new ArrayList<>(); - - private static BukkitTask task; - - public static void startWatchdog() { - if (task == null) { - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), bukkitTask -> { - mappings.forEach(BauGuiMapping::tick); - if (BauGuiEditor.getOpen_Edits().isEmpty()) { - bukkitTask.cancel(); - task = null; - } - }, 1, 1); - } - } - - @Getter - private final YAPIONObject object; @Getter private final Player owner; - @Getter - @Setter - private boolean saved; - protected BauGuiMapping(YAPIONObject object, Player p) { - this.object = object; + public BauGuiMapping(Player p) { this.owner = p; - fromUUID.put(p.getUniqueId(), this); - mappings.add(this); } - public static BauGuiMapping getGuiMapping(Player p) { - BauGuiMapping mapping = fromUUID.get(p.getUniqueId()); - - if (mapping == null) { - YAPIONObject yapionObject = Config.getInstance().get(p); - mapping = new BauGuiMapping(yapionObject.getObject("baugui"), p); - } - - return mapping; + private Map getInternalMapping() { + return Config.get(owner).getBaugui(); } public boolean isShown(int id) { - return object.getPlainValueOrDefault(Integer.toString(id), -1) >= 0; + return getInternalMapping().getOrDefault(Integer.toString(id), -1) >= 0; } public int getSlot(int id) { - return object.getPlainValue(Integer.toString(id)); + return getInternalMapping().getOrDefault(Integer.toString(id), 0); } public Map getMapping() { - return internalReadMap(); + return getInternalMapping().entrySet().stream().collect(Collectors.toMap(entry -> Integer.valueOf(entry.getKey()), Map.Entry::getValue)); } public void setMapping(Map mapping) { - internalWriteMap(mapping); + Map map = getInternalMapping(); + map.clear(); + + for(Map.Entry entry : mapping.entrySet()) + map.put(String.valueOf(entry.getKey()), entry.getValue()); + + Config.get(owner).save(); } public int getSize() { - return object.getPlainValueOrDefault("size", 45); + return getInternalMapping().getOrDefault("size", 45); } public void setSize(int size) { @@ -102,37 +70,6 @@ public class BauGuiMapping { return; } - object.add("size", size); - } - - private void tick() { - this.saved = false; - } - - public void save() { - if (saved) return; - YAPIONObject config = Config.getInstance().get(owner); - config.add("baugui", object); - Config.getInstance().save(owner); - saved = true; - } - - private Map internalReadMap() { - Map map = new HashMap<>(); - for (Map.Entry e : BauGUI.getITEMS().entrySet()) { - Integer value = object.getPlainValueOrDefault(e.getKey().toString(), -1); - if (value == -1) continue; - map.put(e.getKey(), value); - } - return map; - } - - private void internalWriteMap(Map map) { - for (Map.Entry e : BauGUI.getITEMS().entrySet()) { - object.remove(e.getKey().toString()); - Integer value = map.getOrDefault(e.getKey(), -1); - if (value == -1) continue; - object.add(e.getKey().toString(), value); - } + getInternalMapping().put("size", size); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/DefaultHotbar.java b/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/DefaultHotbar.java index 9e374ee4..d9bd00c3 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/DefaultHotbar.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/DefaultHotbar.java @@ -19,75 +19,89 @@ package de.steamwar.bausystem.features.hotbar; -import de.steamwar.bausystem.configplayer.Config; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import de.steamwar.core.Core; -import lombok.experimental.UtilityClass; +import de.steamwar.sql.UserConfig; +import lombok.Getter; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONObject; -import yapion.hierarchy.types.YAPIONValue; -import yapion.parser.YAPIONParser; -import yapion.serializing.YAPIONDeserializer; -import yapion.serializing.YAPIONSerializer; +import org.bukkit.inventory.meta.ItemMeta; -import java.util.HashSet; -import java.util.Set; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; -@UtilityClass -public class DefaultHotbar { +public class DefaultHotbar extends YamlConfig { - private final YAPIONArray DEFAULT_HOTBAR = YAPIONParser.parse("{[{@type(org.bukkit.inventory.ItemStack)v(2230)type(WOODEN_AXE)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(WorldEdit Wand)lore{@type(java.util.ArrayList)values[Left click: select pos #1,Right click: select pos #2]}}},{@type(org.bukkit.inventory.ItemStack)v(2230)type(COMPASS)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(Navigation Wand)lore{@type(java.util.ArrayList)values[Left click: jump to location,Right click: pass through walls]}}},null,null,null,null,null,null,{@type(org.bukkit.inventory.ItemStack)v(2230)type(NETHER_STAR)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(§eBau GUI)}},null,null,{@type(org.bukkit.inventory.ItemStack)v(3117)type(ELYTRA)},null]}").getArray(""); + public static final String configName = "bauhotbar-" + Core.getVersion(); - public void updateHotbar(Player p) { - ItemStack[] hotbar = new ItemStack[13]; - System.arraycopy(p.getInventory().getContents(), 0, hotbar, 0, 9); - System.arraycopy(p.getInventory().getArmorContents(), 0, hotbar, 9, 4); - YAPIONArray yapionArray = new YAPIONArray(); - for (ItemStack itemStack : hotbar) { - if (itemStack != null) { - yapionArray.add(YAPIONSerializer.serialize(itemStack)); - } else { - yapionArray.add(new YAPIONValue<>(null)); - } + public static DefaultHotbar get(Player p) { + return new DefaultHotbar(p, fromUserConfig(p.getUniqueId(), configName)); + } + + private final Player player; + + @Getter + @ConfigField + private final List hotbar = new ArrayList<>(13); + + public DefaultHotbar(Player player, ConfigurationSection config) { + super(config); + this.player = player; + + if(hotbar.isEmpty()) { + hotbar.add(newNamedStack(Material.WOODEN_AXE, "WorldEdit Wand", "Left click: select pos #1", "Right click: select pos #2")); + hotbar.add(newNamedStack(Material.COMPASS, "Navigation Wand", "Left click: jump to location", "Right click: pass through walls")); + hotbar.add(null); + hotbar.add(null); + hotbar.add(null); + hotbar.add(null); + hotbar.add(null); + hotbar.add(null); + hotbar.add(newNamedStack(Material.NETHER_STAR, "§eBau GUI")); + hotbar.add(null); + hotbar.add(null); + hotbar.add(new ItemStack(Material.ELYTRA)); + hotbar.add(null); } - Config.getInstance().get(p).add("hotbar-" + Core.getVersion(), yapionArray); - Config.getInstance().save(p); } - public void setHotbar(Player p) { - ItemStack[] hotbar = getItems(p); - ItemStack[] inv = p.getInventory().getContents(); - ItemStack[] armor = p.getInventory().getArmorContents(); - System.arraycopy(hotbar, 0, inv, 0, 9); - System.arraycopy(hotbar, 9, armor, 0, 4); - p.getInventory().setContents(inv); - p.getInventory().setArmorContents(armor); + public void update() { + hotbar.clear(); + + for(int i = 0; i < 9; i++) + hotbar.add(player.getInventory().getContents()[i]); + + for(int i = 0; i < 4; i++) + hotbar.add(player.getInventory().getArmorContents()[i]); + + UserConfig.updatePlayerConfig(player.getUniqueId(), configName, toYaml().saveToString()); } - public ItemStack[] getItems(Player p) { - Config.getInstance().get(p).remap("hotbar", "hotbar-19"); - YAPIONArray yapionArray = Config.getInstance().get(p).getYAPIONArrayOrSetDefault("hotbar-" + Core.getVersion(), defaultHotbar()); - ItemStack[] hotbar = new ItemStack[13]; - Set invalid = new HashSet<>(); - yapionArray.forEach((integer, yapionAnyType) -> { - if (yapionAnyType instanceof YAPIONValue) { - hotbar[integer] = null; - } else { - try { - hotbar[integer] = YAPIONDeserializer.deserialize((YAPIONObject) yapionAnyType); - } catch (Exception e) { - invalid.add(integer); - hotbar[integer] = null; - } - } - }); - invalid.forEach(i -> yapionArray.set(i, new YAPIONValue<>(null))); - if (!invalid.isEmpty()) Config.getInstance().save(p); - return hotbar; + public void load() { + ItemStack[] inv = player.getInventory().getContents(); + ItemStack[] armor = player.getInventory().getArmorContents(); + System.arraycopy(hotbar.toArray(new ItemStack[0]), 0, inv, 0, 9); + System.arraycopy(hotbar.toArray(new ItemStack[0]), 9, armor, 0, 4); + player.getInventory().setContents(inv); + player.getInventory().setArmorContents(armor); } - public YAPIONArray defaultHotbar() { - return DEFAULT_HOTBAR; + private static ItemStack newNamedStack(Material material, String displayName, String... lore) { + ItemStack stack = new ItemStack(material); + ItemMeta meta = stack.getItemMeta(); + + if(displayName != null) + meta.setDisplayName(displayName); + + if(lore.length > 0) + meta.setLore(Arrays.stream(lore).collect(Collectors.toList())); + + stack.setItemMeta(meta); + return stack; } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/HotbarCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/HotbarCommand.java index 9b52890c..96b3ff34 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/HotbarCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/HotbarCommand.java @@ -26,6 +26,8 @@ import de.steamwar.linkage.Linked; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.util.List; + @Linked public class HotbarCommand extends SWCommand { @@ -36,23 +38,23 @@ public class HotbarCommand extends SWCommand { @Register(value = "load", description = "HOTBAR_HELP_LOAD") public void loadHotbar(Player p) { - DefaultHotbar.setHotbar(p); + DefaultHotbar.get(p).load(); BauSystem.MESSAGE.send("HOTBAR_LOADED", p); } @Register(value = "save", description = "HOTBAR_HELP_SAVE") public void saveHotbar(Player p) { - DefaultHotbar.updateHotbar(p); + DefaultHotbar.get(p).update(); BauSystem.MESSAGE.send("HOTBAR_SAVED", p); } @Register(value = "show", description = "HOTBAR_HELP_SHOW") public void showHotbar(Player p) { SWInventory inv = new SWInventory(p, 18, BauSystem.MESSAGE.parse("HOTBAR_INVENTORY", p)); - ItemStack[] hotbar = DefaultHotbar.getItems(p); - for (int i = 0; i < hotbar.length; i++) { - if (hotbar[i] == null) continue; - inv.setItem(i, hotbar[i], clickType -> { + List hotbar = DefaultHotbar.get(p).getHotbar(); + for (int i = 0; i < hotbar.size(); i++) { + if (hotbar.get(i) == null) continue; + inv.setItem(i, hotbar.get(i), clickType -> { }); } inv.open(); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/HotbarListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/HotbarListener.java index de00331f..1f9467d1 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/HotbarListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/hotbar/HotbarListener.java @@ -31,7 +31,7 @@ public class HotbarListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onPlayerJoin(PlayerJoinEvent event) { if (allNull(event.getPlayer().getInventory().getContents()) && allNull(event.getPlayer().getInventory().getArmorContents())) { - DefaultHotbar.setHotbar(event.getPlayer()); + DefaultHotbar.get(event.getPlayer()).load(); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFillBauGuiItem.java b/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFillBauGuiItem.java index 7e94710a..e0b33550 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFillBauGuiItem.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFillBauGuiItem.java @@ -30,7 +30,7 @@ public class InventoryFillBauGuiItem extends BauGuiItem { @Override public ItemStack getItem(Player player) { - String loreKey = Config.getInstance().get(player).getPlainValueOrDefault("inventoryfill", false) ? "OTHER_ITEMS_INVENTORY_FILL_LORE_ACTIVE" : "OTHER_ITEMS_INVENTORY_FILL_LORE_INACTIVE"; + String loreKey = Config.get(player).isInventoryFill() ? "OTHER_ITEMS_INVENTORY_FILL_LORE_ACTIVE" : "OTHER_ITEMS_INVENTORY_FILL_LORE_INACTIVE"; return new SWItem(Material.HOPPER, BauSystem.MESSAGE.parse("OTHER_ITEMS_INVENTORY_FILL_NAME", player), Collections.singletonList(BauSystem.MESSAGE.parse(loreKey, player)), false, clickType -> {}).getItemStack(); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFiller.java b/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFiller.java index f72d08f2..27902cee 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFiller.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFiller.java @@ -38,7 +38,7 @@ public class InventoryFiller implements Listener { @EventHandler public void onPlayerDropItem(PlayerDropItemEvent event) { - if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return; + if (!Config.get(event.getPlayer()).isInventoryFill()) return; if (!event.getPlayer().isSneaking()) return; Block block = event.getPlayer().getTargetBlockExact(5); if (block == null) return; @@ -59,7 +59,7 @@ public class InventoryFiller implements Listener { */ @EventHandler public void onPlayerItemHeld(PlayerItemHeldEvent event) { - if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return; + if (!Config.get(event.getPlayer()).isInventoryFill()) return; if (!event.getPlayer().isSneaking()) return; ItemStack itemStack = event.getPlayer().getInventory().getItemInMainHand(); if (itemStack.getType() == Material.AIR) return; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFillerCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFillerCommand.java index 4804a9d7..965a92e4 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFillerCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/inventoryfiller/InventoryFillerCommand.java @@ -16,8 +16,8 @@ public class InventoryFillerCommand extends SWCommand { @Register(description = {"INVENTORY_FILL_HELP", "INVENTORY_FILL_INFO"}) public void toggle(Player player) { - boolean inventoryFill = Config.getInstance().get(player).getPlainValueOrDefault("inventoryfill", false); - Config.getInstance().get(player).put("inventoryfill", !inventoryFill); + boolean inventoryFill = Config.get(player).isInventoryFill(); + Config.get(player).setInventoryFill(!inventoryFill); if (!inventoryFill) { SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("INVENTORY_FILL_ENABLE", player)); BauSystem.MESSAGE.send("INVENTORY_FILL_INFO", player); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/region/RegionCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/region/RegionCommand.java index 0288fbae..ab1adee9 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/region/RegionCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/region/RegionCommand.java @@ -22,11 +22,11 @@ package de.steamwar.bausystem.features.region; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.features.util.SelectCommand; -import de.steamwar.bausystem.region.Prototype; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionType; +import de.steamwar.bausystem.worlddata.WorldData; import de.steamwar.command.PreviousArguments; import de.steamwar.command.SWCommand; import de.steamwar.command.TypeMapper; @@ -155,36 +155,6 @@ public class RegionCommand extends SWCommand { BauSystem.MESSAGE.send("REGION_REGION_TP_TEST_BLOCK", p); } - @Register(value = "changetype", description = "REGION_REGION_HELP_CHANGETYPE_INFO") - @Register("type") - public void changeTypeCommand(Player p) { - Region region = Region.getRegion(p.getLocation()); - if (checkGlobalRegion(region, p)) { - return; - } - BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_INFO", p, region.getPrototype().getDisplayName()); - } - - @Register(value = "changetype", description = "REGION_REGION_HELP_CHANGETYPE") - @Register("type") - public void changeTypeCommand(@Validator("WORLD") Player p, @Mapper("regionTypeMapper") String s) { - Region region = Region.getRegion(p.getLocation()); - if (checkGlobalRegion(region, p)) { - return; - } - Prototype prototype = Prototype.getByDisplayName(s); - if (prototype == null) { - BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_UNKNOWN", p); - } else { - if (region.setPrototype(prototype)) { - BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_CHANGE", p, s); - BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_CHANGE_UPDATE", p, BauSystem.MESSAGE.parse("REGION_REGION_CHANGETYPE_CHANGE_UPDATE_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/reset")); - } else { - BauSystem.MESSAGE.send("REGION_REGION_CHANGETYPE_INVALID", p); - } - } - } - @Register(value = "changeskin", description = "REGION_REGION_HELP_CHANGESKIN_INFO") @Register("skin") public void changeSkinCommand(Player p) { @@ -193,7 +163,7 @@ public class RegionCommand extends SWCommand { return; } BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_INFO", p, region.getSkin()); - String creator = region.getPrototype().getSkinMap().get(region.getSkin()).getCreator(); + String creator = region.getPrototype().getSkins().get(region.getSkin()).getCreator(); if (creator != null) { BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_INFO_CREATOR", p, creator); } @@ -206,10 +176,11 @@ public class RegionCommand extends SWCommand { if (checkGlobalRegion(region, p)) { return; } - if (!region.getPrototype().getSkinMap().containsKey(s)) { + if (!region.getPrototype().getSkins().containsKey(s)) { BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_UNKNOWN", p); } else { if (region.setSkin(s)) { + WorldData.getInstance().save(); BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_CHANGE", p, s); BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_CHANGE_UPDATE", p, BauSystem.MESSAGE.parse("REGION_REGION_CHANGESKIN_CHANGE_UPDATE_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/reset")); } else { @@ -218,26 +189,6 @@ public class RegionCommand extends SWCommand { } } - @Mapper(value = "regionTypeMapper", local = true) - private TypeMapper regionTypeMapper() { - return new TypeMapper() { - @Override - public List tabCompletes(CommandSender commandSender, PreviousArguments previousArguments, String s) { - Player p = (Player) commandSender; - Region region = Region.getRegion(p.getLocation()); - if (region.isGlobal()) { - return Collections.emptyList(); - } - return region.getPrototypes().stream().map(Prototype::getByName).map(Prototype::getDisplayName).map(c -> c.replace(' ', '_')).collect(Collectors.toList()); - } - - @Override - public String map(CommandSender commandSender, PreviousArguments previousArguments, String s) { - return s.replace('_', ' '); - } - }; - } - @Mapper(value = "skinTypeMapper", local = true) private TypeMapper skinTypeMapper() { return new TypeMapper() { @@ -248,7 +199,7 @@ public class RegionCommand extends SWCommand { if (region.isGlobal()) { return Collections.emptyList(); } - return region.getPrototype().getSkinMap().keySet().stream().map(c -> c.replace(' ', '_')).collect(Collectors.toList()); + return region.getPrototype().getSkins().keySet().stream().map(c -> c.replace(' ', '_')).collect(Collectors.toList()); } @Override 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..a4331b84 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorStorage.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorStorage.java @@ -21,24 +21,18 @@ package de.steamwar.bausystem.features.simulator; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.SWUtils; -import de.steamwar.bausystem.features.simulator.tnt.TNTElement; import de.steamwar.bausystem.utils.ItemUtils; import de.steamwar.inventory.SWItem; import de.steamwar.linkage.Linked; import de.steamwar.linkage.api.Disable; import de.steamwar.linkage.api.Enable; -import de.steamwar.sql.SteamwarUser; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.NamespacedKey; -import org.bukkit.World; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import yapion.exceptions.YAPIONException; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONObject; -import yapion.parser.YAPIONParser; import java.io.File; import java.io.IOException; @@ -46,17 +40,15 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; @Linked public class SimulatorStorage implements Enable, Disable { - public static final World WORLD = Bukkit.getWorlds().get(0); private static final File simulatorsDir = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "simulators"); - private static NamespacedKey simulatorSelection = SWUtils.getNamespaceKey("simulator_selection"); + private static final NamespacedKey simulatorSelection = SWUtils.getNamespaceKey("simulator_selection"); - private static Map tntSimulators = new HashMap<>(); + private static final Map tntSimulators = new HashMap<>(); public static void createNewSimulator(String name) { tntSimulators.put(name, new TNTSimulator()); @@ -107,11 +99,11 @@ public class SimulatorStorage implements Enable, Disable { if (tntSimulator != null) { tntSimulator.close(); } - new File(simulatorsDir, name + ".simulator").delete(); + new File(simulatorsDir, name + ".yml").delete(); } public static void copySimulator(TNTSimulator tntSimulator, String name) { - tntSimulators.put(name, new TNTSimulator(tntSimulator.toYAPION())); + tntSimulators.put(name, new TNTSimulator(tntSimulator.toYaml())); } public static void removeSimulator(ItemStack itemStack) { @@ -139,48 +131,11 @@ public class SimulatorStorage implements Enable, Disable { if (files == null) return; for (File file : files) { - YAPIONObject yapionObject; - try { - yapionObject = YAPIONParser.parse(file); - } catch (YAPIONException | IOException e) { + String name = file.getName(); + if(!name.endsWith(".yml")) continue; - } - if (file.getName().endsWith(".yapion")) { - String name = file.getName().substring(0, file.getName().length() - 7); - try { - SteamwarUser steamwarUser = SteamwarUser.get(Integer.parseInt(name)); - convert(file, steamwarUser); - } catch (Exception e) { - file.delete(); - } - } else { - String name = file.getName().substring(0, file.getName().length() - ".simulator".length()); - tntSimulators.put(name, new TNTSimulator(yapionObject)); - } - } - } - private static void convert(File file, SteamwarUser steamwarUser) { - YAPIONObject yapionObject; - try { - yapionObject = YAPIONParser.parse(file); - } catch (YAPIONException | IOException e) { - return; - } - try { - file.delete(); - } catch (Exception e) { - e.printStackTrace(); - } - for (String s : yapionObject.getKeys()) { - String newName = steamwarUser.getUserName() + (s.isEmpty() ? "" : "_" + s); - YAPIONArray content = yapionObject.getArray(s); - if (content.isEmpty()) continue; - TNTSimulator tntSimulator = new TNTSimulator(); - for (YAPIONObject element : content.streamObject().collect(Collectors.toList())) { - tntSimulator.getTntElementList().add(new TNTElement(element, null, tntSimulator.getEntityServer())); - } - tntSimulators.put(newName, tntSimulator); + tntSimulators.put(name.substring(0, name.length() - 4), new TNTSimulator(YamlConfiguration.loadConfiguration(file))); } } @@ -188,9 +143,9 @@ public class SimulatorStorage implements Enable, Disable { public void disable() { for (Map.Entry entry : tntSimulators.entrySet()) { try { - entry.getValue().toYAPION().toFile(new File(simulatorsDir, entry.getKey() + ".simulator")); - } catch (Exception e) { - e.printStackTrace(); + entry.getValue().toYaml().save(new File(simulatorsDir, entry.getKey() + ".yml")); + } catch (IOException e) { + throw new SecurityException(e); } } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java index d1a71b95..c4dcaa2e 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java @@ -20,6 +20,8 @@ package de.steamwar.bausystem.features.simulator; import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.features.simulator.gui.TNTElementGUI; import de.steamwar.bausystem.features.simulator.gui.TNTSimulatorGui; @@ -36,10 +38,8 @@ import de.steamwar.entity.REntityServer; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONObject; -import yapion.hierarchy.types.YAPIONType; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @@ -47,40 +47,29 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @Getter -public class TNTSimulator { +public class TNTSimulator extends YamlConfig { - private Set players = new HashSet<>(); - private REntityServer entityServer = new REntityServer(); + static { + register(TNTGroup.class); + register(TNTElement.class); + } + private final Set players = new HashSet<>(); + private final REntityServer entityServer = new REntityServer(); + + @ConfigField private Material material = Material.TNT; - private List tntElementList = new ArrayList<>(); + @ConfigField + private final List tntElementList = new ArrayList<>(); - public TNTSimulator() { + public TNTSimulator() {} - } + public TNTSimulator(ConfigurationSection section) { + super(section); - public TNTSimulator(YAPIONObject yapionObject) { - material = Material.valueOf(yapionObject.getStringOrDefault("material", Material.TNT.name())); - YAPIONArray yapionArray = yapionObject.getArrayOrDefault("tntElements", new YAPIONArray()); - for (YAPIONObject element : yapionArray.streamObject().collect(Collectors.toList())) { - if (element.containsKey("elements", YAPIONType.ARRAY)) { - tntElementList.add(new TNTGroup(element, entityServer)); - } else { - tntElementList.add(new TNTElement(element, null, entityServer)); - } - } - } - - public YAPIONObject toYAPION() { - YAPIONObject yapionObject = new YAPIONObject(); - yapionObject.add("material", material.name()); - YAPIONArray yapionArray = new YAPIONArray(); - for (SimulatorElement element : tntElementList) { - yapionArray.add(element.toYAPION()); - } - yapionObject.add("tntElements", yapionArray); - return yapionObject; + for(SimulatorElement element : tntElementList) + element.init(entityServer, null); } public void close() { @@ -218,7 +207,7 @@ public class TNTSimulator { AtomicBoolean needsAutoTrace = new AtomicBoolean(); players.forEach(player -> { - boolean simulatorAutoTrace = Config.getInstance().get(player).getPlainValueOrDefault("simulatorAutoTrace", false); + boolean simulatorAutoTrace = Config.get(player).isSimulatorAutoTrace(); if (simulatorAutoTrace) { needsAutoTrace.set(true); player.performCommand("trace show"); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/gui/TNTSimulatorGui.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/gui/TNTSimulatorGui.java index e813580a..89122193 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/gui/TNTSimulatorGui.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/gui/TNTSimulatorGui.java @@ -119,9 +119,9 @@ public class TNTSimulatorGui { })); } - boolean simulatorAutoTrace = Config.getInstance().get(player).getPlainValueOrDefault("simulatorAutoTrace", false); + boolean simulatorAutoTrace = Config.get(player).isSimulatorAutoTrace(); inv.setItem(47, new SWItem(simulatorAutoTrace ? Material.CHAIN_COMMAND_BLOCK : Material.COMMAND_BLOCK, BauSystem.MESSAGE.parse("SIMULATOR_GUI_AUTO_TRACE", player, simulatorAutoTrace), clickType -> { - Config.getInstance().get(player).put("simulatorAutoTrace", !simulatorAutoTrace); + Config.get(player).setSimulatorAutoTrace(!simulatorAutoTrace); open(player, currentTntSimulator, currentTntGroup, simulatorElements, back); })); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/SimulatorElement.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/SimulatorElement.java index 181e3389..34ce77f3 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/SimulatorElement.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/SimulatorElement.java @@ -22,21 +22,23 @@ package de.steamwar.bausystem.features.simulator.tnt; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.shared.Pair; import de.steamwar.entity.REntity; +import de.steamwar.entity.REntityServer; import de.steamwar.inventory.SWItem; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import yapion.hierarchy.types.YAPIONObject; import java.util.*; -public interface SimulatorElement { +public interface SimulatorElement extends ConfigurationSerializable { Map> observer = new HashMap<>(); Map closeObserver = new HashMap<>(); - YAPIONObject toYAPION(); + void init(REntityServer entityServer, TNTGroup tntGroup); + List getEntities(); void getEntity(List elements, REntity entity); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/TNTElement.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/TNTElement.java index 666c3359..f7aaae0c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/TNTElement.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/TNTElement.java @@ -20,8 +20,9 @@ package de.steamwar.bausystem.features.simulator.tnt; import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import de.steamwar.bausystem.features.simulator.OrderUtils; -import de.steamwar.bausystem.features.simulator.SimulatorStorage; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; @@ -41,81 +42,62 @@ import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.util.Vector; -import yapion.hierarchy.types.YAPIONObject; import java.util.*; @Getter -public class TNTElement implements SimulatorElement { +public class TNTElement extends YamlConfig implements SimulatorElement { private static final World WORLD = Bukkit.getWorlds().get(0); - private final REntityServer entityServer; + private REntityServer entityServer; private RFallingBlockEntity entity; - TNTGroup tntGroup = null; + @Setter + private TNTGroup tntGroup; - private final Vector position; + @ConfigField + private Vector position; + @ConfigField private int fuseTicks = 80; + @ConfigField private int count = 1; + @ConfigField private int tickOffset = 0; @Setter + @ConfigField private boolean xVelocity = false; @Setter + @ConfigField private boolean yVelocity = false; @Setter + @ConfigField private boolean zVelocity = false; + @ConfigField private Material order = Material.REPEATER; + @ConfigField private Material material = Material.TNT; + @ConfigField private boolean disabled = false; public TNTElement(Vector position, TNTGroup tntGroup, REntityServer entityServer) { - this.entityServer = entityServer; - this.tntGroup = tntGroup; this.position = position; - initEntity(); + init(entityServer, tntGroup); } - public TNTElement(YAPIONObject yapionObject, TNTGroup tntGroup, REntityServer entityServer) { - this.entityServer = entityServer; - this.tntGroup = tntGroup; - this.position = new Vector(yapionObject.getDoubleOrDefault("x", yapionObject.getDoubleOrDefault("positionX", 0)), yapionObject.getDoubleOrDefault("y", yapionObject.getDoubleOrDefault("positionY", 0)), yapionObject.getDoubleOrDefault("z", yapionObject.getDoubleOrDefault("positionZ", 0))); - this.disabled = yapionObject.getBooleanOrDefault("disabled", false); - this.fuseTicks = yapionObject.getIntOrDefault("fuseTicks", 80); - this.count = yapionObject.getIntOrDefault("count", 1); - this.tickOffset = yapionObject.getIntOrDefault("tickOffset", 0); - this.xVelocity = yapionObject.getBooleanOrDefault("xVelocity", false); - this.yVelocity = yapionObject.getBooleanOrDefault("yVelocity", false); - this.zVelocity = yapionObject.getBooleanOrDefault("zVelocity", false); - this.order = Material.valueOf(yapionObject.getStringOrDefault("order", yapionObject.getBooleanOrDefault("comparator", false) ? Material.COMPARATOR.name() : Material.REPEATER.name())); - this.material = Material.valueOf(yapionObject.getStringOrDefault("material", Material.TNT.name())); - initEntity(); - } - - private void initEntity() { - this.entity = new RFallingBlockEntity(entityServer, getPosition().toLocation(WORLD), Material.TNT); - this.entity.setNoGravity(true); - _updatePosition(); + public TNTElement(Map map) { + super(map); } @Override - public YAPIONObject toYAPION() { - YAPIONObject yapionObject = new YAPIONObject(); - yapionObject.add("x", position.getX()); - yapionObject.add("y", position.getY()); - yapionObject.add("z", position.getZ()); - yapionObject.add("fuseTicks", fuseTicks); - yapionObject.add("count", count); - yapionObject.add("tickOffset", tickOffset); - yapionObject.add("xVelocity", xVelocity); - yapionObject.add("yVelocity", yVelocity); - yapionObject.add("zVelocity", zVelocity); - yapionObject.add("order", order.name()); - yapionObject.add("material", material.name()); - yapionObject.add("disabled", disabled); - return yapionObject; + public void init(REntityServer entityServer, TNTGroup tntGroup) { + this.entityServer = entityServer; + this.tntGroup = tntGroup; + this.entity = new RFallingBlockEntity(entityServer, getPosition().toLocation(WORLD), Material.TNT); + this.entity.setNoGravity(true); + _updatePosition(); } @Override @@ -191,7 +173,7 @@ public class TNTElement implements SimulatorElement { @Override public boolean locations(Map>>> result, Region region, Location radius) { if (disabled) return false; - Location location = getPosition().toLocation(SimulatorStorage.WORLD); + Location location = getPosition().toLocation(WORLD); if (region.isGlobal() && location.distanceSquared(radius) > 10000) { return false; } @@ -199,14 +181,14 @@ public class TNTElement implements SimulatorElement { return false; } Region thisRegion = Region.getRegion(location); - if (thisRegion.getFlagStorage().get(Flag.FREEZE) == FreezeMode.ACTIVE) { + if (thisRegion.get(Flag.FREEZE) == FreezeMode.ACTIVE) { return true; } result.computeIfAbsent(getTickOffset(), ignore -> new HashMap<>()) .computeIfAbsent(OrderUtils.order(order), ignore -> new HashSet<>()) .add(new Pair<>(() -> { - SimulatorStorage.WORLD.spawn(location, TNTPrimed.class, tntPrimed -> { + WORLD.spawn(location, TNTPrimed.class, tntPrimed -> { tntPrimed.setFuseTicks(fuseTicks); if (!xVelocity) tntPrimed.setVelocity(tntPrimed.getVelocity().setX(0)); if (!yVelocity) tntPrimed.setVelocity(tntPrimed.getVelocity().setY(0)); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/TNTGroup.java b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/TNTGroup.java index f3327578..5595db5d 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/TNTGroup.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/simulator/tnt/TNTGroup.java @@ -20,6 +20,8 @@ package de.steamwar.bausystem.features.simulator.tnt; import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.shared.Pair; import de.steamwar.entity.REntity; @@ -30,8 +32,6 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONObject; import java.util.ArrayList; import java.util.List; @@ -40,50 +40,36 @@ import java.util.Set; import java.util.stream.Collectors; @Getter -public class TNTGroup implements SimulatorElement { +public class TNTGroup extends YamlConfig implements SimulatorElement { - private final Vector position; + @ConfigField + private Vector position; + @ConfigField private int tickOffset = 0; + @ConfigField private Material material = Material.BARREL; + @ConfigField private boolean disabled = false; - private List elements = new ArrayList<>(); + @ConfigField + private final List elements = new ArrayList<>(); public TNTGroup(Vector position) { this.position = position; } - public TNTGroup(YAPIONObject yapionObject, REntityServer entityServer) { - this.position = new Vector(yapionObject.getDoubleOrDefault("x", 0), yapionObject.getDoubleOrDefault("y", 0), yapionObject.getDoubleOrDefault("z", 0)); - this.tickOffset = yapionObject.getIntOrDefault("tickOffset", 0); - this.material = Material.getMaterial(yapionObject.getStringOrDefault("material", "BARREL")); - this.disabled = yapionObject.getBooleanOrDefault("disabled", false); - YAPIONArray elements = yapionObject.getArrayOrDefault("elements", new YAPIONArray()); - for (YAPIONObject element : elements.streamObject().collect(Collectors.toList())) { - TNTElement tntElement = new TNTElement(element, this, entityServer); - this.elements.add(tntElement); - tntElement._updatePosition(); - } + public TNTGroup(Map map) { + super(map); } @Override - public YAPIONObject toYAPION() { - YAPIONObject yapionObject = new YAPIONObject(); - yapionObject.add("x", position.getX()); - yapionObject.add("y", position.getY()); - yapionObject.add("z", position.getZ()); - yapionObject.add("tickOffset", tickOffset); - yapionObject.add("material", material.name()); - yapionObject.add("disabled", disabled); - YAPIONArray yapionArray = new YAPIONArray(); - for (TNTElement element : elements) { - yapionArray.add(element.toYAPION()); + public void init(REntityServer entityServer, TNTGroup tntGroup) { + for(TNTElement element : elements) { + element.init(entityServer, this); } - yapionObject.add("elements", yapionArray); - return yapionObject; } public void add(TNTElement tntElement) { - tntElement.tntGroup = this; + tntElement.setTntGroup(this); elements.add(tntElement); } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/Laufbau.java b/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/Laufbau.java index a2506042..993c5cac 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/Laufbau.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/Laufbau.java @@ -59,7 +59,7 @@ public class Laufbau { editSession = WorldEditUtils.getEditSession(player); elements = BlockBoundingBox.elements.stream().filter(blockBoundingBox -> { - return !LaufbauUtils.isDeactivated(player, blockBoundingBox); + return !LaufbauUtils.get(player).isDeactivated(blockBoundingBox); }).collect(Collectors.toList()); if (preferingBlastResistance) { elements.sort((o1, o2) -> { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/LaufbauSettings.java b/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/LaufbauSettings.java index c52f9a1d..43faaba3 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/LaufbauSettings.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/LaufbauSettings.java @@ -55,7 +55,7 @@ public class LaufbauSettings { } SWListInv, List>> inv = new SWListInv<>(p, BauSystem.MESSAGE.parse("LAUFBAU_SETTINGS_GUI_NAME", p), false, list, (clickType, entry) -> { if (entry.getValue().size() == 1) { - LaufbauUtils.toggle(p, entry.getValue().get(0)); + LaufbauUtils.get(p).toggle(entry.getValue().get(0)); open(); return; } @@ -80,13 +80,13 @@ public class LaufbauSettings { lore = itemMeta.getLore(); } lore.add(""); - lore.add(BauSystem.MESSAGE.parse(LaufbauUtils.isDeactivated(p, bb) ? "LAUFBAU_SETTINGS_INACTIVE" : "LAUFBAU_SETTINGS_ACTIVE", p)); + lore.add(BauSystem.MESSAGE.parse(LaufbauUtils.get(p).isDeactivated(bb) ? "LAUFBAU_SETTINGS_INACTIVE" : "LAUFBAU_SETTINGS_ACTIVE", p)); itemMeta.setLore(lore); swItem.setItemMeta(itemMeta); list.add(new SWListInv.SWListEntry<>(swItem, bb)); } SWListInv inv = new SWListInv<>(p, BauSystem.MESSAGE.parse("LAUFBAU_SETTINGS_GUI_NAME", p), false, list, (clickType, blockBoundingBox) -> { - LaufbauUtils.toggle(p, blockBoundingBox); + LaufbauUtils.get(p).toggle(blockBoundingBox); open(key); }); inv.setItem(49, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("LAUFBAU_SETTINGS_GUI_BACK", p), clickType -> { @@ -105,14 +105,14 @@ public class LaufbauSettings { lore = itemMeta.getLore(); } lore.add(""); - lore.add(BauSystem.MESSAGE.parse(LaufbauUtils.isDeactivated(p, bb) ? "LAUFBAU_SETTINGS_INACTIVE" : "LAUFBAU_SETTINGS_ACTIVE", p)); + lore.add(BauSystem.MESSAGE.parse(LaufbauUtils.get(p).isDeactivated(bb) ? "LAUFBAU_SETTINGS_INACTIVE" : "LAUFBAU_SETTINGS_ACTIVE", p)); lore.add(""); lore.add(BauSystem.MESSAGE.parse("LAUFBAU_SETTINGS_TOGGLE", p)); itemMeta.setLore(lore); swItem.setItemMeta(itemMeta); return swItem; } else { - long count = blockBoundingBoxes.stream().filter(bb -> LaufbauUtils.isDeactivated(p, bb)).count(); + long count = blockBoundingBoxes.stream().filter(bb -> LaufbauUtils.get(p).isDeactivated(bb)).count(); if (count == 0) { return new SWItem(material, BauSystem.MESSAGE.parse(group, p), Arrays.asList("", BauSystem.MESSAGE.parse("LAUFBAU_SETTINGS_ACTIVE", p), "", BauSystem.MESSAGE.parse("LAUFBAU_SETTINGS_ADVANCED", p), BauSystem.MESSAGE.parse("LAUFBAU_SETTINGS_TOGGLE", p)), false, clickType -> {}); } @@ -124,16 +124,16 @@ public class LaufbauSettings { } public void toggle(List blockBoundingBoxes) { - long count = blockBoundingBoxes.stream().filter(bb -> LaufbauUtils.isDeactivated(p, bb)).count(); + long count = blockBoundingBoxes.stream().filter(bb -> LaufbauUtils.get(p).isDeactivated(bb)).count(); if (count != blockBoundingBoxes.size()) { blockBoundingBoxes.forEach(bb -> { - if (!LaufbauUtils.isDeactivated(p, bb)) { - LaufbauUtils.toggle(p, bb); + if (!LaufbauUtils.get(p).isDeactivated(bb)) { + LaufbauUtils.get(p).toggle(bb); } }); } else { blockBoundingBoxes.forEach(bb -> { - LaufbauUtils.toggle(p, bb); + LaufbauUtils.get(p).toggle(bb); }); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/LaufbauUtils.java b/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/LaufbauUtils.java index 9a9fb24a..25a84ce2 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/LaufbauUtils.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/slaves/laufbau/LaufbauUtils.java @@ -20,63 +20,28 @@ package de.steamwar.bausystem.features.slaves.laufbau; import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import de.steamwar.inventory.SWItem; import de.steamwar.linkage.Linked; import de.steamwar.sql.UserConfig; -import lombok.Cleanup; import lombok.SneakyThrows; import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.meta.ItemMeta; -import yapion.hierarchy.output.StreamOutput; -import yapion.hierarchy.types.YAPIONObject; -import yapion.parser.YAPIONParser; -import yapion.parser.options.StreamOptions; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.util.*; import java.util.stream.Collectors; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; -@Linked -public class LaufbauUtils implements Listener { +public class LaufbauUtils extends YamlConfig { - private static Map yapionObjectMap = new HashMap<>(); - - @EventHandler - @SneakyThrows - public void onPlayerJoin(PlayerJoinEvent event) { - String config = UserConfig.getConfig(event.getPlayer().getUniqueId(), "bausystem-laufbau"); - if (config == null) { - return; - } - byte[] bytes = Base64.getDecoder().decode(config); - @Cleanup GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(bytes)); - YAPIONObject yapionObject = new YAPIONParser(gzipInputStream, new StreamOptions().stopOnStreamEnd(true)).parse().result(); - yapionObjectMap.put(event.getPlayer(), yapionObject); - } - - @EventHandler - @SneakyThrows - public void onPlayerQuit(PlayerQuitEvent event) { - YAPIONObject yapionObject = yapionObjectMap.get(event.getPlayer()); - if (yapionObject == null) { - return; - } - if (yapionObject.isEmpty()) { - UserConfig.removePlayerConfig(event.getPlayer().getUniqueId(), "bausystem-laufbau"); - return; - } - @Cleanup ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - @Cleanup GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream); - yapionObject.toYAPION(new StreamOutput(gzipOutputStream)).close(); - UserConfig.updatePlayerConfig(event.getPlayer().getUniqueId(), "bausystem-laufbau", Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray())); + private static final Map utilsMap = new HashMap<>(); + public static LaufbauUtils get(Player p) { + return utilsMap.computeIfAbsent(p, player -> new LaufbauUtils(fromUserConfig(player.getUniqueId(), "bausystem-laufbau"))); } public static Cuboid pixelCuboid(double pixelX, double pixelY, double pixelZ, double pixelDX, double pixelDY, double pixelDZ) { @@ -119,34 +84,42 @@ public class LaufbauUtils implements Listener { return name + "[" + String.join(",", lore) + "]"; } - @SneakyThrows - public static boolean isDeactivated(Player p, BlockBoundingBox bb) { - if (bb.getSwItem() == null) { - return false; - } - String identifier = identifier(bb); - YAPIONObject yapionObject = yapionObjectMap.get(p); - if (yapionObject == null) { - return false; - } - return yapionObject.containsKey(identifier); + @ConfigField + private final List deactivated = new ArrayList<>(); + + public LaufbauUtils(ConfigurationSection config) { + super(config); } @SneakyThrows - public static void toggle(Player p, BlockBoundingBox bb) { + public boolean isDeactivated(BlockBoundingBox bb) { if (bb.getSwItem() == null) { + return false; + } + return deactivated.contains(identifier(bb)); + } + + @SneakyThrows + public void toggle(BlockBoundingBox bb) { + if (bb.getSwItem() == null) return; - } + String identifier = identifier(bb); - YAPIONObject yapionObject = yapionObjectMap.get(p); - if (yapionObject == null) { - yapionObject = new YAPIONObject(); - yapionObjectMap.put(p, yapionObject); - } - if (yapionObject.containsKey(identifier)) { - yapionObject.remove(identifier); - } else { - yapionObject.put(identifier, new YAPIONObject()); + if(deactivated.remove(identifier)) + return; + deactivated.add(identifier); + } + + @Linked + public static class LaufbauUtilListener implements Listener { + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + LaufbauUtils util = utilsMap.remove(event.getPlayer()); + if(util == null) + return; + + UserConfig.updatePlayerConfig(event.getPlayer().getUniqueId(), "bausystem-laufbau", util.toYaml().saveToString()); } } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/smartplace/SmartPlaceCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/smartplace/SmartPlaceCommand.java index 526e59e6..7a4d2e56 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/smartplace/SmartPlaceCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/smartplace/SmartPlaceCommand.java @@ -35,8 +35,8 @@ public class SmartPlaceCommand extends SWCommand { @Register(description = {"SMART_PLACE_HELP", "SMART_PLACE_INFO"}) public void genericToggle(Player p) { - boolean smartPlace = Config.getInstance().get(p).getPlainValueOrDefault("smartPlace", false); - Config.getInstance().get(p).put("smartPlace", !smartPlace); + boolean smartPlace = Config.get(p).isSmartPlace(); + Config.get(p).setSmartPlace(!smartPlace); if (!smartPlace) { SWUtils.sendToActionbar(p, BauSystem.MESSAGE.parse("SMART_PLACE_ENABLE", p)); BauSystem.MESSAGE.send("SMART_PLACE_INFO", p); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/smartplace/SmartPlaceListener.java b/BauSystem_Main/src/de/steamwar/bausystem/features/smartplace/SmartPlaceListener.java index a5ac0456..fc8339a7 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/smartplace/SmartPlaceListener.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/smartplace/SmartPlaceListener.java @@ -46,7 +46,7 @@ public class SmartPlaceListener implements Listener { @EventHandler public void onBlockPlace(BlockPlaceEvent event) { - if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("smartPlace", false)) return; + if (!Config.get(event.getPlayer()).isSmartPlace()) return; if (smartPlaceBehaviours.isEmpty()) LinkageUtils.linkSmartPlace(); SmartPlaceBehaviour.SmartPlaceResult smartPlaceResult = SmartPlaceBehaviour.SmartPlaceResult.IGNORED; for (SmartPlaceBehaviour smartPlaceBehaviour : smartPlaceBehaviours) { @@ -61,7 +61,7 @@ public class SmartPlaceListener implements Listener { @EventHandler public void onPlayerInteract(PlayerInteractEvent event) { - if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("smartPlace", false)) return; + if (!Config.get(event.getPlayer()).isSmartPlace()) return; if (smartPlaceBehaviours.isEmpty()) LinkageUtils.linkSmartPlace(); if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; if (event.getPlayer().getGameMode() == GameMode.SPECTATOR) return; diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/team/SkinCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/team/SkinCommand.java index ca88625f..f83a74c6 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/team/SkinCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/team/SkinCommand.java @@ -34,14 +34,9 @@ import net.md_5.bungee.api.chat.ClickEvent; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import yapion.hierarchy.output.StringOutput; -import yapion.hierarchy.types.YAPIONObject; import java.io.File; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; @Linked public class SkinCommand extends SWCommand { @@ -98,17 +93,15 @@ public class SkinCommand extends SWCommand { Region.copy(region.getMinPointTestblock(), region.getMaxPointTestblock(), testblockFile); } - YAPIONObject yapionObject = new YAPIONObject(); - yapionObject.add("name", name); + Prototype.Skin skin = new Prototype.Skin(Collections.emptyMap()); if (!creator.equals("public")) { - yapionObject.add("creator", creator); + skin.setCreator(creator); } - yapionObject.add("type", typeKuerzel); - yapionObject.add("schematic", arenaFile.getPath()); + skin.setSchematic(arenaFile.getPath()); if (testblockFile != null) { - yapionObject.add("testblockSchematic", testblockFile.getPath()); + skin.setTestblockSchematic(testblockFile.getPath()); } - BauSystem.MESSAGE.send("SKIN_MESSAGE", p, BauSystem.MESSAGE.parse("SKIN_MESSAGE_HOVER", p), new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, yapionObject.toYAPION(new StringOutput(true)).getResult())); + BauSystem.MESSAGE.send("SKIN_MESSAGE", p, BauSystem.MESSAGE.parse("SKIN_MESSAGE_HOVER", p), new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, skin.toYaml().saveToString())); } @Register("boundary") diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/testblock/blockcounter/BlockCounter.java b/BauSystem_Main/src/de/steamwar/bausystem/features/testblock/blockcounter/BlockCounter.java index cf34f6f1..9875367c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/testblock/blockcounter/BlockCounter.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/testblock/blockcounter/BlockCounter.java @@ -34,18 +34,15 @@ public class BlockCounter { public final Map blockCountMap = new HashMap<>(); public boolean isActive(final Player p) { - if (!Config.getInstance().get(p).containsKey("blockCounter")) { - return false; - } - return Config.getInstance().get(p).getPlainValue("blockCounter"); + return Config.get(p).isBlockCounter(); } public void enable(final Player p) { - Config.getInstance().get(p).put("blockCounter", true); + Config.get(p).setBlockCounter(true); } public void disable(final Player p) { - Config.getInstance().get(p).put("blockCounter", false); + Config.get(p).setBlockCounter(false); } public String getMessage(Player player, int count, int tntCount, long tick, long lastTick) { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/FreezeUtils.java b/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/FreezeUtils.java index 294cffd0..c376c905 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/FreezeUtils.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/FreezeUtils.java @@ -33,9 +33,7 @@ import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; -import yapion.utils.ReflectionsUtils; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -45,7 +43,7 @@ import java.util.stream.Collectors; @UtilityClass public class FreezeUtils { - private static final Field field; + private static final Reflection.FieldAccessor field; public static final boolean freezeEnabled; private static final Reflection.MethodInvoker getWorldHandle = Reflection.getTypedMethod(Reflection.getClass("{obc}.CraftWorld"), "getHandle", null); @@ -56,8 +54,11 @@ public class FreezeUtils { private static final World world; static { - field = ReflectionsUtils.getField(Reflection.getClass("{nms.server.level}.WorldServer"), "freezed"); - if (field != null) field.setAccessible(true); + Reflection.FieldAccessor f = null; + try { + f = Reflection.getField("{nms.server.level}.WorldServer", "freezed", boolean.class); + } catch (IllegalArgumentException ignored) {} + field = f; freezeEnabled = field != null; world = Bukkit.getWorlds().get(0); } @@ -76,13 +77,9 @@ public class FreezeUtils { private void setFreeze(World world, boolean state) { if (freezeEnabled) { - try { - field.set(getWorldHandle.invoke(world), state); - cacheEntityPackets(state); - frozen = state; - } catch (IllegalAccessException e) { - // Ignored; - } + field.set(getWorldHandle.invoke(world), state); + cacheEntityPackets(state); + frozen = state; } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/util/NightVisionCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/util/NightVisionCommand.java index 0308846d..db7b1ee0 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/util/NightVisionCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/util/NightVisionCommand.java @@ -30,7 +30,6 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import yapion.hierarchy.types.YAPIONObject; @Linked public class NightVisionCommand extends SWCommand implements Listener { @@ -41,15 +40,15 @@ public class NightVisionCommand extends SWCommand implements Listener { @Register(description = "NIGHT_VISION_HELP") public void genericCommand(Player p) { - YAPIONObject yapionObject = Config.getInstance().get(p); - boolean value = !yapionObject.getBooleanOrDefault("nightvision", false); - yapionObject.put("nightvision", value); - setNightVision(p, value); + Config config = Config.get(p); + config.setNightvision(!config.isNightvision()); + config.save(); + setNightVision(p, config.isNightvision()); } @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { - setNightVision(event.getPlayer(), Config.getInstance().get(event.getPlayer()).getBooleanOrDefault("nightvision", false)); + setNightVision(event.getPlayer(), Config.get(event.getPlayer()).isNightvision()); } private void setNightVision(Player p, boolean value) { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/warp/Warp.java b/BauSystem_Main/src/de/steamwar/bausystem/features/warp/Warp.java index 6cbc6c10..33959c62 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/warp/Warp.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/warp/Warp.java @@ -19,88 +19,70 @@ package de.steamwar.bausystem.features.warp; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import de.steamwar.bausystem.worlddata.WorldData; import lombok.Getter; -import org.bukkit.*; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.SoundCategory; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerTeleportEvent; -import yapion.hierarchy.types.YAPIONObject; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; @Getter -public class Warp { - - private static Map warpMap = new HashMap<>(); - - static { - Warp worldSpawn = new Warp("WorldSpawn"); - worldSpawn.setLocation(Bukkit.getWorlds().get(0).getSpawnLocation()); - worldSpawn.setMat(Material.NETHER_STAR); - warpMap.put("WorldSpawn", worldSpawn); - } +public class Warp extends YamlConfig { + @ConfigField private String name; + @ConfigField private Location location; + @ConfigField private Material mat; - private Warp(String name) { + public Warp(String name, Location location, Material mat) { this.name = name; + this.location = location; + this.mat = mat; + + WorldData.getInstance().addWarp(this); } public Warp(String name, Player player) { this.name = name; this.location = player.getLocation(); this.mat = Material.COMPASS; - warpMap.put(name, this); + + WorldData.getInstance().addWarp(this); } - public Warp(String name, YAPIONObject object) { - this.name = name; - double x = object.getPlainValue("x"); - double y = object.getPlainValue("y"); - double z = object.getPlainValue("z"); - float yaw = object.getPlainValue("yaw"); - float pitch = object.getPlainValue("pitch"); - location = new Location(Bukkit.getWorlds().get(0), x, y, z, yaw, pitch); - mat = Material.getMaterial(object.getPlainValue("material")); - warpMap.put(name, this); - } - - public YAPIONObject output() { - YAPIONObject yapionObject = new YAPIONObject(); - yapionObject.add("x", location.getX()); - yapionObject.add("y", location.getY()); - yapionObject.add("z", location.getZ()); - yapionObject.add("yaw", location.getYaw()); - yapionObject.add("pitch", location.getPitch()); - yapionObject.add("material", mat.toString()); - return yapionObject; + public Warp(Map map) { + super(map); } public static Set getWarpNames() { - return warpMap.keySet(); + return WorldData.getInstance().getWarps().keySet(); } public static List getWarps() { - return new ArrayList<>(warpMap.values()); + return new ArrayList<>(WorldData.getInstance().getWarps().values()); } public static Warp getWarp(String name) { - return warpMap.get(name); + return WorldData.getInstance().getWarps().get(name); } public void setMat(Material mat) { this.mat = mat; } - public void setLocation(Location location) { - this.location = location; - } - public void delete() { - warpMap.remove(name); - WorldData.getWarpData().remove(name); + WorldData.getInstance().getWarps().remove(name); } public void teleport(Player player) { diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/warp/WarpCommand.java b/BauSystem_Main/src/de/steamwar/bausystem/features/warp/WarpCommand.java index cf44f51f..c7bc776e 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/warp/WarpCommand.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/warp/WarpCommand.java @@ -22,26 +22,22 @@ package de.steamwar.bausystem.features.warp; import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.utils.ListChatView; -import de.steamwar.bausystem.worlddata.WorldData; import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommandUtils; import de.steamwar.command.TypeMapper; import de.steamwar.command.TypeValidator; import de.steamwar.linkage.Linked; -import de.steamwar.linkage.api.Disable; -import de.steamwar.linkage.api.Enable; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.entity.Player; -import yapion.hierarchy.types.YAPIONObject; import java.util.ArrayList; @Linked -public class WarpCommand extends SWCommand implements Disable, Enable { +public class WarpCommand extends SWCommand { private static final String[] FORBIDDEN_NAMES = new String[]{ "add", "create", "delete", "list", "info", "gui" @@ -141,19 +137,4 @@ public class WarpCommand extends SWCommand implements Disable, Enable { player.performCommand("warp list " + String.join(" ", args)); } } - - @Override - public void enable() { - WorldData.getWarpData().forEach((name, yapionAnyType) -> { - new Warp(name, (YAPIONObject) yapionAnyType); - }); - } - - @Override - public void disable() { - YAPIONObject yapionObject = WorldData.getWarpData(); - for (Warp warp : Warp.getWarps()) { - yapionObject.add(warp.getName(), warp.output()); - } - } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/FlagStorage.java b/BauSystem_Main/src/de/steamwar/bausystem/region/FlagStorage.java index e0ee43a5..8803133f 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/FlagStorage.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/FlagStorage.java @@ -19,64 +19,45 @@ package de.steamwar.bausystem.region; +import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.tags.Tag; -import yapion.hierarchy.types.YAPIONObject; +import org.bukkit.configuration.serialization.ConfigurationSerializable; -import java.util.EnumMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.logging.Level; /** * Tags and Flags are not allowed to have overlaping names. */ -public class FlagStorage { +public class FlagStorage implements ConfigurationSerializable { - public static FlagStorage createStorage(YAPIONObject yapionObject) { - FlagStorage flagStorage = new FlagStorage(); - for (final Flag flag : Flag.getFlags()) { - try { - String s = yapionObject.getPlainValue(flag.name()); - flagStorage.set(flag, flag.getFlagValueOf(s)); - } catch (Exception e) { - flagStorage.set(flag, flag.getDefaultValue()); - } - } - for (final Tag tag : Tag.values()) { - if (yapionObject.containsKey(tag.name())) { - flagStorage.set(tag); - } - } - return flagStorage; - } - - public static YAPIONObject toYAPION(FlagStorage flagStorage) { - YAPIONObject yapionObject = new YAPIONObject(); - for (final Flag flag : Flag.getFlags()) { - if (flag.getDefaultValue() == flagStorage.flags.getOrDefault(flag, flag.getDefaultValue())) { - yapionObject.remove(flag.name()); - } else { - yapionObject.add(flag.name(), flagStorage.get(flag).getValue().name()); - } - } - for (Tag tag : Tag.values()) { - if (flagStorage.tagSet.contains(tag)) { - yapionObject.add(tag.name(), ""); - } else { - yapionObject.remove(tag.name()); - } - } - return yapionObject; - } - - protected Map> flags; - protected Set tagSet; + private final Map> flags = new EnumMap<>(Flag.class); + private final Set tags = new HashSet<>(); public FlagStorage() { - flags = new EnumMap<>(Flag.class); - tagSet = new HashSet<>(); - readKeys(); + for (final Flag flag : Flag.getFlags()) { + flags.put(flag, flag.getDefaultValue()); + } + } + + public FlagStorage(Map map) { + this(); + + for(Map.Entry entry : map.entrySet()) { + try { + Flag flag = Flag.valueOf(entry.getKey()); + flags.put(flag, flag.getFlagValueOf((String) entry.getValue())); + continue; + } catch (IllegalArgumentException ignored) {} + + try { + tags.add(Tag.valueOf(entry.getKey())); + continue; + } catch (IllegalArgumentException ignored) {} + + BauSystem.getInstance().getLogger().log(Level.INFO, "Unknown region flag ignored: " + entry.getKey()); + } } public boolean set(final Flag flagType, final Flag.Value value) { @@ -88,20 +69,22 @@ public class FlagStorage { } public boolean set(final Tag tag) { - return tagSet.add(tag); + return tags.add(tag); } public boolean remove(final Tag tag) { - return tagSet.remove(tag); + return tags.remove(tag); } public boolean is(final Tag tag) { - return tagSet.contains(tag); + return tags.contains(tag); } - private void readKeys() { - for (final Flag flag : Flag.getFlags()) { - flags.put(flag, flag.getDefaultValue()); - } + @Override + public Map serialize() { + Map result = new HashMap<>(); + flags.forEach((flag, value) -> result.put(flag.name(), value.getName())); + tags.forEach(tag -> result.put(tag.name(), null)); + return result; } } \ No newline at end of file diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/GlobalRegion.java b/BauSystem_Main/src/de/steamwar/bausystem/region/GlobalRegion.java index 83623989..cc6e5e80 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/GlobalRegion.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/GlobalRegion.java @@ -21,17 +21,18 @@ package de.steamwar.bausystem.region; import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionType; +import de.steamwar.bausystem.worlddata.WorldData; import lombok.Getter; import org.bukkit.Location; -import yapion.hierarchy.types.YAPIONObject; +import org.bukkit.configuration.ConfigurationSection; public class GlobalRegion extends Region { @Getter static GlobalRegion instance; - public GlobalRegion(FlagStorage flagStorage, YAPIONObject regionData) { - super("global", null, new YAPIONObject(), flagStorage, regionData); + public GlobalRegion(ConfigurationSection regionConfig, WorldData.RegionConfig config) { + super(regionConfig, config); instance = this; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/Point.java b/BauSystem_Main/src/de/steamwar/bausystem/region/Point.java index b6efac3a..9fbf9db3 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/Point.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/Point.java @@ -19,6 +19,8 @@ package de.steamwar.bausystem.region; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -27,15 +29,24 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; +import java.util.Map; + @Getter @ToString -@EqualsAndHashCode +@EqualsAndHashCode(callSuper = false) @AllArgsConstructor -public class Point { +public class Point extends YamlConfig { - private final int x; - private final int y; - private final int z; + @ConfigField(required = true) + private int x; + @ConfigField(required = true) + private int y; + @ConfigField(required = true) + private int z; + + public Point(Map map) { + super(map); + } public static Point fromLocation(final Location location) { return new Point(location.getBlockX(), location.getBlockY(), location.getBlockZ()); diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/Prototype.java b/BauSystem_Main/src/de/steamwar/bausystem/region/Prototype.java index f4aefc56..01a59887 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/Prototype.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/Prototype.java @@ -19,10 +19,11 @@ package de.steamwar.bausystem.region; -import lombok.AllArgsConstructor; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import lombok.Getter; -import yapion.hierarchy.types.YAPIONObject; -import yapion.hierarchy.types.YAPIONType; +import lombok.Setter; +import org.bukkit.configuration.ConfigurationSection; import java.io.File; import java.util.ArrayList; @@ -31,7 +32,12 @@ import java.util.List; import java.util.Map; @Getter -public class Prototype { +public class Prototype extends YamlConfig { + + static { + register(YamlConfig.class); + register(SubPrototype.class); + } static final Map PROTOTYPE_MAP = new HashMap<>(); @@ -47,180 +53,132 @@ public class Prototype { return new ArrayList<>(PROTOTYPE_MAP.values()); } - @AllArgsConstructor @Getter - public static class Skin { - private final String name; - private final String creator; // Nullable + @Setter + public static class Skin extends YamlConfig { + @ConfigField + private String creator; + + @ConfigField(required = true) + private String schematic; private final File schematicFile; - private final File testblockSchematicFile; // Nullable - private final File buildSchematicFile; // Nullable + + @ConfigField + private String testblockSchematic; + private final File testblockSchematicFile; + + @ConfigField + private String buildSchematic; + private final File buildSchematicFile; + + @ConfigField + private boolean disabled; + + public Skin(Map map) { + super(map); + schematicFile = new File(schematic); + testblockSchematicFile = testblockSchematic != null ? new File(testblockSchematic) : null; + buildSchematicFile = buildSchematic != null ? new File(buildSchematic) : null; + } } private final String name; - private final String displayName; - private final String defaultSkin; - private final Map skinMap = new HashMap<>(); + @ConfigField + private String displayName; + @ConfigField + private String defaultSkin; + @ConfigField(required = true) + private Map skins; - private final int sizeX; - private final int sizeY; - private final int sizeZ; + @ConfigField(required = true) + private int sizeX; + @ConfigField(required = true) + private int sizeY; + @ConfigField(required = true) + private int sizeZ; - private final int floorOffset; - private final int waterOffset; + @ConfigField + private int floorOffset; + @ConfigField + private int waterOffset; - private final SubPrototype testblock; // Nullable - private final SubPrototype build; // Nullable + @ConfigField + private SubPrototype testblock; + @ConfigField + private SubPrototype build; - private final int copyPointOffsetX; - private final int copyPointOffsetY; - private final int copyPointOffsetZ; + @ConfigField + private int copyPointOffsetX; + @ConfigField + private int copyPointOffsetY; + @ConfigField + private int copyPointOffsetZ; - public Prototype(String name, YAPIONObject yapionObject) { - this.name = name; - displayName = yapionObject.getPlainValueOrDefault("displayName", name); + public Prototype(ConfigurationSection config) { + super(config); + name = config.getName(); - sizeX = yapionObject.getPlainValue("sizeX"); - sizeY = yapionObject.getPlainValue("sizeY"); - sizeZ = yapionObject.getPlainValue("sizeZ"); + if(displayName == null) + displayName = name; + if(defaultSkin == null) + defaultSkin = displayName; - copyPointOffsetX = yapionObject.getPlainValueOrDefault("copyOffsetX", 0); - copyPointOffsetY = yapionObject.getPlainValueOrDefault("copyOffsetY", 0); - copyPointOffsetZ = yapionObject.getPlainValueOrDefault("copyOffsetZ", 0); + skins.entrySet().removeIf(entry -> entry.getValue().isDisabled()); - floorOffset = yapionObject.getPlainValueOrDefault("floorOffset", 0); - waterOffset = yapionObject.getPlainValueOrDefault("waterOffset", 0); - - if (yapionObject.containsKey("testblock", YAPIONType.OBJECT)) { - testblock = new SubPrototype(yapionObject.getObject("testblock")); - } else { - testblock = null; - } - if (yapionObject.containsKey("build", YAPIONType.OBJECT)) { - build = new SubPrototype(yapionObject.getObject("build")); - } else { - build = null; - } - - this.defaultSkin = yapionObject.getPlainValueOrDefault("defaultSkin", displayName); - if (yapionObject.containsKey("skins", YAPIONType.ARRAY)) { - yapionObject.getArray("skins").forEach(yapionAnyType -> { - YAPIONObject skinObject = (YAPIONObject) yapionAnyType; - String skinName = skinObject.getPlainValue("name"); - String skinCreator = skinObject.getPlainValueOrDefault("creator", null); - String schematicFileName = skinObject.getPlainValue("schematic"); - String testblockSchematicFileName = skinObject.getPlainValueOrDefault("testblockSchematic", null); - String buildSchematicFileName = skinObject.getPlainValueOrDefault("buildSchematic", null); - boolean disabled = skinObject.getPlainValueOrDefault("disabled", false); - if (disabled) { - return; - } - skinMap.put(skinName, new Skin(skinName, skinCreator, new File(schematicFileName), testblockSchematicFileName == null ? null : new File(testblockSchematicFileName), buildSchematicFileName == null ? null : new File(buildSchematicFileName))); - }); - } else { - String s = yapionObject.getPlainValueOrDefault("schematic", null); - File schematicFile = s == null ? null : new File(s); - File testblockSchematicFile = testblock != null ? testblock.getSchematicFile() : null; - File buildSchematicFile = build != null ? build.getSchematicFile() : null; - skinMap.put(displayName, new Skin(defaultSkin, null, schematicFile, testblockSchematicFile, buildSchematicFile)); - } - - if (PROTOTYPE_MAP.containsKey(name)) { - Region.getRegion(PROTOTYPE_MAP.remove(name)).forEach(region -> { - region._setPrototype(this); - }); - } PROTOTYPE_MAP.put(name, this); } @Getter - public static class SubPrototype { + public static class SubPrototype extends YamlConfig { - private final int offsetX; - private final int offsetY; - private final int offsetZ; + @ConfigField + private int offsetX; + @ConfigField + private int offsetY; + @ConfigField + private int offsetZ; - private final int sizeX; - private final int sizeY; - private final int sizeZ; + @ConfigField(required = true) + private int sizeX; + @ConfigField(required = true) + private int sizeY; + @ConfigField(required = true) + private int sizeZ; - private final File schematicFile; // Nullable + @ConfigField + private String schematic; + private final File schematicFile; - private final int extensionNegativeX; - private final int extensionPositiveX; - private final int extensionNegativeY; - private final int extensionPositiveY; - private final int extensionNegativeZ; - private final int extensionPositiveZ; - - private boolean extensionRegistered; + @ConfigField + private int extensionNegativeX; + @ConfigField + private int extensionPositiveX; + @ConfigField + private int extensionNegativeY; + @ConfigField + private int extensionPositiveY; + @ConfigField + private int extensionNegativeZ; + @ConfigField + private int extensionPositiveZ; + private final boolean extensionRegistered; + @ConfigField + private int copyOffsetX; + @ConfigField + private int copyOffsetY; + @ConfigField + private int copyOffsetZ; private final boolean hasCopyPoint; - private final int copyOffsetX; - private final int copyOffsetY; - private final int copyOffsetZ; - private SubPrototype(YAPIONObject yapionObject) { - offsetX = yapionObject.getPlainValueOrDefault("offsetX", 0); - offsetY = yapionObject.getPlainValueOrDefault("offsetY", 0); - offsetZ = yapionObject.getPlainValueOrDefault("offsetZ", 0); + public SubPrototype(Map map) { + super(map); - sizeX = yapionObject.getPlainValue("sizeX"); - sizeY = yapionObject.getPlainValue("sizeY"); - sizeZ = yapionObject.getPlainValue("sizeZ"); - - if (yapionObject.containsKey("schematic", String.class)) { - schematicFile = new File(yapionObject.getValue("schematic", String.class).get()); - } else { - schematicFile = null; - } - - if (yapionObject.containsKey("extensionX", Integer.class)) { - extensionNegativeX = yapionObject.getPlainValue("extensionX"); - extensionPositiveX = yapionObject.getPlainValue("extensionX"); - } else { - extensionNegativeX = yapionObject.getPlainValueOrDefault("extensionNegativeX", 0); - extensionPositiveX = yapionObject.getPlainValueOrDefault("extensionPositiveX", 0); - } - - if (yapionObject.containsKey("extensionY", Integer.class)) { - extensionNegativeY = yapionObject.getPlainValue("extensionY"); - extensionPositiveY = yapionObject.getPlainValue("extensionY"); - } else { - extensionNegativeY = yapionObject.getPlainValueOrDefault("extensionNegativeY", 0); - extensionPositiveY = yapionObject.getPlainValueOrDefault("extensionPositiveY", 0); - } - - if (yapionObject.containsKey("extensionZ", Integer.class)) { - extensionNegativeZ = yapionObject.getPlainValue("extensionZ"); - extensionPositiveZ = yapionObject.getPlainValue("extensionZ"); - } else { - extensionNegativeZ = yapionObject.getPlainValueOrDefault("extensionNegativeZ", 0); - extensionPositiveZ = yapionObject.getPlainValueOrDefault("extensionPositiveZ", 0); - } + schematicFile = schematic != null ? new File(schematic) : null; extensionRegistered = extensionNegativeX != 0 || extensionPositiveX != 0 || extensionNegativeY != 0 || extensionPositiveY != 0 || extensionNegativeZ != 0 || extensionPositiveZ != 0; - copyOffsetX = yapionObject.getPlainValueOrDefault("copyOffsetX", 0); - copyOffsetY = yapionObject.getPlainValueOrDefault("copyOffsetY", 0); - copyOffsetZ = yapionObject.getPlainValueOrDefault("copyOffsetZ", 0); - hasCopyPoint = yapionObject.containsKey("copyOffsetX") || yapionObject.containsKey("copyOffsetY") || yapionObject.containsKey("copyOffsetZ"); + hasCopyPoint = map.containsKey("copyOffsetX") || map.containsKey("copyOffsetY") || map.containsKey("copyOffsetZ"); } } - - public static Region generateRegion(String name, YAPIONObject regionConfig, YAPIONObject regionData) { - Prototype prototype; - if (regionData.containsKey("prototype", String.class)) { - prototype = PROTOTYPE_MAP.get(regionData.getPlainValue("prototype")); - } else { - prototype = PROTOTYPE_MAP.get(regionConfig.getPlainValue("prototype")); - } - FlagStorage flagStorage; - if (regionData.containsKey("flagStorage", YAPIONType.OBJECT)) { - flagStorage = FlagStorage.createStorage(regionData.getObject("flagStorage")); - } else { - flagStorage = new FlagStorage(); - } - return new Region(name, prototype, regionConfig, flagStorage, regionData); - } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java b/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java index 2d3fdc04..57e1551f 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/Region.java @@ -24,6 +24,8 @@ import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitWorld; import com.sk89q.worldedit.extent.clipboard.Clipboard; import de.steamwar.bausystem.BauSystem; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.flagvalues.ColorMode; import de.steamwar.bausystem.region.flags.flagvalues.TNTMode; @@ -32,6 +34,7 @@ import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.shared.SizedStack; import de.steamwar.bausystem.utils.FlatteningWrapper; +import de.steamwar.bausystem.worlddata.WorldData; import de.steamwar.core.Core; import de.steamwar.sql.SchematicData; import de.steamwar.sql.SchematicNode; @@ -40,9 +43,7 @@ import lombok.Getter; import lombok.NonNull; import org.bukkit.Bukkit; import org.bukkit.Location; -import yapion.hierarchy.types.YAPIONObject; -import yapion.hierarchy.types.YAPIONType; -import yapion.hierarchy.types.YAPIONValue; +import org.bukkit.configuration.ConfigurationSection; import java.io.File; import java.io.IOException; @@ -56,7 +57,7 @@ import java.util.stream.Collectors; import static de.steamwar.bausystem.region.RegionUtils.paste; @Getter -public class Region { +public class Region extends YamlConfig { @Getter private static final Map REGION_MAP = new HashMap<>(); @@ -80,13 +81,16 @@ public class Region { REGION_MAP.values().forEach(region -> region.set(flagType, value)); } - YAPIONObject regionData; + private final String name; + @ConfigField + private String prototypeName; + private final Prototype prototype; - private String name; - private Prototype prototype; - private Set prototypes; - private String skin; + @ConfigField + private String linkedRegionName; + private Region linkedRegion; + @ConfigField private Point minPoint; private Point maxPoint; @@ -108,10 +112,7 @@ public class Region { private Point copyPoint; // Nullable private Point testBlockPoint; // Nullable - private String linkedRegionName = null; // Nullable - private Region linkedRegion = null; // Nullable - - private FlagStorage flagStorage; + private final WorldData.RegionConfig config; @Getter(AccessLevel.PRIVATE) private SizedStack undoSessions; @@ -119,104 +120,62 @@ public class Region { @Getter(AccessLevel.PRIVATE) private SizedStack redoSessions; - public Region(String name, Prototype prototype, YAPIONObject regionConfig, FlagStorage flagStorage, YAPIONObject regionData) { - this.name = name; - this.regionData = regionData; - if (prototype != null) { - REGION_MAP.put(name, this); - } + public Region(ConfigurationSection regionConfig, WorldData.RegionConfig config) { + super(regionConfig); + name = regionConfig.getName(); + prototype = prototypeName != null ? Prototype.getByName(prototypeName) : null; - linkedRegionName = regionConfig.getPlainValueOrDefault("optionsLinkedWith", null); - - prototypes = new HashSet<>(); - if (regionConfig.containsKey("prototypes", YAPIONType.ARRAY)) { - regionConfig.getArray("prototypes").forEach(yapionAnyType -> { - if (yapionAnyType instanceof YAPIONValue) { - prototypes.add(((YAPIONValue) yapionAnyType).get()); - } - }); - } - if (regionConfig.containsKey("prototype")) { - prototypes.add(regionConfig.getPlainValue("prototype")); - } - - this.flagStorage = flagStorage; - Point point = null; - if (regionConfig.containsKey("minX", Integer.class) && regionConfig.containsKey("minY", Integer.class) && regionConfig.containsKey("minZ", Integer.class)) { - point = new Point(regionConfig.getPlainValue("minX"), regionConfig.getPlainValue("minY"), regionConfig.getPlainValue("minZ")); - } - if (prototype != null && prototypes.contains(prototype.getName())) { - generatePrototypeData(prototype, point); - } else if (regionConfig.containsKey("prototype")) { - generatePrototypeData(Prototype.getByName(regionConfig.getPlainValue("prototype")), point); - } - if (prototype != null) { - skin = regionData.getPlainValueOrDefault("skin", prototype.getDefaultSkin()); - if (!prototype.getSkinMap().containsKey(skin)) { - skin = prototype.getDefaultSkin(); - } - } - regionData.add("skin", skin); + this.config = config; if (!hasType(RegionType.BUILD) || !hasType(RegionType.TESTBLOCK)) { - flagStorage.set(Flag.TNT, TNTMode.DENY); + config.getFlagStorage().set(Flag.TNT, TNTMode.DENY); } - } - private void generatePrototypeData(Prototype prototype, Point point) { - if (prototype == null) { + if(prototype == null) return; + + if (!prototype.getSkins().containsKey(config.getSkin())) { + config.setSkin(prototype.getDefaultSkin()); } - this.prototype = prototype; - this.skin = prototype.getDefaultSkin(); - - this.minPoint = point; - this.maxPoint = point.add(prototype.getSizeX() - 1, prototype.getSizeY() - 1, prototype.getSizeZ() - 1); + maxPoint = minPoint.add(prototype.getSizeX() - 1, prototype.getSizeY() - 1, prototype.getSizeZ() - 1); if (prototype.getTestblock() != null) { - this.minPointTestblock = point.add(prototype.getTestblock().getOffsetX(), prototype.getTestblock().getOffsetY(), prototype.getTestblock().getOffsetZ()); - this.maxPointTestblock = this.minPointTestblock.add(prototype.getTestblock().getSizeX() - 1, prototype.getTestblock().getSizeY() - 1, prototype.getTestblock().getSizeZ() - 1); + minPointTestblock = minPoint.add(prototype.getTestblock().getOffsetX(), prototype.getTestblock().getOffsetY(), prototype.getTestblock().getOffsetZ()); + maxPointTestblock = minPointTestblock.add(prototype.getTestblock().getSizeX() - 1, prototype.getTestblock().getSizeY() - 1, prototype.getTestblock().getSizeZ() - 1); - this.minPointTestblockExtension = this.minPointTestblock.subtract(prototype.getTestblock().getExtensionNegativeX(), prototype.getTestblock().getExtensionNegativeY(), prototype.getTestblock().getExtensionNegativeZ()); - this.maxPointTestblockExtension = this.maxPointTestblock.add(prototype.getTestblock().getExtensionPositiveX(), prototype.getTestblock().getExtensionPositiveY(), prototype.getTestblock().getExtensionPositiveZ()); + minPointTestblockExtension = minPointTestblock.subtract(prototype.getTestblock().getExtensionNegativeX(), prototype.getTestblock().getExtensionNegativeY(), prototype.getTestblock().getExtensionNegativeZ()); + maxPointTestblockExtension = maxPointTestblock.add(prototype.getTestblock().getExtensionPositiveX(), prototype.getTestblock().getExtensionPositiveY(), prototype.getTestblock().getExtensionPositiveZ()); if (prototype.getTestblock().getCopyOffsetX() != 0 || prototype.getTestblock().getCopyOffsetY() != 0 || prototype.getTestblock().getCopyOffsetZ() != 0) { - this.testBlockPoint = this.minPointTestblock.add(prototype.getTestblock().getCopyOffsetX(), prototype.getTestblock().getCopyOffsetY(), prototype.getTestblock().getCopyOffsetZ()); + testBlockPoint = minPointTestblock.add(prototype.getTestblock().getCopyOffsetX(), prototype.getTestblock().getCopyOffsetY(), prototype.getTestblock().getCopyOffsetZ()); } else { - this.testBlockPoint = this.minPointTestblock.add(prototype.getTestblock().getSizeX() / 2, 0, -1); + testBlockPoint = minPointTestblock.add(prototype.getTestblock().getSizeX() / 2, 0, -1); } } if (prototype.getBuild() != null) { - this.minPointBuild = point.add(prototype.getBuild().getOffsetX(), prototype.getBuild().getOffsetY(), prototype.getBuild().getOffsetZ()); - this.maxPointBuild = this.minPointBuild.add(prototype.getBuild().getSizeX() - 1, prototype.getBuild().getSizeY() - 1, prototype.getBuild().getSizeZ() - 1); + minPointBuild = minPoint.add(prototype.getBuild().getOffsetX(), prototype.getBuild().getOffsetY(), prototype.getBuild().getOffsetZ()); + maxPointBuild = minPointBuild.add(prototype.getBuild().getSizeX() - 1, prototype.getBuild().getSizeY() - 1, prototype.getBuild().getSizeZ() - 1); - this.minPointBuildExtension = this.minPointBuild.subtract(prototype.getBuild().getExtensionNegativeX(), prototype.getBuild().getExtensionNegativeY(), prototype.getBuild().getExtensionNegativeZ()); - this.maxPointBuildExtension = this.maxPointBuild.add(prototype.getBuild().getExtensionPositiveX(), prototype.getBuild().getExtensionPositiveY(), prototype.getBuild().getExtensionPositiveZ()); + minPointBuildExtension = minPointBuild.subtract(prototype.getBuild().getExtensionNegativeX(), prototype.getBuild().getExtensionNegativeY(), prototype.getBuild().getExtensionNegativeZ()); + maxPointBuildExtension = maxPointBuild.add(prototype.getBuild().getExtensionPositiveX(), prototype.getBuild().getExtensionPositiveY(), prototype.getBuild().getExtensionPositiveZ()); if (!prototype.getBuild().isHasCopyPoint() && (prototype.getCopyPointOffsetX() != 0 || prototype.getCopyPointOffsetY() != 0 || prototype.getCopyPointOffsetZ() != 0)) { - this.copyPoint = minPoint.add(prototype.getCopyPointOffsetX(), prototype.getCopyPointOffsetY(), prototype.getCopyPointOffsetZ()); + copyPoint = this.minPoint.add(prototype.getCopyPointOffsetX(), prototype.getCopyPointOffsetY(), prototype.getCopyPointOffsetZ()); } else if (prototype.getBuild().getCopyOffsetX() != 0 || prototype.getBuild().getCopyOffsetY() != 0 || prototype.getBuild().getCopyOffsetZ() != 0) { - this.copyPoint = this.minPointBuild.add(prototype.getBuild().getCopyOffsetX(), prototype.getBuild().getCopyOffsetY(), prototype.getBuild().getCopyOffsetZ()); + copyPoint = this.minPointBuild.add(prototype.getBuild().getCopyOffsetX(), prototype.getBuild().getCopyOffsetY(), prototype.getBuild().getCopyOffsetZ()); } else { - this.copyPoint = this.minPointBuild.add(prototype.getBuild().getSizeX() / 2, 0, prototype.getBuild().getSizeZ()); + copyPoint = this.minPointBuild.add(prototype.getBuild().getSizeX() / 2, 0, prototype.getBuild().getSizeZ()); } } else if (prototype.getCopyPointOffsetX() != 0 || prototype.getCopyPointOffsetY() != 0 || prototype.getCopyPointOffsetZ() != 0) { - this.copyPoint = minPoint.add(prototype.getCopyPointOffsetX(), prototype.getCopyPointOffsetY(), prototype.getCopyPointOffsetZ()); + copyPoint = this.minPoint.add(prototype.getCopyPointOffsetX(), prototype.getCopyPointOffsetY(), prototype.getCopyPointOffsetZ()); } - if (prototype.getFloorOffset() != 0) { - floorLevel = minPoint.getY() + prototype.getFloorOffset(); - } else { - floorLevel = 0; - } + floorLevel = prototype.getFloorOffset() != 0 ? this.minPoint.getY() + prototype.getFloorOffset() : 0; + waterLevel = prototype.getWaterOffset() != 0 ? this.minPoint.getY() + prototype.getWaterOffset() : 0; - if (prototype.getWaterOffset() != 0) { - waterLevel = minPoint.getY() + prototype.getWaterOffset(); - } else { - waterLevel = 0; - } + REGION_MAP.put(name, this); } public boolean inRegion(Location location, RegionType regionType, RegionExtensionType regionExtensionType) { @@ -280,8 +239,12 @@ public class Region { } } + public String getSkin() { + return config.getSkin(); + } + public String getDisplayName() { - return prototype != null ? prototype.getSkinMap().get(skin).getName() : ""; + return prototype != null ? config.getSkin() : ""; } private void setLinkedRegion(Predicate regionConsumer) { @@ -312,66 +275,52 @@ public class Region { return linkedRegion; } - public boolean setPrototype(@NonNull Prototype prototype) { - if (!prototypes.contains(prototype.getName())) { - return false; - } - return _setPrototype(prototype); - } - - boolean _setPrototype(@NonNull Prototype prototype) { - generatePrototypeData(prototype, minPoint); - RegionUtils.save(this); - return true; - } - public boolean setSkin(@NonNull String skinName) { - if (!prototype.getSkinMap().containsKey(skinName)) { + if (!prototype.getSkins().containsKey(skinName)) { return false; } - this.skin = skinName; + config.setSkin(skinName); setLinkedRegion(region -> { - region.skin = skinName; + region.config.setSkin(skinName); return true; }); - regionData.add("skin", skin); return true; } public void set(Flag flagType, Flag.Value value) { - if (flagStorage.set(flagType, value)) { + if (config.getFlagStorage().set(flagType, value)) { RegionUtils.save(this); } - setLinkedRegion(region -> region.flagStorage.set(flagType, value)); + setLinkedRegion(region -> region.config.getFlagStorage().set(flagType, value)); } public void set(Tag tag) { - if (flagStorage.set(tag)) { + if (config.getFlagStorage().set(tag)) { RegionUtils.save(this); } - setLinkedRegion(region -> region.flagStorage.set(tag)); + setLinkedRegion(region -> region.config.getFlagStorage().set(tag)); } public void remove(Tag tag) { - if (flagStorage.remove(tag)) { + if (config.getFlagStorage().remove(tag)) { RegionUtils.save(this); } } public Flag.Value get(Flag flagType) { - return flagStorage.get(flagType); + return config.getFlagStorage().get(flagType); } public boolean get(Tag tagType) { - return flagStorage.is(tagType); + return config.getFlagStorage().is(tagType); } public & Flag.Value> T getPlain(Flag flagType) { - return (T) flagStorage.get(flagType).getValue(); + return (T) config.getFlagStorage().get(flagType).getValue(); } public & Flag.Value> T getPlain(Flag flagType, Class type) { - return (T) flagStorage.get(flagType).getValue(); + return (T) config.getFlagStorage().get(flagType).getValue(); } public Point getMinPoint(RegionType regionType, RegionExtensionType regionExtensionType) { @@ -404,12 +353,12 @@ public class Region { } switch (regionType) { case TESTBLOCK: - return prototype.getSkinMap().get(skin).getTestblockSchematicFile() != null; + return prototype.getSkins().get(config.getSkin()).getTestblockSchematicFile() != null; case BUILD: - return prototype.getSkinMap().get(skin).getBuildSchematicFile() != null; + return prototype.getSkins().get(config.getSkin()).getBuildSchematicFile() != null; default: case NORMAL: - return prototype.getSkinMap().get(skin).getSchematicFile() != null; + return prototype.getSkins().get(config.getSkin()).getSchematicFile() != null; } } @@ -456,13 +405,13 @@ public class Region { case BUILD: pastePoint = minPointBuild.add(prototype.getBuild().getSizeX() / 2, 0, prototype.getBuild().getSizeZ() / 2); if (schematic == null) { - tempFile = prototype.getSkinMap().get(skin).getBuildSchematicFile(); + tempFile = prototype.getSkins().get(config.getSkin()).getBuildSchematicFile(); } break; case TESTBLOCK: pastePoint = minPointTestblock.add(prototype.getTestblock().getSizeX() / 2, 0, 0); if (schematic == null) { - tempFile = prototype.getSkinMap().get(skin).getTestblockSchematicFile(); + tempFile = prototype.getSkins().get(config.getSkin()).getTestblockSchematicFile(); pastePoint = pastePoint.add(0, 0, prototype.getTestblock().getSizeZ() / 2); } else { clipboard = new SchematicData(schematic).load(); @@ -483,7 +432,7 @@ public class Region { case NORMAL: pastePoint = minPoint.add(prototype.getSizeX() / 2, 0, prototype.getSizeZ() / 2); if (schematic == null) { - tempFile = prototype.getSkinMap().get(skin).getSchematicFile(); + tempFile = prototype.getSkins().get(config.getSkin()).getSchematicFile(); } break; } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/RegionUtils.java b/BauSystem_Main/src/de/steamwar/bausystem/region/RegionUtils.java index 3f81b60a..236a5e22 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/RegionUtils.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/RegionUtils.java @@ -90,11 +90,7 @@ public class RegionUtils { } static void save(Region region) { - if (region.getPrototype() != null) { - region.regionData.add("prototype", region.getPrototype().getName()); - } - region.regionData.add("flagStorage", FlagStorage.toYAPION(region.getFlagStorage())); - WorldData.write(); + WorldData.getInstance().save(); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/loader/PrototypeLoader.java b/BauSystem_Main/src/de/steamwar/bausystem/region/loader/PrototypeLoader.java index 851cdcfd..e6457a90 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/loader/PrototypeLoader.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/loader/PrototypeLoader.java @@ -22,39 +22,19 @@ package de.steamwar.bausystem.region.loader; import de.steamwar.bausystem.region.Prototype; import lombok.experimental.UtilityClass; import org.bukkit.Bukkit; -import yapion.hierarchy.diff.DiffDelete; -import yapion.hierarchy.diff.YAPIONDiff; -import yapion.hierarchy.types.YAPIONObject; -import yapion.parser.YAPIONParser; +import org.bukkit.configuration.file.YamlConfiguration; -import java.io.BufferedInputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; @UtilityClass public class PrototypeLoader { - private YAPIONObject loaded = null; - public static final File file = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "prototypes.yapion"); + public static final File file = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "prototypes.yml"); public void load() { - YAPIONObject yapionObject = null; - try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file))) { - yapionObject = YAPIONParser.parse(bufferedInputStream); - } catch (IOException e) { - throw new SecurityException(e.getMessage(), e); - } + YamlConfiguration config = YamlConfiguration.loadConfiguration(file); - if (loaded != null && new YAPIONDiff(loaded, yapionObject).getDiffs().stream().anyMatch(DiffDelete.class::isInstance)) { - throw new SecurityException("Version was not the specified version needed."); - } - loaded = yapionObject; - - yapionObject.forEach((key, yapionAnyType) -> { - if (yapionAnyType instanceof YAPIONObject) { - new Prototype(key, (YAPIONObject) yapionAnyType); - } - }); + for(String key : config.getKeys(false)) + new Prototype(config.getConfigurationSection(key)); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/loader/RegionLoader.java b/BauSystem_Main/src/de/steamwar/bausystem/region/loader/RegionLoader.java index 7a66dbba..a425f61c 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/loader/RegionLoader.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/region/loader/RegionLoader.java @@ -19,73 +19,29 @@ package de.steamwar.bausystem.region.loader; -import de.steamwar.bausystem.region.FlagStorage; import de.steamwar.bausystem.region.GlobalRegion; -import de.steamwar.bausystem.region.Prototype; +import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.worlddata.WorldData; import lombok.experimental.UtilityClass; import org.bukkit.Bukkit; -import yapion.hierarchy.diff.DiffChange; -import yapion.hierarchy.diff.YAPIONDiff; -import yapion.hierarchy.types.YAPIONObject; -import yapion.hierarchy.types.YAPIONType; -import yapion.parser.YAPIONParser; +import org.bukkit.configuration.file.YamlConfiguration; -import java.io.BufferedInputStream; import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; @UtilityClass public class RegionLoader { - private YAPIONObject loaded = null; - public static final File file = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "regions.yapion"); + public static final File file = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "regions.yml"); public void load() { - YAPIONObject yapionObject = null; - try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file))) { - yapionObject = YAPIONParser.parse(bufferedInputStream); - } catch (IOException e) { - throw new SecurityException(e.getMessage(), e); + YamlConfiguration config = YamlConfiguration.loadConfiguration(file); + + for(String key : config.getKeys(false)) { + WorldData.RegionConfig regionConfig = WorldData.getInstance().getRegionConfig(key); + if(key.equals("global")) + new GlobalRegion(config.getConfigurationSection(key), regionConfig); + else + new Region(config.getConfigurationSection(key), regionConfig); } - - if (loaded != null && new YAPIONDiff(loaded, yapionObject).getDiffs().stream().anyMatch(diffBase -> !(diffBase instanceof DiffChange))) { - throw new SecurityException("Version was not the specified version needed."); - } - loaded = yapionObject; - - YAPIONObject optionsYapionObject = WorldData.getRegionsData(); - yapionObject.forEach((key, yapionAnyType) -> { - if (key.equals("global")) { - return; - } - if (!(yapionAnyType instanceof YAPIONObject)) { - return; - } - - YAPIONObject regionConfig = (YAPIONObject) yapionAnyType; - YAPIONObject regionData = new YAPIONObject(); - if (optionsYapionObject.containsKey(key, YAPIONType.OBJECT)) { - regionData = optionsYapionObject.getObject(key); - } else { - optionsYapionObject.add(key, regionData); - } - - Prototype.generateRegion(key, regionConfig, regionData); - }); - - YAPIONObject globalOptions = optionsYapionObject.getObject("global"); - if (globalOptions == null) { - globalOptions = new YAPIONObject(); - optionsYapionObject.add("global", globalOptions); - } - FlagStorage flagStorage; - if (globalOptions.containsKey("flagStorage", YAPIONType.OBJECT)) { - flagStorage = FlagStorage.createStorage(globalOptions.getObject("flagStorage")); - } else { - flagStorage = new FlagStorage(); - } - new GlobalRegion(flagStorage, globalOptions); } } diff --git a/BauSystem_Main/src/de/steamwar/bausystem/region/loader/Updater.java b/BauSystem_Main/src/de/steamwar/bausystem/region/loader/Updater.java deleted file mode 100644 index 5e33350a..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/region/loader/Updater.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.region.loader; - -import de.steamwar.bausystem.BauSystem; -import org.bukkit.Bukkit; - -import java.io.File; -import java.util.logging.Level; - -public class Updater { - - private long lastUpdate; - - public Updater(File file, Runnable updaterCode) { - this.lastUpdate = file.lastModified(); - Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { - if (file.lastModified() > lastUpdate + 10) { - try { - updaterCode.run(); - Bukkit.getLogger().log(Level.INFO, "Update complete of " + file.getAbsolutePath()); - } catch (Exception e) { - Bukkit.getLogger().log(Level.INFO, "Error while loading file " + file.getAbsolutePath() + " for config: " + e.getMessage(), e); - } - lastUpdate = file.lastModified(); - } - }, 20, 20); - } - -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/worlddata/SimulatorData.java b/BauSystem_Main/src/de/steamwar/bausystem/worlddata/SimulatorData.java deleted file mode 100644 index 7b3687b8..00000000 --- a/BauSystem_Main/src/de/steamwar/bausystem/worlddata/SimulatorData.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2021 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bausystem.worlddata; - -import de.steamwar.sql.SteamwarUser; -import lombok.SneakyThrows; -import lombok.experimental.UtilityClass; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import yapion.hierarchy.output.FileOutput; -import yapion.hierarchy.types.YAPIONArray; -import yapion.hierarchy.types.YAPIONObject; -import yapion.parser.InputStreamCharsets; -import yapion.parser.YAPIONParser; -import yapion.parser.options.FileOptions; - -import java.io.File; -import java.util.List; - -@UtilityClass -public class SimulatorData { - - private final File simulatorsDir = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "simulators"); - - static { - simulatorsDir.mkdirs(); - } - - @SneakyThrows - public YAPIONObject getSimulator(Player player) { - File file = getFile(player); - if (!file.exists()) { - return new YAPIONObject(); - } - return YAPIONParser.parse(file, new FileOptions().charset(InputStreamCharsets.UTF_8)); - } - - @SneakyThrows - private void internalSaveSimulator(Player player, YAPIONObject yapionObject) { - File file = getFile(player); - yapionObject.toYAPION(new FileOutput(file)).close(); - } - - @SneakyThrows - void saveSimulator(SteamwarUser steamwarUser, YAPIONObject yapionObject) { - File file = new File(simulatorsDir, steamwarUser.getId() + ".yapion"); - yapionObject.toYAPION(new FileOutput(file)).close(); - } - - public List listSimulator(Player player) { - List strings = getSimulator(player).getKeys(); - strings.remove(""); - return strings; - } - - public void saveSimulator(Player player, String name) { - YAPIONObject yapionObject = getSimulator(player); - yapionObject.put(name, yapionObject.getArray("").copy()); - internalSaveSimulator(player, yapionObject); - } - - public void saveSimulator(Player player, YAPIONArray simulator) { - YAPIONObject yapionObject = getSimulator(player); - yapionObject.put("", simulator); - internalSaveSimulator(player, yapionObject); - } - - public void loadSimulator(Player player, String name) { - YAPIONObject yapionObject = getSimulator(player); - yapionObject.put("", yapionObject.getArray(name).copy()); - internalSaveSimulator(player, yapionObject); - } - - public void removeSimulator(Player player, String name) { - YAPIONObject yapionObject = getSimulator(player); - yapionObject.remove(name); - internalSaveSimulator(player, yapionObject); - } - - private File getFile(Player player) { - SteamwarUser steamwarUser = SteamwarUser.get(player.getUniqueId()); - return new File(simulatorsDir, steamwarUser.getId() + ".yapion"); - } -} diff --git a/BauSystem_Main/src/de/steamwar/bausystem/worlddata/WorldData.java b/BauSystem_Main/src/de/steamwar/bausystem/worlddata/WorldData.java index 63731a8e..f8ad25c4 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/worlddata/WorldData.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/worlddata/WorldData.java @@ -19,73 +19,78 @@ package de.steamwar.bausystem.worlddata; -import de.steamwar.sql.SteamwarUser; -import lombok.experimental.UtilityClass; +import de.steamwar.bausystem.config.ConfigField; +import de.steamwar.bausystem.config.YamlConfig; +import de.steamwar.bausystem.features.warp.Warp; +import de.steamwar.bausystem.region.FlagStorage; +import lombok.Getter; +import lombok.Setter; import org.bukkit.Bukkit; -import yapion.hierarchy.output.FileOutput; -import yapion.hierarchy.types.YAPIONObject; -import yapion.parser.InputStreamCharsets; -import yapion.parser.YAPIONParser; -import yapion.parser.options.StreamOptions; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.configuration.serialization.ConfigurationSerialization; -import java.io.BufferedInputStream; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; -@UtilityClass -public class WorldData { +public class WorldData extends YamlConfig { - private final File optionsFile = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "options.yapion"); - private YAPIONObject worldData; - - public YAPIONObject getWorldData() { - if (worldData == null) { - read(); - } - return worldData; + static { + ConfigurationSerialization.registerClass(FlagStorage.class); + register(RegionConfig.class); + register(Warp.class); } - public YAPIONObject getRegionsData() { - return getWorldData().getYAPIONObjectOrSetDefault("regions", new YAPIONObject()); - } + private static final File optionsFile = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "options.yml"); + @Getter + private static WorldData instance = new WorldData(YamlConfiguration.loadConfiguration(optionsFile)); - public YAPIONObject getWarpData() { - return getWorldData().getYAPIONObjectOrSetDefault("warps", new YAPIONObject()); - } + @ConfigField + private final Map regionConfigs = new HashMap<>(); + @Getter + @ConfigField + private final Map warps = new HashMap<>(); - private void read() { - worldData = new YAPIONObject(); - if (optionsFile.length() != 0) { - try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(optionsFile))) { - worldData = YAPIONParser.parse(bufferedInputStream, new StreamOptions().charset(InputStreamCharsets.UTF_8)); - if (!worldData.containsKey("regions")) { - YAPIONObject yapionObject = new YAPIONObject(); - yapionObject.add("regions", worldData); - worldData = yapionObject; - write(); - } - } catch (IOException e) { - // Ignored - } - } - - // Conversion from old simulator saving to new one - if (worldData.containsKey("simulators")) { - YAPIONObject yapionObject = worldData.getObject("simulators"); - worldData.remove("simulators"); - yapionObject.forEach((s, yapionAnyType) -> { - SteamwarUser steamwarUser = SteamwarUser.get(Integer.parseInt(s)); - SimulatorData.saveSimulator(steamwarUser, new YAPIONObject().add("", yapionAnyType)); - }); + public WorldData(ConfigurationSection configuration) { + super(configuration); + instance = this; + if(warps.isEmpty()) { + new Warp("WorldSpawn", Bukkit.getWorlds().get(0).getSpawnLocation(), Material.NETHER_STAR); } } - public void write() { + public RegionConfig getRegionConfig(String region) { + return regionConfigs.computeIfAbsent(region, name -> new RegionConfig()); + } + + public void addWarp(Warp warp) { + warps.put(warp.getName(), warp); + } + + public void save() { try { - worldData.toYAPION(new FileOutput(optionsFile)).close(); - } catch (IOException e) { - // Ignored + toYaml().save(optionsFile); + } catch (IOException ignored) {} + } + + @Getter + public static class RegionConfig extends YamlConfig { + + @ConfigField(required = true) + private FlagStorage flagStorage; + @Setter + @ConfigField + private String skin; + + private RegionConfig() { + flagStorage = new FlagStorage(); + } + + public RegionConfig(Map map) { + super(map); } } } diff --git a/build.gradle b/build.gradle index 48c8df51..6ae57981 100644 --- a/build.gradle +++ b/build.gradle @@ -46,10 +46,6 @@ allprojects { repositories { mavenCentral() - maven { - url = uri("https://raw.githubusercontent.com/yoyosource/YAPION/master/releases") - } - maven { url = uri("https://repo.codemc.io/repository/maven-snapshots/") } diff --git a/libs/YAPION-SNAPSHOT.jar b/libs/YAPION-SNAPSHOT.jar deleted file mode 100644 index 5568663c..00000000 Binary files a/libs/YAPION-SNAPSHOT.jar and /dev/null differ