diff --git a/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/CoreConfigManager.java b/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/CoreConfigManager.java index 384ed0b50..db7b4aef8 100644 --- a/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/CoreConfigManager.java +++ b/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/CoreConfigManager.java @@ -37,7 +37,6 @@ public class CoreConfigManager { public final boolean parse() { this.plugin.info(ChatColor.BLUE + "Parsing config."); this.plugin.saveDefaultConfig(); - this.plugin.reloadConfig(); FileConfiguration config = this.plugin.getConfig(); // Parse debug value this.debug = config.getBoolean("debug", false); diff --git a/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/playersettings/impl/EnumSetting.java b/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/playersettings/impl/EnumSetting.java new file mode 100644 index 000000000..9c0b67f72 --- /dev/null +++ b/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/playersettings/impl/EnumSetting.java @@ -0,0 +1,95 @@ +package vg.civcraft.mc.civmodcore.playersettings.impl; + +import java.util.Comparator; +import java.util.Objects; +import java.util.stream.Collectors; +import org.apache.commons.lang3.EnumUtils; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.java.JavaPlugin; +import vg.civcraft.mc.civmodcore.inventory.items.ItemUtils; +import vg.civcraft.mc.civmodcore.inventorygui.Clickable; +import vg.civcraft.mc.civmodcore.inventorygui.IClickable; +import vg.civcraft.mc.civmodcore.inventorygui.MultiPageView; +import vg.civcraft.mc.civmodcore.playersettings.PlayerSetting; +import vg.civcraft.mc.civmodcore.playersettings.gui.MenuSection; + +public class EnumSetting> extends PlayerSetting { + + private final Class enumClass; + + public EnumSetting(final JavaPlugin owningPlugin, + final T defaultValue, + final String niceName, + final String identifier, + final ItemStack gui, + final String description, + final boolean canBeChangedByPlayer, + final Class enumClass) { + super(owningPlugin, defaultValue, niceName, identifier, gui, description, canBeChangedByPlayer); + this.enumClass = Objects.requireNonNull(enumClass); + } + + @Override + public T deserialize(final String raw) { + return EnumUtils.getEnum(this.enumClass, raw, getDefaultValue()); + } + + @Override + public boolean isValidValue(final String raw) { + return EnumUtils.isValidEnum(this.enumClass, raw); + } + + @Override + public String serialize(final T value) { + if (value == null) { + return null; + } + return value.name(); + } + + @Override + public String toText(final T value) { + if (value == null) { + return ""; + } + return value.name(); + } + + @Override + public void handleMenuClick(final Player player, final MenuSection menu) { + final T currentValue = getValue(player); + + final var view = new MultiPageView(player, + EnumUtils.getEnumList(this.enumClass).stream() + .sorted(Comparator.comparing(Enum::name)) + .map(value -> { + final var item = new ItemStack(value == currentValue ? Material.GREEN_DYE : Material.RED_DYE); + ItemUtils.setDisplayName(item, ChatColor.GOLD + toText(value)); + return new Clickable(item) { + @Override + protected void clicked(final Player ignored) { + setValue(player, value); + handleMenuClick(player, menu); + } + }; + }) + .collect(Collectors.toList()), + getNiceName(), + true); + + final var backButtonItem = new ItemStack(Material.ARROW); + ItemUtils.setDisplayName(backButtonItem, ChatColor.AQUA + "Go back to " + menu.getName()); + view.setMenuSlot(new Clickable(backButtonItem) { + @Override + public void clicked(final Player clicker) { + menu.showScreen(clicker); + } + }, 0); + + view.showScreen(); + } + +} diff --git a/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/world/ChunkLoadedFilter.java b/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/world/ChunkLoadedFilter.java index 11a5f1769..4c081df77 100644 --- a/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/world/ChunkLoadedFilter.java +++ b/plugins/civmodcore-paper/src/main/java/vg/civcraft/mc/civmodcore/world/ChunkLoadedFilter.java @@ -11,7 +11,7 @@ import org.bukkit.World; /** * Utility to use with {@link java.util.stream.Stream} to efficiently remove elements from unloaded chunks. */ -public class ChunkLoadedFilter { +public final class ChunkLoadedFilter { /** * Creates a new filter function for a given world to remove elements representing blocks in unloaded chunks.