mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 17:07:43 +01:00
81 lines
4.3 KiB
Diff
81 lines
4.3 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 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<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 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<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 teleportIfOutsideBorder = false;
|
|
private void teleportIfOutsideBorder() {
|
|
teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder);
|