2019-07-17 06:09:32 +08:00
|
|
|
From 3d14572f7a9ba30b0eae0daf0a239b60e3ebc457 Mon Sep 17 00:00:00 2001
|
2016-05-25 09:08:40 +08:00
|
|
|
From: Martin Panzer <postremus1996@googlemail.com>
|
|
|
|
Date: Mon, 23 May 2016 12:12:37 +0200
|
|
|
|
Subject: [PATCH] Faster redstone torch rapid clock removal
|
|
|
|
|
|
|
|
Only resize the the redstone torch list once, since resizing arrays / lists is costly
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
2019-07-17 06:09:32 +08:00
|
|
|
index a99f979ef..919ba8a14 100644
|
2016-05-25 09:08:40 +08:00
|
|
|
--- a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
2019-05-10 23:48:58 +08:00
|
|
|
@@ -11,7 +11,7 @@ import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit
|
|
|
|
public class BlockRedstoneTorch extends BlockTorch {
|
|
|
|
|
|
|
|
public static final BlockStateBoolean LIT = BlockProperties.r;
|
|
|
|
- private static final Map<IBlockAccess, List<BlockRedstoneTorch.RedstoneUpdateInfo>> b = new WeakHashMap();
|
|
|
|
+ // Paper - Move the mapped list to World
|
|
|
|
|
|
|
|
protected BlockRedstoneTorch(Block.Info block_info) {
|
|
|
|
super(block_info);
|
|
|
|
@@ -66,11 +66,16 @@ public class BlockRedstoneTorch extends BlockTorch {
|
|
|
|
}
|
|
|
|
|
2018-07-16 23:34:55 +08:00
|
|
|
public static void a(IBlockData iblockdata, World world, BlockPosition blockposition, Random random, boolean flag) {
|
2019-05-10 23:48:58 +08:00
|
|
|
- List list = (List) BlockRedstoneTorch.b.get(world);
|
|
|
|
+ // Paper start
|
|
|
|
+ java.util.ArrayDeque<BlockRedstoneTorch.RedstoneUpdateInfo> redstoneUpdateInfos = world.redstoneUpdateInfos;
|
2016-05-25 09:08:40 +08:00
|
|
|
|
|
|
|
- while (list != null && !list.isEmpty() && world.getTime() - ((BlockRedstoneTorch.RedstoneUpdateInfo) list.get(0)).b > 60L) {
|
|
|
|
- list.remove(0);
|
2019-05-10 23:48:58 +08:00
|
|
|
+ if (redstoneUpdateInfos != null) {
|
|
|
|
+ BlockRedstoneTorch.RedstoneUpdateInfo curr;
|
|
|
|
+ while ((curr = redstoneUpdateInfos.peek()) != null && world.getTime() - curr.getTime() > 60L) {
|
|
|
|
+ redstoneUpdateInfos.poll();
|
2016-05-25 09:08:40 +08:00
|
|
|
+ }
|
|
|
|
}
|
|
|
|
+ // Paper end
|
|
|
|
|
|
|
|
// CraftBukkit start
|
|
|
|
org.bukkit.plugin.PluginManager manager = world.getServer().getPluginManager();
|
2019-05-10 23:48:58 +08:00
|
|
|
@@ -140,9 +145,12 @@ public class BlockRedstoneTorch extends BlockTorch {
|
|
|
|
}
|
|
|
|
|
|
|
|
private static boolean a(World world, BlockPosition blockposition, boolean flag) {
|
|
|
|
- List<BlockRedstoneTorch.RedstoneUpdateInfo> list = (List) BlockRedstoneTorch.b.computeIfAbsent(world, (iblockaccess) -> {
|
|
|
|
- return Lists.newArrayList();
|
|
|
|
- });
|
|
|
|
+ // Paper start
|
|
|
|
+ java.util.ArrayDeque<BlockRedstoneTorch.RedstoneUpdateInfo> list = world.redstoneUpdateInfos;
|
|
|
|
+ if (list == null) {
|
|
|
|
+ list = world.redstoneUpdateInfos = new java.util.ArrayDeque<>();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
|
|
if (flag) {
|
|
|
|
list.add(new BlockRedstoneTorch.RedstoneUpdateInfo(blockposition.immutableCopy(), world.getTime()));
|
|
|
|
@@ -150,9 +158,9 @@ public class BlockRedstoneTorch extends BlockTorch {
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
- for (int j = 0; j < list.size(); ++j) {
|
|
|
|
- BlockRedstoneTorch.RedstoneUpdateInfo blockredstonetorch_redstoneupdateinfo = (BlockRedstoneTorch.RedstoneUpdateInfo) list.get(j);
|
|
|
|
-
|
|
|
|
+ for (java.util.Iterator<BlockRedstoneTorch.RedstoneUpdateInfo> iterator = list.iterator(); iterator.hasNext();) {
|
|
|
|
+ BlockRedstoneTorch.RedstoneUpdateInfo blockredstonetorch_redstoneupdateinfo = iterator.next();
|
|
|
|
+ // Paper end
|
|
|
|
if (blockredstonetorch_redstoneupdateinfo.a.equals(blockposition)) {
|
|
|
|
++i;
|
|
|
|
if (i >= 8) {
|
2019-04-27 14:26:04 +08:00
|
|
|
@@ -167,7 +175,7 @@ public class BlockRedstoneTorch extends BlockTorch {
|
2018-07-16 23:34:55 +08:00
|
|
|
public static class RedstoneUpdateInfo {
|
2016-05-25 09:08:40 +08:00
|
|
|
|
2018-07-16 23:34:55 +08:00
|
|
|
private final BlockPosition a;
|
|
|
|
- private final long b;
|
|
|
|
+ private final long b; final long getTime() { return this.b; } // Paper - OBFHELPER
|
2016-05-25 09:08:40 +08:00
|
|
|
|
|
|
|
public RedstoneUpdateInfo(BlockPosition blockposition, long i) {
|
|
|
|
this.a = blockposition;
|
2019-05-10 23:48:58 +08:00
|
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
2019-07-17 06:09:32 +08:00
|
|
|
index f396ca691..4ce18f85b 100644
|
2019-05-10 23:48:58 +08:00
|
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
|
|
@@ -99,6 +99,7 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
|
|
|
|
private org.spigotmc.TickLimiter tileLimiter;
|
|
|
|
private int tileTickPosition;
|
|
|
|
public final Map<Explosion.CacheKey, Float> explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions
|
|
|
|
+ public java.util.ArrayDeque<BlockRedstoneTorch.RedstoneUpdateInfo> redstoneUpdateInfos; // Paper - Move from Map in BlockRedstoneTorch to here
|
|
|
|
|
|
|
|
public CraftWorld getWorld() {
|
|
|
|
return this.world;
|
2016-05-25 09:08:40 +08:00
|
|
|
--
|
2019-06-26 03:18:50 +08:00
|
|
|
2.22.0
|
2016-05-25 09:08:40 +08:00
|
|
|
|