Get rid of matterymodelbuilder (because it is useless)

This commit is contained in:
DBotThePony 2023-01-28 18:18:46 +07:00
parent 845550e7a2
commit fd9b74cebe
Signed by: DBot
GPG Key ID: DCC23B5715498507
4 changed files with 7 additions and 226 deletions

View File

@ -1,11 +1,11 @@
package ru.dbotthepony.mc.otm.datagen package ru.dbotthepony.mc.otm.datagen
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.world.level.block.PressurePlateBlock
import net.minecraft.world.level.block.SlabBlock import net.minecraft.world.level.block.SlabBlock
import net.minecraft.world.level.block.StairBlock import net.minecraft.world.level.block.StairBlock
import net.minecraft.world.level.block.WallBlock import net.minecraft.world.level.block.WallBlock
import net.minecraft.world.level.block.state.properties.BlockStateProperties import net.minecraft.world.level.block.state.properties.BlockStateProperties
import net.minecraftforge.client.model.generators.BlockModelBuilder
import net.minecraftforge.client.model.generators.ConfiguredModel import net.minecraftforge.client.model.generators.ConfiguredModel
import net.minecraftforge.client.model.generators.ModelFile import net.minecraftforge.client.model.generators.ModelFile
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
@ -15,7 +15,6 @@ import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.datagen.blocks.MatteryBlockStateProvider import ru.dbotthepony.mc.otm.datagen.blocks.MatteryBlockStateProvider
import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider
import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider
import ru.dbotthepony.mc.otm.datagen.models.MatteryModelBuilder
import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.registry.MBlocks
import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MItems
import ru.dbotthepony.mc.otm.registry.MNames import ru.dbotthepony.mc.otm.registry.MNames
@ -181,8 +180,8 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
DataGen.decorativeCubeAll(MBlocks.DANGER_STRIPE_BLOCK) DataGen.decorativeCubeAll(MBlocks.DANGER_STRIPE_BLOCK)
DataGen.decorativeColumn(MBlocks.METAL_BEAM, "metal_beam_side", "metal_beam_top") DataGen.decorativeColumn(MBlocks.METAL_BEAM, "metal_beam_side", "metal_beam_top")
var labLampOn: MatteryModelBuilder? = null var labLampOn: BlockModelBuilder? = null
var labLampOff: MatteryModelBuilder? = null var labLampOff: BlockModelBuilder? = null
blockModelProvider.exec { blockModelProvider.exec {
val top = ResourceLocation(DataGen.MOD_ID, "block/decorative/metal_beam_top") val top = ResourceLocation(DataGen.MOD_ID, "block/decorative/metal_beam_top")

View File

@ -9,30 +9,5 @@ fun addBlockModels(provider: MatteryBlockModelProvider) {
resourceCubeAll(MBlocks.TRITANIUM_RAW_BLOCK) resourceCubeAll(MBlocks.TRITANIUM_RAW_BLOCK)
resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE) resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE)
resourceCubeAll(MBlocks.TRITANIUM_INGOT_BLOCK) resourceCubeAll(MBlocks.TRITANIUM_INGOT_BLOCK)
exec {
copy("block/battery/battery1", "block/battery/battery0").also { it.offset(-4f, 0f, 0f) }
copy("block/battery/battery2", "block/battery/battery0").also { it.offset(-8f, 0f, 0f) }
copy("block/battery/battery3", "block/battery/battery0").also { it.offset(0f, 6f, 0f) }
copy("block/battery/battery4", "block/battery/battery0").also { it.offset(-4f, 6f, 0f) }
copy("block/battery/battery5", "block/battery/battery0").also { it.offset(-8f, 6f, 0f) }
copy("block/battery/battery7", "block/battery/battery6").also { it.offset(4f, 0f, 0f) }
copy("block/battery/battery8", "block/battery/battery6").also { it.offset(8f, 0f, 0f) }
copy("block/battery/battery9", "block/battery/battery6").also { it.offset(0f, 6f, 0f) }
copy("block/battery/battery10", "block/battery/battery6").also { it.offset(4f, 6f, 0f) }
copy("block/battery/battery11", "block/battery/battery6").also { it.offset(8f, 6f, 0f) }
for (i in 0 .. 11) {
withExistingParent("block/battery/matter_capacitor$i", ResourceLocation(ru.dbotthepony.mc.otm.datagen.DataGen.MOD_ID, "block/battery/battery$i"))
.texture("1", "block/matterybank_core")
}
for (i in 1 .. 7) {
copy("block/pattern/model$i", "block/pattern/model0").also { it.offset(-2f * i, 0f, 0f) }
}
}
} }
} }

View File

@ -1,164 +0,0 @@
package ru.dbotthepony.mc.otm.datagen.models
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.google.gson.JsonPrimitive
import net.minecraft.client.renderer.block.model.BlockModel
import net.minecraft.core.Direction
import net.minecraft.resources.ResourceLocation
import net.minecraftforge.client.model.generators.ModelBuilder
import net.minecraftforge.common.data.ExistingFileHelper
import org.joml.Vector3f
import ru.dbotthepony.mc.otm.container.set
import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.core.set
data class TextureSize(val width: Float, val height: Float) {
constructor(arr: JsonArray) : this(arr[0].asFloat, arr[1].asFloat)
init {
require(width > 0f) { "Invalid width $width" }
require(height > 0f) { "Invalid width $height" }
}
}
class MatteryModelBuilder(resourceLocation: ResourceLocation, existingFileHelper: ExistingFileHelper) : ModelBuilder<MatteryModelBuilder>(resourceLocation, existingFileHelper) {
var textureSize: TextureSize? = null
fun fromJson(input: JsonObject) {
input["parent"]?.let {
parent(ExistingModelFile(ResourceLocation(it.asString), existingFileHelper))
}
input["ambientocclusion"]?.let {
ambientOcclusion = it.asBoolean
}
input["gui_light"]?.let {
guiLight = BlockModel.GuiLight.valueOf(it.asString)
}
(input["texture_size"] as? JsonArray)?.let {
textureSize = TextureSize(it)
}
(input["textures"] as? JsonObject)?.let {
for ((k, v) in it.entrySet()) {
texture(k, v.asString)
}
}
(input["elements"] as? JsonArray)?.let {
var i = -1
for (value in it) {
i++
check(value is JsonObject) { "Encountered invalid element at $i" }
element().fromJson(value)
}
}
}
override fun toJson(): JsonObject {
return super.toJson().also {
val textureSize = textureSize
if (textureSize != null) {
it["texture_size"] = JsonArray().also {
it.add(textureSize.width)
it.add(textureSize.height)
}
}
}
}
override fun element(): MatteryModelElement {
check(customLoader == null) { "Can not use custom loaders and elements at the same time" }
return MatteryModelElement().also(elements::add)
}
override fun element(index: Int): MatteryModelElement {
return super.element(index) as MatteryModelElement
}
fun offset(x: Float, y: Float, z: Float) {
for (element in elements) {
(element as MatteryModelElement).offset(x, y, z)
}
}
fun offset(value: Vector3f) {
for (element in elements) {
(element as MatteryModelElement).offset(value)
}
}
inner class MatteryModelElement : ElementBuilder() {
private var from: Vector3f = Vector3f()
private var to: Vector3f = Vector3f(16f, 16f, 16f)
fun from(value: Vector3f) = from(value.x(), value.y(), value.z())
fun to(value: Vector3f) = to(value.x(), value.y(), value.z())
override fun from(x: Float, y: Float, z: Float): MatteryModelElement {
from = Vector3f(x, y, z)
super.from(x, y, z)
return this
}
override fun to(x: Float, y: Float, z: Float): MatteryModelElement {
to = Vector3f(x, y, z)
super.to(x, y, z)
return this
}
fun offset(x: Float, y: Float, z: Float): MatteryModelElement {
from(x + from.x(), y + from.y(), z + from.z())
return to(x + to.x(), y + to.y(), z + to.z())
}
fun offset(value: Vector3f) = offset(value.x(), value.y(), value.z())
fun fromJson(input: JsonObject) {
val from = input["from"] as JsonArray
val to = input["to"] as JsonArray
from(from[0].asFloat, from[1].asFloat, from[2].asFloat)
to(to[0].asFloat, to[1].asFloat, to[2].asFloat)
(input["faces"] as? JsonObject)?.let {
for ((k, v) in it.entrySet()) {
with(face(Direction.valueOf(k.uppercase()))) {
check(v is JsonObject) { "Element has invalid face at $k" }
(v["uv"] as? JsonArray)?.also { uv ->
check(uv.size() == 4) { "Element at $k has invalid number of uvs ${uv.size()}" }
uvs(uv[0].asFloat, uv[1].asFloat, uv[2].asFloat, uv[3].asFloat)
}
(v["rotation"] as? JsonPrimitive)?.also { rotation ->
when (rotation.asInt) {
90 -> rotation(FaceRotation.CLOCKWISE_90)
-90, 270 -> rotation(FaceRotation.COUNTERCLOCKWISE_90)
180, -180 -> rotation(FaceRotation.UPSIDE_DOWN)
else -> rotation(FaceRotation.ZERO)
}
}
(v["emissivity"] as? JsonPrimitive)?.asInt?.also { emissivity ->
emissivity(emissivity, 0)
}
(v["ao"] as? JsonPrimitive)?.asBoolean?.also { ao ->
ao(ao)
}
(v["texture"] as? JsonPrimitive)?.also {
texture(it.asString)
}
}
}
}
}
}
}

View File

@ -6,44 +6,17 @@ import net.minecraft.resources.ResourceLocation
import net.minecraft.server.packs.PackType import net.minecraft.server.packs.PackType
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.DoorBlock import net.minecraft.world.level.block.DoorBlock
import net.minecraftforge.client.model.generators.BlockModelProvider
import net.minecraftforge.client.model.generators.ModelProvider import net.minecraftforge.client.model.generators.ModelProvider
import net.minecraftforge.data.event.GatherDataEvent import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.datagen.DataGen import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.core.registryName import ru.dbotthepony.mc.otm.core.registryName
import java.util.LinkedList import java.util.LinkedList
private typealias Callback = (MatteryModelProvider) -> Unit class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(event.generator.packOutput, DataGen.MOD_ID, event.existingFileHelper) {
private val callbacks = LinkedList<(MatteryBlockModelProvider) -> Unit>()
sealed class MatteryModelProvider(event: GatherDataEvent, folder: String) : ModelProvider<MatteryModelBuilder>(event.generator.packOutput, DataGen.MOD_ID, folder, ::MatteryModelBuilder, event.existingFileHelper) { fun exec(callback: (MatteryBlockModelProvider) -> Unit) {
private fun extendWithFolder(rl: ResourceLocation): ResourceLocation {
return if (rl.path.contains("/")) rl else ResourceLocation(rl.namespace, folder + "/" + rl.path)
}
fun copy(destination: String, source: String): MatteryModelBuilder {
val destinationLocation = extendWithFolder(if (destination.contains(":")) ResourceLocation(destination) else ResourceLocation(modid, destination))
val sourceLocation = extendWithFolder(if (source.contains(":")) ResourceLocation("models/$source.json") else ResourceLocation(modid, "models/$source.json"))
check(!generatedModels.containsKey(destinationLocation)) { "Model provider already contains model $destinationLocation" }
existingFileHelper.trackGenerated(destinationLocation, MODEL)
return factory.apply(destinationLocation).also {
generatedModels[destinationLocation] = it
val resource = existingFileHelper.getResource(sourceLocation, PackType.CLIENT_RESOURCES)
val stream = resource.open()
val reader = stream.reader()
try {
it.fromJson(JsonParser.parseReader(reader) as JsonObject)
} finally {
reader.close()
stream.close()
}
}
}
private val callbacks = LinkedList<Callback>()
fun exec(callback: Callback) {
callbacks.add(callback) callbacks.add(callback)
} }
@ -52,9 +25,7 @@ sealed class MatteryModelProvider(event: GatherDataEvent, folder: String) : Mode
callback(this) callback(this)
} }
} }
}
class MatteryBlockModelProvider(event: GatherDataEvent) : MatteryModelProvider(event, BLOCK_FOLDER) {
override fun getName(): String { override fun getName(): String {
return "Block Models: $modid" return "Block Models: $modid"
} }