MusicEmitterBlock class

Пакет: com.hypixel.hytale.builtin.audio.components

Файл: com/hypixel/hytale/builtin/audio/components/MusicEmitterBlock.java

implements: Component<ChunkStore>

Поля (3)

МодификаторыТипИмя
final BuilderCodec<MusicEmitterBlock> CODEC
MusicEmitterConfig var1
MusicEmitterBlock var8

Методы (10)

МодификаторыВозвратСигнатура
public int getAudioCategoryOverrideIndexint getAudioCategoryOverrideIndex()
static ComponentType<ChunkStore, MusicEmitterBlock> getComponentTypeComponentType<ChunkStore, MusicEmitterBlock> getComponentType()
public float getMaxDistancefloat getMaxDistance()
public int getMusicContainerIndexint getMusicContainerIndex()
public long getOriginEpochMillislong getOriginEpochMillis()
public float getReferenceDistancefloat getReferenceDistance()
public float getSpatialBlendfloat getSpatialBlend()
static int normalizeIndexint normalizeIndex(int var0)
private void resolveIndexesvoid resolveIndexes()
public void setOriginEpochMillisvoid setOriginEpochMillis(long var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.audio.components;

class="kw">import com.hypixel.hytale.builtin.audio.AudioPlugin;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.common.util.AudioUtil;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.protocol.MusicEmitterConfig;
class="kw">import com.hypixel.hytale.server.core.asset.type.audiocategory.config.AudioCategory;
class="kw">import com.hypixel.hytale.server.core.asset.type.musiccontainer.config.MusicContainer;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class MusicEmitterBlock class="kw">implements Component<ChunkStore> {
   class="kw">public class="kw">static class="kw">final BuilderCodec<MusicEmitterBlock> CODEC = BuilderCodec.builder(MusicEmitterBlock.class, MusicEmitterBlock::new)
      .appendInherited(
         new KeyedCodec<>("MusicContainer", Codec.STRING, true),
         (var0, var1) -> var0.musicContainerId = var1,
         var0 -> var0.musicContainerId,
         (var0, var1) -> var0.musicContainerId = var1.musicContainerId
      )
      .addValidator(MusicContainer.VALIDATOR_CACHE.getValidator())
      .documentation("MusicContainer asset id this emitter plays.")
      .add()
      .<String>appendInherited(
         new KeyedCodec<>("AudioCategoryOverride", Codec.STRING),
         (var0, var1) -> var0.audioCategoryOverrideId = var1,
         var0 -> var0.audioCategoryOverrideId,
         (var0, var1) -> var0.audioCategoryOverrideId = var1.audioCategoryOverrideId
      )
      .addValidator(AudioCategory.VALIDATOR_CACHE.getValidator())
      .documentation("Optional AudioCategory asset id overriding the container's routing.")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("ReferenceDistance", Codec.FLOAT),
         (var0, var1) -> var0.referenceDistance = var1,
         var0 -> var0.referenceDistance,
         (var0, var1) -> var0.referenceDistance = var1.referenceDistance
      )
      .addValidator(Validators.min(0.0F))
      .documentation("Distance at which the emitter plays at full volume.")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("MaxDistance", Codec.FLOAT),
         (var0, var1) -> var0.maxDistance = var1,
         var0 -> var0.maxDistance,
         (var0, var1) -> var0.maxDistance = var1.maxDistance
      )
      .addValidator(Validators.min(0.0F))
      .documentation("Distance beyond which the emitter is inaudible.")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("SpatialBlend", Codec.FLOAT),
         (var0, var1) -> var0.spatialBlend = var1,
         var0 -> var0.spatialBlend,
         (var0, var1) -> var0.spatialBlend = var1.spatialBlend
      )
      .addValidator(Validators.range(0.0F, 1.0F))
      .documentation("0 = fully 2D, 1 = fully 3D positioned.")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("ReverbSend", Codec.FLOAT),
         (var0, var1) -> var0.reverbSend = var1,
         var0 -> var0.reverbSend,
         (var0, var1) -> var0.reverbSend = var1.reverbSend
      )
      .addValidator(Validators.range(0.0F, 1.0F))
      .documentation("Fraction routed to environment reverb. 0 = dry, 1 = full. Lower keeps sustained music from washing in reverberant spaces.")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("Volume", Codec.FLOAT),
         (var0, var1) -> var0.volume = AudioUtil.decibelsToLinearGain(var1),
         var0 -> AudioUtil.linearGainToDecibels(var0.volume),
         (var0, var1) -> var0.volume = var1.volume
      )
      .addValidator(Validators.range(-80.0F, 24.0F))
      .documentation("Volume adjustment in decibels, usually to compensate for a quiet mono downmix. 0 = unchanged.")
      .add()
      .<Boolean>appendInherited(
         new KeyedCodec<>("Loop", Codec.BOOLEAN), (var0, var1) -> var0.loop = var1, var0 -> var0.loop, (var0, var1) -> var0.loop = var1.loop
      )
      .documentation("Loop the container indefinitely, overriding its authored LoopCount.")
      .add()
      .<Long>append(new KeyedCodec<>("Origin", Codec.LONG), (var0, var1) -> var0.originEpochMillis = var1, var0 -> var0.originEpochMillis)
      .documentation("Persisted epoch-milli the emitter first started. 0 = unstamped.")
      .add()
      .afterDecode(MusicEmitterBlock::resolveIndexes)
      .build();
   @Nullable
   class="kw">protected String musicContainerId;
   @Nullable
   class="kw">protected String audioCategoryOverrideId;
   class="kw">protected float referenceDistance = 8.0F;
   class="kw">protected float maxDistance = 25.0F;
   class="kw">protected float spatialBlend = 0.6F;
   class="kw">protected float reverbSend = 0.35F;
   class="kw">protected float volume = 1.0F;
   class="kw">protected boolean loop = true;
   class="kw">protected long originEpochMillis;
   class="kw">protected class="kw">transient int musicContainerIndex = 0;
   class="kw">protected class="kw">transient int audioCategoryOverrideIndex = 0;

   class="kw">public class="kw">static ComponentType<ChunkStore, MusicEmitterBlock> getComponentType() {
      class="kw">return AudioPlugin.get().getMusicEmitterBlockComponentType();
   }

   class="kw">private class="kw">static int normalizeIndex(int var0) {
      class="kw">return var0 == Integer.MIN_VALUE ? 0 : var0;
   }

   @Nonnull
   class="kw">public class="kw">static MusicEmitterBlock create(@Nonnull String var0, @Nullable String var1, float var2, float var3, float var4, float var5, float var6, boolean var7) {
      MusicEmitterBlock var8 = new MusicEmitterBlock();
      var8.musicContainerId = var0;
      var8.audioCategoryOverrideId = var1;
      var8.referenceDistance = var2;
      var8.maxDistance = var3;
      var8.spatialBlend = var4;
      var8.reverbSend = var5;
      var8.volume = var6;
      var8.loop = var7;
      var8.resolveIndexes();
      class="kw">return var8;
   }

   class="kw">private MusicEmitterBlock() {
   }

   class="kw">private void resolveIndexes() {
      this.musicContainerIndex = this.musicContainerId == null ? 0 : normalizeIndex(MusicContainer.getAssetMap().getIndex(this.musicContainerId));
      this.audioCategoryOverrideIndex = this.audioCategoryOverrideId == null
         ? 0
         : normalizeIndex(AudioCategory.getAssetMap().getIndex(this.audioCategoryOverrideId));
   }

   class="kw">public MusicEmitterBlock(@Nonnull MusicEmitterBlock var1) {
      this.musicContainerId = var1.musicContainerId;
      this.audioCategoryOverrideId = var1.audioCategoryOverrideId;
      this.referenceDistance = var1.referenceDistance;
      this.maxDistance = var1.maxDistance;
      this.spatialBlend = var1.spatialBlend;
      this.reverbSend = var1.reverbSend;
      this.volume = var1.volume;
      this.loop = var1.loop;
      this.originEpochMillis = var1.originEpochMillis;
      this.musicContainerIndex = var1.musicContainerIndex;
      this.audioCategoryOverrideIndex = var1.audioCategoryOverrideIndex;
   }

   class="kw">public long getOriginEpochMillis() {
      class="kw">return this.originEpochMillis;
   }

   class="kw">public void setOriginEpochMillis(long var1) {
      this.originEpochMillis = var1;
   }

   class="kw">public int getMusicContainerIndex() {
      class="kw">return this.musicContainerIndex;
   }

   class="kw">public int getAudioCategoryOverrideIndex() {
      class="kw">return this.audioCategoryOverrideIndex;
   }

   class="kw">public float getReferenceDistance() {
      class="kw">return this.referenceDistance;
   }

   class="kw">public float getMaxDistance() {
      class="kw">return this.maxDistance;
   }

   class="kw">public float getSpatialBlend() {
      class="kw">return this.spatialBlend;
   }

   @Nonnull
   class="kw">public MusicEmitterConfig toEmitterConfigPacket() {
      MusicEmitterConfig var1 = new MusicEmitterConfig();
      var1.musicContainerIndex = this.musicContainerIndex;
      var1.audioCategoryOverrideIndex = this.audioCategoryOverrideIndex;
      var1.referenceDistance = this.referenceDistance;
      var1.maxDistance = this.maxDistance;
      var1.spatialBlend = this.spatialBlend;
      var1.reverbSend = this.reverbSend;
      var1.volume = this.volume;
      var1.loop = this.loop;
      class="kw">return var1;
   }

   @Nonnull
   @Override
   class="kw">public Component<ChunkStore> clone() {
      class="kw">return new MusicEmitterBlock(this);
   }
}