我编插件的时候发现一个问题 只要用到public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {}
方法的args参数的值时他总会抛异常,但是做if判断时他就不会。代码和异常看下图。我的时1.7.10版本的,cauldron服务端核心。
复制代码
这是插件导出时的操作
下面是报错信息 我说如了两个指令 if判断语句是通过了 但else后面的语句就报错!并且我试了很多次,每次用到args[1]就报错!求大神指教!!!感谢
方法的args参数的值时他总会抛异常,但是做if判断时他就不会。代码和异常看下图。我的时1.7.10版本的,cauldron服务端核心。
- public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
- //未分配权限
- //也就表示任何人都能用
- if(cmd.getName().equalsIgnoreCase("luck")) {
- if(args.length!=1) {
- sender.sendMessage(ChatColor.RED+"请使用/luck+[玩家名]");
- }
- else {
- RandomInfo(args[1]);
- return true;
- }
- }
-
- return false;
- }
这是插件导出时的操作


下面是报错信息 我说如了两个指令 if判断语句是通过了 但else后面的语句就报错!并且我试了很多次,每次用到args[1]就报错!求大神指教!!!感谢

- public void Say(String str) { //不让玩家跟别的东西交互,约等于屏蔽左右键
- ConsoleCommandSender sender=Bukkit.getConsoleSender();
- sender.sendMessage(str);
- //RandomInfo(player);
- }
-
- public void RandomInfo(String p) {
-
- if((new Random().nextInt(100)+1) <= 66){
- Say(ChatColor.GREEN+"恭喜玩家 "+p+" 获得精良物品");
- }
-
- else if((new Random().nextInt(100)+1) > 66 && (new Random().nextInt(100)+1) <= 96){
- Say(ChatColor.BLUE+"恭喜玩家 "+p+" 获得优秀物品");
- }
-
- else if((new Random().nextInt(100)+1) >96 && (new Random().nextInt(100)+1) <= 99){
- Say(ChatColor.RED+"恭喜玩家 "+p+" 获得史诗物品");
- }
-
- else if( (new Random().nextInt(100)+1) == 100){
- Say(ChatColor.DARK_RED+"恭喜玩家 "+p+" 获得传说物品");
- }
- else {
- Say(ChatColor.GREEN+"恭喜玩家 "+p+" 获得精良物品");
- }
- }
- }
这个是其他套用方法的代码 !!
本帖最后由 lliiooll 于 2019-2-16 13:36 编辑
49行的代码发下,哪里出错了
49行的代码发下,哪里出错了
lliiooll 发表于 2019-2-16 13:32
49行的代码发下,哪里出错了
抛异常是因为if语句写的不合适造成的吗
guo1060924736 发表于 2019-2-16 13:45
抛异常是因为if语句写的不合适造成的吗
发一下49行代码,是那行报错
lliiooll 发表于 2019-2-16 13:32
49行的代码发下,哪里出错了
- public void RandomInfo(String p) {
-
- if((new Random().nextInt(100)+1) <= 66){
- Say(ChatColor.GREEN+"恭喜玩家 "+p+" 获得精良物品");
- }
-
- else if((new Random().nextInt(100)+1) > 66 && (new Random().nextInt(100)+1) <= 96){
- Say(ChatColor.BLUE+"恭喜玩家 "+p+" 获得优秀物品");
- }
-
- else if((new Random().nextInt(100)+1) >96 && (new Random().nextInt(100)+1) <= 99){
- Say(ChatColor.RED+"恭喜玩家 "+p+" 获得史诗物品");
- }
-
- else if( (new Random().nextInt(100)+1) == 100){
- Say(ChatColor.DARK_RED+"恭喜玩家 "+p+" 获得传说物品");
- }
- else {
- Say(ChatColor.GREEN+"恭喜玩家 "+p+" 获得精良物品");
- }
- }
- }
兄弟,49行发出来就行,不需要发这么多
lliiooll 发表于 2019-2-16 13:32
49行的代码发下,哪里出错了
- public void Say(String str) { //不让玩家跟别的东西交互,约等于屏蔽左右键
- ConsoleCommandSender sender=Bukkit.getConsoleSender();
- sender.sendMessage(str);
- //RandomInfo(player);
- }
这是say()函数代码。
lliiooll 发表于 2019-2-16 13:49
兄弟,49行发出来就行,不需要发这么多
RandomInfo(args[1]);
那你试试这个
if(!(args.length > 0)){
sender.sendMessage(ChatColor.RED+"请使用/luck+[玩家名]");
return true;
}else{
RandomInfo(args[1]);
return true;
}
if(!(args.length > 0)){
sender.sendMessage(ChatColor.RED+"请使用/luck+[玩家名]");
return true;
}else{
RandomInfo(args[1]);
return true;
}
lliiooll 发表于 2019-2-16 13:47
发一下49行代码,是那行报错
RandomInfo(args[1]);这个就是 这行代码是我写的函数。。
lliiooll 发表于 2019-2-16 13:53
那你试试这个
if(!(args.length > 0)){
sender.sendMessage(ChatColor.RED+"请使用/luck+[玩家名]");
- luck 123
- [14:07:18 WARN]: Unexpected exception while parsing console command "luck 123"
- org.bukkit.command.CommandException: Unhandled exception executing command 'luck' in plugin LuckStone v0.1
- at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[PluginCommand.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
- at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:181) ~[SimpleCommandMap.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
- at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:717) ~[CraftServer.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
- at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchServerCommand(CraftServer.java:697) [CraftServer.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
- at net.minecraft.server.dedicated.DedicatedServer.func_71333_ah(DedicatedServer.java:472) [lt.class:?]
- at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:431) [lt.class:?]
- at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:798) [MinecraftServer.class:?]
- at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:658) [MinecraftServer.class:?]
- at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
- Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
- at com.goalsetting.LuckStone.onCommand(LuckStone.java:49) ~[?:?]
- at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[PluginCommand.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
- ... 8 more
改了 应该还是49行代码。。。
我知道了2333
args[1]换成args[0]
args[1]换成args[0]
本帖最后由 lliiooll 于 2019-2-16 14:38 编辑
2333加个qq一起学习丫
2333加个qq一起学习丫
楼主 if(args.length!=1) 这段代码什么意思 args代表什么
数组是从0开始排序的不是从1