生成實體

警告

这些文档是为 SpongeAPI 7 编写的,可能已经过时。 如果你觉得你可以帮助更新它们,请提交一个 PR!

你將需要三個東西來生成一個 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)。