Spawnowanie Entity (Moba)

Ostrzeżenie

Ta dokumentacja została napisana dla SpongeAPI 7 i możliwe, że jest już przestarzała. Jeśli masz ochotę wspomóc w jej aktualizacji, prosimy, utwórz PR!

Potrzebujesz trzech rzeczy do stworzenia :javadoc:`Enity`: Location, Extent, oraz EntityType. Proces ich uzyskiwania jest dość prosty, musisz po prostu pozyskać Location gdzieś w swoim pluginie i wybrać typ Entity który chcesz stworzyć.

Na przykład, spróbujmy zespawnować Creeper’a:

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);
    }
}

Spowoduje to przechwycenie świata z naszego Location, którego będziemy potrzebować do faktycznego spawnu. Następnie używamy EntityUniverse#createEntity(EntityType, Vector3d) do utworzenia encji, ale pamiętaj, że to jeszcze nie powoduje pojawienia się obiektu w świecie, tylko po prostu go stworzy. Będziemy musieli określić typ Entity, aby ją zespawnować, oraz wyciągnąć współrzędne z naszego Location.

Kiedy już utworzyliśmy nasze Entity możemy użyć obiektu świata do zespawnowania go. Przed tym powinniśmy określić Cause dla spawnu, czyli powodu, tak aby inne pluginy mogły go odpowiednio obsłużyć. Do tworzenia Entitys, najlepiej użyć SpawnType jako części kontekstu. W tym przykładzie oznajmiamy że nasze Entity zostało zespawnowane przez plugin. Oczywiście możemy również sprawić, że będzie to każda jakakolwiek inna przyczyna/kontekst, który najlepiej opisuje, dlaczego Entity się pojawiło, np. spawner potworów (zobacz SpawnTypes#MOB_SPAWNER) lub spawn egg (zobacz SpawnTypes#SPAWN_EGG).