remove some NBTUtil functions

This commit is contained in:
Bixilon 2021-12-30 16:23:09 +01:00
parent 30da957baa
commit 37f045db27
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
33 changed files with 126 additions and 120 deletions

View File

@ -17,6 +17,7 @@ import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf
import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.concurrent.pool.DefaultThreadPool
import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.kutil.concurrent.pool.ThreadPool
import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable import de.bixilon.kutil.concurrent.pool.ThreadPoolRunnable
import de.bixilon.kutil.json.JsonUtil.asJsonObject
import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.latch.CountUpAndDownLatch
import de.bixilon.kutil.primitive.LongUtil.toLong import de.bixilon.kutil.primitive.LongUtil.toLong
import de.bixilon.kutil.string.StringUtil.format 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.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import java.io.File import java.io.File
import java.io.FileNotFoundException import java.io.FileNotFoundException
import java.io.IOException import java.io.IOException
@ -82,7 +82,7 @@ class IndexAssetsManager(
var assets = FileUtil.safeReadFile(FileAssetsUtil.getPath(indexHash))?.readJsonObject() ?: downloadAssetsIndex() 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 tasks = CountUpAndDownLatch(0)
val assetsLatch = CountUpAndDownLatch(assets.size, parent = latch) val assetsLatch = CountUpAndDownLatch(assets.size, parent = latch)

View File

@ -16,6 +16,7 @@ package de.bixilon.minosoft.data.accounts.types
import com.fasterxml.jackson.annotation.JsonProperty import com.fasterxml.jackson.annotation.JsonProperty
import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.json.JsonUtil.asJsonObject
import de.bixilon.kutil.uuid.UUIDUtil.toUUID import de.bixilon.kutil.uuid.UUIDUtil.toUUID
import de.bixilon.minosoft.data.accounts.Account import de.bixilon.minosoft.data.accounts.Account
import de.bixilon.minosoft.data.player.properties.PlayerProperties 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.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import java.util.* import java.util.*
@Deprecated("Mojang authentication is legacy. Will be removed in the future!") @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)" } 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( return MojangAccount(
id = response.body["user"].asCompound()["id"].unsafeCast(), id = response.body["user"].asJsonObject()["id"].unsafeCast(),
username = response.body["selectedProfile"].asCompound()["name"].unsafeCast(), username = response.body["selectedProfile"].asJsonObject()["name"].unsafeCast(),
uuid = uuid, uuid = uuid,
email = email, email = email,
accessToken = response.body["accessToken"].unsafeCast(), accessToken = response.body["accessToken"].unsafeCast(),

View File

@ -42,9 +42,9 @@ import de.bixilon.minosoft.data.text.TextFormattable
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.BitByte.isBit import de.bixilon.minosoft.util.BitByte.isBit
import de.bixilon.minosoft.util.KUtil.synchronizedDeepCopy 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.getAndRemove
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.toMutableJsonObject
import java.util.* import java.util.*
class ItemStack( class ItemStack(
@ -182,7 +182,7 @@ class ItemStack(
nbt.getAndRemove(REPAIR_COST_TAG).nullCast<Number>()?.let { repairCost = it.toInt() } nbt.getAndRemove(REPAIR_COST_TAG).nullCast<Number>()?.let { repairCost = it.toInt() }
nbt.getAndRemove(DISPLAY_TAG)?.compoundCast()?.let { nbt.getAndRemove(DISPLAY_TAG)?.toMutableJsonObject()?.let {
it.getAndRemove(DISPLAY_MAME_TAG).nullCast<String>()?.let { nameTag -> it.getAndRemove(DISPLAY_MAME_TAG).nullCast<String>()?.let { nameTag ->
customDisplayName = ChatComponent.of(nameTag, translator = connection?.language) customDisplayName = ChatComponent.of(nameTag, translator = connection?.language)
} }

View File

@ -2,11 +2,11 @@ package de.bixilon.minosoft.data.player.properties.textures
import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonInclude
import com.fasterxml.jackson.module.kotlin.convertValue 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.primitive.LongUtil.toLong
import de.bixilon.kutil.uuid.UUIDUtil.toUUID import de.bixilon.kutil.uuid.UUIDUtil.toUUID
import de.bixilon.minosoft.util.YggdrasilUtil import de.bixilon.minosoft.util.YggdrasilUtil
import de.bixilon.minosoft.util.json.Jackson import de.bixilon.minosoft.util.json.Jackson
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
import java.util.* import java.util.*
class PlayerTextures( class PlayerTextures(
@ -25,14 +25,14 @@ class PlayerTextures(
val json: Map<String, Any> = Jackson.MAPPER.readValue(Base64.getDecoder().decode(encoded), Jackson.JSON_MAP_TYPE) val json: Map<String, Any> = Jackson.MAPPER.readValue(Base64.getDecoder().decode(encoded), Jackson.JSON_MAP_TYPE)
// Data also contains `signatureRequired` // Data also contains `signatureRequired`
val textures = json["textures"]?.compoundCast() val textures = json["textures"]?.toJsonObject()
return PlayerTextures( return PlayerTextures(
name = json["profileName"]?.toString(), name = json["profileName"]?.toString(),
uuid = json["profileId"]?.toString()?.toUUID(), uuid = json["profileId"]?.toString()?.toUUID(),
date = json["timestamp"]?.toLong()?.let { Date(it) }, date = json["timestamp"]?.toLong()?.let { Date(it) },
skin = textures?.get("SKIN")?.compoundCast()?.let { return@let Jackson.MAPPER.convertValue(it) }, skin = textures?.get("SKIN")?.toJsonObject()?.let { return@let Jackson.MAPPER.convertValue(it) },
cape = textures?.get("CAPE")?.compoundCast()?.let { return@let Jackson.MAPPER.convertValue(it) }, cape = textures?.get("CAPE")?.toJsonObject()?.let { return@let Jackson.MAPPER.convertValue(it) },
elytra = textures?.get("ELYTRA")?.compoundCast()?.let { return@let Jackson.MAPPER.convertValue(it) }, elytra = textures?.get("ELYTRA")?.toJsonObject()?.let { return@let Jackson.MAPPER.convertValue(it) },
) )
} }
} }

View File

@ -13,6 +13,7 @@
package de.bixilon.minosoft.data.registries package de.bixilon.minosoft.data.registries
import de.bixilon.kutil.json.JsonUtil.asJsonObject
import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject import de.bixilon.minosoft.assets.util.FileUtil.readJsonObject
import de.bixilon.minosoft.data.entities.EntityObjectType 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.EntityAnimationS2CP
import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF
import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
object DefaultRegistries { object DefaultRegistries {
private val ENUM_RESOURCE_LOCATION = ResourceLocation("minosoft:mapping/enums.json") 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() val enumJson = Minosoft.MINOSOFT_ASSETS_MANAGER[ENUM_RESOURCE_LOCATION].readJsonObject().toResourceLocationMap()
EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("equipment_slots")].asCompound()) EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("equipment_slots")].asJsonObject())
HAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("hand_equipment_slots")].asCompound()) HAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("hand_equipment_slots")].asJsonObject())
ARMOR_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_equipment_slots")].asCompound()) ARMOR_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_equipment_slots")].asJsonObject())
ARMOR_STAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_stand_equipment_slots")].asCompound()) 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_ANIMATION_REGISTRY.initialize(enumJson[ResourceLocation("entity_animations")].asJsonObject())
ENTITY_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("entity_actions")].asCompound()) ENTITY_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("entity_actions")].asJsonObject())
val registriesJson = Minosoft.MINOSOFT_ASSETS_MANAGER[REGISTRIES_RESOURCE_LOCATION].readJsonObject().toResourceLocationMap() 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) CONTAINER_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("container_types")].asJsonObject(), ContainerType)
GAME_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation("game_events")].asCompound(), GameEvent) GAME_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation("game_events")].asJsonObject(), GameEvent)
initialized = true initialized = true
} }

View File

@ -13,6 +13,7 @@
package de.bixilon.minosoft.data.registries.blocks package de.bixilon.minosoft.data.registries.blocks
import de.bixilon.kutil.cast.CastUtil.unsafeCast 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.BooleanUtil.toBoolean
import de.bixilon.kutil.primitive.FloatUtil.toFloat import de.bixilon.kutil.primitive.FloatUtil.toFloat
import de.bixilon.kutil.primitive.IntUtil.toInt 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.materials.Material
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.gui.rendering.models.baked.block.BakedBlockModel import de.bixilon.minosoft.gui.rendering.models.baked.block.BakedBlockModel
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
import java.util.* import java.util.*
data class BlockState( data class BlockState(
@ -104,7 +104,7 @@ data class BlockState(
companion object { companion object {
fun deserialize(block: Block, registries: Registries, data: Map<String, Any>): BlockState { fun deserialize(block: Block, registries: Registries, data: Map<String, Any>): BlockState {
val properties = data["properties"]?.compoundCast()?.let { val properties = data["properties"]?.toJsonObject()?.let {
getProperties(it) getProperties(it)
} ?: mutableMapOf() } ?: mutableMapOf()

View File

@ -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.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.cast.CastUtil.unsafeNull 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.DoubleUtil.toDouble
import de.bixilon.kutil.primitive.FloatUtil.toFloat import de.bixilon.kutil.primitive.FloatUtil.toFloat
import de.bixilon.kutil.primitive.IntUtil.toInt 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.gui.rendering.tint.TintProvider
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.CastUtil.asAnyMap import de.bixilon.minosoft.util.CastUtil.asAnyMap
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
import kotlin.random.Random import kotlin.random.Random
@ -123,7 +123,7 @@ open class Block(
val states: MutableSet<BlockState> = mutableSetOf() val states: MutableSet<BlockState> = mutableSetOf()
for ((stateId, stateJson) in data["states"].asAnyMap()) { for ((stateId, stateJson) in data["states"].asAnyMap()) {
check(stateJson is Map<*, *>) { "Not a state element!" } 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 registries.blockStateRegistry[stateId.toInt()] = state
states.add(state) states.add(state)
for ((property, value) in state.properties) { for ((property, value) in state.properties) {

View File

@ -13,6 +13,8 @@
package de.bixilon.minosoft.data.registries.effects package de.bixilon.minosoft.data.registries.effects
import de.bixilon.kutil.cast.CastUtil.unsafeCast 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.ResourceLocation
import de.bixilon.minosoft.data.registries.effects.attributes.EntityAttributeModifier import de.bixilon.minosoft.data.registries.effects.attributes.EntityAttributeModifier
import de.bixilon.minosoft.data.registries.registries.Registries 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.data.text.RGBColor.Companion.asRGBColor
import de.bixilon.minosoft.datafixer.EntityAttributeFixer.fix import de.bixilon.minosoft.datafixer.EntityAttributeFixer.fix
import de.bixilon.minosoft.util.KUtil.toResourceLocation 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.* import java.util.*
data class StatusEffect( data class StatusEffect(
@ -45,9 +45,9 @@ data class StatusEffect(
val attributes: MutableMap<ResourceLocation, EntityAttributeModifier> = mutableMapOf() val attributes: MutableMap<ResourceLocation, EntityAttributeModifier> = mutableMapOf()
val uuidAttributes: MutableMap<UUID, EntityAttributeModifier> = mutableMapOf() val uuidAttributes: MutableMap<UUID, EntityAttributeModifier> = mutableMapOf()
data["attributes"]?.compoundCast()?.let { data["attributes"]?.toJsonObject()?.let {
for ((key, value) in it) { for ((key, value) in it) {
val attribute = EntityAttributeModifier.deserialize(value.asCompound()) val attribute = EntityAttributeModifier.deserialize(value.asJsonObject())
attributes[ResourceLocation.getResourceLocation(key).fix()] = attribute attributes[ResourceLocation.getResourceLocation(key).fix()] = attribute
uuidAttributes[attribute.uuid] = attribute uuidAttributes[attribute.uuid] = attribute
} }

View File

@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.registries.entities
import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast 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.BooleanUtil.toBoolean
import de.bixilon.minosoft.data.DefaultEntityFactories import de.bixilon.minosoft.data.DefaultEntityFactories
import de.bixilon.minosoft.data.entities.EntityMetaDataFields 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.datafixer.EntityAttributeFixer.fix
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.nbt.tag.NBTUtil.compoundCast
import glm_.vec3.Vec3d import glm_.vec3.Vec3d
import java.util.* import java.util.*
@ -59,7 +59,7 @@ data class EntityType(
override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map<String, Any>): EntityType? { override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map<String, Any>): EntityType? {
check(registries != null) { "Registries is null!" } check(registries != null) { "Registries is null!" }
data["meta"]?.compoundCast()?.let { data["meta"]?.toJsonObject()?.let {
for ((minosoftFieldName, index) in it) { for ((minosoftFieldName, index) in it) {
val minosoftField = EntityMetaDataFields[minosoftFieldName.lowercase(Locale.getDefault())] val minosoftField = EntityMetaDataFields[minosoftFieldName.lowercase(Locale.getDefault())]
registries.entityMetaIndexMap[minosoftField] = index.unsafeCast() registries.entityMetaIndexMap[minosoftField] = index.unsafeCast()
@ -72,7 +72,7 @@ data class EntityType(
val attributes: MutableMap<ResourceLocation, Double> = mutableMapOf() val attributes: MutableMap<ResourceLocation, Double> = mutableMapOf()
data["attributes"]?.compoundCast()?.let { data["attributes"]?.toJsonObject()?.let {
for ((attributeResourceLocation, value) in it) { for ((attributeResourceLocation, value) in it) {
attributes[ResourceLocation.getResourceLocation(attributeResourceLocation).fix()] = value.unsafeCast() attributes[ResourceLocation.getResourceLocation(attributeResourceLocation).fix()] = value.unsafeCast()
} }

View File

@ -13,6 +13,7 @@
package de.bixilon.minosoft.data.registries.items 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.decide
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
import de.bixilon.kutil.primitive.FloatUtil.toFloat 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.gui.hud.elements.hotbar.HotbarHungerElement
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionResults
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
open class FoodItem( open class FoodItem(
resourceLocation: ResourceLocation, resourceLocation: ResourceLocation,
@ -39,7 +39,7 @@ open class FoodItem(
val timeToEat: Int val timeToEat: Int
init { init {
val foodProperties = data["food_properties"].asCompound() val foodProperties = data["food_properties"].asJsonObject()
nutrition = foodProperties["nutrition"]?.toInt() ?: 0 nutrition = foodProperties["nutrition"]?.toInt() ?: 0
saturationModifier = foodProperties["saturation_modifier"]?.toFloat() ?: 0.0f saturationModifier = foodProperties["saturation_modifier"]?.toFloat() ?: 0.0f
isMeat = foodProperties["is_meat"]?.toBoolean() ?: false isMeat = foodProperties["is_meat"]?.toBoolean() ?: false

View File

@ -12,6 +12,7 @@
*/ */
package de.bixilon.minosoft.data.registries.particle package de.bixilon.minosoft.data.registries.particle
import de.bixilon.kutil.json.JsonUtil.toJsonObject
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.particle.data.ParticleData 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.ParticleFactory
import de.bixilon.minosoft.gui.rendering.particle.types.Particle import de.bixilon.minosoft.gui.rendering.particle.types.Particle
import de.bixilon.minosoft.gui.rendering.textures.Texture 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 import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast
data class ParticleType( data class ParticleType(
@ -43,7 +43,7 @@ data class ParticleType(
companion object : ResourceLocationDeserializer<ParticleType> { companion object : ResourceLocationDeserializer<ParticleType> {
override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map<String, Any>): ParticleType { override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map<String, Any>): ParticleType {
val textures: MutableList<ResourceLocation> = mutableListOf() val textures: MutableList<ResourceLocation> = mutableListOf()
data["render"]?.compoundCast()?.get("textures")?.listCast<String>()?.let { data["render"]?.toJsonObject()?.get("textures")?.listCast<String>()?.let {
for (texture in it) { for (texture in it) {
val textureResourceLocation = ResourceLocation(texture) val textureResourceLocation = ResourceLocation(texture)
textures += Texture.getResourceTextureIdentifier(textureResourceLocation.namespace, textureName = "particle/${textureResourceLocation.path}") textures += Texture.getResourceTextureIdentifier(textureResourceLocation.namespace, textureName = "particle/${textureResourceLocation.path}")

View File

@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.registries.registries
import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast 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.EntityMetaDataFields
import de.bixilon.minosoft.data.entities.block.BlockEntityMetaType import de.bixilon.minosoft.data.entities.block.BlockEntityMetaType
import de.bixilon.minosoft.data.entities.meta.EntityMetaData 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.EntityAnimationS2CP
import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF import de.bixilon.minosoft.protocol.packets.s2c.play.title.TitleS2CF
import de.bixilon.minosoft.util.collections.Clearable 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.Field
import java.lang.reflect.ParameterizedType import java.lang.reflect.ParameterizedType
@ -129,7 +129,7 @@ class Registries {
isFlattened = version.flattened isFlattened = version.flattened
blockStateRegistry.flattened = isFlattened blockStateRegistry.flattened = isFlattened
// pre init stuff // pre init stuff
loadShapes(pixlyzerData["shapes"]?.compoundCast()) loadShapes(pixlyzerData["shapes"]?.toJsonObject())
// enums // enums
loadEnumRegistry(version, pixlyzerData["equipment_slots"], equipmentSlotRegistry, DefaultRegistries.EQUIPMENT_SLOTS_REGISTRY) 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) creativeModeTabRegistry.initialize(pixlyzerData["creative_inventory_tab"]?.unsafeCast(), this, CreativeModeTab)
// id resource location stuff // id resource location stuff
containerTypeRegistry.rawInitialize(pixlyzerData["container_types"]?.compoundCast(), this, ContainerType, alternative = DefaultRegistries.CONTAINER_TYPE_REGISTRY.forVersion(version)) containerTypeRegistry.rawInitialize(pixlyzerData["container_types"]?.toJsonObject(), this, ContainerType, alternative = DefaultRegistries.CONTAINER_TYPE_REGISTRY.forVersion(version))
gameEventRegistry.rawInitialize(pixlyzerData["game_events"]?.compoundCast(), this, GameEvent, alternative = DefaultRegistries.GAME_EVENT_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) motiveRegistry.rawInitialize(pixlyzerData["motives"]?.toJsonObject(), this, Motive, version.flattened)
soundEventRegistry.rawInitialize(pixlyzerData["sound_events"]?.compoundCast()) soundEventRegistry.rawInitialize(pixlyzerData["sound_events"]?.toJsonObject())
particleTypeRegistry.rawInitialize(pixlyzerData["particles"]?.compoundCast(), this, ParticleType) particleTypeRegistry.rawInitialize(pixlyzerData["particles"]?.toJsonObject(), this, ParticleType)
materialRegistry.rawInitialize(pixlyzerData["materials"]?.compoundCast(), this, Material) materialRegistry.rawInitialize(pixlyzerData["materials"]?.toJsonObject(), this, Material)
enchantmentRegistry.rawInitialize(pixlyzerData["enchantments"]?.compoundCast(), this, Enchantment) enchantmentRegistry.rawInitialize(pixlyzerData["enchantments"]?.toJsonObject(), this, Enchantment)
statusEffectRegistry.rawInitialize(pixlyzerData["status_effects"]?.compoundCast(), this, StatusEffect) statusEffectRegistry.rawInitialize(pixlyzerData["status_effects"]?.toJsonObject(), this, StatusEffect)
biomeRegistry.rawInitialize(pixlyzerData["biomes"]?.compoundCast(), this, Biome) biomeRegistry.rawInitialize(pixlyzerData["biomes"]?.toJsonObject(), this, Biome)
dimensionRegistry.rawInitialize(pixlyzerData["dimensions"]?.compoundCast(), this, Dimension) dimensionRegistry.rawInitialize(pixlyzerData["dimensions"]?.toJsonObject(), this, Dimension)
fluidRegistry.rawInitialize(pixlyzerData["fluids"]?.compoundCast(), this, Fluid) fluidRegistry.rawInitialize(pixlyzerData["fluids"]?.toJsonObject(), this, Fluid)
blockRegistry.rawInitialize(pixlyzerData["blocks"]?.compoundCast(), this, Block, version.flattened, Registry.MetaTypes.BITS_4) blockRegistry.rawInitialize(pixlyzerData["blocks"]?.toJsonObject(), this, Block, version.flattened, Registry.MetaTypes.BITS_4)
itemRegistry.rawInitialize(pixlyzerData["items"]?.compoundCast(), this, Item, version.flattened, Registry.MetaTypes.BITS_16) 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 // post init

View File

@ -1,5 +1,6 @@
package de.bixilon.minosoft.data.registries.registries package de.bixilon.minosoft.data.registries.registries
import de.bixilon.kutil.json.JsonUtil.toJsonObject
import de.bixilon.kutil.string.StringUtil.format import de.bixilon.kutil.string.StringUtil.format
import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties import de.bixilon.minosoft.assets.properties.version.AssetsVersionProperties
import de.bixilon.minosoft.assets.util.FileAssetsUtil 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.assets.util.FileUtil.readMBFMap
import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile import de.bixilon.minosoft.config.profile.profiles.resources.ResourcesProfile
import de.bixilon.minosoft.data.registries.versions.Version import de.bixilon.minosoft.data.registries.versions.Version
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.File import java.io.File
@ -30,7 +30,7 @@ object RegistriesLoader {
val file = File(path) val file = File(path)
if (file.exists()) { if (file.exists()) {
// ToDo: Verify // 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( val savedHash = FileAssetsUtil.downloadAndGetAsset(url.format(mapOf(
@ -42,6 +42,6 @@ object RegistriesLoader {
throw IllegalStateException("Data mismatch, expected $hash, got ${savedHash.first}") 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!")
} }
} }

View File

@ -13,10 +13,10 @@
package de.bixilon.minosoft.data.registries.registries.registry 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.kutil.primitive.IntUtil.toInt
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.util.collections.Clearable import de.bixilon.minosoft.util.collections.Clearable
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
class FakeEnumRegistry<T : RegistryFakeEnumerable>( class FakeEnumRegistry<T : RegistryFakeEnumerable>(
override var parent: FakeEnumRegistry<T>? = null, override var parent: FakeEnumRegistry<T>? = null,
@ -49,7 +49,7 @@ class FakeEnumRegistry<T : RegistryFakeEnumerable>(
check(value is Map<*, *>) check(value is Map<*, *>)
var itemId = id.toInt() var itemId = id.toInt()
val item = deserializer.deserialize(registries, value.asCompound()) val item = deserializer.deserialize(registries, value.asJsonObject())
value["id"]?.toInt()?.let { providedItemId -> value["id"]?.toInt()?.let { providedItemId ->
itemId = providedItemId itemId = providedItemId
} }

View File

@ -13,8 +13,8 @@
package de.bixilon.minosoft.data.registries.registries.registry 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.data.registries.versions.Version
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
import java.util.* import java.util.*
class PerVersionRegistry<T : RegistryItem> { class PerVersionRegistry<T : RegistryItem> {
@ -36,7 +36,7 @@ class PerVersionRegistry<T : RegistryItem> {
val versions: SortedMap<Int, Registry<T>> = sortedMapOf({ t, t2 -> t2 - t }) val versions: SortedMap<Int, Registry<T>> = sortedMapOf({ t, t2 -> t2 - t })
for ((versionId, json) in data) { for ((versionId, json) in data) {
versions[Integer.parseInt(versionId)] = Registry<T>().rawInitialize(json.compoundCast(), null, deserializer) versions[Integer.parseInt(versionId)] = Registry<T>().rawInitialize(json.toJsonObject(), null, deserializer)
} }
this.versions = versions.toMap() this.versions = versions.toMap()
} }

View File

@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.registries.registries.registry
import com.google.gson.JsonElement import com.google.gson.JsonElement
import com.google.gson.JsonPrimitive import com.google.gson.JsonPrimitive
import de.bixilon.kutil.json.JsonUtil.asJsonObject
import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.kutil.primitive.IntUtil.toInt
import de.bixilon.minosoft.data.registries.MultiResourceLocationAble import de.bixilon.minosoft.data.registries.MultiResourceLocationAble
import de.bixilon.minosoft.data.registries.ResourceLocation 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.data.registries.registries.Registries
import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation
import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
open class Registry<T : RegistryItem>( open class Registry<T : RegistryItem>(
override var parent: AbstractRegistry<T>? = null, override var parent: AbstractRegistry<T>? = null,
@ -120,7 +120,7 @@ open class Registry<T : RegistryItem>(
for ((resourceLocation, value) in data) { for ((resourceLocation, value) in data) {
check(value is Map<*, *>) 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 -> value["id"]?.toInt()?.let { id ->
var itemId = id var itemId = id
if (!flattened) { if (!flattened) {

View File

@ -15,6 +15,7 @@ package de.bixilon.minosoft.data.text
import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.json.JsonUtil.toJsonList import de.bixilon.kutil.json.JsonUtil.toJsonList
import de.bixilon.kutil.json.JsonUtil.toJsonObject
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
import de.bixilon.minosoft.data.language.Translator import de.bixilon.minosoft.data.language.Translator
import de.bixilon.minosoft.data.text.ChatCode.Companion.toColor 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.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.format import de.bixilon.minosoft.util.KUtil.format
import de.bixilon.minosoft.util.KUtil.toResourceLocation 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 de.bixilon.minosoft.util.nbt.tag.NBTUtil.get
import javafx.collections.ObservableList import javafx.collections.ObservableList
import javafx.scene.Node import javafx.scene.Node
@ -167,8 +167,8 @@ class BaseComponent : ChatComponent {
formatting.addOrRemove(PreChatFormattingCodes.OBFUSCATED, json["obfuscated"]?.toBoolean()) formatting.addOrRemove(PreChatFormattingCodes.OBFUSCATED, json["obfuscated"]?.toBoolean())
formatting.addOrRemove(PreChatFormattingCodes.SHADOWED, json["shadowed"]?.toBoolean()) formatting.addOrRemove(PreChatFormattingCodes.SHADOWED, json["shadowed"]?.toBoolean())
val clickEvent = json["clickEvent", "click_event"]?.compoundCast()?.let { click -> ClickEvent(click, restrictedMode) } val clickEvent = json["clickEvent", "click_event"]?.toJsonObject()?.let { click -> ClickEvent(click, restrictedMode) }
val hoverEvent = json["hoverEvent", "hover_event"]?.compoundCast()?.let { hover -> HoverEvent(hover) } val hoverEvent = json["hoverEvent", "hover_event"]?.toJsonObject()?.let { hover -> HoverEvent(hover) }
val textComponent = TextComponent( val textComponent = TextComponent(
message = currentText, message = currentText,

View File

@ -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.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.json.JsonUtil.asJsonObject
import de.bixilon.kutil.uuid.UUIDUtil.toUUID import de.bixilon.kutil.uuid.UUIDUtil.toUUID
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.KUtil.toResourceLocation
import de.bixilon.minosoft.util.json.Jackson import de.bixilon.minosoft.util.json.Jackson
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import java.util.* import java.util.*
class EntityHoverData( class EntityHoverData(
@ -30,11 +30,11 @@ class EntityHoverData(
companion object { companion object {
fun deserialize(data: Any): EntityHoverData { fun deserialize(data: Any): EntityHoverData {
var json: Map<String, Any> = if (data is String) { var json: Map<String, Any> = (if (data is String) {
Jackson.MAPPER.readValue(data, Jackson.JSON_MAP_TYPE) Jackson.MAPPER.readValue(data, Jackson.JSON_MAP_TYPE)
} else { } else {
data data
}.asCompound() }).asJsonObject()
json["text"]?.let { json["text"]?.let {
// 1.14.3.... lol // 1.14.3.... lol
json = Jackson.MAPPER.readValue(it.unsafeCast<String>(), Jackson.JSON_MAP_TYPE) json = Jackson.MAPPER.readValue(it.unsafeCast<String>(), Jackson.JSON_MAP_TYPE)

View File

@ -50,7 +50,7 @@ class ItemElement(
var color = ChatColors.WHITE var color = ChatColors.WHITE
if (item.item is BlockItem) { 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) val image = ColorElement(hudRenderer, _size, color)

View File

@ -58,7 +58,7 @@ class ItemPickInteractionHandler(
when (target) { when (target) {
is BlockTarget -> { is BlockTarget -> {
itemStack = ItemStack(target.blockState.block.item!!, connection, 1) itemStack = ItemStack(target.blockState.block.item, connection, 1)
if (copyNBT) { if (copyNBT) {
val blockEntity = connection.world.getBlockEntity(target.blockPosition) val blockEntity = connection.world.getBlockEntity(target.blockPosition)

View File

@ -14,10 +14,10 @@
package de.bixilon.minosoft.gui.rendering.models.unbaked package de.bixilon.minosoft.gui.rendering.models.unbaked
import de.bixilon.kutil.cast.CastUtil.unsafeCast 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.ModelDisplay
import de.bixilon.minosoft.gui.rendering.models.display.ModelDisplayPositions import de.bixilon.minosoft.gui.rendering.models.display.ModelDisplayPositions
import de.bixilon.minosoft.gui.rendering.models.unbaked.element.UnbakedElement 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 import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast
abstract class GenericUnbakedModel( abstract class GenericUnbakedModel(
@ -31,7 +31,7 @@ abstract class GenericUnbakedModel(
init { init {
val display = parent?.display?.toMutableMap() ?: mutableMapOf() val display = parent?.display?.toMutableMap() ?: mutableMapOf()
json["display"]?.compoundCast()?.let { json["display"]?.toJsonObject()?.let {
for ((name, value) in it) { for ((name, value) in it) {
display[ModelDisplayPositions[name]] = ModelDisplay(data = value.unsafeCast()) display[ModelDisplayPositions[name]] = ModelDisplay(data = value.unsafeCast())
} }
@ -45,7 +45,7 @@ abstract class GenericUnbakedModel(
init { init {
val textures = parent?.textures?.toMutableMap() ?: mutableMapOf() val textures = parent?.textures?.toMutableMap() ?: mutableMapOf()
json["textures"]?.compoundCast()?.let { json["textures"]?.toJsonObject()?.let {
for ((name, value) in it) { for ((name, value) in it) {
textures[name] = value.toString() textures[name] = value.toString()
} }

View File

@ -14,11 +14,12 @@
package de.bixilon.minosoft.gui.rendering.models.unbaked.block package de.bixilon.minosoft.gui.rendering.models.unbaked.block
import de.bixilon.kutil.cast.CastUtil.unsafeCast 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.BlockState
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
import de.bixilon.minosoft.gui.rendering.models.ModelLoader import de.bixilon.minosoft.gui.rendering.models.ModelLoader
import de.bixilon.minosoft.gui.rendering.models.unbaked.AbstractUnbakedBlockModel import de.bixilon.minosoft.gui.rendering.models.unbaked.AbstractUnbakedBlockModel
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
class MultipartRootModel( class MultipartRootModel(
private val conditions: MutableMap<MutableSet<Map<BlockProperties, Set<Any>>>, MutableSet<AbstractUnbakedBlockModel>>, private val conditions: MutableMap<MutableSet<Map<BlockProperties, Set<Any>>>, MutableSet<AbstractUnbakedBlockModel>>,
@ -71,7 +72,7 @@ class MultipartRootModel(
companion object { companion object {
private fun getCondition(data: MutableMap<String, Any>): MutableMap<BlockProperties, Set<Any>> { private fun getCondition(data: JsonObject): MutableMap<BlockProperties, Set<Any>> {
val condition: MutableMap<BlockProperties, Set<Any>> = mutableMapOf() val condition: MutableMap<BlockProperties, Set<Any>> = mutableMapOf()
for ((propertyName, value) in data) { for ((propertyName, value) in data) {
var property: BlockProperties? = null var property: BlockProperties? = null
@ -104,7 +105,7 @@ class MultipartRootModel(
apply += WeightedUnbakedBlockStateModel(modelLoader, applyData.unsafeCast()) apply += WeightedUnbakedBlockStateModel(modelLoader, applyData.unsafeCast())
} }
modelData["when"]?.compoundCast()?.let { modelData["when"]?.toJsonObject()?.let {
val or = it["OR"] val or = it["OR"]
if (or is List<*>) { if (or is List<*>) {
for (orData in or) { for (orData in or) {

View File

@ -14,11 +14,11 @@
package de.bixilon.minosoft.gui.rendering.models.unbaked.element package de.bixilon.minosoft.gui.rendering.models.unbaked.element
import de.bixilon.kutil.cast.CastUtil.unsafeCast 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.kutil.primitive.BooleanUtil.toBoolean
import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.toVec3 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 import glm_.vec3.Vec3
data class UnbakedElement( data class UnbakedElement(
@ -37,7 +37,7 @@ data class UnbakedElement(
val from = data["from"].toVec3() / BLOCK_RESOLUTION val from = data["from"].toVec3() / BLOCK_RESOLUTION
val to = data["to"].toVec3() / BLOCK_RESOLUTION val to = data["to"].toVec3() / BLOCK_RESOLUTION
data["faces"].asCompound().let { data["faces"].asJsonObject().let {
for ((directionString, faceData) in it) { for ((directionString, faceData) in it) {
val direction = Directions[directionString] val direction = Directions[directionString]
val (fallbackUVStart, fallbackUVEnd) = direction.getFallbackUV(from, to) val (fallbackUVStart, fallbackUVEnd) = direction.getFallbackUV(from, to)
@ -48,7 +48,7 @@ data class UnbakedElement(
return UnbakedElement( return UnbakedElement(
from = from, from = from,
to = to, 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, shade = data["shade"]?.toBoolean() ?: true,
faces = faces, faces = faces,
) )

View File

@ -1,12 +1,12 @@
package de.bixilon.minosoft.gui.rendering.sound 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.assets.util.FileUtil.readJsonObject
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.gui.rendering.sound.sounds.Sound import de.bixilon.minosoft.gui.rendering.sound.sounds.Sound
import de.bixilon.minosoft.gui.rendering.sound.sounds.SoundType import de.bixilon.minosoft.gui.rendering.sound.sounds.SoundType
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.nbt.tag.NBTUtil.asCompound
import java.util.* import java.util.*
class SoundManager( class SoundManager(
@ -21,7 +21,7 @@ class SoundManager(
for ((name, data) in soundsIndex) { for ((name, data) in soundsIndex) {
val resourceLocation = name.toResourceLocation() val resourceLocation = name.toResourceLocation()
sounds[resourceLocation] = SoundType(resourceLocation, data.asCompound()) sounds[resourceLocation] = SoundType(resourceLocation, data.asJsonObject())
} }
} }

View File

@ -12,6 +12,7 @@
*/ */
package de.bixilon.minosoft.protocol.packets.s2c.play 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.data.entities.block.DefaultBlockEntityMetaDataFactory
import de.bixilon.minosoft.modding.event.events.BlockEntityMetaDataChangeEvent import de.bixilon.minosoft.modding.event.events.BlockEntityMetaDataChangeEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection 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.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
class BlockEntityMetaDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { class BlockEntityMetaDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
@ -36,7 +36,7 @@ class BlockEntityMetaDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
} else { } else {
buffer.connection.registries.blockEntityMetaDataTypeRegistry[buffer.readUnsignedByte()].resourceLocation buffer.connection.registries.blockEntityMetaDataTypeRegistry[buffer.readUnsignedByte()].resourceLocation
} }
val nbt = buffer.readNBT().asCompound() val nbt = buffer.readNBT().asJsonObject()
override fun handle(connection: PlayConnection) { override fun handle(connection: PlayConnection) {
connection.world.getBlockEntity(position)?.updateNBT(nbt) ?: let { connection.world.getBlockEntity(position)?.updateNBT(nbt) ?: let {

View File

@ -12,6 +12,8 @@
*/ */
package de.bixilon.minosoft.protocol.packets.s2c.play 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.kutil.primitive.IntUtil.toInt
import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.entities.block.BlockEntity
import de.bixilon.minosoft.data.world.ChunkData 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.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType 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_.vec2.Vec2i
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
import java.util.* import java.util.*
@ -88,7 +88,7 @@ class ChunkDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
else -> null else -> null
} }
if (buffer.versionId >= V_18W44A) { if (buffer.versionId >= V_18W44A) {
heightMap = buffer.readNBT()?.compoundCast() heightMap = buffer.readNBT()?.toJsonObject()
} }
if (!isFullChunk && buffer.versionId < V_21W37A) { if (!isFullChunk && buffer.versionId < V_21W37A) {
this.chunkData.biomeSource = SpatialBiomeArray(buffer.readBiomeArray()) this.chunkData.biomeSource = SpatialBiomeArray(buffer.readBiomeArray())
@ -118,7 +118,7 @@ class ChunkDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
val blockEntities: MutableMap<Vec3i, BlockEntity> = mutableMapOf() val blockEntities: MutableMap<Vec3i, BlockEntity> = mutableMapOf()
val positionOffset = Vec3i.of(chunkPosition, dimension.lowestSection, Vec3i.EMPTY) val positionOffset = Vec3i.of(chunkPosition, dimension.lowestSection, Vec3i.EMPTY)
for (i in 0 until buffer.readVarInt()) { 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 position = Vec3i(nbt["x"]?.toInt() ?: continue, nbt["y"]?.toInt() ?: continue, nbt["z"]?.toInt() ?: continue) - positionOffset
val resourceLocation = (nbt["id"]?.toResourceLocation() ?: continue).fix() val resourceLocation = (nbt["id"]?.toResourceLocation() ?: continue).fix()
val type = buffer.connection.registries.blockEntityTypeRegistry[resourceLocation] ?: let { val type = buffer.connection.registries.blockEntityTypeRegistry[resourceLocation] ?: let {
@ -138,7 +138,7 @@ class ChunkDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
val xz = buffer.readUnsignedByte() val xz = buffer.readUnsignedByte()
val y = buffer.readShort() val y = buffer.readShort()
val type = buffer.connection.registries.blockEntityTypeRegistry[buffer.readVarInt()] 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) val entity = type.build(buffer.connection)
entity.updateNBT(nbt) entity.updateNBT(nbt)
blockEntities[Vec3i(xz shr 4, y, xz and 0x0F)] = entity blockEntities[Vec3i(xz shr 4, y, xz and 0x0F)] = entity

View File

@ -14,6 +14,8 @@ package de.bixilon.minosoft.protocol.packets.s2c.play
import com.google.common.collect.HashBiMap import com.google.common.collect.HashBiMap
import de.bixilon.kutil.cast.CastUtil.unsafeCast 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.Difficulties
import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.abilities.Gamemodes
import de.bixilon.minosoft.data.registries.DefaultRegistries 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.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType 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 import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast
class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
@ -104,12 +104,12 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
if (buffer.versionId < ProtocolVersions.V_20W21A) { if (buffer.versionId < ProtocolVersions.V_20W21A) {
dimensionProperties = buffer.connection.registries.dimensionRegistry[buffer.readInt()].type dimensionProperties = buffer.connection.registries.dimensionRegistry[buffer.readInt()].type
} else { } else {
val dimensionCodec = buffer.readNBT().asCompound() val dimensionCodec = buffer.readNBT().asJsonObject()
dimensions = parseDimensionCodec(dimensionCodec, buffer.versionId) dimensions = parseDimensionCodec(dimensionCodec, buffer.versionId)
dimensionProperties = if (buffer.versionId < ProtocolVersions.V_1_16_2_PRE3) { dimensionProperties = if (buffer.versionId < ProtocolVersions.V_1_16_2_PRE3) {
dimensions[buffer.readResourceLocation()]!!.type dimensions[buffer.readResourceLocation()]!!.type
} else { } else {
DimensionProperties.deserialize(buffer.readNBT().asCompound()) DimensionProperties.deserialize(buffer.readNBT().asJsonObject())
} }
world = buffer.readResourceLocation() world = buffer.readResourceLocation()
} }
@ -183,7 +183,7 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
val listTag: MutableList<Map<*, *>> = if (versionId < ProtocolVersions.V_20W28A) { val listTag: MutableList<Map<*, *>> = if (versionId < ProtocolVersions.V_20W28A) {
nbt["dimension"]?.listCast() nbt["dimension"]?.listCast()
} else { } else {
nbt["minecraft:dimension_type"]?.compoundCast()?.get("value")?.listCast() nbt["minecraft:dimension_type"]?.toJsonObject()?.get("value")?.listCast()
}!! }!!
for (tag in listTag) { for (tag in listTag) {
val dimensionResourceLocation = ResourceLocation(tag[if (versionId < ProtocolVersions.V_1_16_PRE3) { val dimensionResourceLocation = ResourceLocation(tag[if (versionId < ProtocolVersions.V_1_16_PRE3) {
@ -192,9 +192,9 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
"name" "name"
}].unsafeCast()) }].unsafeCast())
val dimensionPropertyTag = if (versionId < ProtocolVersions.V_1_16_PRE3 || versionId >= ProtocolVersions.V_1_16_2_PRE1) { val dimensionPropertyTag = if (versionId < ProtocolVersions.V_1_16_PRE3 || versionId >= ProtocolVersions.V_1_16_2_PRE1) {
tag["element"].asCompound() tag["element"].asJsonObject()
} else { } else {
tag.asCompound() tag.asJsonObject()
} }
dimensionMap[dimensionResourceLocation] = Dimension.deserialize(null, dimensionResourceLocation, dimensionPropertyTag) dimensionMap[dimensionResourceLocation] = Dimension.deserialize(null, dimensionResourceLocation, dimensionPropertyTag)
} }

View File

@ -12,16 +12,16 @@
*/ */
package de.bixilon.minosoft.protocol.packets.s2c.play 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.packets.s2c.PlayS2CPacket
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer
import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
class NBTQueryResponseS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { class NBTQueryResponseS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
val transactionId: Int = buffer.readVarInt() val transactionId: Int = buffer.readVarInt()
val nbt: Map<String, Any> = buffer.readNBT().asCompound() val nbt: Map<String, Any> = buffer.readNBT().asJsonObject()
override fun log(reducedLog: Boolean) { override fun log(reducedLog: Boolean) {
Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "NBT query response (transactionId=$transactionId nbt=$nbt)" } Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "NBT query response (transactionId=$transactionId nbt=$nbt)" }

View File

@ -12,6 +12,7 @@
*/ */
package de.bixilon.minosoft.protocol.packets.s2c.play 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.Difficulties
import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.abilities.Gamemodes
import de.bixilon.minosoft.data.registries.ResourceLocation 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.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import glm_.vec3.Vec3d import glm_.vec3.Vec3d
class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
@ -60,7 +60,7 @@ class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
buffer.connection.registries.dimensionRegistry[buffer.readResourceLocation()]!!.type buffer.connection.registries.dimensionRegistry[buffer.readResourceLocation()]!!.type
} }
else -> { else -> {
DimensionProperties.deserialize(buffer.readNBT().asCompound()) // current dimension data DimensionProperties.deserialize(buffer.readNBT().asJsonObject()) // current dimension data
} }
} }
if (buffer.versionId < ProtocolVersions.V_19W11A) { if (buffer.versionId < ProtocolVersions.V_19W11A) {

View File

@ -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_13_2_PRE1
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_9_1_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.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 import glm_.vec3.Vec3i
@ -121,7 +121,7 @@ class PlayInByteBuffer : InByteBuffer {
if (!connection.version.flattened) { if (!connection.version.flattened) {
metaData = readUnsignedShort() metaData = readUnsignedShort()
} }
val nbt = readNBTTag(versionId < V_14W28B)?.compoundCast() val nbt = readNBTTag(versionId < V_14W28B)?.toMutableJsonObject()
return ItemStack( return ItemStack(
item = connection.registries.itemRegistry[id shl 16 or metaData], item = connection.registries.itemRegistry[id shl 16 or metaData],
connection = connection, connection = connection,
@ -136,7 +136,7 @@ class PlayInByteBuffer : InByteBuffer {
item = connection.registries.itemRegistry[readVarInt()], item = connection.registries.itemRegistry[readVarInt()],
connection = connection, connection = connection,
count = readUnsignedByte(), count = readUnsignedByte(),
nbt = readNBT()?.compoundCast() ?: mutableMapOf(), nbt = readNBT()?.toMutableJsonObject() ?: mutableMapOf(),
) )
} }
} }

View File

@ -13,9 +13,9 @@
package de.bixilon.minosoft.protocol.status package de.bixilon.minosoft.protocol.status
import de.bixilon.kutil.json.JsonUtil.toJsonObject
import de.bixilon.kutil.primitive.IntUtil.toInt import de.bixilon.kutil.primitive.IntUtil.toInt
import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
import java.util.* import java.util.*
class ServerStatus( class ServerStatus(
@ -38,11 +38,11 @@ class ServerStatus(
private set private set
init { init {
data["version"]?.compoundCast()?.let { data["version"]?.toJsonObject()?.let {
protocolId = it["protocol"]?.toInt() protocolId = it["protocol"]?.toInt()
serverBrand = it["name"]?.toString() serverBrand = it["name"]?.toString()
} }
data["players"]?.compoundCast()?.let { data["players"]?.toJsonObject()?.let {
usedSlots = it["online"]?.toInt() usedSlots = it["online"]?.toInt()
slots = it["max"]?.toInt() slots = it["max"]?.toInt()

View File

@ -15,6 +15,7 @@ package de.bixilon.minosoft.util.account.microsoft
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.json.JsonUtil.asJsonList 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.primitive.LongUtil.toLong
import de.bixilon.kutil.uuid.UUIDUtil.toUUID import de.bixilon.kutil.uuid.UUIDUtil.toUUID
import de.bixilon.minosoft.data.accounts.types.MicrosoftAccount 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.Log
import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound
import de.bixilon.minosoft.util.url.URLProtocolStreamHandlers import de.bixilon.minosoft.util.url.URLProtocolStreamHandlers
import java.net.URL import java.net.URL
import java.net.URLConnection import java.net.URLConnection
@ -92,7 +92,7 @@ object MicrosoftOAuthUtils {
if (response.statusCode != 200) { if (response.statusCode != 200) {
throw LoginException(response.statusCode, "Could not authenticate with xbox live token", response.body.toString()) 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 { fun getXSTSToken(xBoxLiveToken: String): String {

View File

@ -14,6 +14,8 @@
package de.bixilon.minosoft.util.nbt.tag package de.bixilon.minosoft.util.nbt.tag
import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.json.MutableJsonObject
object NBTUtil { object NBTUtil {
@ -34,14 +36,17 @@ object NBTUtil {
return null return null
} }
fun Any?.compoundCast(): MutableMap<String, Any>? { @Deprecated("Will be in Kutil 1.4")
return this.nullCast() fun Any?.asMutableJsonObject(): MutableJsonObject {
return this.unsafeCast()
} }
fun Any?.asCompound(): MutableMap<String, Any> { @Deprecated("Will be in Kutil 1.4")
return this.compoundCast()!! fun Any?.toMutableJsonObject(): MutableJsonObject? {
return this?.nullCast()
} }
fun <T> Any?.listCast(): MutableList<T>? { fun <T> Any?.listCast(): MutableList<T>? {
try { try {
return this as MutableList<T> return this as MutableList<T>