network: 23w12a

This commit is contained in:
Bixilon 2023-03-27 19:19:59 +02:00
parent a3b87ce318
commit 188f42535b
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
14 changed files with 65 additions and 20 deletions

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger * Copyright (C) 2020-2023 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 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.
* *
@ -23,6 +23,7 @@ import de.bixilon.minosoft.data.entities.block.redstone.DaylightDetectorBlockEnt
import de.bixilon.minosoft.data.entities.block.redstone.SculkSensorBlockEntity import de.bixilon.minosoft.data.entities.block.redstone.SculkSensorBlockEntity
import de.bixilon.minosoft.data.entities.block.redstone.piston.PistonBlockEntity import de.bixilon.minosoft.data.entities.block.redstone.piston.PistonBlockEntity
import de.bixilon.minosoft.data.entities.block.redstone.piston.StickyPistonBlockEntity import de.bixilon.minosoft.data.entities.block.redstone.piston.StickyPistonBlockEntity
import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity
import de.bixilon.minosoft.data.registries.factory.DefaultFactory import de.bixilon.minosoft.data.registries.factory.DefaultFactory
object DefaultBlockDataFactory : DefaultFactory<BlockEntityFactory<out BlockEntity>>( object DefaultBlockDataFactory : DefaultFactory<BlockEntityFactory<out BlockEntity>>(

View File

@ -11,10 +11,12 @@
* 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.data.entities.block package de.bixilon.minosoft.data.entities.block.sign
import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
import de.bixilon.minosoft.data.entities.block.BlockEntityFactory
import de.bixilon.minosoft.data.entities.block.MeshedBlockEntity
import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.state.BlockState
import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft import de.bixilon.minosoft.data.registries.identified.Namespaces.minecraft
import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.identified.ResourceLocation
@ -39,6 +41,7 @@ class SignBlockEntity(connection: PlayConnection) : MeshedBlockEntity(connection
lines[i - 1] = ChatComponent.of(tag, translator = connection.language) lines[i - 1] = ChatComponent.of(tag, translator = connection.language)
} }
// TODO: update front/back text
} }
override fun createMeshedRenderer(context: RenderContext, blockState: BlockState, blockPosition: Vec3i): SignBlockEntityRenderer { override fun createMeshedRenderer(context: RenderContext, blockState: BlockState, blockPosition: Vec3i): SignBlockEntityRenderer {

View File

@ -0,0 +1,28 @@
/*
* Minosoft
* Copyright (C) 2020-2023 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.entities.block.sign
import de.bixilon.kutil.enums.EnumUtil
import de.bixilon.kutil.enums.ValuesEnum
enum class SignSides {
FRONT,
BACK,
;
companion object : ValuesEnum<SignSides> {
override val VALUES: Array<SignSides> = values()
override val NAME_MAP: Map<String, SignSides> = EnumUtil.getEnumValues(VALUES)
}
}

View File

@ -13,7 +13,7 @@
package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.sign package de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.sign
import de.bixilon.minosoft.data.entities.block.SignBlockEntity import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.BlockWithEntity import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.BlockWithEntity
import de.bixilon.minosoft.data.registries.identified.ResourceLocation import de.bixilon.minosoft.data.registries.identified.ResourceLocation
import de.bixilon.minosoft.data.registries.registries.Registries import de.bixilon.minosoft.data.registries.registries.Registries

View File

@ -19,7 +19,8 @@ import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.kutil.cast.CastUtil.nullCast import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.config.key.KeyCodes import de.bixilon.minosoft.config.key.KeyCodes
import de.bixilon.minosoft.data.entities.block.SignBlockEntity import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity
import de.bixilon.minosoft.data.entities.block.sign.SignSides
import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.state.BlockState
import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.sign.SignBlock import de.bixilon.minosoft.data.registries.blocks.types.pixlyzer.entity.sign.SignBlock
import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.ChatComponent
@ -52,6 +53,7 @@ import de.bixilon.minosoft.protocol.packets.c2s.play.block.SignTextC2SP
class SignEditorScreen( class SignEditorScreen(
guiRenderer: GUIRenderer, guiRenderer: GUIRenderer,
val blockPosition: Vec3i, val blockPosition: Vec3i,
val side: SignSides,
val blockState: BlockState? = guiRenderer.connection.world[blockPosition], val blockState: BlockState? = guiRenderer.connection.world[blockPosition],
val blockEntity: SignBlockEntity? = guiRenderer.connection.world.getBlockEntity(blockPosition).nullCast(), val blockEntity: SignBlockEntity? = guiRenderer.connection.world.getBlockEntity(blockPosition).nullCast(),
) : Screen(guiRenderer), AbstractLayout<Element> { ) : Screen(guiRenderer), AbstractLayout<Element> {
@ -118,7 +120,7 @@ class SignEditorScreen(
override fun onClose() { override fun onClose() {
super.onClose() super.onClose()
val text = getText() val text = getText()
guiRenderer.connection.sendPacket(SignTextC2SP(blockPosition, text)) guiRenderer.connection.sendPacket(SignTextC2SP(blockPosition, this.side, text))
} }
override fun forceSilentApply() { override fun forceSilentApply() {
@ -220,7 +222,7 @@ class SignEditorScreen(
private val BACKGROUND_SIZE = Vec2i(24, 12) * BACKGROUND_SCALE private val BACKGROUND_SIZE = Vec2i(24, 12) * BACKGROUND_SCALE
fun register(guiRenderer: GUIRenderer) { fun register(guiRenderer: GUIRenderer) {
guiRenderer.connection.events.listen<OpenSignEditorEvent> { guiRenderer.gui.push(SignEditorScreen(guiRenderer, it.blockPosition)) } guiRenderer.connection.events.listen<OpenSignEditorEvent> { guiRenderer.gui.push(SignEditorScreen(guiRenderer, it.position, it.side)) }
} }
} }
} }

View File

@ -21,7 +21,7 @@ import de.bixilon.kutil.exception.Broken
import de.bixilon.kutil.primitive.FloatUtil.toFloat import de.bixilon.kutil.primitive.FloatUtil.toFloat
import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.Axes
import de.bixilon.minosoft.data.direction.Directions import de.bixilon.minosoft.data.direction.Directions
import de.bixilon.minosoft.data.entities.block.SignBlockEntity import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties
import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing import de.bixilon.minosoft.data.registries.blocks.properties.BlockProperties.Companion.getFacing
import de.bixilon.minosoft.data.registries.blocks.state.BlockState import de.bixilon.minosoft.data.registries.blocks.state.BlockState

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2020-2022 Moritz Zwerger * Copyright (C) 2020-2023 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 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.
* *
@ -13,14 +13,16 @@
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.minosoft.data.entities.block.sign.SignSides
import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.sign.SignEditorS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.sign.SignEditorS2CP
class OpenSignEditorEvent( class OpenSignEditorEvent(
connection: PlayConnection, connection: PlayConnection,
val blockPosition: Vec3i, val position: Vec3i,
val side: SignSides,
) : PlayConnectionEvent(connection), CancelableEvent { ) : PlayConnectionEvent(connection), CancelableEvent {
constructor(connection: PlayConnection, packet: SignEditorS2CP) : this(connection, packet.blockPosition) constructor(connection: PlayConnection, packet: SignEditorS2CP) : this(connection, packet.position, packet.side)
} }

View File

@ -13,7 +13,8 @@
package de.bixilon.minosoft.protocol.packets.c2s.play.block package de.bixilon.minosoft.protocol.packets.c2s.play.block
import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.minosoft.data.entities.block.SignBlockEntity import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity
import de.bixilon.minosoft.data.entities.block.sign.SignSides
import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket import de.bixilon.minosoft.protocol.packets.c2s.PlayC2SPacket
import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.factory.LoadPacket
@ -26,6 +27,7 @@ import de.bixilon.minosoft.util.logging.LogMessageType
@LoadPacket @LoadPacket
class SignTextC2SP( class SignTextC2SP(
val position: Vec3i, val position: Vec3i,
val side: SignSides,
val lines: Array<ChatComponent>, val lines: Array<ChatComponent>,
) : PlayC2SPacket { ) : PlayC2SPacket {
@ -39,6 +41,9 @@ class SignTextC2SP(
} else { } else {
buffer.writeBlockPosition(position) buffer.writeBlockPosition(position)
} }
if (buffer.versionId >= ProtocolVersions.V_23W12A) {
buffer.writeBoolean(if (side == SignSides.FRONT) true else false)
}
for (line in lines) { for (line in lines) {
buffer.writeString(line.message) buffer.writeString(line.message)
} }

View File

@ -12,7 +12,7 @@
*/ */
package de.bixilon.minosoft.protocol.packets.s2c.play.sign package de.bixilon.minosoft.protocol.packets.s2c.play.sign
import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.minosoft.data.entities.block.sign.SignSides
import de.bixilon.minosoft.modding.event.events.OpenSignEditorEvent import de.bixilon.minosoft.modding.event.events.OpenSignEditorEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.factory.LoadPacket
@ -25,11 +25,8 @@ import de.bixilon.minosoft.util.logging.LogMessageType
@LoadPacket @LoadPacket
class SignEditorS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket { class SignEditorS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
var blockPosition: Vec3i = if (buffer.versionId < ProtocolVersions.V_14W03B) { val position = if (buffer.versionId < ProtocolVersions.V_14W03B) buffer.readIntBlockPosition() else buffer.readBlockPosition()
buffer.readIntBlockPosition() val side = if (buffer.versionId >= ProtocolVersions.V_22W12A) if (buffer.readBoolean()) SignSides.FRONT else SignSides.BACK else SignSides.FRONT
} else {
buffer.readBlockPosition()
}
override fun handle(connection: PlayConnection) { override fun handle(connection: PlayConnection) {
if (connection.events.fire(OpenSignEditorEvent(connection, this))) { if (connection.events.fire(OpenSignEditorEvent(connection, this))) {
@ -38,6 +35,6 @@ class SignEditorS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
} }
override fun log(reducedLog: Boolean) { override fun log(reducedLog: Boolean) {
Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "Sign editor (blockPosition=$blockPosition)" } Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "Sign editor (position=$position, side=$side)" }
} }
} }

View File

@ -14,7 +14,7 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.sign
import de.bixilon.kotlinglm.vec3.Vec3i import de.bixilon.kotlinglm.vec3.Vec3i
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.data.entities.block.SignBlockEntity import de.bixilon.minosoft.data.entities.block.sign.SignBlockEntity
import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.packets.factory.LoadPacket import de.bixilon.minosoft.protocol.packets.factory.LoadPacket

View File

@ -14,6 +14,7 @@ package de.bixilon.minosoft.protocol.protocol
@Suppress("UNUSED") @Suppress("UNUSED")
object ProtocolVersions { object ProtocolVersions {
const val V_23W12A = 888
const val V_1_19_4 = 887 const val V_1_19_4 = 887
const val V_1_19_4_RC3 = 886 const val V_1_19_4_RC3 = 886
const val V_1_19_4_RC2 = 885 const val V_1_19_4_RC2 = 885

View File

@ -57,4 +57,5 @@ class Version(
val requiresSignedLogin get() = requiresSignedChat && versionId < ProtocolVersions.V_22W43A val requiresSignedLogin get() = requiresSignedChat && versionId < ProtocolVersions.V_22W43A
val supportsRGBChat get() = versionId >= ProtocolVersions.V_20W17A val supportsRGBChat get() = versionId >= ProtocolVersions.V_20W17A
val jsonLanguage get() = versionId >= ProtocolVersions.V_18W02A val jsonLanguage get() = versionId >= ProtocolVersions.V_18W02A
val doubleSigns get() = versionId >= ProtocolVersions.V_23W12A
} }

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,9 @@
{ {
"888": {
"name": "23w12a",
"protocol_id": 1073741951,
"packets": 880
},
"887": { "887": {
"name": "1.19.4", "name": "1.19.4",
"protocol_id": 762, "protocol_id": 762,