aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2023-10-26 00:56:50 +0200
committerGitHub <noreply@github.com>2023-10-26 00:56:50 +0200
commitaa34b32d73bf8bda001693154531075132f0c8a8 (patch)
tree6579c6c5966801589bba892d3537e76ce73d1de4
parent85e0bc290675274ca70a5734bd9112a92b477e90 (diff)
downloadskyhanni-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
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/GardenConfig.java17
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorListener.kt31
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java5
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();