Skip to content
This repository was archived by the owner on Jan 3, 2020. It is now read-only.

Commit 8a08bc4

Browse files
committed
EditSignBridge now works
1 parent 2de5c80 commit 8a08bc4

File tree

6 files changed

+80
-72
lines changed

6 files changed

+80
-72
lines changed

src/main/java/org/devinprogress/YAIF/Bridges/BaseActionBridge.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.minecraft.client.gui.GuiChat;
55
import net.minecraft.client.gui.GuiScreen;
66
import net.minecraft.client.gui.GuiTextField;
7+
import org.devinprogress.YAIF.InputFieldWrapper;
78

89
import javax.swing.*;
910
import javax.swing.event.DocumentEvent;
@@ -17,8 +18,10 @@
1718
*/
1819
public abstract class BaseActionBridge {
1920
protected boolean textChangedByBridge=false;
21+
private DocumentListener documentListener=null;
22+
2023
protected void setListenDocumentEvent(JTextField textField){
21-
textField.getDocument().addDocumentListener(new DocumentListener() {
24+
documentListener=new DocumentListener() {
2225
@Override
2326
public void insertUpdate(DocumentEvent e) {
2427
if(!textChangedByBridge){
@@ -38,7 +41,8 @@ public void removeUpdate(DocumentEvent e) {
3841
@Override
3942
public void changedUpdate(DocumentEvent e) {
4043
}
41-
});
44+
};
45+
textField.getDocument().addDocumentListener(documentListener);
4246
}
4347

4448
protected void textUpdated(){}
@@ -52,7 +56,10 @@ public void bindKeys(JTextField textField){
5256
textField.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
5357
textField.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
5458
}
55-
public void unlink(){ }
59+
public void unlink(JTextField t){
60+
if(documentListener!=null)
61+
t.getDocument().removeDocumentListener(documentListener);
62+
}
5663
public void onTabComplete(GuiChat chatScreen){
5764
throw new RuntimeException("WTF TabComplete?!");
5865
}
@@ -64,4 +71,7 @@ protected static void bindKey(JTextField txt,int key,Object unique,AbstractActio
6471
protected void dispatch(Runnable action){
6572
Minecraft.getMinecraft().addScheduledTask(action);
6673
}
74+
public void releaseObstacleFlag(){
75+
textChangedByBridge=false;
76+
}
6777
}

src/main/java/org/devinprogress/YAIF/Bridges/EditSignBridge.java

Lines changed: 58 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
import net.minecraft.client.gui.inventory.GuiEditSign;
66
import net.minecraft.tileentity.TileEntitySign;
77
import org.devinprogress.YAIF.InputFieldWrapper;
8+
import org.devinprogress.YAIF.YetAnotherInputFix;
89

910
import javax.swing.*;
11+
import java.awt.event.ActionEvent;
12+
import java.awt.event.KeyEvent;
1013

1114
/**
1215
* Created by recursiveg on 14-9-21.
@@ -23,66 +26,72 @@ public EditSignBridge(GuiEditSign gui,InputFieldWrapper w){
2326
//w.setTextNoEvent("");
2427
sign=gui.tileSign;
2528
}
26-
/*
27-
@Override
28-
public ActionFeedback onEnter(JTextField txt) {
29-
currentLine=currentLine+1&3;
30-
gui.editLine=currentLine;
31-
wrapper.setTextNoEvent(sign.signText[currentLine]);
32-
return null;
33-
}
3429

3530
@Override
36-
public ActionFeedback onEsc(JTextField txt) {
37-
//SetInGameFocus will close the GuiEditSign.
38-
return ActionFeedback.Quit;
31+
public boolean needShow(){
32+
return true;
3933
}
4034

4135
@Override
42-
public ActionFeedback onChange(JTextField txt) {
43-
if(txt.getText().length()<=15)
44-
sign.signText[currentLine]=txt.getText();
45-
else
46-
sign.signText[currentLine]=txt.getText().substring(0,15);
47-
return null;
48-
}
36+
public void bindKeys(JTextField tf){
37+
super.bindKeys(tf);
4938

50-
@Override
51-
public ActionFeedback onTab(JTextField txt) {
52-
return null;
53-
}
54-
55-
@Override
56-
public ActionFeedback onUp(JTextField txt) {
57-
currentLine=currentLine-1&3;
58-
gui.editLine=currentLine;
59-
wrapper.setTextNoEvent(sign.signText[currentLine]);
60-
return null;
61-
}
39+
bindKey(tf, KeyEvent.VK_ENTER,"enter", new AbstractAction() {
40+
@Override
41+
public void actionPerformed(ActionEvent e) {
42+
currentLine=currentLine+1&3;
43+
gui.editLine=currentLine;
44+
textChangedByBridge=true;
45+
wrapper.setText(sign.signText[currentLine]);
46+
}
47+
});
6248

63-
@Override
64-
public ActionFeedback onDown(JTextField txt) {
65-
currentLine=currentLine+1&3;
66-
gui.editLine=currentLine;
67-
wrapper.setTextNoEvent(sign.signText[currentLine]);
68-
return null;
69-
}
49+
bindKey(tf, KeyEvent.VK_ESCAPE, "esc", new AbstractAction() {
50+
@Override
51+
public void actionPerformed(ActionEvent e) {
52+
YetAnotherInputFix.log("GuiSignBridge ESC Pressed");
53+
wrapper.bridgeQuit();
54+
}
55+
});
7056

71-
@Override
72-
public ActionFeedback onBackspace(JTextField txt) {
73-
String str2=txt.getText();
74-
str2=str2.substring(0,str2.length()-1);
75-
wrapper.setTextNoEvent(str2);
76-
return onChange(txt);
77-
}
57+
bindKey(tf,KeyEvent.VK_UP,"up",new AbstractAction() {
58+
@Override
59+
public void actionPerformed(ActionEvent e) {
60+
currentLine=currentLine-1&3;
61+
gui.editLine=currentLine;
62+
textChangedByBridge=true;
63+
wrapper.setText(sign.signText[currentLine]);
64+
}
65+
});
7866

79-
@Override
80-
public void onTabComplete(JTextField txt) {
67+
bindKey(tf,KeyEvent.VK_DOWN,"down",new AbstractAction() {
68+
@Override
69+
public void actionPerformed(ActionEvent e) {
70+
currentLine=currentLine+1&3;
71+
gui.editLine=currentLine;
72+
textChangedByBridge=true;
73+
wrapper.setText(sign.signText[currentLine]);
74+
}
75+
});
8176

77+
setListenDocumentEvent(tf);
8278
}
8379

8480
@Override
85-
public boolean sameAs(GuiScreen screen, GuiTextField txtField) {
86-
return screen==gui;
87-
}*/
81+
protected void textUpdated(){
82+
//YetAnotherInputFix.log("EditSignBridge textUpdate Invoked");
83+
final String str=wrapper.getText();
84+
if(str.length()>15){
85+
SwingUtilities.invokeLater(new Runnable() {
86+
@Override
87+
public void run() {
88+
textChangedByBridge=true;
89+
wrapper.setText(str.substring(0,15));
90+
}
91+
});
92+
sign.signText[currentLine]=str.substring(0,15);
93+
}else {
94+
sign.signText[currentLine]=str;
95+
}
96+
}
8897
}

src/main/java/org/devinprogress/YAIF/GuiStateManager.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class GuiStateManager {
2323
private GuiScreen currentScreen=null,incomingScreen=null;
2424
private GuiTextField currentTextField=null;
2525
private BaseActionBridge bridge=null;
26-
private Set<Class> InputableGui=new HashSet<Class>();
26+
private Set<Class> InputableGui=new HashSet<Class>(){{add(GuiEditSign.class);add(GuiScreenBook.class);}};
2727
private Set<Class> UnInputableGui=new HashSet<Class>();
2828

2929
private GuiStateManager(){
@@ -85,7 +85,7 @@ else if(hasGuiTextField(currentScreen))
8585
return new CommonBridgeNoField(currentScreen,wrapper);
8686
}
8787

88-
public void onTabComplete(GuiScreen screen) {
88+
public void onTabCompletePacket(GuiScreen screen) {
8989
GuiChat chatScreen=null;
9090
if(screen instanceof GuiChat)
9191
chatScreen=(GuiChat)screen;
@@ -121,6 +121,8 @@ public void postInitGuiEvent(GuiScreen screen) {
121121

122122
public void nullGuiOpenEvent(GuiScreen currentScreen) {
123123
wrapper.closeInputField();
124+
if(currentScreen instanceof GuiEditSign)
125+
YetAnotherInputFix.needFocus=true;
124126
bridge=null;
125127
this.currentScreen=null;
126128
this.currentTextField=null;

src/main/java/org/devinprogress/YAIF/InputFieldWrapper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void setupBridge(BaseActionBridge bridge){
9191

9292
public void releaseCurrentBridge(){
9393
if(bridge!=null) {
94-
bridge.unlink();
94+
bridge.unlink(textField);
9595
bridge = null;
9696
}
9797
}
@@ -156,6 +156,8 @@ public String getText(){
156156
}
157157

158158
public void setText(String text){
159+
if(text.length()==0&&textField.getText().length()==0)
160+
bridge.releaseObstacleFlag();
159161
textField.setText(text);
160162
textField.setCaretPosition(text.length());
161163
}

src/main/java/org/devinprogress/YAIF/Transformer/ASMTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,6 @@ public static void hookGuiTextFocusChange(MethodNode mn){
8484
public static void hookPostTabComplete(MethodNode mn){
8585
AbstractInsnNode n=ASMHelper.getNthInsnNode(mn,Opcodes.INVOKEVIRTUAL,2);
8686
ASMHelper.InsertInvokeStaticAfter(mn,n,"org.devinprogress.YAIF.YetAnotherInputFix",
87-
"onTabComplete","()V");
87+
"onTabCompletePacket","()V");
8888
}
8989
}

src/main/java/org/devinprogress/YAIF/YetAnotherInputFix.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,17 @@
11
package org.devinprogress.YAIF;
22

33
import cpw.mods.fml.client.FMLClientHandler;
4-
import cpw.mods.fml.client.registry.ClientRegistry;
54
import cpw.mods.fml.common.*;
65
import cpw.mods.fml.common.event.FMLInitializationEvent;
76
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
8-
import cpw.mods.fml.common.gameevent.InputEvent;
97
import cpw.mods.fml.common.gameevent.TickEvent;
10-
import net.minecraft.client.gui.GuiNewChat;
11-
import net.minecraft.client.gui.GuiScreen;
12-
import net.minecraft.client.gui.GuiScreenBook;
138
import net.minecraft.client.gui.GuiTextField;
14-
import net.minecraft.client.gui.inventory.GuiEditSign;
15-
import net.minecraft.client.settings.KeyBinding;
169
import net.minecraftforge.client.event.GuiOpenEvent;
1710
import net.minecraftforge.client.event.GuiScreenEvent;
1811
import net.minecraftforge.common.MinecraftForge;
1912
import org.apache.logging.log4j.LogManager;
20-
import org.lwjgl.input.Keyboard;
2113
import org.lwjgl.opengl.Display;
2214

23-
import java.lang.reflect.Field;
24-
import java.util.*;
25-
import java.util.logging.Logger;
26-
2715
/**
2816
* Created by recursiveg on 14-9-10.
2917
*/
@@ -53,7 +41,7 @@ public static void TextFieldFocusChange(GuiTextField textField, boolean isFocuse
5341
//called from net.minecraft.client.network.NetHandlerPlayClient.handleTabComplete
5442
public static void onTabComplete(){
5543
log("TabComplete Packet Received");
56-
stateMachine.onTabComplete(FMLClientHandler.instance().getClient().currentScreen);
44+
stateMachine.onTabCompletePacket(FMLClientHandler.instance().getClient().currentScreen);
5745
}
5846

5947
@Mod.EventHandler
@@ -83,9 +71,6 @@ public void onGuiOpen(GuiOpenEvent e){
8371
}
8472
}
8573

86-
87-
88-
8974
//Multi-threading is a problem
9075
//TODO: UGLY PATCH!!!
9176
//TODO: use ASM to reduce potential lag

0 commit comments

Comments
 (0)