port for 21w14a down to 1.15

This commit is contained in:
Bixilon 2021-04-08 00:51:04 +02:00
parent 547e3331c5
commit 02e842a370
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
13 changed files with 154 additions and 72 deletions

View File

@ -15,7 +15,9 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<kotlin.code.style>official</kotlin.code.style>
<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
<minecraft.version>21w13a</minecraft.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<minecraft.version>21w14a</minecraft.version>
</properties>
<repositories>

View File

@ -7,9 +7,8 @@ import de.bixilon.pixlyzer.util.ReflectionUtil.setFinalField
import net.minecraft.client.network.OtherClientPlayerEntity
import net.minecraft.entity.Entity
import net.minecraft.entity.EntityType
import net.minecraft.entity.EyeOfEnderEntity
import net.minecraft.entity.boss.WitherEntity
import net.minecraft.entity.decoration.ItemFrameEntity
import net.minecraft.entity.projectile.thrown.*
import net.minecraft.scoreboard.Scoreboard
import net.minecraft.world.World
import net.minecraft.world.border.WorldBorder
@ -19,6 +18,12 @@ import java.util.*
object EntitySpawner {
private val EGG_ENTITY_CLASS = getClass("net.minecraft.entity.thrown.ThrownEggEntity", "net.minecraft.entity.projectile.thrown.EggEntity")!!
private val SNOWBAL_ENTITY_CLASS = getClass("net.minecraft.entity.thrown.SnowballEntity", "net.minecraft.entity.projectile.thrown.SnowballEntity")!!
private val ENDER_PEARL_ENTITY_CLASS = getClass("net.minecraft.entity.thrown.ThrownEnderpearlEntity", "net.minecraft.entity.projectile.thrown.EnderPearlEntity")!!
private val EYE_OF_ENDER_ENTITY_CLASS = getClass("net.minecraft.entity.EnderEyeEntity", "net.minecraft.entity.EyeOfEnderEntity", "net.minecraft.entity.projectile.thrown.EyeOfEnderEntity")!!
private val EXPERIENCE_BOTTLE_ENTITY_CLASS = getClass("net.minecraft.entity.thrown.ThrownExperienceBottleEntity", "net.minecraft.entity.projectile.thrown.ExperienceBottleEntity")!!
private val POTION_ENTITY_ENTITY_CLASS = getClass("net.minecraft.entity.thrown.ThrownPotionEntity", "net.minecraft.entity.projectile.thrown.PotionEntity")!!
fun summonEntity(entityType: EntityType<*>): Entity {
when (entityType) {
@ -28,6 +33,7 @@ object EntitySpawner {
EntityType.ITEM_FRAME -> return OBJENSIS.newInstance(ItemFrameEntity::class.java) as Entity
}
val entity = try {
ENTITY_CREATE_METHOD?.invoke(FACTORY_FIELD.get(entityType), entityType, CLIENT_LEVEL) as Entity?
} catch (exception: Throwable) {
@ -42,12 +48,13 @@ object EntitySpawner {
// ToDo: This crashes in 21w13a?
when (entityType) {
EntityType.EGG -> return OBJENSIS.newInstance(EggEntity::class.java) as Entity
EntityType.SNOWBALL -> return OBJENSIS.newInstance(SnowballEntity::class.java) as Entity
EntityType.ENDER_PEARL -> return OBJENSIS.newInstance(EnderPearlEntity::class.java) as Entity
EntityType.EYE_OF_ENDER -> return OBJENSIS.newInstance(EyeOfEnderEntity::class.java) as Entity
EntityType.EXPERIENCE_BOTTLE -> return OBJENSIS.newInstance(ExperienceBottleEntity::class.java) as Entity
EntityType.POTION -> return OBJENSIS.newInstance(PotionEntity::class.java) as Entity
EntityType.EGG -> return OBJENSIS.newInstance(EGG_ENTITY_CLASS) as Entity
EntityType.SNOWBALL -> return OBJENSIS.newInstance(SNOWBAL_ENTITY_CLASS) as Entity
EntityType.ENDER_PEARL -> return OBJENSIS.newInstance(ENDER_PEARL_ENTITY_CLASS) as Entity
EntityType.EYE_OF_ENDER -> return OBJENSIS.newInstance(EYE_OF_ENDER_ENTITY_CLASS) as Entity
EntityType.EXPERIENCE_BOTTLE -> return OBJENSIS.newInstance(EXPERIENCE_BOTTLE_ENTITY_CLASS) as Entity
EntityType.POTION -> return OBJENSIS.newInstance(POTION_ENTITY_ENTITY_CLASS) as Entity
EntityType.WITHER -> return OBJENSIS.newInstance(WitherEntity::class.java) as Entity
}
TODO("Entity type: $entityType")
@ -55,7 +62,7 @@ object EntitySpawner {
private val LIGHTNING_BOLT_CLASS = getClass("net.minecraft.entity.LightningEntity")!!
private val FISHING_HOOK_CLASS = getClass("net.minecraft.entity.projectile.FishingBobberEntity")!!
private val FISHING_HOOK_CLASS = getClass("net.minecraft.entity.FishingBobberEntity", "net.minecraft.entity.projectile.FishingBobberEntity")!!
private val levelClass = getClass("net.minecraft.client.world.ClientWorld")

View File

@ -3,8 +3,11 @@ package de.bixilon.pixlyzer
import com.google.gson.GsonBuilder
import com.google.gson.JsonObject
import de.bixilon.pixlyzer.generator.Generators
import de.bixilon.pixlyzer.util.ReflectionUtil.getClass
import de.bixilon.pixlyzer.util.Util
import net.minecraft.Bootstrap
import net.minecraft.MinecraftVersion
import net.minecraft.SharedConstants
import net.minecraft.util.registry.Registry
import java.io.File
import java.io.FileInputStream
@ -57,9 +60,14 @@ object PixLyzer {
}
println("Loading classes...")
val classesLoadStartTime = System.currentTimeMillis()
initializeGameVersionMethod?.invoke(null)
Bootstrap.initialize()
Util.forceClassInit(Registry::class.java)
println("Class loading done in ${System.currentTimeMillis() - classesLoadStartTime}ms")
@ -157,4 +165,10 @@ object PixLyzer {
minFileWriter.close()
}
val initializeGameVersionMethod = try {
getClass(SharedConstants::class.java.simpleName)?.getDeclaredMethod("method_36208")
} catch (exception: Exception) {
null
}
}

View File

@ -63,17 +63,31 @@ object BiomeGenerator : Generator(
(BACKGROUND_MUSIC_SPECIAL_EFFECTS_FIELD?.get(it) as Optional<Any>?)?.ifPresent {
biomeData.addProperty("background_music", Registry.SOUND_EVENT.getRawId(MUSIC_CLASS_EVENT_FIELD!!.get(it) as SoundEvent))
}
} ?: let {
}
if (!biomeData.has("foliage_color_override")) {
// calculate color overrider
try {
biomeData.addProperty("foliage_color_override", FOLIAGE_COLOR_OVERRIDE_METHOD!!.invoke(biome) as Int)
biomeData.addProperty("foliage_color_override", FOLIAGE_COLOR_AT_METHOD_METHOD!!.invoke(biome, null) as Int)
} catch (exception: NullPointerException) {
try {
biomeData.addProperty("foliage_color_override", FOLIAGE_COLOR_METHOD!!.invoke(biome) as Int)
} catch (exception: NullPointerException) {
}
}
}
biomeData["foliage_color_override"]?.let {
if (it.asInt == 0) {
biomeData.remove("foliage_color_override")
}
}
if (!biomeData.has("grass_color_modifier")) {
try {
biomeData.addProperty("grass_color_modifier", GRASS_COLOR_OVERRIDE_METHOD!!.invoke(biome) as Int)
biomeData.addProperty("grass_color_modifier", GRASS_COLOR_OVERRIDE_METHOD!!.invoke(biome, null) as Int)
} catch (exception: NullPointerException) {
}
}
if (!biomeData.has("sky_color")) {
BIOME_SKY_COLOR_FIELD?.getInt(biome)?.let {
biomeData.addProperty("sky_color", it)
} ?: let {
@ -85,11 +99,17 @@ object BiomeGenerator : Generator(
}
}
private val FOLIAGE_COLOR_OVERRIDE_METHOD = try {
private val FOLIAGE_COLOR_AT_METHOD_METHOD = try {
Biome::class.java.getMethod("getFoliageColorAt", BlockPos::class.java)
} catch (exception: Exception) {
null
}
private val FOLIAGE_COLOR_METHOD = try {
Biome::class.java.getMethod("getFoliageColor")
} catch (exception: Exception) {
null
}
private val GRASS_COLOR_OVERRIDE_METHOD = try {
Biome::class.java.getMethod("getGrassColorAt", BlockPos::class.java)
} catch (exception: Exception) {
@ -126,7 +146,7 @@ object BiomeGenerator : Generator(
private val BIOME_SKY_COLOR_FIELD = getField(Biome::class.java, "skyColor")
private val MUSIC_CLASS_EVENT_FIELD = getField(getClass("net.minecraft.sound.MusicSound"), "sound")
private val MUSIC_CLASS_EVENT_FIELD = getField(getClass("net.minecraft.sound.MusicSound"), "sound", "event")
private fun getBiomes(): Set<Triple<Identifier, Int, Biome>> {
val biomes = getField(getClass("net.minecraft.util.registry.BuiltinRegistries", "net.minecraft.data.BuiltinRegistries", Registry::class.java.name)!!, "BIOME")!!.get(null) as Registry<Biome>

View File

@ -13,7 +13,6 @@ import net.minecraft.block.Blocks
import net.minecraft.block.FluidBlock
import net.minecraft.client.color.block.BlockColors
import net.minecraft.fluid.Fluid
import net.minecraft.util.collection.IdList
import net.minecraft.util.registry.Registry
import net.minecraft.util.shape.VoxelShape
@ -134,8 +133,8 @@ object BlockGenerator : Generator(
}
val hasColorProperties = (TINT_PROPERTIES_METHOD?.invoke(DEFAULT_BLOCK_COLORS, block) as Set<*>?)?.size?.let { it > 0 } ?: let {
val blockColorProviderList = BLOCK_COLORS_PROVIDERS_ID_LIST!!.get(DEFAULT_BLOCK_COLORS) as IdList<Any>
blockColorProviderList.get(Registry.BLOCK.getRawId(block)) != null
val blockColorProviderList = BLOCK_COLORS_PROVIDERS_ID_LIST!!.get(DEFAULT_BLOCK_COLORS)
ID_LIST_GET_METHOD.invoke(blockColorProviderList, Registry.BLOCK.getRawId(block)) != null
}
val states = JsonObject()
@ -367,6 +366,10 @@ object BlockGenerator : Generator(
}
}
private val ID_LIST_CLASS = getClass("net.minecraft.util.IdList", "net.minecraft.util.collection.IdList")!!
private val ID_LIST_GET_METHOD = ID_LIST_CLASS.getDeclaredMethod("get", Int::class.java)
private val BLOCK_COLORS_PROVIDERS_ID_LIST = getField(BlockColors::class.java, "providers")
private val TINT_PROPERTIES_METHOD = try {
@ -446,7 +449,8 @@ object BlockGenerator : Generator(
LARGE_COLLISION_SHAPE_FIELD.isAccessible = true
}
private val BLOCK_STATE_REGISTRY: IdList<BlockState> = Block.STATE_IDS
private val BLOCK_STATE_REGISTRY: Iterable<BlockState> = Block::class.java.getDeclaredField("STATE_IDS").get(null) as Iterable<BlockState>
private val DEFAULT_BLOCK_COLORS = BlockColors.create()

View File

@ -116,9 +116,9 @@ object DimensionGenerator : Generator(
private val AMBIENT_LIGHT_FIELD = getField(DIMENSION_TYPE_CLASS, "ambientLight")
private val RESOURCE_KEY_CLASS = getClass("net.minecraft.resources.ResourceKey")
private val RESOURCE_KEY_CLASS = getClass("net.minecraft.resources.ResourceKey", "net.minecraft.util.registry.RegistryKey")
private val RESOURCE_KEY_LOCATION_METHOD = RESOURCE_KEY_CLASS?.getDeclaredMethod("location")
private val RESOURCE_KEY_LOCATION_METHOD = getField(RESOURCE_KEY_CLASS, "value", "location")
private val DIMENSION_BIOME_ZOOMER_FIELD = getField(DimensionType::class.java, "biomeAccessType")
@ -126,18 +126,6 @@ object DimensionGenerator : Generator(
private fun getDimensions(): MutableSet<Triple<Identifier, Int?, DimensionType>> {
val types: MutableSet<Triple<Identifier, Int?, DimensionType>> = mutableSetOf()
val dimensionRegistry = getField(Registry::class.java, "DIMENSION")
dimensionRegistry?.get(null)?.let {
check(it is Registry<*>)
val registryGetKeyMethod = Registry::class.java.getDeclaredMethod("getId", Object::class.java)
val dimensionTypeGetIdMethod = DimensionType::class.java.getDeclaredMethod("getRawId")
for (entry in it) {
check(entry is DimensionType)
types.add(Triple(registryGetKeyMethod.invoke(it, entry) as Identifier, dimensionTypeGetIdMethod.invoke(entry) as Int, entry))
}
}
if (types.isEmpty()) {
for (field in DimensionType::class.java.declaredFields) {
@ -149,23 +137,37 @@ object DimensionGenerator : Generator(
}
field.isAccessible = true
val resourceLocation = when (field.name) {
"OVERWORLD", "OVERLORD" -> Identifier("overworld")
"OVERWORLD", "OVERLORD", "field_25407" -> Identifier("overworld")
"OVERWORLD_CAVES" -> Identifier("overworld_caves")
"THE_NETHER" -> Identifier("the_nether")
"THE_END" -> Identifier("the_end")
"THE_NETHER", "_NETHER" -> Identifier("the_nether")
"THE_END", "_END" -> Identifier("the_end")
else -> TODO("Can not find dimension ${field.name}")
}
types.add(Triple(resourceLocation, null, field.get(null) as DimensionType))
}
}
if (types.isEmpty()) {
val field = getField(DimensionType::class.java, "BUILTIN") ?: return types
val field = getField(DimensionType::class.java, "field_24759", "BUILTIN") ?: return types
for ((resourceLocation, dimension) in field.get(null) as Map<Any, DimensionType>) {
types.add(Triple(RESOURCE_KEY_LOCATION_METHOD!!.invoke(resourceLocation) as Identifier, null, dimension))
for ((resourceKey, dimension) in field.get(null) as Map<Any, DimensionType>) {
types.add(Triple(RESOURCE_KEY_LOCATION_METHOD!!.get(resourceKey) as Identifier, null, dimension))
}
}
if (types.isEmpty()) {
val dimensionRegistry = getField(Registry::class.java, "DIMENSION")
dimensionRegistry?.get(null)?.let {
check(it is Registry<*>)
val registryGetKeyMethod = Registry::class.java.getDeclaredMethod("getId", Object::class.java)
val dimensionTypeGetIdMethod = DimensionType::class.java.getDeclaredMethod("getRawId")
for (entry in it) {
check(entry is DimensionType)
types.add(Triple(registryGetKeyMethod.invoke(it, entry) as Identifier, dimensionTypeGetIdMethod.invoke(entry) as Int, entry))
}
}
}
return types
}

View File

@ -36,6 +36,7 @@ object EntityGenerator : Generator(
ENTITY_TYPE_FIRE_IMMUNE_FIELD?.getBoolean(entityType)?.let {
entityData.addProperty("is_fire_immune", it)
}
CAN_SPAWN_FAR_AWAY_FROM_PLAYER_METHOD?.invoke(entityType)?.let {
entityData.addProperty("can_spawn_far_from_player", it as Boolean)
}
@ -161,6 +162,8 @@ object EntityGenerator : Generator(
private fun correctClassName(className: String): String {
return when (className) {
"AgableMob" -> "AgeableMob"
"class_4985" -> "StriderEntity"
"class_4836" -> "PiglinEntity"
else -> className
}
}
@ -196,7 +199,7 @@ object EntityGenerator : Generator(
private val ENTITY_TYPE_FIRE_IMMUNE_FIELD = getField(EntityType::class.java, "fireImmune")
private val ATTRIBUTE_CLASS = getClass("net.minecraft.world.entity.ai.attributes.Attributes", "net.minecraft.world.entity.monster.SharedMonsterAttributes", "net.minecraft.entity.attribute.EntityAttributes")!!
private val ATTRIBUTE_CLASS = getClass("net.minecraft.entity.attribute.Attributes", "net.minecraft.world.entity.ai.attributes.Attributes", "net.minecraft.world.entity.monster.SharedMonsterAttributes", "net.minecraft.entity.attribute.EntityAttributes")!!
private val ATTRIBUTE_MAP: Map<String, EntityAttribute> = getAttributes()
@ -258,7 +261,7 @@ object EntityGenerator : Generator(
ret[it.invoke(attribute) as String] = attribute
} ?: let {
val registry = attributeRegistryField!!.get(null) as Registry<*>
val method = attributeRegistryField.type.getMethod("getKey", Object::class.java)
val method = attributeRegistryField.type.getMethod("getId", Object::class.java)
var key = method.invoke(registry, attribute)
if (key is Optional<*>) {
key = key.get()

View File

@ -13,7 +13,9 @@ object MaterialGenerator : Generator(
override fun generate() {
for ((resourceLocation, material) in MATERIALS) {
val materialData = JsonObject()
materialData.addProperty("color", material.color.color)
val color = MATERIAL_GET_COLOR_METHOD.invoke(material)
val colorColor = color::class.java.getDeclaredField("color").getInt(color)
materialData.addProperty("color", colorColor)
materialData.addProperty("push_reaction", material.pistonBehavior.name.toLowerCase())
materialData.addProperty("blocks_motion", material.blocksMovement())
materialData.addProperty("flammable", material.isBurnable)
@ -27,6 +29,9 @@ object MaterialGenerator : Generator(
}
}
private val MATERIAL_GET_COLOR_METHOD = Material::class.java.getDeclaredMethod("getColor")
private fun getMaterials(): HashBiMap<Identifier, Material> {
val materials: HashBiMap<Identifier, Material> = HashBiMap.create()
for (field in Material::class.java.declaredFields) {

View File

@ -2,16 +2,18 @@ package de.bixilon.pixlyzer.generator.generators
import com.google.gson.JsonObject
import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
import net.minecraft.entity.decoration.painting.PaintingMotive
import net.minecraft.util.registry.Registry
object MotiveGenerator : Generator(
"motives"
) {
override fun generate() {
for (motive in Registry.PAINTING_MOTIVE) {
val resourceIdentifier = Registry.PAINTING_MOTIVE.getId(motive)
for (motive in MOTIVE_REGISTRY) {
val resourceIdentifier = MOTIVE_REGISTRY.getId(motive)
val motiveData = JsonObject()
motiveData.addProperty("id", Registry.PAINTING_MOTIVE.getRawId(motive))
motiveData.addProperty("id", MOTIVE_REGISTRY.getRawId(motive))
motiveData.addProperty("width", motive.width)
motiveData.addProperty("height", motive.height)
@ -19,4 +21,6 @@ object MotiveGenerator : Generator(
data.add(resourceIdentifier.toString(), motiveData)
}
}
val MOTIVE_REGISTRY = getField(Registry::class.java, "PAINTING_MOTIVE", "MOTIVE")!!.get(null) as Registry<PaintingMotive>
}

View File

@ -3,11 +3,11 @@ package de.bixilon.pixlyzer.generator.generators
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.util.ReflectionUtil
import de.bixilon.pixlyzer.util.ReflectionUtil.getClass
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
import net.minecraft.block.Block
import net.minecraft.block.BlockState
import net.minecraft.util.registry.Registry
import net.minecraft.world.poi.PointOfInterestType
import java.lang.reflect.Method
object PointOfInterestGenerator : Generator(
@ -18,16 +18,16 @@ object PointOfInterestGenerator : Generator(
throw IllegalArgumentException("Not available in this version yet!")
}
for (pointOfInterestType in Registry.POINT_OF_INTEREST_TYPE) {
val resourceIdentifier = Registry.POINT_OF_INTEREST_TYPE.getId(pointOfInterestType)
for (pointOfInterestType in POINT_OF_INTEREST_REGISTRY) {
val resourceIdentifier = POINT_OF_INTEREST_REGISTRY.getId(pointOfInterestType)!!
val pointOfInterestData = JsonObject()
pointOfInterestData.addProperty("id", Registry.POINT_OF_INTEREST_TYPE.getRawId(pointOfInterestType))
pointOfInterestData.addProperty("ticket_count", pointOfInterestType.ticketCount)
pointOfInterestData.addProperty("id", POINT_OF_INTEREST_REGISTRY.getRawId(pointOfInterestType))
// ToDo: pointOfInterestData.addProperty("ticket_count", pointOfInterestType.ticketCount)
SEARCH_DISTANCE_METHOD?.invoke(pointOfInterestType)?.let {
pointOfInterestData.addProperty("search_distance", it as Int)
}
(POINT_OF_INTEREST_MATCHING_STATES_FIELD.get(pointOfInterestType) as Set<BlockState>).let {
(POINT_OF_INTEREST_MATCHING_STATES_FIELD?.get(pointOfInterestType) as Set<BlockState>?)?.let {
val states = JsonArray()
for (state in it) {
states.add(Block.getRawIdFromState(state))
@ -39,22 +39,21 @@ object PointOfInterestGenerator : Generator(
}
}
val POINT_OF_INTEREST_REGISTRY = ReflectionUtil.getField(Registry::class.java, "POINT_OF_INTEREST_TYPE")?.get(null) as Registry<Any>?
private val POINT_OF_INTEREST_MATCHING_STATES_FIELD = PointOfInterestType::class.java.getDeclaredField("blockStates")
val POINT_OF_INTEREST_REGISTRY = getField(Registry::class.java, "POINT_OF_INTEREST_TYPE")?.get(null) as Registry<Any>?
private val SEARCH_DISTANCE_METHOD: Method?
val POINT_OF_INTEREST_CLASS = getClass("net.minecraft.world.poi.PointOfInterestType", "net.minecraft.village.PointOfInterestType")
init {
POINT_OF_INTEREST_MATCHING_STATES_FIELD.isAccessible = true
SEARCH_DISTANCE_METHOD = try {
PointOfInterestType::class.java.getDeclaredMethod("method_21648")
private val POINT_OF_INTEREST_MATCHING_STATES_FIELD = getField(POINT_OF_INTEREST_CLASS, "blockStates")
private val SEARCH_DISTANCE_METHOD: Method? = try {
POINT_OF_INTEREST_CLASS?.getDeclaredMethod("method_21648")
} catch (exception: Exception) {
try {
POINT_OF_INTEREST_CLASS?.getDeclaredMethod("getSearchDistance")
} catch (exception: Exception) {
try {
PointOfInterestType::class.java.getDeclaredMethod("getSearchDistance")
} catch (exception: Exception) {
null
}
null
}
}
}

View File

@ -3,7 +3,9 @@ package de.bixilon.pixlyzer.generator.generators
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
import net.minecraft.entity.effect.StatusEffectInstance
import net.minecraft.potion.Potion
import net.minecraft.util.registry.Registry
object PotionGenerator : Generator(
@ -16,7 +18,9 @@ object PotionGenerator : Generator(
potionData.addProperty("id", Registry.POTION.getRawId(potion))
potionData.addProperty("name", potion.finishTranslationKey(""))
(POTION_NAME_FIELD.get(potion) as String?)?.let {
potionData.addProperty("name", it)
}
val effects = JsonArray()
@ -31,6 +35,8 @@ object PotionGenerator : Generator(
}
}
val POTION_NAME_FIELD = getField(Potion::class.java, "baseName", "name")!!
private fun StatusEffectInstance.serialize(): JsonObject {
val mobEffect = JsonObject()

View File

@ -84,6 +84,7 @@
"data": {
"PROJECTILE_FLAGS": "ABSTRACT_ARROW_FLAGS",
"PIERCE_LEVEL": "ABSTRACT_ARROW_PIERCE_LEVEL",
"OPTIONAL_UUID": "ABSTRACT_ARROW_OWNER_UUID",
"field_7580": "ABSTRACT_ARROW_OWNER_UUID"
}
},
@ -98,7 +99,8 @@
"data": {
"LOYALTY": "THROWN_TRIDENT_LOYALTY_LEVEL",
"ENCHANTED": "THROWN_TRIDENT_FOIL",
"ID_FOIL": "THROWN_TRIDENT_FOIL"
"ID_FOIL": "THROWN_TRIDENT_FOIL",
"field_21514": "THROWN_TRIDENT_FOIL"
}
},
"BoatEntity": {
@ -317,6 +319,7 @@
"COLLAR_COLOR": "WOLF_COLLAR_COLOR",
"DATA_REMAINING_ANGER_TIME": "WOLF_ANGER_TIME",
"ANGER_TIME": "WOLF_ANGER_TIME",
"field_25373": "WOLF_ANGER_TIME",
"WOLF_HEALTH": "WOLF_HEALTH"
}
},
@ -355,7 +358,8 @@
"data": {
"CARRIED_BLOCK": "ENDERMAN_CARRIED_BLOCK",
"ANGRY": "ENDERMAN_IS_SCREAMING",
"PROVOKED": "ENDERMAN_IS_STARRING"
"PROVOKED": "ENDERMAN_IS_STARRING",
"field_20618": "ENDERMAN_IS_STARRING"
}
},
"SpellcastingIllagerEntity": {
@ -476,8 +480,10 @@
},
"BeeEntity": {
"data": {
"multipleByteTracker": "BEE_FLAGS",
"STATUS_TRACKER": "BEE_FLAGS",
"ANGER": "BEE_REMAINING_ANGER_TIME"
"ANGER": "BEE_REMAINING_ANGER_TIME",
"anger": "BEE_REMAINING_ANGER_TIME"
}
},
"HoglinEntity": {
@ -494,9 +500,15 @@
"PiglinEntity": {
"data": {
"BABY": "PIGLIN_IS_BABY",
"field_22377": "PIGLIN_IS_BABY",
"CHARGING": "PIGLIN_IS_CHARGING_CROSSBOW",
"field_22378": "PIGLIN_IS_CHARGING_CROSSBOW",
"DANCING": "PIGLIN_IS_DANCING",
"IMMUNE_TO_ZOMBIFICATION": "PIGLIN_IMMUNE_TO_ZOMBIFICATION"
"dancing": "PIGLIN_IS_DANCING",
"field_25164": "PIGLIN_IS_DANCING",
"IMMUNE_TO_ZOMBIFICATION": "PIGLIN_IMMUNE_TO_ZOMBIFICATION",
"field_22419": "PIGLIN_IMMUNE_TO_ZOMBIFICATION",
"OLD_IMMUNE_TO_ZOMBIFICATION": "PIGLIN_IMMUNE_TO_ZOMBIFICATION"
}
},
"ZoglinEntity": {
@ -508,7 +520,10 @@
"data": {
"BOOST_TIME": "STRIDER_TIME_TO_BOOST",
"COLD": "STRIDER_IS_SUFFOCATING",
"SADDLED": "STRIDER_HAS_SADDLE"
"SADDLED": "STRIDER_HAS_SADDLE",
"field_23245": "STRIDER_TIME_TO_BOOST",
"field_23246": "STRIDER_IS_SUFFOCATING",
"field_23247": "STRIDER_HAS_SADDLE"
}
},
"AxolotlEntity": {
@ -525,6 +540,7 @@
},
"SkeletonEntity": {
"data": {
"field_28642": "SKELETON_STRAY_FREEZE_CONVERTING",
"CONVERTING": "SKELETON_STRAY_FREEZE_CONVERTING"
}
}

View File

@ -210,7 +210,7 @@ for version in VERSION_MANIFEST["versions"]:
versionStartTime = datetime.now()
print("Generating data for %s" % version["id"])
# execute
if runAndWait("%s -classpath \"%s:%s:%s:%s\" de.bixilon.pixlyzer.PixLyzer \"%s\" \"%s\" \"%s\"" % (JAVA_PATH, ADDITIONAL_CLASSPATH, DATA_FOLDER + version["id"] + "_yarn/" + version["id"] + "-named.jar", DATA_FOLDER + version["id"] + "_yarn/" + version["id"] + "_server_mojang.jar", "target/classes", OUT_FOLDER + version["id"], HASH_FOLDER, ASSETS_HASH_INDEX_FILE)) != 0:
if runAndWait("%s -Xverify:none -classpath \"%s:%s:%s:%s\" de.bixilon.pixlyzer.PixLyzer \"%s\" \"%s\" \"%s\"" % (JAVA_PATH, ADDITIONAL_CLASSPATH, DATA_FOLDER + version["id"] + "_yarn/" + version["id"] + "-named.jar", DATA_FOLDER + version["id"] + "_yarn/" + version["id"] + "_server_mojang.jar", "target/classes", OUT_FOLDER + version["id"], HASH_FOLDER, ASSETS_HASH_INDEX_FILE)) != 0:
print("PixLyzer did not run successfully for %s" % version["id"])
break