Added guava and asynchronous window items processing
This commit is contained in:
@@ -1,35 +1,42 @@
|
||||
package com.willfp.eco.spigot.display
|
||||
|
||||
import com.comphenix.protocol.PacketType
|
||||
import com.comphenix.protocol.ProtocolLibrary
|
||||
import com.comphenix.protocol.events.PacketContainer
|
||||
import com.comphenix.protocol.events.PacketEvent
|
||||
import com.willfp.eco.core.AbstractPacketAdapter
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.display.Display
|
||||
import com.willfp.eco.core.fast.FastItemStack
|
||||
import com.willfp.eco.internal.display.EcoDisplayHandler
|
||||
import com.willfp.eco.spigot.display.frame.DisplayFrame
|
||||
import com.willfp.eco.spigot.display.frame.HashedItem
|
||||
import com.willfp.eco.spigot.display.frame.lastDisplayFrame
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
class PacketWindowItems(plugin: EcoPlugin) : AbstractPacketAdapter(plugin, PacketType.Play.Server.WINDOW_ITEMS, false) {
|
||||
private val ignorePacketList = ConcurrentHashMap.newKeySet<String>()
|
||||
|
||||
override fun onSend(
|
||||
packet: PacketContainer,
|
||||
player: Player,
|
||||
event: PacketEvent
|
||||
) {
|
||||
if (ignorePacketList.contains(player.name)) {
|
||||
ignorePacketList.remove(player.name)
|
||||
return
|
||||
}
|
||||
|
||||
val windowId = packet.integers.read(0)
|
||||
|
||||
if (windowId != 0) {
|
||||
player.lastDisplayFrame = DisplayFrame.EMPTY
|
||||
}
|
||||
|
||||
packet.itemListModifier.modify(0) { itemStacks: MutableList<ItemStack>? ->
|
||||
if (itemStacks == null) {
|
||||
return@modify null
|
||||
}
|
||||
val itemStacks = packet.itemListModifier.read(0) ?: return
|
||||
|
||||
val displayTask = {
|
||||
if (this.getPlugin().configYml.getBool("use-display-frame") && windowId == 0) {
|
||||
val frameMap = mutableMapOf<Byte, HashedItem>()
|
||||
|
||||
@@ -50,13 +57,21 @@ class PacketWindowItems(plugin: EcoPlugin) : AbstractPacketAdapter(plugin, Packe
|
||||
Display.display(itemStacks[index.toInt()], player)
|
||||
}
|
||||
|
||||
for (index in (itemStacks.indices subtract changes)) {
|
||||
for (index in (itemStacks.indices subtract changes.toSet())) {
|
||||
itemStacks[index.toInt()] = lastFrame.getItem(index.toByte()) ?: itemStacks[index.toInt()]
|
||||
}
|
||||
} else {
|
||||
itemStacks.forEach { Display.display(it, player) }
|
||||
}
|
||||
itemStacks
|
||||
|
||||
val newPacket = packet.deepClone()
|
||||
newPacket.itemListModifier.write(0, itemStacks)
|
||||
|
||||
ignorePacketList.add(player.name)
|
||||
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, newPacket)
|
||||
}
|
||||
|
||||
(Display.getHandler() as EcoDisplayHandler).executor.execute(displayTask)
|
||||
}
|
||||
}
|
||||
@@ -44,4 +44,5 @@ libraries:
|
||||
- 'org.jetbrains.exposed:exposed-core:0.35.1'
|
||||
- 'org.jetbrains.exposed:exposed-dao:0.35.1'
|
||||
- 'org.jetbrains.exposed:exposed-jdbc:0.35.1'
|
||||
- 'mysql:mysql-connector-java:8.0.25'
|
||||
- 'mysql:mysql-connector-java:8.0.25'
|
||||
- 'com.google.guava:guava:31.0.1-jre'
|
||||
Reference in New Issue
Block a user