From 015e038b89eb888087eef8b9a99704fdb62e2e97 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 26 May 2015 19:16:27 +1000 Subject: [PATCH] Add back hopper tick scheduling Tick a hopper only if certain conditions have changed i.e. inventory changes, redstone updates, etc. --- .../0008-Merge-tweaks-and-configuration.patch | 8 +- CraftBukkit-Patches/0010-View-Distance.patch | 6 +- ...b-Spawning-Relative-to-View-Distance.patch | 6 +- .../0014-Entity-Activation-Range.patch | 6 +- .../0018-Entity-Tracking-Ranges.patch | 6 +- .../0024-Hopper-Customisations.patch | 6 +- ...Disabling-of-Random-Lighting-Updates.patch | 6 +- ...-Disabling-of-1.6.3-Structure-Saving.patch | 6 +- .../0043-Item-Despawn-Rate.patch | 6 +- .../0046-Arrow-Despawn-Rate.patch | 6 +- CraftBukkit-Patches/0052-Orebfuscator.patch | 6 +- ...Disabling-Zombie-Villager-Aggression.patch | 6 +- ...d-Option-to-Nerf-Mobs-from-Spawner-s.patch | 6 +- ...-Allow-Configuring-Chunks-per-Packet.patch | 6 +- .../0079-Cap-Entity-Collisions.patch | 6 +- ...dragon-death-and-wither-spawn-sounds.patch | 6 +- .../0126-Further-Seed-Customisation.patch | 6 +- .../0145-Add-Hunger-Config-Values.patch | 6 +- .../0148-Limit-TNT-Detonations-per-tick.patch | 6 +- .../0150-Configurable-Hanging-Tick.patch | 6 +- ...-Allow-Capping-Tile-Entity-Tick-Time.patch | 6 +- .../0157-Schedule-Hopper-Ticks.patch | 325 ++++++++++++++++++ 22 files changed, 389 insertions(+), 64 deletions(-) create mode 100644 CraftBukkit-Patches/0157-Schedule-Hopper-Ticks.patch diff --git a/CraftBukkit-Patches/0008-Merge-tweaks-and-configuration.patch b/CraftBukkit-Patches/0008-Merge-tweaks-and-configuration.patch index 34ee69ccd..e8c5d584c 100644 --- a/CraftBukkit-Patches/0008-Merge-tweaks-and-configuration.patch +++ b/CraftBukkit-Patches/0008-Merge-tweaks-and-configuration.patch @@ -1,4 +1,4 @@ -From bfbf7675709d97ce57abc5a7a78e1acb3716a350 Mon Sep 17 00:00:00 2001 +From a5e805949f015b7a803f132a487845e5c34f25b2 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 23 Mar 2013 09:46:33 +1100 Subject: [PATCH] Merge tweaks and configuration @@ -69,12 +69,12 @@ index c81f673..abc39f1 100644 if (event != null && (event.isCancelled() || entity.dead)) { entity.dead = true; diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 7e79ba5..1545a61 100644 +index 5749a45..7322703 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -110,4 +110,18 @@ public class SpigotWorldConfig - saplingModifier = getAndValidateGrowth( "Sapling" ); +@@ -112,4 +112,18 @@ public class SpigotWorldConfig wheatModifier = getAndValidateGrowth( "Wheat" ); + wartModifier = getAndValidateGrowth( "NetherWart" ); } + + public double itemMerge; diff --git a/CraftBukkit-Patches/0010-View-Distance.patch b/CraftBukkit-Patches/0010-View-Distance.patch index 34dbe50a7..ae87f45ed 100644 --- a/CraftBukkit-Patches/0010-View-Distance.patch +++ b/CraftBukkit-Patches/0010-View-Distance.patch @@ -1,4 +1,4 @@ -From 3851ac651a87a6d9241935fe20db52f031ba2b7b Mon Sep 17 00:00:00 2001 +From 8eceef159a4bb5b2d8f481611a996f59b05b2cd2 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 23 Mar 2013 09:52:41 +1100 Subject: [PATCH] View Distance @@ -35,10 +35,10 @@ index 03cac6e..b245159 100644 this.chunkProvider = this.k(); this.Q = new org.bukkit.craftbukkit.CraftTravelAgent(this); // CraftBukkit diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 1545a61..6cc3a91 100644 +index 7322703..a3255eb 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -124,4 +124,11 @@ public class SpigotWorldConfig +@@ -126,4 +126,11 @@ public class SpigotWorldConfig expMerge = getDouble("merge-radius.exp", 3.0 ); log( "Experience Merge Radius: " + expMerge ); } diff --git a/CraftBukkit-Patches/0012-Fix-Mob-Spawning-Relative-to-View-Distance.patch b/CraftBukkit-Patches/0012-Fix-Mob-Spawning-Relative-to-View-Distance.patch index 41aadf06c..7322f2cce 100644 --- a/CraftBukkit-Patches/0012-Fix-Mob-Spawning-Relative-to-View-Distance.patch +++ b/CraftBukkit-Patches/0012-Fix-Mob-Spawning-Relative-to-View-Distance.patch @@ -1,4 +1,4 @@ -From 77cfdf67693de72cbff5d5ff9e7529bcc590d31e Mon Sep 17 00:00:00 2001 +From d528062516b72771b4941e2e59cb02dc06cea9f0 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 21 Jun 2013 17:29:54 +1000 Subject: [PATCH] Fix Mob Spawning Relative to View Distance @@ -144,10 +144,10 @@ index cc1b347..3964e3f 100644 continue label115; } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 6cc3a91..46249d7 100644 +index a3255eb..a85800d 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -131,4 +131,11 @@ public class SpigotWorldConfig +@@ -133,4 +133,11 @@ public class SpigotWorldConfig viewDistance = getInt( "view-distance", Bukkit.getViewDistance() ); log( "View Distance: " + viewDistance ); } diff --git a/CraftBukkit-Patches/0014-Entity-Activation-Range.patch b/CraftBukkit-Patches/0014-Entity-Activation-Range.patch index 8f129ff93..7f813eafb 100644 --- a/CraftBukkit-Patches/0014-Entity-Activation-Range.patch +++ b/CraftBukkit-Patches/0014-Entity-Activation-Range.patch @@ -1,4 +1,4 @@ -From a23d5b334c2402c6c17bdbf7254964977c5422c9 Mon Sep 17 00:00:00 2001 +From 85cee07c274011112875655c5f246974542d17b5 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 3 Feb 2013 05:10:21 -0500 Subject: [PATCH] Entity Activation Range @@ -527,10 +527,10 @@ index 0000000..d3f4af1 + } +} diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 46249d7..ed2836a 100644 +index a85800d..da8563b 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -138,4 +138,15 @@ public class SpigotWorldConfig +@@ -140,4 +140,15 @@ public class SpigotWorldConfig mobSpawnRange = (byte) getInt( "mob-spawn-range", 4 ); log( "Mob Spawn Range: " + mobSpawnRange ); } diff --git a/CraftBukkit-Patches/0018-Entity-Tracking-Ranges.patch b/CraftBukkit-Patches/0018-Entity-Tracking-Ranges.patch index d962dc901..45b4aba0b 100644 --- a/CraftBukkit-Patches/0018-Entity-Tracking-Ranges.patch +++ b/CraftBukkit-Patches/0018-Entity-Tracking-Ranges.patch @@ -1,4 +1,4 @@ -From 26eae42d7d1dde830ab120f6a28c161c24657534 Mon Sep 17 00:00:00 2001 +From 23f036658cfea94cb5d68f4522617d3a77dcd2be Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 20 Feb 2013 11:58:47 -0500 Subject: [PATCH] Entity Tracking Ranges @@ -63,10 +63,10 @@ index d3f4af1..0143623 100644 return true; } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index ed2836a..6421bf2 100644 +index da8563b..3d4896b 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -149,4 +149,19 @@ public class SpigotWorldConfig +@@ -151,4 +151,19 @@ public class SpigotWorldConfig miscActivationRange = getInt( "entity-activation-range.misc", miscActivationRange ); log( "Entity Activation Range: An " + animalActivationRange + " / Mo " + monsterActivationRange + " / Mi " + miscActivationRange ); } diff --git a/CraftBukkit-Patches/0024-Hopper-Customisations.patch b/CraftBukkit-Patches/0024-Hopper-Customisations.patch index 139a384ee..f9b25a398 100644 --- a/CraftBukkit-Patches/0024-Hopper-Customisations.patch +++ b/CraftBukkit-Patches/0024-Hopper-Customisations.patch @@ -1,4 +1,4 @@ -From a461e14b04a6b45d8c25f21f74de10c2a6e6ec56 Mon Sep 17 00:00:00 2001 +From a52a850cb8198e8db2afb6c34acaa96093c6ffd7 Mon Sep 17 00:00:00 2001 From: erocs Date: Sun, 8 Sep 2013 12:06:15 -0700 Subject: [PATCH] Hopper Customisations @@ -97,10 +97,10 @@ index 8f771af..6785b71 100644 iinventory.update(); diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 6421bf2..956c628 100644 +index 3d4896b..f0e3b97 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -164,4 +164,19 @@ public class SpigotWorldConfig +@@ -166,4 +166,19 @@ public class SpigotWorldConfig otherTrackingRange = getInt( "entity-tracking-range.other", otherTrackingRange ); log( "Entity Tracking Range: Pl " + playerTrackingRange + " / An " + animalTrackingRange + " / Mo " + monsterTrackingRange + " / Mi " + miscTrackingRange + " / Other " + otherTrackingRange ); } diff --git a/CraftBukkit-Patches/0030-Allow-Disabling-of-Random-Lighting-Updates.patch b/CraftBukkit-Patches/0030-Allow-Disabling-of-Random-Lighting-Updates.patch index 2d7c144e8..72bb2c6ab 100644 --- a/CraftBukkit-Patches/0030-Allow-Disabling-of-Random-Lighting-Updates.patch +++ b/CraftBukkit-Patches/0030-Allow-Disabling-of-Random-Lighting-Updates.patch @@ -1,4 +1,4 @@ -From 8a91b585628c6dafa3dbd14f5cfbc110ea9cf717 Mon Sep 17 00:00:00 2001 +From aae4390a892c0571a91ddcf978ddf38f6fe257fd Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 22 Jun 2013 16:12:02 +1000 Subject: [PATCH] Allow Disabling of Random Lighting Updates @@ -31,10 +31,10 @@ index f82c0f9..a08b401 100644 entityhuman = (EntityHuman) this.players.get(i); j = MathHelper.floor(entityhuman.locX) + this.random.nextInt(11) - 5; diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 956c628..8868ea3 100644 +index f0e3b97..2b98acb 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -179,4 +179,11 @@ public class SpigotWorldConfig +@@ -181,4 +181,11 @@ public class SpigotWorldConfig hopperAmount = getInt( "hopper-amount", 1 ); log( "Hopper Transfer: " + hopperTransfer + " Hopper Check: " + hopperCheck + " Hopper Amount: " + hopperAmount ); } diff --git a/CraftBukkit-Patches/0042-Allow-Disabling-of-1.6.3-Structure-Saving.patch b/CraftBukkit-Patches/0042-Allow-Disabling-of-1.6.3-Structure-Saving.patch index afa553c74..418769395 100644 --- a/CraftBukkit-Patches/0042-Allow-Disabling-of-1.6.3-Structure-Saving.patch +++ b/CraftBukkit-Patches/0042-Allow-Disabling-of-1.6.3-Structure-Saving.patch @@ -1,4 +1,4 @@ -From f958fcbb5a38d213f7f2d55d7861f3ccc5b5ce6d Mon Sep 17 00:00:00 2001 +From d70f892f4f0ff325d7663895cf213ae0f742f0a0 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 21 Sep 2013 12:33:09 +1000 Subject: [PATCH] Allow Disabling of 1.6.3 Structure Saving @@ -25,10 +25,10 @@ index 0bced98..bb1a11e 100644 this.d = new PersistentStructure(this.a()); world.a(this.a(), (PersistentBase) this.d); diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 8868ea3..0d5c9d0 100644 +index 2b98acb..15cb6b4 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -186,4 +186,16 @@ public class SpigotWorldConfig +@@ -188,4 +188,16 @@ public class SpigotWorldConfig randomLightUpdates = getBoolean( "random-light-updates", false ); log( "Random Lighting Updates: " + randomLightUpdates ); } diff --git a/CraftBukkit-Patches/0043-Item-Despawn-Rate.patch b/CraftBukkit-Patches/0043-Item-Despawn-Rate.patch index ce28bd48e..ee901d431 100644 --- a/CraftBukkit-Patches/0043-Item-Despawn-Rate.patch +++ b/CraftBukkit-Patches/0043-Item-Despawn-Rate.patch @@ -1,4 +1,4 @@ -From 307fc1c27db419c44b46bac8e3c45075559762cf Mon Sep 17 00:00:00 2001 +From 9a04698dd3ec6d937551e7b7e35d34e68b9fae1e Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 22 Sep 2013 19:10:53 +1000 Subject: [PATCH] Item Despawn Rate @@ -18,10 +18,10 @@ index 65a03df..d6d83fe 100644 if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) { this.age = 0; diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 0d5c9d0..a5786ea 100644 +index 15cb6b4..efbfa2e 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -198,4 +198,11 @@ public class SpigotWorldConfig +@@ -200,4 +200,11 @@ public class SpigotWorldConfig log( "*** WARNING *** Please use this option with caution, SpigotMC is not responsible for any issues this option may cause in the future!" ); } } diff --git a/CraftBukkit-Patches/0046-Arrow-Despawn-Rate.patch b/CraftBukkit-Patches/0046-Arrow-Despawn-Rate.patch index 9b3fa161a..54f999b50 100644 --- a/CraftBukkit-Patches/0046-Arrow-Despawn-Rate.patch +++ b/CraftBukkit-Patches/0046-Arrow-Despawn-Rate.patch @@ -1,4 +1,4 @@ -From faeb947ab741cda6e6e98978de18a6a1b6940d16 Mon Sep 17 00:00:00 2001 +From 9a00ec321402602d5ae5f59f2f640db206adae98 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 14 Oct 2013 19:20:10 +1100 Subject: [PATCH] Arrow Despawn Rate @@ -18,10 +18,10 @@ index 01c66e3..46f6374 100644 } } else { diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index a5786ea..af0c4b2 100644 +index efbfa2e..d8433ac 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -205,4 +205,11 @@ public class SpigotWorldConfig +@@ -207,4 +207,11 @@ public class SpigotWorldConfig itemDespawnRate = getInt( "item-despawn-rate", 6000 ); log( "Item Despawn Rate: " + itemDespawnRate ); } diff --git a/CraftBukkit-Patches/0052-Orebfuscator.patch b/CraftBukkit-Patches/0052-Orebfuscator.patch index 8918fdbe2..52d41f806 100644 --- a/CraftBukkit-Patches/0052-Orebfuscator.patch +++ b/CraftBukkit-Patches/0052-Orebfuscator.patch @@ -1,4 +1,4 @@ -From 4968c35def64e0c307488ea32d479d7536020434 Mon Sep 17 00:00:00 2001 +From 1f1269d671396950883aa870a3a3c147de6e4793 Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 16 May 2013 18:51:05 +1000 Subject: [PATCH] Orebfuscator @@ -362,7 +362,7 @@ index 0000000..6f28cd8 + } +} diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index af0c4b2..c390381 100644 +index d8433ac..5d2b755 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -1,5 +1,6 @@ @@ -372,7 +372,7 @@ index af0c4b2..c390381 100644 import java.util.List; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; -@@ -212,4 +213,36 @@ public class SpigotWorldConfig +@@ -214,4 +215,36 @@ public class SpigotWorldConfig arrowDespawnRate = getInt( "arrow-despawn-rate", 1200 ); log( "Arrow Despawn Rate: " + arrowDespawnRate ); } diff --git a/CraftBukkit-Patches/0056-Allow-Disabling-Zombie-Villager-Aggression.patch b/CraftBukkit-Patches/0056-Allow-Disabling-Zombie-Villager-Aggression.patch index a4f0cecde..dd9069f06 100644 --- a/CraftBukkit-Patches/0056-Allow-Disabling-Zombie-Villager-Aggression.patch +++ b/CraftBukkit-Patches/0056-Allow-Disabling-Zombie-Villager-Aggression.patch @@ -1,4 +1,4 @@ -From ef2d58c831e84ea077a99a67888aec302db80394 Mon Sep 17 00:00:00 2001 +From a0076cb8755ae27f36b727b9a23a2b29f33dfacb Mon Sep 17 00:00:00 2001 From: Dylan Xaldin Date: Thu, 12 Dec 2013 18:05:03 -0600 Subject: [PATCH] Allow Disabling Zombie Villager Aggression @@ -25,10 +25,10 @@ index 91bb046..1a8d3d8 100644 } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index c390381..9c1cd19 100644 +index 5d2b755..f6fc0a2 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -245,4 +245,11 @@ public class SpigotWorldConfig +@@ -247,4 +247,11 @@ public class SpigotWorldConfig antiXrayInstance = new AntiXray( this ); } diff --git a/CraftBukkit-Patches/0063-Add-Option-to-Nerf-Mobs-from-Spawner-s.patch b/CraftBukkit-Patches/0063-Add-Option-to-Nerf-Mobs-from-Spawner-s.patch index 09fa19e0f..5f5e2d4b8 100644 --- a/CraftBukkit-Patches/0063-Add-Option-to-Nerf-Mobs-from-Spawner-s.patch +++ b/CraftBukkit-Patches/0063-Add-Option-to-Nerf-Mobs-from-Spawner-s.patch @@ -1,4 +1,4 @@ -From 9a50d12977caba8b57ad46c3b22dcc7318ff7231 Mon Sep 17 00:00:00 2001 +From 4cbf1d01d020a85d822368814fae42d456c919a0 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 2 Feb 2014 16:55:46 +0000 Subject: [PATCH] Add Option to Nerf Mobs from Spawner's @@ -64,10 +64,10 @@ index 0695fe2..1680918 100644 // Spigot end } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 9c1cd19..891812a 100644 +index f6fc0a2..20800ed 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -252,4 +252,11 @@ public class SpigotWorldConfig +@@ -254,4 +254,11 @@ public class SpigotWorldConfig zombieAggressiveTowardsVillager = getBoolean( "zombie-aggressive-towards-villager", true ); log( "Zombie Aggressive Towards Villager: " + zombieAggressiveTowardsVillager ); } diff --git a/CraftBukkit-Patches/0077-Allow-Configuring-Chunks-per-Packet.patch b/CraftBukkit-Patches/0077-Allow-Configuring-Chunks-per-Packet.patch index ca7244931..f76a0f5c3 100644 --- a/CraftBukkit-Patches/0077-Allow-Configuring-Chunks-per-Packet.patch +++ b/CraftBukkit-Patches/0077-Allow-Configuring-Chunks-per-Packet.patch @@ -1,4 +1,4 @@ -From 828bf8252b698beddc7c384d660cd9a8a7e158ee Mon Sep 17 00:00:00 2001 +From f9f7d2e5c726b6f4f81f66d2683112a3d9f60331 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 28 Jan 2014 20:35:35 +1100 Subject: [PATCH] Allow Configuring Chunks per Packet @@ -18,10 +18,10 @@ index 2fab7d1..b80fd6d 100644 if (chunkcoordintpair != null) { diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 1971dbf..c7cb20c 100644 +index a684d68..ede9250 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -266,4 +266,11 @@ public class SpigotWorldConfig +@@ -268,4 +268,11 @@ public class SpigotWorldConfig enableZombiePigmenPortalSpawns = getBoolean( "enable-zombie-pigmen-portal-spawns", true ); log( "Allow Zombie Pigmen to spawn from portal blocks: " + enableZombiePigmenPortalSpawns ); } diff --git a/CraftBukkit-Patches/0079-Cap-Entity-Collisions.patch b/CraftBukkit-Patches/0079-Cap-Entity-Collisions.patch index c79e7afcc..c6b1ed083 100644 --- a/CraftBukkit-Patches/0079-Cap-Entity-Collisions.patch +++ b/CraftBukkit-Patches/0079-Cap-Entity-Collisions.patch @@ -1,4 +1,4 @@ -From cb6e2bfdea8449916514608823faa660bbb7f385 Mon Sep 17 00:00:00 2001 +From dd9b7854dc1854fa837a9b9d48d11fe249498e02 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 31 Jan 2014 11:18:34 -0500 Subject: [PATCH] Cap Entity Collisions @@ -45,10 +45,10 @@ index 9cd8e9b..0e2f64f 100644 } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index c7cb20c..76ded26 100644 +index ede9250..c652cc5 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -273,4 +273,11 @@ public class SpigotWorldConfig +@@ -275,4 +275,11 @@ public class SpigotWorldConfig maxBulkChunk = getInt( "max-bulk-chunks", 10 ); log( "Sending up to " + maxBulkChunk + " chunks per packet" ); } diff --git a/CraftBukkit-Patches/0095-Configurable-dragon-death-and-wither-spawn-sounds.patch b/CraftBukkit-Patches/0095-Configurable-dragon-death-and-wither-spawn-sounds.patch index bca75878e..d772d4320 100644 --- a/CraftBukkit-Patches/0095-Configurable-dragon-death-and-wither-spawn-sounds.patch +++ b/CraftBukkit-Patches/0095-Configurable-dragon-death-and-wither-spawn-sounds.patch @@ -1,4 +1,4 @@ -From 6e7a673650d54e56f37efc2a6a6ea74b54b21e2f Mon Sep 17 00:00:00 2001 +From 1b3d31d6cc4fe8c84ad9f1ea8a61a48dbec3e4de Mon Sep 17 00:00:00 2001 From: drXor Date: Sat, 29 Mar 2014 13:44:25 -0400 Subject: [PATCH] Configurable dragon death and wither spawn sounds @@ -29,10 +29,10 @@ index 9884a82..fb19bad 100644 double deltaLength = Math.sqrt(distanceSquared); double relativeX = player.locX + (deltaX / deltaLength) * viewDistance; diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 76ded26..c06084d 100644 +index c652cc5..75e66d5 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -280,4 +280,16 @@ public class SpigotWorldConfig +@@ -282,4 +282,16 @@ public class SpigotWorldConfig maxCollisionsPerEntity = getInt( "max-entity-collisions", 8 ); log( "Max Entity Collisions: " + maxCollisionsPerEntity ); } diff --git a/CraftBukkit-Patches/0126-Further-Seed-Customisation.patch b/CraftBukkit-Patches/0126-Further-Seed-Customisation.patch index b705a6945..662085f57 100644 --- a/CraftBukkit-Patches/0126-Further-Seed-Customisation.patch +++ b/CraftBukkit-Patches/0126-Further-Seed-Customisation.patch @@ -1,4 +1,4 @@ -From ec81c7e34b486cb618282f7d04ed00b909622c20 Mon Sep 17 00:00:00 2001 +From 96a38108d0cf838f7ed2fa3f16c4f6641864b0bd Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 4 Jul 2014 13:28:45 +1000 Subject: [PATCH] Further Seed Customisation @@ -32,10 +32,10 @@ index 411f2dc..6648a70 100644 i1 *= this.g; j1 *= this.g; diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index c06084d..d644922 100644 +index 75e66d5..b19558b 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -292,4 +292,13 @@ public class SpigotWorldConfig +@@ -294,4 +294,13 @@ public class SpigotWorldConfig { witherSpawnSoundRadius = getInt( "wither-spawn-sound-radius", 0 ); } diff --git a/CraftBukkit-Patches/0145-Add-Hunger-Config-Values.patch b/CraftBukkit-Patches/0145-Add-Hunger-Config-Values.patch index e37cefd89..87f86bde7 100644 --- a/CraftBukkit-Patches/0145-Add-Hunger-Config-Values.patch +++ b/CraftBukkit-Patches/0145-Add-Hunger-Config-Values.patch @@ -1,4 +1,4 @@ -From 2489aa2e712dd6beb634472dfedf704218a706ad Mon Sep 17 00:00:00 2001 +From 4dc82b6c36d8eb7218545353e06563d1892e1e3e Mon Sep 17 00:00:00 2001 From: lazertester Date: Sun, 17 Aug 2014 19:56:17 +1000 Subject: [PATCH] Add Hunger Config Values @@ -43,10 +43,10 @@ index 456b9b3..3af4180 100644 } } else if (this.foodLevel <= 0) { diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index d644922..75edbb9 100644 +index b19558b..0f9b67c 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -301,4 +301,16 @@ public class SpigotWorldConfig +@@ -303,4 +303,16 @@ public class SpigotWorldConfig largeFeatureSeed = getInt( "seed-feature", 14357617 ); log( "Custom Map Seeds: Village: " + villageSeed + " Feature: " + largeFeatureSeed ); } diff --git a/CraftBukkit-Patches/0148-Limit-TNT-Detonations-per-tick.patch b/CraftBukkit-Patches/0148-Limit-TNT-Detonations-per-tick.patch index 76fb8fe00..3b02632d4 100644 --- a/CraftBukkit-Patches/0148-Limit-TNT-Detonations-per-tick.patch +++ b/CraftBukkit-Patches/0148-Limit-TNT-Detonations-per-tick.patch @@ -1,4 +1,4 @@ -From 321c9040552cca47a7d72795f13e551bcf290287 Mon Sep 17 00:00:00 2001 +From 385cf5e40bcc3f07193be94b1f7cbeb0c2f91428 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 20 Aug 2014 18:12:32 -0400 Subject: [PATCH] Limit TNT Detonations per tick @@ -31,10 +31,10 @@ index 65f13be..d76b965 100644 public void j() { diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 75edbb9..3b6d4c0 100644 +index 0f9b67c..e2d673f 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -313,4 +313,15 @@ public class SpigotWorldConfig +@@ -315,4 +315,15 @@ public class SpigotWorldConfig combatExhaustion = (float) getDouble( "hunger.combat-exhaustion", 0.3 ); regenExhaustion = (float) getDouble( "hunger.regen-exhaustion", 3 ); } diff --git a/CraftBukkit-Patches/0150-Configurable-Hanging-Tick.patch b/CraftBukkit-Patches/0150-Configurable-Hanging-Tick.patch index ace8a69c9..c2d6badcf 100644 --- a/CraftBukkit-Patches/0150-Configurable-Hanging-Tick.patch +++ b/CraftBukkit-Patches/0150-Configurable-Hanging-Tick.patch @@ -1,4 +1,4 @@ -From 1361ee7a57caeda4afe9e12b8474f7dcf06601b8 Mon Sep 17 00:00:00 2001 +From cccdb674a7695fa878fe5bb66f5f5d1f1816735b Mon Sep 17 00:00:00 2001 From: drXor Date: Sat, 9 Aug 2014 13:56:51 -0400 Subject: [PATCH] Configurable Hanging Tick @@ -18,10 +18,10 @@ index 16dfb1d..e491684 100644 if (!this.dead && !this.survives()) { // CraftBukkit start - fire break events diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 3b6d4c0..042ec2a 100644 +index e2d673f..ab2f8bf 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -324,4 +324,10 @@ public class SpigotWorldConfig +@@ -326,4 +326,10 @@ public class SpigotWorldConfig maxTntTicksPerTick = getInt( "max-tnt-per-tick", 100 ); log( "Max TNT Explosions: " + maxTntTicksPerTick ); } diff --git a/CraftBukkit-Patches/0154-Allow-Capping-Tile-Entity-Tick-Time.patch b/CraftBukkit-Patches/0154-Allow-Capping-Tile-Entity-Tick-Time.patch index 2b85ea97a..033dcddcc 100644 --- a/CraftBukkit-Patches/0154-Allow-Capping-Tile-Entity-Tick-Time.patch +++ b/CraftBukkit-Patches/0154-Allow-Capping-Tile-Entity-Tick-Time.patch @@ -1,4 +1,4 @@ -From 5a8fa8fc3ffc90de82ea5bb9cfb90dfa1c26d1aa Mon Sep 17 00:00:00 2001 +From 88ab65907d69d2dd6276fe73e9a5ead94e2cd758 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 20 Feb 2015 21:39:31 +1100 Subject: [PATCH] Allow Capping (Tile)Entity Tick Time. @@ -81,10 +81,10 @@ index 2c947ca..6de5ba5 100644 if (this.isLoaded(tileentity.getPosition())) { this.getChunkAtWorldCoords(tileentity.getPosition()).e(tileentity.getPosition()); diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 042ec2a..328ff14 100644 +index ab2f8bf..8e86212 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -330,4 +330,13 @@ public class SpigotWorldConfig +@@ -332,4 +332,13 @@ public class SpigotWorldConfig { hangingTickFrequency = getInt( "hanging-tick-frequency", 100 ); } diff --git a/CraftBukkit-Patches/0157-Schedule-Hopper-Ticks.patch b/CraftBukkit-Patches/0157-Schedule-Hopper-Ticks.patch new file mode 100644 index 000000000..94b55c128 --- /dev/null +++ b/CraftBukkit-Patches/0157-Schedule-Hopper-Ticks.patch @@ -0,0 +1,325 @@ +From 1c13de44e824b19644554a6b0f73272651c9b22f Mon Sep 17 00:00:00 2001 +From: "Evan A. Haskell" +Date: Sat, 19 Apr 2014 16:58:26 -0400 +Subject: [PATCH] Schedule Hopper Ticks + +Tick a hopper only if certain conditions have changed i.e. inventory changes, redstone updates, etc. + +diff --git a/src/main/java/net/minecraft/server/BlockHopper.java b/src/main/java/net/minecraft/server/BlockHopper.java +index 9f9b45d..6f9ac3a 100644 +--- a/src/main/java/net/minecraft/server/BlockHopper.java ++++ b/src/main/java/net/minecraft/server/BlockHopper.java +@@ -21,6 +21,7 @@ public class BlockHopper extends BlockContainer { + this.j(this.blockStateList.getBlockData().set(BlockHopper.FACING, EnumDirection.DOWN).set(BlockHopper.ENABLED, Boolean.valueOf(true))); + this.a(CreativeModeTab.d); + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); ++ this.a(true); // Spigot - Enable random block updates on hoppers // PAIL: Rename + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { +@@ -97,6 +98,14 @@ public class BlockHopper extends BlockContainer { + + if (flag != ((Boolean) iblockdata.get(BlockHopper.ENABLED)).booleanValue()) { + world.setTypeAndData(blockposition, iblockdata.set(BlockHopper.ENABLED, Boolean.valueOf(flag)), 4); ++ // Spigot start - When this hopper becomes unpowered, make it active. ++ // Called when this block's power level changes. flag1 is the current ++ // isNotPowered from metadata. flag is the recalculated isNotPowered. ++ TileEntityHopper hopper = (TileEntityHopper) world.getTileEntity(blockposition); ++ if (flag && hopper != null) { ++ hopper.ensureUpdates(); ++ } ++ // Spigot end + } + + } +@@ -158,4 +167,15 @@ public class BlockHopper extends BlockContainer { + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockHopper.FACING, BlockHopper.ENABLED}); + } ++ ++ // Spigot start - Use random block updates to make hoppers active. ++ // PAIL: Rename ++ @Override ++ public void a(World world, BlockPosition blockposition, IBlockData iblockdata, java.util.Random random) { ++ TileEntityHopper hopper = (TileEntityHopper) world.getTileEntity(blockposition); ++ if (hopper != null) { ++ hopper.ensureUpdates(); ++ } ++ } ++ // Spigot end + } +diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java +index d5922fe..367361a 100644 +--- a/src/main/java/net/minecraft/server/Chunk.java ++++ b/src/main/java/net/minecraft/server/Chunk.java +@@ -783,6 +783,14 @@ public class Chunk { + + tileentity.D(); + this.tileEntities.put(blockposition, tileentity); ++ // Spigot start ++ // When a tile entity is added, update hoppers around the tile ++ tileentity.scheduleTicks(); ++ ++ // if it is a large chest, hoppers should update around its ++ // other half ++ TileEntity.updateChestAndHoppers(this.world, blockposition); ++ // Spigot end + // CraftBukkit start + } else { + System.out.println("Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ() +diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java +index d6d83fe..30c8d63 100644 +--- a/src/main/java/net/minecraft/server/EntityItem.java ++++ b/src/main/java/net/minecraft/server/EntityItem.java +@@ -100,6 +100,25 @@ public class EntityItem extends Entity { + if (this.onGround) { + this.motY *= -0.5D; + } ++ // Spigot start - Make the hopper(s) below this item active. ++ // Called each tick on each item entity. ++ int xi = MathHelper.floor(this.getBoundingBox().a); ++ int yi = MathHelper.floor(this.getBoundingBox().b) - 1; ++ int zi = MathHelper.floor(this.getBoundingBox().c); ++ int xf = MathHelper.floor(this.getBoundingBox().d); ++ int yf = MathHelper.floor(this.getBoundingBox().e) - 1; ++ int zf = MathHelper.floor(this.getBoundingBox().f); ++ for (int a = xi; a <= xf; a++) { ++ for (int c = zi; c <= zf; c++) { ++ for (int b = yi; b <= yf; b++) { ++ TileEntity tileEntity = this.world.getTileEntity(new BlockPosition(a, b, c)); ++ if (tileEntity instanceof TileEntityHopper) { ++ ((TileEntityHopper) tileEntity).ensureUpdates(); ++ } ++ } ++ } ++ } ++ // Spigot end + + /* Craftbukkit start - moved up + if (this.age != -32768) { +diff --git a/src/main/java/net/minecraft/server/EntityMinecartContainer.java b/src/main/java/net/minecraft/server/EntityMinecartContainer.java +index 17b5714..5f22f9e 100644 +--- a/src/main/java/net/minecraft/server/EntityMinecartContainer.java ++++ b/src/main/java/net/minecraft/server/EntityMinecartContainer.java +@@ -52,6 +52,31 @@ public abstract class EntityMinecartContainer extends EntityMinecartAbstract imp + super(world, d0, d1, d2); + } + ++ // Spigot start - Make hoppers around this container minecart active. ++ // Called each tick on each minecart. ++ // PAIL: Rename ++ @Override ++ public void t_() { ++ int xi = MathHelper.floor(this.getBoundingBox().a) - 1; ++ int yi = MathHelper.floor(this.getBoundingBox().b) - 1; ++ int zi = MathHelper.floor(this.getBoundingBox().c) - 1; ++ int xf = MathHelper.floor(this.getBoundingBox().d) + 1; ++ int yf = MathHelper.floor(this.getBoundingBox().e) + 1; ++ int zf = MathHelper.floor(this.getBoundingBox().f) + 1; ++ for (int a = xi; a <= xf; a++) { ++ for (int b = yi; b <= yf; b++) { ++ for (int c = zi; c <= zf; c++) { ++ TileEntity tileEntity = this.world.getTileEntity(new BlockPosition(a, b, c)); ++ if (tileEntity instanceof TileEntityHopper) { ++ ((TileEntityHopper) tileEntity).ensureUpdates(); ++ } ++ } ++ } ++ } ++ super.t_(); ++ } ++ // Spigot end ++ + public void a(DamageSource damagesource) { + super.a(damagesource); + if (this.world.getGameRules().getBoolean("doEntityDrops")) { +diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java +index edcb307..4b3ea37 100644 +--- a/src/main/java/net/minecraft/server/EntityOcelot.java ++++ b/src/main/java/net/minecraft/server/EntityOcelot.java +@@ -30,6 +30,27 @@ public class EntityOcelot extends EntityTameableAnimal { + this.datawatcher.a(18, Byte.valueOf((byte) 0)); + } + ++ // Spigot start - We use K, the method called in World.class on each entity each tick ++ // PAIL: Rename ++ @Override ++ public void K() { ++ int xi = MathHelper.floor(this.getBoundingBox().a); ++ int yi = MathHelper.floor(this.getBoundingBox().b) - 1; ++ int zi = MathHelper.floor(this.getBoundingBox().c); ++ int xf = MathHelper.floor(this.getBoundingBox().d); ++ int yf = MathHelper.floor(this.getBoundingBox().e) - 1; ++ int zf = MathHelper.floor(this.getBoundingBox().f); ++ for (int a = xi; a <= xf; a++) { ++ for (int c = zi; c <= zf; c++) { ++ for (int b = yi; b <= yf; b++) { ++ TileEntity.updateChestAndHoppers(this.world, new BlockPosition(a, b, c)); ++ } ++ } ++ } ++ super.K(); ++ } ++ // Spigot end ++ + public void E() { + if (this.getControllerMove().a()) { + double d0 = this.getControllerMove().b(); +diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java +index c268a40..578f79d 100644 +--- a/src/main/java/net/minecraft/server/TileEntity.java ++++ b/src/main/java/net/minecraft/server/TileEntity.java +@@ -21,6 +21,64 @@ public abstract class TileEntity { + private int h; + protected Block e; + ++ // Spigot start ++ // Helper method for scheduleTicks. If the hopper at blockposition is pointed ++ // toward this tile, then make the hopper active ++ private void scheduleTick(BlockPosition blockposition) { ++ TileEntity tileEntity = this.world.getTileEntity(blockposition); ++ if (tileEntity instanceof TileEntityHopper) { ++ // i is the metadeta assoiated with the direction the hopper faces. ++ EnumDirection dir = BlockHopper.b(tileEntity.u()); ++ ++ // Facing class provides arrays for direction offset. ++ if (tileEntity.position.shift(dir).equals(position)) { ++ ((TileEntityHopper) tileEntity).ensureUpdates(); ++ } ++ } ++ } ++ ++ // Called from update when the contents have changed, so hoppers need updates. ++ // Check all 6 faces. ++ public void scheduleTicks() { ++ if (this.world != null) { ++ // Check the top ++ this.scheduleTick(position.up()); ++ // Check the sides ++ for (int i = 2; i < 6; i++) { ++ this.scheduleTick(position.shift(EnumDirection.fromType1(i))); ++ } ++ // Check the bottom. ++ TileEntity tileEntity = this.world.getTileEntity(position.down()); ++ if (tileEntity instanceof TileEntityHopper && tileEntity.world != null) { ++ ((TileEntityHopper) tileEntity).ensureUpdates(); ++ } ++ } ++ } ++ ++ // If there is a chest at blockposition, then update hoppers around it ++ // as well as around its other half (if it exists) ++ public static void updateChestAndHoppers(World world, BlockPosition blockposition) { ++ Block block = world.getType(blockposition).getBlock(); ++ if (block instanceof BlockChest) { ++ TileEntity tile = world.getTileEntity(blockposition); ++ if (tile instanceof TileEntityChest) { ++ tile.scheduleTicks(); ++ } ++ for (int i = 2; i < 6; i++) { ++ // Look for a matching chest at each face ++ BlockPosition pos = blockposition.shift(EnumDirection.fromType1(i)); ++ if (world.getType(pos).getBlock() == block) { ++ tile = world.getTileEntity(pos); ++ if (tile instanceof TileEntityChest) { ++ tile.scheduleTicks(); ++ } ++ break; ++ } ++ } ++ } ++ } ++ // Spigot end ++ + public TileEntity() { + this.position = BlockPosition.ZERO; + this.h = -1; +@@ -105,6 +163,10 @@ public abstract class TileEntity { + if (this.w() != Blocks.AIR) { + this.world.updateAdjacentComparators(this.position, this.w()); + } ++ // Spigot start - Called when the contents have changed, so hoppers around this ++ // tile need updating. ++ this.scheduleTicks(); ++ // Spigot end + } + + } +diff --git a/src/main/java/net/minecraft/server/TileEntityHopper.java b/src/main/java/net/minecraft/server/TileEntityHopper.java +index 1553656..9818166 100644 +--- a/src/main/java/net/minecraft/server/TileEntityHopper.java ++++ b/src/main/java/net/minecraft/server/TileEntityHopper.java +@@ -18,6 +18,18 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU + private String f; + private int g = -1; + ++ // Spigot start ++ ++ // Whether it has been determined that this hopper should update ++ private boolean active = true; ++ ++ // Called by redstone updates, inventory changes, etc. to ensure this ++ // hopper updates ++ public void ensureUpdates() { ++ active = true; ++ } ++ // Spigot end ++ + // CraftBukkit start - add fields and methods + public List transaction = new java.util.ArrayList(); + private int maxStack = MAX_STACK; +@@ -91,6 +103,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU + + public void update() { + super.update(); ++ ensureUpdates(); // Spigot - Contents have changed, so make this hopper active + } + + public int getSize() { +@@ -182,6 +195,16 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU + + public boolean m() { + if (this.world != null && !this.world.isClientSide) { ++ // Spigot start ++ ++ // if it has not been determined that this hopper should update, ++ // then don't waste time doing it ++ if (!active) ++ return false; ++ ++ // set it up for the next time this method is called ++ active = false; ++ // Spigot end + if (!this.n() && BlockHopper.f(this.u())) { + boolean flag = false; + +@@ -592,6 +615,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU + + public void d(int i) { + this.g = i; ++ this.ensureUpdates(); // Spigot + } + + public boolean n() { +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index 6de5ba5..1fa8448 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -429,6 +429,14 @@ public abstract class World implements IBlockAccess { + // Modularize client and physic updates + notifyAndUpdatePhysics(blockposition, chunk, block1, block, i); + } ++ // Spigot start - If this block is changing to that which a chest beneath it ++ // becomes able to be opened, then the chest must be updated. ++ // block1 is the old block. block is the new block. r returns true if the block type ++ // prevents access to a chest. ++ if (block1 != null && block1.isOccluding() && !block.isOccluding()) { ++ TileEntity.updateChestAndHoppers(this, blockposition.down()); ++ } ++ // Spigot end + // CraftBukkit end + + return true; +-- +2.1.4 +