mirror of
https://github.com/CivMC/Civ.git
synced 2026-07-18 00:20:44 +00:00
Merge branch 'master' of https://github.com/Civclassic/CivModCore into main
* 'master' of https://github.com/Civclassic/CivModCore: Add EnumSetting Remove unnecessary config reload
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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<T extends Enum<T>> extends PlayerSetting<T> {
|
||||
|
||||
private final Class<T> 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<T> 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 "<null>";
|
||||
}
|
||||
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.<IClickable>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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user