aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/BetterSignEditing.kt75
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/PasteIntoSigns.kt29
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt6
5 files changed, 82 insertions, 36 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
index 5b11e02cc..89061d433 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
@@ -233,7 +233,7 @@ import at.hannibal2.skyhanni.features.misc.MovementSpeedDisplay
import at.hannibal2.skyhanni.features.misc.NonGodPotEffectDisplay
import at.hannibal2.skyhanni.features.misc.ParticleHider
import at.hannibal2.skyhanni.features.misc.PartyMemberOutlines
-import at.hannibal2.skyhanni.features.misc.PasteIntoSigns
+import at.hannibal2.skyhanni.features.misc.BetterSignEditing
import at.hannibal2.skyhanni.features.misc.PatcherSendCoordinates
import at.hannibal2.skyhanni.features.misc.PetCandyUsedDisplay
import at.hannibal2.skyhanni.features.misc.PetExpTooltip
@@ -553,7 +553,7 @@ class SkyHanniMod {
loadModule(ComposterDisplay())
loadModule(GardenComposterInventoryFeatures())
loadModule(MinionCollectLogic())
- loadModule(PasteIntoSigns())
+ loadModule(BetterSignEditing())
loadModule(PatcherSendCoordinates())
loadModule(EstimatedItemValue)
loadModule(EstimatedWardrobePrice())
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java
index 47dcf1ed4..53a70019b 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java
@@ -139,10 +139,10 @@ public class MiscConfig {
public boolean hideFireOverlay = false;
@Expose
- @ConfigOption(name = "Paste Into Signs", desc = "Allows you to paste the clipboard into signs when you press Ctrl + V.")
+ @ConfigOption(name = "Better Sign Editing", desc = "Allows pasting (Ctrl+V), copying (Ctrl+C), and deleting whole words/lines (Ctrl+Backspace/Ctrl+Shift+Backspace) in signs.")
@ConfigEditorBoolean
@FeatureToggle
- public boolean pasteIntoSigns = true;
+ public boolean betterSignEditing = true;
@Expose
@ConfigOption(name = "Movement Speed", desc = "Show the player movement speed in blocks per second.")
diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/BetterSignEditing.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/BetterSignEditing.kt
new file mode 100644
index 000000000..1fffb43eb
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/misc/BetterSignEditing.kt
@@ -0,0 +1,75 @@
+package at.hannibal2.skyhanni.features.misc
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
+import at.hannibal2.skyhanni.events.LorenzTickEvent
+import at.hannibal2.skyhanni.mixins.transformers.AccessorGuiEditSign
+import at.hannibal2.skyhanni.utils.ClipboardUtils
+import at.hannibal2.skyhanni.utils.KeyboardManager
+import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.OSUtils
+import kotlinx.coroutines.launch
+import net.minecraft.client.Minecraft
+import net.minecraft.client.gui.GuiScreen
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import org.lwjgl.input.Keyboard
+
+class BetterSignEditing {
+ private var pasteLastClicked = false
+ private var copyLastClicked = false
+ private var deleteWordLastClicked = false
+
+ @SubscribeEvent
+ fun onTick(event: LorenzTickEvent) {
+ if (!LorenzUtils.onHypixel) return
+ if (!SkyHanniMod.feature.misc.betterSignEditing) return
+
+ val gui = Minecraft.getMinecraft().currentScreen
+ checkPaste()
+ checkCopying(gui)
+ checkDeleting(gui)
+ }
+
+ private fun checkDeleting(gui: GuiScreen?) {
+ val deleteWordClicked = Keyboard.KEY_BACK.isKeyHeld() && KeyboardManager.isModifierKeyDown()
+ if (!deleteWordLastClicked && deleteWordClicked && gui is AccessorGuiEditSign) {
+ SkyHanniMod.coroutineScope.launch {
+ val newLine = if (KeyboardManager.isShiftKeyDown()) "" else {
+ val currentLine = gui.tileSign.signText[gui.editLine].unformattedText
+ val lastSpaceIndex = currentLine.lastIndexOf(' ')
+ if (lastSpaceIndex >= 0) currentLine.substring(0, lastSpaceIndex + 1) else ""
+ }
+ LorenzUtils.setTextIntoSign(newLine, gui.editLine)
+ }
+ }
+ deleteWordLastClicked = deleteWordClicked
+ }
+
+ private fun checkCopying(gui: GuiScreen?) {
+ val copyClicked = KeyboardManager.isCopyingKeysDown()
+ if (!copyLastClicked && copyClicked && gui is AccessorGuiEditSign) {
+ SkyHanniMod.coroutineScope.launch {
+ ClipboardUtils.copyToClipboard(gui.tileSign.signText[gui.editLine].unformattedText)
+ }
+ }
+ copyLastClicked = copyClicked
+ }
+
+ private fun checkPaste() {
+ val pasteClicked = KeyboardManager.isPastingKeysDown()
+ if (!pasteLastClicked && pasteClicked) {
+ SkyHanniMod.coroutineScope.launch {
+ OSUtils.readFromClipboard()?.let {
+ LorenzUtils.addTextIntoSign(it)
+ }
+ }
+ }
+ pasteLastClicked = pasteClicked
+ }
+
+ @SubscribeEvent
+ fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
+ event.move(16, "misc.pasteIntoSigns", "misc.betterSignEditing")
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/PasteIntoSigns.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/PasteIntoSigns.kt
deleted file mode 100644
index 5bedd57cc..000000000
--- a/src/main/java/at/hannibal2/skyhanni/features/misc/PasteIntoSigns.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-package at.hannibal2.skyhanni.features.misc
-
-import at.hannibal2.skyhanni.SkyHanniMod
-import at.hannibal2.skyhanni.events.LorenzTickEvent
-import at.hannibal2.skyhanni.utils.KeyboardManager
-import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.OSUtils
-import kotlinx.coroutines.launch
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-
-class PasteIntoSigns {
- private var lastClicked = false
-
- @SubscribeEvent
- fun onTick(event: LorenzTickEvent) {
- if (!LorenzUtils.onHypixel) return
- if (!SkyHanniMod.feature.misc.pasteIntoSigns) return
-
- val currentlyClicked = KeyboardManager.isPastingKeysDown()
- if (!lastClicked && currentlyClicked) {
- SkyHanniMod.coroutineScope.launch {
- OSUtils.readFromClipboard()?.let {
- LorenzUtils.addTextIntoSign(it.take(15))
- }
- }
- }
- lastClicked = currentlyClicked
- }
-} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
index 190d093a3..a216b88e1 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
@@ -287,10 +287,10 @@ object LorenzUtils {
}
}
- fun setTextIntoSign(text: String) {
+ fun setTextIntoSign(text: String, line: Int = 0) {
val gui = Minecraft.getMinecraft().currentScreen
if (gui !is AccessorGuiEditSign) return
- gui.tileSign.signText[0] = ChatComponentText(text)
+ gui.tileSign.signText[line] = ChatComponentText(text)
}
fun addTextIntoSign(addedText: String) {
@@ -299,7 +299,7 @@ object LorenzUtils {
val lines = gui.tileSign.signText
val index = gui.editLine
val text = lines[index].unformattedText + addedText
- lines[index] = ChatComponentText(text.capAtMinecraftLength(90))
+ lines[index] = ChatComponentText(text.capAtMinecraftLength(91))
}
/**