From b401c8d439900c5013281f8d37b357b4fea1ba9a Mon Sep 17 00:00:00 2001 From: Bixilon Date: Mon, 18 Oct 2021 09:17:28 +0200 Subject: [PATCH] fix joining with some non vanilla servers --- .../data/registries/dimension/Dimension.kt | 37 ++++++++++++++++ .../DimensionType.kt} | 42 +++++-------------- .../minosoft/data/registries/items/Item.kt | 2 +- .../data/registries/registries/Registries.kt | 1 + .../de/bixilon/minosoft/data/world/World.kt | 4 +- .../gui/hud/elements/DebugHUDElement.kt | 2 +- .../modding/event/events/RespawnEvent.java | 15 +++---- .../network/socket/BlockingSocketNetwork.java | 1 + .../protocol/packets/s2c/play/JoinGameS2CP.kt | 30 +++++++------ .../protocol/packets/s2c/play/RespawnS2CP.kt | 17 ++++---- .../packets/s2c/status/StatusPongS2CP.kt | 2 +- .../bixilon/minosoft/util/chunk/ChunkUtil.kt | 10 ++--- .../bixilon/minosoft/util/chunk/LightUtil.kt | 6 +-- 13 files changed, 98 insertions(+), 71 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/data/registries/dimension/Dimension.kt rename src/main/java/de/bixilon/minosoft/data/registries/{Dimension.kt => dimension/DimensionType.kt} (58%) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/dimension/Dimension.kt b/src/main/java/de/bixilon/minosoft/data/registries/dimension/Dimension.kt new file mode 100644 index 000000000..3cbdee992 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/registries/dimension/Dimension.kt @@ -0,0 +1,37 @@ +/* + * Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ +package de.bixilon.minosoft.data.registries.dimension + +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.registries.registries.Registries +import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem +import de.bixilon.minosoft.data.registries.registries.registry.ResourceLocationDeserializer + +data class Dimension( + override val resourceLocation: ResourceLocation, + val type: DimensionType, +) : RegistryItem() { + + override fun toString(): String { + return resourceLocation.full + } + + companion object : ResourceLocationDeserializer { + override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): Dimension { + return Dimension( + resourceLocation = resourceLocation, + type = DimensionType.deserialize(data) + ) + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/registries/Dimension.kt b/src/main/java/de/bixilon/minosoft/data/registries/dimension/DimensionType.kt similarity index 58% rename from src/main/java/de/bixilon/minosoft/data/registries/Dimension.kt rename to src/main/java/de/bixilon/minosoft/data/registries/dimension/DimensionType.kt index aa7b83bd3..2129d32f3 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/Dimension.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/dimension/DimensionType.kt @@ -1,21 +1,7 @@ -/* - * Minosoft - * Copyright (C) 2020 Moritz Zwerger - * - * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with this program. If not, see . - * - * This software is not affiliated with Mojang AB, the original developer of Minecraft. - */ -package de.bixilon.minosoft.data.registries +package de.bixilon.minosoft.data.registries.dimension -import de.bixilon.minosoft.data.registries.registries.Registries -import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem -import de.bixilon.minosoft.data.registries.registries.registry.ResourceLocationDeserializer -import de.bixilon.minosoft.gui.rendering.util.VecUtil.lerp +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.gui.rendering.util.VecUtil import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.KUtil.nullCast import de.bixilon.minosoft.util.KUtil.toBoolean @@ -23,8 +9,7 @@ import de.bixilon.minosoft.util.KUtil.toInt import de.bixilon.minosoft.util.KUtil.unsafeCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.get -data class Dimension( - override val resourceLocation: ResourceLocation, +data class DimensionType( val piglinSafe: Boolean = false, val natural: Boolean = true, val ambientLight: Float = 0.0f, @@ -32,7 +17,7 @@ data class Dimension( val respawnAnchorWorks: Boolean = false, val hasSkyLight: Boolean = true, val bedWorks: Boolean = true, - val effects: ResourceLocation = ResourceLocation("overworld"), + val skyProperties: ResourceLocation = ResourceLocation("overworld"), val hasRaids: Boolean = true, val logicalHeight: Int = 256, val coordinateScale: Double = 0.0, @@ -41,7 +26,7 @@ data class Dimension( val ultraWarm: Boolean = false, val height: Int = 256, val supports3DBiomes: Boolean = true, -) : RegistryItem() { +) { val lowestSection = if (minY < 0) { (minY + 1) / ProtocolDefinition.SECTION_HEIGHT_Y - 1 } else { @@ -60,19 +45,14 @@ data class Dimension( for (i in lightLevels.indices) { val asFloat = i / 15.0f - lightLevels[i] = lerp(ambientLight, asFloat / (4.0f - 3.0f * asFloat), 1.0f) + lightLevels[i] = VecUtil.lerp(ambientLight, asFloat / (4.0f - 3.0f * asFloat), 1.0f) } } - override fun toString(): String { - return resourceLocation.full - } - - companion object : ResourceLocationDeserializer { - override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map): Dimension { - return Dimension( - resourceLocation = resourceLocation, + companion object { + fun deserialize(data: Map): DimensionType { + return DimensionType( piglinSafe = data["piglin_safe"]?.toBoolean() ?: false, natural = data["natural"]?.toBoolean() ?: false, ambientLight = data["ambient_light"]?.unsafeCast() ?: 0.0f, @@ -80,7 +60,7 @@ data class Dimension( respawnAnchorWorks = data["respawn_anchor_works"]?.toBoolean() ?: false, hasSkyLight = data["has_skylight", "has_sky_light"]?.toBoolean() ?: false, bedWorks = data["bed_works"]?.toBoolean() ?: false, - effects = ResourceLocation(data["effects"].nullCast() ?: "overworld"), + skyProperties = ResourceLocation(data["effects"].nullCast() ?: "overworld"), hasRaids = data["has_raids"]?.toBoolean() ?: false, logicalHeight = data["logical_height"]?.toInt() ?: 256, coordinateScale = data["coordinate_scale"].nullCast() ?: 0.0, 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 ab3a535ea..3e2f369ff 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 @@ -114,7 +114,7 @@ open class Item( "PowderSnowBucketItem" -> PowderSnowBucketItem(resourceLocation, registries, data) "SnowballItem" -> SnowballItem(resourceLocation, registries, data) "MilkBucketItem" -> MilkBucketItem(resourceLocation, registries, data) - "EntityBucketItem" -> EntityBucketItem(resourceLocation, registries, data) + "FishBucketItem", "EntityBucketItem" -> EntityBucketItem(resourceLocation, registries, data) "BookItem" -> BookItem(resourceLocation, registries, data) "EggItem" -> EggItem(resourceLocation, registries, data) "CompassItem" -> CompassItem(resourceLocation, registries, data) diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt index 879af0068..e3a025747 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt @@ -23,6 +23,7 @@ import de.bixilon.minosoft.data.registries.biomes.BiomePrecipitation import de.bixilon.minosoft.data.registries.blocks.entites.BlockEntityType import de.bixilon.minosoft.data.registries.blocks.entites.BlockEntityTypeRegistry import de.bixilon.minosoft.data.registries.blocks.types.Block +import de.bixilon.minosoft.data.registries.dimension.Dimension import de.bixilon.minosoft.data.registries.effects.StatusEffect import de.bixilon.minosoft.data.registries.enchantment.Enchantment import de.bixilon.minosoft.data.registries.entities.EntityType diff --git a/src/main/java/de/bixilon/minosoft/data/world/World.kt b/src/main/java/de/bixilon/minosoft/data/world/World.kt index ae0f28ae2..a6013d750 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/World.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/World.kt @@ -15,11 +15,11 @@ package de.bixilon.minosoft.data.world import de.bixilon.minosoft.data.Difficulties import de.bixilon.minosoft.data.entities.block.BlockEntity import de.bixilon.minosoft.data.registries.AABB -import de.bixilon.minosoft.data.registries.Dimension import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.biomes.Biome import de.bixilon.minosoft.data.registries.blocks.BlockState import de.bixilon.minosoft.data.registries.blocks.types.FluidBlock +import de.bixilon.minosoft.data.registries.dimension.DimensionType import de.bixilon.minosoft.data.registries.sounds.SoundEvent import de.bixilon.minosoft.data.registries.tweaker.VersionTweaker import de.bixilon.minosoft.data.world.biome.accessor.BiomeAccessor @@ -61,7 +61,7 @@ class World( val chunks: MutableMap = synchronizedMapOf() val entities = WorldEntities() var hardcore = false - var dimension: Dimension? = null + var dimension: DimensionType? = null var difficulty: Difficulties? = null var difficultyLocked = false val worldLightAccessor = WorldLightAccessor(this) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/DebugHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/DebugHUDElement.kt index 8def06105..4fe47eb6f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/DebugHUDElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/DebugHUDElement.kt @@ -261,7 +261,7 @@ class DebugHUDElement(hudRenderer: HUDRenderer) : HUDElement(hudRend } clear() - this@DebugWorldInfo += AutoTextElement(hudRenderer, 1) { BaseComponent("Dimension ", connection.world.dimension?.resourceLocation) } + this@DebugWorldInfo += AutoTextElement(hudRenderer, 1) { BaseComponent("Sky properties ", connection.world.dimension?.skyProperties) } this@DebugWorldInfo += AutoTextElement(hudRenderer, 1) { BaseComponent("Biome ", connection.world.getBiome(blockPosition)) } this@DebugWorldInfo += AutoTextElement(hudRenderer, 1) { with(connection.world.worldLightAccessor) { BaseComponent("Light block=", getBlockLight(blockPosition), ", sky=", getSkyLight(blockPosition)) } } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/RespawnEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/RespawnEvent.java index fd72257e0..0261c61e1 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/RespawnEvent.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/RespawnEvent.java @@ -15,27 +15,28 @@ package de.bixilon.minosoft.modding.event.events; import de.bixilon.minosoft.data.Difficulties; import de.bixilon.minosoft.data.abilities.Gamemodes; -import de.bixilon.minosoft.data.registries.Dimension; +import de.bixilon.minosoft.data.registries.dimension.DimensionType; import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent; import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection; import de.bixilon.minosoft.protocol.packets.s2c.play.RespawnS2CP; +@Deprecated public class RespawnEvent extends PlayConnectionEvent { private final Gamemodes gamemode; - private final Dimension dimension; + private final DimensionType dimensionType; private final Difficulties difficulty; - public RespawnEvent(PlayConnection connection, Gamemodes gamemode, Dimension dimension, Difficulties difficulty) { + public RespawnEvent(PlayConnection connection, Gamemodes gamemode, DimensionType dimensionType, Difficulties difficulty) { super(connection); this.gamemode = gamemode; - this.dimension = dimension; + this.dimensionType = dimensionType; this.difficulty = difficulty; } public RespawnEvent(PlayConnection connection, RespawnS2CP pkg) { super(connection); this.gamemode = pkg.getGamemode(); - this.dimension = pkg.getDimension(); + this.dimensionType = pkg.getDimension(); this.difficulty = pkg.getDifficulty(); } @@ -43,8 +44,8 @@ public class RespawnEvent extends PlayConnectionEvent { return this.gamemode; } - public Dimension getDimension() { - return this.dimension; + public DimensionType getDimensionType() { + return this.dimensionType; } public Difficulties getDifficulty() { diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/socket/BlockingSocketNetwork.java b/src/main/java/de/bixilon/minosoft/protocol/network/socket/BlockingSocketNetwork.java index 1b9888f80..b61116a27 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/socket/BlockingSocketNetwork.java +++ b/src/main/java/de/bixilon/minosoft/protocol/network/socket/BlockingSocketNetwork.java @@ -128,6 +128,7 @@ public class BlockingSocketNetwork extends Network { socketSendThread.interrupt(); } if (exception instanceof SocketException && exception.getMessage().equals("Socket closed")) { + Log.log(LogMessageType.NETWORK_STATUS, LogLevels.INFO, "Socket closed, disconnecting..."); this.connection.setProtocolState(ProtocolStates.DISCONNECTED); return; } 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 a5a338ae9..260ebdc94 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 @@ -16,8 +16,9 @@ import com.google.common.collect.HashBiMap import de.bixilon.minosoft.data.Difficulties import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.registries.DefaultRegistries -import de.bixilon.minosoft.data.registries.Dimension import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.registries.dimension.Dimension +import de.bixilon.minosoft.data.registries.dimension.DimensionType import de.bixilon.minosoft.data.world.biome.accessor.BlockBiomeAccessor import de.bixilon.minosoft.data.world.biome.accessor.NoiseBiomeAccessor import de.bixilon.minosoft.modding.channels.DefaultPluginChannels @@ -47,7 +48,7 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { val entityId: Int val isHardcore: Boolean val gamemode: Gamemodes - var dimension: Dimension + var dimensionType: DimensionType private set var difficulty: Difficulties = Difficulties.NORMAL private set @@ -65,6 +66,10 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { private set var dimensions: HashBiMap = HashBiMap.create() private set + var worlds: Array? = null + private set + var world: ResourceLocation? = null + private set init { entityId = buffer.readInt() @@ -80,7 +85,7 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { } if (buffer.versionId < ProtocolVersions.V_1_9_1) { - dimension = buffer.connection.registries.dimensionRegistry[buffer.readByte().toInt()] + dimensionType = buffer.connection.registries.dimensionRegistry[buffer.readByte().toInt()].type difficulty = Difficulties[buffer.readUnsignedByte()] maxPlayers = buffer.readByte().toInt() if (buffer.versionId >= ProtocolVersions.V_13W42B) { @@ -94,20 +99,19 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { buffer.readByte() // previous game mode } if (buffer.versionId >= ProtocolVersions.V_20W22A) { - buffer.readStringArray() // dimensions + worlds = buffer.readArray { buffer.readResourceLocation() } } if (buffer.versionId < ProtocolVersions.V_20W21A) { - dimension = buffer.connection.registries.dimensionRegistry[buffer.readInt()] + dimensionType = buffer.connection.registries.dimensionRegistry[buffer.readInt()].type } else { val dimensionCodec = buffer.readNBT().asCompound() dimensions = parseDimensionCodec(dimensionCodec, buffer.versionId) - if (buffer.versionId < ProtocolVersions.V_1_16_2_PRE3) { - dimension = dimensions[buffer.readResourceLocation()]!! + dimensionType = if (buffer.versionId < ProtocolVersions.V_1_16_2_PRE3) { + dimensions[buffer.readResourceLocation()]!!.type } else { - buffer.readNBT()!!.compoundCast() // dimension tag + DimensionType.deserialize(buffer.readNBT().asCompound()) } - val currentDimension = buffer.readResourceLocation() - dimension = dimensions[currentDimension] ?: buffer.connection.registries.dimensionRegistry[currentDimension]!! + world = buffer.readResourceLocation() } if (buffer.versionId >= ProtocolVersions.V_19W36A) { @@ -146,7 +150,7 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { connection.world.hardcore = isHardcore connection.registries.dimensionRegistry.setData(dimensions) - connection.world.dimension = dimension + connection.world.dimension = dimensionType connection.world.entities.add(entityId, null, playerEntity) connection.world.hashedSeed = hashedSeed @@ -178,7 +182,7 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { "key" } else { "name" - }].unsafeCast()) + }].unsafeCast()) val dimensionPropertyTag = if (versionId < ProtocolVersions.V_1_16_PRE3 || versionId >= ProtocolVersions.V_1_16_2_PRE1) { tag["element"].asCompound() } else { @@ -190,7 +194,7 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { } override fun log() { - Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "Join game (entityId=$entityId, gamemode=$gamemode, dimension=$dimension, difficulty=$difficulty, hardcore=$isHardcore, viewDistance=$viewDistance)" } + Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "Join game (entityId=$entityId, gamemode=$gamemode, dimensionType=$dimensionType, difficulty=$difficulty, hardcore=$isHardcore, viewDistance=$viewDistance)" } } companion object : ErrorHandler { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt index 509746bf2..c3a24c0c4 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/RespawnS2CP.kt @@ -14,7 +14,8 @@ package de.bixilon.minosoft.protocol.packets.s2c.play import de.bixilon.minosoft.data.Difficulties import de.bixilon.minosoft.data.abilities.Gamemodes -import de.bixilon.minosoft.data.registries.Dimension +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.registries.dimension.DimensionType import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY import de.bixilon.minosoft.modding.event.events.RespawnEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection @@ -24,11 +25,11 @@ 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.Vec3d class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { - lateinit var dimension: Dimension + lateinit var dimension: DimensionType private set var difficulty: Difficulties = Difficulties.NORMAL private set @@ -43,6 +44,8 @@ class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { private set var copyMetaData = false private set + var world: ResourceLocation? = null + private set init { when { @@ -51,20 +54,20 @@ class RespawnS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { buffer.readByte().toInt() } else { buffer.readInt() - }] + }].type } buffer.versionId < ProtocolVersions.V_1_16_2_PRE3 -> { - dimension = buffer.connection.registries.dimensionRegistry[buffer.readResourceLocation()]!! + dimension = buffer.connection.registries.dimensionRegistry[buffer.readResourceLocation()]!!.type } else -> { - buffer.readNBT()?.compoundCast() // current dimension data + dimension = DimensionType.deserialize(buffer.readNBT().asCompound()) // current dimension data } } if (buffer.versionId < ProtocolVersions.V_19W11A) { difficulty = Difficulties[buffer.readUnsignedByte()] } if (buffer.versionId >= ProtocolVersions.V_20W22A) { - dimension = buffer.connection.registries.dimensionRegistry[buffer.readResourceLocation()]!! + world = buffer.readResourceLocation() } if (buffer.versionId >= ProtocolVersions.V_19W36A) { hashedSeed = buffer.readLong() diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/StatusPongS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/StatusPongS2CP.kt index 55a4dc39c..75537932d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/StatusPongS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/status/StatusPongS2CP.kt @@ -29,7 +29,7 @@ class StatusPongS2CP(buffer: InByteBuffer) : StatusS2CPacket() { val pingQuery = connection.pingQuery ?: return if (pingQuery.pingId != pingId) { Log.log(LogMessageType.NETWORK_PACKETS_IN, LogLevels.WARN) { "Unknown status pong (pingId=$pingId, expected=${pingQuery.pingId})" } - return + // return ToDo: feather-rs is sending a wrong ping id back } val latency = System.currentTimeMillis() - pingQuery.time connection.disconnect() diff --git a/src/main/java/de/bixilon/minosoft/util/chunk/ChunkUtil.kt b/src/main/java/de/bixilon/minosoft/util/chunk/ChunkUtil.kt index fe78ca083..a0b5ecd11 100644 --- a/src/main/java/de/bixilon/minosoft/util/chunk/ChunkUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/chunk/ChunkUtil.kt @@ -13,9 +13,9 @@ package de.bixilon.minosoft.util.chunk -import de.bixilon.minosoft.data.registries.Dimension import de.bixilon.minosoft.data.registries.biomes.Biome import de.bixilon.minosoft.data.registries.blocks.BlockState +import de.bixilon.minosoft.data.registries.dimension.DimensionType import de.bixilon.minosoft.data.world.ChunkData import de.bixilon.minosoft.data.world.ChunkSection import de.bixilon.minosoft.data.world.biome.source.XZBiomeArray @@ -30,14 +30,14 @@ import java.util.* object ChunkUtil { - fun readChunkPacket(buffer: PlayInByteBuffer, dimension: Dimension, sectionBitMask: BitSet, addBitMask: BitSet? = null, isFullChunk: Boolean, containsSkyLight: Boolean): ChunkData? { + fun readChunkPacket(buffer: PlayInByteBuffer, dimension: DimensionType, sectionBitMask: BitSet, addBitMask: BitSet? = null, isFullChunk: Boolean, containsSkyLight: Boolean): ChunkData? { if (buffer.versionId < V_15W35A) { // ToDo: was this really changed in 62? return readLegacyChunk(buffer, dimension, sectionBitMask, addBitMask, isFullChunk, containsSkyLight) } return readPaletteChunk(buffer, dimension, sectionBitMask, isFullChunk, containsSkyLight) } - private fun readLegacyChunkWithAddBitSet(buffer: PlayInByteBuffer, dimension: Dimension, sectionBitMask: BitSet, addBitMask: BitSet, isFullChunk: Boolean, containsSkyLight: Boolean): ChunkData { + private fun readLegacyChunkWithAddBitSet(buffer: PlayInByteBuffer, dimension: DimensionType, sectionBitMask: BitSet, addBitMask: BitSet, isFullChunk: Boolean, containsSkyLight: Boolean): ChunkData { val chunkData = ChunkData() chunkData.lightAccessor = DummyLightAccessor // ToDo @@ -97,7 +97,7 @@ object ChunkUtil { return chunkData } - fun readLegacyChunk(buffer: PlayInByteBuffer, dimension: Dimension, sectionBitMask: BitSet, addBitMask: BitSet? = null, isFullChunk: Boolean, containsSkyLight: Boolean = false): ChunkData? { + fun readLegacyChunk(buffer: PlayInByteBuffer, dimension: DimensionType, sectionBitMask: BitSet, addBitMask: BitSet? = null, isFullChunk: Boolean, containsSkyLight: Boolean = false): ChunkData? { if (sectionBitMask.length() == 0 && isFullChunk) { // unload chunk return null @@ -142,7 +142,7 @@ object ChunkUtil { return chunkData } - fun readPaletteChunk(buffer: PlayInByteBuffer, dimension: Dimension, sectionBitMask: BitSet, isFullChunk: Boolean, containsSkyLight: Boolean = false): ChunkData { + fun readPaletteChunk(buffer: PlayInByteBuffer, dimension: DimensionType, sectionBitMask: BitSet, isFullChunk: Boolean, containsSkyLight: Boolean = false): ChunkData { val chunkData = ChunkData() val sectionMap: MutableMap = synchronizedMapOf() diff --git a/src/main/java/de/bixilon/minosoft/util/chunk/LightUtil.kt b/src/main/java/de/bixilon/minosoft/util/chunk/LightUtil.kt index 233ef6b28..71b6ceaab 100644 --- a/src/main/java/de/bixilon/minosoft/util/chunk/LightUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/chunk/LightUtil.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.util.chunk -import de.bixilon.minosoft.data.registries.Dimension +import de.bixilon.minosoft.data.registries.dimension.DimensionType import de.bixilon.minosoft.data.world.light.ChunkLightAccessor import de.bixilon.minosoft.data.world.light.LightAccessor import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer @@ -23,7 +23,7 @@ import java.util.* object LightUtil { - fun readLightPacket(buffer: PlayInByteBuffer, skyLightMask: BitSet, blockLightMask: BitSet, dimension: Dimension): LightAccessor { + fun readLightPacket(buffer: PlayInByteBuffer, skyLightMask: BitSet, blockLightMask: BitSet, dimension: DimensionType): LightAccessor { // ToDo val skyLight = if (dimension.hasSkyLight || buffer.versionId > V_1_16) { // ToDo: find out version readLightArray(buffer, skyLightMask, dimension) @@ -34,7 +34,7 @@ object LightUtil { return ChunkLightAccessor(blockLight, skyLight) } - private fun readLightArray(buffer: PlayInByteBuffer, lightMask: BitSet, dimension: Dimension): MutableMap { + private fun readLightArray(buffer: PlayInByteBuffer, lightMask: BitSet, dimension: DimensionType): MutableMap { var highestSectionIndex = dimension.highestSection + 1 val lowesSectionIndex = dimension.lowestSection - 1 if (buffer.versionId >= ProtocolVersions.V_20W49A) {