Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,18 @@ interface PylonEntityHolderBlock {
fun addEntity(name: String, entity: PylonEntity<*>)
= addEntity(name, entity.entity)

fun tryRemoveEntity(name: String) {
val uuid = heldEntities[name] ?: return
Bukkit.getEntity(uuid)?.remove()
}

fun tryRemoveAllEntities() {
val list = heldEntities.values.toList()
list.forEach {
Bukkit.getEntity(it)?.let { if (it.isValid) it.remove() }
}
}

@ApiStatus.NonExtendable
fun getHeldEntityUuid(name: String) = heldEntities[name]

Expand Down Expand Up @@ -142,9 +154,7 @@ interface PylonEntityHolderBlock {
val block = event.pylonBlock
if (block is PylonEntityHolderBlock) {
// Best-effort removal; unlikely to cause issues
block.heldEntities.values.forEach {
Bukkit.getEntity(it)?.let { if (it.isValid) it.remove() }
}
block.tryRemoveAllEntities()
holders.remove(block)
} else if (block is PhantomBlock) {
block.pdc.get(entityKey, entityType)?.values?.forEach {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,9 @@ object PylonSerializers {
@JvmField
val INVENTORY = InventoryPersistentDataType

@JvmField
val VIRTUAL_INVENTORY = VirtualInventoryPersistentDataType

@JvmField
val KEYED = KeyedPersistentDataType

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.github.pylonmc.pylon.core.datatypes

import org.bukkit.persistence.PersistentDataAdapterContext
import org.bukkit.persistence.PersistentDataType
import xyz.xenondevs.invui.inventory.VirtualInventory

object VirtualInventoryPersistentDataType : PersistentDataType<ByteArray, VirtualInventory> {
override fun getPrimitiveType(): Class<ByteArray> = ByteArray::class.java

override fun getComplexType(): Class<VirtualInventory> = VirtualInventory::class.java

override fun toPrimitive(complex: VirtualInventory, context: PersistentDataAdapterContext): ByteArray {
return complex.serialize()
}

override fun fromPrimitive(primitive: ByteArray, context: PersistentDataAdapterContext): VirtualInventory {
return VirtualInventory.deserialize(primitive)
}
}