From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Phoenix616 Date: Sun, 15 Sep 2019 11:32:32 -0500 Subject: [PATCH] Fix zero-tick instant grow farms MC-113809 diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java index 928fefb4195bd5d629b59b2b3c7d005b79bdf161..442108555604b06c6217f4330c19b4997451126c 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -554,6 +554,11 @@ public class PaperWorldConfig { disableRelativeProjectileVelocity = getBoolean("game-mechanics.disable-relative-projectile-velocity", false); } + public boolean fixZeroTickInstantGrowFarms = true; + private void fixZeroTickInstantGrowFarms() { + fixZeroTickInstantGrowFarms = getBoolean("fix-zero-tick-instant-grow-farms", fixZeroTickInstantGrowFarms); + } + public boolean altItemDespawnRateEnabled; public Map altItemDespawnRateMap; private void altItemDespawnRate() { diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java index 540fcce1dd4d64dee51e2594f2199fac5299c6a0..e29ec958b3519d92cda215a50e97e6852d71c684 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java @@ -46,6 +46,7 @@ public class Block implements IMaterial { private final float g; protected final BlockStateList blockStateList; private IBlockData blockData; + public boolean randomTick = false; // Paper - fix MC-113809 protected final boolean v; private final boolean i; private final boolean j; diff --git a/src/main/java/net/minecraft/server/BlockBamboo.java b/src/main/java/net/minecraft/server/BlockBamboo.java index c482aad3e3e255dfe13b622859ed61b780a9e08e..02c548dd9c9a97bfb55d39ba2f6d4ab85ada0573 100644 --- a/src/main/java/net/minecraft/server/BlockBamboo.java +++ b/src/main/java/net/minecraft/server/BlockBamboo.java @@ -85,6 +85,7 @@ public class BlockBamboo extends Block implements IBlockFragilePlantElement { if (!iblockdata.canPlace(worldserver, blockposition)) { worldserver.b(blockposition, true); } else if ((Integer) iblockdata.get(BlockBamboo.f) == 0) { + if (worldserver.paperConfig.fixZeroTickInstantGrowFarms && !randomTick) return; // Paper - fix MC-113809 if (random.nextInt(Math.max(1, (int) (100.0F / worldserver.spigotConfig.bambooModifier) * 3)) == 0 && worldserver.isEmpty(blockposition.up()) && worldserver.getLightLevel(blockposition.up(), 0) >= 9) { // Spigot int i = this.b(worldserver, blockposition) + 1; diff --git a/src/main/java/net/minecraft/server/BlockCactus.java b/src/main/java/net/minecraft/server/BlockCactus.java index e0974e256f0f10e047b9eb8e362982c6578d2d98..3524fcb927865d7b8754d9fbf85b853f09b94bb8 100644 --- a/src/main/java/net/minecraft/server/BlockCactus.java +++ b/src/main/java/net/minecraft/server/BlockCactus.java @@ -21,6 +21,7 @@ public class BlockCactus extends Block { if (!iblockdata.canPlace(worldserver, blockposition)) { worldserver.b(blockposition, true); } else { + if (worldserver.paperConfig.fixZeroTickInstantGrowFarms && !randomTick) return; // Paper - fix MC-113809 BlockPosition blockposition1 = blockposition.up(); if (worldserver.isEmpty(blockposition1)) { diff --git a/src/main/java/net/minecraft/server/BlockChorusFlower.java b/src/main/java/net/minecraft/server/BlockChorusFlower.java index d70b52cadf1b76eff7984127837b0a3aa36f6a0e..b624cf38047e242569d30ee4e3ad971455b5ff0a 100644 --- a/src/main/java/net/minecraft/server/BlockChorusFlower.java +++ b/src/main/java/net/minecraft/server/BlockChorusFlower.java @@ -22,6 +22,7 @@ public class BlockChorusFlower extends Block { if (!iblockdata.canPlace(worldserver, blockposition)) { worldserver.b(blockposition, true); } else { + if (worldserver.paperConfig.fixZeroTickInstantGrowFarms && !randomTick) return; // Paper - fix MC-113809 BlockPosition blockposition1 = blockposition.up(); if (worldserver.isEmpty(blockposition1) && blockposition1.getY() < 256) { diff --git a/src/main/java/net/minecraft/server/BlockReed.java b/src/main/java/net/minecraft/server/BlockReed.java index 55b07444e1d769952f2a411b1b5d1032565af8a1..3bc3c5aa29f45cd2ee1c0401b1ee1b1d49e81926 100644 --- a/src/main/java/net/minecraft/server/BlockReed.java +++ b/src/main/java/net/minecraft/server/BlockReed.java @@ -23,6 +23,7 @@ public class BlockReed extends Block { if (!iblockdata.canPlace(worldserver, blockposition)) { worldserver.b(blockposition, true); } else if (worldserver.isEmpty(blockposition.up())) { + if (worldserver.paperConfig.fixZeroTickInstantGrowFarms && !randomTick) return; // Paper - fix MC-113809 int i; for (i = 1; worldserver.getType(blockposition.down(i)).getBlock() == this; ++i) { diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java index 38c5b721bf145c0083cf560763f1c6327210aebf..17560a20fce7f42f98aacc42b9d4c3ab992af3cf 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -589,7 +589,9 @@ public class WorldServer extends World { IBlockData iblockdata = chunksection.getType(blockposition2.getX() - j, blockposition2.getY() - j1, blockposition2.getZ() - k); if (iblockdata.q()) { + iblockdata.getBlock().randomTick = true; // Paper - fix MC-113809 iblockdata.b(this, blockposition2, this.random); + iblockdata.getBlock().randomTick = false; // Paper - fix MC-113809 } Fluid fluid = iblockdata.getFluid();