moved setting declaration to each owning appliance
This commit is contained in:
parent
7a97b1595e
commit
da8e421532
@ -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;
|
||||
|
@ -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;
|
@ -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();
|
||||
|
@ -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;
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
@ -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("")
|
||||
|
@ -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;
|
@ -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;
|
||||
|
@ -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;
|
@ -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<Listener> listeners() {
|
||||
return List.of(new ItemRefillListener());
|
||||
return List.of(new HotbarRefillListener());
|
||||
}
|
||||
}
|
||||
|
@ -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<HotbarRefill> {
|
||||
private HotbarReplaceSetting.HotbarReplaceConfig getPlayerSetting(Player player) {
|
||||
public class HotbarRefillListener extends ApplianceListener<HotbarRefill> {
|
||||
private HotbarRefillSetting.HotbarReplaceConfig getPlayerSetting(Player player) {
|
||||
return Settings.instance().getSetting(
|
||||
player,
|
||||
Settings.Key.HotbarReplacer,
|
||||
HotbarReplaceSetting.HotbarReplaceConfig.class
|
||||
HotbarRefillSetting.HotbarReplaceConfig.class
|
||||
);
|
||||
}
|
||||
|
@ -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<HotbarReplaceSetting.HotbarReplaceConfig> implements CategorizedSetting {
|
||||
public class HotbarRefillSetting extends MultiBoolSetting<HotbarRefillSetting.HotbarReplaceConfig> implements CategorizedSetting {
|
||||
@Override
|
||||
public SettingCategory category() {
|
||||
return SettingCategory.Gameplay;
|
||||
@ -18,7 +18,7 @@ public class HotbarReplaceSetting extends MultiBoolSetting<HotbarReplaceSetting.
|
||||
@DisplayName("Essen") boolean onConsumable
|
||||
) {}
|
||||
|
||||
public HotbarReplaceSetting() {
|
||||
public HotbarRefillSetting() {
|
||||
super(Settings.Key.HotbarReplacer);
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ 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.datatypes.SelectSetting;
|
||||
import eu.mhsl.craftattack.spawn.appliances.settings.settings.KnockDoorSetting;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -16,6 +15,11 @@ import org.jetbrains.annotations.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
public class KnockDoor extends Appliance {
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Settings.instance().declareSetting(KnockDoorSetting.class);
|
||||
}
|
||||
|
||||
public void knockAtDoor(Player knockingPlayer, Block knockedBlock) {
|
||||
SelectSetting.Options.Option setting = Settings.instance().getSetting(knockingPlayer, Settings.Key.KnockDoors, SelectSetting.Options.Option.class);
|
||||
if(setting.is(KnockDoorSetting.disabled)) return;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package eu.mhsl.craftattack.spawn.appliances.settings.settings;
|
||||
package eu.mhsl.craftattack.spawn.appliances.knockDoor;
|
||||
|
||||
import eu.mhsl.craftattack.spawn.appliances.settings.CategorizedSetting;
|
||||
import eu.mhsl.craftattack.spawn.appliances.settings.SettingCategory;
|
@ -6,6 +6,7 @@ import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
|
||||
import eu.mhsl.craftattack.spawn.appliances.packSelect.listeners.ClosePackInventoryListener;
|
||||
import eu.mhsl.craftattack.spawn.appliances.packSelect.listeners.ClickPackInventoryListener;
|
||||
import eu.mhsl.craftattack.spawn.appliances.packSelect.listeners.SetPacksOnJoinListener;
|
||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
||||
import net.kyori.adventure.resource.ResourcePackInfo;
|
||||
import net.kyori.adventure.resource.ResourcePackRequest;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@ -34,6 +35,8 @@ public class PackSelect extends Appliance {
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Settings.instance().declareSetting(PackSelectSetting.class);
|
||||
|
||||
List<Map<?, ?>> packs = localConfig().getMapList("packs");
|
||||
Bukkit.getScheduler().runTaskAsynchronously(
|
||||
Main.instance(),
|
||||
|
@ -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;
|
@ -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);
|
||||
|
@ -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;
|
@ -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<Class<? extends Setting<?>>> 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<? extends Setting<?>> setting) {
|
||||
this.declaredSettings.add(setting);
|
||||
this.settingsCache.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Settings.instance().declareSetting(SettingsShortcutSetting.class);
|
||||
}
|
||||
|
||||
public record OpenSettingsInventory(Inventory inventory, List<Setting<?>> settings) {
|
||||
@ -51,28 +59,31 @@ public class Settings extends Appliance {
|
||||
private List<Setting<?>> getSettings(Player player) {
|
||||
if(settingsCache.containsKey(player)) return settingsCache.get(player);
|
||||
|
||||
List<Setting<?>> 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<Setting<?>> 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> T getSetting(Player player, Key key, Class<T> clazz) {
|
||||
Setting<?> setting = getSettings(player).stream()
|
||||
.filter(s -> s.getKey().equals(key))
|
||||
.filter(s -> Objects.equals(s.getKey(), key))
|
||||
.findFirst()
|
||||
.orElseThrow();
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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;
|
Loading…
x
Reference in New Issue
Block a user