mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-18 20:53:09 +01:00
da9d110d5b
This patch does not appear to be doing anything useful, and may hide errors. Currently, the save logic does not run through this path either so it did not do anything. Additionally, properly implement support for handling RegionFileSizeException in Moonrise.
70 lines
4.4 KiB
Diff
70 lines
4.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Warrior <50800980+Warriorrrr@users.noreply.github.com>
|
|
Date: Sat, 10 Feb 2024 10:03:48 +0100
|
|
Subject: [PATCH] Add getChunkSnapshot includeLightData parameter
|
|
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
|
|
index 887a17a0833064eb5701222e5fb6f5ccf9511588..5fc9e8e969debb3e15ed474b36a1c48b086d0449 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
|
|
@@ -328,12 +328,21 @@ public class CraftChunk implements Chunk {
|
|
|
|
@Override
|
|
public ChunkSnapshot getChunkSnapshot(boolean includeMaxBlockY, boolean includeBiome, boolean includeBiomeTempRain) {
|
|
+ // Paper start - Add getChunkSnapshot includeLightData parameter
|
|
+ return getChunkSnapshot(includeMaxBlockY, includeBiome, includeBiomeTempRain, true);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public ChunkSnapshot getChunkSnapshot(boolean includeMaxBlockY, boolean includeBiome, boolean includeBiomeTempRain, boolean includeLightData) {
|
|
+ // Paper end - Add getChunkSnapshot includeLightData parameter
|
|
ChunkAccess chunk = this.getHandle(ChunkStatus.FULL);
|
|
|
|
LevelChunkSection[] cs = chunk.getSections();
|
|
PalettedContainer[] sectionBlockIDs = new PalettedContainer[cs.length];
|
|
- byte[][] sectionSkyLights = new byte[cs.length][];
|
|
- byte[][] sectionEmitLights = new byte[cs.length][];
|
|
+ // Paper start - Add getChunkSnapshot includeLightData parameter
|
|
+ byte[][] sectionSkyLights = includeLightData ? new byte[cs.length][] : null;
|
|
+ byte[][] sectionEmitLights = includeLightData ? new byte[cs.length][] : null;
|
|
+ // Paper end - Add getChunkSnapshot includeLightData parameter
|
|
boolean[] sectionEmpty = new boolean[cs.length];
|
|
PalettedContainerRO<Holder<net.minecraft.world.level.biome.Biome>>[] biome = (includeBiome || includeBiomeTempRain) ? new PalettedContainer[cs.length] : null;
|
|
|
|
@@ -350,6 +359,7 @@ public class CraftChunk implements Chunk {
|
|
}
|
|
// Paper end - Fix ChunkSnapshot#isSectionEmpty(int)
|
|
|
|
+ if (includeLightData) { // Paper - Add getChunkSnapshot includeLightData parameter
|
|
LevelLightEngine lightengine = this.worldServer.getLightEngine();
|
|
DataLayer skyLightArray = lightengine.getLayerListener(LightLayer.SKY).getDataLayerData(SectionPos.of(this.x, chunk.getSectionYFromSectionIndex(i), this.z)); // SPIGOT-7498: Convert section index
|
|
if (skyLightArray == null) {
|
|
@@ -365,6 +375,7 @@ public class CraftChunk implements Chunk {
|
|
sectionEmitLights[i] = new byte[2048];
|
|
System.arraycopy(emitLightArray.getData(), 0, sectionEmitLights[i], 0, 2048);
|
|
}
|
|
+ } // Paper - Add getChunkSnapshot includeLightData parameter
|
|
|
|
if (biome != null) {
|
|
biome[i] = ((PalettedContainer<Holder<net.minecraft.world.level.biome.Biome>>) cs[i].getBiomes()).copy(); // Paper - Perf: use copy instead of round tripping with codecs
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java b/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java
|
|
index c88e4ba701b2a2325b76478b7f47278157afd2ef..ddcbdbcbfeb6efe0a587b1181505423cc9d2c951 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java
|
|
@@ -119,6 +119,7 @@ public class CraftChunkSnapshot implements ChunkSnapshot {
|
|
|
|
@Override
|
|
public final int getBlockSkyLight(int x, int y, int z) {
|
|
+ Preconditions.checkState(this.skylight != null, "ChunkSnapshot created without light data. Please call getSnapshot with includeLightData=true"); // Paper - Add getChunkSnapshot includeLightData parameter
|
|
this.validateChunkCoordinates(x, y, z);
|
|
|
|
int off = ((y & 0xF) << 7) | (z << 3) | (x >> 1);
|
|
@@ -127,6 +128,7 @@ public class CraftChunkSnapshot implements ChunkSnapshot {
|
|
|
|
@Override
|
|
public final int getBlockEmittedLight(int x, int y, int z) {
|
|
+ Preconditions.checkState(this.emitlight != null, "ChunkSnapshot created without light data. Please call getSnapshot with includeLightData=true"); // Paper - Add getChunkSnapshot includeLightData parameter
|
|
this.validateChunkCoordinates(x, y, z);
|
|
|
|
int off = ((y & 0xF) << 7) | (z << 3) | (x >> 1);
|