3

我想写一个 Minecraft 模组来增加一种新型的生物。那可能吗?我看到,在 Bukkit 中,EntityType是一个预定义的 enum,这让我相信可能没有办法添加新类型的实体。我希望那是错误的。

4

4 回答 4

11

是的你可以!

我会引导你到 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
}
}

我认为上面的内容相当简单。我们获得私有方法的句柄,将其设为公开,并调用其注册方法。id_map包含要将您的实体映射到的实体 ID。12是一个火球。映射可以在 中找到EntityType.class。请注意,这些 id 不应它们的数据包名称混淆。两者完全不同。

最后,您实际上需要生成实体。MC 将继续生成默认实体,因为我们尚未将其从地图中移除。但这只是调用net.minecraft.server.spawnEntity(your_entity, SpawnReason.CUSTOM).

如果您需要皮肤,我建议您查看Spout Plugin。它确实需要运行 Spout 客户端才能加入这样的服务器,但此时的可能性实际上是无限的。

于 2013-01-28T20:09:16.580 回答
4

遗憾的是,只有客户端模组才有可能。您可以查看 Spout (http://www.spout.org/),它是一个客户端模块,它为服务器端插件提供 API 以在客户端执行更多操作,但如果不执行客户端操作,这是不可能的。

于 2013-01-13T18:32:57.683 回答
1

不可能添加新实体,但可以编辑实体行为,例如有一次,我这样做是为了让你可以驯服铁傀儡,它们会跟着你。

于 2013-01-14T22:01:07.573 回答
1

您还可以通过访问玩家实体和调整网络数据包来实现自定义外观的人类实体

这很昂贵,因为您需要创建一个玩家帐户才能实现此目的,然后习惯于充当暴民。然后你生成一个命名实体,并赋予它与现有生物相同的行为 AI。但请记住,您需要自己编写 AI(您可以直接从craftbukkit/bukkit 借用代码),并且您需要将此暴徒的运动和事件推送给视线范围内的玩家。从技术上讲,您所做的一切都是在推动从发球局向客户端发送数据包,了解实际发生的情况,但是如果您在推列表之外,则不会发生任何事情,因为其他玩家会看到您被无形的东西撞倒:)这有点精神上的飞跃:)

我正在使用这个概念来创建充当友好和派系军队的 Npc。我也将暴徒本身用作友好实体(如果您属于黑暗派系)

我想亲自看到未来的服务器 API,它可以将模型指令推送到客户端以获取服务器特定的缓存,以及告诉客户端在哪里下载生物皮肤的能力..

今天是可行的,但我必须为客户端创建一个插件来实现这一点,然后又回到了一个令人烦恼的游戏,特别是当 mojang 推出新版本并且所有插件都需要永远随着潮流而上升时

老实说,整个生态系统可以更具战略性地进行管理,但现在我认为这只是临时的产品管理(作为 .net 的前产品经理,我很乐意从事这种策略,这将是一个非常有趣的工作)

于 2014-01-05T07:18:00.423 回答