mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 03:48:01 +01:00
b62dfa0bf9
Upstream has released updates that appears 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: 39ce5d3a SPIGOT-4399: ItemMeta.equals broken with AttributeModifiers CraftBukkit Changes:1cf8b5dc
SPIGOT-4400: Populators running on existing chunks116cb9a1
SPIGOT-4399: Add attribute modifier equality test5ee1c18a
SPIGOT-4398: Set ASM7_EXPERIMENTAL flag
68 lines
3.6 KiB
Diff
68 lines
3.6 KiB
Diff
From f76e3c781a1cadadc69bb96ba9d74ef4f2e6d746 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Thu, 20 Sep 2018 19:11:33 -0400
|
|
Subject: [PATCH] MC-134115: Fix Double Chest Conversion Error
|
|
|
|
A bug with double chest conversion would lead to data
|
|
loss from chunks if they crossed chunk boundries.
|
|
|
|
This fixes the issue.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
|
index 63e7ba9a9a..53aab97866 100644
|
|
--- a/src/main/java/net/minecraft/server/Chunk.java
|
|
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
|
@@ -515,6 +515,26 @@ public class Chunk implements IChunkAccess {
|
|
return this.a(blockposition, iblockdata, flag, true);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ public void setTypeDirect(BlockPosition blockposition, IBlockData iblockdata) {
|
|
+ int i = blockposition.getX() & 15;
|
|
+ int j = blockposition.getY();
|
|
+ int k = blockposition.getZ() & 15;
|
|
+ ChunkSection section = this.sections[j >> 4];
|
|
+
|
|
+ if (section == Chunk.EMPTY_CHUNK_SECTION) {
|
|
+ if (iblockdata.isAir()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ section = new ChunkSection(j >> 4 << 4, this.world.worldProvider.g(), this, this.world, true); // Paper - Anti-Xray
|
|
+ this.sections[j >> 4] = section;
|
|
+ }
|
|
+
|
|
+ section.setType(i, j & 15, k, iblockdata);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Nullable
|
|
public IBlockData a(BlockPosition blockposition, IBlockData iblockdata, boolean flag, boolean doPlace) {
|
|
// CraftBukkit end
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkConverter.java b/src/main/java/net/minecraft/server/ChunkConverter.java
|
|
index 65b2654de8..70c60d54e7 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkConverter.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkConverter.java
|
|
@@ -198,10 +198,15 @@ public class ChunkConverter {
|
|
EnumDirection enumdirection1 = (EnumDirection)iblockdata.get(BlockChest.FACING);
|
|
if (enumdirection.k() != enumdirection1.k() && enumdirection1 == iblockdata1.get(BlockChest.FACING)) {
|
|
BlockPropertyChestType blockpropertychesttype = enumdirection == enumdirection1.e() ? BlockPropertyChestType.LEFT : BlockPropertyChestType.RIGHT;
|
|
- generatoraccess.setTypeAndData(blockposition1, (IBlockData)iblockdata1.set(BlockChest.b, blockpropertychesttype.a()), 18);
|
|
+ // Paper start
|
|
+ Chunk chunk = ((World) generatoraccess.getMinecraftWorld()).getChunkAtWorldCoords(blockposition);
|
|
+ Chunk chunk1 = ((World) generatoraccess.getMinecraftWorld()).getChunkAtWorldCoords(blockposition1);
|
|
+ chunk1.setTypeDirect(blockposition1, (IBlockData)iblockdata1.set(BlockChest.b, blockpropertychesttype.a()));
|
|
+
|
|
if (enumdirection1 == EnumDirection.NORTH || enumdirection1 == EnumDirection.EAST) {
|
|
- TileEntity tileentity = generatoraccess.getTileEntity(blockposition);
|
|
- TileEntity tileentity1 = generatoraccess.getTileEntity(blockposition1);
|
|
+ TileEntity tileentity = chunk.getTileEntity(blockposition);
|
|
+ TileEntity tileentity1 = chunk1.getTileEntity(blockposition1);
|
|
+ // Paper end
|
|
if (tileentity instanceof TileEntityChest && tileentity1 instanceof TileEntityChest) {
|
|
TileEntityChest.a((TileEntityChest)tileentity, (TileEntityChest)tileentity1);
|
|
}
|
|
--
|
|
2.19.0
|
|
|