From da8e42153256ba4f83607fd4eed8e5b3c1832c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Tue, 24 Sep 2024 19:20:59 +0200 Subject: [PATCH] moved setting declaration to each owning appliance --- .../appliances/antiSignEdit/AntiSignEdit.java | 6 +- .../SignEditSetting.java | 2 +- .../appliances/autoShulker/AutoShulker.java | 6 ++ .../AutoShulkerSetting.java | 2 +- .../autoShulker/ItemPickupListener.java | 1 - .../appliances/chatMention/ChatMention.java | 2 +- .../chatMention/ChatMentionListener.java | 1 - .../ChatMentionSetting.java | 2 +- .../appliances/chatMessages/ChatMessages.java | 6 ++ .../ShowJoinAndLeaveMessagesSetting.java | 2 +- .../appliances/doubeDoor/DoubleDoor.java | 6 ++ .../DoubleDoorSetting.java | 2 +- .../appliances/hotbarRefill/HotbarRefill.java | 8 ++- ...istener.java => HotbarRefillListener.java} | 7 +-- .../HotbarRefillSetting.java} | 6 +- .../spawn/appliances/knockDoor/KnockDoor.java | 6 +- .../KnockDoorSetting.java | 2 +- .../appliances/packSelect/PackSelect.java | 3 + .../PackSelectSetting.java | 3 +- .../portableCrafting/PortableCrafting.java | 5 ++ .../PortableCraftingSetting.java | 2 +- .../spawn/appliances/settings/Settings.java | 57 +++++++++++-------- .../SettingsShortcutSetting.java | 5 +- .../spawn/appliances/tablist/Tablist.java | 2 + .../TechnicalTablistSetting.java | 2 +- 25 files changed, 96 insertions(+), 50 deletions(-) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => antiSignEdit}/SignEditSetting.java (96%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => autoShulker}/AutoShulkerSetting.java (96%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => chatMention}/ChatMentionSetting.java (95%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => chatMessages}/ShowJoinAndLeaveMessagesSetting.java (94%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => doubeDoor}/DoubleDoorSetting.java (93%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/{ItemRefillListener.java => HotbarRefillListener.java} (82%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings/HotbarReplaceSetting.java => hotbarRefill/HotbarRefillSetting.java} (84%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => knockDoor}/KnockDoorSetting.java (96%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => packSelect}/PackSelectSetting.java (89%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => portableCrafting}/PortableCraftingSetting.java (94%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/{settings => }/SettingsShortcutSetting.java (76%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/{settings/settings => tablist}/TechnicalTablistSetting.java (94%) diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/antiSignEdit/AntiSignEdit.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/antiSignEdit/AntiSignEdit.java index 4a13e2f..67b69e0 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/antiSignEdit/AntiSignEdit.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/antiSignEdit/AntiSignEdit.java @@ -3,7 +3,6 @@ package eu.mhsl.craftattack.spawn.appliances.antiSignEdit; import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.SelectSetting; -import eu.mhsl.craftattack.spawn.appliances.settings.settings.SignEditSetting; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; @@ -15,6 +14,11 @@ import org.jetbrains.annotations.NotNull; import java.util.List; public class AntiSignEdit extends Appliance { + @Override + public void onEnable() { + Settings.instance().declareSetting(SignEditSetting.class); + } + public boolean preventSignEdit(Player p, SignSide sign) { SelectSetting.Options.Option setting = Settings.instance().getSetting(p, Settings.Key.SignEdit, SelectSetting.Options.Option.class); if(setting.is(SignEditSetting.editable)) return false; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SignEditSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/antiSignEdit/SignEditSetting.java similarity index 96% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SignEditSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/antiSignEdit/SignEditSetting.java index d1164ed..699ba0e 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SignEditSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/antiSignEdit/SignEditSetting.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.antiSignEdit; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/AutoShulker.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/AutoShulker.java index db787ad..b8bc57a 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/AutoShulker.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/AutoShulker.java @@ -1,6 +1,7 @@ package eu.mhsl.craftattack.spawn.appliances.autoShulker; import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Material; @@ -16,6 +17,11 @@ import java.util.HashMap; import java.util.List; public class AutoShulker extends Appliance { + @Override + public void onEnable() { + Settings.instance().declareSetting(AutoShulkerSetting.class); + } + public boolean tryAutoShulker(Player p, Item item) { ItemStack itemStack = item.getItemStack(); ItemStack offhandStack = p.getInventory().getItemInOffHand(); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/AutoShulkerSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/AutoShulkerSetting.java similarity index 96% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/AutoShulkerSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/AutoShulkerSetting.java index 941adb8..c462516 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/AutoShulkerSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/AutoShulkerSetting.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.autoShulker; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/ItemPickupListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/ItemPickupListener.java index db74c7c..bd6b8c6 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/ItemPickupListener.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/autoShulker/ItemPickupListener.java @@ -3,7 +3,6 @@ package eu.mhsl.craftattack.spawn.appliances.autoShulker; import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.SelectSetting; -import eu.mhsl.craftattack.spawn.appliances.settings.settings.AutoShulkerSetting; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityPickupItemEvent; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMention.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMention.java index cdc8231..e2cb490 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMention.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMention.java @@ -3,7 +3,6 @@ package eu.mhsl.craftattack.spawn.appliances.chatMention; import eu.mhsl.craftattack.spawn.Main; import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliances.settings.Settings; -import eu.mhsl.craftattack.spawn.appliances.settings.settings.ChatMentionSetting; import net.kyori.adventure.sound.Sound; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -56,6 +55,7 @@ public class ChatMention extends Appliance { @Override public void onEnable() { + Settings.instance().declareSetting(ChatMentionSetting.class); refreshPlayers(); } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionListener.java index db27a13..d9dff2f 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionListener.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionListener.java @@ -2,7 +2,6 @@ package eu.mhsl.craftattack.spawn.appliances.chatMention; import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; import eu.mhsl.craftattack.spawn.appliances.settings.Settings; -import eu.mhsl.craftattack.spawn.appliances.settings.settings.ChatMentionSetting; import io.papermc.paper.event.player.AsyncChatDecorateEvent; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ChatMentionSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionSetting.java similarity index 95% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ChatMentionSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionSetting.java index 21a43b4..a54f6a8 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ChatMentionSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionSetting.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.chatMention; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ChatMessages.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ChatMessages.java index a0d36d8..337ab32 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ChatMessages.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ChatMessages.java @@ -1,6 +1,7 @@ package eu.mhsl.craftattack.spawn.appliances.chatMessages; import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.HoverEvent; @@ -12,6 +13,11 @@ import org.jetbrains.annotations.NotNull; import java.util.List; public class ChatMessages extends Appliance { + @Override + public void onEnable() { + Settings.instance().declareSetting(ShowJoinAndLeaveMessagesSetting.class); + } + public Component getReportablePlayerName(Player player) { return Component .text("") diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ShowJoinAndLeaveMessagesSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ShowJoinAndLeaveMessagesSetting.java similarity index 94% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ShowJoinAndLeaveMessagesSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ShowJoinAndLeaveMessagesSetting.java index d37c063..f729a97 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ShowJoinAndLeaveMessagesSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ShowJoinAndLeaveMessagesSetting.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.chatMessages; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/doubeDoor/DoubleDoor.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/doubeDoor/DoubleDoor.java index b554185..66fd59c 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/doubeDoor/DoubleDoor.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/doubeDoor/DoubleDoor.java @@ -1,6 +1,7 @@ package eu.mhsl.craftattack.spawn.appliances.doubeDoor; import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.data.BlockData; @@ -11,6 +12,11 @@ import org.jetbrains.annotations.NotNull; import java.util.List; public class DoubleDoor extends Appliance { + @Override + public void onEnable() { + Settings.instance().declareSetting(DoubleDoorSetting.class); + } + public void openNextDoor(Block block) { BlockData clickedData = block.getBlockData(); if (!(clickedData instanceof Door clickedDoor)) return; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/DoubleDoorSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/doubeDoor/DoubleDoorSetting.java similarity index 93% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/DoubleDoorSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/doubeDoor/DoubleDoorSetting.java index 2678373..7c96b7c 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/DoubleDoorSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/doubeDoor/DoubleDoorSetting.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.doubeDoor; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefill.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefill.java index 7c53dc6..0603576 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefill.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefill.java @@ -2,6 +2,7 @@ package eu.mhsl.craftattack.spawn.appliances.hotbarRefill; import eu.mhsl.craftattack.spawn.Main; import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; @@ -16,6 +17,11 @@ import java.util.List; import java.util.NoSuchElementException; public class HotbarRefill extends Appliance { + @Override + public void onEnable() { + Settings.instance().declareSetting(HotbarRefillSetting.class); + } + public void handleHotbarChange(Player player, ItemStack item) { if(player.getGameMode().equals(GameMode.CREATIVE)) return; if(item.getAmount() != 1) return; @@ -47,6 +53,6 @@ public class HotbarRefill extends Appliance { @Override protected @NotNull List listeners() { - return List.of(new ItemRefillListener()); + return List.of(new HotbarRefillListener()); } } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/ItemRefillListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefillListener.java similarity index 82% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/ItemRefillListener.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefillListener.java index d001598..2ff2635 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/ItemRefillListener.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefillListener.java @@ -2,7 +2,6 @@ package eu.mhsl.craftattack.spawn.appliances.hotbarRefill; import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; import eu.mhsl.craftattack.spawn.appliances.settings.Settings; -import eu.mhsl.craftattack.spawn.appliances.settings.settings.HotbarReplaceSetting; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.BlockPlaceEvent; @@ -10,12 +9,12 @@ import org.bukkit.event.player.PlayerItemBreakEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.ItemStack; -public class ItemRefillListener extends ApplianceListener { - private HotbarReplaceSetting.HotbarReplaceConfig getPlayerSetting(Player player) { +public class HotbarRefillListener extends ApplianceListener { + private HotbarRefillSetting.HotbarReplaceConfig getPlayerSetting(Player player) { return Settings.instance().getSetting( player, Settings.Key.HotbarReplacer, - HotbarReplaceSetting.HotbarReplaceConfig.class + HotbarRefillSetting.HotbarReplaceConfig.class ); } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/HotbarReplaceSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefillSetting.java similarity index 84% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/HotbarReplaceSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefillSetting.java index e00a5d5..25397f0 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/HotbarReplaceSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/hotbarRefill/HotbarRefillSetting.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.hotbarRefill; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; @@ -6,7 +6,7 @@ import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.MultiBoolSetting; import org.bukkit.Material; -public class HotbarReplaceSetting extends MultiBoolSetting implements CategorizedSetting { +public class HotbarRefillSetting extends MultiBoolSetting implements CategorizedSetting { @Override public SettingCategory category() { return SettingCategory.Gameplay; @@ -18,7 +18,7 @@ public class HotbarReplaceSetting extends MultiBoolSetting> packs = localConfig().getMapList("packs"); Bukkit.getScheduler().runTaskAsynchronously( Main.instance(), diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PackSelectSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/packSelect/PackSelectSetting.java similarity index 89% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PackSelectSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/packSelect/PackSelectSetting.java index cb11af8..0872c17 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PackSelectSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/packSelect/PackSelectSetting.java @@ -1,7 +1,6 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.packSelect; import eu.mhsl.craftattack.spawn.Main; -import eu.mhsl.craftattack.spawn.appliances.packSelect.PackSelect; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.ActionSetting; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCrafting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCrafting.java index c51e7fd..0cc0b1b 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCrafting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCrafting.java @@ -9,6 +9,11 @@ import org.jetbrains.annotations.NotNull; import java.util.List; public class PortableCrafting extends Appliance { + @Override + public void onEnable() { + Settings.instance().declareSetting(PortableCraftingSetting.class); + } + public void openFor(Player player) { if(!Settings.instance().getSetting(player, Settings.Key.EnablePortableCrafting, Boolean.class)) return; player.openWorkbench(null, true); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PortableCraftingSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCraftingSetting.java similarity index 94% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PortableCraftingSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCraftingSetting.java index 04a24b3..026f7b5 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PortableCraftingSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCraftingSetting.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.portableCrafting; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/Settings.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/Settings.java index 0d8ec50..f1ba0d7 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/Settings.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/Settings.java @@ -5,7 +5,6 @@ import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.Setting; import eu.mhsl.craftattack.spawn.appliances.settings.listeners.OpenSettingsShortcutListener; import eu.mhsl.craftattack.spawn.appliances.settings.listeners.SettingsInventoryListener; -import eu.mhsl.craftattack.spawn.appliances.settings.settings.*; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -13,13 +12,14 @@ import org.bukkit.event.Listener; import org.bukkit.inventory.Inventory; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; -import java.util.List; -import java.util.WeakHashMap; +import java.lang.reflect.InvocationTargetException; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; public class Settings extends Appliance { private static Settings settingsInstance; + private final Set>> declaredSettings = new HashSet<>(); public enum Key { TechnicalTab, @@ -36,10 +36,18 @@ public class Settings extends Appliance { public static Settings instance() { if(settingsInstance != null) return settingsInstance; - queryAppliance(Settings.class); - Settings instance = queryAppliance(Settings.class); - Settings.settingsInstance = instance; - return instance; + Settings.settingsInstance = queryAppliance(Settings.class); + return settingsInstance; + } + + public void declareSetting(Class> setting) { + this.declaredSettings.add(setting); + this.settingsCache.clear(); + } + + @Override + public void onEnable() { + Settings.instance().declareSetting(SettingsShortcutSetting.class); } public record OpenSettingsInventory(Inventory inventory, List> settings) { @@ -51,28 +59,31 @@ public class Settings extends Appliance { private List> getSettings(Player player) { if(settingsCache.containsKey(player)) return settingsCache.get(player); - List> settings = List.of( - new PortableCraftingSetting(), - new AutoShulkerSetting(), - new SignEditSetting(), - new HotbarReplaceSetting(), - new ChatMentionSetting(), - new ShowJoinAndLeaveMessagesSetting(), - new TechnicalTablistSetting(), - new SettingsShortcutSetting(), - new DoubleDoorSetting(), - new KnockDoorSetting(), - new PackSelectSetting() - ); + List> settings = this.declaredSettings.stream() + .map(clazz -> { + try { + return clazz.getDeclaredConstructor(); + } catch (NoSuchMethodException e) { + throw new RuntimeException(String.format("Setting '%s' does not have an accessible constructor", clazz.getName()), e); + } + }) + .map(constructor -> { + try { + return constructor.newInstance(); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(String.format("Failed to create instance of setting '%s'", constructor.getDeclaringClass().getName()), e); + } + }) + .peek(setting -> setting.initializeFromPlayer(player)) + .collect(Collectors.toList()); - settings.forEach(setting -> setting.initializeFromPlayer(player)); this.settingsCache.put(player, settings); return settings; } public T getSetting(Player player, Key key, Class clazz) { Setting setting = getSettings(player).stream() - .filter(s -> s.getKey().equals(key)) + .filter(s -> Objects.equals(s.getKey(), key)) .findFirst() .orElseThrow(); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SettingsShortcutSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/SettingsShortcutSetting.java similarity index 76% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SettingsShortcutSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/SettingsShortcutSetting.java index bd1cf72..b43bbcb 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SettingsShortcutSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/SettingsShortcutSetting.java @@ -1,8 +1,5 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.settings; -import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; -import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory; -import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting; import org.bukkit.Material; diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/tablist/Tablist.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/tablist/Tablist.java index 1abb9c0..c6fee66 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/tablist/Tablist.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/tablist/Tablist.java @@ -33,6 +33,8 @@ public class Tablist extends Appliance { @Override public void onEnable() { + Settings.instance().declareSetting(TechnicalTablistSetting.class); + int tabRefreshRate = 3; this.networkMonitor = new NetworkMonitor(localConfig().getString("interface"), Duration.ofSeconds(1)); this.systemMonitor = ManagementFactory.getOperatingSystemMXBean(); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/TechnicalTablistSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/tablist/TechnicalTablistSetting.java similarity index 94% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/TechnicalTablistSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/tablist/TechnicalTablistSetting.java index 482913a..854f27d 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/TechnicalTablistSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/tablist/TechnicalTablistSetting.java @@ -1,4 +1,4 @@ -package eu.mhsl.craftattack.spawn.appliances.settings.settings; +package eu.mhsl.craftattack.spawn.appliances.tablist; import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting; import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;