本帖最后由 超神的冰凉 于 2020-2-18 11:45 编辑 
我尝试新建一个自定义的实体,并且展示给玩家,但是却发生了以下的报错,不知为什么会空指针?
复制代码这是我的实体floatingtext:(已经正确的在插件启动时注册)
复制代码这是我创建并显示这个实体的代码:复制代码
我现在不知道错nbt误为何发生,为何会在写入nbt(如报错所言)时候出错?
请问如何修改呢,解决方案是什么?
我尝试新建一个自定义的实体,并且展示给玩家,但是却发生了以下的报错,不知为什么会空指针?
- Throwing
 
- java.lang.NullPointerException: null
 
-         at cn.nukkit.utils.BinaryStream.putString(BinaryStream.java:533) ~[nukkit.jar:?]
 
-         at cn.nukkit.network.protocol.AddEntityPacket.encode(AddEntityPacket.java:166) ~[nukkit.jar:?]
 
-         at cn.nukkit.Server.batchPackets(Server.java:680) ~[nukkit.jar:?]
 
-         at cn.nukkit.network.RakNetInterface.putPacket(RakNetInterface.java:254) ~[nukkit.jar:?]
 
-         at cn.nukkit.Player.dataPacket(Player.java:1082) ~[nukkit.jar:?]
 
-         at cn.nukkit.Player.dataPacket(Player.java:1063) ~[nukkit.jar:?]
 
-         at cn.nukkit.entity.Entity.spawnTo(Entity.java:908) ~[nukkit.jar:?]
 
-         at cn.nukkit.Player.doFirstSpawn(Player.java:909) ~[nukkit.jar:?]
 
-         at cn.nukkit.Player.sendNextChunk(Player.java:839) ~[nukkit.jar:?]
 
-         at cn.nukkit.Player.checkNetwork(Player.java:1851) ~[nukkit.jar:?]
 
-         at cn.nukkit.Server.tick(Server.java:1140) ~[nukkit.jar:?]
 
-         at cn.nukkit.Server.tickProcessor(Server.java:905) [nukkit.jar:?]
 
-         at cn.nukkit.Server.start(Server.java:882) [nukkit.jar:?]
 
-         at cn.nukkit.Server.<init>(Server.java:567) [nukkit.jar:?]
 
-         at cn.nukkit.Nukkit.main(Nukkit.java:112) [nukkit.jar:?]
 
- import cn.nukkit.entity.Entity;
 
- import cn.nukkit.level.format.FullChunk;
 
- import cn.nukkit.nbt.tag.CompoundTag;
 
 
- public class floatingtext extends Entity {
 
-     public floatingtext(FullChunk chunk, CompoundTag nbt){
 
-         super(chunk, nbt);
 
-     }
 
-     @Override
 
-     public int getNetworkId() {
 
-         return -1;
 
-     }
 
 
- }
- import cn.nukkit.Server;
 
- import cn.nukkit.entity.Entity;
 
- import cn.nukkit.level.Level;
 
- import cn.nukkit.math.Vector3;
 
 
- import java.time.LocalDateTime;
 
- import java.util.*;
 
 
- public class displayer {
 
- Entity entity = createTextEntity("try",128,87,150,Server.getInstance().getLevelByName("world"));
 
- level.addEntity(entity);
 
- entity.spawnToAll();
 
- }
 
- public Entity createTextEntity(String name,int x,int y,int z,Level level){
 
-         Entity tmp = Entity.createEntity("floatingtextentity", level.getChunk(x>>4,z>>4),Entity.getDefaultNBT(new Vector3(x,y,z)));
 
-         tmp.setNameTagVisible(true);
 
-         tmp.setNameTag(name);
 
-         tmp.setNameTagAlwaysVisible(true);
 
-         tmp.setMaxHealth(9999);
 
-         tmp.setHealth(9999);
 
-         tmp.setPosition(new Vector3(x,y,z));
 
-         tmp.setScale(1.0f);
 
-         tmp.setLevel(level);
 
-         return tmp;
 
- }
我现在不知道错nbt误为何发生,为何会在写入nbt(如报错所言)时候出错?
请问如何修改呢,解决方案是什么?
Network Id 不能-1 因为添加一个实体现在版本需要一个identifier 比如说僵尸就是minecraft:zombie -1找不到对应的identifier 所以报错了 浮空字你可以试试继承EntityHuman 然后让这个实体的scale为0 如果觉得好请给个最佳
Kenneth_z 发表于 2020-2-18 11:41
Network Id 不能-1 因为添加一个实体现在版本需要一个identifier 比如说僵尸就是minecraft:zombie -1找不到 ...
十分感谢
你也可以将 NetWorkId 设置为64 也可以达到一样的效果 不用继承 EntityHuman
继承 Entity 类生成的实体有重力效果 
所以只需执行 setImmobile() 即可
注意要重写 getWidth() 与 getHeight() 生物碰撞箱
不然显示内容会很低
所以只需执行 setImmobile() 即可
注意要重写 getWidth() 与 getHeight() 生物碰撞箱
不然显示内容会很低