AugmentProgressionRestoreSystem class

Пакет: com.hypixel.hytale.builtin.augmentblocks.progression

Файл: com/hypixel/hytale/builtin/augmentblocks/progression/AugmentProgressionRestoreSystem.java

extends: RefSystem<ChunkStore>

Поля (19)

МодификаторыТипИмя
return
return
AugmentBlockUpgradeLevel var10
Vector3i var11
Ref var12
AugmentBlockUpgradeLevel var3
BenchBlock var4
World var5
AugmentBlock var5
String var5
int var5
AugmentBlock var6
String var6
Vector3i var6
int var7
WorldChunk var7
int var8
BlockType var8
BlockType var9

Методы (18)

МодификаторыВозвратСигнатура
static void applyLevelsvoid applyLevels(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull AugmentBlock var3, int var4)
abstract applyLevels applyLevels(var1, var2, var3, var5, var9 - 1)
abstract applyLevels applyLevels(var1, var2, var3, var5, var8)
for for(int var2 = var1; var2 >= 1; var2--)
if if(var2 == AddReason.LOAD)
if if(var5 != null)
if if(var6 != null)
if if(var7 > 0)
if if(var10 == null)
if if(var11 != null)
if if(var5 != null)
if if(var4 != null)
if if(var6 != null)
if if(var7 != null)
if if(var8 != null)
private void restorevoid restore(@Nonnull World var1, @Nonnull Store<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3)
private void restorevoid restore(@Nonnull World var1, @Nonnull Store<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3, int var4)
static void restoreBenchTiervoid restoreBenchTier(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, int var3)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.augmentblocks.AugmentBlock;
class="kw">import com.hypixel.hytale.builtin.augmentblocks.AugmentBlocksUtils;
class="kw">import com.hypixel.hytale.builtin.augmentblocks.config.AugmentBlockUpgradeLevel;
class="kw">import com.hypixel.hytale.builtin.crafting.component.BenchBlock;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
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.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.block.BlockModule;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3i;

class="kw">public class AugmentProgressionRestoreSystem class="kw">extends RefSystem<ChunkStore> {
   @Nonnull
   class="kw">private class="kw">final ComponentType<ChunkStore, AugmentBlock> augmentBlockComponentType;
   @Nonnull
   class="kw">private class="kw">final Query<ChunkStore> query;
   class="kw">private class="kw">static class="kw">final int MAX_REPLACEMENT_DEPTH = 8;

   class="kw">public AugmentProgressionRestoreSystem(@Nonnull ComponentType<ChunkStore, AugmentBlock> var1) {
      this.augmentBlockComponentType = var1;
      this.query = Query.and(var1, BlockModule.BlockStateInfo.getComponentType());
   }

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

   @Override
   class="kw">public void onEntityAdded(@Nonnull Ref<ChunkStore> var1, @Nonnull AddReason var2, @Nonnull Store<ChunkStore> var3, @Nonnull CommandBuffer<ChunkStore> var4) {
      if (var2 == AddReason.LOAD) {
         World var5 = var3.getExternalData().getWorld();
         if (AugmentProgression.participates(var5)) {
            AugmentBlock var6 = var4.getComponent(var1, this.augmentBlockComponentType);
            if (var6 != null && var6.getProgressionKey() != null) {
               var5.execute(() -> this.restore(var5, var3, var1));
            }
         }
      }
   }

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

   class="kw">private void restore(@Nonnull World var1, @Nonnull Store<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3) {
      this.restore(var1, var2, var3, 0);
   }

   class="kw">private void restore(@Nonnull World var1, @Nonnull Store<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3, int var4) {
      if (var4 <= 8 && var3.isValid()) {
         AugmentBlock var5 = var2.getComponent(var3, this.augmentBlockComponentType);
         if (var5 != null) {
            String var6 = var5.getProgressionKey();
            if (var6 != null) {
               int var7 = AugmentProgression.getLevel(var6) - var5.getProgressionLevelOffset();
               if (var7 > 0) {
                  int var8 = Math.min(var7, var5.getMaxLevel());

                  for (int var9 = var5.getCurrentLevel() + 1; var9 <= var8; var9++) {
                     AugmentBlockUpgradeLevel var10 = var5.getLevel(var9);
                     if (var10 == null) {
                        class="kw">return;
                     }

                     if (var10.getReplaceBlock() != null) {
                        applyLevels(var1, var2, var3, var5, var9 - 1);
                        Vector3i var11 = AugmentBlocksUtils.worldPos(var2, var3);
                        AugmentBlocksUtils.replaceBlock(var1, var2, var3, var10.getReplaceBlock());
                        if (var11 != null) {
                           Ref var12 = BlockModule.getBlockEntity(var1, var11.x, var11.y, var11.z);
                           if (var12 != null && var12.isValid()) {
                              this.restore(var1, var2, var12, var4 + 1);
                           }
                        }

                        class="kw">return;
                     }
                  }

                  applyLevels(var1, var2, var3, var5, var8);
                  if (var7 > var5.getMaxLevel()) {
                     restoreBenchTier(var1, var2, var3, var7 - var5.getMaxLevel());
                  }
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void applyLevels(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull AugmentBlock var3, int var4) {
      if (var4 > var3.getCurrentLevel()) {
         var3.setCurrentLevel(var4);
         String var5 = latestStateUpTo(var3, var4);
         if (var5 != null) {
            AugmentBlocksUtils.applyState(var0, var1, var2, var5);
         }
      }
   }

   @Nullable
   class="kw">private class="kw">static String latestStateUpTo(@Nonnull AugmentBlock var0, int var1) {
      for (int var2 = var1; var2 >= 1; var2--) {
         AugmentBlockUpgradeLevel var3 = var0.getLevel(var2);
         if (var3 != null && var3.getState() != null) {
            class="kw">return var3.getState();
         }
      }

      class="kw">return null;
   }

   class="kw">private class="kw">static void restoreBenchTier(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, int var3) {
      BenchBlock var4 = var1.getComponent(var2, BenchBlock.getComponentType());
      if (var4 != null) {
         int var5 = 1 + var3;
         if (var4.getTierLevel() > 0 && var4.getTierLevel() < var5) {
            Vector3i var6 = AugmentBlocksUtils.worldPos(var1, var2);
            if (var6 != null) {
               WorldChunk var7 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var6.x, var6.z));
               if (var7 != null) {
                  BlockType var8 = BlockType.getAssetMap().getAsset(var7.getBlock(var6.x, var6.y, var6.z));
                  if (var8 != null) {
                     BlockType var9 = BenchBlock.getBaseBlockType(var8);
                     if (var9.getBench() != null && var9.getBench().getTierLevel(var5) != null) {
                        var4.setTierLevel(var5);
                        var7.setBlockInteractionState(var6.x, var6.y, var6.z, var9, var4.getTierStateName(), true);
                     }
                  }
               }
            }
         }
      }
   }
}