MusicContainer class

Пакет: com.hypixel.hytale.server.core.asset.type.musiccontainer.config

Файл: com/hypixel/hytale/server/core/asset/type/musiccontainer/config/MusicContainer.java

implements: JsonAssetWithMap<String, IndexedAssetMap<String, MusicContainer>>, NetworkSerializable<com.hypixel.hytale.protocol.MusicContainer>

Поля (1)

МодификаторыТипИмя
ASSET_STORE

Методы (10)

МодификаторыВозвратСигнатура
protected void fillBasePacketFieldsvoid fillBasePacketFields(@Nonnull com.hypixel.hytale.protocol.MusicContainer var1)
static IndexedAssetMap<String, MusicContainer> getAssetMapIndexedAssetMap<String, MusicContainer> getAssetMap()
static AssetStore<String, MusicContainer, IndexedAssetMap<String, MusicContainer>> getAssetStoreAssetStore<String, MusicContainer, IndexedAssetMap<String, MusicContainer>> getAssetStore()
public String getIdString getId()
public int getLoopCountint getLoopCount()
public float getVolumefloat getVolume()
if if(var0.audioCategoryId != null)
if if(ASSET_STORE == null)
public void setAudioCategoryvoid setAudioCategory(@Nullable String var1, int var2)
public void setIdvoid setId(@Nonnull String var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.type.musiccontainer.config;

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.AssetKeyValidator;
class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetCodecMapCodec;
class="kw">import com.hypixel.hytale.assetstore.codec.ContainedAssetCodec;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.JsonAssetWithMap;
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.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIDisplayMode;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIEditor;
class="kw">import com.hypixel.hytale.codec.validation.ValidatorCache;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.common.util.AudioUtil;
class="kw">import com.hypixel.hytale.protocol.MusicTransitionType;
class="kw">import com.hypixel.hytale.protocol.Rangef;
class="kw">import com.hypixel.hytale.protocol.TempoSettings;
class="kw">import com.hypixel.hytale.server.core.asset.type.audiocategory.config.AudioCategory;
class="kw">import com.hypixel.hytale.server.core.asset.type.audiostate.config.AudioStateResolver;
class="kw">import com.hypixel.hytale.server.core.asset.type.audiostate.config.StateBindingConfig;
class="kw">import com.hypixel.hytale.server.core.codec.ProtocolCodecs;
class="kw">import com.hypixel.hytale.server.core.io.NetworkSerializable;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class="kw">abstract class MusicContainer
   class="kw">implements JsonAssetWithMap<String, IndexedAssetMap<String, MusicContainer>>,
   NetworkSerializable<com.hypixel.hytale.protocol.MusicContainer> {
   @Nonnull
   class="kw">public class="kw">static class="kw">final AssetCodecMapCodec<String, MusicContainer> CODEC = new AssetCodecMapCodec<>(
      Codec.STRING, (var0, var1) -> var0.id = var1, var0 -> var0.id, (var0, var1) -> var0.data = var1, var0 -> var0.data
   );
   @Nonnull
   class="kw">public class="kw">static class="kw">final Codec<String> CHILD_ASSET_CODEC = new ContainedAssetCodec<>(MusicContainer.class, CODEC);
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<TempoSettings> TEMPO_CODEC = BuilderCodec.<TempoSettings>builder(TempoSettings.class, TempoSettings::new)
      .metadata(UIDisplayMode.COMPACT)
      .<Float>append(new KeyedCodec<>("Bpm", Codec.FLOAT, true), (var0, var1) -> var0.bpm = var1, var0 -> var0.bpm)
      .addValidator(Validators.range(1.0F, 1000.0F))
      .add()
      .<Integer>append(new KeyedCodec<>("BeatsPerBar", Codec.INTEGER, true), (var0, var1) -> var0.beatsPerBar = var1, var0 -> var0.beatsPerBar)
      .addValidator(Validators.range(1, 32))
      .add()
      .<Integer>append(new KeyedCodec<>("BeatValue", Codec.INTEGER, true), (var0, var1) -> var0.beatValue = var1, var0 -> var0.beatValue)
      .addValidator(Validators.range(1, 32))
      .add()
      .build();
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<MusicContainer> ABSTRACT_CODEC = BuilderCodec.abstractBuilder(MusicContainer.class)
      .appendInherited(
         new KeyedCodec<>("Volume", Codec.FLOAT),
         (var0, var1) -> var0.volume = AudioUtil.decibelsToLinearGain(var1),
         var0 -> AudioUtil.linearGainToDecibels(var0.volume),
         (var0, var1) -> var0.volume = var1.volume
      )
      .metadata(new UIEditor(new UIEditor.FormattedNumber(null, " dB", null)))
      .addValidator(Validators.range(-100.0F, 10.0F))
      .add()
      .<Integer>appendInherited(
         new KeyedCodec<>("LoopCount", Codec.INTEGER),
         (var0, var1) -> var0.loopCount = var1,
         var0 -> var0.loopCount,
         (var0, var1) -> var0.loopCount = var1.loopCount
      )
      .documentation("Number of times to loop. 0 = infinite.")
      .addValidator(Validators.min(0))
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("Weight", Codec.FLOAT), (var0, var1) -> var0.weight = var1, var0 -> var0.weight, (var0, var1) -> var0.weight = var1.weight
      )
      .documentation("Relative weight for random selection when parent is a Random container.")
      .addValidator(Validators.min(0.001F))
      .add()
      .<Rangef>appendInherited(
         new KeyedCodec<>("SilenceAfter", ProtocolCodecs.RANGEF),
         (var0, var1) -> var0.silenceAfter = var1,
         var0 -> var0.silenceAfter,
         (var0, var1) -> var0.silenceAfter = var1.silenceAfter
      )
      .documentation("Random silence range (seconds) after this container completes as a child.")
      .add()
      .<Rangef>appendInherited(
         new KeyedCodec<>("ExitSilence", ProtocolCodecs.RANGEF),
         (var0, var1) -> var0.exitSilence = var1,
         var0 -> var0.exitSilence,
         (var0, var1) -> var0.exitSilence = var1.exitSilence
      )
      .documentation("Random silence range (seconds) when this top-level container is replaced by another. Only valid in top-level containers.")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("FadeInDuration", Codec.FLOAT),
         (var0, var1) -> var0.fadeInDuration = var1,
         var0 -> var0.fadeInDuration,
         (var0, var1) -> var0.fadeInDuration = var1.fadeInDuration
      )
      .documentation("Fade-in duration in seconds.")
      .addValidator(Validators.min(0.0F))
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("FadeOutDuration", Codec.FLOAT),
         (var0, var1) -> var0.fadeOutDuration = var1,
         var0 -> var0.fadeOutDuration,
         (var0, var1) -> var0.fadeOutDuration = var1.fadeOutDuration
      )
      .documentation("Fade-out duration in seconds.")
      .addValidator(Validators.min(0.0F))
      .add()
      .<MusicTransitionType>appendInherited(
         new KeyedCodec<>("TransitionType", new EnumCodec<>(MusicTransitionType.class)),
         (var0, var1) -> var0.transitionType = var1,
         var0 -> var0.transitionType,
         (var0, var1) -> var0.transitionType = var1.transitionType
      )
      .documentation("Per-child override for how a Horizontal parent transitions into this container.")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("TransitionDuration", Codec.FLOAT),
         (var0, var1) -> var0.transitionDuration = var1,
         var0 -> var0.transitionDuration,
         (var0, var1) -> var0.transitionDuration = var1.transitionDuration
      )
      .documentation("Per-child override for transition duration. 0 = use parent's class="kw">default.")
      .addValidator(Validators.min(0.0F))
      .add()
      .<Boolean>appendInherited(
         new KeyedCodec<>("PlayToCompletion", Codec.BOOLEAN),
         (var0, var1) -> var0.playToCompletion = var1,
         var0 -> var0.playToCompletion,
         (var0, var1) -> var0.playToCompletion = var1.playToCompletion
      )
      .documentation("If true, this container plays to completion before yielding to higher-priority music.")
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("ResumeMemoryDuration", Codec.FLOAT),
         (var0, var1) -> var0.resumeMemoryDuration = var1,
         var0 -> var0.resumeMemoryDuration,
         (var0, var1) -> var0.resumeMemoryDuration = var1.resumeMemoryDuration
      )
      .documentation("How long to retain this container's playback state after leaving so a class="kw">return resumes mid-track instead of restarting.")
      .addValidator(Validators.min(0.0F))
      .add()
      .<String>appendInherited(
         new KeyedCodec<>("NameTranslationKey", Codec.STRING),
         (var0, var1) -> var0.nameTranslationKey = var1,
         var0 -> var0.nameTranslationKey,
         (var0, var1) -> var0.nameTranslationKey = var1.nameTranslationKey
      )
      .documentation("Translation key for the display name of this music container.")
      .add()
      .<String>appendInherited(
         new KeyedCodec<>("AudioCategory", Codec.STRING),
         (var0, var1) -> var0.audioCategoryId = var1,
         var0 -> var0.audioCategoryId,
         (var0, var1) -> var0.audioCategoryId = var1.audioCategoryId
      )
      .addValidator(AudioCategory.VALIDATOR_CACHE.getValidator())
      .documentation("Audio category for volume routing. Only valid in top-level containers.")
      .add()
      .<TempoSettings>appendInherited(
         new KeyedCodec<>("Tempo", TEMPO_CODEC), (var0, var1) -> var0.tempo = var1, var0 -> var0.tempo, (var0, var1) -> var0.tempo = var1.tempo
      )
      .documentation("Tempo and beat grid settings.")
      .add()
      .<StateBindingConfig[]>append(
         new KeyedCodec<>("StateBindings", StateBindingConfig.CODEC_ARRAY), (var0, var1) -> var0.stateBindings = var1, var0 -> var0.stateBindings
      )
      .documentation("Subscribe this container to one or more AudioState axes. Per-state volume deltas will be applied to the container and its descendants.")
      .add()
      .afterDecode(var0 -> {
         if (var0.audioCategoryId != null) {
            var0.audioCategoryIndex = AudioCategory.getAssetMap().getIndex(var0.audioCategoryId);
         }

         AudioStateResolver.resolveBindings(var0.stateBindings);
      })
      .validator((var0, var1) -> AudioStateResolver.validateBindings(var0.stateBindings, "MusicContainer '" + var0.id + "'", var1))
      .build();
   class="kw">public class="kw">static class="kw">final int EMPTY_ID = 0;
   class="kw">public class="kw">static class="kw">final MusicContainer EMPTY = new SingleTrackMusicContainer("Empty");
   class="kw">private class="kw">static AssetStore<String, MusicContainer, IndexedAssetMap<String, MusicContainer>> ASSET_STORE;
   class="kw">public class="kw">static class="kw">final ValidatorCache<String> VALIDATOR_CACHE = new ValidatorCache<>(new AssetKeyValidator<>(MusicContainer::getAssetStore));
   class="kw">protected AssetExtraInfo.Data data;
   class="kw">protected String id;
   class="kw">protected float volume = 1.0F;
   class="kw">protected int loopCount = 1;
   class="kw">protected float weight = 1.0F;
   @Nullable
   class="kw">protected Rangef silenceAfter;
   @Nullable
   class="kw">protected Rangef exitSilence;
   class="kw">protected float fadeInDuration;
   class="kw">protected float fadeOutDuration;
   @Nonnull
   class="kw">protected MusicTransitionType transitionType = MusicTransitionType.Crossfade;
   class="kw">protected float transitionDuration;
   class="kw">protected boolean playToCompletion;
   class="kw">protected float resumeMemoryDuration = 30.0F;
   @Nullable
   class="kw">protected String nameTranslationKey;
   @Nullable
   class="kw">protected String audioCategoryId;
   class="kw">protected class="kw">transient int audioCategoryIndex = 0;
   @Nullable
   class="kw">protected TempoSettings tempo;
   @Nullable
   class="kw">protected StateBindingConfig[] stateBindings;

   class="kw">public class="kw">static AssetStore<String, MusicContainer, IndexedAssetMap<String, MusicContainer>> getAssetStore() {
      if (ASSET_STORE == null) {
         ASSET_STORE = AssetRegistry.getAssetStore(MusicContainer.class);
      }

      class="kw">return ASSET_STORE;
   }

   class="kw">public class="kw">static IndexedAssetMap<String, MusicContainer> getAssetMap() {
      class="kw">return (IndexedAssetMap<String, MusicContainer>)getAssetStore().getAssetMap();
   }

   class="kw">protected MusicContainer() {
   }

   class="kw">public MusicContainer(@Nonnull String var1) {
      this.id = var1;
   }

   class="kw">public String getId() {
      class="kw">return this.id;
   }

   class="kw">public void setId(@Nonnull String var1) {
      this.id = var1;
   }

   class="kw">public float getVolume() {
      class="kw">return this.volume;
   }

   class="kw">public int getLoopCount() {
      class="kw">return this.loopCount;
   }

   class="kw">public void setAudioCategory(@Nullable String var1, int var2) {
      this.audioCategoryId = var1;
      this.audioCategoryIndex = var2;
   }

   @Nonnull
   class="kw">public String[] getChildIds() {
      class="kw">return new String[0];
   }

   class="kw">protected void fillBasePacketFields(@Nonnull com.hypixel.hytale.protocol.MusicContainer var1) {
      var1.volume = this.volume;
      var1.loopCount = this.loopCount;
      var1.weight = this.weight;
      var1.silenceAfter = this.silenceAfter;
      var1.exitSilence = this.exitSilence;
      var1.fadeInDuration = this.fadeInDuration;
      var1.fadeOutDuration = this.fadeOutDuration;
      var1.transitionType = this.transitionType;
      var1.transitionDuration = this.transitionDuration;
      var1.playToCompletion = this.playToCompletion;
      var1.resumeMemoryDuration = this.resumeMemoryDuration;
      var1.nameTranslationKey = this.nameTranslationKey;
      var1.audioCategoryIndex = this.audioCategoryIndex;
      var1.tempo = this.tempo;
      var1.stateBindings = AudioStateResolver.toPacketArray(this.stateBindings);
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return this.getClass().getSimpleName() + "{id='" + this.id + "'}";
   }

   class="kw">static {
      CODEC.register("SingleTrack", SingleTrackMusicContainer.class, SingleTrackMusicContainer.CODEC);
      CODEC.register("Random", RandomMusicContainer.class, RandomMusicContainer.CODEC);
      CODEC.register("Sequence", SequenceMusicContainer.class, SequenceMusicContainer.CODEC);
      CODEC.register("Horizontal", HorizontalMusicContainer.class, HorizontalMusicContainer.CODEC);
      CODEC.register("Segment", SegmentMusicContainer.class, SegmentMusicContainer.CODEC);
   }
}