PlayerAddedSystem class

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

Файл: com/hypixel/hytale/builtin/crafting/CraftingPlugin.java

extends: RefSystem<EntityStore>

Поля (1)

МодификаторыТипИмя
private final Query<EntityStore> query

Методы (3)

МодификаторыВозвратСигнатура
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
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.DefaultAssetMap;
class="kw">import com.hypixel.hytale.builtin.crafting.commands.RecipeCommand;
class="kw">import com.hypixel.hytale.builtin.crafting.component.BenchBlock;
class="kw">import com.hypixel.hytale.builtin.crafting.component.CraftingManager;
class="kw">import com.hypixel.hytale.builtin.crafting.component.ProcessingBenchBlock;
class="kw">import com.hypixel.hytale.builtin.crafting.interaction.LearnRecipeInteraction;
class="kw">import com.hypixel.hytale.builtin.crafting.interaction.OpenBenchPageInteraction;
class="kw">import com.hypixel.hytale.builtin.crafting.interaction.OpenProcessingBenchInteraction;
class="kw">import com.hypixel.hytale.builtin.crafting.system.BenchSystems;
class="kw">import com.hypixel.hytale.builtin.crafting.system.PlayerCraftingSystems;
class="kw">import com.hypixel.hytale.builtin.crafting.window.FieldCraftingWindow;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
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.component.data.unknown.UnknownComponents;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.event.EventRegistry;
class="kw">import com.hypixel.hytale.protocol.BenchRequirement;
class="kw">import com.hypixel.hytale.protocol.BenchType;
class="kw">import com.hypixel.hytale.protocol.ItemResourceType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.UpdateKnownRecipes;
class="kw">import com.hypixel.hytale.protocol.packets.window.WindowType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.Bench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.BenchUpgradeRequirement;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.CraftingRecipe;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandManager;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.data.PlayerConfigData;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.windows.Window;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.MaterialQuantity;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
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.PlayerRef;
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 it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;

class="kw">public class CraftingPlugin class="kw">extends JavaPlugin {
   class="kw">private class="kw">static CraftingPlugin instance;
   @Nonnull
   class="kw">private class="kw">static class="kw">final Map<String, BenchRecipeRegistry> registries = new Object2ObjectOpenHashMap();
   @Nonnull
   class="kw">private class="kw">static class="kw">final Map<String, String[]> itemGeneratedRecipes = new Object2ObjectOpenHashMap();
   class="kw">private ComponentType<EntityStore, CraftingManager> craftingManagerComponentType;
   class="kw">private ComponentType<ChunkStore, BenchBlock> benchBlockComponentType;
   class="kw">private ComponentType<ChunkStore, ProcessingBenchBlock> processingBenchBlockComponentType;

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

   @Nullable
   class="kw">public class="kw">static Set<String> getAvailableRecipesForCategory(@Nonnull String var0, @Nonnull String var1) {
      BenchRecipeRegistry var2 = registries.get(var0);
      class="kw">return var2 == null ? null : var2.getRecipesForCategory(var1);
   }

   class="kw">public class="kw">static boolean isValidCraftingMaterialForBench(@Nonnull Bench var0, @Nonnull ItemStack var1) {
      BenchRecipeRegistry var2 = registries.get(var0.getId());
      class="kw">return var2 == null ? false : var2.isValidCraftingMaterial(var1);
   }

   class="kw">public class="kw">static boolean isValidUpgradeMaterialForBench(@Nonnull Bench var0, int var1, @Nonnull ItemStack var2) {
      BenchUpgradeRequirement var3 = var0.getUpgradeRequirement(var1);
      if (var3 == null) {
         class="kw">return false;
      }

      for (MaterialQuantity var7 : var3.getInput()) {
         if (var2.getItemId().equals(var7.getItemId())) {
            class="kw">return true;
         }

         ItemResourceType[] var8 = var2.getItem().getResourceTypes();
         if (var8 != null) {
            for (ItemResourceType var12 : var8) {
               if (var12.id != null && var12.id.equals(var7.getResourceTypeId())) {
                  class="kw">return true;
               }
            }
         }
      }

      class="kw">return false;
   }

   @Override
   class="kw">protected void setup() {
      AssetRegistry.getAssetStore(Interaction.class)
         .loadAssets(
            "Hytale:Hytale",
            List.of(OpenBenchPageInteraction.SIMPLE_CRAFTING, OpenBenchPageInteraction.DIAGRAM_CRAFTING, OpenBenchPageInteraction.STRUCTURAL_CRAFTING)
         );
      AssetRegistry.getAssetStore(RootInteraction.class)
         .loadAssets(
            "Hytale:Hytale",
            List.of(
               OpenBenchPageInteraction.SIMPLE_CRAFTING_ROOT, OpenBenchPageInteraction.DIAGRAM_CRAFTING_ROOT, OpenBenchPageInteraction.STRUCTURAL_CRAFTING_ROOT
            )
         );
      ComponentRegistryProxy var1 = this.getEntityStoreRegistry();
      EventRegistry var2 = this.getEventRegistry();
      this.craftingManagerComponentType = var1.registerComponent(CraftingManager.class, CraftingManager::new);
      this.getCodecRegistry(Interaction.CODEC)
         .register("OpenBenchPage", OpenBenchPageInteraction.class, OpenBenchPageInteraction.CODEC)
         .register("OpenProcessingBench", OpenProcessingBenchInteraction.class, OpenProcessingBenchInteraction.CODEC);
      Bench.registerRootInteraction(BenchType.Crafting, OpenBenchPageInteraction.SIMPLE_CRAFTING_ROOT);
      Bench.registerRootInteraction(BenchType.DiagramCrafting, OpenBenchPageInteraction.DIAGRAM_CRAFTING_ROOT);
      Bench.registerRootInteraction(BenchType.StructuralCrafting, OpenBenchPageInteraction.STRUCTURAL_CRAFTING_ROOT);
      this.benchBlockComponentType = this.getChunkStoreRegistry().registerComponent(BenchBlock.class, "BenchBlock", BenchBlock.CODEC);
      this.processingBenchBlockComponentType = this.getChunkStoreRegistry()
         .registerComponent(ProcessingBenchBlock.class, "ProcessingBenchBlock", ProcessingBenchBlock.CODEC);
      this.getChunkStoreRegistry().registerSystem(new CraftingPlugin.MigrateCrafting());
      this.getChunkStoreRegistry().registerSystem(new BenchSystems.OnAddOrRemoved());
      this.getChunkStoreRegistry().registerSystem(new BenchSystems.ProcessingBenchTick(this.processingBenchBlockComponentType, this.benchBlockComponentType));
      this.getChunkStoreRegistry()
         .registerSystem(new BenchSystems.ProcessingBenchLifecycle(this.processingBenchBlockComponentType, this.benchBlockComponentType));
      Window.CLIENT_REQUESTABLE_WINDOW_TYPES.put(WindowType.PocketCrafting, FieldCraftingWindow::new);
      var2.register(LoadedAssetsEvent.class, CraftingRecipe.class, CraftingPlugin::onRecipeLoad);
      var2.register(RemovedAssetsEvent.class, CraftingRecipe.class, CraftingPlugin::onRecipeRemove);
      var2.register(LoadedAssetsEvent.class, Item.class, CraftingPlugin::onItemAssetLoad);
      var2.register(RemovedAssetsEvent.class, Item.class, CraftingPlugin::onItemAssetRemove);
      Interaction.CODEC.register("LearnRecipe", LearnRecipeInteraction.class, LearnRecipeInteraction.CODEC);
      CommandManager.get().registerSystemCommand(new RecipeCommand());
      ComponentType var3 = Player.getComponentType();
      ComponentType var4 = PlayerRef.getComponentType();
      var1.registerSystem(new PlayerCraftingSystems.CraftingTickingSystem(this.craftingManagerComponentType));
      var1.registerSystem(new PlayerCraftingSystems.CraftingHolderSystem(var3, this.craftingManagerComponentType));
      var1.registerSystem(new PlayerCraftingSystems.CraftingRefSystem(var3, this.craftingManagerComponentType));
      var1.registerSystem(new CraftingPlugin.PlayerAddedSystem(var3, var4));
   }

   class="kw">private class="kw">static void onItemAssetLoad(@Nonnull LoadedAssetsEvent<String, Item, DefaultAssetMap<String, Item>> var0) {
      List var1 = new ObjectArrayList();

      for (Item var3 : var0.getLoadedAssets().values()) {
         if (var3.hasRecipesToGenerate()) {
            List var4 = new ObjectArrayList();
            var3.collectRecipesToGenerate(var4);
            List var5 = new ObjectArrayList();

            for (CraftingRecipe var7 : var4) {
               String var8 = var7.getId();
               var5.add(var8);
            }

            itemGeneratedRecipes.put(var3.getId(), var5.toArray(String[]::new));
            var1.addAll(var4);
         }
      }

      if (!var1.isEmpty()) {
         CraftingRecipe.getAssetStore().loadAssets("Hytale:Hytale", var1);
      }
   }

   class="kw">private class="kw">static void onItemAssetRemove(@Nonnull RemovedAssetsEvent<String, Item, DefaultAssetMap<String, Item>> var0) {
      for (String var2 : var0.getRemovedAssets()) {
         String[] var3 = itemGeneratedRecipes.get(var2);
         if (var3 != null) {
            CraftingRecipe.getAssetStore().removeAssets(List.of(var3));
         }
      }
   }

   class="kw">private class="kw">static void onRecipeLoad(@Nonnull LoadedAssetsEvent<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> var0) {
      for (CraftingRecipe var2 : var0.getLoadedAssets().values()) {
         for (BenchRecipeRegistry var4 : registries.values()) {
            var4.removeRecipe(var2.getId());
         }

         if (var2.getBenchRequirement() != null) {
            for (BenchRequirement var6 : var2.getBenchRequirement()) {
               BenchRecipeRegistry var7 = registries.computeIfAbsent(var6.id, BenchRecipeRegistry::new);
               var7.addRecipe(var6, var2);
            }
         }
      }

      computeBenchRecipeRegistries();
   }

   class="kw">private class="kw">static void onRecipeRemove(@Nonnull RemovedAssetsEvent<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> var0) {
      for (String var2 : var0.getRemovedAssets()) {
         for (BenchRecipeRegistry var4 : registries.values()) {
            var4.removeRecipe(var2);
         }
      }

      computeBenchRecipeRegistries();
   }

   class="kw">private class="kw">static void computeBenchRecipeRegistries() {
      for (BenchRecipeRegistry var1 : registries.values()) {
         var1.recompute();
      }
   }

   @Nonnull
   class="kw">public class="kw">static List<CraftingRecipe> getBenchRecipes(@Nonnull Bench var0) {
      class="kw">return getBenchRecipes(var0.getType(), var0.getId());
   }

   @Nonnull
   class="kw">public class="kw">static List<CraftingRecipe> getBenchRecipes(BenchType var0, String var1) {
      class="kw">return getBenchRecipes(var0, var1, null);
   }

   @Nonnull
   class="kw">public class="kw">static List<CraftingRecipe> getBenchRecipes(BenchType var0, String var1, @Nullable String var2) {
      BenchRecipeRegistry var3 = registries.get(var1);
      if (var3 == null) {
         class="kw">return List.of();
      }

      List var4 = new ObjectArrayList();

      for (CraftingRecipe var8 : var3.getAllRecipes()) {
         BenchRequirement[] var9 = var8.getBenchRequirement();
         if (var9 != null) {
            for (BenchRequirement var13 : var9) {
               if (var13.type == var0 && var13.id.equals(var1) && (var2 == null || hasCategory(var8, var2))) {
                  var4.add(var8);
                  break;
               }
            }
         }
      }

      class="kw">return var4;
   }

   class="kw">private class="kw">static boolean hasCategory(@Nonnull CraftingRecipe var0, String var1) {
      for (BenchRequirement var5 : var0.getBenchRequirement()) {
         if (var5.categories != null && ArrayUtil.contains(var5.categories, var1)) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">public class="kw">static boolean learnRecipe(@Nonnull Ref<EntityStore> var0, @Nonnull String var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      Player var3 = var2.getComponent(var0, Player.getComponentType());
      assert var3 != null;
      PlayerConfigData var4 = var3.getPlayerConfigData();
      Set var5 = new HashSet<>(var4.getKnownRecipes());
      if (var5.add(var1)) {
         var4.setKnownRecipes(var5);
         sendKnownRecipes(var0, var2);
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">public class="kw">static boolean forgetRecipe(@Nonnull Ref<EntityStore> var0, @Nonnull String var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      Player var3 = var2.getComponent(var0, Player.getComponentType());
      assert var3 != null;
      PlayerConfigData var4 = var3.getPlayerConfigData();
      Set var5 = new ObjectOpenHashSet(var4.getKnownRecipes());
      if (var5.remove(var1)) {
         var4.setKnownRecipes(var5);
         sendKnownRecipes(var0, var2);
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">public class="kw">static void sendKnownRecipes(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
      PlayerRef var2 = var1.getComponent(var0, PlayerRef.getComponentType());
      assert var2 != null;
      Player var3 = var1.getComponent(var0, Player.getComponentType());
      assert var3 != null;
      PlayerConfigData var4 = var3.getPlayerConfigData();
      DefaultAssetMap var5 = Item.getAssetMap();
      Map var6 = new Object2ObjectOpenHashMap();

      for (String var8 : var4.getKnownRecipes()) {
         Item var9 = var5.getAsset(var8);
         if (var9 != null) {
            for (BenchRecipeRegistry var11 : registries.values()) {
               for (String var14 : var11.getIncomingRecipesForItem(var9.getId())) {
                  CraftingRecipe var15 = CraftingRecipe.getAssetMap().getAsset(var14);
                  if (var15 != null) {
                     var6.put(var8, var15.toPacket(var8));
                  }
               }
            }
         }
      }

      var2.getPacketHandler().writeNoCache(new UpdateKnownRecipes(var6));
   }

   class="kw">public ComponentType<EntityStore, CraftingManager> getCraftingManagerComponentType() {
      class="kw">return this.craftingManagerComponentType;
   }

   class="kw">public ComponentType<ChunkStore, BenchBlock> getBenchBlockComponentType() {
      class="kw">return this.benchBlockComponentType;
   }

   class="kw">public ComponentType<ChunkStore, ProcessingBenchBlock> getProcessingBenchBlockComponentType() {
      class="kw">return this.processingBenchBlockComponentType;
   }

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

   class="kw">public class="kw">static class MigrateCrafting class="kw">extends BlockModule.MigrationSystem {
      class="kw">public MigrateCrafting() {
      }

      @Override
      class="kw">public void onEntityAdd(@Nonnull Holder<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3) {
         UnknownComponents var4 = var1.getComponent(ChunkStore.REGISTRY.getUnknownComponentType());
         assert var4 != null;
         Map var5 = var4.getUnknownComponents();
         if (var5.containsKey("crafting")) {
            BenchBlock var6 = var4.removeComponent("crafting", BenchBlock.CODEC);
            assert var6 != null;
            var1.putComponent(BenchBlock.getComponentType(), var6);
         } else if (var5.containsKey("processingBench")) {
            BsonDocument var10 = var5.remove("processingBench");
            ExtraInfo var7 = ExtraInfo.THREAD_LOCAL.get();
            BenchBlock var8 = BenchBlock.CODEC.decode(var10, var7);
            var7.getValidationResults().logOrThrowValidatorExceptions(CraftingPlugin.get().getLogger());
            ProcessingBenchBlock var9 = ProcessingBenchBlock.CODEC.decode(var10, var7);
            var7.getValidationResults().logOrThrowValidatorExceptions(CraftingPlugin.get().getLogger());
            assert var9 != null;
            assert var8 != null;
            var1.putComponent(ProcessingBenchBlock.getComponentType(), var9);
            var1.putComponent(BenchBlock.getComponentType(), var8);
         }
      }

      @Override
      class="kw">public void onEntityRemoved(@Nonnull Holder<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3) {
      }

      @Nullable
      @Override
      class="kw">public Query<ChunkStore> getQuery() {
         class="kw">return ChunkStore.REGISTRY.getUnknownComponentType();
      }
   }

   class="kw">public class="kw">static class PlayerAddedSystem class="kw">extends RefSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public PlayerAddedSystem(@Nonnull ComponentType<EntityStore, Player> var1, @Nonnull ComponentType<EntityStore, PlayerRef> var2) {
         this.query = Archetype.of(var1, var2);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         CraftingPlugin.sendKnownRecipes(var1, var4);
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
      }
   }
}