mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-25 00:30:25 +01:00
SPIGOT-4316: Do even less processing when block placement without physics requested
This commit is contained in:
parent
f598574711
commit
c2cbdc5ab4
3 changed files with 28 additions and 11 deletions
|
@ -80,17 +80,33 @@
|
|||
}
|
||||
|
||||
public Set<BlockPosition> t() {
|
||||
@@ -473,7 +513,8 @@
|
||||
@@ -412,8 +452,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ // CraftBukkit start
|
||||
@Nullable
|
||||
public IBlockData a(BlockPosition blockposition, IBlockData iblockdata, boolean flag) {
|
||||
+ return this.a(blockposition, iblockdata, flag, true);
|
||||
+ }
|
||||
+
|
||||
+ @Nullable
|
||||
+ public IBlockData a(BlockPosition blockposition, IBlockData iblockdata, boolean flag, boolean doPlace) {
|
||||
+ // CraftBukkit end
|
||||
int i = blockposition.getX() & 15;
|
||||
int j = blockposition.getY();
|
||||
int k = blockposition.getZ() & 15;
|
||||
@@ -473,7 +520,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (!this.world.isClientSide) {
|
||||
+ // CraftBukkit - Don't place while processing the BlockPlaceEvent, unless it's a BlockContainer. Prevents blocks such as TNT from activating when cancelled.
|
||||
+ if (!this.world.isClientSide && (!this.world.captureBlockStates || block instanceof BlockTileEntity)) {
|
||||
+ if (!this.world.isClientSide && doPlace && (!this.world.captureBlockStates || block instanceof BlockTileEntity)) {
|
||||
iblockdata.onPlace(this.world, blockposition, iblockdata1);
|
||||
}
|
||||
|
||||
@@ -653,7 +694,12 @@
|
||||
@@ -653,7 +701,12 @@
|
||||
|
||||
@Nullable
|
||||
public TileEntity a(BlockPosition blockposition, Chunk.EnumTileEntityState chunk_enumtileentitystate) {
|
||||
|
@ -104,7 +120,7 @@
|
|||
|
||||
if (tileentity == null) {
|
||||
if (chunk_enumtileentitystate == Chunk.EnumTileEntityState.IMMEDIATE) {
|
||||
@@ -688,6 +734,13 @@
|
||||
@@ -688,6 +741,13 @@
|
||||
|
||||
tileentity.z();
|
||||
this.tileEntities.put(blockposition, tileentity);
|
||||
|
@ -118,7 +134,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -720,6 +773,17 @@
|
||||
@@ -720,6 +780,17 @@
|
||||
}));
|
||||
}
|
||||
|
||||
|
@ -136,7 +152,7 @@
|
|||
}
|
||||
|
||||
public void removeEntities() {
|
||||
@@ -736,9 +800,21 @@
|
||||
@@ -736,9 +807,21 @@
|
||||
int i = aentityslice.length;
|
||||
|
||||
for (int j = 0; j < i; ++j) {
|
||||
|
@ -160,7 +176,7 @@
|
|||
}
|
||||
|
||||
}
|
||||
@@ -800,8 +876,8 @@
|
||||
@@ -800,8 +883,8 @@
|
||||
while (iterator.hasNext()) {
|
||||
Entity entity = (Entity) iterator.next();
|
||||
|
||||
|
@ -171,7 +187,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
@@ -1007,13 +1083,13 @@
|
||||
@@ -1007,13 +1090,13 @@
|
||||
|
||||
@Nullable
|
||||
public LongSet b(String s) {
|
||||
|
@ -187,7 +203,7 @@
|
|||
return new LongOpenHashSet();
|
||||
})).add(i);
|
||||
}
|
||||
@@ -1061,14 +1137,14 @@
|
||||
@@ -1061,14 +1144,14 @@
|
||||
}
|
||||
|
||||
if (this.s instanceof ProtoChunkTickList) {
|
||||
|
|
|
@ -146,6 +146,7 @@
|
|||
} else {
|
||||
Chunk chunk = this.getChunkAtWorldCoords(blockposition);
|
||||
Block block = iblockdata.getBlock();
|
||||
- IBlockData iblockdata1 = chunk.a(blockposition, iblockdata, (i & 64) != 0);
|
||||
+
|
||||
+ // CraftBukkit start - capture blockstates
|
||||
+ CraftBlockState blockstate = null;
|
||||
|
@ -155,7 +156,7 @@
|
|||
+ }
|
||||
+ // CraftBukkit end
|
||||
+
|
||||
IBlockData iblockdata1 = chunk.a(blockposition, iblockdata, (i & 64) != 0);
|
||||
+ IBlockData iblockdata1 = chunk.a(blockposition, iblockdata, (i & 64) != 0, (i & 1024) == 0); // CraftBukkit custom NO_PLACE flag
|
||||
|
||||
if (iblockdata1 == null) {
|
||||
+ // CraftBukkit start - remove blockstate if failed
|
||||
|
|
|
@ -157,7 +157,7 @@ public class CraftBlock implements Block {
|
|||
return world.setTypeAndData(position, blockData, 3);
|
||||
} else {
|
||||
IBlockData old = world.getType(position);
|
||||
boolean success = world.setTypeAndData(position, blockData, 18); // NOTIFY | NO_OBSERVER
|
||||
boolean success = world.setTypeAndData(position, blockData, 2 | 16 | 1024); // NOTIFY | NO_OBSERVER | NO_PLACE (custom)
|
||||
if (success) {
|
||||
world.getMinecraftWorld().notify(
|
||||
position,
|
||||
|
|
Loading…
Reference in a new issue