From 37f045db2756819ba2d230176d38a533f0538bd2 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 30 Dec 2021 16:23:09 +0100 Subject: [PATCH] remove some NBTUtil functions --- .../minecraft/index/IndexAssetsManager.kt | 4 +- .../data/accounts/types/MojangAccount.kt | 8 ++-- .../minosoft/data/inventory/ItemStack.kt | 4 +- .../properties/textures/PlayerTextures.kt | 10 ++--- .../data/registries/DefaultRegistries.kt | 28 +++++++------- .../data/registries/blocks/BlockState.kt | 4 +- .../data/registries/blocks/types/Block.kt | 4 +- .../data/registries/effects/StatusEffect.kt | 8 ++-- .../data/registries/entities/EntityType.kt | 6 +-- .../data/registries/items/FoodItem.kt | 4 +- .../data/registries/particle/ParticleType.kt | 4 +- .../data/registries/registries/Registries.kt | 38 +++++++++---------- .../registries/registries/RegistriesLoader.kt | 6 +-- .../registries/registry/FakeEnumRegistry.kt | 4 +- .../registries/registry/PerVersionRegistry.kt | 4 +- .../registries/registry/Registry.kt | 4 +- .../minosoft/data/text/BaseComponent.kt | 6 +-- .../data/text/events/data/EntityHoverData.kt | 6 +-- .../gui/elements/items/ItemElement.kt | 2 +- .../interaction/ItemPickInteractionHandler.kt | 2 +- .../models/unbaked/GenericUnbakedModel.kt | 6 +-- .../unbaked/block/MultipartRootModel.kt | 7 ++-- .../models/unbaked/element/UnbakedElement.kt | 8 ++-- .../gui/rendering/sound/SoundManager.kt | 4 +- .../s2c/play/BlockEntityMetaDataS2CP.kt | 4 +- .../packets/s2c/play/ChunkDataS2CP.kt | 10 ++--- .../protocol/packets/s2c/play/JoinGameS2CP.kt | 14 +++---- .../packets/s2c/play/NBTQueryResponseS2CP.kt | 4 +- .../protocol/packets/s2c/play/RespawnS2CP.kt | 4 +- .../protocol/protocol/PlayInByteBuffer.kt | 6 +-- .../minosoft/protocol/status/ServerStatus.kt | 6 +-- .../account/microsoft/MicrosoftOAuthUtils.kt | 4 +- .../bixilon/minosoft/util/nbt/tag/NBTUtil.kt | 13 +++++-- 33 files changed, 126 insertions(+), 120 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt b/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt index cef3e993e..2a8b4eb90 100644 --- a/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/assets/minecraft/index/IndexAssetsManager.kt @@ -17,6 +17,7 @@ import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.primitive.LongUtil.toLong import de.bixilon.kutil.string.StringUtil.format @@ -33,7 +34,6 @@ import de.bixilon.minosoft.util.json.Jackson import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import java.io.File import java.io.FileNotFoundException import java.io.IOException @@ -82,7 +82,7 @@ class IndexAssetsManager( var assets = FileUtil.safeReadFile(FileAssetsUtil.getPath(indexHash))?.readJsonObject() ?: downloadAssetsIndex() - assets["objects"].let { assets = it.asCompound() } + assets["objects"].let { assets = it.asJsonObject() } val tasks = CountUpAndDownLatch(0) val assetsLatch = CountUpAndDownLatch(assets.size, parent = latch) diff --git a/src/main/java/de/bixilon/minosoft/data/accounts/types/MojangAccount.kt b/src/main/java/de/bixilon/minosoft/data/accounts/types/MojangAccount.kt index 299a7f5b6..5167b1425 100644 --- a/src/main/java/de/bixilon/minosoft/data/accounts/types/MojangAccount.kt +++ b/src/main/java/de/bixilon/minosoft/data/accounts/types/MojangAccount.kt @@ -16,6 +16,7 @@ package de.bixilon.minosoft.data.accounts.types import com.fasterxml.jackson.annotation.JsonProperty import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.uuid.UUIDUtil.toUUID import de.bixilon.minosoft.data.accounts.Account import de.bixilon.minosoft.data.player.properties.PlayerProperties @@ -28,7 +29,6 @@ import de.bixilon.minosoft.util.http.exceptions.AuthenticationException import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import java.util.* @Deprecated("Mojang authentication is legacy. Will be removed in the future!") @@ -117,10 +117,10 @@ class MojangAccount( Log.log(LogMessageType.AUTHENTICATION, LogLevels.VERBOSE) { "Mojang login successful (email=$email)" } - val uuid = response.body["selectedProfile"].asCompound()["id"].toString().toUUID() + val uuid = response.body["selectedProfile"].asJsonObject()["id"].toString().toUUID() return MojangAccount( - id = response.body["user"].asCompound()["id"].unsafeCast(), - username = response.body["selectedProfile"].asCompound()["name"].unsafeCast(), + id = response.body["user"].asJsonObject()["id"].unsafeCast(), + username = response.body["selectedProfile"].asJsonObject()["name"].unsafeCast(), uuid = uuid, email = email, accessToken = response.body["accessToken"].unsafeCast(), diff --git a/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt b/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt index e5903e54f..e6e78eef2 100644 --- a/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt +++ b/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt @@ -42,9 +42,9 @@ import de.bixilon.minosoft.data.text.TextFormattable import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.util.BitByte.isBit import de.bixilon.minosoft.util.KUtil.synchronizedDeepCopy -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.getAndRemove import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.toMutableJsonObject import java.util.* class ItemStack( @@ -182,7 +182,7 @@ class ItemStack( nbt.getAndRemove(REPAIR_COST_TAG).nullCast()?.let { repairCost = it.toInt() } - nbt.getAndRemove(DISPLAY_TAG)?.compoundCast()?.let { + nbt.getAndRemove(DISPLAY_TAG)?.toMutableJsonObject()?.let { it.getAndRemove(DISPLAY_MAME_TAG).nullCast()?.let { nameTag -> customDisplayName = ChatComponent.of(nameTag, translator = connection?.language) } diff --git a/src/main/java/de/bixilon/minosoft/data/player/properties/textures/PlayerTextures.kt b/src/main/java/de/bixilon/minosoft/data/player/properties/textures/PlayerTextures.kt index 734f58b73..d1e7a9c69 100644 --- a/src/main/java/de/bixilon/minosoft/data/player/properties/textures/PlayerTextures.kt +++ b/src/main/java/de/bixilon/minosoft/data/player/properties/textures/PlayerTextures.kt @@ -2,11 +2,11 @@ package de.bixilon.minosoft.data.player.properties.textures import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.module.kotlin.convertValue +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.LongUtil.toLong import de.bixilon.kutil.uuid.UUIDUtil.toUUID import de.bixilon.minosoft.util.YggdrasilUtil import de.bixilon.minosoft.util.json.Jackson -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.util.* class PlayerTextures( @@ -25,14 +25,14 @@ class PlayerTextures( val json: Map = Jackson.MAPPER.readValue(Base64.getDecoder().decode(encoded), Jackson.JSON_MAP_TYPE) // Data also contains `signatureRequired` - val textures = json["textures"]?.compoundCast() + val textures = json["textures"]?.toJsonObject() return PlayerTextures( name = json["profileName"]?.toString(), uuid = json["profileId"]?.toString()?.toUUID(), date = json["timestamp"]?.toLong()?.let { Date(it) }, - skin = textures?.get("SKIN")?.compoundCast()?.let { return@let Jackson.MAPPER.convertValue(it) }, - cape = textures?.get("CAPE")?.compoundCast()?.let { return@let Jackson.MAPPER.convertValue(it) }, - elytra = textures?.get("ELYTRA")?.compoundCast()?.let { return@let Jackson.MAPPER.convertValue(it) }, + skin = textures?.get("SKIN")?.toJsonObject()?.let { return@let Jackson.MAPPER.convertValue(it) }, + cape = textures?.get("CAPE")?.toJsonObject()?.let { return@let Jackson.MAPPER.convertValue(it) }, + elytra = textures?.get("ELYTRA")?.toJsonObject()?.let { return@let Jackson.MAPPER.convertValue(it) }, ) } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/DefaultRegistries.kt b/src/main/java/de/bixilon/minosoft/data/registries/DefaultRegistries.kt index 3cd6d140e..93e979a77 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/DefaultRegistries.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/DefaultRegistries.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.registries +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject import de.bixilon.minosoft.data.entities.EntityObjectType @@ -28,7 +29,6 @@ import de.bixilon.minosoft.protocol.packets.c2s.play.EntityActionC2SP import de.bixilon.minosoft.protocol.packets.s2c.play.EntityAnimationS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound object DefaultRegistries { private val ENUM_RESOURCE_LOCATION = ResourceLocation("minosoft:mapping/enums.json") @@ -62,29 +62,29 @@ object DefaultRegistries { val enumJson = Minosoft.MINOSOFT_ASSETS_MANAGER[ENUM_RESOURCE_LOCATION].readJsonObject().toResourceLocationMap() - EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("equipment_slots")].asCompound()) - HAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("hand_equipment_slots")].asCompound()) - ARMOR_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_equipment_slots")].asCompound()) - ARMOR_STAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_stand_equipment_slots")].asCompound()) + EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("equipment_slots")].asJsonObject()) + HAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("hand_equipment_slots")].asJsonObject()) + ARMOR_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_equipment_slots")].asJsonObject()) + ARMOR_STAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_stand_equipment_slots")].asJsonObject()) - ENTITY_META_DATA_DATA_TYPES_REGISTRY.initialize(enumJson[ResourceLocation("entity_meta_data_data_types")].asCompound()) + ENTITY_META_DATA_DATA_TYPES_REGISTRY.initialize(enumJson[ResourceLocation("entity_meta_data_data_types")].asJsonObject()) - TITLE_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("title_actions")].asCompound()) + TITLE_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("title_actions")].asJsonObject()) - ENTITY_ANIMATION_REGISTRY.initialize(enumJson[ResourceLocation("entity_animations")].asCompound()) - ENTITY_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("entity_actions")].asCompound()) + ENTITY_ANIMATION_REGISTRY.initialize(enumJson[ResourceLocation("entity_animations")].asJsonObject()) + ENTITY_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("entity_actions")].asJsonObject()) val registriesJson = Minosoft.MINOSOFT_ASSETS_MANAGER[REGISTRIES_RESOURCE_LOCATION].readJsonObject().toResourceLocationMap() - DEFAULT_PLUGIN_CHANNELS_REGISTRY.initialize(registriesJson[ResourceLocation("default_plugin_channels")].asCompound(), PluginChannel) + DEFAULT_PLUGIN_CHANNELS_REGISTRY.initialize(registriesJson[ResourceLocation("default_plugin_channels")].asJsonObject(), PluginChannel) - ENTITY_OBJECT_REGISTRY.rawInitialize(registriesJson[ResourceLocation("entity_objects")].asCompound(), null, EntityObjectType) + ENTITY_OBJECT_REGISTRY.rawInitialize(registriesJson[ResourceLocation("entity_objects")].asJsonObject(), null, EntityObjectType) - BLOCK_ENTITY_META_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("block_entity_meta_data_types")].asCompound(), BlockEntityMetaType) + BLOCK_ENTITY_META_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("block_entity_meta_data_types")].asJsonObject(), BlockEntityMetaType) - CONTAINER_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("container_types")].asCompound(), ContainerType) - GAME_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation("game_events")].asCompound(), GameEvent) + CONTAINER_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("container_types")].asJsonObject(), ContainerType) + GAME_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation("game_events")].asJsonObject(), GameEvent) initialized = true } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockState.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockState.kt index 5a3cc880b..bbda27352 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockState.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockState.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.registries.blocks import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.kutil.primitive.FloatUtil.toFloat import de.bixilon.kutil.primitive.IntUtil.toInt @@ -23,7 +24,6 @@ import de.bixilon.minosoft.data.registries.blocks.types.Block import de.bixilon.minosoft.data.registries.materials.Material import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.gui.rendering.models.baked.block.BakedBlockModel -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.util.* data class BlockState( @@ -104,7 +104,7 @@ data class BlockState( companion object { fun deserialize(block: Block, registries: Registries, data: Map): BlockState { - val properties = data["properties"]?.compoundCast()?.let { + val properties = data["properties"]?.toJsonObject()?.let { getProperties(it) } ?: mutableMapOf() diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/Block.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/Block.kt index 07e1b92ab..355cd39f3 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/Block.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/Block.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.registries.blocks.types import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeNull +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.primitive.DoubleUtil.toDouble import de.bixilon.kutil.primitive.FloatUtil.toFloat import de.bixilon.kutil.primitive.IntUtil.toInt @@ -39,7 +40,6 @@ import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults import de.bixilon.minosoft.gui.rendering.tint.TintProvider import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.util.CastUtil.asAnyMap -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import glm_.vec3.Vec3i import kotlin.random.Random @@ -123,7 +123,7 @@ open class Block( val states: MutableSet = mutableSetOf() for ((stateId, stateJson) in data["states"].asAnyMap()) { check(stateJson is Map<*, *>) { "Not a state element!" } - val state = BlockState.deserialize(block, registries, stateJson.asCompound()) + val state = BlockState.deserialize(block, registries, stateJson.asJsonObject()) registries.blockStateRegistry[stateId.toInt()] = state states.add(state) for ((property, value) in state.properties) { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt b/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt index 47676175b..7e3e23356 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt @@ -13,6 +13,8 @@ package de.bixilon.minosoft.data.registries.effects import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.asJsonObject +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.effects.attributes.EntityAttributeModifier import de.bixilon.minosoft.data.registries.registries.Registries @@ -23,8 +25,6 @@ import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.data.text.RGBColor.Companion.asRGBColor import de.bixilon.minosoft.datafixer.EntityAttributeFixer.fix import de.bixilon.minosoft.util.KUtil.toResourceLocation -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.util.* data class StatusEffect( @@ -45,9 +45,9 @@ data class StatusEffect( val attributes: MutableMap = mutableMapOf() val uuidAttributes: MutableMap = mutableMapOf() - data["attributes"]?.compoundCast()?.let { + data["attributes"]?.toJsonObject()?.let { for ((key, value) in it) { - val attribute = EntityAttributeModifier.deserialize(value.asCompound()) + val attribute = EntityAttributeModifier.deserialize(value.asJsonObject()) attributes[ResourceLocation.getResourceLocation(key).fix()] = attribute uuidAttributes[attribute.uuid] = attribute } 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 b72375981..9d328d366 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 @@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.registries.entities import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.minosoft.data.DefaultEntityFactories import de.bixilon.minosoft.data.entities.EntityMetaDataFields @@ -30,7 +31,6 @@ import de.bixilon.minosoft.data.registries.registries.registry.Translatable import de.bixilon.minosoft.datafixer.EntityAttributeFixer.fix import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.util.KUtil.toResourceLocation -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import glm_.vec3.Vec3d import java.util.* @@ -59,7 +59,7 @@ data class EntityType( override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): EntityType? { check(registries != null) { "Registries is null!" } - data["meta"]?.compoundCast()?.let { + data["meta"]?.toJsonObject()?.let { for ((minosoftFieldName, index) in it) { val minosoftField = EntityMetaDataFields[minosoftFieldName.lowercase(Locale.getDefault())] registries.entityMetaIndexMap[minosoftField] = index.unsafeCast() @@ -72,7 +72,7 @@ data class EntityType( val attributes: MutableMap = mutableMapOf() - data["attributes"]?.compoundCast()?.let { + data["attributes"]?.toJsonObject()?.let { for ((attributeResourceLocation, value) in it) { attributes[ResourceLocation.getResourceLocation(attributeResourceLocation).fix()] = value.unsafeCast() } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/items/FoodItem.kt b/src/main/java/de/bixilon/minosoft/data/registries/items/FoodItem.kt index 7693f3b2f..5a7cfef71 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/items/FoodItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/items/FoodItem.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.registries.items +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.primitive.BooleanUtil.decide import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.kutil.primitive.FloatUtil.toFloat @@ -25,7 +26,6 @@ import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.gui.rendering.gui.hud.elements.hotbar.HotbarHungerElement import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound open class FoodItem( resourceLocation: ResourceLocation, @@ -39,7 +39,7 @@ open class FoodItem( val timeToEat: Int init { - val foodProperties = data["food_properties"].asCompound() + val foodProperties = data["food_properties"].asJsonObject() nutrition = foodProperties["nutrition"]?.toInt() ?: 0 saturationModifier = foodProperties["saturation_modifier"]?.toFloat() ?: 0.0f isMeat = foodProperties["is_meat"]?.toBoolean() ?: false diff --git a/src/main/java/de/bixilon/minosoft/data/registries/particle/ParticleType.kt b/src/main/java/de/bixilon/minosoft/data/registries/particle/ParticleType.kt index 77fbd3765..cb2e12f57 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/particle/ParticleType.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/particle/ParticleType.kt @@ -12,6 +12,7 @@ */ package de.bixilon.minosoft.data.registries.particle +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.particle.data.ParticleData @@ -22,7 +23,6 @@ import de.bixilon.minosoft.gui.rendering.particle.DefaultParticleFactory import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory import de.bixilon.minosoft.gui.rendering.particle.types.Particle import de.bixilon.minosoft.gui.rendering.textures.Texture -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast data class ParticleType( @@ -43,7 +43,7 @@ data class ParticleType( companion object : ResourceLocationDeserializer { override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): ParticleType { val textures: MutableList = mutableListOf() - data["render"]?.compoundCast()?.get("textures")?.listCast()?.let { + data["render"]?.toJsonObject()?.get("textures")?.listCast()?.let { for (texture in it) { val textureResourceLocation = ResourceLocation(texture) textures += Texture.getResourceTextureIdentifier(textureResourceLocation.namespace, textureName = "particle/${textureResourceLocation.path}") 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 cdcb1ffcf..3d5bc373d 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 @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.registries.registries import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.minosoft.data.entities.EntityMetaDataFields import de.bixilon.minosoft.data.entities.block.BlockEntityMetaType import de.bixilon.minosoft.data.entities.meta.EntityMetaData @@ -48,7 +49,6 @@ import de.bixilon.minosoft.protocol.packets.c2s.play.EntityActionC2SP import de.bixilon.minosoft.protocol.packets.s2c.play.EntityAnimationS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF import de.bixilon.minosoft.util.collections.Clearable -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.lang.reflect.Field import java.lang.reflect.ParameterizedType @@ -129,7 +129,7 @@ class Registries { isFlattened = version.flattened blockStateRegistry.flattened = isFlattened // pre init stuff - loadShapes(pixlyzerData["shapes"]?.compoundCast()) + loadShapes(pixlyzerData["shapes"]?.toJsonObject()) // enums loadEnumRegistry(version, pixlyzerData["equipment_slots"], equipmentSlotRegistry, DefaultRegistries.EQUIPMENT_SLOTS_REGISTRY) @@ -149,30 +149,30 @@ class Registries { creativeModeTabRegistry.initialize(pixlyzerData["creative_inventory_tab"]?.unsafeCast(), this, CreativeModeTab) // id resource location stuff - containerTypeRegistry.rawInitialize(pixlyzerData["container_types"]?.compoundCast(), this, ContainerType, alternative = DefaultRegistries.CONTAINER_TYPE_REGISTRY.forVersion(version)) - gameEventRegistry.rawInitialize(pixlyzerData["game_events"]?.compoundCast(), this, GameEvent, alternative = DefaultRegistries.GAME_EVENT_REGISTRY.forVersion(version)) + containerTypeRegistry.rawInitialize(pixlyzerData["container_types"]?.toJsonObject(), this, ContainerType, alternative = DefaultRegistries.CONTAINER_TYPE_REGISTRY.forVersion(version)) + gameEventRegistry.rawInitialize(pixlyzerData["game_events"]?.toJsonObject(), this, GameEvent, alternative = DefaultRegistries.GAME_EVENT_REGISTRY.forVersion(version)) - entityTypeRegistry.rawInitialize(pixlyzerData["entities"]?.compoundCast(), this, EntityType) + entityTypeRegistry.rawInitialize(pixlyzerData["entities"]?.toJsonObject(), this, EntityType) - motiveRegistry.rawInitialize(pixlyzerData["motives"]?.compoundCast(), this, Motive, version.flattened) - soundEventRegistry.rawInitialize(pixlyzerData["sound_events"]?.compoundCast()) - particleTypeRegistry.rawInitialize(pixlyzerData["particles"]?.compoundCast(), this, ParticleType) - materialRegistry.rawInitialize(pixlyzerData["materials"]?.compoundCast(), this, Material) - enchantmentRegistry.rawInitialize(pixlyzerData["enchantments"]?.compoundCast(), this, Enchantment) - statusEffectRegistry.rawInitialize(pixlyzerData["status_effects"]?.compoundCast(), this, StatusEffect) - biomeRegistry.rawInitialize(pixlyzerData["biomes"]?.compoundCast(), this, Biome) - dimensionRegistry.rawInitialize(pixlyzerData["dimensions"]?.compoundCast(), this, Dimension) - fluidRegistry.rawInitialize(pixlyzerData["fluids"]?.compoundCast(), this, Fluid) - blockRegistry.rawInitialize(pixlyzerData["blocks"]?.compoundCast(), this, Block, version.flattened, Registry.MetaTypes.BITS_4) - itemRegistry.rawInitialize(pixlyzerData["items"]?.compoundCast(), this, Item, version.flattened, Registry.MetaTypes.BITS_16) + motiveRegistry.rawInitialize(pixlyzerData["motives"]?.toJsonObject(), this, Motive, version.flattened) + soundEventRegistry.rawInitialize(pixlyzerData["sound_events"]?.toJsonObject()) + particleTypeRegistry.rawInitialize(pixlyzerData["particles"]?.toJsonObject(), this, ParticleType) + materialRegistry.rawInitialize(pixlyzerData["materials"]?.toJsonObject(), this, Material) + enchantmentRegistry.rawInitialize(pixlyzerData["enchantments"]?.toJsonObject(), this, Enchantment) + statusEffectRegistry.rawInitialize(pixlyzerData["status_effects"]?.toJsonObject(), this, StatusEffect) + biomeRegistry.rawInitialize(pixlyzerData["biomes"]?.toJsonObject(), this, Biome) + dimensionRegistry.rawInitialize(pixlyzerData["dimensions"]?.toJsonObject(), this, Dimension) + fluidRegistry.rawInitialize(pixlyzerData["fluids"]?.toJsonObject(), this, Fluid) + blockRegistry.rawInitialize(pixlyzerData["blocks"]?.toJsonObject(), this, Block, version.flattened, Registry.MetaTypes.BITS_4) + itemRegistry.rawInitialize(pixlyzerData["items"]?.toJsonObject(), this, Item, version.flattened, Registry.MetaTypes.BITS_16) - blockEntityTypeRegistry.rawInitialize(pixlyzerData["block_entities"]?.compoundCast(), this, BlockEntityType) + blockEntityTypeRegistry.rawInitialize(pixlyzerData["block_entities"]?.toJsonObject(), this, BlockEntityType) - villagerProfessionRegistry.rawInitialize(pixlyzerData["villager_professions"]?.compoundCast(), this, VillagerProfession) + villagerProfessionRegistry.rawInitialize(pixlyzerData["villager_professions"]?.toJsonObject(), this, VillagerProfession) - blockEntityMetaDataTypeRegistry.rawInitialize(pixlyzerData["block_entity_meta_data_types"]?.compoundCast(), this, BlockEntityMetaType, alternative = DefaultRegistries.BLOCK_ENTITY_META_TYPE_REGISTRY.forVersion(version)) + blockEntityMetaDataTypeRegistry.rawInitialize(pixlyzerData["block_entity_meta_data_types"]?.toJsonObject(), this, BlockEntityMetaType, alternative = DefaultRegistries.BLOCK_ENTITY_META_TYPE_REGISTRY.forVersion(version)) // post init diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/RegistriesLoader.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/RegistriesLoader.kt index 31d791f7f..77a086985 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/RegistriesLoader.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/RegistriesLoader.kt @@ -1,5 +1,6 @@ package de.bixilon.minosoft.data.registries.registries +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.string.StringUtil.format import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties import de.bixilon.minosoft.assets.util.FileAssetsUtil @@ -7,7 +8,6 @@ import de.bixilon.minosoft.assets.util.FileUtil import de.bixilon.minosoft.assets.util.FileUtil.readMBFMap import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile import de.bixilon.minosoft.data.registries.versions.Version -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.io.ByteArrayInputStream import java.io.File @@ -30,7 +30,7 @@ object RegistriesLoader { val file = File(path) if (file.exists()) { // ToDo: Verify - return FileUtil.readFile(file, false).readMBFMap().compoundCast() ?: throw IllegalStateException("Could not read pixlyzer data!") + return FileUtil.readFile(file, false).readMBFMap().toJsonObject() ?: throw IllegalStateException("Could not read pixlyzer data!") } val savedHash = FileAssetsUtil.downloadAndGetAsset(url.format(mapOf( @@ -42,6 +42,6 @@ object RegistriesLoader { throw IllegalStateException("Data mismatch, expected $hash, got ${savedHash.first}") } - return ByteArrayInputStream(savedHash.second).readMBFMap().compoundCast() ?: throw IllegalStateException("Invalid pixlyzer data!") + return ByteArrayInputStream(savedHash.second).readMBFMap().toJsonObject() ?: throw IllegalStateException("Invalid pixlyzer data!") } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/FakeEnumRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/FakeEnumRegistry.kt index e6ac89d21..e292345a7 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/FakeEnumRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/FakeEnumRegistry.kt @@ -13,10 +13,10 @@ package de.bixilon.minosoft.data.registries.registries.registry +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.util.collections.Clearable -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound class FakeEnumRegistry( override var parent: FakeEnumRegistry? = null, @@ -49,7 +49,7 @@ class FakeEnumRegistry( check(value is Map<*, *>) var itemId = id.toInt() - val item = deserializer.deserialize(registries, value.asCompound()) + val item = deserializer.deserialize(registries, value.asJsonObject()) value["id"]?.toInt()?.let { providedItemId -> itemId = providedItemId } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/PerVersionRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/PerVersionRegistry.kt index aeba13e8f..79a6ea192 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/PerVersionRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/PerVersionRegistry.kt @@ -13,8 +13,8 @@ package de.bixilon.minosoft.data.registries.registries.registry +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.minosoft.data.registries.versions.Version -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.util.* class PerVersionRegistry { @@ -36,7 +36,7 @@ class PerVersionRegistry { val versions: SortedMap> = sortedMapOf({ t, t2 -> t2 - t }) for ((versionId, json) in data) { - versions[Integer.parseInt(versionId)] = Registry().rawInitialize(json.compoundCast(), null, deserializer) + versions[Integer.parseInt(versionId)] = Registry().rawInitialize(json.toJsonObject(), null, deserializer) } this.versions = versions.toMap() } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt index bc12dd389..9bb946651 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/registry/Registry.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.registries.registries.registry import com.google.gson.JsonElement import com.google.gson.JsonPrimitive +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.minosoft.data.registries.MultiResourceLocationAble import de.bixilon.minosoft.data.registries.ResourceLocation @@ -22,7 +23,6 @@ import de.bixilon.minosoft.data.registries.ResourceLocationAble import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound open class Registry( override var parent: AbstractRegistry? = null, @@ -120,7 +120,7 @@ open class Registry( for ((resourceLocation, value) in data) { check(value is Map<*, *>) - val item = deserializer.deserialize(registries, resourceLocation, value.asCompound()) ?: continue + val item = deserializer.deserialize(registries, resourceLocation, value.asJsonObject()) ?: continue value["id"]?.toInt()?.let { id -> var itemId = id if (!flattened) { diff --git a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt index 46828770d..11049f8b0 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.text import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.json.JsonUtil.toJsonList +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.minosoft.data.language.Translator import de.bixilon.minosoft.data.text.ChatCode.Companion.toColor @@ -23,7 +24,6 @@ import de.bixilon.minosoft.data.text.events.HoverEvent import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.format import de.bixilon.minosoft.util.KUtil.toResourceLocation -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.get import javafx.collections.ObservableList import javafx.scene.Node @@ -167,8 +167,8 @@ class BaseComponent : ChatComponent { formatting.addOrRemove(PreChatFormattingCodes.OBFUSCATED, json["obfuscated"]?.toBoolean()) formatting.addOrRemove(PreChatFormattingCodes.SHADOWED, json["shadowed"]?.toBoolean()) - val clickEvent = json["clickEvent", "click_event"]?.compoundCast()?.let { click -> ClickEvent(click, restrictedMode) } - val hoverEvent = json["hoverEvent", "hover_event"]?.compoundCast()?.let { hover -> HoverEvent(hover) } + val clickEvent = json["clickEvent", "click_event"]?.toJsonObject()?.let { click -> ClickEvent(click, restrictedMode) } + val hoverEvent = json["hoverEvent", "hover_event"]?.toJsonObject()?.let { hover -> HoverEvent(hover) } val textComponent = TextComponent( message = currentText, diff --git a/src/main/java/de/bixilon/minosoft/data/text/events/data/EntityHoverData.kt b/src/main/java/de/bixilon/minosoft/data/text/events/data/EntityHoverData.kt index 4ab0441de..a516d124f 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/events/data/EntityHoverData.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/events/data/EntityHoverData.kt @@ -14,12 +14,12 @@ package de.bixilon.minosoft.data.text.events.data import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.uuid.UUIDUtil.toUUID import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.json.Jackson -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import java.util.* class EntityHoverData( @@ -30,11 +30,11 @@ class EntityHoverData( companion object { fun deserialize(data: Any): EntityHoverData { - var json: Map = if (data is String) { + var json: Map = (if (data is String) { Jackson.MAPPER.readValue(data, Jackson.JSON_MAP_TYPE) } else { data - }.asCompound() + }).asJsonObject() json["text"]?.let { // 1.14.3.... lol json = Jackson.MAPPER.readValue(it.unsafeCast(), Jackson.JSON_MAP_TYPE) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/items/ItemElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/items/ItemElement.kt index 5c379c631..7e9dd64e0 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/items/ItemElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/items/ItemElement.kt @@ -50,7 +50,7 @@ class ItemElement( var color = ChatColors.WHITE if (item.item is BlockItem) { - item.item.block?.defaultState?.material?.color?.let { color = it } + item.item.block.defaultState.material.color?.let { color = it } } val image = ColorElement(hudRenderer, _size, color) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/input/interaction/ItemPickInteractionHandler.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/input/interaction/ItemPickInteractionHandler.kt index ab96aeaaf..0ef0457ce 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/input/interaction/ItemPickInteractionHandler.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/input/interaction/ItemPickInteractionHandler.kt @@ -58,7 +58,7 @@ class ItemPickInteractionHandler( when (target) { is BlockTarget -> { - itemStack = ItemStack(target.blockState.block.item!!, connection, 1) + itemStack = ItemStack(target.blockState.block.item, connection, 1) if (copyNBT) { val blockEntity = connection.world.getBlockEntity(target.blockPosition) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/GenericUnbakedModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/GenericUnbakedModel.kt index f08a90f82..52ff701f0 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/GenericUnbakedModel.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/GenericUnbakedModel.kt @@ -14,10 +14,10 @@ package de.bixilon.minosoft.gui.rendering.models.unbaked import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.minosoft.gui.rendering.models.display.ModelDisplay import de.bixilon.minosoft.gui.rendering.models.display.ModelDisplayPositions import de.bixilon.minosoft.gui.rendering.models.unbaked.element.UnbakedElement -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast abstract class GenericUnbakedModel( @@ -31,7 +31,7 @@ abstract class GenericUnbakedModel( init { val display = parent?.display?.toMutableMap() ?: mutableMapOf() - json["display"]?.compoundCast()?.let { + json["display"]?.toJsonObject()?.let { for ((name, value) in it) { display[ModelDisplayPositions[name]] = ModelDisplay(data = value.unsafeCast()) } @@ -45,7 +45,7 @@ abstract class GenericUnbakedModel( init { val textures = parent?.textures?.toMutableMap() ?: mutableMapOf() - json["textures"]?.compoundCast()?.let { + json["textures"]?.toJsonObject()?.let { for ((name, value) in it) { textures[name] = value.toString() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/block/MultipartRootModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/block/MultipartRootModel.kt index b894691c5..f93400a71 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/block/MultipartRootModel.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/block/MultipartRootModel.kt @@ -14,11 +14,12 @@ package de.bixilon.minosoft.gui.rendering.models.unbaked.block import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonObject +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties import de.bixilon.minosoft.gui.rendering.models.ModelLoader import de.bixilon.minosoft.gui.rendering.models.unbaked.AbstractUnbakedBlockModel -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast class MultipartRootModel( private val conditions: MutableMap>>, MutableSet>, @@ -71,7 +72,7 @@ class MultipartRootModel( companion object { - private fun getCondition(data: MutableMap): MutableMap> { + private fun getCondition(data: JsonObject): MutableMap> { val condition: MutableMap> = mutableMapOf() for ((propertyName, value) in data) { var property: BlockProperties? = null @@ -104,7 +105,7 @@ class MultipartRootModel( apply += WeightedUnbakedBlockStateModel(modelLoader, applyData.unsafeCast()) } - modelData["when"]?.compoundCast()?.let { + modelData["when"]?.toJsonObject()?.let { val or = it["OR"] if (or is List<*>) { for (orData in or) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/element/UnbakedElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/element/UnbakedElement.kt index d1a678e2e..52c2a63d2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/element/UnbakedElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/unbaked/element/UnbakedElement.kt @@ -14,11 +14,11 @@ package de.bixilon.minosoft.gui.rendering.models.unbaked.element import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.asJsonObject +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.toVec3 -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import glm_.vec3.Vec3 data class UnbakedElement( @@ -37,7 +37,7 @@ data class UnbakedElement( val from = data["from"].toVec3() / BLOCK_RESOLUTION val to = data["to"].toVec3() / BLOCK_RESOLUTION - data["faces"].asCompound().let { + data["faces"].asJsonObject().let { for ((directionString, faceData) in it) { val direction = Directions[directionString] val (fallbackUVStart, fallbackUVEnd) = direction.getFallbackUV(from, to) @@ -48,7 +48,7 @@ data class UnbakedElement( return UnbakedElement( from = from, to = to, - rotation = data["rotation"]?.compoundCast()?.let { return@let UnbakedElementRotation(data = it) }, + rotation = data["rotation"]?.toJsonObject()?.let { return@let UnbakedElementRotation(data = it) }, shade = data["shade"]?.toBoolean() ?: true, faces = faces, ) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/sound/SoundManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/sound/SoundManager.kt index 2048ef6cd..c2c96274f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/sound/SoundManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/sound/SoundManager.kt @@ -1,12 +1,12 @@ package de.bixilon.minosoft.gui.rendering.sound +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.gui.rendering.sound.sounds.Sound import de.bixilon.minosoft.gui.rendering.sound.sounds.SoundType import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.util.KUtil.toResourceLocation -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import java.util.* class SoundManager( @@ -21,7 +21,7 @@ class SoundManager( for ((name, data) in soundsIndex) { val resourceLocation = name.toResourceLocation() - sounds[resourceLocation] = SoundType(resourceLocation, data.asCompound()) + sounds[resourceLocation] = SoundType(resourceLocation, data.asJsonObject()) } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BlockEntityMetaDataS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BlockEntityMetaDataS2CP.kt index cba1ee747..603aacd37 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BlockEntityMetaDataS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BlockEntityMetaDataS2CP.kt @@ -12,6 +12,7 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.minosoft.data.entities.block.DefaultBlockEntityMetaDataFactory import de.bixilon.minosoft.modding.event.events.BlockEntityMetaDataChangeEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection @@ -22,7 +23,6 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_21W37A import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import glm_.vec3.Vec3i class BlockEntityMetaDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { @@ -36,7 +36,7 @@ class BlockEntityMetaDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { } else { buffer.connection.registries.blockEntityMetaDataTypeRegistry[buffer.readUnsignedByte()].resourceLocation } - val nbt = buffer.readNBT().asCompound() + val nbt = buffer.readNBT().asJsonObject() override fun handle(connection: PlayConnection) { connection.world.getBlockEntity(position)?.updateNBT(nbt) ?: let { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChunkDataS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChunkDataS2CP.kt index 97d1d9b81..e7296dc2e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChunkDataS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChunkDataS2CP.kt @@ -12,6 +12,8 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play +import de.bixilon.kutil.json.JsonUtil.asJsonObject +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.world.ChunkData @@ -39,8 +41,6 @@ import de.bixilon.minosoft.util.chunk.ChunkUtil import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import glm_.vec2.Vec2i import glm_.vec3.Vec3i import java.util.* @@ -88,7 +88,7 @@ class ChunkDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { else -> null } if (buffer.versionId >= V_18W44A) { - heightMap = buffer.readNBT()?.compoundCast() + heightMap = buffer.readNBT()?.toJsonObject() } if (!isFullChunk && buffer.versionId < V_21W37A) { this.chunkData.biomeSource = SpatialBiomeArray(buffer.readBiomeArray()) @@ -118,7 +118,7 @@ class ChunkDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { val blockEntities: MutableMap = mutableMapOf() val positionOffset = Vec3i.of(chunkPosition, dimension.lowestSection, Vec3i.EMPTY) for (i in 0 until buffer.readVarInt()) { - val nbt = buffer.readNBT().asCompound() + val nbt = buffer.readNBT().asJsonObject() val position = Vec3i(nbt["x"]?.toInt() ?: continue, nbt["y"]?.toInt() ?: continue, nbt["z"]?.toInt() ?: continue) - positionOffset val resourceLocation = (nbt["id"]?.toResourceLocation() ?: continue).fix() val type = buffer.connection.registries.blockEntityTypeRegistry[resourceLocation] ?: let { @@ -138,7 +138,7 @@ class ChunkDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { val xz = buffer.readUnsignedByte() val y = buffer.readShort() val type = buffer.connection.registries.blockEntityTypeRegistry[buffer.readVarInt()] - val nbt = buffer.readNBT()?.asCompound() ?: continue + val nbt = buffer.readNBT()?.asJsonObject() ?: continue val entity = type.build(buffer.connection) entity.updateNBT(nbt) blockEntities[Vec3i(xz shr 4, y, xz and 0x0F)] = entity diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/JoinGameS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/JoinGameS2CP.kt index 21e848ff8..bbc839a96 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/JoinGameS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/JoinGameS2CP.kt @@ -14,6 +14,8 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.JsonUtil.asJsonObject +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.minosoft.data.Difficulties import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.registries.DefaultRegistries @@ -38,8 +40,6 @@ import de.bixilon.minosoft.util.BitByte import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { @@ -104,12 +104,12 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { if (buffer.versionId < ProtocolVersions.V_20W21A) { dimensionProperties = buffer.connection.registries.dimensionRegistry[buffer.readInt()].type } else { - val dimensionCodec = buffer.readNBT().asCompound() + val dimensionCodec = buffer.readNBT().asJsonObject() dimensions = parseDimensionCodec(dimensionCodec, buffer.versionId) dimensionProperties = if (buffer.versionId < ProtocolVersions.V_1_16_2_PRE3) { dimensions[buffer.readResourceLocation()]!!.type } else { - DimensionProperties.deserialize(buffer.readNBT().asCompound()) + DimensionProperties.deserialize(buffer.readNBT().asJsonObject()) } world = buffer.readResourceLocation() } @@ -183,7 +183,7 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { val listTag: MutableList> = if (versionId < ProtocolVersions.V_20W28A) { nbt["dimension"]?.listCast() } else { - nbt["minecraft:dimension_type"]?.compoundCast()?.get("value")?.listCast() + nbt["minecraft:dimension_type"]?.toJsonObject()?.get("value")?.listCast() }!! for (tag in listTag) { val dimensionResourceLocation = ResourceLocation(tag[if (versionId < ProtocolVersions.V_1_16_PRE3) { @@ -192,9 +192,9 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { "name" }].unsafeCast()) val dimensionPropertyTag = if (versionId < ProtocolVersions.V_1_16_PRE3 || versionId >= ProtocolVersions.V_1_16_2_PRE1) { - tag["element"].asCompound() + tag["element"].asJsonObject() } else { - tag.asCompound() + tag.asJsonObject() } dimensionMap[dimensionResourceLocation] = Dimension.deserialize(null, dimensionResourceLocation, dimensionPropertyTag) } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NBTQueryResponseS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NBTQueryResponseS2CP.kt index 140d8b9c4..a2d663297 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NBTQueryResponseS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NBTQueryResponseS2CP.kt @@ -12,16 +12,16 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound class NBTQueryResponseS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { val transactionId: Int = buffer.readVarInt() - val nbt: Map = buffer.readNBT().asCompound() + val nbt: Map = buffer.readNBT().asJsonObject() override fun log(reducedLog: Boolean) { Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "NBT query response (transactionId=$transactionId nbt=$nbt)" } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt index 9249d5a1e..1a0368d81 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt @@ -12,6 +12,7 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.minosoft.data.Difficulties import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.registries.ResourceLocation @@ -25,7 +26,6 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import glm_.vec3.Vec3d class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { @@ -60,7 +60,7 @@ class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { buffer.connection.registries.dimensionRegistry[buffer.readResourceLocation()]!!.type } else -> { - DimensionProperties.deserialize(buffer.readNBT().asCompound()) // current dimension data + DimensionProperties.deserialize(buffer.readNBT().asJsonObject()) // current dimension data } } if (buffer.versionId < ProtocolVersions.V_19W11A) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/PlayInByteBuffer.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/PlayInByteBuffer.kt index 6e92afba8..ca32f19b3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PlayInByteBuffer.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PlayInByteBuffer.kt @@ -35,7 +35,7 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_19W36A import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_13_2_PRE1 import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_9_1_PRE1 import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_20W28A -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.toMutableJsonObject import glm_.vec3.Vec3i @@ -121,7 +121,7 @@ class PlayInByteBuffer : InByteBuffer { if (!connection.version.flattened) { metaData = readUnsignedShort() } - val nbt = readNBTTag(versionId < V_14W28B)?.compoundCast() + val nbt = readNBTTag(versionId < V_14W28B)?.toMutableJsonObject() return ItemStack( item = connection.registries.itemRegistry[id shl 16 or metaData], connection = connection, @@ -136,7 +136,7 @@ class PlayInByteBuffer : InByteBuffer { item = connection.registries.itemRegistry[readVarInt()], connection = connection, count = readUnsignedByte(), - nbt = readNBT()?.compoundCast() ?: mutableMapOf(), + nbt = readNBT()?.toMutableJsonObject() ?: mutableMapOf(), ) } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/status/ServerStatus.kt b/src/main/java/de/bixilon/minosoft/protocol/status/ServerStatus.kt index bea3dd8bc..79db3606a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/status/ServerStatus.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/status/ServerStatus.kt @@ -13,9 +13,9 @@ package de.bixilon.minosoft.protocol.status +import de.bixilon.kutil.json.JsonUtil.toJsonObject import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.util.* class ServerStatus( @@ -38,11 +38,11 @@ class ServerStatus( private set init { - data["version"]?.compoundCast()?.let { + data["version"]?.toJsonObject()?.let { protocolId = it["protocol"]?.toInt() serverBrand = it["name"]?.toString() } - data["players"]?.compoundCast()?.let { + data["players"]?.toJsonObject()?.let { usedSlots = it["online"]?.toInt() slots = it["max"]?.toInt() diff --git a/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt b/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt index 27eea7ed0..aa8a2d73f 100644 --- a/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt +++ b/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.util.account.microsoft import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.json.JsonUtil.asJsonList +import de.bixilon.kutil.json.JsonUtil.asJsonObject import de.bixilon.kutil.primitive.LongUtil.toLong import de.bixilon.kutil.uuid.UUIDUtil.toUUID import de.bixilon.minosoft.data.accounts.types.MicrosoftAccount @@ -27,7 +28,6 @@ import de.bixilon.minosoft.util.http.HTTP2.postJson import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import de.bixilon.minosoft.util.url.URLProtocolStreamHandlers import java.net.URL import java.net.URLConnection @@ -92,7 +92,7 @@ object MicrosoftOAuthUtils { if (response.statusCode != 200) { throw LoginException(response.statusCode, "Could not authenticate with xbox live token", response.body.toString()) } - return Pair(response.body["Token"].unsafeCast(), response.body["DisplayClaims"].asCompound()["xui"].asJsonList()[0].asCompound()["uhs"].unsafeCast()) + return Pair(response.body["Token"].unsafeCast(), response.body["DisplayClaims"].asJsonObject()["xui"].asJsonList()[0].asJsonObject()["uhs"].unsafeCast()) } fun getXSTSToken(xBoxLiveToken: String): String { diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTUtil.kt b/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTUtil.kt index 04483caee..8f7c5a278 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTUtil.kt @@ -14,6 +14,8 @@ package de.bixilon.minosoft.util.nbt.tag import de.bixilon.kutil.cast.CastUtil.nullCast +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.json.MutableJsonObject object NBTUtil { @@ -34,14 +36,17 @@ object NBTUtil { return null } - fun Any?.compoundCast(): MutableMap? { - return this.nullCast() + @Deprecated("Will be in Kutil 1.4") + fun Any?.asMutableJsonObject(): MutableJsonObject { + return this.unsafeCast() } - fun Any?.asCompound(): MutableMap { - return this.compoundCast()!! + @Deprecated("Will be in Kutil 1.4") + fun Any?.toMutableJsonObject(): MutableJsonObject? { + return this?.nullCast() } + fun Any?.listCast(): MutableList? { try { return this as MutableList