From 322e0c29d830eddcafbb52c7cddda28ba32ee009 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 7 Aug 2020 13:38:49 -0500 Subject: [PATCH] Add no-tick block list --- .../server/0123-Add-no-tick-block-list.patch | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 patches/server/0123-Add-no-tick-block-list.patch diff --git a/patches/server/0123-Add-no-tick-block-list.patch b/patches/server/0123-Add-no-tick-block-list.patch new file mode 100644 index 000000000..c4c73ecd1 --- /dev/null +++ b/patches/server/0123-Add-no-tick-block-list.patch @@ -0,0 +1,77 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Fri, 7 Aug 2020 12:53:36 -0500 +Subject: [PATCH] Add no-tick block list + + +diff --git a/src/main/java/net/minecraft/server/BlockBase.java b/src/main/java/net/minecraft/server/BlockBase.java +index a53e096515..f01277ae07 100644 +--- a/src/main/java/net/minecraft/server/BlockBase.java ++++ b/src/main/java/net/minecraft/server/BlockBase.java +@@ -566,10 +566,12 @@ public abstract class BlockBase { + } + + public void a(WorldServer worldserver, BlockPosition blockposition, Random random) { ++ if (worldserver.purpurConfig.noTickBlocks.contains(getBlock())) return; // Purpur + this.getBlock().tickAlways(this.p(), worldserver, blockposition, random); + } + + public void b(WorldServer worldserver, BlockPosition blockposition, Random random) { ++ if (worldserver.purpurConfig.noTickBlocks.contains(getBlock())) return; // Purpur + this.getBlock().tick(this.p(), worldserver, blockposition, random); + } + +diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java +index 97f803d0ad..296371b3a4 100644 +--- a/src/main/java/net/minecraft/server/WorldServer.java ++++ b/src/main/java/net/minecraft/server/WorldServer.java +@@ -303,14 +303,14 @@ public class WorldServer extends World implements GeneratorAccessSeed { + // CraftBukkit end + if (com.destroystokyo.paper.PaperConfig.useOptimizedTickList) { + this.nextTickListBlock = new com.destroystokyo.paper.server.ticklist.PaperTickList<>(this, (block) -> { +- return block == null || block.getBlockData().isAir(); ++ return block == null || block.getBlockData().isAir() || purpurConfig.noTickBlocks.contains(block); // Purpur + }, IRegistry.BLOCK::getKey, this::b, "Blocks"); // Paper - Timings + this.nextTickListFluid = new com.destroystokyo.paper.server.ticklist.PaperTickList<>(this, (fluidtype) -> { + return fluidtype == null || fluidtype == FluidTypes.EMPTY; + }, IRegistry.FLUID::getKey, this::a, "Fluids"); // Paper - Timings + } else { + this.nextTickListBlock = new TickListServer<>(this, (block) -> { +- return block == null || block.getBlockData().isAir(); ++ return block == null || block.getBlockData().isAir() || purpurConfig.noTickBlocks.contains(block); // Purpur + }, IRegistry.BLOCK::getKey, this::b, "Blocks"); // Paper - Timings + this.nextTickListFluid = new TickListServer<>(this, (fluidtype) -> { + return fluidtype == null || fluidtype == FluidTypes.EMPTY; +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 711858a716..f31fab03c1 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -11,8 +11,10 @@ import org.bukkit.configuration.ConfigurationSection; + + import java.util.ArrayList; + import java.util.HashMap; ++import java.util.HashSet; + import java.util.List; + import java.util.Map; ++import java.util.Set; + import java.util.logging.Level; + + import static net.pl3x.purpur.PurpurConfig.log; +@@ -180,6 +182,17 @@ public class PurpurWorldConfig { + playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack); + } + ++ public Set noTickBlocks = new HashSet<>(); ++ private void noTickBlocks() { ++ getList("blocks.no-tick", new ArrayList<>()).forEach(key -> { ++ Block block = IRegistry.BLOCK.get(new MinecraftKey(key.toString())); ++ if (!block.getBlockData().isAir()) { ++ noTickBlocks.add(block); ++ System.out.println("No-Tick Block: " + key); ++ } ++ }); ++ } ++ + public boolean teleportIfOutsideBorder = false; + private void teleportIfOutsideBorder() { + teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder);