HYFan_Meng
本帖最后由 HYFan_Meng 于 2020-8-23 17:23 编辑

在清理实体时候调用了ZombieVillager以及Zombie在游戏内测试时候发现ZombieVillager和Zombie有冲突,在翻阅bukkit代码时候发现ZombieVillager继承Zombie,应该怎么解决[配置文件里这俩只要Zombie为true ZombieVillager的设置就无效了]

洞穴夜莺
本帖最后由 洞穴夜莺 于 2020-8-23 17:25 编辑

建议使用实体类型的ID而不是使用类名
其次精准匹配类名的方法
x是个对象 y是类
x.getClass() == y.class


HYFan_Meng
洞穴夜莺 发表于 2020-8-23 17:24
建议使用实体类型的ID而不是使用类名

这样子的话应该怎么用呢没怎么接触过关于实体,能举个例子嘛

洞穴夜莺
本帖最后由 洞穴夜莺 于 2020-8-23 17:41 编辑
HYFan_Meng 发表于 2020-8-23 17:26
这样子的话应该怎么用呢没怎么接触过关于实体,能举个例子嘛

Entity#getType().getKey().equals(NamespacedKey.minecraft("你的实体ID除去minecraft:的部分"))

南柯郡守
eneity.getType()判断

这个应该不会把ZombieVillager当做Zombie吧

William_Shi
HYFan_Meng 发表于 2020-8-23 17:26
这样子的话应该怎么用呢没怎么接触过关于实体,能举个例子嘛
在清理实体时候调用了ZombieVillager以及Zombie在游戏内测试时候发现ZombieVillager和Zombie有冲突,在翻阅bukkit代码时候发现ZombieVillager继承Zombie,应该怎么解决[配置文件里这俩只要Zombie为true ZombieVillager的设置就无效了]


说实话,真的没读懂你在说什么
为什么有继承关系就无效
和配置文件究竟有什么关系
怎么“调用”ZombieVillager的

整个问题都没读懂

HYFan_Meng
William_Shi 发表于 2020-8-23 17:38
说实话,真的没读懂你在说什么
为什么有继承关系就无效
和配置文件究竟有什么关系
  1. } else if (env instanceof ZombieVillager && Main.ClearZombieVillager) {
  2.                             if (!env.hasMetadata("NPC") && !env.hasMetadata("MyPet")) {
  3.                                 env.remove();
  4.                                 ++count;
  5.                             }
复制代码



HYFan_Meng
南柯郡守 发表于 2020-8-23 17:36
eneity.getType()判断

这个应该不会把ZombieVillager当做Zombie吧

应该吧emm[应该是EntityType吧emm看Javadoc里没找到你说的这个]

HYFan_Meng
洞穴夜莺 发表于 2020-8-23 17:36
Entity#getType().getKey().equals(NamespacedKey.minecraft("你的实体ID除去minecraft:的部分")) ...

谢谢啦一会有时间去测试

ddee
试试
  1. entity instanceof ZombieEntity && !(entity instanceof ZombieVillagerEntity)
复制代码


HYFan_Meng
洞穴夜莺 发表于 2020-8-23 17:36
Entity#getType().getKey().equals(NamespacedKey.minecraft("你的实体ID除去minecraft:的部分")) ...

有一点小问题
为什么无法使用Entity.getType呢(1.12.2 paperspigot)

洞穴夜莺
HYFan_Meng 发表于 2020-8-24 09:54
有一点小问题
为什么无法使用Entity.getType呢(1.12.2 paperspigot)

你最好描述一下现象
1.12.2没有这个方法吗?

HYFan_Meng
洞穴夜莺 发表于 2020-8-24 09:57
你最好描述一下现象
1.12.2没有这个方法吗?

我也不知道Javadoc也没看到有
getType提示无法从静态上下文引用非静态 方法 'getType()'



洞穴夜莺
HYFan_Meng 发表于 2020-8-24 10:04
我也不知道Javadoc也没看到有
getType提示无法从静态上下文引用非静态 方法 'getType()'

你需要把Entity对象的变量名写在.前面,而不是直接把Entity写前面,这是我说Entity#getType()的原因
其次如果你是硬编码僵尸的话不需要这么麻烦,直接
  1. Entity#getType() == EntityType.ZOMBIE_VILLAGER
复制代码

注意你这样判断的是僵尸村民而不是僵尸
其次各类ID全部是小写

HYFan_Meng
洞穴夜莺 发表于 2020-8-24 10:09
你需要把Entity对象的变量名写在.前面,而不是直接把Entity写前面,这是我说Entity#getType()的原因
其次 ...

emm无法解析 'ClearEntity' 中的方法 'getType'

HYFan_Meng
洞穴夜莺 发表于 2020-8-24 10:09
你需要把Entity对象的变量名写在.前面,而不是直接把Entity写前面,这是我说Entity#getType()的原因
其次 ...

我把源码私发给你你看看应该怎么改emm