第五节 各种实体类的方法介绍

上一节 下一节

第二章 第五节 各种实体类的方法介绍

参与编写者: ruo_shui

建议学习时间: 20分钟

学习要点:

了解Entity类

  1. 概述

Entity类是所有生物的基类,任何生物实体,包括掉落物都继承自Entity类。掉落物为一个实体继承 自EntityItem类。 若要实现自定义NPC则需要继承EntityHuman类。

  1. 自定义生物的实现

    首先创建一个类继承 Entity / EntityHuman

1
public CustomEntity extends Entity

​ 重写方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 注意在PowerNukkit中 此构造方法必须保留
*/
public CustomEntity(FullChunk chunk, CompoundTag nbt) {
super(chunk, nbt);
}

/**
* 这里填写生物的 ID 值 建议参考WIKI百科内生物的命名空间ID
*/
@Override
public int getNetworkId() {
return 0;
}

WIKI 百科

如果我们要实现其他功能则需要设置或重写方法

需要注意一点 基于Entity 类创建的实体需要重写 getHeight() 方法与 getWidth() 方法设置生物的碰撞箱不然会出现一些生物名称向下的情况

这里举几个常用设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
这里是构造函数
*/
public CustomEntity(FullChunk chunk, CompoundTag nbt) {
super(chunk, nbt);
this.setHealth(20);//设置生物当前血量为20点
this.setMaxHealth(20);//设置生物最大血量为20点
this.setImmobile(true);//当设置为true时 生物不会进行移动
this.setNameTagVisible();//设置显示名称 虽然和下面表达效果相同但是不加这个会不显示
this.setNameTagAlwaysVisible();//设置生物头部名称显示
this.setNameTag("生物头部显示的内容"); //设置头部显示的内容

}


/**碰撞箱体积*/
@Override
public float getHeight() {
return 0.8f;
}

/**碰撞箱体积*/
@Override
public float getWidth() {
return 1.2f;
}

/**
生物AI的实现方法
需要编写算法实现
此方法相当于一个定时器,在每个tick循环执行
编写算法让生物行动
*/
@Override
public boolean onUpdate(int currentTick) {
return super.onUpdate(currentTick);
}

生成实体

1
2
3
4
5
6
7
8
//生成实体时我们需要获取 Position 对象 就是实体生成的位置
//获取之后实例化 自定义实体
//传入对象
CustomEntity custom = new CustomEntity(position.getChunk(),Entity.getDefaultNBT(position));
custom.spawnToAll();//生成实体展示给全部玩家

// 如果只想给单个玩家发送实体 则调用 spawnTo(玩家对象);
custom.spawnTo(Server.getInstance().getPlayer("Steve")/*玩家对象*/);

关闭实体

1
2
3
4
5
6
7
8
9
10
11
12
13
//几种常用的方法

//despawn方法并不会关闭实体,只是不显示给玩家
custom.despawnFromAll(); //和spawnToAll()相反,取消展示实体给全部玩家
custom.despawnFrom(Server.getInstance().getPlayer("Steve")/*玩家对象*/); //和spawnTo(玩家对象)相反,取消展示实体给指定玩家

//关闭实体 关闭后不能再调用spawnTo等方法
custom.close();

//杀死实体 和close()方法相比,使用此方法会正常掉落物品(如果有的话)
//如果custom是继承EntityLiving的 还会触发EntityDeathEvent
custom.kill();

上一节 下一节