mirror of
https://gitlab.bixilon.de/bixilon/pixlyzer.git
synced 2025-09-24 04:21:59 -04:00
more data: items, block entity, mobs, stats, ...
This commit is contained in:
parent
25ad62c612
commit
802f3a650a
@ -11,6 +11,8 @@ import java.io.FileWriter
|
||||
object PixLyzer {
|
||||
private val startTime = System.currentTimeMillis()
|
||||
|
||||
val ENTITY_META_DATA_MAPPING = Util.readJsonResource("entities_metadata_mappings.json")
|
||||
|
||||
|
||||
private val GSON = GsonBuilder()
|
||||
.create()
|
||||
|
18
src/main/kotlin/de/bixilon/pixlyzer/dummy/DummyPlayer.kt
Normal file
18
src/main/kotlin/de/bixilon/pixlyzer/dummy/DummyPlayer.kt
Normal file
@ -0,0 +1,18 @@
|
||||
package de.bixilon.pixlyzer.dummy
|
||||
|
||||
import de.bixilon.pixlyzer.dummy.chunk.DummyGameProfile
|
||||
import de.bixilon.pixlyzer.dummy.chunk.DummyLevel
|
||||
import net.minecraft.world.entity.player.Player
|
||||
|
||||
object DummyPlayer : Player(
|
||||
DummyLevel,
|
||||
DummyGameProfile
|
||||
) {
|
||||
override fun isSpectator(): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun isCreative(): Boolean {
|
||||
return false
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
package de.bixilon.pixlyzer.dummy.chunk
|
||||
|
||||
import com.mojang.authlib.GameProfile
|
||||
import java.util.*
|
||||
|
||||
object DummyGameProfile : GameProfile(UUID.randomUUID(), "dummy")
|
@ -0,0 +1,44 @@
|
||||
package de.bixilon.pixlyzer.generator
|
||||
|
||||
import com.google.gson.JsonArray
|
||||
import com.google.gson.JsonObject
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
|
||||
object BlockEntityGenerator : Generator(
|
||||
"block_entities"
|
||||
) {
|
||||
override fun generate() {
|
||||
for (blockEntityType in Registry.BLOCK_ENTITY_TYPE) {
|
||||
val resourceIdentifier = Registry.BLOCK_ENTITY_TYPE.getKey(blockEntityType)
|
||||
val blockEntityData = JsonObject()
|
||||
blockEntityData.addProperty("id", Registry.BLOCK_ENTITY_TYPE.getId(blockEntityType))
|
||||
|
||||
(BLOCK_ENTITY_VALID_BLOCKS_FIELD.get(blockEntityType) as Set<Block>).let {
|
||||
val blockTypes = JsonArray()
|
||||
|
||||
for (block in it) {
|
||||
blockTypes.add(Registry.BLOCK.getId(block))
|
||||
}
|
||||
|
||||
if (blockTypes.size() > 0) {
|
||||
blockEntityData.add("valid_blocks", blockTypes)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
val blockEntity = blockEntityType.create()!!
|
||||
|
||||
blockEntityData.addProperty("class", blockEntity::class.java.simpleName)
|
||||
|
||||
data.add(resourceIdentifier.toString(), blockEntityData)
|
||||
}
|
||||
}
|
||||
|
||||
private val BLOCK_ENTITY_VALID_BLOCKS_FIELD = BlockEntityType::class.java.getDeclaredField("validBlocks")
|
||||
|
||||
init {
|
||||
BLOCK_ENTITY_VALID_BLOCKS_FIELD.isAccessible = true
|
||||
}
|
||||
}
|
@ -49,10 +49,6 @@ object BlockGenerator : Generator(
|
||||
|
||||
val colorProperties = DEFAULT_BLOCK_COLORS.getColoringProperties(block)
|
||||
|
||||
if (resourceIdentifier.toString() == "minecraft:oak_leaves") {
|
||||
println()
|
||||
}
|
||||
|
||||
// tints
|
||||
when (block) {
|
||||
Blocks.LARGE_FERN, Blocks.TALL_GRASS -> {
|
||||
@ -111,19 +107,19 @@ object BlockGenerator : Generator(
|
||||
|
||||
try {
|
||||
val int = propertyValueName.toInt()
|
||||
propertyData.addProperty(property.name, int)
|
||||
propertyData.addProperty(property.name.toLowerCase(), int)
|
||||
continue
|
||||
} catch (exception: Exception) {
|
||||
}
|
||||
|
||||
try {
|
||||
val boolean = propertyValueName.toBoolean()
|
||||
propertyData.addProperty(property.name, boolean)
|
||||
propertyData.addProperty(property.name.toLowerCase(), boolean)
|
||||
continue
|
||||
} catch (exception: Exception) {
|
||||
}
|
||||
|
||||
propertyData.addProperty(property.name, propertyValueName)
|
||||
propertyData.addProperty(property.name.toLowerCase(), propertyValueName)
|
||||
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ object EnchantmentGenerator : Generator(
|
||||
enchantment.descriptionId?.let {
|
||||
enchantmentData.addProperty("description_id", it)
|
||||
}
|
||||
enchantmentData.addProperty("rarity", enchantment.rarity.name.toLowerCase())
|
||||
enchantmentData.addProperty("rarity", enchantment.rarity.ordinal)
|
||||
|
||||
enchantment.category?.let {
|
||||
enchantmentData.addProperty("category", it.name.toLowerCase())
|
||||
|
173
src/main/kotlin/de/bixilon/pixlyzer/generator/EntityGenerator.kt
Normal file
173
src/main/kotlin/de/bixilon/pixlyzer/generator/EntityGenerator.kt
Normal file
@ -0,0 +1,173 @@
|
||||
package de.bixilon.pixlyzer.generator
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import de.bixilon.pixlyzer.PixLyzer
|
||||
import de.bixilon.pixlyzer.dummy.DummyPlayer
|
||||
import de.bixilon.pixlyzer.dummy.chunk.DummyLevel
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.network.syncher.EntityDataAccessor
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.entity.Entity
|
||||
import net.minecraft.world.entity.EntityType
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.MobSpawnType
|
||||
import net.minecraft.world.entity.fishing.FishingHook
|
||||
import net.minecraft.world.entity.global.LightningBolt
|
||||
import net.minecraft.world.entity.monster.SharedMonsterAttributes
|
||||
|
||||
object EntityGenerator : Generator(
|
||||
"entities"
|
||||
) {
|
||||
private val entityClassMappings: MutableMap<Class<out Entity>, ResourceLocation> = mutableMapOf()
|
||||
|
||||
override fun generate() {
|
||||
for (entityType in Registry.ENTITY_TYPE) {
|
||||
val resourceIdentifier = Registry.ENTITY_TYPE.getKey(entityType)
|
||||
val entityData = JsonObject()
|
||||
entityData.addProperty("id", Registry.ENTITY_TYPE.getId(entityType))
|
||||
entityType.descriptionId?.let {
|
||||
entityData.addProperty("description_id", it)
|
||||
}
|
||||
entityData.addProperty("category", entityType.category.ordinal)
|
||||
entityData.addProperty("serialize", entityType.canSerialize())
|
||||
entityData.addProperty("summon", entityType.canSummon())
|
||||
entityData.addProperty("fire_immune", entityType.fireImmune())
|
||||
entityData.addProperty("can_spawn_far_from_player", entityType.canSpawnFarFromPlayer())
|
||||
|
||||
entityType.defaultLootTable?.let {
|
||||
entityData.addProperty("loot_table", it.toString())
|
||||
}
|
||||
|
||||
entityData.addProperty("width", entityType.dimensions.width)
|
||||
entityData.addProperty("height", entityType.dimensions.height)
|
||||
entityData.addProperty("size_fixed", entityType.dimensions.fixed)
|
||||
|
||||
val entity = summonEntity(entityType)
|
||||
|
||||
if (entity is LivingEntity) {
|
||||
entity.attributes.getInstance(SharedMonsterAttributes.MAX_HEALTH)?.value?.let {
|
||||
entityData.addProperty("max_health", it)
|
||||
}
|
||||
entity.attributes.getInstance(SharedMonsterAttributes.FOLLOW_RANGE)?.value?.let {
|
||||
entityData.addProperty("follow_range", it)
|
||||
}
|
||||
entity.attributes.getInstance(SharedMonsterAttributes.MOVEMENT_SPEED)?.value?.let {
|
||||
entityData.addProperty("movement_speed", it)
|
||||
}
|
||||
entity.attributes.getInstance(SharedMonsterAttributes.FLYING_SPEED)?.value?.let {
|
||||
entityData.addProperty("flying_speed", it)
|
||||
}
|
||||
entity.attributes.getInstance(SharedMonsterAttributes.ATTACK_DAMAGE)?.value?.let {
|
||||
entityData.addProperty("attack_damage", it)
|
||||
}
|
||||
entity.attributes.getInstance(SharedMonsterAttributes.ARMOR)?.value?.let {
|
||||
entityData.addProperty("armor", it)
|
||||
}
|
||||
entity.attributes.getInstance(SharedMonsterAttributes.ARMOR_TOUGHNESS)?.value?.let {
|
||||
entityData.addProperty("armor_toughness", it)
|
||||
}
|
||||
entity.attributes.getInstance(SharedMonsterAttributes.LUCK)?.value?.let {
|
||||
entityData.addProperty("luck", it)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
val entityClass = entity::class.java
|
||||
|
||||
entityData.addProperty("class", entityClass.simpleName)
|
||||
entityClassMappings[entityClass] = resourceIdentifier
|
||||
|
||||
data.add(resourceIdentifier.toString(), entityData)
|
||||
}
|
||||
|
||||
// resolve parents and meta data
|
||||
for (entityType in Registry.ENTITY_TYPE) {
|
||||
val entity: Entity
|
||||
try {
|
||||
entity = summonEntity(entityType)
|
||||
} catch (exception: Exception) {
|
||||
continue
|
||||
}
|
||||
val entityClass = entity::class.java
|
||||
|
||||
val entityData = data[Registry.ENTITY_TYPE.getKey(entityType).toString()]!!.asJsonObject
|
||||
|
||||
generateMetaDataForParents(entityClass, entityData, data)
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateMetaDataForParents(clazz: Class<out Entity>, entityData: JsonObject, data: JsonObject) {
|
||||
if (entityData.has("parent")) {
|
||||
return
|
||||
}
|
||||
generateMetaData(clazz).let {
|
||||
if (it.size() > 0) {
|
||||
entityData.add("meta", it)
|
||||
}
|
||||
}
|
||||
val superClass: Class<*> = clazz.superclass
|
||||
if (superClass != Object::class.java) {
|
||||
entityData.addProperty("parent", correctClassName(superClass.simpleName))
|
||||
|
||||
val parentEntityName = if (entityClassMappings[superClass] == null) {
|
||||
// abstract class
|
||||
correctClassName(superClass.simpleName)
|
||||
} else {
|
||||
entityClassMappings[superClass].toString()
|
||||
}
|
||||
|
||||
var parentData: JsonObject? = data[parentEntityName]?.asJsonObject
|
||||
|
||||
if (parentData == null) {
|
||||
parentData = JsonObject()
|
||||
data.add(parentEntityName, parentData)
|
||||
}
|
||||
|
||||
|
||||
generateMetaDataForParents(superClass as Class<out Entity>, parentData, data)
|
||||
}
|
||||
}
|
||||
|
||||
private fun correctClassName(className: String): String {
|
||||
return when (className) {
|
||||
"AgableMob" -> "AgeableMob"
|
||||
else -> className
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateMetaData(clazz: Class<out Entity>): JsonObject {
|
||||
val json = JsonObject()
|
||||
|
||||
for (field in clazz.declaredFields) {
|
||||
if (field.type != EntityDataAccessor::class.java) {
|
||||
continue
|
||||
}
|
||||
field.isAccessible = true
|
||||
val dataAccessor: EntityDataAccessor<*> = field.get(null) as EntityDataAccessor<*>
|
||||
val entityClazzData = PixLyzer.ENTITY_META_DATA_MAPPING[correctClassName(clazz.simpleName)]?.asJsonObject ?: error(correctClassName(clazz.simpleName))
|
||||
val entityData = entityClazzData["data"].asJsonObject
|
||||
val realFieldName = entityData[field.name].asString
|
||||
json.addProperty(realFieldName, dataAccessor.id)
|
||||
}
|
||||
|
||||
return json
|
||||
}
|
||||
|
||||
private fun summonEntity(entityType: EntityType<*>): Entity {
|
||||
var entity = entityType.spawn(DummyLevel, null, DummyPlayer, BlockPos(0, 0, 0), MobSpawnType.COMMAND, true, true)
|
||||
|
||||
if (entity == null) {
|
||||
entity = when (entityType) {
|
||||
EntityType.PLAYER -> DummyPlayer
|
||||
EntityType.LIGHTNING_BOLT -> LightningBolt(DummyLevel, 0.0, 0.0, 0.0, false)
|
||||
EntityType.FISHING_BOBBER -> FishingHook(DummyPlayer, DummyLevel, 0, 0)
|
||||
else -> entity
|
||||
}
|
||||
}
|
||||
if (entity == null) {
|
||||
error("Can not spawn entity ${Registry.ENTITY_TYPE.getKey(entityType)}")
|
||||
}
|
||||
return entity
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package de.bixilon.pixlyzer.generator
|
||||
|
||||
|
||||
object Generators {
|
||||
val GENERATORS: List<Generator> = mutableListOf(
|
||||
BiomeGenerator,
|
||||
@ -11,5 +12,12 @@ object Generators {
|
||||
MotiveGenerator,
|
||||
DimensionGenerator,
|
||||
BlockGenerator,
|
||||
RarityGenerator,
|
||||
MobCategoryGenerator,
|
||||
EntityGenerator,
|
||||
ParticleGenerator,
|
||||
BlockEntityGenerator,
|
||||
StatisticsGenerator,
|
||||
VersionGenerator,
|
||||
)
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ object ItemGenerator : Generator(
|
||||
item.itemCategory?.let {
|
||||
itemData.addProperty("category", CreativeInventoryTabGenerator.CATEGORY_ID_FIELD.getInt(it))
|
||||
}
|
||||
itemData.addProperty("rarity", item.getRarity(ItemStack.EMPTY).name.toLowerCase())
|
||||
itemData.addProperty("rarity", item.getRarity(ItemStack.EMPTY).ordinal)
|
||||
itemData.addProperty("max_stack_size", item.maxStackSize)
|
||||
itemData.addProperty("max_damage", item.maxDamage)
|
||||
itemData.addProperty("is_complex", item.isComplex)
|
||||
@ -60,10 +60,10 @@ object ItemGenerator : Generator(
|
||||
itemData.addProperty("attack_speed", DIGGER_ITEM_ATTACK_SPEED.getFloat(item))
|
||||
}
|
||||
if (item is ArmorItem) {
|
||||
itemData.addProperty("equipment_slot", (ARMOR_ITEM_EQUIPMENT_SLOT_FIELD.get(item) as EquipmentSlot).name)
|
||||
itemData.addProperty("equipment_slot", (ARMOR_ITEM_EQUIPMENT_SLOT_FIELD.get(item) as EquipmentSlot).name.toLowerCase())
|
||||
itemData.addProperty("defense", item.defense)
|
||||
itemData.addProperty("toughness", ARMOR_ITEM_TOUGHNESS_FIELD.getFloat(item))
|
||||
itemData.addProperty("armor_material", item.material.name)
|
||||
itemData.addProperty("armor_material", item.material.name.toLowerCase())
|
||||
}
|
||||
if (item is AxeItem) {
|
||||
val stripables = JsonArray()
|
||||
@ -82,7 +82,7 @@ object ItemGenerator : Generator(
|
||||
}
|
||||
}
|
||||
if (item is DyeItem) {
|
||||
itemData.addProperty("dye_color", item.dyeColor.name)
|
||||
itemData.addProperty("dye_color", item.dyeColor.name.toLowerCase())
|
||||
}
|
||||
if (item is FishBucketItem) {
|
||||
(BUCKED_FISH_ITEM_TYPE_FIELD.get(item) as EntityType<*>?)?.let {
|
||||
@ -131,7 +131,6 @@ object ItemGenerator : Generator(
|
||||
// ToDo: Record Item,
|
||||
|
||||
itemData.addProperty("class", item::class.java.simpleName)
|
||||
// ToDo
|
||||
|
||||
data.add(resourceIdentifier.toString(), itemData)
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
package de.bixilon.pixlyzer.generator
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import net.minecraft.world.entity.MobCategory
|
||||
|
||||
object MobCategoryGenerator : Generator(
|
||||
"mob categories",
|
||||
"mob_categories"
|
||||
) {
|
||||
override fun generate() {
|
||||
for (category in MobCategory.values()) {
|
||||
val categoryData = JsonObject()
|
||||
|
||||
categoryData.addProperty("max_instances_per_chunk", category.maxInstancesPerChunk)
|
||||
categoryData.addProperty("is_friendly", category.isFriendly)
|
||||
categoryData.addProperty("is_persistent", category.isPersistent)
|
||||
categoryData.addProperty("name", category.name.toLowerCase())
|
||||
|
||||
data.add(category.ordinal.toString(), categoryData)
|
||||
}
|
||||
}
|
||||
}
|
@ -28,12 +28,12 @@ object MobEffectGenerator : Generator(
|
||||
|
||||
for ((attribute, modifier) in mobEffect.getModifiers()) {
|
||||
val modifierData = JsonObject()
|
||||
modifierData.addProperty("name", modifier.name)
|
||||
modifierData.addProperty("name", modifier.name.toLowerCase())
|
||||
modifierData.addProperty("uuid", modifier.id.toString())
|
||||
modifierData.addProperty("amount", modifier.amount)
|
||||
modifierData.addProperty("operation", modifier.operation.name.toLowerCase())
|
||||
|
||||
modifiers.add(attribute.name, modifierData)
|
||||
modifiers.add(attribute.name.toLowerCase(), modifierData)
|
||||
}
|
||||
|
||||
if (modifiers.size() > 0) {
|
||||
|
@ -0,0 +1,22 @@
|
||||
package de.bixilon.pixlyzer.generator
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import net.minecraft.core.Registry
|
||||
|
||||
object ParticleGenerator : Generator(
|
||||
"particles"
|
||||
) {
|
||||
override fun generate() {
|
||||
for (particleType in Registry.PARTICLE_TYPE) {
|
||||
val resourceIdentifier = Registry.PARTICLE_TYPE.getKey(particleType)
|
||||
val particleData = JsonObject()
|
||||
particleData.addProperty("id", Registry.PARTICLE_TYPE.getId(particleType))
|
||||
if (particleType.overrideLimiter) {
|
||||
particleData.addProperty("override_limiter", particleType.overrideLimiter)
|
||||
}
|
||||
// ToDo type and meta data
|
||||
|
||||
data.add(resourceIdentifier.toString(), particleData)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package de.bixilon.pixlyzer.generator
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import net.minecraft.world.item.Rarity
|
||||
|
||||
object RarityGenerator : Generator(
|
||||
"rarities"
|
||||
) {
|
||||
override fun generate() {
|
||||
for (rarity in Rarity.values()) {
|
||||
val rarityData = JsonObject()
|
||||
rarityData.addProperty("name", rarity.name.toLowerCase())
|
||||
rarityData.addProperty("color", rarity.color.name.toLowerCase())
|
||||
|
||||
data.add(rarity.ordinal.toString(), rarityData)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package de.bixilon.pixlyzer.generator
|
||||
|
||||
import com.google.gson.JsonArray
|
||||
import com.google.gson.JsonObject
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.stats.Stat
|
||||
import net.minecraft.stats.StatFormatter
|
||||
|
||||
object StatisticsGenerator : Generator(
|
||||
"statistics"
|
||||
) {
|
||||
override fun generate() {
|
||||
for (statistic in Registry.STAT_TYPE) {
|
||||
val resourceIdentifier = Registry.STAT_TYPE.getKey(statistic)
|
||||
val statisticData = JsonObject()
|
||||
statisticData.addProperty("id", Registry.STAT_TYPE.getId(statistic))
|
||||
|
||||
statisticData.addProperty("translation_id", statistic.translationKey)
|
||||
|
||||
statisticData.addProperty("unit", when (statistic.registry) {
|
||||
Registry.BIOME -> "biome"
|
||||
Registry.BLOCK -> "block"
|
||||
Registry.ITEM -> "item"
|
||||
Registry.ENTITY_TYPE -> "entity_type"
|
||||
Registry.CUSTOM_STAT -> "custom"
|
||||
StatFormatter.DECIMAL_FORMAT -> "decimal_format"
|
||||
StatFormatter.DEFAULT -> "default"
|
||||
StatFormatter.DIVIDE_BY_TEN -> "divide_by_ten"
|
||||
StatFormatter.DISTANCE -> "distance"
|
||||
StatFormatter.TIME -> "time"
|
||||
else -> "other"
|
||||
})
|
||||
|
||||
val subStatistics = JsonArray()
|
||||
for (subStatistic in statistic) {
|
||||
val key = when (subStatistic) {
|
||||
is Stat -> subStatistic.name
|
||||
else -> subStatistic.toString()
|
||||
}
|
||||
subStatistics.add(key)
|
||||
}
|
||||
if (subStatistics.size() > 0) {
|
||||
statisticData.add("sub_statistics", subStatistics)
|
||||
}
|
||||
|
||||
data.add(resourceIdentifier.toString(), statisticData)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package de.bixilon.pixlyzer.generator
|
||||
|
||||
import net.minecraft.DetectedVersion
|
||||
|
||||
object VersionGenerator : Generator(
|
||||
"version"
|
||||
) {
|
||||
override fun generate() {
|
||||
val version = DetectedVersion.tryDetectVersion()
|
||||
|
||||
data.addProperty("id", version.id)
|
||||
data.addProperty("name", version.name)
|
||||
data.addProperty("stable", version.isStable)
|
||||
data.addProperty("world_version", version.worldVersion)
|
||||
data.addProperty("protocol_version", version.protocolVersion)
|
||||
data.addProperty("pack_version", version.packVersion)
|
||||
data.addProperty("build_time", version.buildTime.toString())
|
||||
data.addProperty("release_target", version.releaseTarget)
|
||||
}
|
||||
}
|
@ -1,5 +1,9 @@
|
||||
package de.bixilon.pixlyzer.util
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import com.google.gson.JsonParser
|
||||
import java.io.InputStreamReader
|
||||
|
||||
object Util {
|
||||
fun <T> forceClassInit(clazz: Class<T>) {
|
||||
try {
|
||||
@ -9,4 +13,11 @@ object Util {
|
||||
}
|
||||
}
|
||||
|
||||
fun readJsonResource(path: String): JsonObject {
|
||||
val reader = InputStreamReader(Util::class.java.getResourceAsStream("/$path"))
|
||||
val json: JsonObject = JsonParser().parse(reader).asJsonObject
|
||||
reader.close()
|
||||
return json
|
||||
}
|
||||
|
||||
}
|
||||
|
494
src/main/resources/entities_metadata_mappings.json
Normal file
494
src/main/resources/entities_metadata_mappings.json
Normal file
@ -0,0 +1,494 @@
|
||||
{
|
||||
"Entity": {
|
||||
"data": {
|
||||
"DATA_SHARED_FLAGS_ID": "ENTITY_FLAGS",
|
||||
"DATA_AIR_SUPPLY_ID": "ENTITY_AIR_SUPPLY",
|
||||
"DATA_CUSTOM_NAME": "ENTITY_CUSTOM_NAME",
|
||||
"DATA_CUSTOM_NAME_VISIBLE": "ENTITY_CUSTOM_NAME_VISIBLE",
|
||||
"DATA_SILENT": "ENTITY_SILENT",
|
||||
"DATA_NO_GRAVITY": "ENTITY_NO_GRAVITY",
|
||||
"DATA_POSE": "ENTITY_POSE",
|
||||
"DATA_TICKS_FROZEN": "ENTITY_TICKS_FROZEN"
|
||||
}
|
||||
},
|
||||
"LivingEntity": {
|
||||
"data": {
|
||||
"DATA_LIVING_ENTITY_FLAGS": "LIVING_ENTITY_FLAGS",
|
||||
"DATA_HEALTH_ID": "LIVING_ENTITY_HEALTH",
|
||||
"DATA_EFFECT_COLOR_ID": "LIVING_ENTITY_EFFECT_COLOR",
|
||||
"DATA_EFFECT_AMBIENCE_ID": "LIVING_ENTITY_EFFECT_AMBIENCE",
|
||||
"DATA_ARROW_COUNT_ID": "LIVING_ENTITY_ARROW_COUNT",
|
||||
"DATA_STINGER_COUNT_ID": "LIVING_ENTITY_ABSORPTION_HEARTS",
|
||||
"SLEEPING_POS_ID": "LIVING_ENTITY_BED_POSITION"
|
||||
}
|
||||
},
|
||||
"Mob": {
|
||||
"data": {
|
||||
"DATA_MOB_FLAGS_ID": "MOB_FLAGS"
|
||||
}
|
||||
},
|
||||
"Zombie": {
|
||||
"data": {
|
||||
"DATA_BABY_ID": "ZOMBIE_IS_BABY",
|
||||
"DATA_SPECIAL_TYPE_ID": "ZOMBIE_SPECIAL_TYPE",
|
||||
"DATA_DROWNED_CONVERSION_ID": "ZOMBIE_DROWNING_CONVERSION"
|
||||
}
|
||||
},
|
||||
"AreaEffectCloud": {
|
||||
"data": {
|
||||
"DATA_RADIUS": "AREA_EFFECT_CLOUD_RADIUS",
|
||||
"DATA_COLOR": "AREA_EFFECT_CLOUD_COLOR",
|
||||
"DATA_WAITING": "AREA_EFFECT_CLOUD_WAITING",
|
||||
"DATA_PARTICLE": "AREA_EFFECT_CLOUD_PARTICLE"
|
||||
}
|
||||
},
|
||||
"ArmorStand": {
|
||||
"data": {
|
||||
"DATA_CLIENT_FLAGS": "ARMOR_STAND_FLAGS",
|
||||
"DATA_HEAD_POSE": "ARMOR_STAND_HEAD_ROTATION",
|
||||
"DATA_BODY_POSE": "ARMOR_STAND_BODY_ROTATION",
|
||||
"DATA_LEFT_ARM_POSE": "ARMOR_STAND_LEFT_ARM_ROTATION",
|
||||
"DATA_RIGHT_ARM_POSE": "ARMOR_STAND_RIGHT_ARM_ROTATION",
|
||||
"DATA_LEFT_LEG_POSE": "ARMOR_STAND_LEFT_LAG_ROTATION",
|
||||
"DATA_RIGHT_LEG_POSE": "ARMOR_STAND_RIGHT_LAG_ROTATION"
|
||||
}
|
||||
},
|
||||
"Arrow": {
|
||||
"data": {
|
||||
"ID_EFFECT_COLOR": "ARROW_EFFECT_COLOR"
|
||||
}
|
||||
},
|
||||
"ThrowableItemProjectile": {
|
||||
"data": {
|
||||
"DATA_ITEM_STACK": "THROWABLE_ITEM_PROJECTILE_ITEM"
|
||||
}
|
||||
},
|
||||
"FallingBlockEntity": {
|
||||
"data": {
|
||||
"DATA_START_POS": "FALLING_BLOCK_SPAWN_POSITION"
|
||||
}
|
||||
},
|
||||
"AbstractArrow": {
|
||||
"data": {
|
||||
"ID_FLAGS": "ABSTRACT_ARROW_FLAGS",
|
||||
"PIERCE_LEVEL": "ABSTRACT_ARROW_PIERCE_LEVEL",
|
||||
"DATA_OWNERUUID_ID": "ABSTRACT_ARROW_OWNER_UUID"
|
||||
}
|
||||
},
|
||||
"FishingHook": {
|
||||
"data": {
|
||||
"DATA_HOOKED_ENTITY": "FISHING_HOOK_HOOKED_ENTITY",
|
||||
"DATA_BITING": "FISHING_HOOK_CATCHABLE"
|
||||
}
|
||||
},
|
||||
"ThrownTrident": {
|
||||
"data": {
|
||||
"ID_LOYALTY": "THROWN_TRIDENT_LOYALTY_LEVEL",
|
||||
"ID_FOIL": "THROWN_TRIDENT_FOIL"
|
||||
}
|
||||
},
|
||||
"Boat": {
|
||||
"data": {
|
||||
"DATA_ID_HURT": "BOAT_HURT",
|
||||
"DATA_ID_HURTDIR": "BOAT_HURT_DIRECTION",
|
||||
"DATA_ID_DAMAGE": "BOAT_DAMAGE_TAKEN",
|
||||
"DATA_ID_TYPE": "BOAT_MATERIAL",
|
||||
"DATA_ID_PADDLE_LEFT": "BOAT_PADDLE_LEFT",
|
||||
"DATA_ID_PADDLE_RIGHT": "BOAT_PADDLE_RIGHT",
|
||||
"DATA_ID_BUBBLE_TIME": "BOAT_BUBBLE_TIME"
|
||||
}
|
||||
},
|
||||
"EndCrystal": {
|
||||
"data": {
|
||||
"DATA_BEAM_TARGET": "END_CRYSTAL_BEAM_TARGET",
|
||||
"DATA_SHOW_BOTTOM": "END_CRYSTAL_SHOW_BOTTOM"
|
||||
}
|
||||
},
|
||||
"Fireball": {
|
||||
"data": {
|
||||
"DATA_ITEM_STACK": "FIREBALL_ITEM"
|
||||
}
|
||||
},
|
||||
"WitherSkull": {
|
||||
"data": {
|
||||
"DATA_DANGEROUS": "WITHER_SKULL_DANGEROUS"
|
||||
}
|
||||
},
|
||||
"FireworkRocketEntity": {
|
||||
"data": {
|
||||
"DATA_ID_FIREWORKS_ITEM": "FIREWORK_ROCKET_ENTITY_ITEM",
|
||||
"DATA_ATTACHED_TO_TARGET": "FIREWORK_ROCKET_ENTITY_ATTACHED_ENTITY",
|
||||
"DATA_SHOT_AT_ANGLE": "FIREWORK_ROCKET_ENTITY_SHOT_AT_ANGLE"
|
||||
}
|
||||
},
|
||||
"ItemFrame": {
|
||||
"data": {
|
||||
"DATA_ITEM": "ITEM_FRAME_ITEM",
|
||||
"DATA_ROTATION": "ITEM_FRAME_ROTATION"
|
||||
}
|
||||
},
|
||||
"ItemEntity": {
|
||||
"data": {
|
||||
"DATA_ITEM": "ITEM_ITEM"
|
||||
}
|
||||
},
|
||||
"Player": {
|
||||
"data": {
|
||||
"DATA_PLAYER_ABSORPTION_ID": "PLAYER_ABSORPTION_HEARTS",
|
||||
"DATA_SCORE_ID": "PLAYER_SCORE",
|
||||
"DATA_PLAYER_MODE_CUSTOMISATION": "PLAYER_SKIN_PARTS_FLAGS",
|
||||
"DATA_PLAYER_MAIN_HAND": "PLAYER_SKIN_MAIN_HAND",
|
||||
"DATA_SHOULDER_LEFT": "PLAYER_LEFT_SHOULDER_DATA",
|
||||
"DATA_SHOULDER_RIGHT": "PLAYER_RIGHT_SHOULDER_DATA"
|
||||
}
|
||||
},
|
||||
"Bat": {
|
||||
"data": {
|
||||
"DATA_ID_FLAGS": "BAT_FLAGS"
|
||||
}
|
||||
},
|
||||
"AgeableMob": {
|
||||
"data": {
|
||||
"DATA_BABY_ID": "AGEABLE_IS_BABY"
|
||||
}
|
||||
},
|
||||
"Dolphin": {
|
||||
"data": {
|
||||
"TREASURE_POS": "DOLPHIN_TREASURE_POSITION",
|
||||
"GOT_FISH": "DOLPHIN_HAS_FISH",
|
||||
"MOISTNESS_LEVEL": "DOLPHIN_MOISTNESS_LEVEL",
|
||||
"MOISNTESS_LEVEL": "DOLPHIN_MOISTNESS_LEVEL"
|
||||
}
|
||||
},
|
||||
"AbstractFish": {
|
||||
"data": {
|
||||
"FROM_BUCKET": "ABSTRACT_FISH_FROM_BUCKET"
|
||||
}
|
||||
},
|
||||
"AbstractChestedHorse": {
|
||||
"data": {
|
||||
"DATA_ID_CHEST": "ABSTRACT_CHESTED_HORSE_HAS_CHEST"
|
||||
}
|
||||
},
|
||||
"AbstractHorse": {
|
||||
"data": {
|
||||
"DATA_ID_FLAGS": "ABSTRACT_HORSE_FLAGS",
|
||||
"DATA_ID_OWNER_UUID": "ABSTRACT_HORSE_OWNER_UUID"
|
||||
}
|
||||
},
|
||||
"Horse": {
|
||||
"data": {
|
||||
"DATA_ID_TYPE_VARIANT": "HORSE_VARIANT"
|
||||
}
|
||||
},
|
||||
"Llama": {
|
||||
"data": {
|
||||
"DATA_STRENGTH_ID": "LLAMA_STRENGTH",
|
||||
"DATA_SWAG_ID": "LLAMA_CARPET_COLOR",
|
||||
"DATA_VARIANT_ID": "LLAMA_VARIANT"
|
||||
}
|
||||
},
|
||||
"Bee": {
|
||||
"data": {
|
||||
"DATA_FLAGS_ID": "BEE_FLAGS",
|
||||
"DATA_REMAINING_ANGER_TIME": "BEE_REMAINING_ANGER_TIME",
|
||||
"ANGER_TIME": "BEE_REMAINING_ANGER_TIME"
|
||||
}
|
||||
},
|
||||
"Cat": {
|
||||
"data": {
|
||||
"DATA_TYPE_ID": "CAT_VARIANT",
|
||||
"IS_LYING": "CAT_IS_LYING",
|
||||
"RELAX_STATE_ONE": "CAT_IS_RELAXED",
|
||||
"DATA_COLLAR_COLOR": "CAT_GET_COLLAR_COLOR"
|
||||
}
|
||||
},
|
||||
"TamableAnimal": {
|
||||
"data": {
|
||||
"DATA_FLAGS_ID": "TAMABLE_ENTITY_FLAGS",
|
||||
"DATA_OWNERUUID_ID": "TAMABLE_ENTITY_OWNER_UUID"
|
||||
}
|
||||
},
|
||||
"Fox": {
|
||||
"data": {
|
||||
"DATA_TYPE_ID": "FOX_VARIANT",
|
||||
"DATA_FLAGS_ID": "FOX_FLAGS",
|
||||
"DATA_TRUSTED_ID_0": "FOX_TRUSTED_1",
|
||||
"DATA_TRUSTED_ID_1": "FOX_TRUSTED_2"
|
||||
}
|
||||
},
|
||||
"IronGolem": {
|
||||
"data": {
|
||||
"DATA_FLAGS_ID": "IRON_GOLEM_FLAGS"
|
||||
}
|
||||
},
|
||||
"MushroomCow": {
|
||||
"data": {
|
||||
"DATA_TYPE": "MOOSHROOM_VARIANT"
|
||||
}
|
||||
},
|
||||
"Ocelot": {
|
||||
"data": {
|
||||
"DATA_TRUSTING": "OCELOT_IS_TRUSTING"
|
||||
}
|
||||
},
|
||||
"Panda": {
|
||||
"data": {
|
||||
"UNHAPPY_COUNTER": "PANDA_UNHAPPY_TIMER",
|
||||
"SNEEZE_COUNTER": "PANDA_SNEEZE_TIMER",
|
||||
"EAT_COUNTER": "PANDA_EAT_TIMER",
|
||||
"MAIN_GENE_ID": "PANDA_MAIN_GENE",
|
||||
"HIDDEN_GENE_ID": "PANDA_HIDDEN_GAME",
|
||||
"DATA_ID_FLAGS": "PANDA_FLAGS"
|
||||
}
|
||||
},
|
||||
"Parrot": {
|
||||
"data": {
|
||||
"DATA_VARIANT_ID": "PARROT_VARIANT"
|
||||
}
|
||||
},
|
||||
"Pig": {
|
||||
"data": {
|
||||
"DATA_SADDLE_ID": "PIG_HAS_SADDLE",
|
||||
"DATA_BOOST_TIME": "PIG_BOOST_TIME"
|
||||
}
|
||||
},
|
||||
"PolarBear": {
|
||||
"data": {
|
||||
"DATA_STANDING_ID": "POLAR_BEAR_STANDING"
|
||||
}
|
||||
},
|
||||
"Pufferfish": {
|
||||
"data": {
|
||||
"PUFF_STATE": "PUFFERFISH_PUFF_STATE"
|
||||
}
|
||||
},
|
||||
"Rabbit": {
|
||||
"data": {
|
||||
"DATA_TYPE_ID": "RABBIT_VARIANT"
|
||||
}
|
||||
},
|
||||
"Sheep": {
|
||||
"data": {
|
||||
"DATA_WOOL_ID": "SHEEP_FLAGS"
|
||||
}
|
||||
},
|
||||
"SnowGolem": {
|
||||
"data": {
|
||||
"DATA_PUMPKIN_ID": "SNOW_GOLEM_FLAGS"
|
||||
}
|
||||
},
|
||||
"TropicalFish": {
|
||||
"data": {
|
||||
"DATA_ID_TYPE_VARIANT": "TROPICAL_FISH_VARIANT"
|
||||
}
|
||||
},
|
||||
"Turtle": {
|
||||
"data": {
|
||||
"HOME_POS": "TURTLE_HOME_POSITION",
|
||||
"HAS_EGG": "TURTLE_HAS_EGG",
|
||||
"LAYING_EGG": "TURTLE_IS_LAYING_EGG",
|
||||
"TRAVEL_POS": "TURTLE_TRAVEL_POSITION",
|
||||
"GOING_HOME": "TURTLE_IS_GOING_HOME",
|
||||
"TRAVELLING": "TURTLE_IS_TRAVELING"
|
||||
}
|
||||
},
|
||||
"Wolf": {
|
||||
"data": {
|
||||
"DATA_INTERESTED_ID": "WOLF_IS_BEGGING",
|
||||
"DATA_COLLAR_COLOR": "WOLF_COLLAR_COLOR",
|
||||
"DATA_REMAINING_ANGER_TIME": "WOLF_ANGER_TIME",
|
||||
"DATA_HEALTH_ID": "WOLF_HEALTH"
|
||||
}
|
||||
},
|
||||
"EnderDragon": {
|
||||
"data": {
|
||||
"DATA_PHASE": "ENDER_DRAGON_PHASE"
|
||||
}
|
||||
},
|
||||
"WitherBoss": {
|
||||
"data": {
|
||||
"DATA_TARGET_A": "WITHER_BOSS_CENTER_HEAD_TARGET_ENTITY_ID",
|
||||
"DATA_TARGET_B": "WITHER_BOSS_LEFT_HEAD_TARGET_ENTITY_ID",
|
||||
"DATA_TARGET_C": "WITHER_BOSS_RIGHT_HEAD_TARGET_ENTITY_ID",
|
||||
"DATA_ID_INV": "WITHER_BOSS_INVULNERABLE_TIME"
|
||||
}
|
||||
},
|
||||
"PrimedTnt": {
|
||||
"data": {
|
||||
"DATA_FUSE_ID": "PRIMED_TNT_FUSE_TIME"
|
||||
}
|
||||
},
|
||||
"Hoglin": {
|
||||
"data": {
|
||||
"DATA_IMMUNE_TO_ZOMBIFICATION": "HOGLIN_IMMUNE_TO_ZOMBIFICATION"
|
||||
}
|
||||
},
|
||||
"AbstractPiglin": {
|
||||
"data": {
|
||||
"DATA_IMMUNE_TO_ZOMBIFICATION": "ABSTRACT_PIGLIN_IMMUNE_TO_ZOMBIFICATION"
|
||||
}
|
||||
},
|
||||
"Piglin": {
|
||||
"data": {
|
||||
"DATA_BABY_ID": "PIGLIN_IS_BABY",
|
||||
"DATA_IS_CHARGING_CROSSBOW": "PIGLIN_IS_CHARGING_CROSSBOW",
|
||||
"DATA_IS_DANCING": "PIGLIN_IS_DANCING",
|
||||
"DATA_IMMUNE_TO_ZOMBIFICATION": "PIGLIN_IMMUNE_TO_ZOMBIFICATION"
|
||||
}
|
||||
},
|
||||
"Blaze": {
|
||||
"data": {
|
||||
"DATA_FLAGS_ID": "BLAZE_FLAGS"
|
||||
}
|
||||
},
|
||||
"Creeper": {
|
||||
"data": {
|
||||
"DATA_SWELL_DIR": "CREEPER_STATE",
|
||||
"DATA_IS_POWERED": "CREEPER_IS_CHARGED",
|
||||
"DATA_IS_IGNITED": "CREEPER_IS_IGNITED"
|
||||
}
|
||||
},
|
||||
"EnderMan": {
|
||||
"data": {
|
||||
"DATA_CARRY_STATE": "ENDERMAN_CARRIED_BLOCK",
|
||||
"DATA_CREEPY": "ENDERMAN_IS_SCREAMING",
|
||||
"DATA_STARED_AT": "ENDERMAN_IS_STARRING"
|
||||
}
|
||||
},
|
||||
"SpellcasterIllager": {
|
||||
"data": {
|
||||
"DATA_SPELL_CASTING_ID": "SPELLCASTER_ILLAGER_SPELL"
|
||||
}
|
||||
},
|
||||
"Ghast": {
|
||||
"data": {
|
||||
"DATA_IS_CHARGING": "GHAST_IS_ATTACKING"
|
||||
}
|
||||
},
|
||||
"Guardian": {
|
||||
"data": {
|
||||
"DATA_ID_MOVING": "GUARDIAN_IS_MOVING",
|
||||
"DATA_ID_ATTACK_TARGET": "GUARDIAN_TARGET_ENTITY_ID"
|
||||
}
|
||||
},
|
||||
"Phantom": {
|
||||
"data": {
|
||||
"ID_SIZE": "PHANTOM_SIZE"
|
||||
}
|
||||
},
|
||||
"Pillager": {
|
||||
"data": {
|
||||
"IS_CHARGING_CROSSBOW": "PILLAGER_IS_CHARGING_CROSSBOW"
|
||||
}
|
||||
},
|
||||
"Shulker": {
|
||||
"data": {
|
||||
"DATA_ATTACH_FACE_ID": "SHULKER_ATTACH_FACE",
|
||||
"DATA_ATTACH_POS_ID": "SHULKER_ATTACHMENT_POSITION",
|
||||
"DATA_PEEK_ID": "SHULKER_PEEK",
|
||||
"DATA_COLOR_ID": "SHULKER_COLOR"
|
||||
}
|
||||
},
|
||||
"Skeleton": {
|
||||
"data": {
|
||||
"DATA_STRAY_CONVERSION_ID": "SKELETON_STRAY_FREEZE_CONVERTING"
|
||||
}
|
||||
},
|
||||
"Slime": {
|
||||
"data": {
|
||||
"ID_SIZE": "SLIME_SIZE"
|
||||
}
|
||||
},
|
||||
"Spider": {
|
||||
"data": {
|
||||
"DATA_FLAGS_ID": "SPIDER_FLAGS"
|
||||
}
|
||||
},
|
||||
"Strider": {
|
||||
"data": {
|
||||
"DATA_BOOST_TIME": "STRIDER_TIME_TO_BOOST",
|
||||
"DATA_SUFFOCATING": "STRIDER_IS_SUFFOCATING",
|
||||
"DATA_SADDLE_ID": "STRIDER_HAS_SADDLE"
|
||||
}
|
||||
},
|
||||
"Vex": {
|
||||
"data": {
|
||||
"DATA_FLAGS_ID": "VEX_FLAGS"
|
||||
}
|
||||
},
|
||||
"Witch": {
|
||||
"data": {
|
||||
"DATA_USING_ITEM": "WITCH_IS_DRINKING_POTION"
|
||||
}
|
||||
},
|
||||
"ZombieVillager": {
|
||||
"data": {
|
||||
"DATA_CONVERTING_ID": "ZOMBIE_VILLAGER_IS_CONVERTING",
|
||||
"DATA_VILLAGER_DATA": "ZOMBIE_VILLAGER_DATA"
|
||||
}
|
||||
},
|
||||
"AbstractVillager": {
|
||||
"data": {
|
||||
"DATA_UNHAPPY_COUNTER": "ABSTRACT_VILLAGER_UNHAPPY_TIMER"
|
||||
}
|
||||
},
|
||||
"Villager": {
|
||||
"data": {
|
||||
"DATA_VILLAGER_DATA": "VILLAGER_VILLAGER_DATA"
|
||||
}
|
||||
},
|
||||
"EyeOfEnder": {
|
||||
"data": {
|
||||
"DATA_ITEM_STACK": "THROWN_EYE_OF_ENDER_ITEM"
|
||||
}
|
||||
},
|
||||
"ThrownPotion": {
|
||||
"data": {
|
||||
"DATA_ITEM_STACK": "THROWN_POTION_ITEM"
|
||||
}
|
||||
},
|
||||
"Raider": {
|
||||
"data": {
|
||||
"IS_CELEBRATING": "RAIDER_IS_CELEBRATING"
|
||||
}
|
||||
},
|
||||
"AbstractMinecart": {
|
||||
"data": {
|
||||
"DATA_ID_HURT": "MINECART_HURT",
|
||||
"DATA_ID_HURTDIR": "MINECART_HURT_DIRECTION",
|
||||
"DATA_ID_DAMAGE": "MINECART_DAMAGE_TAKEN",
|
||||
"DATA_ID_DISPLAY_BLOCK": "MINECART_BLOCK_ID",
|
||||
"DATA_ID_DISPLAY_OFFSET": "MINECART_BLOCK_Y_OFFSET",
|
||||
"DATA_ID_CUSTOM_DISPLAY": "MINECART_SHOW_BLOCK"
|
||||
}
|
||||
},
|
||||
"MinecartCommandBlock": {
|
||||
"data": {
|
||||
"DATA_ID_COMMAND_NAME": "MINECART_COMMAND_BLOCK_COMMAND",
|
||||
"DATA_ID_LAST_OUTPUT": "MINECART_COMMAND_BLOCK_LAST_OUTPUT"
|
||||
}
|
||||
},
|
||||
"MinecartFurnace": {
|
||||
"data": {
|
||||
"DATA_ID_FUEL": "MINECART_FURNACE_HAS_FUEL"
|
||||
}
|
||||
},
|
||||
"Zoglin": {
|
||||
"data": {
|
||||
"DATA_BABY_ID": "ZOGLIN_IS_BABY"
|
||||
}
|
||||
},
|
||||
"Axolotl": {
|
||||
"data": {
|
||||
"DATA_VARIANT": "AXOLOTL_VARIANT",
|
||||
"DATA_PLAYING_DEAD": "AXOLOTL_PLAYING_DEAD",
|
||||
"FROM_BUCKET": "AXOLOTL_FROM_BUCKET"
|
||||
}
|
||||
},
|
||||
"GlowSquid": {
|
||||
"data": {
|
||||
"DATA_DARK_TICKS_REMAINING": "GLOW_SQUID_DARK_TICKS_REMAINING"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user