extract fuel

This commit is contained in:
Bixilon 2022-05-03 20:26:18 +02:00
parent 5995cb7a29
commit befd41203d
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 37 additions and 2 deletions

View File

@ -7,9 +7,14 @@ import de.bixilon.mbf.MBFDataInfo
import de.bixilon.pixlyzer.exceptions.GeneratorSkipException import de.bixilon.pixlyzer.exceptions.GeneratorSkipException
import de.bixilon.pixlyzer.generator.Generators import de.bixilon.pixlyzer.generator.Generators
import de.bixilon.pixlyzer.util.ReflectionUtil.getClass 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.getGetter
import de.bixilon.pixlyzer.util.ReflectionUtil.invoke
import de.bixilon.pixlyzer.util.ReflectionUtil.variable
import de.bixilon.pixlyzer.util.Util import de.bixilon.pixlyzer.util.Util
import net.minecraft.Bootstrap import net.minecraft.Bootstrap
import net.minecraft.tag.ItemTags
import net.minecraft.tag.Tag
import net.minecraft.util.registry.Registry import net.minecraft.util.registry.Registry
import java.io.* import java.io.*
import java.util.* import java.util.*
@ -61,6 +66,12 @@ object PixLyzer {
Util.forceClassInit(Registry::class.java) Util.forceClassInit(Registry::class.java)
getField(ItemTags::class.java, "REQUIRED_TAGS")?.get(null)?.variable<Iterable<Any>>("tags")?.let {
for (tag in it) {
getField(tag::class.java, "delegate")!!.set(tag, Tag::class.java.invoke("of", arrayOf(Set::class.java), arrayOf(setOf<Any>())))
}
}
println("Class loading done in ${System.currentTimeMillis() - classesLoadStartTime}ms") println("Class loading done in ${System.currentTimeMillis() - classesLoadStartTime}ms")

View File

@ -4,17 +4,22 @@ import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.util.Util.nullCast import de.bixilon.pixlyzer.util.Util.nullCast
import net.minecraft.block.Blocks import net.minecraft.block.Blocks
import net.minecraft.block.FireBlock import net.minecraft.block.FireBlock
import net.minecraft.block.entity.AbstractFurnaceBlockEntity
import net.minecraft.util.registry.Registry import net.minecraft.util.registry.Registry
object MiscGenerator : Generator( object MiscGenerator : Generator(
"misc" "misc"
) { ) {
override fun generate() {
private fun generateBurnChances() {
"fire_burn_chances".add { "fire_burn_chances".add {
for ((block, chance) in Blocks.FIRE.nullCast<FireBlock>()!!.burnChances) { for ((block, chance) in Blocks.FIRE.nullCast<FireBlock>()!!.burnChances) {
it[Registry.BLOCK.getRawId(block)] = chance it[Registry.BLOCK.getRawId(block)] = chance
} }
} }
}
private fun generateSpreadChances() {
"fire_spread_chances".add { "fire_spread_chances".add {
for ((block, chance) in Blocks.FIRE.nullCast<FireBlock>()!!.spreadChances) { for ((block, chance) in Blocks.FIRE.nullCast<FireBlock>()!!.spreadChances) {
it[Registry.BLOCK.getRawId(block)] = chance 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<Any, Any>) -> Unit) { fun String.add(generator: (json: MutableMap<Any, Any>) -> Unit) {
val json: MutableMap<Any, Any> = mutableMapOf() val json: MutableMap<Any, Any> = mutableMapOf()

View File

@ -62,8 +62,9 @@ object ReflectionUtil {
} }
fun <T> Any.invoke(name: String, types: Array<Class<*>> = arrayOf(), parameters: Array<Any> = arrayOf()): T? { fun <T> Any.invoke(name: String, types: Array<Class<*>> = arrayOf(), parameters: Array<Any> = arrayOf()): T? {
val clazz = if (this is Class<*>) this else this::class.java
val method = try { val method = try {
this::class.java.getMethod(name, *types) clazz.getMethod(name, *types)
} catch (exception: NoSuchMethodException) { } catch (exception: NoSuchMethodException) {
return null return null
} }
@ -73,4 +74,8 @@ object ReflectionUtil {
fun <T> Any.variable(vararg names: String): T? { fun <T> Any.variable(vararg names: String): T? {
return getField(this::class.java, *names)?.get(this) as T? return getField(this::class.java, *names)?.get(this) as T?
} }
fun <T> Any.invokeGetter(vararg names: String): T? {
return getGetter(this::class.java, *names)?.invoke(this) as T?
}
} }