diff --git a/pixlyzer-physics b/pixlyzer-physics index a0d489e..728e6e6 160000 --- a/pixlyzer-physics +++ b/pixlyzer-physics @@ -1 +1 @@ -Subproject commit a0d489e919bd62e169474e34cf60dfdfebeb6954 +Subproject commit 728e6e6adf0e4586067bfb595ce43232e00c302c 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 76dc06e..b0ff854 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt @@ -63,6 +63,8 @@ object BlockGenerator : Generator( blockData["jump_velocity_multiplier"] = it } } + BLOCK_STATE_REQUIRES_TOOL?.getBoolean(block.defaultState)?.let { if (it) blockData["requires_tool"] = it } + BLOCK_STATE_REPLACEABLE?.getBoolean(block.defaultState)?.let { if (it) blockData["replaceable"] = it } blockData["default_state"] = Block.getRawIdFromState(block.defaultState) if (block.hasDynamicBounds()) { blockData["has_dynamic_shape"] = block.hasDynamicBounds() @@ -90,7 +92,7 @@ object BlockGenerator : Generator( val hasColorProperties = (TINT_PROPERTIES_METHOD?.invoke(DEFAULT_BLOCK_COLORS, block) as Set<*>?)?.size?.let { it > 0 } ?: let { val blockColorProviderList = BLOCK_COLORS_PROVIDERS_ID_LIST!!.get(DEFAULT_BLOCK_COLORS) - ID_LIST_GET_METHOD.invoke(blockColorProviderList, BlockGenerator.REGISTRY.getRawId(block)) != null + ID_LIST_GET_METHOD.invoke(blockColorProviderList, REGISTRY.getRawId(block)) != null } MATERIAL?.let { blockData["material"] = MaterialGenerator.MATERIALS.inverse()[it.invoke(block)].toString() } @@ -107,12 +109,15 @@ object BlockGenerator : Generator( Blocks.GRASS_BLOCK, Blocks.FERN, Blocks.GRASS, Blocks.POTTED_FERN -> { blockData["tint"] = "minecraft:grass_tint" } + Blocks.SPRUCE_LEAVES, Blocks.BIRCH_LEAVES, Blocks.ATTACHED_MELON_STEM, Blocks.ATTACHED_PUMPKIN_STEM -> { blockData["tint_color"] = DEFAULT_BLOCK_COLORS.getColor(block.defaultState, null, null, 1) } + Blocks.OAK_LEAVES, Blocks.JUNGLE_LEAVES, Blocks.ACACIA_LEAVES, Blocks.DARK_OAK_LEAVES, Blocks.VINE -> { blockData["tint"] = "minecraft:foliage_tint" } + Blocks.WATER, Blocks.BUBBLE_COLUMN, Blocks.CAULDRON, waterCauldronBlock -> { blockData["tint"] = "minecraft:water_tint" } @@ -162,6 +167,7 @@ object BlockGenerator : Generator( when (blockData["tint"]?.toString()) { "minecraft:foliage_tint", "minecraft:lily_pad_tint", "minecraft:grass_tint" -> { } + else -> { if (tintColor != -1 && tintColor != 0) { stateData["tint_color"] = tintColor @@ -302,8 +308,6 @@ object BlockGenerator : Generator( private val MATERIAL = getGetter(Block::class.java, "getMaterial") - private val BLOCK_GET_HARDNESS_METHOD = getClass("net.minecraft.block.AbstractBlock")?.getGetter("getHardness") - private val BLOCK_SETTINGS_FIELD = getField(getClass("net.minecraft.block.AbstractBlock"), "settings") private val BLOCK_GET_MAX_OFFSET = getGetter(getClass("net.minecraft.block.AbstractBlock"), "getMaxModelOffset") private val BLOCK_GET_OFFSET_TYPE = getClass("net.minecraft.block.AbstractBlock", "net.minecraft.block.Block")!!.getGetter("getOffsetType") @@ -342,13 +346,15 @@ object BlockGenerator : Generator( } private val BLOCK_STATE_BASE_CLASS = getClass("net.minecraft.block.AbstractBlock\$AbstractBlockState", "net.minecraft.world.level.block.state.BlockBehaviour\$BlockStateBase", "net.minecraft.world.level.block.state.BlockState", "net.minecraft.block.BlockState")!! - private val BLOCK_STATE_GET_HARDNESS_METHOD = getClass("net.minecraft.block.AbstractBlock\$AbstractBlockState", "net.minecraft.block.BlockState")!!.getMethod("getHardness", BlockView::class.java, BlockPos::class.java) private val BLOCK_STATE_OWNER_FIELD = getField(getClass("net.minecraft.state.AbstractPropertyContainer"), "owner") ?: getField(getClass("net.minecraft.state.State"), "owner") ?: getField(getClass("net.minecraft.state.AbstractState"), "owner") ?: getField(getClass("net.minecraft.world.level.block.state.AbstractStateHolder"), "owner")!! private val BLOCK_STATE_CACHE_FIELD = BLOCK_STATE_BASE_CLASS.getDeclaredField("shapeCache") private val REQUIRES_CORRECT_TOOL_FOR_DROP_FIELDS = getField(getClass("net.minecraft.block.AbstractBlock\$AbstractBlockState", "net.minecraft.block.BlockState"), "toolRequired") private val BLOCK_STATE_OFFSET_FIELD = BLOCK_STATE_BASE_CLASS.getGetter("getOffsetType", "method_43280") + private val BLOCK_STATE_REQUIRES_TOOL = getField(BLOCK_STATE_BASE_CLASS, "toolRequired") + private val BLOCK_STATE_REPLACEABLE = getField(BLOCK_STATE_BASE_CLASS, "replaceable") + private lateinit var BLOCK_STATE_CACHE_CLASS: Class<*> init { diff --git a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MaterialGenerator.kt b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MaterialGenerator.kt index 48a530f..0ff770c 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MaterialGenerator.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MaterialGenerator.kt @@ -44,7 +44,7 @@ object MaterialGenerator : Generator( if (CLASS == null) return HashBiMap.create() val materials: HashBiMap = HashBiMap.create() for (field in CLASS.declaredFields) { - if (field.type != CLASS) { + if (field.type.name != CLASS.name) { continue } if (!Modifier.isStatic(field.modifiers)) {