是否有可能使用Bukkit for Minecraft来定义一种新的暴徒?

Pee*_*eja 3 minecraft bukkit

我想写一个Minecraft mod,它增加了一种新型的暴徒.那可能吗?我看到,在Bukkit中,它EntityType是一个预定义的枚举,这使我相信可能没有办法添加新类型的实体.我希望这是错的.

Xye*_*ene 10

是的你可以!

我将指导您阅读Bukkit论坛的一些教程.特别:

免责声明:第一个是我写的.

你不能真正增加一个完全只是通过Bukkit新的暴徒.你必须使用Spout给它一个不同的皮肤.但是,如果你只是想要一个暴徒,并且满足于分享另一个实体的皮肤,那么它就可以完成.

我们的想法是通过Java的Reflection API注入EntityType值.它看起来像这样:

public static void load() {
  try {

    Method a = EntityTypes.class.getDeclaredMethod("a", Class.class, String.class, int.class);
    a.setAccessible(true); 
    a.invoke(a, YourEntityClass.class, "Your identifier, can be anything", id_map);

} catch (Exception e) {
//Insert handling code here
}
}
Run Code Online (Sandbox Code Playgroud)

我认为上述内容相当简单.我们获取私有方法的句柄,使其公开,并调用其注册方法.id_map包含要将实体映射到的实体ID.12是火球.映射可以在中找到EntityType.class.请注意,这些ID应该与他们混淆包名称.两者完全不同.

最后,您实际上需要生成您的实体.MC将继续生成默认实体,因为我们尚未将其从地图中删除.但它只是一个呼唤的问题net.minecraft.server.spawnEntity(your_entity, SpawnReason.CUSTOM).

如果你需要皮肤,我建议你看看Spout插件.它确实需要运行Spout客户端来加入这样的服务器,但是那时的可能性实际上是无限的.