OnFarmBlockAdded class

Пакет: com.hypixel.hytale.builtin.adventure.farming

Файл: com/hypixel/hytale/builtin/adventure/farming/FarmingSystems.java

extends: RefSystem<ChunkStore>

Поля (31)

МодификаторыТипИмя
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
break
break
private final ComponentType<ChunkStore, FarmingBlock> farmingBlockComponentType
private final Query<ChunkStore> query
return
return
Store var10
WorldTimeResource var11
int var12
int var13
BlockType var14
FarmingData var15
String var16
Map var17
FarmingStageData[] var18
boolean var19
var19
var19
FarmingStageData var21
BlockType var26
int var27
int var28
int var29
int var30
BlockSection var31
FarmingBlock var5
BlockModule.BlockStateInfo var6
Ref var7
BlockSection var8
World var9

Методы (9)

МодификаторыВозвратСигнатура
for for(int var20 = 0; var20 < var18.length; var20++)
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var14 == null)
if if(var15 == null)
if if(var17 != null)
if if(var18 != null && var18.length > 0)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4)
switch switch(var21)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.adventure.farming.component.CoopResidentComponent;
class="kw">import com.hypixel.hytale.builtin.adventure.farming.config.FarmingCoopAsset;
class="kw">import com.hypixel.hytale.builtin.adventure.farming.config.stages.BlockStateFarmingStageData;
class="kw">import com.hypixel.hytale.builtin.adventure.farming.config.stages.BlockTypeFarmingStageData;
class="kw">import com.hypixel.hytale.builtin.adventure.farming.states.CoopBlock;
class="kw">import com.hypixel.hytale.builtin.adventure.farming.states.FarmingBlock;
class="kw">import com.hypixel.hytale.builtin.adventure.farming.states.TilledSoilBlock;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
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.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import com.hypixel.hytale.protocol.Rangef;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.BlockTickStrategy;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.farming.FarmingData;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.farming.FarmingStageData;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.TickSuppressionRegistry;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockOperations;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.ChunkColumn;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.ChunkFlag;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockComponentSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
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.core.util.TargetUtil;
class="kw">import java.time.Instant;
class="kw">import java.time.temporal.ChronoUnit;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.ThreadLocalRandom;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

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

   class="kw">private class="kw">static boolean hasCropAbove(@Nonnull BlockSection var0, int var1, int var2, int var3) {
      BlockType var4 = BlockType.getAssetMap().getAsset(var0.get(var1, var2 + 1, var3));
      if (var4 == null) {
         class="kw">return false;
      }

      FarmingData var5 = var4.getFarming();
      class="kw">return var5 != null && var5.getStages() != null;
   }

   @Nullable
   class="kw">private class="kw">static BlockSection blockSectionAbove(@Nonnull ComponentAccessor<ChunkStore> var0, @Nonnull ChunkSection var1) {
      Ref var2 = var0.getExternalData().getChunkSectionReference(var1.getX(), var1.getY() + 1, var1.getZ());
      class="kw">return var2 != null && var2.isValid() ? var0.getComponent(var2, BlockSection.getComponentType()) : null;
   }

   class="kw">private class="kw">static boolean updateSoilDecayTime(@Nonnull CommandBuffer<ChunkStore> var0, @Nonnull TilledSoilBlock var1, @Nullable BlockType var2) {
      if (var2 == null) {
         class="kw">return false;
      }

      FarmingData var3 = var2.getFarming();
      if (var3 != null && var3.getSoilConfig() != null) {
         FarmingData.SoilConfig var4 = var3.getSoilConfig();
         Rangef var5 = var4.getLifetime();
         if (var5 == null) {
            class="kw">return false;
         }

         double var6 = var5.min + (var5.max - var5.min) * ThreadLocalRandom.current().nextDouble();
         Instant var8 = var0.getExternalData().getWorld().getEntityStore().getStore().getResource(WorldTimeResource.getResourceType()).getGameTime();
         Instant var9 = var8.plus(Math.round(var6), ChronoUnit.SECONDS);
         var1.setDecayTime(var9);
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">public class="kw">static class CoopResidentEntitySystem class="kw">extends RefSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, CoopResidentComponent> coopResidentComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, UUIDComponent> uuidComponentType;

      class="kw">public CoopResidentEntitySystem(@Nonnull ComponentType<EntityStore, CoopResidentComponent> var1, @Nonnull ComponentType<EntityStore, UUIDComponent> var2) {
         this.coopResidentComponentType = var1;
         this.uuidComponentType = var2;
      }

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

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

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         if (var2 != RemoveReason.UNLOAD) {
            UUIDComponent var5 = var4.getComponent(var1, this.uuidComponentType);
            if (var5 != null) {
               UUID var6 = var5.getUuid();
               CoopResidentComponent var7 = var4.getComponent(var1, this.coopResidentComponentType);
               if (var7 != null) {
                  Vector3i var8 = var7.getCoopLocation();
                  World var9 = var4.getExternalData().getWorld();
                  long var10 = ChunkUtil.indexChunkFromBlock(var8.x, var8.z);
                  Ref var12 = var9.getChunkStore().getChunkReference(var10);
                  if (var12 != null && var12.isValid()) {
                     Store var13 = var9.getChunkStore().getStore();
                     WorldChunk var14 = var13.getComponent(var12, WorldChunk.getComponentType());
                     if (var14 != null && var14.is(ChunkFlag.TICKING)) {
                        ChunkColumn var15 = var13.getComponent(var12, ChunkColumn.getComponentType());
                        if (var15 != null) {
                           Ref var16 = var15.getSection(ChunkUtil.chunkCoordinate(var8.y));
                           if (var16 != null && var16.isValid()) {
                              Ref var17 = BlockModule.getBlockEntity(var13, var16, var8.x, var8.y, var8.z);
                              if (var17 != null) {
                                 CoopBlock var18 = var13.getComponent(var17, CoopBlock.getComponentType());
                                 if (var18 != null) {
                                    var18.handleResidentDespawn(var6);
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class CoopResidentTicking class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, CoopResidentComponent> coopResidentComponentType;

      class="kw">public CoopResidentTicking(@Nonnull ComponentType<EntityStore, CoopResidentComponent> var1) {
         this.coopResidentComponentType = var1;
      }

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

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         CoopResidentComponent var6 = var3.getComponent(var2, this.coopResidentComponentType);
         assert var6 != null;
         if (var6.getMarkedForDespawn()) {
            var5.removeEntity(var3.getReferenceTo(var2), RemoveReason.REMOVE);
         }
      }
   }

   class="kw">public class="kw">static class OnCoopAdded class="kw">extends RefSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, CoopBlock> coopBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public OnCoopAdded(@Nonnull ComponentType<ChunkStore, BlockModule.BlockStateInfo> var1, @Nonnull ComponentType<ChunkStore, CoopBlock> var2) {
         this.blockStateInfoComponentType = var1;
         this.coopBlockComponentType = var2;
         this.query = Query.and(var1, var2);
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         CoopBlock var5 = var4.getComponent(var1, this.coopBlockComponentType);
         assert var5 != null;
         BlockModule.BlockStateInfo var6 = var4.getComponent(var1, this.blockStateInfoComponentType);
         assert var6 != null;
         World var7 = var4.getExternalData().getWorld();
         Store var8 = var7.getEntityStore().getStore();
         WorldTimeResource var9 = var8.getResource(WorldTimeResource.getResourceType());
         int var10 = var6.getIndex();
         int var11 = ChunkUtil.xFromIndex(var10);
         int var12 = ChunkUtil.yFromIndex(var10);
         int var13 = ChunkUtil.zFromIndex(var10);
         Ref var14 = var6.getSectionRef();
         if (var14.isValid()) {
            BlockSection var15 = var4.getComponent(var14, BlockSection.getComponentType());
            if (var15 != null) {
               var15.scheduleTick(ChunkUtil.indexBlock(var11, var12, var13), var5.getNextScheduledTick(var9));
            }
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<ChunkStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         if (var2 != RemoveReason.UNLOAD) {
            CoopBlock var5 = var4.getComponent(var1, this.coopBlockComponentType);
            assert var5 != null;
            BlockModule.BlockStateInfo var6 = var4.getComponent(var1, this.blockStateInfoComponentType);
            assert var6 != null;
            Ref var7 = var6.getSectionRef();
            if (var7.isValid()) {
               int var8 = var6.getIndex();
               int var9 = ChunkUtil.xFromIndex(var8);
               int var10 = ChunkUtil.yFromIndex(var8);
               int var11 = ChunkUtil.zFromIndex(var8);
               ChunkSection var12 = var4.getComponent(var7, ChunkSection.getComponentType());
               assert var12 != null;
               int var13 = ChunkUtil.worldCoordFromLocalCoord(var12.getX(), var9);
               int var14 = ChunkUtil.worldCoordFromLocalCoord(var12.getY(), var10);
               int var15 = ChunkUtil.worldCoordFromLocalCoord(var12.getZ(), var11);
               World var16 = var4.getExternalData().getWorld();
               Store var17 = var16.getEntityStore().getStore();
               WorldTimeResource var18 = var17.getResource(WorldTimeResource.getResourceType());
               var5.handleBlockBroken(var16, var18, var17, var13, var14, var15);
            }
         }
      }

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

   class="kw">public class="kw">static class OnFarmBlockAdded class="kw">extends RefSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, FarmingBlock> farmingBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public OnFarmBlockAdded(@Nonnull ComponentType<ChunkStore, BlockModule.BlockStateInfo> var1, @Nonnull ComponentType<ChunkStore, FarmingBlock> var2) {
         this.blockStateInfoComponentType = var1;
         this.farmingBlockComponentType = var2;
         this.query = Query.and(var1, var2);
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         FarmingBlock var5 = var4.getComponent(var1, this.farmingBlockComponentType);
         assert var5 != null;
         BlockModule.BlockStateInfo var6 = var4.getComponent(var1, this.blockStateInfoComponentType);
         assert var6 != null;
         Ref var7 = var6.getSectionRef();
         if (var7.isValid()) {
            BlockSection var8 = var4.getComponent(var7, BlockSection.getComponentType());
            assert var8 != null;
            World var9 = var3.getExternalData().getWorld();
            Store var10 = var9.getEntityStore().getStore();
            WorldTimeResource var11 = var10.getResource(WorldTimeResource.getResourceType());
            if (var5.getLastTickGameTime() == null) {
               int var12 = var6.getIndex();
               int var13 = var8.get(ChunkUtil.xFromIndex(var12), ChunkUtil.yFromIndex(var12), ChunkUtil.zFromIndex(var12));
               BlockType var14 = BlockType.getAssetMap().getAsset(var13);
               if (var14 == null) {
                  class="kw">return;
               }

               FarmingData var15 = var14.getFarming();
               if (var15 == null) {
                  class="kw">return;
               }

               String var16 = var15.getStartingStageSet();
               var5.setCurrentStageSet(var16);
               var5.setLastTickGameTime(var11.getGameTime());
               var6.markNeedsSaving();
               Map var17 = var15.getStages();
               if (var17 != null) {
                  FarmingStageData[] var18 = var17.get(var16);
                  if (var18 != null && var18.length > 0) {
                     boolean var19 = false;

                     for (int var20 = 0; var20 < var18.length; var20++) {
                        FarmingStageData var21 = var18[var20];
                        class="kw">switch (var21) {
                           case BlockTypeFarmingStageData var24:
                              if (var24.getBlock().equals(var14.getId())) {
                                 var5.setGrowthProgress(var20);
                                 var19 = true;
                              }
                              break;
                           case BlockStateFarmingStageData var25:
                              BlockType var26 = var14.getBlockForState(var25.getState());
                              if (var26 != null && var26.getId().equals(var14.getId())) {
                                 var5.setGrowthProgress(var20);
                                 var19 = true;
                              }
                              break;
                           class="kw">default:
                        }
                     }

                     if (!var19 && var7 != null && var7.isValid()) {
                        var18[0].apply(var4, var7, var1, ChunkUtil.xFromIndex(var12), ChunkUtil.yFromIndex(var12), ChunkUtil.zFromIndex(var12), null);
                     }
                  }
               }
            }

            if (var5.getLastTickGameTime() == null) {
               var5.setLastTickGameTime(var11.getGameTime());
               var6.markNeedsSaving();
            }

            int var27 = var6.getIndex();
            int var28 = ChunkUtil.xFromIndex(var27);
            int var29 = ChunkUtil.yFromIndex(var27);
            int var30 = ChunkUtil.zFromIndex(var27);
            BlockSection var31 = var4.getComponent(var7, BlockSection.getComponentType());
            assert var31 != null;
            FarmingUtil.tickFarming(var4, var6, var31, var7, var1, var5, var28, var29, var30, true);
         }
      }

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

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

   class="kw">public class="kw">static class OnSoilAdded class="kw">extends RefSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, TilledSoilBlock> tilledSoilBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public OnSoilAdded(@Nonnull ComponentType<ChunkStore, BlockModule.BlockStateInfo> var1, @Nonnull ComponentType<ChunkStore, TilledSoilBlock> var2) {
         this.blockStateInfoComponentType = var1;
         this.tilledSoilBlockComponentType = var2;
         this.query = Query.and(var1, var2);
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         TilledSoilBlock var5 = var4.getComponent(var1, this.tilledSoilBlockComponentType);
         assert var5 != null;
         BlockModule.BlockStateInfo var6 = var4.getComponent(var1, this.blockStateInfoComponentType);
         assert var6 != null;
         Ref var7 = var6.getSectionRef();
         if (var7.isValid()) {
            if (!var5.isPlanted()) {
               int var8 = var6.getIndex();
               int var9 = ChunkUtil.xFromIndex(var8);
               int var10 = ChunkUtil.yFromIndex(var8);
               int var11 = ChunkUtil.zFromIndex(var8);
               BlockSection var12 = var4.getComponent(var7, BlockSection.getComponentType());
               assert var12 != null;
               Instant var13 = var5.getDecayTime();
               if (var13 == null) {
                  int var14 = var12.get(var9, var10, var11);
                  BlockType var15 = BlockType.getAssetMap().getAsset(var14);
                  FarmingSystems.updateSoilDecayTime(var4, var5, var15);
                  var13 = var5.getDecayTime();
               }

               if (var13 == null) {
                  class="kw">return;
               }

               var12.scheduleTick(ChunkUtil.indexBlock(var9, var10, var11), var13);
            }
         }
      }

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

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

   class="kw">public class="kw">static class Ticking class="kw">extends EntityTickingSystem<ChunkStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockSection> blockSectionComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, ChunkSection> chunkSectionComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, FarmingBlock> farmingBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, TilledSoilBlock> tilledSoilBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<ChunkStore, CoopBlock> coopBlockComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<ChunkStore> query;

      class="kw">public Ticking(
         @Nonnull ComponentType<ChunkStore, BlockSection> var1,
         @Nonnull ComponentType<ChunkStore, ChunkSection> var2,
         @Nonnull ComponentType<ChunkStore, FarmingBlock> var3,
         @Nonnull ComponentType<ChunkStore, TilledSoilBlock> var4,
         @Nonnull ComponentType<ChunkStore, CoopBlock> var5
      ) {
         this.blockSectionComponentType = var1;
         this.chunkSectionComponentType = var2;
         this.farmingBlockComponentType = var3;
         this.tilledSoilBlockComponentType = var4;
         this.coopBlockComponentType = var5;
         this.query = Query.and(var1, var2);
      }

      @Override
      class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
         BlockSection var6 = var3.getComponent(var2, this.blockSectionComponentType);
         assert var6 != null;
         if (var6.getTickingBlocksCountCopy() != 0) {
            ChunkSection var7 = var3.getComponent(var2, this.chunkSectionComponentType);
            assert var7 != null;
            Ref var8 = var7.getChunkColumnReference();
            if (var8 != null && var8.isValid()) {
               BlockComponentSection var9 = var3.getComponent(var2, BlockComponentSection.getComponentType());
               assert var9 != null;
               Ref var10 = var3.getReferenceTo(var2);
               TickSuppressionRegistry var11 = var4.getExternalData().getWorld().getEntityStore().getStore().getResource(TickSuppressionRegistry.RESOURCE);
               TickSuppressionRegistry var12 = var11 != null && var11.hasKind(1) ? var11 : null;
               int var13 = var7.getX();
               int var14 = var7.getZ();
               var6.forEachTicking(
                  var9,
                  var5,
                  var7.getY(),
                  (var6x, var7x, var8x, var9x, var10x, var11x) -> {
                     Ref var12 = var6x.getBlockReference(ChunkUtil.indexBlock(var8x, var9x, var10x));
                     if (var12 == null) {
                        class="kw">return BlockTickStrategy.IGNORED;
                     } else {
                        BlockModule.BlockStateInfo var13 = var7x.getComponent(var12, BlockModule.BlockStateInfo.getComponentType());
                        FarmingBlock var14 = var7x.getComponent(var12, this.farmingBlockComponentType);
                        if (var14 != null) {
                           FarmingUtil.tickFarming(var7x, var13, var6, var10, var12, var14, var8x, ChunkUtil.localCoordinate(var9x), var10x, false);
                           class="kw">return BlockTickStrategy.SLEEP;
                        } else if (var12 != null
                           && var12.isBlockSuppressed(
                              ChunkUtil.worldCoordFromLocalCoord(var13, var8x), var9x, ChunkUtil.worldCoordFromLocalCoord(var14, var10x), 1
                           )) {
                           class="kw">return BlockTickStrategy.IGNORED;
                        } else {
                           TilledSoilBlock var15 = var7x.getComponent(var12, this.tilledSoilBlockComponentType);
                           if (var15 != null) {
                              class="kw">return tickSoil(var7x, var12, var15);
                           } else {
                              CoopBlock var16 = var7x.getComponent(var12, this.coopBlockComponentType);
                              if (var16 != null) {
                                 tickCoop(var7x, var12, var16);
                                 class="kw">return BlockTickStrategy.SLEEP;
                              } else {
                                 class="kw">return BlockTickStrategy.IGNORED;
                              }
                           }
                        }
                     }
                  }
               );
            }
         }
      }

      class="kw">private class="kw">static BlockTickStrategy tickSoil(@Nonnull CommandBuffer<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, @Nonnull TilledSoilBlock var2) {
         BlockModule.BlockStateInfo var3 = var0.getComponent(var1, BlockModule.BlockStateInfo.getComponentType());
         assert var3 != null;
         int var4 = var3.getIndex();
         int var5 = ChunkUtil.xFromIndex(var4);
         int var6 = ChunkUtil.yFromIndex(var4);
         int var7 = ChunkUtil.zFromIndex(var4);
         Ref var8 = var3.getSectionRef();
         if (!var8.isValid()) {
            class="kw">return BlockTickStrategy.SLEEP;
         }

         BlockSection var9 = var0.getComponent(var8, BlockSection.getComponentType());
         if (var9 == null) {
            class="kw">return BlockTickStrategy.SLEEP;
         }

         ChunkSection var10 = var0.getComponent(var8, ChunkSection.getComponentType());
         if (var10 == null) {
            class="kw">return BlockTickStrategy.SLEEP;
         }

         BlockSection var11 = var6 == 31 ? FarmingSystems.blockSectionAbove(var0, var10) : var9;
         if (var11 == null) {
            class="kw">return BlockTickStrategy.WAIT_FOR_ADJACENT_CHUNK_LOAD;
         }

         boolean var12 = FarmingSystems.hasCropAbove(var11, var5, var6, var7);
         int var13 = var9.get(var5, var6, var7);
         BlockType var14 = BlockType.getAssetMap().getAsset(var13);
         if (var14 == null) {
            class="kw">return BlockTickStrategy.SLEEP;
         }

         Instant var15 = var0.getExternalData().getWorld().getEntityStore().getStore().getResource(WorldTimeResource.getResourceType()).getGameTime();
         Instant var16 = var2.getDecayTime();
         if (var2.isPlanted() && !var12) {
            if (!FarmingSystems.updateSoilDecayTime(var0, var2, var14)) {
               class="kw">return BlockTickStrategy.SLEEP;
            }

            Instant var26 = var2.getDecayTime();
            if (var26 != null) {
               var9.scheduleTick(ChunkUtil.indexBlock(var5, var6, var7), var26);
            }
         } else if (!var2.isPlanted() && !var12) {
            if (var16 == null || !var16.isAfter(var15)) {
               if (var14.getFarming() != null && var14.getFarming().getSoilConfig() != null) {
                  FarmingData.SoilConfig var17 = var14.getFarming().getSoilConfig();
                  String var18 = var17.getTargetBlock();
                  if (var18 == null) {
                     class="kw">return BlockTickStrategy.SLEEP;
                  }

                  int var19 = BlockType.getAssetMap().getIndex(var18);
                  if (var19 == Integer.MIN_VALUE) {
                     class="kw">return BlockTickStrategy.SLEEP;
                  }

                  BlockType var20 = BlockType.getAssetMap().getAsset(var19);
                  int var21 = var9.getRotationIndex(var5, var6, var7);
                  int var22 = ChunkUtil.worldCoordFromLocalCoord(var10.getX(), var5);
                  int var23 = ChunkUtil.worldCoordFromLocalCoord(var10.getY(), var6);
                  int var24 = ChunkUtil.worldCoordFromLocalCoord(var10.getZ(), var7);
                  ChunkStore var25 = var0.getExternalData();
                  var0.run(var8x -> {
                     if (var8.isValid()) {
                        BlockOperations.setBlock(var25, var8, var22, var23, var24, var19, var20, var21, 0, 0);
                     }
                  });
                  class="kw">return BlockTickStrategy.SLEEP;
               } else {
                  class="kw">return BlockTickStrategy.SLEEP;
               }
            }
         } else if (var12) {
            var2.setDecayTime(null);
         }

         String var27 = var2.computeBlockType(var15, var14);
         if (var27 != null && !var27.equals(var14.getId())) {
            int var28 = var9.getRotationIndex(var5, var6, var7);
            int var29 = BlockType.getAssetMap().getIndex(var27);
            BlockType var30 = BlockType.getAssetMap().getAsset(var29);
            int var31 = ChunkUtil.worldCoordFromLocalCoord(var10.getX(), var5);
            int var32 = ChunkUtil.worldCoordFromLocalCoord(var10.getY(), var6);
            int var33 = ChunkUtil.worldCoordFromLocalCoord(var10.getZ(), var7);
            ChunkStore var34 = var0.getExternalData();
            var0.run(var8x -> {
               if (var8.isValid()) {
                  BlockOperations.setBlock(var34, var8, var31, var32, var33, var29, var30, var28, 0, 2);
               }
            });
         }

         var2.setPlanted(var12);
         class="kw">return BlockTickStrategy.SLEEP;
      }

      class="kw">private class="kw">static void tickCoop(@Nonnull CommandBuffer<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, @Nonnull CoopBlock var2) {
         BlockModule.BlockStateInfo var3 = var0.getComponent(var1, BlockModule.BlockStateInfo.getComponentType());
         assert var3 != null;
         Ref var4 = var3.getSectionRef();
         if (var4.isValid()) {
            World var5 = var0.getExternalData().getWorld();
            Store var6 = var5.getEntityStore().getStore();
            WorldTimeResource var7 = var6.getResource(WorldTimeResource.getResourceType());
            FarmingCoopAsset var8 = var2.getCoopAsset();
            if (var8 != null) {
               int var9 = var3.getIndex();
               int var10 = ChunkUtil.xFromIndex(var9);
               int var11 = ChunkUtil.yFromIndex(var9);
               int var12 = ChunkUtil.zFromIndex(var9);
               BlockSection var13 = var0.getComponent(var4, BlockSection.getComponentType());
               assert var13 != null;
               ChunkSection var14 = var0.getComponent(var4, ChunkSection.getComponentType());
               assert var14 != null;
               int var15 = ChunkUtil.worldCoordFromLocalCoord(var14.getX(), var10);
               int var16 = ChunkUtil.worldCoordFromLocalCoord(var14.getY(), var11);
               int var17 = ChunkUtil.worldCoordFromLocalCoord(var14.getZ(), var12);
               double var18 = var13.getRotation(var10, var11, var12).yaw().getRadians();
               Vector3d var20 = new Vector3d().set(var8.getResidentSpawnOffset()).rotateY((float)var18);
               Vector3i var21 = new Vector3i(var15, var16, var17);
               boolean var22 = var8.getCaptureWildNPCsInRange();
               float var23 = var8.getWildCaptureRadius();
               if (var22 && var23 >= 0.0F) {
                  var5.execute(() -> {
                     List var6 = TargetUtil.getAllEntitiesInSphere(Vector3iUtil.toVector3d(var21), var23, var6);
                     boolean var7 = false;

                     for (Ref var9 : var6) {
                        var7 |= var2.tryPutWildResidentFromWild(var6, var9, var7, var21);
                     }

                     if (var7) {
                        var3.markNeedsSaving();
                     }
                  });
               }

               if (var2.shouldResidentsBeInCoop(var7)) {
                  var5.execute(() -> {
                     if (var2.ensureNoResidentsInWorld(var6)) {
                        var3.markNeedsSaving();
                     }
                  });
               } else {
                  var5.execute(
                     () -> {
                        boolean var15 = var2.ensureSpawnResidentsInWorld(var5, var6, Vector3iUtil.toVector3d(var21), var20);
                        var15 |= var2.generateProduceToInventory(var7);
                        if (var15) {
                           var3.markNeedsSaving();
                        }

                        if (var4.isValid()) {
                           BlockType var16 = BlockType.getAssetMap().getAsset(var13.get(var10, var11, var12));
                           assert var16 != null;
                           BlockOperations.setBlockInteractionState(
                              var5.getChunkStore(), var4, var15, var16, var17, var16, var2.hasProduce() ? "Produce_Ready" : "class="kw">default", false
                           );
                        }
                     }
                  );
               }

               Instant var24 = var2.getNextScheduledTick(var7);
               if (var24 != null) {
                  var13.scheduleTick(ChunkUtil.indexBlock(var10, var11, var12), var24);
               }
            }
         }
      }

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