Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 2727|回复: 13

[插件开发教程] [插件NMS教程]PathfinderGoal

[复制链接]
Tsumiki 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
299
钻石
性别
保密
注册时间
2016-8-29
查看详细资料
发表于 2017-3-20 21:45:22 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 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

如果本教程对你有帮助,请不要吝啬您的评分,更多的评分是对作者精神上的一种鼓励

禁止一切转载


评分

参与人数 9人气 +15 金粒 +66 收起 理由
帅比小樊 + 1 + 10 神乎其技,不服不行!
oscarab + 2 期待更高级的教程
zghh008 + 1 + 15 楼主你太帅了~
andylizi + 3 很棒的作品!
言灵乀Poison + 1 + 15 很棒的作品!
tallmoon + 1 + 1 期待高级教程
ustc_zzzz + 2 + 25 围观dalao
1582952890 + 2 MCBBS有你更精彩~
810587921 + 2 .

查看全部评分

tallmoon 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3906
钻石
性别
保密
注册时间
2015-3-20
查看详细资料
发表于 2017-3-21 13:45:37 | 显示全部楼层
支持大佬,也就是说可以自定义生物掉落物?以及控制生物的攻击方式了?期待高级教程
回复

使用道具 举报

andylizi 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
15496
钻石
性别
保密
注册时间
2014-4-26
查看详细资料
发表于 2017-3-22 16:30:22 | 显示全部楼层
支持大佬。
建议将帖子里的图片上带着的链接给去掉,不然当我点开一张图片想看大图时,浏览器给我打开了个新标签页。。
回复

使用道具 举报

850639946 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3174
钻石
性别
保密
注册时间
2013-1-13
查看详细资料
发表于 2017-3-22 17:20:33 来自手机 | 显示全部楼层
支持大佬。
回复

使用道具 举报

zghh008 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2017
钻石
性别
保密
注册时间
2014-2-9
查看详细资料
发表于 2017-3-29 13:53:52 | 显示全部楼层
dilao.我能问一下么。这个为什么我写出来的生成过后没有实体模型。就是有声音。但是看不见这个实体。还可以掉落物品。
  1. public class EntityD extends EntityZombie {

  2.         public EntityD(World world) throws Exception {
  3.                 super(((CraftWorld) world).getHandle());
  4.                 Class<?> cl = PathfinderGoalSelector.class;
  5.                 Field b = cl.getDeclaredField("b");
  6.                 Field c = cl.getDeclaredField("c");
  7.                 b.setAccessible(true);
  8.                 c.setAccessible(true);
  9.                 List<PathfinderGoalSelector> cList = (List<PathfinderGoalSelector>) c.get(targetSelector);
  10.                 List<PathfinderGoalSelector> bList = (List<PathfinderGoalSelector>) b.get(targetSelector);
  11.                 List<PathfinderGoalSelector> dList = (List<PathfinderGoalSelector>) c.get(goalSelector);
  12.                 List<PathfinderGoalSelector> eList = (List<PathfinderGoalSelector>) b.get(goalSelector);
  13.                 cList.clear();
  14.                 bList.clear();
  15.                 dList.clear();
  16.                 eList.clear();
  17.         }

  18.         public void spawnEntity(Location location) {
  19.                 setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
  20.                 this.world.addEntity(this);
  21.         }

  22. }
复制代码
回复

使用道具 举报

Tsumiki 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
299
钻石
性别
保密
注册时间
2016-8-29
查看详细资料
 楼主| 发表于 2017-3-29 22:06:08 | 显示全部楼层
zghh008 发表于 2017-3-29 13:53
dilao.我能问一下么。这个为什么我写出来的生成过后没有实体模型。就是有声音。但是看不见这个实体。还可以 ...

并不是这个的原因你这段代码仅仅只是清除了ai而已
回复

使用道具 举报

zghh008 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2017
钻石
性别
保密
注册时间
2014-2-9
查看详细资料
发表于 2017-3-29 22:13:00 | 显示全部楼层
Tsumiki 发表于 2017-3-29 22:06
并不是这个的原因你这段代码仅仅只是清除了ai而已

嗯。我知道。但是我想问的是我直接new再spawn生成出来的实体是没有实体模型的。虽然的却生成了但是我看不到。但他仍然具有僵尸的特性。还是会白天燃烧并且死掉掉落腐肉。
哪这种情况是怎么回事呢qaq
回复

使用道具 举报

Tsumiki 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
299
钻石
性别
保密
注册时间
2016-8-29
查看详细资料
 楼主| 发表于 2017-3-29 22:25:52 | 显示全部楼层
zghh008 发表于 2017-3-29 22:13
嗯。我知道。但是我想问的是我直接new再spawn生成出来的实体是没有实体模型的。虽然的却生成了但是我看不 ...

那我也不知道
回复

使用道具 举报

zghh008 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2017
钻石
性别
保密
注册时间
2014-2-9
查看详细资料
发表于 2017-3-30 13:02:56 | 显示全部楼层

你弄出来是有实体模型的?
回复

使用道具 举报

Tsumiki 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
299
钻石
性别
保密
注册时间
2016-8-29
查看详细资料
 楼主| 发表于 2017-3-30 15:43:11 | 显示全部楼层
zghh008 发表于 2017-3-30 13:02
你弄出来是有实体模型的?

当然有 大概就你没有吧
回复

使用道具 举报

1609089074 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1096
钻石
性别
保密
注册时间
2014-1-3
查看详细资料
发表于 2018-7-7 12:56:00 | 显示全部楼层
楼主补一下图片或代码吧,看起来挺高端的,就是图都裂啦学不来呀
回复

使用道具 举报

我的世界3C 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
323
钻石
性别
保密
注册时间
2014-6-29
查看详细资料
发表于 2019-2-1 10:45:29 | 显示全部楼层
zghh008 发表于 2017-3-29 13:53
dilao.我能问一下么。这个为什么我写出来的生成过后没有实体模型。就是有声音。但是看不见这个实体。还可以 ...

其实我认为你应该先Entity e = world.spawnEntity(location) 然后e.getHandle()再操作的。没必要一定去继承。要么你可以去反编译看看里面的构造,要不然这么做是有风险的。以上是我瞎哔哔的。
回复

使用道具 举报

我的世界3C 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
323
钻石
性别
保密
注册时间
2014-6-29
查看详细资料
发表于 2019-2-1 10:48:38 | 显示全部楼层
zghh008 发表于 2017-3-29 13:53
dilao.我能问一下么。这个为什么我写出来的生成过后没有实体模型。就是有声音。但是看不见这个实体。还可以 ...

虽说EntityZombie实现了接口,但是人家怎么实现的,实现完了还得怎么用,你都不知道,还不如先把确确实实的实体生成出来,然后再对它动刀。
回复

使用道具 举报

zghh008 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2017
钻石
性别
保密
注册时间
2014-2-9
查看详细资料
发表于 2019-2-2 21:12:20 | 显示全部楼层
我的世界3C 发表于 2019-2-1 10:48
虽说EntityZombie实现了接口,但是人家怎么实现的,实现完了还得怎么用,你都不知道,还不如先把确确实实 ...

陈年旧帖啦。早都明白啦。我自己还写了教程在置顶里面
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2019-8-21 09:22 , Processed in 0.044962 second(s), Total 21, Slave 20 queries , Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2019 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表