Спавн Сущности
Предупреждение
Эти документы были написаны для SpongeAPI 7 и, вероятно, устаревшие. Если вы чувствуете, что вы можете помочь обновить их, пожалуйста, отправьте PR!
You will need three things for spawning an Entity: a Location, an Extent, and an
EntityType. The process for getting these is quite simple, you just need to grab a Location
from
somewhere in your plugin code and choose the type of Entity
you wish to spawn.
Например, давайте попытаемся заспавнить Крипера:
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
.
Once we have created our Entity
we can then use the world for spawning the Entity
. We should specify a
Cause
for the spawning so other plugins can handle it accordingly. For spawning Entity
s, it is best to use a
SpawnType as part of the context. In this example, we stated that our entity was spawned from a plugin,
however we can make it any cause/context that best describes why we are spawning this in, such as a mob spawner
(See SpawnTypes#MOB_SPAWNER), or spawn egg (See SpawnTypes#SPAWN_EGG).