Skip to content

Commit 3216e1b

Browse files
committed
feat: add support for 1.21.9
1 parent b7a2713 commit 3216e1b

File tree

32 files changed

+441
-141
lines changed

32 files changed

+441
-141
lines changed

.github/workflows/buildtools.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,5 @@ checkVersion "1.21.1" "21"
4141
checkVersion "1.21.3" "21"
4242
checkVersion "1.21.4" "21"
4343
checkVersion "1.21.5" "21"
44-
checkVersion "1.21.6" "21"
44+
checkVersion "1.21.8" "21"
45+
checkVersion "1.21.9" "21"

orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/OrebfuscatorNms.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package net.imprex.orebfuscator;
22

33
import java.lang.reflect.Constructor;
4-
54
import org.bukkit.World;
65
import org.bukkit.entity.Player;
7-
86
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
97
import dev.imprex.orebfuscator.config.api.Config;
108
import dev.imprex.orebfuscator.interop.RegistryAccessor;
@@ -25,11 +23,11 @@ public static void initialize() {
2523
}
2624

2725
String nmsVersion = MinecraftVersion.nmsVersion();
28-
if (ServerVersion.isMojangMapped() && !ServerVersion.isPaper()) {
26+
if (ServerVersion.isMojangMapped()) {
2927
nmsVersion += "_mojang";
3028
}
3129

32-
OfcLogger.debug("Searching NMS adapter for server version \"" + nmsVersion + "\"!");
30+
OfcLogger.info("Searching NMS adapter for server version \"" + nmsVersion + "\"!");
3331

3432
try {
3533
String className = "net.imprex.orebfuscator.nms." + nmsVersion + ".NmsManager";
@@ -42,7 +40,7 @@ public static void initialize() {
4240
throw new RuntimeException("Couldn't initialize NMS adapter", e);
4341
}
4442

45-
OfcLogger.debug("NMS adapter for server version \"" + nmsVersion + "\" found!");
43+
OfcLogger.info("NMS adapter for server version \"" + nmsVersion + "\" found!");
4644
}
4745

4846
public static RegistryAccessor registry() {

orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/nms/AbstractNmsManager.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import java.util.HashMap;
44
import java.util.Map;
5-
5+
import org.bukkit.World;
6+
import org.bukkit.entity.Player;
67
import org.jetbrains.annotations.NotNull;
78
import org.jetbrains.annotations.Nullable;
8-
9+
import dev.imprex.orebfuscator.reflect.Reflector;
10+
import dev.imprex.orebfuscator.reflect.accessor.MethodAccessor;
911
import dev.imprex.orebfuscator.util.BlockProperties;
1012
import dev.imprex.orebfuscator.util.BlockStateProperties;
1113
import dev.imprex.orebfuscator.util.BlockTag;
@@ -14,6 +16,33 @@
1416

1517
public abstract class AbstractNmsManager implements NmsManager {
1618

19+
private static MethodAccessor worldGetHandle;
20+
private static MethodAccessor playerGetHandle;
21+
22+
protected static <T> T worldHandle(World world, Class<T> targetClass) {
23+
if (worldGetHandle == null) {
24+
worldGetHandle = Reflector.of(world.getClass()).method()
25+
.banStatic()
26+
.nameIs("getHandle")
27+
.returnType().is(targetClass)
28+
.parameterCount(0)
29+
.firstOrThrow();
30+
}
31+
return targetClass.cast(worldGetHandle.invoke(world));
32+
}
33+
34+
protected static <T> T playerHandle(Player player, Class<T> targetClass) {
35+
if (playerGetHandle == null) {
36+
playerGetHandle = Reflector.of(player.getClass()).method()
37+
.banStatic()
38+
.nameIs("getHandle")
39+
.returnType().is(targetClass)
40+
.parameterCount(0)
41+
.firstOrThrow();
42+
}
43+
return targetClass.cast(playerGetHandle.invoke(player));
44+
}
45+
1746
private final int uniqueBlockStateCount;
1847
private final int maxBitsPerBlockState;
1948

orebfuscator-nms/orebfuscator-nms-api/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ private static final class NmsMapping {
1717
private static final List<NmsMapping> MAPPINGS = new ArrayList<>();
1818

1919
static {
20+
MAPPINGS.add(new NmsMapping("1.21.9", "v1_21_R6"));
2021
MAPPINGS.add(new NmsMapping("1.21.6", "v1_21_R5"));
2122
MAPPINGS.add(new NmsMapping("1.21.5", "v1_21_R4"));
2223
MAPPINGS.add(new NmsMapping("1.21.4", "v1_21_R3"));

orebfuscator-nms/orebfuscator-nms-v1_16_R1/src/main/java/net/imprex/orebfuscator/nms/v1_16_R1/NmsManager.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,14 @@
88
import java.util.Map.Entry;
99
import java.util.Objects;
1010
import java.util.Set;
11-
1211
import org.bukkit.World;
13-
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
14-
import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;
1512
import org.bukkit.entity.Player;
16-
1713
import com.comphenix.protocol.PacketType;
1814
import com.comphenix.protocol.events.PacketContainer;
1915
import com.comphenix.protocol.wrappers.ChunkCoordIntPair;
2016
import com.comphenix.protocol.wrappers.MultiBlockChangeInfo;
2117
import com.comphenix.protocol.wrappers.WrappedBlockData;
2218
import com.google.common.collect.ImmutableList;
23-
2419
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
2520
import dev.imprex.orebfuscator.config.api.Config;
2621
import dev.imprex.orebfuscator.util.BlockPos;
@@ -68,11 +63,11 @@ static int getBlockState(Chunk chunk, int x, int y, int z) {
6863
}
6964

7065
private static WorldServer level(World world) {
71-
return ((CraftWorld) world).getHandle();
66+
return worldHandle(world, WorldServer.class);
7267
}
7368

7469
private static EntityPlayer player(Player player) {
75-
return ((CraftPlayer) player).getHandle();
70+
return playerHandle(player, EntityPlayer.class);
7671
}
7772

7873
public NmsManager() {

orebfuscator-nms/orebfuscator-nms-v1_16_R2/src/main/java/net/imprex/orebfuscator/nms/v1_16_R2/NmsManager.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,10 @@
88
import java.util.Map.Entry;
99
import java.util.Objects;
1010
import java.util.Set;
11-
1211
import org.bukkit.World;
13-
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
14-
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
1512
import org.bukkit.entity.Player;
16-
1713
import com.comphenix.protocol.events.PacketContainer;
1814
import com.google.common.collect.ImmutableList;
19-
2015
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
2116
import dev.imprex.orebfuscator.config.api.Config;
2217
import dev.imprex.orebfuscator.util.BlockPos;
@@ -67,11 +62,11 @@ static int getBlockState(Chunk chunk, int x, int y, int z) {
6762
}
6863

6964
private static WorldServer level(World world) {
70-
return ((CraftWorld) world).getHandle();
65+
return worldHandle(world, WorldServer.class);
7166
}
7267

7368
private static EntityPlayer player(Player player) {
74-
return ((CraftPlayer) player).getHandle();
69+
return playerHandle(player, EntityPlayer.class);
7570
}
7671

7772
public NmsManager() {

orebfuscator-nms/orebfuscator-nms-v1_16_R3/src/main/java/net/imprex/orebfuscator/nms/v1_16_R3/NmsManager.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,10 @@
88
import java.util.Map.Entry;
99
import java.util.Objects;
1010
import java.util.Set;
11-
1211
import org.bukkit.World;
13-
import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
14-
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
1512
import org.bukkit.entity.Player;
16-
1713
import com.comphenix.protocol.events.PacketContainer;
1814
import com.google.common.collect.ImmutableList;
19-
2015
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
2116
import dev.imprex.orebfuscator.config.api.Config;
2217
import dev.imprex.orebfuscator.util.BlockPos;
@@ -67,11 +62,11 @@ static int getBlockState(Chunk chunk, int x, int y, int z) {
6762
}
6863

6964
private static WorldServer level(World world) {
70-
return ((CraftWorld) world).getHandle();
65+
return worldHandle(world, WorldServer.class);
7166
}
7267

7368
private static EntityPlayer player(Player player) {
74-
return ((CraftPlayer) player).getHandle();
69+
return playerHandle(player, EntityPlayer.class);
7570
}
7671

7772
public NmsManager() {

orebfuscator-nms/orebfuscator-nms-v1_17_R1/src/main/java/net/imprex/orebfuscator/nms/v1_17_R1/NmsManager.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,11 @@
77
import java.util.Map;
88
import java.util.Objects;
99
import java.util.Set;
10-
1110
import org.bukkit.World;
12-
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
13-
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer;
1411
import org.bukkit.entity.Player;
15-
1612
import com.comphenix.protocol.PacketType;
1713
import com.comphenix.protocol.events.PacketContainer;
1814
import com.google.common.collect.ImmutableList;
19-
2015
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
2116
import dev.imprex.orebfuscator.config.api.Config;
2217
import dev.imprex.orebfuscator.util.BlockProperties;
@@ -65,11 +60,11 @@ static int getBlockState(LevelChunk chunk, int x, int y, int z) {
6560
}
6661

6762
private static ServerLevel level(World world) {
68-
return ((CraftWorld) world).getHandle();
63+
return worldHandle(world, ServerLevel.class);
6964
}
7065

7166
private static ServerPlayer player(Player player) {
72-
return ((CraftPlayer) player).getHandle();
67+
return playerHandle(player, ServerPlayer.class);
7368
}
7469

7570
public NmsManager() {

orebfuscator-nms/orebfuscator-nms-v1_18_R1/src/main/java/net/imprex/orebfuscator/nms/v1_18_R1/NmsManager.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,10 @@
77
import java.util.Map;
88
import java.util.Objects;
99
import java.util.Set;
10-
1110
import org.bukkit.World;
12-
import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
13-
import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer;
1411
import org.bukkit.entity.Player;
15-
1612
import com.comphenix.protocol.events.PacketContainer;
1713
import com.google.common.collect.ImmutableList;
18-
1914
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
2015
import dev.imprex.orebfuscator.config.api.Config;
2116
import dev.imprex.orebfuscator.util.BlockProperties;
@@ -67,11 +62,11 @@ static int getBlockState(LevelChunk chunk, int x, int y, int z) {
6762
}
6863

6964
private static ServerLevel level(World world) {
70-
return ((CraftWorld) world).getHandle();
65+
return worldHandle(world, ServerLevel.class);
7166
}
7267

7368
private static ServerPlayer player(Player player) {
74-
return ((CraftPlayer) player).getHandle();
69+
return playerHandle(player, ServerPlayer.class);
7570
}
7671

7772
public NmsManager() {

orebfuscator-nms/orebfuscator-nms-v1_18_R2/src/main/java/net/imprex/orebfuscator/nms/v1_18_R2/NmsManager.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,11 @@
88
import java.util.Optional;
99
import java.util.Set;
1010
import java.util.stream.Collectors;
11-
1211
import org.bukkit.World;
13-
import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
14-
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
1512
import org.bukkit.entity.Player;
16-
1713
import com.comphenix.protocol.events.PacketContainer;
1814
import com.google.common.collect.ImmutableList;
1915
import com.mojang.datafixers.util.Pair;
20-
2116
import dev.imprex.orebfuscator.cache.AbstractRegionFileCache;
2217
import dev.imprex.orebfuscator.config.api.Config;
2318
import dev.imprex.orebfuscator.util.BlockProperties;
@@ -66,11 +61,11 @@ static int getBlockState(LevelChunk chunk, int x, int y, int z) {
6661
}
6762

6863
private static ServerLevel level(World world) {
69-
return ((CraftWorld) world).getHandle();
64+
return worldHandle(world, ServerLevel.class);
7065
}
7166

7267
private static ServerPlayer player(Player player) {
73-
return ((CraftPlayer) player).getHandle();
68+
return playerHandle(player, ServerPlayer.class);
7469
}
7570

7671
public NmsManager() {

0 commit comments

Comments
 (0)