diff options
author | Linnea Gräf <nea@nea.moe> | 2025-01-17 18:00:43 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-01-17 18:00:43 +0100 |
commit | 74a043e53540c120ebe58b0199f57bfa36d30e47 (patch) | |
tree | 62b3505d5cc707eb854ad611a4bec38285ec29f8 /src/main/kotlin/events | |
parent | 19bc576b67c856b33922ee99c3e22a14f39ab55f (diff) | |
download | Firmament-74a043e53540c120ebe58b0199f57bfa36d30e47.tar.gz Firmament-74a043e53540c120ebe58b0199f57bfa36d30e47.tar.bz2 Firmament-74a043e53540c120ebe58b0199f57bfa36d30e47.zip |
feat: Allow dropping protected items in dungeons
Diffstat (limited to 'src/main/kotlin/events')
-rw-r--r-- | src/main/kotlin/events/IsSlotProtectedEvent.kt | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/src/main/kotlin/events/IsSlotProtectedEvent.kt b/src/main/kotlin/events/IsSlotProtectedEvent.kt index cd2b676..eac2d9b 100644 --- a/src/main/kotlin/events/IsSlotProtectedEvent.kt +++ b/src/main/kotlin/events/IsSlotProtectedEvent.kt @@ -1,5 +1,3 @@ - - package moe.nea.firmament.events import net.minecraft.item.ItemStack @@ -10,37 +8,49 @@ import moe.nea.firmament.util.CommonSoundEffects import moe.nea.firmament.util.MC data class IsSlotProtectedEvent( - val slot: Slot?, - val actionType: SlotActionType, - var isProtected: Boolean, - val itemStackOverride: ItemStack?, - var silent: Boolean = false, + val slot: Slot?, + val actionType: SlotActionType, + var isProtected: Boolean, + val itemStackOverride: ItemStack?, + val origin: MoveOrigin, + var silent: Boolean = false, ) : FirmamentEvent() { - val itemStack get() = itemStackOverride ?: slot!!.stack + val itemStack get() = itemStackOverride ?: slot!!.stack - fun protect() { - isProtected = true - } + fun protect() { + isProtected = true + silent = false + } - fun protectSilent() { - if (!isProtected) { - silent = true - } - isProtected = true - } + fun protectSilent() { + if (!isProtected) { + silent = true + } + isProtected = true + } - companion object : FirmamentEventBus<IsSlotProtectedEvent>() { - @JvmStatic - @JvmOverloads - fun shouldBlockInteraction(slot: Slot?, action: SlotActionType, itemStackOverride: ItemStack? = null): Boolean { - if (slot == null && itemStackOverride == null) return false - val event = IsSlotProtectedEvent(slot, action, false, itemStackOverride) - publish(event) - if (event.isProtected && !event.silent) { - MC.sendChat(Text.translatable("firmament.protectitem").append(event.itemStack.name)) - CommonSoundEffects.playFailure() - } - return event.isProtected - } - } + enum class MoveOrigin { + DROP_FROM_HOTBAR, + SALVAGE, + INVENTORY_MOVE + ; + } + companion object : FirmamentEventBus<IsSlotProtectedEvent>() { + @JvmStatic + @JvmOverloads + fun shouldBlockInteraction( + slot: Slot?, action: SlotActionType, + origin: MoveOrigin, + itemStackOverride: ItemStack? = null, + ): Boolean { + if (slot == null && itemStackOverride == null) return false + val event = IsSlotProtectedEvent(slot, action, false, itemStackOverride, origin) + publish(event) + if (event.isProtected && !event.silent) { + MC.sendChat(Text.translatable("firmament.protectitem").append(event.itemStack.name)) + CommonSoundEffects.playFailure() + } + return event.isProtected + } + } } |