mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 07:20:00 +08:00
2609a118e8
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: f4f2ef4c SPIGOT-6222: Correct javadoc for Entity#setPassenger 1871ca9d #559: Add wait time modification for FishHook CraftBukkit Changes: bc6a175e #767: Add wait time modification for FishHook 2fc37bcc SPIGOT-6197: Prevent world loading from updating spawn settings of all worlds
80 lines
5.5 KiB
Diff
80 lines
5.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Mon, 28 Mar 2016 19:55:45 -0400
|
|
Subject: [PATCH] Only process BlockPhysicsEvent if a plugin has a listener
|
|
|
|
Saves on some object allocation and processing when no plugin listens to this
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockPlant.java b/src/main/java/net/minecraft/server/BlockPlant.java
|
|
index 47e370667926e59f036be3f2befe8820668cf892..a830305f0e334ad87e6b9ed94230ff611d997d7e 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockPlant.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockPlant.java
|
|
@@ -14,7 +14,7 @@ public class BlockPlant extends Block {
|
|
public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) {
|
|
// CraftBukkit start
|
|
if (!iblockdata.canPlace(generatoraccess, blockposition)) {
|
|
- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPhysicsEvent(generatoraccess, blockposition).isCancelled()) {
|
|
+ if (!(generatoraccess instanceof WorldServer && ((WorldServer) generatoraccess).hasPhysicsEvent) || !org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPhysicsEvent(generatoraccess, blockposition).isCancelled()) { // Paper
|
|
return Blocks.AIR.getBlockData();
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/BlockTallPlant.java b/src/main/java/net/minecraft/server/BlockTallPlant.java
|
|
index 48eb9c8a68d45c88c7a42e8e400446a374fb4fc9..2c8d49501664862559ed8974b4821bdd36fabebf 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockTallPlant.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockTallPlant.java
|
|
@@ -67,7 +67,7 @@ public class BlockTallPlant extends BlockPlant {
|
|
|
|
protected static void b(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) {
|
|
// CraftBukkit start
|
|
- if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPhysicsEvent(world, blockposition).isCancelled()) {
|
|
+ if (((WorldServer)world).hasPhysicsEvent && org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPhysicsEvent(world, blockposition).isCancelled()) { // Paper
|
|
return;
|
|
}
|
|
// CraftBukkit end
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 4d3cb70f1567b042e1605b30637706560bd883d9..2193e395e05bbfcd32f95445c85b65ee4dca5ed4 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1173,6 +1173,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant<TickTas
|
|
|
|
while (iterator.hasNext()) {
|
|
WorldServer worldserver = (WorldServer) iterator.next();
|
|
+ worldserver.hasPhysicsEvent = org.bukkit.event.block.BlockPhysicsEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper
|
|
|
|
this.methodProfiler.a(() -> {
|
|
return worldserver + " " + worldserver.getDimensionKey().a();
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 92785a80bae6b5c88285536f74f23e0609d793ac..19f0149051d9ff58223624754b27285c4c99b769 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -406,7 +406,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
// CraftBukkit start
|
|
iblockdata1.b(this, blockposition, k, j - 1); // Don't call an event for the old block to limit event spam
|
|
CraftWorld world = ((WorldServer) this).getWorld();
|
|
- if (world != null) {
|
|
+ if (world != null && ((WorldServer)this).hasPhysicsEvent) { // Paper
|
|
BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()), CraftBlockData.fromData(iblockdata));
|
|
this.getServer().getPluginManager().callEvent(event);
|
|
|
|
@@ -508,7 +508,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
try {
|
|
// CraftBukkit start
|
|
CraftWorld world = ((WorldServer) this).getWorld();
|
|
- if (world != null) {
|
|
+ if (world != null && ((WorldServer)this).hasPhysicsEvent) { // Paper
|
|
BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()), CraftBlockData.fromData(iblockdata), world.getBlockAt(blockposition1.getX(), blockposition1.getY(), blockposition1.getZ()));
|
|
this.getServer().getPluginManager().callEvent(event);
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
|
index 2dfecbc93c5de9ea67064ff2b8e041e173fc0be2..e900ce242a84c8f6003905cf320070ea88ae13f3 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
|
@@ -87,6 +87,7 @@ public class WorldServer extends World implements GeneratorAccessSeed {
|
|
private int tickPosition;
|
|
public final Convertable.ConversionSession convertable;
|
|
public final UUID uuid;
|
|
+ boolean hasPhysicsEvent = true; // Paper
|
|
|
|
@Override public Chunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI
|
|
return this.chunkProvider.getChunkAt(x, z, false);
|