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-random-tick block list diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java index e09f031f08efa7ed5145566de459b044313ff117..bc902d0c0179cab438825746fddb4a0f7f4617bc 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -318,7 +318,7 @@ public class ServerLevel extends net.minecraft.world.level.Level implements Worl this.players = Lists.newArrayList(); this.entityTickList = new EntityTickList(); Predicate predicate = (block) -> { // CraftBukkit - decompile eror - return block == null || block.defaultBlockState().isAir(); + return block == null || block.defaultBlockState().isAir() || purpurConfig.noRandomTickBlocks.contains(block); // Purpur }; DefaultedRegistry registryblocks = Registry.BLOCK; diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java index 572e5f32a3c5aaffcec31da0cff9151efea252ac..8a37ee40123cf786078633110fc06c535ebc2153 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -893,10 +893,12 @@ public abstract class BlockBehaviour { } public void tick(ServerLevel world, BlockPos pos, Random random) { + if (world.purpurConfig.noRandomTickBlocks.contains(getBlock())) return; // Purpur this.getBlock().tick(this.asState(), world, pos, random); } public void randomTick(ServerLevel world, BlockPos pos, Random random) { + if (world.purpurConfig.noRandomTickBlocks.contains(getBlock())) return; // Purpur this.getBlock().randomTick(this.asState(), world, pos, random); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java index 3ac94ad40135edc61bcdef59565444cd72cb0175..8797f781b97cece949dfb1014470f164503e61c4 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; @@ -242,6 +244,28 @@ public class PurpurWorldConfig { playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack); } + public Set noRandomTickBlocks = new HashSet<>(); + private void noRandomTickBlocks() { + if (PurpurConfig.version < 11) { + List oldList = PurpurConfig.config.getStringList("world-settings." + worldName + ".blocks.no-tick"); + if (!oldList.isEmpty()) { + PurpurConfig.config.set("world-settings." + worldName + ".blocks.no-random-tick", oldList); + PurpurConfig.config.set("world-settings." + worldName + ".blocks.no-tick", null); + } + oldList = PurpurConfig.config.getStringList("world-settings.default.blocks.no-tick"); + if (!oldList.isEmpty()) { + PurpurConfig.config.set("world-settings.default.blocks.no-random-tick", oldList); + PurpurConfig.config.set("world-settings.default.blocks.no-tick", null); + } + } + getList("blocks.no-random-tick", new ArrayList<>()).forEach(key -> { + Block block = Registry.BLOCK.get(new ResourceLocation(key.toString())); + if (!block.defaultBlockState().isAir()) { + noRandomTickBlocks.add(block); + } + }); + } + public boolean teleportIfOutsideBorder = false; private void teleportIfOutsideBorder() { teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder);