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.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)

View File

@ -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(),

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.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<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 ->
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.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<String, Any> = 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) },
)
}
}

View File

@ -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
}

View File

@ -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<String, Any>): BlockState {
val properties = data["properties"]?.compoundCast()?.let {
val properties = data["properties"]?.toJsonObject()?.let {
getProperties(it)
} ?: 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.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<BlockState> = 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) {

View File

@ -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<ResourceLocation, EntityAttributeModifier> = mutableMapOf()
val uuidAttributes: MutableMap<UUID, EntityAttributeModifier> = 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
}

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.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<String, Any>): 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<ResourceLocation, Double> = mutableMapOf()
data["attributes"]?.compoundCast()?.let {
data["attributes"]?.toJsonObject()?.let {
for ((attributeResourceLocation, value) in it) {
attributes[ResourceLocation.getResourceLocation(attributeResourceLocation).fix()] = value.unsafeCast()
}

View File

@ -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

View File

@ -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<ParticleType> {
override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map<String, Any>): ParticleType {
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) {
val textureResourceLocation = ResourceLocation(texture)
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.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

View File

@ -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!")
}
}

View File

@ -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<T : RegistryFakeEnumerable>(
override var parent: FakeEnumRegistry<T>? = null,
@ -49,7 +49,7 @@ class FakeEnumRegistry<T : RegistryFakeEnumerable>(
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
}

View File

@ -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<T : RegistryItem> {
@ -36,7 +36,7 @@ class PerVersionRegistry<T : RegistryItem> {
val versions: SortedMap<Int, Registry<T>> = sortedMapOf({ t, t2 -> t2 - t })
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()
}

View File

@ -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<T : RegistryItem>(
override var parent: AbstractRegistry<T>? = null,
@ -120,7 +120,7 @@ open class Registry<T : RegistryItem>(
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) {

View File

@ -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,

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.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<String, Any> = if (data is String) {
var json: Map<String, Any> = (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<String>(), Jackson.JSON_MAP_TYPE)

View File

@ -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)

View File

@ -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)

View File

@ -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()
}

View File

@ -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<Map<BlockProperties, Set<Any>>>, MutableSet<AbstractUnbakedBlockModel>>,
@ -71,7 +72,7 @@ class MultipartRootModel(
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()
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) {

View File

@ -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,
)

View File

@ -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())
}
}

View File

@ -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 {

View File

@ -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<Vec3i, BlockEntity> = 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

View File

@ -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<Map<*, *>> = 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)
}

View File

@ -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<String, Any> = buffer.readNBT().asCompound()
val nbt: Map<String, Any> = buffer.readNBT().asJsonObject()
override fun log(reducedLog: Boolean) {
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
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) {

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_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(),
)
}
}

View File

@ -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()

View File

@ -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 {

View File

@ -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<String, Any>? {
return this.nullCast()
@Deprecated("Will be in Kutil 1.4")
fun Any?.asMutableJsonObject(): MutableJsonObject {
return this.unsafeCast()
}
fun Any?.asCompound(): MutableMap<String, Any> {
return this.compoundCast()!!
@Deprecated("Will be in Kutil 1.4")
fun Any?.toMutableJsonObject(): MutableJsonObject? {
return this?.nullCast()
}
fun <T> Any?.listCast(): MutableList<T>? {
try {
return this as MutableList<T>