From 2c97ab6409229c5b00fe64e2e866a29f9bf6d7f1 Mon Sep 17 00:00:00 2001 From: nicejs-is-cool Date: Sat, 18 Apr 2026 22:40:14 -0300 Subject: [PATCH] add fabric data generation we are SO back --- build.gradle.kts | 14 +++- .../org/neoflock/neocomputers/NeoComputers.kt | 69 +++++++++++-------- .../neocomputers/datagen/ModelGenerator.kt | 18 +++++ .../datagen/NeoComputersDataGenerator.kt | 13 ++++ src/main/resources/fabric.mod.json | 7 +- 5 files changed, 91 insertions(+), 30 deletions(-) create mode 100644 src/main/kotlin/org/neoflock/neocomputers/datagen/ModelGenerator.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/datagen/NeoComputersDataGenerator.kt diff --git a/build.gradle.kts b/build.gradle.kts index 029ad1d..f3d9417 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -66,7 +66,8 @@ dependencies { //some features (like automatic resource loading from non vanilla namespaces) work only with fabric API installed //for example translations from assets/modid/lang/en_us.json won't be working, same stuff with textures //but we keep runtime only to not accidentally depend on fabric's api, because it doesn't exist in neo/forge - modRuntimeOnly("net.fabricmc.fabric-api:fabric-api:${mod.dep("fabric_version")}") + //modRuntimeOnly("net.fabricmc.fabric-api:fabric-api:${mod.dep("fabric_version")}") + modImplementation("net.fabricmc.fabric-api:fabric-api:${mod.dep("fabric_version")}") modImplementation("net.fabricmc:fabric-language-kotlin:1.13.10+kotlin.2.3.20") modApi("dev.architectury:architectury-fabric:${archversion}") fun getTeamRebornEnergy(): String { @@ -256,4 +257,15 @@ tasks.processResources { tasks.build { group = "versioned" description = "Must run through 'chiseledBuild'" +} +if (loader == "fabric") { + fabricApi { + if (minecraftVersionToNum(minecraft) > minecraftVersionToNum("1.21.4")) { + configureDataGeneration() { + client = true + } + } else { + configureDataGeneration() + } + } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt index 6866e65..eaa12c6 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt @@ -3,6 +3,7 @@ package org.neoflock.neocomputers import dev.architectury.event.events.client.ClientLifecycleEvent import dev.architectury.event.events.common.PlayerEvent import dev.architectury.event.events.common.TickEvent +import dev.architectury.impl.NetworkAggregator import dev.architectury.networking.NetworkManager import net.minecraft.resources.ResourceLocation import org.neoflock.neocomputers.block.Blocks @@ -11,8 +12,11 @@ import org.neoflock.neocomputers.gui.buffer.BufferRenderer import org.neoflock.neocomputers.gui.menu.Menus import org.neoflock.neocomputers.gui.screen.ScreenScreen import dev.architectury.registry.menu.MenuRegistry +import dev.architectury.utils.Env +import dev.architectury.utils.EnvExecutor import net.minecraft.client.Minecraft import net.minecraft.client.player.LocalPlayer +import net.minecraft.network.protocol.common.custom.CustomPacketPayload import net.minecraft.server.level.ServerPlayer import org.neoflock.neocomputers.block.NodeBlock import org.neoflock.neocomputers.block.NodeBlockEntity @@ -42,18 +46,20 @@ object NeoComputers { BlockEntities.registerPowerBlocks() Menus.MENUS.register() Tabs.TABS.register() + // i dont know why architectury wants two lambdas but whatever + EnvExecutor.runInEnv(Env.CLIENT) {{ + ClientLifecycleEvent.CLIENT_SETUP.register { + Menus.registerScreens() + } + ClientLifecycleEvent.CLIENT_STARTED.register { + FontProvider.load(ResourceLocation.fromNamespaceAndPath(MODID, "font/unscii.hex")) + ScreenRenderer.genUnboundTex(); + } - ClientLifecycleEvent.CLIENT_SETUP.register { - Menus.registerScreens() - } - ClientLifecycleEvent.CLIENT_STARTED.register { - FontProvider.load(ResourceLocation.fromNamespaceAndPath(MODID, "font/unscii.hex")) - ScreenRenderer.genUnboundTex(); - } - - ClientLifecycleEvent.CLIENT_STOPPING.register { - ScreenRenderer.cleanUnboundTex() - } + ClientLifecycleEvent.CLIENT_STOPPING.register { + ScreenRenderer.cleanUnboundTex() + } + }} TickEvent.SERVER_POST.register { Networking.tickAllNodes() @@ -69,24 +75,33 @@ object NeoComputers { player -> NodeSynchronizer.playerScreenClosed(player) } + // we have to do this because the datagen task runs in the physical server + EnvExecutor.runInEnv(Env.CLIENT) {{ + NetworkManager.registerReceiver(NetworkManager.s2c(),NodeSynchronizer.StatePayload.TYPE, NodeSynchronizer.StatePayload.CODEC, { + packet, ctx -> + val level = ctx.player.level() + val ent = level.getBlockEntity(packet.blockPos) + if(ent is NodeBlockEntity) { + ent.syncWithUpstream(packet.buffer) + } + }) + + NetworkManager.registerReceiver(NetworkManager.s2c(),NodeSynchronizer.ScreenPayload.TYPE, NodeSynchronizer.ScreenPayload.CODEC, { + packet, ctx -> + val scr = Minecraft.getInstance().screen + if(scr is GenericContainerScreen<*>) { + scr.processScreenStatePacket(packet.buffer) + } + }) + }} + EnvExecutor.runInEnv(Env.SERVER) {{ + // https://github.com/architectury/architectury-api/issues/518 + NetworkManager.registerS2CPayloadType(NodeSynchronizer.StatePayload.TYPE, NodeSynchronizer.StatePayload.CODEC) + NetworkManager.registerS2CPayloadType(NodeSynchronizer.ScreenPayload.TYPE, NodeSynchronizer.ScreenPayload.CODEC) + + }} - NetworkManager.registerReceiver(NetworkManager.s2c(),NodeSynchronizer.StatePayload.TYPE, NodeSynchronizer.StatePayload.CODEC, { - packet, ctx -> - val level = ctx.player.level() - val ent = level.getBlockEntity(packet.blockPos) - if(ent is NodeBlockEntity) { - ent.syncWithUpstream(packet.buffer) - } - }) - NetworkManager.registerReceiver(NetworkManager.s2c(),NodeSynchronizer.ScreenPayload.TYPE, NodeSynchronizer.ScreenPayload.CODEC, { - packet, ctx -> - val scr = Minecraft.getInstance().screen - if(scr is GenericContainerScreen<*>) { - scr.processScreenStatePacket(packet.buffer) - } - }) - LOGGER.info("Registered!") //LOGGER.info("Started mod in %s loader".formatted(NeoComputersInit.PLATFORM.getModloader())) //LOGGER.info("Kotlin: %s".formatted(NeoComputers.hello())) diff --git a/src/main/kotlin/org/neoflock/neocomputers/datagen/ModelGenerator.kt b/src/main/kotlin/org/neoflock/neocomputers/datagen/ModelGenerator.kt new file mode 100644 index 0000000..fcee1ef --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/datagen/ModelGenerator.kt @@ -0,0 +1,18 @@ +package org.neoflock.neocomputers.datagen + +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput +import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider +import net.minecraft.data.models.BlockModelGenerators +import net.minecraft.data.models.ItemModelGenerators +import org.neoflock.neocomputers.block.Blocks + +class ModelGenerator(output: FabricDataOutput) : FabricModelProvider(output) { + override fun generateBlockStateModels(blockStateModelGenerator: BlockModelGenerators) { + blockStateModelGenerator.createGenericCube(Blocks.CASE_BLOCK.get()) + + } + + override fun generateItemModels(itemModelGenerator: ItemModelGenerators) { + } + +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/datagen/NeoComputersDataGenerator.kt b/src/main/kotlin/org/neoflock/neocomputers/datagen/NeoComputersDataGenerator.kt new file mode 100644 index 0000000..4a6d4a0 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/datagen/NeoComputersDataGenerator.kt @@ -0,0 +1,13 @@ +package org.neoflock.neocomputers.datagen + +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput +import org.neoflock.neocomputers.NeoComputers + +class NeoComputersDataGenerator : DataGeneratorEntrypoint { + override fun onInitializeDataGenerator(generator: FabricDataGenerator) { + val pack: FabricDataGenerator.Pack = generator.createPack() + pack.addProvider { o -> ModelGenerator(o as FabricDataOutput) } + } +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ef52a50..e9b07a5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -13,11 +13,14 @@ "icon": "assets/${id}/icon.png", "environment": "*", "entrypoints": { - "main": [ - "org.neoflock.neocomputers.platforms.fabric.NeoComputersFabric" + "fabric-datagen": [ + "org.neoflock.neocomputers.datagen.NeoComputersDataGenerator" ], "modmenu": [ "org.neoflock.neocomputers.platforms.fabric.ModMenuIntegration" + ], + "main": [ + "org.neoflock.neocomputers.platforms.fabric.NeoComputersFabric" ] }, "mixins": [