Con tu plugin de Hytale, puedes reproducir sonidos para jugadores de manera localizada, 3D y categorizada.
Índices de Sonidos
Hytale tiene una gran variedad de sonidos disponibles como claves en el AssetMap.
Consulta la lista completa de sonidos aquí.
Para obtener el índice de un sonido, usa SoundEvent.getAssetMap():
int index = SoundEvent.getAssetMap().getIndex("SFX_Cactus_Large_Hit");
Este índice es necesario para reproducir el sonido a un jugador.
Transform Component
El TransformComponent indica dónde se reproduce el sonido.
Obtener Transform de un jugador
TransformComponent transform = store.getComponent(
context.senderAsPlayerRef(),
EntityModule.get().getTransformComponentType()
);
Crear un nuevo TransformComponent (opcional)
Vector3d position = new Vector3d(0, 0, 0); // Posición
Vector3f rotation = new Vector3f(0, 0, 0); // Rotación
TransformComponent transform = new TransformComponent(position, rotation);
Nota: No se recomienda crear un TransformComponent desde cero para jugadores, ya que si están lejos, no escucharán el sonido.
PlayerRef
Necesitas una referencia al jugador (Ref).
Si tienes el objeto Player, puedes obtenerla mediante:
Ref playerRef = player.getReference();
World
El sonido debe reproducirse dentro del método execute() del objeto World:
World world = player.getWorld();
world.execute(() -> {
// Aquí dentro se reproducen los sonidos
});
Categorías de Sonido
El enum SoundCategory permite especificar el tipo de sonido:
Music→ MúsicaAmbient→ Sonidos ambientalesSFX→ Efectos de sonidoUI→ Interfaz de usuario
Esto ayuda a organizar el audio y controlar mezclas de volumen por categoría.
Reproduciendo Sonidos
Para reproducir un sonido 3D para un jugador, usa SoundUtil.playSoundEvent3dToPlayer:
int index = SoundEvent.getAssetMap().getIndex("SFX_Cactus_Large_Hit");
World world = player.getWorld();
EntityStore store = world.getEntityStore();
Ref playerRef = player.getReference();
world.execute(() -> {
TransformComponent transform = store.getStore().getComponent(
playerRef,
EntityModule.get().getTransformComponentType()
);
SoundUtil.playSoundEvent3dToPlayer(
playerRef, // Jugador objetivo
index, // Índice del sonido
SoundCategory.UI, // Categoría del sonido
transform.getPosition(), // Posición del sonido
store.getStore() // EntityStore
);
});
Este ejemplo reproduce un efecto de sonido de cactus al jugador, usando su posición actual en el mundo.
Tips de la integración de Sonidos
- Categorías: Úsalas para efectos de interfaz separados de música y SFX.
- Distancia: Reproducir sonidos con
TransformComponentpermite efectos 3D y distancia. - Jugador: Siempre se necesita
PlayerRefpara dirigir el sonido a un jugador específico. - World.execute(): Crucial para ejecutar acciones seguras en el hilo del mundo.
