TargetUtil class

Пакет: com.hypixel.hytale.server.core.util

Файл: com/hypixel/hytale/server/core/util/TargetUtil.java

Поля (95)

МодификаторыТипИмя
final float ENTITY_TARGET_RADIUS
private final ComponentAccessor<ChunkStore> chunkStoreAccessor
public final ComponentAccessor<ChunkStore> chunkStoreAccessor
private BlockChunk currentBlockChunk
public BlockChunk currentBlockChunk
private ChunkColumn currentChunkColumn
private Ref<ChunkStore> currentChunkRef
public Ref<ChunkStore> currentChunkRef
private int currentChunkX
private int currentChunkX
private int currentChunkZ
private int currentChunkZ
SpatialResource var10
double var11
var11
TransformComponent var15
TargetUtil.TargetBuffer var16
TargetUtil.TargetBuffer var16
TargetUtil.TargetBufferLocation var16
double var16
boolean var17
BlockSection var17
boolean var17
BlockSection var17
boolean var17
BlockSection var17
TargetUtil.TargetBuffer var17
int var18
int var18
int var18
boolean var18
BlockSection var18
TargetUtil.TargetBuffer var18
Ref var18
var18
int var19
int var19
int var19
boolean var19
BlockSection var19
TransformComponent var2
int var20
long var20
int var20
long var21
List var3
float var3
int var3
int var3
List var4
SpatialResource var4
TransformComponent var4
HeadRotation var4
BoundingBox var4
int var4
int var4
World var5
World var5
Transform var5
World var5
SpatialResource var5
SpatialResource var5
Vector3d var5
Vector3d var5
TransformComponent var5
long var5
long var5
Transform var6
Transform var6
Vector3d var6
SpatialResource var6
List var6
Transform var6
Rotation3f var6
Box var6
Vector3d var7
Vector3d var7
Vector3d var7
SpatialResource var7
Vector3d var7
Vector3d var7
Vector3d var8
Vector3d var8
SpatialResource var8
Vector3d var8
Vector2d var8
List var9
private final World world
public final World world
private int x
private double x
private int y
private double y
private int z
private double z

Методы (32)

МодификаторыВозвратСигнатура
public TargetBufferpublic TargetBuffer(@Nonnull World var1)
public TargetBufferLocationpublic TargetBufferLocation(@Nonnull World var1)
for for(LongOpenHashSet var23 : var16)
for for(LongOpenHashSet var24 : var16)
for for(Ref var14 : var9)
abstract return getTargetBlockreturn getTargetBlock(var0, var0x -> var0x != 0, var1, var3)
abstract return getTargetBlockOriginreturn getTargetBlockOrigin(var0, var0x -> var0x != 0, var1, var3)
abstract return getTargetEntityreturn getTargetEntity(var0, 8.0F, var1)
abstract return getTargetEntityreturn getTargetEntity(var0, var1, false, var2)
abstract return getTargetLocationreturn getTargetLocation(var0, var0x -> var0x != 0, var1, var3)
abstract return getTargetLocationreturn getTargetLocation(var5, var1, var2, var4)
abstract return getTargetLocationreturn getTargetLocation(var5, var1, var6.x, var6.y, var6.z, var7.x, var7.y, var7.z, var2)
if if(var2x >= 0 && var2x < 320)
if if(var16x.currentBlockChunk != null && var16x.currentChunkColumn != null)
if if(var2x >= 0 && var2x < 320)
if if(var16x.currentBlockChunk != null && var16x.currentChunkColumn != null)
if if(var2x >= 0 && var2x < 320)
if if(var16x.currentBlockChunk == null)
if if(var3 >= 0 && var3 < 320)
if if(var17x.currentBlockChunk == null)
if if(var19 != 0)
if if(var4x >= 0 && var4x < 320)
if if(var18x.currentBlockChunk == null)
if if(var20 != 0)
if if(var2)
if if(var16 < var11)
if if(var4 == null)
if if(this.currentChunkRef == null || var3 != this.currentChunkX || var4 != this.currentChunkZ)
if if(this.currentChunkRef == null || var3 != this.currentChunkX || var4 != this.currentChunkZ)
static boolean isHitByRayboolean isHitByRay(@Nonnull Ref<EntityStore> var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull ComponentAccessor<EntityStore> var3)
public void updateChunkpublic void updateChunk(int var1, int var2)
public void updateChunkpublic void updateChunk(int var1, int var2)

Исходный код

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

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.function.predicate.BiIntPredicate;
class="kw">import com.hypixel.hytale.math.block.BlockUtil;
class="kw">import com.hypixel.hytale.math.iterator.BlockIterator;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Transform;
class="kw">import com.hypixel.hytale.server.core.modules.collision.CollisionMath;
class="kw">import com.hypixel.hytale.server.core.modules.collision.WorldUtil;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.ChunkColumn;
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 com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
class="kw">import java.util.Collection;
class="kw">import java.util.List;
class="kw">import java.util.function.IntPredicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector2d;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class="kw">final class TargetUtil {
   class="kw">private class="kw">static class="kw">final float ENTITY_TARGET_RADIUS = 8.0F;

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

   @Nullable
   class="kw">public class="kw">static Vector3i getTargetBlock(
      @Nonnull World var0, @Nonnull BiIntPredicate var1, double var2, double var4, double var6, double var8, double var10, double var12, double var14
   ) {
      TargetUtil.TargetBuffer var16 = new TargetUtil.TargetBuffer(var0);
      var16.updateChunk((int)var2, (int)var6);
      boolean var17 = BlockIterator.iterate(
         var2, var4, var6, var8, var10, var12, var14, (var1x, var2x, var3, var4x, var6x, var8x, var10x, var12x, var14x, var16x) -> {
            if (var2x >= 0 && var2x < 320) {
               var16x.updateChunk(var1x, var3);
               if (var16x.currentBlockChunk != null && var16x.currentChunkColumn != null) {
                  var16x.x = var1x;
                  var16x.y = var2x;
                  var16x.z = var3;
                  BlockSection var17 = var16x.currentBlockChunk.getSectionAtBlockY(var2x);
                  int var18 = var17.get(var1x, var2x, var3);
                  int var19 = WorldUtil.getFluidIdAtPosition(var16x.chunkStoreAccessor, var16x.currentChunkColumn, var1x, var2x, var3);
                  class="kw">return !var1.test(var18, var19);
               } else {
                  class="kw">return false;
               }
            } else {
               class="kw">return false;
            }
         }, var16
      );
      class="kw">return var17 ? null : new Vector3i(var16.x, var16.y, var16.z);
   }

   @Nullable
   class="kw">public class="kw">static Vector3i getTargetBlockOrigin(
      @Nonnull World var0, @Nonnull BiIntPredicate var1, double var2, double var4, double var6, double var8, double var10, double var12, double var14
   ) {
      TargetUtil.TargetBuffer var16 = new TargetUtil.TargetBuffer(var0);
      var16.updateChunk((int)var2, (int)var6);
      boolean var17 = BlockIterator.iterate(
         var2, var4, var6, var8, var10, var12, var14, (var1x, var2x, var3, var4x, var6x, var8x, var10x, var12x, var14x, var16x) -> {
            if (var2x >= 0 && var2x < 320) {
               var16x.updateChunk(var1x, var3);
               if (var16x.currentBlockChunk != null && var16x.currentChunkColumn != null) {
                  BlockSection var17 = var16x.currentBlockChunk.getSectionAtBlockY(var2x);
                  int var18 = var17.get(var1x, var2x, var3);
                  int var19 = WorldUtil.getFluidIdAtPosition(var16x.chunkStoreAccessor, var16x.currentChunkColumn, var1x, var2x, var3);
                  if (var1.test(var18, var19)) {
                     class="kw">return true;
                  }

                  int var20 = var17.getFiller(var1x, var2x, var3);
                  var16x.x = var1x - FillerBlockUtil.unpackX(var20);
                  var16x.y = var2x - FillerBlockUtil.unpackY(var20);
                  var16x.z = var3 - FillerBlockUtil.unpackZ(var20);
                  class="kw">return false;
               } else {
                  class="kw">return false;
               }
            } else {
               class="kw">return false;
            }
         }, var16
      );
      class="kw">return var17 ? null : new Vector3i(var16.x, var16.y, var16.z);
   }

   @Nullable
   class="kw">public class="kw">static Vector3d getTargetLocation(
      @Nonnull World var0, @Nonnull IntPredicate var1, double var2, double var4, double var6, double var8, double var10, double var12, double var14
   ) {
      TargetUtil.TargetBufferLocation var16 = new TargetUtil.TargetBufferLocation(var0);
      var16.updateChunk((int)var2, (int)var6);
      boolean var17 = BlockIterator.iterate(
         var2, var4, var6, var8, var10, var12, var14, (var1x, var2x, var3, var4x, var6x, var8x, var10x, var12x, var14x, var16x) -> {
            if (var2x >= 0 && var2x < 320) {
               var16x.updateChunk(var1x, var3);
               if (var16x.currentBlockChunk == null) {
                  class="kw">return false;
               }

               var16x.x = var1x + var4x;
               var16x.y = var2x + var6x;
               var16x.z = var3 + var8x;
               BlockSection var17 = var16x.currentBlockChunk.getSectionAtBlockY(var2x);
               int var18 = var17.get(var1x, var2x, var3);
               class="kw">return !var1.test(var18);
            } else {
               class="kw">return false;
            }
         }, var16
      );
      class="kw">return var17 ? null : new Vector3d(var16.x, var16.y, var16.z);
   }

   @Nullable
   class="kw">public class="kw">static Vector3i getTargetBlockAvoidLocations(
      @Nonnull World var0,
      @Nonnull IntPredicate var1,
      double var2,
      double var4,
      double var6,
      double var8,
      double var10,
      double var12,
      double var14,
      @Nonnull Collection<LongOpenHashSet> var16
   ) {
      TargetUtil.TargetBuffer var17 = new TargetUtil.TargetBuffer(var0);
      var17.updateChunk((int)var2, (int)var6);
      boolean var18 = BlockIterator.iterate(
         var2, var4, var6, var8, var10, var12, var14, (var2x, var3, var4x, var5, var7, var9, var11, var13, var15, var17x) -> {
            if (var3 >= 0 && var3 < 320) {
               var17x.updateChunk(var2x, var4x);
               if (var17x.currentBlockChunk == null) {
                  class="kw">return false;
               }

               var17x.x = var2x;
               var17x.y = var3;
               var17x.z = var4x;
               BlockSection var18 = var17x.currentBlockChunk.getSectionAtBlockY(var3);
               int var19 = var18.get(var2x, var3, var4x);
               if (var19 != 0) {
                  long var20 = BlockUtil.pack(var2x, var3, var4x);

                  for (LongOpenHashSet var23 : var16) {
                     if (var23.contains(var20)) {
                        class="kw">return true;
                     }
                  }
               }

               class="kw">return !var1.test(var19);
            } else {
               class="kw">return false;
            }
         }, var17
      );
      class="kw">return var18 ? null : new Vector3i(var17.x, var17.y, var17.z);
   }

   @Nullable
   class="kw">public class="kw">static Vector3i getTargetBlockAvoidLocations(
      @Nonnull World var0,
      @Nonnull IntPredicate var1,
      double var2,
      double var4,
      double var6,
      double var8,
      double var10,
      double var12,
      double var14,
      @Nonnull Collection<LongOpenHashSet> var16,
      @Nonnull Vector3d var17
   ) {
      TargetUtil.TargetBuffer var18 = new TargetUtil.TargetBuffer(var0);
      var18.updateChunk((int)var2, (int)var6);
      boolean var19 = BlockIterator.iterate(
         var2, var4, var6, var8, var10, var12, var14, (var3, var4x, var5, var6x, var8x, var10x, var12x, var14x, var16x, var18x) -> {
            if (var4x >= 0 && var4x < 320) {
               var18x.updateChunk(var3, var5);
               if (var18x.currentBlockChunk == null) {
                  class="kw">return false;
               }

               var18x.x = var3;
               var18x.y = var4x;
               var18x.z = var5;
               var17.x = var3 + var6x;
               var17.y = var4x + var8x;
               var17.z = var5 + var10x;
               BlockSection var19 = var18x.currentBlockChunk.getSectionAtBlockY(var4x);
               int var20 = var19.get(var3, var4x, var5);
               if (var20 != 0) {
                  long var21 = BlockUtil.pack(var3, var4x, var5);

                  for (LongOpenHashSet var24 : var16) {
                     if (var24.contains(var21)) {
                        class="kw">return true;
                     }
                  }
               }

               class="kw">return !var1.test(var20);
            } else {
               class="kw">return false;
            }
         }, var18
      );
      class="kw">return var19 ? null : new Vector3i(var18.x, var18.y, var18.z);
   }

   @Nullable
   class="kw">public class="kw">static Vector3i getTargetBlock(@Nonnull Ref<EntityStore> var0, double var1, @Nonnull ComponentAccessor<EntityStore> var3) {
      class="kw">return getTargetBlock(var0, var0x -> var0x != 0, var1, var3);
   }

   @Nullable
   class="kw">public class="kw">static Vector3i getTargetBlock(@Nonnull Ref<EntityStore> var0, @Nonnull IntPredicate var1, double var2, @Nonnull ComponentAccessor<EntityStore> var4) {
      World var5 = var4.getExternalData().getWorld();
      Transform var6 = getLook(var0, var4);
      Vector3d var7 = var6.getPosition();
      Vector3d var8 = var6.getDirection();
      class="kw">return getTargetBlock(var5, (var1x, var2x) -> var1.test(var1x), var7.x, var7.y, var7.z, var8.x, var8.y, var8.z, var2);
   }

   @Nullable
   class="kw">public class="kw">static Vector3i getTargetBlockOrigin(@Nonnull Ref<EntityStore> var0, double var1, @Nonnull ComponentAccessor<EntityStore> var3) {
      class="kw">return getTargetBlockOrigin(var0, var0x -> var0x != 0, var1, var3);
   }

   @Nullable
   class="kw">public class="kw">static Vector3i getTargetBlockOrigin(
      @Nonnull Ref<EntityStore> var0, @Nonnull IntPredicate var1, double var2, @Nonnull ComponentAccessor<EntityStore> var4
   ) {
      World var5 = var4.getExternalData().getWorld();
      Transform var6 = getLook(var0, var4);
      Vector3d var7 = var6.getPosition();
      Vector3d var8 = var6.getDirection();
      class="kw">return getTargetBlockOrigin(var5, (var1x, var2x) -> var1.test(var1x), var7.x, var7.y, var7.z, var8.x, var8.y, var8.z, var2);
   }

   @Nullable
   class="kw">public class="kw">static Vector3d getTargetLocation(@Nonnull Ref<EntityStore> var0, double var1, @Nonnull ComponentAccessor<EntityStore> var3) {
      class="kw">return getTargetLocation(var0, var0x -> var0x != 0, var1, var3);
   }

   @Nullable
   class="kw">public class="kw">static Vector3d getTargetLocation(
      @Nonnull Ref<EntityStore> var0, @Nonnull IntPredicate var1, double var2, @Nonnull ComponentAccessor<EntityStore> var4
   ) {
      Transform var5 = getLook(var0, var4);
      class="kw">return getTargetLocation(var5, var1, var2, var4);
   }

   @Nullable
   class="kw">public class="kw">static Vector3d getTargetLocation(@Nonnull Transform var0, @Nonnull IntPredicate var1, double var2, @Nonnull ComponentAccessor<EntityStore> var4) {
      World var5 = var4.getExternalData().getWorld();
      Vector3d var6 = var0.getPosition();
      Vector3d var7 = var0.getDirection();
      class="kw">return getTargetLocation(var5, var1, var6.x, var6.y, var6.z, var7.x, var7.y, var7.z, var2);
   }

   @Nonnull
   class="kw">public class="kw">static List<Ref<EntityStore>> getAllEntitiesInSphere(@Nonnull Vector3d var0, double var1, @Nonnull ComponentAccessor<EntityStore> var3) {
      List var4 = SpatialResource.getThreadLocalReferenceList();
      SpatialResource var5 = var3.getResource(EntityModule.get().getEntitySpatialResourceType());
      var5.getSpatialStructure().collect(var0, (float)var1, var4);
      SpatialResource var6 = var3.getResource(EntityModule.get().getPlayerSpatialResourceType());
      var6.getSpatialStructure().collect(var0, (float)var1, var4);
      class="kw">return var4;
   }

   @Nonnull
   class="kw">public class="kw">static List<Ref<EntityStore>> getAllEntitiesInCylinder(@Nonnull Vector3d var0, double var1, double var3, @Nonnull ComponentAccessor<EntityStore> var5) {
      List var6 = SpatialResource.getThreadLocalReferenceList();
      SpatialResource var7 = var5.getResource(EntityModule.get().getEntitySpatialResourceType());
      var7.getSpatialStructure().collectCylinder(var0, var1, var3, var6);
      SpatialResource var8 = var5.getResource(EntityModule.get().getPlayerSpatialResourceType());
      var8.getSpatialStructure().collectCylinder(var0, var1, var3, var6);
      class="kw">return var6;
   }

   @Nonnull
   class="kw">public class="kw">static List<Ref<EntityStore>> getAllEntitiesInBox(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      List var3 = SpatialResource.getThreadLocalReferenceList();
      SpatialResource var4 = var2.getResource(EntityModule.get().getEntitySpatialResourceType());
      var4.getSpatialStructure().collectBox(var0, var1, var3);
      SpatialResource var5 = var2.getResource(EntityModule.get().getPlayerSpatialResourceType());
      var5.getSpatialStructure().collectBox(var0, var1, var3);
      class="kw">return var3;
   }

   @Nullable
   class="kw">public class="kw">static Ref<EntityStore> getTargetEntity(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
      class="kw">return getTargetEntity(var0, 8.0F, var1);
   }

   @Nullable
   class="kw">public class="kw">static Ref<EntityStore> getTargetEntity(@Nonnull Ref<EntityStore> var0, float var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      class="kw">return getTargetEntity(var0, var1, false, var2);
   }

   @Nullable
   class="kw">public class="kw">static Ref<EntityStore> getTargetEntity(@Nonnull Ref<EntityStore> var0, float var1, boolean var2, @Nonnull ComponentAccessor<EntityStore> var3) {
      TransformComponent var4 = var3.getComponent(var0, TransformComponent.getComponentType());
      assert var4 != null;
      Vector3d var5 = var4.getPosition();
      Transform var6 = getLook(var0, var3);
      Vector3d var7 = var6.getPosition();
      Vector3d var8 = var6.getDirection();
      List var9 = getAllEntitiesInSphere(var7, var1, var3);
      if (var2) {
         SpatialResource var10 = var3.getResource(EntityModule.get().getItemSpatialResourceType());
         var10.getSpatialStructure().collect(var7, var1, var9);
      }

      var9.removeIf(var4x -> var4x != null && var4x.isValid() && !var4x.equals(var0) ? !isHitByRay((Ref<EntityStore>)var4x, var7, var8, var3) : true);
      if (var9.isEmpty()) {
         class="kw">return null;
      }

      Ref var18 = null;
      double var11 = Double.MAX_VALUE;

      for (Ref var14 : var9) {
         if (var14 != null && var14.isValid()) {
            TransformComponent var15 = var3.getComponent(var14, TransformComponent.getComponentType());
            assert var15 != null;
            double var16 = var5.distanceSquared(var15.getPosition());
            if (var16 < var11) {
               var11 = var16;
               var18 = var14;
            }
         }
      }

      class="kw">return var18;
   }

   @Nonnull
   class="kw">public class="kw">static Transform getLook(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
      TransformComponent var2 = var1.getComponent(var0, TransformComponent.getComponentType());
      assert var2 != null;
      float var3 = ModelComponent.getEyeHeight(var0, var1);
      HeadRotation var4 = var1.getComponent(var0, HeadRotation.getComponentType());
      assert var4 != null;
      Vector3d var5 = var2.getPosition();
      Rotation3f var6 = var4.getRotation();
      class="kw">return new Transform(var5.x(), var5.y() + var3, var5.z(), var6.pitch(), var6.yaw(), var6.roll());
   }

   class="kw">private class="kw">static boolean isHitByRay(
      @Nonnull Ref<EntityStore> var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull ComponentAccessor<EntityStore> var3
   ) {
      BoundingBox var4 = var3.getComponent(var0, BoundingBox.getComponentType());
      TransformComponent var5 = var3.getComponent(var0, TransformComponent.getComponentType());
      assert var5 != null;
      if (var4 == null) {
         class="kw">return false;
      }

      Box var6 = var4.getBoundingBox();
      Vector3d var7 = var5.getPosition();
      Vector2d var8 = new Vector2d();
      class="kw">return CollisionMath.intersectRayAABB(var1, var2, var7.x(), var7.y(), var7.z(), var6, var8);
   }

   class="kw">private class="kw">static class TargetBuffer {
      @Nonnull
      class="kw">private class="kw">final World world;
      @Nonnull
      class="kw">private class="kw">final ComponentAccessor<ChunkStore> chunkStoreAccessor;
      class="kw">private int x;
      class="kw">private int y;
      class="kw">private int z;
      class="kw">private int currentChunkX;
      class="kw">private int currentChunkZ;
      @Nullable
      class="kw">private Ref<ChunkStore> currentChunkRef;
      @Nullable
      class="kw">private ChunkColumn currentChunkColumn;
      @Nullable
      class="kw">private BlockChunk currentBlockChunk;

      class="kw">public TargetBuffer(@Nonnull World var1) {
         this.world = var1;
         this.chunkStoreAccessor = var1.getChunkStore().getStore();
      }

      class="kw">public void updateChunk(int var1, int var2) {
         int var3 = ChunkUtil.chunkCoordinate(var1);
         int var4 = ChunkUtil.chunkCoordinate(var2);
         if (this.currentChunkRef == null || var3 != this.currentChunkX || var4 != this.currentChunkZ) {
            this.currentChunkX = var3;
            this.currentChunkZ = var4;
            long var5 = ChunkUtil.indexChunk(var3, var4);
            this.currentChunkRef = this.world.getChunkStore().getChunkReference(var5);
            if (this.currentChunkRef != null && this.currentChunkRef.isValid()) {
               this.currentChunkColumn = this.chunkStoreAccessor.getComponent(this.currentChunkRef, ChunkColumn.getComponentType());
               this.currentBlockChunk = this.chunkStoreAccessor.getComponent(this.currentChunkRef, BlockChunk.getComponentType());
            } else {
               this.currentChunkColumn = null;
               this.currentBlockChunk = null;
            }
         }
      }
   }

   class="kw">private class="kw">static class TargetBufferLocation {
      @Nonnull
      class="kw">public class="kw">final World world;
      @Nonnull
      class="kw">public class="kw">final ComponentAccessor<ChunkStore> chunkStoreAccessor;
      class="kw">private double x;
      class="kw">private double y;
      class="kw">private double z;
      class="kw">private int currentChunkX;
      class="kw">private int currentChunkZ;
      @Nullable
      class="kw">public Ref<ChunkStore> currentChunkRef;
      @Nullable
      class="kw">public BlockChunk currentBlockChunk;

      class="kw">public TargetBufferLocation(@Nonnull World var1) {
         this.world = var1;
         this.chunkStoreAccessor = var1.getChunkStore().getStore();
      }

      class="kw">public void updateChunk(int var1, int var2) {
         int var3 = ChunkUtil.chunkCoordinate(var1);
         int var4 = ChunkUtil.chunkCoordinate(var2);
         if (this.currentChunkRef == null || var3 != this.currentChunkX || var4 != this.currentChunkZ) {
            this.currentChunkX = var3;
            this.currentChunkZ = var4;
            long var5 = ChunkUtil.indexChunk(var3, var4);
            this.currentChunkRef = this.world.getChunkStore().getChunkReference(var5);
            if (this.currentChunkRef != null && this.currentChunkRef.isValid()) {
               this.currentBlockChunk = this.chunkStoreAccessor.getComponent(this.currentChunkRef, BlockChunk.getComponentType());
            } else {
               this.currentBlockChunk = null;
            }
         }
      }
   }
}