From ebab4cbd3491a39d755d96279fb6b84347b2a122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 25 Aug 2024 19:26:14 +0200 Subject: [PATCH] added chat mentions, added setting categories --- .../java/eu/mhsl/craftattack/spawn/Main.java | 6 +- .../appliances/chatMention/ChatMention.java | 66 +++++++++++++++++++ .../chatMention/ChatMentionListener.java | 46 +++++++++++++ .../appliances/chatMessages/ChatMessages.java | 13 ++++ .../chatMessages/ChatMessagesListener.java | 17 +---- .../settings/CategorizedSetting.java | 5 ++ .../appliances/settings/SettingCategory.java | 7 ++ .../spawn/appliances/settings/Settings.java | 63 ++++++++++++++++-- .../settings/settings/AutoShulkerSetting.java | 9 ++- .../settings/settings/ChatMentionSetting.java | 48 ++++++++++++++ .../settings/HotbarReplaceSetting.java | 9 ++- ...ting.java => PortableCraftingSetting.java} | 11 +++- ...ting.java => SettingsShortcutSetting.java} | 11 +++- .../ShowJoinAndLeaveMessagesSetting.java | 9 ++- .../settings/settings/SignEditSetting.java | 9 ++- .../settings/TechnicalTablistSetting.java | 9 ++- 16 files changed, 306 insertions(+), 32 deletions(-) create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMention.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionListener.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/CategorizedSetting.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/SettingCategory.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ChatMentionSetting.java rename src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/{EnablePortableCraftingSetting.java => PortableCraftingSetting.java} (65%) rename src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/{EnableSettingsShortcutSetting.java => SettingsShortcutSetting.java} (67%) diff --git a/src/main/java/eu/mhsl/craftattack/spawn/Main.java b/src/main/java/eu/mhsl/craftattack/spawn/Main.java index 7e328c7..692b58f 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/Main.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/Main.java @@ -2,9 +2,10 @@ package eu.mhsl.craftattack.spawn; import eu.mhsl.craftattack.spawn.api.HttpServer; import eu.mhsl.craftattack.spawn.appliance.Appliance; -import eu.mhsl.craftattack.spawn.appliances.AntiSignEdit.AntiSignEdit; +import eu.mhsl.craftattack.spawn.appliances.antiSignEdit.AntiSignEdit; import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker; import eu.mhsl.craftattack.spawn.appliances.autoShulker.AutoShulker; +import eu.mhsl.craftattack.spawn.appliances.chatMention.ChatMention; import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages; import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements; import eu.mhsl.craftattack.spawn.appliances.debug.Debug; @@ -73,7 +74,8 @@ public final class Main extends JavaPlugin { new PortableCrafting(), new AutoShulker(), new AntiSignEdit(), - new HotbarRefill() + new HotbarRefill(), + new ChatMention() ); Main.logger.info("Loading appliances..."); 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 new file mode 100644 index 0000000..e9904b8 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMention.java @@ -0,0 +1,66 @@ +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; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +public class ChatMention extends Appliance { + private static List playerNames; + + public String formatPlayer(String name) { + return "@" + name; + } + + public List getPlayerNames() { + return playerNames; + } + + public void refreshPlayers() { + Bukkit.getScheduler().runTaskAsynchronously( + Main.instance(), + () -> playerNames = Arrays.stream(Bukkit.getOfflinePlayers()) + .map(OfflinePlayer::getName) + .filter(Objects::nonNull) + .toList() + ); + } + + public void notifyPlayers(List playerNames) { + playerNames.stream() + .distinct() + .map(Bukkit::getPlayer) + .filter(Objects::nonNull) + .filter(player -> Settings.instance() + .getSetting(player, Settings.Key.ChatMentions, ChatMentionSetting.ChatMentionConfig.class) + .notifyOnMention() + ) + .forEach(player -> player.playSound( + Sound.sound( + org.bukkit.Sound.ENTITY_EXPERIENCE_ORB_PICKUP, + Sound.Source.PLAYER, + 1.0f, + 1.0f + ) + )); + } + + @Override + public void onEnable() { + refreshPlayers(); + } + + @Override + protected @NotNull List eventHandlers() { + return List.of(new ChatMentionListener()); + } +} 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 new file mode 100644 index 0000000..db27a13 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMention/ChatMentionListener.java @@ -0,0 +1,46 @@ +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; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.event.EventHandler; + +import java.util.ArrayList; +import java.util.List; + +public class ChatMentionListener extends ApplianceListener { + @SuppressWarnings("UnstableApiUsage") + @EventHandler + public void coloringEvent(AsyncChatDecorateEvent event) { + String message = PlainTextComponentSerializer.plainText().serialize(event.result()); + List words = List.of(message.split(" ")); + List mentioned = new ArrayList<>(); + + ChatMentionSetting.ChatMentionConfig config = Settings.instance() + .getSetting(event.player(), Settings.Key.ChatMentions, ChatMentionSetting.ChatMentionConfig.class); + + Component result = words.stream() + .map(word -> { + String wordWithoutAnnotation = word.replace("@", ""); + boolean isPlayer = getAppliance().getPlayerNames().contains(wordWithoutAnnotation); + if(isPlayer && config.applyMentions()) { + mentioned.add(wordWithoutAnnotation); + return Component.text( + getAppliance().formatPlayer(wordWithoutAnnotation), + NamedTextColor.GOLD + ); + } else { + return Component.text(word); + } + }) + .reduce((a, b) -> a.append(Component.text(" ")).append(b)) + .orElseThrow(); + + getAppliance().notifyPlayers(mentioned); + event.result(result); + } +} 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 b2f20be..53108ec 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,12 +1,25 @@ package eu.mhsl.craftattack.spawn.appliances.chatMessages; import eu.mhsl.craftattack.spawn.appliance.Appliance; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; import java.util.List; public class ChatMessages extends Appliance { + public Component getReportablePlayerName(Player player) { + return Component + .text("") + .append(player.displayName()) + .hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesen Spieler zu reporten").color(NamedTextColor.GOLD))) + .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/report " + player.getName() + " ")); + } + @Override @NotNull protected List eventHandlers() { diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ChatMessagesListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ChatMessagesListener.java index a1cce55..386fa1b 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ChatMessagesListener.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/chatMessages/ChatMessagesListener.java @@ -5,12 +5,9 @@ import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import eu.mhsl.craftattack.spawn.util.IteratorUtil; import io.papermc.paper.event.player.AsyncChatEvent; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.event.ClickEvent; -import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; import org.bukkit.Color; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -24,7 +21,7 @@ public class ChatMessagesListener extends ApplianceListener { event.renderer( (source, sourceDisplayName, message, viewer) -> Component.text("") - .append(getReportablePlayerName(source)) + .append(getAppliance().getReportablePlayerName(source)) .append(Component.text(" > ").color(TextColor.color(Color.GRAY.asRGB()))) .append(message).color(TextColor.color(Color.SILVER.asRGB())) ); @@ -38,7 +35,7 @@ public class ChatMessagesListener extends ApplianceListener { player.sendMessage( Component .text(">>> ").color(NamedTextColor.GREEN) - .append(getReportablePlayerName(event.getPlayer())) + .append(getAppliance().getReportablePlayerName(event.getPlayer())) ); }); } @@ -51,7 +48,7 @@ public class ChatMessagesListener extends ApplianceListener { player.sendMessage( Component .text("<<< ").color(NamedTextColor.RED) - .append(getReportablePlayerName(event.getPlayer())) + .append(getAppliance().getReportablePlayerName(event.getPlayer())) ); }); } @@ -69,12 +66,4 @@ public class ChatMessagesListener extends ApplianceListener { .color(TextColor.color(Color.SILVER.asRGB())) ); } - - private Component getReportablePlayerName(Player player) { - return Component - .text("") - .append(player.displayName()) - .hoverEvent(HoverEvent.showText(Component.text("Klicke, um diesen Spieler zu reporten").color(NamedTextColor.GOLD))) - .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/report " + player.getName() + " ")); - } } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/CategorizedSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/CategorizedSetting.java new file mode 100644 index 0000000..8abb147 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/CategorizedSetting.java @@ -0,0 +1,5 @@ +package eu.mhsl.craftattack.spawn.appliances.settings; + +public interface CategorizedSetting { + SettingCategory category(); +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/SettingCategory.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/SettingCategory.java new file mode 100644 index 0000000..5a7bf41 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/SettingCategory.java @@ -0,0 +1,7 @@ +package eu.mhsl.craftattack.spawn.appliances.settings; + +public enum SettingCategory { + Gameplay, + Chat, + Misc, +} 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 1d3954a..3dfceed 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 @@ -14,8 +14,10 @@ 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.util.concurrent.atomic.AtomicInteger; public class Settings extends Appliance { private static Settings settingsInstance; @@ -28,6 +30,7 @@ public class Settings extends Appliance { AutoShulker, SignEdit, HotbarReplacer, + ChatMentions, } public static Settings instance() { @@ -47,13 +50,14 @@ public class Settings extends Appliance { if(settingsCache.containsKey(player)) return settingsCache.get(player); List> settings = List.of( - new TechnicalTablistSetting(), - new ShowJoinAndLeaveMessagesSetting(), - new EnablePortableCraftingSetting(), - new EnableSettingsShortcutSetting(), + new PortableCraftingSetting(), new AutoShulkerSetting(), new SignEditSetting(), - new HotbarReplaceSetting() + new HotbarReplaceSetting(), + new ChatMentionSetting(), + new ShowJoinAndLeaveMessagesSetting(), + new TechnicalTablistSetting(), + new SettingsShortcutSetting() ); settings.forEach(setting -> setting.initializeFromPlayer(player)); @@ -75,13 +79,58 @@ public class Settings extends Appliance { } public void openSettings(Player player) { - Inventory inventory = Bukkit.createInventory(null, 9, Component.text("Einstellungen")); List> settings = getSettings(player); - settings.forEach(setting -> inventory.addItem(setting.buildItem())); + Inventory inventory = Bukkit.createInventory(null, calculateInvSize(settings), Component.text("Einstellungen")); + + AtomicInteger row = new AtomicInteger(0); + Arrays.stream(SettingCategory.values()) + .forEach(category -> { + List> categorizedSettings = settings.stream() + .filter(setting -> setting instanceof CategorizedSetting) + .filter(setting -> ((CategorizedSetting) setting).category().equals(category)) + .toList(); + + for (int i = 0; i < categorizedSettings.size(); i++) { + int slot = row.get() * 9 + i % 9; + inventory.setItem(slot, categorizedSettings.get(i).buildItem()); + + if (i % 9 == 8) { + row.incrementAndGet(); + } + } + row.incrementAndGet(); + }); + + List> uncategorizedSettings = settings.stream() + .filter(setting -> !(setting instanceof CategorizedSetting)) + .toList(); + + for (int i = 0; i < uncategorizedSettings.size(); i++) { + int slot = row.get() * 9 + i % 9; + inventory.setItem(slot, uncategorizedSettings.get(i).buildItem()); + + if (i % 9 == 8) { + row.incrementAndGet(); + } + } + player.openInventory(inventory); this.openSettingsInventories.put(player, new OpenSettingsInventory(inventory, settings)); } + private int calculateInvSize(List> settings) { + int countOfUncategorized = (int) settings.stream().filter(setting -> !(setting instanceof CategorizedSetting)).count(); + return Arrays.stream(SettingCategory.values()) + .map(settingCategory -> settings.stream() + .filter(setting -> setting instanceof CategorizedSetting) + .filter(setting -> ((CategorizedSetting) setting).category().equals(settingCategory)) + .count()) + .map(itemCount -> itemCount + countOfUncategorized) + .map(itemCount -> (int) Math.ceil((double) itemCount / 9)) + .reduce(Integer::sum) + .orElse(1) * 9; + } + public void onSettingsClose(Player player) { if(!openSettingsInventories.containsKey(player)) return; openSettingsInventories.remove(player); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/AutoShulkerSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/AutoShulkerSetting.java index e084997..941adb8 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/AutoShulkerSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/AutoShulkerSetting.java @@ -1,5 +1,7 @@ package eu.mhsl.craftattack.spawn.appliances.settings.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.SelectSetting; import org.bukkit.Material; @@ -8,7 +10,7 @@ import org.bukkit.NamespacedKey; import java.util.List; import java.util.Locale; -public class AutoShulkerSetting extends SelectSetting { +public class AutoShulkerSetting extends SelectSetting implements CategorizedSetting { private static final String namespace = AutoShulkerSetting.class.getSimpleName().toLowerCase(Locale.ROOT); public static Options.Option disabled = new Options.Option("Deaktiviert", new NamespacedKey(namespace, "disabled")); public static Options.Option notFromPlayers = new Options.Option("Keine manuell gedroppten Items", new NamespacedKey(namespace, "noplayerdrops")); @@ -40,4 +42,9 @@ public class AutoShulkerSetting extends SelectSetting { protected Options.Option defaultValue() { return disabled; } + + @Override + public SettingCategory category() { + return SettingCategory.Gameplay; + } } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ChatMentionSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ChatMentionSetting.java new file mode 100644 index 0000000..62eed06 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ChatMentionSetting.java @@ -0,0 +1,48 @@ +package eu.mhsl.craftattack.spawn.appliances.settings.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.MultiBoolSetting; +import org.bukkit.Material; + +public class ChatMentionSetting extends MultiBoolSetting implements CategorizedSetting { + @Override + public SettingCategory category() { + return SettingCategory.Chat; + } + + public record ChatMentionConfig( + @DisplayName("Spielernamen hervorheben") boolean applyMentions, + @DisplayName("Benachrichtigungston") boolean notifyOnMention + ) {} + + public ChatMentionSetting() { + super(Settings.Key.ChatMentions); + } + + @Override + protected String title() { + return "Erwähnungen im Chat"; + } + + @Override + protected String description() { + return "Erwähnungen werden automatisch im Chat angewandt und der Empfänger erhält einen Signalton"; + } + + @Override + protected Material icon() { + return Material.FEATHER; + } + + @Override + protected ChatMentionConfig defaultValue() { + return new ChatMentionConfig(true, true); + } + + @Override + public Class dataType() { + return ChatMentionConfig.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/settings/settings/HotbarReplaceSetting.java index 1331882..e00a5d5 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/HotbarReplaceSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/HotbarReplaceSetting.java @@ -1,10 +1,17 @@ package eu.mhsl.craftattack.spawn.appliances.settings.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.MultiBoolSetting; import org.bukkit.Material; -public class HotbarReplaceSetting extends MultiBoolSetting { +public class HotbarReplaceSetting extends MultiBoolSetting implements CategorizedSetting { + @Override + public SettingCategory category() { + return SettingCategory.Gameplay; + } + public record HotbarReplaceConfig( @DisplayName("Blöcke") boolean onBlocks, @DisplayName("Werkzeuge") boolean onTools, diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnablePortableCraftingSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PortableCraftingSetting.java similarity index 65% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnablePortableCraftingSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PortableCraftingSetting.java index 8097369..04a24b3 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnablePortableCraftingSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/PortableCraftingSetting.java @@ -1,11 +1,13 @@ package eu.mhsl.craftattack.spawn.appliances.settings.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; -public class EnablePortableCraftingSetting extends BoolSetting { - public EnablePortableCraftingSetting() { +public class PortableCraftingSetting extends BoolSetting implements CategorizedSetting { + public PortableCraftingSetting() { super(Settings.Key.EnablePortableCrafting); } @@ -28,4 +30,9 @@ public class EnablePortableCraftingSetting extends BoolSetting { protected Boolean defaultValue() { return true; } + + @Override + public SettingCategory category() { + return SettingCategory.Gameplay; + } } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnableSettingsShortcutSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SettingsShortcutSetting.java similarity index 67% rename from src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnableSettingsShortcutSetting.java rename to src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SettingsShortcutSetting.java index 7c9ed54..bd1cf72 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnableSettingsShortcutSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SettingsShortcutSetting.java @@ -1,11 +1,13 @@ package eu.mhsl.craftattack.spawn.appliances.settings.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; -public class EnableSettingsShortcutSetting extends BoolSetting { - public EnableSettingsShortcutSetting() { +public class SettingsShortcutSetting extends BoolSetting implements CategorizedSetting { + public SettingsShortcutSetting() { super(Settings.Key.EnableSettingsShortcut); } @@ -28,4 +30,9 @@ public class EnableSettingsShortcutSetting extends BoolSetting { protected Boolean defaultValue() { return false; } + + @Override + public SettingCategory category() { + return SettingCategory.Misc; + } } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ShowJoinAndLeaveMessagesSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ShowJoinAndLeaveMessagesSetting.java index 60aa111..00d9698 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ShowJoinAndLeaveMessagesSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/ShowJoinAndLeaveMessagesSetting.java @@ -1,10 +1,12 @@ package eu.mhsl.craftattack.spawn.appliances.settings.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; -public class ShowJoinAndLeaveMessagesSetting extends BoolSetting { +public class ShowJoinAndLeaveMessagesSetting extends BoolSetting implements CategorizedSetting { public ShowJoinAndLeaveMessagesSetting() { super(Settings.Key.ShowJoinAndLeaveMessages); } @@ -28,4 +30,9 @@ public class ShowJoinAndLeaveMessagesSetting extends BoolSetting { protected Boolean defaultValue() { return true; } + + @Override + public SettingCategory category() { + return SettingCategory.Chat; + } } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SignEditSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SignEditSetting.java index ee4e52a..d1164ed 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SignEditSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/SignEditSetting.java @@ -1,5 +1,7 @@ package eu.mhsl.craftattack.spawn.appliances.settings.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.SelectSetting; import org.bukkit.Material; @@ -8,7 +10,7 @@ import org.bukkit.NamespacedKey; import java.util.List; import java.util.Locale; -public class SignEditSetting extends SelectSetting { +public class SignEditSetting extends SelectSetting implements CategorizedSetting { private static final String namespace = SignEditSetting.class.getSimpleName().toLowerCase(Locale.ROOT); public static Options.Option editable = new Options.Option("Bearbeitbar", new NamespacedKey(namespace, "editable")); public static Options.Option editableWhenEmpty = new Options.Option("Bearbeitbar wenn leer", new NamespacedKey(namespace, "emptyeditable")); @@ -40,4 +42,9 @@ public class SignEditSetting extends SelectSetting { protected Options.Option defaultValue() { return editableWhenEmpty; } + + @Override + public SettingCategory category() { + return SettingCategory.Gameplay; + } } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/TechnicalTablistSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/TechnicalTablistSetting.java index 4542d45..482913a 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/TechnicalTablistSetting.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/TechnicalTablistSetting.java @@ -1,10 +1,12 @@ package eu.mhsl.craftattack.spawn.appliances.settings.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; -public class TechnicalTablistSetting extends BoolSetting { +public class TechnicalTablistSetting extends BoolSetting implements CategorizedSetting { public TechnicalTablistSetting() { super(Settings.Key.TechnicalTab); } @@ -28,4 +30,9 @@ public class TechnicalTablistSetting extends BoolSetting { protected Boolean defaultValue() { return false; } + + @Override + public SettingCategory category() { + return SettingCategory.Misc; + } }