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

Commit 2de5c80

Browse files
committed
GuiChatBridge now works
1 parent bb00c6c commit 2de5c80

File tree

6 files changed

+245
-121
lines changed

6 files changed

+245
-121
lines changed
Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,67 @@
11
package org.devinprogress.YAIF.Bridges;
22

3+
import net.minecraft.client.Minecraft;
34
import net.minecraft.client.gui.GuiChat;
45
import net.minecraft.client.gui.GuiScreen;
56
import net.minecraft.client.gui.GuiTextField;
67

78
import javax.swing.*;
9+
import javax.swing.event.DocumentEvent;
10+
import javax.swing.event.DocumentListener;
11+
import java.awt.*;
12+
import java.awt.event.KeyEvent;
13+
import java.util.Collections;
814

915
/**
1016
* Created by recursiveg on 14-9-11.
1117
*/
1218
public abstract class BaseActionBridge {
19+
protected boolean textChangedByBridge=false;
20+
protected void setListenDocumentEvent(JTextField textField){
21+
textField.getDocument().addDocumentListener(new DocumentListener() {
22+
@Override
23+
public void insertUpdate(DocumentEvent e) {
24+
if(!textChangedByBridge){
25+
textUpdated();
26+
}
27+
textChangedByBridge=false;
28+
}
29+
30+
@Override
31+
public void removeUpdate(DocumentEvent e) {
32+
if(!textChangedByBridge){
33+
textUpdated();
34+
}
35+
textChangedByBridge=false;
36+
}
37+
38+
@Override
39+
public void changedUpdate(DocumentEvent e) {
40+
}
41+
});
42+
}
43+
44+
protected void textUpdated(){}
45+
46+
public boolean needShow(){
47+
return true;
48+
}
1349
public void bindKeys(JTextField textField){
1450
textField.getInputMap().clear();
1551
textField.getActionMap().clear();
52+
textField.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
53+
textField.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
1654
}
1755
public void unlink(){ }
18-
public void onTabComplete(GuiChat chatScreen){ }
56+
public void onTabComplete(GuiChat chatScreen){
57+
throw new RuntimeException("WTF TabComplete?!");
58+
}
59+
60+
protected static void bindKey(JTextField txt,int key,Object unique,AbstractAction action){
61+
txt.getInputMap().put(KeyStroke.getKeyStroke(key,0),unique);
62+
txt.getActionMap().put(unique,action);
63+
}
64+
protected void dispatch(Runnable action){
65+
Minecraft.getMinecraft().addScheduledTask(action);
66+
}
1967
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.devinprogress.YAIF.Bridges;
2+
3+
import net.minecraft.client.gui.GuiScreen;
4+
import org.devinprogress.YAIF.InputFieldWrapper;
5+
6+
/**
7+
* Created by recursiveg on 14-11-12.
8+
*/
9+
public class CommonBridgeNoField extends BaseActionBridge{
10+
public CommonBridgeNoField(GuiScreen screen,InputFieldWrapper wrapper){
11+
12+
}
13+
}

src/main/java/org/devinprogress/YAIF/Bridges/CommonBridge.java renamed to src/main/java/org/devinprogress/YAIF/Bridges/CommonBridgeTextField.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@
1111
/**
1212
* Created by recursiveg on 14-9-11.
1313
*/
14-
public class CommonBridge extends BaseActionBridge {
14+
public class CommonBridgeTextField extends BaseActionBridge {
1515
private GuiScreen scr=null;
16-
private Method M_keyTyped=null;
16+
private GuiTextField txt=null;
1717
private InputFieldWrapper wrapper=null;
18-
public CommonBridge(GuiScreen screen,InputFieldWrapper wrapper){
18+
private Method M_keyTyped=null;
19+
20+
public CommonBridgeTextField(GuiScreen screen,GuiTextField textField,InputFieldWrapper wrapper){
21+
YetAnotherInputFix.log("CommonBridgeTextField Initialized. %s",this);
1922
scr=screen;
2023
this.wrapper=wrapper;
2124
try{

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

Lines changed: 108 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
import net.minecraft.client.gui.GuiScreen;
66
import net.minecraft.client.gui.GuiTextField;
77
import org.devinprogress.YAIF.InputFieldWrapper;
8+
import org.devinprogress.YAIF.YetAnotherInputFix;
89
import org.lwjgl.input.Keyboard;
910

1011
import javax.swing.*;
12+
import java.awt.event.ActionEvent;
13+
import java.awt.event.KeyEvent;
1114

1215
/**
1316
* Created by recursiveg on 14-9-13.
@@ -17,102 +20,131 @@ public class GuiChatBridge extends BaseActionBridge {
1720
private GuiTextField txt=null;
1821
private InputFieldWrapper wrapper=null;
1922

20-
private boolean isCmd=false;
21-
//private static Method keyTypedMethod=null;
22-
2323
public GuiChatBridge(GuiTextField textField,GuiChat screen,InputFieldWrapper wrapper){
2424
this.screen=screen;
2525
txt=textField;
2626
this.wrapper=wrapper;
27-
//wrapper.DoActions(ActionFeedback.SetText,txt.getText());
28-
29-
if (screen.defaultInputFieldText.equals("/"))
30-
isCmd=true;
31-
else
32-
isCmd=false;
3327
}
34-
/*
35-
@Override
36-
public ActionFeedback onEnter(JTextField txt) { //send
37-
this.txt.setText(txt.getText());
38-
screen.keyTyped('\n', 28);//Magic Numbers can be found at http://minecraft.gamepedia.com/Key_Codes
39-
Keyboard.enableRepeatEvents(false);
40-
FMLClientHandler.instance().getClient().ingameGUI.getChatGUI().resetScroll();
4128

42-
return ActionFeedback.Quit;
29+
@Override
30+
public boolean needShow(){
31+
return !screen.defaultInputFieldText.equals("/");
4332
}
4433

4534
@Override
46-
public ActionFeedback onEsc(JTextField txt) {
47-
//SetInGameFocus will close the GuiChat.
48-
Keyboard.enableRepeatEvents(false);
49-
FMLClientHandler.instance().getClient().ingameGUI.getChatGUI().resetScroll();
50-
return ActionFeedback.Quit;
35+
public void bindKeys(JTextField tf){
36+
super.bindKeys(tf);
37+
38+
bindKey(tf, KeyEvent.VK_ENTER,"enter", new AbstractAction() {
39+
@Override
40+
public void actionPerformed(ActionEvent e) {
41+
txt.setText(wrapper.getText());
42+
screen.keyTyped('\n', 28);
43+
wrapper.bridgeQuit();
44+
}
45+
});
46+
47+
bindKey(tf, KeyEvent.VK_ESCAPE, "esc", new AbstractAction() {
48+
@Override
49+
public void actionPerformed(ActionEvent e) {
50+
YetAnotherInputFix.log("GuiChatBridge ESC Pressed");
51+
wrapper.bridgeQuit();
52+
}
53+
});
54+
55+
bindKey(tf,KeyEvent.VK_UP,"up",new AbstractAction() {
56+
@Override
57+
public void actionPerformed(ActionEvent e) {
58+
dispatch(new Runnable() {
59+
@Override
60+
public void run() {
61+
screen.keyTyped(' ', 200);
62+
SwingUtilities.invokeLater(new Runnable() {
63+
@Override
64+
public void run() {
65+
textChangedByBridge=true;
66+
wrapper.setText(txt.getText());
67+
}
68+
});
69+
}
70+
});
71+
}
72+
});
73+
74+
bindKey(tf,KeyEvent.VK_DOWN,"down",new AbstractAction() {
75+
@Override
76+
public void actionPerformed(ActionEvent e) {
77+
dispatch(new Runnable() {
78+
@Override
79+
public void run() {
80+
screen.keyTyped(' ', 208);
81+
SwingUtilities.invokeLater(new Runnable() {
82+
@Override
83+
public void run() {
84+
textChangedByBridge=true;
85+
wrapper.setText(txt.getText());
86+
}
87+
});
88+
}
89+
});
90+
}
91+
});
92+
93+
bindKey(tf, KeyEvent.VK_TAB, "tab", new AbstractAction() {
94+
@Override
95+
public void actionPerformed(ActionEvent e) {
96+
final int cursorPos=wrapper.getCaretPosition();
97+
dispatch(new Runnable() {
98+
@Override
99+
public void run() {
100+
txt.setCursorPosition(cursorPos);
101+
screen.keyTyped('\t',15);
102+
final String str=txt.getText();
103+
final int pos=txt.getCursorPosition();
104+
SwingUtilities.invokeLater(new Runnable() {
105+
@Override
106+
public void run() {
107+
textChangedByBridge=true;
108+
wrapper.setText(str,pos);
109+
}
110+
});
111+
}
112+
});
113+
}
114+
});
115+
116+
setListenDocumentEvent(tf);
51117
}
52118

53119
@Override
54-
public ActionFeedback onChange(final JTextField txt) {
55-
final String str;
56-
if(txt.getText().length()>100){
57-
str=txt.getText().substring(0,100);
120+
protected void textUpdated(){
121+
final String str=wrapper.getText();
122+
if(str.length()>100){
58123
SwingUtilities.invokeLater(new Runnable() {
59124
@Override
60125
public void run() {
61-
txt.setText(str);
126+
textChangedByBridge=true;
127+
wrapper.setText(str.substring(0,100));
62128
}
63129
});
64-
}else{
65-
str=txt.getText();
130+
this.txt.setText(str.substring(0,100));
131+
}else {
132+
this.txt.setText(str);
66133
}
67-
this.txt.setText(str);
68-
return BaseActionBridge.ActionFeedback.Nothing;
69-
}
70-
71-
@Override
72-
public ActionFeedback onTab(JTextField txt) {
73-
//You have to listen to S3APacketTabComplete to get the compliance result.
74-
//YetAnotherInputFix.logger.info("Tab Completion not finished yet.");
75-
int cursorPos=txt.getCaretPosition();
76-
this.txt.setCursorPosition(cursorPos);
77-
screen.keyTyped('\t',15);
78-
wrapper.setTextNoEvent(this.txt.getText());
79-
//TODO: Finish it.
80-
return null;//return null == return Nothing
81-
}
82-
83-
@Override
84-
public ActionFeedback onUp(JTextField txt) {
85-
screen.keyTyped( ' ', 200);
86-
wrapper.setTextNoEvent(this.txt.getText());
87-
return null;
88134
}
89135

90136
@Override
91-
public ActionFeedback onDown(JTextField txt) {
92-
screen.keyTyped(' ', 208);
93-
wrapper.setTextNoEvent(this.txt.getText());
94-
return null;
137+
public void onTabComplete(GuiChat screen){
138+
if(screen!=this.screen)
139+
throw new RuntimeException("WTF onTabComplete Received but screen not match?!");
140+
final String str=txt.getText();
141+
final int pos=txt.getCursorPosition();
142+
SwingUtilities.invokeLater(new Runnable() {
143+
@Override
144+
public void run() {
145+
textChangedByBridge=true;
146+
wrapper.setText(str,pos);
147+
}
148+
});
95149
}
96-
97-
@Override
98-
public ActionFeedback onBackspace(JTextField txt) {
99-
String str2=txt.getText();
100-
str2=str2.substring(0,str2.length()-1);
101-
wrapper.setTextNoEvent(str2);
102-
return onChange(txt);
103-
}
104-
105-
@Override
106-
public void onTabComplete(JTextField txt) {
107-
wrapper.setTextNoEvent(this.txt.getText());
108-
}
109-
110-
@Override
111-
public boolean sameAs(GuiScreen screen, GuiTextField txtField) {
112-
return this.screen==screen && txtField==txt;
113-
}
114-
115-
public boolean isCommand(){
116-
return isCmd;
117-
}*/
118150
}

0 commit comments

Comments
 (0)