Skip to content

Commit f64b3ee

Browse files
committed
Completed networking
1 parent e22cd62 commit f64b3ee

File tree

9 files changed

+111
-51
lines changed

9 files changed

+111
-51
lines changed

common/src/main/java/generations/gg/generations/core/generationscore/common/GenerationsImplementation.kt

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package generations.gg.generations.core.generationscore.common
22

3+
import com.cobblemon.mod.common.NetworkManager
34
import generations.gg.generations.core.generationscore.common.util.PlatformRegistry
45
import generations.gg.generations.core.generationscore.common.world.container.ExtendedMenuProvider
56
import net.minecraft.core.Registry
67
import net.minecraft.network.FriendlyByteBuf
78
import net.minecraft.network.syncher.EntityDataSerializer
89
import net.minecraft.resources.ResourceKey
910
import net.minecraft.resources.ResourceLocation
10-
import net.minecraft.server.MinecraftServer
1111
import net.minecraft.server.level.ServerPlayer
1212
import net.minecraft.server.packs.PackType
1313
import net.minecraft.server.packs.resources.PreparableReloadListener
@@ -64,15 +64,5 @@ interface GenerationsImplementation {
6464

6565
fun <T: Any> createRegistry(key: ResourceKey<Registry<T>>, sync: Boolean): Registry<T>
6666

67-
enum class ModAPI {
68-
FABRIC,
69-
FORGE
70-
}
71-
72-
val server: MinecraftServer?
73-
74-
enum class Environment {
75-
CLIENT,
76-
SERVER
77-
}
67+
val networkManager: NetworkManager
7868
}

common/src/main/java/generations/gg/generations/core/generationscore/common/network/GenerationsNetwork.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
11
package generations.gg.generations.core.generationscore.common.network
22

3+
import com.cobblemon.mod.common.api.net.NetworkPacket
34
import com.cobblemon.mod.common.client.net.spawn.SpawnExtraDataEntityHandler
45
import com.cobblemon.mod.common.net.PacketRegisterInfo
6+
import com.cobblemon.mod.common.util.server
7+
import generations.gg.generations.core.generationscore.common.GenerationsCore
58
import generations.gg.generations.core.generationscore.common.network.packets.*
69
import generations.gg.generations.core.generationscore.common.network.packets.shop.*
710
import generations.gg.generations.core.generationscore.common.network.packets.statue.S2COpenStatueEditorScreenHandler
811
import generations.gg.generations.core.generationscore.common.network.packets.statue.S2COpenStatueEditorScreenPacket
912
import generations.gg.generations.core.generationscore.common.network.packets.statue.UpdateStatueHandler
1013
import generations.gg.generations.core.generationscore.common.network.packets.statue.UpdateStatuePacket
1114
import generations.gg.generations.core.generationscore.common.network.spawn.SpawnStatuePacket
12-
import generations.gg.generations.core.generationscore.common.world.shop.ShopPresetRegistrySyncPacket
13-
import generations.gg.generations.core.generationscore.common.world.shop.ShopRegistrySyncPacket
15+
import net.minecraft.server.level.ServerPlayer
1416

1517
object GenerationsNetwork {
18+
fun ServerPlayer.sendPacket(packet: NetworkPacket<*>) {
19+
sendPacketToPlayer(this, packet)
20+
}
21+
fun sendToServer(packet: NetworkPacket<*>) {
22+
GenerationsCore.implementation.networkManager.sendToServer(packet)
23+
}
24+
fun sendToAllPlayers(packet: NetworkPacket<*>) = sendPacketToPlayers(server()!!.playerList.players, packet)
25+
fun sendPacketToPlayers(players: Iterable<ServerPlayer>, packet: NetworkPacket<*>) = players.forEach { sendPacketToPlayer(it, packet) }
1626

1727
val s2cPayloads = generateS2CPacketInfoList()
1828
val c2sPayloads = generateC2SPacketInfoList()
@@ -55,4 +65,9 @@ object GenerationsNetwork {
5565
list.add(PacketRegisterInfo(UpdateStatuePacket.ORIENTATION_ID, UpdateStatuePacket.Companion::orientationDecode, UpdateStatueHandler.Orientation))
5666
return list
5767
}
68+
69+
70+
fun sendPacketToPlayer(player: ServerPlayer, packet: NetworkPacket<*>) {
71+
GenerationsCore.implementation.networkManager.sendPacketToPlayer(player, packet)
72+
}
5873
}
Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
11
package generations.gg.generations.core.generationscore.common.network.packets
22

33
import com.cobblemon.mod.common.api.net.ClientNetworkPacketHandler
4-
import dev.architectury.utils.Env
5-
import dev.architectury.utils.EnvExecutor
4+
65
import generations.gg.generations.core.generationscore.common.client.screen.mails.MailEditScreen
76
import generations.gg.generations.core.generationscore.common.client.screen.mails.MailViewScreen
87
import generations.gg.generations.core.generationscore.common.tags.GenerationsItemTags
98
import net.minecraft.client.Minecraft
109

1110
object S2COpenMailPacketHandler : ClientNetworkPacketHandler<S2COpenMailPacket> {
1211
override fun handle(packet: S2COpenMailPacket, minecraft: Minecraft) {
13-
EnvExecutor.runInEnv(Env.CLIENT) {
14-
Runnable {
15-
val itemStack = Minecraft.getInstance().player!!.getItemInHand(packet.hand)
16-
if (itemStack.`is`(GenerationsItemTags.CLOSED_POKEMAIL)) Minecraft.getInstance().setScreen(
17-
MailViewScreen(
18-
MailViewScreen.WrittenMailAccess(itemStack)
19-
)
20-
) else if (itemStack.`is`(GenerationsItemTags.POKEMAIL)) Minecraft.getInstance().setScreen(
21-
MailEditScreen(
22-
Minecraft.getInstance().player!!,
23-
itemStack,
24-
packet.hand
25-
)
26-
)
27-
}
28-
}
12+
val itemStack = minecraft.player!!.getItemInHand(packet.hand)
13+
if (itemStack.`is`(GenerationsItemTags.CLOSED_POKEMAIL)) minecraft.setScreen(
14+
MailViewScreen(
15+
MailViewScreen.WrittenMailAccess(itemStack)
16+
)
17+
) else if (itemStack.`is`(GenerationsItemTags.POKEMAIL)) minecraft.setScreen(
18+
MailEditScreen(
19+
minecraft.player!!,
20+
itemStack,
21+
packet.hand
22+
)
23+
)
2924
}
3025
}

common/src/main/java/generations/gg/generations/core/generationscore/common/world/level/schedule/ScheduledTask.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package generations.gg.generations.core.generationscore.common.world.level.schedule
22

3-
import generations.gg.generations.core.generationscore.common.GenerationsCore
3+
import com.cobblemon.mod.common.util.server
44
import net.minecraft.server.MinecraftServer
55
import net.minecraft.world.level.timers.TimerCallback
66
import net.minecraft.world.level.timers.TimerQueue
@@ -11,7 +11,7 @@ class ScheduledTask private constructor() : TimerCallback<MinecraftServer> {
1111

1212
companion object {
1313
fun schedule(run: Runnable, triggerTime: Int) {
14-
val server = GenerationsCore.implementation.server ?: return
14+
val server = server() ?: return
1515
server.worldData.overworldData().scheduledEvents.schedule(
1616
"misc", server.overworld().gameTime + triggerTime
1717
) { _, _, _ -> run.run() }

fabric/src/main/java/generations/gg/generations/core/generationscore/fabric/GenerationsCoreFabric.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,15 @@ import java.util.function.Supplier
7676
*
7777
* @author Joseph T. McQuigg, WaterPicker
7878
*/
79-
class GenerationsCoreFabric : ModInitializer, GenerationsImplementation, PreLaunchEntrypoint {
79+
object GenerationsCoreFabric : ModInitializer, GenerationsImplementation, PreLaunchEntrypoint {
8080
private var serverBacking: MinecraftServer? = null
8181

8282
override fun onInitialize() {
8383
init(this)
84+
85+
networkManager.registerMessages()
86+
networkManager.registerServerHandlers()
87+
8488
VanillaCompat.setup()
8589

8690
if (FabricLoader.getInstance().isModLoaded("impactor")) ImpactorCompat.init()
@@ -106,9 +110,6 @@ class GenerationsCoreFabric : ModInitializer, GenerationsImplementation, PreLaun
106110
return@register InteractionEvents.fireRightClick(player, hand, hitResult.blockPos, hitResult.direction);
107111
})
108112

109-
GenerationsFabricNetwork.registerMessages()
110-
GenerationsFabricNetwork.registerServerHandlers()
111-
112113
AnvilEvents.ANVIL_CHANGE.register(AnvilChange { result, left, right, name, baseCost, player ->
113114
onAnvilChange(
114115
left, right, player,
@@ -201,6 +202,7 @@ class GenerationsCoreFabric : ModInitializer, GenerationsImplementation, PreLaun
201202
}
202203

203204
override fun <T : Any> createRegistry(key: ResourceKey<Registry<T>>, sync: Boolean): Registry<T> = FabricRegistryBuilder.createSimple(key).attribute(RegistryAttribute.SYNCED).buildAndRegister()
205+
override val networkManager: GenerationsFabricNetwork = GenerationsFabricNetwork
204206

205207
override fun registerResourceReloader(
206208
identifier: ResourceLocation,
@@ -223,9 +225,6 @@ class GenerationsCoreFabric : ModInitializer, GenerationsImplementation, PreLaun
223225
override fun getFabricDependencies(): MutableCollection<ResourceLocation> = this.dependencies.toMutableList()
224226
}
225227

226-
override val server: MinecraftServer?
227-
get() = serverBacking
228-
229228
override fun onPreLaunch() {
230229
setConfigDirectory(FabricLoader.getInstance().configDir)
231230
}

fabric/src/main/java/generations/gg/generations/core/generationscore/fabric/client/GenerationsCoreClientFabric.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import generations.gg.generations.core.generationscore.common.client.render.Rend
1616
import generations.gg.generations.core.generationscore.common.world.level.block.GenerationsBlocks
1717
import generations.gg.generations.core.generationscore.common.world.level.block.GenerationsMushroomBlock
1818
import generations.gg.generations.core.generationscore.common.world.level.block.GenerationsWood
19-
import generations.gg.generations.core.generationscore.fabric.networking.GenerationsFabricNetwork
19+
import generations.gg.generations.core.generationscore.fabric.GenerationsCoreFabric
2020
import net.fabricmc.api.ClientModInitializer
2121
import net.fabricmc.api.EnvType
2222
import net.fabricmc.api.Environment
@@ -33,13 +33,11 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRenderers
3333
import net.minecraft.client.renderer.entity.EntityRendererProvider
3434
import net.minecraft.world.entity.Entity
3535
import net.minecraft.world.entity.EntityType
36-
import net.minecraft.world.level.block.Block
3736
import net.minecraft.world.level.block.DoorBlock
3837
import net.minecraft.world.level.block.TransparentBlock
3938
import net.minecraft.world.level.block.TrapDoorBlock
4039
import net.minecraft.world.level.block.entity.BlockEntity
4140
import net.minecraft.world.level.block.entity.BlockEntityType
42-
import java.util.function.Consumer
4341

4442
/**
4543
* The client initializer for the fabric client portion of the mod.
@@ -82,7 +80,7 @@ class GenerationsCoreClientFabric : ClientModInitializer {
8280
RenderStateRecord.pop()
8381
}
8482

85-
GenerationsFabricNetwork.registerClientHandlers()
83+
GenerationsCoreFabric.networkManager.registerClientHandlers()
8684

8785
onInitialize(Minecraft.getInstance())
8886
registerRenderTypes()

fabric/src/main/java/generations/gg/generations/core/generationscore/fabric/networking/GenerationsFabricNetwork.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package generations.gg.generations.core.generationscore.fabric.networking
22

3+
import com.cobblemon.mod.common.NetworkManager
4+
import com.cobblemon.mod.common.api.net.NetworkPacket
35
import com.cobblemon.mod.fabric.net.FabricPacketInfo
46
import generations.gg.generations.core.generationscore.common.network.GenerationsNetwork
7+
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
8+
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking
9+
import net.minecraft.server.level.ServerPlayer
510

6-
object GenerationsFabricNetwork {
11+
object GenerationsFabricNetwork: NetworkManager {
712
fun registerMessages() {
813
GenerationsNetwork.s2cPayloads.map { FabricPacketInfo(it) }.forEach { it.registerPacket(true) }
914
GenerationsNetwork.c2sPayloads.map { FabricPacketInfo(it) }.forEach { it.registerPacket(false) }
@@ -16,4 +21,13 @@ object GenerationsFabricNetwork {
1621
fun registerServerHandlers() {
1722
GenerationsNetwork.c2sPayloads.map { FabricPacketInfo(it) }.forEach { it.registerServerHandler() }
1823
}
24+
25+
override fun sendPacketToPlayer(player: ServerPlayer, packet: NetworkPacket<*>) {
26+
ServerPlayNetworking.send(player, packet)
27+
}
28+
29+
override fun sendToServer(packet: NetworkPacket<*>) {
30+
ClientPlayNetworking.send(packet)
31+
}
32+
1933
}

neoforge/src/main/java/generations/gg/generations/core/generationscore/forge/GenerationsCoreForge.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package generations.gg.generations.core.generationscore.forge
22

3+
import com.cobblemon.mod.common.NetworkManager
34
import com.google.common.collect.ImmutableMap
45
import com.mojang.datafixers.util.Pair
56
import generations.gg.generations.core.generationscore.common.GenerationsCore
@@ -15,15 +16,14 @@ import generations.gg.generations.core.generationscore.common.config.ConfigLoade
1516
import generations.gg.generations.core.generationscore.common.util.PlatformRegistry
1617
import generations.gg.generations.core.generationscore.common.util.extensions.supplier
1718
import generations.gg.generations.core.generationscore.common.world.container.ExtendedMenuProvider
19+
import generations.gg.generations.core.generationscore.forge.networking.GenerationsNeoForgeNetworkManager
1820
import net.minecraft.client.Minecraft
19-
import net.minecraft.client.renderer.item.ClampedItemPropertyFunction
2021
import net.minecraft.core.Registry
2122
import net.minecraft.network.FriendlyByteBuf
2223
import net.minecraft.network.chat.Component
2324
import net.minecraft.network.syncher.EntityDataSerializer
2425
import net.minecraft.resources.ResourceKey
2526
import net.minecraft.resources.ResourceLocation
26-
import net.minecraft.server.MinecraftServer
2727
import net.minecraft.server.level.ServerPlayer
2828
import net.minecraft.server.packs.PackType
2929
import net.minecraft.server.packs.resources.PreparableReloadListener
@@ -57,7 +57,6 @@ import net.neoforged.neoforge.registries.NeoForgeRegistries
5757
import net.neoforged.neoforge.registries.NewRegistryEvent
5858
import net.neoforged.neoforge.registries.RegisterEvent
5959
import net.neoforged.neoforge.registries.RegistryBuilder
60-
import net.neoforged.neoforge.server.ServerLifecycleHooks
6160
import thedarkcolour.kotlinforforge.neoforge.forge.MOD_BUS
6261
import java.util.*
6362
import java.util.function.Consumer
@@ -96,6 +95,8 @@ class GenerationsCoreForge(MOD_BUS: IEventBus) : GenerationsImplementation {
9695
addListener(::onInitialize)
9796
addListener(::postInit)
9897

98+
addListener(GenerationsNeoForgeNetworkManager::registerMessages)
99+
99100
addListener<NewRegistryEvent> { event ->
100101
registries.forEach { event.register(it) }
101102
}
@@ -302,6 +303,5 @@ class GenerationsCoreForge(MOD_BUS: IEventBus) : GenerationsImplementation {
302303
else Minecraft.getInstance().resourceManager.instanceOrNull<ReloadableResourceManager>()?.registerReloadListener(reloader)
303304
}
304305

305-
override val server: MinecraftServer?
306-
get() = ServerLifecycleHooks.getCurrentServer()
306+
override val networkManager: NetworkManager = GenerationsNeoForgeNetworkManager
307307
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package generations.gg.generations.core.generationscore.forge.networking;
2+
3+
import com.cobblemon.mod.common.NetworkManager
4+
import com.cobblemon.mod.common.api.net.NetworkPacket
5+
import com.cobblemon.mod.neoforge.net.NeoForgePacketInfo
6+
import generations.gg.generations.core.generationscore.common.GenerationsCore
7+
import generations.gg.generations.core.generationscore.common.network.GenerationsNetwork
8+
import generations.gg.generations.core.generationscore.common.network.packets.DataRegistrySyncPacketHandler
9+
import net.minecraft.client.Minecraft
10+
import net.minecraft.resources.ResourceLocation
11+
import net.minecraft.server.level.ServerPlayer
12+
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent
13+
import net.neoforged.neoforge.network.registration.HandlerThread
14+
15+
16+
object GenerationsNeoForgeNetworkManager : NetworkManager {
17+
const val PROTOCOL_VERSION = "1.0.0"
18+
19+
fun registerMessages(event: RegisterPayloadHandlersEvent) {
20+
val registrar = event
21+
.registrar(GenerationsCore.MOD_ID)
22+
.versioned(PROTOCOL_VERSION)
23+
24+
val netRegistrar = event
25+
.registrar(GenerationsCore.MOD_ID)
26+
.versioned(PROTOCOL_VERSION)
27+
.executesOn(HandlerThread.NETWORK)
28+
29+
val syncPackets = HashSet<ResourceLocation>()
30+
val asyncPackets = HashSet<ResourceLocation>()
31+
32+
GenerationsNetwork.s2cPayloads.map { NeoForgePacketInfo(it) }.forEach {
33+
val handleAsync = it.info.handler is DataRegistrySyncPacketHandler<*, *>
34+
if (handleAsync) asyncPackets += it.info.id
35+
else syncPackets += it.info.id
36+
37+
it.registerToClient(if (handleAsync) netRegistrar else registrar)
38+
}
39+
GenerationsNetwork.c2sPayloads.map { NeoForgePacketInfo(it) }.forEach { it.registerToServer(registrar) }
40+
}
41+
42+
override fun sendPacketToPlayer(player: ServerPlayer, packet: NetworkPacket<*>) {
43+
player.connection.send(packet)
44+
}
45+
46+
override fun sendToServer(packet: NetworkPacket<*>) {
47+
Minecraft.getInstance().connection?.send(packet)
48+
}
49+
}

0 commit comments

Comments
 (0)