Minecraft(我的世界)中文论坛
标题: 1.NMS简介
作者: asdfg25855 时间: 2016-8-18 17:14
标题: 1.NMS简介
本帖最后由 asdfg25855 于 2016-8-18 17:31 编辑
1.NMS简介
各位在处理某些插件的报错的时候经常会发现包含net.minecraft.server.1.x.x_Rx
的信息 即是我们要讲的NMS
NMS是包net.minecraft.server的简称
平时大家用的可能是官方提供的接口包org
而除了以上这两个包外 服务端还有另一个包CraftBukkit
1.三者大体关系
CraftBukkit的类实现了org中的接口,而NMS的对象包含在CraftBukkit中
比如:Org中的接口Player被CraftBukkit中的CraftPlayer实现,而CraftPlayer包含了NMS的EntityPlayer对象(如果晕的话,喝杯开水)
2.对他们进行操作
ORG的接口和CraftBukkit的类之间可以强转
CraftBukkit对象通过特殊方法getHandle()获得NMS对象
NMS对象通过getBukkitEntity()方法获得CraftBukkit对象
一段代码:
public static net.minecraft.server.Entity getAsNms(org.bukkit.entity.Entity orge){
net.minecraft.server.Entity nmse;
org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity ce=(CraftEntity) orge;
nmse=ce.getHandle();
return nmse;
}
public static org.bukkit.entity.Entity getAsOrg(net.minecraft.server.Entity nmse){
org.bukkit.entity.Entity orge;
org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity ce=(CraftEntity)nmse.getBukkitEntity();
orge=ce;
return orge;
}
So 我们可以从上获得信息:(以下简称CraftBukkit为CB)
1.三者是共通的
2.CB与NMS对象用过方法互访
3.nms类命名规则:
实体:nms会为所有实体加上-Entity前缀以区分
如:EntityPlayer EntityArrow
方块:nms会为所有方块加上-Block前缀以区分
如:BlockBeacon BlockBed
包:nms会为所有包加上-Packet前缀以区分
如:PacketPlayOutNamedSoundEffect PacketPlayOutEntity
大体的看,从类名即可推测大部分类的属
4.内剖
以下是对nms下的Entity的部分截取
public abstract class Entity
/* */ implements ICommandListener {
/* */ private static final int CURRENT_LEVEL = 2;//正常变量
/* */ private static int entityCount;//正常变量
/* */ private int id;//正常变量
/* */ public double j;//单字母变量
/* */ public boolean k;//单字母变量
/* */ public Entity passenger;//正常变量
/* */ public Entity vehicle;//正常变量
/* */ public World world;//正常变量
/* */ public int getId(){//正常方法
/* 129 */ return this.id;
/* */ }
/* */
/* */ public void d(int i) {//单字母方法
/* 133 */ this.id = i;
/* */ }
NMS类中的变量和方法普通情况下分为两种
一种是未经混淆等加密操作的正常方法和变量
一种是处理后的单字母变量和单字母方法 需要配合MCP解读
5.余话
请注意,有时在调用nms时,若出现空指针一类的错误,则会使服务器主线崩溃
导致服务器关闭,所以在写调用nms的代码时务必谨慎 如果能正确的运用nms 能为插件润色不少,但nms只是一个添色的工具,主画板还是org
该教程不定期更新.8(好气啊,写个帖的时间和重新排版的时间一样多)
作者: JackC92 时间: 2016-8-20 15:24
nms看起来是个好东西..可以做好多好玩的样子
作者: RE_OVO 时间: 2016-12-31 10:06
说起NMS,反射大法就要跳出来来装逼了
作者: 鸭蛋只吃黄 时间: 2016-12-31 11:34
反射现在装不了了。我加了你的那个群,简直了
作者: q88724653 时间: 2017-4-29 13:01
NMS如何做到在一个插件添加多个服务端的版本,做到多版本兼容