Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 03:20:07 +01:00
64ed429884
This is a pretty tiny update with very little changed. Recommended to update from 1.16.2 ASAP as 1.16.2 is now no longer supported. Plugins should mostly remain working as the NMS revision did not change.
60 Zeilen
3.7 KiB
Diff
60 Zeilen
3.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Shane Freeder <theboyetronic@gmail.com>
|
|
Date: Thu, 16 Nov 2017 12:12:41 +0000
|
|
Subject: [PATCH] use CB BlockState implementations for captured blocks
|
|
|
|
When modifying the world, CB will store a copy of the affected
|
|
blocks in order to restore their state in the case that the event
|
|
is cancelled. This change only modifies the collection of blocks
|
|
in the world by normal means, e.g. not during tree population,
|
|
as the potentially marginal overheads would serve no advantage.
|
|
|
|
CB was using a CraftBlockState for all blocks, which causes issues
|
|
should any block that uses information beyond a data ID would suffer
|
|
from missing information, e.g. Skulls.
|
|
|
|
By using CBs CraftBlock#getState(), we will maintain a proper copy of
|
|
the blockstate that will be valid for restoration, as opposed to dropping
|
|
information on restoration when the event is cancelled.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 83559b3a5b72729f6d75590cf322dd2507783bd1..1b15ccd6c05d1ed965c03cd50f7488e26741c2ed 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -71,7 +71,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
|
|
public boolean captureBlockStates = false;
|
|
public boolean captureTreeGeneration = false;
|
|
- public Map<BlockPosition, CapturedBlockState> capturedBlockStates = new java.util.LinkedHashMap<>();
|
|
+ public Map<BlockPosition, org.bukkit.craftbukkit.block.CraftBlockState> capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper
|
|
public Map<BlockPosition, TileEntity> capturedTileEntities = new HashMap<>();
|
|
public List<EntityItem> captureDrops;
|
|
public long ticksPerAnimalSpawns;
|
|
@@ -294,7 +294,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
public boolean a(BlockPosition blockposition, IBlockData iblockdata, int i, int j) {
|
|
// CraftBukkit start - tree generation
|
|
if (this.captureTreeGeneration) {
|
|
- CapturedBlockState blockstate = capturedBlockStates.get(blockposition);
|
|
+ CraftBlockState blockstate = capturedBlockStates.get(blockposition);
|
|
if (blockstate == null) {
|
|
blockstate = CapturedBlockState.getTreeBlockState(this, blockposition, i);
|
|
this.capturedBlockStates.put(blockposition.immutableCopy(), blockstate);
|
|
@@ -314,7 +314,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
// CraftBukkit start - capture blockstates
|
|
boolean captured = false;
|
|
if (this.captureBlockStates && !this.capturedBlockStates.containsKey(blockposition)) {
|
|
- CapturedBlockState blockstate = CapturedBlockState.getBlockState(this, blockposition, i);
|
|
+ CraftBlockState blockstate = (CraftBlockState) world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()).getState(); // Paper - use CB getState to get a suitable snapshot
|
|
this.capturedBlockStates.put(blockposition.immutableCopy(), blockstate);
|
|
captured = true;
|
|
}
|
|
@@ -572,7 +572,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
public IBlockData getType(BlockPosition blockposition) {
|
|
// CraftBukkit start - tree generation
|
|
if (captureTreeGeneration) {
|
|
- CapturedBlockState previous = capturedBlockStates.get(blockposition);
|
|
+ CraftBlockState previous = capturedBlockStates.get(blockposition); // Paper
|
|
if (previous != null) {
|
|
return previous.getHandle();
|
|
}
|