From 72d33ed7a22444d319d97f96376b46b6973827b8 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Thu, 16 Nov 2023 13:06:24 +0100 Subject: [PATCH] Implements the scrapper edit command --- .../blacksmith/BlacksmithPlugin.java | 11 ++ .../blacksmith/command/EditCommand.java | 171 ++++++++++++++++++ .../blacksmith/command/PresetCommand.java | 2 +- .../blacksmith/BlackSmithEditCommand.java | 124 ++----------- .../command/scrapper/ScrapperEditCommand.java | 35 +++- .../scrapper/ScrapperEditTabCompleter.java | 52 +++++- .../blacksmith/config/TraitSettings.java | 2 +- .../blacksmith/BlacksmithNPCSettings.java | 3 +- .../config/scrapper/ScrapperNPCSettings.java | 3 +- .../BlacksmithTranslatableMessage.java | 10 +- .../blacksmith/formatting/ItemType.java | 6 +- .../blacksmith/formatting/TimeFormatter.java | 2 +- .../blacksmith/trait/BlacksmithTrait.java | 3 +- .../blacksmith/trait/CustomTrait.java | 18 +- .../blacksmith/trait/ScrapperTrait.java | 3 +- 15 files changed, 302 insertions(+), 143 deletions(-) create mode 100644 src/main/java/net/knarcraft/blacksmith/command/EditCommand.java diff --git a/src/main/java/net/knarcraft/blacksmith/BlacksmithPlugin.java b/src/main/java/net/knarcraft/blacksmith/BlacksmithPlugin.java index afe4d35..48d6a87 100644 --- a/src/main/java/net/knarcraft/blacksmith/BlacksmithPlugin.java +++ b/src/main/java/net/knarcraft/blacksmith/BlacksmithPlugin.java @@ -19,6 +19,7 @@ import net.knarcraft.blacksmith.listener.PlayerListener; import net.knarcraft.blacksmith.manager.EconomyManager; import net.knarcraft.blacksmith.trait.BlacksmithTrait; import net.knarcraft.knarlib.formatting.StringFormatter; +import net.knarcraft.knarlib.formatting.TranslatableMessage; import net.knarcraft.knarlib.formatting.TranslatableTimeUnit; import net.knarcraft.knarlib.formatting.Translator; import net.knarcraft.knarlib.util.UpdateChecker; @@ -73,6 +74,16 @@ public class BlacksmithPlugin extends JavaPlugin { return instance; } + /** + * Gets the translation of the given translatable message + * + * @param translatableMessage

The message to translate

+ * @return

The message, in the language specified in the configuration

+ */ + public static @NotNull String translate(TranslatableMessage translatableMessage) { + return BlacksmithPlugin.getTranslator().getTranslatedMessage(translatableMessage); + } + /** * Gets settings for the blacksmith plugin's blacksmiths * diff --git a/src/main/java/net/knarcraft/blacksmith/command/EditCommand.java b/src/main/java/net/knarcraft/blacksmith/command/EditCommand.java new file mode 100644 index 0000000..d02c00e --- /dev/null +++ b/src/main/java/net/knarcraft/blacksmith/command/EditCommand.java @@ -0,0 +1,171 @@ +package net.knarcraft.blacksmith.command; + +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.npc.NPC; +import net.knarcraft.blacksmith.BlacksmithPlugin; +import net.knarcraft.blacksmith.config.Setting; +import net.knarcraft.blacksmith.config.SettingValueType; +import net.knarcraft.blacksmith.config.Settings; +import net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage; +import net.knarcraft.blacksmith.trait.CustomTrait; +import net.knarcraft.blacksmith.util.InputParsingHelper; +import net.knarcraft.blacksmith.util.TypeValidationHelper; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Arrays; +import java.util.logging.Level; + +import static net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage.getCurrentValueMessage; +import static net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage.getValueChangedMessage; + +/** + * A generic implementation of the edit command + * + * @param

The type of trait to edit

+ * @param

The type of setting the trait uses

+ */ +public abstract class EditCommand, L extends Setting> implements CommandExecutor { + + protected Class traitClass; + + public EditCommand(Class traitClass) { + this.traitClass = traitClass; + } + + /** + * Gets the setting corresponding to the given input + * + * @param input

The input given by the user

+ * @return

The corresponding setting, or null if not recognized

+ */ + public abstract L getSetting(String input); + + /** + * Gets the global settings to use + * + * @return

The global settings

+ */ + public abstract @NotNull Settings getGlobalSettings(); + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String s, + @NotNull String[] args) { + NPC npc = CitizensAPI.getDefaultNPCSelector().getSelected(sender); + if (npc == null || !npc.hasTrait(traitClass)) { + BlacksmithPlugin.getStringFormatter().displayErrorMessage(sender, + BlacksmithTranslatableMessage.NO_NPC_SELECTED); + return true; + } + + if (args.length < 1) { + return false; + } + + K trait = npc.getTraitNullable(traitClass); + if (trait == null) { + return false; + } + + L setting = getSetting(args[0]); + if (setting != null) { + String newValue = args.length < 2 ? null : args[1]; + //This makes sure all arguments are treated as a sentence + if (setting.getValueType() == SettingValueType.STRING && args.length > 2) { + newValue = String.join(" ", Arrays.asList(args).subList(1, args.length)); + } + Settings settings = getGlobalSettings(); + return displayOrChangeNPCSetting(trait, setting, settings, newValue, sender); + } else { + return false; + } + } + + /** + * Changes the given NPC setting, or displays the current value if a new value isn't specified + * + * @param trait

The trait belonging to the selected NPC

+ * @param setting

The NPC setting to change

+ * @param globalSettings

The global settings to get default values from

+ * @param newValue

The value to change the setting to

+ * @param sender

The command sender to notify about results

+ * @return

True if everything went successfully

+ */ + private boolean displayOrChangeNPCSetting(@NotNull CustomTrait trait, + @NotNull L setting, + @NotNull Settings globalSettings, + @Nullable String newValue, + @NotNull CommandSender sender) { + if (newValue == null) { + //Display the current value of the setting + displayNPCSetting(trait, setting, globalSettings, sender); + } else { + //If an empty value or null, clear the value instead of changing it + if (InputParsingHelper.isEmpty(newValue)) { + newValue = null; + } else { + //Abort if an invalid value is given + boolean isValidType = TypeValidationHelper.isValid(setting.getValueType(), newValue, sender); + if (!isValidType) { + return false; + } + newValue = ChatColor.translateAlternateColorCodes('&', newValue); + } + + //Change the setting + Settings settings = trait.getTraitSettings(); + if (settings == null) { + BlacksmithPlugin.getInstance().getLogger().log(Level.SEVERE, "Settings for a CustomTrait has not " + + "been initialized! Please inform the developer!"); + return false; + } + settings.changeValue(setting, newValue); + BlacksmithPlugin.getStringFormatter().displaySuccessMessage(sender, + getValueChangedMessage(setting.getCommandName(), String.valueOf(newValue))); + //Save the changes immediately to prevent data loss on server crash + CitizensAPI.getNPCRegistry().saveToStore(); + } + return true; + } + + /** + * Displays the current value of the given NPC setting + * + * @param trait

The trait of the NPC to get the value from

+ * @param setting

The NPC setting to see the value of

+ * @param globalSettings

The global settings to get default values from

+ * @param sender

The command sender to display the value to

+ */ + private void displayNPCSetting(@NotNull CustomTrait trait, + @NotNull L setting, + @NotNull Settings globalSettings, + @NotNull CommandSender sender) { + Settings settings = trait.getTraitSettings(); + if (settings == null) { + BlacksmithPlugin.getInstance().getLogger().log(Level.SEVERE, "Settings for a CustomTrait has not " + + "been initialized! Please inform the developer!"); + return; + } + String rawValue = String.valueOf(settings.getRawValue(setting)); + if (InputParsingHelper.isEmpty(rawValue)) { + //Display the default value, if no custom value has been specified + rawValue = String.valueOf(globalSettings.getRawValue(setting)); + BlacksmithPlugin.getStringFormatter().displaySuccessMessage(sender, + getCurrentValueMessage(setting.getCommandName(), rawValue)); + } else { + //Add a marker if the value has been customized + String marker = BlacksmithPlugin.translate(BlacksmithTranslatableMessage.SETTING_OVERRIDDEN_MARKER); + BlacksmithPlugin.getStringFormatter().displaySuccessMessage(sender, + getCurrentValueMessage(setting.getCommandName(), rawValue) + marker); + } + if (setting.isMessage()) { + sender.sendMessage(BlacksmithTranslatableMessage.getRawValueMessage( + rawValue.replace(ChatColor.COLOR_CHAR, '&'))); + } + } + +} diff --git a/src/main/java/net/knarcraft/blacksmith/command/PresetCommand.java b/src/main/java/net/knarcraft/blacksmith/command/PresetCommand.java index a63207b..e451e9d 100644 --- a/src/main/java/net/knarcraft/blacksmith/command/PresetCommand.java +++ b/src/main/java/net/knarcraft/blacksmith/command/PresetCommand.java @@ -57,7 +57,7 @@ public class PresetCommand implements CommandExecutor { materialNames.add(material.name()); } BlacksmithPlugin.getStringFormatter().displaySuccessMessage(sender, StringFormatter.replacePlaceholder( - BlacksmithPlugin.getTranslator().getTranslatedMessage(BlacksmithTranslatableMessage.PRESET_MATERIALS), + BlacksmithPlugin.translate(BlacksmithTranslatableMessage.PRESET_MATERIALS), "{materials}", String.join(", ", materialNames))); return true; } diff --git a/src/main/java/net/knarcraft/blacksmith/command/blacksmith/BlackSmithEditCommand.java b/src/main/java/net/knarcraft/blacksmith/command/blacksmith/BlackSmithEditCommand.java index 8bf21e6..8a8ee1c 100644 --- a/src/main/java/net/knarcraft/blacksmith/command/blacksmith/BlackSmithEditCommand.java +++ b/src/main/java/net/knarcraft/blacksmith/command/blacksmith/BlackSmithEditCommand.java @@ -1,126 +1,32 @@ package net.knarcraft.blacksmith.command.blacksmith; -import net.citizensnpcs.api.CitizensAPI; -import net.citizensnpcs.api.npc.NPC; import net.knarcraft.blacksmith.BlacksmithPlugin; -import net.knarcraft.blacksmith.config.SettingValueType; +import net.knarcraft.blacksmith.command.EditCommand; +import net.knarcraft.blacksmith.config.Settings; import net.knarcraft.blacksmith.config.blacksmith.BlacksmithSetting; -import net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage; import net.knarcraft.blacksmith.trait.BlacksmithTrait; -import net.knarcraft.blacksmith.util.InputParsingHelper; -import net.knarcraft.blacksmith.util.TypeValidationHelper; -import net.md_5.bungee.api.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Arrays; - -import static net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage.getCurrentValueMessage; -import static net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage.getValueChangedMessage; /** * The main command used for blacksmith editing */ -public class BlackSmithEditCommand implements CommandExecutor { +public class BlackSmithEditCommand extends EditCommand { + + /** + * Instantiates a new blacksmith edit command + */ + public BlackSmithEditCommand() { + super(BlacksmithTrait.class); + } @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, - @NotNull String[] args) { - NPC npc = CitizensAPI.getDefaultNPCSelector().getSelected(sender); - if (npc == null || !npc.hasTrait(BlacksmithTrait.class)) { - BlacksmithPlugin.getStringFormatter().displayErrorMessage(sender, - BlacksmithTranslatableMessage.NO_NPC_SELECTED); - return true; - } - - if (args.length < 1) { - return false; - } - - BlacksmithTrait blacksmithTrait = npc.getTraitNullable(BlacksmithTrait.class); - - BlacksmithSetting setting = BlacksmithSetting.getSetting(args[0]); - if (setting != null) { - String newValue = args.length < 2 ? null : args[1]; - //This makes sure all arguments are treated as a sentence - if (setting.getValueType() == SettingValueType.STRING && args.length > 2) { - newValue = String.join(" ", Arrays.asList(args).subList(1, args.length)); - } - return displayOrChangeNPCSetting(blacksmithTrait, setting, newValue, sender); - } else { - return false; - } + public BlacksmithSetting getSetting(String input) { + return BlacksmithSetting.getSetting(input); } - /** - * Changes the given NPC setting, or displays the current value if a new value isn't specified - * - * @param blacksmithTrait

The blacksmith trait belonging to the selected NPC

- * @param blacksmithSetting

The NPC setting to change

- * @param newValue

The value to change the setting to

- * @param sender

The command sender to notify about results

- * @return

True if everything went successfully

- */ - private boolean displayOrChangeNPCSetting(@NotNull BlacksmithTrait blacksmithTrait, - @NotNull BlacksmithSetting blacksmithSetting, - @Nullable String newValue, - @NotNull CommandSender sender) { - if (newValue == null) { - //Display the current value of the setting - displayNPCSetting(blacksmithTrait, blacksmithSetting, sender); - } else { - //If an empty value or null, clear the value instead of changing it - if (InputParsingHelper.isEmpty(newValue)) { - newValue = null; - } else { - //Abort if an invalid value is given - boolean isValidType = TypeValidationHelper.isValid(blacksmithSetting.getValueType(), newValue, sender); - if (!isValidType) { - return false; - } - newValue = ChatColor.translateAlternateColorCodes('&', newValue); - } - - //Change the setting - blacksmithTrait.getSettings().changeValue(blacksmithSetting, newValue); - BlacksmithPlugin.getStringFormatter().displaySuccessMessage(sender, - getValueChangedMessage(blacksmithSetting.getCommandName(), String.valueOf(newValue))); - //Save the changes immediately to prevent data loss on server crash - CitizensAPI.getNPCRegistry().saveToStore(); - } - return true; - } - - /** - * Displays the current value of the given NPC setting - * - * @param blacksmithTrait

The blacksmith trait of the NPC to get the value from

- * @param blacksmithSetting

The NPC setting to see the value of

- * @param sender

The command sender to display the value to

- */ - private void displayNPCSetting(@NotNull BlacksmithTrait blacksmithTrait, - @NotNull BlacksmithSetting blacksmithSetting, @NotNull CommandSender sender) { - String rawValue = String.valueOf(blacksmithTrait.getSettings().getRawValue(blacksmithSetting)); - if (InputParsingHelper.isEmpty(rawValue)) { - //Display the default value, if no custom value has been specified - rawValue = String.valueOf(BlacksmithPlugin.getInstance().getGlobalBlacksmithSettings().getRawValue( - blacksmithSetting)); - BlacksmithPlugin.getStringFormatter().displaySuccessMessage(sender, - getCurrentValueMessage(blacksmithSetting.getCommandName(), rawValue)); - } else { - //Add a marker if the value has been customized - String marker = BlacksmithPlugin.getTranslator().getTranslatedMessage( - BlacksmithTranslatableMessage.SETTING_OVERRIDDEN_MARKER); - BlacksmithPlugin.getStringFormatter().displaySuccessMessage(sender, - getCurrentValueMessage(blacksmithSetting.getCommandName(), rawValue) + marker); - } - if (blacksmithSetting.getPath().startsWith("defaults.messages")) { - sender.sendMessage(BlacksmithTranslatableMessage.getRawValueMessage( - rawValue.replace(ChatColor.COLOR_CHAR, '&'))); - } + @Override + public @NotNull Settings getGlobalSettings() { + return BlacksmithPlugin.getInstance().getGlobalBlacksmithSettings(); } } diff --git a/src/main/java/net/knarcraft/blacksmith/command/scrapper/ScrapperEditCommand.java b/src/main/java/net/knarcraft/blacksmith/command/scrapper/ScrapperEditCommand.java index 6b142af..7a53e20 100644 --- a/src/main/java/net/knarcraft/blacksmith/command/scrapper/ScrapperEditCommand.java +++ b/src/main/java/net/knarcraft/blacksmith/command/scrapper/ScrapperEditCommand.java @@ -1,15 +1,32 @@ package net.knarcraft.blacksmith.command.scrapper; -import org.apache.commons.lang.NotImplementedException; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; +import net.knarcraft.blacksmith.BlacksmithPlugin; +import net.knarcraft.blacksmith.command.EditCommand; +import net.knarcraft.blacksmith.config.Settings; +import net.knarcraft.blacksmith.config.scrapper.ScrapperSetting; +import net.knarcraft.blacksmith.trait.ScrapperTrait; import org.jetbrains.annotations.NotNull; -public class ScrapperEditCommand implements CommandExecutor { - @Override - public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, - @NotNull String[] strings) { - throw new NotImplementedException(); +/** + * The main command used for scrapper editing + */ +public class ScrapperEditCommand extends EditCommand { + + /** + * Instantiates a new scrapper edit command + */ + public ScrapperEditCommand() { + super(ScrapperTrait.class); } + + @Override + public ScrapperSetting getSetting(String input) { + return ScrapperSetting.getSetting(input); + } + + @Override + public @NotNull Settings getGlobalSettings() { + return BlacksmithPlugin.getInstance().getGlobalScrapperSettings(); + } + } diff --git a/src/main/java/net/knarcraft/blacksmith/command/scrapper/ScrapperEditTabCompleter.java b/src/main/java/net/knarcraft/blacksmith/command/scrapper/ScrapperEditTabCompleter.java index e7f9174..2d8f11c 100644 --- a/src/main/java/net/knarcraft/blacksmith/command/scrapper/ScrapperEditTabCompleter.java +++ b/src/main/java/net/knarcraft/blacksmith/command/scrapper/ScrapperEditTabCompleter.java @@ -1,18 +1,62 @@ package net.knarcraft.blacksmith.command.scrapper; -import org.apache.commons.lang.NotImplementedException; +import net.knarcraft.blacksmith.config.scrapper.ScrapperSetting; +import net.knarcraft.blacksmith.util.TabCompleteValuesHelper; +import net.knarcraft.knarlib.util.TabCompletionHelper; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.List; +/** + * The tab completer for the scrapper editing command + */ public class ScrapperEditTabCompleter implements TabCompleter { + @Override - public @Nullable List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, - @NotNull String s, @NotNull String[] strings) { - throw new NotImplementedException(); + public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String s, @NotNull String[] args) { + if (!sender.hasPermission("blacksmith.edit")) { + return new ArrayList<>(); + } + + List npcSettings = new ArrayList<>(); + for (ScrapperSetting setting : ScrapperSetting.values()) { + if (setting.isPerNPC()) { + npcSettings.add(setting.getCommandName()); + } + } + + if (args.length == 1) { + return TabCompletionHelper.filterMatchingContains(npcSettings, args[0]); + } else { + if (npcSettings.contains(args[0]) && args.length == 2) { + return tabCompleteCommandValues(args[0], args[1]); + } else { + return new ArrayList<>(); + } + } } + + /** + * Tab completes the values available for the given command + * + * @param commandName

The name of the used command

+ * @param commandValue

The command value used to filter tab-completions

+ * @return

Some valid options for the command's argument

+ */ + private @Nullable List tabCompleteCommandValues(@NotNull String commandName, @NotNull String commandValue) { + ScrapperSetting setting = ScrapperSetting.getSetting(commandName); + if (setting != null) { + return TabCompletionHelper.filterMatchingContains(TabCompleteValuesHelper.getTabCompletions( + setting.getValueType()), commandValue); + } else { + return null; + } + } + } diff --git a/src/main/java/net/knarcraft/blacksmith/config/TraitSettings.java b/src/main/java/net/knarcraft/blacksmith/config/TraitSettings.java index 8eb335a..4ee2d40 100644 --- a/src/main/java/net/knarcraft/blacksmith/config/TraitSettings.java +++ b/src/main/java/net/knarcraft/blacksmith/config/TraitSettings.java @@ -1,6 +1,6 @@ package net.knarcraft.blacksmith.config; -public interface TraitSettings { +public interface TraitSettings extends Settings { /** * Gets whether to disable the action cool-down diff --git a/src/main/java/net/knarcraft/blacksmith/config/blacksmith/BlacksmithNPCSettings.java b/src/main/java/net/knarcraft/blacksmith/config/blacksmith/BlacksmithNPCSettings.java index 31c244d..86c5cab 100644 --- a/src/main/java/net/knarcraft/blacksmith/config/blacksmith/BlacksmithNPCSettings.java +++ b/src/main/java/net/knarcraft/blacksmith/config/blacksmith/BlacksmithNPCSettings.java @@ -3,7 +3,6 @@ package net.knarcraft.blacksmith.config.blacksmith; import net.citizensnpcs.api.util.DataKey; import net.knarcraft.blacksmith.BlacksmithPlugin; import net.knarcraft.blacksmith.config.SettingValueType; -import net.knarcraft.blacksmith.config.Settings; import net.knarcraft.blacksmith.config.SmithPreset; import net.knarcraft.blacksmith.config.TraitSettings; import net.knarcraft.blacksmith.util.ConfigHelper; @@ -24,7 +23,7 @@ import java.util.logging.Level; /** * A class which keeps track of all Blacksmith settings/config values for one NPC */ -public class BlacksmithNPCSettings implements TraitSettings, Settings { +public class BlacksmithNPCSettings implements TraitSettings { private final List reforgeAbleItems = new ArrayList<>(); private final List enchantmentBlocklist = new ArrayList<>(); diff --git a/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java b/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java index 7f9780c..901f6fe 100644 --- a/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java +++ b/src/main/java/net/knarcraft/blacksmith/config/scrapper/ScrapperNPCSettings.java @@ -2,14 +2,13 @@ package net.knarcraft.blacksmith.config.scrapper; import net.citizensnpcs.api.util.DataKey; import net.knarcraft.blacksmith.config.SettingValueType; -import net.knarcraft.blacksmith.config.Settings; import net.knarcraft.blacksmith.config.TraitSettings; import net.knarcraft.blacksmith.util.ConfigHelper; import java.util.HashMap; import java.util.Map; -public class ScrapperNPCSettings implements TraitSettings, Settings { +public class ScrapperNPCSettings implements TraitSettings { private final Map currentValues = new HashMap<>(); private final GlobalScrapperSettings globalScrapperSettings; diff --git a/src/main/java/net/knarcraft/blacksmith/formatting/BlacksmithTranslatableMessage.java b/src/main/java/net/knarcraft/blacksmith/formatting/BlacksmithTranslatableMessage.java index 678f66d..da903a6 100644 --- a/src/main/java/net/knarcraft/blacksmith/formatting/BlacksmithTranslatableMessage.java +++ b/src/main/java/net/knarcraft/blacksmith/formatting/BlacksmithTranslatableMessage.java @@ -144,7 +144,7 @@ public enum BlacksmithTranslatableMessage implements TranslatableMessage { * @return

The message to display

*/ public static String getRawValueMessage(String rawValue) { - return StringFormatter.replacePlaceholder(BlacksmithPlugin.getTranslator().getTranslatedMessage( + return StringFormatter.replacePlaceholder(BlacksmithPlugin.translate( BlacksmithTranslatableMessage.RAW_VALUE), "{rawValue}", rawValue); } @@ -156,7 +156,7 @@ public enum BlacksmithTranslatableMessage implements TranslatableMessage { * @return

The string to display to a user

*/ public static String getValueChangedMessage(String setting, String newValue) { - return StringFormatter.replacePlaceholders(BlacksmithPlugin.getTranslator().getTranslatedMessage( + return StringFormatter.replacePlaceholders(BlacksmithPlugin.translate( BlacksmithTranslatableMessage.VALUE_CHANGED), new String[]{"{setting}", "{newValue}"}, new String[]{setting, newValue}); } @@ -171,7 +171,7 @@ public enum BlacksmithTranslatableMessage implements TranslatableMessage { * @return

The string to display to a user

*/ public static String getItemValueChangedMessage(String setting, ItemType itemType, String item, String newValue) { - return StringFormatter.replacePlaceholders(BlacksmithPlugin.getTranslator().getTranslatedMessage( + return StringFormatter.replacePlaceholders(BlacksmithPlugin.translate( BlacksmithTranslatableMessage.VALUE_FOR_ITEM_CHANGED), new String[]{"{setting}", "{itemType}", "{item}", "{newValue}"}, new String[]{setting, itemType.getItemTypeName(), item, newValue}); @@ -185,7 +185,7 @@ public enum BlacksmithTranslatableMessage implements TranslatableMessage { * @return

The string to display to a user

*/ public static String getCurrentValueMessage(String setting, String currentValue) { - return StringFormatter.replacePlaceholders(BlacksmithPlugin.getTranslator().getTranslatedMessage( + return StringFormatter.replacePlaceholders(BlacksmithPlugin.translate( BlacksmithTranslatableMessage.CURRENT_VALUE), new String[]{"{setting}", "{currentValue}"}, new String[]{setting, currentValue}); } @@ -200,7 +200,7 @@ public enum BlacksmithTranslatableMessage implements TranslatableMessage { * @return

The string to display to a user

*/ public static String getItemCurrentValueMessage(String setting, ItemType itemType, String item, String currentValue) { - return StringFormatter.replacePlaceholders(BlacksmithPlugin.getTranslator().getTranslatedMessage( + return StringFormatter.replacePlaceholders(BlacksmithPlugin.translate( BlacksmithTranslatableMessage.CURRENT_VALUE_FOR_ITEM), new String[]{"{setting}", "{itemType}", "{item}", "{currentValue}"}, new String[]{setting, itemType.getItemTypeName(), item, currentValue}); diff --git a/src/main/java/net/knarcraft/blacksmith/formatting/ItemType.java b/src/main/java/net/knarcraft/blacksmith/formatting/ItemType.java index c0d24d4..235754a 100644 --- a/src/main/java/net/knarcraft/blacksmith/formatting/ItemType.java +++ b/src/main/java/net/knarcraft/blacksmith/formatting/ItemType.java @@ -17,10 +17,8 @@ public enum ItemType { */ public String getItemTypeName() { return switch (this) { - case MATERIAL -> BlacksmithPlugin.getTranslator().getTranslatedMessage( - BlacksmithTranslatableMessage.ITEM_TYPE_MATERIAL); - case ENCHANTMENT -> BlacksmithPlugin.getTranslator().getTranslatedMessage( - BlacksmithTranslatableMessage.ITEM_TYPE_ENCHANTMENT); + case MATERIAL -> BlacksmithPlugin.translate(BlacksmithTranslatableMessage.ITEM_TYPE_MATERIAL); + case ENCHANTMENT -> BlacksmithPlugin.translate(BlacksmithTranslatableMessage.ITEM_TYPE_ENCHANTMENT); }; } diff --git a/src/main/java/net/knarcraft/blacksmith/formatting/TimeFormatter.java b/src/main/java/net/knarcraft/blacksmith/formatting/TimeFormatter.java index 4936ead..51a625c 100644 --- a/src/main/java/net/knarcraft/blacksmith/formatting/TimeFormatter.java +++ b/src/main/java/net/knarcraft/blacksmith/formatting/TimeFormatter.java @@ -53,7 +53,7 @@ public final class TimeFormatter { * @return

Text describing the time interval

*/ private static String getMessageFromInterval(TimeInterval interval) { - String text = BlacksmithPlugin.getTranslator().getTranslatedMessage(BlacksmithTranslatableMessage.valueOf(interval.name())); + String text = BlacksmithPlugin.translate(BlacksmithTranslatableMessage.valueOf(interval.name())); //Choose a random entry if a comma-separated list is provided if (text.contains(",")) { diff --git a/src/main/java/net/knarcraft/blacksmith/trait/BlacksmithTrait.java b/src/main/java/net/knarcraft/blacksmith/trait/BlacksmithTrait.java index 2df69b1..33acc87 100644 --- a/src/main/java/net/knarcraft/blacksmith/trait/BlacksmithTrait.java +++ b/src/main/java/net/knarcraft/blacksmith/trait/BlacksmithTrait.java @@ -3,6 +3,7 @@ package net.knarcraft.blacksmith.trait; import net.citizensnpcs.api.util.DataKey; import net.knarcraft.blacksmith.BlacksmithPlugin; import net.knarcraft.blacksmith.config.blacksmith.BlacksmithNPCSettings; +import net.knarcraft.blacksmith.config.blacksmith.BlacksmithSetting; import net.knarcraft.blacksmith.manager.EconomyManager; import net.knarcraft.blacksmith.util.ItemHelper; import net.knarcraft.knarlib.formatting.StringFormatter; @@ -19,7 +20,7 @@ import static net.knarcraft.blacksmith.formatting.BlacksmithStringFormatter.send /** * The class representing the Blacksmith NPC trait */ -public class BlacksmithTrait extends CustomTrait { +public class BlacksmithTrait extends CustomTrait { private final BlacksmithNPCSettings config; /** diff --git a/src/main/java/net/knarcraft/blacksmith/trait/CustomTrait.java b/src/main/java/net/knarcraft/blacksmith/trait/CustomTrait.java index f3098ee..aec9947 100644 --- a/src/main/java/net/knarcraft/blacksmith/trait/CustomTrait.java +++ b/src/main/java/net/knarcraft/blacksmith/trait/CustomTrait.java @@ -2,6 +2,8 @@ package net.knarcraft.blacksmith.trait; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.trait.Trait; +import net.knarcraft.blacksmith.config.Setting; +import net.knarcraft.blacksmith.config.Settings; import net.knarcraft.blacksmith.config.TraitSettings; import net.knarcraft.blacksmith.formatting.TimeFormatter; import net.knarcraft.blacksmith.manager.EconomyManager; @@ -10,6 +12,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Calendar; import java.util.HashMap; @@ -22,10 +25,10 @@ import static net.knarcraft.blacksmith.formatting.BlacksmithStringFormatter.send /** * A custom trait that utilizes sessions */ -public abstract class CustomTrait extends Trait { +public abstract class CustomTrait extends Trait { protected Session session; - protected TraitSettings config; + protected TraitSettings config; protected final Map coolDowns = new HashMap<>(); protected long currentSessionStartTime = System.currentTimeMillis(); @@ -43,10 +46,19 @@ public abstract class CustomTrait extends Trait { * * @param config

The trait settings to use

*/ - protected void setTraitSettings(TraitSettings config) { + protected void setTraitSettings(TraitSettings config) { this.config = config; } + /** + * Gets the settings used by this trait + * + * @return

The settings used by this trait

+ */ + public @Nullable Settings getTraitSettings() { + return this.config; + } + /** * Starts a new session, and prepares to repair the player's item * diff --git a/src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java b/src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java index 25ae2d4..9bc9342 100644 --- a/src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java +++ b/src/main/java/net/knarcraft/blacksmith/trait/ScrapperTrait.java @@ -3,6 +3,7 @@ package net.knarcraft.blacksmith.trait; import net.citizensnpcs.api.util.DataKey; import net.knarcraft.blacksmith.BlacksmithPlugin; import net.knarcraft.blacksmith.config.scrapper.ScrapperNPCSettings; +import net.knarcraft.blacksmith.config.scrapper.ScrapperSetting; import org.apache.commons.lang.NotImplementedException; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -11,7 +12,7 @@ import org.jetbrains.annotations.NotNull; /** * The class representing a scrapper NPC trait */ -public class ScrapperTrait extends CustomTrait { +public class ScrapperTrait extends CustomTrait { //TODO: A scrapper will take items and turn them into the base ingredients //TODO: If an item is enchanted, give an appropriate amount of exp