geforkt von Mirrors/Paper
974b0afca9
CraftBukkit removed their implementation that caused this issue, switching to Mojang's implementation which doesn't appear to share it. I already removed the important bit in the last upstream merge, this is just unused and unnecessary now. So we remove it.
91 Zeilen
4.3 KiB
Diff
91 Zeilen
4.3 KiB
Diff
From bf25b8717b9a888b98fe9542ac860429350c61bb Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
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.windows.2
|
|
|