1.20 blocks: extract replaceable and requiresTool

This commit is contained in:
Bixilon 2023-04-30 17:21:51 +02:00
parent cb8273ab55
commit 3369d48d6e
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 12 additions and 6 deletions

@ -1 +1 @@
Subproject commit a0d489e919bd62e169474e34cf60dfdfebeb6954
Subproject commit 728e6e6adf0e4586067bfb595ce43232e00c302c

View File

@ -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 {

View File

@ -44,7 +44,7 @@ object MaterialGenerator : Generator(
if (CLASS == null) return HashBiMap.create()
val materials: HashBiMap<Identifier, Any> = HashBiMap.create()
for (field in CLASS.declaredFields) {
if (field.type != CLASS) {
if (field.type.name != CLASS.name) {
continue
}
if (!Modifier.isStatic(field.modifiers)) {