From befd41203d1d80fd5ef32dc6fc52d08340317421 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 3 May 2022 20:26:18 +0200 Subject: [PATCH] extract fuel --- .../kotlin/de/bixilon/pixlyzer/PixLyzer.kt | 11 ++++++++++ .../generator/generators/MiscGenerator.kt | 21 ++++++++++++++++++- .../bixilon/pixlyzer/util/ReflectionUtil.kt | 7 ++++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt b/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt index 98ff12c..ce6e789 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/PixLyzer.kt @@ -7,9 +7,14 @@ import de.bixilon.mbf.MBFDataInfo import de.bixilon.pixlyzer.exceptions.GeneratorSkipException import de.bixilon.pixlyzer.generator.Generators import de.bixilon.pixlyzer.util.ReflectionUtil.getClass +import de.bixilon.pixlyzer.util.ReflectionUtil.getField import de.bixilon.pixlyzer.util.ReflectionUtil.getGetter +import de.bixilon.pixlyzer.util.ReflectionUtil.invoke +import de.bixilon.pixlyzer.util.ReflectionUtil.variable import de.bixilon.pixlyzer.util.Util import net.minecraft.Bootstrap +import net.minecraft.tag.ItemTags +import net.minecraft.tag.Tag import net.minecraft.util.registry.Registry import java.io.* import java.util.* @@ -61,6 +66,12 @@ object PixLyzer { Util.forceClassInit(Registry::class.java) + getField(ItemTags::class.java, "REQUIRED_TAGS")?.get(null)?.variable>("tags")?.let { + for (tag in it) { + getField(tag::class.java, "delegate")!!.set(tag, Tag::class.java.invoke("of", arrayOf(Set::class.java), arrayOf(setOf()))) + } + } + println("Class loading done in ${System.currentTimeMillis() - classesLoadStartTime}ms") diff --git a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MiscGenerator.kt b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MiscGenerator.kt index 0233f45..127cbe3 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MiscGenerator.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MiscGenerator.kt @@ -4,17 +4,22 @@ import de.bixilon.pixlyzer.generator.Generator import de.bixilon.pixlyzer.util.Util.nullCast import net.minecraft.block.Blocks import net.minecraft.block.FireBlock +import net.minecraft.block.entity.AbstractFurnaceBlockEntity import net.minecraft.util.registry.Registry object MiscGenerator : Generator( "misc" ) { - override fun generate() { + + private fun generateBurnChances() { "fire_burn_chances".add { for ((block, chance) in Blocks.FIRE.nullCast()!!.burnChances) { it[Registry.BLOCK.getRawId(block)] = chance } } + } + + private fun generateSpreadChances() { "fire_spread_chances".add { for ((block, chance) in Blocks.FIRE.nullCast()!!.spreadChances) { it[Registry.BLOCK.getRawId(block)] = chance @@ -22,6 +27,20 @@ object MiscGenerator : Generator( } } + private fun generateFuelTime() { + "fuel_time".add { + for ((block, fuelTime) in AbstractFurnaceBlockEntity.createFuelTimeMap()) { + it[Registry.ITEM.getRawId(block)] = fuelTime + } + } + } + + override fun generate() { + generateBurnChances() + generateSpreadChances() + generateFuelTime() + } + fun String.add(generator: (json: MutableMap) -> Unit) { val json: MutableMap = mutableMapOf() diff --git a/src/main/kotlin/de/bixilon/pixlyzer/util/ReflectionUtil.kt b/src/main/kotlin/de/bixilon/pixlyzer/util/ReflectionUtil.kt index 200de84..47dc936 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/util/ReflectionUtil.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/util/ReflectionUtil.kt @@ -62,8 +62,9 @@ object ReflectionUtil { } fun Any.invoke(name: String, types: Array> = arrayOf(), parameters: Array = arrayOf()): T? { + val clazz = if (this is Class<*>) this else this::class.java val method = try { - this::class.java.getMethod(name, *types) + clazz.getMethod(name, *types) } catch (exception: NoSuchMethodException) { return null } @@ -73,4 +74,8 @@ object ReflectionUtil { fun Any.variable(vararg names: String): T? { return getField(this::class.java, *names)?.get(this) as T? } + + fun Any.invokeGetter(vararg names: String): T? { + return getGetter(this::class.java, *names)?.invoke(this) as T? + } }