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);
}
}