mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-09 13:28:36 +02:00
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: 0969eedc Clarify furnace burn time behaviour as per SPIGOT-844 16453bfd SPIGOT-4503: Add API to insert complete ItemStack into Jukebox CraftBukkit Changes:dff66dfc
Reduce copying of positions from block states91cae6ef
SPIGOT-4387: Durability looping from cancelled BlockPlaceEvent24c5e68c
SPIGOT-4493: Allow burnt out furnaces to remain lit like Vanilla whilst retaining SPIGOT-844 APIbc943daf
Fix Jukebox API not synchronizing playing data with statefe89a8c1
SPIGOT-4503: Add API to insert complete ItemStack into Jukeboxfc102494
Make CraftBlockState use BlockPosition89ab4887
SPIGOT-4543: Jukebox playing calls should not use legacy data6ff5a64c
SPIGOT-4541: Cancelled bucket events require inventory update
136 lines
5.3 KiB
Diff
136 lines
5.3 KiB
Diff
From ed595cb3cc0cf53d6f2fad9c919916fdcf9aec21 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Mon, 6 Nov 2017 21:08:22 -0500
|
|
Subject: [PATCH] API to get a BlockState without a snapshot
|
|
|
|
This allows you to get a BlockState without creating a snapshot, operating
|
|
on the real tile entity.
|
|
|
|
This is useful for where performance is needed
|
|
|
|
also Avoid NPE during CraftBlockEntityState load if could not get TE
|
|
|
|
If Tile Entity was null, correct Sign to return empty lines instead of null
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java
|
|
index b3c5766a2..29fe031d8 100644
|
|
--- a/src/main/java/net/minecraft/server/TileEntity.java
|
|
+++ b/src/main/java/net/minecraft/server/TileEntity.java
|
|
@@ -206,7 +206,12 @@ public abstract class TileEntity implements KeyedObject { // Paper
|
|
}
|
|
|
|
// CraftBukkit start - add method
|
|
+ // Paper start
|
|
public InventoryHolder getOwner() {
|
|
+ return getOwner(true);
|
|
+ }
|
|
+ public InventoryHolder getOwner(boolean useSnapshot) {
|
|
+ // Paper end
|
|
if (world == null) return null;
|
|
// Spigot start
|
|
org.bukkit.block.Block block = world.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ());
|
|
@@ -215,7 +220,7 @@ public abstract class TileEntity implements KeyedObject { // Paper
|
|
return null;
|
|
}
|
|
// Spigot end
|
|
- org.bukkit.block.BlockState state = block.getState();
|
|
+ org.bukkit.block.BlockState state = block.getState(useSnapshot); // Paper
|
|
if (state instanceof InventoryHolder) return (InventoryHolder) state;
|
|
return null;
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
|
index d40127075..e7ccee480 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
|
@@ -275,6 +275,20 @@ public class CraftBlock implements Block {
|
|
}
|
|
|
|
public BlockState getState() {
|
|
+ // Paper start - allow disabling the use of snapshots
|
|
+ return getState(true);
|
|
+ }
|
|
+ public BlockState getState(boolean useSnapshot) {
|
|
+ boolean prev = CraftBlockEntityState.DISABLE_SNAPSHOT;
|
|
+ CraftBlockEntityState.DISABLE_SNAPSHOT = !useSnapshot;
|
|
+ try {
|
|
+ return getState0();
|
|
+ } finally {
|
|
+ CraftBlockEntityState.DISABLE_SNAPSHOT = prev;
|
|
+ }
|
|
+ }
|
|
+ public BlockState getState0() {
|
|
+ // Paper end
|
|
Material material = getType();
|
|
|
|
switch (material) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
|
|
index 4f4121adc..082a1b6e2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
|
|
@@ -23,20 +23,40 @@ public class CraftBlockEntityState<T extends TileEntity> extends CraftBlockState
|
|
CraftWorld world = (CraftWorld) this.getWorld();
|
|
this.tileEntity = tileEntityClass.cast(world.getHandle().getTileEntity(this.getPosition()));
|
|
|
|
+ // Paper start
|
|
+ this.snapshotDisabled = DISABLE_SNAPSHOT;
|
|
+ if (DISABLE_SNAPSHOT) {
|
|
+ this.snapshot = this.tileEntity;
|
|
+ } else {
|
|
+ this.snapshot = this.createSnapshot(this.tileEntity, world.getHandle());
|
|
+ }
|
|
// copy tile entity data:
|
|
- this.snapshot = this.createSnapshot(tileEntity, world.getHandle());
|
|
- this.load(snapshot);
|
|
+ if(this.snapshot != null) {
|
|
+ this.load(this.snapshot);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
+ public final boolean snapshotDisabled; // Paper
|
|
+ public static boolean DISABLE_SNAPSHOT = false; // Paper
|
|
+
|
|
public CraftBlockEntityState(Material material, T tileEntity) {
|
|
super(material);
|
|
|
|
this.tileEntityClass = (Class<T>) tileEntity.getClass();
|
|
this.tileEntity = tileEntity;
|
|
-
|
|
+ // Paper start
|
|
+ this.snapshotDisabled = DISABLE_SNAPSHOT;
|
|
+ if (DISABLE_SNAPSHOT) {
|
|
+ this.snapshot = this.tileEntity;
|
|
+ } else {
|
|
+ this.snapshot = this.createSnapshot(this.tileEntity, null);
|
|
+ }
|
|
// copy tile entity data:
|
|
- this.snapshot = this.createSnapshot(tileEntity, null);
|
|
- this.load(snapshot);
|
|
+ if(this.snapshot != null) {
|
|
+ this.load(this.snapshot);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
private T createSnapshot(T tileEntity, World world) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java b/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java
|
|
index e6f86cc4b..3a8f64360 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java
|
|
@@ -15,10 +15,12 @@ public class CraftSign extends CraftBlockEntityState<TileEntitySign> implements
|
|
|
|
public CraftSign(final Block block) {
|
|
super(block, TileEntitySign.class);
|
|
+ if (lines == null) { lines = new String[]{"", "", "", ""}; } // Paper
|
|
}
|
|
|
|
public CraftSign(final Material material, final TileEntitySign te) {
|
|
super(material, te);
|
|
+ if (lines == null) { lines = new String[]{"", "", "", ""}; } // Paper
|
|
}
|
|
|
|
@Override
|
|
--
|
|
2.20.1
|
|
|