guo1060924736
我编插件的时候发现一个问题 只要用到public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {}
方法的args参数的值时他总会抛异常,但是做if判断时他就不会。代码和异常看下图。我的时1.7.10版本的,cauldron服务端核心。
  1.   public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  2.   //未分配权限
  3.   //也就表示任何人都能用
  4.     if(cmd.getName().equalsIgnoreCase("luck")) {
  5.       if(args.length!=1) {
  6.       sender.sendMessage(ChatColor.RED+"请使用/luck+[玩家名]");
  7.       }
  8.       else {
  9.       RandomInfo(args[1]);
  10.       return true;
  11.              }
  12.     }
  13.                
  14.   return false;
  15.   }
复制代码

这是插件导出时的操作





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



guo1060924736
  1.     public void Say(String str) { //不让玩家跟别的东西交互,约等于屏蔽左右键
  2.             ConsoleCommandSender sender=Bukkit.getConsoleSender();
  3.             sender.sendMessage(str);
  4.             //RandomInfo(player);
  5.     }
  6.    
  7.     public void RandomInfo(String p) {
  8.            
  9.             if((new Random().nextInt(100)+1) <= 66){
  10.                     Say(ChatColor.GREEN+"恭喜玩家 "+p+" 获得精良物品");
  11.             }
  12.            
  13.             else if((new Random().nextInt(100)+1) > 66 && (new Random().nextInt(100)+1) <= 96){
  14.                     Say(ChatColor.BLUE+"恭喜玩家 "+p+" 获得优秀物品");
  15.             }
  16.            
  17.             else if((new Random().nextInt(100)+1) >96 && (new Random().nextInt(100)+1) <= 99){
  18.                     Say(ChatColor.RED+"恭喜玩家 "+p+" 获得史诗物品");
  19.             }
  20.            
  21.             else if( (new Random().nextInt(100)+1) == 100){
  22.                     Say(ChatColor.DARK_RED+"恭喜玩家 "+p+" 获得传说物品");
  23.             }
  24.             else {
  25.                     Say(ChatColor.GREEN+"恭喜玩家 "+p+" 获得精良物品");
  26.                 }
  27.         }
  28. }
复制代码

这个是其他套用方法的代码 !!

lliiooll
本帖最后由 lliiooll 于 2019-2-16 13:36 编辑

49行的代码发下,哪里出错了

guo1060924736
lliiooll 发表于 2019-2-16 13:32
49行的代码发下,哪里出错了

抛异常是因为if语句写的不合适造成的吗

lliiooll
guo1060924736 发表于 2019-2-16 13:45
抛异常是因为if语句写的不合适造成的吗

发一下49行代码,是那行报错

guo1060924736
lliiooll 发表于 2019-2-16 13:32
49行的代码发下,哪里出错了
  1. public void RandomInfo(String p) {
  2.            
  3.             if((new Random().nextInt(100)+1) <= 66){
  4.                     Say(ChatColor.GREEN+"恭喜玩家 "+p+" 获得精良物品");
  5.             }
  6.            
  7.             else if((new Random().nextInt(100)+1) > 66 && (new Random().nextInt(100)+1) <= 96){
  8.                     Say(ChatColor.BLUE+"恭喜玩家 "+p+" 获得优秀物品");
  9.             }
  10.            
  11.             else if((new Random().nextInt(100)+1) >96 && (new Random().nextInt(100)+1) <= 99){
  12.                     Say(ChatColor.RED+"恭喜玩家 "+p+" 获得史诗物品");
  13.             }
  14.            
  15.             else if( (new Random().nextInt(100)+1) == 100){
  16.                     Say(ChatColor.DARK_RED+"恭喜玩家 "+p+" 获得传说物品");
  17.             }
  18.             else {
  19.                     Say(ChatColor.GREEN+"恭喜玩家 "+p+" 获得精良物品");
  20.                 }
  21.         }
  22. }
复制代码

lliiooll

兄弟,49行发出来就行,不需要发这么多

guo1060924736
lliiooll 发表于 2019-2-16 13:32
49行的代码发下,哪里出错了
  1.     public void Say(String str) { //不让玩家跟别的东西交互,约等于屏蔽左右键
  2.             ConsoleCommandSender sender=Bukkit.getConsoleSender();
  3.             sender.sendMessage(str);
  4.             //RandomInfo(player);
  5.     }
复制代码

这是say()函数代码。

guo1060924736
lliiooll 发表于 2019-2-16 13:49
兄弟,49行发出来就行,不需要发这么多

                        RandomInfo(args[1]);

lliiooll
那你试试这个
if(!(args.length > 0)){
sender.sendMessage(ChatColor.RED+"请使用/luck+[玩家名]");
return true;
}else{
RandomInfo(args[1]);
return true;
}

guo1060924736
lliiooll 发表于 2019-2-16 13:47
发一下49行代码,是那行报错

RandomInfo(args[1]);这个就是 这行代码是我写的函数。。

guo1060924736
lliiooll 发表于 2019-2-16 13:53
那你试试这个
if(!(args.length > 0)){
sender.sendMessage(ChatColor.RED+"请使用/luck+[玩家名]");
  1. luck 123
  2. [14:07:18 WARN]: Unexpected exception while parsing console command "luck 123"
  3. org.bukkit.command.CommandException: Unhandled exception executing command 'luck' in plugin LuckStone v0.1
  4.         at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[PluginCommand.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
  5.         at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:181) ~[SimpleCommandMap.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
  6.         at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:717) ~[CraftServer.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
  7.         at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchServerCommand(CraftServer.java:697) [CraftServer.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
  8.         at net.minecraft.server.dedicated.DedicatedServer.func_71333_ah(DedicatedServer.java:472) [lt.class:?]
  9.         at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:431) [lt.class:?]
  10.         at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:798) [MinecraftServer.class:?]
  11.         at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:658) [MinecraftServer.class:?]
  12.         at java.lang.Thread.run(Thread.java:745) [?:1.8.0_91]
  13. Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
  14.         at com.goalsetting.LuckStone.onCommand(LuckStone.java:49) ~[?:?]
  15.         at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[PluginCommand.class:git-Cauldron-Reloaded-1.7.10-1.1343.01.0]
  16.         ... 8 more
复制代码

改了 应该还是49行代码。。。

lliiooll
我知道了2333
args[1]换成args[0]

guo1060924736
lliiooll 发表于 2019-2-16 14:10
我知道了2333
args[1]换成args[0]

谢谢大佬,爱你!!

lliiooll
本帖最后由 lliiooll 于 2019-2-16 14:38 编辑

2333加个qq一起学习丫

反清复明
楼主 if(args.length!=1)  这段代码什么意思  args代表什么

tallmoon
数组是从0开始排序的不是从1

第一页 上一页 下一页 最后一页