mirror of
https://gitlab.bixilon.de/bixilon/pixlyzer.git
synced 2025-09-27 14:10:01 -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 {
|
object Generators {
|
||||||
val GENERATORS: List<Generator> = mutableListOf(
|
val GENERATORS: List<Generator> = mutableListOf(
|
||||||
|
FeatureGenerator,
|
||||||
MessageTypeGenerator,
|
MessageTypeGenerator,
|
||||||
ArgumentTypeGenerator,
|
ArgumentTypeGenerator,
|
||||||
SoundGroupGenerator,
|
SoundGroupGenerator,
|
||||||
|
@ -2,6 +2,7 @@ package de.bixilon.pixlyzer.generator.generators
|
|||||||
|
|
||||||
import de.bixilon.pixlyzer.EntitySpawner
|
import de.bixilon.pixlyzer.EntitySpawner
|
||||||
import de.bixilon.pixlyzer.generator.Generator
|
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.generator.generators.VoxelShapeGenerator.serialize
|
||||||
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.getField
|
||||||
@ -122,14 +123,18 @@ object BlockGenerator : Generator(
|
|||||||
Blocks.WATER, Blocks.BUBBLE_COLUMN, Blocks.CAULDRON, waterCauldronBlock -> {
|
Blocks.WATER, Blocks.BUBBLE_COLUMN, Blocks.CAULDRON, waterCauldronBlock -> {
|
||||||
blockData["tint"] = "minecraft:water_tint"
|
blockData["tint"] = "minecraft:water_tint"
|
||||||
}
|
}
|
||||||
|
|
||||||
Blocks.SUGAR_CANE -> {
|
Blocks.SUGAR_CANE -> {
|
||||||
blockData["tint"] = "minecraft:sugar_cane_tint"
|
blockData["tint"] = "minecraft:sugar_cane_tint"
|
||||||
}
|
}
|
||||||
|
|
||||||
Blocks.LILY_PAD -> {
|
Blocks.LILY_PAD -> {
|
||||||
blockData["tint"] = "minecraft:lily_pad_tint"
|
blockData["tint"] = "minecraft:lily_pad_tint"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REQUIRED_FEATURES?.get(block)?.serializeFeatureSet()?.let { blockData["features"] = it }
|
||||||
|
|
||||||
|
|
||||||
for (state in stateMap[block]!!) {
|
for (state in stateMap[block]!!) {
|
||||||
val stateData = compound()
|
val stateData = compound()
|
||||||
@ -400,6 +405,8 @@ object BlockGenerator : Generator(
|
|||||||
private val VELOCITY_MULTIPLIER_FIELD = getField(Block::class.java, "velocityMultiplier")
|
private val VELOCITY_MULTIPLIER_FIELD = getField(Block::class.java, "velocityMultiplier")
|
||||||
private val JUMP_VELOCITY_MULTIPLIER_FIELD = getField(Block::class.java, "jumpVelocityMultiplier")
|
private val JUMP_VELOCITY_MULTIPLIER_FIELD = getField(Block::class.java, "jumpVelocityMultiplier")
|
||||||
|
|
||||||
|
private val REQUIRED_FEATURES = getField(getClass("net.minecraft.block.AbstractBlock"), "requiredFeatures")
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
BLOCK_STATE_CACHE_FIELD.isAccessible = true
|
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.EntitySpawner
|
||||||
import de.bixilon.pixlyzer.PixLyzer
|
import de.bixilon.pixlyzer.PixLyzer
|
||||||
import de.bixilon.pixlyzer.generator.Generator
|
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.getClass
|
||||||
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
|
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
|
||||||
import de.bixilon.pixlyzer.util.ReflectionUtil.getGetter
|
import de.bixilon.pixlyzer.util.ReflectionUtil.getGetter
|
||||||
@ -47,6 +48,8 @@ object EntityGenerator : Generator(
|
|||||||
entityType.getLootTableId()?.let {
|
entityType.getLootTableId()?.let {
|
||||||
entityData["loot_table"] = it.toString()
|
entityData["loot_table"] = it.toString()
|
||||||
}
|
}
|
||||||
|
REQUIRED_FEATURES?.get(entityType)?.serializeFeatureSet()?.let { entityData["features"] = it }
|
||||||
|
|
||||||
|
|
||||||
getEntitySize(entityType).let {
|
getEntitySize(entityType).let {
|
||||||
entityData["width"] = it.first
|
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_WIDTH_FIELD = getField(EntityType::class.java, "field_17488")
|
||||||
private val ENTITY_HEIGHT_FIELD = getField(EntityType::class.java, "field_17489")
|
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?> {
|
private fun getEntitySize(entityType: EntityType<*>): Triple<Float, Float, Boolean?> {
|
||||||
ENTITY_DIMENSION_CLASS?.let {
|
ENTITY_DIMENSION_CLASS?.let {
|
||||||
val dimension = ENTITY_DIMENSION_FIELD!!.get(entityType)
|
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.PixLyzer
|
||||||
import de.bixilon.pixlyzer.generator.Generator
|
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.generator.generators.enums.CreativeInventoryTabGenerator
|
||||||
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.getField
|
||||||
@ -51,6 +52,8 @@ object ItemGenerator : Generator(
|
|||||||
}
|
}
|
||||||
// itemData["default_destroy_speed"] = item.getDestroySpeed(ItemStack.EMPTY, Registry.BLOCK.get(Registry.BLOCK.defaultKey.defaultBlockState()))
|
// 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) {
|
if (item is BlockItem) {
|
||||||
itemData["block"] = Registry.BLOCK.getRawId(item.block)
|
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 SPAWN_EGG_ITEM_ENTITY_TYPE_FIELD = SpawnEggItem::class.java.getDeclaredField("type")
|
||||||
private val ARMOR_ITEM_KNOCKBACK_RESISTANCE = getField(ArmorItem::class.java, "knockbackResistance")
|
private val ARMOR_ITEM_KNOCKBACK_RESISTANCE = getField(ArmorItem::class.java, "knockbackResistance")
|
||||||
|
|
||||||
|
private val REQUIRED_FEATURES = getField(Item::class.java, "requiredFeatures")
|
||||||
|
|
||||||
init {
|
init {
|
||||||
DIGGER_ITEM_BLOCKS_FIELD.isAccessible = true
|
DIGGER_ITEM_BLOCKS_FIELD.isAccessible = true
|
||||||
DIGGER_ITEM_SPEED_FIELD.isAccessible = true
|
DIGGER_ITEM_SPEED_FIELD.isAccessible = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user