生成一个实体

你需要四样数据以指定如何在世界上生成实体:EntityLocationExtentEntityType。获取这些东西其实相当简单,你需要关心的只有需要插件代码中指定的 Location 和你想要生成的 Entity 的类型。

例如,让我们试着去生成一个爬行者:

import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.EntityTypes;
import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.event.cause.entity.spawn.SpawnCause;
import org.spongepowered.api.event.cause.entity.spawn.SpawnTypes;
import org.spongepowered.api.world.Location;
import org.spongepowered.api.world.World;

import java.util.Optional;

public void spawnEntity(Location<World> spawnLocation) {
    World world = spawnLocation.getExtent();
    Entity creeper = world
        .createEntity(EntityTypes.CREEPER, spawnLocation.getPosition());
    SpawnCause spawnCause = SpawnCause.builder().type(SpawnTypes.PLUGIN).build();
    world.spawnEntity(creeper, Cause.source(spawnCause).build());
}

这样我们就指定了 Location 对应的世界,用于生成我们想要生成的实体。然后,我们通过 EntityUniverse#createEntity(EntityType, Vector3d) 方法创建了一个实体,不过需要注意的是它只是创建了一个实体,还没有在世界上生成它。我们需要指定 Entity 的类型,和其具体的 Location

一量我们创建了我们的 Entity 我们就可以通过世界生成实体于其上了。我们需要指定一个用于生成的 Cause 。对于生成实体而言,最好的方式是使用 SpawnCause 作为根事件原因。在这个示例中,我们注意到我们的实体是插件生成的,不过,我们也可以指定一些事件原因用于描述我们为何要生成这个实体,比如由于一个刷怪笼(参见 MobSpawnerSpawnCause 类)或者一个刷怪蛋(参见 EntitySpawnCause 类)。