aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/mixins/transformers
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-04-27 23:20:32 +0200
committerLinnea Gräf <nea@nea.moe>2024-04-27 23:20:32 +0200
commitd6fa330744ba2640bd0841fecf741f0971679e99 (patch)
tree01fc6740962ea6d6ed600279bb2155db58c02346 /src/main/java/at/hannibal2/skyhanni/mixins/transformers
parenta7d2a2c0346b864ea597300ed4eb9d024457e8b7 (diff)
downloadSkyHanni-tabcompletionapi.tar.gz
SkyHanni-tabcompletionapi.tar.bz2
SkyHanni-tabcompletionapi.zip
Fix party tab completiontabcompletionapi
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/mixins/transformers')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiChat.java62
1 files changed, 22 insertions, 40 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiChat.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiChat.java
index 97ef80364..ff744b7d0 100644
--- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiChat.java
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinGuiChat.java
@@ -1,24 +1,22 @@
package at.hannibal2.skyhanni.mixins.transformers;
import at.hannibal2.skyhanni.events.ChatHoverEvent;
-import at.hannibal2.skyhanni.features.commands.tabcomplete.TabComplete;
+import at.hannibal2.skyhanni.events.TabCompletionEvent;
import at.hannibal2.skyhanni.mixins.hooks.GuiChatHook;
-import com.google.common.collect.Lists;
import net.minecraft.client.gui.GuiChat;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.util.ChatComponentText;
-import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
-import org.apache.commons.lang3.StringUtils;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
+import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
-import java.util.List;
+import java.util.Arrays;
@Mixin(GuiChat.class)
public class MixinGuiChat {
@@ -26,41 +24,25 @@ public class MixinGuiChat {
@Shadow
protected GuiTextField inputField;
- @Shadow
- private boolean waitingOnAutocomplete;
-
- @Shadow
- private boolean playerNamesFound;
-
- @Shadow
- private List<String> foundPlayerNames = Lists.newArrayList();
-
- @Inject(method = "onAutocompleteResponse", at = @At(value = "HEAD"), cancellable = true)
- private void renderItemOverlayPost(String[] originalArray, CallbackInfo ci) {
-
- if (this.waitingOnAutocomplete) {
- String[] result = TabComplete.handleTabComplete(this.inputField.getText(), originalArray);
- if (result == null) return;
- ci.cancel();
-
- this.playerNamesFound = false;
- this.foundPlayerNames.clear();
- for (String s : result) {
- if (!s.isEmpty()) {
- this.foundPlayerNames.add(s);
- }
- }
-
- String s1 = this.inputField.getText().substring(this.inputField.func_146197_a(-1, this.inputField.getCursorPosition(), false));
- String s2 = StringUtils.getCommonPrefix(result);
- s2 = EnumChatFormatting.getTextWithoutFormattingCodes(s2);
- if (!s2.isEmpty() && !s1.equalsIgnoreCase(s2)) {
- this.inputField.deleteFromCursor(this.inputField.func_146197_a(-1, this.inputField.getCursorPosition(), false) - this.inputField.getCursorPosition());
- this.inputField.writeText(s2);
- } else if (!this.foundPlayerNames.isEmpty()) {
- this.playerNamesFound = true;
- }
- }
+ @ModifyVariable(
+ method = "onAutocompleteResponse",
+ at = @At(
+ value = "SKYHANNI_FORLOOP_LOCAL_VAR",
+ shift = At.Shift.BEFORE,
+ args = "lvIndex=1"
+ ),
+ index = 1,
+ argsOnly = true
+ )
+ private String[] renderItemOverlayPost(String[] originalArray) {
+ String inputFieldText = this.inputField.getText();
+ String beforeCursor = inputFieldText.substring(0, this.inputField.getCursorPosition());
+ TabCompletionEvent tabCompletionEvent = new TabCompletionEvent(beforeCursor, inputFieldText, Arrays.asList(originalArray));
+ tabCompletionEvent.postAndCatch();
+ String[] newSuggestions = tabCompletionEvent.intoSuggestionArray();
+ if (newSuggestions == null)
+ newSuggestions = originalArray;
+ return newSuggestions;
}
@Inject(method = "drawScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiChat;handleComponentHover(Lnet/minecraft/util/IChatComponent;II)V"), locals = LocalCapture.CAPTURE_FAILHARD)