Skip to content

Commit b729d37

Browse files
committed
Support GeneralFeedback(1.0.0)
1 parent ad5bc18 commit b729d37

File tree

4 files changed

+69
-1
lines changed

4 files changed

+69
-1
lines changed

common/src/main/java/io/github/reserveword/imblocker/common/IMBlockerMixinPlugin.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ public class IMBlockerMixinPlugin implements IMixinConfigPlugin {
137137
if(IMBlockerCore.hasMod("armourers_workshop")) {
138138
validMixins.add("compat.AWTextInputWidgetMixin");
139139
}
140+
141+
if(IMBlockerCore.hasMod("generalfeedback")) {
142+
// validMixins.add("compat.GeneralFeedbackTextareaMixin"); Unstable Internal Implementation.
143+
}
140144
}
141145

142146
@Override

forge/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ dependencies {
6262
compileOnly fg.deobf("curse.maven:reforgedplay-mod-1018692:5629283")
6363
compileOnly fg.deobf("com.github.ReplayMod:lwjgl-utils:27dcd66")
6464
compileOnly fg.deobf("maven.modrinth:textrues-embeddium-options:0.1.1+mc1.19.2")
65+
compileOnly fg.deobf("maven.modrinth:general-feedback:XihrS83D")
6566

6667
implementation project(':common')
6768
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package io.github.reserveword.imblocker.mixin.compat;
2+
3+
import java.util.List;
4+
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Shadow;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.ModifyArgs;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
12+
import org.spongepowered.asm.mixin.injection.invoke.arg.Args;
13+
14+
import io.github.reserveword.imblocker.common.IMManager;
15+
import io.github.reserveword.imblocker.common.accessor.MinecraftClientAccessor;
16+
import io.github.reserveword.imblocker.common.gui.Point;
17+
import io.github.reserveword.imblocker.mixin.AbstractWidgetMixin;
18+
19+
//Archived Compatibility for GeneralFeedback 1.0.0
20+
@Mixin(targets = "com.sighs.generalfeedback.client.Textarea", remap = false)
21+
public abstract class GeneralFeedbackTextareaMixin extends AbstractWidgetMixin {
22+
23+
@Shadow
24+
private int lineHeight;
25+
26+
@Shadow
27+
private int scrollOffset;
28+
29+
private int imblocker$startLine;
30+
31+
private Point imblocker$caretPos = Point.TOP_LEFT;
32+
33+
@Override
34+
public void focusChanged(boolean isFocused, CallbackInfo ci) {
35+
imblocker$onFocusChanged(isFocused());
36+
}
37+
38+
@Inject(method = "cursorPositionInRendered", at = @At("HEAD"))
39+
public void updateStartLine(List<String> lines, CallbackInfoReturnable<?> cir) {
40+
int maxVisibleLines = Math.max(1, (height - 8) / lineHeight);
41+
int maxStart = Math.max(0, lines.size() - maxVisibleLines);
42+
imblocker$startLine = Math.min(Math.max(0, scrollOffset), maxStart);
43+
}
44+
45+
@ModifyArgs(method = "cursorPositionInRendered", at = @At(value = "INVOKE", target =
46+
"Lcom/sighs/generalfeedback/client/Textarea$CursorPos;<init>(ILjava/lang/String;)V"))
47+
public void updateCaretPos(Args args) {
48+
int lineIndex = args.get(0);
49+
String textBeforeCursor = args.get(1);
50+
int caretX = 4 + MinecraftClientAccessor.INSTANCE.getStringWidth(textBeforeCursor);
51+
int caretY = 4 + (lineIndex - imblocker$startLine) * lineHeight;
52+
Point currentCaretPos = new Point(getGuiScale(), caretX, caretY);
53+
if(!imblocker$caretPos.equals(currentCaretPos)) {
54+
imblocker$caretPos = currentCaretPos;
55+
IMManager.updateCompositionWindowPos();
56+
}
57+
}
58+
59+
@Override
60+
public Point getCaretPos() {
61+
return imblocker$caretPos;
62+
}
63+
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ minecraft_version_range=1.17+
1111
# mod
1212
mod_id=imblocker
1313
mod_name=IMBlocker
14-
mod_version=5.4.6
14+
mod_version=5.4.7-dev
1515
mod_logo=imblocker.png
1616
mod_description=Blocks Input Methods when you're not using it.\\n在你不打字的时候自动关闭输入法
1717
mod_url=https://github.com/reserveword/IMBlocker

0 commit comments

Comments
 (0)