add fabric data generation we are SO back

This commit is contained in:
2026-04-18 22:40:14 -03:00
parent 4fb35c5080
commit 2c97ab6409
5 changed files with 91 additions and 30 deletions

View File

@@ -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 {
@@ -257,3 +258,14 @@ 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()
}
}
}

View File

@@ -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,7 +46,8 @@ 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()
}
@@ -54,6 +59,7 @@ object NeoComputers {
ClientLifecycleEvent.CLIENT_STOPPING.register {
ScreenRenderer.cleanUnboundTex()
}
}}
TickEvent.SERVER_POST.register {
Networking.tickAllNodes()
@@ -69,7 +75,8 @@ 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()
@@ -86,6 +93,14 @@ object NeoComputers {
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)
}}
LOGGER.info("Registered!")
//LOGGER.info("Started mod in %s loader".formatted(NeoComputersInit.PLATFORM.getModloader()))

View File

@@ -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) {
}
}

View File

@@ -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) }
}
}

View File

@@ -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": [