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

Commit 99c33b9

Browse files
committed
CommonBridges
1 parent 7cf12e8 commit 99c33b9

File tree

7 files changed

+171
-71
lines changed

7 files changed

+171
-71
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
public abstract class BaseActionBridge {
2020
protected boolean textChangedByBridge=false;
2121
private DocumentListener documentListener=null;
22-
22+
public void postGuiInit(){}
2323
protected void setListenDocumentEvent(JTextField textField){
2424
documentListener=new DocumentListener() {
2525
@Override

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

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,72 @@
22

33
import net.minecraft.client.gui.GuiScreen;
44
import org.devinprogress.YAIF.InputFieldWrapper;
5+
import org.devinprogress.YAIF.YetAnotherInputFix;
6+
7+
import javax.swing.*;
8+
import java.awt.event.ActionEvent;
9+
import java.awt.event.KeyEvent;
10+
import java.lang.reflect.Method;
511

612
/**
713
* Created by recursiveg on 14-11-12.
814
*/
915
public class CommonBridgeNoField extends BaseActionBridge{
16+
private final GuiScreen gui;
17+
private final InputFieldWrapper wrapper;
18+
private Method keyTypedMethod=null;
19+
1020
public CommonBridgeNoField(GuiScreen screen,InputFieldWrapper wrapper){
21+
YetAnotherInputFix.log("CommonBridgeNoField Initialized. %s", this);
22+
gui=screen;
23+
this.wrapper=wrapper;
24+
try{
25+
keyTypedMethod=gui.getClass().getDeclaredMethod(YetAnotherInputFix.ObfuscatedEnv?"func_73869_a":"keyTyped",char.class,int.class);
26+
keyTypedMethod.setAccessible(true);
27+
}catch(Exception e){
28+
e.printStackTrace();
29+
}
30+
}
31+
32+
@Override
33+
public boolean needShow(){
34+
if(keyTypedMethod==null){
35+
YetAnotherInputFix.log("failed to determine keyTypedMethod @%s",gui);
36+
return false;
37+
}
38+
return true;
39+
}
40+
41+
@Override
42+
public void bindKeys(JTextField tf){
43+
super.bindKeys(tf);
44+
45+
bindKey(tf, KeyEvent.VK_ENTER,"enter", new AbstractAction() {
46+
@Override
47+
public void actionPerformed(ActionEvent e) {
48+
final String str=wrapper.getText();
49+
//textChangedByBridge=true;
50+
wrapper.setText("");
51+
dispatch(new Runnable() {
52+
@Override
53+
public void run() {
54+
try{
55+
for(int i=0;i<str.length();++i)
56+
keyTypedMethod.invoke(gui,str.charAt(i),-1);
57+
}catch(Exception e){
58+
e.printStackTrace();
59+
}
60+
}
61+
});
62+
}
63+
});
1164

65+
bindKey(tf, KeyEvent.VK_ESCAPE, "esc", new AbstractAction() {
66+
@Override
67+
public void actionPerformed(ActionEvent e) {
68+
YetAnotherInputFix.log("CommonBridgeNoField ESC Pressed");
69+
wrapper.bridgeQuit();
70+
}
71+
});
1272
}
1373
}

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

Lines changed: 66 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2,101 +2,108 @@
22

33
import net.minecraft.client.gui.GuiScreen;
44
import net.minecraft.client.gui.GuiTextField;
5+
import org.devinprogress.YAIF.GuiStateManager;
56
import org.devinprogress.YAIF.InputFieldWrapper;
67
import org.devinprogress.YAIF.YetAnotherInputFix;
78

89
import javax.swing.*;
10+
import java.awt.event.ActionEvent;
11+
import java.awt.event.KeyEvent;
912
import java.lang.reflect.Method;
1013

1114
/**
1215
* Created by recursiveg on 14-9-11.
1316
*/
17+
1418
public class CommonBridgeTextField extends BaseActionBridge {
1519
private GuiScreen scr=null;
1620
private GuiTextField txt=null;
1721
private InputFieldWrapper wrapper=null;
18-
private Method M_keyTyped=null;
22+
private Method keyTypedMethod=null;
1923

2024
public CommonBridgeTextField(GuiScreen screen,GuiTextField textField,InputFieldWrapper wrapper){
2125
YetAnotherInputFix.log("CommonBridgeTextField Initialized. %s",this);
2226
scr=screen;
2327
this.wrapper=wrapper;
24-
try{
25-
M_keyTyped=scr.getClass().getDeclaredMethod(YetAnotherInputFix.ObfuscatedEnv?"func_73869_a":"keyTyped",char.class,int.class);
26-
M_keyTyped.setAccessible(true);
27-
}catch(Exception e){
28-
e.printStackTrace();
29-
}
30-
}
28+
txt=textField;
3129

32-
/*
33-
@Override
34-
public BaseActionBridge.ActionFeedback onEnter(JTextField txt) { //send msg
30+
this.wrapper=wrapper;
3531
try{
36-
String str=txt.getText();
37-
if(str.length()==0){
38-
M_keyTyped.invoke(scr,'\n',28);
39-
}else{
40-
for(int i=0;i<str.length();i++){
41-
M_keyTyped.invoke(scr,str.charAt(i),-1);
42-
}
43-
wrapper.setTextNoEvent("");
44-
}
32+
keyTypedMethod=scr.getClass().getDeclaredMethod(YetAnotherInputFix.ObfuscatedEnv?"func_73869_a":"keyTyped",char.class,int.class);
33+
keyTypedMethod.setAccessible(true);
4534
}catch(Exception e){
4635
e.printStackTrace();
4736
}
48-
return null;
4937
}
5038

5139
@Override
52-
public BaseActionBridge.ActionFeedback onEsc(JTextField txt) {
53-
return BaseActionBridge.ActionFeedback.Nothing;
54-
}
55-
56-
@Override
57-
public BaseActionBridge.ActionFeedback onChange(JTextField txt) {
58-
return BaseActionBridge.ActionFeedback.Nothing;
40+
public boolean needShow(){
41+
if(keyTypedMethod==null){
42+
YetAnotherInputFix.log("failed to determine keyTypedMethod @%s",scr);
43+
return false;
44+
}
45+
//return System.getProperty("YAIF.useCommonBridgeTextField","false").equals("true");
46+
return true;
5947
}
6048

6149
@Override
62-
public BaseActionBridge.ActionFeedback onTab(JTextField txt) {
63-
return BaseActionBridge.ActionFeedback.Nothing;
64-
}
50+
public void bindKeys(JTextField tf){
51+
super.bindKeys(tf);
6552

66-
@Override
67-
public ActionFeedback onUp(JTextField txt) {
68-
return null;
69-
}
53+
bindKey(tf, KeyEvent.VK_ENTER,"enter", new AbstractAction() {
54+
@Override
55+
public void actionPerformed(ActionEvent e) {
56+
txt.setText(wrapper.getText());
57+
GuiStateManager.getInstance().TextFieldFocusChanged(scr,txt,false);
58+
wrapper.closeInputField();
59+
}
60+
});
7061

71-
@Override
72-
public ActionFeedback onDown(JTextField txt) {
73-
return null;
62+
bindKey(tf, KeyEvent.VK_ESCAPE, "esc", new AbstractAction() {
63+
@Override
64+
public void actionPerformed(ActionEvent e) {
65+
txt.setText(wrapper.getText());
66+
GuiStateManager.getInstance().TextFieldFocusChanged(scr,txt,false);
67+
wrapper.closeInputField();
68+
}
69+
});
70+
wrapper.setText(txt.getText());
71+
setListenDocumentEvent(tf);
7472
}
7573

7674
@Override
77-
public ActionFeedback onBackspace(JTextField txt) {
78-
try{
79-
String str=txt.getText();
80-
if(str.length()==0) {
81-
M_keyTyped.invoke(scr, ' ', 14);
82-
}else{
83-
String str2=txt.getText();
84-
str2=str2.substring(0,str2.length()-1);
85-
wrapper.setTextNoEvent(str2);
86-
}
87-
}catch(Exception e){
88-
e.printStackTrace();
75+
protected void textUpdated(){
76+
String str=wrapper.getText();
77+
int lim=txt.getMaxStringLength();
78+
final String finStr;
79+
if(str.length()>lim){
80+
finStr=str.substring(0,lim);
81+
SwingUtilities.invokeLater(new Runnable() {
82+
@Override
83+
public void run() {
84+
textChangedByBridge=true;
85+
wrapper.setText(finStr);
86+
}
87+
});
88+
}else{
89+
finStr=str;
8990
}
90-
return null;
91+
dispatch(new Runnable() {
92+
@Override
93+
public void run() {
94+
txt.setText(finStr.substring(0, finStr.length() - 1));
95+
try {
96+
keyTypedMethod.invoke(scr, finStr.charAt(finStr.length() - 1), -1);
97+
} catch (Exception e) {
98+
e.printStackTrace();
99+
}
100+
}
101+
});
91102
}
92103

93104
@Override
94-
public void onTabComplete(JTextField txt) {
95-
105+
public void postGuiInit(){
106+
textChangedByBridge=true;
107+
wrapper.setText(txt.getText());
96108
}
97-
98-
@Override
99-
public boolean sameAs(GuiScreen screen, GuiTextField txtField) {
100-
return scr==screen;
101-
}*/
102-
}
109+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,6 @@ public void run() {
5858
}else {
5959
searchField.setText(str);
6060
}
61-
//gui.updateCreativeSearch();
61+
gui.updateCreativeSearch();
6262
}
6363
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
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-13.
8+
*/
9+
public class GuiBookBridge extends CommonBridgeNoField{
10+
11+
public GuiBookBridge(GuiScreen screen, InputFieldWrapper wrapper) {
12+
super(screen, wrapper);
13+
}
14+
15+
}

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

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
/**
1919
* Created by recursiveg on 14-11-11.
2020
*/
21+
22+
/* NEVER try to figure out how this f**king machine works */
2123
public class GuiStateManager {
2224
private static GuiStateManager INSTANCE=null;
2325
private InputFieldWrapper wrapper=null;
@@ -85,9 +87,11 @@ else if(currentScreen instanceof GuiEditSign)
8587
return new EditSignBridge((GuiEditSign)currentScreen,wrapper);
8688
else if(currentScreen instanceof GuiContainerCreative)
8789
return new CreativeInventoryBridge((GuiContainerCreative)currentScreen,currentTextField,wrapper);
90+
else if(currentScreen instanceof GuiScreenBook)
91+
return new GuiBookBridge(currentScreen,wrapper);
8892
else if(hasGuiTextField(currentScreen))
8993
return new CommonBridgeTextField(currentScreen,currentTextField,wrapper);
90-
else
94+
else//How could this be possible?!
9195
return new CommonBridgeNoField(currentScreen,wrapper);
9296
}
9397

@@ -103,8 +107,10 @@ public void onTabCompletePacket(GuiScreen screen) {
103107
public void preInitGuiEvent(GuiScreen gui){
104108
if(hasGuiTextField(gui))
105109
incomingScreen=gui;
106-
else
107-
incomingScreen=null;
110+
else {
111+
incomingScreen = null;
112+
wrapper.closeInputField();
113+
}
108114
}
109115

110116
public void postInitGuiEvent(GuiScreen screen) {
@@ -114,17 +120,26 @@ public void postInitGuiEvent(GuiScreen screen) {
114120
bridge=getNewBridge();
115121
wrapper.setupBridge(bridge);
116122
}
117-
if (incomingScreen==screen) {
118-
currentScreen = incomingScreen;
119-
incomingScreen = null;
120-
}else if(currentScreen!=null){
123+
/*
124+
if(currentScreen!=null)
121125
return;
122-
}else if(bridge==null){
126+
127+
if(bridge==null){
123128
wrapper.closeInputField();
124129
bridge=null;
125130
this.currentScreen=null;
126131
this.currentTextField=null;
127132
this.incomingScreen=null;
133+
}else{
134+
bridge.postGuiInit();
135+
}
136+
*/
137+
138+
if (incomingScreen==screen) {
139+
currentScreen = incomingScreen;
140+
incomingScreen = null;
141+
}else if(bridge!=null){
142+
bridge.postGuiInit();
128143
}
129144
}
130145

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.devinprogress.YAIF;
22

33
import cpw.mods.fml.client.FMLClientHandler;
4+
import cpw.mods.fml.common.FMLCommonHandler;
45
import org.devinprogress.YAIF.Bridges.BaseActionBridge;
56
import org.lwjgl.opengl.AWTGLCanvas;
67
import org.lwjgl.opengl.Display;
@@ -70,7 +71,8 @@ public InputFieldWrapper(int Width,int Height){ //Should be Called only once
7071
frame.addWindowListener(new WindowAdapter() {
7172
@Override
7273
public void windowClosing(WindowEvent e) {
73-
FMLClientHandler.instance().getClient().shutdown();
74+
FMLCommonHandler.instance().exitJava(0,false);
75+
//FMLClientHandler.instance().getClient().shutdown();
7476
}
7577
});
7678
frame.pack();
@@ -84,7 +86,7 @@ public void setupBridge(BaseActionBridge bridge){
8486
if(this.bridge!=null)
8587
throw new RuntimeException("Loading new bridge without releasing previous one");
8688
this.bridge=bridge;
87-
89+
textField.setText("");
8890
bridge.bindKeys(textField);
8991
_show();
9092
}
@@ -93,6 +95,7 @@ public void releaseCurrentBridge(){
9395
if(bridge!=null) {
9496
bridge.unlink(textField);
9597
bridge = null;
98+
textField.setText("");
9699
}
97100
}
98101

0 commit comments

Comments
 (0)