From 853d28595b98eb5c28983d769d8034b33ba82633 Mon Sep 17 00:00:00 2001 From: Boy Date: Wed, 17 Jan 2024 16:05:09 +0100 Subject: [PATCH] fix: BlockySeat functionality --- .../blocky/api/BlockyFurnitures.kt | 2 +- .../blocky/helpers/FurniturePacketHelpers.kt | 12 +++++------- .../listeners/BlockyFurnitureListener.kt | 19 +++++++------------ 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/main/kotlin/com/mineinabyss/blocky/api/BlockyFurnitures.kt b/src/main/kotlin/com/mineinabyss/blocky/api/BlockyFurnitures.kt index fed08133..7cc15a8f 100644 --- a/src/main/kotlin/com/mineinabyss/blocky/api/BlockyFurnitures.kt +++ b/src/main/kotlin/com/mineinabyss/blocky/api/BlockyFurnitures.kt @@ -57,7 +57,7 @@ object BlockyFurnitures { val ItemDisplay.seats: List get() = this.toGearyOrNull()?.get()?.seats ?: emptyList() - fun getBlockySeat(itemDisplay: ItemDisplay, location: Location = itemDisplay.location): Entity? = + fun blockySeat(itemDisplay: ItemDisplay, location: Location = itemDisplay.location): Entity? = itemDisplay.seats.minByOrNull { it.location.distanceSquared(location) } val ItemDisplay.blockySeat diff --git a/src/main/kotlin/com/mineinabyss/blocky/helpers/FurniturePacketHelpers.kt b/src/main/kotlin/com/mineinabyss/blocky/helpers/FurniturePacketHelpers.kt index b67e7c85..695d12dd 100644 --- a/src/main/kotlin/com/mineinabyss/blocky/helpers/FurniturePacketHelpers.kt +++ b/src/main/kotlin/com/mineinabyss/blocky/helpers/FurniturePacketHelpers.kt @@ -44,6 +44,7 @@ import org.bukkit.craftbukkit.v1_20_R2.inventory.CraftItemStack import org.bukkit.entity.ItemDisplay import org.bukkit.entity.Player import org.bukkit.inventory.EquipmentSlot +import org.bukkit.util.Vector import org.joml.Vector3f import java.util.* @@ -91,13 +92,10 @@ object FurniturePacketHelpers { onReceive { wrap -> Bukkit.getScheduler().callSyncMethod(blocky.plugin) { getBaseFurnitureFromCollisionHitbox(wrap.blockHit.blockPos)?.let { baseFurniture -> - isCancelled = true - BlockyFurnitureInteractEvent( - baseFurniture, player, - EquipmentSlot.HAND, player.inventory.itemInMainHand, - null, null - ).callEvent() - } + val clickedRelativePosition = Vector(wrap.blockHit.location.x, wrap.blockHit.location.y, wrap.blockHit.location.z) + isCancelled = true + + BlockyFurnitureInteractEvent(baseFurniture, player, EquipmentSlot.HAND, player.inventory.itemInMainHand, clickedRelativePosition).callEvent()} } } } diff --git a/src/main/kotlin/com/mineinabyss/blocky/listeners/BlockyFurnitureListener.kt b/src/main/kotlin/com/mineinabyss/blocky/listeners/BlockyFurnitureListener.kt index ba6cf0a4..d934485f 100644 --- a/src/main/kotlin/com/mineinabyss/blocky/listeners/BlockyFurnitureListener.kt +++ b/src/main/kotlin/com/mineinabyss/blocky/listeners/BlockyFurnitureListener.kt @@ -4,10 +4,8 @@ import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent import com.destroystokyo.paper.event.player.PlayerUseUnknownEntityEvent import com.github.shynixn.mccoroutine.bukkit.launch import com.github.shynixn.mccoroutine.bukkit.minecraftDispatcher -import com.mineinabyss.blocky.api.BlockyFurnitures.getBlockySeat +import com.mineinabyss.blocky.api.BlockyFurnitures import com.mineinabyss.blocky.api.BlockyFurnitures.isBlockyFurniture -import com.mineinabyss.blocky.api.BlockyFurnitures.isModelEngineFurniture -import com.mineinabyss.blocky.api.BlockyFurnitures.removeFurniture import com.mineinabyss.blocky.api.events.furniture.BlockyFurnitureInteractEvent import com.mineinabyss.blocky.api.events.furniture.BlockyFurniturePlaceEvent import com.mineinabyss.blocky.blocky @@ -107,7 +105,7 @@ class BlockyFurnitureListener : Listener { val newFurniture = FurnitureHelpers.placeBlockyFurniture(prefabKey, targetBlock.location, yaw, item) ?: return if (!BlockyFurniturePlaceEvent(newFurniture, player, hand, item).callEvent()) { - removeFurniture(newFurniture) + BlockyFurnitures.removeFurniture(newFurniture) return } @@ -121,7 +119,7 @@ class BlockyFurnitureListener : Listener { val baseFurniture = FurniturePacketHelpers.getBaseFurnitureFromInteractionEntity(entityId) ?: return blocky.plugin.launch(blocky.plugin.minecraftDispatcher) { when { - isAttack -> removeFurniture(baseFurniture, player) + isAttack -> BlockyFurnitures.removeFurniture(baseFurniture, player) else -> BlockyFurnitureInteractEvent( baseFurniture, player, hand, player.inventory.itemInMainHand, clickedRelativePosition ).callEvent() @@ -135,13 +133,10 @@ class BlockyFurnitureListener : Listener { Bukkit.getPluginManager().registerEvents(object : Listener { @EventHandler fun BaseEntityInteractEvent.onModelEngineInteract() { - val baseEntity = baseEntity.original as? ItemDisplay ?: return - if (!baseEntity.isBlockyFurniture || !baseEntity.isModelEngineFurniture) return + val baseEntity = (baseEntity.original as? ItemDisplay)?.takeIf { it.isBlockyFurniture } ?: return when { - action == BaseEntityInteractEvent.Action.ATTACK -> removeFurniture(baseEntity, player) - else -> BlockyFurnitureInteractEvent( - baseEntity, player, slot, player.inventory.itemInMainHand, clickedPosition - ).callEvent() + action == BaseEntityInteractEvent.Action.ATTACK -> BlockyFurnitures.removeFurniture(baseEntity, player) + else -> BlockyFurnitureInteractEvent(baseEntity, player, slot, player.inventory.itemInMainHand, clickedPosition).callEvent() } } }, blocky.plugin) @@ -162,6 +157,6 @@ class BlockyFurnitureListener : Listener { } private fun Player.sitOnBlockySeat(entity: ItemDisplay, location: Location = entity.location) { - if (this.passengers.isEmpty()) getBlockySeat(entity, location)?.addPassenger(this) + BlockyFurnitures.blockySeat(entity, location)?.addPassenger(this) } }