This commit is contained in:
Bixilon 2022-10-23 18:17:49 +02:00
parent 7235b0828e
commit 4959be8415
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
5 changed files with 68 additions and 0 deletions

View File

@ -10,6 +10,7 @@ import de.bixilon.pixlyzer.generator.generators.variants.FrogVariantGenerator
object Generators {
val GENERATORS: List<Generator> = mutableListOf(
FeatureGenerator,
MessageTypeGenerator,
ArgumentTypeGenerator,
SoundGroupGenerator,

View File

@ -2,6 +2,7 @@ package de.bixilon.pixlyzer.generator.generators
import de.bixilon.pixlyzer.EntitySpawner
import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.generator.generators.FeatureGenerator.serializeFeatureSet
import de.bixilon.pixlyzer.generator.generators.VoxelShapeGenerator.serialize
import de.bixilon.pixlyzer.util.ReflectionUtil.getClass
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
@ -122,14 +123,18 @@ object BlockGenerator : Generator(
Blocks.WATER, Blocks.BUBBLE_COLUMN, Blocks.CAULDRON, waterCauldronBlock -> {
blockData["tint"] = "minecraft:water_tint"
}
Blocks.SUGAR_CANE -> {
blockData["tint"] = "minecraft:sugar_cane_tint"
}
Blocks.LILY_PAD -> {
blockData["tint"] = "minecraft:lily_pad_tint"
}
}
REQUIRED_FEATURES?.get(block)?.serializeFeatureSet()?.let { blockData["features"] = it }
for (state in stateMap[block]!!) {
val stateData = compound()
@ -400,6 +405,8 @@ object BlockGenerator : Generator(
private val VELOCITY_MULTIPLIER_FIELD = getField(Block::class.java, "velocityMultiplier")
private val JUMP_VELOCITY_MULTIPLIER_FIELD = getField(Block::class.java, "jumpVelocityMultiplier")
private val REQUIRED_FEATURES = getField(getClass("net.minecraft.block.AbstractBlock"), "requiredFeatures")
init {
BLOCK_STATE_CACHE_FIELD.isAccessible = true

View File

@ -3,6 +3,7 @@ package de.bixilon.pixlyzer.generator.generators
import de.bixilon.pixlyzer.EntitySpawner
import de.bixilon.pixlyzer.PixLyzer
import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.generator.generators.FeatureGenerator.serializeFeatureSet
import de.bixilon.pixlyzer.util.ReflectionUtil.getClass
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
import de.bixilon.pixlyzer.util.ReflectionUtil.getGetter
@ -47,6 +48,8 @@ object EntityGenerator : Generator(
entityType.getLootTableId()?.let {
entityData["loot_table"] = it.toString()
}
REQUIRED_FEATURES?.get(entityType)?.serializeFeatureSet()?.let { entityData["features"] = it }
getEntitySize(entityType).let {
entityData["width"] = it.first
@ -240,6 +243,8 @@ object EntityGenerator : Generator(
private val ENTITY_WIDTH_FIELD = getField(EntityType::class.java, "field_17488")
private val ENTITY_HEIGHT_FIELD = getField(EntityType::class.java, "field_17489")
private val REQUIRED_FEATURES = getField(EntityType::class.java, "requiredFeatures")
private fun getEntitySize(entityType: EntityType<*>): Triple<Float, Float, Boolean?> {
ENTITY_DIMENSION_CLASS?.let {
val dimension = ENTITY_DIMENSION_FIELD!!.get(entityType)

View File

@ -0,0 +1,50 @@
package de.bixilon.pixlyzer.generator.generators
import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.util.ReflectionUtil.getClass
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
import de.bixilon.pixlyzer.util.Util.compound
import net.minecraft.util.Identifier
object FeatureGenerator : Generator(
"features",
allowEmpty = true,
) {
private val FEATURE_MANAGER = getField(getClass("net.minecraft.resource.featuretoggle.FeatureFlags"), "FEATURE_MANAGER")?.get(null)
private val FEATURE_SET = getClass("net.minecraft.resource.featuretoggle.FeatureSet")
private val FEATURE_SET_UNIVERSE = getField(FEATURE_SET, "universe")
private val FEATURE_SET_MASK = getField(FEATURE_SET, "featuresMask")
override fun generate() {
if (FEATURE_MANAGER == null) {
return
}
val map = getField(FEATURE_MANAGER::class.java, "featureFlags")!!.get(FEATURE_MANAGER) as Map<Identifier, Any>
var index = 0
for ((identifier, flag) in map) {
val data = compound()
data["id"] = index++
data["mask"] = getField(flag::class.java, "mask")!!.getLong(flag)
data["universe"] = getField(flag::class.java, "universe")!!.get(flag).toString()
this.data[identifier.toString()] = data
}
}
fun Any?.serializeFeatureSet(): Any? {
if (this == null) {
return null
}
val mask = FEATURE_SET_MASK!!.getLong(this)
if (mask == 0L) {
return null
}
val universe = FEATURE_SET_UNIVERSE!!.get(this).toString()
return mapOf(
"universe" to universe,
"mask" to mask,
)
}
}

View File

@ -2,6 +2,7 @@ package de.bixilon.pixlyzer.generator.generators
import de.bixilon.pixlyzer.PixLyzer
import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.generator.generators.FeatureGenerator.serializeFeatureSet
import de.bixilon.pixlyzer.generator.generators.enums.CreativeInventoryTabGenerator
import de.bixilon.pixlyzer.util.ReflectionUtil.getClass
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
@ -51,6 +52,8 @@ object ItemGenerator : Generator(
}
// itemData["default_destroy_speed"] = item.getDestroySpeed(ItemStack.EMPTY, Registry.BLOCK.get(Registry.BLOCK.defaultKey.defaultBlockState()))
REQUIRED_FEATURES?.get(item)?.serializeFeatureSet()?.let { itemData["features"] = it }
if (item is BlockItem) {
itemData["block"] = Registry.BLOCK.getRawId(item.block)
@ -264,6 +267,8 @@ object ItemGenerator : Generator(
private val SPAWN_EGG_ITEM_ENTITY_TYPE_FIELD = SpawnEggItem::class.java.getDeclaredField("type")
private val ARMOR_ITEM_KNOCKBACK_RESISTANCE = getField(ArmorItem::class.java, "knockbackResistance")
private val REQUIRED_FEATURES = getField(Item::class.java, "requiredFeatures")
init {
DIGGER_ITEM_BLOCKS_FIELD.isAccessible = true
DIGGER_ITEM_SPEED_FIELD.isAccessible = true