Packet refactor
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
@@ -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) {
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ website: willfp.com
|
||||
load: STARTUP
|
||||
depend: []
|
||||
softdepend:
|
||||
- ProtocolLib
|
||||
- WorldGuard
|
||||
- GriefPrevention
|
||||
- Towny
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user