实在脑瘫了!
尝试了很久如何获取玩家名字并对比
gettype getname getdisplayname
但是不管使用哪个都会出现报错
或者红色波浪线报错
希望大佬给个思路!或者提供一下代码!
尝试了很久如何获取玩家名字并对比
gettype getname getdisplayname
但是不管使用哪个都会出现报错
或者红色波浪线报错
希望大佬给个思路!或者提供一下代码!
MCBBS有你更精彩~
MCBBS有你更精彩~
Player player;
String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName();
String lingyige_name = "卢本伟";
boolean shi_fou_yi_yang = (name.equals(lingyige_name));
完事。我使用的是双持以上版本的获取主手物品方法, 如果你编写插件的API版本低于支持双持的游戏版本, 烦请自己找一下获取手上物品 ItemStack 的方法然后替换掉 getItemInMainHand().
String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName();
String lingyige_name = "卢本伟";
boolean shi_fou_yi_yang = (name.equals(lingyige_name));
完事。我使用的是双持以上版本的获取主手物品方法, 如果你编写插件的API版本低于支持双持的游戏版本, 烦请自己找一下获取手上物品 ItemStack 的方法然后替换掉 getItemInMainHand().
在你getType 之类的之前
你要判断玩家手上是不是有东西
if(item!=null&&item.getType!=Material.AIR){
//do something
}
你要判断玩家手上是不是有东西
if(item!=null&&item.getType!=Material.AIR){
//do something
}
新科 发表于 2020-5-31 00:15
Player player;
String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName( ...
boolean那边是不是应该加个if?
感觉如果单加他只是输出
WERKXXT 发表于 2020-5-31 13:55
boolean那边是不是应该加个if?
感觉如果单加他只是输出
是的, 只是把布尔值结果存在了 shi_fou_yi_yang 里, 需要自己在下面判断
if (shi_fou_yi_yang) {
// do something..
}
新科 发表于 2020-5-31 00:15
Player player;
String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName( ...
并且使用if for都会出现红波浪 但是单加会出现后台报错
具体怎么使用能不能发一下全代码?
WERKXXT 发表于 2020-5-31 14:00
并且使用if for都会出现红波浪 但是单加会出现后台报错
具体怎么使用能不能发一下全代码? ...
player你要自己通过某种方法获得player
什么新建craftplayer什么的还是算了
常用的就是event.getPlayer这种
总之最上面那个player没初始化也不能帮你写出初始化的逻辑
你必须自己先获得一个player
比如说Player player = Bukkit.getPlayerExact("William_Shi");
WERKXXT 发表于 2020-5-31 14:00
并且使用if for都会出现红波浪 但是单加会出现后台报错
具体怎么使用能不能发一下全代码? ...
第二行是这样的
ItemStack都有NBT(二进制标签
最外层的是混合数据包
其中有一个display数据键对应一个混合数据包
这里面存储了displayname
也就是所谓的物品的名字
当然bukkit做了封装(ItemMeta),提供了操作lore、displayname等的方法
而不必触及nms
这里就是取出来物品的displayname
WERKXXT 发表于 2020-5-31 14:00
并且使用if for都会出现红波浪 但是单加会出现后台报错
具体怎么使用能不能发一下全代码? ...
后面的其他都没必要看,都是随便写的逻辑
具体使用需要你自己去判断
wolaihungejinli tishengkaatishegka
本帖最后由 新科 于 2020-5-31 20:15 编辑
首先要确认你的版本, 我上面代码使用了双持判断, 如果你插件的游戏版本不支持双持是一定会报错的。啊这, 忘记写空值判断了, 感谢评分提醒, 获取之前要先判断手上物体是否为空值, 是空值的话也会报错的
我代码的第一行其实只是告诉你, 接下来我用的 player 是一个 Player 对象, 具体你要代入进去
Player player;
这个 player 你可以理解为一个假设, 意思是“假设接下来涉及到的玩家变量是 player”.因为这个语句中 player 并没有被赋予内容, 只是说填充了一个 Player 的"结构", 也就是没有后面的等于号, 那么我们就说这个变量没有被初始化.
如果你要使用这个变量, 你首先要找到内容 - (受害者)一个真实存在的玩家。
如果你是要在一个事件里面获取玩家手持物品名, 那么在方法里你就要先获取这个玩家的对象 event.getPlayer(), 然后你再去操作玩家。
那么就要使用
String 物品名 = event.getPlayer().getInventory().getItemInMainHand().getItemMeta().getDisplayName();
如果你是在命令里面要操作,那么同理,你要先获取到命令发送者 Sender 的玩家对象, 这里因为咱们的参数 sender 实际上是 CommandSender, 所以你需要在确保执行命令的人是玩家而不是控制台的情况下,进行从 CommandSender 类型到 Player 类型的强制转换 (Player) sender;
if ( sender instanceof Player ) {
// 执行命令的人确实是玩家
Player senderplayer = (Player) sender;
String 物品名 = senderplayer.getInventory().getItemInMainHand().getItemMeta().getDisplayName();
}
这样应该够详细了吧...
WERKXXT 发表于 2020-5-31 16:38
请问大佬能否给一下具体的代码?
看完分析还是有点脑瘫和无法解决
谢谢 ...
首先要确认你的版本, 我上面代码使用了双持判断, 如果你插件的游戏版本不支持双持是一定会报错的。啊这, 忘记写空值判断了, 感谢评分提醒, 获取之前要先判断手上物体是否为空值, 是空值的话也会报错的
我代码的第一行其实只是告诉你, 接下来我用的 player 是一个 Player 对象, 具体你要代入进去
Player player;
这个 player 你可以理解为一个假设, 意思是“假设接下来涉及到的玩家变量是 player”.因为这个语句中 player 并没有被赋予内容, 只是说填充了一个 Player 的"结构", 也就是没有后面的等于号, 那么我们就说这个变量没有被初始化.
如果你要使用这个变量, 你首先要找到内容 - (受害者)一个真实存在的玩家。
如果你是要在一个事件里面获取玩家手持物品名, 那么在方法里你就要先获取这个玩家的对象 event.getPlayer(), 然后你再去操作玩家。
那么就要使用
String 物品名 = event.getPlayer().getInventory().getItemInMainHand().getItemMeta().getDisplayName();
如果你是在命令里面要操作,那么同理,你要先获取到命令发送者 Sender 的玩家对象, 这里因为咱们的参数 sender 实际上是 CommandSender, 所以你需要在确保执行命令的人是玩家而不是控制台的情况下,进行从 CommandSender 类型到 Player 类型的强制转换 (Player) sender;
if ( sender instanceof Player ) {
// 执行命令的人确实是玩家
Player senderplayer = (Player) sender;
String 物品名 = senderplayer.getInventory().getItemInMainHand().getItemMeta().getDisplayName();
}
这样应该够详细了吧...
66666666666666666666