networking: answer with vanilla client brand and send settings

This commit is contained in:
Bixilon 2021-06-04 23:43:27 +02:00 committed by Lukas
parent f72fe7eecc
commit 62fea42a6e
7 changed files with 30 additions and 12 deletions

View File

@ -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.chunk.models.FaceSize
import de.bixilon.minosoft.gui.rendering.textures.Texture import de.bixilon.minosoft.gui.rendering.textures.Texture
@Deprecated(message = "Will be replaced with a normal BlockRenderer and multiple renderers")
class MultipartRenderer( class MultipartRenderer(
val models: List<BlockLikeRenderer>, val models: List<BlockLikeRenderer>,
) : BlockLikeRenderer { ) : BlockLikeRenderer {

View File

@ -10,14 +10,13 @@
* *
* This software is not affiliated with Mojang AB, the original developer of Minecraft. * 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; object DefaultPluginChannels {
val REGISTER = ResourceLocation("minecraft:register")
public class DefaultPluginChannels { val UNREGISTER = ResourceLocation("minecraft:unregister")
public static final ResourceLocation REGISTER = new ResourceLocation("minecraft:register"); val BRAND = ResourceLocation("minecraft:brand")
public static final ResourceLocation UNREGISTER = new ResourceLocation("minecraft:unregister"); val STOP_SOUND = ResourceLocation("minecraft:stop_sound")
public static final ResourceLocation BRAND = new ResourceLocation("minecraft:brand");
public static final ResourceLocation STOP_SOUND = new ResourceLocation("minecraft:stop_sound");
} }

View File

@ -19,6 +19,7 @@ import de.bixilon.minosoft.data.ChatTextPositions
import de.bixilon.minosoft.data.accounts.Account import de.bixilon.minosoft.data.accounts.Account
import de.bixilon.minosoft.data.assets.MultiAssetsManager import de.bixilon.minosoft.data.assets.MultiAssetsManager
import de.bixilon.minosoft.data.commands.CommandRootNode 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.MappingsLoadingException
import de.bixilon.minosoft.data.mappings.ResourceLocation import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.mappings.recipes.Recipes 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.data.world.World
import de.bixilon.minosoft.gui.rendering.RenderConstants import de.bixilon.minosoft.gui.rendering.RenderConstants
import de.bixilon.minosoft.gui.rendering.Rendering 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.CallbackEventInvoker
import de.bixilon.minosoft.modding.event.EventInvoker import de.bixilon.minosoft.modding.event.EventInvoker
import de.bixilon.minosoft.modding.event.events.ChatMessageReceiveEvent import de.bixilon.minosoft.modding.event.events.ChatMessageReceiveEvent
import de.bixilon.minosoft.modding.event.events.ConnectionStateChangeEvent import de.bixilon.minosoft.modding.event.events.ConnectionStateChangeEvent
import de.bixilon.minosoft.modding.event.events.PacketReceiveEvent 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.handshaking.HandshakeC2SP
import de.bixilon.minosoft.protocol.packets.c2s.login.LoginStartC2SP 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.PlayS2CPacket
import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket import de.bixilon.minosoft.protocol.packets.s2c.S2CPacket
import de.bixilon.minosoft.protocol.protocol.* import de.bixilon.minosoft.protocol.protocol.*
@ -146,6 +150,14 @@ class PlayConnection(
} }
Log.log(LogMessageType.CHAT_IN, additionalPrefix = ChatComponent.of(additionalPrefix)) { it.message } Log.log(LogMessageType.CHAT_IN, additionalPrefix = ChatComponent.of(additionalPrefix)) { it.message }
}) })
registerEvent(CallbackEventInvoker.of<PluginMessageReceiveEvent> {
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 -> { ConnectionStates.DISCONNECTED -> {
if (previousConnectionState.connected) { if (previousConnectionState.connected) {

View File

@ -22,7 +22,7 @@ import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
class ClientSettingsC2SP( class ClientSettingsC2SP(
val locale: String = "en_US", val locale: String = "en_us",
val renderDistance: Int = 10, val renderDistance: Int = 10,
val mainHand: Hands = Hands.MAIN_HAND, val mainHand: Hands = Hands.MAIN_HAND,
val disableTextFiltering: Boolean = true, val disableTextFiltering: Boolean = true,
@ -40,7 +40,7 @@ class ClientSettingsC2SP(
buffer.writeByte(0x7F) // ToDo: skin parts buffer.writeByte(0x7F) // ToDo: skin parts
} }
if (buffer.versionId >= ProtocolVersions.V_15W31A) { if (buffer.versionId >= ProtocolVersions.V_15W31A) {
buffer.writeVarInt(mainHand.ordinal) buffer.writeVarInt(1) // ToDo
} }
if (buffer.versionId >= ProtocolVersions.V_21W07A) { if (buffer.versionId >= ProtocolVersions.V_21W07A) {
buffer.writeBoolean(disableTextFiltering) buffer.writeBoolean(disableTextFiltering)

View File

@ -36,6 +36,6 @@ class PluginMessageC2SP(
} }
override fun log() { 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()}" }
} }
} }

View File

@ -23,6 +23,7 @@ import de.bixilon.minosoft.modding.event.events.JoinGameEvent
import de.bixilon.minosoft.protocol.ErrorHandler import de.bixilon.minosoft.protocol.ErrorHandler
import de.bixilon.minosoft.protocol.network.connection.Connection import de.bixilon.minosoft.protocol.network.connection.Connection
import de.bixilon.minosoft.protocol.network.connection.PlayConnection 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.packets.s2c.PlayS2CPacket
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions 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.logging.LogMessageType
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.compoundCast
import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast import de.bixilon.minosoft.util.nbt.tag.NBTUtil.listCast
import de.bixilon.minosoft.util.task.time.TimeWorker
import de.bixilon.minosoft.util.task.time.TimeWorkerTask
class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
val entityId: Int val entityId: Int
@ -150,6 +153,9 @@ class JoinGameS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
} else { } else {
NoiseBiomeAccessor(connection.world) NoiseBiomeAccessor(connection.world)
} }
TimeWorker.addTask(TimeWorkerTask(100, true) { // ToDo: Temp workaround
connection.sendPacket(ClientSettingsC2SP("en_us"))
})
} }
private fun parseDimensionCodec(nbt: Map<String, Any>, versionId: Int): HashBiMap<ResourceLocation, Dimension> { private fun parseDimensionCodec(nbt: Map<String, Any>, versionId: Int): HashBiMap<ResourceLocation, Dimension> {

View File

@ -22,7 +22,7 @@ import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
class RemoveScoreboardScoreS2CP(val entity: String, buffer: PlayInByteBuffer) : PlayS2CPacket() { 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() buffer.readString()
} else { } else {
null null