Skip to content

Commit a64dde7

Browse files
feat: add multiversion support for NMS 1.21.11 and 26.1, update NmsProvider and related classes
1 parent efb23fd commit a64dde7

7 files changed

Lines changed: 88 additions & 63 deletions

File tree

surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-common/src/main/kotlin/dev/slne/surf/api/paper/nms/common/NmsProvider.kt

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import dev.slne.surf.api.paper.nms.bridges.packets.player.SurfPaperNmsPlayerPack
1111
import dev.slne.surf.api.paper.nms.bridges.packets.player.SurfPaperNmsPlayerToastPackets
1212
import dev.slne.surf.api.paper.packet.listener.listener.PacketListener
1313
import dev.slne.surf.api.paper.region.TickThreadGuard
14+
import java.util.*
1415

1516
/**
1617
* Main interface for version-specific NMS operations.
@@ -98,27 +99,15 @@ interface NmsProvider {
9899
*/
99100
val current: NmsProvider by lazy {
100101
val version = NmsVersion.current
101-
val serviceLoader = java.util.ServiceLoader.load(
102+
val providers = ServiceLoader.load(
102103
NmsProvider::class.java,
103104
NmsProvider::class.java.classLoader
104-
)
105-
106-
val providers = buildList {
107-
val iterator = serviceLoader.iterator()
108-
while (iterator.hasNext()) {
109-
try {
110-
add(iterator.next())
111-
} catch (e: java.util.ServiceConfigurationError) {
112-
log.atWarning().withCause(e).log("Skipping NmsProvider that failed to load")
113-
}
114-
}
115-
}
105+
).toList()
116106

117107
log.atInfo().log("Looking for NmsProvider with version: %s", version)
118108
log.atInfo().log(
119109
"Available NmsProviders: %s",
120-
providers.joinToString(", ") { "${it.version.name} (${it.version.versionPrefix})" }
121-
)
110+
providers.joinToString(", ") { "${it.version.name} (${it.version.versionPrefix})" })
122111

123112
val matched = providers.firstOrNull { it.version == version }
124113
if (matched != null) {
@@ -128,10 +117,7 @@ interface NmsProvider {
128117
log.atWarning()
129118
.log("No exact match for NmsProvider version %s, using fallback", version)
130119
val fallback = providers.maxByOrNull { it.version.versionPrefix }
131-
?: error(
132-
"No NmsProvider implementations found for version $version. " +
133-
"Ensure the correct NMS module is included in the classpath."
134-
)
120+
?: error("No NmsProvider implementations found")
135121
log.atWarning().log("Selected fallback NmsProvider: %s", fallback.version.name)
136122
fallback
137123
}

surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/V1_21_11NmsProvider.kt

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@ import dev.slne.surf.api.paper.nms.bridges.packets.entity.SurfPaperNmsSpawnPacke
1010
import dev.slne.surf.api.paper.nms.bridges.packets.player.SurfPaperNmsPlayerChatPackets
1111
import dev.slne.surf.api.paper.nms.bridges.packets.player.SurfPaperNmsPlayerPackets
1212
import dev.slne.surf.api.paper.nms.bridges.packets.player.SurfPaperNmsPlayerToastPackets
13-
import dev.slne.surf.api.paper.nms.common.GlowingLifecycleHandler
14-
import dev.slne.surf.api.paper.nms.common.NmsPacketBridgeHandler
15-
import dev.slne.surf.api.paper.nms.common.NmsProvider
16-
import dev.slne.surf.api.paper.nms.common.NmsVersion
17-
import dev.slne.surf.api.paper.nms.common.PacketLoreRegistry
13+
import dev.slne.surf.api.paper.nms.common.*
1814
import dev.slne.surf.api.paper.packet.listener.listener.PacketListener
1915
import dev.slne.surf.api.paper.region.TickThreadGuard
2016
import dev.slne.surf.api.paper.server.nms.v1_21_11.bridges.*
@@ -40,24 +36,51 @@ class V1_21_11NmsProvider : NmsProvider {
4036
private var glowingApi: V1_21_11SurfGlowingApiImpl? = null
4137

4238
override fun createNmsBridge(): SurfPaperNmsBridge = V1_21_11SurfPaperNmsBridgeImpl()
43-
override fun createCommonBridge(): SurfPaperNmsCommonBridge = V1_21_11SurfPaperNmsCommonBridgeImpl()
44-
override fun createEntityBridge(): SurfPaperNmsEntityBridge = V1_21_11SurfPaperNmsEntityBridgeImpl()
39+
override fun createCommonBridge(): SurfPaperNmsCommonBridge =
40+
V1_21_11SurfPaperNmsCommonBridgeImpl()
41+
42+
override fun createEntityBridge(): SurfPaperNmsEntityBridge =
43+
V1_21_11SurfPaperNmsEntityBridgeImpl()
44+
4545
override fun createItemBridge(): SurfPaperNmsItemBridge = V1_21_11SurfPaperNmsItemBridgeImpl()
4646
override fun createNbtBridge(): SurfPaperNmsNbtBridge = V1_21_11SurfPaperNmsNbtBridgeImpl()
47-
override fun createGlowingBridge(): SurfPaperNmsGlowingBridge = V1_21_11SurfPaperNmsGlowingBridgeImpl()
48-
override fun createStatsBridge(): SurfPaperNmsStatsBridge = V1_21_11SurfPaperNmsStatsBridgeImpl()
49-
override fun createLootTableBridge(): SurfPaperNmsLootTableBridge = V1_21_11SurfPaperNmsLootTableBridgeImpl()
50-
override fun createCommandArgumentTypesBridge(): SurfPaperNmsCommandArgumentTypesBridge = V1_21_11SurfPaperNmsCommandArgumentTypesBridgeImpl()
51-
override fun createPacketBridges(): SurfPaperNmsPacketBridges = V1_21_11SurfPaperNmsPacketBridgesImpl()
52-
override fun createBlockPackets(): SurfPaperNmsBlockPackets = V1_21_11SurfPaperNmsBlockPacketsImpl()
53-
override fun createSpawnPackets(): SurfPaperNmsSpawnPackets = V1_21_11SurfPaperNmsSpawnPacketsImpl()
54-
override fun createPlayerPackets(): SurfPaperNmsPlayerPackets = V1_21_11SurfPaperNmsPlayerPacketsImpl()
55-
override fun createPlayerChatPackets(): SurfPaperNmsPlayerChatPackets = V1_21_11SurfPaperNmsPlayerChatPacketsImpl()
56-
override fun createPlayerToastPackets(): SurfPaperNmsPlayerToastPackets = V1_21_11SurfPaperNmsPlayerToastPacketsImpl()
47+
override fun createGlowingBridge(): SurfPaperNmsGlowingBridge =
48+
V1_21_11SurfPaperNmsGlowingBridgeImpl()
49+
50+
override fun createStatsBridge(): SurfPaperNmsStatsBridge =
51+
V1_21_11SurfPaperNmsStatsBridgeImpl()
52+
53+
override fun createLootTableBridge(): SurfPaperNmsLootTableBridge =
54+
V1_21_11SurfPaperNmsLootTableBridgeImpl()
55+
56+
override fun createCommandArgumentTypesBridge(): SurfPaperNmsCommandArgumentTypesBridge =
57+
V1_21_11SurfPaperNmsCommandArgumentTypesBridgeImpl()
58+
59+
override fun createPacketBridges(): SurfPaperNmsPacketBridges =
60+
V1_21_11SurfPaperNmsPacketBridgesImpl()
61+
62+
override fun createBlockPackets(): SurfPaperNmsBlockPackets =
63+
V1_21_11SurfPaperNmsBlockPacketsImpl()
64+
65+
override fun createSpawnPackets(): SurfPaperNmsSpawnPackets =
66+
V1_21_11SurfPaperNmsSpawnPacketsImpl()
67+
68+
override fun createPlayerPackets(): SurfPaperNmsPlayerPackets =
69+
V1_21_11SurfPaperNmsPlayerPacketsImpl()
70+
71+
override fun createPlayerChatPackets(): SurfPaperNmsPlayerChatPackets =
72+
V1_21_11SurfPaperNmsPlayerChatPacketsImpl()
73+
74+
override fun createPlayerToastPackets(): SurfPaperNmsPlayerToastPackets =
75+
V1_21_11SurfPaperNmsPlayerToastPacketsImpl()
76+
5777
override fun createTickThreadGuard(): TickThreadGuard = V1_21_11TickThreadGuard()
58-
override fun createPacketBridgeHandler(): NmsPacketBridgeHandler = V1_21_11NmsPacketBridgeHandler()
78+
override fun createPacketBridgeHandler(): NmsPacketBridgeHandler =
79+
V1_21_11NmsPacketBridgeHandler()
80+
5981
override fun createPacketLoreRegistry(): PacketLoreRegistry = V1_21_11PacketLoreRegistry()
60-
override fun createGlowingLifecycleHandler(): GlowingLifecycleHandler = V1_21_11GlowingLifecycleHandler()
82+
override fun createGlowingLifecycleHandler(): GlowingLifecycleHandler =
83+
V1_21_11GlowingLifecycleHandler()
6184

6285
override fun createGlowingApi(): SurfGlowingApi {
6386
val plugin = JavaPlugin.getProvidingPlugin(V1_21_11NmsProvider::class.java) as JavaPlugin
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package dev.slne.surf.api.paper.server.nms.v1_21_11.reflection
22

3-
import dev.slne.surf.api.core.reflection.Field
4-
import dev.slne.surf.api.core.reflection.SurfProxy
53
import net.minecraft.core.component.DataComponentMap
64
import net.minecraft.world.item.Item
5+
import xyz.jpenilla.reflectionremapper.proxy.annotation.FieldSetter
6+
import xyz.jpenilla.reflectionremapper.proxy.annotation.Proxies
77

8-
@SurfProxy(Item::class)
8+
@Proxies(Item::class)
99
interface V1_21_11ItemProxy {
10-
@Field("components", Field.Type.SETTER, overrideFinal = true)
10+
@FieldSetter("components")
1111
fun setComponents(item: Item, components: DataComponentMap)
1212
}

surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/resources/META-INF/services/dev.slne.surf.api.paper.nms.common.NmsProvider

Lines changed: 0 additions & 1 deletion
This file was deleted.

surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/V26_1NmsProvider.kt

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@ import dev.slne.surf.api.paper.nms.bridges.packets.entity.SurfPaperNmsSpawnPacke
1010
import dev.slne.surf.api.paper.nms.bridges.packets.player.SurfPaperNmsPlayerChatPackets
1111
import dev.slne.surf.api.paper.nms.bridges.packets.player.SurfPaperNmsPlayerPackets
1212
import dev.slne.surf.api.paper.nms.bridges.packets.player.SurfPaperNmsPlayerToastPackets
13-
import dev.slne.surf.api.paper.nms.common.GlowingLifecycleHandler
14-
import dev.slne.surf.api.paper.nms.common.NmsPacketBridgeHandler
15-
import dev.slne.surf.api.paper.nms.common.NmsProvider
16-
import dev.slne.surf.api.paper.nms.common.NmsVersion
17-
import dev.slne.surf.api.paper.nms.common.PacketLoreRegistry
13+
import dev.slne.surf.api.paper.nms.common.*
1814
import dev.slne.surf.api.paper.packet.listener.listener.PacketListener
1915
import dev.slne.surf.api.paper.region.TickThreadGuard
2016
import dev.slne.surf.api.paper.server.nms.v26_1.bridges.*
@@ -40,24 +36,47 @@ class V26_1NmsProvider : NmsProvider {
4036
private var glowingApi: V26_1SurfGlowingApiImpl? = null
4137

4238
override fun createNmsBridge(): SurfPaperNmsBridge = V26_1SurfPaperNmsBridgeImpl()
43-
override fun createCommonBridge(): SurfPaperNmsCommonBridge = V26_1SurfPaperNmsCommonBridgeImpl()
44-
override fun createEntityBridge(): SurfPaperNmsEntityBridge = V26_1SurfPaperNmsEntityBridgeImpl()
39+
override fun createCommonBridge(): SurfPaperNmsCommonBridge =
40+
V26_1SurfPaperNmsCommonBridgeImpl()
41+
42+
override fun createEntityBridge(): SurfPaperNmsEntityBridge =
43+
V26_1SurfPaperNmsEntityBridgeImpl()
44+
4545
override fun createItemBridge(): SurfPaperNmsItemBridge = V26_1SurfPaperNmsItemBridgeImpl()
4646
override fun createNbtBridge(): SurfPaperNmsNbtBridge = V26_1SurfPaperNmsNbtBridgeImpl()
47-
override fun createGlowingBridge(): SurfPaperNmsGlowingBridge = V26_1SurfPaperNmsGlowingBridgeImpl()
47+
override fun createGlowingBridge(): SurfPaperNmsGlowingBridge =
48+
V26_1SurfPaperNmsGlowingBridgeImpl()
49+
4850
override fun createStatsBridge(): SurfPaperNmsStatsBridge = V26_1SurfPaperNmsStatsBridgeImpl()
49-
override fun createLootTableBridge(): SurfPaperNmsLootTableBridge = V26_1SurfPaperNmsLootTableBridgeImpl()
50-
override fun createCommandArgumentTypesBridge(): SurfPaperNmsCommandArgumentTypesBridge = V26_1SurfPaperNmsCommandArgumentTypesBridgeImpl()
51-
override fun createPacketBridges(): SurfPaperNmsPacketBridges = V26_1SurfPaperNmsPacketBridgesImpl()
52-
override fun createBlockPackets(): SurfPaperNmsBlockPackets = V26_1SurfPaperNmsBlockPacketsImpl()
53-
override fun createSpawnPackets(): SurfPaperNmsSpawnPackets = V26_1SurfPaperNmsSpawnPacketsImpl()
54-
override fun createPlayerPackets(): SurfPaperNmsPlayerPackets = V26_1SurfPaperNmsPlayerPacketsImpl()
55-
override fun createPlayerChatPackets(): SurfPaperNmsPlayerChatPackets = V26_1SurfPaperNmsPlayerChatPacketsImpl()
56-
override fun createPlayerToastPackets(): SurfPaperNmsPlayerToastPackets = V26_1SurfPaperNmsPlayerToastPacketsImpl()
51+
override fun createLootTableBridge(): SurfPaperNmsLootTableBridge =
52+
V26_1SurfPaperNmsLootTableBridgeImpl()
53+
54+
override fun createCommandArgumentTypesBridge(): SurfPaperNmsCommandArgumentTypesBridge =
55+
V26_1SurfPaperNmsCommandArgumentTypesBridgeImpl()
56+
57+
override fun createPacketBridges(): SurfPaperNmsPacketBridges =
58+
V26_1SurfPaperNmsPacketBridgesImpl()
59+
60+
override fun createBlockPackets(): SurfPaperNmsBlockPackets =
61+
V26_1SurfPaperNmsBlockPacketsImpl()
62+
63+
override fun createSpawnPackets(): SurfPaperNmsSpawnPackets =
64+
V26_1SurfPaperNmsSpawnPacketsImpl()
65+
66+
override fun createPlayerPackets(): SurfPaperNmsPlayerPackets =
67+
V26_1SurfPaperNmsPlayerPacketsImpl()
68+
69+
override fun createPlayerChatPackets(): SurfPaperNmsPlayerChatPackets =
70+
V26_1SurfPaperNmsPlayerChatPacketsImpl()
71+
72+
override fun createPlayerToastPackets(): SurfPaperNmsPlayerToastPackets =
73+
V26_1SurfPaperNmsPlayerToastPacketsImpl()
74+
5775
override fun createTickThreadGuard(): TickThreadGuard = V26_1TickThreadGuard()
5876
override fun createPacketBridgeHandler(): NmsPacketBridgeHandler = V26_1NmsPacketBridgeHandler()
5977
override fun createPacketLoreRegistry(): PacketLoreRegistry = V26_1PacketLoreRegistry()
60-
override fun createGlowingLifecycleHandler(): GlowingLifecycleHandler = V26_1GlowingLifecycleHandler()
78+
override fun createGlowingLifecycleHandler(): GlowingLifecycleHandler =
79+
V26_1GlowingLifecycleHandler()
6180

6281
override fun createGlowingApi(): SurfGlowingApi {
6382
val plugin = JavaPlugin.getProvidingPlugin(V26_1NmsProvider::class.java) as JavaPlugin

surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/resources/META-INF/services/dev.slne.surf.api.paper.nms.common.NmsProvider

Lines changed: 0 additions & 1 deletion
This file was deleted.

surf-api-paper/surf-api-paper-server/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ dependencies {
2222

2323
paperweight.paperDevBundle(libs.paper.api.get().version)
2424

25-
// Version-specific NMS modules (runtime only - loaded via ServiceLoader)
26-
runtimeOnly(projects.surfApiPaper.surfApiPaperNms.surfApiPaperNmsV261)
2725
runtimeOnly(projects.surfApiPaper.surfApiPaperNms.surfApiPaperNmsV12111)
26+
runtimeOnly(projects.surfApiPaper.surfApiPaperNms.surfApiPaperNmsV261)
2827

2928
compileOnly(libs.placeholder.api)
3029

0 commit comments

Comments
 (0)