EncounterManagerPlugin class

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

Файл: com/hypixel/hytale/builtin/encountermanager/EncounterManagerPlugin.java

extends: JavaPlugin

Поля (17)

МодификаторыТипИмя
final String CATEGORY
instance
ComponentRegistryProxy var1
ModelAsset var1
BuilderManager var2
Schema var2
int var2
BuilderFactory var3
Schema.HytaleMetadata var3
ObjectArrayList var3
ObjectListIterator var4
World var5
Ref var5
EncounterManager var6
Holder var6
TransformComponent var7
EncounterManager var7

Методы (8)

МодификаторыВозвратСигнатура
abstract for for(int var6 = 0; var6 < var4x.size()
abstract for for(int var5 = 0; var5 < var3x.size()
static EncounterManagerPlugin getEncounterManagerPlugin get()
if if(var7 != null)
if if(this.markerModel == null)
private void onBuilderReloadedvoid onBuilderReloaded(@Nonnull BuilderInfo var1)
private void reloadEncountersvoid reloadEncounters(@Nonnull Store<EntityStore> var1, int var2)
abstract super super(var1)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionChangeTargetRole;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionClearEncounterBossBar;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionSetEncounterAudioState;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionSetEncounterBossBar;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionSetTargetNPCInvulnerable;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionSignalWorldEvent;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionStartEncounterMusic;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderActionStopEncounterMusic;
class="kw">import com.hypixel.hytale.builtin.encountermanager.npc.builders.BuilderEncounterMemberCollector;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ComponentRegistryProxy;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
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.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.schema.SchemaGenerator;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderFactory;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderInfo;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderManager;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class EncounterManagerPlugin class="kw">extends JavaPlugin {
   class="kw">public class="kw">static class="kw">final String CATEGORY = "EncounterManager";
   class="kw">public class="kw">static class="kw">final String ASSET_PATH = "Server/EncounterManager";
   class="kw">public class="kw">static class="kw">final String MARKER_MODEL = "Encounter_Marker";
   class="kw">private class="kw">static EncounterManagerPlugin instance;
   class="kw">private ComponentType<EntityStore, EncounterManager> encounterComponentType;
   class="kw">private ComponentType<EntityStore, EncounterMembers> encounterMembersComponentType;
   class="kw">private ComponentType<EntityStore, EncounterAudioState> encounterAudioStateComponentType;
   class="kw">private ComponentType<EntityStore, EncounterBossBarState> encounterBossBarStateComponentType;
   class="kw">private Model markerModel;

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

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

   @Nonnull
   class="kw">public ComponentType<EntityStore, EncounterManager> getEncounterComponentType() {
      class="kw">return this.encounterComponentType;
   }

   @Nonnull
   class="kw">public ComponentType<EntityStore, EncounterMembers> getEncounterMembersComponentType() {
      class="kw">return this.encounterMembersComponentType;
   }

   @Nonnull
   class="kw">public ComponentType<EntityStore, EncounterAudioState> getEncounterAudioStateComponentType() {
      class="kw">return this.encounterAudioStateComponentType;
   }

   @Nonnull
   class="kw">public ComponentType<EntityStore, EncounterBossBarState> getEncounterBossBarStateComponentType() {
      class="kw">return this.encounterBossBarStateComponentType;
   }

   @Override
   class="kw">protected void setup() {
      instance = this;
      ComponentRegistryProxy var1 = this.getEntityStoreRegistry();
      BuilderManager var2 = NPCPlugin.get().getBuilderManager();
      var2.addCategory("EncounterManager", EncounterManager.class);
      BuilderFactory var3 = new BuilderFactory<>(EncounterManager.class, "Type");
      var3.add("Generic", BuilderEncounterManager::new);
      var3.add("Abstract", BuilderEncounterManagerAbstract::new);
      var3.add("Variant", BuilderEncounterManagerVariant::new);
      var2.registerFactory(var3);
      var2.registerAssetPath("Server/EncounterManager", "EncounterManager");
      NPCPlugin.get()
         .registerCoreComponentType("ChangeTargetRole", BuilderActionChangeTargetRole::new)
         .registerCoreComponentType("SetTargetNPCInvulnerable", BuilderActionSetTargetNPCInvulnerable::new)
         .registerCoreComponentType("EncounterMembers", BuilderEncounterMemberCollector::new)
         .registerCoreComponentType("StartEncounterMusic", BuilderActionStartEncounterMusic::new)
         .registerCoreComponentType("SetEncounterAudioState", BuilderActionSetEncounterAudioState::new)
         .registerCoreComponentType("StopEncounterMusic", BuilderActionStopEncounterMusic::new)
         .registerCoreComponentType("SetEncounterBossBar", BuilderActionSetEncounterBossBar::new)
         .registerCoreComponentType("ClearEncounterBossBar", BuilderActionClearEncounterBossBar::new)
         .registerCoreComponentType("SignalWorldEvent", BuilderActionSignalWorldEvent::new);
      SchemaGenerator.registerAssetSchema("EncounterManager.json", var1x -> {
         Schema var2 = var2.generateSchema(var1x, EncounterManager.class);
         var2.setId("EncounterManager.json");
         var2.setTitle("EncounterManager");
         Schema.HytaleMetadata var3 = var2.getHytale();
         var3.setPath("EncounterManager");
         var3.setExtension(".json");
         class="kw">return var2;
      }, List.of("EncounterManager/*.json", "EncounterManager/**/*.json"), null);
      this.encounterComponentType = var1.registerComponent(EncounterManager.class, "EncounterManager", EncounterManager.CODEC);
      this.encounterMembersComponentType = var1.registerComponent(EncounterMembers.class, EncounterMembers::new);
      this.encounterAudioStateComponentType = var1.registerComponent(EncounterAudioState.class, EncounterAudioState::new);
      this.encounterBossBarStateComponentType = var1.registerComponent(EncounterBossBarState.class, EncounterBossBarState::new);
      var1.registerSystem(new EncounterManagerSystems.BuilderSystem(this.encounterComponentType));
      var1.registerSystem(new EncounterManagerSystems.ActivateSystem(this.encounterComponentType));
      var1.registerSystem(new EncounterManagerSystems.TickSystem(this.encounterComponentType));
      var1.registerSystem(new EncounterManagerSystems.EnsureEntityComponents(this.encounterComponentType));
      var1.registerSystem(new EncounterManagerSystems.LifecycleSystem(this.encounterComponentType));
      var1.registerSystem(new EncounterManagerSystems.TeleportSystem(this.encounterComponentType));
      var1.registerSystem(
         new EncounterMemberSystems.Tick(this.encounterMembersComponentType, this.encounterAudioStateComponentType, this.encounterBossBarStateComponentType)
      );
      var2.addBuilderReloadListener(this::onBuilderReloaded);
      NPCPlugin.get().registerBeaconReceiverProvider((var0, var1x, var3x, var4) -> var3x.forEachChunk(EncounterManager.getComponentType(), (var4x, var5) -> {
         for (int var6 = 0; var6 < var4x.size(); var6++) {
            TransformComponent var7 = var4x.getComponent(var6, TransformComponent.getComponentType());
            if (var7 != null && var7.getPosition().distanceSquared(var0) <= var1x * var1x) {
               var4.add(var4x.getReferenceTo(var6));
            }
         }
      }));
      this.getCommandRegistry().registerCommand(new EncounterCommand());
   }

   class="kw">private void onBuilderReloaded(@Nonnull BuilderInfo var1) {
      if (var1.getBuilder().category() == EncounterManager.class) {
         int var2 = var1.getIndex();

         for (Entry var4 : Universe.get().getWorlds().entrySet()) {
            World var5 = var4.getValue();
            var5.execute(() -> this.reloadEncounters(var5.getEntityStore().getStore(), var2));
         }
      }
   }

   class="kw">private void reloadEncounters(@Nonnull Store<EntityStore> var1, int var2) {
      ObjectArrayList var3 = new ObjectArrayList();
      var1.forEachChunk(this.encounterComponentType, (var3x, var4x) -> {
         for (int var5 = 0; var5 < var3x.size(); var5++) {
            EncounterManager var6 = var3x.getComponent(var5, this.encounterComponentType);
            if (var6 != null && var6.getEncounterIndex() == var2) {
               var3.add(var3x.getReferenceTo(var5));
            }
         }
      });
      ObjectListIterator var4 = var3.iterator();

      while (var4.hasNext()) {
         Ref var5 = (Ref<EntityStore>)var4.next();
         if (var5.isValid()) {
            try {
               Holder var6 = var1.removeEntity(var5, RemoveReason.UNLOAD);
               EncounterManager var7 = var6.getComponent(this.encounterComponentType);
               if (var7 != null) {
                  var7.resetRuntime();
               }

               var6.tryRemoveComponent(NetworkId.getComponentType());
               var1.addEntity(var6, AddReason.LOAD);
            } catch (RuntimeException var8) {
               ((HytaleLogger.Api)this.getLogger().at(Level.SEVERE).withCause(var8)).log("Failed to hot-reload encounter entity %s", var5);
            }
         }
      }
   }

   @Nonnull
   class="kw">public Model getMarkerModel() {
      if (this.markerModel == null) {
         ModelAsset var1 = ModelAsset.getAssetMap().getAsset("Encounter_Marker");
         Objects.requireNonNull(var1, "Missing model asset 'Encounter_Marker' for the encounter marker");
         this.markerModel = Model.createUnitScaleModel(var1);
      }

      class="kw">return this.markerModel;
   }
}