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);
}
}