From 8600d2d8f3f4864c5299f0cca91feea656e63f01 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 28 Sep 2023 18:28:22 +0200 Subject: [PATCH] load data fixer from json --- src/main/java/de/bixilon/minosoft/Minosoft.kt | 2 + .../data/registries/entities/EntityType.kt | 4 +- .../particle/data/BlockParticleData.kt | 2 +- .../data/registries/registries/Registries.kt | 4 +- .../palette/palettes/ArrayPalette.kt | 4 +- .../palettes/BlockStatePaletteFactory.kt | 4 +- .../palette/palettes/RegistryPalette.kt | 1 - .../{DataFixerUtil.kt => DataFixer.kt} | 23 +++++++---- .../de/bixilon/minosoft/datafixer/Fixer.kt | 7 +++- .../datafixer/enumeration/EnumFixer.kt | 6 ++- .../datafixer/rls/BlockEntityFixer.kt | 40 ++----------------- .../datafixer/rls/EntityAttributeFixer.kt | 28 ++----------- .../minosoft/datafixer/rls/RegistryFixer.kt | 13 ++---- .../datafixer/rls/ResourceLocationFixer.kt | 23 +++++++++-- .../de/bixilon/minosoft/main/BootTasks.kt | 2 + .../packets/s2c/play/block/BlockS2CP.kt | 2 +- .../packets/s2c/play/block/chunk/ChunkS2CP.kt | 4 +- .../s2c/play/entity/EntityAttributesS2CP.kt | 4 +- .../entity/spawn/EntityObjectSpawnS2CP.kt | 2 +- .../buffers/play/PlayOutByteBuffer.kt | 2 +- .../assets/minosoft/fixer/block_entity.json | 31 ++++++++++++++ .../minosoft/fixer/entity_attribute.json | 20 ++++++++++ .../assets/minosoft/fixer/registry.json | 5 +++ 23 files changed, 129 insertions(+), 104 deletions(-) rename src/main/java/de/bixilon/minosoft/datafixer/{DataFixerUtil.kt => DataFixer.kt} (63%) create mode 100644 src/main/resources/assets/minosoft/fixer/block_entity.json create mode 100644 src/main/resources/assets/minosoft/fixer/entity_attribute.json create mode 100644 src/main/resources/assets/minosoft/fixer/registry.json diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.kt b/src/main/java/de/bixilon/minosoft/Minosoft.kt index 79ed27e27..dddf6eb6d 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.kt +++ b/src/main/java/de/bixilon/minosoft/Minosoft.kt @@ -42,6 +42,7 @@ import de.bixilon.minosoft.data.registries.fallback.FallbackRegistries import de.bixilon.minosoft.data.registries.fallback.tags.FallbackTags import de.bixilon.minosoft.data.registries.identified.Namespaces import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft +import de.bixilon.minosoft.datafixer.DataFixer import de.bixilon.minosoft.gui.eros.Eros import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash @@ -124,6 +125,7 @@ object Minosoft { taskWorker += WorkerTask(identifier = BootTasks.ASSETS_OVERRIDE, executor = { OVERRIDE_ASSETS_MANAGER.load(it) }) taskWorker += WorkerTask(identifier = BootTasks.MODS, executor = { ModLoader.load(LoadingPhases.BOOT, it) }) + taskWorker += WorkerTask(identifier = BootTasks.DATA_FIXER, executor = { DataFixer.load() }) taskWorker.work(BOOT_LATCH) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt b/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt index ad57daf92..90ac737c6 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt @@ -31,7 +31,7 @@ import de.bixilon.minosoft.data.registries.item.items.SpawnEggItem import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem import de.bixilon.minosoft.data.registries.registries.registry.codec.ResourceLocationCodec -import de.bixilon.minosoft.datafixer.rls.EntityAttributeFixer.fix +import de.bixilon.minosoft.datafixer.rls.EntityAttributeFixer.fixEntityAttribute import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.logging.Log @@ -115,7 +115,7 @@ data class EntityType( data["attributes"]?.toJsonObject()?.let { for ((name, value) in it) { - val type = MinecraftAttributes[name.toResourceLocation().fix()] + val type = MinecraftAttributes[name.toResourceLocation().fixEntityAttribute()] if (type == null) { Log.log(LogMessageType.LOADING, LogLevels.VERBOSE) { "Can not get entity attribute type: $name" } continue diff --git a/src/main/java/de/bixilon/minosoft/data/registries/particle/data/BlockParticleData.kt b/src/main/java/de/bixilon/minosoft/data/registries/particle/data/BlockParticleData.kt index 8c1a178bc..bcd70d5f4 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/particle/data/BlockParticleData.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/particle/data/BlockParticleData.kt @@ -25,7 +25,7 @@ class BlockParticleData(val blockState: BlockState?, type: ParticleType) : Parti companion object : ParticleDataFactory { override fun read(buffer: PlayInByteBuffer, type: ParticleType): BlockParticleData { val blockStateId = if (buffer.versionId < ProtocolVersions.V_17W45A) { - buffer.readVarInt() shl 4 // ToDo: What about meta data? + buffer.readVarInt() shl 4 // ToDo: What about meta? } else { buffer.readVarInt() } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt index d5d398aac..17f68427f 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt @@ -54,7 +54,7 @@ import de.bixilon.minosoft.data.registries.shapes.ShapeRegistry import de.bixilon.minosoft.data.registries.sound.SoundGroup import de.bixilon.minosoft.data.registries.statistics.Statistic import de.bixilon.minosoft.datafixer.enumeration.EntityDataTypesFixer -import de.bixilon.minosoft.datafixer.rls.RegistryFixer.fix +import de.bixilon.minosoft.datafixer.rls.RegistryFixer.fixRegistry import de.bixilon.minosoft.protocol.packets.c2s.play.entity.EntityActionC2SP import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF import de.bixilon.minosoft.protocol.versions.Version @@ -251,7 +251,7 @@ class Registries( fun update(registries: JsonObject) { // TODO: Clear them first? for ((key, value) in registries) { - val fixedKey = key.toResourceLocation().fix() + val fixedKey = key.toResourceLocation().fixRegistry() val registry = this[fixedKey] if (registry == null) { Log.log(LogMessageType.LOADING, LogLevels.WARN) { "Can not find registry: $fixedKey" } diff --git a/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/ArrayPalette.kt b/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/ArrayPalette.kt index df8f54cf1..372fe3ee0 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/ArrayPalette.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/ArrayPalette.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.world.container.palette.palettes +import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.minosoft.data.registries.registries.registry.AbstractRegistry import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer @@ -34,8 +35,7 @@ class ArrayPalette(private val registry: AbstractRegistry, override val b } } - @Suppress("UNCHECKED_CAST") override fun getOrNull(id: Int): T? { - return array.getOrNull(id) as T? + return array.getOrNull(id).unsafeCast() } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/BlockStatePaletteFactory.kt b/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/BlockStatePaletteFactory.kt index c813bf98a..91be6a70e 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/BlockStatePaletteFactory.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/BlockStatePaletteFactory.kt @@ -25,8 +25,8 @@ object BlockStatePaletteFactory : PaletteFactory { 1, 2, 3, 4 -> return ArrayPalette(registry, 4) 5, 6, 7, 8 -> return ArrayPalette(registry, bits) } - if (version > V_17W46A) return RegistryPalette(registry) // flattened + if (version <= V_17W46A) return RegistryPalette(registry, 13) // minecraft uses 13 bits to encode the blocks (8 bits id + 4 bits meta + 1 magic bit, thanks) - return RegistryPalette(registry, 13) // minecraft uses 13 bits to encode the blocks (8 bits id + 4 bits meta + 1 magic bit, thanks) + return RegistryPalette(registry) // flattened } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/RegistryPalette.kt b/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/RegistryPalette.kt index 121f9d2cf..96b1e6a10 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/RegistryPalette.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/container/palette/palettes/RegistryPalette.kt @@ -32,7 +32,6 @@ class RegistryPalette( } } - @Suppress("UNCHECKED_CAST") override fun getOrNull(id: Int): T? { return registry.getOrNull(id) } diff --git a/src/main/java/de/bixilon/minosoft/datafixer/DataFixerUtil.kt b/src/main/java/de/bixilon/minosoft/datafixer/DataFixer.kt similarity index 63% rename from src/main/java/de/bixilon/minosoft/datafixer/DataFixerUtil.kt rename to src/main/java/de/bixilon/minosoft/datafixer/DataFixer.kt index 94f1f2f0e..65fb31c74 100644 --- a/src/main/java/de/bixilon/minosoft/datafixer/DataFixerUtil.kt +++ b/src/main/java/de/bixilon/minosoft/datafixer/DataFixer.kt @@ -13,15 +13,24 @@ package de.bixilon.minosoft.datafixer -import de.bixilon.minosoft.data.registries.identified.ResourceLocation +import de.bixilon.minosoft.datafixer.enumeration.EntityDataTypesFixer +import de.bixilon.minosoft.datafixer.rls.BlockEntityFixer +import de.bixilon.minosoft.datafixer.rls.EntityAttributeFixer +import de.bixilon.minosoft.datafixer.rls.RegistryFixer -object DataFixerUtil { +object DataFixer { + val fixer = listOf( + EntityDataTypesFixer, - fun Map.asResourceLocationMap(): Map { - val out: MutableMap = mutableMapOf() - for ((key, value) in this) { - out[ResourceLocation.of(key)] = ResourceLocation.of(value) + BlockEntityFixer, + EntityAttributeFixer, + RegistryFixer, + ) + + + fun load() { + for (fixer in this.fixer) { + fixer.load() } - return out } } diff --git a/src/main/java/de/bixilon/minosoft/datafixer/Fixer.kt b/src/main/java/de/bixilon/minosoft/datafixer/Fixer.kt index b8f71d268..8db9c19e1 100644 --- a/src/main/java/de/bixilon/minosoft/datafixer/Fixer.kt +++ b/src/main/java/de/bixilon/minosoft/datafixer/Fixer.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -13,4 +13,7 @@ package de.bixilon.minosoft.datafixer -interface Fixer +interface Fixer { + + fun load() = Unit +} diff --git a/src/main/java/de/bixilon/minosoft/datafixer/enumeration/EnumFixer.kt b/src/main/java/de/bixilon/minosoft/datafixer/enumeration/EnumFixer.kt index d972175bb..2f850c6aa 100644 --- a/src/main/java/de/bixilon/minosoft/datafixer/enumeration/EnumFixer.kt +++ b/src/main/java/de/bixilon/minosoft/datafixer/enumeration/EnumFixer.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -13,7 +13,9 @@ package de.bixilon.minosoft.datafixer.enumeration -interface EnumFixer> { +import de.bixilon.minosoft.datafixer.Fixer + +interface EnumFixer> : Fixer { fun fix(name: String): T { return _fix(name.lowercase()) diff --git a/src/main/java/de/bixilon/minosoft/datafixer/rls/BlockEntityFixer.kt b/src/main/java/de/bixilon/minosoft/datafixer/rls/BlockEntityFixer.kt index a2ebf83bd..b31a85170 100644 --- a/src/main/java/de/bixilon/minosoft/datafixer/rls/BlockEntityFixer.kt +++ b/src/main/java/de/bixilon/minosoft/datafixer/rls/BlockEntityFixer.kt @@ -13,44 +13,10 @@ package de.bixilon.minosoft.datafixer.rls +import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft import de.bixilon.minosoft.data.registries.identified.ResourceLocation -import de.bixilon.minosoft.datafixer.DataFixerUtil.asResourceLocationMap -object BlockEntityFixer : ResourceLocationFixer { - private val RENAMES: Map = mapOf( - "Furnace" to "minecraft:furnace", - "Chest" to "minecraft:chest", - "EnderChest" to "minecraft:ender_chest", - "RecordPlayer" to "minecraft:jukebox", - "Trap" to "minecraft:dispenser", - "Dropper" to "minecraft:dropper", - "Sign" to "minecraft:sign", - "wall_sign" to "minecraft:sign", - "MobSpawner" to "minecraft:mob_spawner", - "Music" to "minecraft:note_block", - "Cauldron" to "minecraft:brewing_stand", - "EnchantTable" to "minecraft:enchanting_table", - "CommandBlock" to "minecraft:command_block", - "Beacon" to "minecraft:beacon", - "Skull" to "minecraft:skull", - "DLDetector" to "minecraft:daylight_detector", - "Hopper" to "minecraft:hopper", - "Banner" to "minecraft:banner", - "FlowerPot" to "minecraft:flower_pot", - "Sign" to "minecraft:sign", - "Piston" to "minecraft:piston", - "Comparator" to "minecraft:comparator", - "minecraft:unpowered_comparator" to "minecraft:comparator", - "minecraft:powered_comparator" to "minecraft:comparator", - "Structure" to "minecraft:structure_block", - "Airportal" to "minecraft:end_portal", - "EndGateway" to "minecraft:end_gateway", - "minecraft:noteblock" to "minecraft:note_block", - "Bed" to "minecraft:bed", - ).asResourceLocationMap() +object BlockEntityFixer : ResourceLocationFixer(minosoft("block_entity")) { - - override fun _fix(resourceLocation: ResourceLocation): ResourceLocation { - return RENAMES.getOrDefault(resourceLocation, resourceLocation) - } + fun ResourceLocation.fixBlockEntity() = fix(this) } diff --git a/src/main/java/de/bixilon/minosoft/datafixer/rls/EntityAttributeFixer.kt b/src/main/java/de/bixilon/minosoft/datafixer/rls/EntityAttributeFixer.kt index 6b3611a8f..99236682b 100644 --- a/src/main/java/de/bixilon/minosoft/datafixer/rls/EntityAttributeFixer.kt +++ b/src/main/java/de/bixilon/minosoft/datafixer/rls/EntityAttributeFixer.kt @@ -13,32 +13,10 @@ package de.bixilon.minosoft.datafixer.rls +import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft import de.bixilon.minosoft.data.registries.identified.ResourceLocation -import de.bixilon.minosoft.datafixer.DataFixerUtil.asResourceLocationMap -object EntityAttributeFixer : ResourceLocationFixer { - private val RENAMES: Map = mapOf( - "generic.maxHealth" to "generic.max_health", - "zombie.spawnReinforcements" to "zombie.spawn_reinforcements", +object EntityAttributeFixer : ResourceLocationFixer(minosoft("entity_attribute")) { - "horse.jumpStrength" to "horse.jump_strength", - - "generic.followRange" to "generic.follow_range", - - "generic.knockbackResistance" to "generic.knockback_resistance", - - "generic.movementSpeed" to "generic.movement_speed", - - "generic.flyingSpeed" to "generic.flying_speed", - - "generic.attackDamage" to "generic.attack_damage", - "generic.attackKnockback" to "generic.attack_knockback", - "generic.attackSpeed" to "generic.attack_speed", - "generic.armorToughness" to "generic.armor_toughness", - ).asResourceLocationMap() - - - override fun _fix(resourceLocation: ResourceLocation): ResourceLocation { - return RENAMES.getOrDefault(resourceLocation, resourceLocation) - } + fun ResourceLocation.fixEntityAttribute() = fix(this) } diff --git a/src/main/java/de/bixilon/minosoft/datafixer/rls/RegistryFixer.kt b/src/main/java/de/bixilon/minosoft/datafixer/rls/RegistryFixer.kt index 5dbeb83ef..082575e21 100644 --- a/src/main/java/de/bixilon/minosoft/datafixer/rls/RegistryFixer.kt +++ b/src/main/java/de/bixilon/minosoft/datafixer/rls/RegistryFixer.kt @@ -13,17 +13,10 @@ package de.bixilon.minosoft.datafixer.rls +import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft import de.bixilon.minosoft.data.registries.identified.ResourceLocation -import de.bixilon.minosoft.datafixer.DataFixerUtil.asResourceLocationMap -object RegistryFixer : ResourceLocationFixer { - private val RENAMES: Map = mapOf( - "dimension" to "dimension_type", - "motive" to "motif", - "worldgen/biome" to "biome", - ).asResourceLocationMap() +object RegistryFixer : ResourceLocationFixer(minosoft("registry")) { - override fun _fix(resourceLocation: ResourceLocation): ResourceLocation { - return RENAMES.getOrDefault(resourceLocation, resourceLocation) - } + fun ResourceLocation.fixRegistry() = fix(this) } diff --git a/src/main/java/de/bixilon/minosoft/datafixer/rls/ResourceLocationFixer.kt b/src/main/java/de/bixilon/minosoft/datafixer/rls/ResourceLocationFixer.kt index 8d461b7a3..33a45a7c7 100644 --- a/src/main/java/de/bixilon/minosoft/datafixer/rls/ResourceLocationFixer.kt +++ b/src/main/java/de/bixilon/minosoft/datafixer/rls/ResourceLocationFixer.kt @@ -13,14 +13,29 @@ package de.bixilon.minosoft.datafixer.rls +import de.bixilon.kutil.cast.CastUtil.unsafeNull +import de.bixilon.kutil.reflection.ReflectionUtil.forceSet +import de.bixilon.minosoft.Minosoft +import de.bixilon.minosoft.assets.util.InputStreamUtil.readJson import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.datafixer.Fixer -interface ResourceLocationFixer : Fixer { +abstract class ResourceLocationFixer(private val path: ResourceLocation) : Fixer { + private val renames: Map = unsafeNull() - fun _fix(resourceLocation: ResourceLocation): ResourceLocation - fun ResourceLocation.fix(): ResourceLocation { - return _fix(this) + override fun load() { + this::renames.forceSet(Minosoft.MINOSOFT_ASSETS_MANAGER[this.path.fixer()].readJson()) + } + + open fun fix(resourceLocation: ResourceLocation): ResourceLocation { + return renames[resourceLocation] ?: resourceLocation + } + + + companion object { + private fun ResourceLocation.fixer(): ResourceLocation { + return this.prefix("fixer/").suffix(".json") + } } } diff --git a/src/main/java/de/bixilon/minosoft/main/BootTasks.kt b/src/main/java/de/bixilon/minosoft/main/BootTasks.kt index c30d8cf13..191a2c4a4 100644 --- a/src/main/java/de/bixilon/minosoft/main/BootTasks.kt +++ b/src/main/java/de/bixilon/minosoft/main/BootTasks.kt @@ -27,5 +27,7 @@ enum class BootTasks { ASSETS_OVERRIDE, CLI, MODS, + + DATA_FIXER, ; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockS2CP.kt index 9128d629e..37e327d8b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/BlockS2CP.kt @@ -31,7 +31,7 @@ class BlockS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { init { if (buffer.versionId < ProtocolVersions.V_14W03B) { position = buffer.readByteBlockPosition() - state = buffer.connection.registries.blockState.getOrNull(buffer.readVarInt() shl 4 or buffer.readByte().toInt()) // ToDo: When was the meta data "compacted"? (between 1.7.10 - 1.8) + state = buffer.connection.registries.blockState.getOrNull(buffer.readVarInt() shl 4 or buffer.readByte().toInt()) // ToDo: When was the meta "compacted"? (between 1.7.10 - 1.8) } else { position = buffer.readBlockPosition() state = buffer.connection.registries.blockState.getOrNull(buffer.readVarInt()) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkS2CP.kt index 3d6e2e47d..c2b860016 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/block/chunk/ChunkS2CP.kt @@ -26,7 +26,7 @@ import de.bixilon.minosoft.data.registries.biomes.Biome import de.bixilon.minosoft.data.registries.dimension.DimensionProperties import de.bixilon.minosoft.data.world.biome.source.SpatialBiomeArray import de.bixilon.minosoft.data.world.chunk.chunk.ChunkPrototype -import de.bixilon.minosoft.datafixer.rls.BlockEntityFixer.fix +import de.bixilon.minosoft.datafixer.rls.BlockEntityFixer.fixBlockEntity import de.bixilon.minosoft.gui.rendering.util.VecUtil.of import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection @@ -112,7 +112,7 @@ class ChunkS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { for (i in 0 until buffer.readVarInt()) { val nbt = buffer.readNBT().asJsonObject() val position = Vec3i(nbt["x"]?.toInt() ?: continue, nbt["y"]?.toInt() ?: continue, nbt["z"]?.toInt() ?: continue) - positionOffset - val id = (nbt["id"]?.toResourceLocation() ?: continue).fix() + val id = (nbt["id"]?.toResourceLocation() ?: continue).fixBlockEntity() val type = buffer.connection.registries.blockEntityType[id] ?: continue val entity = type.build(buffer.connection) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAttributesS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAttributesS2CP.kt index 45c36c009..dd78e7ba1 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAttributesS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/EntityAttributesS2CP.kt @@ -19,7 +19,7 @@ import de.bixilon.minosoft.data.registries.effects.attributes.AttributeType import de.bixilon.minosoft.data.registries.effects.attributes.MinecraftAttributes import de.bixilon.minosoft.data.registries.effects.attributes.container.AttributeContainerUpdate import de.bixilon.minosoft.data.registries.effects.attributes.container.AttributeModifier -import de.bixilon.minosoft.datafixer.rls.EntityAttributeFixer.fix +import de.bixilon.minosoft.datafixer.rls.EntityAttributeFixer.fixEntityAttribute import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_14W04A @@ -42,7 +42,7 @@ class EntityAttributesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { buffer.readVarInt() } for (i in 0 until attributeCount) { - val type = MinecraftAttributes[buffer.readResourceLocation().fix()] + val type = MinecraftAttributes[buffer.readResourceLocation().fixEntityAttribute()] val baseValue: Double = buffer.readDouble() val update = AttributeContainerUpdate(base = baseValue) val modifierCount: Int = if (buffer.versionId < V_14W04A) buffer.readUnsignedShort() else buffer.readVarInt() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityObjectSpawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityObjectSpawnS2CP.kt index ab23b52be..764420463 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityObjectSpawnS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/entity/spawn/EntityObjectSpawnS2CP.kt @@ -55,7 +55,7 @@ class EntityObjectSpawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { } entity = if (buffer.versionId < ProtocolVersions.V_19W05A) { val entityResourceLocation = ENTITY_OBJECT_REGISTRY[type].identifier - buffer.connection.registries.entityType[entityResourceLocation]!!.build(buffer.connection, position, rotation, null, entityUUID, buffer.versionId)!! // ToDo: Entity meta data tweaking + buffer.connection.registries.entityType[entityResourceLocation]!!.build(buffer.connection, position, rotation, null, entityUUID, buffer.versionId)!! // ToDo: Entity data tweaking } else { buffer.connection.registries.entityType[type].build(buffer.connection, position, rotation, null, entityUUID, buffer.versionId)!! } diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/buffers/play/PlayOutByteBuffer.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/buffers/play/PlayOutByteBuffer.kt index 9db216db8..eb52e67ef 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/buffers/play/PlayOutByteBuffer.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/buffers/play/PlayOutByteBuffer.kt @@ -56,7 +56,7 @@ class PlayOutByteBuffer(val connection: PlayConnection) : OutByteBuffer() { } writeShort(connection.registries.item.getId(stack.item.item)) writeByte(stack.item.count) - writeShort(stack._durability?.durability ?: 0) // ToDo: This is meta data in general and not just durability + writeShort(stack._durability?.durability ?: 0) // ToDo: This is meta in general and not just durability writeNBT(stack.getNBT()) return } diff --git a/src/main/resources/assets/minosoft/fixer/block_entity.json b/src/main/resources/assets/minosoft/fixer/block_entity.json new file mode 100644 index 000000000..67564ba4d --- /dev/null +++ b/src/main/resources/assets/minosoft/fixer/block_entity.json @@ -0,0 +1,31 @@ +{ + "Furnace": "furnace", + "Chest": "chest", + "EnderChest": "ender_chest", + "RecordPlayer": "jukebox", + "Trap": "dispenser", + "Dropper": "dropper", + "Sign": "sign", + "wall_sign": "sign", + "MobSpawner": "mob_spawner", + "Music": "note_block", + "Cauldron": "brewing_stand", + "EnchantTable": "enchanting_table", + "CommandBlock": "command_block", + "Beacon": "beacon", + "Skull": "skull", + "DLDetector": "daylight_detector", + "Hopper": "hopper", + "Banner": "banner", + "FlowerPot": "flower_pot", + "Sign": "sign", + "Piston": "piston", + "Comparator": "comparator", + "unpowered_comparator": "comparator", + "powered_comparator": "comparator", + "Structure": "structure_block", + "Airportal": "end_portal", + "EndGateway": "end_gateway", + "noteblock": "note_block", + "Bed": "bed" +} diff --git a/src/main/resources/assets/minosoft/fixer/entity_attribute.json b/src/main/resources/assets/minosoft/fixer/entity_attribute.json new file mode 100644 index 000000000..f0ada97e9 --- /dev/null +++ b/src/main/resources/assets/minosoft/fixer/entity_attribute.json @@ -0,0 +1,20 @@ +{ + + "generic.maxHealth": "generic.max_health", + "zombie.spawnReinforcements": "zombie.spawn_reinforcements", + + "horse.jumpStrength": "horse.jump_strength", + + "generic.followRange": "generic.follow_range", + + "generic.knockbackResistance": "generic.knockback_resistance", + + "generic.movementSpeed": "generic.movement_speed", + + "generic.flyingSpeed": "generic.flying_speed", + + "generic.attackDamage": "generic.attack_damage", + "generic.attackKnockback": "generic.attack_knockback", + "generic.attackSpeed": "generic.attack_speed", + "generic.armorToughness": "generic.armor_toughness" +} diff --git a/src/main/resources/assets/minosoft/fixer/registry.json b/src/main/resources/assets/minosoft/fixer/registry.json new file mode 100644 index 000000000..bf3f710ae --- /dev/null +++ b/src/main/resources/assets/minosoft/fixer/registry.json @@ -0,0 +1,5 @@ +{ + "dimension": "dimension_type", + "motive": "motif", + "worldgen/biome": "biome" +}