AmbiencePluginConfig class

Пакет: com.hypixel.hytale.builtin.ambience

Файл: com/hypixel/hytale/builtin/ambience/AmbiencePlugin.java

Поля (2)

МодификаторыТипИмя
public static final BuilderCodec<AmbiencePlugin.AmbiencePluginConfig> CODEC
private String ambientEmitterModel

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetReferences;
class="kw">import com.hypixel.hytale.assetstore.event.LoadedAssetsEvent;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedAssetMap;
class="kw">import com.hypixel.hytale.builtin.ambience.commands.AmbienceCommands;
class="kw">import com.hypixel.hytale.builtin.ambience.components.AmbientEmitterComponent;
class="kw">import com.hypixel.hytale.builtin.ambience.systems.AmbientEmitterSystems;
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.component.ComponentRegistryProxy;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.server.core.asset.type.ambiencefx.config.AmbienceFX;
class="kw">import com.hypixel.hytale.server.core.asset.type.ambiencefx.config.AmbienceFXMusic;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset;
class="kw">import com.hypixel.hytale.server.core.asset.type.musiccontainer.config.MusicContainer;
class="kw">import com.hypixel.hytale.server.core.asset.type.musiccontainer.config.RandomMusicContainer;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.AudioComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Intangible;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabCopyableComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.core.util.Config;
class="kw">import java.util.HashMap;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class AmbiencePlugin class="kw">extends JavaPlugin {
   @Nonnull
   class="kw">private class="kw">static class="kw">final String DEFAULT_AMBIENT_EMITTER_MODEL = "NPC_Spawn_Marker";
   class="kw">private class="kw">static AmbiencePlugin instance;
   class="kw">private ComponentType<EntityStore, AmbientEmitterComponent> ambientEmitterComponentType;
   @Nonnull
   class="kw">private class="kw">final Config<AmbiencePlugin.AmbiencePluginConfig> config = this.withConfig("AmbiencePlugin", AmbiencePlugin.AmbiencePluginConfig.CODEC);
   class="kw">private Model ambientEmitterModel;

   class="kw">public class="kw">static AmbiencePlugin get() {
      class="kw">return instance;
   }

   class="kw">public AmbiencePlugin(@Nonnull JavaPluginInit var1) {
      super(var1);
      instance = this;
   }

   @Override
   class="kw">protected void setup() {
      ComponentRegistryProxy var1 = this.getEntityStoreRegistry();
      this.ambientEmitterComponentType = var1.registerComponent(AmbientEmitterComponent.class, "AmbientEmitter", AmbientEmitterComponent.CODEC);
      ComponentType var2 = TransformComponent.getComponentType();
      ComponentType var3 = NetworkId.getComponentType();
      ComponentType var4 = Intangible.getComponentType();
      ComponentType var5 = PrefabCopyableComponent.getComponentType();
      ComponentType var6 = AudioComponent.getComponentType();
      var1.registerSystem(new AmbientEmitterSystems.EntityAdded(this.ambientEmitterComponentType, var2, var3, var4, var5));
      var1.registerSystem(new AmbientEmitterSystems.EntityRefAdded(this.ambientEmitterComponentType, var2, var6, var3, var4));
      var1.registerSystem(new AmbientEmitterSystems.Ticking(this.ambientEmitterComponentType, var2));
      this.getCommandRegistry().registerCommand(new AmbienceCommands());
      this.getEventRegistry().register(LoadedAssetsEvent.class, AmbienceFX.class, this::onAmbienceFXLoaded);
   }

   class="kw">private void onAmbienceFXLoaded(@Nonnull LoadedAssetsEvent<String, AmbienceFX, IndexedAssetMap<String, AmbienceFX>> var1) {
      Map var2 = new HashMap<>();

      for (Entry var4 : var1.getLoadedAssets().entrySet()) {
         AmbienceFX var5 = var4.getValue();
         AmbienceFXMusic var6 = var5.consumeLegacyMusic();
         if (var6 != null) {
            String var7 = "_legacy_" + var5.getId();
            RandomMusicContainer var8 = RandomMusicContainer.fromLegacy(var7, var6, var2);
            var8.setId(var7);
            var8.setAudioCategory(var5.getAudioCategoryId(), var5.getAudioCategoryIndex());
            AssetReferences var9 = new AssetReferences<>(AmbienceFX.class, Set.of(var4.getKey()));
            var2.put(var8, List.of(var9));
         }
      }

      if (!var2.isEmpty()) {
         MusicContainer.getAssetStore().loadAssetsWithReferences("Hytale:Hytale", var2);
      }
   }

   @Override
   class="kw">protected void start() {
      AmbiencePlugin.AmbiencePluginConfig var1 = this.config.get();
      String var2 = var1.ambientEmitterModel;
      DefaultAssetMap var3 = ModelAsset.getAssetMap();
      ModelAsset var4 = var3.getAsset(var2);
      if (var4 == null) {
         this.getLogger().at(Level.SEVERE).log("Ambient emitter model %s does not exist", var2);
         var4 = var3.getAsset("NPC_Spawn_Marker");
         if (var4 == null) {
            throw new IllegalStateException(String.format("Default ambient emitter marker '%s' not found", "NPC_Spawn_Marker"));
         }
      }

      this.ambientEmitterModel = Model.createUnitScaleModel(var4);
   }

   class="kw">public ComponentType<EntityStore, AmbientEmitterComponent> getAmbientEmitterComponentType() {
      class="kw">return this.ambientEmitterComponentType;
   }

   class="kw">public Model getAmbientEmitterModel() {
      class="kw">return this.ambientEmitterModel;
   }

   class="kw">public class="kw">static class AmbiencePluginConfig {
      @Nonnull
      class="kw">public class="kw">static class="kw">final BuilderCodec<AmbiencePlugin.AmbiencePluginConfig> CODEC = BuilderCodec.builder(
            AmbiencePlugin.AmbiencePluginConfig.class, AmbiencePlugin.AmbiencePluginConfig::new
         )
         .append(new KeyedCodec<>("AmbientEmitterModel", Codec.STRING), (var0, var1) -> var0.ambientEmitterModel = var1, var0 -> var0.ambientEmitterModel)
         .add()
         .build();
      class="kw">private String ambientEmitterModel = "NPC_Spawn_Marker";

      class="kw">public AmbiencePluginConfig() {
      }
   }
}