Skip to content

Commit 5bedab0

Browse files
authored
Minecraft 1.21.6 and Velocity b513+ support (#200)
1 parent 8cd5ffe commit 5bedab0

File tree

8 files changed

+59
-45
lines changed

8 files changed

+59
-45
lines changed

api/src/main/java/net/elytrium/limboapi/api/chunk/BlockEntityVersion.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
import java.util.Arrays;
1212
import java.util.EnumMap;
1313
import java.util.EnumSet;
14+
import java.util.Map;
1415
import java.util.Set;
16+
import net.elytrium.limboapi.api.utils.EnumUniverse;
1517

1618
public enum BlockEntityVersion {
1719
LEGACY(EnumSet.range(ProtocolVersion.MINECRAFT_1_7_2, ProtocolVersion.MINECRAFT_1_18_2)),
@@ -26,9 +28,11 @@ public enum BlockEntityVersion {
2628
MINECRAFT_1_21(EnumSet.of(ProtocolVersion.MINECRAFT_1_21)),
2729
MINECRAFT_1_21_2(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_2)),
2830
MINECRAFT_1_21_4(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_4)),
29-
MINECRAFT_1_21_5(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_5));
31+
MINECRAFT_1_21_5(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_5)),
32+
MINECRAFT_1_21_6(EnumSet.of(ProtocolVersion.MINECRAFT_1_21_6));
3033

3134
private static final EnumMap<ProtocolVersion, BlockEntityVersion> MC_VERSION_TO_ITEM_VERSIONS = new EnumMap<>(ProtocolVersion.class);
35+
private static final Map<String, BlockEntityVersion> KEY_LOOKUP = Map.copyOf(EnumUniverse.createProtocolLookup(values()));
3236

3337
private final Set<ProtocolVersion> versions;
3438

@@ -57,21 +61,7 @@ public Set<ProtocolVersion> getVersions() {
5761
}
5862

5963
public static BlockEntityVersion parse(String from) {
60-
return switch (from) {
61-
case "1.19" -> MINECRAFT_1_19;
62-
case "1.19.1" -> MINECRAFT_1_19_1;
63-
case "1.19.3" -> MINECRAFT_1_19_3;
64-
case "1.19.4" -> MINECRAFT_1_19_4;
65-
case "1.20" -> MINECRAFT_1_20;
66-
case "1.20.2" -> MINECRAFT_1_20_2;
67-
case "1.20.3" -> MINECRAFT_1_20_3;
68-
case "1.20.5" -> MINECRAFT_1_20_5;
69-
case "1.21" -> MINECRAFT_1_21;
70-
case "1.21.2" -> MINECRAFT_1_21_2;
71-
case "1.21.4" -> MINECRAFT_1_21_4;
72-
case "1.21.5" -> MINECRAFT_1_21_5;
73-
default -> LEGACY;
74-
};
64+
return KEY_LOOKUP.getOrDefault(from, LEGACY);
7565
}
7666

7767
public static BlockEntityVersion from(ProtocolVersion protocolVersion) {

api/src/main/java/net/elytrium/limboapi/api/material/WorldVersion.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
import java.util.Arrays;
1212
import java.util.EnumMap;
1313
import java.util.EnumSet;
14+
import java.util.Map;
1415
import java.util.Set;
16+
import net.elytrium.limboapi.api.utils.EnumUniverse;
1517

1618
public enum WorldVersion {
1719
LEGACY(EnumSet.range(ProtocolVersion.MINECRAFT_1_7_2, ProtocolVersion.MINECRAFT_1_12_2)),
@@ -30,9 +32,11 @@ public enum WorldVersion {
3032
MINECRAFT_1_20_5(EnumSet.range(ProtocolVersion.MINECRAFT_1_20_5, ProtocolVersion.MINECRAFT_1_21)),
3133
MINECRAFT_1_21_2(ProtocolVersion.MINECRAFT_1_21_2),
3234
MINECRAFT_1_21_4(ProtocolVersion.MINECRAFT_1_21_4),
33-
MINECRAFT_1_21_5(EnumSet.range(ProtocolVersion.MINECRAFT_1_21_5, ProtocolVersion.MAXIMUM_VERSION));
35+
MINECRAFT_1_21_5(ProtocolVersion.MINECRAFT_1_21_5),
36+
MINECRAFT_1_21_6(EnumSet.range(ProtocolVersion.MINECRAFT_1_21_6, ProtocolVersion.MAXIMUM_VERSION));
3437

3538
private static final EnumMap<ProtocolVersion, WorldVersion> MC_VERSION_TO_ITEM_VERSIONS = new EnumMap<>(ProtocolVersion.class);
39+
private static final Map<String, WorldVersion> KEY_LOOKUP = Map.copyOf(EnumUniverse.createProtocolLookup(values()));
3640

3741
private final Set<ProtocolVersion> versions;
3842

@@ -61,25 +65,7 @@ public Set<ProtocolVersion> getVersions() {
6165
}
6266

6367
public static WorldVersion parse(String from) {
64-
return switch (from) {
65-
case "1.13" -> MINECRAFT_1_13;
66-
case "1.13.2" -> MINECRAFT_1_13_2;
67-
case "1.14" -> MINECRAFT_1_14;
68-
case "1.15" -> MINECRAFT_1_15;
69-
case "1.16" -> MINECRAFT_1_16;
70-
case "1.16.2" -> MINECRAFT_1_16_2;
71-
case "1.17" -> MINECRAFT_1_17;
72-
case "1.19" -> MINECRAFT_1_19;
73-
case "1.19.3" -> MINECRAFT_1_19_3;
74-
case "1.19.4" -> MINECRAFT_1_19_4;
75-
case "1.20" -> MINECRAFT_1_20;
76-
case "1.20.3" -> MINECRAFT_1_20_3;
77-
case "1.20.5" -> MINECRAFT_1_20_5;
78-
case "1.21.2" -> MINECRAFT_1_21_2;
79-
case "1.21.4" -> MINECRAFT_1_21_4;
80-
case "1.21.5" -> MINECRAFT_1_21_5;
81-
default -> LEGACY;
82-
};
68+
return KEY_LOOKUP.getOrDefault(from, LEGACY);
8369
}
8470

8571
public static WorldVersion from(ProtocolVersion protocolVersion) {
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright (C) 2021 - 2025 Elytrium
3+
*
4+
* The LimboAPI (excluding the LimboAPI plugin) is licensed under the terms of the MIT License. For more details,
5+
* reference the LICENSE file in the api top-level directory.
6+
*/
7+
8+
package net.elytrium.limboapi.api.utils;
9+
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
13+
public final class EnumUniverse {
14+
15+
private EnumUniverse() {
16+
17+
}
18+
19+
public static <T extends Enum<T>> Map<String, T> createProtocolLookup(T[] values) {
20+
Map<String, T> lookup = new HashMap<>();
21+
for (T value : values) {
22+
if (value.name().startsWith("MINECRAFT_")) {
23+
lookup.put(value.name().substring("MINECRAFT_".length()).replace("_", "."), value);
24+
}
25+
}
26+
return lookup;
27+
}
28+
}

plugin/build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ enum MinecraftVersion {
131131
MINECRAFT_1_21(767),
132132
MINECRAFT_1_21_2(768),
133133
MINECRAFT_1_21_4(769),
134-
MINECRAFT_1_21_5(770)
134+
MINECRAFT_1_21_5(770),
135+
MINECRAFT_1_21_6(771)
135136

136137
public static final List<MinecraftVersion> WORLD_VERSIONS = List.of(
137138
MINECRAFT_1_13,
@@ -149,7 +150,8 @@ enum MinecraftVersion {
149150
MINECRAFT_1_20_5,
150151
MINECRAFT_1_21_2,
151152
MINECRAFT_1_21_4,
152-
MINECRAFT_1_21_5
153+
MINECRAFT_1_21_5,
154+
MINECRAFT_1_21_6
153155
)
154156

155157
public static final MinecraftVersion MINIMUM_VERSION = MINECRAFT_1_7_2

plugin/mapping/fallbackdata.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
{
2+
"MINECRAFT_1_21_5": {
3+
"minecraft:dried_ghast": "minecraft:chorus_plant"
4+
},
25
"MINECRAFT_1_21_4": {
36
"minecraft:wildflowers": "minecraft:glow_lichen",
47
"minecraft:leaf_litter": "minecraft:glow_lichen",

plugin/src/main/java/net/elytrium/limboapi/LimboAPI.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@
128128
@SuppressFBWarnings("MS_EXPOSE_REP")
129129
public class LimboAPI implements LimboFactory {
130130

131-
private static final int SUPPORTED_MAXIMUM_PROTOCOL_VERSION_NUMBER = 770;
131+
private static final int SUPPORTED_MAXIMUM_PROTOCOL_VERSION_NUMBER = 771;
132132

133133
@MonotonicNonNull
134134
private static Logger LOGGER;

plugin/src/main/java/net/elytrium/limboapi/Settings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public static class MAIN {
8787
"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,",
8888
"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,",
8989
"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,",
90-
"1_20, 1_20_2, 1_20_3, 1_20_5, 1_21, 1_21_2, 1_21_4, 1_21_5, LATEST"
90+
"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"
9191
})
9292
public String PREPARE_MIN_VERSION = "1_7_2";
9393
public String PREPARE_MAX_VERSION = "LATEST";

plugin/src/main/java/net/elytrium/limboapi/protocol/LimboProtocol.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,8 @@ public static void init() throws Throwable {
424424
createMapping(0x17, ProtocolVersion.MINECRAFT_1_20_2, false),
425425
createMapping(0x18, ProtocolVersion.MINECRAFT_1_20_3, false),
426426
createMapping(0x1B, ProtocolVersion.MINECRAFT_1_20_5, false),
427-
createMapping(0x1D, ProtocolVersion.MINECRAFT_1_21_2, false)
427+
createMapping(0x1D, ProtocolVersion.MINECRAFT_1_21_2, false),
428+
createMapping(0x1E, ProtocolVersion.MINECRAFT_1_21_6, false)
428429
);
429430
register(LIMBO_STATE_REGISTRY, PacketDirection.SERVERBOUND,
430431
MovePositionOnlyPacket.class, MovePositionOnlyPacket::new,
@@ -443,7 +444,8 @@ public static void init() throws Throwable {
443444
createMapping(0x16, ProtocolVersion.MINECRAFT_1_20_2, false),
444445
createMapping(0x17, ProtocolVersion.MINECRAFT_1_20_3, false),
445446
createMapping(0x1A, ProtocolVersion.MINECRAFT_1_20_5, false),
446-
createMapping(0x1C, ProtocolVersion.MINECRAFT_1_21_2, false)
447+
createMapping(0x1C, ProtocolVersion.MINECRAFT_1_21_2, false),
448+
createMapping(0x1D, ProtocolVersion.MINECRAFT_1_21_6, false)
447449
);
448450
register(LIMBO_STATE_REGISTRY, PacketDirection.SERVERBOUND,
449451
MoveRotationOnlyPacket.class, MoveRotationOnlyPacket::new,
@@ -462,7 +464,8 @@ public static void init() throws Throwable {
462464
createMapping(0x18, ProtocolVersion.MINECRAFT_1_20_2, false),
463465
createMapping(0x19, ProtocolVersion.MINECRAFT_1_20_3, false),
464466
createMapping(0x1C, ProtocolVersion.MINECRAFT_1_20_5, false),
465-
createMapping(0x1E, ProtocolVersion.MINECRAFT_1_21_2, false)
467+
createMapping(0x1E, ProtocolVersion.MINECRAFT_1_21_2, false),
468+
createMapping(0x1F, ProtocolVersion.MINECRAFT_1_21_6, false)
466469
);
467470
register(LIMBO_STATE_REGISTRY, PacketDirection.SERVERBOUND,
468471
MoveOnGroundOnlyPacket.class, MoveOnGroundOnlyPacket::new,
@@ -481,7 +484,8 @@ public static void init() throws Throwable {
481484
createMapping(0x19, ProtocolVersion.MINECRAFT_1_20_2, false),
482485
createMapping(0x1A, ProtocolVersion.MINECRAFT_1_20_3, false),
483486
createMapping(0x1D, ProtocolVersion.MINECRAFT_1_20_5, false),
484-
createMapping(0x1F, ProtocolVersion.MINECRAFT_1_21_2, false)
487+
createMapping(0x1F, ProtocolVersion.MINECRAFT_1_21_2, false),
488+
createMapping(0x20, ProtocolVersion.MINECRAFT_1_21_6, false)
485489
);
486490
register(LIMBO_STATE_REGISTRY, PacketDirection.SERVERBOUND,
487491
TeleportConfirmPacket.class, TeleportConfirmPacket::new,
@@ -493,7 +497,8 @@ public static void init() throws Throwable {
493497
createMapping(0x20, ProtocolVersion.MINECRAFT_1_19_3, false),
494498
createMapping(0x06, ProtocolVersion.MINECRAFT_1_19_4, false),
495499
createMapping(0x07, ProtocolVersion.MINECRAFT_1_20_5, false),
496-
createMapping(0x08, ProtocolVersion.MINECRAFT_1_21_2, false)
500+
createMapping(0x08, ProtocolVersion.MINECRAFT_1_21_2, false),
501+
createMapping(0x09, ProtocolVersion.MINECRAFT_1_21_6, false)
497502
);
498503
}
499504

0 commit comments

Comments
 (0)