CompanionBlockSpawnerPlugin class

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

Файл: com/hypixel/hytale/builtin/companionblockspawner/CompanionBlockSpawnerPlugin.java

extends: JavaPlugin

Поля (8)

МодификаторыТипИмя
static CompanionBlockSpawnerPlugin instance
instance
Collection var1
BlockTypeAssetMap var1
int var2
BlockType var5
Holder var6
var6

Методы (18)

МодификаторыВозвратСигнатура
static CompanionBlockSpawnerPlugin getCompanionBlockSpawnerPlugin get()
ComponentType<EntityStore, CompanionSpawnerMarkerReference> getMarkerReferenceComponentTypeComponentType<EntityStore, CompanionSpawnerMarkerReference> getMarkerReferenceComponentType()
CompanionBlockSpawnerRecipeCompendium getRecipeIndexCompanionBlockSpawnerRecipeCompendium getRecipeIndex()
ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> getSpatialResourceResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> getSpatialResource()
ComponentType<ChunkStore, CompanionBlockSpawnerBlock> getSpawnerBlockComponentTypeComponentType<ChunkStore, CompanionBlockSpawnerBlock> getSpawnerBlockComponentType()
if if(this.ready)
if if(this.ready)
if if(this.ready)
if if(this.ready)
if if(var5 != null)
if if(var2 > 0)
private void injectComponentsvoid injectComponents()
private void onBlockTypesChangedvoid onBlockTypesChanged(@Nonnull LoadedAssetsEvent<String, BlockType, BlockTypeAssetMap<String, BlockType>> var1)
private void onBlockTypesRemovedvoid onBlockTypesRemoved(@Nonnull RemovedAssetsEvent<String, BlockType, BlockTypeAssetMap<String, BlockType>> var1)
private void onRecipesChangedvoid onRecipesChanged(@Nonnull LoadedAssetsEvent<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> var1)
private void onRecipesRemovedvoid onRecipesRemoved(@Nonnull RemovedAssetsEvent<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> var1)
private void rebuildRecipeIndexvoid rebuildRecipeIndex()
abstract super super(var1)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.event.LoadedAssetsEvent;
class="kw">import com.hypixel.hytale.assetstore.event.RemovedAssetsEvent;
class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.builtin.companionblockspawner.config.CompanionBlockSpawnerRecipe;
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.ResourceType;
class="kw">import com.hypixel.hytale.component.spatial.KDTree;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockset.config.BlockSet;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
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.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import java.util.Collection;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

class="kw">public class CompanionBlockSpawnerPlugin class="kw">extends JavaPlugin {
   class="kw">private class="kw">static CompanionBlockSpawnerPlugin instance;
   class="kw">private ComponentType<ChunkStore, CompanionBlockSpawnerBlock> spawnerBlockComponentType;
   class="kw">private ComponentType<EntityStore, CompanionSpawnerMarkerReference> markerReferenceComponentType;
   class="kw">private ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> spatialResource;
   class="kw">private class="kw">final CompanionBlockSpawnerRecipeCompendium recipeIndex = new CompanionBlockSpawnerRecipeCompendium();
   class="kw">private boolean ready;

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

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

   @Override
   class="kw">public void setup() {
      instance = this;
      this.getAssetRegistry()
         .register(
            ((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(
                              CompanionBlockSpawnerRecipe.class, new DefaultAssetMap()
                           )
                           .setPath("NPC/Spawn/CompanionBlockSpawners"))
                        .setCodec(CompanionBlockSpawnerRecipe.CODEC))
                     .setKeyFunction(CompanionBlockSpawnerRecipe::getId))
                  .loadsAfter(SpawnMarker.class, BlockSet.class, BlockType.class, Item.class))
               .build()
         );
      this.getEventRegistry().register(LoadedAssetsEvent.class, CompanionBlockSpawnerRecipe.class, this::onRecipesChanged);
      this.getEventRegistry().register(RemovedAssetsEvent.class, CompanionBlockSpawnerRecipe.class, this::onRecipesRemoved);
      this.getEventRegistry().register(LoadedAssetsEvent.class, BlockType.class, this::onBlockTypesChanged);
      this.getEventRegistry().register(RemovedAssetsEvent.class, BlockType.class, this::onBlockTypesRemoved);
      this.spawnerBlockComponentType = this.getChunkStoreRegistry()
         .registerComponent(CompanionBlockSpawnerBlock.class, "CompanionBlockSpawnerBlock", CompanionBlockSpawnerBlock.CODEC);
      this.markerReferenceComponentType = this.getEntityStoreRegistry()
         .registerComponent(CompanionSpawnerMarkerReference.class, "CompanionSpawnerMarkerReference", CompanionSpawnerMarkerReference.CODEC);
      this.spatialResource = this.getChunkStoreRegistry().registerSpatialResource(() -> new KDTree<>(Ref::isValid));
      this.getChunkStoreRegistry().registerSystem(new CompanionBlockSpawnerSpatialSystem(this.spatialResource, this.spawnerBlockComponentType));
      this.getChunkStoreRegistry().registerSystem(new CompanionBlockSpawnerSystems.AddOrRemove(this.spawnerBlockComponentType));
      this.getChunkStoreRegistry().registerSystem(new CompanionBlockSpawnerSystems.ReconcileTick(this.spawnerBlockComponentType));
      this.getEntityStoreRegistry().registerSystem(new CompanionBlockSpawnerSystems.MarkerHeartbeat(this.markerReferenceComponentType));
   }

   @Override
   class="kw">public void start() {
      this.rebuildRecipeIndex();
      this.ready = true;
   }

   ComponentType<ChunkStore, CompanionBlockSpawnerBlock> getSpawnerBlockComponentType() {
      class="kw">return this.spawnerBlockComponentType;
   }

   ComponentType<EntityStore, CompanionSpawnerMarkerReference> getMarkerReferenceComponentType() {
      class="kw">return this.markerReferenceComponentType;
   }

   ResourceType<ChunkStore, SpatialResource<Ref<ChunkStore>, ChunkStore>> getSpatialResource() {
      class="kw">return this.spatialResource;
   }

   CompanionBlockSpawnerRecipeCompendium getRecipeIndex() {
      class="kw">return this.recipeIndex;
   }

   class="kw">private void onRecipesChanged(@Nonnull LoadedAssetsEvent<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> var1) {
      if (this.ready) {
         this.rebuildRecipeIndex();
      }
   }

   class="kw">private void onRecipesRemoved(@Nonnull RemovedAssetsEvent<String, CompanionBlockSpawnerRecipe, DefaultAssetMap<String, CompanionBlockSpawnerRecipe>> var1) {
      if (this.ready) {
         this.rebuildRecipeIndex();
      }
   }

   class="kw">private void onBlockTypesChanged(@Nonnull LoadedAssetsEvent<String, BlockType, BlockTypeAssetMap<String, BlockType>> var1) {
      if (this.ready) {
         this.rebuildRecipeIndex();
      }
   }

   class="kw">private void onBlockTypesRemoved(@Nonnull RemovedAssetsEvent<String, BlockType, BlockTypeAssetMap<String, BlockType>> var1) {
      if (this.ready) {
         this.rebuildRecipeIndex();
      }
   }

   class="kw">private void rebuildRecipeIndex() {
      Collection var1 = CompanionBlockSpawnerRecipe.getAssetMap().getAssetMap().values();
      this.recipeIndex.rebuild(var1);
      this.getLogger().at(Level.INFO).log("Companion block spawner: loaded %d recipe(s)", var1.size());
      this.injectComponents();
   }

   class="kw">private void injectComponents() {
      BlockTypeAssetMap var1 = BlockType.getAssetMap();
      int var2 = 0;

      for (String var4 : this.recipeIndex.getParticipatingKeys()) {
         BlockType var5 = var1.getAsset(var4);
         if (var5 != null) {
            Holder var6 = var5.getBlockEntity();
            if (var6 == null || var6.getComponent(this.spawnerBlockComponentType) == null) {
               var6 = var6 != null ? var6.clone() : ChunkStore.REGISTRY.newHolder();
               var6.putComponent(this.spawnerBlockComponentType, new CompanionBlockSpawnerBlock());
               var5.setBlockEntity(var6);
               var2++;
            }
         }
      }

      if (var2 > 0) {
         this.getLogger().at(Level.INFO).log("Injected CompanionBlockSpawnerBlock into %d block types", var2);
      }
   }
}