生成隐形蝙蝠-将org.bukkit.Entity转换为org.bukki.craftbukkit.v1_8_R3.En



我正在创建一个需要一些隐形蝙蝠的插件。因此,我有一种方法可以繁殖和储存我的蝙蝠。这是代码,我目前有:

public class BatManager {
private static final List<Entity> bats = new ArrayList<>();
public static void spawnBat(Location location) {
Entity entity = location.getWorld().spawnEntity(location, EntityType.BAT);
try {
CraftBat l = (CraftBat) entity;
l.getHandle().setInvisible(true);
} catch (RuntimeException e) {
e.printStackTrace();
}
bats.add(entity);
}
}

这段代码确实可以编译,但是它不会使bat不可见。我强烈怀疑我在某个点创建了对象的副本,并在那里设置了不可见性。然而,我不确定如何在不转换为CraftBat的情况下设置不可见性,因为我不知道有什么方法可以使org.bukkit.Entity本身不可见。

我该如何更正?

我也对其他关于不可见性的建议持开放态度,但我明确不想使用药剂效果,因为这些效果会留下一些粒子让玩家看到。

我找到了一个没有数据包的解决方案。有了快速定时器,一切都很好:

Entity bat = location.getWorld().spawnEntity(location, EntityType.BAT);
Bukkit.getScheduler().runTaskLater(MyPlugin.getInstance(), () -> {
((CraftBat) bat).getHandle().setInvisible(true);
}, 2);

我找到了另一种解决方案。实际上,可以在bukkit一侧默认隐藏粒子。因此,我使用了PotionEffect,看起来像这样:

Entity entity = location.getWorld().spawnEntity(location, EntityType.BAT); 
LivingEntity livingEntity = (LivingEntity) entity;
PotionEffect effect = new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 1, false, false);
livingEntity.addPotionEffect(effect);
bats.add(livingEntity);

相关内容

最新更新