From f1bde0a49eb14af9bc829929a233f6071ea33c06 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 22 Mar 2021 21:31:17 +0100 Subject: [PATCH] shapes: remove some duplicates --- .../generator/generators/BlockGenerator.kt | 34 ++++++++++++++----- .../generators/VoxelShapeGenerator.kt | 7 ++-- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt index e9d2ef2..16338b1 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt @@ -19,7 +19,7 @@ import net.minecraft.world.phys.shapes.VoxelShape object BlockGenerator : Generator( "blocks" ) { - val VOXEL_SHAPES: MutableList = mutableListOf() + val VOXEL_SHAPES: MutableMap> = mutableMapOf() override fun generate() { val stateMap: MutableMap> = mutableMapOf() @@ -282,8 +282,20 @@ object BlockGenerator : Generator( for (voxelShape in it) { occlusionJson.add(getOrAddVoxelShape(voxelShape)) } + val firstFace = occlusionJson[0].asInt + var allTheSame = true + for (face in occlusionJson) { + if (face.asInt != firstFace) { + allTheSame = false + break + } + } + if (allTheSame) { + stateData.addProperty("occlusion_shapes", firstFace) + } else { + stateData.add("occlusion_shapes", occlusionJson) + } - stateData.add("occlusion_shapes", occlusionJson) } (CACHE_COLLISION_SHAPES_FIELD.get(cache) as VoxelShape?)?.let { @@ -318,17 +330,21 @@ object BlockGenerator : Generator( } } - val PROPERTY_METHOD = getClass("net.minecraft.world.level.block.state.properties.Property")!! + private val PROPERTY_METHOD = getClass("net.minecraft.world.level.block.state.properties.Property")!! - val PROPERTY_NAME_METHOD = PROPERTY_METHOD.getDeclaredMethod("getName") + private val PROPERTY_NAME_METHOD = PROPERTY_METHOD.getDeclaredMethod("getName") private fun getOrAddVoxelShape(voxelShape: VoxelShape): Int { - if (VOXEL_SHAPES.contains(voxelShape)) { - return VOXEL_SHAPES.indexOf(voxelShape) + val string = voxelShape.toString() + VOXEL_SHAPES[string]?.let { + return it.first } - val index = VOXEL_SHAPES.size - VOXEL_SHAPES.add(voxelShape) - return index + + val pair = Pair(VOXEL_SHAPES.size, voxelShape) + + VOXEL_SHAPES[string] = pair + println(voxelShape) + return pair.first } private fun allTheSame(array: BooleanArray): Boolean { diff --git a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/VoxelShapeGenerator.kt b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/VoxelShapeGenerator.kt index a0e8c7f..aad6989 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/VoxelShapeGenerator.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/VoxelShapeGenerator.kt @@ -9,12 +9,13 @@ import net.minecraft.world.phys.shapes.VoxelShape object VoxelShapeGenerator : Generator( "shapes" ) { - val AABBS: MutableList = mutableListOf() + private val AABBS: MutableList = mutableListOf() override fun generate() { val shapes = JsonArray() - for (shape in BlockGenerator.VOXEL_SHAPES) { - shapes.add(shape.serialize()) + for ((_, shape) in BlockGenerator.VOXEL_SHAPES) { + println("Shape ${shape.first}") + shapes.add(shape.second.serialize()) } data.add("shapes", shapes)