生成一个实体
你需要四样数据以指定如何在世界上生成实体:Entity 、Location 、Extent 和 EntityType。获取这些东西其实相当简单,你需要关心的只有需要插件代码中指定的 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 类)。