Packet refactor

This commit is contained in:
Auxilor
2023-02-14 17:26:01 +00:00
parent a8556008f9
commit 6e8dc1d729
20 changed files with 152 additions and 152 deletions

View File

@@ -26,6 +26,7 @@ import com.willfp.eco.core.gui.slot.SlotBuilder;
import com.willfp.eco.core.gui.slot.functional.SlotProvider;
import com.willfp.eco.core.items.TestableItem;
import com.willfp.eco.core.math.MathContext;
import com.willfp.eco.core.packet.Packet;
import com.willfp.eco.core.proxy.ProxyFactory;
import com.willfp.eco.core.scheduling.Scheduler;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
@@ -551,7 +552,16 @@ public interface Eco {
*
* @param command The command.
*/
void unregisterCommand(@NotNull final PluginCommandBase command);
void unregisterCommand(@NotNull PluginCommandBase command);
/**
* Send a packet.
*
* @param player The player.
* @param packet The packet.
*/
void sendPacket(@NotNull Player player,
@NotNull Packet packet);
/**
* Get the instance of eco; the bridge between the api frontend and the implementation backend.

View File

@@ -1,5 +1,7 @@
package com.willfp.eco.core.packet;
import com.willfp.eco.core.Eco;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
/**
@@ -8,5 +10,12 @@ import org.jetbrains.annotations.NotNull;
* @param handle The NMS handle.
*/
public record Packet(@NotNull Object handle) {
/**
* Send to a player.
*
* @param player The player.
*/
void send(@NotNull final Player player) {
Eco.get().sendPacket(player, this);
}
}

View File

@@ -0,0 +1,9 @@
@file:JvmName("PacketExtensions")
package com.willfp.eco.core.packet
import org.bukkit.entity.Player
/** @see Packet.send */
fun Player.sendPacket(packet: Packet) =
packet.send(this)

View File

@@ -6,12 +6,14 @@ import com.willfp.eco.internal.spigot.proxy.common.ai.EntityGoalFactory
import com.willfp.eco.internal.spigot.proxy.common.ai.TargetGoalFactory
import net.minecraft.nbt.CompoundTag
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.item.Item
import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataContainer
@@ -63,6 +65,9 @@ fun CompoundTag.makePdc(base: Boolean = false): PersistentDataContainer =
fun CompoundTag.setPdc(pdc: PersistentDataContainer?, item: net.minecraft.world.item.ItemStack? = null) =
impl.setPdc(this, pdc, item)
fun Player.toNMS(): ServerPlayer =
impl.toNMS(this)
interface CommonsProvider {
val nbtTagString: Int
@@ -94,6 +99,8 @@ interface CommonsProvider {
fun itemToMaterial(item: Item): Material
fun toNMS(player: Player): ServerPlayer
companion object {
fun setIfNeeded(provider: CommonsProvider) {
if (::impl.isInitialized) {

View File

@@ -0,0 +1,31 @@
package com.willfp.eco.internal.spigot.proxy.common.packet
import com.willfp.eco.internal.spigot.proxy.common.toNMS
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.event.player.PlayerQuitEvent
object PacketInjectorListener : Listener {
@EventHandler
fun onJoin(event: PlayerJoinEvent) {
val player = event.player
val channel = player.toNMS().connection.connection.channel
channel.pipeline().addBefore("packet_handler", "packet_listener_player", EcoChannelDuplexHandler(player.uniqueId))
}
@EventHandler
fun onLeave(event: PlayerQuitEvent) {
val player = event.player
val channel = player.toNMS().connection.connection.channel
channel.eventLoop().submit {
if (channel.pipeline().get("packet_listener_player") != null) {
channel.pipeline().remove("packet_listener_player")
}
}
}
}

View File

@@ -3,11 +3,13 @@ package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.internal.spigot.proxy.CommonsInitializerProxy
import com.willfp.eco.internal.spigot.proxy.common.CommonsProvider
import com.willfp.eco.internal.spigot.proxy.common.packet.PacketInjectorListener
import com.willfp.eco.internal.spigot.proxy.common.toResourceLocation
import net.minecraft.core.Registry
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.Tag
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.item.Item
import org.bukkit.Bukkit
@@ -16,6 +18,7 @@ import org.bukkit.NamespacedKey
import org.bukkit.craftbukkit.v1_17_R1.CraftServer
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftMob
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack
import org.bukkit.craftbukkit.v1_17_R1.persistence.CraftPersistentDataContainer
import org.bukkit.craftbukkit.v1_17_R1.persistence.CraftPersistentDataTypeRegistry
@@ -23,6 +26,7 @@ import org.bukkit.craftbukkit.v1_17_R1.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_17_R1.util.CraftNamespacedKey
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataContainer
import java.lang.reflect.Field
@@ -30,6 +34,9 @@ import java.lang.reflect.Field
class CommonsInitializer : CommonsInitializerProxy {
override fun init(plugin: EcoPlugin) {
CommonsProvider.setIfNeeded(CommonsProviderImpl)
plugin.onEnable {
plugin.eventManager.registerListener(PacketInjectorListener)
}
}
object CommonsProviderImpl : CommonsProvider {
@@ -144,5 +151,9 @@ class CommonsInitializer : CommonsInitializerProxy {
override fun itemToMaterial(item: Item) =
Material.getMaterial(Registry.ITEM.getKey(item).path.uppercase())
?: throw IllegalArgumentException("Invalid material!")
override fun toNMS(player: Player): ServerPlayer {
return (player as CraftPlayer).handle
}
}
}

View File

@@ -3,7 +3,6 @@ package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.packet.PacketListener
import com.willfp.eco.internal.spigot.proxy.PacketHandlerProxy
import com.willfp.eco.internal.spigot.proxy.common.packet.EcoChannelDuplexHandler
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketAutoRecipe
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketHeldItemSlot
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketOpenWindowMerchant
@@ -17,37 +16,18 @@ import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer
import org.bukkit.entity.Player
class PacketHandler : PacketHandlerProxy {
override fun addPlayer(player: Player) {
override fun sendPacket(player: Player, packet: com.willfp.eco.core.packet.Packet) {
if (player !is CraftPlayer) {
return
}
player.handle.connection.connection.channel.pipeline()
.addBefore("eco_packet_handler", player.name, EcoChannelDuplexHandler(player.uniqueId))
}
val handle = packet.handle
override fun removePlayer(player: Player) {
if (player !is CraftPlayer) {
if (handle !is Packet<*>) {
return
}
val channel = player.handle.connection.connection.channel
channel.eventLoop().submit {
channel.pipeline().remove(player.name)
}
}
override fun sendPacket(player: Player, packet: Any) {
if (player !is CraftPlayer) {
return
}
if (packet !is Packet<*>) {
return
}
player.handle.connection.send(packet)
player.handle.connection.send(handle)
}
override fun clearDisplayFrames() {

View File

@@ -3,11 +3,13 @@ package com.willfp.eco.internal.spigot.proxy.v1_18_R1
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.internal.spigot.proxy.CommonsInitializerProxy
import com.willfp.eco.internal.spigot.proxy.common.CommonsProvider
import com.willfp.eco.internal.spigot.proxy.common.packet.PacketInjectorListener
import com.willfp.eco.internal.spigot.proxy.common.toResourceLocation
import net.minecraft.core.Registry
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.Tag
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.item.Item
import org.bukkit.Bukkit
@@ -16,6 +18,7 @@ import org.bukkit.NamespacedKey
import org.bukkit.craftbukkit.v1_18_R1.CraftServer
import org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity
import org.bukkit.craftbukkit.v1_18_R1.entity.CraftMob
import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer
import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack
import org.bukkit.craftbukkit.v1_18_R1.persistence.CraftPersistentDataContainer
import org.bukkit.craftbukkit.v1_18_R1.persistence.CraftPersistentDataTypeRegistry
@@ -23,6 +26,7 @@ import org.bukkit.craftbukkit.v1_18_R1.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_18_R1.util.CraftNamespacedKey
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataContainer
import java.lang.reflect.Field
@@ -30,6 +34,9 @@ import java.lang.reflect.Field
class CommonsInitializer : CommonsInitializerProxy {
override fun init(plugin: EcoPlugin) {
CommonsProvider.setIfNeeded(CommonsProviderImpl)
plugin.onEnable {
plugin.eventManager.registerListener(PacketInjectorListener)
}
}
object CommonsProviderImpl : CommonsProvider {
@@ -144,5 +151,9 @@ class CommonsInitializer : CommonsInitializerProxy {
override fun itemToMaterial(item: Item) =
Material.getMaterial(Registry.ITEM.getKey(item).path.uppercase())
?: throw IllegalArgumentException("Invalid material!")
override fun toNMS(player: Player): ServerPlayer {
return (player as CraftPlayer).handle
}
}
}

View File

@@ -3,7 +3,6 @@ package com.willfp.eco.internal.spigot.proxy.v1_18_R1
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.packet.PacketListener
import com.willfp.eco.internal.spigot.proxy.PacketHandlerProxy
import com.willfp.eco.internal.spigot.proxy.common.packet.EcoChannelDuplexHandler
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketAutoRecipe
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketHeldItemSlot
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketOpenWindowMerchant
@@ -17,37 +16,18 @@ import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer
import org.bukkit.entity.Player
class PacketHandler: PacketHandlerProxy {
override fun addPlayer(player: Player) {
override fun sendPacket(player: Player, packet: com.willfp.eco.core.packet.Packet) {
if (player !is CraftPlayer) {
return
}
player.handle.connection.connection.channel.pipeline()
.addBefore("eco_packet_handler", player.name, EcoChannelDuplexHandler(player.uniqueId))
}
val handle = packet.handle
override fun removePlayer(player: Player) {
if (player !is CraftPlayer) {
if (handle !is Packet<*>) {
return
}
val channel = player.handle.connection.connection.channel
channel.eventLoop().submit {
channel.pipeline().remove(player.name)
}
}
override fun sendPacket(player: Player, packet: Any) {
if (player !is CraftPlayer) {
return
}
if (packet !is Packet<*>) {
return
}
player.handle.connection.send(packet)
player.handle.connection.send(handle)
}
override fun clearDisplayFrames() {

View File

@@ -3,11 +3,13 @@ package com.willfp.eco.internal.spigot.proxy.v1_18_R2
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.internal.spigot.proxy.CommonsInitializerProxy
import com.willfp.eco.internal.spigot.proxy.common.CommonsProvider
import com.willfp.eco.internal.spigot.proxy.common.packet.PacketInjectorListener
import com.willfp.eco.internal.spigot.proxy.common.toResourceLocation
import net.minecraft.core.Registry
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.Tag
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.item.Item
import org.bukkit.Bukkit
@@ -16,6 +18,7 @@ import org.bukkit.NamespacedKey
import org.bukkit.craftbukkit.v1_18_R2.CraftServer
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftMob
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer
import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack
import org.bukkit.craftbukkit.v1_18_R2.persistence.CraftPersistentDataContainer
import org.bukkit.craftbukkit.v1_18_R2.persistence.CraftPersistentDataTypeRegistry
@@ -23,6 +26,7 @@ import org.bukkit.craftbukkit.v1_18_R2.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_18_R2.util.CraftNamespacedKey
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataContainer
import java.lang.reflect.Field
@@ -30,6 +34,9 @@ import java.lang.reflect.Field
class CommonsInitializer : CommonsInitializerProxy {
override fun init(plugin: EcoPlugin) {
CommonsProvider.setIfNeeded(CommonsProviderImpl)
plugin.onEnable {
plugin.eventManager.registerListener(PacketInjectorListener)
}
}
object CommonsProviderImpl : CommonsProvider {
@@ -144,5 +151,9 @@ class CommonsInitializer : CommonsInitializerProxy {
override fun itemToMaterial(item: Item) =
Material.getMaterial(Registry.ITEM.getKey(item).path.uppercase())
?: throw IllegalArgumentException("Invalid material!")
override fun toNMS(player: Player): ServerPlayer {
return (player as CraftPlayer).handle
}
}
}

View File

@@ -3,7 +3,6 @@ package com.willfp.eco.internal.spigot.proxy.v1_18_R2
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.packet.PacketListener
import com.willfp.eco.internal.spigot.proxy.PacketHandlerProxy
import com.willfp.eco.internal.spigot.proxy.common.packet.EcoChannelDuplexHandler
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketAutoRecipe
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketHeldItemSlot
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketOpenWindowMerchant
@@ -17,37 +16,18 @@ import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer
import org.bukkit.entity.Player
class PacketHandler: PacketHandlerProxy {
override fun addPlayer(player: Player) {
override fun sendPacket(player: Player, packet: com.willfp.eco.core.packet.Packet) {
if (player !is CraftPlayer) {
return
}
player.handle.connection.connection.channel.pipeline()
.addBefore("eco_packet_handler", player.name, EcoChannelDuplexHandler(player.uniqueId))
}
val handle = packet.handle
override fun removePlayer(player: Player) {
if (player !is CraftPlayer) {
if (handle !is Packet<*>) {
return
}
val channel = player.handle.connection.connection.channel
channel.eventLoop().submit {
channel.pipeline().remove(player.name)
}
}
override fun sendPacket(player: Player, packet: Any) {
if (player !is CraftPlayer) {
return
}
if (packet !is Packet<*>) {
return
}
player.handle.connection.send(packet)
player.handle.connection.send(handle)
}
override fun clearDisplayFrames() {

View File

@@ -3,11 +3,13 @@ package com.willfp.eco.internal.spigot.proxy.v1_19_R1
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.internal.spigot.proxy.CommonsInitializerProxy
import com.willfp.eco.internal.spigot.proxy.common.CommonsProvider
import com.willfp.eco.internal.spigot.proxy.common.packet.PacketInjectorListener
import com.willfp.eco.internal.spigot.proxy.common.toResourceLocation
import net.minecraft.core.Registry
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.Tag
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.item.Item
import org.bukkit.Bukkit
@@ -16,6 +18,7 @@ import org.bukkit.NamespacedKey
import org.bukkit.craftbukkit.v1_19_R1.CraftServer
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftEntity
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftMob
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack
import org.bukkit.craftbukkit.v1_19_R1.persistence.CraftPersistentDataContainer
import org.bukkit.craftbukkit.v1_19_R1.persistence.CraftPersistentDataTypeRegistry
@@ -23,6 +26,7 @@ import org.bukkit.craftbukkit.v1_19_R1.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_19_R1.util.CraftNamespacedKey
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataContainer
import java.lang.reflect.Field
@@ -30,6 +34,9 @@ import java.lang.reflect.Field
class CommonsInitializer : CommonsInitializerProxy {
override fun init(plugin: EcoPlugin) {
CommonsProvider.setIfNeeded(CommonsProviderImpl)
plugin.onEnable {
plugin.eventManager.registerListener(PacketInjectorListener)
}
}
object CommonsProviderImpl : CommonsProvider {
@@ -144,5 +151,9 @@ class CommonsInitializer : CommonsInitializerProxy {
override fun itemToMaterial(item: Item) =
Material.getMaterial(Registry.ITEM.getKey(item).path.uppercase())
?: throw IllegalArgumentException("Invalid material!")
override fun toNMS(player: Player): ServerPlayer {
return (player as CraftPlayer).handle
}
}
}

View File

@@ -3,7 +3,6 @@ package com.willfp.eco.internal.spigot.proxy.v1_19_R1
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.packet.PacketListener
import com.willfp.eco.internal.spigot.proxy.PacketHandlerProxy
import com.willfp.eco.internal.spigot.proxy.common.packet.EcoChannelDuplexHandler
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketAutoRecipe
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketHeldItemSlot
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketOpenWindowMerchant
@@ -15,38 +14,19 @@ import net.minecraft.network.protocol.Packet
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer
import org.bukkit.entity.Player
class PacketHandler: PacketHandlerProxy {
override fun addPlayer(player: Player) {
class PacketHandler : PacketHandlerProxy {
override fun sendPacket(player: Player, packet: com.willfp.eco.core.packet.Packet) {
if (player !is CraftPlayer) {
return
}
player.handle.connection.connection.channel.pipeline()
.addBefore("eco_packet_handler", player.name, EcoChannelDuplexHandler(player.uniqueId))
}
val handle = packet.handle
override fun removePlayer(player: Player) {
if (player !is CraftPlayer) {
if (handle !is Packet<*>) {
return
}
val channel = player.handle.connection.connection.channel
channel.eventLoop().submit {
channel.pipeline().remove(player.name)
}
}
override fun sendPacket(player: Player, packet: Any) {
if (player !is CraftPlayer) {
return
}
if (packet !is Packet<*>) {
return
}
player.handle.connection.send(packet)
player.handle.connection.send(handle)
}
override fun clearDisplayFrames() {

View File

@@ -3,11 +3,13 @@ package com.willfp.eco.internal.spigot.proxy.v1_19_R2
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.internal.spigot.proxy.CommonsInitializerProxy
import com.willfp.eco.internal.spigot.proxy.common.CommonsProvider
import com.willfp.eco.internal.spigot.proxy.common.packet.PacketInjectorListener
import com.willfp.eco.internal.spigot.proxy.common.toResourceLocation
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.Tag
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.PathfinderMob
import net.minecraft.world.item.Item
import org.bukkit.Bukkit
@@ -16,6 +18,7 @@ import org.bukkit.NamespacedKey
import org.bukkit.craftbukkit.v1_19_R2.CraftServer
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftEntity
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftMob
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer
import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack
import org.bukkit.craftbukkit.v1_19_R2.persistence.CraftPersistentDataContainer
import org.bukkit.craftbukkit.v1_19_R2.persistence.CraftPersistentDataTypeRegistry
@@ -23,6 +26,7 @@ import org.bukkit.craftbukkit.v1_19_R2.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_19_R2.util.CraftNamespacedKey
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataContainer
import java.lang.reflect.Field
@@ -30,6 +34,9 @@ import java.lang.reflect.Field
class CommonsInitializer : CommonsInitializerProxy {
override fun init(plugin: EcoPlugin) {
CommonsProvider.setIfNeeded(CommonsProviderImpl)
plugin.onEnable {
plugin.eventManager.registerListener(PacketInjectorListener)
}
}
object CommonsProviderImpl : CommonsProvider {
@@ -144,5 +151,9 @@ class CommonsInitializer : CommonsInitializerProxy {
override fun itemToMaterial(item: Item) =
Material.getMaterial(BuiltInRegistries.ITEM.getKey(item).path.uppercase())
?: throw IllegalArgumentException("Invalid material!")
override fun toNMS(player: Player): ServerPlayer {
return (player as CraftPlayer).handle
}
}
}

View File

@@ -3,7 +3,6 @@ package com.willfp.eco.internal.spigot.proxy.v1_19_R2
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.packet.PacketListener
import com.willfp.eco.internal.spigot.proxy.PacketHandlerProxy
import com.willfp.eco.internal.spigot.proxy.common.packet.EcoChannelDuplexHandler
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketAutoRecipe
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketHeldItemSlot
import com.willfp.eco.internal.spigot.proxy.common.packet.display.PacketOpenWindowMerchant
@@ -16,37 +15,18 @@ import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer
import org.bukkit.entity.Player
class PacketHandler : PacketHandlerProxy {
override fun addPlayer(player: Player) {
override fun sendPacket(player: Player, packet: com.willfp.eco.core.packet.Packet) {
if (player !is CraftPlayer) {
return
}
player.handle.connection.connection.channel.pipeline()
.addBefore("eco_packet_handler", player.name, EcoChannelDuplexHandler(player.uniqueId))
}
val handle = packet.handle
override fun removePlayer(player: Player) {
if (player !is CraftPlayer) {
if (handle !is Packet<*>) {
return
}
val channel = player.handle.connection.connection.channel
channel.eventLoop().submit {
channel.pipeline().remove(player.name)
}
}
override fun sendPacket(player: Player, packet: Any) {
if (player !is CraftPlayer) {
return
}
if (packet !is Packet<*>) {
return
}
player.handle.connection.send(packet)
player.handle.connection.send(handle)
}
override fun clearDisplayFrames() {

View File

@@ -14,6 +14,7 @@ import com.willfp.eco.core.gui.menu.MenuType
import com.willfp.eco.core.gui.slot.functional.SlotProvider
import com.willfp.eco.core.items.Items
import com.willfp.eco.core.math.MathContext
import com.willfp.eco.core.packet.Packet
import com.willfp.eco.internal.EcoPropsParser
import com.willfp.eco.internal.command.EcoPluginCommand
import com.willfp.eco.internal.command.EcoSubcommand
@@ -49,6 +50,7 @@ import com.willfp.eco.internal.spigot.proxy.EntityControllerFactoryProxy
import com.willfp.eco.internal.spigot.proxy.ExtendedPersistentDataContainerFactoryProxy
import com.willfp.eco.internal.spigot.proxy.FastItemStackFactoryProxy
import com.willfp.eco.internal.spigot.proxy.MiniMessageTranslatorProxy
import com.willfp.eco.internal.spigot.proxy.PacketHandlerProxy
import com.willfp.eco.internal.spigot.proxy.SNBTConverterProxy
import com.willfp.eco.internal.spigot.proxy.SkullProxy
import com.willfp.eco.internal.spigot.proxy.TPSProxy
@@ -318,4 +320,7 @@ class EcoImpl : EcoSpigotPlugin(), Eco {
override fun unregisterCommand(command: PluginCommandBase) =
this.getProxy(BukkitCommandsProxy::class.java).unregisterCommand(command)
override fun sendPacket(player: Player, packet: Packet) =
this.getProxy(PacketHandlerProxy::class.java).sendPacket(player, packet)
}

View File

@@ -112,7 +112,6 @@ import com.willfp.eco.internal.spigot.integrations.shop.ShopDeluxeSellwands
import com.willfp.eco.internal.spigot.integrations.shop.ShopEconomyShopGUI
import com.willfp.eco.internal.spigot.integrations.shop.ShopShopGuiPlus
import com.willfp.eco.internal.spigot.integrations.shop.ShopZShop
import com.willfp.eco.internal.spigot.packet.PacketInjectorListener
import com.willfp.eco.internal.spigot.proxy.FastItemStackFactoryProxy
import com.willfp.eco.internal.spigot.proxy.PacketHandlerProxy
import com.willfp.eco.internal.spigot.recipes.CraftingRecipeListener
@@ -362,7 +361,6 @@ abstract class EcoSpigotPlugin : EcoPlugin() {
ArmorChangeEventListeners(this),
DataListener(this),
PlayerBlockListener(this),
PacketInjectorListener(this),
ServerLocking
)

View File

@@ -1,22 +0,0 @@
package com.willfp.eco.internal.spigot.packet
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.internal.spigot.proxy.PacketHandlerProxy
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.event.player.PlayerQuitEvent
class PacketInjectorListener(
private val plugin: EcoPlugin
) : Listener {
@EventHandler
fun onJoin(event: PlayerJoinEvent) {
plugin.getProxy(PacketHandlerProxy::class.java).addPlayer(event.player)
}
@EventHandler
fun onLeave(event: PlayerQuitEvent) {
plugin.getProxy(PacketHandlerProxy::class.java).addPlayer(event.player)
}
}

View File

@@ -7,6 +7,7 @@ website: willfp.com
load: STARTUP
depend: []
softdepend:
- ProtocolLib
- WorldGuard
- GriefPrevention
- Towny

View File

@@ -1,15 +1,12 @@
package com.willfp.eco.internal.spigot.proxy
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.packet.Packet
import com.willfp.eco.core.packet.PacketListener
import org.bukkit.entity.Player
interface PacketHandlerProxy {
fun addPlayer(player: Player)
fun removePlayer(player: Player)
fun sendPacket(player: Player, packet: Any)
fun sendPacket(player: Player, packet: Packet)
fun clearDisplayFrames()