mirror of
https://gitlab.bixilon.de/bixilon/pixlyzer.git
synced 2025-09-26 05:34:14 -04:00
features
This commit is contained in:
parent
7235b0828e
commit
4959be8415
@ -10,6 +10,7 @@ import de.bixilon.pixlyzer.generator.generators.variants.FrogVariantGenerator
|
||||
|
||||
object Generators {
|
||||
val GENERATORS: List<Generator> = mutableListOf(
|
||||
FeatureGenerator,
|
||||
MessageTypeGenerator,
|
||||
ArgumentTypeGenerator,
|
||||
SoundGroupGenerator,
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user