Commit 11a9a320c246bc607c46b0770c8d65b7d47cf248

Authored by Mumfrey
2 parents 3fa37726 9296cbe2

Migrate project to git and gradle

Showing 53 changed files with 268 additions and 4371 deletions

Too many changes to show.

To preserve performance only 53 of 352 files are displayed.

.classpath deleted 100644 → 0
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<classpath>
3   - <classpathentry kind="src" path="debug"/>
4   - <classpathentry kind="src" path="resources"/>
5   - <classpathentry kind="src" path="java/common"/>
6   - <classpathentry kind="src" path="java/client"/>
7   - <classpathentry combineaccessrules="false" exported="true" kind="src" path="/Client"/>
8   - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
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/17.0/guava-17.0.jar"/>
11   - <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar"/>
12   - <classpathentry exported="true" kind="lib" path="lib/launchwrapper-1.11.jar" sourcepath="externals/launchwrapper/src"/>
13   - <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar"/>
14   - <classpathentry kind="lib" path="/Client/jars/libraries/net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar"/>
15   - <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/io/netty/netty-all/4.0.15.Final/netty-all-4.0.15.Final.jar"/>
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"/>
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"/>
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.17/authlib-1.5.17.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"/>
22   - <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.1/lwjgl_util-2.9.1.jar"/>
23   - <classpathentry exported="true" kind="lib" path="/Client/jars/libraries/com/mojang/realms/1.6.1/realms-1.6.1.jar"/>
24   - <classpathentry kind="output" path="bin"/>
25   -</classpath>
.gitignore 0 → 100644
  1 +# Build #
  2 +#########
  3 +MANIFEST.MF
  4 +dependency-reduced-pom.xml
  5 +.checkstyle
  6 +
  7 +# Compiled #
  8 +############
  9 +bin
  10 +build
  11 +dist
  12 +lib
  13 +out
  14 +run
  15 +target
  16 +*.com
  17 +*.class
  18 +*.dll
  19 +*.exe
  20 +*.o
  21 +*.so
  22 +*.launch
  23 +
  24 +# Databases #
  25 +#############
  26 +*.db
  27 +*.sql
  28 +*.sqlite
  29 +
  30 +# Packages #
  31 +############
  32 +*.7z
  33 +*.dmg
  34 +*.gz
  35 +*.iso
  36 +*.rar
  37 +*.tar
  38 +*.zip
  39 +
  40 +# Repository #
  41 +##############
  42 +.git
  43 +
  44 +# Logging #
  45 +###########
  46 +/logs
  47 +*.log
  48 +
  49 +# Misc #
  50 +########
  51 +*.bak
  52 +
  53 +# System #
  54 +##########
  55 +.DS_Store
  56 +ehthumbs.db
  57 +Thumbs.db
  58 +
  59 +# Project #
  60 +###########
  61 +.classpath
  62 +.externalToolBuilders
  63 +.gradle
  64 +.nb-gradle
  65 +.idea
  66 +.project
  67 +.settings
  68 +eclipse
  69 +nbproject
  70 +atlassian-ide-plugin.xml
  71 +build.xml
  72 +nb-configuration.xml
  73 +*.iml
  74 +*.ipr
  75 +*.iws
  76 +
... ...
.project deleted 100644 → 0
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<projectDescription>
3   - <name>LiteLoader</name>
4   - <comment></comment>
5   - <projects>
6   - </projects>
7   - <buildSpec>
8   - <buildCommand>
9   - <name>org.eclipse.jdt.core.javabuilder</name>
10   - <arguments>
11   - </arguments>
12   - </buildCommand>
13   - </buildSpec>
14   - <natures>
15   - <nature>org.eclipse.jdt.core.javanature</nature>
16   - </natures>
17   - <variableList>
18   - <variable>
19   - <name>MCP_LOC</name>
20   - <value>$%7BPARENT-2-PROJECT_LOC%7D</value>
21   - </variable>
22   - </variableList>
23   -</projectDescription>
.settings/org.eclipse.core.resources.prefs deleted 100644 → 0
1   -eclipse.preferences.version=1
2   -encoding//resources/assets/liteloader/lang/en_US.lang=UTF-8
3   -encoding//resources/assets/liteloader/lang/pt_BR.lang=UTF-8
.settings/org.eclipse.jdt.core.prefs deleted 100644 → 0
1   -#Fri Aug 17 17:54:35 BST 2012
2   -eclipse.preferences.version=1
3   -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
4   -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
5   -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
6   -org.eclipse.jdt.core.compiler.compliance=1.6
7   -org.eclipse.jdt.core.compiler.debug.lineNumber=generate
8   -org.eclipse.jdt.core.compiler.debug.localVariable=generate
9   -org.eclipse.jdt.core.compiler.debug.sourceFile=generate
10   -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
11   -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
12   -org.eclipse.jdt.core.compiler.source=1.6
.settings/org.eclipse.jdt.ui.prefs deleted 100644 → 0
1   -eclipse.preferences.version=1
2   -formatter_settings_version=11
LiteLoader.iml deleted 100644 → 0
1   -<?xml version="1.0" encoding="UTF-8"?>
2   -<module type="JAVA_MODULE" version="4">
3   - <component name="EclipseModuleManager">
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/17.0/guava-17.0.jar" />
6   - <libelement value="file:///Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar" />
7   - <libelement value="jar://$MODULE_DIR$/lib/launchwrapper-1.11.jar!/" />
8   - <libelement value="jar://$MODULE_DIR$/lib/asm-debug-all-5.0.3.jar!/" />
9   - <libelement value="file:///Client/jars/libraries/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar" />
10   - <libelement value="file:///Client/jars/libraries/net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar" />
11   - <libelement value="file:///Client/jars/libraries/io/netty/netty-all/4.0.15.Final/netty-all-4.0.15.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.17/authlib-1.5.17.jar" />
16   - <libelement value="file:///Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.1/lwjgl-2.9.1.jar" />
17   - <src_description expected_position="0">
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" />
22   - </src_description>
23   - </component>
24   - <component name="NewModuleRootManager" inherit-compiler-output="false">
25   - <output url="file://$MODULE_DIR$/bin" />
26   - <exclude-output />
27   - <content url="file://$MODULE_DIR$">
28   - <sourceFolder url="file://$MODULE_DIR$/debug" isTestSource="false" />
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" />
32   - </content>
33   - <orderEntry type="sourceFolder" forTests="false" />
34   - <orderEntry type="module" module-name="Client" exported="" />
35   - <orderEntry type="jdk" jdkName="JavaSE-1.6" jdkType="JavaSDK" />
36   - <orderEntry type="module-library" exported="">
37   - <library name="launchwrapper-1.11.jar">
38   - <CLASSES>
39   - <root url="jar://$MODULE_DIR$/lib/launchwrapper-1.11.jar!/" />
40   - </CLASSES>
41   - <JAVADOC />
42   - <SOURCES>
43   - <root url="file://$MODULE_DIR$/externals/launchwrapper/src" />
44   - </SOURCES>
45   - </library>
46   - </orderEntry>
47   - <orderEntry type="module-library" exported="">
48   - <library>
49   - <CLASSES>
50   - <root url="jar://$MODULE_DIR$/lib/asm-debug-all-5.0.3.jar!/" />
51   - </CLASSES>
52   - <JAVADOC />
53   - <SOURCES />
54   - </library>
55   - </orderEntry>
56   - </component>
57   -</module>
58   -
README.md deleted 100644 → 0
1   -LiteLoader
2   -----------
3   -
4   -Important Setup Note
5   ---------------------
6   -MCP 9.10 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   -The latest MCPTEST mappings can always be retrieved from [http://mcpbot.bspk.rs/testcsv/](http://mcpbot.bspk.rs/testcsv/)
10   -
11   -Getting the updated mappings
12   -----------------------------
13   -
14   -To get the updated mappings, perform these steps **before** decompiling minecraft for the first
15   -time. If you have already decompiled minecraft, run the MPC **cleanup** task first to remove the
16   -invalid sources, or simply delete the *temp* and *src* directories from your MCP installation.
17   -
18   -- Using a text editor, open **/mcp910/conf/mcp.cfg**
19   -- Locate the setting **UpdateUrl** and change the domain to *dl.liteloader.com* as shown
20   -
21   - UpdateUrl = http://dl.liteloader.com/files/mcprolling_{version}/
22   -
23   -- Save the file and run the **updatemcp** script, it should prompt you to download 3 files.
24   -- Type **yes** to accept the download.
25   -- Run **decompile** as normal.
26 0 \ No newline at end of file
ant/build_liteloader.xml deleted 100644 → 0
1   -<?xml version="1.0" encoding="UTF-8" ?>
2   -<project name="liteloader" basedir="." default="development">
3   -
4   - <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="tasks/ant-contrib.jar" />
5   -
6   - <!-- Versions !!IMPORTANT -->
7   - <property name="version" value="1.8.0_00" />
8   - <property name="mcversion" value="1.8" />
9   - <property name="author" value="Mumfrey" />
10   -
11   - <!-- Project definitions and dependencies -->
12   - <property name="upstream" value="" />
13   - <property name="project" value="LiteLoader" />
14   - <property name="displayname" value="LiteLoader" />
15   - <property name="md5set" value="mcp" />
16   - <property name="outmd5set" value="liteloader" />
17   - <property name="tweakclass" value="com.mumfrey.liteloader.launch.LiteLoaderTweaker" />
18   -
19   - <property name="mcp.dir" location="../../.." />
20   - <property name="build.dir" location="${mcp.dir}/build" />
21   - <property name="eclipse.dir" location="${mcp.dir}/eclipse" />
22   - <property name="temp.dir" location="${mcp.dir}/temp" />
23   - <property name="md5.dir" location="${mcp.dir}/md5" />
24   - <property name="libs.dir" location="${mcp.dir}/lib" />
25   - <property name="src.dir" location="${build.dir}/src"/>
26   - <property name="mc.src.dir" location="${mcp.dir}/src/minecraft" />
27   - <property name="mc.bin.dir" location="${mcp.dir}/bin/minecraft" />
28   - <property name="reobf.dir" location="${mcp.dir}/reobf/minecraft" />
29   - <property name="mc.libs.dir" location="${mcp.dir}/jars/libraries" />
30   -
31   - <property name="dist.dir" location="${build.dir}/dist" />
32   - <property name="filetype" value="jar" />
33   -
34   - <property name="python_windows" location="${mcp.dir}/runtime/bin/python/python_mcp.exe" />
35   - <property name="python_linux" location="/usr/bin/python" />
36   -
37   - <property environment="env" />
38   -
39   - <target name="setup_client">
40   - <property name="clientjar" value="true" />
41   - <property name="suffix" value="" />
42   - <property name="javadocpath" value="docs" />
43   - </target>
44   -
45   - <target name="setup_core">
46   - <property name="suffix" value="-core" />
47   - <property name="javadocpath" value="coredocs" />
48   - </target>
49   -
50   - <target name="setup_development">
51   - <property name="skipremoval" value="DEV" />
52   - <property name="md5.outfile" value="${md5.dir}/client_${outmd5set}.md5" />
53   - <property name="artefact.name" value="${ant.project.name}${suffix}-${mcversion}" />
54   - <property name="stage.dir" location="${build.dir}/stage/${ant.project.name}/${version}" />
55   - <property name="meta.version" value="${version}" />
56   - </target>
57   -
58   - <target name="setup_production">
59   - <property name="skipremoval" value="" />
60   - <property name="md5.outfile" value="${md5.dir}/client_${outmd5set}_production.md5" />
61   - <property name="artefact.name" value="${ant.project.name}${suffix}-${mcversion}" />
62   - <property name="stage.dir" location="${build.dir}/stage/${ant.project.name}/${version}" />
63   - <property name="meta.version" value="${version}" />
64   - </target>
65   -
66   - <target name="setup_jenkins">
67   - <property name="skipremoval" value="" />
68   - <property name="md5.outfile" value="${md5.dir}/client_${outmd5set}_production.md5" />
69   - <property name="artefact.name" value="${ant.project.name}${suffix}-${mcversion}-SNAPSHOT" />
70   - <property name="stage.dir" location="${build.dir}/stage" />
71   - <property name="brand" value="${mcversion}-SNAPSHOT-r${env.SVN_REVISION}-b${env.BUILD_NUMBER}-${env.BUILD_ID}" />
72   - <property name="meta.version" value="${version} [${brand}]" />
73   - <property name="jenkins" value="" />
74   - </target>
75   -
76   - <!-- Main target -->
77   - <target name="development" depends="setup_client, setup_development, build" description="Entry point for MCP and upstream builds" />
78   -
79   - <target name="production" depends="setup_client, setup_production, build, javadoc, mcpjar" description="Entry point for production builds" />
80   -
81   - <target name="jenkins" depends="setup_client, setup_jenkins, build, javadoc, mcpjar" description="Entry point for CI builds" />
82   -
83   - <target name="core" depends="setup_core, setup_jenkins, build, javadoc, mcpjar" description="Entry point for CI builds" />
84   -
85   - <target name="build" description="Perform all tasks for a client build" depends="init, recompile, reobfuscate, savemd5, stage, jar" >
86   - </target>
87   -
88   - <target name="clean">
89   - <echo level="info" message="Cleaning output directories" />
90   -
91   - <delete dir="${src.dir}" />
92   - <delete dir="${mcp.dir}/reobf" />
93   - </target>
94   -
95   - <target name="contributesource" description="Contribute an upstream project source code to the source path">
96   - <echo level="info" message="Contributing project ${lib}" />
97   - <copy todir="${src.dir}" verbose="false" overwrite="true" failonerror="false">
98   - <fileset dir="${eclipse.dir}/${lib}/java${sub}">
99   - <exclude name="**/debug" />
100   - <exclude name="**/debug/*.java" />
101   - </fileset>
102   - <fileset dir="${eclipse.dir}/${lib}/src${sub}" />
103   - <filterchain>
104   - <linecontains negate="true">
105   - <contains value="@MCPONLY${skipremoval}" />
106   - </linecontains>
107   - </filterchain>
108   - </copy>
109   - </target>
110   -
111   - <target name="contributeclientsource" description="Contribute client source if building a client jar" if="clientjar">
112   - <antcall target="contributesource">
113   - <param name="lib" value="${project}" />
114   - <param name="sub" value="/client" />
115   - </antcall>
116   - </target>
117   -
118   - <target name="contributeresources" description="Contribute resources to the staging path">
119   - <echo level="info" message="Contributing project resources for ${lib}" />
120   - <copy todir="${stage.dir}" verbose="false" failonerror="false">
121   - <fileset dir="${eclipse.dir}/${lib}/resources" excludes=".svn/**">
122   - <exclude name="**/Thumbs.db" />
123   - <exclude name="**/minecraft.key" />
124   - </fileset>
125   - </copy>
126   - </target>
127   -
128   - <target name="findmd5dir">
129   - <echo level="info" message="Searching for existing MD5 directory..." />
130   - <condition property="md5dir.exists">
131   - <available file="${md5.dir}" type="dir"/>
132   - </condition>
133   - </target>
134   -
135   - <target name="findmd5" depends="findmd5dir">
136   - <echo level="info" message="Searching for existing MD5 sets..." />
137   - <condition property="md5set.exists">
138   - <available file="${md5.dir}/client_${md5set}.md5" type="file"/>
139   - </condition>
140   - </target>
141   -
142   - <target name="seedmd5" depends="findmd5" unless="md5set.exists">
143   - <echo level="info" message="MD5 sets not found, seeding..." />
144   - <ant target="genmd5" antfile="seed_md5.xml" inheritall="true" />
145   - </target>
146   -
147   - <target name="notifymd5ok" depends="findmd5" if="md5set.exists">
148   - <echo level="info" message="MD5 sets already exist, skipping MD5 set seeding" />
149   - </target>
150   -
151   - <target name="preparemd5" description="Copy patched MD5 to the temp directory" depends="seedmd5, notifymd5ok, clean">
152   - <echo level="info" message="Prepare exclusion MD5s, using exclusion set &quot;${md5set}&quot;" />
153   -
154   - <copy tofile="${temp.dir}/client.md5" file="${md5.dir}/client_${md5set}.md5" failonerror="true" verbose="true" overwrite="true" />
155   - </target>
156   -
157   - <target name="prepare" description="Prepare source for MCP" depends="preparemd5">
158   - <echo level="info" message="Prepare sources for compile" />
159   -
160   - <echo level="info" message="Contributing libs" />
161   - <copy todir="${libs.dir}" verbose="true" overwrite="true">
162   - <fileset dir="${eclipse.dir}/${project}/lib">
163   - <exclude name="**/authlib*.jar" />
164   - <exclude name="**/log4j*.jar" />
165   - </fileset>
166   - </copy>
167   -
168   - <echo level="info" message="Contributing MC source" />
169   - <copy todir="${src.dir}" verbose="false" overwrite="true">
170   - <fileset dir="${mc.src.dir}" />
171   - </copy>
172   -
173   - <echo level="info" message="Contributing upstream projects" />
174   - <foreach list="${upstream}" param="lib" target="contributesource" />
175   -
176   - <antcall target="contributesource">
177   - <param name="lib" value="${project}" />
178   - <param name="sub" value="/common" />
179   - </antcall>
180   -
181   - <antcall target="contributeclientsource" />
182   - </target>
183   -
184   - <target name="init" description="Initialize build environment" depends="prepare">
185   - <echo append="false" file="${temp.dir}/build.cfg" message="[OUTPUT]&#x0A;SrcClient = build/src" />
186   -
187   - <echo level="info" message="Cleaning old stage and dist, MCP reobf directories" />
188   -
189   - <delete dir="${stage.dir}" />
190   -
191   - <echo level="info" message="Creating stage and dist dirs" />
192   - <mkdir dir="${stage.dir}" />
193   - <mkdir dir="${dist.dir}" />
194   - <mkdir dir="${md5.dir}" />
195   - </target>
196   -
197   - <target name="recompile" description="MCP recompile">
198   - <echo level="info" message="Compiling projects" />
199   -
200   - <exec executable="${python_windows}" dir="${mcp.dir}" osfamily="windows">
201   - <arg value="runtime/recompile.py" />
202   - <arg value="--client" />
203   - <arg value="--config" />
204   - <arg value="${temp.dir}/build.cfg" />
205   - <arg value="%*" />
206   - </exec>
207   -
208   - <exec executable="${python_linux}" dir="${mcp.dir}" osfamily="unix">
209   - <arg value="runtime/recompile.py" />
210   - <arg value="--client" />
211   - <arg value="--config" />
212   - <arg value="${temp.dir}/build.cfg" />
213   - <arg value="%*" />
214   - </exec>
215   - </target>
216   -
217   - <target name="reobfuscate" description="MCP reobfuscate">
218   - <echo level="info" message="Obfuscating classes" />
219   -
220   - <exec executable="${python_windows}" dir="${mcp.dir}" osfamily="windows">
221   - <arg value="runtime/reobfuscate.py" />
222   - <arg value="--client" />
223   - <arg value="%*" />
224   - </exec>
225   -
226   - <exec executable="${python_linux}" dir="${mcp.dir}" osfamily="unix">
227   - <arg value="runtime/reobfuscate.py" />
228   - <arg value="--client" />
229   - <arg value="%*" />
230   - </exec>
231   - </target>
232   -
233   - <target name="savemd5" description="Put post-obfuscation MD5 to stored md5 set" if="outmd5set">
234   - <echo level="info" message="Storing obfuscated MD5s" />
235   -
236   - <copy file="${temp.dir}/client_reobf.md5" tofile="${md5.outfile}" overwrite="true" verbose="true" />
237   - </target>
238   -
239   - <target name="stage" description="Stage resources into staging directory">
240   - <echo level="info" message="Staging resources" />
241   -
242   - <copy todir="${stage.dir}" overwrite="true">
243   - <fileset dir="${reobf.dir}" excludes=".svn/**, *.txt">
244   - <exclude name="?.class" />
245   - <exclude name="??.class" />
246   - <exclude name="???.class" />
247   - <exclude name="/net/minecraft/**" />
248   - </fileset>
249   - </copy>
250   -
251   - <foreach list="${upstream}" param="lib" target="contributeresources" />
252   -
253   - <antcall target="contributeresources">
254   - <param name="lib" value="${project}" />
255   - </antcall>
256   -
257   - <antcall target="stamp">
258   - </antcall>
259   - </target>
260   -
261   - <target name="stamp" description="Stamp build information into staged resources" if="jenkins">
262   - <echo level="info" message="Writing branding information into artefact staging area" />
263   - <echo level="info" message="Brand: ${brand}" />
264   -
265   - <replaceregexp file="${stage.dir}/liteloader.properties" byline="true" match="^brand=.*$" replace="brand=${brand}" />
266   - </target>
267   -
268   - <target name="jar" description="Build the client jar">
269   - <echo level="info" message="Building final output" />
270   -
271   - <mkdir dir="${dist.dir}" />
272   -
273   - <jar destfile="${dist.dir}/${artefact.name}.${filetype}" duplicate="preserve" index="true" manifestencoding="UTF-8">
274   - <manifest>
275   - <attribute name="Built-By" value="MCP (http://mcp.ocean-labs.de)" />
276   - <attribute name="Implementation-Vendor" value="${author}" />
277   - <attribute name="Implementation-Title" value="${ant.project.name}" />
278   - <attribute name="Implementation-Version" value="${meta.version}" />
279   - <attribute name="TweakClass" value="${tweakclass}" />
280   - <attribute name="TweakName" value="${displayname}" />
281   - <attribute name="TweakVersion" value="${version}" />
282   - <attribute name="TweakAuthor" value="${author}" />
283   - </manifest>
284   - <fileset dir="${stage.dir}" />
285   - </jar>
286   - </target>
287   -
288   - <target name="compiledebug" description="Recompile with debug classes">
289   - <copy todir="${src.dir}" verbose="false" overwrite="true" failonerror="false">
290   - <fileset dir="${eclipse.dir}/${project}/debug" />
291   - </copy>
292   -
293   - <antcall target="recompile" />
294   - </target>
295   -
296   - <target name="mcpjar" description="Build the MCP-names jar" depends="compiledebug">
297   - <echo level="info" message="Building mcpnamesjars" />
298   -
299   - <mkdir dir="${dist.dir}" />
300   -
301   - <delete file="${dist.dir}/${artefact.name}-mcpnames.${filetype}" />
302   - <delete file="${dist.dir}/${artefact.name}-mcpnames-sources.${filetype}" />
303   -
304   - <jar destfile="${dist.dir}/${artefact.name}-mcpnames.${filetype}" duplicate="preserve" index="true" manifestencoding="UTF-8">
305   - <manifest>
306   - <attribute name="Built-By" value="MCP (http://mcp.ocean-labs.de)" />
307   - <attribute name="Implementation-Vendor" value="${author}" />
308   - <attribute name="Implementation-Title" value="${ant.project.name}" />
309   - <attribute name="Implementation-Version" value="${meta.version}" />
310   - <attribute name="TweakClass" value="${tweakclass}" />
311   - <attribute name="TweakName" value="${displayname}" />
312   - <attribute name="TweakVersion" value="${version}" />
313   - <attribute name="TweakAuthor" value="${author}" />
314   - </manifest>
315   - <fileset dir="${mc.bin.dir}">
316   - <include name="com/mumfrey/**" />
317   - <include name="net/eq2online/**" />
318   - </fileset>
319   - <fileset dir="${eclipse.dir}/${project}/resources" excludes=".svn/**" />
320   - <fileset dir="${eclipse.dir}/${project}/debug" excludes=".svn/**">
321   - <exclude name="**/*.java" />
322   - </fileset>
323   - </jar>
324   - <jar destfile="${dist.dir}/${artefact.name}-mcpnames-sources.${filetype}" duplicate="preserve" index="false" filesetmanifest="skip">
325   - <fileset dir="${eclipse.dir}/${project}/java/common" />
326   - <fileset dir="${eclipse.dir}/${project}/java/client" />
327   - <fileset dir="${eclipse.dir}/${project}/debug" />
328   - <fileset dir="${eclipse.dir}/${project}/resources" />
329   - </jar>
330   - </target>
331   -
332   - <target name="javadoc" description="Create the javadoc jar">
333   - <echo level="info" message="Generating javadoc" />
334   -
335   - <javadoc destdir="${stage.dir}/${javadocpath}" useexternalfile="true">
336   - <fileset dir="${eclipse.dir}/${project}/java">
337   - <exclude name="**/debug" />
338   - <exclude name="**/debug/*.java" />
339   - </fileset>
340   - <classpath>
341   - <fileset dir="${mc.libs.dir}">
342   - <include name="**/*.jar" />
343   - </fileset>
344   - <fileset dir="${libs.dir}">
345   - <include name="*.jar" />
346   - </fileset>
347   - <pathelement location="${mc.bin.dir}"/>
348   - </classpath>
349   - <arg value="-XDignore.symbol.file" />
350   - </javadoc>
351   - <jar destfile="${dist.dir}/${artefact.name}-javadoc.${filetype}" duplicate="preserve" index="true" manifestencoding="UTF-8">
352   - <manifest>
353   - <attribute name="Built-By" value="MCP (http://mcp.ocean-labs.de)" />
354   - <attribute name="Implementation-Vendor" value="${author}" />
355   - <attribute name="Implementation-Title" value="${ant.project.name}" />
356   - <attribute name="Implementation-Version" value="${version}" />
357   - </manifest>
358   - <fileset dir="${stage.dir}/${javadocpath}" />
359   - </jar>
360   - <copy file="${dist.dir}/${artefact.name}-javadoc.${filetype}" tofile="${dist.dir}/${artefact.name}-mcpnames-javadoc.${filetype}" />
361   - </target>
362   -
363   - <target name="deploy" depends="production" description="Deploy artifact to local minecraft installation in APPDATA">
364   - <mkdir dir="${env.APPDATA}/.minecraft/libraries/com/mumfrey/liteloader/${mcversion}"/>
365   - <copy todir="${env.APPDATA}/.minecraft/libraries/com/mumfrey/liteloader/${mcversion}" file="${dist.dir}/${artefact.name}.${filetype}" failonerror="false" overwrite="true" />
366   - <copy todir="${eclipse.dir}/LiteLoaderInstaller/src/main/resources" file="${dist.dir}/${artefact.name}.${filetype}" failonerror="false" overwrite="true" />
367   - </target>
368   -</project>
369 0 \ No newline at end of file
ant/build_srgjar.xml deleted 100644 → 0
1   -<?xml version="1.0" encoding="ISO-8859-1"?>
2   -<project name="liteloadertosrg" basedir="." default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
3   -
4   - <property name="project.name" value="liteloader" />
5   - <property name="version" value="1.8" />
6   - <property name="author" value="Mumfrey" />
7   -
8   - <property name="mcp.dir" location="../../.." />
9   - <property name="mcp.temp.dir" location="${mcp.dir}/temp" />
10   - <property name="minecraft.src.dir" location="${mcp.dir}/src/minecraft" />
11   - <property name="lib.dir" location="./lib" />
12   - <property name="temp.dir" location="./temp" />
13   - <property name="out.dir" location="${temp.dir}/out" />
14   - <property name="dist.dir" location="${mcp.dir}/build/dist" />
15   - <property name="src.dir" location="${temp.dir}/src" />
16   - <property name="map.file" location="${temp.dir}/range.map" />
17   - <property name="insrg.file" location="${mcp.temp.dir}/client_ro_srg.srg" />
18   - <property name="outsrg.file" location="${temp.dir}/remap.srg" />
19   - <property name="liteloader.src.base" location="../java" />
20   -
21   - <property name="python_windows" location="${mcp.dir}/runtime/bin/python/python_mcp.exe" />
22   - <property name="python_linux" location="/usr/bin/python" />
23   -
24   - <path id="class.path">
25   - <fileset dir="${lib.dir}">
26   - <include name="**/*.jar" />
27   - </fileset>
28   - </path>
29   -
30   - <target name="build">
31   - <property name="artefact" location="${dist.dir}/${project.name}-${version}-srgnames-sources.jar" />
32   - <ivy:configure file="ivysettings.xml" />
33   - <antcall target="jar" />
34   - </target>
35   -
36   - <target name="jenkins">
37   - <property name="artefact" location="${dist.dir}/${project.name}-${version}-SNAPSHOT-srgnames-sources.jar" />
38   - <ivy:configure file="ivysettings.xml" />
39   - <antcall target="jar" />
40   - </target>
41   -
42   - <path id="classpath">
43   - <fileset dir="${ivy.lib.dir}">
44   - <include name="**/*.jar"/>
45   - </fileset>
46   - </path>
47   -
48   - <target name="clean">
49   - <echo message="Cleaning working directories..." />
50   -
51   - <delete dir="${temp.dir}" failonerror="false" />
52   -
53   - <mkdir dir="${src.dir}"/>
54   - <mkdir dir="${out.dir}"/>
55   - <mkdir dir="${temp.dir}"/>
56   - </target>
57   -
58   - <target name="init" depends="clean">
59   - <echo message="Aggregating sources..." />
60   -
61   - <copy todir="${src.dir}" overwrite="true">
62   - <fileset dir="${minecraft.src.dir}">
63   - <exclude name="*.java" />
64   - </fileset>
65   - <fileset dir="${liteloader.src.base}/common">
66   - <exclude name="**/Jump.java" />
67   - </fileset>
68   - <fileset dir="${liteloader.src.base}/client" />
69   - </copy>
70   -
71   - <echo message="Fetching dependencies..." />
72   - <ivy:retrieve sync="true" />
73   - </target>
74   -
75   - <target name="reobfSrg" depends="init">
76   - <echo message="Running reobf to generate srgs..." />
77   -
78   - <exec executable="${python_windows}" dir="${mcp.dir}" osfamily="windows">
79   - <arg value="runtime/reobfuscate.py" />
80   - <arg value="--srgnames" />
81   - <arg value="--client" />
82   - </exec>
83   -
84   - <exec executable="${python_linux}" dir="${mcp.dir}" osfamily="unix">
85   - <arg value="runtime/reobfuscate.py" />
86   - <arg value="--srgnames" />
87   - <arg value="--client" />
88   - </exec>
89   - </target>
90   -
91   - <target name="extractRanges" depends="reobfSrg">
92   - <echo message="Extracting ranges from source..." />
93   -
94   - <java classname="net.minecraftforge.srg2source.ast.RangeExtractor" output="${temp.dir}/extractRanges.log">
95   - <classpath refid="class.path" />
96   - <arg value="${src.dir}" />
97   - <arg value="${lib.dir}" />
98   - <arg value="${map.file}" />
99   - </java>
100   - </target>
101   -
102   - <target name="flipsrg" depends="extractRanges">
103   - <echo message="Remapping SRG file..." />
104   -
105   - <copy file="${insrg.file}" tofile="${outsrg.file}" overwrite="true" />
106   - <replaceregexp file="${outsrg.file}" byline="true" match="(FD|CL): ([^\s]+) ([^\s]+)" replace="\1: \3 \2" />
107   - <replaceregexp file="${outsrg.file}" byline="true" match="MD: ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)" replace="MD: \3 \4 \1 \2" />
108   - </target>
109   -
110   - <target name="applyRanges" depends="flipsrg">
111   - <echo message="Remapping ranges in source..." />
112   -
113   - <java classname="net.minecraftforge.srg2source.rangeapplier.RangeApplier" output="${temp.dir}/applyRanges.log">
114   - <classpath refid="class.path" />
115   - <arg value="--srcRoot=${src.dir}" />
116   - <arg value="--srcRangeMap=${map.file}" />
117   - <arg value="--srgFiles=${outsrg.file}" />
118   - <arg value="--outDir=${out.dir}" />
119   - </java>
120   - </target>
121   -
122   - <target name="jar" depends="applyRanges">
123   - <echo message="Building src jar..." />
124   -
125   - <jar destfile="${artefact}" duplicate="preserve" index="true" manifestencoding="UTF-8">
126   - <manifest>
127   - <attribute name="Implementation-Vendor" value="${author}" />
128   - <attribute name="Implementation-Title" value="${ant.project.name}" />
129   - <attribute name="Implementation-Version" value="${version}" />
130   - </manifest>
131   - <fileset dir="${out.dir}">
132   - <exclude name="net/minecraft/**" />
133   - </fileset>
134   - </jar>
135   - </target>
136   -</project>
137 0 \ No newline at end of file
ant/ivy.xml deleted 100644 → 0
1   -<?xml version="1.0" encoding="ISO-8859-1"?>
2   -<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
3   - <info organisation="com.mumfrey" module="liteloader" status="integration">
4   - <ivyauthor name="Adam Mummery-Smith" />
5   - </info>
6   - <dependencies>
7   - <dependency org="org.ow2.asm" name="asm-debug-all" rev="4.1" />
8   - <dependency org="com.google.guava" name="guava" rev="15.0" />
9   - <dependency org="net.sf.opencsv" name="opencsv" rev="2.3" />
10   - <dependency org="net.sf.jopt-simple" name="jopt-simple" rev="4.6" />
11   - <dependency org="org.eclipse.jgit" name="org.eclipse.jgit" rev="3.2.0.201312181205-r" />
12   - <dependency org="org.eclipse.core" name="contenttype" rev="3.4.200-v20130326-1255" />
13   - <dependency org="org.eclipse.core" name="jobs" rev="3.5.300-v20130429-1813" />
14   - <dependency org="org.eclipse.core" name="runtime" rev="3.9.0-v20130326-1255" />
15   - <dependency org="org.eclipse" name="osgi" rev="3.9.1-v20130814-1242" />
16   - <dependency org="org.eclipse.text" name="org.eclipse.text" rev="3.5.101" />
17   - <dependency org="org.eclipse.equinox" name="common" rev="3.6.200-v20130402-1505" />
18   - <dependency org="org.eclipse.equinox" name="preferences" rev="3.5.100-v20130422-1538" />
19   - <dependency org="org.eclipse.jdt" name="org.eclipse.jdt.core" rev="3.10.0.v20131029-1755" />
20   - <dependency org="net.minecraftforge.srg2source" name="Srg2Source" rev="3.2-SNAPSHOT" />
21   - </dependencies>
22   -</ivy-module>
ant/ivysettings.xml deleted 100644 → 0
1   -<?xml version="1.0" encoding="ISO-8859-1"?>
2   -<ivysettings>
3   - <settings defaultResolver="srg2source" />
4   - <resolvers>
5   - <chain name="srg2source">
6   - <ibiblio name="m2" m2compatible="true" />
7   - <ibiblio name="forge" m2compatible="true" root="http://files.minecraftforge.net/maven/"/>
8   - <ibiblio name="eclipse" m2compatible="true" root="https://repo.eclipse.org/content/groups/eclipse/"/>
9   - </chain>
10   - </resolvers>
11   -</ivysettings>
12 0 \ No newline at end of file
ant/seed_md5.xml deleted 100644 → 0
1   -<?xml version="1.0" encoding="UTF-8" ?>
2   -<project name="mcp" basedir="." default="genmd5">
3   -
4   - <!-- ========================================================================== -->
5   - <!-- DO NOT RUN THIS SCRIPT DIRECTLY -->
6   - <!-- ========================================================================== -->
7   -
8   - <!-- This script is called by the LiteLoader build script if the initial MD5s -->
9   - <!-- are missing. If you want to fire this script then delete the 'md5' folder -->
10   - <!-- before running the LiteLoader build. -->
11   -
12   - <target name="genmd5" description="Seed the initial MCP md5 set">
13   - <echo level="info" message="MCP md5set was not found, making a clean compile" />
14   - <antcall target="recompile" />
15   - <antcall target="reobfuscate" />
16   - <antcall target="savemd5" />
17   - </target>
18   -
19   - <target name="clean">
20   - <echo level="info" message="Cleaning output directories" />
21   -
22   - <delete dir="${mcp.dir}/reobf" />
23   - </target>
24   -
25   - <target name="init" depends="clean" description="Initialize environment">
26   - <echo level="info" message="Initialising environment" />
27   -
28   - <mkdir dir="${md5.dir}" />
29   - </target>
30   -
31   - <target name="recompile" depends="init" description="MCP recompile">
32   - <echo level="info" message="Compiling MCP sources" />
33   -
34   - <exec executable="${python_windows}" dir="${mcp.dir}" osfamily="windows">
35   - <arg value="runtime/recompile.py" />
36   - <arg value="--client" />
37   - <arg value="%*" />
38   - </exec>
39   -
40   - <exec executable="${python_linux}" dir="${mcp.dir}" osfamily="unix">
41   - <arg value="runtime/recompile.py" />
42   - <arg value="--client" />
43   - <arg value="%*" />
44   - </exec>
45   -
46   - </target>
47   -
48   - <target name="reobfuscate" description="MCP reobfuscate">
49   - <echo level="info" message="Obfuscating classes" />
50   -
51   - <exec executable="${python_windows}" dir="${mcp.dir}" osfamily="windows">
52   - <arg value="runtime/reobfuscate.py" />
53   - <arg value="--client" />
54   - <arg value="%*" />
55   - </exec>
56   -
57   - <exec executable="${python_linux}" dir="${mcp.dir}" osfamily="unix">
58   - <arg value="runtime/reobfuscate.py" />
59   - <arg value="--client" />
60   - <arg value="%*" />
61   - </exec>
62   -
63   - </target>
64   -
65   - <target name="savemd5" description="Put post-obfuscation MD5 to stored md5 set" if="outmd5set">
66   - <echo level="info" message="Storing obfuscated MD5s" />
67   -
68   - <copy file="${temp.dir}/client_reobf.md5" tofile="${md5.dir}/client_mcp.md5" overwrite="true" verbose="true" />
69   - </target>
70   -</project>
71 0 \ No newline at end of file
ant/tasks/ant-contrib.jar deleted 100644 → 0
No preview for this file type
build.gradle 0 → 100644
  1 +buildscript {
  2 + repositories {
  3 + mavenLocal()
  4 + mavenCentral()
  5 + maven {
  6 + name = "forge"
  7 + url = "http://files.minecraftforge.net/maven"
  8 + }
  9 + maven {
  10 + name = "sonatype"
  11 + url = "https://oss.sonatype.org/content/repositories/snapshots/"
  12 + }
  13 + }
  14 + dependencies {
  15 + classpath 'net.minecraftforge.gradle:ForgeGradle:2.0-SNAPSHOT'
  16 + }
  17 +}
  18 +
  19 +apply plugin: 'net.minecraftforge.gradle.tweaker-client'
  20 +apply plugin: 'maven'
  21 +
  22 +// Artefact details
  23 +ext.buildNumber = project.hasProperty("buildNumber") ? buildNumber : '0'
  24 +ext.ciSystem = project.hasProperty("ciSystem") ? ciSystem : 'unknown'
  25 +ext.commit = project.hasProperty("commit") ? commit : 'unknown'
  26 +ext.classifier = project.hasProperty("buildType") ? buildType : 'SNAPSHOT'
  27 +ext.isReleaseBuild = "RELEASE".equals(project.classifier.toUpperCase())
  28 +ext.mavenRepo = project.isReleaseBuild ? "mavenUrl" : "mavenSnapshotUrl"
  29 +
  30 +// Basic project information
  31 +group = "com.mumfrey"
  32 +archivesBaseName = "liteloader"
  33 +version = buildVersion + (project.isReleaseBuild ? '' : '-' + project.classifier)
  34 +
  35 +// Extended project information
  36 +ext.projectName = 'LiteLoader'
  37 +ext.inceptionYear = '2012'
  38 +ext.packaging = 'jar'
  39 +
  40 +ext.startClass = 'com.mumfrey.liteloader.debug.Start'
  41 +ext.tweakClass = 'com.mumfrey.liteloader.launch.LiteLoaderTweaker'
  42 +
  43 +// Minimum version of Java required
  44 +sourceCompatibility = '1.6'
  45 +targetCompatibility = '1.6'
  46 +
  47 +minecraft {
  48 + version = project.mcVersion
  49 + mappings = project.mcMappings
  50 + runDir = "run"
  51 + tweakClass = project.tweakClass
  52 +}
  53 +
  54 +sourceSets {
  55 + client {
  56 + compileClasspath += main.compileClasspath + main.output
  57 + }
  58 + debug {
  59 + compileClasspath += client.compileClasspath + client.output
  60 + }
  61 +}
  62 +
  63 +javadoc {
  64 + source sourceSets.client.allJava
  65 + source sourceSets.debug.allJava
  66 +}
  67 +
  68 +// hacks for run configs
  69 +afterEvaluate {
  70 + def mc = plugins.getPlugin 'net.minecraftforge.gradle.tweaker-client'
  71 + mc.replacer.putReplacement '{RUN_CLIENT_MAIN}', project.startClass
  72 + mc.replacer.putReplacement '{RUN_CLIENT_TWEAKER}', minecraft.tweakClass
  73 +}
  74 +
  75 +// manifest entries for all jars
  76 +def jarManifest = {
  77 + mainAttributes (
  78 + 'Built-By': System.properties['user.name'],
  79 + 'Created-By': System.properties['java.vm.version'] + " (" + System.properties['java.vm.vendor'] + ")",
  80 + 'Implementation-Title': name,
  81 + 'Implementation-Version': version + "+" + ciSystem + "-b" + buildNumber + ".git-" + commit,
  82 + 'Implementation-Vendor': url
  83 + )
  84 +}
  85 +
  86 +jar {
  87 + from sourceSets.client.output
  88 + from sourceSets.debug.output
  89 + manifest jarManifest
  90 +}
  91 +
  92 +task releaseJar(type: Jar) {
  93 + from sourceSets.main.output
  94 + from sourceSets.client.output
  95 + manifest jarManifest
  96 + classifier = 'release'
  97 +}
  98 +
  99 +task javadocJar(type: Jar, dependsOn: javadoc) {
  100 + from javadoc.destinationDir
  101 + classifier = 'javadoc'
  102 +}
  103 +
  104 +// Hey @AbrarSyed why can't we just turn this off >:(
  105 +task runClient(type: JavaExec, overwrite: true) {
  106 + doFirst {
  107 + println "Do not use runClient, it is not compatible with Mixin"
  108 + System.exit(-1)
  109 + }
  110 +}
  111 +
  112 +tasks.withType(JavaCompile) {
  113 + options.compilerArgs += ['-Xlint:all', '-Xlint:-path']
  114 + options.deprecation = true
  115 + options.encoding = 'utf8'
  116 +}
  117 +
  118 +if (JavaVersion.current().isJava8Compatible()) {
  119 + tasks.withType(Javadoc) {
  120 + // disable the crazy super-strict doclint tool in Java 8
  121 + options.addStringOption('Xdoclint:none', '-quiet')
  122 + }
  123 +}
  124 +
  125 +reobf {
  126 + jar {
  127 + useSrgSrg()
  128 + }
  129 + releaseJar {
  130 + useNotchSrg()
  131 + classpath = sourceSets.main.compileClasspath
  132 + }
  133 +}
  134 +
  135 +compileJava.doFirst {
  136 + println '------------------------------------------------------------'
  137 + println 'Running ' + (project.isReleaseBuild ? "RELEASE" : "SNAPSHOT") + ' build'
  138 + println '------------------------------------------------------------'
  139 +}
  140 +
  141 +build.dependsOn "reobfReleaseJar"
  142 +
  143 +artifacts {
  144 + if (project.isReleaseBuild) {
  145 + archives jar
  146 + }
  147 + archives releaseJar
  148 + archives sourceJar
  149 + archives javadocJar
  150 +}
  151 +
  152 +uploadArchives {
  153 + repositories {
  154 + mavenDeployer {
  155 + if (project.hasProperty(project.mavenRepo)) {
  156 + repository(url: project.getProperty(project.mavenRepo)) {
  157 + authentication(userName: project.mavenUsername, password: project.mavenPassword)
  158 + }
  159 + }
  160 + pom {
  161 + groupId = project.group
  162 + version = project.version
  163 + artifactId = project.archivesBaseName
  164 + project {
  165 + name project.archivesBaseName
  166 + packaging 'jar'
  167 + description 'LiteLoader'
  168 + url 'http://www.liteloader.com/'
  169 + scm {
  170 + url 'http://develop.liteloader.com/liteloader/LiteLoader'
  171 + connection 'scm:git:http://develop.liteloader.com/liteloader/LiteLoader.git'
  172 + developerConnection 'scm:git:http://develop.liteloader.com/liteloader/LiteLoader.git'
  173 + }
  174 + issueManagement {
  175 + system 'GitLab Issues'
  176 + url 'http://develop.liteloader.com/liteloader/LiteLoader/issues'
  177 + }
  178 + }
  179 + }
  180 + }
  181 + }
  182 +}
... ...
gradle.properties 0 → 100644
  1 +name=LiteLoader
  2 +inceptionYear=2012
  3 +packaging=jar
  4 +description=LiteLoader
  5 +url=http://www.liteloader.com
  6 +organization=LiteLoader
  7 +buildType=SNAPSHOT
  8 +buildVersion=1.8
  9 +mcVersion=1.8
  10 +mcMappings=snapshot_20151124
0 11 \ No newline at end of file
... ...
java/common/com/mumfrey/liteloader/modconfig/ConfigPanel.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.modconfig;
2   -
3   -
4   -/**
5   - * Interface for mod config panels to implement
6   - *
7   - * @author Adam Mummery-Smith
8   - */
9   -public interface ConfigPanel
10   -{
11   - /**
12   - * Panels should return the text to display at the top of the config panel window
13   - */
14   - public abstract String getPanelTitle();
15   -
16   - /**
17   - * Get the height of the content area for scrolling purposes, return -1 to disable scrolling
18   - */
19   - public abstract int getContentHeight();
20   -
21   - /**
22   - * Called when the panel is displayed, initialise the panel (read settings, etc)
23   - *
24   - * @param host panel host
25   - */
26   - public abstract void onPanelShown(ConfigPanelHost host);
27   -
28   - /**
29   - * Called when the window is resized whilst the panel is active
30   - *
31   - * @param host panel host
32   - */
33   - public abstract void onPanelResize(ConfigPanelHost host);
34   -
35   - /**
36   - * Called when the panel is closed, panel should save settings
37   - */
38   - public abstract void onPanelHidden();
39   -
40   - /**
41   - * Called every tick
42   - */
43   - public abstract void onTick(ConfigPanelHost host);
44   -
45   - /**
46   - * Draw the configuration panel
47   - *
48   - * @param host
49   - * @param mouseX
50   - * @param mouseY
51   - * @param partialTicks
52   - */
53   - public abstract void drawPanel(ConfigPanelHost host, int mouseX, int mouseY, float partialTicks);
54   -
55   - /**
56   - * Called when a mouse button is pressed
57   - *
58   - * @param host
59   - * @param mouseX
60   - * @param mouseY
61   - * @param mouseButton
62   - */
63   - public abstract void mousePressed(ConfigPanelHost host, int mouseX, int mouseY, int mouseButton);
64   -
65   - /**
66   - * Called when a mouse button is released
67   - *
68   - * @param host
69   - * @param mouseX
70   - * @param mouseY
71   - * @param mouseButton
72   - */
73   - public abstract void mouseReleased(ConfigPanelHost host, int mouseX, int mouseY, int mouseButton);
74   -
75   - /**
76   - * Called when the mouse is moved
77   - *
78   - * @param host
79   - * @param mouseX
80   - * @param mouseY
81   - */
82   - public abstract void mouseMoved(ConfigPanelHost host, int mouseX, int mouseY);
83   -
84   - /**
85   - * Called when a key is pressed
86   - *
87   - * @param host
88   - * @param keyChar
89   - * @param keyCode
90   - */
91   - public abstract void keyPressed(ConfigPanelHost host, char keyChar, int keyCode);
92   -}
java/common/com/mumfrey/liteloader/permissions/Permissions.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.permissions;
2   -
3   -/**
4   - * Represents a set of permissions assigned by an authority
5   - *
6   - * @author Adam Mummery-Smith
7   - */
8   -public interface Permissions
9   -{
10   - /**
11   - * Returns true if the specified permission is set in this permission container
12   - *
13   - * @param permission Name of the permission to test for
14   - * @return True if the permission exists in this set
15   - */
16   - public abstract boolean getPermissionSet(String permission);
17   -
18   - /**
19   - * Returns true if the authority says we have this permission or false if the permission is denied or not set
20   - *
21   - * @param permission Name of the permission to test for
22   - */
23   - public abstract boolean getHasPermission(String permission);
24   -
25   - /**
26   - * Returns true if the authority says we have this permission or if the permission is not specified by the authority returns the default value
27   - *
28   - * @param permission Name of the permission to test for
29   - * @param defaultValue Value to return if the permission is NOT specified by the authority
30   - *
31   - * @return State of the authority permission or default value if not specified
32   - */
33   - public abstract boolean getHasPermission(String permission, boolean defaultValue);
34   -}
java/common/com/mumfrey/liteloader/permissions/PermissionsManager.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.permissions;
2   -
3   -import com.mumfrey.liteloader.Permissible;
4   -import com.mumfrey.liteloader.common.GameEngine;
5   -
6   -/**
7   - * Interface for permissions manager implementations
8   - *
9   - * @author Adam Mummery-Smith
10   - */
11   -public interface PermissionsManager
12   -{
13   - /**
14   - * Get the underlying permissions node for this manager for the specified mod
15   - *
16   - * @param mod Mod to fetch permissions for
17   - */
18   - public abstract Permissions getPermissions(Permissible mod);
19   -
20   - /**
21   - * Get the time the permissions for the specified mod were last updated
22   - *
23   - * @param mod Mod to check for
24   - * @return Timestamp when the permissions were last updated
25   - */
26   - public abstract Long getPermissionUpdateTime(Permissible mod);
27   -
28   - /**
29   - * Handler for tick event
30   - *
31   - * @param engine
32   - * @param partialTicks
33   - * @param inGame
34   - */
35   - public abstract void onTick(GameEngine<?, ?> engine, float partialTicks, boolean inGame);
36   -
37   - /**
38   - * Register a new event listener, the registered object will receive callbacks for permissions events
39   - *
40   - * @param permissible
41   - */
42   - public abstract void registerPermissible(Permissible permissible);
43   -
44   - /**
45   - * Perform any necessary validation to check for a tamper condition, can and should be called from as
46   - * many places as possible
47   - */
48   - public abstract void tamperCheck();
49   -}
java/common/com/mumfrey/liteloader/permissions/PermissionsManagerServer.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.permissions;
2   -
3   -import java.util.List;
4   -
5   -import net.minecraft.entity.player.EntityPlayerMP;
6   -import net.minecraft.network.PacketBuffer;
7   -
8   -import com.mumfrey.liteloader.Permissible;
9   -import com.mumfrey.liteloader.ServerPluginChannelListener;
10   -import com.mumfrey.liteloader.common.GameEngine;
11   -
12   -/**
13   - * TODO implementation
14   - *
15   - * @author Adam Mummery-Smith
16   - */
17   -public class PermissionsManagerServer implements PermissionsManager, ServerPluginChannelListener
18   -{
19   - public PermissionsManagerServer()
20   - {
21   - }
22   -
23   - @Override
24   - public String getName()
25   - {
26   - return null;
27   - }
28   -
29   - @Override
30   - public void onCustomPayload(EntityPlayerMP sender, String channel, PacketBuffer data)
31   - {
32   - }
33   -
34   - @Override
35   - public Permissions getPermissions(Permissible mod)
36   - {
37   - return null;
38   - }
39   -
40   - @Override
41   - public Long getPermissionUpdateTime(Permissible mod)
42   - {
43   - return null;
44   - }
45   -
46   - @Override
47   - public void onTick(GameEngine<?, ?> engine, float partialTicks, boolean inGame)
48   - {
49   - }
50   -
51   - @Override
52   - public List<String> getChannels()
53   - {
54   - return null;
55   - }
56   -
57   - @Override
58   - public void registerPermissible(Permissible permissible)
59   - {
60   - }
61   -
62   - @Override
63   - public void tamperCheck()
64   - {
65   - }
66   -}
java/common/com/mumfrey/liteloader/permissions/ServerPermissions.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.permissions;
2   -
3   -import java.util.regex.Matcher;
4   -import java.util.regex.Pattern;
5   -
6   -import net.eq2online.permissions.ReplicatedPermissionsContainer;
7   -import net.minecraft.network.PacketBuffer;
8   -
9   -
10   -/**
11   - * Replicated permissions implementation
12   - *
13   - * @author Adam Mummery-Smith
14   - */
15   -public class ServerPermissions implements ReplicatedPermissions
16   -{
17   - /**
18   - * Pattern for recognising valid permissions in the server feed
19   - */
20   - private static final Pattern permissionPattern = Pattern.compile("^([\\+\\-])(([a-z0-9]+\\.)*[a-z0-9\\*]+)$", Pattern.CASE_INSENSITIVE);
21   -
22   - protected String modName;
23   -
24   - /**
25   - * Root permission node
26   - */
27   - protected Permission permissions = new Permission();
28   -
29   - /**
30   - * Time the permissions were updated
31   - */
32   - protected long createdTime = 0L;
33   -
34   - /**
35   - * Expiry time of the current data cache
36   - */
37   - protected long validUntil = 0L;
38   -
39   - /**
40   - * Time to cache server responses by default
41   - */
42   - protected long cacheTime = 10L * 60L * 1000L; // 10 minutes
43   -
44   - /**
45   - * Time to wait when refreshing server permissions before trying again
46   - */
47   - protected long refreshTime = 15L * 1000L; // 15 seconds
48   -
49   - /**
50   - * @param data
51   - */
52   - public ServerPermissions(PacketBuffer data)
53   - {
54   - this.createdTime = System.currentTimeMillis();
55   - this.validUntil = this.createdTime + this.cacheTime;
56   -
57   - ReplicatedPermissionsContainer response = ReplicatedPermissionsContainer.fromPacketBuffer(data);
58   -
59   - if (response != null)
60   - {
61   - response.sanitise();
62   -
63   - this.modName = response.modName;
64   - this.validUntil = System.currentTimeMillis() + response.remoteCacheTimeSeconds * 1000L;
65   -
66   - for (String permissionString : response.permissions)
67   - {
68   - Matcher permissionMatcher = permissionPattern.matcher(permissionString);
69   -
70   - if (permissionMatcher.matches())
71   - {
72   - String name = permissionMatcher.group(2);
73   - boolean value = permissionMatcher.group(1).equals("+");
74   -
75   - this.permissions.setPermissionAndValue(name, value);
76   - }
77   - }
78   - }
79   - }
80   -
81   - /**
82   - * Get the permissible mod name
83   - */
84   - public String getModName()
85   - {
86   - return this.modName;
87   - }
88   -
89   - /* (non-Javadoc)
90   - * @see net.eq2online.permissions.Permissions#getPermissionSet(java.lang.String)
91   - */
92   - @Override
93   - public boolean getPermissionSet(String permission)
94   - {
95   - return this.permissions.getPermission(permission) != null;
96   - }
97   -
98   - /* (non-Javadoc)
99   - * @see net.eq2online.permissions.Permissions#getHasPermission(java.lang.String)
100   - */
101   - @Override
102   - public boolean getHasPermission(String permission)
103   - {
104   - Permission perm = this.permissions.getPermission(permission);
105   - return perm != null && perm.getValue();
106   - }
107   -
108   - /* (non-Javadoc)
109   - * @see net.eq2online.permissions.Permissions#getHasPermission(java.lang.String, boolean)
110   - */
111   - @Override
112   - public boolean getHasPermission(String permission, boolean defaultValue)
113   - {
114   - Permission perm = this.permissions.getPermission(permission);
115   -
116   - return perm != null ? perm.getValue() : defaultValue;
117   - }
118   -
119   - /* (non-Javadoc)
120   - * @see net.eq2online.permissions.ReplicatedPermissions#getReplicationTime()
121   - */
122   - @Override
123   - public long getReplicationTime()
124   - {
125   - return this.createdTime;
126   - }
127   -
128   - /* (non-Javadoc)
129   - * @see net.eq2online.permissions.ReplicatedPermissions#isValid()
130   - */
131   - @Override
132   - public boolean isValid()
133   - {
134   - return System.currentTimeMillis() < this.validUntil;
135   - }
136   -
137   - /* (non-Javadoc)
138   - * @see net.eq2online.permissions.ReplicatedPermissions#invalidate()
139   - */
140   - @Override
141   - public void invalidate()
142   - {
143   - this.validUntil = 0L;
144   - }
145   -
146   - @Override
147   - public void notifyRefreshPending()
148   - {
149   - this.validUntil = System.currentTimeMillis() + this.refreshTime;
150   - }
151   -}
java/common/com/mumfrey/liteloader/transformers/ClassTransformer.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers;
2   -
3   -import net.minecraft.launchwrapper.IClassTransformer;
4   -
5   -import org.objectweb.asm.ClassReader;
6   -import org.objectweb.asm.ClassWriter;
7   -import org.objectweb.asm.tree.ClassNode;
8   -
9   -/**
10   - * Base class for transformers which work via ClassNode
11   - *
12   - * @author Adam Mummery-Smith
13   - */
14   -public abstract class ClassTransformer implements IClassTransformer
15   -{
16   - public static final String HORIZONTAL_RULE = "----------------------------------------------------------------------------------------------------";
17   -
18   - private ClassReader classReader;
19   - private ClassNode classNode;
20   -
21   - /**
22   - * @param basicClass
23   - */
24   - protected final ClassNode readClass(byte[] basicClass, boolean cacheReader)
25   - {
26   - ClassReader classReader = new ClassReader(basicClass);
27   - if (cacheReader) this.classReader = classReader;
28   -
29   - ClassNode classNode = new ClassNode();
30   - classReader.accept(classNode, ClassReader.EXPAND_FRAMES);
31   - return classNode;
32   - }
33   -
34   - /**
35   - * @param classNode
36   - */
37   - protected final byte[] writeClass(ClassNode classNode)
38   - {
39   - // Use optimised writer for speed
40   - if (this.classReader != null && this.classNode == classNode)
41   - {
42   - this.classNode = null;
43   - IsolatedClassWriter writer = new IsolatedClassWriter(this.classReader, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
44   - this.classReader = null;
45   - classNode.accept(writer);
46   - return writer.toByteArray();
47   - }
48   -
49   - this.classNode = null;
50   -
51   - IsolatedClassWriter writer = new IsolatedClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
52   - classNode.accept(writer);
53   - return writer.toByteArray();
54   - }
55   -
56   - protected static String getSimpleClassName(ClassNode classNode)
57   - {
58   - String className = classNode.name.replace('/', '.');
59   - int dotPos = className.lastIndexOf('.');
60   - return dotPos == -1 ? className : className.substring(dotPos + 1);
61   - }
62   -}
63 0 \ No newline at end of file
java/common/com/mumfrey/liteloader/transformers/event/EventInfo.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event;
2   -
3   -import org.objectweb.asm.Type;
4   -
5   -import com.mumfrey.liteloader.core.event.Cancellable;
6   -import com.mumfrey.liteloader.core.event.EventCancellationException;
7   -
8   -/**
9   - * Contains information about an injected event, including the source object and whether the event
10   - * is cancellable and/or cancelled.
11   - *
12   - * @author Adam Mummery-Smith
13   - *
14   - * @param <S> Source object type. For non-static methods this will be the containing object instance.
15   - */
16   -public class EventInfo<S> implements Cancellable
17   -{
18   - protected static final String STRING = "Ljava/lang/String;";
19   - protected static final String OBJECT = "Ljava/lang/Object;";
20   -
21   - private final String name;
22   -
23   - private final S source;
24   -
25   - private final boolean cancellable;
26   -
27   - private boolean cancelled;
28   -
29   - public EventInfo(String name, S source, boolean cancellable)
30   - {
31   - this.name = name;
32   - this.source = source;
33   - this.cancellable = cancellable;
34   - }
35   -
36   - public S getSource()
37   - {
38   - return this.source;
39   - }
40   -
41   - public String getName()
42   - {
43   - return this.name;
44   - }
45   -
46   - protected String getSourceClass()
47   - {
48   - return this.source != null ? this.source.getClass().getSimpleName() : null;
49   - }
50   -
51   - @Override
52   - public String toString()
53   - {
54   - return String.format("EventInfo(TYPE=%s,NAME=%s,SOURCE=%s,CANCELLABLE=%s)", this.getClass().getSimpleName(), this.name, this.getSourceClass(), this.cancellable);
55   - }
56   -
57   - /* (non-Javadoc)
58   - * @see com.mumfrey.liteloader.core.event.Cancellable#isCancellable()
59   - */
60   - @Override
61   - public final boolean isCancellable()
62   - {
63   - return this.cancellable;
64   - }
65   -
66   - /* (non-Javadoc)
67   - * @see com.mumfrey.liteloader.transformers.event.Cancellable#isCancelled()
68   - */
69   - @Override
70   - public final boolean isCancelled()
71   - {
72   - return this.cancelled;
73   - }
74   -
75   - /* (non-Javadoc)
76   - * @see com.mumfrey.liteloader.transformers.event.Cancellable#cancel()
77   - */
78   - @Override
79   - public void cancel() throws EventCancellationException
80   - {
81   - if (!this.cancellable)
82   - {
83   - throw new EventCancellationException(String.format("The event %s is not cancellable.", this.name));
84   - }
85   -
86   - this.cancelled = true;
87   - }
88   -
89   - protected static String getEventInfoClassName()
90   - {
91   - return EventInfo.class.getName();
92   - }
93   -
94   - /**
95   - * @param returnType
96   - */
97   - protected static String getEventInfoClassName(Type returnType)
98   - {
99   - return returnType.equals(Type.VOID_TYPE) ? EventInfo.class.getName() : ReturnEventInfo.class.getName();
100   - }
101   -
102   - public static String getConstructorDescriptor(Type returnType)
103   - {
104   - if (returnType.equals(Type.VOID_TYPE))
105   - {
106   - return EventInfo.getConstructorDescriptor();
107   - }
108   -
109   - if (returnType.getSort() == Type.OBJECT)
110   - {
111   - return String.format("(%s%sZ%s)V", EventInfo.STRING, EventInfo.OBJECT, EventInfo.OBJECT);
112   - }
113   -
114   - return String.format("(%s%sZ%s)V", EventInfo.STRING, EventInfo.OBJECT, returnType.getDescriptor());
115   - }
116   -
117   - public static String getConstructorDescriptor()
118   - {
119   - return String.format("(%s%sZ)V", EventInfo.STRING, EventInfo.OBJECT);
120   - }
121   -
122   - public static String getIsCancelledMethodName()
123   - {
124   - return "isCancelled";
125   - }
126   -
127   - public static String getIsCancelledMethodSig()
128   - {
129   - return "()Z";
130   - }
131   -}
java/common/com/mumfrey/liteloader/transformers/event/EventInjectionTransformer.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event;
2   -
3   -import com.mumfrey.liteloader.transformers.ObfProvider;
4   -
5   -import net.minecraft.launchwrapper.IClassTransformer;
6   -
7   -public abstract class EventInjectionTransformer implements IClassTransformer
8   -{
9   - public EventInjectionTransformer()
10   - {
11   - try
12   - {
13   - this.addEvents();
14   - }
15   - catch (Exception ex)
16   - {
17   - ex.printStackTrace();
18   - }
19   - }
20   -
21   - /* (non-Javadoc)
22   - * @see net.minecraft.launchwrapper.IClassTransformer#transform(java.lang.String, java.lang.String, byte[])
23   - */
24   - @Override
25   - public byte[] transform(String name, String transformedName, byte[] basicClass)
26   - {
27   - return basicClass;
28   - }
29   -
30   - /**
31   - * Subclasses should register events here
32   - */
33   - protected abstract void addEvents();
34   -
35   - /**
36   - * Register a new event to be injected, the event instance will be created if it does not already exist
37   - *
38   - * @param eventName Name of the event to use/create. Beware that IllegalArgumentException if the event was already defined with incompatible parameters
39   - * @param targetMethod Method descriptor to identify the method to inject into
40   - * @param injectionPoint Delegate which finds the location(s) in the target method to inject into
41   - *
42   - * @return the event - for fluent interface
43   - */
44   - protected final Event addEvent(String eventName, MethodInfo targetMethod, InjectionPoint injectionPoint)
45   - {
46   - return this.addEvent(Event.getOrCreate(eventName), targetMethod, injectionPoint);
47   - }
48   -
49   - /**
50   - * Register an event to be injected
51   - *
52   - * @param event Event to inject
53   - * @param targetMethod Method descriptor to identify the method to inject into
54   - * @param injectionPoint Delegate which finds the location(s) in the target method to inject into
55   - *
56   - * @return the event - for fluent interface
57   - */
58   - protected final Event addEvent(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint)
59   - {
60   - if (event == null)
61   - throw new IllegalArgumentException("Event cannot be null!");
62   -
63   - if (injectionPoint == null)
64   - throw new IllegalArgumentException("Injection point cannot be null for event " + event.getName());
65   -
66   - if ("true".equals(System.getProperty("mcpenv")))
67   - {
68   - EventTransformer.addEvent(event, targetMethod.owner, targetMethod.sig, injectionPoint);
69   - }
70   - else
71   - {
72   - EventTransformer.addEvent(event, targetMethod.owner, targetMethod.sigSrg, injectionPoint);
73   - EventTransformer.addEvent(event, targetMethod.ownerObf, targetMethod.sigObf, injectionPoint);
74   - }
75   -
76   - event.addPendingInjection(targetMethod);
77   -
78   - return event;
79   - }
80   -
81   - /**
82   - * Register an access injection interface
83   - *
84   - * @param interfaceName
85   - */
86   - protected final void addAccessor(String interfaceName)
87   - {
88   - EventTransformer.addAccessor(interfaceName);
89   - }
90   -
91   - /**
92   - * Register an access injection interface and provide a contextual obfuscation provider
93   - *
94   - * @param interfaceName
95   - * @param obfProvider
96   - */
97   - protected final void addAccessor(String interfaceName, ObfProvider obfProvider)
98   - {
99   - EventTransformer.addAccessor(interfaceName, obfProvider);
100   - }
101   -}
java/common/com/mumfrey/liteloader/transformers/event/EventProxyTransformer.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event;
2   -
3   -import org.objectweb.asm.Opcodes;
4   -import org.objectweb.asm.tree.ClassNode;
5   -import org.objectweb.asm.tree.InsnNode;
6   -import org.objectweb.asm.tree.MethodNode;
7   -
8   -import com.mumfrey.liteloader.core.runtime.Obf;
9   -import com.mumfrey.liteloader.transformers.ClassTransformer;
10   -
11   -/**
12   - * Transformer responsible for transforming/generating the EventProxy inner classes, separated from the Event Transformer
13   - * itself so that we can place it higher up the tranformer chain to avoid broken mod transformers screwing things up.
14   - *
15   - * @author Adam Mummery-Smith
16   - */
17   -public class EventProxyTransformer extends ClassTransformer
18   -{
19   - public EventProxyTransformer()
20   - {
21   - }
22   -
23   - @Override
24   - public byte[] transform(String name, String transformedName, byte[] basicClass)
25   - {
26   - if (transformedName != null && transformedName.startsWith(Obf.EventProxy.name))
27   - {
28   - int dollarPos = transformedName.indexOf('$');
29   - int proxyIndex = (dollarPos > -1) ? Integer.parseInt(transformedName.substring(dollarPos + 1)) : 0;
30   - if (proxyIndex != 1)
31   - {
32   - try
33   - {
34   - return this.transformEventProxy(transformedName, basicClass, proxyIndex);
35   - }
36   - catch (Throwable th)
37   - {
38   - th.printStackTrace();
39   - }
40   - }
41   - }
42   -
43   - return basicClass;
44   - }
45   -
46   - private byte[] transformEventProxy(String transformedName, byte[] basicClass, int proxyIndex)
47   - {
48   - ClassNode classNode = this.getProxyByteCode(transformedName, basicClass, proxyIndex);
49   - return this.writeClass(Event.populateProxy(classNode, proxyIndex == 0 ? 1 : proxyIndex));
50   - }
51   -
52   - private ClassNode getProxyByteCode(String transformedName, byte[] basicClass, int proxyIndex)
53   - {
54   - if (proxyIndex == 0 || basicClass != null)
55   - {
56   - ClassNode classNode = this.readClass(basicClass, true);
57   -
58   - for (MethodNode method : classNode.methods)
59   - {
60   - // Strip the sanity code out of the EventProxy class initialiser
61   - if ("<clinit>".equals(method.name))
62   - {
63   - method.instructions.clear();
64   - method.instructions.add(new InsnNode(Opcodes.RETURN));
65   - }
66   - }
67   -
68   - return classNode;
69   - }
70   -
71   - ClassNode classNode = new ClassNode();
72   - classNode.visit(50, Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, transformedName.replace('.', '/'), null, "java/lang/Object", null);
73   - return classNode;
74   - }
75   -}
java/common/com/mumfrey/liteloader/transformers/event/Jump.java deleted 100644 → 0
1   -//package com.mumfrey.liteloader.transformers.event;
2   -//
3   -//import org.objectweb.asm.Opcodes;
4   -//import org.objectweb.asm.tree.AbstractInsnNode;
5   -//import org.objectweb.asm.tree.InsnList;
6   -//import org.objectweb.asm.tree.InsnNode;
7   -//import org.objectweb.asm.tree.JumpInsnNode;
8   -//import org.objectweb.asm.tree.MethodInsnNode;
9   -//import org.objectweb.asm.tree.VarInsnNode;
10   -//
11   -//public class Jump extends Event
12   -//{
13   -// Jump(String name, boolean cancellable, int priority)
14   -// {
15   -// super(name, cancellable, priority);
16   -// }
17   -//
18   -// @Override
19   -// protected void validate(AbstractInsnNode injectionPoint, boolean cancellable, int globalEventID)
20   -// {
21   -// if (!(injectionPoint instanceof JumpInsnNode))
22   -// {
23   -// throw new IllegalArgumentException("Attempted to inject a JUMP event where no JUMP is present");
24   -// }
25   -//
26   -// super.validate(injectionPoint, cancellable, globalEventID);
27   -// }
28   -//
29   -// @Override
30   -// protected void injectCancellationCode(InsnList insns, AbstractInsnNode injectionPoint, int eventInfoVar) throws IllegalArgumentException
31   -// {
32   -// int opcode = injectionPoint.getOpcode();
33   -//
34   -// if (opcode == Opcodes.JSR) throw new IllegalArgumentException("Can't jump on finally clause");
35   -//
36   -// if (opcode == Opcodes.IFEQ || opcode == Opcodes.IFNE || opcode == Opcodes.IFLT || opcode == Opcodes.IFGE
37   -// || opcode == Opcodes.IFGT || opcode == Opcodes.IFLE || opcode == Opcodes.IFNULL || opcode == Opcodes.IFNONNULL)
38   -// {
39   -// insns.add(new InsnNode(Opcodes.POP));
40   -// }
41   -//
42   -// if (opcode == Opcodes.IF_ICMPEQ || opcode == Opcodes.IF_ICMPNE || opcode == Opcodes.IF_ICMPLT || opcode == Opcodes.IF_ICMPGE
43   -// || opcode == Opcodes.IF_ICMPGT || opcode == Opcodes.IF_ICMPLE || opcode == Opcodes.IF_ACMPEQ || opcode == Opcodes.IF_ACMPNE)
44   -// {
45   -// insns.add(new InsnNode(Opcodes.POP));
46   -// insns.add(new InsnNode(Opcodes.POP));
47   -// }
48   -//
49   -// insns.add(new VarInsnNode(Opcodes.ALOAD, eventInfoVar));
50   -// insns.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, this.eventInfoClass, "isCancelled", "()Z"));
51   -//
52   -// ((JumpInsnNode)injectionPoint).setOpcode(Opcodes.IFEQ);
53   -// }
54   -//}
java/common/com/mumfrey/liteloader/transformers/event/ReadOnlyInsnList.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event;
2   -
3   -import java.util.ListIterator;
4   -
5   -import org.objectweb.asm.tree.AbstractInsnNode;
6   -import org.objectweb.asm.tree.InsnList;
7   -
8   -/**
9   - * Read-only wrapper for InsnList
10   - *
11   - * @author Adam Mummery-Smith
12   - */
13   -public class ReadOnlyInsnList extends InsnList
14   -{
15   - private InsnList insnList;
16   -
17   - public ReadOnlyInsnList(InsnList insns)
18   - {
19   - this.insnList = insns;
20   - }
21   -
22   - void dispose()
23   - {
24   - this.insnList = null;
25   - }
26   -
27   - @Override
28   - public void set(AbstractInsnNode location, AbstractInsnNode insn)
29   - {
30   - throw new UnsupportedOperationException();
31   - }
32   -
33   - @Override
34   - public void add(AbstractInsnNode insn)
35   - {
36   - throw new UnsupportedOperationException();
37   - }
38   -
39   - @Override
40   - public void add(InsnList insns)
41   - {
42   - throw new UnsupportedOperationException();
43   - }
44   -
45   - @Override
46   - public void insert(AbstractInsnNode insn)
47   - {
48   - throw new UnsupportedOperationException();
49   - }
50   -
51   - @Override
52   - public void insert(InsnList insns)
53   - {
54   - throw new UnsupportedOperationException();
55   - }
56   -
57   - @Override
58   - public void insert(AbstractInsnNode location, AbstractInsnNode insn)
59   - {
60   - throw new UnsupportedOperationException();
61   - }
62   -
63   - @Override
64   - public void insert(AbstractInsnNode location, InsnList insns)
65   - {
66   - throw new UnsupportedOperationException();
67   - }
68   -
69   - @Override
70   - public void insertBefore(AbstractInsnNode location, AbstractInsnNode insn)
71   - {
72   - throw new UnsupportedOperationException();
73   - }
74   -
75   - @Override
76   - public void insertBefore(AbstractInsnNode location, InsnList insns)
77   - {
78   - throw new UnsupportedOperationException();
79   - }
80   -
81   - @Override
82   - public void remove(AbstractInsnNode insn)
83   - {
84   - throw new UnsupportedOperationException();
85   - }
86   -
87   - @Override
88   - public AbstractInsnNode[] toArray()
89   - {
90   -// throw new UnsupportedOperationException();
91   - return this.insnList.toArray();
92   - }
93   -
94   - @Override
95   - public int size()
96   - {
97   - return this.insnList.size();
98   - }
99   -
100   - @Override
101   - public AbstractInsnNode getFirst()
102   - {
103   - return this.insnList.getFirst();
104   - }
105   -
106   - @Override
107   - public AbstractInsnNode getLast()
108   - {
109   - return this.insnList.getLast();
110   - }
111   -
112   - @Override
113   - public AbstractInsnNode get(int index)
114   - {
115   - return this.insnList.get(index);
116   - }
117   -
118   - @Override
119   - public boolean contains(AbstractInsnNode insn)
120   - {
121   - return this.insnList.contains(insn);
122   - }
123   -
124   - @Override
125   - public int indexOf(AbstractInsnNode insn)
126   - {
127   - return this.insnList.indexOf(insn);
128   - }
129   -
130   - @Override
131   - public ListIterator<AbstractInsnNode> iterator()
132   - {
133   - return this.insnList.iterator();
134   - }
135   -
136   - @Override
137   - public ListIterator<AbstractInsnNode> iterator(int index)
138   - {
139   - return this.insnList.iterator(index);
140   - }
141   -
142   - @Override
143   - public void resetLabels()
144   - {
145   - this.insnList.resetLabels();
146   - }
147   -}
java/common/com/mumfrey/liteloader/transformers/event/ReturnEventInfo.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event;
2   -
3   -import org.objectweb.asm.Type;
4   -
5   -import com.mumfrey.liteloader.core.event.EventCancellationException;
6   -
7   -/**
8   - * EventInfo for events which have a return type
9   - *
10   - * @author Adam Mummery-Smith
11   - *
12   - * @param <S> Source object type. For non-static methods this will be the containing object instance.
13   - * @param <R> Return type
14   - */
15   -public class ReturnEventInfo<S, R> extends EventInfo<S>
16   -{
17   - private R returnValue;
18   -
19   - public ReturnEventInfo(String name, S source, boolean cancellable)
20   - {
21   - super(name, source, cancellable);
22   - this.returnValue = null;
23   - }
24   -
25   - public ReturnEventInfo(String name, S source, boolean cancellable, R returnValue)
26   - {
27   - super(name, source, cancellable);
28   - this.returnValue = returnValue;
29   - }
30   -
31   - @SuppressWarnings("unchecked")
32   - public ReturnEventInfo(String name, S source, boolean cancellable, byte returnValue)
33   - {
34   - super(name, source, cancellable);
35   - this.returnValue = (R)Byte.valueOf(returnValue);
36   - }
37   -
38   - @SuppressWarnings("unchecked")
39   - public ReturnEventInfo(String name, S source, boolean cancellable, char returnValue)
40   - {
41   - super(name, source, cancellable);
42   - this.returnValue = (R)Character.valueOf(returnValue);
43   - }
44   -
45   - @SuppressWarnings("unchecked")
46   - public ReturnEventInfo(String name, S source, boolean cancellable, double returnValue)
47   - {
48   - super(name, source, cancellable);
49   - this.returnValue = (R)Double.valueOf(returnValue);
50   - }
51   -
52   - @SuppressWarnings("unchecked")
53   - public ReturnEventInfo(String name, S source, boolean cancellable, float returnValue)
54   - {
55   - super(name, source, cancellable);
56   - this.returnValue = (R)Float.valueOf(returnValue);
57   - }
58   -
59   - @SuppressWarnings("unchecked")
60   - public ReturnEventInfo(String name, S source, boolean cancellable, int returnValue)
61   - {
62   - super(name, source, cancellable);
63   - this.returnValue = (R)Integer.valueOf(returnValue);
64   - }
65   -
66   - @SuppressWarnings("unchecked")
67   - public ReturnEventInfo(String name, S source, boolean cancellable, long returnValue)
68   - {
69   - super(name, source, cancellable);
70   - this.returnValue = (R)Long.valueOf(returnValue);
71   - }
72   -
73   - @SuppressWarnings("unchecked")
74   - public ReturnEventInfo(String name, S source, boolean cancellable, short returnValue)
75   - {
76   - super(name, source, cancellable);
77   - this.returnValue = (R)Short.valueOf(returnValue);
78   - }
79   -
80   - @SuppressWarnings("unchecked")
81   - public ReturnEventInfo(String name, S source, boolean cancellable, boolean returnValue)
82   - {
83   - super(name, source, cancellable);
84   - this.returnValue = (R)Boolean.valueOf(returnValue);
85   - }
86   -
87   - /**
88   - * Sets a return value for this event and cancels the event (required in order to return the new value)
89   - *
90   - * @param returnValue
91   - */
92   - public void setReturnValue(R returnValue) throws EventCancellationException
93   - {
94   - super.cancel();
95   -
96   - this.returnValue = returnValue;
97   - }
98   -
99   - public R getReturnValue()
100   - {
101   - return this.returnValue;
102   - }
103   -
104   - // All of the accessors below are to avoid having to generate unboxing conversions in bytecode
105   - public byte getReturnValueB() { if (this.returnValue == null) return 0; return (Byte) this.returnValue; }
106   - public char getReturnValueC() { if (this.returnValue == null) return 0; return (Character)this.returnValue; }
107   - public double getReturnValueD() { if (this.returnValue == null) return 0.0; return (Double) this.returnValue; }
108   - public float getReturnValueF() { if (this.returnValue == null) return 0.0F; return (Float) this.returnValue; }
109   - public int getReturnValueI() { if (this.returnValue == null) return 0; return (Integer) this.returnValue; }
110   - public long getReturnValueJ() { if (this.returnValue == null) return 0; return (Long) this.returnValue; }
111   - public short getReturnValueS() { if (this.returnValue == null) return 0; return (Short) this.returnValue; }
112   - public boolean getReturnValueZ() { if (this.returnValue == null) return false; return (Boolean) this.returnValue; }
113   -
114   - public static String getReturnAccessor(Type returnType)
115   - {
116   - if (returnType.getSort() == Type.OBJECT)
117   - {
118   - return "getReturnValue";
119   - }
120   -
121   - return String.format("getReturnValue%s", returnType.getDescriptor());
122   - }
123   -
124   - public static String getReturnDescriptor(Type returnType)
125   - {
126   - if (returnType.getSort() == Type.OBJECT)
127   - {
128   - return String.format("()%s", EventInfo.OBJECT);
129   - }
130   -
131   - return String.format("()%s", returnType.getDescriptor());
132   - }
133   -}
java/common/com/mumfrey/liteloader/transformers/event/inject/BeforeFieldAccess.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.inject;
2   -
3   -import org.objectweb.asm.tree.AbstractInsnNode;
4   -import org.objectweb.asm.tree.FieldInsnNode;
5   -
6   -import com.mumfrey.liteloader.core.runtime.Obf;
7   -import com.mumfrey.liteloader.transformers.event.MethodInfo;
8   -
9   -/**
10   - * An injection point which searches for GETFIELD and SETFIELD opcodes matching its arguments and returns a list of insns
11   - * immediately prior to matching instructions. Only the field name is required, owners and signatures are optional and can
12   - * be used to disambiguate between fields of the same name but with different types, or belonging to different classes.
13   - *
14   - * @author Adam Mummery-Smith
15   - */
16   -public class BeforeFieldAccess extends BeforeInvoke
17   -{
18   - private final int opcode;
19   -
20   - public BeforeFieldAccess(int opcode, String... fieldNames)
21   - {
22   - super(fieldNames);
23   - this.opcode = opcode;
24   - }
25   -
26   - public BeforeFieldAccess(int opcode, String fieldName, int ordinal)
27   - {
28   - super(fieldName, ordinal);
29   - this.opcode = opcode;
30   - }
31   -
32   - public BeforeFieldAccess(int opcode, String[] fieldNames, int ordinal)
33   - {
34   - super(fieldNames, ordinal);
35   - this.opcode = opcode;
36   - }
37   -
38   - public BeforeFieldAccess(int opcode, String[] fieldNames, String[] fieldOwners)
39   - {
40   - super(fieldNames, fieldOwners);
41   - this.opcode = opcode;
42   - }
43   -
44   - public BeforeFieldAccess(int opcode, String[] fieldNames, String[] fieldOwners, int ordinal)
45   - {
46   - super(fieldNames, fieldOwners, ordinal);
47   - this.opcode = opcode;
48   - }
49   -
50   - public BeforeFieldAccess(int opcode, String[] fieldNames, String[] fieldOwners, String[] fieldSignatures)
51   - {
52   - super(fieldNames, fieldOwners, fieldSignatures);
53   - this.opcode = opcode;
54   - }
55   -
56   - public BeforeFieldAccess(int opcode, String[] fieldNames, String[] fieldOwners, String[] fieldSignatures, int ordinal)
57   - {
58   - super(fieldNames, fieldOwners, fieldSignatures, ordinal);
59   - this.opcode = opcode;
60   - }
61   -
62   - public BeforeFieldAccess(int opcode, Obf fieldNames, int ordinal)
63   - {
64   - super(fieldNames.names, ordinal);
65   - this.opcode = opcode;
66   - }
67   -
68   - public BeforeFieldAccess(int opcode, Obf fieldNames, Obf fieldOwners)
69   - {
70   - super(fieldNames.names, fieldOwners.names);
71   - this.opcode = opcode;
72   - }
73   -
74   - public BeforeFieldAccess(int opcode, Obf fieldNames, Obf fieldOwners, int ordinal)
75   - {
76   - super(fieldNames.names, fieldOwners.names, ordinal);
77   - this.opcode = opcode;
78   - }
79   -
80   - public BeforeFieldAccess(int opcode, MethodInfo fieldInfo)
81   - {
82   - super(fieldInfo);
83   - this.opcode = opcode;
84   - }
85   -
86   - public BeforeFieldAccess(int opcode, MethodInfo fieldInfo, int ordinal)
87   - {
88   - super(fieldInfo, ordinal);
89   - this.opcode = opcode;
90   - }
91   -
92   - @Override
93   - protected boolean matchesInsn(AbstractInsnNode insn)
94   - {
95   - return insn instanceof FieldInsnNode && ((FieldInsnNode)insn).getOpcode() == this.opcode;
96   - }
97   -}
java/common/com/mumfrey/liteloader/transformers/event/inject/BeforeNew.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.inject;
2   -
3   -import java.util.Collection;
4   -import java.util.ListIterator;
5   -
6   -import org.objectweb.asm.Opcodes;
7   -import org.objectweb.asm.tree.AbstractInsnNode;
8   -import org.objectweb.asm.tree.InsnList;
9   -import org.objectweb.asm.tree.TypeInsnNode;
10   -
11   -import com.mumfrey.liteloader.core.runtime.Obf;
12   -import com.mumfrey.liteloader.transformers.event.Event;
13   -import com.mumfrey.liteloader.transformers.event.InjectionPoint;
14   -
15   -public class BeforeNew extends InjectionPoint
16   -{
17   - private final String[] classNames;
18   -
19   - private final int ordinal;
20   -
21   - public BeforeNew(Obf className)
22   - {
23   - this(-1, className.names);
24   - }
25   -
26   - public BeforeNew(String... classNames)
27   - {
28   - this(-1, classNames);
29   - }
30   -
31   - public BeforeNew(int ordinal, Obf className)
32   - {
33   - this(ordinal, className.names);
34   - }
35   -
36   - public BeforeNew(int ordinal, String... classNames)
37   - {
38   - this.ordinal = Math.max(-1, ordinal);
39   - this.classNames = classNames;
40   -
41   - for (int i = 0; i < this.classNames.length; i++)
42   - {
43   - this.classNames[i] = this.classNames[i].replace('.', '/');
44   - }
45   - }
46   -
47   - @Override
48   - public boolean find(String desc, InsnList insns, Collection<AbstractInsnNode> nodes, Event event)
49   - {
50   - boolean found = false;
51   - int ordinal = 0;
52   -
53   - ListIterator<AbstractInsnNode> iter = insns.iterator();
54   - while (iter.hasNext())
55   - {
56   - AbstractInsnNode insn = iter.next();
57   -
58   - if (insn instanceof TypeInsnNode && insn.getOpcode() == Opcodes.NEW && this.matchesOwner((TypeInsnNode)insn))
59   - {
60   - if (this.ordinal == -1 || this.ordinal == ordinal)
61   - {
62   - nodes.add(insn);
63   - found = true;
64   - }
65   -
66   - ordinal++;
67   - }
68   - }
69   -
70   - return found;
71   - }
72   -
73   - private boolean matchesOwner(TypeInsnNode insn)
74   - {
75   - for (String className : this.classNames)
76   - {
77   - if (className.equals(insn.desc)) return true;
78   - }
79   -
80   - return false;
81   - }
82   -
83   -}
java/common/com/mumfrey/liteloader/transformers/event/inject/BeforeReturn.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.inject;
2   -
3   -import java.util.Collection;
4   -import java.util.ListIterator;
5   -
6   -import org.objectweb.asm.Opcodes;
7   -import org.objectweb.asm.Type;
8   -import org.objectweb.asm.tree.AbstractInsnNode;
9   -import org.objectweb.asm.tree.InsnList;
10   -import org.objectweb.asm.tree.InsnNode;
11   -
12   -import com.mumfrey.liteloader.transformers.event.Event;
13   -import com.mumfrey.liteloader.transformers.event.InjectionPoint;
14   -
15   -/**
16   - * An injection point which searches for RETURN opcodes in the supplied method and either finds all insns or
17   - * the insn at the specified ordinal
18   - *
19   - * @author Adam Mummery-Smith
20   - */
21   -public class BeforeReturn extends InjectionPoint
22   -{
23   - private final int ordinal;
24   -
25   - public BeforeReturn()
26   - {
27   - this(-1);
28   - }
29   -
30   - public BeforeReturn(int ordinal)
31   - {
32   - this.ordinal = Math.max(-1, ordinal);
33   - }
34   -
35   - @Override
36   - public boolean find(String desc, InsnList insns, Collection<AbstractInsnNode> nodes, Event event)
37   - {
38   - boolean found = false;
39   - int returnOpcode = Type.getReturnType(desc).getOpcode(Opcodes.IRETURN);
40   - int ordinal = 0;
41   -
42   - ListIterator<AbstractInsnNode> iter = insns.iterator();
43   - while (iter.hasNext())
44   - {
45   - AbstractInsnNode insn = iter.next();
46   -
47   - if (insn instanceof InsnNode && insn.getOpcode() == returnOpcode)
48   - {
49   - if (this.ordinal == -1 || this.ordinal == ordinal)
50   - {
51   - nodes.add(insn);
52   - found = true;
53   - }
54   -
55   - ordinal++;
56   - }
57   - }
58   -
59   - return found;
60   - }
61   -}
java/common/com/mumfrey/liteloader/transformers/event/inject/BeforeStringInvoke.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.inject;
2   -
3   -import java.util.Collection;
4   -
5   -import org.objectweb.asm.tree.AbstractInsnNode;
6   -import org.objectweb.asm.tree.InsnList;
7   -import org.objectweb.asm.tree.LdcInsnNode;
8   -
9   -import com.mumfrey.liteloader.transformers.event.Event;
10   -import com.mumfrey.liteloader.transformers.event.MethodInfo;
11   -import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
12   -
13   -/**
14   - * An injection point which searches for a matching String LDC insn immediately prior to a qualifying invoke
15   - *
16   - * @author Adam Mummery-Smith
17   - */
18   -public class BeforeStringInvoke extends BeforeInvoke
19   -{
20   - private static final String STRING_VOID_SIG = "(Ljava/lang/String;)V";
21   -
22   - private final String ldcValue;
23   -
24   - private boolean foundLdc;
25   -
26   - public BeforeStringInvoke(String ldcValue, MethodInfo method)
27   - {
28   - this(ldcValue, method, -1);
29   - }
30   -
31   - public BeforeStringInvoke(String ldcValue, MethodInfo method, int ordinal)
32   - {
33   - super(method, ordinal);
34   - this.ldcValue = ldcValue;
35   -
36   - for (int i = 0; i < this.methodSignatures.length; i++)
37   - if (!STRING_VOID_SIG.equals(this.methodSignatures[i]))
38   - throw new IllegalArgumentException("BeforeStringInvoke requires method with with signature " + STRING_VOID_SIG);
39   - }
40   -
41   - @Override
42   - public boolean find(String desc, InsnList insns, Collection<AbstractInsnNode> nodes, Event event)
43   - {
44   - this.foundLdc = false;
45   -
46   - return super.find(desc, insns, nodes, event);
47   - }
48   -
49   - @Override
50   - protected void inspectInsn(String desc, InsnList insns, AbstractInsnNode insn)
51   - {
52   - if (insn instanceof LdcInsnNode)
53   - {
54   - LdcInsnNode node = (LdcInsnNode)insn;
55   - if (node.cst instanceof String && this.ldcValue.equals(node.cst))
56   - {
57   - if (this.logging) LiteLoaderLogger.info("BeforeInvoke found a matching LDC with value %s", node.cst);
58   - this.foundLdc = true;
59   - return;
60   - }
61   - }
62   -
63   - this.foundLdc = false;
64   - }
65   -
66   - @Override
67   - protected boolean matchesInsn(InsnInfo nodeInfo, int ordinal)
68   - {
69   - if (this.logging) LiteLoaderLogger.debug("BeforeInvoke foundLdc \"%s\" = %s", this.ldcValue, this.foundLdc);
70   - return this.foundLdc && super.matchesInsn(nodeInfo, ordinal);
71   - }
72   -}
java/common/com/mumfrey/liteloader/transformers/event/inject/JumpInsnPoint.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.inject;
2   -
3   -import java.util.Collection;
4   -import java.util.ListIterator;
5   -
6   -import org.objectweb.asm.tree.AbstractInsnNode;
7   -import org.objectweb.asm.tree.InsnList;
8   -import org.objectweb.asm.tree.JumpInsnNode;
9   -
10   -import com.mumfrey.liteloader.transformers.event.Event;
11   -import com.mumfrey.liteloader.transformers.event.InjectionPoint;
12   -
13   -/**
14   - * An injection point which searches for JUMP opcodes (if, try/catch, continue, break, conditional assignment, etc.)
15   - * with either a particular opcode or at a particular ordinal in the method body (eg. "the Nth JUMP insn" where N is the
16   - * ordinal of the instruction). By default it returns all JUMP instructions in a method body.
17   - *
18   - * @author Adam Mummery-Smith
19   - */
20   -public class JumpInsnPoint extends InjectionPoint
21   -{
22   - private final int opCode;
23   -
24   - private final int ordinal;
25   -
26   - public JumpInsnPoint()
27   - {
28   - this(0, -1);
29   - }
30   -
31   - public JumpInsnPoint(int ordinal)
32   - {
33   - this(0, ordinal);
34   - }
35   -
36   - public JumpInsnPoint(int opCode, int ordinal)
37   - {
38   - this.opCode = opCode;
39   - this.ordinal = ordinal;
40   - }
41   -
42   - @Override
43   - public boolean find(String desc, InsnList insns, Collection<AbstractInsnNode> nodes, Event event)
44   - {
45   - boolean found = false;
46   - int ordinal = 0;
47   -
48   - ListIterator<AbstractInsnNode> iter = insns.iterator();
49   - while (iter.hasNext())
50   - {
51   - AbstractInsnNode insn = iter.next();
52   -
53   - if (insn instanceof JumpInsnNode && (this.opCode == -1 || insn.getOpcode() == this.opCode))
54   - {
55   - if (this.ordinal == -1 || this.ordinal == ordinal)
56   - {
57   - nodes.add(insn);
58   - found = true;
59   - }
60   -
61   - ordinal++;
62   - }
63   - }
64   -
65   - return found;
66   - }
67   -}
java/common/com/mumfrey/liteloader/transformers/event/json/JsonDescriptor.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import java.io.Serializable;
4   -import java.util.UUID;
5   -
6   -import com.google.gson.annotations.SerializedName;
7   -import com.mumfrey.liteloader.core.runtime.Obf;
8   -import com.mumfrey.liteloader.transformers.event.MethodInfo;
9   -
10   -/**
11   - * A JSON method descriptor,
12   - *
13   - * @author Adam Mummery-Smith
14   - */
15   -public class JsonDescriptor implements Serializable
16   -{
17   - private static final long serialVersionUID = 1L;
18   -
19   - /**
20   - * Key used to refer to this method descriptor elsewhere
21   - */
22   - @SerializedName("id")
23   - private String key;
24   -
25   - /**
26   - * Name of the class which owns this method
27   - */
28   - @SerializedName("owner")
29   - private String owner;
30   -
31   - /**
32   - * Method name
33   - */
34   - @SerializedName("name")
35   - private String name;
36   -
37   - /**
38   - * Method return type, assumes VOID if none specified
39   - */
40   - @SerializedName("return")
41   - private String returnType;
42   -
43   - /**
44   - * Argument types for the method
45   - */
46   - @SerializedName("args")
47   - private String[] argumentTypes;
48   -
49   - /**
50   - * Get the key used to refer to this method descriptor
51   - */
52   - public String getKey()
53   - {
54   - if (this.key == null)
55   - {
56   - this.key = "UserDescriptor" + UUID.randomUUID().toString();
57   - }
58   -
59   - return this.key;
60   - }
61   -
62   - /**
63   - * @param obfTable
64   - * @return MethodInfo for this descriptor
65   - */
66   - public MethodInfo parse(JsonObfuscationTable obfTable)
67   - {
68   - if (this.owner == null || this.name == null)
69   - {
70   - throw new InvalidEventJsonException("Method descriptor was invalid, must specify owner and name!");
71   - }
72   -
73   - Obf owner = obfTable.parseClass(this.owner);
74   - Obf name = obfTable.parseMethod(this.name);
75   -
76   - if (this.argumentTypes == null && this.returnType == null)
77   - {
78   - return new MethodInfo(owner, name);
79   - }
80   -
81   - Object returnType = obfTable.parseType(this.returnType == null ? "VOID" : this.returnType);
82   - Object[] args = (this.argumentTypes != null ? new Object[this.argumentTypes.length] : new Object[0]);
83   - if (this.argumentTypes != null)
84   - {
85   - for (int arg = 0; arg < this.argumentTypes.length; arg++)
86   - {
87   - args[arg] = obfTable.parseType(this.argumentTypes[arg]);
88   - }
89   - }
90   -
91   - return new MethodInfo(owner, name, returnType, args);
92   - }
93   -}
java/common/com/mumfrey/liteloader/transformers/event/json/JsonEvent.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import java.io.Serializable;
4   -import java.util.ArrayList;
5   -import java.util.List;
6   -
7   -import com.google.gson.annotations.SerializedName;
8   -import com.mumfrey.liteloader.transformers.event.Event;
9   -import com.mumfrey.liteloader.transformers.event.InjectionPoint;
10   -import com.mumfrey.liteloader.transformers.event.MethodInfo;
11   -
12   -/**
13   - * An event definition in JSON, serialisable class read by Gson
14   - *
15   - * @author Adam Mummery-Smith
16   - */
17   -public class JsonEvent implements Serializable
18   -{
19   - private static final long serialVersionUID = 1L;
20   -
21   - private static int nextEventID = 0;
22   -
23   - /**
24   - * Event name
25   - */
26   - @SerializedName("name")
27   - private String name;
28   -
29   - /**
30   - * Whether the event is cancellable
31   - */
32   - @SerializedName("cancellable")
33   - private boolean cancellable;
34   -
35   - /**
36   - * Event priority (relative to other events at the same injection point)
37   - */
38   - @SerializedName("priority")
39   - private int priority = 1000;
40   -
41   - /**
42   - * Injection points specified in the JSON file
43   - */
44   - @SerializedName("injections")
45   - private List<JsonInjection> jsonInjections;
46   -
47   - /**
48   - * Listeners defined in the JSON file
49   - */
50   - @SerializedName("listeners")
51   - private List<String> jsonListeners;
52   -
53   - /**
54   - * Listener methods parsed from the JSON
55   - */
56   - private transient List<MethodInfo> listeners = new ArrayList<MethodInfo>();
57   -
58   - /**
59   - * Get the name of this event
60   - */
61   - public String getName()
62   - {
63   - if (this.name == null)
64   - {
65   - this.name = "onUserEvent" + (JsonEvent.nextEventID++);
66   - }
67   -
68   - return this.name;
69   - }
70   -
71   - /**
72   - * Get whether this event is cancellable or not
73   - */
74   - public boolean isCancellable()
75   - {
76   - return this.cancellable;
77   - }
78   -
79   - /**
80   - * Get the event priority
81   - */
82   - public int getPriority()
83   - {
84   - return this.priority;
85   - }
86   -
87   - /**
88   - * Get the list of listeners parsed from the JSON
89   - */
90   - public List<MethodInfo> getListeners()
91   - {
92   - return this.listeners;
93   - }
94   -
95   - /**
96   - * Parse the JSON to initialise this object
97   - */
98   - public void parse(JsonMethods methods)
99   - {
100   - this.parseInjectionPoints(methods);
101   - this.parseListeners(methods);
102   - }
103   -
104   - /**
105   - * @param methods
106   - */
107   - private void parseInjectionPoints(JsonMethods methods)
108   - {
109   - if (this.jsonInjections == null || this.jsonInjections.isEmpty())
110   - {
111   - throw new InvalidEventJsonException("Event " + this.getName() + " does not have any defined injections");
112   - }
113   -
114   - for (JsonInjection injection : this.jsonInjections)
115   - {
116   - injection.parse(methods);
117   - }
118   - }
119   -
120   - /**
121   - * @param methods
122   - */
123   - private void parseListeners(JsonMethods methods)
124   - {
125   - if (this.jsonListeners == null || this.jsonListeners.isEmpty())
126   - {
127   - throw new InvalidEventJsonException("Event " + this.getName() + " does not have any defined listeners");
128   - }
129   -
130   - for (String listener : this.jsonListeners)
131   - {
132   - this.listeners.add(methods.get(listener));
133   - }
134   - }
135   -
136   - /**
137   - * @param transformer Transformer to register events with
138   - * @return Event which was registered
139   - */
140   - public Event register(ModEventInjectionTransformer transformer)
141   - {
142   - Event event = Event.getOrCreate(this.getName(), this.isCancellable(), this.getPriority());
143   -
144   - for (JsonInjection injection : this.jsonInjections)
145   - {
146   - MethodInfo targetMethod = injection.getMethod();
147   - InjectionPoint injectionPoint = injection.getInjectionPoint();
148   -
149   - transformer.registerEvent(event, targetMethod, injectionPoint);
150   - }
151   -
152   - for (MethodInfo listener : this.listeners)
153   - {
154   - event.addListener(listener);
155   - }
156   -
157   - return event;
158   - }
159   -}
java/common/com/mumfrey/liteloader/transformers/event/json/JsonEvents.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import java.io.Serializable;
4   -import java.util.ArrayList;
5   -import java.util.List;
6   -import java.util.regex.Matcher;
7   -import java.util.regex.Pattern;
8   -
9   -import com.google.gson.Gson;
10   -import com.google.gson.GsonBuilder;
11   -import com.google.gson.annotations.SerializedName;
12   -import com.mumfrey.liteloader.core.runtime.Obf;
13   -import com.mumfrey.liteloader.transformers.ObfProvider;
14   -
15   -/**
16   - * Serialisable class which represents a set of event injection definitions. Instances of this class are
17   - * created by deserialising with JSON. The JSON string should be passed to the static {@link #parse} method
18   - * which returns an instance of the class.
19   - *
20   - * After parsing, the events defined here can be injected into an event transformer instance by calling the
21   - * {@link #register} method
22   - *
23   - * @author Adam Mummery-Smith
24   - */
25   -public class JsonEvents implements Serializable, ObfProvider
26   -{
27   - private static final long serialVersionUID = 1L;
28   -
29   - private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
30   -
31   - /**
32   - * Tokens are an instruction to the parser to look up a value rather than using a literal
33   - */
34   - private static final Pattern tokenPattern = Pattern.compile("^\\$\\{([a-zA-Z0-9_\\-\\.\\$]+)\\}$");
35   -
36   - /**
37   - * Serialised obfusctation entries
38   - */
39   - @SerializedName("obfuscation")
40   - private JsonObfuscationTable obfuscation;
41   -
42   - /**
43   - * Serialised method descriptors
44   - */
45   - @SerializedName("descriptors")
46   - private List<JsonDescriptor> descriptors;
47   -
48   - /**
49   - * Serialised events
50   - */
51   - @SerializedName("events")
52   - private List<JsonEvent> events;
53   -
54   - /**
55   - * List of accessor interfaces
56   - */
57   - @SerializedName("accessors")
58   - private List<String> accessors;
59   -
60   - /**
61   - * Parsed method descriptors
62   - */
63   - private transient JsonMethods methods;
64   -
65   - /**
66   - * Parsed accessors
67   - */
68   - private transient List<String> accessorInterfaces = new ArrayList<String>();
69   -
70   - /**
71   - * Attempts to parse the information in this object
72   - */
73   - private void parse()
74   - {
75   - if (this.obfuscation == null)
76   - {
77   - this.obfuscation = new JsonObfuscationTable();
78   - }
79   -
80   - try
81   - {
82   - // Parse the obfuscation table
83   - this.obfuscation.parse();
84   -
85   - // Parse the descriptor list
86   - this.methods = new JsonMethods(this.obfuscation, this.descriptors);
87   -
88   - if (this.events != null)
89   - {
90   - // Parse the events
91   - for (JsonEvent event : this.events)
92   - {
93   - event.parse(this.methods);
94   - }
95   - }
96   -
97   - if (this.accessors != null)
98   - {
99   - for (String accessor : this.accessors)
100   - {
101   - if (accessor != null)
102   - {
103   - Obf accessorName = this.obfuscation.parseClass(accessor);
104   - this.accessorInterfaces.add(accessorName.name);
105   - }
106   - }
107   - }
108   - }
109   - catch (InvalidEventJsonException ex)
110   - {
111   - throw ex;
112   - }
113   - catch (Exception ex)
114   - {
115   - throw new InvalidEventJsonException("An error occurred whilst parsing the event definition: " + ex.getClass().getSimpleName() + ": " + ex.getMessage(), ex);
116   - }
117   - }
118   -
119   - public boolean hasAccessors()
120   - {
121   - return this.accessorInterfaces.size() > 0;
122   - }
123   -
124   - /**
125   - * Parse a token name, returns the token name as a string if the token is valid, or null if the token is not valid
126   - *
127   - * @param token
128   - */
129   - static String parseToken(String token)
130   - {
131   - token = token.replace(" ", "").trim();
132   -
133   - Matcher tokenPatternMatcher = JsonEvents.tokenPattern.matcher(token);
134   - if (tokenPatternMatcher.matches())
135   - {
136   - return tokenPatternMatcher.group(1);
137   - }
138   -
139   - return null;
140   - }
141   -
142   - /**
143   - * Called to register all events defined in this object into the specified transformer
144   - *
145   - * @param transformer
146   - */
147   - public void register(ModEventInjectionTransformer transformer)
148   - {
149   - for (JsonEvent event : this.events)
150   - {
151   - event.register(transformer);
152   - }
153   -
154   - for (String interfaceName : this.accessorInterfaces)
155   - {
156   - transformer.registerAccessor(interfaceName, this);
157   - }
158   - }
159   -
160   - /* (non-Javadoc)
161   - * @see com.mumfrey.liteloader.transformers.ObfProvider#getByName(java.lang.String)
162   - */
163   - @Override
164   - public Obf getByName(String name)
165   - {
166   - return this.obfuscation.getByName(name);
167   - }
168   -
169   -// public String toJson()
170   -// {
171   -// return JsonEvents.gson.toJson(this);
172   -// }
173   -
174   - /**
175   - * Parse a new JsonEvents object from the supplied JSON string
176   - *
177   - * @param json
178   - * @return new JsonEvents instance
179   - * @throws InvalidEventJsonException if the JSON ins invalid
180   - */
181   - public static JsonEvents parse(String json) throws InvalidEventJsonException
182   - {
183   - try
184   - {
185   - JsonEvents newJsonEvents = JsonEvents.gson.fromJson(json, JsonEvents.class);
186   - newJsonEvents.parse();
187   - return newJsonEvents;
188   - }
189   - catch (InvalidEventJsonException ex)
190   - {
191   - throw ex;
192   - }
193   - catch (Throwable th)
194   - {
195   - throw new InvalidEventJsonException("An error occurred whilst parsing the event definition: " + th.getClass().getSimpleName() + ": " + th.getMessage(), th);
196   - }
197   - }
198   -}
java/common/com/mumfrey/liteloader/transformers/event/json/JsonInjection.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import java.io.Serializable;
4   -import java.lang.reflect.Constructor;
5   -
6   -import com.google.gson.annotations.SerializedName;
7   -import com.mumfrey.liteloader.transformers.event.InjectionPoint;
8   -import com.mumfrey.liteloader.transformers.event.MethodInfo;
9   -import com.mumfrey.liteloader.transformers.event.inject.BeforeInvoke;
10   -import com.mumfrey.liteloader.transformers.event.inject.BeforeReturn;
11   -import com.mumfrey.liteloader.transformers.event.inject.BeforeStringInvoke;
12   -import com.mumfrey.liteloader.transformers.event.inject.MethodHead;
13   -
14   -/**
15   - * A JSON injection point definition
16   - *
17   - * @author Adam Mummery-Smith
18   - */
19   -public class JsonInjection implements Serializable
20   -{
21   - private static final long serialVersionUID = 1L;
22   -
23   - /**
24   - * Method to inject into
25   - */
26   - @SerializedName("method")
27   - private String methodName;
28   -
29   - /**
30   - * Type of injection point
31   - */
32   - @SerializedName("type")
33   - private JsonInjectionType type;
34   -
35   - /**
36   - * Shift type (optional)
37   - */
38   - @SerializedName("shift")
39   - private JsonInjectionShiftType shift;
40   -
41   - /**
42   - * Target method to search for when using INVOKE and INVOKESTRING
43   - */
44   - @SerializedName("target")
45   - private String target;
46   -
47   - /**
48   - * Ordinal to use when using INVOKE and INVOKESTRING
49   - */
50   - @SerializedName("ordinal")
51   - private int ordinal = -1;
52   -
53   - /**
54   - * InjectionPoint class to use for CUSTOM
55   - */
56   - @SerializedName("class")
57   - private String className;
58   -
59   - /**
60   - * Constructor arguments to pass wehn using CUSTOM
61   - */
62   - @SerializedName("args")
63   - private Object[] args;
64   -
65   - private transient MethodInfo method;
66   -
67   - private transient InjectionPoint injectionPoint;
68   -
69   - public MethodInfo getMethod()
70   - {
71   - return this.method;
72   - }
73   -
74   - public InjectionPoint getInjectionPoint()
75   - {
76   - return this.injectionPoint;
77   - }
78   -
79   - public void parse(JsonMethods methods)
80   - {
81   - this.method = this.parseMethod(methods);
82   - this.injectionPoint = this.parseInjectionPoint(methods);
83   - }
84   -
85   - private MethodInfo parseMethod(JsonMethods methods)
86   - {
87   - try
88   - {
89   - return methods.get(this.methodName);
90   - }
91   - catch (NullPointerException ex)
92   - {
93   - throw new InvalidEventJsonException("'method' must not be null for injection");
94   - }
95   - }
96   -
97   - public InjectionPoint parseInjectionPoint(JsonMethods methods)
98   - {
99   - switch (this.type)
100   - {
101   - case INVOKE:
102   - return this.applyShift(new BeforeInvoke(methods.get(this.getTarget()), this.ordinal));
103   -
104   - case INVOKESTRING:
105   - return this.applyShift(new BeforeStringInvoke(this.getArg(0).toString(), methods.get(this.getTarget()), this.ordinal));
106   -
107   - case RETURN:
108   - return this.applyShift(new BeforeReturn(this.ordinal));
109   -
110   - case HEAD:
111   - return new MethodHead();
112   -
113   - case CUSTOM:
114   - try
115   - {
116   - @SuppressWarnings("unchecked")
117   - Class<InjectionPoint> injectionPointClass = (Class<InjectionPoint>)Class.forName(this.className);
118   - if (this.args != null)
119   - {
120   - Constructor<InjectionPoint> ctor = injectionPointClass.getDeclaredConstructor(Object[].class);
121   - return ctor.newInstance(this.args);
122   - }
123   - return injectionPointClass.newInstance();
124   - }
125   - catch (Exception ex)
126   - {
127   - throw new RuntimeException(ex);
128   - }
129   - }
130   -
131   - throw new InvalidEventJsonException("Could not parse injection type");
132   - }
133   -
134   - private Object getArg(int arg)
135   - {
136   - if (this.args == null || this.args.length >= this.args.length || arg < 0)
137   - return "";
138   -
139   - return this.args[arg];
140   - }
141   -
142   - private String getTarget()
143   - {
144   - if (this.target != null && this.shift == null)
145   - {
146   - if (this.target.startsWith("before(") && this.target.endsWith(")"))
147   - {
148   - this.target = this.target.substring(7, this.target.length() - 1);
149   - this.shift = JsonInjectionShiftType.BEFORE;
150   - }
151   - else if (this.target.startsWith("after(") && this.target.endsWith(")"))
152   - {
153   - this.target = this.target.substring(6, this.target.length() - 1);
154   - this.shift = JsonInjectionShiftType.AFTER;
155   - }
156   - }
157   -
158   - if (this.target == null)
159   - {
160   - throw new InvalidEventJsonException("'target' is required for injection type " + this.type.name());
161   - }
162   -
163   - return this.target;
164   - }
165   -
166   - private InjectionPoint applyShift(InjectionPoint injectionPoint)
167   - {
168   - if (this.shift != null)
169   - {
170   - switch (this.shift)
171   - {
172   - case AFTER:
173   - return InjectionPoint.after(injectionPoint);
174   -
175   - case BEFORE:
176   - return InjectionPoint.before(injectionPoint);
177   - }
178   - }
179   -
180   - return injectionPoint;
181   - }
182   -}
java/common/com/mumfrey/liteloader/transformers/event/json/JsonInjectionShiftType.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -public enum JsonInjectionShiftType
4   -{
5   - BEFORE,
6   - AFTER
7   -}
java/common/com/mumfrey/liteloader/transformers/event/json/JsonMethods.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import java.util.HashMap;
4   -import java.util.List;
5   -import java.util.Map;
6   -
7   -import com.mumfrey.liteloader.core.runtime.Methods;
8   -import com.mumfrey.liteloader.transformers.event.MethodInfo;
9   -
10   -/**
11   - * A simple registry of MethodInfo objects parsed from the JSON, objects which consume the specified
12   - * MethodInfo objects will be passed an instance of this object at parse time.
13   - *
14   - * @author Adam Mummery-Smith
15   - */
16   -public class JsonMethods
17   -{
18   - /**
19   - * Serialised obfusctation entries
20   - */
21   - private final JsonObfuscationTable obfuscation;
22   -
23   - /**
24   - * Method descriptors
25   - */
26   - private final List<JsonDescriptor> descriptors;
27   -
28   - /**
29   - * Method descriptors which have been parsed from the descriptors collection
30   - */
31   - private Map<String, MethodInfo> methods = new HashMap<String, MethodInfo>();
32   -
33   - /**
34   - * @param obfuscation
35   - * @param descriptors
36   - */
37   - public JsonMethods(JsonObfuscationTable obfuscation, List<JsonDescriptor> descriptors)
38   - {
39   - this.obfuscation = obfuscation;
40   - this.descriptors = descriptors;
41   -
42   - this.parse();
43   - }
44   -
45   - /**
46   - *
47   - */
48   - private void parse()
49   - {
50   - if (this.descriptors != null)
51   - {
52   - for (JsonDescriptor descriptor : this.descriptors)
53   - {
54   - this.methods.put(descriptor.getKey(), descriptor.parse(this.obfuscation));
55   - }
56   - }
57   - }
58   -
59   - /**
60   - * Fetches a method descriptor by token
61   - *
62   - * @param token
63   - */
64   - public MethodInfo get(String token)
65   - {
66   - String key = JsonEvents.parseToken(token);
67   - if (key == null)
68   - {
69   - throw new InvalidEventJsonException("\"" + token + "\" is not a valid token");
70   - }
71   -
72   - MethodInfo method = this.methods.get(key);
73   - if (method != null)
74   - {
75   - return method;
76   - }
77   -
78   - MethodInfo builtinMethod = Methods.getByName(key);
79   - if (builtinMethod != null)
80   - {
81   - return builtinMethod;
82   - }
83   -
84   - throw new InvalidEventJsonException("Could not locate method descriptor with token " + token);
85   - }
86   -}
87 0 \ No newline at end of file
java/common/com/mumfrey/liteloader/transformers/event/json/JsonObf.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import java.io.Serializable;
4   -import java.util.UUID;
5   -
6   -import com.google.gson.annotations.SerializedName;
7   -import com.mumfrey.liteloader.core.runtime.Obf;
8   -
9   -public class JsonObf implements Serializable
10   -{
11   - private static final long serialVersionUID = 1L;
12   -
13   - @SerializedName("id")
14   - private String key;
15   -
16   - @SerializedName("mcp")
17   - private String mcp;
18   -
19   - @SerializedName("srg")
20   - private String srg;
21   -
22   - @SerializedName("obf")
23   - private String obf;
24   -
25   - public String getKey()
26   - {
27   - if (this.key == null)
28   - {
29   - this.key = "UserObfuscationMapping" + UUID.randomUUID().toString();
30   - }
31   -
32   - return this.key;
33   - }
34   -
35   - public Obf parse()
36   - {
37   - String seargeName = this.getFirstValidEntry(this.srg, this.mcp, this.obf, this.getKey());
38   - String obfName = this.getFirstValidEntry(this.obf, this.srg, this.mcp, this.getKey());
39   - String mcpName = this.getFirstValidEntry(this.mcp, this.srg, this.obf, this.getKey());
40   -
41   - return new Mapping(seargeName, obfName, mcpName);
42   - }
43   -
44   - private String getFirstValidEntry(String... entries)
45   - {
46   - for (String entry : entries)
47   - {
48   - if (entry != null) return entry;
49   - }
50   -
51   - throw new InvalidEventJsonException("No valid entry found in list!");
52   - }
53   -
54   - public static class Mapping extends Obf
55   - {
56   - protected Mapping(String seargeName, String obfName, String mcpName)
57   - {
58   - super(seargeName, obfName, mcpName);
59   - }
60   - }
61   -}
java/common/com/mumfrey/liteloader/transformers/event/json/JsonObfuscationTable.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import java.io.Serializable;
4   -import java.util.HashMap;
5   -import java.util.List;
6   -import java.util.Map;
7   -
8   -import com.google.gson.annotations.SerializedName;
9   -import com.mumfrey.liteloader.core.runtime.Obf;
10   -import com.mumfrey.liteloader.core.runtime.Packets;
11   -
12   -/**
13   - * JSON-defined obfuscation table entries used like a registry by the other JSON components to look up obfuscation mappings
14   - * for methods and fields.
15   - *
16   - * @author Adam Mummery-Smith
17   - */
18   -public class JsonObfuscationTable implements Serializable
19   -{
20   - private static final long serialVersionUID = 1L;
21   -
22   - @SerializedName("classes")
23   - private List<JsonObf> jsonClasses;
24   -
25   - @SerializedName("methods")
26   - private List<JsonObf> jsonMethods;
27   -
28   - @SerializedName("fields")
29   - private List<JsonObf> jsonFields;
30   -
31   - // Parsed values
32   - private transient Map<String, Obf> classObfs = new HashMap<String, Obf>();
33   - private transient Map<String, Obf> methodObfs = new HashMap<String, Obf>();
34   - private transient Map<String, Obf> fieldObfs = new HashMap<String, Obf>();
35   -
36   - /**
37   - * Parse the entries in each collection to actual Obf objects
38   - */
39   - public void parse()
40   - {
41   - if (this.jsonClasses != null)
42   - {
43   - for (JsonObf jsonClass : this.jsonClasses)
44   - {
45   - this.classObfs.put(jsonClass.getKey(), jsonClass.parse());
46   - }
47   - }
48   -
49   - if (this.jsonMethods != null)
50   - {
51   - for (JsonObf jsonMethod : this.jsonMethods)
52   - {
53   - this.methodObfs.put(jsonMethod.getKey(), jsonMethod.parse());
54   - }
55   - }
56   -
57   - if (this.jsonFields != null)
58   - {
59   - for (JsonObf jsonField : this.jsonFields)
60   - {
61   - this.fieldObfs.put(jsonField.getKey(), jsonField.parse());
62   - }
63   - }
64   - }
65   -
66   - /**
67   - * Look up a type (a class or primitive type) by token
68   - */
69   - public Object parseType(String token)
70   - {
71   - token = token.replace(" ", "").trim();
72   -
73   - if ("I".equals(token) || "INT".equals(token)) return Integer.TYPE;
74   - if ("J".equals(token) || "LONG".equals(token)) return Long.TYPE;
75   - if ("V".equals(token) || "VOID".equals(token)) return Void.TYPE;
76   - if ("Z".equals(token) || "BOOLEAN".equals(token) || "BOOL".equals(token)) return Boolean.TYPE;
77   - if ("B".equals(token) || "BYTE".equals(token)) return Byte.TYPE;
78   - if ("C".equals(token) || "CHAR".equals(token)) return Character.TYPE;
79   - if ("S".equals(token) || "SHORT".equals(token)) return Short.TYPE;
80   - if ("D".equals(token) || "DOUBLE".equals(token)) return Double.TYPE;
81   - if ("F".equals(token) || "FLOAT".equals(token)) return Float.TYPE;
82   - if ("STRING".equals(token)) return String.class;
83   -
84   - if (token.startsWith("L") && token.endsWith(";"))
85   - {
86   - token = token.substring(1, token.length() - 1).replace('/', '.');
87   - }
88   -
89   - return this.parseClass(token);
90   - }
91   -
92   - /**
93   - * Find an obf entry of any type by name
94   - *
95   - * @param name
96   - */
97   - public Obf getByName(String name)
98   - {
99   - Obf classObf = this.classObfs.get(name);
100   - if (classObf != null)
101   - {
102   - return classObf;
103   - }
104   -
105   - Obf methodObf = this.methodObfs.get(name);
106   - if (methodObf != null)
107   - {
108   - return methodObf;
109   - }
110   -
111   - Obf fieldObf = this.fieldObfs.get(name);
112   - if (fieldObf != null)
113   - {
114   - return fieldObf;
115   - }
116   -
117   - return null;
118   - }
119   -
120   - /**
121   - * @param token
122   - */
123   - public Obf parseClass(String token)
124   - {
125   - return this.parseObf(token, this.classObfs, false);
126   - }
127   -
128   - /**
129   - * @param token
130   - */
131   - public Obf parseMethod(String token)
132   - {
133   - return this.parseObf(token, this.methodObfs, false);
134   - }
135   -
136   - /**
137   - * @param token
138   - */
139   - public Obf parseField(String token)
140   - {
141   - return this.parseObf(token, this.fieldObfs, false);
142   - }
143   -
144   - /**
145   - * @param token
146   - * @param obfs
147   - * @param returnNullOnFailure return null instead of throwing an exception
148   - */
149   - private Obf parseObf(String token, Map<String, Obf> obfs, boolean returnNullOnFailure)
150   - {
151   - String key = JsonEvents.parseToken(token);
152   -
153   - if (key != null)
154   - {
155   - if (obfs.containsKey(key))
156   - {
157   - return obfs.get(key);
158   - }
159   -
160   - Obf obf = Obf.getByName(key);
161   - if (obf != null)
162   - {
163   - return obf;
164   - }
165   -
166   - Packets packet = Packets.getByName(key);
167   - if (packet != null)
168   - {
169   - return packet;
170   - }
171   -
172   - if (returnNullOnFailure)
173   - {
174   - return null;
175   - }
176   -
177   - throw new InvalidEventJsonException("The token " + token + " could not be resolved to a type");
178   - }
179   -
180   - return new JsonObf.Mapping(token, token, token);
181   - }
182   -}
java/common/com/mumfrey/liteloader/transformers/event/json/ModEventInjectionTransformer.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import com.mumfrey.liteloader.transformers.ClassTransformer;
4   -import com.mumfrey.liteloader.transformers.ObfProvider;
5   -import com.mumfrey.liteloader.transformers.event.Event;
6   -import com.mumfrey.liteloader.transformers.event.EventInjectionTransformer;
7   -import com.mumfrey.liteloader.transformers.event.InjectionPoint;
8   -import com.mumfrey.liteloader.transformers.event.MethodInfo;
9   -import com.mumfrey.liteloader.transformers.event.json.ModEvents.ModEventDefinition;
10   -import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
11   -import com.mumfrey.liteloader.util.log.LiteLoaderLogger.Verbosity;
12   -
13   -/**
14   - * Event transformer which manages injections of mod events specified via events.json in the mod container
15   - *
16   - * @author Adam Mummery-Smith
17   - */
18   -public class ModEventInjectionTransformer extends EventInjectionTransformer
19   -{
20   - @Override
21   - protected void addEvents()
22   - {
23   - for (ModEventDefinition eventsDefinition : ModEvents.getEvents().values())
24   - {
25   - this.addEvents(eventsDefinition);
26   - }
27   - }
28   -
29   - /**
30   - * @param identifier
31   - * @param json
32   - */
33   - private void addEvents(ModEventDefinition def)
34   - {
35   - JsonEvents events = null;
36   -
37   - try
38   - {
39   - LiteLoaderLogger.info("Parsing events for mod with id %s", def.getIdentifier());
40   - events = JsonEvents.parse(def.getJson());
41   - }
42   - catch (InvalidEventJsonException ex)
43   - {
44   - LiteLoaderLogger.debug(ClassTransformer.HORIZONTAL_RULE);
45   - LiteLoaderLogger.debug(ex.getMessage());
46   - LiteLoaderLogger.debug(ClassTransformer.HORIZONTAL_RULE);
47   - LiteLoaderLogger.debug(def.getJson());
48   - LiteLoaderLogger.debug(ClassTransformer.HORIZONTAL_RULE);
49   - LiteLoaderLogger.severe(ex, "Invalid JSON event declarations for mod with id %s", def.getIdentifier());
50   - }
51   - catch (Throwable ex)
52   - {
53   - LiteLoaderLogger.severe(ex, "Error whilst parsing event declarations for mod with id %s", def.getIdentifier());
54   - }
55   -
56   - try
57   - {
58   - if (events != null)
59   - {
60   - if (events.hasAccessors())
61   - {
62   - LiteLoaderLogger.info("%s contains Accessor definitions, injecting into classpath...", def.getIdentifier());
63   - def.injectIntoClassPath();
64   - }
65   -
66   - LiteLoaderLogger.info(Verbosity.REDUCED, "Registering events for mod with id %s", def.getIdentifier());
67   - events.register(this);
68   - def.onEventsInjected();
69   - }
70   - }
71   - catch (Throwable ex)
72   - {
73   - LiteLoaderLogger.severe(ex, "Error whilst parsing event declarations for mod with id %s", def.getIdentifier());
74   - }
75   - }
76   -
77   - protected Event registerEvent(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint)
78   - {
79   - return super.addEvent(event, targetMethod, injectionPoint);
80   - }
81   -
82   - protected void registerAccessor(String interfaceName, ObfProvider obfProvider)
83   - {
84   - super.addAccessor(interfaceName, obfProvider);
85   - }
86   -}
java/common/com/mumfrey/liteloader/transformers/event/json/ModEvents.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.transformers.event.json;
2   -
3   -import java.io.File;
4   -import java.net.MalformedURLException;
5   -import java.util.HashMap;
6   -import java.util.Map;
7   -
8   -import net.minecraft.launchwrapper.Launch;
9   -
10   -import com.google.common.base.Charsets;
11   -import com.mumfrey.liteloader.api.ContainerRegistry.DisabledReason;
12   -import com.mumfrey.liteloader.api.EnumerationObserver;
13   -import com.mumfrey.liteloader.core.ModInfo;
14   -import com.mumfrey.liteloader.core.api.LoadableModFile;
15   -import com.mumfrey.liteloader.interfaces.LoadableMod;
16   -import com.mumfrey.liteloader.interfaces.LoaderEnumerator;
17   -import com.mumfrey.liteloader.interfaces.TweakContainer;
18   -import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
19   -
20   -public class ModEvents implements EnumerationObserver
21   -{
22   - public static class ModEventDefinition
23   - {
24   - private final LoadableModFile file;
25   -
26   - private final String identifier;
27   -
28   - private final String json;
29   -
30   - public ModEventDefinition(LoadableModFile file, String json)
31   - {
32   - this.file = file;
33   - this.identifier = file.getIdentifier();
34   - this.json = json;
35   - }
36   -
37   - public String getIdentifier()
38   - {
39   - return this.identifier;
40   - }
41   -
42   - public String getJson()
43   - {
44   - return this.json;
45   - }
46   -
47   - public void onEventsInjected()
48   - {
49   - this.file.onEventsInjected();
50   - }
51   -
52   - public void injectIntoClassPath()
53   - {
54   - try
55   - {
56   - this.file.injectIntoClassPath(Launch.classLoader, true);
57   - }
58   - catch (MalformedURLException ex)
59   - {
60   - ex.printStackTrace();
61   - }
62   - }
63   - }
64   -
65   - private static final String DEFINITION_FILENAME = "events.json";
66   -
67   - private static Map<String, ModEventDefinition> events = new HashMap<String, ModEventDefinition>();
68   -
69   - @Override
70   - public void onRegisterEnabledContainer(LoaderEnumerator enumerator, LoadableMod<?> container)
71   - {
72   - if (container instanceof LoadableModFile)
73   - {
74   - LoadableModFile file = (LoadableModFile)container;
75   - if (!file.exists()) return;
76   -
77   - String json = file.getFileContents(ModEvents.DEFINITION_FILENAME, Charsets.UTF_8);
78   - if (json == null) return;
79   -
80   - LiteLoaderLogger.info("Registering %s for mod with id %s", ModEvents.DEFINITION_FILENAME, file.getIdentifier());
81   - ModEvents.events.put(file.getIdentifier(), new ModEventDefinition(file, json));
82   - }
83   - }
84   -
85   - @Override
86   - public void onRegisterDisabledContainer(LoaderEnumerator enumerator, LoadableMod<?> container, DisabledReason reason)
87   - {
88   - }
89   -
90   - @Override
91   - public void onRegisterTweakContainer(LoaderEnumerator enumerator, TweakContainer<File> container)
92   - {
93   - }
94   -
95   - @Override
96   - public void onModAdded(LoaderEnumerator enumerator, ModInfo<LoadableMod<?>> mod)
97   - {
98   - }
99   -
100   - static Map<String, ModEventDefinition> getEvents()
101   - {
102   - return events;
103   - }
104   -}
java/common/com/mumfrey/liteloader/util/ChatUtilities.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -import java.util.List;
4   -
5   -import net.minecraft.util.ChatComponentText;
6   -import net.minecraft.util.ChatStyle;
7   -import net.minecraft.util.EnumChatFormatting;
8   -import net.minecraft.util.IChatComponent;
9   -
10   -/**
11   - * Utility functions for chat
12   - *
13   - * @author Adam Mummery-Smith
14   - */
15   -public abstract class ChatUtilities
16   -{
17   - private static String formattingCodeLookup;
18   -
19   - static
20   - {
21   - StringBuilder formattingCodes = new StringBuilder();
22   -
23   - for (EnumChatFormatting chatFormat : EnumChatFormatting.values())
24   - {
25   - formattingCodes.append(chatFormat.toString().charAt(1));
26   - }
27   -
28   - ChatUtilities.formattingCodeLookup = formattingCodes.toString();
29   - }
30   -
31   - private ChatUtilities() {}
32   -
33   - /**
34   - * Get a chat style from a legacy formatting code
35   - *
36   - * @param code Code
37   - * @return
38   - */
39   - public static ChatStyle getChatStyleFromCode(char code)
40   - {
41   - int pos = ChatUtilities.formattingCodeLookup.indexOf(code);
42   - if (pos < 0) return null;
43   - EnumChatFormatting format = EnumChatFormatting.values()[pos];
44   -
45   - ChatStyle style = new ChatStyle();
46   - if (format.isColor())
47   - {
48   - style.setColor(format);
49   - }
50   - else if (format.isFancyStyling())
51   - {
52   - switch (format)
53   - {
54   - case BOLD: style.setBold(true); break;
55   - case ITALIC: style.setItalic(true); break;
56   - case STRIKETHROUGH: style.setStrikethrough(true); break;
57   - case UNDERLINE: style.setUnderlined(true); break;
58   - case OBFUSCATED: style.setObfuscated(true); break;
59   - }
60   - }
61   -
62   - return style;
63   - }
64   -
65   - /**
66   - * Convert a component containing text formatted with legacy codes to a native ChatComponent structure
67   - */
68   - public static IChatComponent convertLegacyCodes(IChatComponent chat)
69   - {
70   - return ChatUtilities.covertCodesInPlace(chat);
71   - }
72   -
73   - private static List<IChatComponent> covertCodesInPlace(List<IChatComponent> siblings)
74   - {
75   - for (int index = 0; index < siblings.size(); index++)
76   - {
77   - siblings.set(index, ChatUtilities.covertCodesInPlace(siblings.get(index)));
78   - }
79   -
80   - return siblings;
81   - }
82   -
83   - @SuppressWarnings("unchecked")
84   - private static IChatComponent covertCodesInPlace(IChatComponent component)
85   - {
86   - IChatComponent newComponent = null;
87   - if (component instanceof ChatComponentText)
88   - {
89   - ChatComponentText textComponent = (ChatComponentText)component;
90   - ChatStyle style = textComponent.getChatStyle();
91   - String text = textComponent.getChatComponentText_TextValue();
92   -
93   - int pos = text.indexOf('\247');
94   - while (pos > -1 && text != null)
95   - {
96   - if (pos < text.length() - 1)
97   - {
98   - IChatComponent head = new ChatComponentText(pos > 0 ? text.substring(0, pos) : "").setChatStyle(style);
99   - style = ChatUtilities.getChatStyleFromCode(text.charAt(pos + 1));
100   - text = text.substring(pos + 2);
101   - newComponent = (newComponent == null) ? head : newComponent.appendSibling(head);
102   - pos = text.indexOf('\247');
103   - }
104   - else
105   - {
106   - text = null;
107   - }
108   - }
109   -
110   - if (text != null)
111   - {
112   - IChatComponent tail = new ChatComponentText(text).setChatStyle(style);
113   - newComponent = (newComponent == null) ? tail : newComponent.appendSibling(tail);
114   - }
115   - }
116   -
117   - if (newComponent == null)
118   - {
119   - ChatUtilities.covertCodesInPlace(component.getSiblings());
120   - return component;
121   - }
122   -
123   - for (IChatComponent oldSibling : ChatUtilities.covertCodesInPlace(component.getSiblings()))
124   - {
125   - newComponent.appendSibling(oldSibling);
126   - }
127   -
128   - return newComponent;
129   - }
130   -}
java/common/com/mumfrey/liteloader/util/EntityUtilities.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -import net.minecraft.entity.Entity;
4   -import net.minecraft.util.MovingObjectPosition;
5   -import net.minecraft.util.Vec3;
6   -
7   -public abstract class EntityUtilities
8   -{
9   - public static MovingObjectPosition rayTraceFromEntity(Entity entity, double traceDistance, float partialTicks)
10   - {
11   - Vec3 var4 = EntityUtilities.getPositionEyes(entity, partialTicks);
12   - Vec3 var5 = entity.getLook(partialTicks);
13   - Vec3 var6 = var4.addVector(var5.xCoord * traceDistance, var5.yCoord * traceDistance, var5.zCoord * traceDistance);
14   - return entity.worldObj.rayTraceBlocks(var4, var6, false, false, true);
15   - }
16   -
17   - public static Vec3 getPositionEyes(Entity entity, float partialTicks)
18   - {
19   - if (partialTicks == 1.0F)
20   - {
21   - return new Vec3(entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ);
22   - }
23   -
24   - double interpX = entity.prevPosX + (entity.posX - entity.prevPosX) * partialTicks;
25   - double interpY = entity.prevPosY + (entity.posY - entity.prevPosY) * partialTicks + entity.getEyeHeight();
26   - double interpZ = entity.prevPosZ + (entity.posZ - entity.prevPosZ) * partialTicks;
27   - return new Vec3(interpX, interpY, interpZ);
28   - }
29   -}
java/common/com/mumfrey/liteloader/util/Input.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -import net.minecraft.client.settings.KeyBinding;
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.core.LiteLoaderMods;
10   -import com.mumfrey.liteloader.util.jinput.ComponentRegistry;
11   -
12   -public abstract class Input implements CoreProvider
13   -{
14   - /**
15   - * Register a key for a mod
16   - *
17   - * @param binding
18   - */
19   - public abstract void registerKeyBinding(KeyBinding binding);
20   -
21   - /**
22   - * Unregisters a registered keybind with the game settings class, thus removing it from the "controls" screen
23   - *
24   - * @param binding
25   - */
26   - public abstract void unRegisterKeyBinding(KeyBinding binding);
27   -
28   - /**
29   - * Writes mod bindings to disk
30   - */
31   - public abstract void storeBindings();
32   -
33   - /**
34   - * Gets the underlying JInput component registry
35   - */
36   - public abstract ComponentRegistry getComponentRegistry();
37   -
38   - /**
39   - * Returns a handle to the event described by descriptor (or null if no component is found matching the
40   - * descriptor. Retrieving an event via this method adds the controller (if found) to the polling list and
41   - * causes it to raise events against the specified handler.
42   - *
43   - * This method returns an {@link InputEvent} which is passed as an argument to the relevant callback on
44   - * the supplied handler in order to identify the event. For example:
45   - *
46   - * this.joystickButton = input.getEvent(descriptor, this);
47   - *
48   - * then in onAxisEvent
49   - *
50   - * if (source == this.joystickButton) // do something with button
51   - *
52   - * @param descriptor
53   - * @param handler
54   - */
55   - public abstract InputEvent getEvent(String descriptor, InputHandler handler);
56   -
57   - /**
58   - * Get events for all components which match the supplied descriptor
59   - *
60   - * @param descriptor
61   - * @param handler
62   - */
63   - public abstract InputEvent[] getEvents(String descriptor, InputHandler handler);
64   -
65   - @Override
66   - public void onPostInitComplete(LiteLoaderMods mods)
67   - {
68   - }
69   -
70   - @Override
71   - public void onStartupComplete()
72   - {
73   - }
74   -
75   - @Override
76   - public void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket)
77   - {
78   - }
79   -
80   - @Override
81   - public void onWorldChanged(World world)
82   - {
83   - }
84   -
85   - @Override
86   - public void onPostRender(int mouseX, int mouseY, float partialTicks)
87   - {
88   - }
89   -}
90 0 \ No newline at end of file
java/common/com/mumfrey/liteloader/util/InputEvent.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -import net.java.games.input.Component;
4   -import net.java.games.input.Controller;
5   -import net.java.games.input.Event;
6   -
7   -/**
8   - * A handle to an input event, this handle will be used to call back the handler for the specified
9   - * component's events. This class represents a singly-linked list of delegates with each delegate's
10   - * next field pointing to the next delegate in the chain
11   - *
12   - * @author Adam Mummery-Smith
13   - */
14   -public class InputEvent
15   -{
16   - /**
17   - * Controller this event is delegating events for
18   - */
19   - private final Controller controller;
20   -
21   - /**
22   - * Component this event is delegating events for
23   - */
24   - private final Component component;
25   -
26   - /**
27   - * Event handler
28   - */
29   - private final InputHandler handler;
30   -
31   - /**
32   - * Next event handler in the chain
33   - */
34   - private InputEvent next;
35   -
36   - /**
37   - * @param controller
38   - * @param component
39   - * @param handler
40   - */
41   - InputEvent(Controller controller, Component component, InputHandler handler)
42   - {
43   - this.controller = controller;
44   - this.component = component;
45   - this.handler = handler;
46   - }
47   -
48   - /**
49   - * Link this delegate to the specified delegate and return the start of the delegate chain
50   - *
51   - * @param chain delegate to link to (will be null if the chain is empty)
52   - */
53   - InputEvent link(InputEvent chain)
54   - {
55   - if (chain == null) return this; // Chain is empty, return self
56   - return chain.append(this); // Append self to the start of the chain
57   - }
58   -
59   - /**
60   - * Append specified delegate to the end of the delegate chain
61   - *
62   - * @param delegate
63   - */
64   - private InputEvent append(InputEvent delegate)
65   - {
66   - InputEvent tail = this; // Start here
67   -
68   - while (tail.next != null) // Find the end of the chain
69   - tail = tail.next;
70   -
71   - tail.next = delegate; // Append the new delegate
72   - return this; // Return the start of the delegate chain (eg. this node)
73   - }
74   -
75   - /**
76   - * @param event
77   - */
78   - void onEvent(Event event)
79   - {
80   - if (this.component.isAnalog())
81   - {
82   - this.onAxisEvent(event.getValue(), event.getNanos());
83   - }
84   - else if (this.component.getIdentifier() == Component.Identifier.Axis.POV)
85   - {
86   - this.onPovEvent(event.getValue(), event.getNanos());
87   - }
88   - else
89   - {
90   - this.onButtonEvent(event.getValue() == 1.0F);
91   - }
92   - }
93   -
94   - /**
95   - * @param value
96   - * @param nanos
97   - */
98   - private void onAxisEvent(float value, long nanos)
99   - {
100   - this.handler.onAxisEvent(this, value, nanos);
101   - if (this.next != null) this.next.onAxisEvent(value, nanos);
102   - }
103   -
104   - /**
105   - * @param value
106   - * @param nanos
107   - */
108   - private void onPovEvent(float value, long nanos)
109   - {
110   - this.handler.onPovEvent(this, value, nanos);
111   - if (this.next != null) this.next.onPovEvent(value, nanos);
112   - }
113   -
114   - /**
115   - * @param pressed
116   - */
117   - private void onButtonEvent(boolean pressed)
118   - {
119   - this.handler.onButtonEvent(this, pressed);
120   - if (this.next != null) this.next.onButtonEvent(pressed);
121   - }
122   -
123   - public Controller getController()
124   - {
125   - return this.controller;
126   - }
127   -
128   - public Component getComponent()
129   - {
130   - return this.component;
131   - }
132   -}
java/common/com/mumfrey/liteloader/util/InputHandler.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -/**
4   - * Interface for objects which handle JInput events
5   - *
6   - * @author Adam Mummery-Smith
7   - */
8   -public interface InputHandler
9   -{
10   - /**
11   - * Called when an analogue (axis) event is raised on the specified component
12   - *
13   - * @param source
14   - * @param nanos
15   - * @param value
16   - */
17   - void onAxisEvent(InputEvent source, float value, long nanos);
18   -
19   - /**
20   - * Called when a POV (Point-Of-View) event is raised on the specified component
21   - *
22   - * @param source
23   - * @param value
24   - * @param nanos
25   - */
26   - void onPovEvent(InputEvent source, float value, long nanos);
27   -
28   - /**
29   - * Called when a button event is raised on the specified component
30   - *
31   - * @param source
32   - * @param value
33   - */
34   - void onButtonEvent(InputEvent source, boolean value);
35   -}
java/common/com/mumfrey/liteloader/util/ObfuscationUtilities.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -import net.minecraft.launchwrapper.IClassTransformer;
4   -import net.minecraft.launchwrapper.Launch;
5   -import net.minecraft.server.MinecraftServer;
6   -import net.minecraft.util.BlockPos;
7   -
8   -import com.mumfrey.liteloader.core.runtime.Obf;
9   -
10   -public class ObfuscationUtilities
11   -{
12   - /**
13   - * True if FML is being used, in which case we use searge names instead of raw field/method names
14   - */
15   - private static boolean fmlDetected = false;
16   -
17   - private static boolean seargeNames = false;
18   -
19   - static
20   - {
21   - // Check for FML
22   - ObfuscationUtilities.fmlDetected = ObfuscationUtilities.fmlIsPresent();
23   -
24   - try
25   - {
26   - MinecraftServer.class.getDeclaredField("serverRunning");
27   - }
28   - catch (SecurityException ex)
29   - {
30   - }
31   - catch (NoSuchFieldException ex)
32   - {
33   - ObfuscationUtilities.seargeNames = true;
34   - }
35   - }
36   -
37   - public static boolean fmlIsPresent()
38   - {
39   - for (IClassTransformer transformer : Launch.classLoader.getTransformers())
40   - if (transformer.getClass().getName().contains("fml")) return true;
41   -
42   - return false;
43   - }
44   -
45   - /**
46   - * Abstraction helper function
47   - *
48   - * @param fieldName Name of field to get, returned unmodified if in debug mode
49   - * @return Obfuscated field name if present
50   - */
51   - public static String getObfuscatedFieldName(String fieldName, String obfuscatedFieldName, String seargeFieldName)
52   - {
53   - boolean deobfuscated = BlockPos.class.getSimpleName().equals("BlockPos");
54   - return deobfuscated ? (ObfuscationUtilities.seargeNames ? seargeFieldName : fieldName) : (ObfuscationUtilities.fmlDetected ? seargeFieldName : obfuscatedFieldName);
55   - }
56   -
57   - /**
58   - * Abstraction helper function
59   - *
60   - * @param obf Field to get, returned unmodified if in debug mode
61   - * @return Obfuscated field name if present
62   - */
63   - public static String getObfuscatedFieldName(Obf obf)
64   - {
65   - boolean deobfuscated = BlockPos.class.getSimpleName().equals("BlockPos");
66   - return deobfuscated ? (ObfuscationUtilities.seargeNames ? obf.srg : obf.name) : (ObfuscationUtilities.fmlDetected ? obf.srg : obf.obf);
67   - }
68   -}
java/common/com/mumfrey/liteloader/util/Position.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -import net.minecraft.entity.Entity;
4   -import net.minecraft.util.Vec3;
5   -
6   -/**
7   - * A 3D vector position with rotation as well
8   - *
9   - * @author Adam Mummery-Smith
10   - */
11   -public class Position extends Vec3
12   -{
13   - public final float yaw;
14   -
15   - public final float pitch;
16   -
17   - public Position(double x, double y, double z)
18   - {
19   - this(x, y, z, 0.0F, 0.0F);
20   - }
21   -
22   - public Position(double x, double y, double z, float yaw, float pitch)
23   - {
24   - super(x, y, z);
25   -
26   - this.yaw = yaw;
27   - this.pitch = pitch;
28   - }
29   -
30   - public Position(Entity entity)
31   - {
32   - this(entity.posX, entity.posY, entity.posZ, entity.rotationYaw, entity.rotationPitch);
33   - }
34   -
35   - public Position(Entity entity, boolean usePrevious)
36   - {
37   - this(usePrevious ? entity.prevPosX : entity.posX, usePrevious ? entity.prevPosY : entity.posY, usePrevious ? entity.prevPosZ : entity.posZ, usePrevious ? entity.prevRotationYaw : entity.rotationYaw, usePrevious ? entity.prevRotationPitch : entity.rotationPitch);
38   - }
39   -
40   - public void applyTo(Entity entity)
41   - {
42   - entity.posX = this.xCoord;
43   - entity.posY = this.yCoord;
44   - entity.posZ = this.zCoord;
45   - entity.rotationYaw = this.yaw;
46   - entity.rotationPitch = this.pitch;
47   - }
48   -
49   - @Override
50   - public String toString()
51   - {
52   - return "(" + this.xCoord + ", " + this.yCoord + ", " + this.zCoord + ", " + this.yaw + ", " + this.pitch + ")";
53   - }
54   -}
java/common/com/mumfrey/liteloader/util/PrivateFields.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -import java.lang.reflect.Field;
4   -import java.lang.reflect.Modifier;
5   -
6   -import net.minecraft.network.play.client.C15PacketClientSettings;
7   -
8   -import com.mumfrey.liteloader.core.runtime.Obf;
9   -
10   -/**
11   - * Wrapper for obf/mcp reflection-accessed private fields, mainly added to centralise the locations I have to update the obfuscated field names
12   - *
13   - * @author Adam Mummery-Smith
14   - *
15   - * @param <P> Parent class type, the type of the class that owns the field
16   - * @param <T> Field type, the type of the field value
17   - */
18   -public class PrivateFields<P, T>
19   -{
20   - /**
21   - * Class to which this field belongs
22   - */
23   - public final Class<P> parentClass;
24   -
25   - /**
26   - * Name used to access the field, determined at init
27   - */
28   - private final String fieldName;
29   -
30   - private boolean errorReported = false;
31   -
32   - /**
33   - * Creates a new private field entry
34   - *
35   - * @param obf
36   - */
37   - protected PrivateFields(Class<P> owner, Obf obf)
38   - {
39   - this.parentClass = owner;
40   - this.fieldName = ObfuscationUtilities.getObfuscatedFieldName(obf);
41   - }
42   -
43   - /**
44   - * Get the current value of this field on the instance class supplied
45   - *
46   - * @param instance Class to get the value of
47   - * @return field value or null if errors occur
48   - */
49   - @SuppressWarnings("unchecked")
50   - public T get(P instance)
51   - {
52   - try
53   - {
54   - Field field = this.parentClass.getDeclaredField(this.fieldName);
55   - field.setAccessible(true);
56   - return (T)field.get(instance);
57   - }
58   - catch (Exception ex)
59   - {
60   - if (!this.errorReported)
61   - {
62   - this.errorReported = true;
63   - ex.printStackTrace();
64   - }
65   - return null;
66   - }
67   - }
68   -
69   - /**
70   - * Set the value of this field on the instance class supplied
71   - *
72   - * @param instance Object to set the value of the field on
73   - * @param value value to set
74   - * @return value
75   - */
76   - public T set(P instance, T value)
77   - {
78   - try
79   - {
80   - Field field = this.parentClass.getDeclaredField(this.fieldName);
81   - field.setAccessible(true);
82   - field.set(instance, value);
83   - }
84   - catch (Exception ex)
85   - {
86   - if (!this.errorReported)
87   - {
88   - this.errorReported = true;
89   - ex.printStackTrace();
90   - }
91   - }
92   -
93   - return value;
94   - }
95   -
96   - /**
97   - * Set the value of this FINAL field on the instance class supplied
98   - *
99   - * @param instance Object to set the value of the field on
100   - * @param value value to set
101   - * @return value
102   - */
103   - public T setFinal(P instance, T value)
104   - {
105   - try
106   - {
107   - Field modifiers = Field.class.getDeclaredField("modifiers");
108   - modifiers.setAccessible(true);
109   -
110   - Field field = this.parentClass.getDeclaredField(this.fieldName);
111   - modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
112   - field.setAccessible(true);
113   - field.set(instance, value);
114   - }
115   - catch (Exception ex)
116   - {
117   - if (!this.errorReported)
118   - {
119   - this.errorReported = true;
120   - ex.printStackTrace();
121   - }
122   - }
123   -
124   - return value;
125   - }
126   -
127   - public static final PrivateFields<C15PacketClientSettings, Integer> viewDistance = new PrivateFields<C15PacketClientSettings, Integer>(C15PacketClientSettings.class, Obf.viewDistance);
128   -
129   -}
130 0 \ No newline at end of file
java/common/com/mumfrey/liteloader/util/SortableValue.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util;
2   -
3   -/**
4   - * Struct which contains a mapping of a priority value to another object, used for sorting items using
5   - * the native functionality in TreeMap and TreeSet
6   - *
7   - * @author Adam Mummery-Smith
8   - */
9   -public class SortableValue<T> implements Comparable<SortableValue<?>>
10   -{
11   - private final int priority;
12   -
13   - private final int order;
14   -
15   - private final T value;
16   -
17   - public SortableValue(int priority, int order, T value)
18   - {
19   - this.priority = priority;
20   - this.order = order;
21   - this.value = value;
22   - }
23   -
24   - public int getPriority()
25   - {
26   - return this.priority;
27   - }
28   -
29   - public int getOrder()
30   - {
31   - return this.order;
32   - }
33   -
34   - public T getValue()
35   - {
36   - return this.value;
37   - }
38   -
39   - @Override
40   - public int compareTo(SortableValue<?> other)
41   - {
42   - if (other == null) return 0;
43   - if (other.priority == this.priority) return this.order - other.order;
44   - return (this.priority - other.priority);
45   - }
46   -}
java/common/com/mumfrey/liteloader/util/jinput/ComponentRegistry.java deleted 100644 → 0
1   -package com.mumfrey.liteloader.util.jinput;
2   -
3   -import java.util.ArrayList;
4   -import java.util.HashMap;
5   -import java.util.Map.Entry;
6   -
7   -import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
8   -
9   -import net.java.games.input.Component;
10   -import net.java.games.input.Controller;
11   -import net.java.games.input.ControllerEnvironment;
12   -
13   -/**
14   - * Registry which keeps track of mappings of JInput descriptors to the controller and component references
15   - *
16   - * @author Adam Mummery-Smith
17   - */
18   -public class ComponentRegistry
19   -{
20   - /**
21   - * List of components
22   - */
23   - private static HashMap<String, Component> components = new HashMap<String, Component>();
24   -
25   - /**
26   - * List of controllers
27   - */
28   - private static HashMap<String, Controller> controllers = new HashMap<String, Controller>();
29   -
30   - /**
31   - * Constructor
32   - */
33   - public ComponentRegistry()
34   - {
35   - }
36   -
37   - public void enumerate()
38   - {
39   - try
40   - {
41   - LiteLoaderLogger.info("JInput Component Registry is initialising...");
42   - this.enumerate(ControllerEnvironment.getDefaultEnvironment());
43   - LiteLoaderLogger.info("JInput Component Registry initialised, found %d controller(s) %d component(s)", ControllerEnvironment.getDefaultEnvironment().getControllers().length, components.size());
44   - }
45   - catch (Throwable th)
46   - {
47   - }
48   - }
49   -
50   - public void enumerate(ControllerEnvironment environment)
51   - {
52   - components.clear();
53   - controllers.clear();
54   -
55   - for (Controller controller : environment.getControllers())
56   - {
57   - LiteLoaderLogger.info("Inspecting %s controller %s on %s...", controller.getType(), controller.getName(), controller.getPortType());
58   - for (Component component : controller.getComponents())
59   - {
60   - this.addComponent(controller, component);
61   - }
62   - }
63   - }
64   -
65   - private String addComponent(Controller controller, Component component)
66   - {
67   - String descriptor = ComponentRegistry.getDescriptor(controller, component);
68   - components.put(descriptor, component);
69   - controllers.put(descriptor, controller);
70   - return descriptor;
71   - }
72   -
73   - public ArrayList<Component> getComponents(String descriptor)
74   - {
75   - ArrayList<Component> components = new ArrayList<Component>();
76   -
77   - int offset = 0;
78   - Component component = null;
79   -
80   - do
81   - {
82   - component = this.getComponent(descriptor, offset++);
83   -
84   - if (components.contains(component))
85   - component = null;
86   -
87   - if (component != null)
88   - {
89   - components.add(component);
90   - }
91   -
92   - } while (component != null && components.size() < 32);
93   -
94   - return components;
95   - }
96   -
97   - public Component getComponent(String descriptor)
98   - {
99   - return this.getComponent(descriptor, 0);
100   - }
101   -
102   - protected Component getComponent(String descriptor, int offset)
103   - {
104   - if (components.containsKey(descriptor))
105   - {
106   - return components.get(descriptor);
107   - }
108   -
109   - for (Entry<String, Component> entry : components.entrySet())
110   - {
111   - if (matches(entry.getKey(), descriptor))
112   - {
113   - if (--offset < 0)
114   - return entry.getValue();
115   - }
116   - }
117   -
118   - return null;
119   - }
120   -
121   - public ArrayList<Controller> getControllers(String descriptor)
122   - {
123   - ArrayList<Controller> controllers = new ArrayList<Controller>();
124   -
125   - int offset = 0;
126   - Controller controller = null;
127   -
128   - do
129   - {
130   - controller = this.getController(descriptor, offset++);
131   -
132   - if (controllers.contains(controller))
133   - controller = null;
134   -
135   - if (controller != null)
136   - {
137   - controllers.add(controller);
138   - }
139   -
140   - } while (controller != null && controllers.size() < 32);
141   -
142   - return controllers;
143   - }
144   -
145   - public Controller getController(String descriptor)
146   - {
147   - return this.getController(descriptor, 0);
148   - }
149   -
150   - protected Controller getController(String descriptor, int offset)
151   - {
152   - if (controllers.containsKey(descriptor))
153   - {
154   - return controllers.get(descriptor);
155   - }
156   -
157   - for (Entry<String, Controller> entry : controllers.entrySet())
158   - {
159   - if (matches(entry.getKey(), descriptor))
160   - {
161   - if (--offset < 0)
162   - return entry.getValue();
163   - }
164   - }
165   -
166   - return null;
167   - }
168   -
169   - public static String getDescriptor(Controller controller, Component component)
170   - {
171   - int index = 0;
172   - String controllerPath = ComponentRegistry.getControllerPath(controller);
173   - String componentId = component.getIdentifier().getName();
174   -
175   - String descriptor = ComponentRegistry.getDescriptor(controllerPath, componentId, index);
176   -
177   - while (components.containsKey(descriptor) && components.get(descriptor) != component)
178   - {
179   - descriptor = ComponentRegistry.getDescriptor(controllerPath, componentId, ++index);
180   - }
181   -
182   - return descriptor;
183   - }
184   -
185   - /**
186   - * @param type
187   - * @param name
188   - * @param portType
189   - * @param portNumber
190   - * @param component
191   - * @param index
192   - */
193   - public static String getDescriptor(String type, String name, String portType, int portNumber, String component, int index)
194   - {
195   - String controllerPath = ComponentRegistry.getControllerPath(type, name, portType, portNumber);
196   - return ComponentRegistry.getDescriptor(controllerPath, component, index);
197   - }
198   -
199   - /**
200   - * @param controller
201   - * @param component
202   - * @param index
203   - */
204   - private static String getDescriptor(String controller, String component, int index)
205   - {
206   - String descriptor = String.format("jinput:%s/%s/%d", controller, ComponentRegistry.format(component), index);
207   - return descriptor;
208   - }
209   -
210   - /**
211   - * @param controller
212   - */
213   - private static String getControllerPath(Controller controller)
214   - {
215   - return ComponentRegistry.getControllerPath(
216   - controller.getType().toString().toLowerCase(),
217   - controller.getName(),
218   - controller.getPortType().toString(),
219   - controller.getPortNumber()
220   - );
221   - }
222   -
223   - /**
224   - * @param type
225   - * @param name
226   - * @param portType
227   - * @param portNumber
228   - */
229   - public static String getControllerPath(String type, String name, String portType, int portNumber)
230   - {
231   - return String.format("%s/%s/%s/%d",
232   - ComponentRegistry.format(type),
233   - ComponentRegistry.format(name),
234   - ComponentRegistry.format(portType),
235   - portNumber
236   - );
237   - }
238   -
239   - public static boolean matches(String descriptor, String wildDescriptor)
240   - {
241   - String[] descriptorParts = ComponentRegistry.splitDescriptor(descriptor.trim());
242   - String[] wildDescriptorParts = ComponentRegistry.splitDescriptor(wildDescriptor.trim());
243   -
244   - if (descriptorParts.length != wildDescriptorParts.length) return false;
245   -
246   - for (int i = 0; i < descriptorParts.length; i++)
247   - {
248   - if (wildDescriptorParts[i].length() > 0 && descriptorParts[i].length() > 0 && !wildDescriptorParts[i].equals(descriptorParts[i]) && !wildDescriptorParts[i].equals("*"))
249   - return false;
250   - }
251   -
252   - return true;
253   - }
254   -
255   - public static String[] splitDescriptor(String descriptor)
256   - {
257   - if (descriptor.startsWith("jinput:"))
258   - {
259   - String[] path = descriptor.split("(?<!\\\\)/");
260   - for (int i = 0; i < path.length; i++) path[i] = path[i].replaceAll("\\\\/", "/");
261   - return path;
262   - }
263   -
264   - return new String[0];
265   - }
266   -
267   - public static String format(String descriptorPart)
268   - {
269   - return descriptorPart == null ? "0" : descriptorPart.replaceAll("/", "\\\\/");
270   - }
271   -}