生成實體
你將需要三個東西來生成一個 Entity:一個 Location、一個 Extent、與一個 EntityType。取得這些東西的過程相當簡單,你只要從插件程式碼的某處抓住一個 Location
與選擇你希望生成的 Entity
類型。
例如,讓我們試著生成一隻苦力怕:
import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.EntityTypes;
import org.spongepowered.api.event.CauseStackManager.StackFrame;
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());
// We need to push a new cause StackFrame to the stack so we can add our own causes
// In previous versions of the API you had to submit a Cause parameter
// that would often not contain the real root cause
// By default the current plugin's PluginContainer is already pushed to the stack.
try (StackFrame frame = Sponge.getCauseStackManager().pushCauseFrame()) {
frame.addContext(EventContextKeys.SPAWN_TYPE, SpawnTypes.PLUGIN);
world.spawnEntity(creeper);
}
}
這樣我們就從我們的 Location
抓到了世界,我們將需要將其用於實際生成。然後,它使用 EntityUniverse#createEntity(EntityType, Vector3d) 來建立實體,但請注意,這不會將實體生成到世界中,這只是建立它。我們需要指定要生成的 Entity
的類型,與 Location
的座標。
一旦我們建立了我們的 Entity
,我們就可以使用世界來生成該 Entity
。我們應該指定一個生成的 Cause
以確保其他插件能夠正確處理。對於生成 Entity
,最好的方式是使用一個 SpawnType 作為情境的一部份。在這個範例中,我們我們聲明我們的實體是從插件中生成的,然而我們可以指定任何事件原因/情境來以最好的方式描述為何我們要生成這個實體,例如生怪磚(參閱SpawnTypes#MOB_SPAWNER),或刷怪蛋(參閱SpawnTypes#SPAWN_EGG)。