ChunkLightData class

Пакет: com.hypixel.hytale.server.core.universe.world.chunk.section

Файл: com/hypixel/hytale/server/core/universe/world/chunk/section/ChunkLightData.java

Поля (41)

МодификаторыТипИмя
final OfByte VL_BYTE
long var10
assert var2
byte var2
short var2
byte var3
short var3
boolean var3
boolean var3
ChunkLightData var3
var3
var3
byte var4
int var4
var4
int var4
int var4
int var4
boolean var4
var4
int var5
var5
int var5
int var5
int var5
int var5
int var5
int var6
int var6
int var6
byte var7
int var7
int var7
int var7
int var8
Arena var8
int var8
var8
var8
MemorySegment var9
int var9

Методы (43)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException()
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Index " + var1 + " is outside of the bounds!")
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed with " + var1 + ", " + var2 + ", " + var3 + ". Result: " + var5 + " from " + var4, var9)
static short combineLightValuesshort combineLightValues(byte var0, byte var1, byte var2, byte var3)
static short combineLightValuesshort combineLightValues(byte var0, byte var1, byte var2)
static long deserializeOctreelong deserializeOctree(@Nonnull MemorySegment var0, int var1, @Nonnull MemorySegment var2, int var3, int var4)
abstract deserializeOctree deserializeOctree(var0, var6, var9, 0, 0)
for for(int var6 = 0; var6 < 8; var6++)
for for(int var6 = 0; var6 < 8; var6++)
for for(int var7 = 0; var7 < 8; var7++)
public short getBlockLightshort getBlockLight(int var1, int var2, int var3)
public short getBlockLightshort getBlockLight(int var1)
public byte getBlockLightIntensitybyte getBlockLightIntensity(int var1, int var2, int var3)
public byte getBlockLightIntensitybyte getBlockLightIntensity(int var1)
public byte getBlueBlockLightbyte getBlueBlockLight(int var1, int var2, int var3)
public byte getBlueBlockLightbyte getBlueBlockLight(int var1)
public short getChangeIdshort getChangeId()
public byte getGreenBlockLightbyte getGreenBlockLight(int var1, int var2, int var3)
public byte getGreenBlockLightbyte getGreenBlockLight(int var1)
public byte getLightbyte getLight(int var1, int var2)
public short getLightRawshort getLightRaw(int var1, int var2, int var3)
public short getLightRawshort getLightRaw(int var1)
static byte getLightValuebyte getLightValue(short var0, int var1)
public byte getRedBlockLightbyte getRedBlockLight(int var1, int var2, int var3)
public byte getRedBlockLightbyte getRedBlockLight(int var1)
public byte getSkyLightbyte getSkyLight(int var1, int var2, int var3)
public byte getSkyLightbyte getSkyLight(int var1)
static short getTraverseshort getTraverse(@Nonnull MemorySegment var0, int var1, int var2, int var3)
abstract return getTraversereturn getTraverse(this.lightData, var1, 0, 0)
if if(var1 != null)
if if(this.lightData == null)
if if(var2 < 0 || var2 >= 4)
if if(this.lightData == null)
if if(this.lightData == null)
if if(var3)
if if(var4)
private int octreeSerializedSizeint octreeSerializedSize()
public int serializeint serialize(@Nonnull MemorySegment var1, int var2)
public int serializeForPacketint serializeForPacket(@Nonnull MemorySegment var1, int var2)
private int serializeOctreeint serializeOctree(@Nonnull MemorySegment var1, int var2, int var3)
private int serializeOctreeForPacketint serializeOctreeForPacket(@Nonnull MemorySegment var1, int var2, int var3)
public int serializedByteSizeint serializedByteSize()
public int serializedForPacketByteSizeint serializedForPacketByteSize()

Исходный код

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

class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.server.core.util.io.MemorySegmentUtil;
class="kw">import java.lang.foreign.Arena;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.lang.foreign.ValueLayout;
class="kw">import java.lang.foreign.ValueLayout.OfByte;
class="kw">import java.lang.foreign.ValueLayout.OfShort;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class ChunkLightData {
   class="kw">protected class="kw">static class="kw">final OfByte VL_BYTE = ValueLayout.JAVA_BYTE;
   class="kw">protected class="kw">static class="kw">final OfShort VL_SHORT = ValueLayout.JAVA_SHORT_UNALIGNED;
   class="kw">public class="kw">static class="kw">final ChunkLightData EMPTY = new ChunkLightData(null, (short)0);
   class="kw">public class="kw">static class="kw">final int TREE_SIZE = 8;
   class="kw">public class="kw">static class="kw">final int TREE_MASK = 7;
   class="kw">public class="kw">static class="kw">final int DEPTH_MAGIC = 12;
   class="kw">public class="kw">static class="kw">final int SIZE_MAGIC = 17;
   class="kw">public class="kw">static class="kw">final int INITIAL_CAPACITY = 128;
   class="kw">public class="kw">static class="kw">final byte MAX_VALUE = 15;
   class="kw">public class="kw">static class="kw">final int CHANNEL_COUNT = 4;
   class="kw">public class="kw">static class="kw">final int BITS_PER_CHANNEL = 4;
   class="kw">public class="kw">static class="kw">final int CHANNEL_MASK = 15;
   class="kw">public class="kw">static class="kw">final int RED_CHANNEL = 0;
   class="kw">public class="kw">static class="kw">final int GREEN_CHANNEL = 1;
   class="kw">public class="kw">static class="kw">final int BLUE_CHANNEL = 2;
   class="kw">public class="kw">static class="kw">final int SKY_CHANNEL = 3;
   class="kw">public class="kw">static class="kw">final int RED_CHANNEL_BIT = 0;
   class="kw">public class="kw">static class="kw">final int GREEN_CHANNEL_BIT = 4;
   class="kw">public class="kw">static class="kw">final int BLUE_CHANNEL_BIT = 8;
   class="kw">public class="kw">static class="kw">final int SKY_CHANNEL_BIT = 12;
   class="kw">public class="kw">static class="kw">final int RGB_MASK = -61441;
   class="kw">protected class="kw">final short changeId;
   @Nonnull
   class="kw">final Arena arena;
   @Nullable
   MemorySegment lightData = null;

   class="kw">public ChunkLightData(@Nullable MemorySegment var1, short var2) {
      this.arena = Arena.ofAuto();
      if (var1 != null) {
         this.lightData = this.arena.allocate(var1.byteSize());
         this.lightData.copyFrom(var1);
      }

      this.changeId = var2;
   }

   class="kw">protected ChunkLightData(@Nonnull Arena var1, @Nullable MemorySegment var2, short var3) {
      assert var2 == null || var2.scope() == var1.scope();
      this.arena = var1;
      this.lightData = var2;
      this.changeId = var3;
   }

   class="kw">public short getChangeId() {
      class="kw">return this.changeId;
   }

   class="kw">public byte getRedBlockLight(int var1, int var2, int var3) {
      class="kw">return this.getRedBlockLight(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public byte getRedBlockLight(int var1) {
      class="kw">return this.lightData == null ? 0 : this.getLight(var1, 0);
   }

   class="kw">public byte getGreenBlockLight(int var1, int var2, int var3) {
      class="kw">return this.getGreenBlockLight(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public byte getGreenBlockLight(int var1) {
      class="kw">return this.lightData == null ? 0 : this.getLight(var1, 1);
   }

   class="kw">public byte getBlueBlockLight(int var1, int var2, int var3) {
      class="kw">return this.getBlueBlockLight(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public byte getBlueBlockLight(int var1) {
      class="kw">return this.lightData == null ? 0 : this.getLight(var1, 2);
   }

   class="kw">public byte getBlockLightIntensity(int var1, int var2, int var3) {
      class="kw">return this.getBlockLightIntensity(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public byte getBlockLightIntensity(int var1) {
      if (this.lightData == null) {
         class="kw">return 0;
      }

      byte var2 = this.getLight(var1, 0);
      byte var3 = this.getLight(var1, 1);
      byte var4 = this.getLight(var1, 2);
      class="kw">return (byte)(MathUtil.maxValue(var4, var3, var2) & 15);
   }

   class="kw">public short getBlockLight(int var1, int var2, int var3) {
      class="kw">return this.getBlockLight(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public short getBlockLight(int var1) {
      class="kw">return this.lightData == null ? 0 : (short)(this.getLightRaw(var1) & -61441);
   }

   class="kw">public byte getSkyLight(int var1, int var2, int var3) {
      class="kw">return this.getSkyLight(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public byte getSkyLight(int var1) {
      class="kw">return this.lightData == null ? 0 : this.getLight(var1, 3);
   }

   class="kw">public byte getLight(int var1, int var2) {
      if (var2 < 0 || var2 >= 4) {
         throw new IllegalArgumentException();
      }

      if (this.lightData == null) {
         class="kw">return 0;
      }

      short var3 = this.getLightRaw(var1);
      class="kw">return (byte)(var3 >> var2 * 4 & 15);
   }

   class="kw">public short getLightRaw(int var1, int var2, int var3) {
      class="kw">return this.getLightRaw(ChunkUtil.indexBlock(var1, var2, var3));
   }

   class="kw">public short getLightRaw(int var1) {
      if (this.lightData == null) {
         class="kw">return 0;
      } else if (var1 >= 0 && var1 < 32768) {
         class="kw">return getTraverse(this.lightData, var1, 0, 0);
      } else {
         throw new IllegalArgumentException("Index " + var1 + " is outside of the bounds!");
      }
   }

   class="kw">protected class="kw">static short getTraverse(@Nonnull MemorySegment var0, int var1, int var2, int var3) {
      int var4 = -1;
      int var5 = -1;

      try {
         int var6 = var2 * 17;
         byte var7 = var0.get(VL_BYTE, var6);
         int var8 = var1 >> 12 - var3 & 7;
         var4 = var8 * 2 + var6 + 1;
         var5 = Short.toUnsignedInt(var0.get(VL_SHORT, var4));
         class="kw">return (var7 >> var8 & 1) == 1 ? getTraverse(var0, var1, var5, var3 + 3) : (short)var5;
      } catch (Throwable var9) {
         throw new RuntimeException("Failed with " + var1 + ", " + var2 + ", " + var3 + ". Result: " + var5 + " from " + var4, var9);
      }
   }

   class="kw">public int serialize(@Nonnull MemorySegment var1, int var2) {
      var1.set(MemorySegmentUtil.SHORT_BE, var2, this.changeId);
      boolean var3 = this.lightData != null;
      var1.set(ValueLayout.JAVA_BOOLEAN, var2 + 2, var3);
      if (var3) {
         int var4 = var2 + 2 + 1 + 4;
         int var5 = this.serializeOctree(var1, var4, 0);
         var1.set(MemorySegmentUtil.INT_BE, var2 + 2 + 1, var5);
         class="kw">return 7 + var5;
      } else {
         class="kw">return 3;
      }
   }

   class="kw">private int serializeOctree(@Nonnull MemorySegment var1, int var2, int var3) {
      int var4 = var2;
      int var5 = this.lightData.get(VL_BYTE, var3 * 17L);
      var1.set(ValueLayout.JAVA_BYTE, var4, (byte)var5);
      var4++;

      for (int var6 = 0; var6 < 8; var6++) {
         int var7 = Short.toUnsignedInt(this.lightData.get(VL_SHORT, var3 * 17L + var6 * 2L + 1L));
         if ((var5 >> var6 & 1) == 1) {
            var4 += this.serializeOctree(var1, var4, var7);
         } else {
            var1.set(MemorySegmentUtil.SHORT_BE, var4, (short)var7);
            var4 += 2;
         }
      }

      class="kw">return var4 - var2;
   }

   class="kw">private int octreeSerializedSize() {
      class="kw">return 15 * (int)(this.lightData.byteSize() / 17L) + 2;
   }

   class="kw">public int serializedByteSize() {
      class="kw">return this.lightData == null ? 3 : 7 + this.octreeSerializedSize();
   }

   class="kw">public int serializedForPacketByteSize() {
      class="kw">return this.lightData == null ? 1 : 1 + this.octreeSerializedSize();
   }

   class="kw">public int serializeForPacket(@Nonnull MemorySegment var1, int var2) {
      boolean var3 = this.lightData != null;
      var1.set(ValueLayout.JAVA_BOOLEAN, var2, var3);
      class="kw">return var3 ? 1 + this.serializeOctreeForPacket(var1, var2 + 1, 0) : 1;
   }

   class="kw">private int serializeOctreeForPacket(@Nonnull MemorySegment var1, int var2, int var3) {
      int var4 = var2;
      int var5 = this.lightData.get(VL_BYTE, var3 * 17L);
      var1.set(ValueLayout.JAVA_BYTE, var4, (byte)var5);
      var4++;

      for (int var6 = 0; var6 < 8; var6++) {
         int var7 = Short.toUnsignedInt(this.lightData.get(VL_SHORT, var3 * 17L + var6 * 2L + 1L));
         if ((var5 >> var6 & 1) == 1) {
            var4 += this.serializeOctreeForPacket(var1, var4, var7);
         } else {
            var1.set(MemorySegmentUtil.SHORT_LE, var4, (short)var7);
            var4 += 2;
         }
      }

      class="kw">return var4 - var2;
   }

   @Nonnull
   class="kw">public class="kw">static ChunkLightData deserialize(@Nonnull MemorySegment var0, int var1) {
      short var2 = var0.get(MemorySegmentUtil.SHORT_BE, var1);
      boolean var4 = var0.get(ValueLayout.JAVA_BOOLEAN, var1 + 2);
      ChunkLightData var3;
      if (var4) {
         int var5 = var0.get(MemorySegmentUtil.INT_BE, var1 + 2 + 1);
         int var6 = var1 + 2 + 1 + 4;
         int var7 = (var5 - 2) / 15;
         Arena var8 = Arena.ofAuto();
         MemorySegment var9 = var8.allocate(var7 * 17L);
         deserializeOctree(var0, var6, var9, 0, 0);
         var3 = new ChunkLightData(var8, var9, var2);
      } else {
         var3 = new ChunkLightData(null, var2);
      }

      class="kw">return var3;
   }

   class="kw">private class="kw">static long deserializeOctree(@Nonnull MemorySegment var0, int var1, @Nonnull MemorySegment var2, int var3, int var4) {
      int var5 = var0.get(ValueLayout.JAVA_BYTE, var1);
      int var6 = var1 + 1;
      var2.set(VL_BYTE, var3 * 17L, (byte)var5);

      for (int var7 = 0; var7 < 8; var7++) {
         int var8;
         if ((var5 >> var7 & 1) == 1) {
            int var9 = ++var4;
            var8 = var9;
            long var10 = deserializeOctree(var0, var6, var2, var8, var4);
            var6 += (int)(var10 >>> 32);
            var4 = (int)var10;
         } else {
            var8 = var0.get(MemorySegmentUtil.SHORT_BE, var6);
            var6 += 2;
         }

         var2.set(VL_SHORT, var3 * 17L + var7 * 2L + 1L, (short)var8);
      }

      class="kw">return (long)(var6 - var1) << 32 | var4 & 4294967295L;
   }

   @Nonnull
   class="kw">public String octreeToString() {
      class="kw">return this.lightData == null ? "NULL" : ChunkLightDataBuilder.octreeToString(this.lightData);
   }

   class="kw">public class="kw">static short combineLightValues(byte var0, byte var1, byte var2, byte var3) {
      class="kw">return (short)(var3 << 12 | var2 << 8 | var1 << 4 | var0 << 0);
   }

   class="kw">public class="kw">static short combineLightValues(byte var0, byte var1, byte var2) {
      class="kw">return (short)(var2 << 8 | var1 << 4 | var0 << 0);
   }

   class="kw">public class="kw">static byte getLightValue(short var0, int var1) {
      class="kw">return (byte)(var0 >> var1 * 4 & 15);
   }
}