diff --git a/common/src/main/kotlin/juuxel/adorn/client/gui/screen/GuideBookScreen.kt b/common/src/main/kotlin/juuxel/adorn/client/gui/screen/GuideBookScreen.kt index ce56e69f4..ea735ff5e 100644 --- a/common/src/main/kotlin/juuxel/adorn/client/gui/screen/GuideBookScreen.kt +++ b/common/src/main/kotlin/juuxel/adorn/client/gui/screen/GuideBookScreen.kt @@ -33,6 +33,7 @@ import net.minecraft.text.Style import net.minecraft.text.Text import kotlin.math.max +// TODO: Fix dark foreground (also other screens if needed) class GuideBookScreen(private val book: Book) : Screen(NarratorManager.EMPTY) { private lateinit var flipBook: FlipBook private lateinit var previousPageButton: PageTurnWidget diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/Adorn.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/Adorn.kt index b0b56d1ce..cc35d1eae 100644 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/Adorn.kt +++ b/forge/src/main/kotlin/juuxel/adorn/platform/forge/Adorn.kt @@ -40,7 +40,7 @@ class Adorn { AdornRecipes.RECIPE_TYPES.registerToBus(MOD_BUS) AdornLootConditionTypes.LOOT_CONDITION_TYPES.registerToBus(MOD_BUS) AdornLootFunctionTypes.LOOT_FUNCTION_TYPES.registerToBus(MOD_BUS) - AdornNetworking.init() + MOD_BUS.register(AdornNetworking) AdornCriteria.init() AdornCriteria.CRITERIA.registerToBus(MOD_BUS) ItemEvents.register(MOD_BUS) diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/MenuBridgeImpl.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/MenuBridgeImpl.kt index 19e4499ba..e0e0d4c72 100644 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/MenuBridgeImpl.kt +++ b/forge/src/main/kotlin/juuxel/adorn/platform/forge/MenuBridgeImpl.kt @@ -11,7 +11,6 @@ import net.minecraft.network.PacketByteBuf import net.minecraft.server.network.ServerPlayerEntity import net.minecraft.util.math.BlockPos import net.neoforged.neoforge.common.extensions.IMenuTypeExtension -import net.neoforged.neoforge.network.NetworkHooks object MenuBridgeImpl : MenuBridge { private val LOGGER = logger() @@ -23,7 +22,7 @@ object MenuBridgeImpl : MenuBridge { } if (player is ServerPlayerEntity) { - NetworkHooks.openScreen(player, factory, pos) + player.openMenu(factory, pos) } } diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/NetworkBridgeImpl.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/NetworkBridgeImpl.kt index 82ea2d71e..7f3671dd2 100644 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/NetworkBridgeImpl.kt +++ b/forge/src/main/kotlin/juuxel/adorn/platform/forge/NetworkBridgeImpl.kt @@ -2,7 +2,6 @@ package juuxel.adorn.platform.forge import juuxel.adorn.fluid.FluidReference import juuxel.adorn.platform.NetworkBridge -import juuxel.adorn.platform.forge.networking.AdornNetworking import juuxel.adorn.platform.forge.networking.BrewerFluidSyncS2CMessage import juuxel.adorn.platform.forge.networking.OpenBookS2CMessage import net.minecraft.entity.Entity @@ -14,17 +13,17 @@ import net.neoforged.neoforge.network.PacketDistributor object NetworkBridgeImpl : NetworkBridge { override fun sendToTracking(entity: Entity, packet: Packet<*>) = - PacketDistributor.TRACKING_ENTITY.with { entity }.send(packet) + PacketDistributor.TRACKING_ENTITY.with(entity).send(packet) override fun sendOpenBookPacket(player: PlayerEntity, bookId: Identifier) { if (player is ServerPlayerEntity) { - AdornNetworking.CHANNEL.send(PacketDistributor.PLAYER.with { player }, OpenBookS2CMessage(bookId)) + PacketDistributor.PLAYER.with(player).send(OpenBookS2CMessage(bookId)) } } override fun sendBrewerFluidSync(player: PlayerEntity, syncId: Int, fluid: FluidReference) { if (player is ServerPlayerEntity) { - AdornNetworking.CHANNEL.send(PacketDistributor.PLAYER.with { player }, BrewerFluidSyncS2CMessage(syncId, fluid.createSnapshot())) + PacketDistributor.PLAYER.with(player).send(BrewerFluidSyncS2CMessage(syncId, fluid.createSnapshot())) } } } diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/client/ClientNetworkBridgeForge.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/client/ClientNetworkBridgeForge.kt index f688b8ecb..ed15fb94d 100644 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/client/ClientNetworkBridgeForge.kt +++ b/forge/src/main/kotlin/juuxel/adorn/platform/forge/client/ClientNetworkBridgeForge.kt @@ -1,12 +1,12 @@ package juuxel.adorn.platform.forge.client import juuxel.adorn.client.ClientNetworkBridge -import juuxel.adorn.platform.forge.networking.AdornNetworking import juuxel.adorn.platform.forge.networking.SetTradeStackC2SMessage import net.minecraft.item.ItemStack +import net.neoforged.neoforge.network.PacketDistributor class ClientNetworkBridgeForge : ClientNetworkBridge { override fun sendSetTradeStack(syncId: Int, slotId: Int, stack: ItemStack) { - AdornNetworking.CHANNEL.sendToServer(SetTradeStackC2SMessage(syncId, slotId, stack)) + PacketDistributor.SERVER.noArg().send(SetTradeStackC2SMessage(syncId, slotId, stack)) } } diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/AdornNetworking.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/AdornNetworking.kt index f3402dfd6..91adbed5b 100644 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/AdornNetworking.kt +++ b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/AdornNetworking.kt @@ -5,69 +5,51 @@ import juuxel.adorn.client.gui.screen.BrewerScreen import juuxel.adorn.menu.TradingStationMenu import juuxel.adorn.platform.forge.client.AdornClient import net.minecraft.client.MinecraftClient -import net.minecraft.network.PacketByteBuf import net.neoforged.api.distmarker.Dist +import net.neoforged.bus.api.SubscribeEvent import net.neoforged.fml.DistExecutor -import net.neoforged.neoforge.network.INetworkDirection -import net.neoforged.neoforge.network.NetworkEvent -import net.neoforged.neoforge.network.NetworkRegistry -import net.neoforged.neoforge.network.PlayNetworkDirection -import java.util.Optional +import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent +import net.neoforged.neoforge.network.handling.PlayPayloadContext import java.util.concurrent.Callable +import java.util.function.Consumer object AdornNetworking { - private const val PROTOCOL = "3" - val CHANNEL = NetworkRegistry.newSimpleChannel( - AdornCommon.id("main"), - { PROTOCOL }, - PROTOCOL::equals, - PROTOCOL::equals - ) - - private var nextId = 0 - - @Suppress("INACCESSIBLE_TYPE") - private inline fun register( - noinline decoder: (PacketByteBuf) -> M, - noinline listener: (M, NetworkEvent.Context) -> Unit, - direction: INetworkDirection<*> - ) { - CHANNEL.registerMessage(nextId++, M::class.java, Message::write, decoder, listener, Optional.of(direction)) - } - - fun init() { - register(OpenBookS2CMessage::fromPacket, this::handleBookOpen, PlayNetworkDirection.PLAY_TO_CLIENT) - register(BrewerFluidSyncS2CMessage::fromPacket, this::handleBrewerFluidSync, PlayNetworkDirection.PLAY_TO_CLIENT) - register(SetTradeStackC2SMessage::fromPacket, this::handleSetTradeStack, PlayNetworkDirection.PLAY_TO_SERVER) + val OPEN_BOOK = AdornCommon.id("open_book") + val BREWER_FLUID_SYNC = AdornCommon.id("brewer_fluid_sync") + val SET_TRADE_STACK = AdornCommon.id("set_trade_stack") + + @SubscribeEvent + fun register(event: RegisterPayloadHandlerEvent) { + val registrar = event.registrar(AdornCommon.NAMESPACE) + registrar.play(OPEN_BOOK, OpenBookS2CMessage::fromPacket, Consumer { it.client(this::handleBookOpen) }) + registrar.play(BREWER_FLUID_SYNC, BrewerFluidSyncS2CMessage::fromPacket, Consumer { it.client(this::handleBrewerFluidSync) }) + registrar.play(SET_TRADE_STACK, SetTradeStackC2SMessage::fromPacket, Consumer { it.server(this::handleSetTradeStack) }) } - private fun handleBookOpen(message: OpenBookS2CMessage, context: NetworkEvent.Context) { - context.enqueueWork { + private fun handleBookOpen(message: OpenBookS2CMessage, context: PlayPayloadContext) { + context.workHandler.execute { DistExecutor.unsafeCallWhenOn(Dist.CLIENT) { Callable { AdornClient.openBookScreen(message.bookId) } } } - context.packetHandled = true } - private fun handleBrewerFluidSync(message: BrewerFluidSyncS2CMessage, context: NetworkEvent.Context) { - context.enqueueWork { + private fun handleBrewerFluidSync(message: BrewerFluidSyncS2CMessage, context: PlayPayloadContext) { + context.workHandler.execute { DistExecutor.unsafeCallWhenOn(Dist.CLIENT) { Callable { BrewerScreen.setFluidFromPacket(MinecraftClient.getInstance(), message.syncId, message.fluid) } } } - context.packetHandled = true } - private fun handleSetTradeStack(message: SetTradeStackC2SMessage, context: NetworkEvent.Context) { - context.enqueueWork { - val sender = context.sender!! + private fun handleSetTradeStack(message: SetTradeStackC2SMessage, context: PlayPayloadContext) { + context.workHandler.execute { + val sender = context.player.orElseThrow() val menu = sender.menu if (menu.syncId == message.syncId && menu is TradingStationMenu) { menu.updateTradeStack(message.slotId, message.stack, sender) } } - context.packetHandled = true } } diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/BrewerFluidSyncS2CMessage.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/BrewerFluidSyncS2CMessage.kt index 5b8758528..e69fd4d57 100644 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/BrewerFluidSyncS2CMessage.kt +++ b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/BrewerFluidSyncS2CMessage.kt @@ -2,8 +2,12 @@ package juuxel.adorn.platform.forge.networking import juuxel.adorn.fluid.FluidVolume import net.minecraft.network.PacketByteBuf +import net.minecraft.network.packet.CustomPayload +import net.minecraft.util.Identifier + +data class BrewerFluidSyncS2CMessage(val syncId: Int, val fluid: FluidVolume) : CustomPayload { + override fun id(): Identifier = AdornNetworking.BREWER_FLUID_SYNC -data class BrewerFluidSyncS2CMessage(val syncId: Int, val fluid: FluidVolume) : Message { override fun write(buf: PacketByteBuf) { buf.writeByte(syncId) fluid.write(buf) diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/Message.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/Message.kt deleted file mode 100644 index 45f43cae3..000000000 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/Message.kt +++ /dev/null @@ -1,7 +0,0 @@ -package juuxel.adorn.platform.forge.networking - -import net.minecraft.network.PacketByteBuf - -interface Message { - fun write(buf: PacketByteBuf) -} diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/OpenBookS2CMessage.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/OpenBookS2CMessage.kt index 03ebb74f7..d810a162b 100644 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/OpenBookS2CMessage.kt +++ b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/OpenBookS2CMessage.kt @@ -1,9 +1,12 @@ package juuxel.adorn.platform.forge.networking import net.minecraft.network.PacketByteBuf +import net.minecraft.network.packet.CustomPayload import net.minecraft.util.Identifier -data class OpenBookS2CMessage(val bookId: Identifier) : Message { +data class OpenBookS2CMessage(val bookId: Identifier) : CustomPayload { + override fun id(): Identifier = AdornNetworking.OPEN_BOOK + override fun write(buf: PacketByteBuf) { buf.writeIdentifier(bookId) } diff --git a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/SetTradeStackC2SMessage.kt b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/SetTradeStackC2SMessage.kt index 00e9f41ba..0409655db 100644 --- a/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/SetTradeStackC2SMessage.kt +++ b/forge/src/main/kotlin/juuxel/adorn/platform/forge/networking/SetTradeStackC2SMessage.kt @@ -2,8 +2,12 @@ package juuxel.adorn.platform.forge.networking import net.minecraft.item.ItemStack import net.minecraft.network.PacketByteBuf +import net.minecraft.network.packet.CustomPayload +import net.minecraft.util.Identifier + +data class SetTradeStackC2SMessage(val syncId: Int, val slotId: Int, val stack: ItemStack) : CustomPayload { + override fun id(): Identifier = AdornNetworking.SET_TRADE_STACK -data class SetTradeStackC2SMessage(val syncId: Int, val slotId: Int, val stack: ItemStack) : Message { override fun write(buf: PacketByteBuf) { buf.writeVarInt(syncId) buf.writeVarInt(slotId) diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index f13935724..85e6c27bd 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -19,10 +19,10 @@ config = "mixins.adorn.forge.json" [[dependencies.adorn]] modId = "minecraft" -mandatory = true +type = "required" versionRange = "[1.20.4,1.21)" [[dependencies.adorn]] modId = "neoforge" -mandatory = true +type = "required" versionRange="[20.4.27-beta,)" diff --git a/gradle.properties b/gradle.properties index d2cfd554a..373e32860 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,7 +22,7 @@ fabric-api = 0.91.2+1.20.4 fabric-kotlin = 1.10.16+kotlin.1.9.21 # NeoForge -neoforge-version = 20.4.27-beta +neoforge-version = 20.4.108-beta # Non-mod library dependencies jankson = 1.2.1