AugmentBlocksUtils class

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

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

Поля (31)

МодификаторыТипИмя
boolean var10
var10
BlockModule.BlockStateInfo var10
double var11
double var13
double var15
BlockModule.BlockStateInfo var2
BlockModule.BlockStateInfo var2
BenchBlock var3
Ref var3
Vector3i var3
List var4
AugmentBlock var4
Vector3i var4
Vector3i var4
BlockSection var4
List var4
List var4
Set var5
ChunkStore var5
BlockType var5
double var5
Ref var6
WorldChunk var6
AugmentBlock var7
BlockSection var7
Vector3i var7
BlockType var8
int var8
Set var9
int var9

Методы (20)

МодификаторыВозвратСигнатура
static void applyStatevoid applyState(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull String var3)
static boolean canReplaceBlockboolean canReplaceBlock(@Nonnull World var0, @Nonnull Vector3i var1, @Nonnull String var2)
abstract return collectNearbyByScanreturn collectNearbyByScan(var0, var1, var2)
for for(AugmentBlock var8 : var4)
for for(String var5 : var1)
abstract for for(int var9 = var6.size()
if if(var7 != null)
if if(var3 != null)
if if(var4 != null)
if if(var7 != null)
if if(var8 != null)
if if(var4 != null && var5 != null)
if if(var6 != null)
if if(var2 == null)
if if(var2 == null)
static void replaceBlockvoid replaceBlock(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull String var3)
static boolean requirementsMetboolean requirementsMet(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2, @Nonnull String[] var4)
static boolean requirementsMetFromboolean requirementsMetFrom(@Nonnull Set<String> var0, @Nonnull String[] var1)
static void syncBenchAugmentTagsvoid syncBenchAugmentTags(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, @Nonnull Vector3i var2)
while while(var10)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.crafting.component.BenchBlock;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
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.BlockOperations;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.util.ArrayList;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.logging.Level;
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="kw">final class AugmentBlocksUtils {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();

   class="kw">private AugmentBlocksUtils() {
   }

   @Nonnull
   class="kw">public class="kw">static Set<String> collectActiveAugmentTags(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2) {
      List var4 = new ArrayList<>();

      for (Ref var6 : collectNearby(var0, var1, var2)) {
         AugmentBlock var7 = var0.getComponent(var6, AugmentBlock.getComponentType());
         if (var7 != null) {
            var4.add(var7);
         }
      }

      Set var9 = new HashSet<>();
      boolean var10 = true;

      while (var10) {
         var10 = false;

         for (AugmentBlock var8 : var4) {
            var10 |= var8.collectGrantedAugmentTags(var9, var9);
         }
      }

      class="kw">return var9;
   }

   class="kw">public class="kw">static boolean requirementsMet(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2, @Nonnull String[] var4) {
      class="kw">return var4.length == 0 ? true : requirementsMetFrom(collectActiveAugmentTags(var0, var1, var2), var4);
   }

   class="kw">public class="kw">static void syncBenchAugmentTags(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1, @Nonnull Vector3i var2) {
      BenchBlock var3 = var0.getComponent(var1, BenchBlock.getComponentType());
      if (var3 != null) {
         AugmentBlock var4 = var0.getComponent(var1, AugmentBlock.getComponentType());
         if (var4 != null) {
            Set var5 = collectActiveAugmentTags(var0, var2, var4.getRadius());
            if (!var5.equals(var3.getGrantedAugmentTags())) {
               var3.setGrantedAugmentTags(var5);
            }
         }
      }
   }

   class="kw">private class="kw">static boolean requirementsMetFrom(@Nonnull Set<String> var0, @Nonnull String[] var1) {
      for (String var5 : var1) {
         if (!var0.contains(var5)) {
            class="kw">return false;
         }
      }

      class="kw">return true;
   }

   class="kw">public class="kw">static boolean canReplaceBlock(@Nonnull World var0, @Nonnull Vector3i var1, @Nonnull String var2) {
      if (BlockType.getAssetMap().getAsset(var2) == null) {
         LOGGER.at(Level.WARNING).log("AugmentBlocks: ReplaceBlock target '%s' not found", var2);
         class="kw">return false;
      } else {
         class="kw">return var0.getChunk(ChunkUtil.indexChunkFromBlock(var1.x, var1.z)) != null;
      }
   }

   class="kw">public class="kw">static void replaceBlock(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull String var3) {
      Vector3i var4 = worldPos(var1, var2);
      if (var4 != null && canReplaceBlock(var0, var4, var3)) {
         ChunkStore var5 = var0.getChunkStore();
         Ref var6 = var5.getChunkSectionReferenceAtBlock(var4.x, var4.y, var4.z);
         if (var6 != null && var6.isValid()) {
            BlockSection var7 = var5.getStore().getComponent(var6, BlockSection.getComponentType());
            if (var7 != null) {
               BlockType var8 = BlockType.getAssetMap().getAsset(var3);
               if (var8 != null) {
                  int var9 = var7.getRotationIndex(var4.x, var4.y, var4.z);
                  BlockOperations.setBlock(var5, var6, var4.x, var4.y, var4.z, BlockType.getAssetMap().getIndex(var3), var8, var9, 0, 0);
               }
            }
         }
      }
   }

   class="kw">public class="kw">static void applyState(@Nonnull World var0, @Nonnull Store<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull String var3) {
      Vector3i var4 = worldPos(var1, var2);
      BlockType var5 = currentBlockType(var1, var2);
      if (var4 != null && var5 != null) {
         WorldChunk var6 = var0.getChunk(ChunkUtil.indexChunkFromBlock(var4.x, var4.z));
         if (var6 != null) {
            var6.setBlockInteractionState(var4.x, var4.y, var4.z, var5, var3, false);
         }
      }
   }

   @Nullable
   class="kw">private class="kw">static BlockType currentBlockType(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1) {
      BlockModule.BlockStateInfo var2 = var0.getComponent(var1, BlockModule.BlockStateInfo.getComponentType());
      if (var2 == null) {
         class="kw">return null;
      }

      Ref var3 = var2.getSectionRef();
      if (!var3.isValid()) {
         class="kw">return null;
      }

      BlockSection var4 = var3.getStore().getComponent(var3, BlockSection.getComponentType());
      class="kw">return var4 == null ? null : BlockType.getAssetMap().getAsset(var4.get(var2.getIndex()));
   }

   @Nullable
   class="kw">public class="kw">static Vector3i worldPos(@Nonnull Store<ChunkStore> var0, @Nonnull Ref<ChunkStore> var1) {
      BlockModule.BlockStateInfo var2 = var0.getComponent(var1, BlockModule.BlockStateInfo.getComponentType());
      if (var2 == null) {
         class="kw">return null;
      }

      Vector3i var3 = new Vector3i();
      class="kw">return var2.fillWorldPos(var0, var3) ? var3 : null;
   }

   @Nonnull
   class="kw">private class="kw">static List<Ref<ChunkStore>> collectNearby(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2) {
      if (!var0.getExternalData().getWorld().isTicking()) {
         class="kw">return collectNearbyByScan(var0, var1, var2);
      }

      List var4 = SpatialResource.getThreadLocalReferenceList();
      var0.getResource(AugmentBlocksPlugin.get().getSpatialResource()).getSpatialStructure().collect(new Vector3d(var1.x, var1.y, var1.z), var2, var4);
      class="kw">return new ArrayList<>(var4);
   }

   @Nonnull
   class="kw">private class="kw">static List<Ref<ChunkStore>> collectNearbyByScan(@Nonnull Store<ChunkStore> var0, @Nonnull Vector3i var1, double var2) {
      List var4 = new ArrayList<>();
      double var5 = var2 * var2;
      Vector3i var7 = new Vector3i();
      var0.forEachChunk(AugmentBlocksSpatialSystem.QUERY, (var6, var7x) -> {
         int var8 = 0;

         for (int var9 = var6.size(); var8 < var9; var8++) {
            BlockModule.BlockStateInfo var10 = var6.getComponent(var8, BlockModule.BlockStateInfo.getComponentType());
            if (var10 != null && var10.fillWorldPos(var0, var7)) {
               double var11 = var7.x - var1.x;
               double var13 = var7.y - var1.y;
               double var15 = var7.z - var1.z;
               if (!(var11 * var11 + var13 * var13 + var15 * var15 > var5)) {
                  var4.add(var6.getReferenceTo(var8));
               }
            }
         }
      });
      class="kw">return var4;
   }
}