diff --git a/API/src/main/java/dev/lrxh/api/features/cosmetics/shieldpatterns/IShieldPatternCosmetic.java b/API/src/main/java/dev/lrxh/api/features/cosmetics/shieldpatterns/IShieldPatternCosmetic.java new file mode 100644 index 00000000..39d07e64 --- /dev/null +++ b/API/src/main/java/dev/lrxh/api/features/cosmetics/shieldpatterns/IShieldPatternCosmetic.java @@ -0,0 +1,12 @@ +package dev.lrxh.api.features.cosmetics.shieldpatterns; + +import dev.lrxh.api.features.cosmetics.ICosmetic; + +import java.util.Map; + +public interface IShieldPatternCosmetic extends ICosmetic { + Map getPackages(); + IShieldPatternPackage getDefault(); + IShieldPatternPackage getOrDefault(String packageName); + void addPackage(IShieldPatternPackage killMessagePackage); +} diff --git a/API/src/main/java/dev/lrxh/api/features/cosmetics/shieldpatterns/IShieldPatternPackage.java b/API/src/main/java/dev/lrxh/api/features/cosmetics/shieldpatterns/IShieldPatternPackage.java new file mode 100644 index 00000000..2ff64629 --- /dev/null +++ b/API/src/main/java/dev/lrxh/api/features/cosmetics/shieldpatterns/IShieldPatternPackage.java @@ -0,0 +1,11 @@ +package dev.lrxh.api.features.cosmetics.shieldpatterns; + +import dev.lrxh.api.features.cosmetics.ICosmeticPackage; +import org.bukkit.block.banner.Pattern; + +import java.util.List; + +public interface IShieldPatternPackage extends ICosmeticPackage { + List getPatterns(); + String permission(); +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/configs/ConfigService.java b/Plugin/src/main/java/dev/lrxh/neptune/configs/ConfigService.java index d8f6cf73..1c398bc0 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/configs/ConfigService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/configs/ConfigService.java @@ -19,6 +19,7 @@ public class ConfigService { private ConfigFile cosmeticsConfig; private ConfigFile killMessagesConfig; private ConfigFile armorTrimsConfig; + private ConfigFile shieldPatternsConfig; private ConfigFile soundsConfig; public static ConfigService get() { @@ -40,7 +41,7 @@ public void load() { killMessagesConfig = new ConfigFile("kill-messages"); armorTrimsConfig = new ConfigFile("armor-trims"); soundsConfig = new ConfigFile("sounds"); - + shieldPatternsConfig = new ConfigFile("shield-patterns"); initialize(); } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/MenusLocale.java b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/MenusLocale.java index 52c968d2..01fbe8f9 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/MenusLocale.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/MenusLocale.java @@ -442,7 +442,7 @@ public enum MenusLocale implements IDataAccessor { "&7Set Max ping you", "&7can match against.", "", - " &7Current Ping-range: &b", + " &7Current Ping-range: &b", " ", "&a + Left Click to increase", "&c - Right Click to decrease"), @@ -455,6 +455,7 @@ public enum MenusLocale implements IDataAccessor { " &7Current Kill Effect: &b", " &7Current Kill Message: &b", " &7Current Armor Trim: &b", + " &7Current Shield Pattern: &b", " ", "&aClick to open cosmetics menu"), SETTINGS_COSMETICS_SLOT("SETTINGS.SETTINGS.COSMETICS.SLOT", DataType.INT, "15"), @@ -551,6 +552,32 @@ public enum MenusLocale implements IDataAccessor { " ", "", " ", + "&cNo permission"), + SHIELD_PATTERNS_TITLE("SETTINGS.SHIELD-PATTERNS.TITLE", DataType.STRING, "&7Shield Patterns"), + SHIELD_PATTERNS_SIZE("SETTINGS.SHIELD-PATTERNS.SIZE", DataType.INT, "27"), + SHIELD_PATTERNS_FILTER("SETTINGS.SHIELD-PATTERNS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + SHIELD_PATTERNS_SLOT("SETTINGS.COSMETICS.SHIELD-PATTERNS.SLOT", DataType.INT, "13"), + SHIELD_PATTERNS_NAME("SETTINGS.COSMETICS.SHIELD-PATTERNS.NAME", DataType.STRING, "&bShield Patterns"), + SHIELD_PATTERNS_MATERIAL("SETTINGS.COSMETICS.SHIELD-PATTERNS.MATERIAL", DataType.STRING, "SHIELD"), + SHIELD_PATTERNS_LORE("SETTINGS.COSMETICS.SHIELD-PATTERNS.LORE", DataType.STRING_LIST, + "&7View all available shield pattern", " ", "&aClick to open"), + SHIELD_PATTERNS_NAME_SELECTED("SETTINGS.SHIELD-PATTERNS.SELECTED.NAME", DataType.STRING, + " &7&o(Selected)"), + SHIELD_PATTERNS_NAME_NOT_SELECTED("SETTINGS.SHIELD-PATTERNS.UNSELECTED.NAME", DataType.STRING, ""), + SHIELD_PATTERNS_SELECTED_LORE("SETTINGS.SHIELD-PATTERNS.SELECTED.LORE", DataType.STRING_LIST, + " ", + " ", + " ", + "&eCurrently Selected"), + SHIELD_PATTERNS_UNSELECTED_LORE("SETTINGS.SHIELD-PATTERNS.UNSELECTED.LORE", DataType.STRING_LIST, + " ", + " ", + " ", + "&aClick to select"), + SHIELD_PATTERNS_NO_PERMISSION_LORE("SETTINGS.SHIELD-PATTERNS.NO-PERMISSION.LORE", DataType.STRING_LIST, + " ", + " ", + " ", "&cNo permission"); private final String path; @@ -597,6 +624,12 @@ public void update() { .replaceAll("", "") ).toList() ); + SETTINGS_PING_RANGE_LORE.set( + SETTINGS_PING_RANGE_LORE.getStringList().stream().map(str -> + str + .replaceAll("", "") + ).toList() + ); if (MATCH_LIST_SIZE.getInt() == 36) MATCH_LIST_SIZE.set(54); if (MATCH_LIST_STARTING_SLOT.getInt() == 10 && MATCH_LIST_FILTER.getString().equals("FILTER")) MATCH_LIST_FILTER.set("BORDER"); if (MATCH_LIST_STARTING_SLOT.getInt() == 10) MATCH_LIST_STARTING_SLOT.set(1); diff --git a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/DataType.java b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/DataType.java index e71b7af5..16ebdb7e 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/DataType.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/DataType.java @@ -4,5 +4,6 @@ public enum DataType { BOOLEAN, STRING, STRING_LIST, + LIST, INT } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/IDataAccessor.java b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/IDataAccessor.java index 0ae65833..753b7b34 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/IDataAccessor.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/IDataAccessor.java @@ -6,6 +6,7 @@ import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -25,6 +26,14 @@ default int getInt() { return getConfigFile().getConfiguration().getInt(getPath()); } + default List getList(Class type) { + return Objects.requireNonNull(getConfigFile().getConfiguration().getList(getPath())) + .stream() + .filter(type::isInstance) + .map(type::cast) + .toList(); + } + default boolean getBoolean() { return getConfigFile().getConfiguration().getBoolean(getPath()); } @@ -52,12 +61,13 @@ default void applyHeader() { } } - default void setValue(String path, List rawValue, DataType type) { + default void setValue(String path, List rawValue, DataType type) { switch (type) { - case STRING_LIST -> getConfigFile().getConfiguration().set(path, rawValue); - case STRING -> getConfigFile().getConfiguration().set(path, rawValue.get(0)); - case INT -> getConfigFile().getConfiguration().set(path, Integer.parseInt(rawValue.get(0))); - case BOOLEAN -> getConfigFile().getConfiguration().set(path, Boolean.parseBoolean(rawValue.get(0))); + case LIST -> getConfigFile().getConfiguration().set(path, rawValue); + case STRING_LIST -> getConfigFile().getConfiguration().set(path, rawValue.stream().map(String::valueOf).toList()); + case STRING -> getConfigFile().getConfiguration().set(path, String.valueOf(rawValue.getFirst())); + case INT -> getConfigFile().getConfiguration().set(path, Integer.parseInt(String.valueOf(rawValue.getFirst()))); + case BOOLEAN -> getConfigFile().getConfiguration().set(path, Boolean.parseBoolean(String.valueOf(rawValue.getFirst()))); } } diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/CosmeticService.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/CosmeticService.java index 0e8b56dd..ceb1fe16 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/CosmeticService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/CosmeticService.java @@ -5,10 +5,12 @@ import dev.lrxh.neptune.configs.ConfigService; import dev.lrxh.neptune.feature.cosmetics.impl.Cosmetic; import dev.lrxh.neptune.feature.cosmetics.impl.CosmeticPackage; -import dev.lrxh.neptune.feature.cosmetics.impl.armortrims.ArmorTrimCosmetic; -import dev.lrxh.neptune.feature.cosmetics.impl.armortrims.ArmorTrimPackage; -import dev.lrxh.neptune.feature.cosmetics.impl.killmessage.KillMessageCosmetic; -import dev.lrxh.neptune.feature.cosmetics.impl.killmessage.KillMessagePackage; +import dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.armortrims.ArmorTrimCosmetic; +import dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.armortrims.ArmorTrimPackage; +import dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.killmessage.KillMessageCosmetic; +import dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.killmessage.KillMessagePackage; +import dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.shieldpatterns.ShieldPatternCosmetic; +import dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.shieldpatterns.ShieldPatternPackage; import dev.lrxh.neptune.providers.manager.IService; import dev.lrxh.neptune.utils.ConfigFile; @@ -31,11 +33,12 @@ public static CosmeticService get() { public void load() { KillMessageCosmetic.get().load(); ArmorTrimCosmetic.get().load(); + ShieldPatternCosmetic.get().load(); } @Override public void save() { - + ShieldPatternCosmetic.get().getConfigFile().save(); } public void registerCosmetic(ICosmetic cosmetic) { @@ -51,6 +54,9 @@ public Map getKillMessagePackages() { public Map getArmorTrimPackages() { return (Map) getPackages(ArmorTrimCosmetic.get()); } + public Map getShieldPatternPackages() { + return (Map) getPackages(ShieldPatternCosmetic.get()); + } @Override public ConfigFile getConfigFile() { diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/armortrims/ArmorTrimCosmetic.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/armortrims/ArmorTrimCosmetic.java similarity index 98% rename from Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/armortrims/ArmorTrimCosmetic.java rename to Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/armortrims/ArmorTrimCosmetic.java index cacd27c1..4acacadb 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/armortrims/ArmorTrimCosmetic.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/armortrims/ArmorTrimCosmetic.java @@ -1,4 +1,4 @@ -package dev.lrxh.neptune.feature.cosmetics.impl.armortrims; +package dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.armortrims; import dev.lrxh.api.features.cosmetics.armortrims.IArmorTrimCosmetic; import dev.lrxh.api.features.cosmetics.armortrims.IArmorTrimPackage; diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/armortrims/ArmorTrimPackage.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/armortrims/ArmorTrimPackage.java similarity index 95% rename from Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/armortrims/ArmorTrimPackage.java rename to Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/armortrims/ArmorTrimPackage.java index ee9b2ec3..fa854d0e 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/armortrims/ArmorTrimPackage.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/armortrims/ArmorTrimPackage.java @@ -1,4 +1,4 @@ -package dev.lrxh.neptune.feature.cosmetics.impl.armortrims; +package dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.armortrims; import dev.lrxh.api.features.cosmetics.armortrims.IArmorTrimPackage; import dev.lrxh.neptune.feature.cosmetics.impl.CosmeticPackage; diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/killmessage/KillMessageCosmetic.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/killmessage/KillMessageCosmetic.java similarity index 93% rename from Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/killmessage/KillMessageCosmetic.java rename to Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/killmessage/KillMessageCosmetic.java index 95024602..cc9591ef 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/killmessage/KillMessageCosmetic.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/killmessage/KillMessageCosmetic.java @@ -1,8 +1,9 @@ -package dev.lrxh.neptune.feature.cosmetics.impl.killmessage; +package dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.killmessage; import dev.lrxh.api.features.cosmetics.killmessages.IKillMessageCosmetic; import dev.lrxh.api.features.cosmetics.killmessages.IKillMessagePackage; import dev.lrxh.neptune.configs.ConfigService; +import dev.lrxh.neptune.feature.cosmetics.CosmeticService; import dev.lrxh.neptune.feature.cosmetics.impl.Cosmetic; import lombok.Getter; import org.bukkit.Material; @@ -42,6 +43,7 @@ public void load() { packages.put(packageName, new KillMessagePackage(packageName, displayName, material, description, slot, messages)); } } + CosmeticService.get().registerCosmetic(this); } public KillMessagePackage getDefault() { diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/killmessage/KillMessagePackage.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/killmessage/KillMessagePackage.java similarity index 93% rename from Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/killmessage/KillMessagePackage.java rename to Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/killmessage/KillMessagePackage.java index 8c90602e..1b7dc6d0 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/killmessage/KillMessagePackage.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/killmessage/KillMessagePackage.java @@ -1,4 +1,4 @@ -package dev.lrxh.neptune.feature.cosmetics.impl.killmessage; +package dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.killmessage; import dev.lrxh.api.features.cosmetics.killmessages.IKillMessagePackage; import dev.lrxh.neptune.feature.cosmetics.impl.CosmeticPackage; diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/shieldpatterns/ShieldPatternCosmetic.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/shieldpatterns/ShieldPatternCosmetic.java new file mode 100644 index 00000000..647fcd53 --- /dev/null +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/shieldpatterns/ShieldPatternCosmetic.java @@ -0,0 +1,79 @@ +package dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.shieldpatterns; + +import dev.lrxh.api.features.cosmetics.shieldpatterns.IShieldPatternCosmetic; +import dev.lrxh.api.features.cosmetics.shieldpatterns.IShieldPatternPackage; +import dev.lrxh.neptune.configs.ConfigService; +import dev.lrxh.neptune.feature.cosmetics.CosmeticService; +import dev.lrxh.neptune.feature.cosmetics.impl.Cosmetic; +import dev.lrxh.neptune.utils.ConfigFile; +import dev.lrxh.neptune.utils.ItemUtils; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import lombok.Getter; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.block.banner.Pattern; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.util.*; + +@Getter +public class ShieldPatternCosmetic extends Cosmetic implements IShieldPatternCosmetic { + private static ShieldPatternCosmetic instance; + public static ShieldPatternCosmetic get() { + if (instance == null) instance = new ShieldPatternCosmetic(); + return instance; + } + + public String key() { + return "shieldpatterns"; + } + + public Map packages = new HashMap<>(); + public void load() { + packages.clear(); + FileConfiguration shieldPatternsConfig = getConfig(); + if (shieldPatternsConfig.contains("SHIELD_PATTERNS")) { + for (String packageName : getKeys(shieldPatternsConfig, "SHIELD_PATTERNS")) { + String path = "SHIELD_PATTERNS." + packageName + "."; + String displayName = shieldPatternsConfig.getString(path + "DISPLAY_NAME"); + Material material = ItemUtils.getMaterial(Objects.requireNonNull(shieldPatternsConfig.getString(path + "MATERIAL"))); + List description = shieldPatternsConfig.getStringList(path + "DESCRIPTION"); + int slot = shieldPatternsConfig.getInt(path + "SLOT"); + List patterns = new ArrayList<>(); + List configPatterns = shieldPatternsConfig.getList(path + "PATTERNS"); + if (configPatterns != null) { + for (Object pattern : configPatterns) { + Map map = (Map) pattern; + patterns.add(new Pattern(DyeColor.valueOf(map.get("DYE")), + Objects.requireNonNull(RegistryAccess.registryAccess().getRegistry(RegistryKey.BANNER_PATTERN) + .get(Objects.requireNonNull(NamespacedKey.fromString((map.get("PATTERN")))))))); + } + } + + packages.put(packageName, new ShieldPatternPackage(packageName, displayName, material, description, slot, patterns)); + } + } + CosmeticService.get().registerCosmetic(this); + } + + public ShieldPatternPackage getDefault() { + return packages.get("DEFAULT"); + } + public ShieldPatternPackage getOrDefault(String packageName) { + if (packages.containsKey(packageName)) return packages.get(packageName); + return getDefault(); + } + + public void addPackage(IShieldPatternPackage shieldPatternPackage) { + packages.put(shieldPatternPackage.getName(), (ShieldPatternPackage) shieldPatternPackage); + } + public YamlConfiguration getConfig() { + return getConfigFile().getConfiguration(); + } + public ConfigFile getConfigFile() { + return ConfigService.get().getShieldPatternsConfig(); + } +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/shieldpatterns/ShieldPatternPackage.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/shieldpatterns/ShieldPatternPackage.java new file mode 100644 index 00000000..ac201df0 --- /dev/null +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/cosmetics/shieldpatterns/ShieldPatternPackage.java @@ -0,0 +1,30 @@ +package dev.lrxh.neptune.feature.cosmetics.impl.cosmetics.shieldpatterns; + +import dev.lrxh.api.features.cosmetics.shieldpatterns.IShieldPatternPackage; +import dev.lrxh.neptune.feature.cosmetics.impl.CosmeticPackage; +import lombok.Getter; +import org.bukkit.Material; +import org.bukkit.block.banner.Pattern; + +import java.util.List; + +@Getter +public class ShieldPatternPackage extends CosmeticPackage implements IShieldPatternPackage { + private final List patterns; + + public ShieldPatternPackage( + String name, + String displayName, + Material material, + List description, + int slot, + List patterns + ) { + super(name, displayName, material, description, slot); + this.patterns = patterns; + } + + public String permission() { + return "neptune.cosmetics.killmessages." + name.toLowerCase(); + } +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/CosmeticsManageMenu.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/CosmeticsManageMenu.java index ab5efc8d..63e4850c 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/CosmeticsManageMenu.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/CosmeticsManageMenu.java @@ -4,6 +4,7 @@ import dev.lrxh.neptune.feature.cosmetics.menu.armorTrims.ArmorTrimsMenu; import dev.lrxh.neptune.feature.cosmetics.menu.killEffects.KillEffectsMenu; import dev.lrxh.neptune.feature.cosmetics.menu.killMessages.KillMessagesMenu; +import dev.lrxh.neptune.feature.cosmetics.menu.shieldPatterns.ShieldPatternMenu; import dev.lrxh.neptune.utils.menu.Button; import dev.lrxh.neptune.utils.menu.Filter; import dev.lrxh.neptune.utils.menu.Menu; @@ -42,6 +43,13 @@ public List