mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 03:15:35 -04:00
network: 23w12a
This commit is contained in:
parent
a3b87ce318
commit
188f42535b
@ -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>>(
|
||||||
|
@ -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 {
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
||||||
|
@ -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)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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)" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user