diff --git a/api/src/main/java/net/elytrium/limboapi/api/chunk/BlockEntityVersion.java b/api/src/main/java/net/elytrium/limboapi/api/chunk/BlockEntityVersion.java index d94e9098..073b5b4a 100644 --- a/api/src/main/java/net/elytrium/limboapi/api/chunk/BlockEntityVersion.java +++ b/api/src/main/java/net/elytrium/limboapi/api/chunk/BlockEntityVersion.java @@ -11,7 +11,9 @@ import java.util.Arrays; import java.util.EnumMap; import java.util.EnumSet; +import java.util.Map; import java.util.Set; +import net.elytrium.limboapi.api.utils.EnumUniverse; public enum BlockEntityVersion { LEGACY(EnumSet.range(ProtocolVersion.MINECRAFT_1_7_2, ProtocolVersion.MINECRAFT_1_18_2)), @@ -26,9 +28,11 @@ public enum BlockEntityVersion { MINECRAFT_1_21(EnumSet.of(ProtocolVersion.MINECRAFT_1_21)), MINECRAFT_1_21_2(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_2)), MINECRAFT_1_21_4(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_4)), - MINECRAFT_1_21_5(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_5)); + MINECRAFT_1_21_5(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_5)), + MINECRAFT_1_21_6(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_6)); private static final EnumMap MC_VERSION_TO_ITEM_VERSIONS = new EnumMap<>(ProtocolVersion.class); + private static final Map KEY_LOOKUP = Map.copyOf(EnumUniverse.createProtocolLookup(values())); private final Set versions; @@ -57,21 +61,7 @@ public Set getVersions() { } public static BlockEntityVersion parse(String from) { - return switch (from) { - case "1.19" -> MINECRAFT_1_19; - case "1.19.1" -> MINECRAFT_1_19_1; - case "1.19.3" -> MINECRAFT_1_19_3; - case "1.19.4" -> MINECRAFT_1_19_4; - case "1.20" -> MINECRAFT_1_20; - case "1.20.2" -> MINECRAFT_1_20_2; - case "1.20.3" -> MINECRAFT_1_20_3; - case "1.20.5" -> MINECRAFT_1_20_5; - case "1.21" -> MINECRAFT_1_21; - case "1.21.2" -> MINECRAFT_1_21_2; - case "1.21.4" -> MINECRAFT_1_21_4; - case "1.21.5" -> MINECRAFT_1_21_5; - default -> LEGACY; - }; + return KEY_LOOKUP.getOrDefault(from, LEGACY); } public static BlockEntityVersion from(ProtocolVersion protocolVersion) { diff --git a/api/src/main/java/net/elytrium/limboapi/api/material/WorldVersion.java b/api/src/main/java/net/elytrium/limboapi/api/material/WorldVersion.java index 28b82991..6f1e1a16 100644 --- a/api/src/main/java/net/elytrium/limboapi/api/material/WorldVersion.java +++ b/api/src/main/java/net/elytrium/limboapi/api/material/WorldVersion.java @@ -11,7 +11,9 @@ import java.util.Arrays; import java.util.EnumMap; import java.util.EnumSet; +import java.util.Map; import java.util.Set; +import net.elytrium.limboapi.api.utils.EnumUniverse; public enum WorldVersion { LEGACY(EnumSet.range(ProtocolVersion.MINECRAFT_1_7_2, ProtocolVersion.MINECRAFT_1_12_2)), @@ -30,9 +32,11 @@ public enum WorldVersion { MINECRAFT_1_20_5(EnumSet.range(ProtocolVersion.MINECRAFT_1_20_5, ProtocolVersion.MINECRAFT_1_21)), MINECRAFT_1_21_2(ProtocolVersion.MINECRAFT_1_21_2), MINECRAFT_1_21_4(ProtocolVersion.MINECRAFT_1_21_4), - MINECRAFT_1_21_5(EnumSet.range(ProtocolVersion.MINECRAFT_1_21_5, ProtocolVersion.MAXIMUM_VERSION)); + MINECRAFT_1_21_5(ProtocolVersion.MINECRAFT_1_21_5), + MINECRAFT_1_21_6(EnumSet.range(ProtocolVersion.MINECRAFT_1_21_6, ProtocolVersion.MAXIMUM_VERSION)); private static final EnumMap MC_VERSION_TO_ITEM_VERSIONS = new EnumMap<>(ProtocolVersion.class); + private static final Map KEY_LOOKUP = Map.copyOf(EnumUniverse.createProtocolLookup(values())); private final Set versions; @@ -61,25 +65,7 @@ public Set getVersions() { } public static WorldVersion parse(String from) { - return switch (from) { - case "1.13" -> MINECRAFT_1_13; - case "1.13.2" -> MINECRAFT_1_13_2; - case "1.14" -> MINECRAFT_1_14; - case "1.15" -> MINECRAFT_1_15; - case "1.16" -> MINECRAFT_1_16; - case "1.16.2" -> MINECRAFT_1_16_2; - case "1.17" -> MINECRAFT_1_17; - case "1.19" -> MINECRAFT_1_19; - case "1.19.3" -> MINECRAFT_1_19_3; - case "1.19.4" -> MINECRAFT_1_19_4; - case "1.20" -> MINECRAFT_1_20; - case "1.20.3" -> MINECRAFT_1_20_3; - case "1.20.5" -> MINECRAFT_1_20_5; - case "1.21.2" -> MINECRAFT_1_21_2; - case "1.21.4" -> MINECRAFT_1_21_4; - case "1.21.5" -> MINECRAFT_1_21_5; - default -> LEGACY; - }; + return KEY_LOOKUP.getOrDefault(from, LEGACY); } public static WorldVersion from(ProtocolVersion protocolVersion) { diff --git a/api/src/main/java/net/elytrium/limboapi/api/utils/EnumUniverse.java b/api/src/main/java/net/elytrium/limboapi/api/utils/EnumUniverse.java new file mode 100644 index 00000000..1e8a86ad --- /dev/null +++ b/api/src/main/java/net/elytrium/limboapi/api/utils/EnumUniverse.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2021 - 2025 Elytrium + * + * The LimboAPI (excluding the LimboAPI plugin) is licensed under the terms of the MIT License. For more details, + * reference the LICENSE file in the api top-level directory. + */ + +package net.elytrium.limboapi.api.utils; + +import java.util.HashMap; +import java.util.Map; + +public final class EnumUniverse { + + private EnumUniverse() { + + } + + public static > Map createProtocolLookup(T[] values) { + Map lookup = new HashMap<>(); + for (T value : values) { + if (value.name().startsWith("MINECRAFT_")) { + lookup.put(value.name().substring("MINECRAFT_".length()).replace("_", "."), value); + } + } + return lookup; + } +} diff --git a/plugin/build.gradle b/plugin/build.gradle index 4f0106b8..835bcffb 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -131,7 +131,8 @@ enum MinecraftVersion { MINECRAFT_1_21(767), MINECRAFT_1_21_2(768), MINECRAFT_1_21_4(769), - MINECRAFT_1_21_5(770) + MINECRAFT_1_21_5(770), + MINECRAFT_1_21_6(771) public static final List WORLD_VERSIONS = List.of( MINECRAFT_1_13, @@ -149,7 +150,8 @@ enum MinecraftVersion { MINECRAFT_1_20_5, MINECRAFT_1_21_2, MINECRAFT_1_21_4, - MINECRAFT_1_21_5 + MINECRAFT_1_21_5, + MINECRAFT_1_21_6 ) public static final MinecraftVersion MINIMUM_VERSION = MINECRAFT_1_7_2 diff --git a/plugin/mapping/fallbackdata.json b/plugin/mapping/fallbackdata.json index d1c26682..6748259d 100755 --- a/plugin/mapping/fallbackdata.json +++ b/plugin/mapping/fallbackdata.json @@ -1,4 +1,7 @@ { + "MINECRAFT_1_21_5": { + "minecraft:dried_ghast": "minecraft:chorus_plant" + }, "MINECRAFT_1_21_4": { "minecraft:wildflowers": "minecraft:glow_lichen", "minecraft:leaf_litter": "minecraft:glow_lichen", diff --git a/plugin/src/main/java/net/elytrium/limboapi/LimboAPI.java b/plugin/src/main/java/net/elytrium/limboapi/LimboAPI.java index b8d2a05e..7f33faae 100644 --- a/plugin/src/main/java/net/elytrium/limboapi/LimboAPI.java +++ b/plugin/src/main/java/net/elytrium/limboapi/LimboAPI.java @@ -128,7 +128,7 @@ @SuppressFBWarnings("MS_EXPOSE_REP") public class LimboAPI implements LimboFactory { - private static final int SUPPORTED_MAXIMUM_PROTOCOL_VERSION_NUMBER = 770; + private static final int SUPPORTED_MAXIMUM_PROTOCOL_VERSION_NUMBER = 771; @MonotonicNonNull private static Logger LOGGER; diff --git a/plugin/src/main/java/net/elytrium/limboapi/Settings.java b/plugin/src/main/java/net/elytrium/limboapi/Settings.java index db544a3f..5404da4e 100644 --- a/plugin/src/main/java/net/elytrium/limboapi/Settings.java +++ b/plugin/src/main/java/net/elytrium/limboapi/Settings.java @@ -87,7 +87,7 @@ public static class MAIN { "1_7_2, 1_7_6, 1_8, 1_9, 1_9_1, 1_9_2, 1_9_4, 1_10, 1_11, 1_11_1, 1_12, 1_12_1, 1_12_2,", "1_13, 1_13_1, 1_13_2, 1_14, 1_14_1, 1_14_2, 1_14_3, 1_14_4, 1_15, 1_15_1, 1_15_2,", "1_16, 1_16_1, 1_16_2, 1_16_3, 1_16_4, 1_17, 1_17_1, 1_18, 1_18_2, 1_19, 1_19_1, 1_19_3,", - "1_20, 1_20_2, 1_20_3, 1_20_5, 1_21, 1_21_2, 1_21_4, 1_21_5, LATEST" + "1_20, 1_20_2, 1_20_3, 1_20_5, 1_21, 1_21_2, 1_21_4, 1_21_5, 1_21_6, LATEST" }) public String PREPARE_MIN_VERSION = "1_7_2"; public String PREPARE_MAX_VERSION = "LATEST"; diff --git a/plugin/src/main/java/net/elytrium/limboapi/protocol/LimboProtocol.java b/plugin/src/main/java/net/elytrium/limboapi/protocol/LimboProtocol.java index 4c57d429..c4666ceb 100644 --- a/plugin/src/main/java/net/elytrium/limboapi/protocol/LimboProtocol.java +++ b/plugin/src/main/java/net/elytrium/limboapi/protocol/LimboProtocol.java @@ -424,7 +424,8 @@ public static void init() throws Throwable { createMapping(0x17, ProtocolVersion.MINECRAFT_1_20_2, false), createMapping(0x18, ProtocolVersion.MINECRAFT_1_20_3, false), createMapping(0x1B, ProtocolVersion.MINECRAFT_1_20_5, false), - createMapping(0x1D, ProtocolVersion.MINECRAFT_1_21_2, false) + createMapping(0x1D, ProtocolVersion.MINECRAFT_1_21_2, false), + createMapping(0x1E, ProtocolVersion.MINECRAFT_1_21_6, false) ); register(LIMBO_STATE_REGISTRY, PacketDirection.SERVERBOUND, MovePositionOnlyPacket.class, MovePositionOnlyPacket::new, @@ -443,7 +444,8 @@ public static void init() throws Throwable { createMapping(0x16, ProtocolVersion.MINECRAFT_1_20_2, false), createMapping(0x17, ProtocolVersion.MINECRAFT_1_20_3, false), createMapping(0x1A, ProtocolVersion.MINECRAFT_1_20_5, false), - createMapping(0x1C, ProtocolVersion.MINECRAFT_1_21_2, false) + createMapping(0x1C, ProtocolVersion.MINECRAFT_1_21_2, false), + createMapping(0x1D, ProtocolVersion.MINECRAFT_1_21_6, false) ); register(LIMBO_STATE_REGISTRY, PacketDirection.SERVERBOUND, MoveRotationOnlyPacket.class, MoveRotationOnlyPacket::new, @@ -462,7 +464,8 @@ public static void init() throws Throwable { createMapping(0x18, ProtocolVersion.MINECRAFT_1_20_2, false), createMapping(0x19, ProtocolVersion.MINECRAFT_1_20_3, false), createMapping(0x1C, ProtocolVersion.MINECRAFT_1_20_5, false), - createMapping(0x1E, ProtocolVersion.MINECRAFT_1_21_2, false) + createMapping(0x1E, ProtocolVersion.MINECRAFT_1_21_2, false), + createMapping(0x1F, ProtocolVersion.MINECRAFT_1_21_6, false) ); register(LIMBO_STATE_REGISTRY, PacketDirection.SERVERBOUND, MoveOnGroundOnlyPacket.class, MoveOnGroundOnlyPacket::new, @@ -481,7 +484,8 @@ public static void init() throws Throwable { createMapping(0x19, ProtocolVersion.MINECRAFT_1_20_2, false), createMapping(0x1A, ProtocolVersion.MINECRAFT_1_20_3, false), createMapping(0x1D, ProtocolVersion.MINECRAFT_1_20_5, false), - createMapping(0x1F, ProtocolVersion.MINECRAFT_1_21_2, false) + createMapping(0x1F, ProtocolVersion.MINECRAFT_1_21_2, false), + createMapping(0x20, ProtocolVersion.MINECRAFT_1_21_6, false) ); register(LIMBO_STATE_REGISTRY, PacketDirection.SERVERBOUND, TeleportConfirmPacket.class, TeleportConfirmPacket::new, @@ -493,7 +497,8 @@ public static void init() throws Throwable { createMapping(0x20, ProtocolVersion.MINECRAFT_1_19_3, false), createMapping(0x06, ProtocolVersion.MINECRAFT_1_19_4, false), createMapping(0x07, ProtocolVersion.MINECRAFT_1_20_5, false), - createMapping(0x08, ProtocolVersion.MINECRAFT_1_21_2, false) + createMapping(0x08, ProtocolVersion.MINECRAFT_1_21_2, false), + createMapping(0x09, ProtocolVersion.MINECRAFT_1_21_6, false) ); }