diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/MultipartRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/MultipartRenderer.kt index 259186bbc..578b76bfc 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/MultipartRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/MultipartRenderer.kt @@ -18,6 +18,7 @@ import de.bixilon.minosoft.data.mappings.ResourceLocation import de.bixilon.minosoft.gui.rendering.chunk.models.FaceSize import de.bixilon.minosoft.gui.rendering.textures.Texture +@Deprecated(message = "Will be replaced with a normal BlockRenderer and multiple renderers") class MultipartRenderer( val models: List, ) : BlockLikeRenderer { diff --git a/src/main/java/de/bixilon/minosoft/modding/channels/DefaultPluginChannels.java b/src/main/java/de/bixilon/minosoft/modding/channels/DefaultPluginChannels.kt similarity index 59% rename from src/main/java/de/bixilon/minosoft/modding/channels/DefaultPluginChannels.java rename to src/main/java/de/bixilon/minosoft/modding/channels/DefaultPluginChannels.kt index 995904176..3848c7e35 100644 --- a/src/main/java/de/bixilon/minosoft/modding/channels/DefaultPluginChannels.java +++ b/src/main/java/de/bixilon/minosoft/modding/channels/DefaultPluginChannels.kt @@ -10,14 +10,13 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ +package de.bixilon.minosoft.modding.channels -package de.bixilon.minosoft.modding.channels; +import de.bixilon.minosoft.data.mappings.ResourceLocation -import de.bixilon.minosoft.data.mappings.ResourceLocation; - -public class DefaultPluginChannels { - public static final ResourceLocation REGISTER = new ResourceLocation("minecraft:register"); - public static final ResourceLocation UNREGISTER = new ResourceLocation("minecraft:unregister"); - public static final ResourceLocation BRAND = new ResourceLocation("minecraft:brand"); - public static final ResourceLocation STOP_SOUND = new ResourceLocation("minecraft:stop_sound"); +object DefaultPluginChannels { + val REGISTER = ResourceLocation("minecraft:register") + val UNREGISTER = ResourceLocation("minecraft:unregister") + val BRAND = ResourceLocation("minecraft:brand") + val STOP_SOUND = ResourceLocation("minecraft:stop_sound") } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/connection/PlayConnection.kt b/src/main/java/de/bixilon/minosoft/protocol/network/connection/PlayConnection.kt index 2dcb82881..4fec3910d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/connection/PlayConnection.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/network/connection/PlayConnection.kt @@ -19,6 +19,7 @@ import de.bixilon.minosoft.data.ChatTextPositions import de.bixilon.minosoft.data.accounts.Account import de.bixilon.minosoft.data.assets.MultiAssetsManager import de.bixilon.minosoft.data.commands.CommandRootNode +import de.bixilon.minosoft.data.mappings.DefaultRegistries import de.bixilon.minosoft.data.mappings.MappingsLoadingException import de.bixilon.minosoft.data.mappings.ResourceLocation import de.bixilon.minosoft.data.mappings.recipes.Recipes @@ -33,13 +34,16 @@ import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.world.World import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.Rendering +import de.bixilon.minosoft.modding.channels.DefaultPluginChannels import de.bixilon.minosoft.modding.event.CallbackEventInvoker import de.bixilon.minosoft.modding.event.EventInvoker import de.bixilon.minosoft.modding.event.events.ChatMessageReceiveEvent import de.bixilon.minosoft.modding.event.events.ConnectionStateChangeEvent import de.bixilon.minosoft.modding.event.events.PacketReceiveEvent +import de.bixilon.minosoft.modding.event.events.PluginMessageReceiveEvent import de.bixilon.minosoft.protocol.packets.c2s.handshaking.HandshakeC2SP import de.bixilon.minosoft.protocol.packets.c2s.login.LoginStartC2SP +import de.bixilon.minosoft.protocol.packets.c2s.play.PluginMessageC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket import de.bixilon.minosoft.protocol.protocol.* @@ -146,6 +150,14 @@ class PlayConnection( } Log.log(LogMessageType.CHAT_IN, additionalPrefix = ChatComponent.of(additionalPrefix)) { it.message } }) + registerEvent(CallbackEventInvoker.of { + val brandName = DefaultRegistries.DEFAULT_PLUGIN_CHANNELS_REGISTRY.forVersion(version)[DefaultPluginChannels.BRAND]!!.resourceLocation + if (it.channel == brandName) { + val buffer = PlayOutByteBuffer(this) + buffer.writeString("vanilla") // ToDo: Remove prefix + sendPacket(PluginMessageC2SP(brandName, buffer.toByteArray())) + } + }) } ConnectionStates.DISCONNECTED -> { if (previousConnectionState.connected) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ClientSettingsC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ClientSettingsC2SP.kt index 93ac73ba5..cf6df9c3d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ClientSettingsC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/ClientSettingsC2SP.kt @@ -22,7 +22,7 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType class ClientSettingsC2SP( - val locale: String = "en_US", + val locale: String = "en_us", val renderDistance: Int = 10, val mainHand: Hands = Hands.MAIN_HAND, val disableTextFiltering: Boolean = true, @@ -40,7 +40,7 @@ class ClientSettingsC2SP( buffer.writeByte(0x7F) // ToDo: skin parts } if (buffer.versionId >= ProtocolVersions.V_15W31A) { - buffer.writeVarInt(mainHand.ordinal) + buffer.writeVarInt(1) // ToDo } if (buffer.versionId >= ProtocolVersions.V_21W07A) { buffer.writeBoolean(disableTextFiltering) diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PluginMessageC2SP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PluginMessageC2SP.kt index 4320c196d..c71cb55d3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PluginMessageC2SP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/c2s/play/PluginMessageC2SP.kt @@ -36,6 +36,6 @@ class PluginMessageC2SP( } override fun log() { - Log.log(LogMessageType.NETWORK_PACKETS_OUT, LogLevels.VERBOSE) { "Plugin message (channel=$channel, data=$data)" } + Log.log(LogMessageType.NETWORK_PACKETS_OUT, LogLevels.VERBOSE) { "Plugin message (channel=$channel, data=${data.contentToString()}" } } } 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 1cbe9a777..c61a6f412 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 @@ -23,6 +23,7 @@ import de.bixilon.minosoft.modding.event.events.JoinGameEvent import de.bixilon.minosoft.protocol.ErrorHandler import de.bixilon.minosoft.protocol.network.connection.Connection import de.bixilon.minosoft.protocol.network.connection.PlayConnection +import de.bixilon.minosoft.protocol.packets.c2s.play.ClientSettingsC2SP import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.protocol.protocol.ProtocolVersions @@ -34,6 +35,8 @@ 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.listCast +import de.bixilon.minosoft.util.task.time.TimeWorker +import de.bixilon.minosoft.util.task.time.TimeWorkerTask class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { val entityId: Int @@ -150,6 +153,9 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { } else { NoiseBiomeAccessor(connection.world) } + TimeWorker.addTask(TimeWorkerTask(100, true) { // ToDo: Temp workaround + connection.sendPacket(ClientSettingsC2SP("en_us")) + }) } private fun parseDimensionCodec(nbt: Map, versionId: Int): HashBiMap { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/score/RemoveScoreboardScoreS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/score/RemoveScoreboardScoreS2CP.kt index 2fa2ced91..c79d0c535 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/score/RemoveScoreboardScoreS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/score/RemoveScoreboardScoreS2CP.kt @@ -22,7 +22,7 @@ import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType class RemoveScoreboardScoreS2CP(val entity: String, buffer: PlayInByteBuffer) : PlayS2CPacket() { - val objective = if (buffer.versionId >= ProtocolVersions.V_14W04A) { // ToDo + val objective = if (buffer.versionId <= ProtocolVersions.V_14W04A) { // ToDo buffer.readString() } else { null