event initiators

This commit is contained in:
Bixilon 2021-05-27 16:54:50 +02:00
parent 013beb7057
commit 5b36103e4d
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
22 changed files with 97 additions and 143 deletions

View File

@ -19,11 +19,12 @@ import de.bixilon.minosoft.util.enum.ValuesEnum
enum class EventInitiators { enum class EventInitiators {
CLIENT, CLIENT,
SERVER, SERVER,
UNKNOWN,
; ;
companion object : ValuesEnum<EventInitiators> { companion object : ValuesEnum<EventInitiators> {
override val VALUES: Array<EventInitiators> = values() override val VALUES: Array<EventInitiators> = values()
override val NAME_MAP: Map<String, EventInitiators> = KUtil.getEnumValues(VALUES) override val NAME_MAP: Map<String, EventInitiators> = KUtil.getEnumValues(VALUES)
val DEFAULT = UNKNOWN
} }
} }

View File

@ -23,10 +23,10 @@ import glm_.vec3.Vec3i
*/ */
class BlockSetEvent( class BlockSetEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators = EventInitiators.DEFAULT,
val blockPosition: Vec3i, val blockPosition: Vec3i,
val blockState: BlockState?, val blockState: BlockState?,
val initiator: EventInitiators = EventInitiators.CLIENT, ) : PlayConnectionEvent(connection, initiator) {
) : PlayConnectionEvent(connection) {
constructor(connection: PlayConnection, packet: BlockSetS2CP) : this(connection, packet.blockPosition, packet.blockState, EventInitiators.SERVER) constructor(connection: PlayConnection, packet: BlockSetS2CP) : this(connection, EventInitiators.SERVER, packet.blockPosition, packet.blockState)
} }

View File

@ -12,8 +12,12 @@
*/ */
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
abstract class CancelableEvent(connection: PlayConnection) : PlayConnectionEvent(connection) { abstract class CancelableEvent @JvmOverloads constructor(
connection: PlayConnection,
initiator: EventInitiators = EventInitiators.DEFAULT,
) : PlayConnectionEvent(connection, initiator) {
var isCancelled = false var isCancelled = false
} }

View File

@ -12,6 +12,10 @@
*/ */
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.Connection import de.bixilon.minosoft.protocol.network.connection.Connection
abstract class ConnectionEvent(open val connection: Connection) : Event() abstract class ConnectionEvent @JvmOverloads constructor(
open val connection: Connection,
val initiator: EventInitiators = EventInitiators.DEFAULT,
) : Event()

View File

@ -12,6 +12,7 @@
*/ */
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.c2s.play.ContainerCloseC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.ContainerCloseC2SP
import de.bixilon.minosoft.protocol.packets.s2c.play.ContainerCloseS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.ContainerCloseS2CP
@ -21,16 +22,12 @@ import de.bixilon.minosoft.protocol.packets.s2c.play.ContainerCloseS2CP
*/ */
class ContainerCloseEvent( class ContainerCloseEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val containerId: Int, val containerId: Int,
val initiator: Initiators, ) : CancelableEvent(connection, initiator) {
) : CancelableEvent(connection) {
constructor(connection: PlayConnection, packet: ContainerCloseS2CP) : this(connection, packet.containerId, Initiators.SERVER) constructor(connection: PlayConnection, packet: ContainerCloseS2CP) : this(connection, EventInitiators.SERVER, packet.containerId)
constructor(connection: PlayConnection, packet: ContainerCloseC2SP) : this(connection, packet.containerId, Initiators.CLIENT) constructor(connection: PlayConnection, packet: ContainerCloseC2SP) : this(connection, EventInitiators.CLIENT, packet.containerId)
enum class Initiators {
CLIENT,
SERVER,
}
} }

View File

@ -13,23 +13,16 @@
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.EntityDestroyS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.EntityDestroyS2CP
class EntityDestroyEvent( class EntityDestroyEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val entities: List<Entity>, val entities: List<Entity>,
) : PlayConnectionEvent(connection) { ) : PlayConnectionEvent(connection, initiator) {
constructor(connection: PlayConnection, packet: EntityDestroyS2CP) : this(connection, packet.entityIds.resolveEntityIds(connection)) constructor(connection: PlayConnection, packet: EntityDestroyS2CP) : this(connection, EventInitiators.SERVER, packet.entityIds.entities(connection))
companion object {
private fun List<Int>.resolveEntityIds(connection: PlayConnection): List<Entity> {
val entities: MutableList<Entity> = mutableListOf()
for (id in this) {
entities += connection.world.entities[id] ?: continue
}
return entities.toList()
}
}
} }

View File

@ -15,14 +15,16 @@ package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.data.inventory.InventorySlots.EquipmentSlots import de.bixilon.minosoft.data.inventory.InventorySlots.EquipmentSlots
import de.bixilon.minosoft.data.inventory.ItemStack import de.bixilon.minosoft.data.inventory.ItemStack
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.EntityEquipmentS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.EntityEquipmentS2CP
class EntityEquipmentChangeEvent( class EntityEquipmentChangeEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val entity: Entity, val entity: Entity,
val equipment: Map<EquipmentSlots, ItemStack?>, val equipment: Map<EquipmentSlots, ItemStack?>,
) : PlayConnectionEvent(connection) { ) : PlayConnectionEvent(connection, initiator) {
constructor(connection: PlayConnection, packet: EntityEquipmentS2CP) : this(connection, connection.world.entities[packet.entityId]!!, packet.equipment) constructor(connection: PlayConnection, packet: EntityEquipmentS2CP) : this(connection, EventInitiators.SERVER, connection.world.entities[packet.entityId]!!, packet.equipment)
} }

View File

@ -13,13 +13,15 @@
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.EntityMetadataS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.EntityMetadataS2CP
class EntityMetaDataChangeEvent( class EntityMetaDataChangeEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val entity: Entity, val entity: Entity,
) : PlayConnectionEvent(connection) { ) : PlayConnectionEvent(connection, initiator) {
constructor(connection: PlayConnection, packet: EntityMetadataS2CP) : this(connection, connection.world.entities[packet.entityId]!!) constructor(connection: PlayConnection, packet: EntityMetadataS2CP) : this(connection, EventInitiators.SERVER, connection.world.entities[packet.entityId]!!)
} }

View File

@ -13,4 +13,18 @@
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
abstract class Event import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
abstract class Event {
companion object {
fun List<Int>.entities(connection: PlayConnection): List<Entity> {
val entities: MutableList<Entity> = mutableListOf()
for (id in this) {
entities += connection.world.entities[id] ?: continue
}
return entities.toList()
}
}
}

View File

@ -12,18 +12,20 @@
*/ */
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.ExplosionS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.ExplosionS2CP
import glm_.vec3.Vec3 import glm_.vec3.Vec3
class ExplosionEvent( class ExplosionEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val position: Vec3, val position: Vec3,
val power: Float, val power: Float,
val explodedBlocks: List<Vec3>, val explodedBlocks: List<Vec3>,
val velocity: Vec3, val velocity: Vec3,
) : PlayConnectionEvent(connection) { ) : PlayConnectionEvent(connection) {
constructor(connection: PlayConnection, packet: ExplosionS2CP) : this(connection, packet.position, packet.power, packet.explodedBlocks, packet.velocity) constructor(connection: PlayConnection, packet: ExplosionS2CP) : this(connection, EventInitiators.SERVER, packet.position, packet.power, packet.explodedBlocks, packet.velocity)
} }

View File

@ -24,11 +24,11 @@ import glm_.vec3.Vec3i
*/ */
class MassBlockSetEvent( class MassBlockSetEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val blocks: Map<Vec3i, BlockState?>, val blocks: Map<Vec3i, BlockState?>,
val chunkPosition: Vec2i, val chunkPosition: Vec2i,
val initiator: EventInitiators = EventInitiators.CLIENT, ) : PlayConnectionEvent(connection, initiator) {
) : PlayConnectionEvent(connection) {
constructor(connection: PlayConnection, packet: MassBlockSetS2CP) : this(connection, packet.blocks, packet.chunkPosition, EventInitiators.SERVER) constructor(connection: PlayConnection, packet: MassBlockSetS2CP) : this(connection, EventInitiators.SERVER, packet.blocks, packet.chunkPosition)
} }

View File

@ -13,22 +13,24 @@
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.data.mappings.particle.data.ParticleData import de.bixilon.minosoft.data.mappings.particle.data.ParticleData
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.ParticleS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.ParticleS2CP
import glm_.vec3.Vec3 import glm_.vec3.Vec3
class ParticleSpawnEvent( class ParticleSpawnEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
position: Vec3, position: Vec3,
offset: Vec3, offset: Vec3,
val speed: Float, val speed: Float,
val count: Int, val count: Int,
val data: ParticleData, val data: ParticleData,
) : CancelableEvent(connection) { ) : CancelableEvent(connection, initiator) {
val position: Vec3 = position val position: Vec3 = position
get() = Vec3(field) get() = Vec3(field)
val offset: Vec3 = offset val offset: Vec3 = offset
get() = Vec3(field) get() = Vec3(field)
constructor(connection: PlayConnection, packet: ParticleS2CP) : this(connection, packet.position, packet.offset, packet.speed, packet.count, packet.data) constructor(connection: PlayConnection, packet: ParticleS2CP) : this(connection, EventInitiators.SERVER, packet.position, packet.offset, packet.speed, packet.count, packet.data)
} }

View File

@ -12,6 +12,10 @@
*/ */
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
abstract class PlayConnectionEvent(override val connection: PlayConnection) : ConnectionEvent(connection) abstract class PlayConnectionEvent @JvmOverloads constructor(
override val connection: PlayConnection,
initiator: EventInitiators = EventInitiators.DEFAULT,
) : ConnectionEvent(connection, initiator)

View File

@ -15,20 +15,22 @@ package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.data.SoundCategories import de.bixilon.minosoft.data.SoundCategories
import de.bixilon.minosoft.data.mappings.sounds.SoundEvent import de.bixilon.minosoft.data.mappings.sounds.SoundEvent
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.SoundEventS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.SoundEventS2CP
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
class PlaySoundEvent( class PlaySoundEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val category: SoundCategories?, val category: SoundCategories?,
position: Vec3i, position: Vec3i,
val soundEvent: SoundEvent, val soundEvent: SoundEvent,
val volume: Float, val volume: Float,
val pitch: Float, val pitch: Float,
) : CancelableEvent(connection) { ) : CancelableEvent(connection, initiator) {
val position: Vec3i = position val position: Vec3i = position
get() = Vec3i(field) get() = Vec3i(field)
constructor(connection: PlayConnection, packet: SoundEventS2CP) : this(connection, packet.category, packet.position, packet.soundEvent, packet.volume, packet.pitch) constructor(connection: PlayConnection, packet: SoundEventS2CP) : this(connection, EventInitiators.SERVER, packet.category, packet.position, packet.soundEvent, packet.volume, packet.pitch)
} }

View File

@ -1,43 +0,0 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.modding.event.events;
import de.bixilon.minosoft.data.text.ChatComponent;
import de.bixilon.minosoft.protocol.network.connection.PlayConnection;
import de.bixilon.minosoft.protocol.packets.s2c.play.TabListTextSetS2CP;
public class PlayerListInfoChangeEvent extends CancelableEvent {
private final ChatComponent header;
private final ChatComponent footer;
public PlayerListInfoChangeEvent(PlayConnection connection, ChatComponent header, ChatComponent footer) {
super(connection);
this.header = header;
this.footer = footer;
}
public PlayerListInfoChangeEvent(PlayConnection connection, TabListTextSetS2CP pkg) {
super(connection);
this.header = pkg.getHeader();
this.footer = pkg.getFooter();
}
public ChatComponent getHeader() {
return this.header;
}
public ChatComponent getFooter() {
return this.footer;
}
}

View File

@ -12,7 +12,17 @@
*/ */
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.TabListTextSetS2CP
class OwnEntityMetaDataChangeEvent(connection: PlayConnection, val entity: PlayerEntity) : PlayConnectionEvent(connection) class PlayerListInfoChangeEvent(
connection: PlayConnection,
initiator: EventInitiators,
val header: ChatComponent,
val footer: ChatComponent,
) : CancelableEvent(connection, initiator) {
constructor(connection: PlayConnection, packet: TabListTextSetS2CP) : this(connection, EventInitiators.SERVER, packet.header, packet.footer)
}

View File

@ -13,17 +13,19 @@
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.data.mappings.ResourceLocation import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.PluginMessageS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.PluginMessageS2CP
import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer
class PluginMessageReceiveEvent( class PluginMessageReceiveEvent(
connection: PlayConnection, connection: PlayConnection,
initiators: EventInitiators,
val channel: ResourceLocation, val channel: ResourceLocation,
data: PlayInByteBuffer, data: PlayInByteBuffer,
) : CancelableEvent(connection) { ) : CancelableEvent(connection, initiators) {
val data: PlayInByteBuffer = data val data: PlayInByteBuffer = data
get() = PlayInByteBuffer(field) get() = PlayInByteBuffer(field)
constructor(connection: PlayConnection, packet: PluginMessageS2CP) : this(connection, packet.channel, packet.data) constructor(connection: PlayConnection, packet: PluginMessageS2CP) : this(connection, EventInitiators.SERVER, packet.channel, packet.data)
} }

View File

@ -12,16 +12,18 @@
*/ */
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.c2s.play.HotbarSlotSetC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.HotbarSlotSetC2SP
import de.bixilon.minosoft.protocol.packets.s2c.play.HotbarSlotSetS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.HotbarSlotSetS2CP
class SelectHotbarSlotEvent( class SelectHotbarSlotEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val slot: Int, val slot: Int,
) : PlayConnectionEvent(connection) { ) : PlayConnectionEvent(connection, initiator) {
constructor(connection: PlayConnection, packet: HotbarSlotSetC2SP) : this(connection, packet.slot) constructor(connection: PlayConnection, packet: HotbarSlotSetC2SP) : this(connection, EventInitiators.CLIENT, packet.slot)
constructor(connection: PlayConnection, packet: HotbarSlotSetS2CP) : this(connection, packet.slot) constructor(connection: PlayConnection, packet: HotbarSlotSetS2CP) : this(connection, EventInitiators.SERVER, packet.slot)
} }

View File

@ -12,15 +12,17 @@
*/ */
package de.bixilon.minosoft.modding.event.events package de.bixilon.minosoft.modding.event.events
import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.play.WorldTimeSetS2CP import de.bixilon.minosoft.protocol.packets.s2c.play.WorldTimeSetS2CP
class TimeChangeEvent( class TimeChangeEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators,
val age: Long, val age: Long,
val time: Long, val time: Long,
) : CancelableEvent(connection) { ) : CancelableEvent(connection, initiator) {
constructor(connection: PlayConnection, packet: WorldTimeSetS2CP) : this(connection, packet.age, packet.time) constructor(connection: PlayConnection, packet: WorldTimeSetS2CP) : this(connection, EventInitiators.SERVER, packet.age, packet.time)
} }

View File

@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play
import de.bixilon.minosoft.data.entities.meta.EntityMetaData import de.bixilon.minosoft.data.entities.meta.EntityMetaData
import de.bixilon.minosoft.modding.event.events.EntityMetaDataChangeEvent import de.bixilon.minosoft.modding.event.events.EntityMetaDataChangeEvent
import de.bixilon.minosoft.modding.event.events.OwnEntityMetaDataChangeEvent
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
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
@ -30,11 +29,7 @@ class EntityMetadataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
val entity = connection.world.entities[entityId] ?: return val entity = connection.world.entities[entityId] ?: return
entity.entityMetaData = metaData entity.entityMetaData = metaData
connection.fireEvent(EntityMetaDataChangeEvent(connection, entity)) connection.fireEvent(EntityMetaDataChangeEvent(connection, this))
if (entity === connection.player.entity) {
connection.fireEvent(OwnEntityMetaDataChangeEvent(connection, entity))
}
} }

View File

@ -21,10 +21,10 @@ import de.bixilon.minosoft.util.logging.LogLevels
import de.bixilon.minosoft.util.logging.LogMessageType import de.bixilon.minosoft.util.logging.LogMessageType
class HotbarSlotSetS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { class HotbarSlotSetS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() {
val slot: Int = buffer.readByte().toInt() val slot: Int = buffer.readUnsignedByte()
override fun handle(connection: PlayConnection) { override fun handle(connection: PlayConnection) {
connection.fireEvent(SelectHotbarSlotEvent(connection, slot)) connection.fireEvent(SelectHotbarSlotEvent(connection, this))
connection.player.selectedHotbarSlot = slot connection.player.selectedHotbarSlot = slot
} }

View File

@ -14,22 +14,16 @@
package de.bixilon.minosoft.protocol.protocol; package de.bixilon.minosoft.protocol.protocol;
import de.bixilon.minosoft.data.ChatTextPositions; import de.bixilon.minosoft.data.ChatTextPositions;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.player.Hands;
import de.bixilon.minosoft.data.text.ChatComponent; import de.bixilon.minosoft.data.text.ChatComponent;
import de.bixilon.minosoft.modding.event.events.ChatMessageReceivingEvent; import de.bixilon.minosoft.modding.event.events.ChatMessageReceivingEvent;
import de.bixilon.minosoft.modding.event.events.ChatMessageSendingEvent; import de.bixilon.minosoft.modding.event.events.ChatMessageSendingEvent;
import de.bixilon.minosoft.modding.event.events.ContainerCloseEvent;
import de.bixilon.minosoft.protocol.network.connection.PlayConnection; import de.bixilon.minosoft.protocol.network.connection.PlayConnection;
import de.bixilon.minosoft.protocol.packets.c2s.login.LoginPluginResponseC2SP; import de.bixilon.minosoft.protocol.packets.c2s.play.ChatMessageC2SP;
import de.bixilon.minosoft.protocol.packets.c2s.play.*; import de.bixilon.minosoft.protocol.packets.c2s.play.ClientActionC2SP;
import de.bixilon.minosoft.util.logging.Log; import de.bixilon.minosoft.util.logging.Log;
import de.bixilon.minosoft.util.logging.LogMessageType; import de.bixilon.minosoft.util.logging.LogMessageType;
import glm_.vec3.Vec3;
import java.util.UUID;
@Deprecated
public class PacketSender { public class PacketSender {
public static final char[] ILLEGAL_CHAT_CHARS = {'§'}; public static final char[] ILLEGAL_CHAT_CHARS = {'§'};
private final PlayConnection connection; private final PlayConnection connection;
@ -38,10 +32,6 @@ public class PacketSender {
this.connection = connection; this.connection = connection;
} }
public void setFlyStatus(boolean flying) {
this.connection.sendPacket(new FlyToggleC2SP(flying));
}
public void sendChatMessage(String message) { public void sendChatMessage(String message) {
if (message.isBlank()) { if (message.isBlank()) {
// throw new IllegalArgumentException(("Chat message is blank!")); // throw new IllegalArgumentException(("Chat message is blank!"));
@ -61,22 +51,6 @@ public class PacketSender {
this.connection.sendPacket(new ChatMessageC2SP(event.getMessage())); this.connection.sendPacket(new ChatMessageC2SP(event.getMessage()));
} }
public void spectateEntity(UUID entityUUID) {
this.connection.sendPacket(new EntitySpectateC2SP(entityUUID));
}
public void swingArm(Hands hand) {
this.connection.sendPacket(new ArmSwingC2SP(hand));
}
public void closeWindow(byte windowId) {
ContainerCloseEvent event = new ContainerCloseEvent(this.connection, windowId, ContainerCloseEvent.Initiators.CLIENT);
if (this.connection.fireEvent(event)) {
return;
}
this.connection.sendPacket(new ContainerCloseC2SP(windowId));
}
public void respawn() { public void respawn() {
sendClientStatus(ClientActionC2SP.ClientActions.PERFORM_RESPAWN); sendClientStatus(ClientActionC2SP.ClientActions.PERFORM_RESPAWN);
@ -86,21 +60,6 @@ public class PacketSender {
this.connection.sendPacket(new ClientActionC2SP(status)); this.connection.sendPacket(new ClientActionC2SP(status));
} }
public void sendPluginMessageData(ResourceLocation channel, OutByteBuffer toSend) {
this.connection.sendPacket(new PluginMessageC2SP(channel, toSend.toByteArray()));
}
public void sendLoginPluginMessageResponse(int messageId, OutByteBuffer toSend) {
this.connection.sendPacket(new LoginPluginResponseC2SP(messageId, toSend.toByteArray()));
}
public void setLocation(Vec3 position, EntityRotation rotation, boolean onGround) {
this.connection.sendPacket(new PositionAndRotationC2SP(position, rotation, onGround));
this.connection.getPlayer().getEntity().setPosition(position);
this.connection.getPlayer().getEntity().setRotation(rotation);
}
public void sendFakeChatMessage(ChatComponent message, ChatTextPositions position) { public void sendFakeChatMessage(ChatComponent message, ChatTextPositions position) {
this.connection.fireEvent(new ChatMessageReceivingEvent(this.connection, message, position, null)); this.connection.fireEvent(new ChatMessageReceivingEvent(this.connection, message, position, null));
} }