From 04aea97d05fffcfa326f658d49d6e9bf89aba11f Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 8 Jul 2021 22:30:19 +0200 Subject: [PATCH] improve nbt/json/mbf casting --- .../minosoft/data/assets/AssetsManager.kt | 4 +- .../entities/block/CampfireBlockEntity.kt | 11 ++--- .../entities/block/MobSpawnerBlockEntity.kt | 4 +- .../entities/block/NoteBlockBlockEntity.kt | 4 +- .../data/entities/block/SignBlockEntity.kt | 2 +- .../minosoft/data/inventory/ItemStack.kt | 13 +++--- .../minecraft/MinecraftLocaleManager.kt | 4 +- .../minosoft/data/player/LocalPlayerEntity.kt | 4 +- .../data/registries/DefaultRegistries.kt | 32 +++++++------- .../minosoft/data/registries/Dimension.kt | 6 +-- .../minosoft/data/registries/Motive.kt | 4 +- .../minosoft/data/registries/PluginChannel.kt | 2 +- .../minosoft/data/registries/biomes/Biome.kt | 4 +- .../data/registries/biomes/BiomeCategory.kt | 2 +- .../registries/biomes/BiomePrecipitation.kt | 2 +- .../data/registries/blocks/BlockState.kt | 11 ++--- .../data/registries/blocks/types/Block.kt | 12 ++--- .../data/registries/effects/StatusEffect.kt | 7 +-- .../attributes/StatusEffectAttribute.kt | 8 ++-- .../data/registries/entities/EntityType.kt | 6 +-- .../minosoft/data/registries/fluid/Fluid.kt | 2 +- .../registries/inventory/CreativeModeTab.kt | 6 +-- .../minosoft/data/registries/items/DyeItem.kt | 2 +- .../minosoft/data/registries/items/Item.kt | 4 +- .../data/registries/items/MusicDiscItem.kt | 2 +- .../data/registries/items/armor/ArmorItem.kt | 6 +-- .../data/registries/materials/Material.kt | 2 +- .../data/registries/registry/EnumRegistry.kt | 4 +- .../registries/registry/FakeEnumRegistry.kt | 4 +- .../data/registries/registry/Registry.kt | 6 +-- .../data/registries/versions/Registries.kt | 12 ++--- .../data/registries/versions/Version.kt | 4 +- .../minosoft/data/text/BaseComponent.kt | 2 +- .../gui/rendering/block/WorldRenderer.kt | 2 +- .../gui/rendering/block/models/BlockModel.kt | 9 ++-- .../block/models/BlockModelElement.kt | 11 ++--- .../rendering/block/models/BlockModelFace.kt | 4 +- .../block/outline/BlockOutlineRenderer.kt | 2 +- .../minosoft/gui/rendering/font/FontLoader.kt | 12 ++--- .../rendering/hud/atlas/HUDAtlasElement.kt | 11 ++--- .../gui/rendering/sound/AudioPlayer.kt | 4 +- .../event/events/CollectItemAnimationEvent.kt | 2 +- .../s2c/play/BlockEntityMetaDataS2CP.kt | 4 +- .../packets/s2c/play/ChunkDataS2CP.kt | 9 ++-- .../protocol/packets/s2c/play/JoinGameS2CP.kt | 13 +++--- .../packets/s2c/play/NBTQueryResponseS2CP.kt | 4 +- .../java/de/bixilon/minosoft/util/GitInfo.kt | 44 +++++++++---------- .../java/de/bixilon/minosoft/util/KUtil.kt | 33 ++++++-------- .../util/json/ResourceLocationJsonMap.kt | 3 +- .../bixilon/minosoft/util/nbt/tag/NBTUtil.kt | 12 +++-- 50 files changed, 193 insertions(+), 184 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.kt b/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.kt index a86b130f9..6ece00452 100644 --- a/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.kt +++ b/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.kt @@ -19,7 +19,7 @@ import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.util.KUtil.fromJson import de.bixilon.minosoft.util.Util -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import de.matthiasmann.twl.utils.PNGDecoder import org.lwjgl.BufferUtils import java.io.BufferedReader @@ -52,7 +52,7 @@ interface AssetsManager { } fun readJsonAsset(resourceLocation: ResourceLocation): Map { - return readStringAsset(resourceLocation).fromJson().compoundCast()!! + return readStringAsset(resourceLocation).fromJson().asCompound() } fun readStringAsset(resourceLocation: ResourceLocation): String { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt index b205d2f9c..a47d015ae 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/CampfireBlockEntity.kt @@ -23,7 +23,8 @@ import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.fire.SmokeParticle import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.util.KUtil.chance -import de.bixilon.minosoft.util.KUtil.nullCast +import de.bixilon.minosoft.util.KUtil.toInt +import de.bixilon.minosoft.util.KUtil.unsafeCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast import glm_.vec3.Vec3d import glm_.vec3.Vec3i @@ -48,12 +49,12 @@ class CampfireBlockEntity(connection: PlayConnection) : BlockEntity(connection) continue } val itemStack = ItemStack( - item = connection.registries.itemRegistry[slot["id"]?.nullCast()!!]!!, + item = connection.registries.itemRegistry[slot["id"].unsafeCast()]!!, connection = connection, - count = slot["Count"]?.nullCast()?.toInt() ?: 1, + count = slot["Count"]?.toInt() ?: 1, ) - items[slot["Slot"]?.nullCast()?.toInt()!!] = itemStack + items[slot["Slot"]!!.toInt()] = itemStack } } @@ -72,7 +73,7 @@ class CampfireBlockEntity(connection: PlayConnection) : BlockEntity(connection) } } - val facing = (blockState.properties[BlockProperties.FACING] as Directions).horizontalId + val facing = blockState.properties[BlockProperties.FACING].unsafeCast().horizontalId for ((index, item) in items.withIndex()) { item ?: continue diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/MobSpawnerBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/MobSpawnerBlockEntity.kt index 0963d6a5e..c8c0db64c 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/MobSpawnerBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/MobSpawnerBlockEntity.kt @@ -23,7 +23,7 @@ import de.bixilon.minosoft.gui.rendering.util.VecUtil.center import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d import de.bixilon.minosoft.protocol.network.connection.PlayConnection -import de.bixilon.minosoft.util.KUtil.nullCast +import de.bixilon.minosoft.util.KUtil.toInt import glm_.vec3.Vec3d import glm_.vec3.Vec3i import kotlin.random.Random @@ -53,7 +53,7 @@ class MobSpawnerBlockEntity(connection: PlayConnection) : BlockEntity(connection override fun updateNBT(nbt: Map) { nbt["MaxNearbyEntities"]?.let { - requiredPlayerRange = nbt["MaxNearbyEntities"]?.nullCast()?.toInt() ?: 16 + requiredPlayerRange = nbt["MaxNearbyEntities"]?.toInt() ?: 16 } // ToDo: {MaxNearbyEntities: 6s, RequiredPlayerRange: 16s, SpawnCount: 4s, x: -80, y: 4, SpawnData: {id: "minecraft:zombie"}, z: 212, id: "minecraft:mob_spawner", MaxSpawnDelay: 800s, SpawnRange: 4s, Delay: 0s, MinSpawnDelay: 200s} } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/NoteBlockBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/NoteBlockBlockEntity.kt index c03f603c9..78f6a1319 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/NoteBlockBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/NoteBlockBlockEntity.kt @@ -22,7 +22,7 @@ import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.No import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.util.KUtil.asResourceLocation -import de.bixilon.minosoft.util.KUtil.nullCast +import de.bixilon.minosoft.util.KUtil.toInt import glm_.vec3.Vec3d import glm_.vec3.Vec3i @@ -59,7 +59,7 @@ class NoteBlockBlockEntity(connection: PlayConnection) : BlockEntity(connection) noteParticleType?.let { - connection.world += NoteParticle(connection, blockPosition.toVec3d + Vec3d(0.5, 1.2, 0.5), (blockState.properties[BlockProperties.NOTE]?.nullCast()?.toInt() ?: 0) / 24.0f, it.default()) + connection.world += NoteParticle(connection, blockPosition.toVec3d + Vec3d(0.5, 1.2, 0.5), (blockState.properties[BlockProperties.NOTE]?.toInt() ?: 0) / 24.0f, it.default()) } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/block/SignBlockEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/block/SignBlockEntity.kt index fe26c0ac9..45fff9233 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/block/SignBlockEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/block/SignBlockEntity.kt @@ -27,7 +27,7 @@ class SignBlockEntity(connection: PlayConnection) : BlockEntity(connection) { override fun updateNBT(nbt: Map) { for (i in 0 until ProtocolDefinition.SIGN_LINES) { - val tag = nbt["Text$i"]?.nullCast() ?: continue + val tag = nbt["Text$i"].nullCast() ?: continue lines[i] = ChatComponent.of(tag, translator = connection.version.localeManager) } diff --git a/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt b/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt index 0247c988e..2ddfc6a8f 100644 --- a/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt +++ b/src/main/java/de/bixilon/minosoft/data/inventory/ItemStack.kt @@ -31,6 +31,7 @@ import de.bixilon.minosoft.data.text.TextFormattable import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.util.BitByte.isBit import de.bixilon.minosoft.util.KUtil.nullCast +import de.bixilon.minosoft.util.KUtil.toInt 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 @@ -63,10 +64,10 @@ data class ItemStack( return } - nbt.getAndRemove(REPAIR_COST_TAG)?.nullCast()?.let { repairCost = it.toInt() } + nbt.getAndRemove(REPAIR_COST_TAG).nullCast()?.let { repairCost = it.toInt() } nbt.getAndRemove(DISPLAY_TAG)?.compoundCast()?.let { - it.getAndRemove(DISPLAY_MAME_TAG)?.nullCast()?.let { nameTag -> + it.getAndRemove(DISPLAY_MAME_TAG).nullCast()?.let { nameTag -> customDisplayName = ChatComponent.of(nameTag, translator = connection?.version?.localeManager) } @@ -77,15 +78,15 @@ data class ItemStack( } } - nbt.getAndRemove(UNBREAKABLE_TAG)?.nullCast()?.let { + nbt.getAndRemove(UNBREAKABLE_TAG).nullCast()?.let { unbreakable = it.toInt() == 0x01 } - nbt.getAndRemove(UNBREAKABLE_TAG)?.nullCast()?.let { + nbt.getAndRemove(UNBREAKABLE_TAG).nullCast()?.let { unbreakable = it.toInt() == 0x01 } - nbt.getAndRemove(HIDE_FLAGS_TAG)?.nullCast()?.let { + nbt.getAndRemove(HIDE_FLAGS_TAG).nullCast()?.let { hideFlags = it.toInt() } @@ -102,7 +103,7 @@ data class ItemStack( else -> TODO() } }!! - enchantments[enchantment] = enchantmentTag[ENCHANTMENT_LEVEL_TAG]?.nullCast()?.toInt()!! + enchantments[enchantment] = enchantmentTag[ENCHANTMENT_LEVEL_TAG]!!.toInt() } } } diff --git a/src/main/java/de/bixilon/minosoft/data/locale/minecraft/MinecraftLocaleManager.kt b/src/main/java/de/bixilon/minosoft/data/locale/minecraft/MinecraftLocaleManager.kt index e5b40b520..e5e6fb803 100644 --- a/src/main/java/de/bixilon/minosoft/data/locale/minecraft/MinecraftLocaleManager.kt +++ b/src/main/java/de/bixilon/minosoft/data/locale/minecraft/MinecraftLocaleManager.kt @@ -20,7 +20,7 @@ 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.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import java.util.* class MinecraftLocaleManager(private val version: Version) : Translator { @@ -33,7 +33,7 @@ class MinecraftLocaleManager(private val version: Version) : Translator { private fun loadLanguage(version: Version, language: String): MinecraftLanguage { return if (version.versionId >= ProtocolVersions.V_18W02A) { - MinecraftLanguage(language, this.version.assetsManager.readJsonAsset(ResourceLocation(String.format("lang/%s.json", language.lowercase(Locale.getDefault())))).compoundCast()!!) + MinecraftLanguage(language, this.version.assetsManager.readJsonAsset(ResourceLocation(String.format("lang/%s.json", language.lowercase(Locale.getDefault())))).asCompound()) } else { MinecraftLanguage(language, this.version.assetsManager.readStringAsset(ResourceLocation(String.format("lang/%s.lang", language.lowercase(Locale.getDefault()))))) } diff --git a/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt b/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt index 991dea0e7..d142f0b36 100644 --- a/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/player/LocalPlayerEntity.kt @@ -147,7 +147,7 @@ class LocalPlayerEntity( } val blockState = connection.world[positionInfo.blockPosition] ?: return false - connection.tags[TagsS2CP.BLOCK_TAG_RESOURCE_LOCATION]?.get(CLIMBABLE_TAG)?.nullCast>()?.let { + connection.tags[TagsS2CP.BLOCK_TAG_RESOURCE_LOCATION]?.get(CLIMBABLE_TAG).nullCast>()?.let { return it.entries.contains(blockState.block) } return DefaultBlockTags.CLIMBABLE.contains(blockState.block.resourceLocation) @@ -159,7 +159,7 @@ class LocalPlayerEntity( if (isFlyingWithElytra || baseAbilities.isFlying) { return 1.0 } - val onSoulSpeedBlock = connection.tags[TagsS2CP.BLOCK_TAG_RESOURCE_LOCATION]?.get(SOUL_SPEED_BLOCKS)?.nullCast>()?.entries?.contains(connection.world[positionInfo.velocityPosition]?.block) ?: false + val onSoulSpeedBlock = connection.tags[TagsS2CP.BLOCK_TAG_RESOURCE_LOCATION]?.get(SOUL_SPEED_BLOCKS).nullCast>()?.entries?.contains(connection.world[positionInfo.velocityPosition]?.block) ?: false if (onSoulSpeedBlock && getEquipmentEnchant(connection.registries.enchantmentRegistry[DefaultEnchantments.SOUL_SPEED]) > 0) { // ToDo diff --git a/src/main/java/de/bixilon/minosoft/data/registries/DefaultRegistries.kt b/src/main/java/de/bixilon/minosoft/data/registries/DefaultRegistries.kt index 64b86746d..d744fcff6 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/DefaultRegistries.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/DefaultRegistries.kt @@ -27,7 +27,7 @@ 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.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound object DefaultRegistries { private val ENUM_RESOURCE_LOCATION = ResourceLocation("minosoft:mapping/enums.json") @@ -59,31 +59,31 @@ object DefaultRegistries { fun load() { check(!initialized) { "Already initialized!" } - val enumJson = Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(ENUM_RESOURCE_LOCATION).compoundCast()!!.toResourceLocationMap() + val enumJson = Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(ENUM_RESOURCE_LOCATION).asCompound().toResourceLocationMap() - EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("equipment_slots")]?.compoundCast()!!) - HAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("hand_equipment_slots")]?.compoundCast()!!) - ARMOR_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_equipment_slots")]?.compoundCast()!!) - ARMOR_STAND_EQUIPMENT_SLOTS_REGISTRY.initialize(enumJson[ResourceLocation("armor_stand_equipment_slots")]?.compoundCast()!!) + 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()) - ENTITY_META_DATA_DATA_TYPES_REGISTRY.initialize(enumJson[ResourceLocation("entity_meta_data_data_types")]?.compoundCast()!!) + ENTITY_META_DATA_DATA_TYPES_REGISTRY.initialize(enumJson[ResourceLocation("entity_meta_data_data_types")].asCompound()) - TITLE_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("title_actions")]?.compoundCast()!!) + TITLE_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("title_actions")].asCompound()) - ENTITY_ANIMATION_REGISTRY.initialize(enumJson[ResourceLocation("entity_animations")]?.compoundCast()!!) - ENTITY_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("entity_actions")]?.compoundCast()!!) + ENTITY_ANIMATION_REGISTRY.initialize(enumJson[ResourceLocation("entity_animations")].asCompound()) + ENTITY_ACTIONS_REGISTRY.initialize(enumJson[ResourceLocation("entity_actions")].asCompound()) - val registriesJson = Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(REGISTRIES_RESOURCE_LOCATION).compoundCast()!!.toResourceLocationMap() + val registriesJson = Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(REGISTRIES_RESOURCE_LOCATION).asCompound().toResourceLocationMap() - DEFAULT_PLUGIN_CHANNELS_REGISTRY.initialize(registriesJson[ResourceLocation("default_plugin_channels")]?.compoundCast()!!, PluginChannel) + DEFAULT_PLUGIN_CHANNELS_REGISTRY.initialize(registriesJson[ResourceLocation("default_plugin_channels")].asCompound(), PluginChannel) - ENTITY_OBJECT_REGISTRY.rawInitialize(registriesJson[ResourceLocation("entity_objects")]?.compoundCast()!!, null, EntityObjectType) + ENTITY_OBJECT_REGISTRY.rawInitialize(registriesJson[ResourceLocation("entity_objects")].asCompound(), null, EntityObjectType) - BLOCK_ENTITY_META_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("block_entity_meta_data_types")]?.compoundCast()!!, BlockEntityMetaType) + BLOCK_ENTITY_META_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("block_entity_meta_data_types")].asCompound(), BlockEntityMetaType) - CONTAINER_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("container_types")]?.compoundCast()!!, ContainerType) - GAME_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation("game_events")]?.compoundCast()!!, GameEvent) + CONTAINER_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation("container_types")].asCompound(), ContainerType) + GAME_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation("game_events")].asCompound(), GameEvent) initialized = true } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/Dimension.kt b/src/main/java/de/bixilon/minosoft/data/registries/Dimension.kt index fb1fa6e74..b8df1cc1c 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/Dimension.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/Dimension.kt @@ -76,14 +76,14 @@ data class Dimension( piglinSafe = data["piglin_safe"]?.booleanCast() ?: false, natural = data["natural"]?.booleanCast() ?: false, ambientLight = data["ambient_light"]?.unsafeCast() ?: 0.0f, - infiniBurn = ResourceLocation(data["infiniburn"]?.nullCast() ?: "infiniburn_overworld"), + infiniBurn = ResourceLocation(data["infiniburn"].nullCast() ?: "infiniburn_overworld"), respawnAnchorWorks = data["respawn_anchor_works"]?.booleanCast() ?: false, hasSkyLight = data["has_skylight", "has_sky_light"]?.booleanCast() ?: false, bedWorks = data["bed_works"]?.booleanCast() ?: false, - effects = ResourceLocation(data["effects"]?.nullCast() ?: "overworld"), + effects = ResourceLocation(data["effects"].nullCast() ?: "overworld"), hasRaids = data["has_raids"]?.booleanCast() ?: false, logicalHeight = data["logical_height"]?.toInt() ?: 256, - coordinateScale = data["coordinate_scale"]?.nullCast() ?: 0.0, + coordinateScale = data["coordinate_scale"].nullCast() ?: 0.0, minY = data["min_y"]?.toInt() ?: 0, hasCeiling = data["has_ceiling"]?.booleanCast() ?: false, ultraWarm = data["ultrawarm"]?.booleanCast() ?: false, diff --git a/src/main/java/de/bixilon/minosoft/data/registries/Motive.kt b/src/main/java/de/bixilon/minosoft/data/registries/Motive.kt index c17ad633e..b17f38e66 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/Motive.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/Motive.kt @@ -31,8 +31,8 @@ data class Motive( override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): Motive { return Motive( resourceLocation = resourceLocation, - width = data["width"]!!.unsafeCast(), - height = data["height"]!!.unsafeCast(), + width = data["width"].unsafeCast(), + height = data["height"].unsafeCast(), ) } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/PluginChannel.kt b/src/main/java/de/bixilon/minosoft/data/registries/PluginChannel.kt index e335fbc81..b9a3e90b2 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/PluginChannel.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/PluginChannel.kt @@ -31,7 +31,7 @@ data class PluginChannel( override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): PluginChannel { return PluginChannel( resourceLocation = resourceLocation, - name = LegacyResourceLocation(data["name"]!!.unsafeCast()) + name = LegacyResourceLocation(data["name"].unsafeCast()) ) } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/biomes/Biome.kt b/src/main/java/de/bixilon/minosoft/data/registries/biomes/Biome.kt index f44f025ef..d80183448 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/biomes/Biome.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/biomes/Biome.kt @@ -76,8 +76,8 @@ data class Biome( skyColor = data["sky_color"]?.toInt()?.asRGBColor() ?: RenderConstants.GRASS_FAILOVER_COLOR, foliageColorOverride = TintColorCalculator.getJsonColor(data["foliage_color_override"]?.toInt() ?: 0), grassColorOverride = TintColorCalculator.getJsonColor(data["grass_color_override"]?.toInt() ?: 0), - descriptionId = data["water_fog_color"]?.nullCast(), - grassColorModifier = data["grass_color_modifier"]?.nullCast()?.uppercase(Locale.getDefault())?.let { GrassColorModifiers.valueOf(it) } ?: when (resourceLocation) { + descriptionId = data["water_fog_color"].nullCast(), + grassColorModifier = data["grass_color_modifier"].nullCast()?.uppercase(Locale.getDefault())?.let { GrassColorModifiers.valueOf(it) } ?: when (resourceLocation) { ResourceLocation("minecraft:swamp"), ResourceLocation("minecraft:swamp_hills") -> GrassColorModifiers.SWAMP ResourceLocation("minecraft:dark_forest"), ResourceLocation("minecraft:dark_forest_hills") -> GrassColorModifiers.DARK_FOREST else -> GrassColorModifiers.NONE diff --git a/src/main/java/de/bixilon/minosoft/data/registries/biomes/BiomeCategory.kt b/src/main/java/de/bixilon/minosoft/data/registries/biomes/BiomeCategory.kt index bc2a19538..ac6a4ec1c 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/biomes/BiomeCategory.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/biomes/BiomeCategory.kt @@ -25,7 +25,7 @@ data class BiomeCategory( companion object : IdDeserializer { override fun deserialize(registries: Registries, data: Map): BiomeCategory { return BiomeCategory( - name = data["name"]!!.unsafeCast() + name = data["name"].unsafeCast() ) } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/biomes/BiomePrecipitation.kt b/src/main/java/de/bixilon/minosoft/data/registries/biomes/BiomePrecipitation.kt index a2bf3ff42..5a0189eaa 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/biomes/BiomePrecipitation.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/biomes/BiomePrecipitation.kt @@ -25,7 +25,7 @@ data class BiomePrecipitation( companion object : IdDeserializer { override fun deserialize(registries: Registries, data: Map): BiomePrecipitation { return BiomePrecipitation( - name = data["name"]!!.unsafeCast() + name = data["name"].unsafeCast() ) } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockState.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockState.kt index 201d2c908..4ff06ec06 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockState.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/BlockState.kt @@ -28,6 +28,7 @@ import de.bixilon.minosoft.gui.rendering.block.renderable.block.BlockRenderer import de.bixilon.minosoft.gui.rendering.block.renderable.block.MultipartRenderer import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.KUtil.unsafeCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import de.bixilon.minosoft.util.nbt.tag.NBTUtil.booleanCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import glm_.vec3.Vec3i @@ -137,12 +138,12 @@ data class BlockState( for (model in it) { when (model) { is Map<*, *> -> { - addBlockModel(model.compoundCast()!!, renderers, models) + addBlockModel(model.asCompound(), renderers, models) } is Collection<*> -> { val modelList: MutableList = mutableListOf() for (singleModel in model) { - addBlockModel(singleModel!!.compoundCast()!!, modelList, models) + addBlockModel(singleModel!!.asCompound(), modelList, models) } renderers.add(MultipartRenderer(modelList.toList())) } @@ -150,7 +151,7 @@ data class BlockState( } } is Map<*, *> -> { - addBlockModel(it.compoundCast()!!, renderers, models) + addBlockModel(it.asCompound(), renderers, models) } else -> error("Not a render json!") } @@ -159,7 +160,7 @@ data class BlockState( val tintColor: RGBColor? = data["tint_color"]?.toInt()?.let { TintColorCalculator.getJsonColor(it) } ?: block.tintColor - val material = registries.materialRegistry[ResourceLocation(data["material"]!!.unsafeCast())]!! + val material = registries.materialRegistry[ResourceLocation(data["material"].unsafeCast())]!! fun Any.asShape(): VoxelShape { @@ -230,7 +231,7 @@ data class BlockState( } private fun addBlockModel(data: Map, renderer: MutableList, models: Map) { - val model = models[ResourceLocation(data["model"]!!.unsafeCast())] ?: error("Can not find block model ${data["model"]}") + val model = models[ResourceLocation(data["model"].unsafeCast())] ?: error("Can not find block model ${data["model"]}") renderer.add(BlockRenderer(data, model)) } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/Block.kt b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/Block.kt index 2833bb86b..44c39d3ff 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/Block.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/blocks/types/Block.kt @@ -35,7 +35,7 @@ import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.toDouble import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.KUtil.unsafeCast -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import glm_.vec3.Vec3i import kotlin.random.Random @@ -46,8 +46,8 @@ open class Block( ) : RegistryItem() { open val explosionResistance: Float = data["explosion_resistance"]?.unsafeCast() ?: 0.0f open val tintColor: RGBColor? = data["tint_color"]?.toInt()?.let { TintColorCalculator.getJsonColor(it) } - open val randomOffsetType: RandomOffsetTypes? = data["offset_type"]?.nullCast()?.let { RandomOffsetTypes[it] } - open val tint: ResourceLocation? = data["tint"]?.nullCast()?.let { ResourceLocation(it) } + open val randomOffsetType: RandomOffsetTypes? = data["offset_type"].nullCast()?.let { RandomOffsetTypes[it] } + open val tint: ResourceLocation? = data["tint"].nullCast()?.let { ResourceLocation(it) } open val renderOverride: List? = null open var blockEntityType: BlockEntityType? = null protected set @@ -119,14 +119,14 @@ open class Block( override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): Block { check(registries != null) { "Registries is null!" } - val block = DefaultBlockFactories[data["class"]!!.unsafeCast()]?.build(resourceLocation, registries, data) ?: Block(resourceLocation, registries, data) + val block = DefaultBlockFactories[data["class"].unsafeCast()]?.build(resourceLocation, registries, data) ?: Block(resourceLocation, registries, data) val properties: MutableMap> = mutableMapOf() val states: MutableSet = mutableSetOf() for ((stateId, stateJson) in data["states"]?.mapCast()!!) { check(stateJson is Map<*, *>) { "Not a state element!" } - val state = BlockState.deserialize(block, registries, stateJson.compoundCast()!!, registries.models) + val state = BlockState.deserialize(block, registries, stateJson.asCompound(), registries.models) registries.blockStateRegistry[stateId.toInt()] = state states.add(state) for ((property, value) in state.properties) { @@ -141,7 +141,7 @@ open class Block( } block.states = states.toSet() - block.defaultState = registries.blockStateRegistry.forceGet(data["default_state"]!!.unsafeCast())!! + block.defaultState = registries.blockStateRegistry.forceGet(data["default_state"].unsafeCast())!! block.properties = propertiesOut.toMap() return block } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt b/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt index 363fa9289..6558cbb92 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/effects/StatusEffect.kt @@ -22,6 +22,7 @@ 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.unsafeCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.util.* @@ -45,7 +46,7 @@ data class StatusEffect( data["attributes"]?.compoundCast()?.let { for ((key, value) in it) { - val attribute = StatusEffectAttribute.deserialize(value.compoundCast()!!) + val attribute = StatusEffectAttribute.deserialize(value.asCompound()) attributes[ResourceLocation.getResourceLocation(key).fix()] = attribute uuidAttributes[attribute.uuid] = attribute } @@ -53,9 +54,9 @@ data class StatusEffect( return StatusEffect( resourceLocation = resourceLocation, - category = StatusEffectCategories[data["category"]!!.unsafeCast()], + category = StatusEffectCategories[data["category"].unsafeCast()], translationKey = data["translation_key"]?.unsafeCast(), - color = data["color"]!!.unsafeCast().asRGBColor(), + color = data["color"].unsafeCast().asRGBColor(), attributes = attributes.toMap(), uuidAttributes = uuidAttributes.toMap(), ) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/effects/attributes/StatusEffectAttribute.kt b/src/main/java/de/bixilon/minosoft/data/registries/effects/attributes/StatusEffectAttribute.kt index 60434e490..a2e12e967 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/effects/attributes/StatusEffectAttribute.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/effects/attributes/StatusEffectAttribute.kt @@ -29,10 +29,10 @@ data class StatusEffectAttribute( companion object { fun deserialize(data: Map): StatusEffectAttribute { return StatusEffectAttribute( - name = data["name"]!!.unsafeCast(), - uuid = Util.getUUIDFromString(data["uuid"]!!.unsafeCast()), - amount = data["amount"]!!.unsafeCast(), - operation = StatusEffectOperations[data["operation"]!!.unsafeCast()], + name = data["name"].unsafeCast(), + uuid = Util.getUUIDFromString(data["uuid"].unsafeCast()), + amount = data["amount"].unsafeCast(), + operation = StatusEffectOperations[data["operation"].unsafeCast()], ) } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt b/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt index 29379ce6e..f15a5fbb4 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/entities/EntityType.kt @@ -72,9 +72,9 @@ data class EntityType( return EntityType( resourceLocation = resourceLocation, - translationKey = data["translation_key"]?.nullCast(), - width = data["width"]!!.unsafeCast(), - height = data["height"]!!.unsafeCast(), + translationKey = data["translation_key"].nullCast(), + width = data["width"].unsafeCast(), + height = data["height"].unsafeCast(), fireImmune = data["fire_immune"]?.booleanCast() ?: false, sizeFixed = data["size_fixed"]?.booleanCast() ?: false, attributes = attributes.toMap(), diff --git a/src/main/java/de/bixilon/minosoft/data/registries/fluid/Fluid.kt b/src/main/java/de/bixilon/minosoft/data/registries/fluid/Fluid.kt index e03d20f9e..016eb9e67 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/fluid/Fluid.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/fluid/Fluid.kt @@ -92,7 +92,7 @@ open class Fluid( override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): Fluid { check(registries != null) { "Registries is null!" } - DefaultFluidFactories[data["class"]?.nullCast()]?.let { + DefaultFluidFactories[data["class"].nullCast()]?.let { return it.build(resourceLocation, registries, data) } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/inventory/CreativeModeTab.kt b/src/main/java/de/bixilon/minosoft/data/registries/inventory/CreativeModeTab.kt index 4f2961396..46b003ef8 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/inventory/CreativeModeTab.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/inventory/CreativeModeTab.kt @@ -30,9 +30,9 @@ data class CreativeModeTab( companion object : IdDeserializer { override fun deserialize(registries: Registries, data: Map): CreativeModeTab { return CreativeModeTab( - name = data["language_id"]!!.unsafeCast(), - recipeFolderName = data["recipe_folder_name"]!!.unsafeCast(), - backgroundSuffix = data["background_suffix"]!!.unsafeCast(), + name = data["language_id"].unsafeCast(), + recipeFolderName = data["recipe_folder_name"].unsafeCast(), + backgroundSuffix = data["background_suffix"].unsafeCast(), canScroll = data["can_scroll"]!!.booleanCast(), showTitle = data["show_title"]!!.booleanCast(), ) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/items/DyeItem.kt b/src/main/java/de/bixilon/minosoft/data/registries/items/DyeItem.kt index 3c78803ba..990ba1919 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/items/DyeItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/items/DyeItem.kt @@ -22,5 +22,5 @@ open class DyeItem( registries: Registries, data: Map, ) : Item(resourceLocation, registries, data) { - val dyeColor = data["dye_color"]?.nullCast() ?: "white" + val dyeColor = data["dye_color"].nullCast() ?: "white" } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/items/Item.kt b/src/main/java/de/bixilon/minosoft/data/registries/items/Item.kt index 7bd5e8859..fda8ac5ee 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/items/Item.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/items/Item.kt @@ -42,7 +42,7 @@ open class Item( val maxStackSize: Int = data["max_stack_size"]?.toInt() ?: 64 val maxDamage: Int = data["max_damage"]?.toInt() ?: 1 val isFireResistant: Boolean = data["is_fire_resistant"]?.booleanCast() ?: false - override val translationKey: String? = data["translation_key"]?.nullCast() + override val translationKey: String? = data["translation_key"].nullCast() val creativeModeTab: CreativeModeTab? = data["category"]?.toInt()?.let { registries.creativeModeTabRegistry[it] } override fun toString(): String { @@ -62,7 +62,7 @@ open class Item( override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): Item { check(registries != null) { "Registries is null!" } - return when (data["class"]!!.unsafeCast()) { + return when (data["class"].unsafeCast()) { "BlockItem" -> BlockItem(resourceLocation, registries, data) "ArmorItem" -> ArmorItem(resourceLocation, registries, data) "SwordItem" -> SwordItem(resourceLocation, registries, data) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/items/MusicDiscItem.kt b/src/main/java/de/bixilon/minosoft/data/registries/items/MusicDiscItem.kt index f9f017db3..b7920fbc7 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/items/MusicDiscItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/items/MusicDiscItem.kt @@ -23,7 +23,7 @@ open class MusicDiscItem( registries: Registries, data: Map, ) : Item(resourceLocation, registries, data) { - val analogOutput = data["analog_output"]?.nullCast() ?: 0 + val analogOutput = data["analog_output"].nullCast() ?: 0 val sound: SoundEvent? = null init { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/items/armor/ArmorItem.kt b/src/main/java/de/bixilon/minosoft/data/registries/items/armor/ArmorItem.kt index 49dc61f42..3045f6042 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/items/armor/ArmorItem.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/items/armor/ArmorItem.kt @@ -24,8 +24,8 @@ open class ArmorItem( registries: Registries, data: Map, ) : Item(resourceLocation, registries, data) { - val protection = data["defense"]!!.unsafeCast() - val toughness = data["toughness"]!!.unsafeCast() - val equipmentSlot = data["equipment_slot"]!!.unsafeCast().let { InventorySlots.EquipmentSlots[it] } + val protection = data["defense"].unsafeCast() + val toughness = data["toughness"].unsafeCast() + val equipmentSlot = data["equipment_slot"].unsafeCast().let { InventorySlots.EquipmentSlots[it] } val knockbackResistance = data["knockback_resistance"]?.unsafeCast() ?: 0.0f } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/materials/Material.kt b/src/main/java/de/bixilon/minosoft/data/registries/materials/Material.kt index b3e45254f..79884563f 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/materials/Material.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/materials/Material.kt @@ -45,7 +45,7 @@ data class Material( return Material( resourceLocation = resourceLocation, color = TintColorCalculator.getJsonColor(data["color"]?.toInt() ?: 0), - pushReaction = data["push_reaction"]?.nullCast()?.let { PushReactions.valueOf(it.uppercase(Locale.getDefault())) } ?: PushReactions.NORMAL, + pushReaction = data["push_reaction"].nullCast()?.let { PushReactions.valueOf(it.uppercase(Locale.getDefault())) } ?: PushReactions.NORMAL, blockMotion = data["blocks_motion"]?.booleanCast() ?: false, flammable = data["flammable"]?.booleanCast() ?: false, liquid = data["liquid"]?.booleanCast() ?: false, diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registry/EnumRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registry/EnumRegistry.kt index 999c13bde..0ff74400d 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registry/EnumRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registry/EnumRegistry.kt @@ -56,7 +56,7 @@ class EnumRegistry>( val value: T when (data) { is Map<*, *> -> { - id = data["id"]!!.unsafeCast() + id = data["id"].unsafeCast() value = getEnum(data["value"]!!) } is String -> { @@ -82,7 +82,7 @@ class EnumRegistry>( } is Map<*, *> -> { for ((index, enum) in data) { - putEnum(enum!!, Integer.valueOf(index!!.unsafeCast())) + putEnum(enum!!, Integer.valueOf(index.unsafeCast())) } } else -> throw IllegalArgumentException("Can not get enum value: $data") diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registry/FakeEnumRegistry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registry/FakeEnumRegistry.kt index 9775a423f..3567c5e73 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registry/FakeEnumRegistry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registry/FakeEnumRegistry.kt @@ -16,7 +16,7 @@ package de.bixilon.minosoft.data.registries.registry import de.bixilon.minosoft.data.registries.versions.Registries import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.collections.Clearable -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound class FakeEnumRegistry( override var parent: FakeEnumRegistry? = null, @@ -49,7 +49,7 @@ class FakeEnumRegistry( check(value is Map<*, *>) var itemId = id.toInt() - val item = deserializer.deserialize(registries, value.compoundCast()!!) + val item = deserializer.deserialize(registries, value.asCompound()) value["id"]?.toInt()?.let { providedItemId -> itemId = providedItemId } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registry/Registry.kt b/src/main/java/de/bixilon/minosoft/data/registries/registry/Registry.kt index f269dc983..50b1ab19d 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registry/Registry.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registry/Registry.kt @@ -22,7 +22,7 @@ import de.bixilon.minosoft.util.KUtil.asResourceLocation import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound open class Registry( override var parent: AbstractRegistry? = null, @@ -99,7 +99,7 @@ open class Registry( for ((resourceLocation, value) in data) { check(value is Map<*, *>) - val item = deserializer.deserialize(registries, resourceLocation, value.compoundCast()!!) ?: continue + val item = deserializer.deserialize(registries, resourceLocation, value.asCompound()) ?: continue value["id"]?.toInt()?.let { id -> var itemId = id if (!flattened) { @@ -153,7 +153,7 @@ open class Registry( for (item in resourceLocationMap.values) { lambda(item) } - parent?.nullCast>()?.forEachItem(lambda) + parent.nullCast>()?.forEachItem(lambda) } override fun toString(): String { diff --git a/src/main/java/de/bixilon/minosoft/data/registries/versions/Registries.kt b/src/main/java/de/bixilon/minosoft/data/registries/versions/Registries.kt index 3fab52d0d..2fe6bbde9 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/versions/Registries.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/versions/Registries.kt @@ -48,6 +48,7 @@ import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.unsafeCast import de.bixilon.minosoft.util.collections.Clearable import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import java.lang.reflect.Field import java.lang.reflect.ParameterizedType @@ -182,15 +183,14 @@ class Registries { // post init for (field in TYPE_MAP.values) { - val registry = field.get(this) as Registry<*> - registry.postInit(this) + field.get(this).unsafeCast>().postInit(this) } isFullyLoaded = true } private fun loadShapes(pixlyzerData: Map?) { pixlyzerData ?: return - val aabbs = loadAABBs(pixlyzerData["aabbs"]?.nullCast()!!) + val aabbs = loadAABBs(pixlyzerData["aabbs"].nullCast()!!) loadVoxelShapes(pixlyzerData["shapes"]?.listCast()!!, aabbs) } @@ -213,7 +213,7 @@ class Registries { if (models.containsKey(resourceLocation)) { continue } - loadBlockModel(resourceLocation, model.compoundCast()!!, data) + loadBlockModel(resourceLocation, model.asCompound(), data) } } @@ -223,14 +223,14 @@ class Registries { return it } var parent: BlockModel? = null - modelData["parent"]?.nullCast()?.let { + modelData["parent"].nullCast()?.let { val parentResourceLocation = ResourceLocation(it) if (parentResourceLocation.path.startsWith("builtin/")) { // ToDo return@let } - parent = loadBlockModel(parentResourceLocation, fullModelData[parentResourceLocation]?.compoundCast()!!, fullModelData) + parent = loadBlockModel(parentResourceLocation, fullModelData[parentResourceLocation]!!.asCompound(), fullModelData) } model = BlockModel(parent, modelData) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/versions/Version.kt b/src/main/java/de/bixilon/minosoft/data/registries/versions/Version.kt index 0cff5d765..387a65215 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/versions/Version.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/versions/Version.kt @@ -26,7 +26,7 @@ import de.bixilon.minosoft.util.CountUpAndDownLatch 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.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound data class Version( var versionName: String, @@ -95,7 +95,7 @@ data class Version( registries.parentRegistries = Versions.PRE_FLATTENING_MAPPING } val pixlyzerData = try { - MBFBinaryReader(assetsManager.readAssetAsStream(Resources.getPixLyzerDataHashByVersion(this), false)).readMBF().data?.compoundCast()!! + MBFBinaryReader(assetsManager.readAssetAsStream(Resources.getPixLyzerDataHashByVersion(this), false)).readMBF().data.asCompound() } catch (exception: Throwable) { // should not happen, but if this version is not flattened, we can fallback to the flatten mappings. Some things might not work... Log.log(LogMessageType.VERSION_LOADING, level = LogLevels.VERBOSE) { exception } diff --git a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt index 6c7758cb4..42d07cbf6 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt @@ -107,7 +107,7 @@ class BaseComponent : ChatComponent { if (colorName.startsWith("#")) { colorName.asColor() } else { - ChatCode.FORMATTING_CODES[colorName]?.nullCast() + ChatCode.FORMATTING_CODES[colorName].nullCast() } } ?: parent?.color diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/block/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/block/WorldRenderer.kt index 848ba4997..8edf87a8a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/block/WorldRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/block/WorldRenderer.kt @@ -60,7 +60,7 @@ class WorldRenderer( val renderWindow: RenderWindow, ) : Renderer { private val world: World = connection.world - private val waterBlock = connection.registries.blockRegistry[ResourceLocation("minecraft:water")]?.nullCast() + private val waterBlock = connection.registries.blockRegistry[ResourceLocation("minecraft:water")].nullCast() private val chunkShader: Shader = renderWindow.renderSystem.createShader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "world")) private val lightMap = LightMap(connection) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModel.kt index 7aff99f61..5baee90f2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModel.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModel.kt @@ -17,6 +17,7 @@ import de.bixilon.minosoft.gui.rendering.util.VecUtil.rad import de.bixilon.minosoft.util.KUtil.listCast import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.unsafeCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import glm_.vec3.Vec3 @@ -27,9 +28,9 @@ open class BlockModel( val textures: Map val elements: List val rotation: Vec3 = Vec3(data["x"]?.unsafeCast() ?: parent?.rotation?.x ?: 0.0f, data["y"]?.unsafeCast() ?: parent?.rotation?.y ?: 0.0f, data["z"]?.unsafeCast() ?: parent?.rotation?.z ?: 0.0f).rad - val uvLock: Boolean = data["uvlock"]?.nullCast() ?: parent?.uvLock ?: false - val rescale: Boolean = data["rescale"]?.nullCast() ?: parent?.rescale ?: false - val ambientOcclusion: Boolean = data["ambientocclusion"]?.nullCast() ?: parent?.ambientOcclusion ?: true + val uvLock: Boolean = data["uvlock"].nullCast() ?: parent?.uvLock ?: false + val rescale: Boolean = data["rescale"].nullCast() ?: parent?.rescale ?: false + val ambientOcclusion: Boolean = data["ambientocclusion"].nullCast() ?: parent?.ambientOcclusion ?: true init { textures = data["textures"]?.compoundCast()?.let { @@ -47,7 +48,7 @@ open class BlockModel( elements = data["elements"]?.listCast()?.let { val elements: MutableList = mutableListOf() for (element in it) { - elements += BlockModelElement(element.compoundCast()!!) + elements += BlockModelElement(element.asCompound()) } elements.toList() } ?: parent?.elements ?: listOf() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModelElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModelElement.kt index 7a3b11714..688a56967 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModelElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModelElement.kt @@ -20,6 +20,7 @@ import de.bixilon.minosoft.gui.rendering.util.VecUtil.rotate import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3 import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.unsafeCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import glm_.func.rad import glm_.vec3.Vec3 @@ -29,7 +30,7 @@ open class BlockModelElement( ) { val from: Vec3 = data["from"]?.toVec3() ?: Vec3.EMPTY val to: Vec3 = data["to"]?.toVec3() ?: Vec3(BLOCK_RESOLUTION) - val shade: Boolean = data["shade"]?.nullCast() ?: true + val shade: Boolean = data["shade"].nullCast() ?: true val faces: MutableMap = mutableMapOf() val transformedPositions: Array = arrayOf( Vec3(from.x, from.y, from.z), @@ -45,16 +46,16 @@ open class BlockModelElement( init { data["rotation"]?.compoundCast()?.let { - val axis = Axes[it["axis"]!!.unsafeCast()] - val angle = it["angle"]!!.unsafeCast().toFloat().rad - val rescale = it["rescale"]?.nullCast() ?: false + val axis = Axes[it["axis"].unsafeCast()] + val angle = it["angle"].unsafeCast().toFloat().rad + val rescale = it["rescale"].nullCast() ?: false rotatePositions(transformedPositions, axis, angle, it["origin"]!!.toVec3(), rescale) } data["faces"]?.compoundCast()?.let { for ((directionName, json) in it) { val direction = Directions[directionName] - faces[direction] = BlockModelFace(json.compoundCast()!!, from, to, direction) + faces[direction] = BlockModelFace(json.asCompound(), from, to, direction) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModelFace.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModelFace.kt index a426d5906..0d7bd7008 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModelFace.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/block/models/BlockModelFace.kt @@ -42,8 +42,8 @@ class BlockModelFace { constructor(data: Map, from: Vec3, to: Vec3, direction: Directions) { tint = data.containsKey("tintindex") - textureName = data["texture"]!!.unsafeCast().removePrefix("#") - cullFace = data["cullface"]?.nullCast()?.let { + textureName = data["texture"].unsafeCast().removePrefix("#") + cullFace = data["cullface"].nullCast()?.let { if (it == "bottom") { Directions.DOWN } else { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/block/outline/BlockOutlineRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/block/outline/BlockOutlineRenderer.kt index 680264029..1641251a7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/block/outline/BlockOutlineRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/block/outline/BlockOutlineRenderer.kt @@ -58,7 +58,7 @@ class BlockOutlineRenderer( } override fun draw() { - val raycastHit = renderWindow.inputHandler.camera.target?.nullCast() + val raycastHit = renderWindow.inputHandler.camera.target.nullCast() var currentMesh = currentMesh diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt index 22e8ef732..241b11a36 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/FontLoader.kt @@ -21,7 +21,7 @@ import de.bixilon.minosoft.gui.rendering.textures.Texture import de.bixilon.minosoft.util.KUtil.listCast import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.KUtil.unsafeCast -import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import java.io.InputStream object FontLoader { @@ -117,12 +117,12 @@ object FontLoader { } fun loadFontProvider(data: Map, assetsManager: AssetsManager, textures: MutableMap): FontProvider { - return when (data["type"]!!.unsafeCast()) { + return when (data["type"].unsafeCast()) { "bitmap" -> { - loadBitmapFontProvider(ResourceLocation(data["file"]!!.unsafeCast()), data["height"]?.toInt(), data["ascent"]!!.toInt(), getCharArray(data["chars"]!!.unsafeCast()), assetsManager, textures) + loadBitmapFontProvider(ResourceLocation(data["file"].unsafeCast()), data["height"]?.toInt(), data["ascent"]!!.toInt(), getCharArray(data["chars"].unsafeCast()), assetsManager, textures) } "legacy_unicode" -> { - loadUnicodeFontProvider(ResourceLocation(data["template"]!!.unsafeCast()), assetsManager.readAssetAsStream(ResourceLocation(data["sizes"]!!.unsafeCast())), assetsManager, textures) + loadUnicodeFontProvider(ResourceLocation(data["template"].unsafeCast()), assetsManager.readAssetAsStream(ResourceLocation(data["sizes"].unsafeCast())), assetsManager, textures) } "ttf" -> { TODO("True Type Fonts are not implemented yet") @@ -134,8 +134,8 @@ object FontLoader { fun loadFontProviders(assetsManager: AssetsManager, textures: MutableMap): List { val ret: MutableList = mutableListOf() - for (providerElement in assetsManager.readJsonAsset(FONT_JSON_RESOURCE_LOCATION).compoundCast()!!["providers"]!!.listCast()!!) { - val provider = loadFontProvider(providerElement.compoundCast()!!, assetsManager, textures) + for (providerElement in assetsManager.readJsonAsset(FONT_JSON_RESOURCE_LOCATION).asCompound()["providers"]!!.listCast()!!) { + val provider = loadFontProvider(providerElement.asCompound(), assetsManager, textures) ret.add(provider) } return ret diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/atlas/HUDAtlasElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/atlas/HUDAtlasElement.kt index 1ac50801d..4d92ce216 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/atlas/HUDAtlasElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/atlas/HUDAtlasElement.kt @@ -17,6 +17,7 @@ import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.textures.Texture import de.bixilon.minosoft.util.KUtil.nullCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import glm_.vec2.Vec2 import glm_.vec2.Vec2i @@ -43,21 +44,21 @@ data class HUDAtlasElement( fun deserialize(json: Map, textures: MutableMap): Map { val ret: MutableMap = mutableMapOf() for ((resourceLocation, data) in json) { - ret[resourceLocation] = deserialize(data.compoundCast()!!, textures) + ret[resourceLocation] = deserialize(data.asCompound(), textures) } return ret } fun deserialize(json: Map, textures: MutableMap): HUDAtlasElement { val keys: MutableSet = mutableSetOf() - var textureResourceLocation: ResourceLocation? = json["texture"]?.nullCast()?.let { ResourceLocation(it) } - for (key in json["versions"]!!.compoundCast()!!.keys) { + var textureResourceLocation: ResourceLocation? = json["texture"].nullCast()?.let { ResourceLocation(it) } + for (key in json["versions"]!!.asCompound().keys) { keys.add(key.toInt()) } // ToDo: Sort and get correct version - val imageJson = json["versions"]!!.compoundCast()!![keys.iterator().next().toString()]!!.compoundCast()!! + val imageJson = json["versions"]!!.asCompound()[keys.iterator().next().toString()]!!.asCompound() - imageJson["texture"]?.nullCast()?.let { textureResourceLocation = ResourceLocation(it) } + imageJson["texture"].nullCast()?.let { textureResourceLocation = ResourceLocation(it) } val texture = textures.getOrPut(textureResourceLocation!!) { Texture(textureResourceLocation!!) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/sound/AudioPlayer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/sound/AudioPlayer.kt index 60dbf9f7d..ff1884783 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/sound/AudioPlayer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/sound/AudioPlayer.kt @@ -238,7 +238,7 @@ class AudioPlayer( } is Map<*, *> -> { sounds += Sound( - path = soundJson["name"]!!.unsafeCast().getSoundLocation(), + path = soundJson["name"].unsafeCast().getSoundLocation(), volume = soundJson["volume"]?.unsafeCast()?.toFloat() ?: 1.0f, pitch = soundJson["pitch"]?.unsafeCast()?.toFloat() ?: 1.0f, weight = soundJson["weight"]?.toInt() ?: 1, @@ -253,7 +253,7 @@ class AudioPlayer( this.sounds[soundEvent] = SoundList( soundEvent = soundEvent, sounds = sounds.toSet(), - subTitle = json["subtitle"]?.nullCast()?.let { ResourceLocation(ProtocolDefinition.DEFAULT_NAMESPACE, it) }, + subTitle = json["subtitle"].nullCast()?.let { ResourceLocation(ProtocolDefinition.DEFAULT_NAMESPACE, it) }, ) } } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.kt index bcd3a2d05..c18618be7 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/CollectItemAnimationEvent.kt @@ -27,5 +27,5 @@ class CollectItemAnimationEvent( val count: Int, ) : PlayConnectionEvent(connection, initiator), CancelableEvent { - constructor(connection: PlayConnection, packet: ItemCollectAnimationS2CP) : this(connection, EventInitiators.SERVER, connection.world.entities[packet.itemEntityId]!!.unsafeCast(), connection.world.entities[packet.collectorEntityId]!!.unsafeCast(), packet.count) + constructor(connection: PlayConnection, packet: ItemCollectAnimationS2CP) : this(connection, EventInitiators.SERVER, connection.world.entities[packet.itemEntityId].unsafeCast(), connection.world.entities[packet.collectorEntityId].unsafeCast(), packet.count) } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BlockEntityMetaDataS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BlockEntityMetaDataS2CP.kt index 1320840e5..a3f2d713e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BlockEntityMetaDataS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/BlockEntityMetaDataS2CP.kt @@ -21,7 +21,7 @@ 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.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound import glm_.vec3.Vec3i class BlockEntityMetaDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { @@ -31,7 +31,7 @@ class BlockEntityMetaDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { buffer.readBlockPosition() } val type = buffer.connection.registries.blockEntityMetaDataTypeRegistry[buffer.readUnsignedByte()].resourceLocation - val nbt = buffer.readNBT()?.compoundCast()!! + val nbt = buffer.readNBT().asCompound() override fun handle(connection: PlayConnection) { connection.fireEvent(BlockEntityMetaDataChangeEvent(connection, this)) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChunkDataS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChunkDataS2CP.kt index 9d692f4d7..b009690ef 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChunkDataS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ChunkDataS2CP.kt @@ -26,13 +26,14 @@ import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.protocol.protocol.ProtocolVersions -import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.toInt +import de.bixilon.minosoft.util.KUtil.unsafeCast import de.bixilon.minosoft.util.Util 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 @@ -107,9 +108,9 @@ class ChunkDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { if (buffer.versionId >= ProtocolVersions.V_1_9_4) { val blockEntitiesCount = buffer.readVarInt() for (i in 0 until blockEntitiesCount) { - val nbt = buffer.readNBT()?.compoundCast()!! - val position = Vec3i(nbt["x"]?.toInt()!!, nbt["y"]?.toInt()!!, nbt["z"]?.toInt()!!) - val resourceLocation = ResourceLocation(nbt["id"]?.nullCast()!!).fix() + val nbt = buffer.readNBT().asCompound() + val position = Vec3i(nbt["x"]!!.toInt(), nbt["y"]!!.toInt(), nbt["z"]!!.toInt()) + val resourceLocation = ResourceLocation(nbt["id"].unsafeCast()).fix() val type = buffer.connection.registries.blockEntityTypeRegistry[resourceLocation] ?: let { Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.WARN) { "Unknown block entity: $resourceLocation" } null diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/JoinGameS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/JoinGameS2CP.kt index 35d6fc3e5..fda668c65 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/JoinGameS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/JoinGameS2CP.kt @@ -32,10 +32,11 @@ import de.bixilon.minosoft.protocol.protocol.PlayOutByteBuffer import de.bixilon.minosoft.protocol.protocol.ProtocolVersions import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_20W27A import de.bixilon.minosoft.util.BitByte -import de.bixilon.minosoft.util.KUtil.nullCast +import de.bixilon.minosoft.util.KUtil.unsafeCast 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 import de.bixilon.minosoft.util.task.time.TimeWorker @@ -97,7 +98,7 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { if (buffer.versionId < ProtocolVersions.V_20W21A) { dimension = buffer.connection.registries.dimensionRegistry[buffer.readInt()] } else { - val dimensionCodec = buffer.readNBT()?.compoundCast()!! + val dimensionCodec = buffer.readNBT().asCompound() dimensions = parseDimensionCodec(dimensionCodec, buffer.versionId) if (buffer.versionId < ProtocolVersions.V_1_16_2_PRE3) { dimension = dimensions[buffer.readResourceLocation()]!! @@ -175,12 +176,12 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { "key" } else { "name" - }]?.nullCast()!!) + }].unsafeCast()) val dimensionPropertyTag = if (versionId < ProtocolVersions.V_1_16_PRE3 || versionId >= ProtocolVersions.V_1_16_2_PRE1) { - tag["element"]?.compoundCast()!! + tag["element"].asCompound() } else { - tag.compoundCast() - }!! + tag.asCompound() + } dimensionMap[dimensionResourceLocation] = Dimension.deserialize(null, dimensionResourceLocation, dimensionPropertyTag) } return dimensionMap diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NBTQueryResponseS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NBTQueryResponseS2CP.kt index 8ef79559f..5ca69c850 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NBTQueryResponseS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/NBTQueryResponseS2CP.kt @@ -17,11 +17,11 @@ 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.compoundCast +import de.bixilon.minosoft.util.nbt.tag.NBTUtil.asCompound class NBTQueryResponseS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { val transactionId: Int = buffer.readVarInt() - val nbt: Map = buffer.readNBT()?.compoundCast()!! + val nbt: Map = buffer.readNBT().asCompound() override fun log() { Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "NBT query response (transactionId=$transactionId nbt=$nbt)" } diff --git a/src/main/java/de/bixilon/minosoft/util/GitInfo.kt b/src/main/java/de/bixilon/minosoft/util/GitInfo.kt index c3f101c8a..b6ec0f5cf 100644 --- a/src/main/java/de/bixilon/minosoft/util/GitInfo.kt +++ b/src/main/java/de/bixilon/minosoft/util/GitInfo.kt @@ -77,32 +77,32 @@ object GitInfo { try { val dateFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ") val json = Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "git.json")) - GIT_BRANCH = json["git.branch"]!!.unsafeCast() - GIT_BUILD_HOST_BRANCH = json["git.build.host"]!!.unsafeCast() - GIT_BUILD_TIME = dateFormat.parse(json["git.build.time"]!!.unsafeCast()).time - GIT_BUILD_USER_EMAIL = json["git.build.user.email"]!!.unsafeCast() - GIT_BUILD_USER_NAME = json["git.build.user.name"]!!.unsafeCast() - GIT_BUILD_VERSION = json["git.build.version"]!!.unsafeCast() - GIT_CLOSEST_TAG_COMMIT_COUNT = json["git.closest.tag.commit.count"]!!.unsafeCast() - GIT_CLOSEST_TAG_NAME = json["git.closest.tag.name"]!!.unsafeCast() - GIT_COMMIT_ID = json["git.commit.id"]!!.unsafeCast() - GIT_COMMIT_ID_ABBREV = json["git.commit.id.abbrev"]!!.unsafeCast() - GIT_COMMIT_ID_DESCRIBE = json["git.commit.id.describe"]!!.unsafeCast() - GIT_COMMIT_ID_DESCRIBE_SHORT = json["git.commit.id.describe-short"]!!.unsafeCast() - GIT_COMMIT_MESSAGE_FULL = json["git.commit.message.full"]!!.unsafeCast() - GIT_COMMIT_MESSAGE_SHORT = json["git.commit.message.short"]!!.unsafeCast() - GIT_COMMIT_TIME = dateFormat.parse(json["git.commit.time"]!!.unsafeCast()).time - GIT_COMMIT_USER_EMAIL = json["git.commit.user.email"]!!.unsafeCast() - GIT_COMMIT_USER_NAME = json["git.commit.user.name"]!!.unsafeCast() + GIT_BRANCH = json["git.branch"].unsafeCast() + GIT_BUILD_HOST_BRANCH = json["git.build.host"].unsafeCast() + GIT_BUILD_TIME = dateFormat.parse(json["git.build.time"].unsafeCast()).time + GIT_BUILD_USER_EMAIL = json["git.build.user.email"].unsafeCast() + GIT_BUILD_USER_NAME = json["git.build.user.name"].unsafeCast() + GIT_BUILD_VERSION = json["git.build.version"].unsafeCast() + GIT_CLOSEST_TAG_COMMIT_COUNT = json["git.closest.tag.commit.count"].unsafeCast() + GIT_CLOSEST_TAG_NAME = json["git.closest.tag.name"].unsafeCast() + GIT_COMMIT_ID = json["git.commit.id"].unsafeCast() + GIT_COMMIT_ID_ABBREV = json["git.commit.id.abbrev"].unsafeCast() + GIT_COMMIT_ID_DESCRIBE = json["git.commit.id.describe"].unsafeCast() + GIT_COMMIT_ID_DESCRIBE_SHORT = json["git.commit.id.describe-short"].unsafeCast() + GIT_COMMIT_MESSAGE_FULL = json["git.commit.message.full"].unsafeCast() + GIT_COMMIT_MESSAGE_SHORT = json["git.commit.message.short"].unsafeCast() + GIT_COMMIT_TIME = dateFormat.parse(json["git.commit.time"].unsafeCast()).time + GIT_COMMIT_USER_EMAIL = json["git.commit.user.email"].unsafeCast() + GIT_COMMIT_USER_NAME = json["git.commit.user.name"].unsafeCast() GIT_DIRTY = json["git.dirty"]!!.booleanCast() - GIT_LOCAL_BRANCH_AHEAD = json["git.local.branch.ahead"]!!.unsafeCast() - GIT_LOCAL_BRANCH_BEHIND = json["git.local.branch.behind"]!!.unsafeCast() - GIT_TAGS = if (json["git.tags"]!!.unsafeCast().isBlank()) { + GIT_LOCAL_BRANCH_AHEAD = json["git.local.branch.ahead"].unsafeCast() + GIT_LOCAL_BRANCH_BEHIND = json["git.local.branch.behind"].unsafeCast() + GIT_TAGS = if (json["git.tags"].unsafeCast().isBlank()) { 0 } else { - json["git.tags"]!!.unsafeCast() + json["git.tags"].unsafeCast() } - GIT_TOTAL_COMMIT_COUNT = json["git.total.commit.count"]!!.unsafeCast() + GIT_TOTAL_COMMIT_COUNT = json["git.total.commit.count"].unsafeCast() IS_INITIALIZED = true } catch (exception: Throwable) { diff --git a/src/main/java/de/bixilon/minosoft/util/KUtil.kt b/src/main/java/de/bixilon/minosoft/util/KUtil.kt index f07223545..edde172c5 100644 --- a/src/main/java/de/bixilon/minosoft/util/KUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/KUtil.kt @@ -17,7 +17,9 @@ import com.squareup.moshi.JsonAdapter import com.squareup.moshi.JsonWriter import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.text.ChatColors import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.data.text.TextComponent import de.bixilon.minosoft.data.text.TextFormattable import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition @@ -55,11 +57,12 @@ object KUtil { return BitSet.valueOf(longArrayOf(long)) } - fun Any.unsafeCast(): T { + @Suppress("UNCHECKED_CAST") + fun Any?.unsafeCast(): T { return this as T } - inline fun Any.nullCast(): T? { + inline fun Any?.nullCast(): T? { if (this is T) { return this } @@ -179,11 +182,11 @@ object KUtil { val map: MutableMap = mutableMapOf() for ((key, value) in this) { - map[key] = value as V + map[key] = value.unsafeCast() } for (pair in pairs) { - map[pair.first] = pair.second as V + map[pair.first] = pair.second.unsafeCast() } return map.toMap() } @@ -192,39 +195,31 @@ object KUtil { val list: MutableList = mutableListOf() for (value in this) { - list += value as V + list += value.unsafeCast() } for (value in values) { - list += value as V + list += value.unsafeCast() } return list.toList() } fun Any?.format(): ChatComponent { return ChatComponent.of(when (this) { - null -> "§4null" + null -> TextComponent("null").color(ChatColors.DARK_RED) is TextFormattable -> this.toText() - is Boolean -> { - if (this) { - "§atrue" - } else { - "§cfalse" - } - } + is Boolean -> TextComponent(this.toString()).color(this.decide(ChatColors.GREEN, ChatColors.RED)) is Enum<*> -> { val name = this.name - "§e" + if (name.length == 1) { + TextComponent(if (name.length == 1) { name } else { name.lowercase() - } + }).color(ChatColors.YELLOW) } is Float -> "§d%.3f".format(this) is Double -> "§d%.4f".format(this) - is Number -> { - "§d$this" - } + is Number -> TextComponent(this).color(ChatColors.LIGHT_PURPLE) is Vec3t<*> -> "(${this.x.format()} ${this.y.format()} ${this.z.format()})" is Vec2t<*> -> "(${this.x.format()} ${this.y.format()})" else -> this.toString() diff --git a/src/main/java/de/bixilon/minosoft/util/json/ResourceLocationJsonMap.kt b/src/main/java/de/bixilon/minosoft/util/json/ResourceLocationJsonMap.kt index 9337fc81e..83c9812bd 100644 --- a/src/main/java/de/bixilon/minosoft/util/json/ResourceLocationJsonMap.kt +++ b/src/main/java/de/bixilon/minosoft/util/json/ResourceLocationJsonMap.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.util.json import com.google.gson.JsonObject import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.util.KUtil.unsafeCast object ResourceLocationJsonMap { @@ -34,7 +35,7 @@ object ResourceLocationJsonMap { val ret: MutableMap = mutableMapOf() for ((key, value) in this) { - ret[ResourceLocation(key as String)] = value as Any + ret[ResourceLocation(key.unsafeCast())] = value.unsafeCast() } return ret diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTUtil.kt b/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTUtil.kt index 042721c64..f22ea400b 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/NBTUtil.kt @@ -27,7 +27,7 @@ object NBTUtil { return null } - fun Any.compoundCast(): MutableMap? { + fun Any?.compoundCast(): MutableMap? { try { return this as MutableMap } catch (ignored: ClassCastException) { @@ -35,6 +35,10 @@ object NBTUtil { return null } + fun Any?.asCompound(): MutableMap { + return this.compoundCast()!! + } + fun Any.listCast(): MutableList? { try { return this as MutableList @@ -44,12 +48,12 @@ object NBTUtil { } fun Any.booleanCast(): Boolean { - if (this is Number) { - return this.toInt() == 0x01 - } if (this is Boolean) { return this } + if (this is Number) { + return this.toInt() == 0x01 + } TODO() }