From 9b39affd289a9fabb74a3e26c1af84927e151237 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Mon, 26 Apr 2021 14:15:24 -0400 Subject: [PATCH] Reduce the amount of values() calls (#2143) Because apparently it's not just a constant; it makes a new array every time. Also, GeyserSession#tick() does not need to be public and I made enchantments in commands use the Java list. --- .../connector/entity/type/EntityType.java | 2 +- .../network/session/GeyserSession.java | 2 +- .../BedrockLecternUpdateTranslator.java | 2 +- .../EnchantingInventoryTranslator.java | 46 +---------- .../network/translators/item/Enchantment.java | 80 +++++++++++++++---- .../network/translators/item/Potion.java | 6 +- .../translators/item/PotionMixRegistry.java | 2 +- .../translators/item/TippedArrowPotion.java | 8 +- .../java/JavaDeclareCommandsTranslator.java | 2 +- .../java/JavaJoinGameTranslator.java | 4 +- 10 files changed, 83 insertions(+), 71 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/entity/type/EntityType.java b/connector/src/main/java/org/geysermc/connector/entity/type/EntityType.java index f38e56fd8..1a30b827b 100644 --- a/connector/src/main/java/org/geysermc/connector/entity/type/EntityType.java +++ b/connector/src/main/java/org/geysermc/connector/entity/type/EntityType.java @@ -188,7 +188,7 @@ public enum EntityType { static { List allJavaIdentifiers = new ArrayList<>(); - for (EntityType type : values()) { + for (EntityType type : VALUES) { if (type == AGENT || type == BALLOON || type == CHALKBOARD || type == NPC || type == TRIPOD_CAMERA || type == ENDER_DRAGON_PART) { continue; } diff --git a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index 0bcb6ed2f..dd044f2fe 100644 --- a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -850,7 +850,7 @@ public class GeyserSession implements CommandSender { /** * Called every 50 milliseconds - one Minecraft tick. */ - public void tick() { + protected void tick() { // Check to see if the player's position needs updating - a position update should be sent once every 3 seconds if (spawned && (System.currentTimeMillis() - lastMovementTimestamp) > 3000) { // Recalculate in case something else changed position diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java index ae99fec07..f693ade96 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockLecternUpdateTranslator.java @@ -54,7 +54,7 @@ public class BedrockLecternUpdateTranslator extends PacketTranslator= 0 && bedrockId < Enchantment.values().length) { - return Enchantment.values()[bedrockId]; + if (bedrockId >= 0 && bedrockId < VALUES.length) { + return VALUES[bedrockId]; } return null; } + + /** + * Enchantments classified by their Java index + */ + public enum JavaEnchantment { + PROTECTION, + FIRE_PROTECTION, + FEATHER_FALLING, + BLAST_PROTECTION, + PROJECTILE_PROTECTION, + RESPIRATION, + AQUA_AFFINITY, + THORNS, + DEPTH_STRIDER, + FROST_WALKER, + BINDING_CURSE, + SOUL_SPEED, + SHARPNESS, + SMITE, + BANE_OF_ARTHROPODS, + KNOCKBACK, + FIRE_ASPECT, + LOOTING, + SWEEPING, + EFFICIENCY, + SILK_TOUCH, + UNBREAKING, + FORTUNE, + POWER, + PUNCH, + FLAME, + INFINITY, + LUCK_OF_THE_SEA, + LURE, + LOYALTY, + IMPALING, + RIPTIDE, + CHANNELING, + MULTISHOT, + QUICK_CHARGE, + PIERCING, + MENDING, + VANISHING_CURSE; + + private static final JavaEnchantment[] VALUES = JavaEnchantment.values(); + + public static JavaEnchantment of(int index) { + return VALUES[index]; + } + + /** + * A list of all enchantment Java identifiers for use with command suggestions. + */ + public static final String[] ALL_JAVA_IDENTIFIERS; + + static { + ALL_JAVA_IDENTIFIERS = new String[VALUES.length]; + for (int i = 0; i < ALL_JAVA_IDENTIFIERS.length; i++) { + ALL_JAVA_IDENTIFIERS[i] = "minecraft:" + VALUES[i].name().toLowerCase(Locale.ENGLISH); + } + } + } } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/item/Potion.java b/connector/src/main/java/org/geysermc/connector/network/translators/item/Potion.java index 4e710c550..57f8c756c 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/item/Potion.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/item/Potion.java @@ -74,6 +74,8 @@ public enum Potion { SLOW_FALLING(40), LONG_SLOW_FALLING(41); + public static final Potion[] VALUES = values(); + private final String javaIdentifier; private final short bedrockId; @@ -83,7 +85,7 @@ public enum Potion { } public static Potion getByJavaIdentifier(String javaIdentifier) { - for (Potion potion : Potion.values()) { + for (Potion potion : VALUES) { if (potion.javaIdentifier.equals(javaIdentifier)) { return potion; } @@ -92,7 +94,7 @@ public enum Potion { } public static Potion getByBedrockId(int bedrockId) { - for (Potion potion : Potion.values()) { + for (Potion potion : VALUES) { if (potion.bedrockId == bedrockId) { return potion; } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/item/PotionMixRegistry.java b/connector/src/main/java/org/geysermc/connector/network/translators/item/PotionMixRegistry.java index 16cbc54ac..30be7da23 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/item/PotionMixRegistry.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/item/PotionMixRegistry.java @@ -80,7 +80,7 @@ public class PotionMixRegistry { // Add all types of potions as inputs ItemEntry fillerIngredient = ingredients.get(0); for (ItemEntry input : inputs) { - for (Potion potion : Potion.values()) { + for (Potion potion : Potion.VALUES) { potionMixes.add(new PotionMixData( input.getBedrockId(), potion.getBedrockId(), fillerIngredient.getBedrockId(), fillerIngredient.getBedrockData(), diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/item/TippedArrowPotion.java b/connector/src/main/java/org/geysermc/connector/network/translators/item/TippedArrowPotion.java index 5aac09790..312de593c 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/item/TippedArrowPotion.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/item/TippedArrowPotion.java @@ -77,6 +77,8 @@ public enum TippedArrowPotion { SLOW_FALLING(41, ArrowParticleColors.SLOW_FALLING), LONG_SLOW_FALLING(42, ArrowParticleColors.SLOW_FALLING); + private static final TippedArrowPotion[] VALUES = values(); + private final String javaIdentifier; private final short bedrockId; /** @@ -92,7 +94,7 @@ public enum TippedArrowPotion { } public static TippedArrowPotion getByJavaIdentifier(String javaIdentifier) { - for (TippedArrowPotion potion : TippedArrowPotion.values()) { + for (TippedArrowPotion potion : VALUES) { if (potion.javaIdentifier.equals(javaIdentifier)) { return potion; } @@ -101,7 +103,7 @@ public enum TippedArrowPotion { } public static TippedArrowPotion getByBedrockId(int bedrockId) { - for (TippedArrowPotion potion : TippedArrowPotion.values()) { + for (TippedArrowPotion potion : VALUES) { if (potion.bedrockId == bedrockId) { return potion; } @@ -114,7 +116,7 @@ public enum TippedArrowPotion { * @return the tipped arrow potion that most closely resembles that color. */ public static TippedArrowPotion getByJavaColor(int color) { - for (TippedArrowPotion potion : TippedArrowPotion.values()) { + for (TippedArrowPotion potion : VALUES) { if (potion.javaColor == color) { return potion; } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java index 942bc7fdc..e8e6ae6b7 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/JavaDeclareCommandsTranslator.java @@ -249,7 +249,7 @@ public class JavaDeclareCommandsTranslator extends PacketTranslator { + private static final List SKIN_PART_VALUES = Arrays.asList(SkinPart.values()); @Override public void translate(ServerJoinGamePacket packet, GeyserSession session) { @@ -92,8 +93,7 @@ public class JavaJoinGameTranslator extends PacketTranslator skinParts = Arrays.asList(SkinPart.values()); - ClientSettingsPacket clientSettingsPacket = new ClientSettingsPacket(locale, (byte) session.getRenderDistance(), ChatVisibility.FULL, true, skinParts, HandPreference.RIGHT_HAND); + ClientSettingsPacket clientSettingsPacket = new ClientSettingsPacket(locale, (byte) session.getRenderDistance(), ChatVisibility.FULL, true, SKIN_PART_VALUES, HandPreference.RIGHT_HAND); session.sendDownstreamPacket(clientSettingsPacket); session.sendDownstreamPacket(new ClientPluginMessagePacket("minecraft:brand", PluginMessageUtils.getGeyserBrandData()));