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