mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 10:55:01 -04:00
load data fixer from json
This commit is contained in:
parent
636090352d
commit
8600d2d8f3
@ -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.fallback.tags.FallbackTags
|
||||||
import de.bixilon.minosoft.data.registries.identified.Namespaces
|
import de.bixilon.minosoft.data.registries.identified.Namespaces
|
||||||
import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft
|
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.Eros
|
||||||
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport
|
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport
|
||||||
import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash
|
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.ASSETS_OVERRIDE, executor = { OVERRIDE_ASSETS_MANAGER.load(it) })
|
||||||
taskWorker += WorkerTask(identifier = BootTasks.MODS, executor = { ModLoader.load(LoadingPhases.BOOT, 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)
|
taskWorker.work(BOOT_LATCH)
|
||||||
|
@ -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.Registries
|
||||||
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
|
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
|
||||||
import de.bixilon.minosoft.data.registries.registries.registry.codec.ResourceLocationCodec
|
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.protocol.network.connection.play.PlayConnection
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
import de.bixilon.minosoft.util.logging.Log
|
import de.bixilon.minosoft.util.logging.Log
|
||||||
@ -115,7 +115,7 @@ data class EntityType(
|
|||||||
|
|
||||||
data["attributes"]?.toJsonObject()?.let {
|
data["attributes"]?.toJsonObject()?.let {
|
||||||
for ((name, value) in it) {
|
for ((name, value) in it) {
|
||||||
val type = MinecraftAttributes[name.toResourceLocation().fix()]
|
val type = MinecraftAttributes[name.toResourceLocation().fixEntityAttribute()]
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
Log.log(LogMessageType.LOADING, LogLevels.VERBOSE) { "Can not get entity attribute type: $name" }
|
Log.log(LogMessageType.LOADING, LogLevels.VERBOSE) { "Can not get entity attribute type: $name" }
|
||||||
continue
|
continue
|
||||||
|
@ -25,7 +25,7 @@ class BlockParticleData(val blockState: BlockState?, type: ParticleType) : Parti
|
|||||||
companion object : ParticleDataFactory<BlockParticleData> {
|
companion object : ParticleDataFactory<BlockParticleData> {
|
||||||
override fun read(buffer: PlayInByteBuffer, type: ParticleType): BlockParticleData {
|
override fun read(buffer: PlayInByteBuffer, type: ParticleType): BlockParticleData {
|
||||||
val blockStateId = if (buffer.versionId < ProtocolVersions.V_17W45A) {
|
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 {
|
} else {
|
||||||
buffer.readVarInt()
|
buffer.readVarInt()
|
||||||
}
|
}
|
||||||
|
@ -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.sound.SoundGroup
|
||||||
import de.bixilon.minosoft.data.registries.statistics.Statistic
|
import de.bixilon.minosoft.data.registries.statistics.Statistic
|
||||||
import de.bixilon.minosoft.datafixer.enumeration.EntityDataTypesFixer
|
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.c2s.play.entity.EntityActionC2SP
|
||||||
import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF
|
import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF
|
||||||
import de.bixilon.minosoft.protocol.versions.Version
|
import de.bixilon.minosoft.protocol.versions.Version
|
||||||
@ -251,7 +251,7 @@ class Registries(
|
|||||||
fun update(registries: JsonObject) {
|
fun update(registries: JsonObject) {
|
||||||
// TODO: Clear them first?
|
// TODO: Clear them first?
|
||||||
for ((key, value) in registries) {
|
for ((key, value) in registries) {
|
||||||
val fixedKey = key.toResourceLocation().fix()
|
val fixedKey = key.toResourceLocation().fixRegistry()
|
||||||
val registry = this[fixedKey]
|
val registry = this[fixedKey]
|
||||||
if (registry == null) {
|
if (registry == null) {
|
||||||
Log.log(LogMessageType.LOADING, LogLevels.WARN) { "Can not find registry: $fixedKey" }
|
Log.log(LogMessageType.LOADING, LogLevels.WARN) { "Can not find registry: $fixedKey" }
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.world.container.palette.palettes
|
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.data.registries.registries.registry.AbstractRegistry
|
||||||
import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer
|
import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer
|
||||||
|
|
||||||
@ -34,8 +35,7 @@ class ArrayPalette<T>(private val registry: AbstractRegistry<T?>, override val b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
override fun getOrNull(id: Int): T? {
|
override fun getOrNull(id: Int): T? {
|
||||||
return array.getOrNull(id) as T?
|
return array.getOrNull(id).unsafeCast()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,8 +25,8 @@ object BlockStatePaletteFactory : PaletteFactory {
|
|||||||
1, 2, 3, 4 -> return ArrayPalette(registry, 4)
|
1, 2, 3, 4 -> return ArrayPalette(registry, 4)
|
||||||
5, 6, 7, 8 -> return ArrayPalette(registry, bits)
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ class RegistryPalette<T>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
override fun getOrNull(id: Int): T? {
|
override fun getOrNull(id: Int): T? {
|
||||||
return registry.getOrNull(id)
|
return registry.getOrNull(id)
|
||||||
}
|
}
|
||||||
|
@ -13,15 +13,24 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.datafixer
|
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<String, String>.asResourceLocationMap(): Map<ResourceLocation, ResourceLocation> {
|
BlockEntityFixer,
|
||||||
val out: MutableMap<ResourceLocation, ResourceLocation> = mutableMapOf()
|
EntityAttributeFixer,
|
||||||
for ((key, value) in this) {
|
RegistryFixer,
|
||||||
out[ResourceLocation.of(key)] = ResourceLocation.of(value)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
fun load() {
|
||||||
|
for (fixer in this.fixer) {
|
||||||
|
fixer.load()
|
||||||
}
|
}
|
||||||
return out
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* 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.
|
* 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
|
package de.bixilon.minosoft.datafixer
|
||||||
|
|
||||||
interface Fixer
|
interface Fixer {
|
||||||
|
|
||||||
|
fun load() = Unit
|
||||||
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* 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.
|
* 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
|
package de.bixilon.minosoft.datafixer.enumeration
|
||||||
|
|
||||||
interface EnumFixer<T : Enum<*>> {
|
import de.bixilon.minosoft.datafixer.Fixer
|
||||||
|
|
||||||
|
interface EnumFixer<T : Enum<*>> : Fixer {
|
||||||
|
|
||||||
fun fix(name: String): T {
|
fun fix(name: String): T {
|
||||||
return _fix(name.lowercase())
|
return _fix(name.lowercase())
|
||||||
|
@ -13,44 +13,10 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.datafixer.rls
|
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.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.datafixer.DataFixerUtil.asResourceLocationMap
|
|
||||||
|
|
||||||
object BlockEntityFixer : ResourceLocationFixer {
|
object BlockEntityFixer : ResourceLocationFixer(minosoft("block_entity")) {
|
||||||
private val RENAMES: Map<ResourceLocation, ResourceLocation> = 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()
|
|
||||||
|
|
||||||
|
fun ResourceLocation.fixBlockEntity() = fix(this)
|
||||||
override fun _fix(resourceLocation: ResourceLocation): ResourceLocation {
|
|
||||||
return RENAMES.getOrDefault(resourceLocation, resourceLocation)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -13,32 +13,10 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.datafixer.rls
|
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.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.datafixer.DataFixerUtil.asResourceLocationMap
|
|
||||||
|
|
||||||
object EntityAttributeFixer : ResourceLocationFixer {
|
object EntityAttributeFixer : ResourceLocationFixer(minosoft("entity_attribute")) {
|
||||||
private val RENAMES: Map<ResourceLocation, ResourceLocation> = mapOf(
|
|
||||||
"generic.maxHealth" to "generic.max_health",
|
|
||||||
"zombie.spawnReinforcements" to "zombie.spawn_reinforcements",
|
|
||||||
|
|
||||||
"horse.jumpStrength" to "horse.jump_strength",
|
fun ResourceLocation.fixEntityAttribute() = fix(this)
|
||||||
|
|
||||||
"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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -13,17 +13,10 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.datafixer.rls
|
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.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.datafixer.DataFixerUtil.asResourceLocationMap
|
|
||||||
|
|
||||||
object RegistryFixer : ResourceLocationFixer {
|
object RegistryFixer : ResourceLocationFixer(minosoft("registry")) {
|
||||||
private val RENAMES: Map<ResourceLocation, ResourceLocation> = mapOf(
|
|
||||||
"dimension" to "dimension_type",
|
|
||||||
"motive" to "motif",
|
|
||||||
"worldgen/biome" to "biome",
|
|
||||||
).asResourceLocationMap()
|
|
||||||
|
|
||||||
override fun _fix(resourceLocation: ResourceLocation): ResourceLocation {
|
fun ResourceLocation.fixRegistry() = fix(this)
|
||||||
return RENAMES.getOrDefault(resourceLocation, resourceLocation)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -13,14 +13,29 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.datafixer.rls
|
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.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.datafixer.Fixer
|
import de.bixilon.minosoft.datafixer.Fixer
|
||||||
|
|
||||||
interface ResourceLocationFixer : Fixer {
|
abstract class ResourceLocationFixer(private val path: ResourceLocation) : Fixer {
|
||||||
|
private val renames: Map<ResourceLocation, ResourceLocation> = unsafeNull()
|
||||||
|
|
||||||
fun _fix(resourceLocation: ResourceLocation): ResourceLocation
|
|
||||||
|
|
||||||
fun ResourceLocation.fix(): ResourceLocation {
|
override fun load() {
|
||||||
return _fix(this)
|
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")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,5 +27,7 @@ enum class BootTasks {
|
|||||||
ASSETS_OVERRIDE,
|
ASSETS_OVERRIDE,
|
||||||
CLI,
|
CLI,
|
||||||
MODS,
|
MODS,
|
||||||
|
|
||||||
|
DATA_FIXER,
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ class BlockS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
|
|||||||
init {
|
init {
|
||||||
if (buffer.versionId < ProtocolVersions.V_14W03B) {
|
if (buffer.versionId < ProtocolVersions.V_14W03B) {
|
||||||
position = buffer.readByteBlockPosition()
|
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 {
|
} else {
|
||||||
position = buffer.readBlockPosition()
|
position = buffer.readBlockPosition()
|
||||||
state = buffer.connection.registries.blockState.getOrNull(buffer.readVarInt())
|
state = buffer.connection.registries.blockState.getOrNull(buffer.readVarInt())
|
||||||
|
@ -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.registries.dimension.DimensionProperties
|
||||||
import de.bixilon.minosoft.data.world.biome.source.SpatialBiomeArray
|
import de.bixilon.minosoft.data.world.biome.source.SpatialBiomeArray
|
||||||
import de.bixilon.minosoft.data.world.chunk.chunk.ChunkPrototype
|
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.VecUtil.of
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
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()) {
|
for (i in 0 until buffer.readVarInt()) {
|
||||||
val nbt = buffer.readNBT().asJsonObject()
|
val nbt = buffer.readNBT().asJsonObject()
|
||||||
val position = Vec3i(nbt["x"]?.toInt() ?: continue, nbt["y"]?.toInt() ?: continue, nbt["z"]?.toInt() ?: continue) - positionOffset
|
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 type = buffer.connection.registries.blockEntityType[id] ?: continue
|
||||||
|
|
||||||
val entity = type.build(buffer.connection)
|
val entity = type.build(buffer.connection)
|
||||||
|
@ -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.MinecraftAttributes
|
||||||
import de.bixilon.minosoft.data.registries.effects.attributes.container.AttributeContainerUpdate
|
import de.bixilon.minosoft.data.registries.effects.attributes.container.AttributeContainerUpdate
|
||||||
import de.bixilon.minosoft.data.registries.effects.attributes.container.AttributeModifier
|
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.network.connection.play.PlayConnection
|
||||||
import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket
|
import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_14W04A
|
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_14W04A
|
||||||
@ -42,7 +42,7 @@ class EntityAttributesS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
|
|||||||
buffer.readVarInt()
|
buffer.readVarInt()
|
||||||
}
|
}
|
||||||
for (i in 0 until attributeCount) {
|
for (i in 0 until attributeCount) {
|
||||||
val type = MinecraftAttributes[buffer.readResourceLocation().fix()]
|
val type = MinecraftAttributes[buffer.readResourceLocation().fixEntityAttribute()]
|
||||||
val baseValue: Double = buffer.readDouble()
|
val baseValue: Double = buffer.readDouble()
|
||||||
val update = AttributeContainerUpdate(base = baseValue)
|
val update = AttributeContainerUpdate(base = baseValue)
|
||||||
val modifierCount: Int = if (buffer.versionId < V_14W04A) buffer.readUnsignedShort() else buffer.readVarInt()
|
val modifierCount: Int = if (buffer.versionId < V_14W04A) buffer.readUnsignedShort() else buffer.readVarInt()
|
||||||
|
@ -55,7 +55,7 @@ class EntityObjectSpawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
|
|||||||
}
|
}
|
||||||
entity = if (buffer.versionId < ProtocolVersions.V_19W05A) {
|
entity = if (buffer.versionId < ProtocolVersions.V_19W05A) {
|
||||||
val entityResourceLocation = ENTITY_OBJECT_REGISTRY[type].identifier
|
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 {
|
} else {
|
||||||
buffer.connection.registries.entityType[type].build(buffer.connection, position, rotation, null, entityUUID, buffer.versionId)!!
|
buffer.connection.registries.entityType[type].build(buffer.connection, position, rotation, null, entityUUID, buffer.versionId)!!
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ class PlayOutByteBuffer(val connection: PlayConnection) : OutByteBuffer() {
|
|||||||
}
|
}
|
||||||
writeShort(connection.registries.item.getId(stack.item.item))
|
writeShort(connection.registries.item.getId(stack.item.item))
|
||||||
writeByte(stack.item.count)
|
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())
|
writeNBT(stack.getNBT())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
31
src/main/resources/assets/minosoft/fixer/block_entity.json
Normal file
31
src/main/resources/assets/minosoft/fixer/block_entity.json
Normal file
@ -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"
|
||||||
|
}
|
@ -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"
|
||||||
|
}
|
5
src/main/resources/assets/minosoft/fixer/registry.json
Normal file
5
src/main/resources/assets/minosoft/fixer/registry.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"dimension": "dimension_type",
|
||||||
|
"motive": "motif",
|
||||||
|
"worldgen/biome": "biome"
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user