Esta guía te mostrará cómo crear y generar entidades en Hytale. Se recomienda tener conocimientos del ECS antes de continuar. Puedes consultar la guía de ECS aquí.
Obtener el Objeto World
Antes de generar una entidad, necesitas acceder al objeto World. Hay varias formas de hacerlo:
Usando el Objeto Player
World world = player.getWorld();
Usando la Clase Universe
World world = Universe.get().getWorld("your-world-uuid");
Luego, obtén el Store<EntityStore> del mundo:
Store<EntityStore> store = world.getEntityStore().getStore();
Crear Entidades
Una entidad es simplemente un Holder<EntityStore> con varios componentes adjuntos. Para crearla:
Holder<EntityStore> holder = EntityStore.REGISTRY.newHolder();
⚠️ Nota importante:
Para interactuar con elWorld, algunas operaciones requieren ejecutarse dentro del contexto del mundo. Usaworld.execute()para encolar la tarea en el hilo del mundo:
world.execute(() -> {
// Código de creación y spawn de entidades aquí
});
Obtener un Modelo
Cada entidad necesita un modelo (Model). Puedes consultar la lista de entidades disponibles aquí. Ejemplo usando un Minecart:
ModelAsset modelAsset = ModelAsset.getAssetMap().getAsset("Minecart");
Model model = Model.createScaledModel(modelAsset, 1.0f);
Transform Component
El TransformComponent indica la posición y rotación de la entidad en el mundo.
Desde el Jugador
TransformComponent transform = store.getComponent(playerRef.getReference(), EntityModule.get().getTransformComponentType());
Crear uno nuevo
Vector3d position = new Vector3d(0, 0, 0);
Vector3f rotation = new Vector3f(0, 0, 0);
TransformComponent transform = new TransformComponent(position, rotation);
Agregar Componentes a la Entidad
Todos los componentes que necesita la entidad se agregan al Holder:
holder.addComponent(TransformComponent.getComponentType(), new TransformComponent(position, rotation));
holder.addComponent(PersistentModel.getComponentType(), new PersistentModel(model.toReference()));
holder.addComponent(ModelComponent.getComponentType(), new ModelComponent(model));
holder.addComponent(BoundingBox.getComponentType(), new BoundingBox(model.getBoundingBox()));
holder.addComponent(NetworkId.getComponentType(), new NetworkId(store.getExternalData().takeNextNetworkId()));
holder.addComponent(Interactions.getComponentType(), new Interactions());
Componentes necesarios de Hytale
Estos son componentes que Hytale espera que existan en todas las entidades:
holder.ensureComponent(UUIDComponent.getComponentType());
holder.ensureComponent(Interactable.getComponentType()); // si la entidad será interactuable
Generar la Entidad en el Mundo
Finalmente, agrega la entidad al mundo usando addEntity. Recuerda que esto debe ejecutarse dentro del hilo del mundo (world.execute()):
store.addEntity(holder, AddReason.SPAWN);
