Internal Error by typing a letter as argument instead of message

Discussion in 'Plugin Development' started by tvhee, Jul 17, 2020.

Thread Status:
Not open for further replies.
  1. Offline

    tvhee

    I set the command /setchatradius <radius>, when I insert a number it works good, but when insert a letter it says Internal Error instead of a message that you need to use a number, in the config it works correct.

    Sorry, the comments (//) and messages are in Dutch.

    Main

    Code:
    package me.tvhee.chatradius;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class ChatRadiusClass extends JavaPlugin {
    
        // Prefixen die je kan instellen en in 1 keer kan wijzigen
        String igprefix = "§7[§6ChatRadius§7] ";
    
        // Waarschuwing bij typfouten
        @Override
        // Als de plugin wordt aangezet
        public void onEnable() {
            getLogger().info("has been enabeled!");
            getLogger().info("made by tvhee");
            // Bericht als plugin wordt aangezet zonder kleur
            // getLogger().info("Tutorial TBG succesfully enabeled");
            // getLogger().info("Tutorial TBG by tvhee");
            // Bericht als plugin wordt aangezet met kleur
            /// ConsoleCommandSender console = Bukkit.getServer().getConsoleSender();
            /// console.sendMessage(ChatColor.Green + "Bericht");
            Bukkit.getServer().getPluginManager().registerEvents(new ListenerClass(this), this);
            // Config file aanmaken
            this.getConfig().options().copyDefaults(true);
            // Defaults in de config zetten
            this.getConfig().addDefault("chatradius", 100);
            // Config file opslaan
            saveConfig();
        }
    
        // Waarschuwing bij typfouten
        @Override
        // Als plugin wordt uitgezet
        public void onDisable() {
            // Bericht als plugin wordt aangezet zonder kleur
            getLogger().info("made by tvhee");
            getLogger().info("has been disabeled!");
            // getLogger().info("Tutorial TBG by tvhee");
            // getLogger().info("Tutorial TBG succesfully disabled");
            // Bericht als plugin wordt aangezet met kleur
            /// ConsoleCommandSender console = Bukkit.getServer().getConsoleSender();
            /// console.sendMessage(ChatColor.Green + "Bericht");
        }
    
        // Als er een commando wordt uitgevoerd
        public boolean onCommand(CommandSender zender, Command cmd, String label, String[] args) {
            // Als het commando /chatradius wordt uitgevoerd
            if (zender instanceof Player) {
                // Je weet nu dat het een speler is
                Player speler = (Player) zender;
                if (cmd.getName().equalsIgnoreCase("chatradius")) {
                    // Speler een bericht zenden met chatradius
                    speler.sendMessage(igprefix + ChatColor.BLUE + "De chatradius is nu " + ChatColor.GOLD + this.getConfig().getInt("chatradius") + ChatColor.BLUE + " blokken!");
                    // een 2e commando plaatsen (/setchatradius)
                    return true;
                } else if (cmd.getName().equalsIgnoreCase("setchatradius")) {
                    // controle voor argumenten
                    int lengte = args.length;
                    // Als er minstens 1 argument wordt meegegeven
                    if (lengte == 1) {
                        // Bijhouden hoeveel de chatradius is
                        String eersteArgument = args[0];
                        if (eersteArgument.length() == 0 || eersteArgument.contains("[a-zA-Z]")) {
                            speler.sendMessage(igprefix + ChatColor.DARK_RED + "Je hebt geen getal ingevoerd");
                        } else {
                            int radius = Integer.parseInt(eersteArgument.replaceAll("[a-zA-Z]", "")); // Zet radius om naar een getal
                            this.getConfig().set("chatradius", radius);
                            this.saveConfig();
                            this.reloadConfig();
    
                            // Bericht verzenden dat de chatradius nu ... blokken is
                            Bukkit.broadcastMessage(igprefix + ChatColor.GREEN + "De chatradius is nu ingesteld op " + ChatColor.GOLD + radius + ChatColor.GREEN + " blokken!");
                        }
    
                    } else {
                        speler.sendMessage(igprefix + ChatColor.DARK_RED + "/setchatradius <radius>");
                    }
                    return true;
                }
            }
            return false;
        }
    }
    
    Listener Class

    Code:
    package me.tvhee.chatradius;
    
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.AsyncPlayerChatEvent;
    
    public class ListenerClass implements Listener{
    
       
        //Prefixen die je kan instellen en in 1 keer kan wijzigen
        String igprefix = "§7[§6ChatRadius§7] ";
        //De main class erbij halen als configGetter
        ChatRadiusClass configGetter;
        //De hoofdklasse ophalen
        public ListenerClass(ChatRadiusClass plugin) {
            //Alle info binnenhalen onder de naam plugin
            configGetter = plugin;
        }
        @EventHandler
        //Als een speler chat
        public void SpelerChat(AsyncPlayerChatEvent e){
            //De speler verkrijgen
            Player speler = e.getPlayer();
            //Naam aanmaken voor het verzonden bericht
            String verzondenBericht = e.getMessage();
            //Het bericht dat we willen verzenden
            String bericht = ChatColor.GRAY + "[" + ChatColor.GOLD + speler.getName() + ChatColor.GRAY + "] " + ChatColor.WHITE + verzondenBericht;
            //De afstand tot spelers mag max 100 blokken zijn
            int Blokafstand = configGetter.getConfig().getInt("chatradius");
            //Locatie van de speler ophalen
            Location SpelerLoc = speler.getLocation();
            //De ontvanger van het bericht ophalen
            for (Player pl : e.getRecipients()) {
                //Kijken of de spelers minder dan 100 blokken uit elkaar staan
                if (pl.getLocation().distance(SpelerLoc) <= Blokafstand) {
                    //Als de afstand minder of gelijk aan 100 is dan krijgt de speler het bericht
                    pl.sendMessage(bericht);
                }
            }
            //De andere spelers krijgen het bericht niet
            e.getRecipients().clear();
        }
    }
    
    Thanks for help!
     
  2. Online

    timtower Administrator Administrator Moderator

    @tvhee You have a NumberFormatException in your console.
    You are not checking if the argument can be parsed as int
     
  3. Offline

    gochi9

    You could try something like this
    Code:
        public int getInt(String s) {
            try {
                return Integer.parseInt(s);
            }
            catch(NumberFormatException e){
                return 0;
            }
        }
    
    And then check if getInt == 0
     
  4. Offline

    tvhee

    Thanks for the reply's, I got it solved!
     
Thread Status:
Not open for further replies.

Share This Page