BlockChunk class
Пакет: com.hypixel.hytale.server.core.universe.world.chunk
Файл: com/hypixel/hytale/server/core/universe/world/chunk/BlockChunk.java
implements: Component<ChunkStore>
Поля (42)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
int |
VERSION |
|
|
break |
|
|
break |
|
private final ComponentType<ChunkStore, BlockChunk> |
componentType |
|
IntSet |
var1 |
|
boolean |
var1 |
|
boolean |
var1 |
|
SoftReference |
var1 |
|
SoftReference |
var1 |
|
SoftReference |
var1 |
|
ChunkSection |
var10 |
|
ChunkColumn |
var2 |
|
int |
var2 |
|
int |
var2 |
|
int |
var2 |
|
CompletableFuture |
var2 |
|
|
var2 |
|
CompletableFuture |
var2 |
|
|
var2 |
|
CompletableFuture |
var2 |
|
|
var2 |
|
Holder[] |
var3 |
|
byte[] |
var3 |
|
MemorySegment |
var3 |
|
BlockSection |
var4 |
|
int |
var4 |
|
MemorySegment |
var4 |
|
int |
var4 |
|
int |
var5 |
|
Holder |
var5 |
|
boolean |
var5 |
|
short |
var6 |
|
|
var6 |
|
BlockSection |
var6 |
|
ChunkSection |
var6 |
|
BlockType |
var7 |
|
int |
var7 |
|
int |
var7 |
|
BlockChunk |
var7 |
|
BlockSection |
var8 |
|
ChunkSection |
var8 |
|
boolean |
var9 |
Методы (70)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Section index must >=0 and <" + this.chunkSections.length + " but was given " + var1) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Section index must >=0 and <" + this.chunkSectionsRefs.length + " but was given " + var1) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Section y must >=0 and <320 but was given " + var1) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Version not supported") |
|
public |
LoadBlockChunkPacketSystempublic LoadBlockChunkPacketSystem(ComponentType<ChunkStore, BlockChunk> var1) |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Not implemented!") |
public |
int |
blockCountint blockCount() |
public |
boolean |
consumeNeedsPhysicsboolean consumeNeedsPhysics() |
public |
boolean |
consumeNeedsSavingboolean consumeNeedsSaving() |
public |
boolean |
containsboolean contains(int var1) |
public |
int |
countint count(int var1) |
private |
void |
deserializevoid deserialize(@Nonnull byte[] var1, @Nonnull ExtraInfo var2) |
|
public void |
fetchpublic void fetch(int var1,
@Nonnull ArchetypeChunk<ChunkStore> var2,
Store<ChunkStore> var3,
CommandBuffer<ChunkStore> var4,
PlayerRef var5,
@Nonnull List<CompletableFuture<ToClientPacket>> var6) |
|
|
for for(int var1 = 0; var1 < 32; var1++) |
|
|
for for(int var2 = 0; var2 < 32; var2++) |
|
|
for for(int var4 = 0; var4 < var3.length; var4++) |
|
|
for for(int var2 = 0; var2 < var1.length; var2++) |
|
|
for for(BlockSection var6 : this.chunkSections) |
|
|
for for(BlockSection var5 : this.chunkSections) |
|
|
for for(int var5 = 0; var5 < this.chunkSections.length; var5++) |
public |
<T, V> int |
forEachTicking<T, V> int forEachTicking(T var1, V var2, ObjectPositionBlockFunction<T, V, BlockTickStrategy> var3) |
public |
int |
getBlockint getBlock(int var1, int var2, int var3) |
static |
ComponentType<ChunkStore, BlockChunk> |
getComponentTypeComponentType<ChunkStore, BlockChunk> getComponentType() |
public |
int |
getEnvironmentint getEnvironment(@Nonnull Vector3d var1) |
public |
int |
getEnvironmentint getEnvironment(@Nonnull Vector3i var1) |
public |
int |
getEnvironmentint getEnvironment(int var1, int var2, int var3) |
public |
EnvironmentColumn |
getEnvironmentColumnEnvironmentColumn getEnvironmentColumn(int var1, int var2) |
public |
short |
getHeightshort getHeight(int var1, int var2) |
public |
short |
getHeightshort getHeight(int var1) |
public |
long |
getIndexlong getIndex() |
public |
boolean |
getNeedsSavingboolean getNeedsSaving() |
|
public Query<ChunkStore> |
getQuerypublic Query<ChunkStore> getQuery() |
public |
int |
getTintint getTint(int var1, int var2) |
public |
int |
getXint getX() |
public |
int |
getZint getZ() |
|
|
if if(var6 == 0) |
|
|
if if(var2 != null) |
|
|
if if(var5 != null) |
|
|
if if(var1 >= 0 && var1 < this.chunkSections.length) |
|
|
if if(var1 >= 0 && var1 < this.chunkSectionsRefs.length) |
|
|
if if(var2 >= 0 && var2 < this.chunkSections.length) |
|
|
if if(var2 >= 0 && var2 < 320) |
|
|
if if(var2 >= 0 && var2 < 320) |
|
|
if if(var9) |
|
|
if if(var10 != null) |
|
|
if if(var7 > 0 && var8 != null) |
|
|
if if(var2 >= 0 && var2 < 320) |
|
|
if if(var5) |
|
|
if if(var6 != null) |
|
|
if if(var2 != null) |
|
|
if if(var2 != null) |
|
|
if if(var2 != null) |
|
|
if if(var0 != null) |
public |
void |
invalidateChunkSectionvoid invalidateChunkSection(int var1) |
public |
boolean |
isTickingboolean isTicking(int var1, int var2, int var3) |
public |
void |
loadvoid load(int var1, int var2) |
public |
void |
markNeedsPhysicsvoid markNeedsPhysics() |
public |
void |
markNeedsSavingvoid markNeedsSaving() |
private |
byte[] |
serializebyte[] serialize(ExtraInfo var1) |
public |
boolean |
setBlockboolean setBlock(int var1, int var2, int var3, int var4, int var5, int var6) |
public |
void |
setEnvironmentvoid setEnvironment(int var1, int var2, int var3, int var4) |
public |
void |
setEnvironmentChunkvoid setEnvironmentChunk(EnvironmentChunk var1) |
public |
void |
setHeightvoid setHeight(int var1, int var2, short var3) |
public |
boolean |
setTickingboolean setTicking(int var1, int var2, int var3, boolean var4) |
public |
void |
setTintvoid setTint(int var1, int var2, int var3) |
abstract |
|
this this(var3, var4, var5, new BlockSection[10]) |
public |
short |
updateHeightshort updateHeight(int var1, int var2) |
public |
short |
updateHeightshort updateHeight(int var1, int var2, short var3) |
public |
void |
updateHeightmapvoid updateHeightmap() |
|
|
while while(--var6 > 0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.world.chunk;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.function.predicate.ObjectPositionBlockFunction;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.protocol.CachedPacket;
class="kw">import com.hypixel.hytale.protocol.Opacity;
class="kw">import com.hypixel.hytale.protocol.ToClientPacket;
class="kw">import com.hypixel.hytale.protocol.packets.world.SetChunkEnvironments;
class="kw">import com.hypixel.hytale.protocol.packets.world.SetChunkTintmap;
class="kw">import com.hypixel.hytale.protocol.packets.world.SetColumn;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktick.BlockTickStrategy;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.LegacyModule;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.environment.EnvironmentChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.environment.EnvironmentColumn;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.palette.IntBytePalette;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.palette.ShortBytePalette;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import java.lang.foreign.MemorySegment;
class="kw">import java.lang.foreign.ValueLayout;
class="kw">import java.lang.ref.SoftReference;
class="kw">import java.util.List;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.function.Function;
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 BlockChunk class="kw">implements Component<ChunkStore> {
class="kw">public class="kw">static class="kw">final int VERSION = 3;
class="kw">public class="kw">static class="kw">final BuilderCodec<BlockChunk> CODEC = BuilderCodec.<BlockChunk>builder(BlockChunk.class, BlockChunk::new)
.versioned()
.codecVersion(3)
.append(new KeyedCodec<>("Data", Codec.BYTE_ARRAY), BlockChunk::deserialize, BlockChunk::serialize)
.add()
.build();
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public class="kw">static boolean SEND_LOCAL_LIGHTING_DATA = true;
class="kw">public class="kw">static boolean SEND_GLOBAL_LIGHTING_DATA = false;
class="kw">private long index;
class="kw">private int x;
class="kw">private int z;
class="kw">private class="kw">final ShortBytePalette height;
class="kw">private class="kw">final IntBytePalette tint;
@Deprecated(forRemoval = true)
class="kw">private BlockSection[] chunkSections;
@Deprecated(forRemoval = true)
class="kw">private ChunkSection[] chunkSectionsRefs;
class="kw">private EnvironmentChunk environments;
class="kw">private boolean needsPhysics = true;
class="kw">private boolean needsSaving = false;
@Nullable
class="kw">private class="kw">transient SoftReference<CompletableFuture<CachedPacket<SetColumn>>> cachedColumnPacket;
@Nullable
class="kw">private class="kw">transient SoftReference<CompletableFuture<CachedPacket<SetChunkTintmap>>> cachedTintmapPacket;
@Nullable
class="kw">private class="kw">transient SoftReference<CompletableFuture<CachedPacket<SetChunkEnvironments>>> cachedEnvironmentsPacket;
class="kw">public class="kw">static ComponentType<ChunkStore, BlockChunk> getComponentType() {
class="kw">return LegacyModule.get().getBlockChunkComponentType();
}
class="kw">private BlockChunk() {
this(new ShortBytePalette(), new IntBytePalette(), new EnvironmentChunk(), new BlockSection[10]);
}
class="kw">public void load(int var1, int var2) {
this.x = var1;
this.z = var2;
this.index = ChunkUtil.indexChunk(var1, var2);
}
class="kw">public BlockChunk(int var1, int var2) {
this(var1, var2, new ShortBytePalette(), new IntBytePalette(), new EnvironmentChunk());
}
class="kw">public BlockChunk(int var1, int var2, ShortBytePalette var3, IntBytePalette var4, EnvironmentChunk var5) {
this(var3, var4, var5, new BlockSection[10]);
this.x = var1;
this.z = var2;
this.index = ChunkUtil.indexChunk(var1, var2);
}
class="kw">public BlockChunk(ShortBytePalette var1, IntBytePalette var2, EnvironmentChunk var3, BlockSection[] var4) {
this.height = var1;
this.tint = var2;
this.environments = var3;
this.chunkSections = var4;
this.chunkSectionsRefs = new ChunkSection[10];
}
@Override
class="kw">public Component<ChunkStore> clone() {
throw new UnsupportedOperationException("Not implemented!");
}
@Nonnull
@Override
class="kw">public Component<ChunkStore> cloneSerializable() {
class="kw">return this;
}
class="kw">public long getIndex() {
class="kw">return this.index;
}
class="kw">public int getX() {
class="kw">return this.x;
}
class="kw">public int getZ() {
class="kw">return this.z;
}
@Deprecated
class="kw">public EnvironmentChunk getEnvironmentChunk() {
class="kw">return this.environments;
}
class="kw">public void setEnvironmentChunk(EnvironmentChunk var1) {
this.environments = var1;
}
class="kw">public short getHeight(int var1, int var2) {
class="kw">return this.height.get(var1, var2);
}
class="kw">public short getHeight(int var1) {
class="kw">return this.height.get(var1);
}
class="kw">public void setHeight(int var1, int var2, short var3) {
this.height.set(var1, var2, var3);
this.cachedColumnPacket = null;
this.markNeedsSaving();
}
class="kw">public void updateHeightmap() {
for (int var1 = 0; var1 < 32; var1++) {
for (int var2 = 0; var2 < 32; var2++) {
this.updateHeight(var1, var2);
}
}
}
class="kw">public short updateHeight(int var1, int var2) {
class="kw">return this.updateHeight(var1, var2, (short)320);
}
class="kw">public short updateHeight(int var1, int var2, short var3) {
short var6 = var3;
while (--var6 > 0) {
BlockSection var4 = this.getSectionAtBlockY(var6);
if (var4.isSolidAir()) {
var6 = (short)(ChunkUtil.indexSection(var6) * 32);
if (var6 == 0) {
break;
}
} else {
int var5 = var4.get(var1, var6, var2);
BlockType var7 = BlockType.getAssetMap().getAsset(var5);
if (var5 != 0 && var7 != null && var7.getOpacity() != Opacity.Transparent) {
break;
}
}
}
this.setHeight(var1, var2, var6);
class="kw">return var6;
}
@Deprecated(forRemoval = true)
class="kw">public void loadFromHolder(@Nonnull Holder<ChunkStore> var1) {
ChunkColumn var2 = var1.getComponent(ChunkColumn.getComponentType());
if (var2 != null) {
Holder[] var3 = var2.getSectionHolders();
for (int var4 = 0; var4 < var3.length; var4++) {
Holder var5 = var3[var4];
if (var5 != null) {
this.chunkSections[var4] = var5.ensureAndGetComponent(BlockSection.getComponentType());
this.chunkSectionsRefs[var4] = var5.getComponent(ChunkSection.getComponentType());
}
}
}
}
@Deprecated(forRemoval = true)
class="kw">public void refreshSectionRefs(@Nonnull Holder<ChunkStore>[] var1) {
for (int var2 = 0; var2 < var1.length; var2++) {
this.chunkSections[var2] = var1[var2].ensureAndGetComponent(BlockSection.getComponentType());
this.chunkSectionsRefs[var2] = var1[var2].getComponent(ChunkSection.getComponentType());
}
}
@Deprecated(forRemoval = false)
class="kw">public BlockSection getSectionAtIndex(int var1) {
if (var1 >= 0 && var1 < this.chunkSections.length) {
class="kw">return this.chunkSections[var1];
} else {
throw new IllegalArgumentException("Section index must >=0 and <" + this.chunkSections.length + " but was given " + var1);
}
}
@Deprecated(forRemoval = false)
class="kw">public ChunkSection getSectionRefAtIndex(int var1) {
if (var1 >= 0 && var1 < this.chunkSectionsRefs.length) {
class="kw">return this.chunkSectionsRefs[var1];
} else {
throw new IllegalArgumentException("Section index must >=0 and <" + this.chunkSectionsRefs.length + " but was given " + var1);
}
}
@Deprecated(forRemoval = false)
class="kw">public BlockSection getSectionAtBlockY(int var1) {
int var2 = ChunkUtil.indexSection(var1);
if (var2 >= 0 && var2 < this.chunkSections.length) {
class="kw">return this.chunkSections[var2];
} else {
throw new IllegalArgumentException("Section y must >=0 and <320 but was given " + var1);
}
}
class="kw">public int getTint(int var1, int var2) {
class="kw">return this.tint.get(var1, var2);
}
class="kw">public void setTint(int var1, int var2, int var3) {
this.tint.set(var1, var2, var3);
this.cachedColumnPacket = null;
this.cachedTintmapPacket = null;
this.markNeedsSaving();
}
class="kw">public int getEnvironment(@Nonnull Vector3d var1) {
class="kw">return this.getEnvironment(MathUtil.floor(var1.x), MathUtil.floor(var1.y), MathUtil.floor(var1.z));
}
class="kw">public int getEnvironment(@Nonnull Vector3i var1) {
class="kw">return this.getEnvironment(var1.x, var1.y, var1.z);
}
class="kw">public int getEnvironment(int var1, int var2, int var3) {
class="kw">return var2 >= 0 && var2 < 320 ? this.environments.get(var1, var2, var3) : 0;
}
class="kw">public EnvironmentColumn getEnvironmentColumn(int var1, int var2) {
class="kw">return this.environments.get(var1, var2);
}
class="kw">public void setEnvironment(int var1, int var2, int var3, int var4) {
if (var2 >= 0 && var2 < 320) {
this.environments.set(var1, var2, var3, var4);
this.cachedColumnPacket = null;
this.cachedEnvironmentsPacket = null;
this.markNeedsSaving();
}
}
class="kw">public int getBlock(int var1, int var2, int var3) {
class="kw">return var2 >= 0 && var2 < 320 ? this.getSectionAtBlockY(var2).get(var1, var2, var3) : 0;
}
class="kw">public boolean setBlock(int var1, int var2, int var3, int var4, int var5, int var6) {
if (var2 >= 0 && var2 < 320) {
int var7 = ChunkUtil.indexSection(var2);
BlockSection var8 = this.chunkSections[var7];
boolean var9 = var8.set(var1, var2, var3, var4, var5, var6);
if (var9) {
this.invalidateChunkSection(var7);
ChunkSection var10 = this.chunkSectionsRefs[var7];
if (var10 != null) {
var10.markNeedsSaving();
}
}
class="kw">return var9;
} else {
throw new IllegalArgumentException(
String.format("Failed to set block at %d, %d, %d to %d because it is outside the world bounds", var1, var2, var3, var4)
);
}
}
class="kw">public boolean contains(int var1) {
class="kw">return this.count(var1) != 0;
}
class="kw">public int count(int var1) {
int var2 = 0;
for (BlockSection var6 : this.chunkSections) {
var2 += var6.count(var1);
}
class="kw">return var2;
}
@Nonnull
class="kw">public IntSet blocks() {
IntSet var1 = new IntOpenHashSet();
for (BlockSection var5 : this.chunkSections) {
var1.addAll(var5.values());
}
class="kw">return var1;
}
class="kw">public int blockCount() {
class="kw">return this.blocks().size();
}
class="kw">public <T, V> int forEachTicking(T var1, V var2, ObjectPositionBlockFunction<T, V, BlockTickStrategy> var3) {
int var4 = 0;
for (int var5 = 0; var5 < this.chunkSections.length; var5++) {
BlockSection var6 = this.chunkSections[var5];
int var7 = var6.forEachTicking(var1, var2, var5, var3);
ChunkSection var8 = this.chunkSectionsRefs[var5];
if (var7 > 0 && var8 != null) {
var8.markNeedsSaving();
}
var4 += var7;
}
class="kw">return var4;
}
class="kw">public boolean setTicking(int var1, int var2, int var3, boolean var4) {
if (var2 >= 0 && var2 < 320) {
boolean var5 = this.getSectionAtBlockY(var2).setTicking(var1, var2, var3, var4);
if (var5) {
ChunkSection var6 = this.chunkSectionsRefs[ChunkUtil.chunkCoordinate(var2)];
if (var6 != null) {
var6.markNeedsSaving();
}
}
class="kw">return var5;
} else {
class="kw">return false;
}
}
class="kw">public boolean isTicking(int var1, int var2, int var3) {
class="kw">return var2 >= 0 && var2 < 320 ? this.getSectionAtBlockY(var2).isTicking(var1, var2, var3) : false;
}
class="kw">public void markNeedsSaving() {
this.needsSaving = true;
}
class="kw">public boolean getNeedsSaving() {
class="kw">return this.needsSaving;
}
class="kw">public boolean consumeNeedsSaving() {
boolean var1 = this.needsSaving;
this.needsSaving = false;
class="kw">return var1;
}
class="kw">public void markNeedsPhysics() {
this.needsPhysics = true;
}
class="kw">public boolean consumeNeedsPhysics() {
boolean var1 = this.needsPhysics;
this.needsPhysics = false;
class="kw">return var1;
}
class="kw">public void invalidateChunkSection(int var1) {
this.chunkSections[var1].invalidate();
}
class="kw">private byte[] serialize(ExtraInfo var1) {
int var2 = this.height.byteSize();
byte[] var3 = new byte[1 + var2 + this.tint.byteSize()];
MemorySegment var4 = MemorySegment.ofArray(var3);
var4.set(ValueLayout.JAVA_BOOLEAN, 0L, this.needsPhysics);
this.height.serialize(var4, 1);
this.tint.serialize(var4, 1 + var2);
class="kw">return var3;
}
class="kw">private void deserialize(@Nonnull byte[] var1, @Nonnull ExtraInfo var2) {
if (var2.getVersion() < 3) {
throw new IllegalArgumentException("Version not supported");
}
MemorySegment var3 = MemorySegment.ofArray(var1);
this.needsPhysics = var3.get(ValueLayout.JAVA_BOOLEAN, 0L);
int var4 = this.height.deserialize(var3, 1);
this.tint.deserialize(var3, 1 + var4);
}
@Nonnull
class="kw">private CompletableFuture<CachedPacket<SetColumn>> getCachedColumnPacket() {
SoftReference var1 = this.cachedColumnPacket;
CompletableFuture var2 = var1 != null ? var1.get() : null;
if (var2 != null) {
class="kw">return var2;
}
var2 = CompletableFuture.supplyAsync(() -> {
SetColumn var1 = new SetColumn(this.x, this.z, this.height.serialize(), this.tint.serialize(), this.environments.serializeProtocol());
class="kw">return CachedPacket.cache(var1);
});
this.cachedColumnPacket = new SoftReference<>(var2);
class="kw">return var2;
}
@Nonnull
class="kw">public CompletableFuture<CachedPacket<SetChunkTintmap>> getCachedTintsPacket() {
SoftReference var1 = this.cachedTintmapPacket;
CompletableFuture var2 = var1 != null ? var1.get() : null;
if (var2 != null) {
class="kw">return var2;
}
var2 = CompletableFuture.supplyAsync(() -> {
SetChunkTintmap var1 = new SetChunkTintmap(this.x, this.z, this.tint.serialize());
class="kw">return CachedPacket.cache(var1);
});
this.cachedTintmapPacket = new SoftReference<>(var2);
class="kw">return var2;
}
@Nonnull
class="kw">public CompletableFuture<CachedPacket<SetChunkEnvironments>> getCachedEnvironmentsPacket() {
SoftReference var1 = this.cachedEnvironmentsPacket;
CompletableFuture var2 = var1 != null ? var1.get() : null;
if (var2 != null) {
class="kw">return var2;
}
var2 = CompletableFuture.supplyAsync(() -> {
SetChunkEnvironments var1 = new SetChunkEnvironments(this.x, this.z, this.environments.serializeProtocol());
class="kw">return CachedPacket.cache(var1);
});
this.cachedEnvironmentsPacket = new SoftReference<>(var2);
class="kw">return var2;
}
class="kw">public class="kw">static class LoadBlockChunkPacketSystem class="kw">extends ChunkStore.LoadFuturePacketDataQuerySystem {
class="kw">private class="kw">final ComponentType<ChunkStore, BlockChunk> componentType;
class="kw">public LoadBlockChunkPacketSystem(ComponentType<ChunkStore, BlockChunk> var1) {
this.componentType = var1;
}
@Override
class="kw">public Query<ChunkStore> getQuery() {
class="kw">return this.componentType;
}
class="kw">public void fetch(
int var1,
@Nonnull ArchetypeChunk<ChunkStore> var2,
Store<ChunkStore> var3,
CommandBuffer<ChunkStore> var4,
PlayerRef var5,
@Nonnull List<CompletableFuture<ToClientPacket>> var6
) {
BlockChunk var7 = var2.getComponent(var1, this.componentType);
assert var7 != null;
var6.add(var7.getCachedColumnPacket().exceptionally(var0 -> {
if (var0 != null) {
((HytaleLogger.Api)BlockChunk.LOGGER.at(Level.SEVERE).withCause(var0)).log("Exception when compressing chunk column:");
}
class="kw">return null;
}).thenApply(Function.identity()));
}
}
}