mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-16 04:33:56 -07:00
Optimize GameRules to use LinkedHashMap
Previously TreeMap was used which has poor get(K) performance.
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||
Date: Thu, 4 Apr 2019 17:55:05 -0700
|
||||
Subject: [PATCH] Optimize GameRules to use LinkedHashMap
|
||||
|
||||
Previously TreeMap was used which has poor get(K) performance.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/GameRules.java b/src/main/java/net/minecraft/server/GameRules.java
|
||||
index fd2a4f1b8c..0bd5e02a28 100644
|
||||
--- a/src/main/java/net/minecraft/server/GameRules.java
|
||||
+++ b/src/main/java/net/minecraft/server/GameRules.java
|
||||
@@ -0,0 +0,0 @@ import javax.annotation.Nullable;
|
||||
|
||||
public class GameRules {
|
||||
|
||||
- private static final TreeMap<String, GameRules.GameRuleDefinition> a = SystemUtils.a(new TreeMap(), (treemap) -> { // Paper - decompile fix
|
||||
+ // Paper start - Optimize GameRules
|
||||
+ private static final int RULES_SIZE = 256;
|
||||
+
|
||||
+ private static <K, V> java.util.LinkedHashMap<K, V> linkedMapOf(final int capacity, final TreeMap<K, V> map) {
|
||||
+ final java.util.LinkedHashMap<K, V> ret = new java.util.LinkedHashMap<>(capacity);
|
||||
+ ret.putAll(map);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ private static final java.util.LinkedHashMap<String, GameRuleDefinition> a = GameRules.linkedMapOf(RULES_SIZE, SystemUtils.a(new TreeMap(), (treemap) -> { // Paper - decompile fix
|
||||
+ // Paper end
|
||||
treemap.put("doFireTick", new GameRules.GameRuleDefinition("true", GameRules.EnumGameRuleType.BOOLEAN_VALUE));
|
||||
treemap.put("mobGriefing", new GameRules.GameRuleDefinition("true", GameRules.EnumGameRuleType.BOOLEAN_VALUE));
|
||||
treemap.put("keepInventory", new GameRules.GameRuleDefinition("false", GameRules.EnumGameRuleType.BOOLEAN_VALUE));
|
||||
@@ -0,0 +0,0 @@ public class GameRules {
|
||||
treemap.put("doLimitedCrafting", new GameRules.GameRuleDefinition("false", GameRules.EnumGameRuleType.BOOLEAN_VALUE));
|
||||
treemap.put("maxCommandChainLength", new GameRules.GameRuleDefinition("65536", GameRules.EnumGameRuleType.NUMERICAL_VALUE));
|
||||
treemap.put("announceAdvancements", new GameRules.GameRuleDefinition("true", GameRules.EnumGameRuleType.BOOLEAN_VALUE));
|
||||
- });
|
||||
- private final TreeMap<String, GameRules.GameRuleValue> b = new TreeMap();
|
||||
+ })); // Paper - Optimize GameRules
|
||||
+ private final java.util.LinkedHashMap<String, GameRuleValue> b = new java.util.LinkedHashMap<>(RULES_SIZE); // Paper - Optimize GameRules
|
||||
|
||||
public GameRules() {
|
||||
Iterator iterator = GameRules.a.entrySet().iterator();
|
||||
@@ -0,0 +0,0 @@ public class GameRules {
|
||||
return (GameRules.GameRuleValue) this.b.get(s);
|
||||
}
|
||||
|
||||
- public static TreeMap<String, GameRules.GameRuleDefinition> getGameRules() {
|
||||
+ public static java.util.LinkedHashMap<String, GameRuleDefinition> getGameRules() { // Paper - Optimize GameRules
|
||||
return GameRules.a;
|
||||
}
|
||||
|
||||
diff --git a/src/test/java/org/bukkit/GameRuleTest.java b/src/test/java/org/bukkit/GameRuleTest.java
|
||||
index 1ed0f4cf2b..40edb8d668 100644
|
||||
--- a/src/test/java/org/bukkit/GameRuleTest.java
|
||||
+++ b/src/test/java/org/bukkit/GameRuleTest.java
|
||||
@@ -0,0 +0,0 @@ public class GameRuleTest {
|
||||
|
||||
@Test
|
||||
public void testMinecraftRules() {
|
||||
- TreeMap<String, GameRules.GameRuleDefinition> minecraftRules = GameRules.getGameRules();
|
||||
+ Map<String, GameRules.GameRuleDefinition> minecraftRules = GameRules.getGameRules(); // Paper - Optimize GameRules
|
||||
|
||||
for (Map.Entry<String, GameRules.GameRuleDefinition> entry : minecraftRules.entrySet()) {
|
||||
GameRule<?> bukkitRule = GameRule.getByName(entry.getKey());
|
||||
--
|
Reference in New Issue
Block a user