Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-16 11:30:06 +01:00
b58063a949
Upstream has released updates that appear 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: 607ce370 SPIGOT-7069: Material.BARREL has Directional data class, should also be Openable f14cea82 SPIGOT-7070: Material.SCULK_VEIN has Waterlogged data class, should also be MultipleFacing 8e43b278 PR-767: Add support checking/survivability methods for BlockData b3dee151 SPIGOT-7083: Add Boat.WoodenType, Boat.Status; deprecate TreeSpecies CraftBukkit Changes: 9a8e08010 SPIGOT-7069: Material.BARREL has Directional data class, should also be Openable 26bd88ccd SPIGOT-7070: Material.SCULK_VEIN has Waterlogged data class, should also be MultipleFacing 7ba06e15b SPIGOT-7095: StructureGrowEvent doesn't fire for mangrove propagules growing to a tree 163e35c91 PR-1079: Add support checking/survivability methods for BlockData 4230f8f0e SPIGOT-7083: Add Boat.WoodenType, Boat.Status; deprecate TreeSpecies Spigot Changes: 14a2382f Rebuild patches
63 Zeilen
3.3 KiB
Diff
63 Zeilen
3.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: miclebrick <miclebrick@outlook.com>
|
|
Date: Thu, 6 Dec 2018 19:52:50 -0500
|
|
Subject: [PATCH] Cache block data strings
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index 9ce0c366b81ee8468cfcca1bd9fb8ed49ffea0ba..343eb9e6417f94bec66b4d9ef583e04d603755cd 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -2004,6 +2004,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
this.getPlayerList().reloadResources();
|
|
this.functionManager.replaceLibrary(this.resources.managers.getFunctionLibrary());
|
|
this.structureTemplateManager.onResourceManagerReload(this.resources.resourceManager);
|
|
+ org.bukkit.craftbukkit.block.data.CraftBlockData.reloadCache(); // Paper - cache block data strings, they can be defined by datapacks so refresh it here
|
|
}, this);
|
|
|
|
if (this.isSameThread()) {
|
|
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 514e1ab74cd24cfcf1dd031e69a8ebfaddf9d3dc..d02a5e383190fc4713141d953efc111bb2f7f89c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java
|
|
@@ -506,9 +506,39 @@ public class CraftBlockData implements BlockData {
|
|
Preconditions.checkState(CraftBlockData.MAP.put(nms, bukkit) == null, "Duplicate mapping %s->%s", nms, bukkit);
|
|
}
|
|
|
|
+ // Paper start - cache block data strings
|
|
+ private static Map<String, CraftBlockData> stringDataCache = new java.util.concurrent.ConcurrentHashMap<>();
|
|
+
|
|
+ static {
|
|
+ // cache all of the default states at startup, will not cache ones with the custom states inside of the
|
|
+ // brackets in a different order, though
|
|
+ reloadCache();
|
|
+ }
|
|
+
|
|
+ public static void reloadCache() {
|
|
+ stringDataCache.clear();
|
|
+ Block.BLOCK_STATE_REGISTRY.forEach(blockData -> stringDataCache.put(blockData.toString(), blockData.createCraftBlockData()));
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
public static CraftBlockData newData(Material material, String data) {
|
|
Preconditions.checkArgument(material == null || material.isBlock(), "Cannot get data for not block %s", material);
|
|
|
|
+ // Paper start - cache block data strings
|
|
+ if (material != null) {
|
|
+ Block block = CraftMagicNumbers.getBlock(material);
|
|
+ if (block != null) {
|
|
+ net.minecraft.resources.ResourceLocation key = Registry.BLOCK.getKey(block);
|
|
+ data = data == null ? key.toString() : key + data;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ CraftBlockData cached = stringDataCache.computeIfAbsent(data, s -> createNewData(null, s));
|
|
+ return (CraftBlockData) cached.clone();
|
|
+ }
|
|
+
|
|
+ private static CraftBlockData createNewData(Material material, String data) {
|
|
+ // Paper end - cache block data strings
|
|
BlockState blockData;
|
|
Block block = CraftMagicNumbers.getBlock(material);
|
|
Map<Property<?>, Comparable<?>> parsed = null;
|