Fix uuid locking not working in some NPC shops

This commit is contained in:
nea
2023-10-28 04:17:11 +02:00
parent ad490f2ea7
commit 47fbb25ab2

View File

@@ -15,6 +15,7 @@ import kotlinx.serialization.UseSerializers
import kotlinx.serialization.serializer import kotlinx.serialization.serializer
import net.minecraft.client.gui.screen.ingame.HandledScreen import net.minecraft.client.gui.screen.ingame.HandledScreen
import net.minecraft.entity.player.PlayerInventory import net.minecraft.entity.player.PlayerInventory
import net.minecraft.screen.GenericContainerScreenHandler
import net.minecraft.screen.slot.SlotActionType import net.minecraft.screen.slot.SlotActionType
import net.minecraft.util.Identifier import net.minecraft.util.Identifier
import moe.nea.firmament.events.HandledScreenKeyPressedEvent import moe.nea.firmament.events.HandledScreenKeyPressedEvent
@@ -74,21 +75,21 @@ object SlotLocking : FirmamentFeature {
fun isTradeScreen(screen: HandledScreen<*>?): Boolean { fun isTradeScreen(screen: HandledScreen<*>?): Boolean {
if (screen == null) return false if (screen == null) return false
val handler = screen.screenHandler val handler = screen.screenHandler as? GenericContainerScreenHandler ?: return false
if (handler.slots.size < 9) return false if (handler.inventory.size() < 9) return false
val middlePane = handler.getSlot(4) val middlePane = handler.inventory.getStack(handler.inventory.size() - 5)
if (!middlePane.hasStack()) return false if (middlePane == null) return false
return middlePane.stack.displayNameAccordingToNbt?.unformattedString == "⇦ Your stuff" return middlePane.displayNameAccordingToNbt?.unformattedString == "⇦ Your stuff"
} }
fun isNpcShop(screen: HandledScreen<*>?): Boolean { fun isNpcShop(screen: HandledScreen<*>?): Boolean {
if (screen == null) return false if (screen == null) return false
val handler = screen.screenHandler val handler = screen.screenHandler as? GenericContainerScreenHandler ?: return false
if (handler.slots.size < 9) return false if (handler.inventory.size() < 9) return false
val sellItem = handler.getSlot(handler.slots.size - 5) val sellItem = handler.inventory.getStack(handler.inventory.size() - 5)
if (!sellItem.hasStack()) return false if (sellItem == null) return false
if (sellItem.stack.displayNameAccordingToNbt?.unformattedString == "Sell Item") return true if (sellItem.displayNameAccordingToNbt?.unformattedString == "Sell Item") return true
val lore = sellItem.stack.loreAccordingToNbt val lore = sellItem.loreAccordingToNbt
return (lore.lastOrNull() ?: return false).value?.unformattedString == "Click to buyback!" return (lore.lastOrNull() ?: return false).value?.unformattedString == "Click to buyback!"
} }
@@ -178,6 +179,7 @@ object SlotLocking : FirmamentFeature {
isUUIDLocked -> isUUIDLocked ->
(Identifier("firmament:uuid_locked")) (Identifier("firmament:uuid_locked"))
else -> else ->
error("unreachable") error("unreachable")
} }