Invoquer une Entité

Avertissement

These docs were written for SpongeAPI 7 and are likely out of date. If you feel like you can help update them, please submit a PR!

Vous aurez besoin de trois choses pour faire apparaître une Entity : Une Location, un Extent et un EntityType. Le processus pour les obtenir est assez simple, vous devez simplement récupérer une Location depuis un endroit dans le code de votre plugin et choisir le type de l” Entity que vous souhaitez faire apparaître.

Par exemple, essayons d’invoquer un Creeper :

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

Cela va récupérer le monde de notre Location, dont nous aurons besoin pour l’apparition. Ensuite, il utilise EntityUniverse#createEntity(EntityType, Vector3d) pour créer l’entité, mais notez que ça ne va pas faire apparaître l’entité dans le monde, seulement la créer. Nous devrons spécifier le type de notre Entity à faire apparaître, et les coordonnées de notre Location.

Une fois que nous avons créé notre Entity, nous pouvons utiliser le monde pour faire apparaître cette Entity. Nous aurons besoin de spécifier une Cause pour l’apparition, pour que les autres plugins puissent la gérer en conséquence. Pour faire apparaître des Entitys, il est préférable d’utiliser un SpawnType dans le contexte. Dans cet exemple, nous avons déclaré que c’est un plugin qui a fait apparaître l’entité, mais nous pouvons mettre n’importe quel autre cause/contexte qui décrirait au mieux pourquoi on la fait apparaître, par exemple avec un mob spawner (Voir SpawnTypes#MOB_SPAWNER), ou un oeuf de créature (Voir SpawnTypes#SPAWN_EGG).