我正在开发imiPet宠物插件,是运用NMS自定义实体,花了一段时间学习NMS自定义实体 该视频有坐骑演示 想必很多人看过莫老的自定义实体教程:https://www.mcbbs.net/thread-811096-1-1.html 那么我为何要还要发表这样自定义实体教程呢? 理由诸如:
那么通过我的教程能学到什么呢 可以学到:
|
Minecraft-1.12-总汇 我们开始创建一个类:TestEntity 继承EntityArmorStand (也可以是其它BukkitNMS中EntityXXX)
接下来实现构造方法
并不,我们需要对实体进行注册,否则是不能生成实体 注册方法可以使用莫老的自定义实体教程:https://www.mcbbs.net/thread-811096-1-1.html
好啦,我们可以生成实体了
别走,WASD操控实体呢? 咳咳,喝杯奶茶后,咱们继续吧 莫老的跳跃反射真方便 ,只要修改不同版本的字段,皆可在不同版本使用
悄悄告诉你: IDEA快捷键 Ctrl+鼠标左键 jump = EntityLiving.class..... 中的 EntityLiving 即可快速跳到该类 该字段是有规律的,一般在 public float lastDamage; 下面
重点来了,实现坐骑代码 其中 public void a(float motionSideways, float motionForward, float f) {} 怎么知道呢 通过反编译翻阅EntityLiving类,很明显找到我们需要的东西,别忘了,不同版本不是相同的,尽量多自行查看
|
Minecraft-1.12-创建实体 我们开始创建一个类:TestEntity继承EntityArmorStand (也可以是其它BukkitNMS中EntityXXX)
接下来实现构造方法
|
Minecraft-1.12-注册实体 然后可以生成实体了吗? 并不,我们需要对实体进行注册,否则是不能生成实体 注册方法可以使用莫老的自定义实体教程:https://www.mcbbs.net/thread-811096-1-1.html
|
Minecraft-1.12-生成实体 好啦,我们可以生成实体了
|
Minecraft-1.12-骑行实体 别走,WASD操控实体呢? 咳咳,喝杯奶茶后,咱们继续吧 莫老的跳跃反射真方便 ,只要修改不同版本的字段,皆可在不同版本使用
悄悄告诉你: IDEA快捷键 Ctrl+鼠标左键 jump = EntityLiving.class..... 中的 EntityLiving 即可快速跳到该类 该字段是有规律的,一般在 public float lastDamage; 下面 重点来了,实现坐骑代码 其中 public void a(float motionSideways, float motionForward, float f) {} 怎么知道呢 通过反编译翻阅EntityLiving类,很明显找到我们需要的东西,别忘了,不同版本不是相同的,尽量多自行查看 |
Minecraft-1.13-1.13.X 本版本 TestEntity 跟Minecraft-1.12的创建继承构造步骤一样,这里不重复讲了我们直奔注册实体 在 TestEntity 类型写入
生成实体
并且在主类中注册实体(onEnable或onLoad也行)
顺便说下跳跃字段,是"bg" 同样可以翻阅MyPet开源项目得到坐骑关键代码 |
Minecraft-1.14 创建 TestEntity 类并继承,然后完成构造方法
对的,这时候你会发现,和此前版本注册不一样
然后知道怎么在主类注册实体了吧?什么?不知道?! 不认真看的挨批傲,快去看v1_13_R1 & v1_13_R2的内容 在1.14生成实体方法是这样的,我们可以注意到,1.14的entityTypes.b是创造实体 在1.13的entityTypes.a是创造实体,b则是生成实体 (1.15也差不多,1.15中生成实体方法是 entityTypes.createCreature(... ,从这单词上容易看出,是创造实体)
骑行实体,通过前面教程内容,我们容易找到跳跃字段了 请自行反编译找出1.14的跳跃字段,再折叠打开看正确答案 那么找到实现骑行实体方法了吗? 也许你这时候感到疑惑
是的,就是这里,但是呢,它的参数类型变成了Vec3D了! 好在呢,MyPet开源项目已经做了很好的坐骑算法,在这里我简化一下吧 |
Minecraft-1.15 令人欣慰的是,1.15与1.14的NMS实体创造注册差不多,只是这里不同
|
自定义方块 适用范围
为何不在材质版发答
我们也许在Minecraft-1.13及以下版本知道了方块不能添加,从而无法自定义方块 虽然盔甲架可以实现,但是它对服务器性能有影响的,大量集成放置会导致卡顿 而我们又知道,方块与物品不同之处在于,不能将新模型方块直接加入Minecraft原版中 当Minecraft-1.14正式版问世后,少数人发现了在此版本实现自定义方块 当时我为此花费了几天才研究好,鉴于MCBBS没有相关教程,那么我来讲讲吧 实现原理 首先,我要指出重要的角色:蘑菇块 Minecraft-1.14-1.15中,有三种这样的蘑菇块:蘑菇柄(mushroom_stem),红色蘑菇块(red_mushroom_block),棕色蘑菇块(brown_mushroom_block)
讲出原理之前,我们先放置蘑菇块来看看先,将两个方块放在一起
然后再拆快一个块,我们会发现它的接触面改变了
那么请问,你领悟到了什么呢 接触后块发生了改变,我们称之为块状态 主要应用到了纹理包,Minecraft渲染该块所需内容的Json中,对块状态进行属性操控 方块不同的面显示不同贴图,注意,我的意思并不是说仅仅某个面不同就显示不同纹理贴图 我的正确意思是:方块上有6个面,显示贴图与这些有关:不同方向的面,不同的面的数量 按数学排列来说吧 一共有 A B C D E F G 六个不同角色
最终,蘑菇柄可以提供给我们64-1=63个自定义方块,有人也许说,怎么扣去 1 了,那个 1 是留给蘑菇柄的贴图啊 当然再加上红色蘑菇块,棕色蘑菇块,我们最终一共有 189 个自定义方块 189个自定义方块应该足够了,不用灰心,Minecraft-1.16快照版中我们可以看到有新的蘑菇块 悄悄告诉你,那个Minecraft-1.16发光蘑菇块可能是可发光的自定义方块 关于纹理包 请具备纹理包相关知识,此处我仅讲块状态 向纹理包添加模型之类的MCBBS材质版有相关教程 我们需要这三个角色:块状态(blockstates),模型(models),贴图(textures)
打开 minecraft\blockstates\mushroom_stem.json 写入(没有就自行创建)
自定义方块的应用 请具备Java基础能力,有BukkitAPI相关知识 一开始,考虑其拓展性,我选择用 PlayerInteractEvent 监听,而不是 BlockPlaceEvent
设置指定的面为开放(true)还是关闭(false)状态
其中是 setBlockFacing 设置方块的面方法 Oraxen作者编写了这样的函数方法 该作者与我讨论中,得知该方法的原理: 原话: In fact the "code" is an integer between 0 and 2^6 because a block has 6 faces and each one can be disabled or enabled. 其中重要意思是:在二进制000000中(基数10中也为0)意味着关闭所有面,而111111(基数10中等于63)则意味着开放了所有面 如果我们写入 int id = 30; 则二进制是:11110 在循环中,通过 int id 二进制已经为不同面设置开放或关闭状态的面 这是关键的代码
|
[groupid=1511]Server CT[/groupid]

,只要修改不同版本的字段,皆可在不同版本使用


我漏了些东西,已更改