package net.knarcraft.blacksmith.config.scrapper; import net.knarcraft.blacksmith.config.Setting; import net.knarcraft.blacksmith.config.SettingValueType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public enum ScrapperSetting implements Setting { /** * The setting for whether the NPC should drop an item to the ground when finished * *

If set to false, the item will be directly put in the player's inventory instead

*/ DROP_ITEM("dropItem", SettingValueType.BOOLEAN, true, "dropItem", true, false), /** * The chance of a scrapper returning no salvage, regardless of item condition */ FAIL_SALVAGE_CHANCE("failSalvageChance", SettingValueType.POSITIVE_DOUBLE, 0, "failSalvageChance", true, false), /** * The setting for which items a scrapper is able to salvage */ SALVAGE_ABLE_ITEMS("salvageAbleItems", SettingValueType.REFORGE_ABLE_ITEMS, "", "salvageAbleItems", true, false), /** * The maximum amount of seconds a player may need to wait for the reforging to finish */ MAX_SALVAGE_DELAY("delaysInSeconds.maximum", SettingValueType.POSITIVE_INTEGER, 30, "maxReforgeDelay", true, false), /** * The minimum amount of seconds a player may need to wait for the reforging to finish */ MIN_SALVAGE_DELAY("delaysInSeconds.minimum", SettingValueType.POSITIVE_INTEGER, 5, "minReforgeDelay", true, false), /** * The setting for number of seconds a player has to wait between each usage of the blacksmith */ SALVAGE_COOL_DOWN("delaysInSeconds.reforgeCoolDown", SettingValueType.POSITIVE_INTEGER, 60, "reforgeCoolDown", true, false), /*----------- | Messages | -----------*/ /** * The message displayed when the scrapper is busy with another player */ BUSY_WITH_PLAYER_MESSAGE("messages.busyPlayerMessage", SettingValueType.STRING, "&cI'm busy at the moment. Come back later!", "busyPlayerMessage", true, true), /** * The message displayed when the scrapper is busy salvaging the player's item */ BUSY_WITH_SALVAGE_MESSAGE("messages.busySalvageMessage", SettingValueType.STRING, "&cI'm working on it. Be patient! I'll finish {time}!", "busySalvageMessage", true, true), /** * The message displayed if the player needs to wait for the cool-down to expire */ COOL_DOWN_UNEXPIRED_MESSAGE("messages.coolDownUnexpiredMessage", SettingValueType.STRING, "&cYou've already had your chance! Give me a break! I'll be ready {time}!", "coolDownUnexpiredMessage", true, true), /** * The message displayed if presented with an item that cannot be salvaged by the NPC */ CANNOT_SALVAGE_MESSAGE("messages.cannotSalvageMessage", SettingValueType.STRING, "&cI'm unable to salvage that item", "cannotSalvageMessage", true, true), /** * The message displayed if salvaging an item would return in no items */ TOO_DAMAGED_FOR_SALVAGE_MESSAGE("messages.tooDamagedForSalvageMessage", SettingValueType.STRING, "&cThat item is too damaged to be salvaged into anything useful", "tooDamagedForSalvageMessage", true, true), /** * The message displayed if a salvage is successful */ SUCCESS_SALVAGE_MESSAGE("messages.successSalvagedMessage", SettingValueType.STRING, "&cThere you go!", "successSalvagedMessage", true, true), /** * The message displayed if a player presents a different item after seeing the price to reforge an item */ ITEM_UNEXPECTEDLY_CHANGED_MESSAGE("messages.itemChangedMessage", SettingValueType.STRING, "&cThat's not the item you wanted to reforge before!", "itemChangedMessage", true, true), /** * The message displayed when the scrapper starts salvaging an item */ START_SALVAGE_MESSAGE("messages.startSalvageMessage", SettingValueType.STRING, "&eOk, let's see what I can do...", "startSalvageMessage", true, true), /*------------------ | Global settings | ------------------*/ /** * Whether to display exact time in minutes and seconds when displaying a remaining cool-down */ SHOW_EXACT_TIME("scrapper.global.showExactTime", SettingValueType.BOOLEAN, "false", "showExactTime", false, false), /** * Whether to give experience back when salvaging an enchanted item */ GIVE_EXPERIENCE("scrapper.global.giveExperience", SettingValueType.BOOLEAN, "true", "giveExperience", false, false), ; private final String path; private final String childPath; private final Object value; private final String commandName; private final SettingValueType valueType; private final boolean isPerNPC; private final boolean isMessage; /** * Instantiates a new setting * * @param path

The full config path for this setting

* @param valueType

The type of value used by this setting

* @param value

The default value of this setting

* @param commandName

The name of the command used to change this setting

* @param isPerNPC

Whether this setting is per-NPC or global

* @param isMessage

Whether this option is for an NPC message

*/ ScrapperSetting(String path, SettingValueType valueType, Object value, String commandName, boolean isPerNPC, boolean isMessage) { if (isPerNPC) { this.path = "scrapper.defaults." + path; } else { this.path = "scrapper.global." + path; } this.value = value; this.valueType = valueType; this.childPath = path; this.commandName = commandName; this.isPerNPC = isPerNPC; this.isMessage = isMessage; } @Override public @NotNull String getPath() { return path; } @Override public @NotNull String getChildPath() { return childPath; } @Override public @NotNull Object getDefaultValue() { return value; } @Override public @NotNull String getCommandName() { return commandName; } @Override public @NotNull SettingValueType getValueType() { return this.valueType; } @Override public boolean isPerNPC() { return this.isPerNPC; } @Override public boolean isMessage() { return this.isMessage; } /** * Gets the scrapper setting specified by the input string * * @param input

The input to check

* @return

The matching scrapper setting, or null if not found

*/ public static @Nullable ScrapperSetting getSetting(@NotNull String input) { for (ScrapperSetting scrapperSetting : ScrapperSetting.values()) { if (input.equalsIgnoreCase(scrapperSetting.commandName)) { return scrapperSetting; } } return null; } }