Spawnen eines Entitys
Wenn du ein Entity spawnen möchtest, benötigst du drei Dinge: Eine Location, ein Extent und einen EntityType. Der Weg all dies zu bekommen, ist recht einfach, du musst nur eine Location
irgendwo in deinem Plugin Code auftreiben und den Typ der Entity
auswählen, den du spawnen möchtest.
Zum Beispiel könnten wir versuchen einen Creeper zu spawnen:
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);
}
}
Dies holt die Welt von deiner Location
, die wir für den eigentlichen Spawn-Prozess benötigen. Als nächstes verwenden wir EntityUniverse#createEntity(EntityType, Vector3d) um die Entity zu überzeugen. Bitte beachte, dass dies die Entity noch nicht in der Welt spawnt, sondern nur erzeugt. Wir müssen hierfür die Art der Entity
angeben, die wie spawnen möchten, sowie die Koordinaten unserer Location`.
Sobald wir eine Entity
erstellt haben, können wir die Welt benutzen um die Entity
zu spawnen. Für das Spawnen sollten wir zudem einen Grund (Cause
) angeben, sodass andere Plugins entsprechend reagieren können. Zum Spawnen von `` Entity``s ist es am Besten, wenn einen SpawnType als Teil des Kontextes angeben. In diesem Beispiel geben wir an, dass unsere Entity durch ein Plugin gespawnt wurde, aber wir können hier jeglichen Grund angeben, der am Besten beschreibt, warum wir diese spawnen, beispielsweise ein Monsterspawner (Siehe SpawnTypes#MOB_SPAWNER), oder ein Spawnei (Siehe SpawnTypes#SPAWN_EGG).