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

Commit bb00c6c

Browse files
committed
stateMachine updated
1 parent edb9fd8 commit bb00c6c

File tree

8 files changed

+302
-152
lines changed

8 files changed

+302
-152
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.devinprogress.YAIF.Bridges;
2+
3+
import net.minecraft.client.gui.GuiChat;
4+
import net.minecraft.client.gui.GuiScreen;
5+
import net.minecraft.client.gui.GuiTextField;
6+
7+
import javax.swing.*;
8+
9+
/**
10+
* Created by recursiveg on 14-9-11.
11+
*/
12+
public abstract class BaseActionBridge {
13+
public void bindKeys(JTextField textField){
14+
textField.getInputMap().clear();
15+
textField.getActionMap().clear();
16+
}
17+
public void unlink(){ }
18+
public void onTabComplete(GuiChat chatScreen){ }
19+
}

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
/**
1212
* Created by recursiveg on 14-9-11.
1313
*/
14-
public class CommonBridge implements IActionBridge{
14+
public class CommonBridge extends BaseActionBridge {
1515
private GuiScreen scr=null;
1616
private Method M_keyTyped=null;
1717
private InputFieldWrapper wrapper=null;
@@ -25,8 +25,10 @@ public CommonBridge(GuiScreen screen,InputFieldWrapper wrapper){
2525
e.printStackTrace();
2626
}
2727
}
28+
29+
/*
2830
@Override
29-
public IActionBridge.ActionFeedback onEnter(JTextField txt) { //send msg
31+
public BaseActionBridge.ActionFeedback onEnter(JTextField txt) { //send msg
3032
try{
3133
String str=txt.getText();
3234
if(str.length()==0){
@@ -44,18 +46,18 @@ public IActionBridge.ActionFeedback onEnter(JTextField txt) { //send msg
4446
}
4547
4648
@Override
47-
public IActionBridge.ActionFeedback onEsc(JTextField txt) {
48-
return IActionBridge.ActionFeedback.Nothing;
49+
public BaseActionBridge.ActionFeedback onEsc(JTextField txt) {
50+
return BaseActionBridge.ActionFeedback.Nothing;
4951
}
5052
5153
@Override
52-
public IActionBridge.ActionFeedback onChange(JTextField txt) {
53-
return IActionBridge.ActionFeedback.Nothing;
54+
public BaseActionBridge.ActionFeedback onChange(JTextField txt) {
55+
return BaseActionBridge.ActionFeedback.Nothing;
5456
}
5557
5658
@Override
57-
public IActionBridge.ActionFeedback onTab(JTextField txt) {
58-
return IActionBridge.ActionFeedback.Nothing;
59+
public BaseActionBridge.ActionFeedback onTab(JTextField txt) {
60+
return BaseActionBridge.ActionFeedback.Nothing;
5961
}
6062
6163
@Override
@@ -93,5 +95,5 @@ public void onTabComplete(JTextField txt) {
9395
@Override
9496
public boolean sameAs(GuiScreen screen, GuiTextField txtField) {
9597
return scr==screen;
96-
}
98+
}*/
9799
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
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;
98

109
import javax.swing.*;
11-
import java.lang.reflect.Field;
1210

1311
/**
1412
* Created by recursiveg on 14-9-21.
1513
*/
16-
public class EditSignBridge implements IActionBridge {
14+
public class EditSignBridge extends BaseActionBridge {
1715
private GuiEditSign gui;
1816
private InputFieldWrapper wrapper;
1917
private int currentLine=0;
@@ -22,9 +20,10 @@ public EditSignBridge(GuiEditSign gui,InputFieldWrapper w){
2220
this.gui=gui;
2321
this.wrapper=w;
2422
currentLine=0;
25-
w.setTextNoEvent("");
23+
//w.setTextNoEvent("");
2624
sign=gui.tileSign;
2725
}
26+
/*
2827
@Override
2928
public ActionFeedback onEnter(JTextField txt) {
3029
currentLine=currentLine+1&3;
@@ -85,5 +84,5 @@ public void onTabComplete(JTextField txt) {
8584
@Override
8685
public boolean sameAs(GuiScreen screen, GuiTextField txtField) {
8786
return screen==gui;
88-
}
87+
}*/
8988
}

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,14 @@
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;
98
import org.lwjgl.input.Keyboard;
109

1110
import javax.swing.*;
12-
import java.lang.reflect.Field;
13-
import java.lang.reflect.Method;
1411

1512
/**
1613
* Created by recursiveg on 14-9-13.
1714
*/
18-
public class GuiChatBridge implements IActionBridge {
15+
public class GuiChatBridge extends BaseActionBridge {
1916
private GuiChat screen=null;
2017
private GuiTextField txt=null;
2118
private InputFieldWrapper wrapper=null;
@@ -27,14 +24,14 @@ public GuiChatBridge(GuiTextField textField,GuiChat screen,InputFieldWrapper wra
2724
this.screen=screen;
2825
txt=textField;
2926
this.wrapper=wrapper;
30-
wrapper.DoActions(ActionFeedback.SetText,txt.getText());
27+
//wrapper.DoActions(ActionFeedback.SetText,txt.getText());
3128

3229
if (screen.defaultInputFieldText.equals("/"))
3330
isCmd=true;
3431
else
3532
isCmd=false;
3633
}
37-
34+
/*
3835
@Override
3936
public ActionFeedback onEnter(JTextField txt) { //send
4037
this.txt.setText(txt.getText());
@@ -68,7 +65,7 @@ public void run() {
6865
str=txt.getText();
6966
}
7067
this.txt.setText(str);
71-
return IActionBridge.ActionFeedback.Nothing;
68+
return BaseActionBridge.ActionFeedback.Nothing;
7269
}
7370
7471
@Override
@@ -117,5 +114,5 @@ public boolean sameAs(GuiScreen screen, GuiTextField txtField) {
117114
118115
public boolean isCommand(){
119116
return isCmd;
120-
}
117+
}*/
121118
}

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

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package org.devinprogress.YAIF;
2+
3+
import cpw.mods.fml.client.FMLClientHandler;
4+
import net.minecraft.client.Minecraft;
5+
import net.minecraft.client.gui.GuiChat;
6+
import net.minecraft.client.gui.GuiScreen;
7+
import net.minecraft.client.gui.GuiTextField;
8+
import net.minecraft.client.gui.inventory.GuiContainerCreative;
9+
import net.minecraft.client.gui.inventory.GuiEditSign;
10+
import org.devinprogress.YAIF.Bridges.BaseActionBridge;
11+
import org.devinprogress.YAIF.Bridges.CommonBridge;
12+
import org.devinprogress.YAIF.Bridges.EditSignBridge;
13+
import org.devinprogress.YAIF.Bridges.GuiChatBridge;
14+
15+
import java.lang.reflect.Field;
16+
import java.util.HashSet;
17+
import java.util.Set;
18+
19+
/**
20+
* Created by recursiveg on 14-11-11.
21+
*/
22+
public class GuiStateManager {
23+
private static GuiStateManager INSTANCE=null;
24+
private InputFieldWrapper wrapper=null;
25+
private GuiScreen currentScreen=null,incomingScreen=null;
26+
private GuiTextField currentTextField=null;
27+
private BaseActionBridge bridge=null;
28+
private Set<Class> InputableGui=new HashSet<Class>();
29+
private Set<Class> UnInputableGui=new HashSet<Class>();
30+
31+
private GuiStateManager(){
32+
if (INSTANCE!=null)
33+
throw new RuntimeException("Duplicated Initialization for GuiStateManager");
34+
}
35+
36+
public static GuiStateManager getInstance(){
37+
if(INSTANCE==null)
38+
INSTANCE=new GuiStateManager();
39+
return INSTANCE;
40+
}
41+
42+
public void setWrapper(InputFieldWrapper w){
43+
if(wrapper!=null)
44+
throw new RuntimeException("InputFieldWrapper already set.");
45+
wrapper=w;
46+
}
47+
48+
public void TextFieldFocusChanged(GuiScreen screen, GuiTextField textField, boolean isFocused) {
49+
if(isFocused){
50+
if(screen==currentScreen){//textField switched in the same GUI
51+
wrapper.releaseCurrentBridge();
52+
currentTextField=textField;
53+
bridge=getNewBridge();
54+
wrapper.setupBridge(bridge);
55+
}else{//the TextField in a new bridge
56+
if(screen==incomingScreen) {
57+
currentScreen = incomingScreen;
58+
currentTextField = textField;
59+
bridge = getNewBridge();
60+
wrapper.setupBridge(bridge);/*
61+
}else if(screen instanceof GuiContainerCreative){
62+
currentScreen = screen;
63+
currentTextField = textField;
64+
bridge = getNewBridge();
65+
wrapper.setupBridge(bridge);*/
66+
}else{
67+
YetAnotherInputFix.log("WTF TextField %s Init without screen?",textField);
68+
}
69+
}
70+
}else{
71+
if(textField==currentTextField) {
72+
wrapper.releaseCurrentBridge();
73+
bridge = null;
74+
currentTextField=null;
75+
}
76+
}
77+
}
78+
79+
private BaseActionBridge getNewBridge() {
80+
if(currentScreen instanceof GuiChat)
81+
return new GuiChatBridge(currentTextField,(GuiChat)currentScreen,wrapper);
82+
else if(currentScreen instanceof GuiEditSign)
83+
return new EditSignBridge((GuiEditSign)currentScreen,wrapper);
84+
else
85+
return new CommonBridge(currentScreen,wrapper);
86+
}
87+
88+
public void onTabComplete(GuiScreen screen) {
89+
GuiChat chatScreen=null;
90+
if(screen instanceof GuiChat)
91+
chatScreen=(GuiChat)screen;
92+
else
93+
throw new RuntimeException("PacketTabComplete Received but GuiChat was not shown.");
94+
bridge.onTabComplete(chatScreen);
95+
}
96+
97+
public void preInitGuiEvent(GuiScreen gui){
98+
if(canGuiInput(gui))
99+
incomingScreen=gui;
100+
else
101+
incomingScreen=null;
102+
}
103+
104+
public void postInitGuiEvent(GuiScreen screen) {
105+
if (incomingScreen==null) return;
106+
incomingScreen=null;
107+
if(screen instanceof GuiEditSign){
108+
currentScreen=screen;
109+
bridge=getNewBridge();
110+
wrapper.setupBridge(bridge);
111+
}else if(canGuiInput(screen)) {
112+
currentScreen = screen;
113+
}else{
114+
wrapper.closeInputField();
115+
bridge=null;
116+
currentScreen=null;
117+
currentTextField=null;
118+
incomingScreen=null;
119+
}
120+
}
121+
122+
public void nullGuiOpenEvent(GuiScreen currentScreen) {
123+
wrapper.releaseCurrentBridge();
124+
bridge=null;
125+
this.currentScreen=null;
126+
this.currentTextField=null;
127+
this.incomingScreen=null;
128+
}
129+
130+
public void inputFieldClosed(){
131+
bridge=null;
132+
this.currentScreen=null;
133+
this.currentTextField=null;
134+
this.incomingScreen=null;
135+
Minecraft.getMinecraft().addScheduledTask(new Runnable() {
136+
@Override
137+
public void run() {
138+
YetAnotherInputFix.log("setIngameFocus()");
139+
FMLClientHandler.instance().getClient().setIngameFocus();
140+
}
141+
});
142+
}
143+
144+
private boolean canGuiInput(GuiScreen gui){
145+
if(gui==null)return false;
146+
Class GuiClass=gui.getClass();
147+
if(UnInputableGui.contains(GuiClass))return false;
148+
if(InputableGui.contains(GuiClass))return true;
149+
boolean hasTextField = false;
150+
151+
for (Field f : GuiClass.getDeclaredFields()) {
152+
if (f.getType() == GuiTextField.class) {
153+
hasTextField = true;
154+
break;
155+
}
156+
}
157+
158+
if (hasTextField)
159+
InputableGui.add(GuiClass);
160+
else
161+
UnInputableGui.add(GuiClass);
162+
163+
return hasTextField;
164+
}
165+
}

0 commit comments

Comments
 (0)