Get rid of matterymodelbuilder (because it is useless)
This commit is contained in:
parent
845550e7a2
commit
fd9b74cebe
@ -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")
|
||||||
|
@ -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) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user