生成實體

你需要四样数据以指定如何在世界上生成实体: EntityLocationExtent 、和 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 类)。