CraftingPlugin class

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

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

extends: JavaPlugin

Поля (41)

МодификаторыТипИмя
break
static CraftingPlugin instance
instance
private final Query<EntityStore> query
ComponentRegistryProxy var1
List var1
BsonDocument var10
CraftingRecipe var15
BenchRecipeRegistry var2
BenchRecipeRegistry var2
EventRegistry var2
PlayerRef var2
BenchUpgradeRequirement var3
ComponentType var3
String[] var3
BenchRecipeRegistry var3
Player var3
Player var3
Player var3
ComponentType var4
List var4
List var4
PlayerConfigData var4
PlayerConfigData var4
PlayerConfigData var4
UnknownComponents var4
List var5
Set var5
Set var5
DefaultAssetMap var5
Map var5
Map var6
BenchBlock var6
BenchRecipeRegistry var7
ExtraInfo var7
ItemResourceType[] var8
String var8
BenchBlock var8
BenchRequirement[] var9
Item var9
ProcessingBenchBlock var9

Методы (37)

МодификаторыВозвратСигнатура
public MigrateCraftingpublic MigrateCrafting()
public PlayerAddedSystempublic PlayerAddedSystem(@Nonnull ComponentType<EntityStore, Player> var1, @Nonnull ComponentType<EntityStore, PlayerRef> var2)
static void computeBenchRecipeRegistriesvoid computeBenchRecipeRegistries()
abstract computeBenchRecipeRegistries computeBenchRecipeRegistries()
for for(ItemResourceType var12 : var8)
for for(CraftingRecipe var7 : var4)
for for(BenchRequirement var13 : var9)
static boolean forgetRecipeboolean forgetRecipe(@Nonnull Ref<EntityStore> var0, @Nonnull String var1, @Nonnull ComponentAccessor<EntityStore> var2)
static CraftingPlugin getCraftingPlugin get()
public ComponentType<ChunkStore, BenchBlock> getBenchBlockComponentTypeComponentType<ChunkStore, BenchBlock> getBenchBlockComponentType()
abstract return getBenchRecipesreturn getBenchRecipes(var0, var1, null)
public ComponentType<EntityStore, CraftingManager> getCraftingManagerComponentTypeComponentType<EntityStore, CraftingManager> getCraftingManagerComponentType()
public ComponentType<ChunkStore, ProcessingBenchBlock> getProcessingBenchBlockComponentTypeComponentType<ChunkStore, ProcessingBenchBlock> getProcessingBenchBlockComponentType()
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
static boolean hasCategoryboolean hasCategory(@Nonnull CraftingRecipe var0, String var1)
if if(var3 == null)
if if(var8 != null)
if if(var3 != null)
if if(var3 == null)
if if(var9 != null)
if if(var9 != null)
if if(var15 != null)
static boolean isValidCraftingMaterialForBenchboolean isValidCraftingMaterialForBench(@Nonnull Bench var0, @Nonnull ItemStack var1)
static boolean isValidUpgradeMaterialForBenchboolean isValidUpgradeMaterialForBench(@Nonnull Bench var0, int var1, @Nonnull ItemStack var2)
static boolean learnRecipeboolean learnRecipe(@Nonnull Ref<EntityStore> var0, @Nonnull String var1, @Nonnull ComponentAccessor<EntityStore> var2)
public void onEntityAddpublic void onEntityAdd(@Nonnull Holder<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3)
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)
public void onEntityRemovedpublic void onEntityRemoved(@Nonnull Holder<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3)
static void onItemAssetLoadvoid onItemAssetLoad(@Nonnull LoadedAssetsEvent<String, Item, DefaultAssetMap<String, Item>> var0)
static void onItemAssetRemovevoid onItemAssetRemove(@Nonnull RemovedAssetsEvent<String, Item, DefaultAssetMap<String, Item>> var0)
static void onRecipeLoadvoid onRecipeLoad(@Nonnull LoadedAssetsEvent<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> var0)
static void onRecipeRemovevoid onRecipeRemove(@Nonnull RemovedAssetsEvent<String, CraftingRecipe, DefaultAssetMap<String, CraftingRecipe>> var0)
static void sendKnownRecipesvoid sendKnownRecipes(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1)
abstract sendKnownRecipes sendKnownRecipes(var0, var2)
abstract super super(var1)

Исходный код

Показать/скрыть
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
      ) {
      }
   }
}