Bukkit插件开发教程 - Entity(实体)

实体 - Entity

学习目标

  • 了解Entity的定义
  • 了解部分实体的生成

了解Entity的定义

实体是Entity包括在Minecraft中所有动态的、移动中的对象
所有的实体都有以下性质:

  • 具有速度、位置和旋转角度。
  • 占有特定的空间大小。此空间是一个固定长宽高的三维长方体(实体不偏斜时,俯视图为正方形)。
  • 当前的生命值。
  • 当着火时,生命值逐渐减少,实体显示出被火焰包围的样子(在携带版中两格高或以上的实体火会显示在臀部)。
  • 状态效果,主要由药水产生,蜘蛛在困难难度生成时会携带状态效果

了解部分实体的生成

在BukkitAPI中,我们可以通过调用World类下的几个spawn方法进行生成

spawn(Location location, java.lang.Class clazz)
在指定的位置根据给定的类生成一个实体.
spawnEntity(Location loc, EntityType type)
在指定的位置创建一个实体.
spawnArrow(Location location, Vector direction, float speed, float spread)
在指定的位置创建一个箭的实体.
spawnFallingBlock(Location location, MaterialData data)
在指定的位置创建一个指定Material的坠落方块

在上方的代码中第2和第3不做相关解释

  • spawn(Location location, Class clazz)
    该方法可用于实体生成,也可用于自定义实体时进行的生成
  • spawnEntity(Location loc, EntityType type)
    该方法可用于实体, 但仅限于原版怪物

范例: 使用spawn方法生成一头牛

// 假设现在的需求是在玩家身旁生成一头牛
World world = player.getWorld();
world.spawn(player.getLocation(), Cow.class);

范例: 使用spawnEntity方法生成一头牛

// 假设现在的需求是在玩家身旁生成一头牛
World world = player.getWorld();
world.spawnEntity(player.getLocation(), EntityType.COW);

在上方的范例中,第二种方法较为常用

在有些时候我们会发现有些实体的头上会有一些名字,这是怎么做到的呢?
范例: 使用spawnEntity方法生成一头牛, 并为其命名

// 假设现在的需求是在玩家身旁生成一头牛
World world = player.getWorld();
// 因为spawnEntity方法会返回该实体的实例对象, 而Cow类继承了Entity所以需要强转
Cow cow = (Cow) world.spawnEntity(player.getLocation(), EntityType.COW);
// 设置牛的自定义名的可见性
cow.setCustomNameVisible(true);
// 设置牛的自定义名
cow.setCustomName("§6一头奶牛");

你可能感兴趣的:(Bukkit插件开发教程 - Entity(实体))