3
0
Mirror von https://github.com/PaperMC/Paper.git synchronisiert 2024-12-16 19:40:07 +01:00
Paper/Spigot-Server-Patches/0144-Improve-Minecraft-Hopper-Performance.patch
Aikar fe18b38aea Remove unneeded mob spawn cap patch - Fixes #235
I misread the code and thought the code kept looping until the mob spawn cap was hit.

Upon furthur review, this is not true, so this patch doesn't do anything sane.
2016-05-27 21:35:28 -04:00

79 Zeilen
3.0 KiB
Diff

From 6a110c2813f8b97f35921b67d31e6e2f3f21df4a 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.
diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java
index f59e6f8..85f97cc 100644
--- a/src/main/java/net/minecraft/server/TileEntity.java
+++ b/src/main/java/net/minecraft/server/TileEntity.java
@@ -36,6 +36,7 @@ public abstract class TileEntity {
}
}
+ static boolean IGNORE_TILE_UPDATES = false; // Paper
public World getWorld() {
return this.world;
}
@@ -110,6 +111,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.h = 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 de458c8..ec0b1ca 100644
--- a/src/main/java/net/minecraft/server/TileEntityHopper.java
+++ b/src/main/java/net/minecraft/server/TileEntityHopper.java
@@ -190,12 +190,15 @@ public class TileEntityHopper extends TileEntityLootable implements IHopper, ITi
}
// Paper end
}
+
+ if (!isCooledDown() && isFull()) { setCooldown(world.spigotConfig.hopperTransfer); } // Paper
return false;
} else {
return false;
}
}
+ boolean isFull() { return q(); } // Paper // OBFHELPER
private boolean q() {
ItemStack[] aitemstack = this.items;
int i = aitemstack.length;
@@ -490,7 +493,9 @@ public class TileEntityHopper extends TileEntityLootable implements IHopper, ITi
boolean flag = false;
if (itemstack1 == null) {
+ IGNORE_TILE_UPDATES = true; // Paper
iinventory.setItem(i, itemstack);
+ IGNORE_TILE_UPDATES = false; // Paper
itemstack = null;
flag = true;
} else if (a(itemstack1, itemstack)) {
@@ -510,7 +515,7 @@ public class TileEntityHopper extends TileEntityLootable implements IHopper, ITi
tileentityhopper.setCooldown(tileentityhopper.world.spigotConfig.hopperTransfer); // Spigot
}
- iinventory.update();
+ //iinventory.update(); // Paper
}
iinventory.update();
@@ -585,6 +590,7 @@ public class TileEntityHopper extends TileEntityLootable implements IHopper, ITi
this.g = i;
}
+ boolean isCooledDown() { return o(); } // Paper // OBFHELPER
public boolean o() {
return this.g > 0;
}
--
2.7.4 (Apple Git-66)