geforkt von Mirrors/Paper
928bcc8d3a
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 09943450 Update SnakeYAML version 5515734f SPIGOT-7162: Incorrect description for Entity#getVehicle javadoc 6f82b381 PR-788: Add getHand() to all relevant events CraftBukkit Changes: aaf484f6f SPIGOT-7163: CraftMerchantRecipe doesn't copy demand and specialPrice from BukkitMerchantRecipe 5329dd6fd PR-1107: Add getHand() to all relevant events 93061706e SPIGOT-7045: Ocelots never spawn with babies with spawn reason OCELOT_BABY
54 Zeilen
3.1 KiB
Diff
54 Zeilen
3.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Mon, 23 Aug 2021 04:50:05 -0700
|
|
Subject: [PATCH] Always parse protochunk light sources unless it is marked as
|
|
non-lit
|
|
|
|
Chunks not marked as lit will always go through the light engine,
|
|
so they should always have their block sources parsed.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java
|
|
index 0254b71ab9af6d74640aa5dc0533afa386e5f57f..34e351e04ac57e47e3cea671c61cc01d17983b77 100644
|
|
--- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java
|
|
+++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java
|
|
@@ -325,16 +325,33 @@ public class ChunkSerializer {
|
|
BelowZeroRetrogen belowzeroretrogen = protochunk.getBelowZeroRetrogen();
|
|
boolean flag5 = chunkstatus.isOrAfter(ChunkStatus.LIGHT) || belowzeroretrogen != null && belowzeroretrogen.targetStatus().isOrAfter(ChunkStatus.LIGHT);
|
|
|
|
- if (!flag && flag5) {
|
|
- Iterator iterator = BlockPos.betweenClosed(chunkPos.getMinBlockX(), world.getMinBuildHeight(), chunkPos.getMinBlockZ(), chunkPos.getMaxBlockX(), world.getMaxBuildHeight() - 1, chunkPos.getMaxBlockZ()).iterator();
|
|
+ if (!flag) { // Paper - fix incorrect parsing of blocks that emit light - it should always parse it, unless the chunk is marked as lit
|
|
+ // Paper start - let's make sure the implementation isn't as slow as possible
|
|
+ int offX = chunkPos.x << 4;
|
|
+ int offZ = chunkPos.z << 4;
|
|
+
|
|
+ int minChunkSection = io.papermc.paper.util.WorldUtil.getMinSection(world);
|
|
+ int maxChunkSection = io.papermc.paper.util.WorldUtil.getMaxSection(world);
|
|
+
|
|
+ LevelChunkSection[] sections = achunksection;
|
|
+ for (int sectionY = minChunkSection; sectionY <= maxChunkSection; ++sectionY) {
|
|
+ LevelChunkSection section = sections[sectionY - minChunkSection];
|
|
+ if (section == null || section.hasOnlyAir()) {
|
|
+ // no sources in empty sections
|
|
+ continue;
|
|
+ }
|
|
+ int offY = sectionY << 4;
|
|
|
|
- while (iterator.hasNext()) {
|
|
- BlockPos blockposition = (BlockPos) iterator.next();
|
|
+ for (int index = 0; index < (16 * 16 * 16); ++index) {
|
|
+ if (section.states.get(index).getLightEmission() <= 0) {
|
|
+ continue;
|
|
+ }
|
|
|
|
- if (((ChunkAccess) object1).getBlockState(blockposition).getLightEmission() != 0) {
|
|
- protochunk.addLight(blockposition);
|
|
+ // index = x | (z << 4) | (y << 8)
|
|
+ protochunk.addLight(new BlockPos(offX | (index & 15), offY | (index >>> 8), offZ | ((index >>> 4) & 15)));
|
|
}
|
|
}
|
|
+ // Paper end
|
|
}
|
|
}
|
|
|