Commit 3e955ef14767cfd7d077ef86c2f00db1cdce761e
1 parent
3db66fd3
1.7.10 initial update merging branch "apidev" into trunk
Showing
40 changed files
with
2297 additions
and
1130 deletions
Too many changes to show.
To preserve performance only 40 of 221 files are displayed.
.classpath
1 | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | 2 | <classpath> |
3 | - <classpathentry kind="src" path="java"/> | |
4 | 3 | <classpathentry kind="src" path="debug"/> |
5 | 4 | <classpathentry kind="src" path="resources"/> |
5 | + <classpathentry kind="src" path="java/common"/> | |
6 | + <classpathentry kind="src" path="java/client"/> | |
6 | 7 | <classpathentry combineaccessrules="false" exported="true" kind="src" path="/Client"/> |
7 | 8 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> |
8 | - <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar"/> | |
9 | - <classpathentry kind="lib" path="/Client/jars/libraries/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar"/> | |
10 | - <classpathentry kind="lib" path="/Client/jars/libraries/com/google/guava/guava/15.0/guava-15.0.jar"/> | |
11 | - <classpathentry kind="lib" path="/Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar"/> | |
9 | + <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar"/> | |
10 | + <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/com/google/guava/guava/15.0/guava-15.0.jar"/> | |
11 | + <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar"/> | |
12 | 12 | <classpathentry exported="true" kind="lib" path="lib/launchwrapper-1.9.jar" sourcepath="externals/launchwrapper/src"/> |
13 | - <classpathentry exported="true" kind="lib" path="lib/asm-debug-all-4.1.jar"/> | |
14 | - <classpathentry kind="lib" path="/Client/jars/libraries/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar"/> | |
13 | + <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar"/> | |
15 | 14 | <classpathentry kind="lib" path="/Client/jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar"/> |
16 | 15 | <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/io/netty/netty-all/4.0.10.Final/netty-all-4.0.10.Final.jar"/> |
17 | - <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/com/mojang/authlib/1.3/authlib-1.3.jar"/> | |
18 | 16 | <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar"/> |
19 | 17 | <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar"/> |
20 | - <classpathentry kind="lib" path="/Client/jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar"/> | |
18 | + <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar"/> | |
19 | + <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/com/mojang/authlib/1.5.13/authlib-1.5.13.jar"/> | |
20 | + <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.1/lwjgl-2.9.1.jar"/> | |
21 | + <classpathentry exported="true" kind="lib" path="lib/asm-debug-all-5.0.3.jar"/> | |
21 | 22 | <classpathentry kind="output" path="bin"/> |
22 | 23 | </classpath> | ... | ... |
LiteLoader.iml
1 | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | 2 | <module type="JAVA_MODULE" version="4"> |
3 | 3 | <component name="EclipseModuleManager"> |
4 | - <libelement value="jar://$MCP_LOC$/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar!/" /> | |
5 | - <libelement value="jar://$MCP_LOC$/jars/libraries/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar!/" /> | |
6 | - <libelement value="jar://$MCP_LOC$/jars/libraries/com/google/guava/guava/15.0/guava-15.0.jar!/" /> | |
7 | - <libelement value="jar://$MCP_LOC$/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar!/" /> | |
4 | + <libelement value="file:///Client/jars/libraries/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar" /> | |
5 | + <libelement value="file:///Client/jars/libraries/com/google/guava/guava/15.0/guava-15.0.jar" /> | |
6 | + <libelement value="file:///Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar" /> | |
8 | 7 | <libelement value="jar://$MODULE_DIR$/lib/launchwrapper-1.9.jar!/" /> |
9 | 8 | <libelement value="jar://$MODULE_DIR$/lib/asm-debug-all-4.1.jar!/" /> |
10 | - <libelement value="jar://$MCP_LOC$/jars/libraries/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar!/" /> | |
11 | - <libelement value="jar://$MCP_LOC$/jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar!/" /> | |
12 | - <libelement value="jar://$MCP_LOC$/jars/libraries/io/netty/netty-all/4.0.10.Final/netty-all-4.0.10.Final.jar!/" /> | |
13 | - <libelement value="jar://$MCP_LOC$/jars/libraries/com/mojang/authlib/1.3/authlib-1.3.jar!/" /> | |
14 | - <libelement value="jar://$MCP_LOC$/jars/libraries/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar!/" /> | |
15 | - <libelement value="jar://$MCP_LOC$/jars/libraries/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar!/" /> | |
16 | - <libelement value="jar://$MCP_LOC$/jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar!/" /> | |
9 | + <libelement value="file:///Client/jars/libraries/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar" /> | |
10 | + <libelement value="file:///Client/jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar" /> | |
11 | + <libelement value="file:///Client/jars/libraries/io/netty/netty-all/4.0.10.Final/netty-all-4.0.10.Final.jar" /> | |
12 | + <libelement value="file:///Client/jars/libraries/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar" /> | |
13 | + <libelement value="file:///Client/jars/libraries/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar" /> | |
14 | + <libelement value="file:///Client/jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar" /> | |
15 | + <libelement value="file:///Client/jars/libraries/com/mojang/authlib/1.5.13/authlib-1.5.13.jar" /> | |
16 | + <libelement value="file:///Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.1/lwjgl-2.9.1.jar" /> | |
17 | 17 | <src_description expected_position="0"> |
18 | - <src_folder value="file://$MODULE_DIR$/java" expected_position="0" /> | |
19 | - <src_folder value="file://$MODULE_DIR$/debug" expected_position="1" /> | |
20 | - <src_folder value="file://$MODULE_DIR$/resources" expected_position="2" /> | |
18 | + <src_folder value="file://$MODULE_DIR$/debug" expected_position="0" /> | |
19 | + <src_folder value="file://$MODULE_DIR$/resources" expected_position="1" /> | |
20 | + <src_folder value="file://$MODULE_DIR$/java/common" expected_position="2" /> | |
21 | + <src_folder value="file://$MODULE_DIR$/java/client" expected_position="3" /> | |
21 | 22 | </src_description> |
22 | 23 | </component> |
23 | 24 | <component name="NewModuleRootManager" inherit-compiler-output="false"> |
24 | 25 | <output url="file://$MODULE_DIR$/bin" /> |
25 | 26 | <exclude-output /> |
26 | 27 | <content url="file://$MODULE_DIR$"> |
27 | - <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" /> | |
28 | 28 | <sourceFolder url="file://$MODULE_DIR$/debug" isTestSource="false" /> |
29 | 29 | <sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" /> |
30 | + <sourceFolder url="file://$MODULE_DIR$/java/common" isTestSource="false" /> | |
31 | + <sourceFolder url="file://$MODULE_DIR$/java/client" isTestSource="false" /> | |
30 | 32 | </content> |
31 | 33 | <orderEntry type="sourceFolder" forTests="false" /> |
32 | 34 | <orderEntry type="module" module-name="Client" exported="" /> |
33 | 35 | <orderEntry type="jdk" jdkName="JavaSE-1.6" jdkType="JavaSDK" /> |
34 | 36 | <orderEntry type="module-library" exported=""> |
35 | - <library name="lwjgl-2.9.0.jar"> | |
36 | - <CLASSES> | |
37 | - <root url="jar://$MCP_LOC$/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar!/" /> | |
38 | - </CLASSES> | |
39 | - <JAVADOC /> | |
40 | - <SOURCES /> | |
41 | - </library> | |
42 | - </orderEntry> | |
43 | - <orderEntry type="module-library"> | |
44 | - <library name="gson-2.2.4.jar"> | |
45 | - <CLASSES> | |
46 | - <root url="jar://$MCP_LOC$/jars/libraries/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar!/" /> | |
47 | - </CLASSES> | |
48 | - <JAVADOC /> | |
49 | - <SOURCES /> | |
50 | - </library> | |
51 | - </orderEntry> | |
52 | - <orderEntry type="module-library"> | |
53 | - <library name="guava-15.0.jar"> | |
54 | - <CLASSES> | |
55 | - <root url="jar://$MCP_LOC$/jars/libraries/com/google/guava/guava/15.0/guava-15.0.jar!/" /> | |
56 | - </CLASSES> | |
57 | - <JAVADOC /> | |
58 | - <SOURCES /> | |
59 | - </library> | |
60 | - </orderEntry> | |
61 | - <orderEntry type="module-library"> | |
62 | - <library name="commons-io-2.4.jar"> | |
63 | - <CLASSES> | |
64 | - <root url="jar://$MCP_LOC$/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar!/" /> | |
65 | - </CLASSES> | |
66 | - <JAVADOC /> | |
67 | - <SOURCES /> | |
68 | - </library> | |
69 | - </orderEntry> | |
70 | - <orderEntry type="module-library" exported=""> | |
71 | 37 | <library name="launchwrapper-1.9.jar"> |
72 | 38 | <CLASSES> |
73 | 39 | <root url="jar://$MODULE_DIR$/lib/launchwrapper-1.9.jar!/" /> |
... | ... | @@ -79,72 +45,9 @@ |
79 | 45 | </library> |
80 | 46 | </orderEntry> |
81 | 47 | <orderEntry type="module-library" exported=""> |
82 | - <library name="asm-debug-all-4.1.jar"> | |
83 | - <CLASSES> | |
84 | - <root url="jar://$MODULE_DIR$/lib/asm-debug-all-4.1.jar!/" /> | |
85 | - </CLASSES> | |
86 | - <JAVADOC /> | |
87 | - <SOURCES /> | |
88 | - </library> | |
89 | - </orderEntry> | |
90 | - <orderEntry type="module-library"> | |
91 | - <library name="commons-lang3-3.1.jar"> | |
92 | - <CLASSES> | |
93 | - <root url="jar://$MCP_LOC$/jars/libraries/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar!/" /> | |
94 | - </CLASSES> | |
95 | - <JAVADOC /> | |
96 | - <SOURCES /> | |
97 | - </library> | |
98 | - </orderEntry> | |
99 | - <orderEntry type="module-library"> | |
100 | - <library name="jopt-simple-4.5.jar"> | |
101 | - <CLASSES> | |
102 | - <root url="jar://$MCP_LOC$/jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar!/" /> | |
103 | - </CLASSES> | |
104 | - <JAVADOC /> | |
105 | - <SOURCES /> | |
106 | - </library> | |
107 | - </orderEntry> | |
108 | - <orderEntry type="module-library" exported=""> | |
109 | - <library name="netty-all-4.0.10.Final.jar"> | |
110 | - <CLASSES> | |
111 | - <root url="jar://$MCP_LOC$/jars/libraries/io/netty/netty-all/4.0.10.Final/netty-all-4.0.10.Final.jar!/" /> | |
112 | - </CLASSES> | |
113 | - <JAVADOC /> | |
114 | - <SOURCES /> | |
115 | - </library> | |
116 | - </orderEntry> | |
117 | - <orderEntry type="module-library" exported=""> | |
118 | - <library name="authlib-1.3.jar"> | |
119 | - <CLASSES> | |
120 | - <root url="jar://$MCP_LOC$/jars/libraries/com/mojang/authlib/1.3/authlib-1.3.jar!/" /> | |
121 | - </CLASSES> | |
122 | - <JAVADOC /> | |
123 | - <SOURCES /> | |
124 | - </library> | |
125 | - </orderEntry> | |
126 | - <orderEntry type="module-library" exported=""> | |
127 | - <library name="log4j-api-2.0-beta9.jar"> | |
128 | - <CLASSES> | |
129 | - <root url="jar://$MCP_LOC$/jars/libraries/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar!/" /> | |
130 | - </CLASSES> | |
131 | - <JAVADOC /> | |
132 | - <SOURCES /> | |
133 | - </library> | |
134 | - </orderEntry> | |
135 | - <orderEntry type="module-library" exported=""> | |
136 | - <library name="log4j-core-2.0-beta9.jar"> | |
137 | - <CLASSES> | |
138 | - <root url="jar://$MCP_LOC$/jars/libraries/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar!/" /> | |
139 | - </CLASSES> | |
140 | - <JAVADOC /> | |
141 | - <SOURCES /> | |
142 | - </library> | |
143 | - </orderEntry> | |
144 | - <orderEntry type="module-library"> | |
145 | - <library name="jinput-2.0.5.jar"> | |
48 | + <library> | |
146 | 49 | <CLASSES> |
147 | - <root url="jar://$MCP_LOC$/jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar!/" /> | |
50 | + <root url="jar://$MODULE_DIR$/lib/asm-debug-all-5.0.3.jar!/" /> | |
148 | 51 | </CLASSES> |
149 | 52 | <JAVADOC /> |
150 | 53 | <SOURCES /> | ... | ... |
README.md
0 โ 100644
1 | +LiteLoader | |
2 | +---------- | |
3 | + | |
4 | +Important Setup Note | |
5 | +-------------------- | |
6 | +MCP 9.08 does not include the latest MCPBot mappings, since developing mods without these updated | |
7 | +mappings is a massive nuisance LiteLoader is built using a recent snapshot of the MCP mappings. | |
8 | + | |
9 | +Getting the updated mappings | |
10 | +---------------------------- | |
11 | + | |
12 | +To get the updated mappings, perform these steps **before** decompiling minecraft for the first | |
13 | +time. If you have already decompiled minecraft, run the MPC **cleanup** task first to remove the | |
14 | +invalid sources. | |
15 | + | |
16 | +- Using a text editor, open **/mcp908/conf/mcp.conf** | |
17 | +- Locate the setting **UpdateUrl** and change the domain to *dl.liteloader.com* as shown | |
18 | + | |
19 | + UpdateUrl = http://dl.liteloader.com/files/mcprolling_{version}/ | |
20 | + | |
21 | +- Save the file and run the **updatemcp** script, it should prompt you to download 6 files. | |
22 | +- Run **decompile** as normal | |
0 | 23 | \ No newline at end of file | ... | ... |
ant/build_liteloader.xml
... | ... | @@ -4,8 +4,8 @@ |
4 | 4 | <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="tasks/ant-contrib.jar" /> |
5 | 5 | |
6 | 6 | <!-- Versions !!IMPORTANT --> |
7 | - <property name="version" value="1.7.2_04" /> | |
8 | - <property name="mcversion" value="1.7.2" /> | |
7 | + <property name="version" value="1.7.10" /> | |
8 | + <property name="mcversion" value="1.7.10" /> | |
9 | 9 | <property name="author" value="Mumfrey" /> |
10 | 10 | |
11 | 11 | <!-- Project definitions and dependencies --> |
... | ... | @@ -97,6 +97,21 @@ |
97 | 97 | </copy> |
98 | 98 | </target> |
99 | 99 | |
100 | + <target name="contributeloadersource" description="Contribute a liteloader source code set to the source path"> | |
101 | + <echo level="info" message="Contributing source set '${set}' for project ${lib}" /> | |
102 | + <copy todir="${src}" verbose="false" overwrite="true" failonerror="false"> | |
103 | + <fileset dir="${eclipse}/${lib}/java/${set}"> | |
104 | + <exclude name="**/debug" /> | |
105 | + <exclude name="**/debug/*.java" /> | |
106 | + </fileset> | |
107 | + <filterchain> | |
108 | + <linecontains negate="true"> | |
109 | + <contains value="@MCPONLY${skipremoval}" /> | |
110 | + </linecontains> | |
111 | + </filterchain> | |
112 | + </copy> | |
113 | + </target> | |
114 | + | |
100 | 115 | <target name="contributeresources" description="Contribute resources to the staging path"> |
101 | 116 | <echo level="info" message="Contributing project resources for ${lib}" /> |
102 | 117 | <copy todir="${stage.dir}" verbose="false" failonerror="false"> |
... | ... | @@ -155,8 +170,14 @@ |
155 | 170 | <echo level="info" message="Contributing upstream projects" /> |
156 | 171 | <foreach list="${upstream}" param="lib" target="contributesource" /> |
157 | 172 | |
158 | - <antcall target="contributesource"> | |
173 | + <antcall target="contributeloadersource"> | |
174 | + <param name="lib" value="${project}" /> | |
175 | + <param name="set" value="common" /> | |
176 | + </antcall> | |
177 | + | |
178 | + <antcall target="contributeloadersource"> | |
159 | 179 | <param name="lib" value="${project}" /> |
180 | + <param name="set" value="client" /> | |
160 | 181 | </antcall> |
161 | 182 | </target> |
162 | 183 | |
... | ... | @@ -258,8 +279,8 @@ |
258 | 279 | <property environment="env" /> |
259 | 280 | |
260 | 281 | <target name="deploy" depends="production" description="Deploy artifact to local minecraft installation in APPDATA"> |
261 | - <mkdir dir="${env.APPDATA}/.minecraft/libraries/com/mumfrey/liteloader/1.7.2"/> | |
262 | - <copy todir="${env.APPDATA}/.minecraft/libraries/com/mumfrey/liteloader/1.7.2" file="${dist.dir}/${ant.project.name}-${mcversion}.${filetype}" failonerror="false" overwrite="true" /> | |
282 | + <mkdir dir="${env.APPDATA}/.minecraft/libraries/com/mumfrey/liteloader/${mcversion}"/> | |
283 | + <copy todir="${env.APPDATA}/.minecraft/libraries/com/mumfrey/liteloader/${mcversion}" file="${dist.dir}/${ant.project.name}-${mcversion}.${filetype}" failonerror="false" overwrite="true" /> | |
263 | 284 | <copy todir="${eclipse}/Installer/src/main/resources" file="${dist.dir}/${ant.project.name}-${mcversion}.${filetype}" failonerror="false" overwrite="true" /> |
264 | 285 | </target> |
265 | 286 | </project> |
266 | 287 | \ No newline at end of file | ... | ... |
debug/com/mumfrey/liteloader/debug/LoginManager.java
... | ... | @@ -17,8 +17,10 @@ import com.google.gson.GsonBuilder; |
17 | 17 | import com.google.gson.annotations.SerializedName; |
18 | 18 | import com.mojang.authlib.Agent; |
19 | 19 | import com.mojang.authlib.GameProfile; |
20 | +import com.mojang.authlib.UserType; | |
20 | 21 | import com.mojang.authlib.exceptions.AuthenticationException; |
21 | 22 | import com.mojang.authlib.exceptions.InvalidCredentialsException; |
23 | +import com.mojang.authlib.properties.PropertyMap; | |
22 | 24 | import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; |
23 | 25 | import com.mojang.authlib.yggdrasil.YggdrasilUserAuthentication; |
24 | 26 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
... | ... | @@ -292,7 +294,7 @@ public class LoginManager |
292 | 294 | public String getUUID() |
293 | 295 | { |
294 | 296 | GameProfile selectedProfile = this.authentication.getSelectedProfile(); |
295 | - return selectedProfile != null ? selectedProfile.getId() : this.defaultDisplayName; | |
297 | + return selectedProfile != null ? selectedProfile.getId().toString().replace("-", "") : this.defaultDisplayName; | |
296 | 298 | } |
297 | 299 | |
298 | 300 | /** |
... | ... | @@ -304,6 +306,18 @@ public class LoginManager |
304 | 306 | return accessToken != null ? accessToken : "-"; |
305 | 307 | } |
306 | 308 | |
309 | + public String getUserType() | |
310 | + { | |
311 | + UserType userType = this.authentication.getUserType(); | |
312 | + return (userType != null ? userType : UserType.LEGACY).toString().toLowerCase(); | |
313 | + } | |
314 | + | |
315 | + public String getUserProperties() | |
316 | + { | |
317 | + PropertyMap userProperties = this.authentication.getUserProperties(); | |
318 | + return userProperties != null ? userProperties.toString() : "{}"; | |
319 | + } | |
320 | + | |
307 | 321 | /** |
308 | 322 | * Struct for Gson serialisation of authenticaion settings |
309 | 323 | * |
... | ... | @@ -318,7 +332,7 @@ public class LoginManager |
318 | 332 | private boolean workOffline; |
319 | 333 | |
320 | 334 | @SerializedName("authData") |
321 | - private Map<String, String> credentials; | |
335 | + private Map<String, Object> credentials; | |
322 | 336 | |
323 | 337 | public AuthData() |
324 | 338 | { |
... | ... | @@ -344,7 +358,7 @@ public class LoginManager |
344 | 358 | public boolean validate() |
345 | 359 | { |
346 | 360 | if (this.clientToken == null) this.clientToken = UUID.randomUUID().toString(); |
347 | - if (this.credentials == null) this.credentials = new HashMap<String, String>(); | |
361 | + if (this.credentials == null) this.credentials = new HashMap<String, Object>(); | |
348 | 362 | return true; |
349 | 363 | } |
350 | 364 | |
... | ... | @@ -370,12 +384,12 @@ public class LoginManager |
370 | 384 | |
371 | 385 | public String getUsername() |
372 | 386 | { |
373 | - return this.credentials != null ? this.credentials.get("username") : null; | |
387 | + return this.credentials != null ? this.credentials.get("username").toString() : null; | |
374 | 388 | } |
375 | 389 | |
376 | 390 | public String getDisplayName() |
377 | 391 | { |
378 | - return this.credentials != null && this.credentials.containsKey("displayName") ? this.credentials.get("displayName") : System.getProperty("user.name"); | |
392 | + return this.credentials != null && this.credentials.containsKey("displayName") ? this.credentials.get("displayName").toString() : System.getProperty("user.name"); | |
379 | 393 | } |
380 | 394 | } |
381 | 395 | } | ... | ... |
debug/com/mumfrey/liteloader/debug/ServerStart.java
0 โ 100644
1 | +package com.mumfrey.liteloader.debug; | |
2 | +import java.io.File; | |
3 | +import java.util.ArrayList; | |
4 | +import java.util.Arrays; | |
5 | +import java.util.List; | |
6 | + | |
7 | +import net.minecraft.launchwrapper.Launch; | |
8 | + | |
9 | +import com.mumfrey.liteloader.launch.LiteLoaderTweakerServer; | |
10 | + | |
11 | +/** | |
12 | + * Wrapper class for LaunchWrapper Main class, which logs into minecraft.net first so that online shizzle can be tested | |
13 | + * | |
14 | + * @author Adam Mummery-Smith | |
15 | + * @version 0.6.2 | |
16 | + */ | |
17 | +public abstract class ServerStart | |
18 | +{ | |
19 | + private static final String FML_TWEAKER_NAME = "cpw.mods.fml.common.launcher.FMLTweaker"; | |
20 | + | |
21 | + /** | |
22 | + * Entry point. | |
23 | + * | |
24 | + * @param args | |
25 | + */ | |
26 | + public static void main(String[] args) | |
27 | + { | |
28 | + System.setProperty("mcpenv", "true"); | |
29 | + | |
30 | + boolean fmlDetected = false; | |
31 | + List<String> argsList = new ArrayList<String>(Arrays.asList(args)); | |
32 | + | |
33 | + // Detect the FML tweaker specified on the command line, this likely means someone has pulled us | |
34 | + // into a Forge MCP workspace | |
35 | + for (String arg : argsList) fmlDetected |= FML_TWEAKER_NAME.equals(arg); | |
36 | + | |
37 | + if (fmlDetected) | |
38 | + { | |
39 | + argsList.clear(); | |
40 | + argsList.add("--tweakClass");argsList.add(FML_TWEAKER_NAME); | |
41 | + } | |
42 | + | |
43 | + File gameDir = new File(System.getProperty("user.dir")); | |
44 | + File assetsDir = new File(gameDir, "assets"); | |
45 | + | |
46 | + argsList.add("--tweakClass"); argsList.add(LiteLoaderTweakerServer.class.getName()); | |
47 | + argsList.add("--version"); argsList.add("mcp"); | |
48 | + argsList.add("--gameDir"); argsList.add(gameDir.getAbsolutePath()); | |
49 | + argsList.add("--assetsDir"); argsList.add(assetsDir.getAbsolutePath()); | |
50 | + | |
51 | + Launch.main(argsList.toArray(args)); | |
52 | + } | |
53 | +} | ... | ... |
debug/com/mumfrey/liteloader/debug/Start.java
1 | 1 | package com.mumfrey.liteloader.debug; |
2 | 2 | import java.io.File; |
3 | 3 | import java.util.ArrayList; |
4 | +import java.util.Arrays; | |
4 | 5 | import java.util.List; |
5 | 6 | |
6 | 7 | import net.minecraft.launchwrapper.Launch; |
... | ... | @@ -12,7 +13,6 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
12 | 13 | * Wrapper class for LaunchWrapper Main class, which logs into minecraft.net first so that online shizzle can be tested |
13 | 14 | * |
14 | 15 | * @author Adam Mummery-Smith |
15 | - * @version 0.6.2 | |
16 | 16 | */ |
17 | 17 | public abstract class Start |
18 | 18 | { |
... | ... | @@ -28,20 +28,28 @@ public abstract class Start |
28 | 28 | System.setProperty("mcpenv", "true"); |
29 | 29 | |
30 | 30 | boolean fmlDetected = false; |
31 | - List<String> argsList = new ArrayList<String>(); | |
31 | + List<String> argsList = new ArrayList<String>(Arrays.asList(args)); | |
32 | 32 | |
33 | 33 | // Detect the FML tweaker specified on the command line, this likely means someone has pulled us |
34 | 34 | // into a Forge MCP workspace |
35 | - for (String arg : args) fmlDetected |= FML_TWEAKER_NAME.equals(arg); | |
35 | + for (String arg : argsList) fmlDetected |= FML_TWEAKER_NAME.equals(arg); | |
36 | 36 | |
37 | 37 | if (fmlDetected) |
38 | 38 | { |
39 | - args = new String[0]; | |
39 | + argsList.clear(); | |
40 | 40 | argsList.add("--tweakClass");argsList.add(FML_TWEAKER_NAME); |
41 | 41 | } |
42 | + | |
43 | + String usernameFromCmdLine = null; | |
44 | + String passwordFromCmdLine = null; | |
45 | + | |
46 | + if (argsList.size() > 0 && !argsList.get(0).startsWith("-")) | |
47 | + { | |
48 | + usernameFromCmdLine = argsList.remove(0); | |
42 | 49 | |
43 | - String usernameFromCmdLine = (args.length > 0) ? args[0] : null; | |
44 | - String passwordFromCmdLine = (args.length > 1) ? args[1] : null; | |
50 | + if (argsList.size() > 0 && !argsList.get(0).startsWith("-")) | |
51 | + passwordFromCmdLine = argsList.remove(0); | |
52 | + } | |
45 | 53 | |
46 | 54 | File loginJson = new File(new File(System.getProperty("user.dir")), ".auth.json"); |
47 | 55 | LoginManager loginManager = new LoginManager(loginJson); |
... | ... | @@ -50,15 +58,18 @@ public abstract class Start |
50 | 58 | LiteLoaderLogger.info("Launching game as %s", loginManager.getProfileName()); |
51 | 59 | |
52 | 60 | File gameDir = new File(System.getProperty("user.dir")); |
53 | - File assetsDir = new File(gameDir, "assets/virtual/legacy"); | |
61 | + File assetsDir = new File(gameDir, "assets"); | |
54 | 62 | |
55 | - argsList.add("--tweakClass"); argsList.add(LiteLoaderTweaker.class.getName()); | |
56 | - argsList.add("--username"); argsList.add(loginManager.getProfileName()); | |
57 | - argsList.add("--uuid"); argsList.add(loginManager.getUUID()); | |
58 | - argsList.add("--accessToken"); argsList.add(loginManager.getAuthenticatedToken()); | |
59 | - argsList.add("--version"); argsList.add("mcp"); | |
60 | - argsList.add("--gameDir"); argsList.add(gameDir.getAbsolutePath()); | |
61 | - argsList.add("--assetsDir"); argsList.add(assetsDir.getAbsolutePath()); | |
63 | + argsList.add("--tweakClass"); argsList.add(LiteLoaderTweaker.class.getName()); | |
64 | + argsList.add("--username"); argsList.add(loginManager.getProfileName()); | |
65 | + argsList.add("--uuid"); argsList.add(loginManager.getUUID()); | |
66 | + argsList.add("--accessToken"); argsList.add(loginManager.getAuthenticatedToken()); | |
67 | + argsList.add("--userType"); argsList.add(loginManager.getUserType()); | |
68 | + argsList.add("--userProperties"); argsList.add(loginManager.getUserProperties()); | |
69 | + argsList.add("--version"); argsList.add("mcp"); | |
70 | + argsList.add("--gameDir"); argsList.add(gameDir.getAbsolutePath()); | |
71 | + argsList.add("--assetIndex"); argsList.add(LiteLoaderTweaker.VERSION); | |
72 | + argsList.add("--assetsDir"); argsList.add(assetsDir.getAbsolutePath()); | |
62 | 73 | |
63 | 74 | Launch.main(argsList.toArray(args)); |
64 | 75 | } | ... | ... |
debug/obfuscation.properties
0 โ 100644
1 | +field_71424_I=mcProfiler | |
2 | +field_78729_o=entityRenderMap field_110546_b=reloadListeners | |
3 | +func_148833_a=processPacket func_71411_J=runGameLoop func_71407_l=runTick func_78480_b=updateCameraAndRender func_78471_a=renderWorld func_73830_a=renderGameOverlay func_76320_a=startSection func_76319_b=endSection func_76318_c=endStartSection | |
4 | +func_72368_a=recreatePlayerEntity func_72355_a=initializeConnectionToPlayer func_72377_c=playerLoggedIn func_72367_e=playerLoggedOut | |
5 | +func_71384_a=startGame | |
6 | +func_71197_b=startServer | |
7 | +func_71256_s=startServerThread | |
8 | +func_71165_d=sendChatMessage | |
9 | +func_148545_a=createPlayerForUser | |
10 | +func_147119_ah=updateFramebufferSize | |
11 | +field_82596_a=registryObjects | |
12 | +field_148759_a=underlyingIntegerMap | |
13 | +#field_148749_a= | |
14 | +#field_148748_b= | |
15 | +field_147559_m=mapSpecialRenderers | |
16 | +field_145855_i=nameToClassMap | |
17 | +field_145853_j=classToNameMap | |
0 | 18 | \ No newline at end of file | ... | ... |
java/com/mumfrey/liteloader/ChatFilter.java renamed to java/client/com/mumfrey/liteloader/ChatFilter.java
java/com/mumfrey/liteloader/ChatListener.java renamed to java/client/com/mumfrey/liteloader/ChatListener.java
java/com/mumfrey/liteloader/ChatRenderListener.java renamed to java/client/com/mumfrey/liteloader/ChatRenderListener.java
java/com/mumfrey/liteloader/GameLoopListener.java renamed to java/client/com/mumfrey/liteloader/GameLoopListener.java
java/com/mumfrey/liteloader/HUDRenderListener.java renamed to java/client/com/mumfrey/liteloader/HUDRenderListener.java
java/com/mumfrey/liteloader/InitCompleteListener.java renamed to java/client/com/mumfrey/liteloader/InitCompleteListener.java
java/client/com/mumfrey/liteloader/OutboundChatFilter.java
0 โ 100644
1 | +package com.mumfrey.liteloader; | |
2 | + | |
3 | +/** | |
4 | + * Interface for mods which want to filter outbound chat | |
5 | + * | |
6 | + * @author Adam Mummery-Smith | |
7 | + */ | |
8 | +public interface OutboundChatFilter extends LiteMod | |
9 | +{ | |
10 | + /** | |
11 | + * Raised when a chat message is being sent, return false to filter this message or true to allow it to be sent | |
12 | + * | |
13 | + * @param message | |
14 | + */ | |
15 | + public abstract boolean onSendChatMessage(String message); | |
16 | +} | ... | ... |
java/com/mumfrey/liteloader/OutboundChatListener.java renamed to java/client/com/mumfrey/liteloader/OutboundChatListener.java
java/com/mumfrey/liteloader/PostLoginListener.java renamed to java/client/com/mumfrey/liteloader/PostLoginListener.java
java/com/mumfrey/liteloader/PostRenderListener.java renamed to java/client/com/mumfrey/liteloader/PostRenderListener.java
java/com/mumfrey/liteloader/RenderListener.java renamed to java/client/com/mumfrey/liteloader/RenderListener.java
java/com/mumfrey/liteloader/Tickable.java renamed to java/client/com/mumfrey/liteloader/Tickable.java
java/client/com/mumfrey/liteloader/ViewportListener.java
0 โ 100644
1 | +package com.mumfrey.liteloader; | |
2 | + | |
3 | +import net.minecraft.client.gui.ScaledResolution; | |
4 | + | |
5 | +public interface ViewportListener extends LiteMod | |
6 | +{ | |
7 | + public abstract void onViewportResized(ScaledResolution resolution, int displayWidth, int displayHeight); | |
8 | + | |
9 | + public abstract void onFullScreenToggled(boolean fullScreen); | |
10 | +} | ... | ... |
java/com/mumfrey/liteloader/core/transformers/InjectedCallbackProxy.java renamed to java/client/com/mumfrey/liteloader/client/CallbackProxyClient.java
1 | -package com.mumfrey.liteloader.core.transformers; | |
1 | +package com.mumfrey.liteloader.client; | |
2 | 2 | |
3 | 3 | import net.minecraft.client.Minecraft; |
4 | +import net.minecraft.client.entity.EntityClientPlayerMP; | |
4 | 5 | import net.minecraft.entity.player.EntityPlayerMP; |
5 | 6 | import net.minecraft.network.INetHandler; |
6 | 7 | import net.minecraft.network.NetworkManager; |
... | ... | @@ -19,35 +20,30 @@ import net.minecraft.world.WorldSettings; |
19 | 20 | |
20 | 21 | import com.mojang.authlib.GameProfile; |
21 | 22 | import com.mumfrey.liteloader.core.ClientPluginChannels; |
22 | -import com.mumfrey.liteloader.core.Events; | |
23 | 23 | import com.mumfrey.liteloader.core.LiteLoader; |
24 | 24 | import com.mumfrey.liteloader.core.ServerPluginChannels; |
25 | +import com.mumfrey.liteloader.transformers.event.EventInfo; | |
25 | 26 | |
26 | 27 | /** |
27 | - * Proxy class which handles the redirected calls from the injected packet hooks and routes them to the | |
28 | + * Proxy class which handles the redirected calls from the injected callbacks and routes them to the | |
28 | 29 | * relevant liteloader handler classes. We do this rather than patching a bunch of bytecode into the packet |
29 | 30 | * classes themselves because this is easier to maintain. |
30 | 31 | * |
31 | 32 | * @author Adam Mummery-Smith |
32 | 33 | */ |
33 | -public class InjectedCallbackProxy | |
34 | +public class CallbackProxyClient | |
34 | 35 | { |
35 | 36 | /** |
36 | - * Initialisation done | |
37 | - */ | |
38 | - private static boolean initDone = false; | |
39 | - | |
40 | - /** | |
41 | 37 | * Tick clock, sent as a flag to the core onTick so that mods know it's a new tick |
42 | 38 | */ |
43 | 39 | private static boolean clock = false; |
44 | 40 | |
45 | - private static Events events; | |
41 | + private static ClientEvents events; | |
46 | 42 | |
47 | 43 | public static void handleLoginSuccessPacket(INetHandler netHandler, S02PacketLoginSuccess packet) |
48 | 44 | { |
49 | 45 | ((INetHandlerLoginClient)netHandler).handleLoginSuccess(packet); |
50 | - InjectedCallbackProxy.events.onPostLogin((INetHandlerLoginClient)netHandler, packet); | |
46 | + CallbackProxyClient.events.onPostLogin((INetHandlerLoginClient)netHandler, packet); | |
51 | 47 | } |
52 | 48 | |
53 | 49 | /** |
... | ... | @@ -58,8 +54,7 @@ public class InjectedCallbackProxy |
58 | 54 | */ |
59 | 55 | public static void handleChatPacket(INetHandler netHandler, S02PacketChat packet) |
60 | 56 | { |
61 | -// Events events = LiteLoader.getEvents(); | |
62 | - if (InjectedCallbackProxy.events.onChat(packet)) | |
57 | + if (CallbackProxyClient.events.onChat(packet)) | |
63 | 58 | { |
64 | 59 | ((INetHandlerPlayClient)netHandler).handleChat(packet); |
65 | 60 | } |
... | ... | @@ -73,8 +68,7 @@ public class InjectedCallbackProxy |
73 | 68 | */ |
74 | 69 | public static void handleServerChatPacket(INetHandler netHandler, C01PacketChatMessage packet) |
75 | 70 | { |
76 | -// Events events = LiteLoader.getEvents(); | |
77 | - if (InjectedCallbackProxy.events.onServerChat((INetHandlerPlayServer)netHandler, packet)) | |
71 | + if (CallbackProxyClient.events.onServerChat((INetHandlerPlayServer)netHandler, packet)) | |
78 | 72 | { |
79 | 73 | ((INetHandlerPlayServer)netHandler).processChatMessage(packet); |
80 | 74 | } |
... | ... | @@ -88,11 +82,10 @@ public class InjectedCallbackProxy |
88 | 82 | */ |
89 | 83 | public static void handleJoinGamePacket(INetHandler netHandler, S01PacketJoinGame packet) |
90 | 84 | { |
91 | -// Events events = LiteLoader.getEvents(); | |
92 | - if (InjectedCallbackProxy.events.onPreJoinGame(netHandler, packet)) | |
85 | + if (CallbackProxyClient.events.onPreJoinGame(netHandler, packet)) | |
93 | 86 | { |
94 | 87 | ((INetHandlerPlayClient)netHandler).handleJoinGame(packet); |
95 | - InjectedCallbackProxy.events.onJoinGame(netHandler, packet); | |
88 | + CallbackProxyClient.events.onJoinGame(netHandler, packet); | |
96 | 89 | } |
97 | 90 | } |
98 | 91 | |
... | ... | @@ -124,74 +117,74 @@ public class InjectedCallbackProxy |
124 | 117 | pluginChannels.onPluginChannelMessage((INetHandlerPlayServer)netHandler, packet); |
125 | 118 | } |
126 | 119 | |
120 | + public static void onStartupComplete(int ref, Minecraft minecraft) | |
121 | + { | |
122 | + CallbackProxyClient.events = ClientEvents.getInstance(); | |
123 | + CallbackProxyClient.events.onStartupComplete(); | |
124 | + } | |
125 | + | |
127 | 126 | public static void onTimerUpdate(int ref) |
128 | 127 | { |
129 | - if (!InjectedCallbackProxy.initDone) | |
130 | - { | |
131 | - InjectedCallbackProxy.initDone = true; | |
132 | - InjectedCallbackProxy.events = LiteLoader.getEvents(); | |
133 | - InjectedCallbackProxy.events.preBeginGame(); | |
134 | - } | |
135 | - | |
136 | - InjectedCallbackProxy.events.onTimerUpdate(); | |
128 | + CallbackProxyClient.events.onTimerUpdate(); | |
137 | 129 | } |
138 | 130 | |
139 | 131 | public static void onAnimateTick(int ref) |
140 | 132 | { |
141 | - InjectedCallbackProxy.clock = true; | |
133 | + CallbackProxyClient.clock = true; | |
142 | 134 | } |
143 | 135 | |
144 | 136 | public static void onTick(int ref) |
145 | 137 | { |
146 | 138 | if (ref == 2) |
147 | 139 | { |
148 | - InjectedCallbackProxy.events.onTick(InjectedCallbackProxy.clock); | |
140 | + CallbackProxyClient.events.onTick(CallbackProxyClient.clock); | |
141 | + CallbackProxyClient.clock = false; | |
149 | 142 | } |
150 | 143 | } |
151 | 144 | |
152 | 145 | public static void onRender(int ref) |
153 | 146 | { |
154 | - InjectedCallbackProxy.events.onRender(); | |
147 | + CallbackProxyClient.events.onRender(); | |
155 | 148 | } |
156 | 149 | |
157 | 150 | public static void preRenderGUI(int ref) |
158 | 151 | { |
159 | 152 | if (ref == 1) |
160 | 153 | { |
161 | - InjectedCallbackProxy.events.preRenderGUI(ref); | |
154 | + CallbackProxyClient.events.preRenderGUI(ref); | |
162 | 155 | } |
163 | 156 | } |
164 | 157 | |
165 | 158 | public static void onSetupCameraTransform(int ref) |
166 | 159 | { |
167 | - InjectedCallbackProxy.events.onSetupCameraTransform(); | |
160 | + CallbackProxyClient.events.onSetupCameraTransform(); | |
168 | 161 | } |
169 | 162 | |
170 | 163 | public static void postRenderEntities(int ref) |
171 | 164 | { |
172 | - InjectedCallbackProxy.events.postRenderEntities(); | |
165 | + CallbackProxyClient.events.postRenderEntities(); | |
173 | 166 | } |
174 | 167 | |
175 | 168 | public static void postRender(int ref) |
176 | 169 | { |
177 | - InjectedCallbackProxy.events.postRender(); | |
170 | + CallbackProxyClient.events.postRender(); | |
178 | 171 | } |
179 | 172 | |
180 | 173 | public static void onRenderHUD(int ref) |
181 | 174 | { |
182 | - InjectedCallbackProxy.events.onRenderHUD(); | |
175 | + CallbackProxyClient.events.onRenderHUD(); | |
183 | 176 | } |
184 | 177 | |
185 | 178 | public static void onRenderChat(int ref) |
186 | 179 | { |
187 | - InjectedCallbackProxy.events.onRenderChat(); | |
180 | + CallbackProxyClient.events.onRenderChat(); | |
188 | 181 | } |
189 | 182 | |
190 | 183 | public static void postRenderChat(int ref) |
191 | 184 | { |
192 | 185 | if (ref == 10) |
193 | 186 | { |
194 | - InjectedCallbackProxy.events.postRenderChat(); | |
187 | + CallbackProxyClient.events.postRenderChat(); | |
195 | 188 | } |
196 | 189 | } |
197 | 190 | |
... | ... | @@ -199,8 +192,8 @@ public class InjectedCallbackProxy |
199 | 192 | { |
200 | 193 | if (ref == 2) |
201 | 194 | { |
202 | - InjectedCallbackProxy.events.postRenderHUD(); | |
203 | - InjectedCallbackProxy.events.preRenderGUI(ref); | |
195 | + CallbackProxyClient.events.postRenderHUD(); | |
196 | + CallbackProxyClient.events.preRenderGUI(ref); | |
204 | 197 | } |
205 | 198 | } |
206 | 199 | |
... | ... | @@ -208,7 +201,7 @@ public class InjectedCallbackProxy |
208 | 201 | { |
209 | 202 | if (ref == 0) |
210 | 203 | { |
211 | - InjectedCallbackProxy.events.onStartIntegratedServer(instance, folderName, worldName, worldSettings); | |
204 | + CallbackProxyClient.events.onStartServer(instance, folderName, worldName, worldSettings); | |
212 | 205 | } |
213 | 206 | } |
214 | 207 | |
... | ... | @@ -216,7 +209,7 @@ public class InjectedCallbackProxy |
216 | 209 | { |
217 | 210 | if (ref == 0) |
218 | 211 | { |
219 | - InjectedCallbackProxy.events.onInitializePlayerConnection(scm, netManager, player); | |
212 | + CallbackProxyClient.events.onInitializePlayerConnection(scm, netManager, player); | |
220 | 213 | } |
221 | 214 | } |
222 | 215 | |
... | ... | @@ -224,7 +217,7 @@ public class InjectedCallbackProxy |
224 | 217 | { |
225 | 218 | if (ref == 0) |
226 | 219 | { |
227 | - InjectedCallbackProxy.events.onPlayerLogin(scm, player); | |
220 | + CallbackProxyClient.events.onPlayerLogin(scm, player); | |
228 | 221 | } |
229 | 222 | } |
230 | 223 | |
... | ... | @@ -232,7 +225,7 @@ public class InjectedCallbackProxy |
232 | 225 | { |
233 | 226 | if (ref == 0) |
234 | 227 | { |
235 | - InjectedCallbackProxy.events.onPlayerLogout(scm, player); | |
228 | + CallbackProxyClient.events.onPlayerLogout(scm, player); | |
236 | 229 | } |
237 | 230 | } |
238 | 231 | |
... | ... | @@ -240,7 +233,7 @@ public class InjectedCallbackProxy |
240 | 233 | { |
241 | 234 | if (ref == 0) |
242 | 235 | { |
243 | - InjectedCallbackProxy.events.onSpawnPlayer(scm, returnValue, profile); | |
236 | + CallbackProxyClient.events.onSpawnPlayer(scm, returnValue, profile); | |
244 | 237 | } |
245 | 238 | |
246 | 239 | return returnValue; |
... | ... | @@ -250,7 +243,7 @@ public class InjectedCallbackProxy |
250 | 243 | { |
251 | 244 | if (ref == 0) |
252 | 245 | { |
253 | - InjectedCallbackProxy.events.onRespawnPlayer(scm, returnValue, oldPlayer, dimension, won); | |
246 | + CallbackProxyClient.events.onRespawnPlayer(scm, returnValue, oldPlayer, dimension, won); | |
254 | 247 | } |
255 | 248 | |
256 | 249 | return returnValue; |
... | ... | @@ -260,7 +253,17 @@ public class InjectedCallbackProxy |
260 | 253 | { |
261 | 254 | if (ref == 0) |
262 | 255 | { |
263 | - InjectedCallbackProxy.events.onSendChatMessage(packet, message); | |
256 | + CallbackProxyClient.events.onSendChatMessage(packet, message); | |
264 | 257 | } |
265 | 258 | } |
259 | + | |
260 | + public static void onOutboundChat(EventInfo<EntityClientPlayerMP> e, String message) | |
261 | + { | |
262 | + CallbackProxyClient.events.onSendChatMessage(e, message); | |
263 | + } | |
264 | + | |
265 | + public static void onResize(EventInfo<Minecraft> e) | |
266 | + { | |
267 | + CallbackProxyClient.events.onResize(e.getSource()); | |
268 | + } | |
266 | 269 | } | ... | ... |
java/com/mumfrey/liteloader/core/Events.java renamed to java/client/com/mumfrey/liteloader/client/ClientEvents.java
1 | -package com.mumfrey.liteloader.core; | |
1 | +package com.mumfrey.liteloader.client; | |
2 | 2 | |
3 | 3 | import java.util.LinkedList; |
4 | 4 | |
5 | 5 | import net.minecraft.client.Minecraft; |
6 | +import net.minecraft.client.entity.EntityClientPlayerMP; | |
6 | 7 | import net.minecraft.client.gui.GuiNewChat; |
7 | 8 | import net.minecraft.client.gui.ScaledResolution; |
8 | -import net.minecraft.command.ICommandManager; | |
9 | -import net.minecraft.command.ServerCommandManager; | |
10 | -import net.minecraft.entity.player.EntityPlayerMP; | |
11 | 9 | import net.minecraft.network.INetHandler; |
12 | -import net.minecraft.network.NetHandlerPlayServer; | |
13 | -import net.minecraft.network.NetworkManager; | |
14 | 10 | import net.minecraft.network.login.INetHandlerLoginClient; |
15 | 11 | import net.minecraft.network.login.server.S02PacketLoginSuccess; |
16 | -import net.minecraft.network.play.INetHandlerPlayServer; | |
17 | 12 | import net.minecraft.network.play.client.C01PacketChatMessage; |
18 | 13 | import net.minecraft.network.play.server.S01PacketJoinGame; |
19 | 14 | import net.minecraft.network.play.server.S02PacketChat; |
20 | 15 | import net.minecraft.profiler.Profiler; |
21 | 16 | import net.minecraft.server.integrated.IntegratedServer; |
22 | -import net.minecraft.server.management.ServerConfigurationManager; | |
23 | 17 | import net.minecraft.util.IChatComponent; |
24 | 18 | import net.minecraft.util.Timer; |
25 | -import net.minecraft.world.WorldSettings; | |
26 | 19 | |
27 | 20 | import org.lwjgl.input.Mouse; |
28 | 21 | |
29 | -import com.mojang.authlib.GameProfile; | |
30 | 22 | import com.mumfrey.liteloader.*; |
31 | -import com.mumfrey.liteloader.core.gen.GenProfiler; | |
32 | -import com.mumfrey.liteloader.core.overlays.IMinecraft; | |
33 | -import com.mumfrey.liteloader.util.PrivateFields; | |
23 | +import com.mumfrey.liteloader.client.gen.GenProfiler; | |
24 | +import com.mumfrey.liteloader.client.overlays.IMinecraft; | |
25 | +import com.mumfrey.liteloader.client.util.PrivateFields; | |
26 | +import com.mumfrey.liteloader.common.LoadingProgress; | |
27 | +import com.mumfrey.liteloader.core.ClientPluginChannels; | |
28 | +import com.mumfrey.liteloader.core.Events; | |
29 | +import com.mumfrey.liteloader.core.InterfaceRegistrationDelegate; | |
30 | +import com.mumfrey.liteloader.core.LiteLoader; | |
31 | +import com.mumfrey.liteloader.launch.LoaderProperties; | |
32 | +import com.mumfrey.liteloader.transformers.event.EventInfo; | |
34 | 33 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
35 | 34 | |
36 | -/** | |
37 | - * | |
38 | - * @author Adam Mummery-Smith | |
39 | - */ | |
40 | -public class Events | |
41 | -{ | |
42 | - /** | |
43 | - * Reference to the loader instance | |
44 | - */ | |
45 | - private final LiteLoader loader; | |
46 | - | |
35 | +public class ClientEvents extends Events<Minecraft, IntegratedServer> | |
36 | +{ | |
37 | + private static ClientEvents instance; | |
38 | + | |
47 | 39 | /** |
48 | 40 | * Reference to the game |
49 | 41 | */ |
50 | - private final Minecraft minecraft; | |
51 | - | |
52 | - /** | |
53 | - * Client plugin channel manager | |
54 | - */ | |
55 | - private final ClientPluginChannels clientPluginChannels; | |
56 | - | |
57 | - /** | |
58 | - * Server plugin channel manager | |
59 | - */ | |
60 | - private final ServerPluginChannels serverPluginChannels; | |
61 | - | |
42 | + protected final GameEngineClient engineClient; | |
43 | + | |
62 | 44 | /** |
63 | 45 | * Reference to the minecraft timer |
64 | 46 | */ |
... | ... | @@ -67,8 +49,8 @@ public class Events |
67 | 49 | /** |
68 | 50 | * Flags which keep track of whether hooks have been applied |
69 | 51 | */ |
70 | - private boolean hookInitDone, lateInitDone, profilerHooked; | |
71 | - | |
52 | + private boolean lateInitDone, profilerHooked; | |
53 | + | |
72 | 54 | /** |
73 | 55 | * Profiler hook objects |
74 | 56 | */ |
... | ... | @@ -88,7 +70,11 @@ public class Events |
88 | 70 | * Current screen height |
89 | 71 | */ |
90 | 72 | private int screenHeight = 480; |
91 | - | |
73 | + | |
74 | + /** | |
75 | + * | |
76 | + */ | |
77 | + private boolean wasFullScreen = false; | |
92 | 78 | |
93 | 79 | /** |
94 | 80 | * List of mods which implement Tickable interface and will receive tick |
... | ... | @@ -160,47 +146,37 @@ public class Events |
160 | 146 | private LinkedList<PreJoinGameListener> preJoinGameListeners = new LinkedList<PreJoinGameListener>(); |
161 | 147 | |
162 | 148 | /** |
163 | - * List of mods which can filter server chat | |
164 | - */ | |
165 | - private LinkedList<ServerChatFilter> serverChatFilters = new LinkedList<ServerChatFilter>(); | |
166 | - | |
167 | - /** | |
168 | - * List of mods which provide server commands | |
149 | + * List of mods which monitor outbound chat | |
169 | 150 | */ |
170 | - private LinkedList<ServerCommandProvider> serverCommandProviders = new LinkedList<ServerCommandProvider>(); | |
151 | + private LinkedList<OutboundChatListener> outboundChatListeners = new LinkedList<OutboundChatListener>(); | |
171 | 152 | |
172 | 153 | /** |
173 | - * List of mods which monitor server player events | |
154 | + * List of mods which filter outbound chat | |
174 | 155 | */ |
175 | - private LinkedList<ServerPlayerListener> serverPlayerListeners = new LinkedList<ServerPlayerListener>(); | |
176 | - | |
156 | + private LinkedList<OutboundChatFilter> outboundChatFilters = new LinkedList<OutboundChatFilter>(); | |
157 | + | |
177 | 158 | /** |
178 | - * List of mods which monitor outbound chat | |
159 | + * List of mods which monitor changes in the viewport | |
179 | 160 | */ |
180 | - private LinkedList<OutboundChatListener> outboundChatListeners = new LinkedList<OutboundChatListener>(); | |
181 | - | |
161 | + private LinkedList<ViewportListener> viewportListeners = new LinkedList<ViewportListener>(); | |
162 | + | |
182 | 163 | /** |
183 | 164 | * Hash code of the current world. We don't store the world reference here because we don't want |
184 | 165 | * to mess with world GC by mistake |
185 | 166 | */ |
186 | 167 | private int worldHashCode = 0; |
187 | 168 | |
188 | - /** | |
189 | - * Package private ctor | |
190 | - * | |
191 | - * @param loader | |
192 | - * @param minecraft | |
193 | - * @param pluginChannels | |
194 | - */ | |
195 | - Events(LiteLoader loader, Minecraft minecraft, ClientPluginChannels pluginChannels, ServerPluginChannels serverPluginChannels, boolean genMappings) | |
169 | + @SuppressWarnings("cast") | |
170 | + public ClientEvents(LiteLoader loader, GameEngineClient engine, LoaderProperties properties) | |
196 | 171 | { |
197 | - this.loader = loader; | |
198 | - this.minecraft = minecraft; | |
199 | - this.clientPluginChannels = pluginChannels; | |
200 | - this.serverPluginChannels = serverPluginChannels; | |
172 | + super(loader, engine, properties); | |
173 | + | |
174 | + ClientEvents.instance = this; | |
175 | + | |
176 | + this.engineClient = (GameEngineClient)engine; | |
201 | 177 | try |
202 | 178 | { |
203 | - if (genMappings) | |
179 | + if (properties.getBooleanProperty(LoaderProperties.OPTION_GENERATE_MAPPINGS)) | |
204 | 180 | { |
205 | 181 | this.genProfiler = GenProfiler.class.newInstance(); |
206 | 182 | } |
... | ... | @@ -210,109 +186,39 @@ public class Events |
210 | 186 | // th.printStackTrace(); |
211 | 187 | } |
212 | 188 | } |
213 | - | |
214 | - /** | |
215 | - * Add a listener to the relevant listener lists | |
216 | - * | |
217 | - * @param listener | |
189 | + | |
190 | + static ClientEvents getInstance() | |
191 | + { | |
192 | + return ClientEvents.instance; | |
193 | + } | |
194 | + | |
195 | + /* (non-Javadoc) | |
196 | + * @see com.mumfrey.liteloader.api.InterfaceProvider#registerInterfaces(com.mumfrey.liteloader.core.InterfaceRegistrationDelegate) | |
218 | 197 | */ |
219 | - public void addListener(LiteMod listener) | |
198 | + @Override | |
199 | + public void registerInterfaces(InterfaceRegistrationDelegate delegate) | |
220 | 200 | { |
221 | - if (listener instanceof Tickable) | |
222 | - { | |
223 | - this.addTickListener((Tickable)listener); | |
224 | - } | |
225 | - | |
226 | - if (listener instanceof GameLoopListener) | |
227 | - { | |
228 | - this.addLoopListener((GameLoopListener)listener); | |
229 | - } | |
230 | - | |
231 | - if (listener instanceof InitCompleteListener) | |
232 | - { | |
233 | - this.addInitListener((InitCompleteListener)listener); | |
234 | - } | |
235 | - | |
236 | - if (listener instanceof RenderListener) | |
237 | - { | |
238 | - this.addRenderListener((RenderListener)listener); | |
239 | - } | |
240 | - | |
241 | - if (listener instanceof PostRenderListener) | |
242 | - { | |
243 | - this.addPostRenderListener((PostRenderListener)listener); | |
244 | - } | |
245 | - | |
246 | - if (listener instanceof ChatFilter) | |
247 | - { | |
248 | - this.addChatFilter((ChatFilter)listener); | |
249 | - } | |
250 | - | |
251 | - if (listener instanceof ChatListener) | |
252 | - { | |
253 | - if (listener instanceof ChatFilter) | |
254 | - { | |
255 | - LiteLoaderLogger.warning("Interface error initialising mod '%1s'. A mod implementing ChatFilter and ChatListener is not supported! Remove one of these interfaces", listener.getName()); | |
256 | - } | |
257 | - else | |
258 | - { | |
259 | - this.addChatListener((ChatListener)listener); | |
260 | - } | |
261 | - } | |
262 | - | |
263 | - if (listener instanceof ChatRenderListener) | |
264 | - { | |
265 | - this.addChatRenderListener((ChatRenderListener)listener); | |
266 | - } | |
267 | - | |
268 | - if (listener instanceof HUDRenderListener) | |
269 | - { | |
270 | - this.addHUDRenderListener((HUDRenderListener)listener); | |
271 | - } | |
272 | - | |
273 | - if (listener instanceof PreJoinGameListener) | |
274 | - { | |
275 | - this.addPreJoinGameListener((PreJoinGameListener)listener); | |
276 | - } | |
277 | - | |
278 | - if (listener instanceof JoinGameListener) | |
279 | - { | |
280 | - this.addJoinGameListener((JoinGameListener)listener); | |
281 | - } | |
282 | - | |
283 | - if (listener instanceof ServerChatFilter) | |
284 | - { | |
285 | - this.addServerChatFilter((ServerChatFilter)listener); | |
286 | - } | |
287 | - | |
288 | - if (listener instanceof ServerCommandProvider) | |
289 | - { | |
290 | - this.addServerCommandProvider((ServerCommandProvider)listener); | |
291 | - } | |
292 | - | |
293 | - if (listener instanceof ServerPlayerListener) | |
294 | - { | |
295 | - this.addServerPlayerListener((ServerPlayerListener)listener); | |
296 | - } | |
297 | - | |
298 | - if (listener instanceof OutboundChatListener) | |
299 | - { | |
300 | - this.addOutboundChatListener((OutboundChatListener)listener); | |
301 | - } | |
302 | - | |
303 | - this.clientPluginChannels.addListener(listener); | |
304 | - this.serverPluginChannels.addListener(listener); | |
305 | - | |
306 | - if (listener instanceof CommonPluginChannelListener && !(listener instanceof PluginChannelListener) && !(listener instanceof ServerPluginChannelListener)) | |
307 | - { | |
308 | - LiteLoaderLogger.warning("Interface error for mod '%1s'. Implementing CommonPluginChannelListener has no effect! Use PluginChannelListener or ServerPluginChannelListener instead", listener.getName()); | |
309 | - } | |
201 | + delegate.registerInterface(Tickable.class); | |
202 | + delegate.registerInterface(GameLoopListener.class); | |
203 | + delegate.registerInterface(InitCompleteListener.class); | |
204 | + delegate.registerInterface(RenderListener.class); | |
205 | + delegate.registerInterface(PostRenderListener.class); | |
206 | + delegate.registerInterface(ChatFilter.class); | |
207 | + delegate.registerInterface(ChatListener.class); | |
208 | + delegate.registerInterface(ChatRenderListener.class); | |
209 | + delegate.registerInterface(HUDRenderListener.class); | |
210 | + delegate.registerInterface(PreJoinGameListener.class); | |
211 | + delegate.registerInterface(JoinGameListener.class); | |
212 | + delegate.registerInterface(OutboundChatListener.class); | |
213 | + delegate.registerInterface(OutboundChatFilter.class); | |
214 | + delegate.registerInterface(ViewportListener.class); | |
310 | 215 | } |
311 | 216 | |
312 | 217 | /** |
313 | 218 | * Initialise hooks |
314 | 219 | */ |
315 | - public void initHooks() | |
220 | + @Override | |
221 | + public void initProvider() | |
316 | 222 | { |
317 | 223 | if (this.genProfiler != null) |
318 | 224 | { |
... | ... | @@ -324,7 +230,7 @@ public class Events |
324 | 230 | if (!this.profilerHooked) |
325 | 231 | { |
326 | 232 | this.profilerHooked = true; |
327 | - PrivateFields.minecraftProfiler.setFinal(this.minecraft, this.genProfiler); | |
233 | + PrivateFields.minecraftProfiler.setFinal(this.engine.getClient(), this.genProfiler); | |
328 | 234 | } |
329 | 235 | } |
330 | 236 | catch (Exception ex) |
... | ... | @@ -333,10 +239,22 @@ public class Events |
333 | 239 | ex.printStackTrace(); |
334 | 240 | } |
335 | 241 | } |
336 | - | |
337 | - this.hookInitDone = true; | |
338 | 242 | } |
339 | - | |
243 | + | |
244 | + /** | |
245 | + * @deprecated use LiteLoader.getInterfaceManager().registerListener(listener); instead | |
246 | + * @param tickListener | |
247 | + */ | |
248 | + @Deprecated | |
249 | + @Override | |
250 | + public void addTickListener(Object tickListener) | |
251 | + { | |
252 | + if (tickListener instanceof Tickable) | |
253 | + { | |
254 | + this.addTickListener((Tickable)tickListener); | |
255 | + } | |
256 | + } | |
257 | + | |
340 | 258 | /** |
341 | 259 | * @param tickable |
342 | 260 | */ |
... | ... | @@ -345,8 +263,6 @@ public class Events |
345 | 263 | if (!this.tickListeners.contains(tickable)) |
346 | 264 | { |
347 | 265 | this.tickListeners.add(tickable); |
348 | - if (this.hookInitDone) | |
349 | - this.initHooks(); | |
350 | 266 | } |
351 | 267 | } |
352 | 268 | |
... | ... | @@ -358,8 +274,6 @@ public class Events |
358 | 274 | if (!this.loopListeners.contains(loopListener)) |
359 | 275 | { |
360 | 276 | this.loopListeners.add(loopListener); |
361 | - if (this.hookInitDone) | |
362 | - this.initHooks(); | |
363 | 277 | } |
364 | 278 | } |
365 | 279 | |
... | ... | @@ -371,8 +285,6 @@ public class Events |
371 | 285 | if (!this.initListeners.contains(initCompleteListener)) |
372 | 286 | { |
373 | 287 | this.initListeners.add(initCompleteListener); |
374 | - if (this.hookInitDone) | |
375 | - this.initHooks(); | |
376 | 288 | } |
377 | 289 | } |
378 | 290 | |
... | ... | @@ -384,8 +296,6 @@ public class Events |
384 | 296 | if (!this.renderListeners.contains(renderListener)) |
385 | 297 | { |
386 | 298 | this.renderListeners.add(renderListener); |
387 | - if (this.hookInitDone) | |
388 | - this.initHooks(); | |
389 | 299 | } |
390 | 300 | } |
391 | 301 | |
... | ... | @@ -397,12 +307,24 @@ public class Events |
397 | 307 | if (!this.postRenderListeners.contains(postRenderListener)) |
398 | 308 | { |
399 | 309 | this.postRenderListeners.add(postRenderListener); |
400 | - if (this.hookInitDone) | |
401 | - this.initHooks(); | |
402 | 310 | } |
403 | 311 | } |
404 | 312 | |
405 | 313 | /** |
314 | + * @deprecated use LiteLoader.getInterfaceManager().registerListener(listener); instead | |
315 | + * @param chatFilter | |
316 | + */ | |
317 | + @Deprecated | |
318 | + @Override | |
319 | + public void addChatFilter(Object chatFilter) | |
320 | + { | |
321 | + if (chatFilter instanceof ChatFilter) | |
322 | + { | |
323 | + this.addChatFilter((ChatFilter)chatFilter); | |
324 | + } | |
325 | + } | |
326 | + | |
327 | + /** | |
406 | 328 | * @param chatFilter |
407 | 329 | */ |
408 | 330 | public void addChatFilter(ChatFilter chatFilter) |
... | ... | @@ -418,7 +340,11 @@ public class Events |
418 | 340 | */ |
419 | 341 | public void addChatListener(ChatListener chatListener) |
420 | 342 | { |
421 | - if (!this.chatListeners.contains(chatListener)) | |
343 | + if (chatListener instanceof ChatFilter) | |
344 | + { | |
345 | + LiteLoaderLogger.warning("Interface error initialising mod '%1s'. A mod implementing ChatFilter and ChatListener is not supported! Remove one of these interfaces", chatListener.getName()); | |
346 | + } | |
347 | + else if (!this.chatListeners.contains(chatListener)) | |
422 | 348 | { |
423 | 349 | this.chatListeners.add(chatListener); |
424 | 350 | } |
... | ... | @@ -432,8 +358,6 @@ public class Events |
432 | 358 | if (!this.chatRenderListeners.contains(chatRenderListener)) |
433 | 359 | { |
434 | 360 | this.chatRenderListeners.add(chatRenderListener); |
435 | - if (this.hookInitDone) | |
436 | - this.initHooks(); | |
437 | 361 | } |
438 | 362 | } |
439 | 363 | |
... | ... | @@ -445,8 +369,6 @@ public class Events |
445 | 369 | if (!this.hudRenderListeners.contains(hudRenderListener)) |
446 | 370 | { |
447 | 371 | this.hudRenderListeners.add(hudRenderListener); |
448 | - if (this.hookInitDone) | |
449 | - this.initHooks(); | |
450 | 372 | } |
451 | 373 | } |
452 | 374 | |
... | ... | @@ -484,55 +406,45 @@ public class Events |
484 | 406 | } |
485 | 407 | |
486 | 408 | /** |
487 | - * @param serverChatFilter | |
488 | - */ | |
489 | - public void addServerChatFilter(ServerChatFilter serverChatFilter) | |
490 | - { | |
491 | - if (!this.serverChatFilters.contains(serverChatFilter)) | |
492 | - { | |
493 | - this.serverChatFilters.add(serverChatFilter); | |
494 | - } | |
495 | - } | |
496 | - | |
497 | - /** | |
498 | - * @param serverCommandProvider | |
409 | + * @param outboundChatListener | |
499 | 410 | */ |
500 | - public void addServerCommandProvider(ServerCommandProvider serverCommandProvider) | |
411 | + public void addOutboundChatListener(OutboundChatListener outboundChatListener) | |
501 | 412 | { |
502 | - if (!this.serverCommandProviders.contains(serverCommandProvider)) | |
413 | + if (!this.outboundChatListeners.contains(outboundChatListener)) | |
503 | 414 | { |
504 | - this.serverCommandProviders.add(serverCommandProvider); | |
415 | + this.outboundChatListeners.add(outboundChatListener); | |
505 | 416 | } |
506 | 417 | } |
507 | - | |
418 | + | |
508 | 419 | /** |
509 | - * @param serverPlayerListener | |
420 | + * @param outboundChatFilter | |
510 | 421 | */ |
511 | - public void addServerPlayerListener(ServerPlayerListener serverPlayerListener) | |
422 | + public void addOutboundChatFiler(OutboundChatFilter outboundChatFilter) | |
512 | 423 | { |
513 | - if (!this.serverPlayerListeners.contains(serverPlayerListener)) | |
424 | + if (!this.outboundChatFilters.contains(outboundChatFilter)) | |
514 | 425 | { |
515 | - this.serverPlayerListeners.add(serverPlayerListener); | |
426 | + this.outboundChatFilters.add(outboundChatFilter); | |
516 | 427 | } |
517 | 428 | } |
518 | - | |
429 | + | |
519 | 430 | /** |
520 | - * @param outboundChatListener | |
431 | + * @param viewportListener | |
521 | 432 | */ |
522 | - private void addOutboundChatListener(OutboundChatListener outboundChatListener) | |
433 | + public void addViewportListener(ViewportListener viewportListener) | |
523 | 434 | { |
524 | - if (!this.outboundChatListeners.contains(outboundChatListener)) | |
435 | + if (!this.viewportListeners.contains(viewportListener)) | |
525 | 436 | { |
526 | - this.outboundChatListeners.add(outboundChatListener); | |
437 | + this.viewportListeners.add(viewportListener); | |
527 | 438 | } |
528 | 439 | } |
529 | 440 | |
530 | 441 | /** |
531 | 442 | * Late initialisation callback |
532 | 443 | */ |
533 | - public void preBeginGame() | |
444 | + @Override | |
445 | + protected void onStartupComplete() | |
534 | 446 | { |
535 | - this.loader.preInitMods(); | |
447 | + this.engine.refreshResources(false); | |
536 | 448 | |
537 | 449 | if (!this.lateInitDone) |
538 | 450 | { |
... | ... | @@ -542,8 +454,9 @@ public class Events |
542 | 454 | { |
543 | 455 | try |
544 | 456 | { |
545 | - LiteLoaderLogger.info("Calling late init for mod " + initMod.getName()); | |
546 | - initMod.onInitCompleted(this.minecraft, this.loader); | |
457 | + LoadingProgress.setMessage("Calling late init for mod %s...", initMod.getName()); | |
458 | + LiteLoaderLogger.info("Calling late init for mod %s", initMod.getName()); | |
459 | + initMod.onInitCompleted(this.engine.getClient(), this.loader); | |
547 | 460 | } |
548 | 461 | catch (Throwable th) |
549 | 462 | { |
... | ... | @@ -551,19 +464,35 @@ public class Events |
551 | 464 | } |
552 | 465 | } |
553 | 466 | } |
467 | + | |
468 | + this.onResize(this.engineClient.getClient()); | |
554 | 469 | |
555 | - this.loader.preBeginGame(); | |
470 | + super.onStartupComplete(); | |
471 | + } | |
472 | + | |
473 | + public void onResize(Minecraft minecraft) | |
474 | + { | |
475 | + this.currentResolution = this.engineClient.getScaledResolution(); | |
476 | + this.screenWidth = this.currentResolution.getScaledWidth(); | |
477 | + this.screenHeight = this.currentResolution.getScaledHeight(); | |
478 | + | |
479 | + if (this.wasFullScreen != minecraft.isFullScreen()) | |
480 | + { | |
481 | + for (ViewportListener viewportListener : this.viewportListeners) | |
482 | + viewportListener.onFullScreenToggled(minecraft.isFullScreen()); | |
483 | + } | |
484 | + | |
485 | + this.wasFullScreen = minecraft.isFullScreen(); | |
486 | + | |
487 | + for (ViewportListener viewportListener : this.viewportListeners) | |
488 | + viewportListener.onViewportResized(this.currentResolution, minecraft.displayWidth, minecraft.displayHeight); | |
556 | 489 | } |
557 | 490 | |
558 | 491 | /** |
559 | 492 | * Callback from the tick hook, pre render |
560 | 493 | */ |
561 | - public void onRender() | |
494 | + void onRender() | |
562 | 495 | { |
563 | - this.currentResolution = new ScaledResolution(this.minecraft.gameSettings, this.minecraft.displayWidth, this.minecraft.displayHeight); | |
564 | - this.screenWidth = this.currentResolution.getScaledWidth(); | |
565 | - this.screenHeight = this.currentResolution.getScaledHeight(); | |
566 | - | |
567 | 496 | for (RenderListener renderListener : this.renderListeners) |
568 | 497 | renderListener.onRender(); |
569 | 498 | } |
... | ... | @@ -571,7 +500,7 @@ public class Events |
571 | 500 | /** |
572 | 501 | * Callback from the tick hook, post render entities |
573 | 502 | */ |
574 | - public void postRenderEntities() | |
503 | + void postRenderEntities() | |
575 | 504 | { |
576 | 505 | float partialTicks = (this.minecraftTimer != null) ? this.minecraftTimer.elapsedPartialTicks : 0.0F; |
577 | 506 | |
... | ... | @@ -582,7 +511,7 @@ public class Events |
582 | 511 | /** |
583 | 512 | * Callback from the tick hook, post render |
584 | 513 | */ |
585 | - public void postRender() | |
514 | + void postRender() | |
586 | 515 | { |
587 | 516 | float partialTicks = (this.minecraftTimer != null) ? this.minecraftTimer.elapsedPartialTicks : 0.0F; |
588 | 517 | |
... | ... | @@ -593,19 +522,21 @@ public class Events |
593 | 522 | /** |
594 | 523 | * Called immediately before the current GUI is rendered |
595 | 524 | */ |
596 | - public void preRenderGUI(int ref) | |
525 | + void preRenderGUI(int ref) | |
597 | 526 | { |
598 | - if (!this.minecraft.skipRenderWorld && ref == (this.minecraft.theWorld == null ? 1 : 2)) | |
527 | + Minecraft minecraft = this.engine.getClient(); | |
528 | + | |
529 | + if (!minecraft.skipRenderWorld && ref == (minecraft.theWorld == null ? 1 : 2)) | |
599 | 530 | { |
600 | 531 | for (RenderListener renderListener : this.renderListeners) |
601 | - renderListener.onRenderGui(this.minecraft.currentScreen); | |
532 | + renderListener.onRenderGui(this.engineClient.getCurrentScreen()); | |
602 | 533 | } |
603 | 534 | } |
604 | 535 | |
605 | 536 | /** |
606 | 537 | * Called immediately after the world/camera transform is initialised |
607 | 538 | */ |
608 | - public void onSetupCameraTransform() | |
539 | + void onSetupCameraTransform() | |
609 | 540 | { |
610 | 541 | for (RenderListener renderListener : this.renderListeners) |
611 | 542 | renderListener.onSetupCameraTransform(); |
... | ... | @@ -614,9 +545,9 @@ public class Events |
614 | 545 | /** |
615 | 546 | * Called immediately before the chat log is rendered |
616 | 547 | */ |
617 | - public void onRenderChat() | |
548 | + void onRenderChat() | |
618 | 549 | { |
619 | - GuiNewChat chat = this.minecraft.ingameGUI.getChatGUI(); | |
550 | + GuiNewChat chat = this.engineClient.getChatGUI(); | |
620 | 551 | |
621 | 552 | for (ChatRenderListener chatRenderListener : this.chatRenderListeners) |
622 | 553 | chatRenderListener.onPreRenderChat(this.screenWidth, this.screenHeight, chat); |
... | ... | @@ -625,9 +556,9 @@ public class Events |
625 | 556 | /** |
626 | 557 | * Called immediately after the chat log is rendered |
627 | 558 | */ |
628 | - public void postRenderChat() | |
559 | + void postRenderChat() | |
629 | 560 | { |
630 | - GuiNewChat chat = this.minecraft.ingameGUI.getChatGUI(); | |
561 | + GuiNewChat chat = this.engineClient.getChatGUI(); | |
631 | 562 | |
632 | 563 | for (ChatRenderListener chatRenderListener : this.chatRenderListeners) |
633 | 564 | chatRenderListener.onPostRenderChat(this.screenWidth, this.screenHeight, chat); |
... | ... | @@ -636,9 +567,9 @@ public class Events |
636 | 567 | /** |
637 | 568 | * Callback when about to render the HUD |
638 | 569 | */ |
639 | - public void onRenderHUD() | |
570 | + void onRenderHUD() | |
640 | 571 | { |
641 | - if (!this.minecraft.gameSettings.hideGUI || this.minecraft.currentScreen != null) | |
572 | + if (!this.engineClient.hideGUI() || this.engineClient.getCurrentScreen() != null) | |
642 | 573 | { |
643 | 574 | for (HUDRenderListener hudRenderListener : this.hudRenderListeners) |
644 | 575 | hudRenderListener.onPreRenderHUD(this.screenWidth, this.screenHeight); |
... | ... | @@ -648,9 +579,9 @@ public class Events |
648 | 579 | /** |
649 | 580 | * Callback when the HUD has just been rendered |
650 | 581 | */ |
651 | - public void postRenderHUD() | |
582 | + void postRenderHUD() | |
652 | 583 | { |
653 | - if (!this.minecraft.gameSettings.hideGUI || this.minecraft.currentScreen != null) | |
584 | + if (!this.engineClient.hideGUI() || this.engineClient.getCurrentScreen() != null) | |
654 | 585 | { |
655 | 586 | for (HUDRenderListener hudRenderListener : this.hudRenderListeners) |
656 | 587 | hudRenderListener.onPostRenderHUD(this.screenWidth, this.screenHeight); |
... | ... | @@ -660,10 +591,12 @@ public class Events |
660 | 591 | /** |
661 | 592 | * Callback from the tick hook, called every frame when the timer is updated |
662 | 593 | */ |
663 | - public void onTimerUpdate() | |
594 | + void onTimerUpdate() | |
664 | 595 | { |
596 | + Minecraft minecraft = this.engine.getClient(); | |
597 | + | |
665 | 598 | for (GameLoopListener loopListener : this.loopListeners) |
666 | - loopListener.onRunGameLoop(this.minecraft); | |
599 | + loopListener.onRunGameLoop(minecraft); | |
667 | 600 | } |
668 | 601 | |
669 | 602 | /** |
... | ... | @@ -671,16 +604,16 @@ public class Events |
671 | 604 | * |
672 | 605 | * @param clock True if this is a new tick (otherwise it's just a new frame) |
673 | 606 | */ |
674 | - public void onTick(boolean clock) | |
607 | + void onTick(boolean clock) | |
675 | 608 | { |
676 | - this.minecraft.mcProfiler.startSection("litemods"); | |
609 | + this.profiler.startSection("litemods"); | |
677 | 610 | float partialTicks = 0.0F; |
678 | 611 | |
679 | 612 | // Try to get the minecraft timer object and determine the value of the |
680 | 613 | // partialTicks |
681 | 614 | if (clock || this.minecraftTimer == null) |
682 | 615 | { |
683 | - this.minecraftTimer = ((IMinecraft)this.minecraft).getTimer(); | |
616 | + this.minecraftTimer = ((IMinecraft)this.engine.getClient()).getTimer(); | |
684 | 617 | } |
685 | 618 | |
686 | 619 | // Hooray, we got the timer reference |
... | ... | @@ -690,42 +623,44 @@ public class Events |
690 | 623 | clock = this.minecraftTimer.elapsedTicks > 0; |
691 | 624 | } |
692 | 625 | |
626 | + Minecraft minecraft = this.engine.getClient(); | |
627 | + | |
693 | 628 | // Flag indicates whether we are in game at the moment |
694 | - boolean inGame = this.minecraft.renderViewEntity != null && this.minecraft.renderViewEntity.worldObj != null; | |
629 | + boolean inGame = minecraft.renderViewEntity != null && minecraft.renderViewEntity.worldObj != null; | |
695 | 630 | |
696 | - this.minecraft.mcProfiler.startSection("loader"); | |
697 | - this.loader.onTick(clock, partialTicks, inGame); | |
631 | + this.profiler.startSection("loader"); | |
632 | + super.onTick(clock, partialTicks, inGame); | |
698 | 633 | |
699 | - int mouseX = Mouse.getX() * this.screenWidth / this.minecraft.displayWidth; | |
700 | - int mouseY = this.screenHeight - Mouse.getY() * this.screenHeight / this.minecraft.displayHeight - 1; | |
701 | - this.minecraft.mcProfiler.endStartSection("postrender"); | |
702 | - this.loader.postRender(mouseX, mouseY, partialTicks); | |
703 | - this.minecraft.mcProfiler.endSection(); | |
634 | + int mouseX = Mouse.getX() * this.screenWidth / minecraft.displayWidth; | |
635 | + int mouseY = this.screenHeight - Mouse.getY() * this.screenHeight / minecraft.displayHeight - 1; | |
636 | + this.profiler.endStartSection("postrender"); | |
637 | + super.onPostRender(mouseX, mouseY, partialTicks); | |
638 | + this.profiler.endSection(); | |
704 | 639 | |
705 | 640 | // Iterate tickable mods |
706 | 641 | for (Tickable tickable : this.tickListeners) |
707 | 642 | { |
708 | - this.minecraft.mcProfiler.startSection(tickable.getClass().getSimpleName().toLowerCase()); | |
709 | - tickable.onTick(this.minecraft, partialTicks, inGame, clock); | |
710 | - this.minecraft.mcProfiler.endSection(); | |
643 | + this.profiler.startSection(tickable.getClass().getSimpleName().toLowerCase()); | |
644 | + tickable.onTick(minecraft, partialTicks, inGame, clock); | |
645 | + this.profiler.endSection(); | |
711 | 646 | } |
712 | 647 | |
713 | 648 | // Detected world change |
714 | - if (this.minecraft.theWorld != null) | |
649 | + if (minecraft.theWorld != null) | |
715 | 650 | { |
716 | - if (this.minecraft.theWorld.hashCode() != this.worldHashCode) | |
651 | + if (minecraft.theWorld.hashCode() != this.worldHashCode) | |
717 | 652 | { |
718 | - this.worldHashCode = this.minecraft.theWorld.hashCode(); | |
719 | - this.loader.onWorldChanged(this.minecraft.theWorld); | |
653 | + this.worldHashCode = minecraft.theWorld.hashCode(); | |
654 | + super.onWorldChanged(minecraft.theWorld); | |
720 | 655 | } |
721 | 656 | } |
722 | 657 | else |
723 | 658 | { |
724 | 659 | this.worldHashCode = 0; |
725 | - this.loader.onWorldChanged(null); | |
660 | + super.onWorldChanged(null); | |
726 | 661 | } |
727 | 662 | |
728 | - this.minecraft.mcProfiler.endSection(); | |
663 | + this.profiler.endSection(); | |
729 | 664 | } |
730 | 665 | |
731 | 666 | /** |
... | ... | @@ -734,7 +669,7 @@ public class Events |
734 | 669 | * @param chatPacket |
735 | 670 | * @return |
736 | 671 | */ |
737 | - public boolean onChat(S02PacketChat chatPacket) | |
672 | + boolean onChat(S02PacketChat chatPacket) | |
738 | 673 | { |
739 | 674 | if (chatPacket.func_148915_c() == null) |
740 | 675 | return true; |
... | ... | @@ -768,21 +703,37 @@ public class Events |
768 | 703 | * @param packet |
769 | 704 | * @param message |
770 | 705 | */ |
771 | - public void onSendChatMessage(C01PacketChatMessage packet, String message) | |
706 | + void onSendChatMessage(C01PacketChatMessage packet, String message) | |
772 | 707 | { |
773 | 708 | for (OutboundChatListener outboundChatListener : this.outboundChatListeners) |
774 | 709 | { |
775 | 710 | outboundChatListener.onSendChatMessage(packet, message); |
776 | 711 | } |
777 | 712 | } |
713 | + | |
714 | + /** | |
715 | + * @param message | |
716 | + */ | |
717 | + void onSendChatMessage(EventInfo<EntityClientPlayerMP> e, String message) | |
718 | + { | |
719 | + for (OutboundChatFilter outboundChatFilter : this.outboundChatFilters) | |
720 | + { | |
721 | + if (!outboundChatFilter.onSendChatMessage(message)) | |
722 | + e.cancel(); | |
723 | + } | |
724 | + } | |
778 | 725 | |
779 | 726 | /** |
780 | 727 | * @param netHandler |
781 | 728 | * @param loginPacket |
782 | 729 | */ |
783 | - public void onPostLogin(INetHandlerLoginClient netHandler, S02PacketLoginSuccess loginPacket) | |
730 | + void onPostLogin(INetHandlerLoginClient netHandler, S02PacketLoginSuccess loginPacket) | |
784 | 731 | { |
785 | - this.clientPluginChannels.onPostLogin(netHandler, loginPacket); | |
732 | + ClientPluginChannels clientPluginChannels = LiteLoader.getClientPluginChannels(); | |
733 | + if (clientPluginChannels instanceof ClientPluginChannelsClient) | |
734 | + { | |
735 | + ((ClientPluginChannelsClient)clientPluginChannels).onPostLogin(netHandler, loginPacket); | |
736 | + } | |
786 | 737 | |
787 | 738 | for (PostLoginListener loginListener : this.postLoginListeners) |
788 | 739 | loginListener.onPostLogin(netHandler, loginPacket); |
... | ... | @@ -795,7 +746,7 @@ public class Events |
795 | 746 | * @param hookLogin |
796 | 747 | * @return |
797 | 748 | */ |
798 | - public boolean onPreJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | |
749 | + boolean onPreJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | |
799 | 750 | { |
800 | 751 | boolean cancelled = false; |
801 | 752 | |
... | ... | @@ -813,107 +764,18 @@ public class Events |
813 | 764 | * @param netHandler |
814 | 765 | * @param loginPacket |
815 | 766 | */ |
816 | - public void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | |
767 | + @Override | |
768 | + protected void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | |
817 | 769 | { |
818 | - this.loader.onJoinGame(netHandler, loginPacket); | |
819 | - this.clientPluginChannels.onJoinGame(netHandler, loginPacket); | |
770 | + super.onJoinGame(netHandler, loginPacket); | |
820 | 771 | |
821 | - for (JoinGameListener joinGameListener : this.joinGameListeners) | |
822 | - joinGameListener.onJoinGame(netHandler, loginPacket); | |
823 | - } | |
824 | - | |
825 | - /** | |
826 | - * Callback from the chat hook | |
827 | - * @param netHandler | |
828 | - * | |
829 | - * @param chatPacket | |
830 | - * @return | |
831 | - */ | |
832 | - public boolean onServerChat(INetHandlerPlayServer netHandler, C01PacketChatMessage chatPacket) | |
833 | - { | |
834 | - EntityPlayerMP player = netHandler instanceof NetHandlerPlayServer ? ((NetHandlerPlayServer)netHandler).playerEntity : null; | |
835 | - | |
836 | - for (ServerChatFilter chatFilter : this.serverChatFilters) | |
772 | + ClientPluginChannels clientPluginChannels = LiteLoader.getClientPluginChannels(); | |
773 | + if (clientPluginChannels instanceof ClientPluginChannelsClient) | |
837 | 774 | { |
838 | - if (!chatFilter.onChat(player, chatPacket, chatPacket.func_149439_c())) | |
839 | - { | |
840 | - return false; | |
841 | - } | |
775 | + ((ClientPluginChannelsClient)clientPluginChannels).onJoinGame(netHandler, loginPacket); | |
842 | 776 | } |
843 | - | |
844 | - return true; | |
845 | - } | |
846 | - | |
847 | - /** | |
848 | - * @param instance | |
849 | - * @param folderName | |
850 | - * @param worldName | |
851 | - * @param worldSettings | |
852 | - */ | |
853 | - public void onStartIntegratedServer(IntegratedServer instance, String folderName, String worldName, WorldSettings worldSettings) | |
854 | - { | |
855 | - ICommandManager commandManager = instance.getCommandManager(); | |
856 | 777 | |
857 | - if (commandManager instanceof ServerCommandManager) | |
858 | - { | |
859 | - ServerCommandManager serverCommandManager = (ServerCommandManager)commandManager; | |
860 | - | |
861 | - for (ServerCommandProvider commandProvider : this.serverCommandProviders) | |
862 | - commandProvider.provideCommands(serverCommandManager); | |
863 | - } | |
864 | - } | |
865 | - | |
866 | - /** | |
867 | - * @param scm | |
868 | - * @param player | |
869 | - * @param profile | |
870 | - */ | |
871 | - public void onSpawnPlayer(ServerConfigurationManager scm, EntityPlayerMP player, GameProfile profile) | |
872 | - { | |
873 | - for (ServerPlayerListener serverPlayerListener : this.serverPlayerListeners) | |
874 | - serverPlayerListener.onPlayerConnect(player, profile); | |
875 | - } | |
876 | - | |
877 | - /** | |
878 | - * @param scm | |
879 | - * @param player | |
880 | - */ | |
881 | - public void onPlayerLogin(ServerConfigurationManager scm, EntityPlayerMP player) | |
882 | - { | |
883 | - this.serverPluginChannels.onPlayerJoined(player); | |
884 | - } | |
885 | - | |
886 | - /** | |
887 | - * @param scm | |
888 | - * @param netManager | |
889 | - * @param player | |
890 | - */ | |
891 | - public void onInitializePlayerConnection(ServerConfigurationManager scm, NetworkManager netManager, EntityPlayerMP player) | |
892 | - { | |
893 | - for (ServerPlayerListener serverPlayerListener : this.serverPlayerListeners) | |
894 | - serverPlayerListener.onPlayerLoggedIn(player); | |
895 | - } | |
896 | - | |
897 | - /** | |
898 | - * @param scm | |
899 | - * @param player | |
900 | - * @param oldPlayer | |
901 | - * @param dimension | |
902 | - * @param copy | |
903 | - */ | |
904 | - public void onRespawnPlayer(ServerConfigurationManager scm, EntityPlayerMP player, EntityPlayerMP oldPlayer, int dimension, boolean won) | |
905 | - { | |
906 | - for (ServerPlayerListener serverPlayerListener : this.serverPlayerListeners) | |
907 | - serverPlayerListener.onPlayerRespawn(player, oldPlayer, dimension, won); | |
908 | - } | |
909 | - | |
910 | - /** | |
911 | - * @param scm | |
912 | - * @param player | |
913 | - */ | |
914 | - public void onPlayerLogout(ServerConfigurationManager scm, EntityPlayerMP player) | |
915 | - { | |
916 | - for (ServerPlayerListener serverPlayerListener : this.serverPlayerListeners) | |
917 | - serverPlayerListener.onPlayerLogout(player); | |
778 | + for (JoinGameListener joinGameListener : this.joinGameListeners) | |
779 | + joinGameListener.onJoinGame(netHandler, loginPacket); | |
918 | 780 | } |
919 | 781 | } | ... | ... |
java/client/com/mumfrey/liteloader/client/ClientPluginChannelsClient.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client; | |
2 | + | |
3 | +import net.minecraft.client.Minecraft; | |
4 | +import net.minecraft.client.network.NetHandlerLoginClient; | |
5 | +import net.minecraft.network.INetHandler; | |
6 | +import net.minecraft.network.NetworkManager; | |
7 | +import net.minecraft.network.login.INetHandlerLoginClient; | |
8 | +import net.minecraft.network.login.server.S02PacketLoginSuccess; | |
9 | +import net.minecraft.network.play.INetHandlerPlayClient; | |
10 | +import net.minecraft.network.play.client.C17PacketCustomPayload; | |
11 | +import net.minecraft.network.play.server.S01PacketJoinGame; | |
12 | +import net.minecraft.network.play.server.S3FPacketCustomPayload; | |
13 | + | |
14 | +import com.mumfrey.liteloader.client.util.PrivateFields; | |
15 | +import com.mumfrey.liteloader.core.ClientPluginChannels; | |
16 | +import com.mumfrey.liteloader.core.exceptions.UnregisteredChannelException; | |
17 | + | |
18 | +/** | |
19 | + * Handler for client plugin channels | |
20 | + * | |
21 | + * @author Adam Mummery-Smith | |
22 | + */ | |
23 | +public class ClientPluginChannelsClient extends ClientPluginChannels | |
24 | +{ | |
25 | + /** | |
26 | + * @param netHandler | |
27 | + * @param loginPacket | |
28 | + */ | |
29 | + void onPostLogin(INetHandlerLoginClient netHandler, S02PacketLoginSuccess loginPacket) | |
30 | + { | |
31 | + this.clearPluginChannels(netHandler); | |
32 | + } | |
33 | + | |
34 | + /** | |
35 | + * @param netHandler | |
36 | + * @param loginPacket | |
37 | + */ | |
38 | + void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | |
39 | + { | |
40 | + this.sendRegisteredPluginChannels(netHandler); | |
41 | + } | |
42 | + | |
43 | + /** | |
44 | + * Callback for the plugin channel hook | |
45 | + * | |
46 | + * @param customPayload | |
47 | + */ | |
48 | + @Override | |
49 | + public void onPluginChannelMessage(S3FPacketCustomPayload customPayload) | |
50 | + { | |
51 | + if (customPayload != null && customPayload.func_149169_c() != null) // getChannel | |
52 | + { | |
53 | + String channel = customPayload.func_149169_c(); // getChannel | |
54 | + byte[] data = customPayload.func_149168_d(); // getData | |
55 | + | |
56 | + this.onPluginChannelMessage(channel, data); | |
57 | + } | |
58 | + } | |
59 | + | |
60 | + /** | |
61 | + * @param netHandler | |
62 | + * @param registrationData | |
63 | + */ | |
64 | + @Override | |
65 | + protected void sendRegistrationData(INetHandler netHandler, byte[] registrationData) | |
66 | + { | |
67 | + if (netHandler instanceof INetHandlerLoginClient) | |
68 | + { | |
69 | + NetworkManager networkManager = PrivateFields.netManager.get(((NetHandlerLoginClient)netHandler)); | |
70 | + networkManager.scheduleOutboundPacket(new C17PacketCustomPayload(CHANNEL_REGISTER, registrationData)); | |
71 | + } | |
72 | + else if (netHandler instanceof INetHandlerPlayClient) | |
73 | + { | |
74 | + ClientPluginChannelsClient.dispatch(new C17PacketCustomPayload(CHANNEL_REGISTER, registrationData)); | |
75 | + } | |
76 | + } | |
77 | + | |
78 | + /** | |
79 | + * Send a message to the server on a plugin channel | |
80 | + * | |
81 | + * @param channel Channel to send, must not be a reserved channel name | |
82 | + * @param data | |
83 | + */ | |
84 | + @Override | |
85 | + protected boolean send(String channel, byte[] data, ChannelPolicy policy) | |
86 | + { | |
87 | + if (channel == null || channel.length() > 16 || CHANNEL_REGISTER.equals(channel) || CHANNEL_UNREGISTER.equals(channel)) | |
88 | + throw new RuntimeException("Invalid channel name specified"); | |
89 | + | |
90 | + if (!policy.allows(this, channel)) | |
91 | + { | |
92 | + if (policy.isSilent()) return false; | |
93 | + throw new UnregisteredChannelException(channel); | |
94 | + } | |
95 | + | |
96 | + C17PacketCustomPayload payload = new C17PacketCustomPayload(channel, data); | |
97 | + return ClientPluginChannelsClient.dispatch(payload); | |
98 | + } | |
99 | + | |
100 | + /** | |
101 | + * @param channel | |
102 | + * @param data | |
103 | + */ | |
104 | + static boolean dispatch(C17PacketCustomPayload payload) | |
105 | + { | |
106 | + try | |
107 | + { | |
108 | + Minecraft minecraft = Minecraft.getMinecraft(); | |
109 | + | |
110 | + if (minecraft.thePlayer != null && minecraft.thePlayer.sendQueue != null) | |
111 | + { | |
112 | + minecraft.thePlayer.sendQueue.addToSendQueue(payload); | |
113 | + return true; | |
114 | + } | |
115 | + } | |
116 | + catch (Exception ex) {} | |
117 | + | |
118 | + return false; | |
119 | + } | |
120 | +} | ... | ... |
java/client/com/mumfrey/liteloader/client/GameEngineClient.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client; | |
2 | + | |
3 | +import java.util.Arrays; | |
4 | +import java.util.HashMap; | |
5 | +import java.util.LinkedList; | |
6 | +import java.util.List; | |
7 | +import java.util.Map; | |
8 | + | |
9 | +import net.minecraft.client.Minecraft; | |
10 | +import net.minecraft.client.audio.SoundHandler; | |
11 | +import net.minecraft.client.gui.GuiNewChat; | |
12 | +import net.minecraft.client.gui.GuiScreen; | |
13 | +import net.minecraft.client.gui.ScaledResolution; | |
14 | +import net.minecraft.client.resources.IResourceManager; | |
15 | +import net.minecraft.client.resources.IResourcePack; | |
16 | +import net.minecraft.client.settings.GameSettings; | |
17 | +import net.minecraft.client.settings.KeyBinding; | |
18 | +import net.minecraft.profiler.Profiler; | |
19 | +import net.minecraft.server.integrated.IntegratedServer; | |
20 | + | |
21 | +import com.mumfrey.liteloader.client.overlays.IMinecraft; | |
22 | +import com.mumfrey.liteloader.common.GameEngine; | |
23 | +import com.mumfrey.liteloader.common.LoadingProgress; | |
24 | + | |
25 | +/** | |
26 | + * | |
27 | + * @author Adam Mummery-Smith | |
28 | + */ | |
29 | +public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | |
30 | +{ | |
31 | + private final Minecraft engine = Minecraft.getMinecraft(); | |
32 | + | |
33 | + /** | |
34 | + * Registered resource packs | |
35 | + */ | |
36 | + private final Map<String, IResourcePack> registeredResourcePacks = new HashMap<String, IResourcePack>(); | |
37 | + | |
38 | + /** | |
39 | + * True while initialising mods if we need to do a resource manager reload once the process is completed | |
40 | + */ | |
41 | + private boolean pendingResourceReload; | |
42 | + | |
43 | + /* (non-Javadoc) | |
44 | + * @see com.mumfrey.liteloader.common.GameEngine#getProfiler() | |
45 | + */ | |
46 | + @Override | |
47 | + public Profiler getProfiler() | |
48 | + { | |
49 | + return this.engine.mcProfiler; | |
50 | + } | |
51 | + | |
52 | + /* (non-Javadoc) | |
53 | + * @see com.mumfrey.liteloader.common.GameEngine#refreshResources(boolean) | |
54 | + */ | |
55 | + @Override | |
56 | + public void refreshResources(boolean force) | |
57 | + { | |
58 | + if (this.pendingResourceReload || force) | |
59 | + { | |
60 | + LoadingProgress.setMessage("Reloading Resources..."); | |
61 | + this.pendingResourceReload = false; | |
62 | + this.engine.refreshResources(); | |
63 | + } | |
64 | + } | |
65 | + | |
66 | + /* (non-Javadoc) | |
67 | + * @see com.mumfrey.liteloader.common.GameEngine#isClient() | |
68 | + */ | |
69 | + @Override | |
70 | + public boolean isClient() | |
71 | + { | |
72 | + return true; | |
73 | + } | |
74 | + | |
75 | + /* (non-Javadoc) | |
76 | + * @see com.mumfrey.liteloader.common.GameEngine#isServer() | |
77 | + */ | |
78 | + @Override | |
79 | + public boolean isServer() | |
80 | + { | |
81 | + return this.isSinglePlayer(); | |
82 | + } | |
83 | + | |
84 | + /* (non-Javadoc) | |
85 | + * @see com.mumfrey.liteloader.common.GameEngine#isInGame() | |
86 | + */ | |
87 | + @Override | |
88 | + public boolean isInGame() | |
89 | + { | |
90 | + return this.engine.thePlayer != null && this.engine.theWorld != null && this.engine.theWorld.isRemote; | |
91 | + } | |
92 | + | |
93 | + /* (non-Javadoc) | |
94 | + * @see com.mumfrey.liteloader.common.GameEngine#isRunning() | |
95 | + */ | |
96 | + @Override | |
97 | + public boolean isRunning() | |
98 | + { | |
99 | + return ((IMinecraft)this.engine).isRunning(); | |
100 | + } | |
101 | + | |
102 | + /* (non-Javadoc) | |
103 | + * @see com.mumfrey.liteloader.common.GameEngine#isSingleplayer() | |
104 | + */ | |
105 | + @Override | |
106 | + public boolean isSinglePlayer() | |
107 | + { | |
108 | + return this.engine.isSingleplayer(); | |
109 | + } | |
110 | + | |
111 | + /* (non-Javadoc) | |
112 | + * @see com.mumfrey.liteloader.common.GameEngine#getClient() | |
113 | + */ | |
114 | + @Override | |
115 | + public Minecraft getClient() | |
116 | + { | |
117 | + return this.engine; | |
118 | + } | |
119 | + | |
120 | + /* (non-Javadoc) | |
121 | + * @see com.mumfrey.liteloader.common.GameEngine#getServer() | |
122 | + */ | |
123 | + @Override | |
124 | + public IntegratedServer getServer() | |
125 | + { | |
126 | + return this.engine.getIntegratedServer(); | |
127 | + } | |
128 | + | |
129 | + public GameSettings getGameSettings() | |
130 | + { | |
131 | + return this.engine.gameSettings; | |
132 | + } | |
133 | + | |
134 | + public ScaledResolution getScaledResolution() | |
135 | + { | |
136 | + return new ScaledResolution(this.engine, this.engine.displayWidth, this.engine.displayHeight); | |
137 | + } | |
138 | + | |
139 | + public GuiNewChat getChatGUI() | |
140 | + { | |
141 | + return this.engine.ingameGUI.getChatGUI(); | |
142 | + } | |
143 | + | |
144 | + public GuiScreen getCurrentScreen() | |
145 | + { | |
146 | + return this.engine.currentScreen; | |
147 | + } | |
148 | + | |
149 | + public boolean hideGUI() | |
150 | + { | |
151 | + return this.engine.gameSettings.hideGUI; | |
152 | + } | |
153 | + | |
154 | + /* (non-Javadoc) | |
155 | + * @see com.mumfrey.liteloader.common.GameEngine#getResourceManager() | |
156 | + */ | |
157 | + @Override | |
158 | + public IResourceManager getResourceManager() | |
159 | + { | |
160 | + return this.engine.getResourceManager(); | |
161 | + } | |
162 | + | |
163 | + /** | |
164 | + * @return | |
165 | + */ | |
166 | + public SoundHandler getSoundHandler() | |
167 | + { | |
168 | + return this.engine.getSoundHandler(); | |
169 | + } | |
170 | + | |
171 | + /* (non-Javadoc) | |
172 | + * @see com.mumfrey.liteloader.common.GameEngine#registerResourcePack(net.minecraft.client.resources.IResourcePack) | |
173 | + */ | |
174 | + @Override | |
175 | + public boolean registerResourcePack(IResourcePack resourcePack) | |
176 | + { | |
177 | + if (!this.registeredResourcePacks.containsKey(resourcePack.getPackName())) | |
178 | + { | |
179 | + this.pendingResourceReload = true; | |
180 | + | |
181 | + List<IResourcePack> defaultResourcePacks = ((IMinecraft)this.engine).getDefaultResourcePacks(); | |
182 | + if (!defaultResourcePacks.contains(resourcePack)) | |
183 | + { | |
184 | + defaultResourcePacks.add(resourcePack); | |
185 | + this.registeredResourcePacks.put(resourcePack.getPackName(), resourcePack); | |
186 | + return true; | |
187 | + } | |
188 | + } | |
189 | + | |
190 | + return false; | |
191 | + } | |
192 | + | |
193 | + /* (non-Javadoc) | |
194 | + * @see com.mumfrey.liteloader.common.GameEngine#unRegisterResourcePack(net.minecraft.client.resources.IResourcePack) | |
195 | + */ | |
196 | + @Override | |
197 | + public boolean unRegisterResourcePack(IResourcePack resourcePack) | |
198 | + { | |
199 | + if (this.registeredResourcePacks.containsValue(resourcePack)) | |
200 | + { | |
201 | + this.pendingResourceReload = true; | |
202 | + | |
203 | + List<IResourcePack> defaultResourcePacks = ((IMinecraft)this.engine).getDefaultResourcePacks(); | |
204 | + this.registeredResourcePacks.remove(resourcePack.getPackName()); | |
205 | + defaultResourcePacks.remove(resourcePack); | |
206 | + return true; | |
207 | + } | |
208 | + | |
209 | + return false; | |
210 | + } | |
211 | + | |
212 | + /* (non-Javadoc) | |
213 | + * @see com.mumfrey.liteloader.common.GameEngine#getKeyBindings() | |
214 | + */ | |
215 | + @Override | |
216 | + public List<KeyBinding> getKeyBindings() | |
217 | + { | |
218 | + LinkedList<KeyBinding> keyBindings = new LinkedList<KeyBinding>(); | |
219 | + keyBindings.addAll(Arrays.asList(this.engine.gameSettings.keyBindings)); | |
220 | + return keyBindings; | |
221 | + } | |
222 | + | |
223 | + /* (non-Javadoc) | |
224 | + * @see com.mumfrey.liteloader.common.GameEngine#setKeyBindings(java.util.List) | |
225 | + */ | |
226 | + @Override | |
227 | + public void setKeyBindings(List<KeyBinding> keyBindings) | |
228 | + { | |
229 | + this.engine.gameSettings.keyBindings = keyBindings.toArray(new KeyBinding[0]); | |
230 | + } | |
231 | +} | ... | ... |
java/client/com/mumfrey/liteloader/client/LiteLoaderCoreProviderClient.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client; | |
2 | + | |
3 | +import net.minecraft.client.resources.SimpleReloadableResourceManager; | |
4 | +import net.minecraft.network.INetHandler; | |
5 | +import net.minecraft.network.play.server.S01PacketJoinGame; | |
6 | +import net.minecraft.world.World; | |
7 | + | |
8 | +import com.mumfrey.liteloader.api.CoreProvider; | |
9 | +import com.mumfrey.liteloader.common.GameEngine; | |
10 | +import com.mumfrey.liteloader.core.LiteLoader; | |
11 | +import com.mumfrey.liteloader.core.LiteLoaderMods; | |
12 | +import com.mumfrey.liteloader.launch.LoaderProperties; | |
13 | +import com.mumfrey.liteloader.resources.InternalResourcePack; | |
14 | + | |
15 | +/** | |
16 | + * CoreProvider which fixes SoundManager derping up at startup | |
17 | + * | |
18 | + * @author Adam Mummery-Smith | |
19 | + */ | |
20 | +public class LiteLoaderCoreProviderClient implements CoreProvider | |
21 | +{ | |
22 | + /** | |
23 | + * Loader Properties adapter | |
24 | + */ | |
25 | + private final LoaderProperties properties; | |
26 | + | |
27 | + /** | |
28 | + * Read from the properties file, if true we will inhibit the sound manager reload during startup to avoid getting in trouble with OpenAL | |
29 | + */ | |
30 | + private boolean inhibitSoundManagerReload = true; | |
31 | + | |
32 | + /** | |
33 | + * If inhibit is enabled, this object is used to reflectively inhibit the sound manager's reload process during startup by removing it from the reloadables list | |
34 | + */ | |
35 | + private SoundHandlerReloadInhibitor soundHandlerReloadInhibitor; | |
36 | + | |
37 | + public LiteLoaderCoreProviderClient(LoaderProperties properties) | |
38 | + { | |
39 | + this.properties = properties; | |
40 | + } | |
41 | + | |
42 | + @Override | |
43 | + public void onInit() | |
44 | + { | |
45 | + this.inhibitSoundManagerReload = this.properties.getAndStoreBooleanProperty(LoaderProperties.OPTION_SOUND_MANAGER_FIX, true); | |
46 | + } | |
47 | + | |
48 | + @Override | |
49 | + public void onPostInit(GameEngine<?, ?> engine) | |
50 | + { | |
51 | + this.soundHandlerReloadInhibitor = new SoundHandlerReloadInhibitor((SimpleReloadableResourceManager)engine.getResourceManager(), ((GameEngineClient)engine).getSoundHandler()); | |
52 | + | |
53 | + if (this.inhibitSoundManagerReload) | |
54 | + { | |
55 | + this.soundHandlerReloadInhibitor.inhibit(); | |
56 | + } | |
57 | + | |
58 | + // Add self as a resource pack for texture/lang resources | |
59 | + LiteLoader.getInstance().registerModResourcePack(new InternalResourcePack("LiteLoader", LiteLoader.class, "liteloader")); | |
60 | + } | |
61 | + | |
62 | + @Override | |
63 | + public void onPostInitComplete(LiteLoaderMods mods) | |
64 | + { | |
65 | + } | |
66 | + | |
67 | + @Override | |
68 | + public void onStartupComplete() | |
69 | + { | |
70 | + if (this.soundHandlerReloadInhibitor != null && this.soundHandlerReloadInhibitor.isInhibited()) | |
71 | + { | |
72 | + this.soundHandlerReloadInhibitor.unInhibit(true); | |
73 | + } | |
74 | + } | |
75 | + | |
76 | + @Override | |
77 | + public void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | |
78 | + { | |
79 | + } | |
80 | + | |
81 | + @Override | |
82 | + public void onPostRender(int mouseX, int mouseY, float partialTicks) | |
83 | + { | |
84 | + } | |
85 | + | |
86 | + @Override | |
87 | + public void onTick(boolean clock, float partialTicks, boolean inGame) | |
88 | + { | |
89 | + } | |
90 | + | |
91 | + @Override | |
92 | + public void onWorldChanged(World world) | |
93 | + { | |
94 | + } | |
95 | + | |
96 | + @Override | |
97 | + public void onShutDown() | |
98 | + { | |
99 | + } | |
100 | +} | ... | ... |
java/client/com/mumfrey/liteloader/client/LiteLoaderPanelManager.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client; | |
2 | + | |
3 | +import net.minecraft.client.Minecraft; | |
4 | +import net.minecraft.client.gui.GuiIngameMenu; | |
5 | +import net.minecraft.client.gui.GuiMainMenu; | |
6 | +import net.minecraft.client.gui.GuiOptions; | |
7 | +import net.minecraft.client.gui.GuiScreen; | |
8 | + | |
9 | +import org.lwjgl.input.Keyboard; | |
10 | + | |
11 | +import com.mumfrey.liteloader.client.gui.GuiLiteLoaderPanel; | |
12 | +import com.mumfrey.liteloader.common.GameEngine; | |
13 | +import com.mumfrey.liteloader.core.LiteLoaderMods; | |
14 | +import com.mumfrey.liteloader.interfaces.PanelManager; | |
15 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | |
16 | +import com.mumfrey.liteloader.launch.LoaderProperties; | |
17 | +import com.mumfrey.liteloader.modconfig.ConfigManager; | |
18 | + | |
19 | +/** | |
20 | + * Observer which handles the display of the mod panel | |
21 | + * | |
22 | + * @author Adam Mummery-Smith | |
23 | + */ | |
24 | +public class LiteLoaderPanelManager implements PanelManager<GuiScreen> | |
25 | +{ | |
26 | + private static final String OPTION_MOD_INFO_SCREEN = "modInfoScreen"; | |
27 | + private static final String OPTION_NO_HIDE_TAB = "tabAlwaysExpanded"; | |
28 | + | |
29 | + private final LoaderEnvironment environment; | |
30 | + | |
31 | + /** | |
32 | + * Loader Properties adapter | |
33 | + */ | |
34 | + private final LoaderProperties properties; | |
35 | + | |
36 | + private LiteLoaderMods mods; | |
37 | + | |
38 | + private ConfigManager configManager; | |
39 | + | |
40 | + private Minecraft minecraft; | |
41 | + | |
42 | + /** | |
43 | + * Setting which determines whether we show the "mod info" screen tab in the main menu | |
44 | + */ | |
45 | + private boolean displayModInfoScreenTab = true; | |
46 | + | |
47 | + /** | |
48 | + * Don't hide t | |
49 | + */ | |
50 | + private boolean tabAlwaysExpanded = false; | |
51 | + | |
52 | + /** | |
53 | + * Override for the "mod info" tab setting, so that mods which want to handle the mod info themselves | |
54 | + * can temporarily disable the function without having to change the underlying property | |
55 | + */ | |
56 | + private boolean hideModInfoScreenTab = false; | |
57 | + | |
58 | + /** | |
59 | + * Active "mod info" screen, drawn as an overlay when in the main menu and made the active screen if | |
60 | + * the user clicks the tab | |
61 | + */ | |
62 | + private GuiLiteLoaderPanel panelHost; | |
63 | + | |
64 | + /** | |
65 | + * @param environment | |
66 | + * @param properties | |
67 | + */ | |
68 | + @SuppressWarnings("unchecked") | |
69 | + public LiteLoaderPanelManager(GameEngine<?, ?> engine, LoaderEnvironment environment, LoaderProperties properties) | |
70 | + { | |
71 | + this.environment = environment; | |
72 | + this.properties = properties; | |
73 | + this.minecraft = ((GameEngine<Minecraft, ?>)engine).getClient(); | |
74 | + | |
75 | + this.displayModInfoScreenTab = this.properties.getAndStoreBooleanProperty(LiteLoaderPanelManager.OPTION_MOD_INFO_SCREEN, true); | |
76 | + this.tabAlwaysExpanded = this.properties.getAndStoreBooleanProperty(LiteLoaderPanelManager.OPTION_NO_HIDE_TAB, false); | |
77 | + } | |
78 | + | |
79 | + @Override | |
80 | + public void init(LiteLoaderMods mods, ConfigManager configManager) | |
81 | + { | |
82 | + this.mods = mods; | |
83 | + this.configManager = configManager; | |
84 | + } | |
85 | + | |
86 | + /* (non-Javadoc) | |
87 | + * @see com.mumfrey.liteloader.api.TickObserver#onTick(boolean, float, boolean) | |
88 | + */ | |
89 | + @Override | |
90 | + public void onTick(boolean clock, float partialTicks, boolean inGame) | |
91 | + { | |
92 | + if (clock && this.panelHost != null && this.minecraft.currentScreen != this.panelHost) | |
93 | + { | |
94 | + this.panelHost.updateScreen(); | |
95 | + } | |
96 | + } | |
97 | + | |
98 | + /* (non-Javadoc) | |
99 | + * @see com.mumfrey.liteloader.api.PostRenderObserver#onPostRender(int, int, float) | |
100 | + */ | |
101 | + @Override | |
102 | + public void onPostRender(int mouseX, int mouseY, float partialTicks) | |
103 | + { | |
104 | + if (this.mods == null) return; | |
105 | + | |
106 | + boolean tabHidden = this.hideModInfoScreenTab && this.minecraft.currentScreen instanceof GuiMainMenu; | |
107 | + | |
108 | + if (this.isPanelSupportedOnScreen(this.minecraft.currentScreen) && ((this.displayModInfoScreenTab && !tabHidden) || (this.panelHost != null && this.panelHost.isOpen()))) | |
109 | + { | |
110 | + // If we're at the main menu, prepare the overlay | |
111 | + if (this.panelHost == null || this.panelHost.getScreen() != this.minecraft.currentScreen) | |
112 | + { | |
113 | + this.panelHost = new GuiLiteLoaderPanel(this.minecraft, this.minecraft.currentScreen, this.mods, this.environment, this.configManager, !tabHidden); | |
114 | + } | |
115 | + | |
116 | + this.minecraft.entityRenderer.setupOverlayRendering(); | |
117 | + this.panelHost.drawScreen(mouseX, mouseY, partialTicks, this.tabAlwaysExpanded); | |
118 | + } | |
119 | + else if (this.minecraft.currentScreen != this.panelHost && this.panelHost != null) | |
120 | + { | |
121 | + // If we're in any other screen, kill the overlay | |
122 | + this.panelHost.release(); | |
123 | + this.panelHost = null; | |
124 | + } | |
125 | + else if (this.isPanelSupportedOnScreen(this.minecraft.currentScreen) && Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) && Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) && Keyboard.isKeyDown(Keyboard.KEY_TAB)) | |
126 | + { | |
127 | + this.displayLiteLoaderPanel(this.minecraft.currentScreen); | |
128 | + } | |
129 | + } | |
130 | + | |
131 | + /** | |
132 | + * Set the "mod info" screen tab to hidden, regardless of the property setting | |
133 | + */ | |
134 | + @Override | |
135 | + public void hideTab() | |
136 | + { | |
137 | + this.hideModInfoScreenTab = true; | |
138 | + } | |
139 | + | |
140 | + /** | |
141 | + * Set whether the "mod info" screen tab should be shown in the main menu | |
142 | + */ | |
143 | + @Override | |
144 | + public void setTabVisible(boolean show) | |
145 | + { | |
146 | + this.displayModInfoScreenTab = show; | |
147 | + this.properties.setBooleanProperty(LiteLoaderPanelManager.OPTION_MOD_INFO_SCREEN, show); | |
148 | + this.properties.writeProperties(); | |
149 | + } | |
150 | + | |
151 | + /** | |
152 | + * Get whether the "mod info" screen tab is shown in the main menu | |
153 | + */ | |
154 | + @Override | |
155 | + public boolean isTabVisible() | |
156 | + { | |
157 | + return this.displayModInfoScreenTab; | |
158 | + } | |
159 | + | |
160 | + @Override | |
161 | + public void setTabAlwaysExpanded(boolean expand) | |
162 | + { | |
163 | + this.tabAlwaysExpanded = expand; | |
164 | + this.properties.setBooleanProperty(LiteLoaderPanelManager.OPTION_NO_HIDE_TAB, expand); | |
165 | + this.properties.writeProperties(); | |
166 | + } | |
167 | + | |
168 | + @Override | |
169 | + public boolean isTabAlwaysExpanded() | |
170 | + { | |
171 | + return this.tabAlwaysExpanded; | |
172 | + } | |
173 | + | |
174 | + /** | |
175 | + * Display the liteloader panel over the specified GUI | |
176 | + * | |
177 | + * @param parentScreen | |
178 | + */ | |
179 | + @Override | |
180 | + public void displayLiteLoaderPanel(GuiScreen parentScreen) | |
181 | + { | |
182 | + if (this.isPanelSupportedOnScreen(parentScreen)) | |
183 | + { | |
184 | + this.panelHost = new GuiLiteLoaderPanel(this.minecraft, parentScreen, this.mods, this.environment, this.configManager, !this.hideModInfoScreenTab); | |
185 | + this.minecraft.displayGuiScreen(this.panelHost); | |
186 | + } | |
187 | + } | |
188 | + | |
189 | + private boolean isPanelSupportedOnScreen(GuiScreen guiScreen) | |
190 | + { | |
191 | + return ( | |
192 | + guiScreen instanceof GuiMainMenu || | |
193 | + guiScreen instanceof GuiIngameMenu || | |
194 | + guiScreen instanceof GuiOptions | |
195 | + ); | |
196 | + } | |
197 | +} | ... | ... |
java/com/mumfrey/liteloader/core/SoundHandlerReloadInhibitor.java renamed to java/client/com/mumfrey/liteloader/client/SoundHandlerReloadInhibitor.java
1 | -package com.mumfrey.liteloader.core; | |
1 | +package com.mumfrey.liteloader.client; | |
2 | 2 | |
3 | 3 | import java.util.List; |
4 | 4 | |
... | ... | @@ -6,7 +6,7 @@ import net.minecraft.client.audio.SoundHandler; |
6 | 6 | import net.minecraft.client.resources.IResourceManagerReloadListener; |
7 | 7 | import net.minecraft.client.resources.SimpleReloadableResourceManager; |
8 | 8 | |
9 | -import com.mumfrey.liteloader.util.PrivateFields; | |
9 | +import com.mumfrey.liteloader.client.util.PrivateFields; | |
10 | 10 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
11 | 11 | |
12 | 12 | /** | ... | ... |
java/client/com/mumfrey/liteloader/client/api/LiteLoaderBrandingProvider.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client.api; | |
2 | + | |
3 | +import java.net.URI; | |
4 | + | |
5 | +import net.minecraft.client.resources.I18n; | |
6 | +import net.minecraft.util.IIcon; | |
7 | +import net.minecraft.util.ResourceLocation; | |
8 | + | |
9 | +import com.mumfrey.liteloader.api.BrandingProvider; | |
10 | +import com.mumfrey.liteloader.client.util.render.IconAbsolute; | |
11 | +import com.mumfrey.liteloader.core.LiteLoader; | |
12 | + | |
13 | +/** | |
14 | + * LiteLoader's branding provider | |
15 | + * | |
16 | + * @author Adam Mummery-Smith | |
17 | + */ | |
18 | +public class LiteLoaderBrandingProvider implements BrandingProvider | |
19 | +{ | |
20 | + public static final int BRANDING_COLOUR = 0xFF4785D1; | |
21 | + | |
22 | + public static final ResourceLocation ABOUT_TEXTURE = new ResourceLocation("liteloader", "textures/gui/about.png"); | |
23 | + public static final IconAbsolute LOGO_COORDS = new IconAbsolute(LiteLoaderBrandingProvider.ABOUT_TEXTURE, "logo", 128, 40, 0, 0, 256, 80); | |
24 | + public static final IconAbsolute ICON_COORDS = new IconAbsolute(LiteLoaderBrandingProvider.ABOUT_TEXTURE, "chicken", 32, 45, 0, 80, 64, 170); | |
25 | + public static final IconAbsolute TWITTER_AVATAR_COORDS = new IconAbsolute(LiteLoaderBrandingProvider.ABOUT_TEXTURE, "twitter_avatar", 32, 32, 192, 80, 256, 144); | |
26 | + | |
27 | + public static final URI LITELOADER_URI = URI.create("http://www.liteloader.com/"); | |
28 | + | |
29 | + /* (non-Javadoc) | |
30 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getPriority() | |
31 | + */ | |
32 | + @Override | |
33 | + public int getPriority() | |
34 | + { | |
35 | + return -1000; | |
36 | + } | |
37 | + | |
38 | + /* (non-Javadoc) | |
39 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getDisplayName() | |
40 | + */ | |
41 | + @Override | |
42 | + public String getDisplayName() | |
43 | + { | |
44 | + return "LiteLoader " + I18n.format("gui.about.versiontext", LiteLoader.getVersion()); | |
45 | + } | |
46 | + | |
47 | + /* (non-Javadoc) | |
48 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getCopyrightText() | |
49 | + */ | |
50 | + @Override | |
51 | + public String getCopyrightText() | |
52 | + { | |
53 | + return "Copyright (c) 2012-2014 Adam Mummery-Smith"; | |
54 | + } | |
55 | + | |
56 | + /* (non-Javadoc) | |
57 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getHomepage() | |
58 | + */ | |
59 | + @Override | |
60 | + public URI getHomepage() | |
61 | + { | |
62 | + return LiteLoaderBrandingProvider.LITELOADER_URI; | |
63 | + } | |
64 | + | |
65 | + /* (non-Javadoc) | |
66 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getBrandingColour() | |
67 | + */ | |
68 | + @Override | |
69 | + public int getBrandingColour() | |
70 | + { | |
71 | + return LiteLoaderBrandingProvider.BRANDING_COLOUR; | |
72 | + } | |
73 | + | |
74 | + /* (non-Javadoc) | |
75 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getLogoResource() | |
76 | + */ | |
77 | + @Override | |
78 | + public ResourceLocation getLogoResource() | |
79 | + { | |
80 | + return LiteLoaderBrandingProvider.ABOUT_TEXTURE; | |
81 | + } | |
82 | + | |
83 | + /* (non-Javadoc) | |
84 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getLogoCoords() | |
85 | + */ | |
86 | + @Override | |
87 | + public IIcon getLogoCoords() | |
88 | + { | |
89 | + return LiteLoaderBrandingProvider.LOGO_COORDS; | |
90 | + } | |
91 | + | |
92 | + /* (non-Javadoc) | |
93 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getIconResource() | |
94 | + */ | |
95 | + @Override | |
96 | + public ResourceLocation getIconResource() | |
97 | + { | |
98 | + return LiteLoaderBrandingProvider.ABOUT_TEXTURE; | |
99 | + } | |
100 | + | |
101 | + /* (non-Javadoc) | |
102 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getIconCoords() | |
103 | + */ | |
104 | + @Override | |
105 | + public IIcon getIconCoords() | |
106 | + { | |
107 | + return LiteLoaderBrandingProvider.ICON_COORDS; | |
108 | + } | |
109 | + | |
110 | + /* (non-Javadoc) | |
111 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getTwitterUserName() | |
112 | + */ | |
113 | + @Override | |
114 | + public String getTwitterUserName() | |
115 | + { | |
116 | + return "therealeq2"; | |
117 | + } | |
118 | + | |
119 | + /* (non-Javadoc) | |
120 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getTwitterAvatarResource() | |
121 | + */ | |
122 | + @Override | |
123 | + public ResourceLocation getTwitterAvatarResource() | |
124 | + { | |
125 | + return LiteLoaderBrandingProvider.ABOUT_TEXTURE; | |
126 | + } | |
127 | + | |
128 | + /* (non-Javadoc) | |
129 | + * @see com.mumfrey.liteloader.api.BrandingProvider#getTwitterAvatarCoords() | |
130 | + */ | |
131 | + @Override | |
132 | + public IIcon getTwitterAvatarCoords() | |
133 | + { | |
134 | + return LiteLoaderBrandingProvider.TWITTER_AVATAR_COORDS; | |
135 | + } | |
136 | +} | ... | ... |
java/client/com/mumfrey/liteloader/client/api/LiteLoaderCoreAPIClient.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client.api; | |
2 | + | |
3 | +import java.util.List; | |
4 | + | |
5 | +import net.minecraft.client.Minecraft; | |
6 | +import net.minecraft.server.integrated.IntegratedServer; | |
7 | + | |
8 | +import com.google.common.collect.ImmutableList; | |
9 | +import com.mumfrey.liteloader.api.CoreProvider; | |
10 | +import com.mumfrey.liteloader.api.CustomisationProvider; | |
11 | +import com.mumfrey.liteloader.api.InterfaceProvider; | |
12 | +import com.mumfrey.liteloader.api.Observer; | |
13 | +import com.mumfrey.liteloader.client.LiteLoaderCoreProviderClient; | |
14 | +import com.mumfrey.liteloader.core.LiteLoader; | |
15 | +import com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI; | |
16 | +import com.mumfrey.liteloader.interfaces.ObjectFactory; | |
17 | + | |
18 | +/** | |
19 | + * Client side of the core API | |
20 | + * | |
21 | + * @author Adam Mummery-Smith | |
22 | + */ | |
23 | +public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI | |
24 | +{ | |
25 | + private static final String PKG_LITELOADER_CLIENT = LiteLoaderCoreAPI.PKG_LITELOADER + ".client"; | |
26 | + | |
27 | + private static final String[] requiredTransformers = { | |
28 | + LiteLoaderCoreAPI.PKG_LITELOADER + ".launch.LiteLoaderTransformer", | |
29 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.CrashReportTransformer" | |
30 | + }; | |
31 | + | |
32 | + private static final String[] requiredDownstreamTransformers = { | |
33 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.LiteLoaderCallbackInjectionTransformer", | |
34 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.LiteLoaderEventInjectionTransformer", | |
35 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.MinecraftOverlayTransformer" | |
36 | + }; | |
37 | + | |
38 | + private static final String[] defaultPacketTransformers = { | |
39 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.LoginSuccessPacketTransformer", | |
40 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.ChatPacketTransformer", | |
41 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.JoinGamePacketTransformer", | |
42 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.CustomPayloadPacketTransformer", | |
43 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.ServerChatPacketTransformer", | |
44 | + LiteLoaderCoreAPIClient.PKG_LITELOADER_CLIENT + ".transformers.ServerCustomPayloadPacketTransformer" | |
45 | + }; | |
46 | + | |
47 | + private ObjectFactory<Minecraft, IntegratedServer> objectFactory; | |
48 | + | |
49 | + /* (non-Javadoc) | |
50 | + * @see com.mumfrey.liteloader.api.LiteAPI#getRequiredTransformers() | |
51 | + */ | |
52 | + @Override | |
53 | + public String[] getRequiredTransformers() | |
54 | + { | |
55 | + return LiteLoaderCoreAPIClient.requiredTransformers; | |
56 | + } | |
57 | + | |
58 | + /* (non-Javadoc) | |
59 | + * @see com.mumfrey.liteloader.api.LiteAPI#getRequiredDownstreamTransformers() | |
60 | + */ | |
61 | + @Override | |
62 | + public String[] getRequiredDownstreamTransformers() | |
63 | + { | |
64 | + return LiteLoaderCoreAPIClient.requiredDownstreamTransformers; | |
65 | + } | |
66 | + | |
67 | + /* (non-Javadoc) | |
68 | + * @see com.mumfrey.liteloader.api.LiteAPI#getPacketTransformers() | |
69 | + */ | |
70 | + @Override | |
71 | + public String[] getPacketTransformers() | |
72 | + { | |
73 | + return LiteLoaderCoreAPIClient.defaultPacketTransformers; | |
74 | + } | |
75 | + | |
76 | + /* (non-Javadoc) | |
77 | + * @see com.mumfrey.liteloader.api.LiteAPI#getCustomisationProviders() | |
78 | + */ | |
79 | + @Override | |
80 | + public List<CustomisationProvider> getCustomisationProviders() | |
81 | + { | |
82 | + return ImmutableList.<CustomisationProvider>of | |
83 | + ( | |
84 | + new LiteLoaderBrandingProvider() | |
85 | + ); | |
86 | + } | |
87 | + | |
88 | + /* (non-Javadoc) | |
89 | + * @see com.mumfrey.liteloader.api.LiteAPI#getCoreProviders() | |
90 | + */ | |
91 | + @Override | |
92 | + public List<CoreProvider> getCoreProviders() | |
93 | + { | |
94 | + return ImmutableList.<CoreProvider>of | |
95 | + ( | |
96 | + new LiteLoaderCoreProviderClient(this.properties), | |
97 | + LiteLoader.getInput() | |
98 | + ); | |
99 | + } | |
100 | + | |
101 | + | |
102 | + /* (non-Javadoc) | |
103 | + * @see com.mumfrey.liteloader.api.LiteAPI#getInterfaceProviders() | |
104 | + */ | |
105 | + @Override | |
106 | + public List<InterfaceProvider> getInterfaceProviders() | |
107 | + { | |
108 | + ObjectFactory<?, ?> objectFactory = this.getObjectFactory(); | |
109 | + | |
110 | + return ImmutableList.<InterfaceProvider>of | |
111 | + ( | |
112 | + objectFactory.getEventBroker(), | |
113 | + objectFactory.getClientPluginChannels(), | |
114 | + objectFactory.getServerPluginChannels() | |
115 | + ); | |
116 | + } | |
117 | + | |
118 | + /* (non-Javadoc) | |
119 | + * @see com.mumfrey.liteloader.api.LiteAPI#getObservers() | |
120 | + */ | |
121 | + @Override | |
122 | + public List<Observer> getObservers() | |
123 | + { | |
124 | + return ImmutableList.<Observer>of | |
125 | + ( | |
126 | + this.getObjectFactory().getModPanelManager() | |
127 | + ); | |
128 | + } | |
129 | + | |
130 | + /* (non-Javadoc) | |
131 | + * @see com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI#getObjectFactory() | |
132 | + */ | |
133 | + @Override | |
134 | + public ObjectFactory<?, ?> getObjectFactory() | |
135 | + { | |
136 | + if (this.objectFactory == null) | |
137 | + { | |
138 | + this.objectFactory = new ObjectFactoryClient(this.environment, this.properties); | |
139 | + } | |
140 | + | |
141 | + return this.objectFactory; | |
142 | + } | |
143 | +} | ... | ... |
java/client/com/mumfrey/liteloader/client/api/ObjectFactoryClient.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client.api; | |
2 | + | |
3 | +import net.minecraft.client.Minecraft; | |
4 | +import net.minecraft.client.gui.GuiScreen; | |
5 | +import net.minecraft.server.integrated.IntegratedServer; | |
6 | + | |
7 | +import com.mumfrey.liteloader.client.ClientEvents; | |
8 | +import com.mumfrey.liteloader.client.ClientPluginChannelsClient; | |
9 | +import com.mumfrey.liteloader.client.GameEngineClient; | |
10 | +import com.mumfrey.liteloader.client.LiteLoaderPanelManager; | |
11 | +import com.mumfrey.liteloader.client.gui.startup.LoadingBar; | |
12 | +import com.mumfrey.liteloader.common.GameEngine; | |
13 | +import com.mumfrey.liteloader.core.ClientPluginChannels; | |
14 | +import com.mumfrey.liteloader.core.Events; | |
15 | +import com.mumfrey.liteloader.core.LiteLoader; | |
16 | +import com.mumfrey.liteloader.core.ServerPluginChannels; | |
17 | +import com.mumfrey.liteloader.interfaces.PanelManager; | |
18 | +import com.mumfrey.liteloader.interfaces.ObjectFactory; | |
19 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | |
20 | +import com.mumfrey.liteloader.launch.LoaderProperties; | |
21 | +import com.mumfrey.liteloader.permissions.PermissionsManagerClient; | |
22 | +import com.mumfrey.liteloader.permissions.PermissionsManagerServer; | |
23 | + | |
24 | +/** | |
25 | + * Factory for lifetime loader objects for the client side | |
26 | + * | |
27 | + * @author Adam Mummery-Smith | |
28 | + */ | |
29 | +class ObjectFactoryClient implements ObjectFactory<Minecraft, IntegratedServer> | |
30 | +{ | |
31 | + private LoaderEnvironment environment; | |
32 | + | |
33 | + private LoaderProperties properties; | |
34 | + | |
35 | + private ClientEvents clientEvents; | |
36 | + | |
37 | + private GameEngineClient engine; | |
38 | + | |
39 | + private PanelManager<GuiScreen> modPanelManager; | |
40 | + | |
41 | + private ClientPluginChannelsClient clientPluginChannels; | |
42 | + | |
43 | + private ServerPluginChannels serverPluginChannels; | |
44 | + | |
45 | + ObjectFactoryClient(LoaderEnvironment environment, LoaderProperties properties) | |
46 | + { | |
47 | + this.environment = environment; | |
48 | + this.properties = properties; | |
49 | + } | |
50 | + | |
51 | + @Override | |
52 | + public Events<Minecraft, IntegratedServer> getEventBroker() | |
53 | + { | |
54 | + if (this.clientEvents == null) | |
55 | + { | |
56 | + this.clientEvents = new ClientEvents(LiteLoader.getInstance(), (GameEngineClient)this.getGameEngine(), this.properties); | |
57 | + } | |
58 | + | |
59 | + return this.clientEvents; | |
60 | + } | |
61 | + | |
62 | + @Override | |
63 | + public GameEngine<Minecraft, IntegratedServer> getGameEngine() | |
64 | + { | |
65 | + if (this.engine == null) | |
66 | + { | |
67 | + this.engine = new GameEngineClient(); | |
68 | + } | |
69 | + | |
70 | + return this.engine; | |
71 | + } | |
72 | + | |
73 | + @Override | |
74 | + public PanelManager<GuiScreen> getModPanelManager() | |
75 | + { | |
76 | + if (this.modPanelManager == null) | |
77 | + { | |
78 | + this.modPanelManager = new LiteLoaderPanelManager(this.getGameEngine(), this.environment, this.properties); | |
79 | + } | |
80 | + | |
81 | + return this.modPanelManager; | |
82 | + } | |
83 | + | |
84 | + @Override | |
85 | + public ClientPluginChannels getClientPluginChannels() | |
86 | + { | |
87 | + if (this.clientPluginChannels == null) | |
88 | + { | |
89 | + this.clientPluginChannels = new ClientPluginChannelsClient(); | |
90 | + } | |
91 | + | |
92 | + return this.clientPluginChannels; | |
93 | + } | |
94 | + | |
95 | + @Override | |
96 | + public ServerPluginChannels getServerPluginChannels() | |
97 | + { | |
98 | + if (this.serverPluginChannels == null) | |
99 | + { | |
100 | + this.serverPluginChannels = new ServerPluginChannels(); | |
101 | + } | |
102 | + | |
103 | + return this.serverPluginChannels; | |
104 | + } | |
105 | + | |
106 | + @Override | |
107 | + public PermissionsManagerClient getClientPermissionManager() | |
108 | + { | |
109 | + return PermissionsManagerClient.getInstance(); | |
110 | + } | |
111 | + | |
112 | + @Override | |
113 | + public PermissionsManagerServer getServerPermissionManager() | |
114 | + { | |
115 | + return null; | |
116 | + } | |
117 | + | |
118 | + @SuppressWarnings("unused") | |
119 | + @Override | |
120 | + public void preBeginGame() | |
121 | + { | |
122 | + new LoadingBar(); | |
123 | + } | |
124 | +} | ... | ... |
java/com/mumfrey/liteloader/core/gen/GenProfiler.java renamed to java/client/com/mumfrey/liteloader/client/gen/GenProfiler.java
java/com/mumfrey/liteloader/core/gen/GenProfilerTransformer.java renamed to java/client/com/mumfrey/liteloader/client/gen/GenProfilerTransformer.java
1 | -package com.mumfrey.liteloader.core.gen; | |
1 | +package com.mumfrey.liteloader.client.gen; | |
2 | 2 | |
3 | 3 | import java.util.HashMap; |
4 | 4 | import java.util.Iterator; |
... | ... | @@ -77,7 +77,7 @@ public class GenProfilerTransformer implements IClassTransformer |
77 | 77 | |
78 | 78 | for (Entry<MethodInsnNode, String> node : injectionNodes.entrySet()) |
79 | 79 | { |
80 | - method.instructions.insert(node.getKey(), new MethodInsnNode(Opcodes.INVOKESTATIC, "com/mumfrey/liteloader/core/gen/GenProfiler", "storeSignature", "(Ljava/lang/String;)V")); | |
80 | + method.instructions.insert(node.getKey(), new MethodInsnNode(Opcodes.INVOKESTATIC, "com/mumfrey/liteloader/core/gen/GenProfiler", "storeSignature", "(Ljava/lang/String;)V", false)); | |
81 | 81 | method.instructions.insert(node.getKey(), new LdcInsnNode(node.getValue())); |
82 | 82 | } |
83 | 83 | } | ... | ... |
java/com/mumfrey/liteloader/gui/GuiCheckbox.java renamed to java/client/com/mumfrey/liteloader/client/gui/GuiCheckbox.java
1 | -package com.mumfrey.liteloader.gui; | |
1 | +package com.mumfrey.liteloader.client.gui; | |
2 | 2 | |
3 | 3 | import static org.lwjgl.opengl.GL11.*; |
4 | + | |
5 | +import com.mumfrey.liteloader.client.api.LiteLoaderBrandingProvider; | |
6 | + | |
4 | 7 | import net.minecraft.client.Minecraft; |
5 | 8 | import net.minecraft.client.gui.GuiButton; |
6 | 9 | |
... | ... | @@ -15,26 +18,26 @@ public class GuiCheckbox extends GuiButton |
15 | 18 | |
16 | 19 | public GuiCheckbox(int controlId, int xPosition, int yPosition, String displayString) |
17 | 20 | { |
18 | - super(controlId, xPosition, yPosition, Minecraft.getMinecraft().fontRenderer.getStringWidth(displayString) + 16, 12, displayString); | |
21 | + super(controlId, xPosition, yPosition, Minecraft.getMinecraft().fontRendererObj.getStringWidth(displayString) + 16, 12, displayString); | |
19 | 22 | } |
20 | 23 | |
21 | 24 | @Override |
22 | 25 | public void drawButton(Minecraft minecraft, int mouseX, int mouseY) |
23 | 26 | { |
24 | - if (this.field_146125_m) // drawButton | |
27 | + if (this.visible) | |
25 | 28 | { |
26 | - minecraft.getTextureManager().bindTexture(GuiScreenModInfo.aboutTextureResource); | |
29 | + minecraft.getTextureManager().bindTexture(LiteLoaderBrandingProvider.ABOUT_TEXTURE); | |
27 | 30 | glColor4f(1.0F, 1.0F, 1.0F, 1.0F); |
28 | - this.field_146123_n = mouseX >= this.field_146128_h && mouseY >= this.field_146129_i && mouseX < this.field_146128_h + this.field_146120_f && mouseY < this.field_146129_i + this.field_146121_g; | |
31 | + this.hovered = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; | |
29 | 32 | |
30 | - this.drawTexturedModalRect(this.field_146128_h, this.field_146129_i, this.checked ? 134 : 122, 80, 12, 12); | |
33 | + this.drawTexturedModalRect(this.xPosition, this.yPosition, this.checked ? 134 : 122, 80, 12, 12); | |
31 | 34 | this.mouseDragged(minecraft, mouseX, mouseY); |
32 | 35 | |
33 | 36 | int colour = 0xE0E0E0; |
34 | 37 | if (!this.enabled) colour = 0xA0A0A0; |
35 | - else if (this.field_146123_n) colour = 0xFFFFA0; | |
38 | + else if (this.hovered) colour = 0xFFFFA0; | |
36 | 39 | |
37 | - this.drawString(minecraft.fontRenderer, this.displayString, this.field_146128_h + 16, this.field_146129_i + 2, colour); | |
40 | + this.drawString(minecraft.fontRendererObj, this.displayString, this.xPosition + 16, this.yPosition + 2, colour); | |
38 | 41 | } |
39 | 42 | } |
40 | 43 | } | ... | ... |
java/com/mumfrey/liteloader/gui/GuiHoverLabel.java renamed to java/client/com/mumfrey/liteloader/client/gui/GuiHoverLabel.java
1 | -package com.mumfrey.liteloader.gui; | |
1 | +package com.mumfrey.liteloader.client.gui; | |
2 | + | |
3 | +import com.mumfrey.liteloader.client.api.LiteLoaderBrandingProvider; | |
2 | 4 | |
3 | 5 | import net.minecraft.client.Minecraft; |
4 | 6 | import net.minecraft.client.gui.FontRenderer; |
... | ... | @@ -12,7 +14,12 @@ public class GuiHoverLabel extends GuiButton |
12 | 14 | |
13 | 15 | public GuiHoverLabel(int id, int xPosition, int yPosition, FontRenderer fontRenderer, String displayText) |
14 | 16 | { |
15 | - this(id, xPosition, yPosition, fontRenderer, displayText, 0xFF4785D1, 0xFFFFFFAA); | |
17 | + this(id, xPosition, yPosition, fontRenderer, displayText, LiteLoaderBrandingProvider.BRANDING_COLOUR); | |
18 | + } | |
19 | + | |
20 | + public GuiHoverLabel(int id, int xPosition, int yPosition, FontRenderer fontRenderer, String displayText, int colour) | |
21 | + { | |
22 | + this(id, xPosition, yPosition, fontRenderer, displayText, colour, 0xFFFFFFAA); | |
16 | 23 | } |
17 | 24 | |
18 | 25 | public GuiHoverLabel(int id, int xPosition, int yPosition, FontRenderer fontRenderer, String displayText, int colour, int hoverColour) |
... | ... | @@ -27,14 +34,14 @@ public class GuiHoverLabel extends GuiButton |
27 | 34 | @Override |
28 | 35 | public void drawButton(Minecraft minecraft, int mouseX, int mouseY) |
29 | 36 | { |
30 | - if (this.field_146125_m) | |
37 | + if (this.visible) | |
31 | 38 | { |
32 | - this.field_146123_n = mouseX >= this.field_146128_h && mouseY >= this.field_146129_i && mouseX < this.field_146128_h + this.field_146120_f && mouseY < this.field_146129_i + this.field_146121_g; | |
33 | - this.fontRenderer.drawString(this.displayString, this.field_146128_h, this.field_146129_i, this.field_146123_n ? this.hoverColour : this.colour); | |
39 | + this.hovered = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; | |
40 | + this.fontRenderer.drawString(this.displayString, this.xPosition, this.yPosition, this.hovered ? this.hoverColour : this.colour); | |
34 | 41 | } |
35 | 42 | else |
36 | 43 | { |
37 | - this.field_146123_n = false; | |
44 | + this.hovered = false; | |
38 | 45 | } |
39 | 46 | } |
40 | 47 | ... | ... |
java/com/mumfrey/liteloader/gui/GuiScreenModInfo.java renamed to java/client/com/mumfrey/liteloader/client/gui/GuiLiteLoaderPanel.java
1 | -package com.mumfrey.liteloader.gui; | |
1 | +package com.mumfrey.liteloader.client.gui; | |
2 | 2 | |
3 | 3 | import static org.lwjgl.opengl.GL11.*; |
4 | 4 | |
5 | 5 | import java.nio.DoubleBuffer; |
6 | -import java.util.ArrayList; | |
7 | -import java.util.List; | |
8 | -import java.util.Map; | |
9 | -import java.util.TreeMap; | |
10 | 6 | |
11 | 7 | import net.minecraft.client.Minecraft; |
12 | 8 | import net.minecraft.client.gui.FontRenderer; |
13 | 9 | import net.minecraft.client.gui.GuiButton; |
14 | -import net.minecraft.client.gui.GuiIngameMenu; | |
15 | -import net.minecraft.client.gui.GuiMainMenu; | |
16 | -import net.minecraft.client.gui.GuiOptions; | |
17 | 10 | import net.minecraft.client.gui.GuiScreen; |
18 | 11 | import net.minecraft.client.renderer.Tessellator; |
19 | 12 | import net.minecraft.client.resources.I18n; |
13 | +import net.minecraft.util.IIcon; | |
20 | 14 | import net.minecraft.util.ResourceLocation; |
21 | 15 | |
22 | 16 | import org.lwjgl.BufferUtils; |
... | ... | @@ -24,10 +18,14 @@ import org.lwjgl.input.Keyboard; |
24 | 18 | import org.lwjgl.input.Mouse; |
25 | 19 | |
26 | 20 | import com.mumfrey.liteloader.LiteMod; |
27 | -import com.mumfrey.liteloader.core.EnabledModsList; | |
21 | +import com.mumfrey.liteloader.api.LiteAPI; | |
22 | +import com.mumfrey.liteloader.api.BrandingProvider; | |
23 | +import com.mumfrey.liteloader.client.api.LiteLoaderBrandingProvider; | |
28 | 24 | import com.mumfrey.liteloader.core.LiteLoader; |
29 | 25 | import com.mumfrey.liteloader.core.LiteLoaderVersion; |
30 | -import com.mumfrey.liteloader.core.Loadable; | |
26 | +import com.mumfrey.liteloader.core.LiteLoaderMods; | |
27 | +import com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI; | |
28 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | |
31 | 29 | import com.mumfrey.liteloader.modconfig.ConfigManager; |
32 | 30 | import com.mumfrey.liteloader.modconfig.ConfigPanel; |
33 | 31 | |
... | ... | @@ -40,16 +38,15 @@ import com.mumfrey.liteloader.modconfig.ConfigPanel; |
40 | 38 | * |
41 | 39 | * @author Adam Mummery-Smith |
42 | 40 | */ |
43 | -public class GuiScreenModInfo extends GuiScreen | |
41 | +public class GuiLiteLoaderPanel extends GuiScreen | |
44 | 42 | { |
45 | - private static final int LEFT_EDGE = 80; | |
46 | - private static final int MARGIN = 12; | |
47 | - private static final int TAB_WIDTH = 20; | |
48 | - private static final int TAB_HEIGHT = 40; | |
49 | - private static final int TAB_TOP = 20; | |
50 | - private static final int PANEL_TOP = 83; | |
51 | - private static final int PANEL_BOTTOM = 26; | |
52 | - private static final int SCROLLBAR_WIDTH = 5; | |
43 | + static final int LEFT_EDGE = 80; | |
44 | + static final int MARGIN = 12; | |
45 | + static final int TAB_WIDTH = 20; | |
46 | + static final int TAB_HEIGHT = 40; | |
47 | + static final int TAB_TOP = 20; | |
48 | + static final int PANEL_TOP = 83; | |
49 | + static final int PANEL_BOTTOM = 26; | |
53 | 50 | |
54 | 51 | private static final double TWEEN_RATE = 0.08; |
55 | 52 | |
... | ... | @@ -58,13 +55,10 @@ public class GuiScreenModInfo extends GuiScreen |
58 | 55 | */ |
59 | 56 | private static DoubleBuffer doubleBuffer = BufferUtils.createByteBuffer(64).asDoubleBuffer(); |
60 | 57 | |
61 | - // Texture resources for the "about mods" screen | |
62 | - public static ResourceLocation aboutTextureResource = new ResourceLocation("liteloader", "textures/gui/about.png"); | |
63 | - | |
64 | 58 | /** |
65 | 59 | * Reference to the main menu which this screen is either overlaying or using as its background |
66 | 60 | */ |
67 | - private GuiScreen mainMenu; | |
61 | + private GuiScreen parentScreen; | |
68 | 62 | |
69 | 63 | /** |
70 | 64 | * Tick number (update counter) used for tweening |
... | ... | @@ -87,26 +81,11 @@ public class GuiScreenModInfo extends GuiScreen |
87 | 81 | private boolean mouseDown, toggled; |
88 | 82 | |
89 | 83 | /** |
90 | - * Timer used to handle double-clicking on a mod | |
91 | - */ | |
92 | - private int doubleClickTime = 0; | |
93 | - | |
94 | - /** | |
95 | 84 | * Hover opacity for the tab |
96 | 85 | */ |
97 | 86 | private float tabOpacity = 0.0F; |
98 | 87 | |
99 | - private boolean hideTab = true; | |
100 | - | |
101 | - /** | |
102 | - * List of enumerated mods | |
103 | - */ | |
104 | - private List<GuiModListEntry> mods = new ArrayList<GuiModListEntry>(); | |
105 | - | |
106 | - /** | |
107 | - * Currently selected mod | |
108 | - */ | |
109 | - private GuiModListEntry selectedMod = null; | |
88 | + private boolean showTab = true; | |
110 | 89 | |
111 | 90 | /** |
112 | 91 | * Text to display under the header |
... | ... | @@ -114,96 +93,98 @@ public class GuiScreenModInfo extends GuiScreen |
114 | 93 | private String activeModText, versionText; |
115 | 94 | |
116 | 95 | /** |
117 | - * Height of all the items in the list | |
96 | + * Configuration panel | |
118 | 97 | */ |
119 | - private int listHeight = 100; | |
98 | + private GuiPanel currentPanel; | |
120 | 99 | |
121 | - /** | |
122 | - * Scroll bar control for the mods list | |
123 | - */ | |
124 | - private GuiSimpleScrollBar scrollBar = new GuiSimpleScrollBar(); | |
100 | + private final GuiPanelMods modsPanel; | |
101 | + private final GuiPanelSettings settingsPanel; | |
125 | 102 | |
126 | - /** | |
127 | - * Enable / disable button | |
128 | - */ | |
129 | - private GuiButton btnToggle; | |
103 | + private int brandColour = LiteLoaderBrandingProvider.BRANDING_COLOUR; | |
130 | 104 | |
131 | - /** | |
132 | - * Config button | |
133 | - */ | |
134 | - private GuiButton btnConfig; | |
105 | + private ResourceLocation logoResource = LiteLoaderBrandingProvider.ABOUT_TEXTURE; | |
106 | + private IIcon logoCoords = LiteLoaderBrandingProvider.LOGO_COORDS; | |
135 | 107 | |
136 | - /** | |
137 | - * Enable the mod info tab checkbox | |
138 | - */ | |
139 | - private GuiCheckbox chkEnabled; | |
108 | + private ResourceLocation iconResource = LiteLoaderBrandingProvider.ABOUT_TEXTURE; | |
109 | + private IIcon iconCoords = LiteLoaderBrandingProvider.ICON_COORDS; | |
140 | 110 | |
141 | - private ConfigManager configManager; | |
142 | - | |
143 | - /** | |
144 | - * Configuration panel | |
145 | - */ | |
146 | - private ModInfoScreenPanel currentPanel; | |
111 | + private boolean mouseOverLogo = false; | |
147 | 112 | |
148 | 113 | /** |
149 | 114 | * @param minecraft |
150 | - * @param mainMenu | |
151 | - * @param loader | |
152 | - * @param enabledModsList | |
115 | + * @param parentScreen | |
116 | + * @param mods | |
153 | 117 | */ |
154 | - public GuiScreenModInfo(Minecraft minecraft, GuiScreen mainMenu, LiteLoader loader, EnabledModsList enabledModsList, ConfigManager configManager, boolean hideTab) | |
118 | + public GuiLiteLoaderPanel(Minecraft minecraft, GuiScreen parentScreen, LiteLoaderMods mods, LoaderEnvironment environment, ConfigManager configManager, boolean showTab) | |
155 | 119 | { |
156 | - this.mc = minecraft; | |
157 | - this.fontRendererObj = minecraft.fontRenderer; | |
158 | - this.mainMenu = mainMenu; | |
159 | - this.configManager = configManager; | |
160 | - this.hideTab = hideTab; | |
120 | + this.mc = minecraft; | |
121 | + this.fontRendererObj = minecraft.fontRendererObj; | |
122 | + this.parentScreen = parentScreen; | |
123 | + this.showTab = showTab; | |
161 | 124 | |
162 | 125 | this.versionText = I18n.format("gui.about.versiontext", LiteLoader.getVersion()); |
126 | + this.activeModText = I18n.format("gui.about.modsloaded", mods.getLoadedMods().size()); | |
127 | + | |
128 | + this.initBranding(); | |
163 | 129 | |
164 | - this.populateModList(loader, enabledModsList); | |
130 | + this.currentPanel = this.modsPanel = new GuiPanelMods(this, minecraft, mods, environment, configManager, this.brandColour); | |
131 | + this.settingsPanel = new GuiPanelSettings(this, minecraft); | |
165 | 132 | } |
166 | - | |
133 | + | |
167 | 134 | /** |
168 | - * Populate the mods list | |
169 | 135 | * |
170 | - * @param loader | |
171 | - * @param enabledModsList | |
172 | 136 | */ |
173 | - private void populateModList(LiteLoader loader, EnabledModsList enabledModsList) | |
137 | + private void initBranding() | |
174 | 138 | { |
175 | - this.activeModText = I18n.format("gui.about.modsloaded", loader.getLoadedMods().size()); | |
139 | + LiteAPI logoProvider = null; | |
176 | 140 | |
177 | - // Add mods to this treeset first, in order to sort them | |
178 | - Map<String, GuiModListEntry> sortedMods = new TreeMap<String, GuiModListEntry>(); | |
141 | + int brandingColourProviderPriority = Integer.MIN_VALUE; | |
142 | + int logoProviderPriority = Integer.MIN_VALUE; | |
143 | + int iconProviderPriority = Integer.MIN_VALUE; | |
179 | 144 | |
180 | - // Active mods | |
181 | - for (LiteMod mod : loader.getLoadedMods()) | |
145 | + for (LiteAPI api : LiteLoader.getAPIs()) | |
182 | 146 | { |
183 | - GuiModListEntry modListEntry = new GuiModListEntry(loader, enabledModsList, this.mc.fontRenderer, mod); | |
184 | - sortedMods.put(modListEntry.getKey(), modListEntry); | |
147 | + BrandingProvider brandingProvider = LiteLoader.getCustomisationProvider(api, BrandingProvider.class); | |
148 | + if (brandingProvider == null) continue; | |
149 | + | |
150 | + if (brandingProvider.getBrandingColour() != 0 && brandingProvider.getPriority() > brandingColourProviderPriority) | |
151 | + { | |
152 | + brandingColourProviderPriority = brandingProvider.getPriority(); | |
153 | + this.brandColour = 0xFF000000 | brandingProvider.getBrandingColour(); | |
154 | + } | |
155 | + | |
156 | + ResourceLocation logoResource = brandingProvider.getLogoResource(); | |
157 | + IIcon logoCoords = brandingProvider.getLogoCoords(); | |
158 | + if (logoResource != null && logoCoords != null && brandingProvider.getPriority() > logoProviderPriority) | |
159 | + { | |
160 | + logoProvider = api; | |
161 | + logoProviderPriority = brandingProvider.getPriority(); | |
162 | + this.logoResource = logoResource; | |
163 | + this.logoCoords = logoCoords; | |
164 | + } | |
165 | + | |
166 | + ResourceLocation iconResource = brandingProvider.getIconResource(); | |
167 | + IIcon iconCoords = brandingProvider.getIconCoords(); | |
168 | + if (iconResource != null && iconCoords != null && brandingProvider.getPriority() > iconProviderPriority) | |
169 | + { | |
170 | + iconProviderPriority = brandingProvider.getPriority(); | |
171 | + this.iconResource = iconResource; | |
172 | + this.iconCoords = iconCoords; | |
173 | + } | |
185 | 174 | } |
186 | 175 | |
187 | - // Disabled mods | |
188 | - for (Loadable<?> disabledMod : loader.getDisabledMods()) | |
189 | - { | |
190 | - GuiModListEntry modListEntry = new GuiModListEntry(loader, enabledModsList, this.mc.fontRenderer, disabledMod); | |
191 | - sortedMods.put(modListEntry.getKey(), modListEntry); | |
192 | - } | |
193 | - | |
194 | - // Injected tweaks | |
195 | - for (Loadable<?> injectedTweak : loader.getInjectedTweaks()) | |
176 | + if (logoProvider != null && !LiteLoaderCoreAPI.class.isAssignableFrom(logoProvider.getClass())) | |
196 | 177 | { |
197 | - GuiModListEntry modListEntry = new GuiModListEntry(loader, enabledModsList, this.mc.fontRenderer, injectedTweak); | |
198 | - sortedMods.put(modListEntry.getKey(), modListEntry); | |
178 | + this.versionText = I18n.format("gui.about.poweredbyversion", logoProvider.getVersion(), LiteLoader.getVersion()); | |
199 | 179 | } |
200 | - | |
201 | - // Add the sorted mods to the mods list | |
202 | - this.mods.addAll(sortedMods.values()); | |
203 | - | |
204 | - // Select the first mod in the list | |
205 | - if (this.mods.size() > 0) | |
206 | - this.selectedMod = this.mods.get(0); | |
180 | + } | |
181 | + | |
182 | + /** | |
183 | + * @return | |
184 | + */ | |
185 | + public int getBrandColour() | |
186 | + { | |
187 | + return this.brandColour; | |
207 | 188 | } |
208 | 189 | |
209 | 190 | /** |
... | ... | @@ -211,7 +192,7 @@ public class GuiScreenModInfo extends GuiScreen |
211 | 192 | */ |
212 | 193 | public void release() |
213 | 194 | { |
214 | - this.mainMenu = null; | |
195 | + this.parentScreen = null; | |
215 | 196 | } |
216 | 197 | |
217 | 198 | /** |
... | ... | @@ -219,13 +200,13 @@ public class GuiScreenModInfo extends GuiScreen |
219 | 200 | */ |
220 | 201 | public GuiScreen getScreen() |
221 | 202 | { |
222 | - return this.mainMenu; | |
203 | + return this.parentScreen; | |
223 | 204 | } |
224 | 205 | |
225 | 206 | /** |
226 | 207 | * @return |
227 | 208 | */ |
228 | - public boolean isTweeningOrOpen() | |
209 | + public boolean isOpen() | |
229 | 210 | { |
230 | 211 | return this.tweenAmount > 0.0; |
231 | 212 | } |
... | ... | @@ -237,24 +218,10 @@ public class GuiScreenModInfo extends GuiScreen |
237 | 218 | @Override |
238 | 219 | public void initGui() |
239 | 220 | { |
240 | - if (this.currentPanel != null) | |
241 | - { | |
242 | - this.currentPanel.setSize(this.width - LEFT_EDGE, this.height); | |
243 | - } | |
244 | - | |
245 | - int rightPanelLeftEdge = LEFT_EDGE + MARGIN + 4 + (this.width - LEFT_EDGE - MARGIN - MARGIN - 4) / 2; | |
246 | - | |
247 | - this.buttonList.clear(); | |
248 | - this.buttonList.add(this.btnToggle = new GuiButton(0, rightPanelLeftEdge, this.height - PANEL_BOTTOM - 24, 90, 20, I18n.format("gui.enablemod"))); | |
249 | - this.buttonList.add(this.btnConfig = new GuiButton(1, rightPanelLeftEdge + 92, this.height - PANEL_BOTTOM - 24, 69, 20, I18n.format("gui.modsettings"))); | |
250 | - if (!this.hideTab) | |
251 | - { | |
252 | - this.buttonList.add(this.chkEnabled = new GuiCheckbox(2, LEFT_EDGE + MARGIN, this.height - PANEL_BOTTOM + 9, I18n.format("gui.about.showtabmessage"))); | |
253 | - } | |
254 | - | |
255 | - this.buttonList.add(new GuiHoverLabel(3, LEFT_EDGE + MARGIN + 38 + this.fontRendererObj.getStringWidth(this.versionText) + 6, 50, this.fontRendererObj, I18n.format("gui.about.checkupdates"))); | |
256 | - | |
257 | - this.selectMod(this.selectedMod); | |
221 | + this.currentPanel.setSize(this.width - LEFT_EDGE, this.height); | |
222 | + | |
223 | + this.buttonList.add(new GuiHoverLabel(2, LEFT_EDGE + MARGIN, this.height - PANEL_BOTTOM + 9, this.fontRendererObj, I18n.format("gui.about.taboptions"), this.brandColour)); | |
224 | + this.buttonList.add(new GuiHoverLabel(3, LEFT_EDGE + MARGIN + 38 + this.fontRendererObj.getStringWidth(this.versionText) + 6, 50, this.fontRendererObj, I18n.format("gui.about.checkupdates"), this.brandColour)); | |
258 | 225 | |
259 | 226 | Keyboard.enableRepeatEvents(true); |
260 | 227 | } |
... | ... | @@ -274,7 +241,7 @@ public class GuiScreenModInfo extends GuiScreen |
274 | 241 | if (this.mc.currentScreen == this) |
275 | 242 | { |
276 | 243 | // Set res in parent screen if we are the active GUI |
277 | - this.mainMenu.setWorldAndResolution(minecraft, width, height); | |
244 | + this.parentScreen.setWorldAndResolution(minecraft, width, height); | |
278 | 245 | } |
279 | 246 | |
280 | 247 | super.setWorldAndResolution(minecraft, width, height); |
... | ... | @@ -286,28 +253,21 @@ public class GuiScreenModInfo extends GuiScreen |
286 | 253 | @Override |
287 | 254 | public void updateScreen() |
288 | 255 | { |
289 | - if (this.currentPanel != null) | |
290 | - { | |
291 | - this.currentPanel.onTick(); | |
292 | - } | |
256 | + this.currentPanel.onTick(); | |
293 | 257 | |
294 | 258 | this.tickNumber++; |
295 | 259 | |
296 | 260 | if (this.mc.currentScreen == this) |
297 | 261 | { |
298 | - this.mc.currentScreen = this.mainMenu; | |
299 | - this.mainMenu.updateScreen(); | |
262 | + this.mc.currentScreen = this.parentScreen; | |
263 | + this.parentScreen.updateScreen(); | |
300 | 264 | this.mc.currentScreen = this; |
301 | - if (this.chkEnabled != null) this.chkEnabled.checked = LiteLoader.getInstance().getDisplayModInfoScreenTab(); | |
302 | 265 | } |
303 | 266 | |
304 | 267 | if (this.toggled) |
305 | 268 | { |
306 | 269 | this.onToggled(); |
307 | 270 | } |
308 | - | |
309 | - if (this.doubleClickTime > 0) | |
310 | - this.doubleClickTime--; | |
311 | 271 | } |
312 | 272 | |
313 | 273 | /* (non-Javadoc) |
... | ... | @@ -316,20 +276,31 @@ public class GuiScreenModInfo extends GuiScreen |
316 | 276 | @Override |
317 | 277 | public void drawScreen(int mouseX, int mouseY, float partialTicks) |
318 | 278 | { |
279 | + this.drawScreen(mouseX, mouseY, partialTicks, false); | |
280 | + } | |
281 | + | |
282 | + /** | |
283 | + * @param mouseX | |
284 | + * @param mouseY | |
285 | + * @param partialTicks | |
286 | + * @param alwaysExpandTab | |
287 | + */ | |
288 | + public void drawScreen(int mouseX, int mouseY, float partialTicks, boolean alwaysExpandTab) | |
289 | + { | |
319 | 290 | boolean active = this.mc.currentScreen == this; |
320 | 291 | |
321 | 292 | if (active) |
322 | 293 | { |
323 | 294 | // Draw the parent screen as our background if we are the active screen |
324 | 295 | glClear(GL_DEPTH_BUFFER_BIT); |
325 | - this.mainMenu.drawScreen(-10, -10, partialTicks); | |
296 | + this.parentScreen.drawScreen(-10, -10, partialTicks); | |
326 | 297 | glClear(GL_DEPTH_BUFFER_BIT); |
327 | 298 | } |
328 | 299 | else |
329 | 300 | { |
330 | 301 | // If this is not the active screen, copy the width and height from the parent GUI |
331 | - this.width = this.mainMenu.width; | |
332 | - this.height = this.mainMenu.height; | |
302 | + this.width = this.parentScreen.width; | |
303 | + this.height = this.parentScreen.height; | |
333 | 304 | } |
334 | 305 | |
335 | 306 | // Calculate the current tween position |
... | ... | @@ -337,19 +308,19 @@ public class GuiScreenModInfo extends GuiScreen |
337 | 308 | int offsetMouseX = mouseX - (int)xOffset; |
338 | 309 | |
339 | 310 | // Handle mouse stuff here since we won't get mouse events when not the active GUI |
340 | - boolean mouseOverTab = !this.hideTab && (offsetMouseX > LEFT_EDGE - TAB_WIDTH && offsetMouseX < LEFT_EDGE && mouseY > TAB_TOP && mouseY < TAB_TOP + TAB_HEIGHT); | |
311 | + boolean mouseOverTab = this.showTab && (offsetMouseX > LEFT_EDGE - TAB_WIDTH && offsetMouseX < LEFT_EDGE && mouseY > TAB_TOP && mouseY < TAB_TOP + TAB_HEIGHT); | |
341 | 312 | this.handleMouseClick(offsetMouseX, mouseY, partialTicks, active, mouseOverTab); |
342 | 313 | |
343 | 314 | // Calculate the tab opacity, not framerate adjusted because we don't really care |
344 | - this.tabOpacity = mouseOverTab || this.isTweeningOrOpen() ? 0.5F : Math.max(0.0F, this.tabOpacity - partialTicks * 0.1F); | |
315 | + this.tabOpacity = mouseOverTab || alwaysExpandTab || this.isOpen() ? 0.5F : Math.max(0.0F, this.tabOpacity - partialTicks * 0.1F); | |
345 | 316 | |
346 | 317 | // Draw the panel contents |
347 | 318 | this.drawPanel(offsetMouseX, mouseY, partialTicks, active, xOffset); |
348 | 319 | |
349 | 320 | if (mouseOverTab && this.tweenAmount < 0.01) |
350 | 321 | { |
351 | - GuiScreenModInfo.drawTooltip(this.fontRendererObj, LiteLoader.getVersionDisplayString(), mouseX, mouseY, this.width, this.height, 0xFFFFFF, 0xB0000000); | |
352 | - GuiScreenModInfo.drawTooltip(this.fontRendererObj, this.activeModText, mouseX, mouseY + 13, this.width, this.height, 0xCCCCCC, 0xB0000000); | |
322 | + GuiLiteLoaderPanel.drawTooltip(this.fontRendererObj, LiteLoader.getVersionDisplayString(), mouseX, mouseY, this.width, this.height, 0xFFFFFF, 0xB0000000); | |
323 | + GuiLiteLoaderPanel.drawTooltip(this.fontRendererObj, this.activeModText, mouseX, mouseY + 13, this.width, this.height, 0xCCCCCC, 0xB0000000); | |
353 | 324 | } |
354 | 325 | } |
355 | 326 | |
... | ... | @@ -362,54 +333,44 @@ public class GuiScreenModInfo extends GuiScreen |
362 | 333 | */ |
363 | 334 | private void drawPanel(int mouseX, int mouseY, float partialTicks, boolean active, float xOffset) |
364 | 335 | { |
336 | + this.mouseOverLogo = false; | |
337 | + | |
365 | 338 | glPushMatrix(); |
366 | 339 | glTranslatef(xOffset, 0.0F, 0.0F); |
367 | 340 | |
368 | 341 | // Draw the background and left edge |
369 | 342 | drawRect(LEFT_EDGE, 0, this.width, this.height, 0xB0000000); |
370 | 343 | |
371 | - if (!this.hideTab) | |
344 | + if (this.showTab) | |
372 | 345 | { |
373 | 346 | drawRect(LEFT_EDGE, 0, LEFT_EDGE + 1, TAB_TOP, 0xFFFFFFFF); |
374 | 347 | drawRect(LEFT_EDGE, TAB_TOP + TAB_HEIGHT, LEFT_EDGE + 1, this.height, 0xFFFFFFFF); |
375 | 348 | |
376 | - this.mc.getTextureManager().bindTexture(aboutTextureResource); | |
349 | + this.mc.getTextureManager().bindTexture(LiteLoaderBrandingProvider.ABOUT_TEXTURE); | |
377 | 350 | glDrawTexturedRect(LEFT_EDGE - TAB_WIDTH, TAB_TOP, TAB_WIDTH + 1, TAB_HEIGHT, 80, 80, 122, 160, 0.5F + this.tabOpacity); |
378 | 351 | } |
379 | 352 | else |
380 | 353 | { |
381 | 354 | drawRect(LEFT_EDGE, 0, LEFT_EDGE + 1, this.height, 0xFFFFFFFF); |
382 | - this.mc.getTextureManager().bindTexture(aboutTextureResource); | |
383 | 355 | } |
384 | 356 | |
385 | 357 | // Only draw the panel contents if we are actually open |
386 | - if (this.isTweeningOrOpen()) | |
358 | + if (this.isOpen()) | |
387 | 359 | { |
388 | - if (this.currentPanel != null && this.currentPanel.isCloseRequested()) | |
360 | + if (this.currentPanel.isCloseRequested()) | |
389 | 361 | { |
390 | 362 | this.closeCurrentPanel(); |
391 | 363 | } |
392 | 364 | |
393 | - if (this.currentPanel != null) | |
394 | - { | |
395 | - this.drawCurrentPanel(mouseX, mouseY, partialTicks); | |
396 | - } | |
397 | - else | |
365 | + this.drawCurrentPanel(mouseX, mouseY, partialTicks); | |
366 | + | |
367 | + if (!this.currentPanel.stealFocus()) | |
398 | 368 | { |
399 | - this.drawInfoPanel(mouseX, mouseY, partialTicks, LEFT_EDGE, PANEL_BOTTOM); | |
400 | - | |
401 | - int innerWidth = this.width - LEFT_EDGE - MARGIN - MARGIN - 4; | |
402 | - int panelWidth = innerWidth / 2; | |
403 | - int panelHeight = this.height - PANEL_BOTTOM - PANEL_TOP; | |
404 | - | |
405 | - this.drawModsList(mouseX, mouseY, partialTicks, panelWidth, panelHeight); | |
406 | - this.drawSelectedMod(mouseX, mouseY, partialTicks, panelWidth, panelHeight); | |
407 | - | |
408 | 369 | // Draw other controls inside the transform so that they slide properly |
409 | 370 | super.drawScreen(mouseX, mouseY, partialTicks); |
410 | 371 | } |
411 | 372 | } |
412 | - else if (this.currentPanel != null) | |
373 | + else | |
413 | 374 | { |
414 | 375 | this.closeCurrentPanel(); |
415 | 376 | } |
... | ... | @@ -437,118 +398,27 @@ public class GuiScreenModInfo extends GuiScreen |
437 | 398 | * @param mouseY |
438 | 399 | * @param partialTicks |
439 | 400 | */ |
440 | - protected void drawInfoPanel(int mouseX, int mouseY, float partialTicks, int left, int bottom) | |
401 | + protected boolean drawInfoPanel(int mouseX, int mouseY, float partialTicks, int left, int bottom) | |
441 | 402 | { |
442 | 403 | int right = this.width - MARGIN - LEFT_EDGE + left; |
404 | + left += MARGIN; | |
443 | 405 | |
444 | 406 | // Draw the header pieces |
445 | - glDrawTexturedRect(left + MARGIN, 12, 128, 40, 0, 0, 256, 80, 1.0F); // liteloader logo | |
446 | - glDrawTexturedRect(right - 32, 12, 32, 45, 0, 80, 64, 170, 1.0F); // chicken | |
407 | + this.mc.getTextureManager().bindTexture(this.logoResource); | |
408 | + glDrawTexturedRect(left, MARGIN, this.logoCoords, 1.0F); | |
409 | + this.mc.getTextureManager().bindTexture(this.iconResource); | |
410 | + glDrawTexturedRect(right - this.iconCoords.getIconWidth(), MARGIN, this.iconCoords, 1.0F); | |
447 | 411 | |
448 | 412 | // Draw header text |
449 | - this.fontRendererObj.drawString(this.versionText, left + MARGIN + 38, 50, 0xFFFFFFFF); | |
450 | - this.fontRendererObj.drawString(this.activeModText, left + MARGIN + 38, 60, 0xFFAAAAAA); | |
413 | + this.fontRendererObj.drawString(this.versionText, left + 38, 50, 0xFFFFFFFF); | |
414 | + this.fontRendererObj.drawString(this.activeModText, left + 38, 60, 0xFFAAAAAA); | |
451 | 415 | |
452 | 416 | // Draw top and bottom horizontal rules |
453 | - drawRect(left + MARGIN, 80, right, 81, 0xFF999999); | |
454 | - drawRect(left + MARGIN, this.height - bottom + 2, right, this.height - bottom + 3, 0xFF999999); | |
455 | - } | |
456 | - | |
457 | - /** | |
458 | - * @param mouseX | |
459 | - * @param mouseY | |
460 | - * @param partialTicks | |
461 | - * @param width | |
462 | - * @param height | |
463 | - */ | |
464 | - private void drawModsList(int mouseX, int mouseY, float partialTicks, int width, int height) | |
465 | - { | |
466 | - this.scrollBar.drawScrollBar(mouseX, mouseY, partialTicks, LEFT_EDGE + MARGIN + width - SCROLLBAR_WIDTH, PANEL_TOP, SCROLLBAR_WIDTH, height, this.listHeight); | |
467 | - | |
468 | - // clip outside of scroll area | |
469 | - glEnableClipping(LEFT_EDGE + MARGIN, LEFT_EDGE + MARGIN + width - SCROLLBAR_WIDTH - 1, PANEL_TOP, this.height - PANEL_BOTTOM); | |
470 | - | |
471 | - // handle scrolling | |
472 | - glPushMatrix(); | |
473 | - glTranslatef(0.0F, PANEL_TOP - this.scrollBar.getValue(), 0.0F); | |
474 | - | |
475 | - mouseY -= (PANEL_TOP - this.scrollBar.getValue()); | |
476 | - | |
477 | - int yPos = 0; | |
478 | - for (GuiModListEntry mod : this.mods) | |
479 | - { | |
480 | - // drawListEntry returns a value indicating the height of the item drawn | |
481 | - yPos += mod.drawListEntry(mouseX, mouseY, partialTicks, LEFT_EDGE + MARGIN, yPos, width - 6, mod == this.selectedMod); | |
482 | - } | |
483 | - | |
484 | - yPos = 0; | |
485 | - for (GuiModListEntry mod : this.mods) | |
486 | - { | |
487 | - yPos += mod.postRenderListEntry(mouseX, mouseY, partialTicks, LEFT_EDGE + MARGIN, yPos, width - 6, mod == this.selectedMod); | |
488 | - } | |
489 | - | |
490 | - glPopMatrix(); | |
491 | - glDisableClipping(); | |
492 | - | |
493 | - this.listHeight = yPos; | |
494 | - this.scrollBar.setMaxValue(this.listHeight - height); | |
495 | - } | |
496 | - | |
497 | - /** | |
498 | - * @param mouseX | |
499 | - * @param mouseY | |
500 | - * @param partialTicks | |
501 | - * @param width | |
502 | - * @param height | |
503 | - */ | |
504 | - private void drawSelectedMod(int mouseX, int mouseY, float partialTicks, int width, int height) | |
505 | - { | |
506 | - if (this.selectedMod != null) | |
507 | - { | |
508 | - int left = LEFT_EDGE + MARGIN + width; | |
509 | - int right = this.width - MARGIN; | |
510 | - | |
511 | - int spaceForButtons = this.btnConfig.field_146125_m || this.btnToggle.field_146125_m ? 28 : 0; | |
512 | - glEnableClipping(left, right, PANEL_TOP, this.height - PANEL_BOTTOM - spaceForButtons); | |
513 | - this.selectedMod.drawInfo(mouseX, mouseY, partialTicks, left, PANEL_TOP, right - left, height - spaceForButtons); | |
514 | - glDisableClipping(); | |
515 | - } | |
516 | - } | |
517 | - | |
518 | - /** | |
519 | - * @param mod | |
520 | - * @return | |
521 | - */ | |
522 | - private void selectMod(GuiModListEntry mod) | |
523 | - { | |
524 | - if (this.selectedMod != null) | |
525 | - { | |
526 | - this.selectedMod.mouseReleased(); | |
527 | - } | |
417 | + drawRect(left, 80, right, 81, 0xFF999999); | |
418 | + drawRect(left, this.height - bottom + 2, right, this.height - bottom + 3, 0xFF999999); | |
528 | 419 | |
529 | - this.selectedMod = mod; | |
530 | - this.btnToggle.field_146125_m = false; | |
531 | - this.btnConfig.field_146125_m = false; | |
532 | - | |
533 | - if (this.selectedMod != null && this.selectedMod.canBeToggled()) | |
534 | - { | |
535 | - this.btnToggle.field_146125_m = true; | |
536 | - this.btnToggle.displayString = this.selectedMod.willBeEnabled() ? I18n.format("gui.disablemod") : I18n.format("gui.enablemod"); | |
537 | - | |
538 | - this.btnConfig.field_146125_m = this.configManager.hasPanel(this.selectedMod.getModClass()); | |
539 | - } | |
540 | - } | |
541 | - | |
542 | - /** | |
543 | - * Toggle the selected mod's enabled status | |
544 | - */ | |
545 | - private void toggleSelectedMod() | |
546 | - { | |
547 | - if (this.selectedMod != null) | |
548 | - { | |
549 | - this.selectedMod.toggleEnabled(); | |
550 | - this.selectMod(this.selectedMod); | |
551 | - } | |
420 | + this.mouseOverLogo = (mouseY > MARGIN && mouseY < MARGIN + this.logoCoords.getIconHeight() && mouseX > left && mouseX < left + this.logoCoords.getIconWidth()); | |
421 | + return this.mouseOverLogo; | |
552 | 422 | } |
553 | 423 | |
554 | 424 | /* (non-Javadoc) |
... | ... | @@ -557,30 +427,14 @@ public class GuiScreenModInfo extends GuiScreen |
557 | 427 | @Override |
558 | 428 | protected void actionPerformed(GuiButton button) |
559 | 429 | { |
560 | - if (button.id == 0) | |
430 | + if (button.id == 2) | |
561 | 431 | { |
562 | - this.toggleSelectedMod(); | |
563 | - } | |
564 | - | |
565 | - if (button.id == 1) | |
566 | - { | |
567 | - this.openConfigPanel(); | |
568 | - } | |
569 | - | |
570 | - if (button.id == 2 && this.chkEnabled != null) | |
571 | - { | |
572 | - this.chkEnabled.checked = !this.chkEnabled.checked; | |
573 | - LiteLoader.getInstance().setDisplayModInfoScreenTab(this.chkEnabled.checked); | |
574 | - | |
575 | - if (!this.chkEnabled.checked) | |
576 | - { | |
577 | - this.chkEnabled.displayString = I18n.format("gui.about.showtabmessage") + I18n.format("gui.about.keystrokehint"); | |
578 | - } | |
432 | + this.setCurrentPanel(this.settingsPanel); | |
579 | 433 | } |
580 | 434 | |
581 | 435 | if (button.id == 3) |
582 | 436 | { |
583 | - this.setCurrentPanel(new GuiCheckUpdatePanel(this.mc, LiteLoaderVersion.getUpdateSite(), "LiteLoader")); | |
437 | + this.setCurrentPanel(new GuiPanelUpdateCheck(this.mc, LiteLoaderVersion.getUpdateSite(), "LiteLoader")); | |
584 | 438 | } |
585 | 439 | } |
586 | 440 | |
... | ... | @@ -590,69 +444,23 @@ public class GuiScreenModInfo extends GuiScreen |
590 | 444 | @Override |
591 | 445 | protected void keyTyped(char keyChar, int keyCode) |
592 | 446 | { |
593 | - if (this.currentPanel != null) | |
594 | - { | |
595 | - this.currentPanel.keyPressed(keyChar, keyCode); | |
596 | - return; | |
597 | - } | |
598 | - | |
599 | - if (keyCode == Keyboard.KEY_ESCAPE) | |
600 | - { | |
601 | - this.onToggled(); | |
602 | - return; | |
603 | - } | |
604 | - else if (keyCode == Keyboard.KEY_UP) | |
605 | - { | |
606 | - int selectedIndex = this.mods.indexOf(this.selectedMod) - 1; | |
607 | - if (selectedIndex > -1) this.selectMod(this.mods.get(selectedIndex)); | |
608 | - this.scrollSelectedModIntoView(); | |
609 | - } | |
610 | - else if (keyCode == Keyboard.KEY_DOWN) | |
611 | - { | |
612 | - int selectedIndex = this.mods.indexOf(this.selectedMod); | |
613 | - if (selectedIndex > -1 && selectedIndex < this.mods.size() - 1) this.selectMod(this.mods.get(selectedIndex + 1)); | |
614 | - this.scrollSelectedModIntoView(); | |
615 | - } | |
616 | - else if (keyCode == Keyboard.KEY_SPACE || keyCode == Keyboard.KEY_RETURN || keyCode == Keyboard.KEY_NUMPADENTER || keyCode == Keyboard.KEY_RIGHT) | |
617 | - { | |
618 | - this.toggleSelectedMod(); | |
619 | - } | |
620 | - else if (keyCode == Keyboard.KEY_F3) | |
621 | - { | |
622 | - this.setCurrentPanel(new GuiLiteLoaderLog(this.mc)); | |
623 | - } | |
624 | - else if (keyCode == Keyboard.KEY_F1) | |
625 | - { | |
626 | - this.setCurrentPanel(new GuiAboutPanel(this.mc, this)); | |
627 | - } | |
447 | + this.currentPanel.keyPressed(keyChar, keyCode); | |
628 | 448 | } |
629 | - | |
630 | - private void scrollSelectedModIntoView() | |
449 | + | |
450 | + /** | |
451 | + * | |
452 | + */ | |
453 | + void showLogPanel() | |
631 | 454 | { |
632 | - if (this.selectedMod == null) return; | |
633 | - | |
634 | - int yPos = 0; | |
635 | - for (GuiModListEntry mod : this.mods) | |
636 | - { | |
637 | - if (mod == this.selectedMod) break; | |
638 | - yPos += mod.getHeight(); | |
639 | - } | |
640 | - | |
641 | - // Mod is above the top of the visible window | |
642 | - if (yPos < this.scrollBar.getValue()) | |
643 | - { | |
644 | - this.scrollBar.setValue(yPos); | |
645 | - return; | |
646 | - } | |
647 | - | |
648 | - int panelHeight = this.height - PANEL_BOTTOM - PANEL_TOP; | |
649 | - int modHeight = this.selectedMod.getHeight(); | |
650 | - | |
651 | - // Mod is below the bottom of the visible window | |
652 | - if (yPos - this.scrollBar.getValue() + modHeight > panelHeight) | |
653 | - { | |
654 | - this.scrollBar.setValue(yPos - panelHeight + modHeight); | |
655 | - } | |
455 | + this.setCurrentPanel(new GuiPanelLiteLoaderLog(this.mc, this)); | |
456 | + } | |
457 | + | |
458 | + /** | |
459 | + * | |
460 | + */ | |
461 | + void showAboutPanel() | |
462 | + { | |
463 | + this.setCurrentPanel(new GuiPanelAbout(this.mc, this)); | |
656 | 464 | } |
657 | 465 | |
658 | 466 | /* (non-Javadoc) |
... | ... | @@ -661,76 +469,34 @@ public class GuiScreenModInfo extends GuiScreen |
661 | 469 | @Override |
662 | 470 | protected void mouseClicked(int mouseX, int mouseY, int button) |
663 | 471 | { |
664 | - if (this.currentPanel != null) | |
472 | + this.currentPanel.mousePressed(mouseX - LEFT_EDGE, mouseY, button); | |
473 | + | |
474 | + if (button == 0 && this.mouseOverLogo && !this.currentPanel.stealFocus()) | |
665 | 475 | { |
666 | - this.currentPanel.mousePressed(mouseX - LEFT_EDGE, mouseY, button); | |
667 | - return; | |
476 | + this.showAboutPanel(); | |
668 | 477 | } |
669 | 478 | |
670 | - if (button == 0) | |
479 | + if (!this.currentPanel.stealFocus()) | |
671 | 480 | { |
672 | - if (this.scrollBar.wasMouseOver()) | |
673 | - { | |
674 | - this.scrollBar.setDragging(true); | |
675 | - } | |
676 | - | |
677 | - if (mouseY > PANEL_TOP && mouseY < this.height - PANEL_BOTTOM) | |
678 | - { | |
679 | - GuiModListEntry lastSelectedMod = this.selectedMod; | |
680 | - | |
681 | - for (GuiModListEntry mod : this.mods) | |
682 | - { | |
683 | - if (mod.mouseWasOverListEntry()) | |
684 | - { | |
685 | - this.selectMod(mod); | |
686 | - | |
687 | - // handle double-click | |
688 | - if (mod == lastSelectedMod && this.doubleClickTime > 0 && this.btnConfig.field_146125_m) | |
689 | - { | |
690 | - this.actionPerformed(this.btnConfig); | |
691 | - } | |
692 | - | |
693 | - this.doubleClickTime = 5; | |
694 | - } | |
695 | - } | |
696 | - | |
697 | - if (this.selectedMod != null && this.selectedMod == lastSelectedMod) | |
698 | - { | |
699 | - this.selectedMod.mousePressed(); | |
700 | - } | |
701 | - } | |
481 | + super.mouseClicked(mouseX, mouseY, button); | |
702 | 482 | } |
703 | - | |
704 | - super.mouseClicked(mouseX, mouseY, button); | |
705 | 483 | } |
706 | 484 | |
707 | 485 | /* (non-Javadoc) |
708 | - * @see net.minecraft.client.gui.GuiScreen#mouseMovedOrUp(int, int, int) | |
486 | + * @see net.minecraft.client.gui.GuiScreen#mouseReleased(int, int, int) | |
709 | 487 | */ |
710 | 488 | @Override |
711 | - protected void mouseMovedOrUp(int mouseX, int mouseY, int button) | |
489 | + protected void mouseReleased(int mouseX, int mouseY, int button) | |
712 | 490 | { |
713 | - if (this.currentPanel != null) | |
491 | + if (button == -1) | |
492 | + this.currentPanel.mouseMoved(mouseX - LEFT_EDGE, mouseY); | |
493 | + else | |
494 | + this.currentPanel.mouseReleased(mouseX - LEFT_EDGE, mouseY, button); | |
495 | + | |
496 | + if (!this.currentPanel.stealFocus()) | |
714 | 497 | { |
715 | - if (button == -1) | |
716 | - this.currentPanel.mouseMoved(mouseX - LEFT_EDGE, mouseY); | |
717 | - else | |
718 | - this.currentPanel.mouseReleased(mouseX - LEFT_EDGE, mouseY, button); | |
719 | - | |
720 | - return; | |
498 | + super.mouseReleased(mouseX, mouseY, button); | |
721 | 499 | } |
722 | - | |
723 | - if (button == 0) | |
724 | - { | |
725 | - this.scrollBar.setDragging(false); | |
726 | - | |
727 | - if (this.selectedMod != null) | |
728 | - { | |
729 | - this.selectedMod.mouseReleased(); | |
730 | - } | |
731 | - } | |
732 | - | |
733 | - super.mouseMovedOrUp(mouseX, mouseY, button); | |
734 | 500 | } |
735 | 501 | |
736 | 502 | /* (non-Javadoc) |
... | ... | @@ -742,27 +508,13 @@ public class GuiScreenModInfo extends GuiScreen |
742 | 508 | int mouseWheelDelta = Mouse.getEventDWheel(); |
743 | 509 | if (mouseWheelDelta != 0) |
744 | 510 | { |
745 | - if (this.currentPanel != null) | |
746 | - this.currentPanel.mouseWheelScrolled(mouseWheelDelta); | |
747 | - else | |
748 | - mouseWheelScrolled(mouseWheelDelta / 8); | |
511 | + this.currentPanel.mouseWheelScrolled(mouseWheelDelta); | |
749 | 512 | } |
750 | 513 | |
751 | 514 | super.handleMouseInput(); |
752 | 515 | } |
753 | 516 | |
754 | 517 | /** |
755 | - * @param mouseWheelDelta | |
756 | - */ | |
757 | - private void mouseWheelScrolled(int mouseWheelDelta) | |
758 | - { | |
759 | - if (this.selectedMod == null || !this.selectedMod.mouseWheelScrolled(mouseWheelDelta)) | |
760 | - { | |
761 | - this.scrollBar.offsetValue(-mouseWheelDelta); | |
762 | - } | |
763 | - } | |
764 | - | |
765 | - /** | |
766 | 518 | * @param mouseX |
767 | 519 | * @param active |
768 | 520 | * @param mouseOverTab |
... | ... | @@ -794,7 +546,7 @@ public class GuiScreenModInfo extends GuiScreen |
794 | 546 | { |
795 | 547 | this.tweenAmount = Math.min(1.0, this.tweenAmount + ((tickValue - this.lastTick) * TWEEN_RATE)); |
796 | 548 | } |
797 | - else if (!active && this.isTweeningOrOpen()) | |
549 | + else if (!active && this.isOpen()) | |
798 | 550 | { |
799 | 551 | this.tweenAmount = Math.max(0.0, this.tweenAmount - ((tickValue - this.lastTick) * TWEEN_RATE)); |
800 | 552 | } |
... | ... | @@ -806,31 +558,27 @@ public class GuiScreenModInfo extends GuiScreen |
806 | 558 | /** |
807 | 559 | * Called when the tab is clicked |
808 | 560 | */ |
809 | - private void onToggled() | |
561 | + void onToggled() | |
810 | 562 | { |
811 | 563 | this.toggled = false; |
812 | - this.mc.displayGuiScreen(this.mc.currentScreen == this ? this.mainMenu : this); | |
564 | + this.mc.displayGuiScreen(this.mc.currentScreen == this ? this.parentScreen : this); | |
813 | 565 | } |
814 | 566 | |
815 | 567 | /** |
816 | 568 | * Callback for the "config" button, display the config panel for the currently selected mod |
817 | 569 | */ |
818 | - private void openConfigPanel() | |
570 | + void openConfigPanel(ConfigPanel panel, LiteMod mod) | |
819 | 571 | { |
820 | - if (this.selectedMod != null && this.selectedMod.getModClass() != null) | |
572 | + if (panel != null) | |
821 | 573 | { |
822 | - ConfigPanel panel = this.configManager.getPanel(this.selectedMod.getModClass()); | |
823 | - if (panel != null) | |
824 | - { | |
825 | - this.setCurrentPanel(new GuiConfigPanelContainer(this.mc, panel, this.selectedMod.getModInstance())); | |
826 | - } | |
574 | + this.setCurrentPanel(new GuiPanelConfigContainer(this.mc, panel, mod)); | |
827 | 575 | } |
828 | 576 | } |
829 | 577 | |
830 | 578 | /** |
831 | 579 | * @param newPanel |
832 | 580 | */ |
833 | - private void setCurrentPanel(ModInfoScreenPanel newPanel) | |
581 | + private void setCurrentPanel(GuiPanel newPanel) | |
834 | 582 | { |
835 | 583 | this.closeCurrentPanel(); |
836 | 584 | |
... | ... | @@ -844,20 +592,9 @@ public class GuiScreenModInfo extends GuiScreen |
844 | 592 | */ |
845 | 593 | private void closeCurrentPanel() |
846 | 594 | { |
847 | - if (this.currentPanel != null) | |
848 | - { | |
849 | - this.currentPanel.onHidden(); | |
850 | - this.currentPanel = null; | |
851 | - } | |
852 | - } | |
853 | - | |
854 | - public final static boolean isSupportedOnScreen(GuiScreen guiScreen) | |
855 | - { | |
856 | - return ( | |
857 | - guiScreen instanceof GuiMainMenu || | |
858 | - guiScreen instanceof GuiIngameMenu || | |
859 | - guiScreen instanceof GuiOptions | |
860 | - ); | |
595 | + this.currentPanel.onHidden(); | |
596 | + this.currentPanel = this.modsPanel; | |
597 | + this.modsPanel.setSize(this.width - LEFT_EDGE, this.height); | |
861 | 598 | } |
862 | 599 | |
863 | 600 | /** |
... | ... | @@ -895,25 +632,51 @@ public class GuiScreenModInfo extends GuiScreen |
895 | 632 | */ |
896 | 633 | static void glDrawTexturedRect(int x, int y, int width, int height, int u, int v, int u2, int v2, float alpha) |
897 | 634 | { |
635 | + float texMapScale = 0.00390625F; // 256px | |
636 | + glDrawTexturedRect(x, y, width, height, u * texMapScale, v * texMapScale, u2 * texMapScale, v2 * texMapScale, alpha); | |
637 | + } | |
638 | + | |
639 | + /** | |
640 | + * @param x | |
641 | + * @param y | |
642 | + * @param width | |
643 | + * @param height | |
644 | + * @param u | |
645 | + * @param v | |
646 | + * @param u2 | |
647 | + * @param v2 | |
648 | + * @param alpha | |
649 | + */ | |
650 | + static void glDrawTexturedRect(int x, int y, int width, int height, float u, float v, float u2, float v2, float alpha) | |
651 | + { | |
898 | 652 | glDisable(GL_LIGHTING); |
899 | 653 | glEnable(GL_BLEND); |
900 | 654 | glAlphaFunc(GL_GREATER, 0.0F); |
901 | 655 | glEnable(GL_TEXTURE_2D); |
902 | 656 | glColor4f(1.0F, 1.0F, 1.0F, alpha); |
903 | 657 | |
904 | - float texMapScale = 0.00390625F; // 256px | |
905 | - | |
906 | 658 | Tessellator tessellator = Tessellator.instance; |
907 | 659 | tessellator.startDrawingQuads(); |
908 | - tessellator.addVertexWithUV(x + 0, y + height, 0, u * texMapScale, v2 * texMapScale); | |
909 | - tessellator.addVertexWithUV(x + width, y + height, 0, u2 * texMapScale, v2 * texMapScale); | |
910 | - tessellator.addVertexWithUV(x + width, y + 0, 0, u2 * texMapScale, v * texMapScale); | |
911 | - tessellator.addVertexWithUV(x + 0, y + 0, 0, u * texMapScale, v * texMapScale); | |
660 | + tessellator.addVertexWithUV(x + 0, y + height, 0, u , v2); | |
661 | + tessellator.addVertexWithUV(x + width, y + height, 0, u2, v2); | |
662 | + tessellator.addVertexWithUV(x + width, y + 0, 0, u2, v ); | |
663 | + tessellator.addVertexWithUV(x + 0, y + 0, 0, u , v ); | |
912 | 664 | tessellator.draw(); |
913 | 665 | |
914 | 666 | glDisable(GL_BLEND); |
915 | 667 | glAlphaFunc(GL_GREATER, 0.01F); |
916 | 668 | } |
669 | + | |
670 | + /** | |
671 | + * @param resource | |
672 | + * @param x | |
673 | + * @param y | |
674 | + * @param icon | |
675 | + */ | |
676 | + static void glDrawTexturedRect(int x, int y, IIcon icon, float alpha) | |
677 | + { | |
678 | + glDrawTexturedRect(x, y, icon.getIconWidth(), icon.getIconHeight(), icon.getMinU(), icon.getMinV(), icon.getMaxU(), icon.getMaxV(), alpha); | |
679 | + } | |
917 | 680 | |
918 | 681 | /** |
919 | 682 | * Enable OpenGL clipping planes (uses planes 2, 3, 4 and 5) | ... | ... |
java/com/mumfrey/liteloader/gui/GuiModListEntry.java renamed to java/client/com/mumfrey/liteloader/client/gui/GuiModListEntry.java
1 | -package com.mumfrey.liteloader.gui; | |
1 | +package com.mumfrey.liteloader.client.gui; | |
2 | 2 | |
3 | 3 | import static org.lwjgl.opengl.GL11.*; |
4 | 4 | |
5 | +import java.util.ArrayList; | |
6 | +import java.util.List; | |
5 | 7 | import java.util.Set; |
6 | 8 | |
7 | 9 | import net.minecraft.client.Minecraft; |
... | ... | @@ -9,13 +11,16 @@ import net.minecraft.client.gui.FontRenderer; |
9 | 11 | import net.minecraft.client.gui.Gui; |
10 | 12 | import net.minecraft.client.resources.I18n; |
11 | 13 | |
14 | +import com.google.common.collect.ImmutableSet; | |
12 | 15 | import com.mumfrey.liteloader.LiteMod; |
13 | -import com.mumfrey.liteloader.core.EnabledModsList; | |
14 | -import com.mumfrey.liteloader.core.LiteLoader; | |
16 | +import com.mumfrey.liteloader.client.api.LiteLoaderBrandingProvider; | |
17 | +import com.mumfrey.liteloader.client.util.render.IconAbsolute; | |
15 | 18 | import com.mumfrey.liteloader.core.LiteLoaderEnumerator; |
16 | -import com.mumfrey.liteloader.core.Loadable; | |
17 | -import com.mumfrey.liteloader.core.LoadableMod; | |
18 | -import com.mumfrey.liteloader.core.TweakContainer; | |
19 | +import com.mumfrey.liteloader.core.LiteLoaderMods; | |
20 | +import com.mumfrey.liteloader.interfaces.Loadable; | |
21 | +import com.mumfrey.liteloader.interfaces.LoadableMod; | |
22 | +import com.mumfrey.liteloader.interfaces.TweakContainer; | |
23 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | |
19 | 24 | |
20 | 25 | /** |
21 | 26 | * Represents a mod in the mod info screen, keeps track of mod information and provides methods |
... | ... | @@ -25,14 +30,41 @@ import com.mumfrey.liteloader.core.TweakContainer; |
25 | 30 | */ |
26 | 31 | public class GuiModListEntry extends Gui |
27 | 32 | { |
28 | - private static final int PANEL_HEIGHT = 32; | |
29 | - private static final int PANEL_SPACING = 4; | |
33 | + private static final int BLACK = 0xFF000000; | |
34 | + private static final int DARK_GREY = 0xB0333333; | |
35 | + private static final int GREY = 0xFF999999; | |
36 | + private static final int WHITE = 0xFFFFFFFF; | |
37 | + | |
38 | + private static final int BLEND_2THRDS = 0xB0FFFFFF; | |
39 | + private static final int BLEND_HALF = 0x80FFFFFF; | |
40 | + | |
41 | + private static final int API_COLOUR = 0xFFAA00AA; | |
42 | + private static final int EXTERNAL_ENTRY_COLOUR = 0xFF47D1AA; | |
43 | + private static final int MISSING_DEPENDENCY_COLOUR = 0xFFFFAA00; | |
44 | + | |
45 | + private static final int TITLE_COLOUR = GuiModListEntry.WHITE; | |
46 | + private static final int VERSION_TEXT_COLOUR = GuiModListEntry.GREY; | |
47 | + private static final int GRADIENT_COLOUR2 = GuiModListEntry.BLEND_2THRDS & GuiModListEntry.DARK_GREY; | |
48 | + private static final int HANGER_COLOUR = GuiModListEntry.GREY; | |
49 | + private static final int HANGER_COLOUR_MOUSEOVER = GuiModListEntry.WHITE; | |
50 | + private static final int AUTHORS_COLOUR = GuiModListEntry.WHITE; | |
51 | + private static final int DIVIDER_COLOUR = GuiModListEntry.GREY; | |
52 | + private static final int DESCRIPTION_COLOUR = GuiModListEntry.WHITE; | |
53 | + | |
54 | + private static final int PANEL_HEIGHT = 32; | |
55 | + private static final int PANEL_SPACING = 4; | |
56 | + | |
57 | + private static final Set<String> BUILT_IN_APIS = ImmutableSet.of("liteloader"); | |
30 | 58 | |
31 | 59 | /** |
32 | 60 | * For text display |
33 | 61 | */ |
34 | 62 | private FontRenderer fontRenderer; |
35 | 63 | |
64 | + private final int brandColour; | |
65 | + | |
66 | + private final LiteLoaderMods mods; | |
67 | + | |
36 | 68 | private LiteMod modInstance; |
37 | 69 | |
38 | 70 | private Class<? extends LiteMod> modClass; |
... | ... | @@ -74,12 +106,19 @@ public class GuiModListEntry extends Gui |
74 | 106 | |
75 | 107 | private boolean isMissingDependencies; |
76 | 108 | |
109 | + private boolean isMissingAPIs; | |
110 | + | |
77 | 111 | /** |
78 | 112 | * True if the mod is missing a dependency which has caused it not to load |
79 | 113 | */ |
80 | 114 | private Set<String> missingDependencies; |
81 | 115 | |
82 | 116 | /** |
117 | + * True if the mod is missing an API which has caused it not to load | |
118 | + */ | |
119 | + private Set<String> missingAPIs; | |
120 | + | |
121 | + /** | |
83 | 122 | * Whether the mod can be toggled, not all mods support this, eg. internal mods |
84 | 123 | */ |
85 | 124 | private boolean canBeToggled; |
... | ... | @@ -100,66 +139,78 @@ public class GuiModListEntry extends Gui |
100 | 139 | */ |
101 | 140 | private boolean external; |
102 | 141 | |
103 | - private boolean providesTweak, providesTransformer; | |
142 | + private List<IconAbsolute> modIcons = new ArrayList<IconAbsolute>(); | |
104 | 143 | |
105 | 144 | /** |
106 | 145 | * Scroll bar control for the mod info |
107 | 146 | */ |
108 | 147 | private GuiSimpleScrollBar scrollBar = new GuiSimpleScrollBar(); |
109 | - | |
148 | + | |
110 | 149 | /** |
111 | 150 | * Mod list entry for an ACTIVE mod |
112 | - * | |
113 | - * @param loader | |
114 | - * @param enabledMods | |
115 | 151 | * @param fontRenderer |
116 | 152 | * @param modInstance |
153 | + * @param enabledMods | |
117 | 154 | */ |
118 | - GuiModListEntry(LiteLoader loader, EnabledModsList enabledMods, FontRenderer fontRenderer, LiteMod modInstance) | |
155 | + GuiModListEntry(LiteLoaderMods mods, LoaderEnvironment environment, FontRenderer fontRenderer, int brandColour, LiteMod modInstance) | |
119 | 156 | { |
157 | + this.mods = mods; | |
120 | 158 | this.fontRenderer = fontRenderer; |
159 | + this.brandColour = brandColour; | |
160 | + | |
121 | 161 | this.modInstance = modInstance; |
122 | 162 | this.modClass = modInstance.getClass(); |
123 | - this.identifier = loader.getModIdentifier(this.modClass); | |
163 | + this.identifier = mods.getModIdentifier(this.modClass); | |
124 | 164 | this.name = modInstance.getName(); |
125 | 165 | this.version = modInstance.getVersion(); |
126 | 166 | this.enabled = true; |
127 | - this.canBeToggled = this.identifier != null && enabledMods.saveAllowed(); | |
128 | - this.willBeEnabled = true; | |
167 | + this.canBeToggled = this.identifier != null && mods.getEnabledModsList().saveAllowed(); | |
168 | + this.willBeEnabled = this.identifier == null || mods.isModEnabled(this.identifier);; | |
129 | 169 | |
130 | - LoadableMod<?> modContainer = loader.getModContainer(this.modClass); | |
170 | + LoadableMod<?> modContainer = mods.getModContainer(this.modClass); | |
131 | 171 | |
132 | 172 | this.author = modContainer.getAuthor(); |
133 | 173 | this.url = modContainer.getMetaValue("url", null); |
134 | 174 | this.description = modContainer.getDescription(LiteLoaderEnumerator.getModClassName(modInstance)); |
135 | 175 | |
176 | + boolean providesTweak = false; | |
177 | + boolean providesTransformer = false; | |
178 | + boolean usingAPI = this.checkUsingAPI(modContainer); | |
179 | + | |
136 | 180 | if (modContainer instanceof TweakContainer) |
137 | 181 | { |
138 | - this.providesTweak = ((TweakContainer<?>)modContainer).hasTweakClass(); | |
139 | - this.providesTransformer = ((TweakContainer<?>)modContainer).hasClassTransformers(); | |
182 | + providesTweak = ((TweakContainer<?>)modContainer).hasTweakClass(); | |
183 | + providesTransformer = ((TweakContainer<?>)modContainer).hasClassTransformers(); | |
140 | 184 | } |
185 | + | |
186 | + this.initIcons(providesTweak, providesTransformer, usingAPI); | |
141 | 187 | } |
142 | 188 | |
143 | 189 | /** |
144 | 190 | * Mod list entry for a currently disabled mod |
145 | - * | |
146 | - * @param loader | |
147 | - * @param enabledMods | |
191 | + * @param mods | |
148 | 192 | * @param fontRenderer |
149 | 193 | * @param modContainer |
150 | 194 | */ |
151 | - GuiModListEntry(LiteLoader loader, EnabledModsList enabledMods, FontRenderer fontRenderer, Loadable<?> modContainer) | |
195 | + GuiModListEntry(LiteLoaderMods mods, LoaderEnvironment environment, FontRenderer fontRenderer, int brandColour, Loadable<?> modContainer) | |
152 | 196 | { |
197 | + this.mods = mods; | |
153 | 198 | this.fontRenderer = fontRenderer; |
199 | + this.brandColour = brandColour; | |
200 | + | |
154 | 201 | this.identifier = modContainer.getIdentifier().toLowerCase(); |
155 | 202 | this.name = modContainer.getDisplayName(); |
156 | 203 | this.version = modContainer.getVersion(); |
157 | 204 | this.author = modContainer.getAuthor(); |
158 | - this.enabled = modContainer.isEnabled(enabledMods, LiteLoader.getProfile()); | |
159 | - this.canBeToggled = modContainer.isToggleable() && enabledMods.saveAllowed(); | |
160 | - this.willBeEnabled = enabledMods.isEnabled(LiteLoader.getProfile(), this.identifier); | |
205 | + this.enabled = modContainer.isEnabled(environment); | |
206 | + this.canBeToggled = modContainer.isToggleable() && mods.getEnabledModsList().saveAllowed(); | |
207 | + this.willBeEnabled = mods.isModEnabled(this.identifier); | |
161 | 208 | this.external = modContainer.isExternalJar(); |
162 | 209 | this.description = modContainer.getDescription(null); |
210 | + | |
211 | + boolean providesTweak = false; | |
212 | + boolean providesTransformer = false; | |
213 | + boolean usingAPI = false; | |
163 | 214 | |
164 | 215 | if (modContainer instanceof LoadableMod<?>) |
165 | 216 | { |
... | ... | @@ -167,24 +218,58 @@ public class GuiModListEntry extends Gui |
167 | 218 | |
168 | 219 | this.url = loadableMod.getMetaValue("url", null); |
169 | 220 | this.missingDependencies = loadableMod.getMissingDependencies(); |
221 | + this.missingAPIs = loadableMod.getMissingAPIs(); | |
170 | 222 | this.isMissingDependencies = this.missingDependencies.size() > 0; |
223 | + this.isMissingAPIs = this.missingAPIs.size() > 0; | |
171 | 224 | |
172 | - if (this.isMissingDependencies) | |
173 | - { | |
174 | - this.enabled = false; | |
175 | - this.description = I18n.format("gui.description.missingdeps") + "\n" + this.missingDependencies.toString(); | |
176 | - } | |
225 | + usingAPI = this.checkUsingAPI(loadableMod); | |
177 | 226 | } |
178 | 227 | |
179 | 228 | if (modContainer instanceof TweakContainer) |
180 | 229 | { |
181 | 230 | TweakContainer<?> tweakContainer = (TweakContainer<?>)modContainer; |
182 | 231 | |
183 | - this.providesTweak = tweakContainer.hasTweakClass(); | |
184 | - this.providesTransformer = tweakContainer.hasClassTransformers(); | |
232 | + providesTweak = tweakContainer.hasTweakClass(); | |
233 | + providesTransformer = tweakContainer.hasClassTransformers(); | |
185 | 234 | } |
235 | + | |
236 | + this.initIcons(providesTweak, providesTransformer, usingAPI); | |
186 | 237 | } |
187 | - | |
238 | + | |
239 | + /** | |
240 | + * @param providesTweak | |
241 | + * @param providesTransformer | |
242 | + * @param usingAPI | |
243 | + */ | |
244 | + protected void initIcons(boolean providesTweak, boolean providesTransformer, boolean usingAPI) | |
245 | + { | |
246 | + if (providesTweak) | |
247 | + { | |
248 | + this.modIcons.add(new IconAbsolute(LiteLoaderBrandingProvider.ABOUT_TEXTURE, I18n.format("gui.mod.providestweak"), 12, 12, 158, 80, 158 + 12, 80 + 12)); | |
249 | + } | |
250 | + | |
251 | + if (providesTransformer) | |
252 | + { | |
253 | + this.modIcons.add(new IconAbsolute(LiteLoaderBrandingProvider.ABOUT_TEXTURE, I18n.format("gui.mod.providestransformer"), 12, 12, 170, 80, 170 + 12, 80 + 12)); | |
254 | + } | |
255 | + | |
256 | + if (usingAPI) | |
257 | + { | |
258 | + this.modIcons.add(new IconAbsolute(LiteLoaderBrandingProvider.ABOUT_TEXTURE, I18n.format("gui.mod.usingapi"), 12, 12, 122, 92, 122 + 12, 92 + 12)); | |
259 | + } | |
260 | + } | |
261 | + | |
262 | + private boolean checkUsingAPI(LoadableMod<?> loadableMod) | |
263 | + { | |
264 | + for (String requiredAPI : loadableMod.getRequiredAPIs()) | |
265 | + { | |
266 | + if (!GuiModListEntry.BUILT_IN_APIS.contains(requiredAPI)) | |
267 | + return true; | |
268 | + } | |
269 | + | |
270 | + return false; | |
271 | + } | |
272 | + | |
188 | 273 | /** |
189 | 274 | * Draw this list entry as a list item |
190 | 275 | * |
... | ... | @@ -199,72 +284,52 @@ public class GuiModListEntry extends Gui |
199 | 284 | */ |
200 | 285 | public int drawListEntry(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, boolean selected) |
201 | 286 | { |
202 | - int colour1 = selected ? (this.external ? 0xB047d1aa : 0xB04785D1) : 0xB0000000; | |
203 | - drawGradientRect(xPosition, yPosition, xPosition + width, yPosition + PANEL_HEIGHT, colour1, 0xB0333333); | |
204 | - | |
205 | - this.fontRenderer.drawString(this.name, xPosition + 5, yPosition + 2, this.isMissingDependencies ? 0xFFFFAA00 : (this.enabled ? (this.external ? 0xFF47d1aa : 0xFFFFFFFF) : 0xFF999999)); | |
206 | - this.fontRenderer.drawString(I18n.format("gui.about.versiontext", this.version), xPosition + 5, yPosition + 12, 0xFF999999); | |
287 | + int gradientColour = this.getGradientColour(selected); | |
288 | + int titleColour = this.getTitleColour(selected); | |
289 | + int statusColour = this.getStatusColour(selected); | |
207 | 290 | |
208 | - String status = this.external ? I18n.format("gui.status.loaded") : I18n.format("gui.status.active"); | |
291 | + this.drawGradientRect(xPosition, yPosition, xPosition + width, yPosition + GuiModListEntry.PANEL_HEIGHT, gradientColour, GuiModListEntry.GRADIENT_COLOUR2); | |
209 | 292 | |
210 | - if (this.isMissingDependencies) | |
211 | - { | |
212 | - status = "\247e" + I18n.format("gui.status.missingdeps"); | |
213 | - if (this.canBeToggled && !this.willBeEnabled) status = "\247c" + I18n.format("gui.status.pending.disabled"); | |
214 | - } | |
215 | - else if (this.canBeToggled) | |
216 | - { | |
217 | - if (!this.enabled && !this.willBeEnabled) status = "\2477" + I18n.format("gui.status.disabled"); | |
218 | - if (!this.enabled && this.willBeEnabled) status = "\247a" + I18n.format("gui.status.pending.enabled"); | |
219 | - if ( this.enabled && !this.willBeEnabled) status = "\247c" + I18n.format("gui.status.pending.disabled"); | |
220 | - } | |
221 | - | |
222 | - this.fontRenderer.drawString(status, xPosition + 5, yPosition + 22, this.external ? 0xB047d1aa : 0xFF4785D1); | |
293 | + this.fontRenderer.drawString(this.getTitleText(), xPosition + 5, yPosition + 2, titleColour); | |
294 | + this.fontRenderer.drawString(this.getVersionText(), xPosition + 5, yPosition + 12, GuiModListEntry.VERSION_TEXT_COLOUR); | |
295 | + this.fontRenderer.drawString(this.getStatusText(), xPosition + 5, yPosition + 22, statusColour); | |
223 | 296 | |
224 | 297 | this.mouseOverListEntry = this.isMouseOver(mouseX, mouseY, xPosition, yPosition, width, PANEL_HEIGHT); |
225 | - drawRect(xPosition, yPosition, xPosition + 1, yPosition + PANEL_HEIGHT, this.mouseOverListEntry ? 0xFFFFFFFF : 0xFF999999); | |
298 | + drawRect(xPosition, yPosition, xPosition + 1, yPosition + PANEL_HEIGHT, this.mouseOverListEntry ? GuiModListEntry.HANGER_COLOUR_MOUSEOVER : GuiModListEntry.HANGER_COLOUR); | |
226 | 299 | |
227 | - return PANEL_HEIGHT + PANEL_SPACING; | |
300 | + return GuiModListEntry.PANEL_HEIGHT + GuiModListEntry.PANEL_SPACING; | |
228 | 301 | } |
229 | 302 | |
230 | 303 | public int postRenderListEntry(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, boolean selected) |
231 | 304 | { |
232 | - int iconX = xPosition + width - 14; | |
233 | - if (this.providesTweak) iconX = this.drawPropertyIcon(iconX, yPosition + PANEL_HEIGHT - 14, mouseX, mouseY, 158, 80, I18n.format("gui.mod.providestweak")); | |
234 | - if (this.providesTransformer) iconX = this.drawPropertyIcon(iconX, yPosition + PANEL_HEIGHT - 14, mouseX, mouseY, 170, 80, I18n.format("gui.mod.providestransformer")); | |
305 | + xPosition += (width - 14); | |
306 | + yPosition += (GuiModListEntry.PANEL_HEIGHT - 14); | |
235 | 307 | |
236 | - return PANEL_HEIGHT + PANEL_SPACING; | |
308 | + for (IconAbsolute icon : this.modIcons) | |
309 | + { | |
310 | + xPosition = this.drawPropertyIcon(xPosition, yPosition, icon, mouseX, mouseY); | |
311 | + } | |
312 | + | |
313 | + return GuiModListEntry.PANEL_HEIGHT + GuiModListEntry.PANEL_SPACING; | |
237 | 314 | } |
238 | 315 | |
239 | - /** | |
240 | - * @param iconX | |
241 | - * @param yPosition | |
242 | - * @param mouseX | |
243 | - * @param mouseY | |
244 | - * @param u | |
245 | - * @param v | |
246 | - * @param tooltip | |
247 | - * @return | |
248 | - */ | |
249 | - protected int drawPropertyIcon(int iconX, int yPosition, int mouseX, int mouseY, int u, int v, String tooltipText) | |
316 | + protected int drawPropertyIcon(int xPosition, int yPosition, IconAbsolute icon, int mouseX, int mouseY) | |
250 | 317 | { |
251 | 318 | glColor4f(1.0F, 1.0F, 1.0F, 1.0F); |
252 | - Minecraft.getMinecraft().getTextureManager().bindTexture(GuiScreenModInfo.aboutTextureResource); | |
253 | - this.drawTexturedModalRect(iconX, yPosition, u, v, 12, 12); | |
319 | + Minecraft.getMinecraft().getTextureManager().bindTexture(icon.getTextureResource()); | |
320 | + | |
321 | + glEnable(GL_BLEND); | |
322 | + this.drawTexturedModalRect(xPosition, yPosition, icon.getUPos(), icon.getVPos(), icon.getIconWidth(), icon.getIconHeight()); | |
323 | + glDisable(GL_BLEND); | |
254 | 324 | |
255 | - if (mouseX >= iconX && mouseX <= iconX + 12 && mouseY >= yPosition && mouseY <= yPosition + 12) | |
325 | + if (mouseX >= xPosition && mouseX <= xPosition + 12 && mouseY >= yPosition && mouseY <= yPosition + 12) | |
256 | 326 | { |
257 | - GuiScreenModInfo.drawTooltip(this.fontRenderer, tooltipText, mouseX, mouseY, 4096, 4096, 0xFFFFFFFF, 0x80000000); | |
327 | + GuiLiteLoaderPanel.drawTooltip(this.fontRenderer, icon.getIconName(), mouseX, mouseY, 4096, 4096, GuiModListEntry.WHITE, GuiModListEntry.BLEND_HALF & GuiModListEntry.BLACK); | |
258 | 328 | } |
259 | 329 | |
260 | - return iconX - 14; | |
261 | - } | |
262 | - | |
263 | - public int getHeight() | |
264 | - { | |
265 | - return PANEL_HEIGHT + PANEL_SPACING; | |
330 | + return xPosition - 14; | |
266 | 331 | } |
267 | - | |
332 | + | |
268 | 333 | /** |
269 | 334 | * Draw this entry as the info page |
270 | 335 | * |
... | ... | @@ -275,37 +340,120 @@ public class GuiModListEntry extends Gui |
275 | 340 | * @param yPosition |
276 | 341 | * @param width |
277 | 342 | */ |
278 | - public void drawInfo(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, int height) | |
343 | + public void drawInfo(final int mouseX, final int mouseY, final float partialTicks, final int xPosition, final int yPosition, final int width, final int height) | |
279 | 344 | { |
280 | 345 | int bottom = height + yPosition; |
281 | - yPosition += 2; | |
346 | + int yPos = yPosition + 2; | |
282 | 347 | |
283 | - this.mouseOverInfo = this.isMouseOver(mouseX, mouseY, xPosition, yPosition, width, height); | |
348 | + this.mouseOverInfo = this.isMouseOver(mouseX, mouseY, xPosition, yPos, width, height); | |
284 | 349 | |
285 | - this.fontRenderer.drawString(this.name, xPosition + 5, yPosition, 0xFFFFFFFF); yPosition += 10; | |
286 | - this.fontRenderer.drawString(I18n.format("gui.about.versiontext", this.version), xPosition + 5, yPosition, 0xFF999999); yPosition += 10; | |
350 | + this.fontRenderer.drawString(this.getTitleText(), xPosition + 5, yPos, GuiModListEntry.TITLE_COLOUR); yPos += 10; | |
351 | + this.fontRenderer.drawString(this.getVersionText(), xPosition + 5, yPos, GuiModListEntry.VERSION_TEXT_COLOUR); yPos += 10; | |
287 | 352 | |
288 | - drawRect(xPosition + 5, yPosition, xPosition + width, yPosition + 1, 0xFF999999); yPosition += 4; | |
353 | + drawRect(xPosition + 5, yPos, xPosition + width, yPos + 1, GuiModListEntry.DIVIDER_COLOUR); yPos += 4; // divider | |
289 | 354 | |
290 | - this.fontRenderer.drawString(I18n.format("gui.about.authors") + ": \2477" + this.author, xPosition + 5, yPosition, 0xFFFFFFFF); yPosition += 10; | |
355 | + this.fontRenderer.drawString(I18n.format("gui.about.authors") + ": \2477" + this.author, xPosition + 5, yPos, GuiModListEntry.AUTHORS_COLOUR); yPos += 10; | |
291 | 356 | if (this.url != null) |
292 | 357 | { |
293 | - this.fontRenderer.drawString(this.url, xPosition + 5, yPosition, 0xB04785D1); yPosition += 10; | |
358 | + this.fontRenderer.drawString(this.url, xPosition + 5, yPos, GuiModListEntry.BLEND_2THRDS & this.brandColour); yPos += 10; | |
294 | 359 | } |
295 | 360 | |
296 | - drawRect(xPosition + 5, yPosition, xPosition + width, yPosition + 1, 0xFF999999); yPosition += 4; | |
297 | - drawRect(xPosition + 5, bottom - 1, xPosition + width, bottom, 0xFF999999); | |
361 | + drawRect(xPosition + 5, yPos, xPosition + width, yPos + 1, GuiModListEntry.DIVIDER_COLOUR); yPos += 4; // divider | |
362 | + drawRect(xPosition + 5, bottom - 1, xPosition + width, bottom, GuiModListEntry.DIVIDER_COLOUR); // divider | |
298 | 363 | |
299 | - int scrollHeight = bottom - yPosition - 3; | |
364 | + int scrollHeight = bottom - yPos - 3; | |
300 | 365 | int totalHeight = this.fontRenderer.splitStringWidth(this.description, width - 11); |
301 | 366 | |
302 | 367 | this.scrollBar.setMaxValue(totalHeight - scrollHeight); |
303 | - this.scrollBar.drawScrollBar(mouseX, mouseY, partialTicks, xPosition + width - 5, yPosition, 5, scrollHeight, totalHeight); | |
368 | + this.scrollBar.drawScrollBar(mouseX, mouseY, partialTicks, xPosition + width - 5, yPos, 5, scrollHeight, totalHeight); | |
304 | 369 | |
305 | - this.mouseOverScrollBar = this.isMouseOver(mouseX, mouseY, xPosition + width - 5, yPosition, 5, scrollHeight); | |
370 | + this.mouseOverScrollBar = this.isMouseOver(mouseX, mouseY, xPosition + width - 5, yPos, 5, scrollHeight); | |
371 | + | |
372 | + GuiLiteLoaderPanel.glEnableClipping(-1, -1, yPos, bottom - 3); | |
373 | + this.fontRenderer.drawSplitString(this.description, xPosition + 5, yPos - this.scrollBar.getValue(), width - 11, GuiModListEntry.DESCRIPTION_COLOUR); | |
374 | + } | |
306 | 375 | |
307 | - GuiScreenModInfo.glEnableClipping(-1, -1, yPosition, bottom - 3); | |
308 | - this.fontRenderer.drawSplitString(this.description, xPosition + 5, yPosition - this.scrollBar.getValue(), width - 11, 0xFFFFFFFF); | |
376 | + /** | |
377 | + * @return | |
378 | + */ | |
379 | + protected String getTitleText() | |
380 | + { | |
381 | + return this.name; | |
382 | + } | |
383 | + | |
384 | + /** | |
385 | + * @return | |
386 | + */ | |
387 | + protected String getVersionText() | |
388 | + { | |
389 | + return I18n.format("gui.about.versiontext", this.version); | |
390 | + } | |
391 | + | |
392 | + /** | |
393 | + * @return | |
394 | + */ | |
395 | + protected String getStatusText() | |
396 | + { | |
397 | + String statusText = this.external ? I18n.format("gui.status.loaded") : I18n.format("gui.status.active"); | |
398 | + | |
399 | + if (this.isMissingAPIs) | |
400 | + { | |
401 | + statusText = "\2475" + I18n.format("gui.status.missingapis"); | |
402 | + if (this.canBeToggled && !this.willBeEnabled) statusText = "\247c" + I18n.format("gui.status.pending.disabled"); | |
403 | + } | |
404 | + else if (this.isMissingDependencies) | |
405 | + { | |
406 | + statusText = "\247e" + I18n.format("gui.status.missingdeps"); | |
407 | + if (this.canBeToggled && !this.willBeEnabled) statusText = "\247c" + I18n.format("gui.status.pending.disabled"); | |
408 | + } | |
409 | + else if (this.canBeToggled) | |
410 | + { | |
411 | + if (!this.enabled && !this.willBeEnabled) statusText = "\2477" + I18n.format("gui.status.disabled"); | |
412 | + if (!this.enabled && this.willBeEnabled) statusText = "\247a" + I18n.format("gui.status.pending.enabled"); | |
413 | + if ( this.enabled && !this.willBeEnabled) statusText = "\247c" + I18n.format("gui.status.pending.disabled"); | |
414 | + } | |
415 | + | |
416 | + return statusText; | |
417 | + } | |
418 | + | |
419 | + /** | |
420 | + * @param external | |
421 | + * @param selected | |
422 | + * @return | |
423 | + */ | |
424 | + protected int getGradientColour(boolean selected) | |
425 | + { | |
426 | + return GuiModListEntry.BLEND_2THRDS & (selected ? (this.external ? GuiModListEntry.EXTERNAL_ENTRY_COLOUR : this.brandColour) : GuiModListEntry.BLACK); | |
427 | + } | |
428 | + | |
429 | + /** | |
430 | + * @param missingDependencies | |
431 | + * @param enabled | |
432 | + * @param external | |
433 | + * @param selected | |
434 | + * @return | |
435 | + */ | |
436 | + protected int getTitleColour(boolean selected) | |
437 | + { | |
438 | + if (this.isMissingDependencies) return GuiModListEntry.MISSING_DEPENDENCY_COLOUR; | |
439 | + if (this.isMissingAPIs) return GuiModListEntry.API_COLOUR; | |
440 | + if (!this.enabled) return GuiModListEntry.GREY; | |
441 | + return this.external ? GuiModListEntry.EXTERNAL_ENTRY_COLOUR : GuiModListEntry.WHITE; | |
442 | + } | |
443 | + | |
444 | + /** | |
445 | + * @param external | |
446 | + * @param selected | |
447 | + * @return | |
448 | + */ | |
449 | + protected int getStatusColour(boolean selected) | |
450 | + { | |
451 | + return this.external ? GuiModListEntry.EXTERNAL_ENTRY_COLOUR : this.brandColour; | |
452 | + } | |
453 | + | |
454 | + public int getHeight() | |
455 | + { | |
456 | + return GuiModListEntry.PANEL_HEIGHT + GuiModListEntry.PANEL_SPACING; | |
309 | 457 | } |
310 | 458 | |
311 | 459 | /** |
... | ... | @@ -343,7 +491,7 @@ public class GuiModListEntry extends Gui |
343 | 491 | if (this.canBeToggled) |
344 | 492 | { |
345 | 493 | this.willBeEnabled = !this.willBeEnabled; |
346 | - LiteLoader.getInstance().setModEnabled(this.identifier, this.willBeEnabled); | |
494 | + this.mods.setModEnabled(this.identifier, this.willBeEnabled); | |
347 | 495 | } |
348 | 496 | } |
349 | 497 | |
... | ... | @@ -364,7 +512,7 @@ public class GuiModListEntry extends Gui |
364 | 512 | |
365 | 513 | public String getName() |
366 | 514 | { |
367 | - return this.name; | |
515 | + return getTitleText(); | |
368 | 516 | } |
369 | 517 | |
370 | 518 | public String getVersion() |
... | ... | @@ -397,7 +545,7 @@ public class GuiModListEntry extends Gui |
397 | 545 | return this.willBeEnabled; |
398 | 546 | } |
399 | 547 | |
400 | - public boolean mouseWasOverListEntry() | |
548 | + public boolean isMouseOver() | |
401 | 549 | { |
402 | 550 | return this.mouseOverListEntry; |
403 | 551 | } |
... | ... | @@ -406,7 +554,7 @@ public class GuiModListEntry extends Gui |
406 | 554 | { |
407 | 555 | if (this.mouseOverInfo) |
408 | 556 | { |
409 | - this.scrollBar.offsetValue(-mouseWheelDelta); | |
557 | + this.scrollBar.offsetValue(-mouseWheelDelta / 8); | |
410 | 558 | return true; |
411 | 559 | } |
412 | 560 | ... | ... |
java/com/mumfrey/liteloader/gui/ModInfoScreenPanel.java renamed to java/client/com/mumfrey/liteloader/client/gui/GuiPanel.java
1 | -package com.mumfrey.liteloader.gui; | |
1 | +package com.mumfrey.liteloader.client.gui; | |
2 | 2 | |
3 | 3 | import static org.lwjgl.opengl.GL11.*; |
4 | 4 | |
5 | 5 | import java.util.LinkedList; |
6 | 6 | import java.util.List; |
7 | 7 | |
8 | +import com.mumfrey.liteloader.client.api.LiteLoaderBrandingProvider; | |
9 | + | |
8 | 10 | import net.minecraft.client.Minecraft; |
9 | 11 | import net.minecraft.client.gui.Gui; |
10 | 12 | import net.minecraft.client.gui.GuiButton; |
11 | 13 | |
12 | 14 | /** |
13 | - * Base class for panels which can be displayed on the mod info screen | |
15 | + * Base class for panels | |
14 | 16 | * |
15 | 17 | * @author Adam Mummery-Smith |
16 | 18 | */ |
17 | -public abstract class ModInfoScreenPanel extends Gui | |
19 | +public abstract class GuiPanel extends Gui | |
18 | 20 | { |
19 | 21 | protected static final int TOP = 26; |
20 | 22 | protected static final int BOTTOM = 40; |
... | ... | @@ -63,11 +65,16 @@ public abstract class ModInfoScreenPanel extends Gui |
63 | 65 | /** |
64 | 66 | * @param minecraft |
65 | 67 | */ |
66 | - public ModInfoScreenPanel(Minecraft minecraft) | |
68 | + public GuiPanel(Minecraft minecraft) | |
67 | 69 | { |
68 | 70 | this.mc = minecraft; |
69 | 71 | } |
70 | 72 | |
73 | + boolean stealFocus() | |
74 | + { | |
75 | + return true; | |
76 | + } | |
77 | + | |
71 | 78 | /** |
72 | 79 | * Called by the containing screen to set the panel size |
73 | 80 | * |
... | ... | @@ -125,7 +132,7 @@ public abstract class ModInfoScreenPanel extends Gui |
125 | 132 | { |
126 | 133 | if (control.mousePressed(this.mc, mouseX, mouseY)) |
127 | 134 | { |
128 | - control.func_146113_a(this.mc.getSoundHandler()); | |
135 | + control.playPressSound(this.mc.getSoundHandler()); | |
129 | 136 | this.actionPerformed(control); |
130 | 137 | } |
131 | 138 | } |
... | ... | @@ -195,9 +202,20 @@ public abstract class ModInfoScreenPanel extends Gui |
195 | 202 | { |
196 | 203 | glEnable(GL_BLEND); |
197 | 204 | glAlphaFunc(GL_GREATER, 0.0F); |
198 | - this.mc.getTextureManager().bindTexture(GuiScreenModInfo.aboutTextureResource); | |
205 | + this.mc.getTextureManager().bindTexture(LiteLoaderBrandingProvider.ABOUT_TEXTURE); | |
199 | 206 | drawTexturedModalRect(x, y, (frame % 4) * 16, 171 + (((frame / 4) % 3) * 16), 16, 16); |
200 | 207 | glAlphaFunc(GL_GREATER, 0.1F); |
201 | 208 | glDisable(GL_BLEND); |
202 | 209 | } |
210 | + | |
211 | + | |
212 | + protected static final void glEnableClipping(int xLeft, int xRight, int yTop, int yBottom) | |
213 | + { | |
214 | + GuiLiteLoaderPanel.glEnableClipping(xLeft, xRight, yTop, yBottom); | |
215 | + } | |
216 | + | |
217 | + protected static final void glDisableClipping() | |
218 | + { | |
219 | + GuiLiteLoaderPanel.glDisableClipping(); | |
220 | + } | |
203 | 221 | } |
204 | 222 | \ No newline at end of file | ... | ... |
java/client/com/mumfrey/liteloader/client/gui/GuiPanelAbout.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client.gui; | |
2 | + | |
3 | +import java.net.URI; | |
4 | +import java.util.ArrayList; | |
5 | +import java.util.List; | |
6 | +import java.util.Set; | |
7 | +import java.util.TreeSet; | |
8 | + | |
9 | +import net.minecraft.client.Minecraft; | |
10 | +import net.minecraft.client.gui.FontRenderer; | |
11 | +import net.minecraft.client.gui.GuiButton; | |
12 | +import net.minecraft.client.resources.I18n; | |
13 | +import net.minecraft.util.IIcon; | |
14 | +import net.minecraft.util.ResourceLocation; | |
15 | + | |
16 | +import org.lwjgl.input.Keyboard; | |
17 | + | |
18 | +import com.mumfrey.liteloader.api.BrandingProvider; | |
19 | +import com.mumfrey.liteloader.api.LiteAPI; | |
20 | +import com.mumfrey.liteloader.client.api.LiteLoaderBrandingProvider; | |
21 | +import com.mumfrey.liteloader.client.util.render.IconAbsolute; | |
22 | +import com.mumfrey.liteloader.core.LiteLoader; | |
23 | +import com.mumfrey.liteloader.util.SortableValue; | |
24 | + | |
25 | +/** | |
26 | + * "About LiteLoader" panel which docks in the mod info screen and lists information about the installed APIs | |
27 | + * | |
28 | + * @author Adam Mummery-Smith | |
29 | + */ | |
30 | +class GuiPanelAbout extends GuiPanel implements ScrollPanelContent | |
31 | +{ | |
32 | + public static final IconAbsolute apiIconCoords = new IconAbsolute(LiteLoaderBrandingProvider.ABOUT_TEXTURE, "api_icon", 32, 32, 192, 144, 256, 208); | |
33 | + | |
34 | + private static final int ROW_HEIGHT = 40; | |
35 | + | |
36 | + private static final URI MCP_URI = URI.create("http://mcp.ocean-labs.de/"); | |
37 | + | |
38 | + private GuiLiteLoaderPanel parent; | |
39 | + | |
40 | + private GuiScrollPanel scrollPane; | |
41 | + | |
42 | + private List<BrandingProvider> brandings = new ArrayList<BrandingProvider>(); | |
43 | + | |
44 | + private boolean mouseOverLogo; | |
45 | + | |
46 | + public GuiPanelAbout(Minecraft minecraft, GuiLiteLoaderPanel parent) | |
47 | + { | |
48 | + super(minecraft); | |
49 | + this.parent = parent; | |
50 | + this.scrollPane = new GuiScrollPanel(minecraft, this, MARGIN, 90, 100, 100); | |
51 | + | |
52 | + this.sortBrandingProviders(); | |
53 | + | |
54 | + this.scrollPane.addControl(new GuiHoverLabel(-2, 38, 22 + this.brandings.size() * GuiPanelAbout.ROW_HEIGHT, this.mc.fontRendererObj, "\247n" + MCP_URI.toString(), this.parent.getBrandColour())); | |
55 | + } | |
56 | + | |
57 | + /** | |
58 | + * | |
59 | + */ | |
60 | + private void sortBrandingProviders() | |
61 | + { | |
62 | + Set<SortableValue<BrandingProvider>> sortedBrandingProviders = new TreeSet<SortableValue<BrandingProvider>>(); | |
63 | + | |
64 | + for (LiteAPI api : LiteLoader.getAPIs()) | |
65 | + { | |
66 | + BrandingProvider brandingProvider = LiteLoader.getCustomisationProvider(api, BrandingProvider.class); | |
67 | + if (brandingProvider != null) | |
68 | + { | |
69 | + sortedBrandingProviders.add(new SortableValue<BrandingProvider>(Integer.MAX_VALUE - brandingProvider.getPriority(), 0, brandingProvider)); | |
70 | + } | |
71 | + } | |
72 | + | |
73 | + int brandingIndex = 0; | |
74 | + | |
75 | + for (SortableValue<BrandingProvider> sortedBrandingProvider : sortedBrandingProviders) | |
76 | + { | |
77 | + BrandingProvider brandingProvider = sortedBrandingProvider.getValue(); | |
78 | + | |
79 | + this.brandings.add(brandingProvider); | |
80 | + URI homepage = brandingProvider.getHomepage(); | |
81 | + if (homepage != null) | |
82 | + { | |
83 | + this.scrollPane.addControl(new GuiHoverLabel(brandingIndex, 38, 22 + brandingIndex * GuiPanelAbout.ROW_HEIGHT, this.mc.fontRendererObj, "\247n" + homepage, this.parent.getBrandColour())); | |
84 | + } | |
85 | + | |
86 | + brandingIndex++; | |
87 | + } | |
88 | + } | |
89 | + | |
90 | + @Override | |
91 | + void setSize(int width, int height) | |
92 | + { | |
93 | + super.setSize(width, height); | |
94 | + | |
95 | + this.scrollPane.setSizeAndPosition(MARGIN, 86, this.width - MARGIN * 2, this.height - 126); | |
96 | + this.controls.add(new GuiButton(-1, this.width - 99 - MARGIN, this.height - BOTTOM + 9, 100, 20, I18n.format("gui.done"))); | |
97 | + this.controls.add(new GuiButton(-3, MARGIN, this.height - BOTTOM + 9, 100, 20, I18n.format("gui.log.button"))); | |
98 | + } | |
99 | + | |
100 | + @Override | |
101 | + void draw(int mouseX, int mouseY, float partialTicks) | |
102 | + { | |
103 | + this.mouseOverLogo = this.parent.drawInfoPanel(mouseX, mouseY, partialTicks, 0, 38); | |
104 | + | |
105 | + this.scrollPane.draw(mouseX, mouseY, partialTicks); | |
106 | + | |
107 | + super.draw(mouseX, mouseY, partialTicks); | |
108 | + } | |
109 | + | |
110 | + @Override | |
111 | + public int getScrollPanelContentHeight(GuiScrollPanel source) | |
112 | + { | |
113 | + return 64 + this.brandings.size() * GuiPanelAbout.ROW_HEIGHT; | |
114 | + } | |
115 | + | |
116 | + @Override | |
117 | + public void drawScrollPanelContent(GuiScrollPanel source, int mouseX, int mouseY, float partialTicks, int scrollAmount, int visibleHeight) | |
118 | + { | |
119 | + FontRenderer fontRenderer = this.mc.fontRendererObj; | |
120 | + int textColour = 0xFFAAAAAA; | |
121 | + | |
122 | + int yPos = 0; | |
123 | + | |
124 | + for (BrandingProvider branding : this.brandings) | |
125 | + { | |
126 | + ResourceLocation twitterAvatarResource = branding.getTwitterAvatarResource(); | |
127 | + IIcon twitterAvatarCoords = branding.getTwitterAvatarCoords(); | |
128 | + | |
129 | + this.mc.getTextureManager().bindTexture(twitterAvatarResource != null ? twitterAvatarResource : LiteLoaderBrandingProvider.ABOUT_TEXTURE); | |
130 | + GuiLiteLoaderPanel.glDrawTexturedRect(0, yPos, twitterAvatarCoords != null ? twitterAvatarCoords : GuiPanelAbout.apiIconCoords, 1.0F); | |
131 | + | |
132 | + fontRenderer.drawString(branding.getDisplayName(), 38, yPos, 0xFFFFFFFF); | |
133 | + fontRenderer.drawString(branding.getCopyrightText(), 38, yPos + 11, textColour); | |
134 | + | |
135 | + yPos += GuiPanelAbout.ROW_HEIGHT; | |
136 | + } | |
137 | + | |
138 | + fontRenderer.drawString("Created using Mod Coder Pack", 38, yPos, 0xFFFFFFFF); | |
139 | + fontRenderer.drawString("MCP is (c) Copyright by the MCP Team", 38, yPos + 11, textColour); | |
140 | + | |
141 | + yPos += GuiPanelAbout.ROW_HEIGHT; | |
142 | + | |
143 | + fontRenderer.drawString("Minecraft is Copyright (c) Mojang AB", 38, yPos, textColour); | |
144 | + fontRenderer.drawString("All rights reserved.", 38, yPos + 11, textColour); | |
145 | + } | |
146 | + | |
147 | + @Override | |
148 | + public void scrollPanelMousePressed(GuiScrollPanel source, int mouseX, int mouseY, int mouseButton) | |
149 | + { | |
150 | + int index = mouseY / GuiPanelAbout.ROW_HEIGHT; | |
151 | + int yOffset = mouseY - (GuiPanelAbout.ROW_HEIGHT * index); | |
152 | + | |
153 | + if (mouseButton == 0 && mouseX < 33 && index >= 0 && index < this.brandings.size() && yOffset < 33) | |
154 | + { | |
155 | + String twitterUserName = this.brandings.get(index).getTwitterUserName(); | |
156 | + if (twitterUserName != null) | |
157 | + { | |
158 | + URI twitterURI = URI.create("https://www.twitter.com/" + twitterUserName); | |
159 | + System.out.println(twitterURI); | |
160 | + this.openURI(twitterURI); | |
161 | + } | |
162 | + } | |
163 | + } | |
164 | + | |
165 | + /** | |
166 | + * @param control | |
167 | + */ | |
168 | + @Override | |
169 | + void actionPerformed(GuiButton control) | |
170 | + { | |
171 | + if (control.id == -1) this.close(); | |
172 | + if (control.id == -2) this.openURI(MCP_URI); | |
173 | + if (control.id == -3) this.parent.showLogPanel(); | |
174 | + } | |
175 | + | |
176 | + @Override | |
177 | + public void scrollPanelActionPerformed(GuiScrollPanel source, GuiButton control) | |
178 | + { | |
179 | + if (control.id >= 0 && control.id < this.brandings.size()) | |
180 | + { | |
181 | + URI homepage = this.brandings.get(control.id).getHomepage(); | |
182 | + if (homepage != null) this.openURI(homepage); | |
183 | + } | |
184 | + } | |
185 | + | |
186 | + private void openURI(URI uri) | |
187 | + { | |
188 | + try | |
189 | + { | |
190 | + Class<?> desktop = Class.forName("java.awt.Desktop"); | |
191 | + Object instance = desktop.getMethod("getDesktop").invoke(null); | |
192 | + desktop.getMethod("browse", URI.class).invoke(instance, uri); | |
193 | + } | |
194 | + catch (Throwable th) {} | |
195 | + } | |
196 | + | |
197 | + @Override | |
198 | + void onTick() | |
199 | + { | |
200 | + } | |
201 | + | |
202 | + @Override | |
203 | + void onHidden() | |
204 | + { | |
205 | + } | |
206 | + | |
207 | + @Override | |
208 | + void onShown() | |
209 | + { | |
210 | + } | |
211 | + | |
212 | + @Override | |
213 | + void keyPressed(char keyChar, int keyCode) | |
214 | + { | |
215 | + if (keyCode == Keyboard.KEY_ESCAPE) this.close(); | |
216 | + } | |
217 | + | |
218 | + @Override | |
219 | + void mousePressed(int mouseX, int mouseY, int mouseButton) | |
220 | + { | |
221 | + this.scrollPane.mousePressed(mouseX, mouseY, mouseButton); | |
222 | + | |
223 | + if (mouseButton == 0 && this.mouseOverLogo) | |
224 | + { | |
225 | + this.close(); | |
226 | + } | |
227 | + | |
228 | + super.mousePressed(mouseX, mouseY, mouseButton); | |
229 | + } | |
230 | + | |
231 | + @Override | |
232 | + void mouseMoved(int mouseX, int mouseY) | |
233 | + { | |
234 | + } | |
235 | + | |
236 | + @Override | |
237 | + void mouseReleased(int mouseX, int mouseY, int mouseButton) | |
238 | + { | |
239 | + this.scrollPane.mouseReleased(mouseX, mouseY, mouseButton); | |
240 | + } | |
241 | + | |
242 | + @Override | |
243 | + void mouseWheelScrolled(int mouseWheelDelta) | |
244 | + { | |
245 | + this.scrollPane.mouseWheelScrolled(mouseWheelDelta); | |
246 | + } | |
247 | +} | ... | ... |
java/com/mumfrey/liteloader/gui/GuiConfigPanelContainer.java renamed to java/client/com/mumfrey/liteloader/client/gui/GuiPanelConfigContainer.java
1 | -package com.mumfrey.liteloader.gui; | |
1 | +package com.mumfrey.liteloader.client.gui; | |
2 | 2 | |
3 | -import static com.mumfrey.liteloader.gui.GuiScreenModInfo.*; | |
4 | 3 | import static org.lwjgl.opengl.GL11.*; |
5 | - | |
6 | - | |
7 | 4 | import net.minecraft.client.Minecraft; |
8 | 5 | import net.minecraft.client.gui.GuiButton; |
9 | 6 | import net.minecraft.client.resources.I18n; |
... | ... | @@ -18,7 +15,7 @@ import com.mumfrey.liteloader.modconfig.ConfigPanelHost; |
18 | 15 | * |
19 | 16 | * @author Adam Mummery-Smith |
20 | 17 | */ |
21 | -public class GuiConfigPanelContainer extends ModInfoScreenPanel implements ConfigPanelHost | |
18 | +class GuiPanelConfigContainer extends GuiPanel implements ConfigPanelHost | |
22 | 19 | { |
23 | 20 | /** |
24 | 21 | * Panel we are hosting |
... | ... | @@ -46,7 +43,7 @@ public class GuiConfigPanelContainer extends ModInfoScreenPanel implements Confi |
46 | 43 | * @param panel |
47 | 44 | * @param mod |
48 | 45 | */ |
49 | - GuiConfigPanelContainer(Minecraft minecraft, ConfigPanel panel, LiteMod mod) | |
46 | + GuiPanelConfigContainer(Minecraft minecraft, ConfigPanel panel, LiteMod mod) | |
50 | 47 | { |
51 | 48 | super(minecraft); |
52 | 49 | |
... | ... | @@ -147,7 +144,7 @@ public class GuiConfigPanelContainer extends ModInfoScreenPanel implements Confi |
147 | 144 | this.innerTop = TOP - this.scrollBar.getValue(); |
148 | 145 | |
149 | 146 | // Draw panel title |
150 | - this.mc.fontRenderer.drawString(this.getPanelTitle(), MARGIN, TOP - 14, 0xFFFFFFFF); | |
147 | + this.mc.fontRendererObj.drawString(this.getPanelTitle(), MARGIN, TOP - 14, 0xFFFFFFFF); | |
151 | 148 | |
152 | 149 | // Draw top and bottom horizontal bars |
153 | 150 | drawRect(MARGIN, TOP - 4, this.width - MARGIN, TOP - 3, 0xFF999999); | ... | ... |