Makes sure blacksmith messages include all arguments
This commit is contained in:
		@@ -92,7 +92,6 @@ public class BlacksmithPlugin extends JavaPlugin {
 | 
			
		||||
        // default value as the current value if the current value is null, as it's effectively the actual value.
 | 
			
		||||
        // Additionally, this would allow NPC settings to update when the default is changed, as long as no custom
 | 
			
		||||
        // value has been set.
 | 
			
		||||
        //TODO: For messages, all arguments need to be combined (joined using spacebar) to make things work properly
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,8 @@ import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.enchantments.Enchantment;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
 | 
			
		||||
import static net.knarcraft.blacksmith.formatting.StringFormatter.displayErrorMessage;
 | 
			
		||||
import static net.knarcraft.blacksmith.formatting.StringFormatter.displaySuccessMessage;
 | 
			
		||||
 | 
			
		||||
@@ -65,50 +67,92 @@ public class BlackSmithConfigCommand implements CommandExecutor {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Display the current value of a setting
 | 
			
		||||
        if (args.length == 1) {
 | 
			
		||||
            //TODO: See if there's a way to remove this duplication
 | 
			
		||||
            String rawValue;
 | 
			
		||||
            String correctCommandName;
 | 
			
		||||
            boolean printRawValue = false;
 | 
			
		||||
            if (detectedGlobalSetting != null) {
 | 
			
		||||
                rawValue = String.valueOf(settings.getRawValue(detectedGlobalSetting));
 | 
			
		||||
                correctCommandName = detectedGlobalSetting.getCommandName();
 | 
			
		||||
            } else if (detectedNPCSetting != null) {
 | 
			
		||||
                rawValue = String.valueOf(settings.getRawValue(detectedNPCSetting));
 | 
			
		||||
                correctCommandName = detectedNPCSetting.getCommandName();
 | 
			
		||||
                if (detectedNPCSetting.getPath().startsWith("defaults.messages")) {
 | 
			
		||||
                    printRawValue = true;
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            displaySuccessMessage(sender, TranslatableMessage.getCurrentValueMessage(correctCommandName, rawValue));
 | 
			
		||||
            if (printRawValue) {
 | 
			
		||||
                sender.sendMessage(TranslatableMessage.getRawValueMessage(
 | 
			
		||||
                        rawValue.replace(ChatColor.COLOR_CHAR, '&')));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            return displayCurrentValue(detectedGlobalSetting, detectedNPCSetting, settings, sender);
 | 
			
		||||
        } else if (args.length == 2 && isSpecialCase(commandName)) {
 | 
			
		||||
            if (displaySpecialCaseValue(args[1], sender, detectedGlobalSetting, settings)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Update the value of a special-case setting
 | 
			
		||||
        if (args.length == 3 && updateSpecialCase(settings, detectedGlobalSetting, args, sender)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Change the value of the specified setting
 | 
			
		||||
        return changeValue(args, detectedGlobalSetting, detectedNPCSetting, settings, sender);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Changes the value of the setting defined in the user's input
 | 
			
		||||
     *
 | 
			
		||||
     * @param args                  <p>The arguments given by the user</p>
 | 
			
		||||
     * @param detectedGlobalSetting <p>The global setting recognized from the input, if any</p>
 | 
			
		||||
     * @param detectedNPCSetting    <p>The NPC setting recognized from the input, if any</p>
 | 
			
		||||
     * @param settings              <p>The global settings object to get settings from</p>
 | 
			
		||||
     * @param sender                <p>The command sender to display any output to</p>
 | 
			
		||||
     * @return <p>True if the value was successfully changed</p>
 | 
			
		||||
     */
 | 
			
		||||
    private boolean changeValue(String[] args, GlobalSetting detectedGlobalSetting, NPCSetting detectedNPCSetting,
 | 
			
		||||
                                GlobalSettings settings, CommandSender sender) {
 | 
			
		||||
        String newValue = args[1];
 | 
			
		||||
        if (detectedGlobalSetting != null) {
 | 
			
		||||
            settings.changeValue(detectedGlobalSetting, newValue);
 | 
			
		||||
            displaySuccessMessage(sender, TranslatableMessage.getValueChangedMessage(detectedGlobalSetting.getCommandName(), newValue));
 | 
			
		||||
            return true;
 | 
			
		||||
        } else if (detectedNPCSetting != null) {
 | 
			
		||||
            //This makes sure all arguments are treated as a sentence
 | 
			
		||||
            if (detectedNPCSetting.getValueType() == SettingValueType.STRING) {
 | 
			
		||||
                newValue = String.join(" ", Arrays.asList(args).subList(1, args.length));
 | 
			
		||||
            }
 | 
			
		||||
            settings.changeValue(detectedNPCSetting, newValue);
 | 
			
		||||
            displaySuccessMessage(sender, TranslatableMessage.getValueChangedMessage(detectedNPCSetting.getNodeName(), newValue));
 | 
			
		||||
            return true;
 | 
			
		||||
        } else {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Displays the current value of the selected setting
 | 
			
		||||
     *
 | 
			
		||||
     * @param detectedGlobalSetting <p>The global setting recognized from the input, if any</p>
 | 
			
		||||
     * @param detectedNPCSetting    <p>The NPC setting recognized from the input, if any</p>
 | 
			
		||||
     * @param settings              <p>The global settings object to get settings from</p>
 | 
			
		||||
     * @param sender                <p>The command sender to display any output to</p>
 | 
			
		||||
     * @return <p>True if a settings was successfully displayed</p>
 | 
			
		||||
     */
 | 
			
		||||
    private boolean displayCurrentValue(GlobalSetting detectedGlobalSetting, NPCSetting detectedNPCSetting,
 | 
			
		||||
                                        GlobalSettings settings, CommandSender sender) {
 | 
			
		||||
        String settingValue;
 | 
			
		||||
        String correctCommandName;
 | 
			
		||||
        boolean printRawValue = false;
 | 
			
		||||
 | 
			
		||||
        //Find the value of the specified setting
 | 
			
		||||
        //TODO: See if there's a way to remove this duplication
 | 
			
		||||
        if (detectedGlobalSetting != null) {
 | 
			
		||||
            settingValue = String.valueOf(settings.getRawValue(detectedGlobalSetting));
 | 
			
		||||
            correctCommandName = detectedGlobalSetting.getCommandName();
 | 
			
		||||
        } else if (detectedNPCSetting != null) {
 | 
			
		||||
            settingValue = String.valueOf(settings.getRawValue(detectedNPCSetting));
 | 
			
		||||
            correctCommandName = detectedNPCSetting.getCommandName();
 | 
			
		||||
            //For messages, print an additional raw value showing which color codes are used
 | 
			
		||||
            if (detectedNPCSetting.getPath().startsWith("defaults.messages")) {
 | 
			
		||||
                printRawValue = true;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        //Display the current value of the setting
 | 
			
		||||
        displaySuccessMessage(sender, TranslatableMessage.getCurrentValueMessage(correctCommandName, settingValue));
 | 
			
		||||
        //Print the value with any colors displayed as &a-f0-9
 | 
			
		||||
        if (printRawValue) {
 | 
			
		||||
            sender.sendMessage(TranslatableMessage.getRawValueMessage(
 | 
			
		||||
                    settingValue.replace(ChatColor.COLOR_CHAR, '&')));
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ package net.knarcraft.blacksmith.command;
 | 
			
		||||
import net.citizensnpcs.api.CitizensAPI;
 | 
			
		||||
import net.citizensnpcs.api.npc.NPC;
 | 
			
		||||
import net.knarcraft.blacksmith.config.NPCSetting;
 | 
			
		||||
import net.knarcraft.blacksmith.config.SettingValueType;
 | 
			
		||||
import net.knarcraft.blacksmith.formatting.StringFormatter;
 | 
			
		||||
import net.knarcraft.blacksmith.formatting.TranslatableMessage;
 | 
			
		||||
import net.knarcraft.blacksmith.formatting.Translator;
 | 
			
		||||
@@ -14,6 +15,8 @@ import org.bukkit.command.CommandExecutor;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
 | 
			
		||||
import static net.knarcraft.blacksmith.formatting.StringFormatter.displaySuccessMessage;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -41,6 +44,10 @@ public class BlackSmithEditCommand implements CommandExecutor {
 | 
			
		||||
            String commandName = npcSetting.getCommandName();
 | 
			
		||||
            if (commandName.equalsIgnoreCase(args[0])) {
 | 
			
		||||
                String newValue = args.length < 2 ? null : args[1];
 | 
			
		||||
                //This makes sure all arguments are treated as a sentence
 | 
			
		||||
                if (npcSetting.getValueType() == SettingValueType.STRING && args.length > 2) {
 | 
			
		||||
                    newValue = String.join(" ", Arrays.asList(args).subList(1, args.length));
 | 
			
		||||
                }
 | 
			
		||||
                return changeNPCSetting(blacksmithTrait, npcSetting, newValue, sender);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user