Minecraft(我的世界)中文论坛
标题: [插件NMS教程]PathfinderGoal
作者: Tsumiki 时间: 2017-3-20 21:45
标题: [插件NMS教程]PathfinderGoal
本帖最后由 Tsumiki 于 2017-3-20 22:03 编辑
PathfinderGoal简介
它在MCP里面的命名我们称之为:
AI(Artificial Intelligence)
因为CraftBukkit服务端及其衍生端Spigot属于Wrapper类服务端
用来控制生物行为
本篇主讲PathfinderGoal,也会讲一些其他的知识.
具体步骤如下:
创建一个新的生物类,extends 你想自定义的生物类先
创建一个默认构造器
注意是NMS里面的生物类
在包net.minecraft.server.v1_x_RX包下面

为了调用方便
我们选择将构造器的World类型写成BukkitAPI内的
之后转换成NMS下的WorldSever

既然我们想要自定义生物AI
那么我们得删掉原来的所有已经加在这个生物身上的AI

为我们新的自定义生物添加自定义的AI
(写一个新的AI教程暂不准备讲,看各位反应吧.


就加几个自定义AI不够吧
我们再来给我们自定义的生物加点新的特性

现在
我们为我们的自定义生物加上生成它的方法

重点来了
自定义生物是要被注册到(除盔甲架,展示框等静态生物除外)
EntityTypes里面的(MCP里面这个类叫EntityList)
我们这里选择了不覆盖原版的生物类型
取一个新的生物类型叫
NewPigZombie
Q:EntityTypes下面有一个a(Class<? extends Entity>,String,int)的方法也同样用来注册生物,为什么不用那个方法呢?
A:这个方法默认是不允许覆盖原版已有的生物的.

接下来

到此教程已经全部结束
更高级的自定义生物可能会写,也可能不会
看各位反响咯w
如果本教程对你有帮助,请不要吝啬您的评分,更多的评分是对作者精神上的一种鼓励
禁止一切转载
作者: tallmoon 时间: 2017-3-21 13:45
支持大佬,也就是说可以自定义生物掉落物?以及控制生物的攻击方式了?期待高级教程
作者: andylizi 时间: 2017-3-22 16:30
支持大佬。
建议将帖子里的图片上带着的链接给去掉,不然当我点开一张图片想看大图时,浏览器给我打开了个新标签页。。
作者: 850639946 时间: 2017-3-22 17:20
支持大佬。
作者: zghh008 时间: 2017-3-29 13:53
dilao.我能问一下么。这个为什么我写出来的生成过后没有实体模型。就是有声音。但是看不见这个实体。还可以掉落物品。
- public class EntityD extends EntityZombie {
- public EntityD(World world) throws Exception {
- super(((CraftWorld) world).getHandle());
- Class<?> cl = PathfinderGoalSelector.class;
- Field b = cl.getDeclaredField("b");
- Field c = cl.getDeclaredField("c");
- b.setAccessible(true);
- c.setAccessible(true);
- List<PathfinderGoalSelector> cList = (List<PathfinderGoalSelector>) c.get(targetSelector);
- List<PathfinderGoalSelector> bList = (List<PathfinderGoalSelector>) b.get(targetSelector);
- List<PathfinderGoalSelector> dList = (List<PathfinderGoalSelector>) c.get(goalSelector);
- List<PathfinderGoalSelector> eList = (List<PathfinderGoalSelector>) b.get(goalSelector);
- cList.clear();
- bList.clear();
- dList.clear();
- eList.clear();
- }
- public void spawnEntity(Location location) {
- setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
- this.world.addEntity(this);
- }
- }
复制代码
作者: Tsumiki 时间: 2017-3-29 22:06
并不是这个的原因你这段代码仅仅只是清除了ai而已
作者: zghh008 时间: 2017-3-29 22:13
嗯。我知道。但是我想问的是我直接new再spawn生成出来的实体是没有实体模型的。虽然的却生成了但是我看不到。但他仍然具有僵尸的特性。还是会白天燃烧并且死掉掉落腐肉。
哪这种情况是怎么回事呢qaq
作者: Tsumiki 时间: 2017-3-29 22:25
那我也不知道
作者: zghh008 时间: 2017-3-30 13:02
你弄出来是有实体模型的?
作者: Tsumiki 时间: 2017-3-30 15:43
当然有 大概就你没有吧
作者: 1609089074 时间: 2018-7-7 12:56
楼主补一下图片或代码吧,看起来挺高端的,就是图都裂啦学不来呀
作者: MayDayMemory 时间: 2019-2-1 10:45
其实我认为你应该先Entity e = world.spawnEntity(location) 然后e.getHandle()再操作的。没必要一定去继承。要么你可以去反编译看看里面的构造,要不然这么做是有风险的。以上是我瞎哔哔的。
作者: MayDayMemory 时间: 2019-2-1 10:48
虽说EntityZombie实现了接口,但是人家怎么实现的,实现完了还得怎么用,你都不知道,还不如先把确确实实的实体生成出来,然后再对它动刀。
作者: zghh008 时间: 2019-2-2 21:12
陈年旧帖啦。早都明白啦。我自己还写了教程在置顶里面
作者: 南柯郡守 时间: 2020-5-8 12:04
大佬 你这里图片全挂了 不知道放不方便上个代码呢