diff options
author | Linnea Gräf <nea@nea.moe> | 2023-10-26 00:56:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-26 00:56:50 +0200 |
commit | aa34b32d73bf8bda001693154531075132f0c8a8 (patch) | |
tree | 6579c6c5966801589bba892d3537e76ce73d1de4 | |
parent | 85e0bc290675274ca70a5734bd9112a92b477e90 (diff) | |
download | skyhanni-aa34b32d73bf8bda001693154531075132f0c8a8.tar.gz skyhanni-aa34b32d73bf8bda001693154531075132f0c8a8.tar.bz2 skyhanni-aa34b32d73bf8bda001693154531075132f0c8a8.zip |
Add ping for incoming visitors, and accept hotkey (#621)
Help with 2023 Halloween visitor challenge #621
4 files changed, 49 insertions, 8 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java index 4e70150c0..29bcac5bf 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java @@ -73,11 +73,16 @@ public class GardenConfig { @Expose @ConfigOption(name = "Sixth Visitor Warning", desc = "Notifies when it is believed that the sixth visitor has arrived. " + - "May be inaccurate with co-op members farming simultaneously.") + "May be inaccurate with co-op members farming simultaneously.") @ConfigEditorBoolean public boolean sixthVisitorWarning = true; @Expose + @ConfigOption(name = "Ping when close to new visitor", desc = "Pings you when you are less than 10 seconds away from getting a new visitor.") + @ConfigEditorBoolean + public boolean pingForVisitorArrivals = false; + + @Expose public Position pos = new Position(390, 65, false, true); } @@ -314,6 +319,16 @@ public class GardenConfig { @Expose public Position pos = new Position(5, 20, false, true); } + + @Expose + @ConfigOption( + name = "Accept Hotkey", + desc = "Accept a visitor when you press this keybind while in the visitor GUI" + ) + @ConfigEditorKeybind( + defaultKey = Keyboard.KEY_NONE + ) + public int acceptHotkey = Keyboard.KEY_NONE; } @Expose diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt index a4b86e03c..52dcd86b6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt @@ -135,7 +135,9 @@ class GardenVisitorTimer { val factor = diff / 1000.0 "§7/§$formatColor" + TimeUtils.formatDuration((millis / factor).roundToLong()) } else "" - + if (config.pingForVisitorArrivals && millis < 10000){ + SoundUtils.playBeepSound() + } val formatDuration = TimeUtils.formatDuration(millis) val next = if (queueFull && (!isSixthVisitorEnabled() || millis < 0)) "§cQueue Full!" else { "Next in §$formatColor$formatDuration$extraSpeed" diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt index 98a48a76a..96ec316a1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt @@ -1,5 +1,6 @@ package at.hannibal2.skyhanni.features.garden.visitor +import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.CheckRenderEntityEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent @@ -12,6 +13,9 @@ import at.hannibal2.skyhanni.events.garden.visitor.VisitorRenderEvent import at.hannibal2.skyhanni.events.garden.visitor.VisitorToolTipEvent import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI.VisitorStatus +import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI.config +import at.hannibal2.skyhanni.mixins.transformers.gui.AccessorGuiContainer +import at.hannibal2.skyhanni.test.SkyHanniDebugsAndTests import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld @@ -22,8 +26,10 @@ import at.hannibal2.skyhanni.utils.RenderUtils.exactLocation import at.hannibal2.skyhanni.utils.StringUtils.removeColor import io.github.moulberry.notenoughupdates.events.SlotClickEvent import net.minecraft.client.Minecraft +import net.minecraft.client.gui.inventory.GuiContainer import net.minecraft.entity.item.EntityArmorStand import net.minecraft.network.play.client.C02PacketUseEntity +import net.minecraftforge.client.event.GuiScreenEvent.KeyboardInputEvent import net.minecraftforge.event.entity.player.ItemTooltipEvent import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -103,7 +109,7 @@ class VisitorListener { } for (name in visitorsInTab) { - VisitorAPI.addVisitor(name) + VisitorAPI.addVisitor(name) } } @@ -112,7 +118,7 @@ class VisitorListener { if (!GardenAPI.inGarden()) return val npcItem = event.inventoryItems[VISITOR_INFO_ITEM_SLOT] ?: return val lore = npcItem.getLore() - if(!VisitorAPI.isVisitorInfo(lore)) return + if (!VisitorAPI.isVisitorInfo(lore)) return val offerItem = event.inventoryItems[VISITOR_ACCEPT_ITEM_SLOT] ?: return if (offerItem.name != "§aAccept Offer") return @@ -138,6 +144,17 @@ class VisitorListener { VisitorAPI.inInventory = false } + @SubscribeEvent + fun onKeybind(event: KeyboardInputEvent.Post) { + if (!VisitorAPI.inInventory) return + if (!config.acceptHotkey.isKeyHeld()) return + val inventory = event.gui as? AccessorGuiContainer ?: return + inventory as GuiContainer + val slot = inventory.inventorySlots.getSlot(29) + inventory.handleMouseClick_skyhanni(slot, slot.slotIndex, 0, 0) + } + + @SubscribeEvent(priority = EventPriority.HIGH) fun onStackClick(event: SlotClickEvent) { if (!VisitorAPI.inInventory) return @@ -158,8 +175,8 @@ class VisitorListener { LorenzUtils.chat("§e[SkyHanni] §cBlocked refusing visitor ${visitor.visitorName} §7(${it.displayName}§7)") if (config.rewardWarning.bypassKey == Keyboard.KEY_NONE) { LorenzUtils.clickableChat( - "§eIf you want to deny this visitor, set a keybind in §e/sh bypass", - "sh bypass" + "§eIf you want to deny this visitor, set a keybind in §e/sh bypass", + "sh bypass" ) } Minecraft.getMinecraft().thePlayer.closeScreen() @@ -170,7 +187,9 @@ class VisitorListener { VisitorAPI.changeStatus(visitor, VisitorStatus.REFUSED, "refused") return } - if (event.slotId == VISITOR_ACCEPT_ITEM_SLOT && event.slot.stack?.getLore()?.any { it == "§eClick to give!" } == true) { + if (event.slotId == VISITOR_ACCEPT_ITEM_SLOT && event.slot.stack?.getLore() + ?.any { it == "§eClick to give!" } == true + ) { VisitorAPI.changeStatus(visitor, VisitorStatus.ACCEPTED, "accepted") return } @@ -209,4 +228,4 @@ class VisitorListener { } } } -}
\ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java index 5fbc6dee5..8ca114a1c 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java @@ -1,8 +1,10 @@ package at.hannibal2.skyhanni.mixins.transformers.gui; import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.inventory.Slot; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(GuiContainer.class) public interface AccessorGuiContainer { @@ -10,6 +12,9 @@ public interface AccessorGuiContainer { @Accessor("guiLeft") int getGuiLeft(); + @Invoker("handleMouseClick") + void handleMouseClick_skyhanni(Slot slotIn, int slotId, int clickedButton, int clickType); + @Accessor("guiTop") int getGuiTop(); |