From 752a2b695b14afdb06a0f99f5d885a48133350ee Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Wed, 12 Aug 2026 22:45:25 +0100 Subject: [PATCH] Convert drone model to JSON --- .../opencomputers/models/item/drone.json | 69 ++++++++++++++++++- .../oc/client/renderer/block/DroneModel.scala | 44 ------------ .../renderer/block/ModelInitialization.scala | 1 - .../renderer/block/SmartBlockModelBase.scala | 17 +---- 4 files changed, 69 insertions(+), 62 deletions(-) delete mode 100644 src/main/scala/li/cil/oc/client/renderer/block/DroneModel.scala diff --git a/src/main/resources/assets/opencomputers/models/item/drone.json b/src/main/resources/assets/opencomputers/models/item/drone.json index 43a272a605..72089de8c2 100644 --- a/src/main/resources/assets/opencomputers/models/item/drone.json +++ b/src/main/resources/assets/opencomputers/models/item/drone.json @@ -1,3 +1,70 @@ { - "parent": "builtin/entity" + "parent": "minecraft:block/block", + "textures": { + "all": "opencomputers:item/drone", + "particle": "opencomputers:item/drone" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 9, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [8, 7.5, 8]}, + "faces": { + "north": {"uv": [2, 7, 6, 10], "texture": "#all"}, + "east": {"uv": [10, 7, 14, 10], "texture": "#all"}, + "south": {"uv": [10, 6, 14, 9], "texture": "#all"}, + "west": {"uv": [2, 7, 6, 10], "texture": "#all"}, + "up": {"uv": [10, 10, 6, 6], "texture": "#all"}, + "down": {"uv": [10, 6, 6, 10], "texture": "#all"} + } + }, + { + "from": [1, 7, 1], + "to": [7, 8, 7], + "faces": { + "north": {"uv": [1, 7, 7, 8], "texture": "#all"}, + "east": {"uv": [1, 7, 7, 8], "texture": "#all"}, + "south": {"uv": [1, 7, 7, 8], "texture": "#all"}, + "west": {"uv": [1, 7, 7, 8], "texture": "#all"}, + "up": {"uv": [7, 7, 1, 1], "texture": "#all"}, + "down": {"uv": [7, 1, 1, 7], "texture": "#all"} + } + }, + { + "from": [1, 7, 9], + "to": [7, 8, 15], + "faces": { + "north": {"uv": [1, 8, 7, 9], "texture": "#all"}, + "east": {"uv": [1, 8, 7, 9], "texture": "#all"}, + "south": {"uv": [1, 8, 7, 9], "texture": "#all"}, + "west": {"uv": [1, 8, 7, 9], "texture": "#all"}, + "up": {"uv": [7, 15, 1, 9], "texture": "#all"}, + "down": {"uv": [7, 9, 1, 15], "texture": "#all"} + } + }, + { + "from": [9, 7, 1], + "to": [15, 8, 7], + "faces": { + "north": {"uv": [9, 7, 15, 8], "texture": "#all"}, + "east": {"uv": [9, 7, 15, 8], "texture": "#all"}, + "south": {"uv": [9, 7, 15, 8], "texture": "#all"}, + "west": {"uv": [9, 7, 15, 8], "texture": "#all"}, + "up": {"uv": [15, 7, 9, 1], "texture": "#all"}, + "down": {"uv": [15, 1, 9, 7], "texture": "#all"} + } + }, + { + "from": [9, 7, 9], + "to": [15, 8, 15], + "faces": { + "north": {"uv": [9, 8, 15, 9], "texture": "#all"}, + "east": {"uv": [9, 8, 15, 9], "texture": "#all"}, + "south": {"uv": [9, 8, 15, 9], "texture": "#all"}, + "west": {"uv": [9, 8, 15, 9], "texture": "#all"}, + "up": {"uv": [15, 15, 9, 9], "texture": "#all"}, + "down": {"uv": [15, 9, 9, 15], "texture": "#all"} + } + } + ] } diff --git a/src/main/scala/li/cil/oc/client/renderer/block/DroneModel.scala b/src/main/scala/li/cil/oc/client/renderer/block/DroneModel.scala deleted file mode 100644 index c66fcbaefc..0000000000 --- a/src/main/scala/li/cil/oc/client/renderer/block/DroneModel.scala +++ /dev/null @@ -1,44 +0,0 @@ -package li.cil.oc.client.renderer.block - -import java.util -import java.util.Collections - -import li.cil.oc.client.Textures -import net.minecraft.world.level.block.state.BlockState -import net.minecraft.client.renderer.block.model.BakedQuad -import net.minecraft.client.resources.model.BakedModel -import net.minecraft.client.renderer.block.model.ItemOverrides -import net.minecraft.client.multiplayer.ClientLevel -import net.minecraft.world.entity.LivingEntity -import net.minecraft.world.item.ItemStack -import net.minecraft.core.Direction -import net.minecraft.world.phys.Vec3 -import net.minecraft.util.RandomSource - -import scala.collection.mutable -import scala.jdk.CollectionConverters._ - -object DroneModel extends SmartBlockModelBase { - override def getOverrides: ItemOverrides = ItemOverride - - override def getQuads(state: BlockState, side: Direction, rand: RandomSource): util.List[BakedQuad] = { - val faces = mutable.ArrayBuffer.empty[BakedQuad] - faces ++= Boxes.flatMap(box => bakeQuads(box, Array.fill(6)(droneTexture), White).toSeq) - faces.asJava - } - - protected def droneTexture = Textures.getSprite(Textures.Item.DroneItem) - - protected def Boxes = Array( - makeBox(new Vec3(1f / 16f, 7f / 16f, 1f / 16f), new Vec3(7f / 16f, 8f / 16f, 7f / 16f)), - makeBox(new Vec3(1f / 16f, 7f / 16f, 9f / 16f), new Vec3(7f / 16f, 8f / 16f, 15f / 16f)), - makeBox(new Vec3(9f / 16f, 7f / 16f, 1f / 16f), new Vec3(15f / 16f, 8f / 16f, 7f / 16f)), - makeBox(new Vec3(9f / 16f, 7f / 16f, 9f / 16f), new Vec3(15f / 16f, 8f / 16f, 15f / 16f)), - rotateBox(makeBox(new Vec3(6f / 16f, 6f / 16f, 6f / 16f), new Vec3(10f / 16f, 9f / 16f, 10f / 16f)), 45) - ) - - object ItemOverride extends ItemOverrides { - override def resolve(originalModel: BakedModel, stack: ItemStack, world: ClientLevel, entity: LivingEntity, seed: Int): BakedModel = - DroneModel - } -} diff --git a/src/main/scala/li/cil/oc/client/renderer/block/ModelInitialization.scala b/src/main/scala/li/cil/oc/client/renderer/block/ModelInitialization.scala index d1bb39463b..1c0be3d5bb 100644 --- a/src/main/scala/li/cil/oc/client/renderer/block/ModelInitialization.scala +++ b/src/main/scala/li/cil/oc/client/renderer/block/ModelInitialization.scala @@ -63,7 +63,6 @@ object ModelInitialization { registry.put(PrintBlockLocation, PrintModel) registry.put(PrintItemLocation, PrintModel) registry.put(RobotItemLocation, RobotModel) - registry.put(loc(Constants.ItemName.Drone, "inventory"), DroneModel) val modelOverrides = Map[String, BakedModel => BakedModel]( Constants.BlockName.ScreenTier1 -> (_ => ScreenModel), diff --git a/src/main/scala/li/cil/oc/client/renderer/block/SmartBlockModelBase.scala b/src/main/scala/li/cil/oc/client/renderer/block/SmartBlockModelBase.scala index b00caad03c..7b84c6d353 100644 --- a/src/main/scala/li/cil/oc/client/renderer/block/SmartBlockModelBase.scala +++ b/src/main/scala/li/cil/oc/client/renderer/block/SmartBlockModelBase.scala @@ -18,7 +18,7 @@ import net.minecraft.client.renderer.RenderType import net.neoforged.neoforge.client.model.data.ModelData import org.joml.Vector3f -trait SmartBlockModelBase extends BakedModel { +abstract class SmartBlockModelBase extends BakedModel { override def getOverrides: ItemOverrides = ItemOverrides.EMPTY override def getQuads(state: BlockState, side: Direction, rand: RandomSource): util.List[BakedQuad] = @@ -99,21 +99,6 @@ trait SmartBlockModelBase extends BakedModel { math.max(minZ, math.min(maxZ, vertex.z))))) } - protected def rotateVector(v: Vec3, angle: Double, axis: Vec3) = { - def scale(v: Vec3, s: Double) = v.scale(s) - val cosAngle = math.cos(angle) - val sinAngle = math.sin(angle) - scale(v, cosAngle) - .add(scale(axis.cross(v), sinAngle)) - .add(scale(axis, axis.dot(v) * (1 - cosAngle))) - } - - protected def rotateFace(face: Array[Vec3], angle: Double, axis: Vec3, around: Vec3 = new Vec3(0.5, 0.5, 0.5)) = - face.map(v => rotateVector(v.subtract(around), angle, axis).add(around)) - - protected def rotateBox(box: Array[Array[Vec3]], angle: Double, axis: Vec3 = new Vec3(0, 1, 0), around: Vec3 = new Vec3(0.5, 0.5, 0.5)) = - box.map(face => rotateFace(face, angle, axis, around)) - protected def bakeQuads(box: Array[Array[Vec3]], texture: Array[TextureAtlasSprite], color: Option[Int]): Array[BakedQuad] = bakeQuads(box, texture, color.getOrElse(White))