mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-13 02:11:05 +01:00
7e8ae207bd
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: e99c9444 Add Plugin Chunk Ticket API 6a235f06 Fix incorrect nullability annotations for PlayerJoinEvent's join message CraftBukkit Changes:5f889388
Tweak build expiration to 7 days572c02b0
MC-155077, SPIGOT-5113: EntityTracker desync7ad3a1f4
SPIGOT-5146: BlockDataMeta does not work60860983
SPIGOT-5155: Setting EntityExplodeEvent yield to 0 still causes blocks to drop087a2cf4
Print number of force loaded chunks per plugin in crash reports07b5b06d
Add Plugin Chunk Ticket API7ffb2a27
SPIGOT-5149: resetRecipes does nothinga2275f19
SPIGOT-5141: World.generateTree() causes ClassCastException with huge mushrooms31d4a777
SPIGOT-5142: Ignore invalid firework effects Spigot Changes: 5e4e7f32 BUILDTOOLS-471: Rebuild patches 6e944739 SPIGOT-5159: Raider activation range overridden by Monster range
62 lines
2.5 KiB
Diff
62 lines
2.5 KiB
Diff
From 03b66274c2e2d5500d25b1987b0019e920f4a5af Mon Sep 17 00:00:00 2001
|
|
From: miclebrick <miclebrick@outlook.com>
|
|
Date: Thu, 23 Aug 2018 11:45:32 -0400
|
|
Subject: [PATCH] Optimize CraftBlockData Creation
|
|
|
|
Avoids a hashmap lookup by cacheing a reference to the CraftBlockData
|
|
and cloning it when one is needed.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/IBlockData.java b/src/main/java/net/minecraft/server/IBlockData.java
|
|
index 862ae2554..d25989d51 100644
|
|
--- a/src/main/java/net/minecraft/server/IBlockData.java
|
|
+++ b/src/main/java/net/minecraft/server/IBlockData.java
|
|
@@ -4,6 +4,8 @@ import com.google.common.collect.ImmutableMap;
|
|
import com.mojang.datafixers.Dynamic;
|
|
import com.mojang.datafixers.types.DynamicOps;
|
|
import com.mojang.datafixers.util.Pair;
|
|
+import org.bukkit.craftbukkit.block.data.CraftBlockData;
|
|
+
|
|
import java.util.Arrays;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
@@ -38,6 +40,15 @@ public class IBlockData extends BlockDataAbstract<Block, IBlockData> implements
|
|
return (Block) this.a;
|
|
}
|
|
|
|
+ // Paper start - impl cached craft block data, lazy load to fix issue with loading at the wrong time
|
|
+ private CraftBlockData cachedCraftBlockData;
|
|
+
|
|
+ public CraftBlockData createCraftBlockData() {
|
|
+ if(cachedCraftBlockData == null) cachedCraftBlockData = CraftBlockData.createData(this);
|
|
+ return (CraftBlockData) cachedCraftBlockData.clone();
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public Material getMaterial() {
|
|
return this.getBlock().l(this);
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
|
|
index 49c9975cf..fb8a77873 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
|
|
@@ -548,7 +548,17 @@ public class CraftBlockData implements BlockData {
|
|
return craft;
|
|
}
|
|
|
|
+ // Paper start - optimize creating BlockData to not need a map lookup
|
|
+ static {
|
|
+ // Initialize cached data for all IBlockData instances after registration
|
|
+ Block.REGISTRY_ID.iterator().forEachRemaining(IBlockData::createCraftBlockData);
|
|
+ }
|
|
public static CraftBlockData fromData(IBlockData data) {
|
|
+ return data.createCraftBlockData();
|
|
+ }
|
|
+
|
|
+ public static CraftBlockData createData(IBlockData data) {
|
|
+ // Paper end
|
|
return MAP.getOrDefault(data.getBlock().getClass(), CraftBlockData::new).apply(data);
|
|
}
|
|
}
|
|
--
|
|
2.22.0
|
|
|