我想写一个Minecraft mod,它增加了一种新型的暴徒。那可能吗?我在Bukkit中看到EntityType
is a predefined enum,这让我相信可能没有办法添加新类型的实体。我希望那是错的。
答案 0 :(得分: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
}
}
我认为上述内容相当简单。我们获取私有方法的句柄,使其公开,并调用其注册方法。id_map
包含将您的实体映射到的实体ID。 12是火球。映射可以在EntityType.class
中找到。请注意,这些ID应不与其packet designations混淆。两者完全不同。
最后,您实际上需要生成您的实体。 MC将继续生成默认实体,因为我们尚未将其从地图中删除。但这只是调用net.minecraft.server.spawnEntity(your_entity, SpawnReason.CUSTOM)
。
如果您需要皮肤,我建议您查看Spout插件。它确实需要运行Spout客户端才能加入这样的服务器,但那时的可能性实际上是无限的。
答案 1 :(得分:4)
遗憾的是,只有客户端mod才有可能。您可以查看Spout,(http://www.spout.org/)这是一个客户端mod,它为服务器端插件提供API以在客户端上执行更多操作,但是如果不做客户端的事情,这是不可能的。
答案 2 :(得分:1)
不可能添加新的实体,但是可以编辑实体行为,例如一次,我这样做是为了让你可以驯服铁傀儡并且他们跟着你。
答案 3 :(得分:1)
此外,您还可以通过访问播放器实体和调整网络数据包来实现自定义外观人类实体
这是昂贵的,因为您需要创建一个玩家帐户来实现这一点,然后习惯于充当暴徒。然后,您生成一个命名实体,并为其提供与现有暴徒相同的行为AI。但请记住,你需要自己编写AI(你可以直接从craftbukkit / bukkit借用代码),你需要将这些暴徒的动作和事件推向视线内的玩家。从技术上讲,你所做的一切都在推动从服务器发送到客户端的实际发生的数据包,但如果你的推送列表外面什么都不会发生,因为其他玩家会看到你被看不见的东西打倒:)这是一个精神上的飞跃:)
我正在使用这个概念来创建充当友军和派系军队的Npc。我也把小怪自己当作友好的实体(如果你属于黑暗派系)
我希望亲自看到未来的服务器API可以将模型指令推送到客户端以获取服务器特定的缓存,以及告诉客户端在何处下载mob皮肤的能力。
今天可行,但我必须为客户创建一个插件来实现这一目标,然后回到令人烦恼的游戏,尤其是当mojang推出新版本并且所有插件随着潮流而永远上升时< / p>
老实说,整个生态系统可以更具战略性地进行管理,但现在我认为它只是真正的临时产品管理(作为.net的前产品经理发言我喜欢在这个策略上工作它会是这样的有趣的演出)