aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0123-Improve-Minecraft-Hopper-Performance.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0123-Improve-Minecraft-Hopper-Performance.patch')
-rw-r--r--Spigot-Server-Patches/0123-Improve-Minecraft-Hopper-Performance.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0123-Improve-Minecraft-Hopper-Performance.patch b/Spigot-Server-Patches/0123-Improve-Minecraft-Hopper-Performance.patch
new file mode 100644
index 0000000000..ce33e0af16
--- /dev/null
+++ b/Spigot-Server-Patches/0123-Improve-Minecraft-Hopper-Performance.patch
@@ -0,0 +1,90 @@
+From b90b6e56102b563fc5dedfd20d1cfc5f901201d4 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Wed, 27 Apr 2016 22:09:52 -0400
+Subject: [PATCH] Improve Minecraft Hopper Performance
+
+Removes unnecessary extra calls to .update() that are very expensive
+Also reset cooldown each hopper tick that a hopper is full.
+Also don't constantly clone ItemStacks without merit
+
+diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java
+index d0c0371fc..d2662ae14 100644
+--- a/src/main/java/net/minecraft/server/TileEntity.java
++++ b/src/main/java/net/minecraft/server/TileEntity.java
+@@ -33,6 +33,7 @@ public abstract class TileEntity {
+ return (MinecraftKey) TileEntity.f.b(oclass);
+ }
+
++ static boolean IGNORE_TILE_UPDATES = false; // Paper
+ public World getWorld() {
+ return this.world;
+ }
+@@ -111,6 +112,7 @@ public abstract class TileEntity {
+
+ public void update() {
+ if (this.world != null) {
++ if (IGNORE_TILE_UPDATES) return; // Paper
+ IBlockData iblockdata = this.world.getType(this.position);
+
+ this.g = iblockdata.getBlock().toLegacyData(iblockdata);
+diff --git a/src/main/java/net/minecraft/server/TileEntityHopper.java b/src/main/java/net/minecraft/server/TileEntityHopper.java
+index 6acce15e7..44b6ecc5d 100644
+--- a/src/main/java/net/minecraft/server/TileEntityHopper.java
++++ b/src/main/java/net/minecraft/server/TileEntityHopper.java
+@@ -220,11 +220,13 @@ public class TileEntityHopper extends TileEntityLootable implements IHopper, ITi
+ this.setCooldown(world.spigotConfig.hopperTransfer); // Spigot
+ return false;
+ }
+- int origCount = event.getItem().getAmount(); // Spigot
+- ItemStack itemstack1 = addItem(this, iinventory, CraftItemStack.asNMSCopy(event.getItem()), enumdirection);
+-
++ // Paper start
++ org.bukkit.inventory.ItemStack eventStack = event.getItem();
++ int origCount = eventStack.getAmount(); // Spigot
++ ItemStack itemstack1 = addItem(this, iinventory, CraftItemStack.asNMSCopy(eventStack), enumdirection);
++ // Paper end
+ if (itemstack1.isEmpty()) {
+- if (event.getItem().equals(oitemstack)) {
++ if (eventStack.equals(oitemstack)) { // Paper
+ iinventory.update();
+ } else {
+ this.setItem(i, itemstack);
+@@ -377,11 +379,13 @@ public class TileEntityHopper extends TileEntityLootable implements IHopper, ITi
+ }
+ return false;
+ }
+- int origCount = event.getItem().getAmount(); // Spigot
+- ItemStack itemstack2 = addItem(iinventory, ihopper, CraftItemStack.asNMSCopy(event.getItem()), null);
+-
++ // Paper start
++ org.bukkit.inventory.ItemStack eventStack = event.getItem();
++ int origCount = eventStack.getAmount(); // Spigot
++ ItemStack itemstack2 = addItem(iinventory, ihopper, CraftItemStack.asNMSCopy(eventStack), null);
++ // Paper end
+ if (itemstack2.isEmpty()) {
+- if (event.getItem().equals(oitemstack)) {
++ if (eventStack.equals(oitemstack)) { // Paper
+ iinventory.update();
+ } else {
+ iinventory.setItem(i, itemstack1);
+@@ -459,7 +463,9 @@ public class TileEntityHopper extends TileEntityLootable implements IHopper, ITi
+ boolean flag1 = iinventory1.w_();
+
+ if (itemstack1.isEmpty()) {
++ IGNORE_TILE_UPDATES = true; // Paper
+ iinventory1.setItem(i, itemstack);
++ IGNORE_TILE_UPDATES = false; // Paper
+ itemstack = ItemStack.a;
+ flag = true;
+ } else if (a(itemstack1, itemstack)) {
+@@ -562,6 +568,7 @@ public class TileEntityHopper extends TileEntityLootable implements IHopper, ITi
+ this.f = i;
+ }
+
++ boolean isCooledDown() { return J(); } // Paper - OBFHELPER
+ private boolean J() {
+ return this.f > 0;
+ }
+--
+2.12.2
+