ProcessingBenchTick class

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

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

extends: EntityTickingSystem<ChunkStore>

Поля (48)

МодификаторыТипИмя
private final ComponentType<ChunkStore, BenchBlock> benchBlockComponentType
private final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType
break
private final ComponentType<ChunkStore, ProcessingBenchBlock> componentType
return
return
return
return
return
return
ChunkSection var10
BlockSection var11
int var12
int var13
int var14
int var15
int var16
int var17
int var18
int var19
BlockType var20
int var21
World var22
Store var23
ProcessingBench var24
Instant var25
float var26
var26
var26
float var27
Map var28
boolean var29
boolean var30
var30
CraftingRecipe var31
List var32
List var33
List var34
String var37
boolean var38
int var39
ProcessingBench.ProcessingSlot[] var40
int var41
float var43
ProcessingBenchBlock var6
BenchBlock var7
BlockModule.BlockStateInfo var8
Ref var9

Методы (15)

МодификаторыВозвратСигнатура
for for(TestRemoveItemSlotResult var36 : var34)
for for(int var42 = 0; var42 < var40.length; var42++)
public Query<ChunkStore> getQuerypublic Query<ChunkStore> getQuery()
if if(var7 != null && var8 != null)
if if(var10 != null)
if if(var11 != null)
if if(var20 != null)
if if(var24 != null)
if if(var31 != null)
if if(!var29)
if if(!var38)
if if(var29)
if if(var39 > 0)
if if(var30)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5)

Исходный код

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

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.window.BenchWindow;
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.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.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.Rotation3f;
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.bench.Bench;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.bench.ProcessingBench;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.CraftingRecipe;
class="kw">import com.hypixel.hytale.server.core.entity.entities.player.windows.WindowManager;
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.inventory.container.CombinedItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.container.TestRemoveItemSlotResult;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.item.ItemComponent;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
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 java.time.Instant;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

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

   class="kw">private class="kw">static void dropUpgradeItems(CommandBuffer<ChunkStore> var0, @Nullable BlockType var1, BenchBlock var2, int var3, int var4, int var5, int var6) {
      ItemStack[] var7 = var2.getUpgradeItems();
      if (var7.length != 0) {
         World var8 = var0.getExternalData().getWorld();
         Store var9 = var8.getEntityStore().getStore();
         Vector3d var10 = new Vector3d();
         if (var1 != null) {
            var1.getBlockCenter(var3, var10);
         } else {
            var10.set(0.5, 0.5, 0.5);
         }

         var10.add(var4, var5, var6);
         Holder[] var11 = ItemComponent.generateItemDrops(var9, List.of(var7), var10, Rotation3f.IDENTITY);
         if (var11.length > 0) {
            var8.execute(() -> var9.addEntities(var11, AddReason.SPAWN));
         }

         var2.setUpgradeItems(ItemStack.EMPTY_ARRAY);
      }
   }

   class="kw">public class="kw">static class OnAddOrRemoved class="kw">extends RefSystem<ChunkStore> {
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();
      class="kw">private class="kw">final ComponentType<ChunkStore, BenchBlock> benchBlockComponentType = BenchBlock.getComponentType();
      class="kw">private class="kw">final Query<ChunkStore> query = Query.and(this.benchBlockComponentType, this.blockStateInfoComponentType);

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         BlockModule.BlockStateInfo var5 = var4.getComponent(var1, this.blockStateInfoComponentType);
         assert var5 != null;
         BenchBlock var6 = var4.getComponent(var1, this.benchBlockComponentType);
         assert var6 != null;
         Ref var7 = var5.getSectionRef();
         if (var7.isValid()) {
            ChunkSection var8 = var4.getComponent(var7, ChunkSection.getComponentType());
            assert var8 != null;
            int var9 = var5.getIndex();
            int var10 = ChunkUtil.xFromIndex(var9);
            int var11 = ChunkUtil.yFromIndex(var9);
            int var12 = ChunkUtil.zFromIndex(var9);
            BlockSection var13 = var4.getComponent(var7, BlockSection.getComponentType());
            assert var13 != null;
            int var14 = var13.get(var10, var11, var12);
            BlockType var15 = BlockType.getAssetMap().getAsset(var14);
            if (var15 != null && var15.getBlockEntity() != null) {
               Bench var16 = var15.getBench();
               if (var16 == null) {
                  BenchSystems.dropUpgradeItems(
                     var4,
                     var15,
                     var6,
                     var13.getRotationIndex(var10, var11, var12),
                     ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var10),
                     ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var11),
                     ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var12)
                  );
               }
            }
         }
      }

      @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) {
            BlockModule.BlockStateInfo var5 = var4.getComponent(var1, this.blockStateInfoComponentType);
            assert var5 != null;
            BenchBlock var6 = var4.getComponent(var1, this.benchBlockComponentType);
            assert var6 != null;
            Ref var7 = var5.getSectionRef();
            if (var7.isValid()) {
               ChunkSection var8 = var4.getComponent(var7, ChunkSection.getComponentType());
               assert var8 != null;
               int var9 = var5.getIndex();
               int var10 = ChunkUtil.xFromIndex(var9);
               int var11 = ChunkUtil.yFromIndex(var9);
               int var12 = ChunkUtil.zFromIndex(var9);
               WindowManager.closeAndRemoveAll(var6.getWindows());
               BenchSystems.dropUpgradeItems(
                  var4,
                  null,
                  var6,
                  0,
                  ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var10),
                  ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var11),
                  ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var12)
               );
            }
         }
      }

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

   class="kw">public class="kw">static class ProcessingBenchLifecycle class="kw">extends RefSystem<ChunkStore> {
      class="kw">private class="kw">final ComponentType<ChunkStore, ProcessingBenchBlock> componentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, BenchBlock> benchBlockComponentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();

      class="kw">public ProcessingBenchLifecycle(@Nonnull ComponentType<ChunkStore, ProcessingBenchBlock> var1, @Nonnull ComponentType<ChunkStore, BenchBlock> var2) {
         this.componentType = var1;
         this.benchBlockComponentType = var2;
      }

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

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4
      ) {
         ProcessingBenchBlock var5 = var4.getComponent(var1, this.componentType);
         BenchBlock var6 = var4.getComponent(var1, this.benchBlockComponentType);
         BlockModule.BlockStateInfo var7 = var4.getComponent(var1, this.blockStateInfoComponentType);
         if (var5 != null && var6 != null && var7 != null) {
            Ref var8 = var7.getSectionRef();
            if (var8.isValid()) {
               ChunkSection var9 = var4.getComponent(var8, ChunkSection.getComponentType());
               if (var9 != null) {
                  BlockSection var10 = var4.getComponent(var8, BlockSection.getComponentType());
                  if (var10 != null) {
                     int var11 = var7.getIndex();
                     int var12 = ChunkUtil.xFromIndex(var11);
                     int var13 = ChunkUtil.yFromIndex(var11);
                     int var14 = ChunkUtil.zFromIndex(var11);
                     int var15 = ChunkUtil.worldCoordFromLocalCoord(var9.getX(), var12);
                     int var16 = ChunkUtil.worldCoordFromLocalCoord(var9.getY(), var13);
                     int var17 = ChunkUtil.worldCoordFromLocalCoord(var9.getZ(), var14);
                     int var18 = var10.get(var12, var13, var14);
                     BlockType var19 = BlockType.getAssetMap().getAsset(var18);
                     if (var19 != null) {
                        int var20 = var10.getRotationIndex(var12, var13, var14);
                        if (var5.initializeBenchConfig(var19)) {
                           World var21 = var4.getExternalData().getWorld();
                           var5.setupSlots(var21, var6, var7, var15, var16, var17, var19, var20);
                        }
                     }
                  }
               }
            }
         }
      }

      @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) {
            BlockModule.BlockStateInfo var19 = var4.getComponent(var1, this.blockStateInfoComponentType);
            if (var19 != null) {
               var19.markNeedsSaving();
            }
         } else {
            ProcessingBenchBlock var5 = var4.getComponent(var1, this.componentType);
            if (var5 != null) {
               BlockModule.BlockStateInfo var6 = var4.getComponent(var1, this.blockStateInfoComponentType);
               if (var6 != null) {
                  Ref var7 = var6.getSectionRef();
                  if (var7.isValid()) {
                     ChunkSection var8 = var4.getComponent(var7, ChunkSection.getComponentType());
                     if (var8 != null) {
                        int var9 = var6.getIndex();
                        int var10 = ChunkUtil.worldCoordFromLocalCoord(var8.getX(), ChunkUtil.xFromIndex(var9));
                        int var11 = ChunkUtil.worldCoordFromLocalCoord(var8.getY(), ChunkUtil.yFromIndex(var9));
                        int var12 = ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), ChunkUtil.zFromIndex(var9));
                        CombinedItemContainer var13 = var5.getItemContainer();
                        if (var13 != null) {
                           List var14 = var13.dropAllItemStacks();
                           var5.dropFuelItems(var14);
                           World var15 = var4.getExternalData().getWorld();
                           Store var16 = var15.getEntityStore().getStore();
                           Vector3d var17 = new Vector3d(var10 + 0.5, var11, var12 + 0.5);
                           Holder[] var18 = ItemComponent.generateItemDrops(var16, var14, var17, Rotation3f.IDENTITY);
                           if (var18.length > 0) {
                              var15.execute(() -> var16.addEntities(var18, AddReason.SPAWN));
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class ProcessingBenchTick class="kw">extends EntityTickingSystem<ChunkStore> {
      class="kw">private class="kw">final ComponentType<ChunkStore, ProcessingBenchBlock> componentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, BenchBlock> benchBlockComponentType;
      class="kw">private class="kw">final ComponentType<ChunkStore, BlockModule.BlockStateInfo> blockStateInfoComponentType = BlockModule.BlockStateInfo.getComponentType();

      class="kw">public ProcessingBenchTick(@Nonnull ComponentType<ChunkStore, ProcessingBenchBlock> var1, @Nonnull ComponentType<ChunkStore, BenchBlock> var2) {
         this.componentType = var1;
         this.benchBlockComponentType = var2;
      }

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

      @Override
      class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<ChunkStore> var3, @Nonnull Store<ChunkStore> var4, @Nonnull CommandBuffer<ChunkStore> var5) {
         ProcessingBenchBlock var6 = var3.getComponent(var2, this.componentType);
         BenchBlock var7 = var3.getComponent(var2, this.benchBlockComponentType);
         BlockModule.BlockStateInfo var8 = var3.getComponent(var2, this.blockStateInfoComponentType);
         if (var7 != null && var8 != null) {
            Ref var9 = var8.getSectionRef();
            if (var9.isValid()) {
               ChunkSection var10 = var4.getComponent(var9, ChunkSection.getComponentType());
               if (var10 != null) {
                  BlockSection var11 = var4.getComponent(var9, BlockSection.getComponentType());
                  if (var11 != null) {
                     int var12 = var8.getIndex();
                     int var13 = ChunkUtil.xFromIndex(var12);
                     int var14 = ChunkUtil.yFromIndex(var12);
                     int var15 = ChunkUtil.zFromIndex(var12);
                     int var16 = ChunkUtil.worldCoordFromLocalCoord(var10.getX(), var13);
                     int var17 = ChunkUtil.worldCoordFromLocalCoord(var10.getY(), var14);
                     int var18 = ChunkUtil.worldCoordFromLocalCoord(var10.getZ(), var15);
                     int var19 = var11.get(var13, var14, var15);
                     BlockType var20 = BlockType.getAssetMap().getAsset(var19);
                     if (var20 != null) {
                        int var21 = var11.getRotationIndex(var13, var14, var15);
                        World var22 = var4.getExternalData().getWorld();
                        Store var23 = var22.getEntityStore().getStore();
                        ProcessingBench var24 = var6.getProcessingBench();
                        if (var24 != null) {
                           Instant var25 = var23.getResource(WorldTimeResource.getResourceType()).getGameTime();
                           float var26;
                           if (var6.getLastTickGameTime() != null && var25 != null && !var25.equals(var6.getLastTickGameTime())) {
                              float var27 = (float)Math.max(0L, var25.toEpochMilli() - var6.getLastTickGameTime().toEpochMilli()) / 1000.0F;
                              var26 = (float)(var27 / WorldTimeResource.getSecondsPerTick(var22));
                           } else {
                              var26 = 0.0F;
                           }

                           String var37 = var20.getCurrentInteractionState();
                           Map var28 = var7.getWindows();
                           var6.getProcessingSlots().clear();
                           var6.checkForRecipeUpdate(var7);
                           boolean var29 = var24.getFuel() != null;
                           boolean var30 = false;
                           CraftingRecipe var31 = var6.getRecipe();
                           if (var31 != null) {
                              List var32 = CraftingManager.getOutputItemStacks(var31);
                              if (!var6.getOutputContainer().canAddItemStacks(var32, false, false)) {
                                 if ("Processing".equals(var37)) {
                                    var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                    var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                                 } else if ("ProcessCompleted".equals(var37)) {
                                    var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                    var6.playSound(var24.getEndSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                                 }

                                 var6.setActive(false, var7, var8);
                                 var6.setLastTickGameTime(var25);
                                 class="kw">return;
                              }

                              List var33 = CraftingManager.getInputMaterials(var31);
                              List var34 = var6.getInputContainer().getSlotMaterialsToRemove(var33, true, true);
                              if (var34.isEmpty()) {
                                 if ("Processing".equals(var37)) {
                                    var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                    var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                                 } else if ("ProcessCompleted".equals(var37)) {
                                    var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                    var6.playSound(var24.getEndSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                                 }

                                 var6.setInputProgress(0.0F);
                                 var6.setActive(false, var7, var8);
                                 var6.clearCurrentRecipe();
                                 var6.setLastTickGameTime(var25);
                                 class="kw">return;
                              }

                              for (TestRemoveItemSlotResult var36 : var34) {
                                 var6.getProcessingSlots().addAll(var36.getPickedSlots());
                              }

                              var6.sendProcessingSlots(var28);
                              var30 = true;
                           } else {
                              if (!var29) {
                                 if ("Processing".equals(var37)) {
                                    var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                    var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                                 } else if ("ProcessCompleted".equals(var37)) {
                                    var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                    var6.playSound(var24.getEndSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                                 }

                                 var6.setLastTickGameTime(var25);
                                 class="kw">return;
                              }

                              boolean var38 = var24.shouldAllowNoInputProcessing();
                              if (!var38 && "Processing".equals(var37)) {
                                 var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                 var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                              } else if ("ProcessCompleted".equals(var37)) {
                                 var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                 var6.playSound(var24.getEndSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                                 var6.setActive(false, var7, var8);
                                 var6.sendProgress(0.0F, var28);
                                 var6.setLastTickGameTime(var25);
                                 class="kw">return;
                              }

                              var6.sendProgress(0.0F, var28);
                              if (!var38) {
                                 var6.setActive(false, var7, var8);
                                 var6.setLastTickGameTime(var25);
                                 class="kw">return;
                              }
                           }

                           int var39 = var6.advanceProcessing(var26, var23, var7, var8, var16, var17, var18, var20, var21);
                           if (!var30 && var6.isActive()) {
                              var6.consumeFuelForDuration(var26, var23, var16, var17, var18, var20, var21);
                           }

                           var6.getProcessingFuelSlots().clear();
                           if (var29) {
                              ProcessingBench.ProcessingSlot[] var40 = var24.getFuel();
                              if (var6.isActive() && var6.getFuelTime() > 0.0F && var40 != null) {
                                 for (int var42 = 0; var42 < var40.length; var42++) {
                                    if (var6.getFuelContainer().getItemStack((short)var42) != null) {
                                       var6.getProcessingFuelSlots().add((short)var42);
                                       break;
                                    }
                                 }
                              }

                              if (!var6.isActive() || var6.getFuelTime() <= 0.0F) {
                                 var6.setLastConsumedFuelTotal(0);
                                 if ("Processing".equals(var37) || "ProcessCompleted".equals(var37)) {
                                    var6.setBlockInteractionState("class="kw">default", var20, var22, var16, var17, var18);
                                    var6.playSound(var24.getFailedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                                    var6.setActive(false, var7, var8);
                                 }

                                 var6.setLastTickGameTime(var25);
                                 class="kw">return;
                              }

                              var6.updateFuelValues(var28);
                           }

                           if (var39 > 0) {
                              var6.setBlockInteractionState("ProcessCompleted", var20, var22, var16, var17, var18);
                              var6.playSound(var6.getBench().getCompletedSoundEventIndex(), var23, var20, var21, var16, var17, var18);
                           } else {
                              if (!"Processing".equals(var37)) {
                                 var6.setBlockInteractionState("Processing", var20, var22, var16, var17, var18);
                              }

                              if (var30) {
                                 int var41 = var7.getTierLevel();
                                 float var43 = var6.getRecipeTimeSeconds(var41);
                                 if (var6.getRecipe() != null && var43 > 0.0F) {
                                    var6.sendProgress(var6.getInputProgress() / var43, var28);
                                 } else {
                                    var6.sendProgress(0.0F, var28);
                                 }
                              }
                           }

                           var6.setLastTickGameTime(var25);
                        }
                     }
                  }
               }
            }
         }
      }
   }
}