Files
Purpur/patches/server/0095-Add-no-random-tick-block-list.patch
William Blake Galbreath aa4b436198 Purpur client stuffs
2021-07-30 15:35:19 -05:00

70 lines
3.9 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
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 fe963c666488a8a3463f855b0c87eee997f7a103..7284003a17e8059c3c3ab8a2c8a62b0f53f48ac4 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -483,7 +483,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
this.players = Lists.newArrayList();
this.entityTickList = new EntityTickList();
Predicate<Block> 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 7538262e14c86e4da9cd4cb887b76f649bfef2e6..f34973be478de4f088a0593b45bd89e558a13609 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
@@ -915,10 +915,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 f72e9dfc464a3d79ed6a37d52da0acc097adc0ba..52401f529231706188415417d9b5f93bc73de983 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -286,6 +286,28 @@ public class PurpurWorldConfig {
voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt);
}
+ public Set<Block> noRandomTickBlocks = new HashSet<>();
+ private void noRandomTickBlocks() {
+ if (PurpurConfig.version < 11) {
+ List<String> 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 anvilAllowColors = false;
private void anvilSettings() {
anvilAllowColors = getBoolean("blocks.anvil.allow-colors", anvilAllowColors);