mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-15 07:01:36 +08:00
36f34f01c0
Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: da9ef3c5 #496: Add methods to get/set ItemStacks in EquipmentSlots 3abebc9f #492: Let Tameable extend Animals rather than Entity 941111a0 #495: Expose ItemStack and hand used in PlayerShearEntityEvent 4fe19cae #494: InventoryView - Add missing Brewing FUEL_TIME CraftBukkit Changes:933e9094
#664: Add methods to get/set ItemStacks in EquipmentSlots18722312
#662: Expose ItemStack and hand used in PlayerShearEntityEvent
91 lines
4.6 KiB
Diff
91 lines
4.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
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
|
|
index 98a255ae578d4cdc6c0081c5fe7991a8a9b574f2..4c3062ece97409056b614cf36fefea22ad22864d 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
|
@@ -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 {
|
|
}
|
|
|
|
public static void a(IBlockData iblockdata, World world, BlockPosition blockposition, Random random, boolean flag) {
|
|
- List list = (List) BlockRedstoneTorch.b.get(world);
|
|
+ // Paper start
|
|
+ java.util.ArrayDeque<BlockRedstoneTorch.RedstoneUpdateInfo> redstoneUpdateInfos = world.redstoneUpdateInfos;
|
|
|
|
- while (list != null && !list.isEmpty() && world.getTime() - ((BlockRedstoneTorch.RedstoneUpdateInfo) list.get(0)).b > 60L) {
|
|
- list.remove(0);
|
|
+ if (redstoneUpdateInfos != null) {
|
|
+ BlockRedstoneTorch.RedstoneUpdateInfo curr;
|
|
+ while ((curr = redstoneUpdateInfos.peek()) != null && world.getTime() - curr.getTime() > 60L) {
|
|
+ redstoneUpdateInfos.poll();
|
|
+ }
|
|
}
|
|
+ // Paper end
|
|
|
|
// CraftBukkit start
|
|
org.bukkit.plugin.PluginManager manager = world.getServer().getPluginManager();
|
|
@@ -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) {
|
|
@@ -167,7 +175,7 @@ public class BlockRedstoneTorch extends BlockTorch {
|
|
public static class RedstoneUpdateInfo {
|
|
|
|
private final BlockPosition a;
|
|
- private final long b;
|
|
+ private final long b; final long getTime() { return this.b; } // Paper - OBFHELPER
|
|
|
|
public RedstoneUpdateInfo(BlockPosition blockposition, long i) {
|
|
this.a = blockposition;
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 0e8d31babd39857c2754c19ddc780f8c840a443c..86de3c634de0e9b9a320e1e71d2fb01fddd1a1e8 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -84,6 +84,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable {
|
|
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;
|