mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-14 09:05:17 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95afc95b24 | ||
|
|
34493b0d99 | ||
|
|
e77d2547ad | ||
|
|
40a34af431 | ||
|
|
352117fd78 | ||
|
|
81328b6684 | ||
|
|
b5af446d71 | ||
|
|
d0c6e92900 | ||
|
|
2a9c485edc | ||
|
|
a13598b17e | ||
|
|
40b54013b4 | ||
|
|
1c9a853868 | ||
|
|
da70cdd35a | ||
|
|
b993cf4a98 | ||
|
|
ac065ff5f7 | ||
|
|
913f6f6d36 | ||
|
|
9468e41bbf | ||
|
|
ffdd056a18 | ||
|
|
f157e7a6ec | ||
|
|
4a9d0f9bd5 | ||
|
|
0398916666 | ||
|
|
dec9a3924d | ||
|
|
2470120680 | ||
|
|
ba90b61607 | ||
|
|
9a5e24e338 | ||
|
|
29ef3d5ab4 | ||
|
|
f46a538b41 | ||
|
|
182aa9c0cb | ||
|
|
1857064afa | ||
|
|
cb05c8c4aa | ||
|
|
f275a24b43 | ||
|
|
1d84e8063e | ||
|
|
57befa89bb | ||
|
|
10b16d32da | ||
|
|
3f21a2c1b4 | ||
|
|
b2958c9066 | ||
|
|
9520978b81 | ||
|
|
4981aa3421 | ||
|
|
c48b48ee15 | ||
|
|
9947ba8503 | ||
|
|
a3f48734ff | ||
|
|
0378355c37 | ||
|
|
c625ef3009 | ||
|
|
d4b30422b6 | ||
|
|
6de36d78f5 | ||
|
|
7348929819 | ||
|
|
b9f4b02cb0 | ||
|
|
20e93a412e | ||
|
|
e44e8b3112 | ||
|
|
bab4d87ce7 | ||
|
|
bc9d1fe657 | ||
|
|
d4d522c597 | ||
|
|
97269a5e3d | ||
|
|
c913258ca3 | ||
|
|
c7ab872c85 | ||
|
|
e91431fb70 | ||
|
|
dfa3a2665d | ||
|
|
4fa375683f | ||
|
|
0db4624b27 | ||
|
|
c997f2adbc | ||
|
|
26e5f4b4ff | ||
|
|
2336002f20 | ||
|
|
e88a0cd13f | ||
|
|
dbf5fe38ce | ||
|
|
c47d08c89d | ||
|
|
7af5c21d74 | ||
|
|
6f96d89e2b | ||
|
|
111b0216fd | ||
|
|
1d0384f8f6 | ||
|
|
adc8972277 | ||
|
|
5990e29af7 | ||
|
|
2676c8999c | ||
|
|
3a200e901e | ||
|
|
c97ac284a5 | ||
|
|
54e06e841d | ||
|
|
7ce84491d1 | ||
|
|
532bee7ce1 | ||
|
|
e24f949517 | ||
|
|
4545beb49d | ||
|
|
3f4bf61ae6 | ||
|
|
155e846818 | ||
|
|
ba3707af22 | ||
|
|
ad79b9ed86 | ||
|
|
5f7df5e742 | ||
|
|
7aa7221756 | ||
|
|
8844554da6 | ||
|
|
6f0eedc9a6 | ||
|
|
f21cd286ca | ||
|
|
f1b533ad87 | ||
|
|
5a97d183df | ||
|
|
fbd57b3264 | ||
|
|
efc369ee83 | ||
|
|
91ecf71109 | ||
|
|
9b6525e805 | ||
|
|
dc7d02ebf6 | ||
|
|
7037184a4e | ||
|
|
bf38d94756 | ||
|
|
3d17434510 | ||
|
|
29d6c875d0 | ||
|
|
902772ed0c | ||
|
|
1229c4c4ea | ||
|
|
7fecf2ad6b | ||
|
|
c418da353f | ||
|
|
110cf372eb | ||
|
|
7a004087f7 | ||
|
|
70cfe24e67 | ||
|
|
8960f6869f | ||
|
|
71a92de5d9 | ||
|
|
3f15cd54c2 | ||
|
|
12c928c538 | ||
|
|
7406b38d8a | ||
|
|
ef646d3146 | ||
|
|
18371bd8c9 | ||
|
|
e35e4b16ff | ||
|
|
3711da9c45 | ||
|
|
6a318ddb78 | ||
|
|
2766f9a293 | ||
|
|
2e3f2461fa |
No files matched your search
@@ -15,3 +15,6 @@ fmlbranding.properties
|
||||
/binpatch
|
||||
/mcp_data/
|
||||
/map_client.txt
|
||||
/*.lzma
|
||||
**/*.lzma
|
||||
/installer_base.jar
|
||||
@@ -30,9 +30,13 @@
|
||||
<isset property="env.WORKSPACE" />
|
||||
</condition>
|
||||
<property name="fml.python.dir" location="${basedir}/python" />
|
||||
<property name="fml.lzma.dir" location="${basedir}/lzmabin" />
|
||||
<condition property="python.exe" value="${fml.python.dir}/python_fml" else="python">
|
||||
<os family="Windows" />
|
||||
</condition>
|
||||
<condition property="lzma.exe" value="${fml.lzma.dir}/xz.exe" else="xz">
|
||||
<os family="Windows" />
|
||||
</condition>
|
||||
<condition property="mcp.exists">
|
||||
<available file="${mcp.home}/runtime/commands.py" />
|
||||
</condition>
|
||||
@@ -127,9 +131,10 @@
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
<target name="merge-common">
|
||||
<target name="merge-common" depends="buildenvsetup,build-deobf-data">
|
||||
<copy todir="${client.mcp.srcdir}" overwrite="true" verbose="true">
|
||||
<fileset dir="${common.src.dir}" includes="**/*.java" />
|
||||
<fileset dir="${basedir}" includes="deobfuscation_data-${version.minecraft}.lzma"/>
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
@@ -141,21 +146,33 @@
|
||||
</condition>
|
||||
|
||||
<mkdir dir="${basedir}/target" />
|
||||
<jar destfile="${basedir}/target/${universal.jarname}.zip" duplicate="preserve">
|
||||
<path id="server.classpath">
|
||||
<pathelement path="${mcp.home}/jars/libraries/net/minecraft/launchwrapper/1.3/launchwrapper-1.3.jar"/>
|
||||
<pathelement path="${mcp.home}/jars/libraries/org/ow2/asm/asm-all/4.1/asm-all-4.1.jar"/>
|
||||
<pathelement path="${mcp.home}/jars/libraries/lzma/lzma/0.0.1/lzma-0.0.1.jar"/>
|
||||
<pathelement path="${mcp.home}/jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar"/>
|
||||
<pathelement path="${mcp.home}/jars/libraries/org/scala-lang/scala-library/2.10.2/scala-library-2.10.2.jar"/>
|
||||
<pathelement path="${mcp.home}/jars/libraries/org/scala-lang/scala-compiler/2.10.2/scala-compiler-2.10.2.jar"/>
|
||||
<pathelement path="${mcp.home}/jars/minecraft_server.${version.minecraft}.jar"/>
|
||||
</path>
|
||||
<manifestclasspath property="server.jar.classpath" jarfile="${mcp.home}/jars/minecraft_server.jar">
|
||||
<classpath refid="server.classpath" />
|
||||
</manifestclasspath>
|
||||
<jar destfile="${basedir}/target/${universal.jarname}.jar" duplicate="preserve">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="cpw.mods.fml.relauncher.ServerLaunchWrapper" />
|
||||
<attribute name="Class-Path" value="minecraft_server.jar:lib/guava-14.0-rc3.jar:lib/bcprov-jdk15on-148-src.zip:lib/asm-debug-all-4.1.jar:lib/scala-library.jar:lib/argo-3.2-src.jar" />
|
||||
<attribute name="Class-Path" value="${server.jar.classpath}" />
|
||||
</manifest>
|
||||
<fileset dir="${client.mcp.obfoutput}" includes="**/*.class" excludes="*.class,net/minecraft/**/*.class" />
|
||||
</jar>
|
||||
<antcall target="signjar" />
|
||||
<zip update="true" destfile="${basedir}/target/${universal.jarname}.zip">
|
||||
<zipfileset dir="${basedir}/binpatch" prefix="binpatch" includes="**/*.binpatch"/>
|
||||
<zip update="true" destfile="${basedir}/target/${universal.jarname}.jar">
|
||||
<fileset dir="${basedir}" includes="binpatches.pack.lzma,deobfuscation_data-${version.minecraft}.lzma"/>
|
||||
<fileset dir="${client.mcp.obfoutput}" includes="*.class" />
|
||||
<zipfileset dir="${basedir}" includes="fmlversion.properties" />
|
||||
<zipfileset dir="${basedir}" includes="LICENSE-fml.txt" />
|
||||
<zipfileset dir="${common.src.dir}" includes="mcpmod.info" />
|
||||
<zipfileset dir="${client.src.dir}" includes="mcp.png" />
|
||||
<zipfileset dir="${client.src.dir}" includes="mcplogo.png" />
|
||||
<zipfileset dir="${basedir}" includes="install/CREDITS-fml.txt" fullpath="CREDITS-fml.txt" />
|
||||
<zipfileset dir="${common.src.dir}" includes="*.cfg" />
|
||||
<mappedresources>
|
||||
@@ -176,10 +193,39 @@
|
||||
</zip>
|
||||
</target>
|
||||
|
||||
<target name="build-installer" depends="build-universal">
|
||||
<condition property="version.fullname" value="${version.minecraft}-${version}" else="${version.minecraft}-${version}-${version.branch}">
|
||||
<equals arg1="${version.branch}" arg2="master" />
|
||||
</condition>
|
||||
<tstamp>
|
||||
<format property="current.time" pattern="yyyy-MM-dd'T'HH:mm:ssZ" />
|
||||
</tstamp>
|
||||
|
||||
<delete file="${basedir}/installer_base.jar" />
|
||||
<delete file="${basedir}/install_profile.json" />
|
||||
<get src="http://files.minecraftforge.net/installer/forge-installer-1.3-shrunk.jar" dest="${basedir}/installer_base.jar" />
|
||||
<copy file="${basedir}/jsons/${version.minecraft}-rel.json" tofile="${basedir}/install_profile.json" />
|
||||
<copy file="${basedir}/installer_base.jar" tofile="${basedir}/target/${modname}-installer-${version.fullname}.jar" />
|
||||
<replace file="${basedir}/install_profile.json">
|
||||
<replaceFilter token="@version@" value="${version}" />
|
||||
<replaceFilter token="@minecraft_version@" value="${version.minecraft}" />
|
||||
<replaceFilter token="@timestamp@" value="${current.time}" />
|
||||
<replaceFilter token="@universal_jar@" value="${modname}-universal-${version.fullname}.jar" />
|
||||
</replace>
|
||||
<jar destfile="${basedir}/target/${modname}-installer-${version.fullname}.jar" update="true">
|
||||
<zipfileset dir="${basedir}" includes="install_profile.json" />
|
||||
<zipfileset dir="${basedir}/jsons" includes="big_logo.png" />
|
||||
<zipfileset dir="${basedir}/target" includes="${modname}-universal-${version.fullname}.jar" />
|
||||
</jar>
|
||||
<delete file="${basedir}/install_profile.json" />
|
||||
</target>
|
||||
|
||||
<target name="build-source-pack" depends="makeversion">
|
||||
<property name="srcpack.jarname" value="${modname}-src-${version.minecraft}-${version}-${version.branch}" />
|
||||
<zip destfile="${basedir}/target/${srcpack.jarname}.zip">
|
||||
<zipfileset dir="${basedir}" includes="LICENSE-fml.txt,difflist.txt,commands.patch,mcp_merge.cfg,mc_versions.cfg" prefix="fml" />
|
||||
<zipfileset dir="${basedir}/jsons" includes="${version.minecraft}-dev.json" fullpath="fml/fml.json"/>
|
||||
<zipfileset dir="${basedir}" includes="deobfuscation_data-${version.minecraft}.lzma" prefix="fml/common" />
|
||||
<zipfileset dir="${common.src.dir}" includes="**/*.java" prefix="fml/common" />
|
||||
<zipfileset dir="${client.src.dir}" includes="**/*.java" prefix="fml/client" />
|
||||
<zipfileset dir="${client.src.dir}" includes="mcp.png" prefix="fml/client" />
|
||||
@@ -216,7 +262,8 @@
|
||||
<globmapper from="packaged.srg" to="deobfuscation_data-${version.minecraft}" />
|
||||
</mappedresources>
|
||||
</copy>
|
||||
<exec executable="lzma">
|
||||
<exec executable="${lzma.exe}">
|
||||
<arg line="--format=lzma"/>
|
||||
<arg line="build-tmp-deobf/deobfuscation_data-${version.minecraft}"/>
|
||||
<arg line="-v"/>
|
||||
</exec>
|
||||
@@ -225,12 +272,9 @@
|
||||
</copy>
|
||||
<antcall target="writeversion" />
|
||||
<delete dir="build-tmp-deobf" />
|
||||
<zip destfile="deobfuscation_data-${version.minecraft}.jar" basedir="${basedir}">
|
||||
<include name="deobfuscation_data-${version.minecraft}.lzma"/>
|
||||
</zip>
|
||||
</target>
|
||||
|
||||
<target name="build" depends="buildenvsetup,merge-client,merge-common,build-deobf-data,build-universal,build-source-pack" />
|
||||
<target name="build" depends="buildenvsetup,build-deobf-data,merge-client,merge-common,build-universal,build-installer,build-source-pack" />
|
||||
|
||||
<target name="jenkinsbuild" depends="buildenvsetup,jenkinsfmldecompile,patch,build" />
|
||||
|
||||
@@ -269,6 +313,13 @@
|
||||
<fileset dir="${mcp.srcdir}" />
|
||||
</copy>
|
||||
<antcall target="writeversion" />
|
||||
<delete>
|
||||
<fileset dir="${basedir}" includes="deobfuscation_data-*.lzma" />
|
||||
</delete>
|
||||
<antcall target="build-deobf-data" />
|
||||
<copy todir="${common.src.dir}">
|
||||
<fileset dir="${basedir}" includes="deobfuscation_data-*.lzma" />
|
||||
</copy>
|
||||
<antcall target="makeeclipse" />
|
||||
<echo>Setup complete! You should now be able to open ${basedir}/eclipse as a workspace in eclipse and import/refresh the FML project</echo>
|
||||
</target>
|
||||
@@ -381,28 +432,42 @@
|
||||
<signjar alias="FML" jar="${basedir}/target/${universal.jarname}.zip" keypass="${sign.KEYPASS}" keystore="${env.JENKINS_HOME}/${sign.KEYSTORE}" storepass="${sign.STOREPASS}" verbose="true" />
|
||||
</target>
|
||||
<target name="makebinpatches" depends="buildenvsetup,makeversion">
|
||||
<path id="diffset.libs">
|
||||
<pathelement path="${mcp.home}/jars/libraries/com/google/guava/guava/14.0/guava-14.0.jar"/>
|
||||
<pathelement path="${mcp.home}/jars/libraries/org/ow2/asm/asm-debug-all/4.1/asm-debug-all-4.1.jar"/>
|
||||
<pathelement path="${mcp.home}/jars/libraries/lzma/lzma/0.0.1/lzma-0.0.1.jar"/>
|
||||
<pathelement path="${mcp.obfoutput}/minecraft"/>
|
||||
</path>
|
||||
<delete dir="${basedir}/binpatch" verbose="true"/>
|
||||
<java classname="cpw.mods.fml.common.patcher.GenDiffSet">
|
||||
<classpath>
|
||||
<pathelement path="${mcp.obfoutput}/minecraft"/>
|
||||
<fileset dir="${mcp.home}/lib" includes="guava-14.0-rc3.jar,asm-debug-all-4.1.jar"/>
|
||||
</classpath>
|
||||
<java classname="cpw.mods.fml.common.patcher.GenDiffSet" classpathref="diffset.libs">
|
||||
<arg path="${mcp.home}/jars/versions/${version.minecraft}/${version.minecraft}.jar.backup"/>
|
||||
<arg path="${mcp.obfoutput}/minecraft"/>
|
||||
<arg path="${basedir}/deobfuscation_data-${version.minecraft}.lzma"/>
|
||||
<arg path="${basedir}/binpatch/client"/>
|
||||
<arg value="false"/>
|
||||
</java>
|
||||
<java classname="cpw.mods.fml.common.patcher.GenDiffSet">
|
||||
<classpath>
|
||||
<pathelement path="${mcp.obfoutput}/minecraft"/>
|
||||
<fileset dir="${mcp.home}/lib" includes="guava-14.0-rc3.jar,asm-debug-all-4.1.jar"/>
|
||||
</classpath>
|
||||
<java classname="cpw.mods.fml.common.patcher.GenDiffSet" classpathref="diffset.libs">
|
||||
<arg path="${mcp.home}/jars/minecraft_server.${version.minecraft}.jar.backup"/>
|
||||
<arg path="${mcp.obfoutput}/minecraft"/>
|
||||
<arg path="${basedir}/deobfuscation_data-${version.minecraft}.lzma"/>
|
||||
<arg path="${basedir}/binpatch/server"/>
|
||||
<arg value="true"/>
|
||||
</java>
|
||||
<mkdir dir="binpatch-tmp"/>
|
||||
<zip destfile="binpatch-tmp/binpatches.jar" basedir="${basedir}">
|
||||
<include name="binpatch/**/*.binpatch"/>
|
||||
</zip>
|
||||
<apply executable="pack200">
|
||||
<arg line="--no-gzip"/>
|
||||
<arg line="binpatch-tmp/binpatches.pack"/>
|
||||
<fileset dir="binpatch-tmp" includes="binpatches.jar"/>
|
||||
</apply>
|
||||
<apply executable="${lzma.exe}">
|
||||
<arg line="--format=lzma"/>
|
||||
<arg line="-v"/>
|
||||
<fileset dir="binpatch-tmp" includes="binpatches.pack"/>
|
||||
</apply>
|
||||
<move file="binpatch-tmp/binpatches.pack.lzma" todir="${basedir}"/>
|
||||
<delete dir="binpatch-tmp" failonerror="false"/>
|
||||
</target>
|
||||
</project>
|
||||
@@ -12,6 +12,8 @@
|
||||
*/
|
||||
package cpw.mods.fml.client;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@@ -28,6 +30,11 @@ import net.minecraft.client.multiplayer.NetClientHandler;
|
||||
import net.minecraft.client.multiplayer.WorldClient;
|
||||
import net.minecraft.client.renderer.entity.Render;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
import net.minecraft.client.resources.FileResourcePack;
|
||||
import net.minecraft.client.resources.FolderResourcePack;
|
||||
import net.minecraft.client.resources.ReloadableResourceManager;
|
||||
import net.minecraft.client.resources.ResourcePack;
|
||||
import net.minecraft.client.resources.SimpleReloadableResourceManager;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
@@ -44,6 +51,7 @@ import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.MapDifference;
|
||||
import com.google.common.collect.MapDifference.ValueDifference;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import cpw.mods.fml.client.modloader.ModLoaderClientHelper;
|
||||
import cpw.mods.fml.client.registry.KeyBindingRegistry;
|
||||
@@ -78,7 +86,7 @@ import cpw.mods.fml.relauncher.Side;
|
||||
/**
|
||||
* Handles primary communication from hooked code into the system
|
||||
*
|
||||
* The FML entry point is {@link #beginMinecraftLoading(Minecraft)} called from
|
||||
* The FML entry point is {@link #beginMinecraftLoading(Minecraft, List)} called from
|
||||
* {@link Minecraft}
|
||||
*
|
||||
* Obfuscated code should focus on this class and other members of the "server"
|
||||
@@ -116,7 +124,7 @@ public class FMLClientHandler implements IFMLSidedHandler
|
||||
|
||||
private ModSortingException modSorting;
|
||||
|
||||
private boolean loading;
|
||||
private boolean loading = true;
|
||||
|
||||
private WrongMinecraftVersionException wrongMC;
|
||||
|
||||
@@ -126,14 +134,25 @@ public class FMLClientHandler implements IFMLSidedHandler
|
||||
|
||||
private boolean serverShouldBeKilledQuietly;
|
||||
|
||||
private List<ResourcePack> resourcePackList;
|
||||
|
||||
private ReloadableResourceManager resourceManager;
|
||||
|
||||
private Map<String, ResourcePack> resourcePackMap;
|
||||
|
||||
/**
|
||||
* Called to start the whole game off
|
||||
*
|
||||
* @param minecraft The minecraft instance being launched
|
||||
* @param resourcePackList The resource pack list we will populate with mods
|
||||
* @param resourceManager The resource manager
|
||||
*/
|
||||
public void beginMinecraftLoading(Minecraft minecraft)
|
||||
public void beginMinecraftLoading(Minecraft minecraft, List resourcePackList, ReloadableResourceManager resourceManager)
|
||||
{
|
||||
client = minecraft;
|
||||
this.resourcePackList = resourcePackList;
|
||||
this.resourceManager = resourceManager;
|
||||
this.resourcePackMap = Maps.newHashMap();
|
||||
if (minecraft.func_71355_q())
|
||||
{
|
||||
FMLLog.severe("DEMO MODE DETECTED, FML will not work. Finishing now.");
|
||||
@@ -141,7 +160,6 @@ public class FMLClientHandler implements IFMLSidedHandler
|
||||
return;
|
||||
}
|
||||
|
||||
loading = true;
|
||||
// TextureFXManager.instance().setClient(client);
|
||||
FMLCommonHandler.instance().beginLoading(this);
|
||||
new ModLoaderClientHelper(client);
|
||||
@@ -223,7 +241,8 @@ public class FMLClientHandler implements IFMLSidedHandler
|
||||
haltGame("There was a severe problem during mod loading that has caused the game to fail", le);
|
||||
return;
|
||||
}
|
||||
LanguageRegistry.reloadLanguageTable();
|
||||
// Reload resources
|
||||
client.func_110436_a();
|
||||
RenderingRegistry.instance().loadEntityRenderers((Map<Class<? extends Entity>, Render>)RenderManager.field_78727_a.field_78729_o);
|
||||
|
||||
loading = false;
|
||||
@@ -550,4 +569,47 @@ public class FMLClientHandler implements IFMLSidedHandler
|
||||
{
|
||||
return client.field_71462_r != null && client.field_71462_r.getClass().equals(gui);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void addModAsResource(ModContainer container)
|
||||
{
|
||||
Class<?> resourcePackType = container.getCustomResourcePackClass();
|
||||
if (resourcePackType != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
ResourcePack pack = (ResourcePack) resourcePackType.getConstructor(ModContainer.class).newInstance(container);
|
||||
resourcePackList.add(pack);
|
||||
resourcePackMap.put(container.getModId(), pack);
|
||||
}
|
||||
catch (NoSuchMethodException e)
|
||||
{
|
||||
FMLLog.log(Level.SEVERE, "The container %s (type %s) returned an invalid class for it's resource pack.", container.getName(), container.getClass().getName());
|
||||
return;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FMLLog.log(Level.SEVERE, e, "An unexpected exception occurred constructing the custom resource pack for %s", container.getName());
|
||||
throw Throwables.propagate(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateResourcePackList()
|
||||
{
|
||||
client.func_110436_a();
|
||||
}
|
||||
|
||||
public ResourcePack getResourcePackFor(String modId)
|
||||
{
|
||||
return resourcePackMap.get(modId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCurrentLanguage()
|
||||
{
|
||||
return client.func_135016_M().func_135041_c().func_135034_a();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package cpw.mods.fml.client;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
|
||||
import net.minecraft.client.resources.FileResourcePack;
|
||||
|
||||
public class FMLFileResourcePack extends FileResourcePack {
|
||||
|
||||
private ModContainer container;
|
||||
|
||||
public FMLFileResourcePack(ModContainer container)
|
||||
{
|
||||
super(container.getSource());
|
||||
this.container = container;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String func_130077_b()
|
||||
{
|
||||
return "FMLFileResourcePack:"+container.getName();
|
||||
}
|
||||
@Override
|
||||
protected InputStream func_110591_a(String resourceName) throws IOException
|
||||
{
|
||||
try
|
||||
{
|
||||
return super.func_110591_a(resourceName);
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
if ("pack.mcmeta".equals(resourceName))
|
||||
{
|
||||
FMLLog.log(container.getName(), Level.WARNING, "Mod %s is missing a pack.mcmeta file, things may not work well", container.getName());
|
||||
return new ByteArrayInputStream(("{\n" +
|
||||
" \"pack\": {\n"+
|
||||
" \"description\": \"dummy FML pack for "+container.getName()+"\",\n"+
|
||||
" \"pack_format\": 1\n"+
|
||||
"}\n" +
|
||||
"}").getBytes(Charsets.UTF_8));
|
||||
}
|
||||
else throw ioe;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BufferedImage func_110586_a() throws IOException
|
||||
{
|
||||
return ImageIO.read(func_110591_a(container.getMetadata().logoFile));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package cpw.mods.fml.client;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import net.minecraft.client.resources.FolderResourcePack;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
|
||||
public class FMLFolderResourcePack extends FolderResourcePack {
|
||||
|
||||
private ModContainer container;
|
||||
|
||||
public FMLFolderResourcePack(ModContainer container)
|
||||
{
|
||||
super(container.getSource());
|
||||
this.container = container;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String func_130077_b()
|
||||
{
|
||||
return "FMLFileResourcePack:"+container.getName();
|
||||
}
|
||||
@Override
|
||||
protected InputStream func_110591_a(String resourceName) throws IOException
|
||||
{
|
||||
try
|
||||
{
|
||||
return super.func_110591_a(resourceName);
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
if ("pack.mcmeta".equals(resourceName))
|
||||
{
|
||||
FMLLog.log(container.getName(), Level.WARNING, "Mod %s is missing a pack.mcmeta file, things may not work well", container.getName());
|
||||
return new ByteArrayInputStream(("{\n" +
|
||||
" \"pack\": {\n"+
|
||||
" \"description\": \"dummy FML pack for "+container.getName()+"\",\n"+
|
||||
" \"pack_format\": 1\n"+
|
||||
"}\n" +
|
||||
"}").getBytes(Charsets.UTF_8));
|
||||
}
|
||||
else throw ioe;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BufferedImage func_110586_a() throws IOException
|
||||
{
|
||||
return ImageIO.read(func_110591_a(container.getMetadata().logoFile));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -21,6 +21,7 @@ public class GuiCustomModLoadingErrorScreen extends GuiErrorScreen
|
||||
private CustomModLoadingErrorDisplayException customException;
|
||||
public GuiCustomModLoadingErrorScreen(CustomModLoadingErrorDisplayException customException)
|
||||
{
|
||||
super(null,null);
|
||||
this.customException = customException;
|
||||
}
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -29,6 +29,7 @@ public class GuiDupesFound extends GuiErrorScreen
|
||||
|
||||
public GuiDupesFound(DuplicateModsFoundException dupes)
|
||||
{
|
||||
super(null,null);
|
||||
this.dupes = dupes;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,15 +15,26 @@
|
||||
package cpw.mods.fml.client;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiSmallButton;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import net.minecraft.client.renderer.texture.SimpleTexture;
|
||||
import net.minecraft.client.renderer.texture.TextureManager;
|
||||
import net.minecraft.client.renderer.texture.TextureObject;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.client.resources.ResourcePack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.StringTranslate;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
@@ -120,28 +131,53 @@ public class GuiModList extends GuiScreen
|
||||
if (!logoFile.isEmpty())
|
||||
{
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
// TODO
|
||||
// this.field_73882_e.field_71446_o.func_98187_b(logoFile);
|
||||
Dimension dim = TextureFXManager.instance().getTextureDimensions(logoFile);
|
||||
double scaleX = dim.width / 200.0;
|
||||
double scaleY = dim.height / 65.0;
|
||||
double scale = 1.0;
|
||||
if (scaleX > 1 || scaleY > 1)
|
||||
TextureManager tm = field_73882_e.func_110434_K();
|
||||
ResourcePack pack = FMLClientHandler.instance().getResourcePackFor(selectedMod.getModId());
|
||||
try
|
||||
{
|
||||
scale = 1.0 / Math.max(scaleX, scaleY);
|
||||
}
|
||||
dim.width *= scale;
|
||||
dim.height *= scale;
|
||||
int top = 32;
|
||||
Tessellator tess = Tessellator.field_78398_a;
|
||||
tess.func_78382_b();
|
||||
tess.func_78374_a(offset, top + dim.height, field_73735_i, 0, 1);
|
||||
tess.func_78374_a(offset + dim.width, top + dim.height, field_73735_i, 1, 1);
|
||||
tess.func_78374_a(offset + dim.width, top, field_73735_i, 1, 0);
|
||||
tess.func_78374_a(offset, top, field_73735_i, 0, 0);
|
||||
tess.func_78381_a();
|
||||
BufferedImage logo = null;
|
||||
if (pack!=null)
|
||||
{
|
||||
logo = pack.func_110586_a();
|
||||
}
|
||||
else
|
||||
{
|
||||
InputStream logoResource = getClass().getResourceAsStream(logoFile);
|
||||
if (logoResource != null)
|
||||
{
|
||||
logo = ImageIO.read(logoResource);
|
||||
}
|
||||
}
|
||||
if (logo != null)
|
||||
{
|
||||
ResourceLocation rl = tm.func_110578_a("modlogo", new DynamicTexture(logo));
|
||||
this.field_73882_e.field_71446_o.func_110577_a(rl);
|
||||
Dimension dim = new Dimension(logo.getWidth(), logo.getHeight());
|
||||
double scaleX = dim.width / 200.0;
|
||||
double scaleY = dim.height / 65.0;
|
||||
double scale = 1.0;
|
||||
if (scaleX > 1 || scaleY > 1)
|
||||
{
|
||||
scale = 1.0 / Math.max(scaleX, scaleY);
|
||||
}
|
||||
dim.width *= scale;
|
||||
dim.height *= scale;
|
||||
int top = 32;
|
||||
Tessellator tess = Tessellator.field_78398_a;
|
||||
tess.func_78382_b();
|
||||
tess.func_78374_a(offset, top + dim.height, field_73735_i, 0, 1);
|
||||
tess.func_78374_a(offset + dim.width, top + dim.height, field_73735_i, 1, 1);
|
||||
tess.func_78374_a(offset + dim.width, top, field_73735_i, 1, 0);
|
||||
tess.func_78374_a(offset, top, field_73735_i, 0, 0);
|
||||
tess.func_78381_a();
|
||||
|
||||
shifty += 65;
|
||||
shifty += 65;
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
this.field_73886_k.func_78261_a(selectedMod.getMetadata().name, offset, shifty, 0xFFFFFF);
|
||||
shifty += 12;
|
||||
|
||||
@@ -24,6 +24,7 @@ public class GuiModsMissing extends GuiErrorScreen
|
||||
|
||||
public GuiModsMissing(MissingModsException modsMissing)
|
||||
{
|
||||
super(null,null);
|
||||
this.modsMissing = modsMissing;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -22,6 +22,7 @@ public class GuiWrongMinecraft extends GuiErrorScreen
|
||||
private WrongMinecraftVersionException wrongMC;
|
||||
public GuiWrongMinecraft(WrongMinecraftVersionException wrongMC)
|
||||
{
|
||||
super(null,null);
|
||||
this.wrongMC = wrongMC;
|
||||
}
|
||||
@Override
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -172,6 +172,10 @@ public class KeyBindingRegistry
|
||||
|
||||
private Set<KeyHandler> keyHandlers = Sets.newLinkedHashSet();
|
||||
|
||||
/**
|
||||
* Deprecated as it should not be used by client code
|
||||
* @return
|
||||
*/
|
||||
@Deprecated
|
||||
public static KeyBindingRegistry instance()
|
||||
{
|
||||
|
||||
File renamed without changes.
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
@@ -448,6 +448,7 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr
|
||||
return null;
|
||||
}
|
||||
|
||||
@SideOnly(CLIENT)
|
||||
public void clientCustomPayload(NetClientHandler handler, Packet250CustomPayload packet)
|
||||
{
|
||||
|
||||
|
||||
@@ -626,6 +626,7 @@ public class ModLoader
|
||||
*
|
||||
* @param block
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void registerBlock(Block block)
|
||||
{
|
||||
GameRegistry.registerBlock(block);
|
||||
@@ -637,6 +638,7 @@ public class ModLoader
|
||||
* @param block
|
||||
* @param itemclass
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public static void registerBlock(Block block, Class<? extends ItemBlock> itemclass)
|
||||
{
|
||||
GameRegistry.registerBlock(block, itemclass);
|
||||
|
||||
+69
-20
@@ -1,6 +1,17 @@
|
||||
--- commands.py
|
||||
+++ commands.py
|
||||
@@ -142,6 +142,8 @@
|
||||
@@ -126,8 +126,8 @@
|
||||
|
||||
|
||||
def truncate(text, length):
|
||||
- if len(text) > length:
|
||||
- return text[:length] + '...'
|
||||
+ #if len(text) > length:
|
||||
+ # return text[:length] + '...'
|
||||
return text
|
||||
|
||||
|
||||
@@ -139,6 +139,8 @@
|
||||
fieldnames = csvreader.fieldnames
|
||||
return set(fieldnames)
|
||||
|
||||
@@ -9,7 +20,7 @@
|
||||
|
||||
class Commands(object):
|
||||
"""Contains the commands and initialisation for a full mcp run"""
|
||||
@@ -980,6 +982,8 @@
|
||||
@@ -950,6 +952,8 @@
|
||||
binlk = {CLIENT: self.binclient, SERVER: self.binserver}
|
||||
testlk = {CLIENT: self.testclient, SERVER: self.testserver}
|
||||
|
||||
@@ -18,7 +29,7 @@
|
||||
if not os.path.exists(os.path.join(binlk[side], os.path.normpath(testlk[side] + '.class'))):
|
||||
return False
|
||||
return True
|
||||
@@ -1311,6 +1315,9 @@
|
||||
@@ -1281,23 +1285,34 @@
|
||||
pathbinlk = {CLIENT: self.binclient, SERVER: self.binserver}
|
||||
pathsrclk = {CLIENT: self.srcclient, SERVER: self.srcserver}
|
||||
pathlog = {CLIENT: self.clientrecomplog, SERVER: self.serverrecomplog}
|
||||
@@ -28,25 +39,63 @@
|
||||
|
||||
if not os.path.exists(pathbinlk[side]):
|
||||
os.makedirs(pathbinlk[side])
|
||||
@@ -1368,7 +1375,7 @@
|
||||
raise
|
||||
|
||||
def startserver(self):
|
||||
# HINT: We create the list of source directories based on the list of packages
|
||||
# on windows we just pass wildcards, otherwise we pass the full file list
|
||||
- if self.osname == 'win':
|
||||
+ if self.osname == 'win' and False == True: #FML: Disable for windows we write to file now
|
||||
all_files = False
|
||||
append_pattern = True
|
||||
else:
|
||||
all_files = True
|
||||
append_pattern = False
|
||||
pkglist = filterdirs(pathsrclk[side], '*.java', append_pattern=append_pattern, all_files=all_files)
|
||||
+ from tempfile import NamedTemporaryFile
|
||||
if self.cmdrecompscala: # Compile scala before java as scala scans java files, but not vice-versa
|
||||
pkglistscala = pkglist[:]
|
||||
pkglistscala.extend(filterdirs(pathsrclk[side], '*.scala', append_pattern=append_pattern, all_files=all_files))
|
||||
- dirs = ' '.join(pkglistscala)
|
||||
+ f = NamedTemporaryFile(mode='wb', suffix='.txt', prefix ='scala_src_path_', delete=False) #FML: We write to a temporary file just in case the command is to long
|
||||
+ for line in pkglistscala:
|
||||
+ if os.sep == '\\':
|
||||
+ f.write('"%s"\n' % os.path.abspath(line).replace(os.sep, os.sep + os.sep))
|
||||
+ else:
|
||||
+ f.write('"%s"\n' % os.path.abspath(line))
|
||||
+ f.close()
|
||||
+ dirs = '@"%s"' % f.name
|
||||
classpath = os.pathsep.join(cplk[side])
|
||||
forkcmd = self.cmdrecompscala.format(classpath=classpath, sourcepath=pathsrclk[side], outpath=pathbinlk[side], pkgs=dirs)
|
||||
try:
|
||||
@@ -1317,7 +1332,15 @@
|
||||
self.logger.error('================================')
|
||||
self.logger.error('')
|
||||
raise
|
||||
- dirs = ' '.join(pkglist)
|
||||
+ os.unlink(f.name)
|
||||
+ f = NamedTemporaryFile(mode='wb', suffix='.txt', prefix ='java_src_path_', delete=False) #FML: We write to a temporary file just in case the command is to long
|
||||
+ for line in pkglist:
|
||||
+ if os.sep == '\\':
|
||||
+ f.write('"%s"\n' % os.path.abspath(line).replace('\\', '\\\\'))
|
||||
+ else:
|
||||
+ f.write('"%s"\n' % os.path.abspath(line))
|
||||
+ f.close()
|
||||
+ dirs = '@"%s"' % f.name
|
||||
classpath = os.pathsep.join(cplk[side])
|
||||
forkcmd = self.cmdrecomp.format(classpath=classpath, sourcepath=pathsrclk[side], outpath=pathbinlk[side],
|
||||
pkgs=dirs)
|
||||
@@ -1336,9 +1359,10 @@
|
||||
self.logger.error('==================')
|
||||
self.logger.error('')
|
||||
raise
|
||||
+ os.unlink(f.name)
|
||||
|
||||
def startserver(self, mainclass, extraargs):
|
||||
- classpath = [self.binserver] + self.cpathserver
|
||||
+ classpath = [self.binclient, self.srcclient] + self.cpathserver
|
||||
+ classpath = [self.binclient, self.srcclient] + self.cpathserver + self.cpathclient
|
||||
classpath = [os.path.join('..', p) for p in classpath]
|
||||
classpath = os.pathsep.join(classpath)
|
||||
os.chdir(self.dirjars)
|
||||
@@ -1376,7 +1383,7 @@
|
||||
self.runmc(forkcmd)
|
||||
|
||||
def startclient(self):
|
||||
- classpath = [self.binclient] + self.cpathclient
|
||||
+ classpath = [self.binclient, self.srcclient] + self.cpathclient
|
||||
classpath = [os.path.join('..', p) for p in classpath]
|
||||
classpath = os.pathsep.join(classpath)
|
||||
natives = os.path.join('..', self.dirnatives)
|
||||
@@ -1733,7 +1740,7 @@
|
||||
@@ -1703,7 +1727,7 @@
|
||||
self.runcmd(forkcmd)
|
||||
return True
|
||||
|
||||
@@ -55,7 +104,7 @@
|
||||
if not reobf:
|
||||
md5lk = {CLIENT: self.md5client, SERVER: self.md5server}
|
||||
else:
|
||||
@@ -1748,6 +1755,9 @@
|
||||
@@ -1718,6 +1742,9 @@
|
||||
class_path = ''
|
||||
else:
|
||||
class_path += '/'
|
||||
@@ -65,7 +114,7 @@
|
||||
for class_file in fnmatch.filter(filelist, '*.class'):
|
||||
class_name = class_path + os.path.splitext(class_file)[0]
|
||||
bin_file = os.path.normpath(os.path.join(path, class_file))
|
||||
@@ -1920,6 +1930,9 @@
|
||||
@@ -1890,6 +1917,9 @@
|
||||
sys.exit(1)
|
||||
|
||||
for entry in newfiles:
|
||||
@@ -75,7 +124,7 @@
|
||||
if entry[3] == 'U':
|
||||
self.logger.info('Retrieving file from server : %s', entry[0])
|
||||
cur_file = os.path.normpath(entry[0])
|
||||
@@ -1940,6 +1953,9 @@
|
||||
@@ -1910,6 +1940,9 @@
|
||||
md5reoblk = {CLIENT: self.md5reobfclient, SERVER: self.md5reobfserver}
|
||||
outpathlk = {CLIENT: self.srcmodclient, SERVER: self.srcmodserver}
|
||||
src = {CLIENT: self.srcclient, SERVER: self.srcserver}
|
||||
|
||||
@@ -175,4 +175,9 @@ public class DummyModContainer implements ModContainer
|
||||
{
|
||||
return EMPTY_PROPERTIES;
|
||||
}
|
||||
@Override
|
||||
public Class<?> getCustomResourcePackClass()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -468,7 +468,7 @@ public class FMLCommonHandler
|
||||
MinecraftServer server = getMinecraftServerInstance();
|
||||
Loader.instance().serverStopped();
|
||||
// FORCE the internal server to stop: hello optifine workaround!
|
||||
ObfuscationReflectionHelper.setPrivateValue(MinecraftServer.class, server, false, "field_71316_v", "u", "serverStopped");
|
||||
if (server!=null) ObfuscationReflectionHelper.setPrivateValue(MinecraftServer.class, server, false, "field_71316_v", "u", "serverStopped");
|
||||
}
|
||||
|
||||
public String getModName()
|
||||
@@ -486,4 +486,20 @@ public class FMLCommonHandler
|
||||
}
|
||||
return Joiner.on(',').join(modNames);
|
||||
}
|
||||
|
||||
public void addModToResourcePack(ModContainer container)
|
||||
{
|
||||
sidedDelegate.addModAsResource(container);
|
||||
}
|
||||
|
||||
public void updateResourcePackList()
|
||||
{
|
||||
sidedDelegate.updateResourcePackList();
|
||||
}
|
||||
|
||||
public String getCurrentLanguage()
|
||||
{
|
||||
|
||||
return sidedDelegate.getCurrentLanguage();
|
||||
}
|
||||
}
|
||||
@@ -5,13 +5,14 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
|
||||
package cpw.mods.fml.common;
|
||||
|
||||
import java.io.File;
|
||||
import java.security.cert.Certificate;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
@@ -26,6 +27,9 @@ import net.minecraft.world.storage.WorldInfo;
|
||||
|
||||
import com.google.common.eventbus.EventBus;
|
||||
|
||||
import cpw.mods.fml.client.FMLFileResourcePack;
|
||||
import cpw.mods.fml.client.FMLFolderResourcePack;
|
||||
import cpw.mods.fml.common.asm.FMLSanityChecker;
|
||||
import cpw.mods.fml.common.registry.GameData;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.common.registry.ItemData;
|
||||
@@ -123,4 +127,15 @@ public class FMLDummyContainer extends DummyModContainer implements WorldAccessC
|
||||
Certificate[] certificates = getClass().getProtectionDomain().getCodeSource().getCertificates();
|
||||
return certificates != null ? certificates[0] : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getSource()
|
||||
{
|
||||
return FMLSanityChecker.fmlLocation;
|
||||
}
|
||||
@Override
|
||||
public Class<?> getCustomResourcePackClass()
|
||||
{
|
||||
return getSource().isDirectory() ? FMLFolderResourcePack.class : FMLFileResourcePack.class;
|
||||
}
|
||||
}
|
||||
@@ -89,6 +89,7 @@ public class FMLModContainer implements ModContainer
|
||||
private DefaultArtifactVersion processedVersion;
|
||||
private boolean isNetworkMod;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private static final BiMap<Class<? extends FMLEvent>, Class<? extends Annotation>> modAnnotationTypes = ImmutableBiMap.<Class<? extends FMLEvent>, Class<? extends Annotation>>builder()
|
||||
.put(FMLPreInitializationEvent.class, Mod.PreInit.class)
|
||||
.put(FMLInitializationEvent.class, Mod.Init.class)
|
||||
@@ -342,7 +343,7 @@ public class FMLModContainer implements ModContainer
|
||||
if (m.getParameterTypes().length == 1 && modAnnotationTypes.containsKey(m.getParameterTypes()[0]))
|
||||
{
|
||||
m.setAccessible(true);
|
||||
eventMethods.put((Class<? extends FMLEvent>) m.getParameterTypes()[1],m);
|
||||
eventMethods.put((Class<? extends FMLEvent>) m.getParameterTypes()[0],m);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -595,4 +596,17 @@ public class FMLModContainer implements ModContainer
|
||||
{
|
||||
return customModProperties;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getCustomResourcePackClass()
|
||||
{
|
||||
try
|
||||
{
|
||||
return getSource().isDirectory() ? Class.forName("cpw.mods.fml.client.FMLFolderResourcePack", true, getClass().getClassLoader()) : Class.forName("cpw.mods.fml.client.FMLFileResourcePack",true, getClass().getClassLoader());
|
||||
}
|
||||
catch (ClassNotFoundException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -62,4 +62,10 @@ public interface IFMLSidedHandler
|
||||
boolean shouldServerShouldBeKilledQuietly();
|
||||
|
||||
void disconnectIDMismatch(MapDifference<Integer, ItemData> s, NetHandler toKill, INetworkManager mgr);
|
||||
|
||||
void addModAsResource(ModContainer container);
|
||||
|
||||
void updateResourcePackList();
|
||||
|
||||
String getCurrentLanguage();
|
||||
}
|
||||
@@ -30,7 +30,7 @@ public class InjectedModContainer implements ModContainer
|
||||
|
||||
public InjectedModContainer(ModContainer mc, File source)
|
||||
{
|
||||
this.source = source;
|
||||
this.source = source != null ? source : new File("minecraft.jar");
|
||||
this.wrappedContainer = mc;
|
||||
}
|
||||
|
||||
@@ -161,4 +161,10 @@ public class InjectedModContainer implements ModContainer
|
||||
{
|
||||
return wrappedContainer.getCustomModProperties();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getCustomResourcePackClass()
|
||||
{
|
||||
return wrappedContainer.getCustomResourcePackClass();
|
||||
}
|
||||
}
|
||||
@@ -84,6 +84,7 @@ public class LoadController
|
||||
activeModList.add(mod);
|
||||
modStates.put(mod.getModId(), ModState.UNLOADED);
|
||||
eventBus.put(mod.getModId(), bus);
|
||||
FMLCommonHandler.instance().addModToResourcePack(mod);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -94,6 +95,7 @@ public class LoadController
|
||||
}
|
||||
|
||||
eventChannels = eventBus.build();
|
||||
FMLCommonHandler.instance().updateResourcePackList();
|
||||
}
|
||||
|
||||
public void distributeStateMessage(LoaderState state, Object... eventData)
|
||||
|
||||
@@ -322,7 +322,6 @@ public class Loader
|
||||
FMLLog.fine("Building injected Mod Containers %s", injectedContainers);
|
||||
// Add in the MCP mod container
|
||||
mods.add(new InjectedModContainer(mcp,new File("minecraft.jar")));
|
||||
File coremod = new File(minecraftDir,"coremods");
|
||||
for (String cont : injectedContainers)
|
||||
{
|
||||
ModContainer mc;
|
||||
@@ -335,7 +334,7 @@ public class Loader
|
||||
FMLLog.log(Level.SEVERE, e, "A problem occured instantiating the injected mod container %s", cont);
|
||||
throw new LoaderException(e);
|
||||
}
|
||||
mods.add(new InjectedModContainer(mc,coremod));
|
||||
mods.add(new InjectedModContainer(mc,mc.getSource()));
|
||||
}
|
||||
ModDiscoverer discoverer = new ModDiscoverer();
|
||||
FMLLog.fine("Attempting to load mods contained in the minecraft jar file and associated classes");
|
||||
@@ -344,6 +343,12 @@ public class Loader
|
||||
|
||||
FMLLog.info("Searching %s for mods", canonicalModsDir.getAbsolutePath());
|
||||
discoverer.findModDirMods(canonicalModsDir);
|
||||
File versionSpecificModsDir = new File(canonicalModsDir,mccversion);
|
||||
if (versionSpecificModsDir.isDirectory())
|
||||
{
|
||||
FMLLog.info("Also searching %s for mods", versionSpecificModsDir);
|
||||
discoverer.findModDirMods(versionSpecificModsDir);
|
||||
}
|
||||
|
||||
mods.addAll(discoverer.identifyMods());
|
||||
identifyDuplicates(mods);
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.lang.annotation.Target;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.network.packet.Packet250CustomPayload;
|
||||
|
||||
import cpw.mods.fml.common.event.FMLEvent;
|
||||
import cpw.mods.fml.common.event.FMLFingerprintViolationEvent;
|
||||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
@@ -68,6 +69,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
|
||||
* // Do stuff in pre-init phase (read config, create blocks and items, register them)
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
* @author cpw
|
||||
@@ -422,7 +424,7 @@ public @interface Mod
|
||||
*
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
@Target(ElementType.METHOD)
|
||||
public @interface InstanceFactory {
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,7 @@ import java.net.URLClassLoader;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import net.minecraft.launchwrapper.IClassTransformer;
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
@@ -82,8 +83,21 @@ public class ModClassLoader extends URLClassLoader
|
||||
|
||||
public Class<? extends BaseModProxy> loadBaseModClass(String modClazzName) throws Exception
|
||||
{
|
||||
AccessTransformer transformer = (AccessTransformer)mainClassLoader.getTransformers().get(0);
|
||||
transformer.ensurePublicAccessFor(modClazzName);
|
||||
AccessTransformer accessTransformer = null;
|
||||
for (IClassTransformer transformer : mainClassLoader.getTransformers())
|
||||
{
|
||||
if (transformer instanceof AccessTransformer)
|
||||
{
|
||||
accessTransformer = (AccessTransformer) transformer;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (accessTransformer == null)
|
||||
{
|
||||
FMLLog.log(Level.SEVERE, "No access transformer found");
|
||||
throw new LoaderException();
|
||||
}
|
||||
accessTransformer.ensurePublicAccessFor(modClazzName);
|
||||
return (Class<? extends BaseModProxy>) Class.forName(modClazzName, true, this);
|
||||
}
|
||||
}
|
||||
@@ -136,4 +136,6 @@ public interface ModContainer
|
||||
|
||||
public static final Map<String,String> EMPTY_PROPERTIES = ImmutableMap.of();
|
||||
Map<String,String> getCustomModProperties();
|
||||
|
||||
public Class<?> getCustomResourcePackClass();
|
||||
}
|
||||
@@ -40,6 +40,7 @@ import java.lang.annotation.Target;
|
||||
* public class ClientProxy extends CommonProxy {
|
||||
* // Override common stuff with client specific stuff here
|
||||
* }
|
||||
* }
|
||||
* </pre>
|
||||
* @author cpw
|
||||
*
|
||||
|
||||
@@ -14,10 +14,13 @@ package cpw.mods.fml.common.asm;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.ObjectInputStream.GetField;
|
||||
import java.io.StringReader;
|
||||
import java.net.JarURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
import java.nio.charset.Charset;
|
||||
import java.security.CodeSource;
|
||||
import java.security.cert.CertPath;
|
||||
@@ -32,6 +35,10 @@ import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.logging.Level;
|
||||
import java.util.zip.ZipEntry;
|
||||
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
@@ -42,17 +49,22 @@ import org.objectweb.asm.ClassVisitor;
|
||||
import org.objectweb.asm.FieldVisitor;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.io.ByteStreams;
|
||||
|
||||
import cpw.mods.fml.common.CertificateHelper;
|
||||
import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper;
|
||||
import cpw.mods.fml.common.patcher.ClassPatchManager;
|
||||
import cpw.mods.fml.relauncher.FMLLaunchHandler;
|
||||
import cpw.mods.fml.relauncher.FMLRelaunchLog;
|
||||
import cpw.mods.fml.relauncher.IFMLCallHook;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
|
||||
public class FMLSanityChecker implements IFMLCallHook
|
||||
{
|
||||
private static final String FMLFINGERPRINT = "AE:F6:54:79:96:E9:1B:D1:59:70:6C:B4:6B:F5:4A:89:C5:CE:08:1D".toLowerCase().replace(":","");
|
||||
private static final String FORGEFINGERPRINT = "DE:4C:F8:A3:F3:BC:15:63:58:10:04:4C:39:24:0B:F9:68:04:EA:7D".toLowerCase().replace(":", "");
|
||||
private static final String FMLFINGERPRINT = "51:0A:FB:4C:AF:A4:A0:F2:F5:CF:C5:0E:B4:CC:3C:30:24:4A:E3:8E".toLowerCase().replace(":", "");
|
||||
private static final String FORGEFINGERPRINT = "E3:C3:D5:0C:7C:98:6D:F7:4C:64:5C:0A:C5:46:39:74:1C:90:A5:57".toLowerCase().replace(":", "");
|
||||
private static final String MCFINGERPRINT = "CD:99:95:96:56:F7:53:DC:28:D8:63:B4:67:69:F7:F8:FB:AE:FC:FC".toLowerCase().replace(":", "");
|
||||
static class MLDetectorClassVisitor extends ClassVisitor
|
||||
{
|
||||
private boolean foundMarker = false;
|
||||
@@ -73,14 +85,17 @@ public class FMLSanityChecker implements IFMLCallHook
|
||||
}
|
||||
|
||||
private LaunchClassLoader cl;
|
||||
public static File fmlLocation;
|
||||
|
||||
@Override
|
||||
public Void call() throws Exception
|
||||
{
|
||||
CodeSource codeSource = getClass().getProtectionDomain().getCodeSource();
|
||||
boolean goodFML = false;
|
||||
boolean fmlIsJar = false;
|
||||
if (codeSource.getLocation().getProtocol().equals("jar"))
|
||||
{
|
||||
fmlIsJar = true;
|
||||
Certificate[] certificates = codeSource.getCertificates();
|
||||
if (certificates!=null)
|
||||
{
|
||||
@@ -109,6 +124,88 @@ public class FMLSanityChecker implements IFMLCallHook
|
||||
{
|
||||
goodFML = true;
|
||||
}
|
||||
|
||||
boolean goodMC = FMLLaunchHandler.side() == Side.SERVER; //Server is not signed, so assume it's good.
|
||||
int certCount = 0;
|
||||
try
|
||||
{
|
||||
Class cbr = Class.forName("net.minecraft.client.ClientBrandRetriever",false, cl);
|
||||
codeSource = cbr.getProtectionDomain().getCodeSource();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Probably a development environment, or the server (the server is not signed)
|
||||
goodMC = true;
|
||||
}
|
||||
JarFile mcJarFile = null;
|
||||
if (fmlIsJar && !goodMC && codeSource.getLocation().getProtocol().equals("jar"))
|
||||
{
|
||||
try
|
||||
{
|
||||
String mcPath = codeSource.getLocation().getPath().substring(5);
|
||||
mcPath = mcPath.substring(0, mcPath.lastIndexOf('!'));
|
||||
mcPath = URLDecoder.decode(mcPath, Charsets.UTF_8.name());
|
||||
mcJarFile = new JarFile(mcPath,true);
|
||||
mcJarFile.getManifest();
|
||||
JarEntry cbrEntry = mcJarFile.getJarEntry("net/minecraft/client/ClientBrandRetriever.class");
|
||||
ByteStreams.toByteArray(mcJarFile.getInputStream(cbrEntry));
|
||||
Certificate[] certificates = cbrEntry.getCertificates();
|
||||
certCount = certificates != null ? certificates.length : 0;
|
||||
if (certificates!=null)
|
||||
{
|
||||
|
||||
for (Certificate cert : certificates)
|
||||
{
|
||||
String fingerprint = CertificateHelper.getFingerprint(cert);
|
||||
if (fingerprint.equals(MCFINGERPRINT))
|
||||
{
|
||||
FMLRelaunchLog.info("Found valid fingerprint for Minecraft. Certificate fingerprint %s", fingerprint);
|
||||
goodMC = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, e, "A critical error occurred trying to read the minecraft jar file");
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (mcJarFile != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
mcJarFile.close();
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
// Noise
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
goodMC = true;
|
||||
}
|
||||
if (!goodMC)
|
||||
{
|
||||
FMLRelaunchLog.severe("The minecraft jar %s appears to be corrupt! There has been CRITICAL TAMPERING WITH MINECRAFT, it is highly unlikely minecraft will work! STOP NOW, get a clean copy and try again!",codeSource.getLocation().getFile());
|
||||
if (!Boolean.parseBoolean(System.getProperty("fml.ignoreInvalidMinecraftCertificates","false")))
|
||||
{
|
||||
FMLRelaunchLog.severe("For your safety, FML will not launch minecraft. You will need to fetch a clean version of the minecraft jar file");
|
||||
FMLRelaunchLog.severe("Technical information: The class net.minecraft.client.ClientBrandRetriever should have been associated with the minecraft jar file, " +
|
||||
"and should have returned us a valid, intact minecraft jar location. This did not work. Either you have modified the minecraft jar file (if so " +
|
||||
"run the forge installer again), or you are using a base editing jar that is changing this class (and likely others too). If you REALLY " +
|
||||
"want to run minecraft in this configuration, add the flag -Dfml.ignoreInvalidMinecraftCertificates=true to the 'JVM settings' in your launcher profile.");
|
||||
System.exit(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
FMLRelaunchLog.severe("FML has been ordered to ignore the invalid or missing minecraft certificate. This is very likely to cause a problem!");
|
||||
FMLRelaunchLog.severe("Technical information: ClientBrandRetriever was at %s, there were %d certificates for it", codeSource.getLocation(), certCount);
|
||||
}
|
||||
}
|
||||
if (!goodFML)
|
||||
{
|
||||
FMLRelaunchLog.severe("FML appears to be missing any signature data. This is not a good thing");
|
||||
@@ -143,8 +240,8 @@ public class FMLSanityChecker implements IFMLCallHook
|
||||
{
|
||||
cl = (LaunchClassLoader) data.get("classLoader");
|
||||
File mcDir = (File)data.get("mcLocation");
|
||||
fmlLocation = (File)data.get("coremodLocation");
|
||||
FMLDeobfuscatingRemapper.INSTANCE.setup(mcDir, cl, (String) data.get("deobfuscationFileName"));
|
||||
File binpatches = new File(mcDir,"binpatch");
|
||||
ClassPatchManager.INSTANCE.setup(FMLLaunchHandler.side());
|
||||
}
|
||||
|
||||
|
||||
@@ -157,7 +157,6 @@ public class AccessTransformer implements IClassTransformer
|
||||
System.out.printf("Loaded %d rules from AccessTransformer config file %s\n", modifiers.size(), rulesFile);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public byte[] transform(String name, String transformedName, byte[] bytes)
|
||||
{
|
||||
@@ -212,7 +211,7 @@ public class AccessTransformer implements IClassTransformer
|
||||
}
|
||||
if (m.desc.isEmpty())
|
||||
{
|
||||
for (FieldNode n : (List<FieldNode>) classNode.fields)
|
||||
for (FieldNode n : classNode.fields)
|
||||
{
|
||||
if (n.name.equals(m.name) || m.name.equals("*"))
|
||||
{
|
||||
@@ -231,7 +230,7 @@ public class AccessTransformer implements IClassTransformer
|
||||
}
|
||||
else
|
||||
{
|
||||
for (MethodNode n : (List<MethodNode>) classNode.methods)
|
||||
for (MethodNode n : classNode.methods)
|
||||
{
|
||||
if ((n.name.equals(m.name) && n.desc.equals(m.desc)) || m.name.equals("*"))
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -150,7 +150,7 @@ public class MCPMerger
|
||||
line = line.split("#")[0];
|
||||
char cmd = line.charAt(0);
|
||||
line = line.substring(1).trim();
|
||||
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case '!': dontAnnotate.add(line); break;
|
||||
@@ -334,11 +334,10 @@ public class MCPMerger
|
||||
return ann;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static Hashtable<String, ZipEntry> getClassEntries(ZipFile inFile, ZipOutputStream outFile) throws IOException
|
||||
{
|
||||
Hashtable<String, ZipEntry> ret = new Hashtable<String, ZipEntry>();
|
||||
for (ZipEntry entry : Collections.list((Enumeration<ZipEntry>)inFile.entries()))
|
||||
for (ZipEntry entry : Collections.list(inFile.entries()))
|
||||
{
|
||||
if (entry.isDirectory())
|
||||
{
|
||||
@@ -347,7 +346,7 @@ public class MCPMerger
|
||||
}
|
||||
|
||||
String entryName = entry.getName();
|
||||
|
||||
|
||||
boolean filtered = false;
|
||||
for (String filter : dontProcess)
|
||||
{
|
||||
@@ -357,7 +356,7 @@ public class MCPMerger
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (filtered || !entryName.endsWith(".class") || entryName.startsWith("."))
|
||||
{
|
||||
ZipEntry newEntry = new ZipEntry(entry.getName());
|
||||
@@ -423,7 +422,6 @@ public class MCPMerger
|
||||
return classNode;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static void processFields(ClassNode cClass, ClassNode sClass, ClassInfo info)
|
||||
{
|
||||
List<FieldNode> cFields = cClass.fields;
|
||||
@@ -537,7 +535,6 @@ public class MCPMerger
|
||||
return Objects.toStringHelper(this).add("name", node.name).add("desc",node.desc).add("server",server).add("client",client).toString();
|
||||
}
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
private static void processMethods(ClassNode cClass, ClassNode sClass, ClassInfo info)
|
||||
{
|
||||
List<MethodNode> cMethods = (List<MethodNode>)cClass.methods;
|
||||
|
||||
@@ -97,7 +97,6 @@ public class MarkerTransformer implements IClassTransformer
|
||||
});
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public byte[] transform(String name, String transformedName, byte[] bytes)
|
||||
{
|
||||
|
||||
@@ -32,7 +32,6 @@ public class SideTransformer implements IClassTransformer
|
||||
{
|
||||
private static String SIDE = FMLLaunchHandler.side().name();
|
||||
private static final boolean DEBUG = false;
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public byte[] transform(String name, String transformedName, byte[] bytes)
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -14,10 +14,10 @@ package cpw.mods.fml.common.discovery;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.logging.Level;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
@@ -35,11 +35,16 @@ public class JarDiscoverer implements ITypeDiscoverer
|
||||
{
|
||||
List<ModContainer> foundMods = Lists.newArrayList();
|
||||
FMLLog.fine("Examining file %s for potential mods", candidate.getModContainer().getName());
|
||||
ZipFile jar = null;
|
||||
JarFile jar = null;
|
||||
try
|
||||
{
|
||||
jar = new ZipFile(candidate.getModContainer());
|
||||
jar = new JarFile(candidate.getModContainer());
|
||||
|
||||
if (jar.getManifest()!=null && (jar.getManifest().getMainAttributes().get("FMLCorePlugin") != null || jar.getManifest().getMainAttributes().get("TweakClass") != null))
|
||||
{
|
||||
FMLLog.finest("Ignoring coremod or tweak system %s", candidate.getModContainer());
|
||||
return foundMods;
|
||||
}
|
||||
ZipEntry modInfo = jar.getEntry("mcmod.info");
|
||||
MetadataCollection mc = null;
|
||||
if (modInfo != null)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -41,7 +41,14 @@ public class ModDiscoverer
|
||||
|
||||
public void findClasspathMods(ModClassLoader modClassLoader)
|
||||
{
|
||||
List<String> knownLibraries = ImmutableList.<String>builder().addAll(modClassLoader.getDefaultLibraries()).addAll(CoreModManager.getLibraries()).build();
|
||||
List<String> knownLibraries = ImmutableList.<String>builder()
|
||||
// skip default libs
|
||||
.addAll(modClassLoader.getDefaultLibraries())
|
||||
// skip loaded coremods
|
||||
.addAll(CoreModManager.getLoadedCoremods())
|
||||
// skip reparse coremods here
|
||||
.addAll(CoreModManager.getReparseableCoremods())
|
||||
.build();
|
||||
File[] minecraftSources = modClassLoader.getParentSources();
|
||||
if (minecraftSources.length == 1 && minecraftSources[0].isFile())
|
||||
{
|
||||
@@ -82,7 +89,12 @@ public class ModDiscoverer
|
||||
|
||||
for (File modFile : modList)
|
||||
{
|
||||
if (modFile.isDirectory())
|
||||
// skip loaded coremods
|
||||
if (CoreModManager.getLoadedCoremods().contains(modFile.getName()))
|
||||
{
|
||||
FMLLog.finer("Skipping already parsed coremod or tweaker %s", modFile.getName());
|
||||
}
|
||||
else if (modFile.isDirectory())
|
||||
{
|
||||
FMLLog.fine("Found a candidate mod directory %s", modFile.getName());
|
||||
candidates.add(new ModCandidate(modFile, modFile, ContainerType.DIR));
|
||||
|
||||
@@ -13,6 +13,11 @@ public class FMLServerTweaker extends FMLTweaker {
|
||||
@Override
|
||||
public void injectIntoClassLoader(LaunchClassLoader classLoader)
|
||||
{
|
||||
classLoader.addTransformerExclusion("cpw.mods.fml.repackage.");
|
||||
classLoader.addTransformerExclusion("cpw.mods.fml.relauncher.");
|
||||
classLoader.addTransformerExclusion("cpw.mods.fml.common.asm.transformers.");
|
||||
classLoader.addClassLoaderExclusion("LZMA.");
|
||||
FMLLaunchHandler.configureForServerLaunch(classLoader, this);
|
||||
FMLLaunchHandler.appendCoreMods();
|
||||
}
|
||||
}
|
||||
@@ -3,16 +3,26 @@ package cpw.mods.fml.common.launcher;
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import joptsimple.ArgumentAcceptingOptionSpec;
|
||||
import joptsimple.NonOptionArgumentSpec;
|
||||
import joptsimple.OptionParser;
|
||||
import joptsimple.OptionSet;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Throwables;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.ObjectArrays;
|
||||
|
||||
import cpw.mods.fml.relauncher.FMLLaunchHandler;
|
||||
|
||||
import net.minecraft.launchwrapper.ITweaker;
|
||||
import net.minecraft.launchwrapper.Launch;
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
|
||||
public class FMLTweaker implements ITweaker {
|
||||
@@ -21,15 +31,14 @@ public class FMLTweaker implements ITweaker {
|
||||
private File assetsDir;
|
||||
private String profile;
|
||||
private static URI jarLocation;
|
||||
private String[] array;
|
||||
|
||||
@Override
|
||||
public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile)
|
||||
{
|
||||
this.args = args;
|
||||
this.gameDir = (gameDir == null ? new File(".") : gameDir);
|
||||
this.assetsDir = assetsDir;
|
||||
this.profile = profile;
|
||||
this.args = args;
|
||||
try
|
||||
{
|
||||
jarLocation = getClass().getProtectionDomain().getCodeSource().getLocation().toURI();
|
||||
@@ -47,7 +56,9 @@ public class FMLTweaker implements ITweaker {
|
||||
classLoader.addTransformerExclusion("cpw.mods.fml.repackage.");
|
||||
classLoader.addTransformerExclusion("cpw.mods.fml.relauncher.");
|
||||
classLoader.addTransformerExclusion("cpw.mods.fml.common.asm.transformers.");
|
||||
classLoader.addClassLoaderExclusion("LZMA.");
|
||||
FMLLaunchHandler.configureForClientLaunch(classLoader, this);
|
||||
FMLLaunchHandler.appendCoreMods();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,30 +70,27 @@ public class FMLTweaker implements ITweaker {
|
||||
@Override
|
||||
public String[] getLaunchArguments()
|
||||
{
|
||||
String[] array = args.toArray(new String[args.size()]);
|
||||
List<String> blackboardArgs = (List<String>) Launch.blackboard.get("ArgumentList");
|
||||
|
||||
if (gameDir != null)
|
||||
String[] launchArgsArray = args.toArray(new String[args.size()]);
|
||||
|
||||
if (gameDir != null && !blackboardArgs.contains("--gameDir"))
|
||||
{
|
||||
array = ObjectArrays.concat(gameDir.getAbsolutePath(),array);
|
||||
array = ObjectArrays.concat("--gameDir",array);
|
||||
launchArgsArray = ObjectArrays.concat(gameDir.getAbsolutePath(),launchArgsArray);
|
||||
launchArgsArray = ObjectArrays.concat("--gameDir",launchArgsArray);
|
||||
}
|
||||
|
||||
if (assetsDir != null)
|
||||
if (assetsDir != null && !blackboardArgs.contains("--assetsDir"))
|
||||
{
|
||||
array = ObjectArrays.concat(assetsDir.getAbsolutePath(),array);
|
||||
array = ObjectArrays.concat("--assetsDir",array);
|
||||
launchArgsArray = ObjectArrays.concat(assetsDir.getAbsolutePath(),launchArgsArray);
|
||||
launchArgsArray = ObjectArrays.concat("--assetsDir",launchArgsArray);
|
||||
}
|
||||
if (profile != null)
|
||||
if (!blackboardArgs.contains("--version"))
|
||||
{
|
||||
array = ObjectArrays.concat(profile,array);
|
||||
array = ObjectArrays.concat("--version",array);
|
||||
launchArgsArray = ObjectArrays.concat(profile != null ? profile : "UnknownFMLProfile",launchArgsArray);
|
||||
launchArgsArray = ObjectArrays.concat("--version",launchArgsArray);
|
||||
}
|
||||
else
|
||||
{
|
||||
array = ObjectArrays.concat("UnknownFMLProfile",array);
|
||||
array = ObjectArrays.concat("--version",array);
|
||||
}
|
||||
return array;
|
||||
return launchArgsArray;
|
||||
}
|
||||
|
||||
public File getGameDir()
|
||||
@@ -95,4 +103,10 @@ public class FMLTweaker implements ITweaker {
|
||||
return jarLocation;
|
||||
}
|
||||
|
||||
public void injectCascadingTweak(String tweakClassName)
|
||||
{
|
||||
List<String> tweakClasses = (List<String>) Launch.blackboard.get("TweakClasses");
|
||||
tweakClasses.add(tweakClassName);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,7 +28,7 @@ public class ModLoaderFuelHelper implements IFuelHandler
|
||||
@Override
|
||||
public int getBurnTime(ItemStack fuel)
|
||||
{
|
||||
return mod.addFuel(fuel.field_77993_c, fuel.field_77993_c);
|
||||
return mod.addFuel(fuel.field_77993_c, fuel.func_77960_j());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -621,4 +621,10 @@ public class ModLoaderModContainer implements ModContainer
|
||||
{
|
||||
return EMPTY_PROPERTIES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<?> getCustomResourcePackClass()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -6,12 +6,14 @@ public class ClassPatch {
|
||||
public final String targetClassName;
|
||||
public final boolean existsAtTarget;
|
||||
public final byte[] patch;
|
||||
public ClassPatch(String name, String sourceClassName, String targetClassName, boolean existsAtTarget, byte[] patch)
|
||||
public final int inputChecksum;
|
||||
public ClassPatch(String name, String sourceClassName, String targetClassName, boolean existsAtTarget, int inputChecksum, byte[] patch)
|
||||
{
|
||||
this.name = name;
|
||||
this.sourceClassName = sourceClassName;
|
||||
this.targetClassName = targetClassName;
|
||||
this.existsAtTarget = existsAtTarget;
|
||||
this.inputChecksum = inputChecksum;
|
||||
this.patch = patch;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package cpw.mods.fml.common.patcher;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URISyntaxException;
|
||||
import java.security.CodeSource;
|
||||
import java.util.Collections;
|
||||
@@ -10,19 +13,24 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.jar.JarInputStream;
|
||||
import java.util.jar.JarOutputStream;
|
||||
import java.util.jar.Pack200;
|
||||
import java.util.logging.Level;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import LZMA.LzmaInputStream;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.base.Throwables;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ListMultimap;
|
||||
import com.google.common.hash.Hashing;
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import com.google.common.io.Files;
|
||||
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.launcher.FMLTweaker;
|
||||
import cpw.mods.fml.relauncher.FMLRelaunchLog;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -31,11 +39,19 @@ import cpw.mods.fml.repackage.com.nothome.delta.GDiffPatcher;
|
||||
public class ClassPatchManager {
|
||||
public static final ClassPatchManager INSTANCE = new ClassPatchManager();
|
||||
|
||||
public static final boolean dumpPatched = Boolean.parseBoolean(System.getProperty("fml.dumpPatchedClasses", "false"));
|
||||
|
||||
private GDiffPatcher patcher = new GDiffPatcher();
|
||||
private ListMultimap<String, ClassPatch> patches;
|
||||
|
||||
private File tempDir;
|
||||
private ClassPatchManager()
|
||||
{
|
||||
|
||||
if (dumpPatched)
|
||||
{
|
||||
tempDir = Files.createTempDir();
|
||||
FMLRelaunchLog.info("Dumping patched classes to %s",tempDir.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] applyPatch(String name, String mappedName, byte[] inputData)
|
||||
@@ -49,11 +65,13 @@ public class ClassPatchManager {
|
||||
{
|
||||
return inputData;
|
||||
}
|
||||
boolean ignoredError = false;
|
||||
FMLRelaunchLog.fine("Runtime patching class %s (input size %d), found %d patch%s", mappedName, (inputData == null ? 0 : inputData.length), list.size(), list.size()!=1 ? "es" : "");
|
||||
for (ClassPatch patch: list)
|
||||
{
|
||||
if (!patch.targetClassName.equals(mappedName))
|
||||
{
|
||||
FMLLog.warning("Binary patch found %s for wrong class %s", patch.targetClassName, mappedName);
|
||||
FMLRelaunchLog.warning("Binary patch found %s for wrong class %s", patch.targetClassName, mappedName);
|
||||
}
|
||||
if (!patch.existsAtTarget && (inputData == null || inputData.length == 0))
|
||||
{
|
||||
@@ -61,7 +79,26 @@ public class ClassPatchManager {
|
||||
}
|
||||
else if (!patch.existsAtTarget)
|
||||
{
|
||||
FMLLog.warning("Patcher expecting empty class data file for %s, but received non-empty", patch.targetClassName);
|
||||
FMLRelaunchLog.warning("Patcher expecting empty class data file for %s, but received non-empty", patch.targetClassName);
|
||||
}
|
||||
else
|
||||
{
|
||||
int inputChecksum = Hashing.adler32().hashBytes(inputData).asInt();
|
||||
if (patch.inputChecksum != inputChecksum)
|
||||
{
|
||||
FMLRelaunchLog.severe("There is a binary discrepency between the expected input class %s (%s) and the actual class. Checksum on disk is %x, in patch %x. Things are probably about to go very wrong. Did you put something into the jar file?", mappedName, name, inputChecksum, patch.inputChecksum);
|
||||
if (!Boolean.parseBoolean(System.getProperty("fml.ignorePatchDiscrepancies","false")))
|
||||
{
|
||||
FMLRelaunchLog.severe("The game is going to exit, because this is a critical error, and it is very improbable that the modded game will work, please obtain clean jar files.");
|
||||
System.exit(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
FMLRelaunchLog.severe("FML is going to ignore this error, note that the patch will not be applied, and there is likely to be a malfunctioning behaviour, including not running at all");
|
||||
ignoredError = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
synchronized (patcher)
|
||||
{
|
||||
@@ -71,75 +108,111 @@ public class ClassPatchManager {
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
FMLLog.log(Level.SEVERE, e, "Encountered problem runtime patching class %s", name);
|
||||
FMLRelaunchLog.log(Level.SEVERE, e, "Encountered problem runtime patching class %s", name);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
FMLLog.fine("Successfully applied runtime patches for %s", mappedName);
|
||||
if (!ignoredError)
|
||||
{
|
||||
FMLRelaunchLog.fine("Successfully applied runtime patches for %s (new size %d)", mappedName, inputData.length);
|
||||
}
|
||||
if (dumpPatched)
|
||||
{
|
||||
try
|
||||
{
|
||||
Files.write(inputData, new File(tempDir,mappedName));
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, e, "Failed to write %s to %s", mappedName, tempDir.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
return inputData;
|
||||
}
|
||||
|
||||
public void setup(Side side)
|
||||
{
|
||||
Pattern binpatchMatcher = Pattern.compile(String.format("binpatch/%s/.*.binpatch", side.toString().toLowerCase(Locale.ENGLISH)));
|
||||
JarFile fmlJar;
|
||||
JarInputStream jis;
|
||||
try
|
||||
{
|
||||
FMLRelaunchLog.fine("FML URI is %s", FMLTweaker.getJarLocation());
|
||||
File fmlJarFile = new File(FMLTweaker.getJarLocation());
|
||||
if (!fmlJarFile.exists() || !fmlJarFile.isFile())
|
||||
InputStream binpatchesCompressed = getClass().getResourceAsStream("/binpatches.pack.lzma");
|
||||
if (binpatchesCompressed==null)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.INFO, "Not found an FML jar, I assume you're developing FML. Hi cpw or Lex!");
|
||||
patches = ArrayListMultimap.create();
|
||||
FMLRelaunchLog.log(Level.SEVERE, "The binary patch set is missing. Either you are in a development environment, or things are not going to work!");
|
||||
return;
|
||||
}
|
||||
fmlJar = new JarFile(fmlJarFile);
|
||||
LzmaInputStream binpatchesDecompressed = new LzmaInputStream(binpatchesCompressed);
|
||||
ByteArrayOutputStream jarBytes = new ByteArrayOutputStream();
|
||||
JarOutputStream jos = new JarOutputStream(jarBytes);
|
||||
Pack200.newUnpacker().unpack(binpatchesDecompressed, jos);
|
||||
jis = new JarInputStream(new ByteArrayInputStream(jarBytes.toByteArray()));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, e, "Error occurred reading binary patches. Problems may occur");
|
||||
FMLRelaunchLog.log(Level.SEVERE, e, "Error occurred reading binary patches. Expect severe problems!");
|
||||
throw Throwables.propagate(e);
|
||||
}
|
||||
|
||||
patches = ArrayListMultimap.create();
|
||||
|
||||
for (JarEntry entry : Collections.list(fmlJar.entries()))
|
||||
do
|
||||
{
|
||||
if (binpatchMatcher.matcher(entry.getName()).matches())
|
||||
try
|
||||
{
|
||||
ClassPatch cp = readPatch(entry, fmlJar);
|
||||
if (cp != null)
|
||||
JarEntry entry = jis.getNextJarEntry();
|
||||
if (entry == null)
|
||||
{
|
||||
patches.put(cp.sourceClassName, cp);
|
||||
break;
|
||||
}
|
||||
if (binpatchMatcher.matcher(entry.getName()).matches())
|
||||
{
|
||||
ClassPatch cp = readPatch(entry, jis);
|
||||
if (cp != null)
|
||||
{
|
||||
patches.put(cp.sourceClassName, cp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
jis.closeEntry();
|
||||
}
|
||||
}
|
||||
}
|
||||
FMLLog.fine("Read %d binary patches from %s", patches.size(), fmlJar.getName());
|
||||
FMLLog.fine("Patch list :\n\t%s", Joiner.on("\t\n").join(patches.asMap().entrySet()));
|
||||
catch (IOException e)
|
||||
{
|
||||
}
|
||||
} while (true);
|
||||
FMLRelaunchLog.fine("Read %d binary patches", patches.size());
|
||||
FMLRelaunchLog.fine("Patch list :\n\t%s", Joiner.on("\t\n").join(patches.asMap().entrySet()));
|
||||
}
|
||||
|
||||
private ClassPatch readPatch(JarEntry patchEntry, JarFile jarFile)
|
||||
private ClassPatch readPatch(JarEntry patchEntry, JarInputStream jis)
|
||||
{
|
||||
FMLLog.finest("Reading patch data from %s in file %s", patchEntry.getName(), jarFile.getName());
|
||||
FMLRelaunchLog.finest("Reading patch data from %s", patchEntry.getName());
|
||||
ByteArrayDataInput input;
|
||||
try
|
||||
{
|
||||
input = ByteStreams.newDataInput(ByteStreams.toByteArray(jarFile.getInputStream(patchEntry)));
|
||||
input = ByteStreams.newDataInput(ByteStreams.toByteArray(jis));
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
FMLLog.log(Level.WARNING, e, "Unable to read binpatch file %s - ignoring", patchEntry.getName());
|
||||
FMLRelaunchLog.log(Level.WARNING, e, "Unable to read binpatch file %s - ignoring", patchEntry.getName());
|
||||
return null;
|
||||
}
|
||||
String name = input.readUTF();
|
||||
String sourceClassName = input.readUTF();
|
||||
String targetClassName = input.readUTF();
|
||||
boolean exists = input.readBoolean();
|
||||
int inputChecksum = 0;
|
||||
if (exists)
|
||||
{
|
||||
inputChecksum = input.readInt();
|
||||
}
|
||||
int patchLength = input.readInt();
|
||||
byte[] patchBytes = new byte[patchLength];
|
||||
input.readFully(patchBytes);
|
||||
|
||||
return new ClassPatch(name, sourceClassName, targetClassName, exists, patchBytes);
|
||||
return new ClassPatch(name, sourceClassName, targetClassName, exists, inputChecksum, patchBytes);
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,10 @@ package cpw.mods.fml.common.patcher;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.logging.Level;
|
||||
@@ -10,6 +13,7 @@ import java.util.logging.Logger;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Iterators;
|
||||
import com.google.common.hash.Hashing;
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import com.google.common.io.Files;
|
||||
@@ -19,11 +23,13 @@ import cpw.mods.fml.repackage.com.nothome.delta.Delta;
|
||||
|
||||
public class GenDiffSet {
|
||||
|
||||
private static final List<String> RESERVED_NAMES = Arrays.asList("CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9");
|
||||
|
||||
public static void main(String[] args) throws IOException
|
||||
{
|
||||
String sourceJar = args[0]; //Clean Vanilla jar minecraft.jar or minecraft_server.jar
|
||||
String targetDir = args[1]; //Directory containing obfed output classes, typically mcp/reobf/minecraft
|
||||
String deobfData = args[2]; //Path to FML's deobfusication_data.zip
|
||||
String deobfData = args[2]; //Path to FML's deobfusication_data.lzma
|
||||
String outputDir = args[3]; //Path to place generated .binpatch
|
||||
String killTarget = args[4]; //"true" if we should destroy the target file if it generated a successful .binpatch
|
||||
|
||||
@@ -40,18 +46,26 @@ public class GenDiffSet {
|
||||
for (String name : remapper.getObfedClasses())
|
||||
{
|
||||
// Logger.getLogger("GENDIFF").info(String.format("Evaluating path for data :%s",name));
|
||||
File targetFile = new File(targetDir, name.replace('/', File.separatorChar) + ".class");
|
||||
String fileName = name;
|
||||
String jarName = name;
|
||||
if (RESERVED_NAMES.contains(name.toUpperCase(Locale.ENGLISH)))
|
||||
{
|
||||
fileName = "_"+name;
|
||||
}
|
||||
File targetFile = new File(targetDir, fileName.replace('/', File.separatorChar) + ".class");
|
||||
jarName = jarName+".class";
|
||||
if (targetFile.exists())
|
||||
{
|
||||
String sourceClassName = name.replace('/', '.');
|
||||
String targetClassName = remapper.map(name).replace('/', '.');
|
||||
JarEntry entry = sourceZip.getJarEntry(name);
|
||||
JarEntry entry = sourceZip.getJarEntry(jarName);
|
||||
|
||||
byte[] vanillaBytes = entry != null ? ByteStreams.toByteArray(sourceZip.getInputStream(entry)) : new byte[0];
|
||||
byte[] patchedBytes = Files.toByteArray(targetFile);
|
||||
|
||||
byte[] diff = delta.compute(vanillaBytes, patchedBytes);
|
||||
|
||||
|
||||
ByteArrayDataOutput diffOut = ByteStreams.newDataOutput(diff.length + 50);
|
||||
// Original name
|
||||
diffOut.writeUTF(name);
|
||||
@@ -61,6 +75,10 @@ public class GenDiffSet {
|
||||
diffOut.writeUTF(targetClassName);
|
||||
// exists at original
|
||||
diffOut.writeBoolean(entry != null);
|
||||
if (entry != null)
|
||||
{
|
||||
diffOut.writeInt(Hashing.adler32().hashBytes(vanillaBytes).asInt());
|
||||
}
|
||||
// length of patch
|
||||
diffOut.writeInt(diff.length);
|
||||
// patch
|
||||
|
||||
@@ -52,6 +52,7 @@ import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.LoaderState;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier;
|
||||
|
||||
public class GameData {
|
||||
private static Map<Integer, ItemData> idMap = Maps.newHashMap();
|
||||
@@ -362,4 +363,28 @@ public class GameData {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static UniqueIdentifier getUniqueName(Block block)
|
||||
{
|
||||
if (block == null) return null;
|
||||
ItemData itemData = idMap.get(block.field_71990_ca);
|
||||
if (itemData == null || !itemData.isOveridden() || customItemStacks.contains(itemData.getModId(), itemData.getItemType()))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new UniqueIdentifier(itemData.getModId(), itemData.getItemType());
|
||||
}
|
||||
|
||||
static UniqueIdentifier getUniqueName(Item item)
|
||||
{
|
||||
if (item == null) return null;
|
||||
ItemData itemData = idMap.get(item.field_77779_bT);
|
||||
if (itemData == null || !itemData.isOveridden() || customItemStacks.contains(itemData.getModId(), itemData.getItemType()))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new UniqueIdentifier(itemData.getModId(), itemData.getItemType());
|
||||
}
|
||||
}
|
||||
@@ -95,10 +95,11 @@ public class GameRegistry
|
||||
Random fmlRandom = new Random(worldSeed);
|
||||
long xSeed = fmlRandom.nextLong() >> 2 + 1L;
|
||||
long zSeed = fmlRandom.nextLong() >> 2 + 1L;
|
||||
fmlRandom.setSeed((xSeed * chunkX + zSeed * chunkZ) ^ worldSeed);
|
||||
long chunkSeed = (xSeed * chunkX + zSeed * chunkZ) ^ worldSeed;
|
||||
|
||||
for (IWorldGenerator generator : worldGenerators)
|
||||
{
|
||||
fmlRandom.setSeed(chunkSeed);
|
||||
generator.generate(fmlRandom, chunkX, chunkZ, world, chunkGenerator, chunkProvider);
|
||||
}
|
||||
}
|
||||
@@ -350,26 +351,55 @@ public class GameRegistry
|
||||
|
||||
public static void onPlayerLogin(EntityPlayer player)
|
||||
{
|
||||
for(IPlayerTracker tracker : playerTrackers)
|
||||
tracker.onPlayerLogin(player);
|
||||
for (IPlayerTracker tracker : playerTrackers)
|
||||
try
|
||||
{
|
||||
tracker.onPlayerLogin(player);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FMLLog.log(Level.SEVERE, e, "A critical error occured handling the onPlayerLogin event with player tracker %s", tracker.getClass().getName());
|
||||
}
|
||||
}
|
||||
|
||||
public static void onPlayerLogout(EntityPlayer player)
|
||||
{
|
||||
for(IPlayerTracker tracker : playerTrackers)
|
||||
tracker.onPlayerLogout(player);
|
||||
for (IPlayerTracker tracker : playerTrackers)
|
||||
try
|
||||
{
|
||||
tracker.onPlayerLogout(player);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FMLLog.log(Level.SEVERE, e, "A critical error occured handling the onPlayerLogout event with player tracker %s", tracker.getClass().getName());
|
||||
}
|
||||
}
|
||||
|
||||
public static void onPlayerChangedDimension(EntityPlayer player)
|
||||
{
|
||||
for(IPlayerTracker tracker : playerTrackers)
|
||||
tracker.onPlayerChangedDimension(player);
|
||||
for (IPlayerTracker tracker : playerTrackers)
|
||||
try
|
||||
{
|
||||
tracker.onPlayerChangedDimension(player);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FMLLog.log(Level.SEVERE, e, "A critical error occured handling the onPlayerChangedDimension event with player tracker %s", tracker.getClass()
|
||||
.getName());
|
||||
}
|
||||
}
|
||||
|
||||
public static void onPlayerRespawn(EntityPlayer player)
|
||||
{
|
||||
for(IPlayerTracker tracker : playerTrackers)
|
||||
tracker.onPlayerRespawn(player);
|
||||
for (IPlayerTracker tracker : playerTrackers)
|
||||
try
|
||||
{
|
||||
tracker.onPlayerRespawn(player);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FMLLog.log(Level.SEVERE, e, "A critical error occured handling the onPlayerRespawn event with player tracker %s", tracker.getClass().getName());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -430,4 +460,46 @@ public class GameRegistry
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static class UniqueIdentifier
|
||||
{
|
||||
public final String modId;
|
||||
public final String name;
|
||||
UniqueIdentifier(String modId, String name)
|
||||
{
|
||||
this.modId = modId;
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Look up the mod identifier data for a block.
|
||||
* Returns null if there is no mod specified mod identifier data, or it is part of a
|
||||
* custom itemstack definition {@link #registerCustomItemStack}
|
||||
*
|
||||
* Note: uniqueness and persistence is only guaranteed by mods using the game registry
|
||||
* correctly.
|
||||
*
|
||||
* @param block to lookup
|
||||
* @return a {@link UniqueIdentifier} for the block or null
|
||||
*/
|
||||
public static UniqueIdentifier findUniqueIdentifierFor(net.minecraft.block.Block block)
|
||||
{
|
||||
return GameData.getUniqueName(block);
|
||||
}
|
||||
/**
|
||||
* Look up the mod identifier data for an item.
|
||||
* Returns null if there is no mod specified mod identifier data, or it is part of a
|
||||
* custom itemstack definition {@link #registerCustomItemStack}
|
||||
*
|
||||
* Note: uniqueness and persistence is only guaranteed by mods using the game registry
|
||||
* correctly.
|
||||
*
|
||||
* @param item to lookup
|
||||
* @return a {@link UniqueIdentifier} for the item or null
|
||||
*/
|
||||
public static UniqueIdentifier findUniqueIdentifierFor(net.minecraft.item.Item item)
|
||||
{
|
||||
return GameData.getUniqueName(item);
|
||||
}
|
||||
}
|
||||
@@ -23,6 +23,7 @@ import java.util.logging.Level;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
@@ -46,7 +47,7 @@ public class LanguageRegistry
|
||||
|
||||
public String getStringLocalization(String key)
|
||||
{
|
||||
return getStringLocalization(key, Minecraft.func_71410_x().func_135016_M().func_135041_c().func_135034_a());
|
||||
return getStringLocalization(key, FMLCommonHandler.instance().getCurrentLanguage());
|
||||
}
|
||||
|
||||
public String getStringLocalization(String key, String lang)
|
||||
|
||||
@@ -13,15 +13,15 @@
|
||||
package cpw.mods.fml.common.registry;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import net.minecraft.client.resources.ResourceLocation;
|
||||
import net.minecraft.entity.passive.EntityVillager;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.Tuple;
|
||||
import net.minecraft.village.MerchantRecipeList;
|
||||
import net.minecraft.world.gen.structure.ComponentVillageStartPiece;
|
||||
@@ -173,7 +173,7 @@ public class VillagerRegistry
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static ResourceLocation getVillagerSkin(int villagerType, ResourceLocation defaultSkin)
|
||||
{
|
||||
if (instance().newVillagers.containsKey(villagerType))
|
||||
if (instance().newVillagers != null && instance().newVillagers.containsKey(villagerType))
|
||||
{
|
||||
return instance().newVillagers.get(villagerType);
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
* Forge Mod Loader
|
||||
* Copyright (c) 2012-2013 cpw.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
|
||||
package cpw.mods.fml.relauncher;
|
||||
|
||||
public class CoreFMLLibraries implements ILibrarySet
|
||||
{
|
||||
private static String[] libraries = { "argo-small-3.2.jar","guava-14.0-rc3.jar","asm-all-4.1.jar", "bcprov-jdk15on-148.jar", FMLInjectionData.debfuscationDataName(), "scala-library.jar" };
|
||||
private static String[] checksums = { "58912ea2858d168c50781f956fa5b59f0f7c6b51", "931ae21fa8014c3ce686aaa621eae565fefb1a6a", "054986e962b88d8660ae4566475658469595ef58", "960dea7c9181ba0b17e8bab0c06a43f0a5f04e65", FMLInjectionData.deobfuscationDataHash, "458d046151ad179c85429ed7420ffb1eaf6ddf85" };
|
||||
|
||||
@Override
|
||||
public String[] getLibraries()
|
||||
{
|
||||
return libraries;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getHashes()
|
||||
{
|
||||
return checksums;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRootURL()
|
||||
{
|
||||
return System.getProperty("fml.core.libraries.mirror", "http://files.minecraftforge.net/fmllibs/%s");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,21 +13,10 @@
|
||||
package cpw.mods.fml.relauncher;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.MappedByteBuffer;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.channels.FileChannel.MapMode;
|
||||
import java.security.MessageDigest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
@@ -37,23 +26,61 @@ import java.util.jar.Attributes;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import net.minecraft.launchwrapper.ITweaker;
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
|
||||
import cpw.mods.fml.common.CertificateHelper;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.base.Throwables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.ObjectArrays;
|
||||
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.launcher.FMLTweaker;
|
||||
import cpw.mods.fml.common.toposort.TopologicalSort;
|
||||
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.DependsOn;
|
||||
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion;
|
||||
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.Name;
|
||||
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions;
|
||||
|
||||
public class CoreModManager
|
||||
{
|
||||
private static final Attributes.Name COREMODCONTAINSFMLMOD = new Attributes.Name("FMLCorePluginContainsFMLMod");
|
||||
private static String[] rootPlugins = { "cpw.mods.fml.relauncher.FMLCorePlugin" , "net.minecraftforge.classloading.FMLForgePlugin" };
|
||||
private static List<String> loadedLibraries = new ArrayList<String>();
|
||||
private static Map<IFMLLoadingPlugin, File> pluginLocations;
|
||||
private static List<IFMLLoadingPlugin> loadPlugins;
|
||||
private static List<ILibrarySet> libraries;
|
||||
private static List<String> loadedCoremods = Lists.newArrayList();
|
||||
private static List<FMLPluginWrapper> loadPlugins;
|
||||
private static boolean deobfuscatedEnvironment;
|
||||
private static FMLTweaker tweaker;
|
||||
private static File mcDir;
|
||||
private static List<String> reparsedCoremods = Lists.newArrayList();
|
||||
|
||||
public static void handleLaunch(File mcDir, LaunchClassLoader classLoader)
|
||||
private static class FMLPluginWrapper
|
||||
{
|
||||
public final String name;
|
||||
public final IFMLLoadingPlugin coreModInstance;
|
||||
public final List<String> predepends;
|
||||
public final File location;
|
||||
|
||||
public FMLPluginWrapper(String name, IFMLLoadingPlugin coreModInstance, File location, String... predepends)
|
||||
{
|
||||
super();
|
||||
this.name = name;
|
||||
this.coreModInstance = coreModInstance;
|
||||
this.location = location;
|
||||
this.predepends = Lists.newArrayList(predepends);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return String.format("%s {%s}", this.name, this.predepends);
|
||||
}
|
||||
}
|
||||
|
||||
public static void handleLaunch(File mcDir, LaunchClassLoader classLoader, FMLTweaker tweaker)
|
||||
{
|
||||
CoreModManager.mcDir = mcDir;
|
||||
CoreModManager.tweaker = tweaker;
|
||||
try
|
||||
{
|
||||
// Are we in a 'decompiled' environment?
|
||||
@@ -72,20 +99,21 @@ public class CoreModManager
|
||||
{
|
||||
FMLRelaunchLog.fine("Enabling runtime deobfuscation");
|
||||
}
|
||||
pluginLocations = new HashMap<IFMLLoadingPlugin, File>();
|
||||
loadPlugins = new ArrayList<IFMLLoadingPlugin>();
|
||||
for (String s : rootPlugins)
|
||||
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
FMLRelaunchLog.finest("Adding coremod for loading %s", s);
|
||||
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) Class.forName(s, true, classLoader).newInstance();
|
||||
loadPlugins.add(plugin);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// HMMM
|
||||
}
|
||||
classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.PatchingTransformer");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, e, "The patch transformer failed to load! This is critical, loading cannot continue!");
|
||||
throw Throwables.propagate(e);
|
||||
}
|
||||
|
||||
loadPlugins = new ArrayList<FMLPluginWrapper>();
|
||||
for (String rootPluginName : rootPlugins)
|
||||
{
|
||||
loadCoreMod(classLoader, rootPluginName, new File(FMLTweaker.getJarLocation()));
|
||||
}
|
||||
|
||||
if (loadPlugins.isEmpty())
|
||||
@@ -93,249 +121,25 @@ public class CoreModManager
|
||||
throw new RuntimeException("A fatal error has occured - no valid fml load plugin was found - this is a completely corrupt FML installation.");
|
||||
}
|
||||
|
||||
downloadMonitor.updateProgressString("All core mods are successfully located");
|
||||
FMLRelaunchLog.fine("All fundamental core mods are successfully located");
|
||||
// Now that we have the root plugins loaded - lets see what else might be around
|
||||
String commandLineCoremods = System.getProperty("fml.coreMods.load","");
|
||||
for (String s : commandLineCoremods.split(","))
|
||||
for (String coreModClassName : commandLineCoremods.split(","))
|
||||
{
|
||||
if (s.isEmpty())
|
||||
if (coreModClassName.isEmpty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
FMLRelaunchLog.info("Found a command line coremod : %s", s);
|
||||
try
|
||||
{
|
||||
classLoader.addTransformerExclusion(s);
|
||||
Class<?> coreModClass = Class.forName(s, true, classLoader);
|
||||
TransformerExclusions trExclusions = coreModClass.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
|
||||
if (trExclusions!=null)
|
||||
{
|
||||
for (String st : trExclusions.value())
|
||||
{
|
||||
classLoader.addTransformerExclusion(st);
|
||||
}
|
||||
}
|
||||
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClass.newInstance();
|
||||
loadPlugins.add(plugin);
|
||||
if (plugin.getLibraryRequestClass()!=null)
|
||||
{
|
||||
for (String libName : plugin.getLibraryRequestClass())
|
||||
{
|
||||
libraries.add((ILibrarySet) Class.forName(libName, true, classLoader).newInstance());
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE,e,"Exception occured trying to load coremod %s",s);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
FMLRelaunchLog.info("Found a command line coremod : %s", coreModClassName);
|
||||
loadCoreMod(classLoader, coreModClassName, null);
|
||||
}
|
||||
discoverCoreMods(mcDir, classLoader, loadPlugins, libraries);
|
||||
discoverCoreMods(mcDir, classLoader);
|
||||
|
||||
List<Throwable> caughtErrors = new ArrayList<Throwable>();
|
||||
try
|
||||
{
|
||||
File libDir;
|
||||
try
|
||||
{
|
||||
libDir = setupLibDir(mcDir);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
caughtErrors.add(e);
|
||||
return;
|
||||
}
|
||||
|
||||
libraries = new ArrayList<ILibrarySet>();
|
||||
for (ILibrarySet lib : libraries)
|
||||
{
|
||||
for (int i=0; i<lib.getLibraries().length; i++)
|
||||
{
|
||||
boolean download = false;
|
||||
String libName = lib.getLibraries()[i];
|
||||
String targFileName = libName.lastIndexOf('/')>=0 ? libName.substring(libName.lastIndexOf('/')) : libName;
|
||||
String checksum = lib.getHashes()[i];
|
||||
File libFile = new File(libDir, targFileName);
|
||||
if (!libFile.exists())
|
||||
{
|
||||
try
|
||||
{
|
||||
downloadFile(libFile, lib.getRootURL(), libName, checksum);
|
||||
download = true;
|
||||
}
|
||||
catch (Throwable e)
|
||||
{
|
||||
caughtErrors.add(e);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (libFile.exists() && !libFile.isFile())
|
||||
{
|
||||
caughtErrors.add(new RuntimeException(String.format("Found a file %s that is not a normal file - you should clear this out of the way", libName)));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!download)
|
||||
{
|
||||
try
|
||||
{
|
||||
FileInputStream fis = new FileInputStream(libFile);
|
||||
FileChannel chan = fis.getChannel();
|
||||
MappedByteBuffer mappedFile = chan.map(MapMode.READ_ONLY, 0, libFile.length());
|
||||
String fileChecksum = generateChecksum(mappedFile);
|
||||
fis.close();
|
||||
// bad checksum and I did not download this file
|
||||
if (!checksum.equals(fileChecksum))
|
||||
{
|
||||
caughtErrors.add(new RuntimeException(String.format("The file %s was found in your lib directory and has an invalid checksum %s (expecting %s) - it is unlikely to be the correct download, please move it out of the way and try again.", libName, fileChecksum, checksum)));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, e, "The library file %s could not be validated", libFile.getName());
|
||||
caughtErrors.add(new RuntimeException(String.format("The library file %s could not be validated", libFile.getName()),e));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!download)
|
||||
{
|
||||
downloadMonitor.updateProgressString("Found library file %s present and correct in lib dir", libName);
|
||||
}
|
||||
else
|
||||
{
|
||||
downloadMonitor.updateProgressString("Library file %s was downloaded and verified successfully", libName);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
classLoader.addURL(libFile.toURI().toURL());
|
||||
loadedLibraries.add(libName);
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
caughtErrors.add(new RuntimeException(String.format("Should never happen - %s is broken - probably a somehow corrupted download. Delete it and try again.", libFile.getName()), e));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (downloadMonitor.shouldStopIt())
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!caughtErrors.isEmpty())
|
||||
{
|
||||
FMLRelaunchLog.severe("There were errors during initial FML setup. " +
|
||||
"Some files failed to download or were otherwise corrupted. " +
|
||||
"You will need to manually obtain the following files from " +
|
||||
"these download links and ensure your lib directory is clean. ");
|
||||
for (ILibrarySet set : libraries)
|
||||
{
|
||||
for (String file : set.getLibraries())
|
||||
{
|
||||
FMLRelaunchLog.severe("*** Download "+set.getRootURL(), file);
|
||||
}
|
||||
}
|
||||
FMLRelaunchLog.severe("<===========>");
|
||||
FMLRelaunchLog.severe("The following is the errors that caused the setup to fail. " +
|
||||
"They may help you diagnose and resolve the issue");
|
||||
for (Throwable t : caughtErrors)
|
||||
{
|
||||
if (t.getMessage()!=null)
|
||||
{
|
||||
FMLRelaunchLog.severe(t.getMessage());
|
||||
}
|
||||
}
|
||||
FMLRelaunchLog.severe("<<< ==== >>>");
|
||||
FMLRelaunchLog.severe("The following is diagnostic information for developers to review.");
|
||||
for (Throwable t : caughtErrors)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, t, "Error details");
|
||||
}
|
||||
throw new RuntimeException("A fatal error occured and FML cannot continue");
|
||||
}
|
||||
}
|
||||
|
||||
for (IFMLLoadingPlugin plug : loadPlugins)
|
||||
{
|
||||
if (plug.getASMTransformerClass()!=null)
|
||||
{
|
||||
for (String xformClass : plug.getASMTransformerClass())
|
||||
{
|
||||
FMLRelaunchLog.finest("Registering transformer %s", xformClass);
|
||||
classLoader.registerTransformer(xformClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Deobfuscation transformer, always last
|
||||
if (!deobfuscatedEnvironment)
|
||||
{
|
||||
classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer");
|
||||
}
|
||||
downloadMonitor.updateProgressString("Running coremod plugins");
|
||||
Map<String,Object> data = new HashMap<String,Object>();
|
||||
data.put("mcLocation", mcDir);
|
||||
data.put("coremodList", loadPlugins);
|
||||
data.put("runtimeDeobfuscationEnabled", !deobfuscatedEnvironment);
|
||||
for (IFMLLoadingPlugin plugin : loadPlugins)
|
||||
{
|
||||
downloadMonitor.updateProgressString("Running coremod plugin %s", plugin.getClass().getSimpleName());
|
||||
data.put("coremodLocation", pluginLocations.get(plugin));
|
||||
plugin.injectData(data);
|
||||
String setupClass = plugin.getSetupClass();
|
||||
if (setupClass != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
IFMLCallHook call = (IFMLCallHook) Class.forName(setupClass, true, classLoader).newInstance();
|
||||
Map<String,Object> callData = new HashMap<String, Object>();
|
||||
callData.put("mcLocation", mcDir);
|
||||
callData.put("classLoader", classLoader);
|
||||
callData.put("coremodLocation", pluginLocations.get(plugin));
|
||||
callData.put("deobfuscationFileName", FMLInjectionData.debfuscationDataName());
|
||||
call.injectData(callData);
|
||||
call.call();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
downloadMonitor.updateProgressString("Coremod plugin %s run successfully", plugin.getClass().getSimpleName());
|
||||
|
||||
String modContainer = plugin.getModContainerClass();
|
||||
if (modContainer != null)
|
||||
{
|
||||
FMLInjectionData.containers.add(modContainer);
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
downloadMonitor.updateProgressString("Validating minecraft");
|
||||
Class<?> loaderClazz = Class.forName("cpw.mods.fml.common.Loader", true, classLoader);
|
||||
Method m = loaderClazz.getMethod("injectData", Object[].class);
|
||||
m.invoke(null, (Object)FMLInjectionData.data());
|
||||
m = loaderClazz.getMethod("instance");
|
||||
m.invoke(null);
|
||||
downloadMonitor.updateProgressString("Minecraft validated, launching...");
|
||||
downloadBuffer = null;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Load in the Loader, make sure he's ready to roll - this will initialize most of the rest of minecraft here
|
||||
System.out.println("A CRITICAL PROBLEM OCCURED INITIALIZING MINECRAFT - LIKELY YOU HAVE AN INCORRECT VERSION FOR THIS FML");
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void discoverCoreMods(File mcDir, LaunchClassLoader classLoader, List<IFMLLoadingPlugin> loadPlugins, List<ILibrarySet> libraries)
|
||||
private static void discoverCoreMods(File mcDir, LaunchClassLoader classLoader)
|
||||
{
|
||||
downloadMonitor.updateProgressString("Discovering coremods");
|
||||
FMLRelaunchLog.fine("Discovering coremods");
|
||||
File coreMods = setupCoreModDir(mcDir);
|
||||
FilenameFilter ff = new FilenameFilter()
|
||||
{
|
||||
@@ -346,149 +150,100 @@ public class CoreModManager
|
||||
}
|
||||
};
|
||||
File[] coreModList = coreMods.listFiles(ff);
|
||||
File versionedModDir = new File(coreMods,FMLInjectionData.mccversion);
|
||||
if (versionedModDir.isDirectory())
|
||||
{
|
||||
File[] versionedCoreMods = versionedModDir.listFiles(ff);
|
||||
coreModList = ObjectArrays.concat(coreModList,versionedCoreMods, File.class);
|
||||
}
|
||||
|
||||
Arrays.sort(coreModList);
|
||||
|
||||
for (File coreMod : coreModList)
|
||||
{
|
||||
downloadMonitor.updateProgressString("Found a candidate coremod %s", coreMod.getName());
|
||||
JarFile jar;
|
||||
FMLRelaunchLog.fine("Examining for coremod candidacy %s", coreMod.getName());
|
||||
JarFile jar = null;
|
||||
Attributes mfAttributes;
|
||||
try
|
||||
{
|
||||
jar = new JarFile(coreMod);
|
||||
if (jar.getManifest() == null)
|
||||
{
|
||||
FMLRelaunchLog.warning("Found an un-manifested jar file in the coremods folder : %s, it will be ignored.", coreMod.getName());
|
||||
// Not a coremod
|
||||
continue;
|
||||
}
|
||||
mfAttributes = jar.getManifest().getMainAttributes();
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, ioe, "Unable to read the coremod jar file %s - ignoring", coreMod.getName());
|
||||
FMLRelaunchLog.log(Level.SEVERE, ioe, "Unable to read the jar file %s - ignoring", coreMod.getName());
|
||||
continue;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (jar!=null)
|
||||
{
|
||||
try
|
||||
{
|
||||
jar.close();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
// Noise
|
||||
}
|
||||
}
|
||||
}
|
||||
String cascadedTweaker = mfAttributes.getValue("TweakClass");
|
||||
if (cascadedTweaker != null)
|
||||
{
|
||||
FMLRelaunchLog.info("Loading tweaker %s from %s", cascadedTweaker, coreMod.getName());
|
||||
handleCascadingTweak(coreMod, jar, cascadedTweaker, classLoader);
|
||||
loadedCoremods.add(coreMod.getName());
|
||||
continue;
|
||||
}
|
||||
|
||||
String fmlCorePlugin = mfAttributes.getValue("FMLCorePlugin");
|
||||
if (fmlCorePlugin == null)
|
||||
{
|
||||
FMLRelaunchLog.severe("The coremod %s does not contain a valid jar manifest- it will be ignored", coreMod.getName());
|
||||
// Not a coremod
|
||||
FMLRelaunchLog.fine("Not found coremod data in %s", coreMod.getName());
|
||||
continue;
|
||||
}
|
||||
|
||||
// String className = fmlCorePlugin.replace('.', '/').concat(".class");
|
||||
// JarEntry ent = jar.getJarEntry(className);
|
||||
// if (ent ==null)
|
||||
// {
|
||||
// FMLLog.severe("The coremod %s specified %s as it's loading class but it does not include it - it will be ignored", coreMod.getName(), fmlCorePlugin);
|
||||
// continue;
|
||||
// }
|
||||
// try
|
||||
// {
|
||||
// Class<?> coreModClass = Class.forName(fmlCorePlugin, false, classLoader);
|
||||
// FMLLog.severe("The coremods %s specified a class %s that is already present in the classpath - it will be ignored", coreMod.getName(), fmlCorePlugin);
|
||||
// continue;
|
||||
// }
|
||||
// catch (ClassNotFoundException cnfe)
|
||||
// {
|
||||
// // didn't find it, good
|
||||
// }
|
||||
try
|
||||
{
|
||||
classLoader.addURL(coreMod.toURI().toURL());
|
||||
if (!mfAttributes.containsKey(COREMODCONTAINSFMLMOD))
|
||||
{
|
||||
FMLRelaunchLog.finest("Adding %s to the list of known coremods, it will not be examined again", coreMod.getName());
|
||||
loadedCoremods.add(coreMod.getName());
|
||||
}
|
||||
else
|
||||
{
|
||||
FMLRelaunchLog.finest("Found FMLCorePluginContainsFMLMod marker in %s, it will be examined later for regular @Mod instances", coreMod.getName());
|
||||
reparsedCoremods.add(coreMod.getName());
|
||||
}
|
||||
}
|
||||
catch (MalformedURLException e)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, e, "Unable to convert file into a URL. weird");
|
||||
continue;
|
||||
}
|
||||
try
|
||||
{
|
||||
downloadMonitor.updateProgressString("Loading coremod %s", coreMod.getName());
|
||||
classLoader.addTransformerExclusion(fmlCorePlugin);
|
||||
Class<?> coreModClass = Class.forName(fmlCorePlugin, true, classLoader);
|
||||
MCVersion requiredMCVersion = coreModClass.getAnnotation(IFMLLoadingPlugin.MCVersion.class);
|
||||
String version = "";
|
||||
if (requiredMCVersion == null)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.WARNING, "The coremod %s does not have a MCVersion annotation, it may cause issues with this version of Minecraft", fmlCorePlugin);
|
||||
}
|
||||
else
|
||||
{
|
||||
version = requiredMCVersion.value();
|
||||
}
|
||||
if (!"".equals(version) && !FMLInjectionData.mccversion.equals(version))
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, "The coremod %s is requesting minecraft version %s and minecraft is %s. It will be ignored.", fmlCorePlugin, version, FMLInjectionData.mccversion);
|
||||
continue;
|
||||
}
|
||||
else if (!"".equals(version))
|
||||
{
|
||||
FMLRelaunchLog.log(Level.FINE, "The coremod %s requested minecraft version %s and minecraft is %s. It will be loaded.", fmlCorePlugin, version, FMLInjectionData.mccversion);
|
||||
}
|
||||
TransformerExclusions trExclusions = coreModClass.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
|
||||
if (trExclusions!=null)
|
||||
{
|
||||
for (String st : trExclusions.value())
|
||||
{
|
||||
classLoader.addTransformerExclusion(st);
|
||||
}
|
||||
}
|
||||
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClass.newInstance();
|
||||
loadPlugins.add(plugin);
|
||||
pluginLocations .put(plugin, coreMod);
|
||||
if (plugin.getLibraryRequestClass()!=null)
|
||||
{
|
||||
for (String libName : plugin.getLibraryRequestClass())
|
||||
{
|
||||
libraries.add((ILibrarySet) Class.forName(libName, true, classLoader).newInstance());
|
||||
}
|
||||
}
|
||||
downloadMonitor.updateProgressString("Loaded coremod %s", coreMod.getName());
|
||||
}
|
||||
catch (ClassNotFoundException cnfe)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, cnfe, "Coremod %s: Unable to class load the plugin %s", coreMod.getName(), fmlCorePlugin);
|
||||
}
|
||||
catch (ClassCastException cce)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, cce, "Coremod %s: The plugin %s is not an implementor of IFMLLoadingPlugin", coreMod.getName(), fmlCorePlugin);
|
||||
}
|
||||
catch (InstantiationException ie)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, ie, "Coremod %s: The plugin class %s was not instantiable", coreMod.getName(), fmlCorePlugin);
|
||||
}
|
||||
catch (IllegalAccessException iae)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, iae, "Coremod %s: The plugin class %s was not accessible", coreMod.getName(), fmlCorePlugin);
|
||||
}
|
||||
loadCoreMod(classLoader, fmlCorePlugin, coreMod);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mcDir the minecraft home directory
|
||||
* @return the lib directory
|
||||
*/
|
||||
private static File setupLibDir(File mcDir)
|
||||
private static void handleCascadingTweak(File coreMod, JarFile jar, String cascadedTweaker, LaunchClassLoader classLoader)
|
||||
{
|
||||
File libDir = new File(mcDir,"lib");
|
||||
try
|
||||
{
|
||||
libDir = libDir.getCanonicalFile();
|
||||
classLoader.addURL(coreMod.toURI().toURL());
|
||||
CoreModManager.tweaker.injectCascadingTweak(cascadedTweaker);
|
||||
}
|
||||
catch (IOException e)
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new RuntimeException(String.format("Unable to canonicalize the lib dir at %s", mcDir.getName()),e);
|
||||
FMLRelaunchLog.log(Level.INFO, e, "There was a problem trying to load the mod dir tweaker %s", coreMod.getAbsolutePath());
|
||||
}
|
||||
if (!libDir.exists())
|
||||
{
|
||||
libDir.mkdir();
|
||||
}
|
||||
else if (libDir.exists() && !libDir.isDirectory())
|
||||
{
|
||||
throw new RuntimeException(String.format("Found a lib file in %s that's not a directory", mcDir.getName()));
|
||||
}
|
||||
return libDir;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -497,7 +252,7 @@ public class CoreModManager
|
||||
*/
|
||||
private static File setupCoreModDir(File mcDir)
|
||||
{
|
||||
File coreModDir = new File(mcDir,"coremods");
|
||||
File coreModDir = new File(mcDir,"mods");
|
||||
try
|
||||
{
|
||||
coreModDir = coreModDir.getCanonicalFile();
|
||||
@@ -517,114 +272,193 @@ public class CoreModManager
|
||||
return coreModDir;
|
||||
}
|
||||
|
||||
private static void downloadFile(File libFile, String rootUrl,String realFilePath, String hash)
|
||||
public static List<String> getLoadedCoremods()
|
||||
{
|
||||
return loadedCoremods;
|
||||
}
|
||||
|
||||
public static List<String> getReparseableCoremods()
|
||||
{
|
||||
return reparsedCoremods;
|
||||
}
|
||||
|
||||
private static FMLPluginWrapper loadCoreMod(LaunchClassLoader classLoader, String coreModClass, File location)
|
||||
{
|
||||
String coreModName = coreModClass.substring(coreModClass.lastIndexOf('.')+1);
|
||||
try
|
||||
{
|
||||
URL libDownload = new URL(String.format(rootUrl,realFilePath));
|
||||
downloadMonitor.updateProgressString("Downloading file %s", libDownload.toString());
|
||||
FMLRelaunchLog.info("Downloading file %s", libDownload.toString());
|
||||
URLConnection connection = libDownload.openConnection();
|
||||
connection.setConnectTimeout(5000);
|
||||
connection.setReadTimeout(5000);
|
||||
connection.setRequestProperty("User-Agent", "FML Relaunch Downloader");
|
||||
int sizeGuess = connection.getContentLength();
|
||||
performDownload(connection.getInputStream(), sizeGuess, hash, libFile);
|
||||
downloadMonitor.updateProgressString("Download complete");
|
||||
FMLRelaunchLog.info("Download complete");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (downloadMonitor.shouldStopIt())
|
||||
FMLRelaunchLog.fine("Instantiating coremod class %s", coreModName);
|
||||
classLoader.addTransformerExclusion(coreModClass);
|
||||
Class<?> coreModClazz = Class.forName(coreModClass, true, classLoader);
|
||||
Name coreModNameAnn = coreModClazz.getAnnotation(IFMLLoadingPlugin.Name.class);
|
||||
if (coreModNameAnn!=null && !Strings.isNullOrEmpty(coreModNameAnn.value()))
|
||||
{
|
||||
FMLRelaunchLog.warning("You have stopped the downloading operation before it could complete");
|
||||
return;
|
||||
coreModName = coreModNameAnn.value();
|
||||
FMLRelaunchLog.finest("coremod named %s is loading", coreModName);
|
||||
}
|
||||
if (e instanceof RuntimeException) throw (RuntimeException)e;
|
||||
FMLRelaunchLog.severe("There was a problem downloading the file %s automatically. Perhaps you " +
|
||||
"have an environment without internet access. You will need to download " +
|
||||
"the file manually or restart and let it try again\n", libFile.getName());
|
||||
libFile.delete();
|
||||
throw new RuntimeException("A download error occured", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<String> getLibraries()
|
||||
{
|
||||
return loadedLibraries;
|
||||
}
|
||||
|
||||
private static ByteBuffer downloadBuffer = ByteBuffer.allocateDirect(1 << 23);
|
||||
static IDownloadDisplay downloadMonitor;
|
||||
|
||||
private static void performDownload(InputStream is, int sizeGuess, String validationHash, File target)
|
||||
{
|
||||
if (sizeGuess > downloadBuffer.capacity())
|
||||
{
|
||||
throw new RuntimeException(String.format("The file %s is too large to be downloaded by FML - the coremod is invalid", target.getName()));
|
||||
}
|
||||
downloadBuffer.clear();
|
||||
|
||||
int bytesRead, fullLength = 0;
|
||||
|
||||
downloadMonitor.resetProgress(sizeGuess);
|
||||
try
|
||||
{
|
||||
downloadMonitor.setPokeThread(Thread.currentThread());
|
||||
byte[] smallBuffer = new byte[1024];
|
||||
while ((bytesRead = is.read(smallBuffer)) >= 0) {
|
||||
downloadBuffer.put(smallBuffer, 0, bytesRead);
|
||||
fullLength += bytesRead;
|
||||
if (downloadMonitor.shouldStopIt())
|
||||
MCVersion requiredMCVersion = coreModClazz.getAnnotation(IFMLLoadingPlugin.MCVersion.class);
|
||||
if (!Arrays.asList(rootPlugins).contains(coreModClass) && (requiredMCVersion == null || Strings.isNullOrEmpty(requiredMCVersion.value())))
|
||||
{
|
||||
FMLRelaunchLog.log(Level.WARNING, "The coremod %s does not have a MCVersion annotation, it may cause issues with this version of Minecraft", coreModClass);
|
||||
}
|
||||
else if (requiredMCVersion!=null && !FMLInjectionData.mccversion.equals(requiredMCVersion.value()))
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, "The coremod %s is requesting minecraft version %s and minecraft is %s. It will be ignored.", coreModClass, requiredMCVersion.value(), FMLInjectionData.mccversion);
|
||||
return null;
|
||||
}
|
||||
else if (requiredMCVersion!=null)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.FINE, "The coremod %s requested minecraft version %s and minecraft is %s. It will be loaded.", coreModClass, requiredMCVersion.value(), FMLInjectionData.mccversion);
|
||||
}
|
||||
TransformerExclusions trExclusions = coreModClazz.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
|
||||
if (trExclusions!=null)
|
||||
{
|
||||
for (String st : trExclusions.value())
|
||||
{
|
||||
break;
|
||||
classLoader.addTransformerExclusion(st);
|
||||
}
|
||||
downloadMonitor.updateProgress(fullLength);
|
||||
}
|
||||
is.close();
|
||||
downloadMonitor.setPokeThread(null);
|
||||
downloadBuffer.limit(fullLength);
|
||||
downloadBuffer.position(0);
|
||||
DependsOn deplist = coreModClazz.getAnnotation(IFMLLoadingPlugin.DependsOn.class);
|
||||
String[] dependencies = new String[0];
|
||||
if (deplist != null)
|
||||
{
|
||||
dependencies = deplist.value();
|
||||
}
|
||||
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClazz.newInstance();
|
||||
FMLPluginWrapper wrap = new FMLPluginWrapper(coreModName, plugin, location, dependencies);
|
||||
|
||||
loadPlugins.add(wrap);
|
||||
FMLRelaunchLog.fine("Loaded coremod %s", coreModName);
|
||||
return wrap;
|
||||
}
|
||||
catch (InterruptedIOException e)
|
||||
catch (ClassNotFoundException cnfe)
|
||||
{
|
||||
// We were interrupted by the stop button. We're stopping now.. clear interruption flag.
|
||||
Thread.interrupted();
|
||||
return;
|
||||
if (!Lists.newArrayList(rootPlugins).contains(coreModClass))
|
||||
FMLRelaunchLog.log(Level.SEVERE, cnfe, "Coremod %s: Unable to class load the plugin %s", coreModName, coreModClass);
|
||||
else
|
||||
FMLRelaunchLog.fine("Skipping root plugin %s", coreModClass);
|
||||
}
|
||||
catch (IOException e)
|
||||
catch (ClassCastException cce)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
FMLRelaunchLog.log(Level.SEVERE, cce, "Coremod %s: The plugin %s is not an implementor of IFMLLoadingPlugin", coreModName, coreModClass);
|
||||
}
|
||||
catch (InstantiationException ie)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, ie, "Coremod %s: The plugin class %s was not instantiable", coreModName, coreModClass);
|
||||
}
|
||||
catch (IllegalAccessException iae)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, iae, "Coremod %s: The plugin class %s was not accessible", coreModName, coreModClass);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void sortCoreMods()
|
||||
{
|
||||
TopologicalSort.DirectedGraph<FMLPluginWrapper> sortGraph = new TopologicalSort.DirectedGraph<FMLPluginWrapper>();
|
||||
Map<String, FMLPluginWrapper> pluginMap = Maps.newHashMap();
|
||||
for (FMLPluginWrapper plug : loadPlugins)
|
||||
{
|
||||
sortGraph.addNode(plug);
|
||||
pluginMap.put(plug.name, plug);
|
||||
}
|
||||
|
||||
|
||||
for (FMLPluginWrapper plug : loadPlugins)
|
||||
{
|
||||
for (String dep : plug.predepends)
|
||||
{
|
||||
if (!pluginMap.containsKey(dep))
|
||||
{
|
||||
FMLRelaunchLog.log(Level.SEVERE, "Missing coremod dependency - the coremod %s depends on coremod %s which isn't present.", plug.name, dep);
|
||||
throw new RuntimeException();
|
||||
}
|
||||
sortGraph.addEdge(plug, pluginMap.get(dep));
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
String cksum = generateChecksum(downloadBuffer);
|
||||
if (cksum.equals(validationHash))
|
||||
{
|
||||
downloadBuffer.position(0);
|
||||
FileOutputStream fos = new FileOutputStream(target);
|
||||
fos.getChannel().write(downloadBuffer);
|
||||
fos.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new RuntimeException(String.format("The downloaded file %s has an invalid checksum %s (expecting %s). The download did not succeed correctly and the file has been deleted. Please try launching again.", target.getName(), cksum, validationHash));
|
||||
}
|
||||
loadPlugins = TopologicalSort.topologicalSort(sortGraph);
|
||||
FMLRelaunchLog.fine("Sorted coremod list %s", loadPlugins);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (e instanceof RuntimeException) throw (RuntimeException)e;
|
||||
FMLLog.log(Level.SEVERE, e, "There was a problem performing the coremod sort");
|
||||
throw Throwables.propagate(e);
|
||||
}
|
||||
}
|
||||
public static void injectTransformers(LaunchClassLoader classLoader)
|
||||
{
|
||||
|
||||
for (FMLPluginWrapper wrap : loadPlugins)
|
||||
{
|
||||
IFMLLoadingPlugin plug = wrap.coreModInstance;
|
||||
if (plug.getASMTransformerClass()!=null)
|
||||
{
|
||||
for (String xformClass : plug.getASMTransformerClass())
|
||||
{
|
||||
FMLRelaunchLog.finest("Registering transformer %s", xformClass);
|
||||
classLoader.registerTransformer(xformClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
FMLRelaunchLog.fine("Running coremod plugins");
|
||||
Map<String,Object> data = new HashMap<String,Object>();
|
||||
data.put("mcLocation", mcDir);
|
||||
data.put("coremodList", loadPlugins);
|
||||
data.put("runtimeDeobfuscationEnabled", !deobfuscatedEnvironment);
|
||||
for (FMLPluginWrapper pluginWrapper : loadPlugins)
|
||||
{
|
||||
IFMLLoadingPlugin plugin = pluginWrapper.coreModInstance;
|
||||
FMLRelaunchLog.fine("Running coremod plugin %s", pluginWrapper.name);
|
||||
data.put("coremodLocation", pluginWrapper.location);
|
||||
plugin.injectData(data);
|
||||
String setupClass = plugin.getSetupClass();
|
||||
if (setupClass != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
IFMLCallHook call = (IFMLCallHook) Class.forName(setupClass, true, classLoader).newInstance();
|
||||
Map<String,Object> callData = new HashMap<String, Object>();
|
||||
callData.put("mcLocation", mcDir);
|
||||
callData.put("classLoader", classLoader);
|
||||
callData.put("coremodLocation", pluginWrapper.location);
|
||||
callData.put("deobfuscationFileName", FMLInjectionData.debfuscationDataName());
|
||||
call.injectData(callData);
|
||||
call.call();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
FMLRelaunchLog.fine("Coremod plugin %s run successfully", plugin.getClass().getSimpleName());
|
||||
|
||||
String modContainer = plugin.getModContainerClass();
|
||||
if (modContainer != null)
|
||||
{
|
||||
FMLInjectionData.containers.add(modContainer);
|
||||
}
|
||||
}
|
||||
// Deobfuscation transformer, always last
|
||||
if (!deobfuscatedEnvironment)
|
||||
{
|
||||
classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer");
|
||||
}
|
||||
try
|
||||
{
|
||||
FMLRelaunchLog.fine("Validating minecraft");
|
||||
Class<?> loaderClazz = Class.forName("cpw.mods.fml.common.Loader", true, classLoader);
|
||||
Method m = loaderClazz.getMethod("injectData", Object[].class);
|
||||
m.invoke(null, (Object)FMLInjectionData.data());
|
||||
m = loaderClazz.getMethod("instance");
|
||||
m.invoke(null);
|
||||
FMLRelaunchLog.fine("Minecraft validated, launching...");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Load in the Loader, make sure he's ready to roll - this will initialize most of the rest of minecraft here
|
||||
System.out.println("A CRITICAL PROBLEM OCCURED INITIALIZING MINECRAFT - LIKELY YOU HAVE AN INCORRECT VERSION FOR THIS FML");
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static String generateChecksum(ByteBuffer buffer)
|
||||
{
|
||||
return CertificateHelper.getFingerprint(buffer);
|
||||
}
|
||||
}
|
||||
@@ -1,152 +0,0 @@
|
||||
/*
|
||||
* Forge Mod Loader
|
||||
* Copyright (c) 2012-2013 cpw.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
|
||||
package cpw.mods.fml.relauncher;
|
||||
|
||||
import java.awt.Dialog.ModalityType;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
|
||||
import javax.swing.Box;
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JProgressBar;
|
||||
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
|
||||
public class Downloader extends JOptionPane implements IDownloadDisplay
|
||||
{
|
||||
private JDialog container;
|
||||
private JLabel currentActivity;
|
||||
private JProgressBar progress;
|
||||
boolean stopIt;
|
||||
Thread pokeThread;
|
||||
|
||||
private Box makeProgressPanel()
|
||||
{
|
||||
Box box = Box.createVerticalBox();
|
||||
box.add(Box.createRigidArea(new Dimension(0,10)));
|
||||
JLabel welcomeLabel = new JLabel("<html><b><font size='+1'>FML is setting up your minecraft environment</font></b></html>");
|
||||
box.add(welcomeLabel);
|
||||
welcomeLabel.setAlignmentY(LEFT_ALIGNMENT);
|
||||
welcomeLabel = new JLabel("<html>Please wait, FML has some tasks to do before you can play</html>");
|
||||
welcomeLabel.setAlignmentY(LEFT_ALIGNMENT);
|
||||
box.add(welcomeLabel);
|
||||
box.add(Box.createRigidArea(new Dimension(0,10)));
|
||||
currentActivity = new JLabel("Currently doing ...");
|
||||
box.add(currentActivity);
|
||||
box.add(Box.createRigidArea(new Dimension(0,10)));
|
||||
progress = new JProgressBar(0, 100);
|
||||
progress.setStringPainted(true);
|
||||
box.add(progress);
|
||||
box.add(Box.createRigidArea(new Dimension(0,30)));
|
||||
return box;
|
||||
}
|
||||
|
||||
public JDialog makeDialog()
|
||||
{
|
||||
setMessageType(JOptionPane.INFORMATION_MESSAGE);
|
||||
setMessage(makeProgressPanel());
|
||||
setOptions(new Object[] { "Stop" });
|
||||
addPropertyChangeListener(new PropertyChangeListener()
|
||||
{
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt)
|
||||
{
|
||||
if (evt.getSource() == Downloader.this && evt.getPropertyName()==VALUE_PROPERTY)
|
||||
{
|
||||
requestClose("This will stop minecraft from launching\nAre you sure you want to do this?");
|
||||
}
|
||||
}
|
||||
});
|
||||
container = new JDialog(null, "Hello", ModalityType.MODELESS);
|
||||
container.setResizable(false);
|
||||
container.setLocationRelativeTo(null);
|
||||
container.add(this);
|
||||
this.updateUI();
|
||||
container.pack();
|
||||
container.setMinimumSize(container.getPreferredSize());
|
||||
container.setVisible(true);
|
||||
container.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
||||
container.addWindowListener(new WindowAdapter()
|
||||
{
|
||||
@Override
|
||||
public void windowClosing(WindowEvent e)
|
||||
{
|
||||
requestClose("Closing this window will stop minecraft from launching\nAre you sure you wish to do this?");
|
||||
}
|
||||
});
|
||||
return container;
|
||||
}
|
||||
protected void requestClose(String message)
|
||||
{
|
||||
int shouldClose = JOptionPane.showConfirmDialog(container, message, "Are you sure you want to stop?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
|
||||
if (shouldClose == JOptionPane.YES_OPTION)
|
||||
{
|
||||
container.dispose();
|
||||
}
|
||||
stopIt = true;
|
||||
if (pokeThread != null)
|
||||
{
|
||||
pokeThread.interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateProgressString(String progressUpdate, Object... data)
|
||||
{
|
||||
FMLLog.finest(progressUpdate, data);
|
||||
if (currentActivity!=null)
|
||||
{
|
||||
currentActivity.setText(String.format(progressUpdate,data));
|
||||
}
|
||||
}
|
||||
|
||||
public void resetProgress(int sizeGuess)
|
||||
{
|
||||
if (progress!=null)
|
||||
{
|
||||
progress.getModel().setRangeProperties(0, 0, 0, sizeGuess, false);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateProgress(int fullLength)
|
||||
{
|
||||
if (progress!=null)
|
||||
{
|
||||
progress.getModel().setValue(fullLength);
|
||||
}
|
||||
}
|
||||
|
||||
public void makeHeadless()
|
||||
{
|
||||
container = null;
|
||||
progress = null;
|
||||
currentActivity = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPokeThread(Thread currentThread)
|
||||
{
|
||||
this.pokeThread = currentThread;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldStopIt()
|
||||
{
|
||||
return stopIt;
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
/*
|
||||
* Forge Mod Loader
|
||||
* Copyright (c) 2012-2013 cpw.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
|
||||
package cpw.mods.fml.relauncher;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class DummyDownloader implements IDownloadDisplay
|
||||
{
|
||||
|
||||
@Override
|
||||
public void resetProgress(int sizeGuess)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPokeThread(Thread currentThread)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProgress(int fullLength)
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldStopIt()
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateProgressString(String string, Object... data)
|
||||
{
|
||||
FMLRelaunchLog.log(Level.FINE, string, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object makeDialog()
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void makeHeadless()
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -16,17 +16,17 @@ import java.util.Map;
|
||||
|
||||
public class FMLCorePlugin implements IFMLLoadingPlugin
|
||||
{
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public String[] getLibraryRequestClass()
|
||||
{
|
||||
return new String[] {"cpw.mods.fml.relauncher.CoreFMLLibraries"};
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getASMTransformerClass()
|
||||
{
|
||||
return new String[] {
|
||||
"cpw.mods.fml.common.asm.transformers.PatchingTransformer",
|
||||
"cpw.mods.fml.common.asm.transformers.AccessTransformer",
|
||||
"cpw.mods.fml.common.asm.transformers.MarkerTransformer",
|
||||
"cpw.mods.fml.common.asm.transformers.SideTransformer",
|
||||
|
||||
@@ -12,21 +12,15 @@
|
||||
|
||||
package cpw.mods.fml.relauncher;
|
||||
|
||||
import java.applet.Applet;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import javax.swing.JDialog;
|
||||
import javax.swing.JOptionPane;
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
|
||||
import com.google.common.base.Throwables;
|
||||
|
||||
import cpw.mods.fml.common.launcher.FMLTweaker;
|
||||
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
|
||||
public class FMLLaunchHandler
|
||||
{
|
||||
private static FMLLaunchHandler INSTANCE;
|
||||
@@ -66,15 +60,8 @@ public class FMLLaunchHandler
|
||||
this.classLoader.addTransformerExclusion("cpw.mods.fml.common.patcher.");
|
||||
}
|
||||
|
||||
private void showWindow(boolean showIt)
|
||||
{
|
||||
if (CoreModManager.downloadMonitor != null) { return; }
|
||||
CoreModManager.downloadMonitor = new DummyDownloader();
|
||||
}
|
||||
|
||||
private void setupClient()
|
||||
{
|
||||
showWindow(true);
|
||||
FMLRelaunchLog.logFileNamePattern = "ForgeModLoader-client-%g.log";
|
||||
side = Side.CLIENT;
|
||||
setupHome();
|
||||
@@ -82,7 +69,6 @@ public class FMLLaunchHandler
|
||||
|
||||
private void setupServer()
|
||||
{
|
||||
showWindow(false);
|
||||
FMLRelaunchLog.logFileNamePattern = "ForgeModLoader-server-%g.log";
|
||||
side = Side.SERVER;
|
||||
setupHome();
|
||||
@@ -101,7 +87,7 @@ public class FMLLaunchHandler
|
||||
|
||||
try
|
||||
{
|
||||
CoreModManager.handleLaunch(minecraftHome, classLoader);
|
||||
CoreModManager.handleLaunch(minecraftHome, classLoader, tweaker);
|
||||
}
|
||||
catch (Throwable t)
|
||||
{
|
||||
@@ -115,4 +101,15 @@ public class FMLLaunchHandler
|
||||
{
|
||||
return side;
|
||||
}
|
||||
|
||||
|
||||
private void injectPostfixTransformers()
|
||||
{
|
||||
CoreModManager.injectTransformers(classLoader);
|
||||
}
|
||||
|
||||
public static void appendCoreMods()
|
||||
{
|
||||
INSTANCE.injectPostfixTransformers();
|
||||
}
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
* Forge Mod Loader
|
||||
* Copyright (c) 2012-2013 cpw.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
|
||||
package cpw.mods.fml.relauncher;
|
||||
|
||||
import javax.swing.JDialog;
|
||||
|
||||
public interface IDownloadDisplay
|
||||
{
|
||||
|
||||
void resetProgress(int sizeGuess);
|
||||
|
||||
void setPokeThread(Thread currentThread);
|
||||
|
||||
void updateProgress(int fullLength);
|
||||
|
||||
boolean shouldStopIt();
|
||||
|
||||
void updateProgressString(String string, Object ... data);
|
||||
|
||||
Object makeDialog();
|
||||
|
||||
void makeHeadless();
|
||||
|
||||
}
|
||||
@@ -102,4 +102,24 @@ public interface IFMLLoadingPlugin
|
||||
{
|
||||
public String value() default "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Name this coremod something other than the "short class name"
|
||||
* @author cpw
|
||||
*
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
public @interface Name
|
||||
{
|
||||
public String value() default "";
|
||||
}
|
||||
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
public @interface DependsOn
|
||||
{
|
||||
public String[] value() default {};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
* are made available under the terms of the GNU Lesser Public License v2.1
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
*
|
||||
*
|
||||
* Contributors:
|
||||
* cpw - implementation
|
||||
*/
|
||||
@@ -15,10 +15,12 @@ package cpw.mods.fml.relauncher;
|
||||
/**
|
||||
* Interface for certain core plugins to register libraries to
|
||||
* be loaded in by the FML class loader at launch time
|
||||
* Deprecated without replacement.
|
||||
*
|
||||
* @author cpw
|
||||
*
|
||||
*/
|
||||
@Deprecated
|
||||
public interface ILibrarySet
|
||||
{
|
||||
/**
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package cpw.mods.fml.relauncher;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import net.minecraft.launchwrapper.Launch;
|
||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||
|
||||
import com.google.common.base.Throwables;
|
||||
|
||||
public class ServerLaunchWrapper {
|
||||
@@ -26,7 +24,35 @@ public class ServerLaunchWrapper {
|
||||
|
||||
private void run(String[] args)
|
||||
{
|
||||
Launch.main(args);
|
||||
Class<?> launchwrapper = null;
|
||||
try
|
||||
{
|
||||
launchwrapper = Class.forName("net.minecraft.launchwrapper.Launch",true,getClass().getClassLoader());
|
||||
Class.forName("org.objectweb.asm.Type",true,getClass().getClassLoader());
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.err.printf("We appear to be missing one or more essential library files.\n" +
|
||||
"You will need to add them to your server before FML and Forge will run successfully.");
|
||||
e.printStackTrace(System.err);
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Method main = launchwrapper.getMethod("main", String[].class);
|
||||
String[] allArgs = new String[args.length + 2];
|
||||
allArgs[0] = "--tweakClass";
|
||||
allArgs[1] = "cpw.mods.fml.common.launcher.FMLServerTweaker";
|
||||
System.arraycopy(args, 0, allArgs, 2, args.length);
|
||||
main.invoke(null,(Object)allArgs);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.err.printf("A problem occurred running the Server launcher.");
|
||||
e.printStackTrace(System.err);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,7 +13,17 @@
|
||||
package cpw.mods.fml.relauncher;
|
||||
|
||||
public enum Side {
|
||||
CLIENT, SERVER;
|
||||
|
||||
/**
|
||||
* The client side. Specifically, an environment where rendering capability exists.
|
||||
* Usually in the game client.
|
||||
*/
|
||||
CLIENT,
|
||||
/**
|
||||
* The server side. Specifically, an environment where NO rendering capability exists.
|
||||
* Usually on the dedicated server.
|
||||
*/
|
||||
SERVER;
|
||||
|
||||
/**
|
||||
* @return If this is the server environment
|
||||
|
||||
@@ -62,12 +62,12 @@ import java.nio.channels.ReadableByteChannel;
|
||||
* Newer versions may eventually support paging in/out of checksums.
|
||||
*/
|
||||
public class Delta {
|
||||
|
||||
|
||||
/**
|
||||
* Debug flag.
|
||||
*/
|
||||
final static boolean debug = false;
|
||||
|
||||
|
||||
/**
|
||||
* Default size of 16.
|
||||
* For "Lorem ipsum" text files (see the tests) the ideal size is about 14.
|
||||
@@ -76,16 +76,16 @@ public class Delta {
|
||||
* Use a size like 64 or 128 for large files.
|
||||
*/
|
||||
public static final int DEFAULT_CHUNK_SIZE = 1<<4;
|
||||
|
||||
|
||||
/**
|
||||
* Chunk Size.
|
||||
*/
|
||||
private int S;
|
||||
|
||||
|
||||
private SourceState source;
|
||||
private TargetState target;
|
||||
private DiffWriter output;
|
||||
|
||||
|
||||
/**
|
||||
* Constructs a new Delta.
|
||||
* In the future, additional constructor arguments will set the algorithm details.
|
||||
@@ -93,12 +93,12 @@ public class Delta {
|
||||
public Delta() {
|
||||
setChunkSize(DEFAULT_CHUNK_SIZE);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sets the chunk size used.
|
||||
* Larger chunks are faster and use less memory, but create larger patches
|
||||
* as well.
|
||||
*
|
||||
*
|
||||
* @param size
|
||||
*/
|
||||
public void setChunkSize(int size) {
|
||||
@@ -106,17 +106,17 @@ public class Delta {
|
||||
throw new IllegalArgumentException("Invalid size");
|
||||
S = size;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Compares the source bytes with target bytes, writing to output.
|
||||
*/
|
||||
public void compute(byte source[], byte target[], OutputStream output)
|
||||
throws IOException {
|
||||
compute(new ByteBufferSeekableSource(source),
|
||||
compute(new ByteBufferSeekableSource(source),
|
||||
new ByteArrayInputStream(target),
|
||||
new GDiffWriter(output));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Compares the source bytes with target bytes, returning output.
|
||||
*/
|
||||
@@ -126,20 +126,20 @@ public class Delta {
|
||||
compute(source, target, os);
|
||||
return os.toByteArray();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Compares the source bytes with target input, writing to output.
|
||||
*/
|
||||
public void compute(byte[] sourceBytes, InputStream inputStream,
|
||||
DiffWriter diffWriter) throws IOException
|
||||
{
|
||||
compute(new ByteBufferSeekableSource(sourceBytes),
|
||||
compute(new ByteBufferSeekableSource(sourceBytes),
|
||||
inputStream, diffWriter);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Compares the source file with a target file, writing to output.
|
||||
*
|
||||
*
|
||||
* @param output will be closed
|
||||
*/
|
||||
public void compute(File sourceFile, File targetFile, DiffWriter output)
|
||||
@@ -153,25 +153,25 @@ public class Delta {
|
||||
is.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Compares the source with a target, writing to output.
|
||||
*
|
||||
*
|
||||
* @param output will be closed
|
||||
*/
|
||||
public void compute(SeekableSource seekSource, InputStream targetIS, DiffWriter output)
|
||||
throws IOException {
|
||||
|
||||
|
||||
if (debug) {
|
||||
debug("using match length S = " + S);
|
||||
}
|
||||
|
||||
|
||||
source = new SourceState(seekSource);
|
||||
target = new TargetState(targetIS);
|
||||
this.output = output;
|
||||
if (debug)
|
||||
debug("checksums " + source.checksum);
|
||||
|
||||
|
||||
while (!target.eof()) {
|
||||
debug("!target.eof()");
|
||||
int index = target.find(source);
|
||||
@@ -196,7 +196,7 @@ public class Delta {
|
||||
}
|
||||
output.close();
|
||||
}
|
||||
|
||||
|
||||
private void addData() throws IOException {
|
||||
int i = target.read();
|
||||
if (debug)
|
||||
@@ -205,12 +205,12 @@ public class Delta {
|
||||
return;
|
||||
output.addData((byte)i);
|
||||
}
|
||||
|
||||
|
||||
class SourceState {
|
||||
|
||||
private Checksum checksum;
|
||||
private SeekableSource source;
|
||||
|
||||
|
||||
public SourceState(SeekableSource source) throws IOException {
|
||||
checksum = new Checksum(source, S);
|
||||
this.source = source;
|
||||
@@ -232,23 +232,23 @@ public class Delta {
|
||||
" source=" + this.source +
|
||||
"";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
class TargetState {
|
||||
|
||||
|
||||
private ReadableByteChannel c;
|
||||
private ByteBuffer tbuf = ByteBuffer.allocate(blocksize());
|
||||
private ByteBuffer sbuf = ByteBuffer.allocate(blocksize());
|
||||
private long hash;
|
||||
private boolean hashReset = true;
|
||||
private boolean eof;
|
||||
|
||||
|
||||
TargetState(InputStream targetIS) throws IOException {
|
||||
c = Channels.newChannel(targetIS);
|
||||
tbuf.limit(0);
|
||||
}
|
||||
|
||||
|
||||
private int blocksize() {
|
||||
return Math.min(1024 * 16, S * 4);
|
||||
}
|
||||
@@ -362,13 +362,13 @@ public class Delta {
|
||||
" eof=" + this.eof +
|
||||
"]";
|
||||
}
|
||||
|
||||
|
||||
private String dump() { return dump(tbuf); }
|
||||
|
||||
|
||||
private String dump(ByteBuffer bb) {
|
||||
return getTextDump(bb);
|
||||
}
|
||||
|
||||
|
||||
private void append(StringBuffer sb, int value) {
|
||||
char b1 = (char)((value >> 4) & 0x0F);
|
||||
char b2 = (char)((value) & 0x0F);
|
||||
@@ -392,7 +392,7 @@ public class Delta {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a patch using file names.
|
||||
*/
|
||||
@@ -426,6 +426,7 @@ public class Delta {
|
||||
"source or target is too large, max length is "
|
||||
+ Integer.MAX_VALUE);
|
||||
System.err.println("aborting..");
|
||||
output.close();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -437,7 +438,7 @@ public class Delta {
|
||||
if (debug) //gls031504a
|
||||
System.out.println("finished generating delta");
|
||||
}
|
||||
|
||||
|
||||
private void debug(String s) {
|
||||
if (debug)
|
||||
System.err.println(s);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2001 Torgeir Veimo
|
||||
*
|
||||
@@ -31,26 +31,26 @@ import java.io.IOException;
|
||||
* Interface for DIFF writers.
|
||||
*/
|
||||
public interface DiffWriter extends Closeable {
|
||||
|
||||
|
||||
/**
|
||||
* Add a GDIFF copy instruction.
|
||||
*/
|
||||
public void addCopy(long offset, int length) throws IOException;
|
||||
|
||||
|
||||
/**
|
||||
* Add a GDIFF data instruction.
|
||||
* Implementors should buffer the data.
|
||||
*/
|
||||
public void addData(byte b) throws IOException;
|
||||
|
||||
|
||||
/**
|
||||
* Flushes to output, e.g. any data added.
|
||||
*/
|
||||
public void flush() throws IOException;
|
||||
|
||||
|
||||
/**
|
||||
* Closes this stream.
|
||||
* Note that {@link Diff} will invoke this method at the end.
|
||||
* Note that {@link DiffWriter} will invoke this method at the end.
|
||||
*/
|
||||
public void close() throws IOException;
|
||||
}
|
||||
|
||||
@@ -52,13 +52,14 @@ import java.io.RandomAccessFile;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/**
|
||||
* This class patches an input file with a GDIFF patch fil�e.
|
||||
* This class patches an input file with a GDIFF patch file.
|
||||
*
|
||||
* The patch file follows the GDIFF file specification available at
|
||||
* {@link http://www.w3.org/TR/NOTE-gdiff-19970901.html}.
|
||||
*
|
||||
* <a href="http://www.w3.org/TR/NOTE-gdiff-19970901.html">http://www.w3.org/TR/NOTE-gdiff-19970901.html</a>.
|
||||
*/
|
||||
public class GDiffPatcher {
|
||||
|
||||
|
||||
private ByteBuffer buf = ByteBuffer.allocate(1024);
|
||||
private byte buf2[] = buf.array();
|
||||
|
||||
@@ -67,14 +68,14 @@ public class GDiffPatcher {
|
||||
*/
|
||||
public GDiffPatcher() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Patches to an output file.
|
||||
*/
|
||||
public void patch(File sourceFile, File patchFile, File outputFile)
|
||||
throws IOException
|
||||
{
|
||||
RandomAccessFileSeekableSource source =new RandomAccessFileSeekableSource(new RandomAccessFile(sourceFile, "r"));
|
||||
RandomAccessFileSeekableSource source =new RandomAccessFileSeekableSource(new RandomAccessFile(sourceFile, "r"));
|
||||
InputStream patch = new FileInputStream(patchFile);
|
||||
OutputStream output = new FileOutputStream(outputFile);
|
||||
try {
|
||||
@@ -87,14 +88,14 @@ public class GDiffPatcher {
|
||||
output.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Patches to an output stream.
|
||||
*/
|
||||
public void patch(byte[] source, InputStream patch, OutputStream output) throws IOException {
|
||||
patch(new ByteBufferSeekableSource(source), patch, output);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Patches in memory, returning the patch result.
|
||||
*/
|
||||
@@ -103,12 +104,12 @@ public class GDiffPatcher {
|
||||
patch(source, new ByteArrayInputStream(patch), os);
|
||||
return os.toByteArray();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Patches to an output stream.
|
||||
*/
|
||||
public void patch(SeekableSource source, InputStream patch, OutputStream out) throws IOException {
|
||||
|
||||
|
||||
DataOutputStream outOS = new DataOutputStream(out);
|
||||
DataInputStream patchIS = new DataInputStream(patch);
|
||||
|
||||
@@ -128,12 +129,12 @@ public class GDiffPatcher {
|
||||
break;
|
||||
int length;
|
||||
int offset;
|
||||
|
||||
|
||||
if (command <= DATA_MAX) {
|
||||
append(command, patchIS, outOS);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
switch (command) {
|
||||
case DATA_USHORT: // ushort, n bytes following; append
|
||||
length = patchIS.readUnsignedShort();
|
||||
@@ -178,7 +179,7 @@ public class GDiffPatcher {
|
||||
length = patchIS.readInt();
|
||||
copy(loffset, length, source, outOS);
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
throw new IllegalStateException("command " + command);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,18 @@
|
||||
*/
|
||||
package cpw.mods.fml.server;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.MapDifference;
|
||||
@@ -23,10 +34,13 @@ import net.minecraft.network.packet.NetHandler;
|
||||
import net.minecraft.network.packet.Packet;
|
||||
import net.minecraft.network.packet.Packet131MapData;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.StringTranslate;
|
||||
import net.minecraft.world.World;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.IFMLSidedHandler;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
import cpw.mods.fml.common.ObfuscationReflectionHelper;
|
||||
import cpw.mods.fml.common.network.EntitySpawnAdjustmentPacket;
|
||||
import cpw.mods.fml.common.network.EntitySpawnPacket;
|
||||
@@ -189,4 +203,66 @@ public class FMLServerHandler implements IFMLSidedHandler
|
||||
{
|
||||
|
||||
}
|
||||
@Override
|
||||
public void addModAsResource(ModContainer container)
|
||||
{
|
||||
File source = container.getSource();
|
||||
try
|
||||
{
|
||||
if (source.isDirectory())
|
||||
{
|
||||
searchDirForENUSLanguage(source,"");
|
||||
}
|
||||
else
|
||||
{
|
||||
searchZipForENUSLanguage(source);
|
||||
}
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
private static final Pattern assetENUSLang = Pattern.compile("assets/(.*)/lang/en_US.lang");
|
||||
private void searchZipForENUSLanguage(File source) throws IOException
|
||||
{
|
||||
ZipFile zf = new ZipFile(source);
|
||||
for (ZipEntry ze : Collections.list(zf.entries()))
|
||||
{
|
||||
Matcher matcher = assetENUSLang.matcher(ze.getName());
|
||||
if (matcher.matches())
|
||||
{
|
||||
FMLLog.fine("Injecting found translation data in zip file %s at %s into language system", source.getName(), ze.getName());
|
||||
StringTranslate.inject(zf.getInputStream(ze));
|
||||
}
|
||||
}
|
||||
zf.close();
|
||||
}
|
||||
private void searchDirForENUSLanguage(File source, String path) throws IOException
|
||||
{
|
||||
for (File file : source.listFiles())
|
||||
{
|
||||
String currPath = path+file.getName();
|
||||
if (file.isDirectory())
|
||||
{
|
||||
searchDirForENUSLanguage(file, currPath+'/');
|
||||
}
|
||||
Matcher matcher = assetENUSLang.matcher(currPath);
|
||||
if (matcher.matches())
|
||||
{
|
||||
FMLLog.fine("Injecting found translation data at %s into language system", currPath);
|
||||
StringTranslate.inject(new FileInputStream(file));
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void updateResourcePackList()
|
||||
{
|
||||
|
||||
}
|
||||
@Override
|
||||
public String getCurrentLanguage()
|
||||
{
|
||||
return "en_US";
|
||||
}
|
||||
}
|
||||
+39
-37
@@ -1,76 +1,78 @@
|
||||
#Main FML Access Transformer configuration file
|
||||
# TileEntity addMapping
|
||||
public ash.a(Ljava/lang/Class;Ljava/lang/String;)V #MD:TileEntity/func_70306_a
|
||||
public asp.a(Ljava/lang/Class;Ljava/lang/String;)V #MD:TileEntity/func_70306_a
|
||||
# EntityList addMappings
|
||||
public np.a(Ljava/lang/Class;Ljava/lang/String;I)V #MD:EntityList/func_75618_a
|
||||
public np.a(Ljava/lang/Class;Ljava/lang/String;III)V #MD:EntityList/func_75614_a
|
||||
public np.b #FD:EntityList/field_75625_b #nameToClassMap
|
||||
public np.c #FD:EntityList/field_75626_c #classToNameMap
|
||||
public np.d #FD:EntityList/field_75623_d #idToClassMap
|
||||
public nt.a(Ljava/lang/Class;Ljava/lang/String;I)V #MD:EntityList/func_75618_a
|
||||
public nt.a(Ljava/lang/Class;Ljava/lang/String;III)V #MD:EntityList/func_75614_a
|
||||
public nt.b #FD:EntityList/field_75625_b #nameToClassMap
|
||||
public nt.c #FD:EntityList/field_75626_c #classToNameMap
|
||||
public nt.d #FD:EntityList/field_75623_d #idToClassMap
|
||||
# RenderEngine
|
||||
#public bba.h #FD:RenderEngine/field_78367_h #textureList # -- MISSING MAPPING # -- MISSING MAPPING
|
||||
#public bge.g #FD:RenderEngine/field_78366_k #texturePack # -- MISSING MAPPING
|
||||
# RenderManager
|
||||
public bfx.q #FD:RenderManager/field_78729_o #renderers
|
||||
public bgl.q #FD:RenderManager/field_78729_o #renderers
|
||||
# RenderBlocks - everything
|
||||
public bfd.* #FD:RenderBlocks/*
|
||||
public bfd.*() #MD:RenderBlocks/*
|
||||
public bfr.* #FD:RenderBlocks/*
|
||||
public bfr.*() #MD:RenderBlocks/*
|
||||
#RenderPlayer
|
||||
#public-f bht.h #FD:RenderPlayer/field_77110_j #armorlist # -- MISSING MAPPING
|
||||
#RenderBiped
|
||||
public-f bgg.l #FD:RenderBiped/field_82424_k #armorlist
|
||||
public-f bgu.l #FD:RenderBiped/field_82424_k #armorlist
|
||||
#StringTranslate
|
||||
#public bp.b #FD:StringTranslate/field_74815_b # -- MISSING MAPPING
|
||||
#public bp.e #FD:StringTranslate/field_74813_d # -- MISSING MAPPING
|
||||
# TileEntityRenderer
|
||||
public bip.m #FD:TileEntityRenderer/field_76966_m
|
||||
public bje.m #FD:TileEntityRenderer/field_76966_m
|
||||
# CraftingManager - make the add recipe methods public
|
||||
public zz.a(Lxy;[Ljava/lang/Object;)Laac; #MD:CraftingManager/func_92103_a
|
||||
public zz.b(Lxy;[Ljava/lang/Object;)V #MD:CraftingManager/func_77596_b
|
||||
public aaf.a(Lye;[Ljava/lang/Object;)Laai; #MD:CraftingManager/func_92103_a
|
||||
public aaf.b(Lye;[Ljava/lang/Object;)V #MD:CraftingManager/func_77596_b
|
||||
# WeightedRandomItem
|
||||
public mf.a #FD:WeightedRandomItem/field_76292_a #probability
|
||||
public mj.a #FD:WeightedRandomItem/field_76292_a #probability
|
||||
# ItemStack
|
||||
#public+f tv.c #FD:ItemStack/field_77993_c #itemId
|
||||
# StatBase
|
||||
public kq.a #FD:StatBase/field_75978_a #statName
|
||||
public ku.a #FD:StatBase/field_75978_a #statName
|
||||
# NetLoginHandler
|
||||
public ju.a(Lju;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection'
|
||||
public ju.g #FD:NetLoginHandler/field_72543_h #userName
|
||||
public jy.a(Ljy;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection'
|
||||
public jy.g #FD:NetLoginHandler/field_72543_h #userName
|
||||
# EntityPlayerMP getNextWindowId
|
||||
public jr.bJ()V #MD:EntityPlayerMP/func_71117_bO
|
||||
public jr.bX #FD:EntityPlayerMP/field_71139_cq
|
||||
public jv.bN()V #MD:EntityPlayerMP/func_71117_bO
|
||||
public jv.bY #FD:EntityPlayerMP/field_71139_cq
|
||||
# EntityAITaskEntry
|
||||
public pq #CL:EntityAITaskEntry
|
||||
public pu #CL:EntityAITaskEntry
|
||||
# EntityAITasks
|
||||
public pp.a #FD:EntityAITasks/field_75782_a #taskList
|
||||
public pt.a #FD:EntityAITasks/field_75782_a #taskList
|
||||
# BlockChest
|
||||
public anc.m(Labq;III)Z #MD:BlockChest/func_72292_n #isOcelotBlockingChest
|
||||
public ank.m(Labw;III)Z #MD:BlockChest/func_72292_n #isOcelotBlockingChest
|
||||
# EntityLiving
|
||||
#public ng.aU #FD:EntityLiving/field_70736_aM #carryoverDamage # -- MISSING MAPPING
|
||||
public oc.c #FD:EntityLiving/field_70714_bg #tasks
|
||||
public og.c #FD:EntityLiving/field_70714_bg #tasks
|
||||
#public ng.bG #FD:EntityLiving/field_70703_bu #isJumping # -- MISSING MAPPING
|
||||
# EntityAIOcelotSit
|
||||
protected qc.a(Labq;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
|
||||
protected qc.f()Z #MD:EntityAIOcelotSit/func_75399_f #isblocksittable
|
||||
protected qg.a(Labw;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
|
||||
protected qg.f()Z #MD:EntityAIOcelotSit/func_75399_f #isblocksittable
|
||||
# CallableMinecraftVersion - sanity check the MC version
|
||||
public c #CL:CallableMinecraftVersion
|
||||
public c.<init>(Lb;)V #MD:CallableMinecraftVersion/<init>(Lnet/minecraft/src/CrashReport;) #constructor
|
||||
# EntityAnimal
|
||||
public rl.bp #FD:EntityAnimal/field_70881_d #inLove
|
||||
public rp.bp #FD:EntityAnimal/field_70881_d #inLove
|
||||
# WorldType
|
||||
public aca.<init>(ILjava/lang/String;)V #MD:WorldType/<init>(ILjava/lang/String;)
|
||||
public aca.<init>(ILjava/lang/String;I)V #MD:WorldType/<init>(ILjava/lang/String;I)
|
||||
public acg.<init>(ILjava/lang/String;)V #MD:WorldType/<init>(ILjava/lang/String;)
|
||||
public acg.<init>(ILjava/lang/String;I)V #MD:WorldType/<init>(ILjava/lang/String;I)
|
||||
# ComponentVillage
|
||||
public aje #CL:ComponentVillage
|
||||
public ajm #CL:ComponentVillage
|
||||
# StructureStart
|
||||
public aiv.a #FD:StructureStart/field_75075_a
|
||||
# EntityVillager - minmax lists
|
||||
public tv.a(Labg;ILjava/util/Random;F)V #MD:EntityVillager/func_70948_a #addBuy
|
||||
public tv.b(Labg;ILjava/util/Random;F)V #MD:EntityVillager/func_70949_b #addSell
|
||||
public tv.bB #FD:EntityVillager/field_70958_bB
|
||||
public tv.bC #FD:EntityVillager/field_70960_bC
|
||||
public ub.a(Labm;ILjava/util/Random;F)V #MD:EntityVillager/func_70948_a #addBuy
|
||||
public ub.b(Labm;ILjava/util/Random;F)V #MD:EntityVillager/func_70949_b #addSell
|
||||
public ub.bB #FD:EntityVillager/field_70958_bB
|
||||
public ub.bC #FD:EntityVillager/field_70960_bC
|
||||
# GuiButtonMerchant
|
||||
public axn #CL:GuiButtonMerchant
|
||||
public axx #CL:GuiButtonMerchant
|
||||
|
||||
protected aun.a #FD:GuiYesNo/field_73942_a #guiScreen
|
||||
protected aux.a #FD:GuiYesNo/field_73942_a #guiScreen
|
||||
# Minecraft
|
||||
public atm.C #FD:Minecraft/field_71425_J #running
|
||||
public atm.M #FD:Minecraft/field_71446_o # textureManager
|
||||
public atv.D #FD:Minecraft/field_71425_J #running
|
||||
public atv.N #FD:Minecraft/field_71446_o # textureManager
|
||||
@@ -2,11 +2,11 @@
|
||||
# Only runs at runtime because it's not necessary at compile time
|
||||
# has deobf and obf mappings so it runs OK in mcp
|
||||
# entityplayer -> network/player
|
||||
tz cpw/mods/fml/common/network/Player
|
||||
uf cpw/mods/fml/common/network/Player
|
||||
net.minecraft.entity.player.EntityPlayer cpw/mods/fml/common/network/Player
|
||||
# block -> blockproxy
|
||||
aqr cpw/mods/fml/common/registry/BlockProxy
|
||||
aqz cpw/mods/fml/common/registry/BlockProxy
|
||||
net.minecraft.block.Block cpw/mods/fml/common/registry/BlockProxy
|
||||
# item -> itemproxy
|
||||
xw cpw/mods/fml/common/registry/ItemProxy
|
||||
yc cpw/mods/fml/common/registry/ItemProxy
|
||||
net.minecraft.item.Item cpw/mods/fml/common/registry/ItemProxy
|
||||
+3
-3
@@ -3,9 +3,9 @@
|
||||
"modid": "mcp",
|
||||
"name": "Minecraft Coder Pack",
|
||||
"description": "Modding toolkit to decompile and deobfuscate the Minecraft client and server files.",
|
||||
"version": "7.51",
|
||||
"mcversion": "1.5.2",
|
||||
"logoFile": "/mcp.png",
|
||||
"version": "8.09",
|
||||
"mcversion": "1.6.3",
|
||||
"logoFile": "/mcplogo.png",
|
||||
"url": "http://mcp.ocean-labs.de/",
|
||||
"updateUrl": "",
|
||||
"authors": ["Searge", "ProfMobius", "IngisKahn", "Fesh0r", "ZeuX", "R4wk", "Others"],
|
||||
|
||||
+1922
-1906
File diff suppressed because it is too large.
Load diff
+7383
-2273
File diff suppressed because it is too large.
Load diff
+18604
-17976
File diff suppressed because it is too large.
Load diff
+13
-13
@@ -34,12 +34,12 @@ ReobfClientSrg = %(DirTemp)s/client_ro_srg.srg
|
||||
ReobfServerSrg = %(DirTemp)s/server_ro_srg.srg
|
||||
|
||||
[JAR]
|
||||
DirNatives = %(DirJars)s/versions/1.6/natives
|
||||
Json = %(DirJars)s/versions/1.6/1.6.json
|
||||
Client = %(DirJars)s/versions/1.6/1.6.jar
|
||||
Server = %(DirJars)s/minecraft_server.1.6.jar
|
||||
MD5Client = 6a64a2136e3a3fe4d29b0a0df30b25fc
|
||||
MD5Server = 7c03305c8bf97a8e8f3cdb147fc90607
|
||||
DirNatives = %(DirJars)s/bin/natives
|
||||
Client = %(DirJars)s/bin/minecraft.jar
|
||||
Server = %(DirJars)s/minecraft_server.jar
|
||||
LWJGL = %(DirJars)s/bin/jinput.jar,%(DirJars)s/bin/lwjgl.jar,%(DirJars)s/bin/lwjgl_util.jar
|
||||
MD5Client = 233effe2110d40a0519cf1489e4ccb1c
|
||||
MD5Server = 8ed981ab6030412f586bfe38ff0aaa82
|
||||
|
||||
[RETROGUARD]
|
||||
Location = %(DirRuntime)s/bin/retroguard.jar
|
||||
@@ -79,7 +79,7 @@ BinClientTemp = %(DirTempBin)s/minecraft
|
||||
BinServerTemp = %(DirTempBin)s/minecraft_server
|
||||
SrcClient = %(DirSrc)s/minecraft
|
||||
SrcServer = %(DirSrc)s/minecraft_server
|
||||
TestClient = net/minecraft/client/Minecraft
|
||||
TestClient = net/minecraft/client/main/Main
|
||||
TestServer = net/minecraft/server/MinecraftServer
|
||||
|
||||
[PATCHES]
|
||||
@@ -96,8 +96,8 @@ BinClient = %(DirBin)s/minecraft
|
||||
BinServer = %(DirBin)s/minecraft_server
|
||||
LogClient = %(DirLogs)s/client_compile.log
|
||||
LogServer = %(DirLogs)s/server_compile.log
|
||||
ClassPathClient = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/versions/1.6/1.6.jar
|
||||
ClassPathServer = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/minecraft_server.1.6.jar
|
||||
ClassPathClient =
|
||||
ClassPathServer =
|
||||
ClientFixes = %(DirConf)s/patches
|
||||
FixStart = Start
|
||||
IgnorePkg = paulscode,com,isom,ibxm,de/matthiasmann/twl,org,javax/xml,javax/ws,argo
|
||||
@@ -127,8 +127,8 @@ LogFile = %(DirLogs)s/mcp.log
|
||||
LogFileErr = %(DirLogs)s/mcperr.log
|
||||
UpdateUrl =
|
||||
IgnoreUpdate = %(DirBin)s,%(DirLib)s,%(DirLogs)s,%(DirModSrc)s,%(DirReobf)s,%(DirSrc)s,%(DirTemp)s,%(DirEclipse)s/Client/bin,%(DirEclipse)s/Server/bin,%(DirJars)s/world,%(DirJars)s/saves,%(DirJars)s/resources
|
||||
RGIndex = 130000
|
||||
ParamIndex = 30000
|
||||
RGIndex = 143000
|
||||
ParamIndex = 43000
|
||||
|
||||
[ASTYLE]
|
||||
AstyleConfig = %(DirConf)s/astyle.cfg
|
||||
@@ -159,5 +159,5 @@ CmdFernflower = %s -Xmx512M -jar %s -din=0 -rbr=0 -dgs=1 -asc=1 -log=WARN {indir
|
||||
CmdExceptor = %s -jar %s {input} {output} {conf} {log}
|
||||
CmdRecomp = %s -encoding UTF-8 -Xlint:-options -deprecation -g -source 1.6 -target 1.6 -classpath "{classpath}" -sourcepath {sourcepath} -d {outpath} {pkgs}
|
||||
CmdRecompScala = %s -encoding UTF-8 -deprecation -target:jvm-1.6 -classpath "{classpath}" -sourcepath {sourcepath} -d {outpath} {pkgs}
|
||||
CmdStartSrv = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" net.minecraft.server.MinecraftServer
|
||||
CmdStartClt = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" -Djava.library.path={natives} Start
|
||||
CmdStartSrv = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" cpw.mods.fml.relauncher.ServerLaunchWrapper {extraargs}
|
||||
CmdStartClt = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" -Djava.library.path={natives} net.minecraft.launchwrapper.Launch --tweakClass cpw.mods.fml.common.launcher.FMLTweaker --version FML_DEV {extraargs}
|
||||
+1704
-1527
File diff suppressed because it is too large.
Load diff
-8820
File diff suppressed because it is too large.
Load diff
+28
-16
@@ -151,6 +151,7 @@ CallableTexturePack,net/minecraft/client
|
||||
CallableType2,net/minecraft/client
|
||||
CallableUpdatingScreenName,net/minecraft/client
|
||||
Minecraft,net/minecraft/client
|
||||
MinecraftINNER13,net/minecraft/client
|
||||
StatStringFormatKeyInv,net/minecraft/client
|
||||
ThreadClientSleep,net/minecraft/client
|
||||
ScheduledSound,net/minecraft/client/audio
|
||||
@@ -164,7 +165,6 @@ AbstractClientPlayer,net/minecraft/client/entity
|
||||
EntityClientPlayerMP,net/minecraft/client/entity
|
||||
EntityOtherPlayerMP,net/minecraft/client/entity
|
||||
EntityPlayerSP,net/minecraft/client/entity
|
||||
RenderMinecartMobSpawner,net/minecraft/client/entity/render
|
||||
ChatClickData,net/minecraft/client/gui
|
||||
ChatLine,net/minecraft/client/gui
|
||||
FontRenderer,net/minecraft/client/gui
|
||||
@@ -297,13 +297,15 @@ BackupList,net/minecraft/client/mco
|
||||
ExceptionMcoHttp,net/minecraft/client/mco
|
||||
ExceptionMcoService,net/minecraft/client/mco
|
||||
ExceptionRetryCall,net/minecraft/client/mco
|
||||
GuiScreenClientOutdated,net/minecraft/client/mco
|
||||
GuiScreenConfirmationType,net/minecraft/client/mco
|
||||
McoClient,net/minecraft/client/mco
|
||||
McoServer,net/minecraft/client/mco
|
||||
McoServerAddress,net/minecraft/client/mco
|
||||
McoServerList,net/minecraft/client/mco
|
||||
McoServerListEmptyAnon,net/minecraft/client/mco
|
||||
McoServerListUpdateThread,net/minecraft/client/mco
|
||||
McoServerListUpdateThreadComparer,net/minecraft/client/mco
|
||||
McoServerListUpdateTask,net/minecraft/client/mco
|
||||
McoServerListUpdateTaskComparator,net/minecraft/client/mco
|
||||
PendingInvite,net/minecraft/client/mco
|
||||
PendingInvitesList,net/minecraft/client/mco
|
||||
Request,net/minecraft/client/mco
|
||||
@@ -374,6 +376,8 @@ ThreadConnectToServer,net/minecraft/client/multiplayer
|
||||
ThreadLanServerFind,net/minecraft/client/multiplayer
|
||||
ThreadLanServerPing,net/minecraft/client/multiplayer
|
||||
WorldClient,net/minecraft/client/multiplayer
|
||||
WorldClientINNER3,net/minecraft/client/multiplayer
|
||||
WorldClientINNER4,net/minecraft/client/multiplayer
|
||||
EffectRenderer,net/minecraft/client/particle
|
||||
EntityAuraFX,net/minecraft/client/particle
|
||||
EntityBreakingFX,net/minecraft/client/particle
|
||||
@@ -405,10 +409,6 @@ EntitySnowShovelFX,net/minecraft/client/particle
|
||||
EntitySpellParticleFX,net/minecraft/client/particle
|
||||
EntitySplashFX,net/minecraft/client/particle
|
||||
EntitySuspendFX,net/minecraft/client/particle
|
||||
RenderCaveSpider,net/minecraft/client/render/entity
|
||||
RenderHorse,net/minecraft/client/render/entity
|
||||
RenderLeashKnot,net/minecraft/client/render/entity
|
||||
RendererLivingEntity,net/minecraft/client/render/entity
|
||||
ActiveRenderInfo,net/minecraft/client/renderer
|
||||
CallableMouseLocation,net/minecraft/client/renderer
|
||||
CallableParticlePositionInfo,net/minecraft/client/renderer
|
||||
@@ -446,6 +446,7 @@ RenderBat,net/minecraft/client/renderer/entity
|
||||
RenderBiped,net/minecraft/client/renderer/entity
|
||||
RenderBlaze,net/minecraft/client/renderer/entity
|
||||
RenderBoat,net/minecraft/client/renderer/entity
|
||||
RenderCaveSpider,net/minecraft/client/renderer/entity
|
||||
RenderChicken,net/minecraft/client/renderer/entity
|
||||
RenderCow,net/minecraft/client/renderer/entity
|
||||
RenderCreeper,net/minecraft/client/renderer/entity
|
||||
@@ -458,13 +459,16 @@ RenderFireball,net/minecraft/client/renderer/entity
|
||||
RenderFish,net/minecraft/client/renderer/entity
|
||||
RenderGhast,net/minecraft/client/renderer/entity
|
||||
RenderGiantZombie,net/minecraft/client/renderer/entity
|
||||
RenderHorse,net/minecraft/client/renderer/entity
|
||||
RenderIronGolem,net/minecraft/client/renderer/entity
|
||||
RenderItem,net/minecraft/client/renderer/entity
|
||||
RenderLeashKnot,net/minecraft/client/renderer/entity
|
||||
RenderLightningBolt,net/minecraft/client/renderer/entity
|
||||
RenderLiving,net/minecraft/client/renderer/entity
|
||||
RenderMagmaCube,net/minecraft/client/renderer/entity
|
||||
RenderManager,net/minecraft/client/renderer/entity
|
||||
RenderMinecart,net/minecraft/client/renderer/entity
|
||||
RenderMinecartMobSpawner,net/minecraft/client/renderer/entity
|
||||
RenderMooshroom,net/minecraft/client/renderer/entity
|
||||
RenderOcelot,net/minecraft/client/renderer/entity
|
||||
RenderPainting,net/minecraft/client/renderer/entity
|
||||
@@ -486,6 +490,7 @@ RenderWither,net/minecraft/client/renderer/entity
|
||||
RenderWolf,net/minecraft/client/renderer/entity
|
||||
RenderXPOrb,net/minecraft/client/renderer/entity
|
||||
RenderZombie,net/minecraft/client/renderer/entity
|
||||
RendererLivingEntity,net/minecraft/client/renderer/entity
|
||||
AbstractTexture,net/minecraft/client/renderer/texture
|
||||
DynamicTexture,net/minecraft/client/renderer/texture
|
||||
IconRegister,net/minecraft/client/renderer/texture
|
||||
@@ -522,7 +527,6 @@ DefaultResourcePack,net/minecraft/client/resources
|
||||
FallbackResourceManager,net/minecraft/client/resources
|
||||
FileResourcePack,net/minecraft/client/resources
|
||||
FolderResourcePack,net/minecraft/client/resources
|
||||
FolderResourcePackFilter,net/minecraft/client/resources
|
||||
FoliageColorReloadListener,net/minecraft/client/resources
|
||||
GrassColorReloadListener,net/minecraft/client/resources
|
||||
GuiScreenTemporaryResourcePackSelect,net/minecraft/client/resources
|
||||
@@ -533,7 +537,6 @@ LanguageManager,net/minecraft/client/resources
|
||||
Locale,net/minecraft/client/resources
|
||||
ReloadableResourceManager,net/minecraft/client/resources
|
||||
Resource,net/minecraft/client/resources
|
||||
ResourceLocation,net/minecraft/client/resources
|
||||
ResourceManager,net/minecraft/client/resources
|
||||
ResourceManagerReloadListener,net/minecraft/client/resources
|
||||
ResourcePack,net/minecraft/client/resources
|
||||
@@ -581,6 +584,7 @@ CommandHandler,net/minecraft/command
|
||||
CommandHelp,net/minecraft/command
|
||||
CommandKill,net/minecraft/command
|
||||
CommandNotFoundException,net/minecraft/command
|
||||
CommandPlaySound,net/minecraft/command
|
||||
CommandServerBan,net/minecraft/command
|
||||
CommandServerBanIp,net/minecraft/command
|
||||
CommandServerBanlist,net/minecraft/command
|
||||
@@ -600,6 +604,7 @@ CommandServerSay,net/minecraft/command
|
||||
CommandServerStop,net/minecraft/command
|
||||
CommandServerTp,net/minecraft/command
|
||||
CommandServerWhitelist,net/minecraft/command
|
||||
CommandSetPlayerTimeout,net/minecraft/command
|
||||
CommandSetSpawnpoint,net/minecraft/command
|
||||
CommandShowSeed,net/minecraft/command
|
||||
CommandSpreadPlayers,net/minecraft/command
|
||||
@@ -759,8 +764,8 @@ EntityAILookIdle,net/minecraft/entity/ai
|
||||
EntityAIMate,net/minecraft/entity/ai
|
||||
EntityAIMoveIndoors,net/minecraft/entity/ai
|
||||
EntityAIMoveThroughVillage,net/minecraft/entity/ai
|
||||
EntityAIMoveTowardsRestriction,net/minecraft/entity/ai
|
||||
EntityAIMoveTowardsTarget,net/minecraft/entity/ai
|
||||
EntityAIMoveTwardsRestriction,net/minecraft/entity/ai
|
||||
EntityAINearestAttackableTarget,net/minecraft/entity/ai
|
||||
EntityAINearestAttackableTargetSelector,net/minecraft/entity/ai
|
||||
EntityAINearestAttackableTargetSorter,net/minecraft/entity/ai
|
||||
@@ -798,10 +803,8 @@ AttributeInstance,net/minecraft/entity/ai/attributes
|
||||
AttributeModifier,net/minecraft/entity/ai/attributes
|
||||
BaseAttribute,net/minecraft/entity/ai/attributes
|
||||
BaseAttributeMap,net/minecraft/entity/ai/attributes
|
||||
ClientsideAttributeMap,net/minecraft/entity/ai/attributes
|
||||
ModifiableAttributeInstance,net/minecraft/entity/ai/attributes
|
||||
RangedAttribute,net/minecraft/entity/ai/attributes
|
||||
ReadonlyAttributeInstance,net/minecraft/entity/ai/attributes
|
||||
ServersideAttributeMap,net/minecraft/entity/ai/attributes
|
||||
BossStatus,net/minecraft/entity/boss
|
||||
EntityDragon,net/minecraft/entity/boss
|
||||
@@ -849,6 +852,8 @@ EntitySnowman,net/minecraft/entity/monster
|
||||
EntitySpider,net/minecraft/entity/monster
|
||||
EntityWitch,net/minecraft/entity/monster
|
||||
EntityZombie,net/minecraft/entity/monster
|
||||
EntityZombieGroupData,net/minecraft/entity/monster
|
||||
EntityZombieINNER1,net/minecraft/entity/monster
|
||||
FilterIMob,net/minecraft/entity/monster
|
||||
IMob,net/minecraft/entity/monster
|
||||
ContainerSheep,net/minecraft/entity/passive
|
||||
@@ -886,6 +891,7 @@ EntitySmallFireball,net/minecraft/entity/projectile
|
||||
EntitySnowball,net/minecraft/entity/projectile
|
||||
EntityThrowable,net/minecraft/entity/projectile
|
||||
EntityWitherSkull,net/minecraft/entity/projectile
|
||||
AnimalChest,net/minecraft/inventory
|
||||
Container,net/minecraft/inventory
|
||||
ContainerBeacon,net/minecraft/inventory
|
||||
ContainerBrewingStand,net/minecraft/inventory
|
||||
@@ -894,6 +900,9 @@ ContainerDispenser,net/minecraft/inventory
|
||||
ContainerEnchantment,net/minecraft/inventory
|
||||
ContainerFurnace,net/minecraft/inventory
|
||||
ContainerHopper,net/minecraft/inventory
|
||||
ContainerHorseInventory,net/minecraft/inventory
|
||||
ContainerHorseInventorySlotArmor,net/minecraft/inventory
|
||||
ContainerHorseInventorySlotSaddle,net/minecraft/inventory
|
||||
ContainerMerchant,net/minecraft/inventory
|
||||
ContainerPlayer,net/minecraft/inventory
|
||||
ContainerRepair,net/minecraft/inventory
|
||||
@@ -920,10 +929,6 @@ SlotEnchantment,net/minecraft/inventory
|
||||
SlotEnchantmentTable,net/minecraft/inventory
|
||||
SlotFurnace,net/minecraft/inventory
|
||||
SlotMerchantResult,net/minecraft/inventory
|
||||
AnimalChest,net/minecraft/inventroy
|
||||
ContainerHorseInventory,net/minecraft/inventroy
|
||||
ContainerHorseInventorySlotArmor,net/minecraft/inventroy
|
||||
ContainerHorseInventorySlotSaddle,net/minecraft/inventroy
|
||||
BehaviorDispenseArmor,net/minecraft/item
|
||||
BehaviorDispenseMinecart,net/minecraft/item
|
||||
EnumAction,net/minecraft/item
|
||||
@@ -1066,6 +1071,7 @@ Packet12PlayerLook,net/minecraft/network/packet
|
||||
Packet130UpdateSign,net/minecraft/network/packet
|
||||
Packet131MapData,net/minecraft/network/packet
|
||||
Packet132TileEntityData,net/minecraft/network/packet
|
||||
Packet133TileEditorOpen,net/minecraft/network/packet
|
||||
Packet13PlayerLookMove,net/minecraft/network/packet
|
||||
Packet14BlockDig,net/minecraft/network/packet
|
||||
Packet15Place,net/minecraft/network/packet
|
||||
@@ -1113,6 +1119,7 @@ Packet41EntityEffect,net/minecraft/network/packet
|
||||
Packet42RemoveEntityEffect,net/minecraft/network/packet
|
||||
Packet43Experience,net/minecraft/network/packet
|
||||
Packet44UpdateAttributes,net/minecraft/network/packet
|
||||
Packet44UpdateAttributesSnapshot,net/minecraft/network/packet
|
||||
Packet4UpdateTime,net/minecraft/network/packet
|
||||
Packet51MapChunk,net/minecraft/network/packet
|
||||
Packet51MapChunkData,net/minecraft/network/packet
|
||||
@@ -1171,6 +1178,7 @@ ScoreboardSaveData,net/minecraft/scoreboard
|
||||
ServerCommandScoreboard,net/minecraft/scoreboard
|
||||
ServerCommandTestFor,net/minecraft/scoreboard
|
||||
ServerScoreboard,net/minecraft/scoreboard
|
||||
Team,net/minecraft/scoreboard
|
||||
CallableIsServerModded,net/minecraft/server
|
||||
CallableServerMemoryStats,net/minecraft/server
|
||||
CallableServerProfiler,net/minecraft/server
|
||||
@@ -1290,6 +1298,7 @@ MovementInput,net/minecraft/util
|
||||
MovementInputFromOptions,net/minecraft/util
|
||||
MovingObjectPosition,net/minecraft/util
|
||||
ReportedException,net/minecraft/util
|
||||
ResourceLocation,net/minecraft/util
|
||||
ScreenShotHelper,net/minecraft/util
|
||||
Session,net/minecraft/util
|
||||
StatCollector,net/minecraft/util
|
||||
@@ -1474,6 +1483,7 @@ ComponentNetherBridgeThrone,net/minecraft/world/gen/structure
|
||||
ComponentScatteredFeature,net/minecraft/world/gen/structure
|
||||
ComponentScatteredFeatureDesertPyramid,net/minecraft/world/gen/structure
|
||||
ComponentScatteredFeatureJunglePyramid,net/minecraft/world/gen/structure
|
||||
ComponentScatteredFeaturePieces,net/minecraft/world/gen/structure
|
||||
ComponentScatteredFeaturePieces2,net/minecraft/world/gen/structure
|
||||
ComponentScatteredFeatureSwampHut,net/minecraft/world/gen/structure
|
||||
ComponentStronghold,net/minecraft/world/gen/structure
|
||||
@@ -1511,6 +1521,8 @@ MapGenMineshaft,net/minecraft/world/gen/structure
|
||||
MapGenNetherBridge,net/minecraft/world/gen/structure
|
||||
MapGenStronghold,net/minecraft/world/gen/structure
|
||||
MapGenStructure,net/minecraft/world/gen/structure
|
||||
MapGenStructureData,net/minecraft/world/gen/structure
|
||||
MapGenStructureIO,net/minecraft/world/gen/structure
|
||||
MapGenVillage,net/minecraft/world/gen/structure
|
||||
StructureBoundingBox,net/minecraft/world/gen/structure
|
||||
StructureComponent,net/minecraft/world/gen/structure
|
||||
|
||||
|
+4170
-3738
File diff suppressed because it is too large.
Load diff
+164
-111
@@ -1,95 +1,51 @@
|
||||
diff -r -U 3 minecraft\net\minecraft\client\Minecraft.java minecraft_patched\net\minecraft\client\Minecraft.java
|
||||
--- minecraft\net\minecraft\client\Minecraft.java Sat Apr 27 01:53:03 2013
|
||||
+++ minecraft_patched\net\minecraft\client\Minecraft.java Sat Apr 27 01:55:19 2013
|
||||
@@ -532,9 +532,8 @@
|
||||
return;
|
||||
}
|
||||
|
||||
- while(true) {
|
||||
try {
|
||||
- if(this.field_71425_J) {
|
||||
+ while(this.field_71425_J) {
|
||||
if(this.field_71434_R && this.field_71433_S != null) {
|
||||
this.func_71377_b(this.field_71433_S);
|
||||
return;
|
||||
@@ -552,7 +551,6 @@
|
||||
this.func_71373_a(new GuiMemoryErrorScreen());
|
||||
System.gc();
|
||||
}
|
||||
- continue;
|
||||
}
|
||||
} catch (MinecraftError var12) {
|
||||
;
|
||||
@@ -570,8 +568,6 @@
|
||||
this.func_71405_e();
|
||||
}
|
||||
|
||||
- return;
|
||||
- }
|
||||
}
|
||||
|
||||
private void func_71411_J() {
|
||||
diff -r -U 3 minecraft\net\minecraft\src\CallableSuspiciousClasses.java minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java
|
||||
--- minecraft\net\minecraft\src\CallableSuspiciousClasses.java Sat Apr 27 01:53:04 2013
|
||||
+++ minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java Sat Apr 27 01:55:19 2013
|
||||
--- minecraft\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 13:58:48 2013
|
||||
+++ minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:01:01 2013
|
||||
@@ -21,9 +21,14 @@
|
||||
|
||||
public String func_85085_a() {
|
||||
public String func_85085_a() throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
|
||||
StringBuilder var1 = new StringBuilder();
|
||||
- Field var2 = ClassLoader.class.getDeclaredField("classes");
|
||||
- var2.setAccessible(true);
|
||||
+ ArrayList var3;
|
||||
+ try {
|
||||
Field var2 = ClassLoader.class.getDeclaredField("classes");
|
||||
var2.setAccessible(true);
|
||||
- ArrayList var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
|
||||
+ ArrayList var3;
|
||||
+ try {
|
||||
+ Field var2 = ClassLoader.class.getDeclaredField("classes");
|
||||
+ var2.setAccessible(true);
|
||||
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
|
||||
+ } catch(Exception ex) {
|
||||
+ return "";
|
||||
+ }
|
||||
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
|
||||
+ } catch(Exception ex) {
|
||||
+ return "";
|
||||
+ }
|
||||
boolean var4 = true;
|
||||
boolean var5 = !CrashReport.class.getCanonicalName().equals("net.minecraft.CrashReport");
|
||||
HashMap var6 = new HashMap();
|
||||
diff -r -U 3 minecraft\net\minecraft\src\CodecMus.java minecraft_patched\net\minecraft\src\CodecMus.java
|
||||
--- minecraft\net\minecraft\src\CodecMus.java Sat Apr 27 01:53:04 2013
|
||||
+++ minecraft_patched\net\minecraft\src\CodecMus.java Sat Apr 27 01:55:19 2013
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.minecraft.src;
|
||||
@@ -98,6 +103,10 @@
|
||||
|
||||
+import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import net.minecraft.src.MusInputStream;
|
||||
import paulscode.sound.codecs.CodecJOrbis;
|
||||
@@ -7,6 +8,10 @@
|
||||
public class CodecMus extends CodecJOrbis {
|
||||
|
||||
protected InputStream openInputStream() {
|
||||
- return new MusInputStream(this, this.url, this.urlConnection.getInputStream());
|
||||
+ try {
|
||||
+ return new MusInputStream(this, this.url, this.urlConnection.getInputStream());
|
||||
+ } catch (IOException e) {
|
||||
+ return null;
|
||||
+ }
|
||||
// $FF: synthetic method
|
||||
public Object call() {
|
||||
+ try {
|
||||
return this.func_85085_a();
|
||||
+ } catch(Exception ex) {
|
||||
+ return null;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
diff -r -U 3 minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java
|
||||
--- minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Apr 27 01:53:04 2013
|
||||
+++ minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Apr 27 01:55:19 2013
|
||||
--- minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 13:58:48 2013
|
||||
+++ minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:01:01 2013
|
||||
@@ -11,6 +11,10 @@
|
||||
|
||||
public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn {
|
||||
|
||||
+ public ComponentStrongholdRightTurn(int p_i3843_1_, Random p_i3843_2_, StructureBoundingBox p_i3843_3_, int p_i3843_4_) {
|
||||
+ super(p_i3843_1_, p_i3843_2_, p_i3843_3_, p_i3843_4_);
|
||||
+ public ComponentStrongholdRightTurn(int p_i2074_1_, Random p_i2074_2_, StructureBoundingBox p_i2074_3_, int p_i2074_4_) {
|
||||
+ super(p_i2074_1_, p_i2074_2_, p_i2074_3_, p_i2074_4_);
|
||||
+ }
|
||||
+
|
||||
public void func_74861_a(StructureComponent p_74861_1_, List p_74861_2_, Random p_74861_3_) {
|
||||
if(this.field_74885_f != 2 && this.field_74885_f != 3) {
|
||||
this.func_74989_b((ComponentStrongholdStairs2)p_74861_1_, p_74861_2_, p_74861_3_, 1, 1);
|
||||
diff -r -U 3 minecraft\net\minecraft\src\DedicatedServer.java minecraft_patched\net\minecraft\src\DedicatedServer.java
|
||||
--- minecraft\net\minecraft\src\DedicatedServer.java Sat Apr 27 01:53:04 2013
|
||||
+++ minecraft_patched\net\minecraft\src\DedicatedServer.java Sat Apr 27 01:55:19 2013
|
||||
@@ -207,7 +207,7 @@
|
||||
--- minecraft\net\minecraft\src\DedicatedServer.java Tue Sep 17 13:58:48 2013
|
||||
+++ minecraft_patched\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:01:01 2013
|
||||
@@ -208,7 +208,7 @@
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
@@ -99,21 +55,55 @@ diff -r -U 3 minecraft\net\minecraft\src\DedicatedServer.java minecraft_patched\
|
||||
this.func_71333_ah();
|
||||
}
|
||||
diff -r -U 3 minecraft\net\minecraft\src\EnumChatFormatting.java minecraft_patched\net\minecraft\src\EnumChatFormatting.java
|
||||
--- minecraft\net\minecraft\src\EnumChatFormatting.java Sat Apr 27 01:53:05 2013
|
||||
+++ minecraft_patched\net\minecraft\src\EnumChatFormatting.java Sat Apr 27 01:55:19 2013
|
||||
--- minecraft\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 13:58:49 2013
|
||||
+++ minecraft_patched\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:01:01 2013
|
||||
@@ -38,7 +38,7 @@
|
||||
private final String field_96304_B;
|
||||
|
||||
private EnumChatFormatting(char p_i10000_3_) {
|
||||
- this(p_i10000_1_, p_i10000_2_, p_i10000_3_, false);
|
||||
+ this(p_i10000_3_, false);
|
||||
private EnumChatFormatting(char p_i1336_3_) {
|
||||
- this(p_i1336_1_, p_i1336_2_, p_i1336_3_, false);
|
||||
+ this(p_i1336_3_, false);
|
||||
}
|
||||
|
||||
private EnumChatFormatting(char p_i10001_3_, boolean p_i10001_4_) {
|
||||
private EnumChatFormatting(char p_i1337_3_, boolean p_i1337_4_) {
|
||||
diff -r -U 3 minecraft\net\minecraft\src\FileResourcePack.java minecraft_patched\net\minecraft\src\FileResourcePack.java
|
||||
--- minecraft\net\minecraft\src\FileResourcePack.java Tue Sep 17 13:58:49 2013
|
||||
+++ minecraft_patched\net\minecraft\src\FileResourcePack.java Tue Sep 17 14:01:01 2013
|
||||
@@ -84,12 +84,18 @@
|
||||
|
||||
protected void finalize() {
|
||||
this.close();
|
||||
+ try {
|
||||
super.finalize();
|
||||
+ } catch(Throwable t) {
|
||||
+ }
|
||||
}
|
||||
|
||||
public void close() {
|
||||
if(this.field_110600_d != null) {
|
||||
+ try {
|
||||
this.field_110600_d.close();
|
||||
+ } catch(Exception ex) {
|
||||
+ }
|
||||
this.field_110600_d = null;
|
||||
}
|
||||
|
||||
diff -r -U 3 minecraft\net\minecraft\src\FolderResourcePack.java minecraft_patched\net\minecraft\src\FolderResourcePack.java
|
||||
--- minecraft\net\minecraft\src\FolderResourcePack.java Tue Sep 17 13:58:49 2013
|
||||
+++ minecraft_patched\net\minecraft\src\FolderResourcePack.java Tue Sep 17 14:01:01 2013
|
||||
@@ -29,7 +29,7 @@
|
||||
HashSet var1 = Sets.newHashSet();
|
||||
File var2 = new File(this.field_110597_b, "assets/");
|
||||
if(var2.isDirectory()) {
|
||||
- File[] var3 = var2.listFiles(DirectoryFileFilter.DIRECTORY);
|
||||
+ File[] var3 = var2.listFiles((java.io.FileFilter)DirectoryFileFilter.DIRECTORY);
|
||||
int var4 = var3.length;
|
||||
|
||||
for(int var5 = 0; var5 < var4; ++var5) {
|
||||
diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net\minecraft\src\FontRenderer.java
|
||||
--- minecraft\net\minecraft\src\FontRenderer.java Sat Apr 27 01:53:05 2013
|
||||
+++ minecraft_patched\net\minecraft\src\FontRenderer.java Sat Apr 27 01:55:19 2013
|
||||
@@ -621,8 +621,6 @@
|
||||
--- minecraft\net\minecraft\src\FontRenderer.java Tue Sep 17 13:58:49 2013
|
||||
+++ minecraft_patched\net\minecraft\src\FontRenderer.java Tue Sep 17 14:01:01 2013
|
||||
@@ -630,8 +630,6 @@
|
||||
case 10:
|
||||
--var5;
|
||||
break;
|
||||
@@ -122,19 +112,19 @@ diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net
|
||||
case 167:
|
||||
if(var5 < var3 - 1) {
|
||||
++var5;
|
||||
@@ -636,6 +634,8 @@
|
||||
@@ -645,6 +643,8 @@
|
||||
}
|
||||
}
|
||||
break;
|
||||
+ case 32:
|
||||
+ var6 = var5;
|
||||
+ var6 = var5;
|
||||
default:
|
||||
var4 += this.func_78263_a(var8);
|
||||
if(var7) {
|
||||
diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched\net\minecraft\src\IntegratedServer.java
|
||||
--- minecraft\net\minecraft\src\IntegratedServer.java Sat Apr 27 01:53:05 2013
|
||||
+++ minecraft_patched\net\minecraft\src\IntegratedServer.java Sat Apr 27 01:55:19 2013
|
||||
@@ -101,7 +101,7 @@
|
||||
--- minecraft\net\minecraft\src\IntegratedServer.java Tue Sep 17 13:58:50 2013
|
||||
+++ minecraft_patched\net\minecraft\src\IntegratedServer.java Tue Sep 17 14:01:01 2013
|
||||
@@ -103,7 +103,7 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -143,9 +133,60 @@ diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched
|
||||
boolean var1 = this.field_71348_o;
|
||||
this.field_71348_o = this.field_71347_n.func_71752_f();
|
||||
if(!var1 && this.field_71348_o) {
|
||||
diff -r -U 3 minecraft\net\minecraft\src\Minecraft.java minecraft_patched\net\minecraft\src\Minecraft.java
|
||||
--- minecraft\net\minecraft\src\Minecraft.java Tue Sep 17 13:58:50 2013
|
||||
+++ minecraft_patched\net\minecraft\src\Minecraft.java Tue Sep 17 14:01:01 2013
|
||||
@@ -604,8 +604,8 @@
|
||||
return;
|
||||
}
|
||||
|
||||
- while(true) {
|
||||
- try {
|
||||
+ try {
|
||||
+ while(this.field_71425_J) {
|
||||
if(this.field_71425_J) {
|
||||
if(this.field_71434_R && this.field_71433_S != null) {
|
||||
this.func_71377_b(this.field_71433_S);
|
||||
@@ -626,23 +626,20 @@
|
||||
}
|
||||
continue;
|
||||
}
|
||||
- } catch (MinecraftError var12) {
|
||||
- ;
|
||||
- } catch (ReportedException var13) {
|
||||
- this.func_71396_d(var13.func_71575_a());
|
||||
- this.func_71398_f();
|
||||
- var13.printStackTrace();
|
||||
- this.func_71377_b(var13.func_71575_a());
|
||||
- } catch (Throwable var14) {
|
||||
- var2 = this.func_71396_d(new CrashReport("Unexpected error", var14));
|
||||
- this.func_71398_f();
|
||||
- var14.printStackTrace();
|
||||
- this.func_71377_b(var2);
|
||||
- } finally {
|
||||
- this.func_71405_e();
|
||||
}
|
||||
-
|
||||
- return;
|
||||
+ } catch (MinecraftError var12) {
|
||||
+ } catch (ReportedException var13) {
|
||||
+ this.func_71396_d(var13.func_71575_a());
|
||||
+ this.func_71398_f();
|
||||
+ var13.printStackTrace();
|
||||
+ this.func_71377_b(var13.func_71575_a());
|
||||
+ } catch (Throwable var14) {
|
||||
+ var2 = this.func_71396_d(new CrashReport("Unexpected error", var14));
|
||||
+ this.func_71398_f();
|
||||
+ var14.printStackTrace();
|
||||
+ this.func_71377_b(var2);
|
||||
+ } finally {
|
||||
+ this.func_71405_e();
|
||||
}
|
||||
}
|
||||
|
||||
diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched\net\minecraft\src\RConThreadClient.java
|
||||
--- minecraft\net\minecraft\src\RConThreadClient.java Sat Apr 27 01:53:07 2013
|
||||
+++ minecraft_patched\net\minecraft\src\RConThreadClient.java Sat Apr 27 01:55:19 2013
|
||||
--- minecraft\net\minecraft\src\RConThreadClient.java Tue Sep 17 13:58:51 2013
|
||||
+++ minecraft_patched\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:01:01 2013
|
||||
@@ -32,8 +32,8 @@
|
||||
}
|
||||
|
||||
@@ -173,22 +214,21 @@ diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched
|
||||
}
|
||||
-
|
||||
- return;
|
||||
- }
|
||||
+ } catch (SocketTimeoutException var17) {
|
||||
+ } catch (IOException var18) {
|
||||
+ } catch (Exception var19) {
|
||||
+ System.out.println(var19);
|
||||
+ } finally {
|
||||
+ this.func_72653_g();
|
||||
}
|
||||
-
|
||||
+ } catch (SocketTimeoutException var17) {
|
||||
+ } catch (IOException var18) {
|
||||
+ } catch (Exception var19) {
|
||||
+ System.out.println(var19);
|
||||
+ } finally {
|
||||
+ this.func_72653_g();
|
||||
+ }
|
||||
}
|
||||
|
||||
private void func_72654_a(int p_72654_1_, int p_72654_2_, String p_72654_3_) throws IOException {
|
||||
diff -r -U 3 minecraft\net\minecraft\src\RenderBlocks.java minecraft_patched\net\minecraft\src\RenderBlocks.java
|
||||
--- minecraft\net\minecraft\src\RenderBlocks.java Sat Apr 27 01:53:07 2013
|
||||
+++ minecraft_patched\net\minecraft\src\RenderBlocks.java Sat Apr 27 01:55:19 2013
|
||||
@@ -1951,16 +1951,16 @@
|
||||
--- minecraft\net\minecraft\src\RenderBlocks.java Tue Sep 17 13:58:51 2013
|
||||
+++ minecraft_patched\net\minecraft\src\RenderBlocks.java Tue Sep 17 14:01:01 2013
|
||||
@@ -1960,16 +1960,16 @@
|
||||
float var25 = (float)(p_78589_2_ + 1);
|
||||
float var26 = (float)(p_78589_4_ + 0);
|
||||
float var27 = (float)(p_78589_4_ + 1);
|
||||
@@ -209,7 +249,7 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderBlocks.java minecraft_patched\net
|
||||
int var29 = 0;
|
||||
int var30 = 0;
|
||||
int var31 = 16;
|
||||
@@ -2006,7 +2006,7 @@
|
||||
@@ -2016,7 +2016,7 @@
|
||||
var5.func_78374_a((double)var25, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var9.func_94214_a((double)var31), (double)var9.func_94207_b((double)var30));
|
||||
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var9.func_94214_a((double)var29), (double)var9.func_94207_b((double)var30));
|
||||
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var27, (double)var9.func_94214_a((double)var29), (double)var9.func_94207_b((double)var32));
|
||||
@@ -219,9 +259,9 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderBlocks.java minecraft_patched\net
|
||||
var5.func_78374_a((double)var25, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var8.func_94212_f(), (double)var8.func_94206_g());
|
||||
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var8.func_94209_e(), (double)var8.func_94206_g());
|
||||
diff -r -U 3 minecraft\net\minecraft\src\RenderGlobal.java minecraft_patched\net\minecraft\src\RenderGlobal.java
|
||||
--- minecraft\net\minecraft\src\RenderGlobal.java Sat Apr 27 01:53:07 2013
|
||||
+++ minecraft_patched\net\minecraft\src\RenderGlobal.java Sat Apr 27 01:55:19 2013
|
||||
@@ -1449,7 +1449,7 @@
|
||||
--- minecraft\net\minecraft\src\RenderGlobal.java Tue Sep 17 13:58:51 2013
|
||||
+++ minecraft_patched\net\minecraft\src\RenderGlobal.java Tue Sep 17 14:01:01 2013
|
||||
@@ -1445,7 +1445,7 @@
|
||||
double var15 = this.field_72777_q.field_71451_h.field_70165_t - p_72726_2_;
|
||||
double var17 = this.field_72777_q.field_71451_h.field_70163_u - p_72726_4_;
|
||||
double var19 = this.field_72777_q.field_71451_h.field_70161_v - p_72726_6_;
|
||||
@@ -230,11 +270,26 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderGlobal.java minecraft_patched\net
|
||||
if(p_72726_1_.equals("hugeexplosion")) {
|
||||
this.field_72777_q.field_71452_i.func_78873_a(var21 = new EntityHugeExplodeFX(this.field_72769_h, p_72726_2_, p_72726_4_, p_72726_6_, p_72726_8_, p_72726_10_, p_72726_12_));
|
||||
} else if(p_72726_1_.equals("largeexplode")) {
|
||||
diff -r -U 3 minecraft\net\minecraft\src\SoundPoolURLConnection.java minecraft_patched\net\minecraft\src\SoundPoolURLConnection.java
|
||||
--- minecraft\net\minecraft\src\SoundPoolURLConnection.java Tue Sep 17 13:58:51 2013
|
||||
+++ minecraft_patched\net\minecraft\src\SoundPoolURLConnection.java Tue Sep 17 14:01:01 2013
|
||||
@@ -22,7 +22,11 @@
|
||||
public void connect() {}
|
||||
|
||||
public InputStream getInputStream() {
|
||||
+ try {
|
||||
return SoundPool.func_110655_a(this.field_110660_a).func_110536_a(this.field_110659_b).func_110527_b();
|
||||
+ } catch(Exception ex) {
|
||||
+ return null;
|
||||
+ }
|
||||
}
|
||||
|
||||
// $FF: synthetic method
|
||||
diff -r -U 3 minecraft\net\minecraft\src\TcpMasterThread.java minecraft_patched\net\minecraft\src\TcpMasterThread.java
|
||||
--- minecraft\net\minecraft\src\TcpMasterThread.java Sat Apr 27 01:53:07 2013
|
||||
+++ minecraft_patched\net\minecraft\src\TcpMasterThread.java Sat Apr 27 01:55:19 2013
|
||||
--- minecraft\net\minecraft\src\TcpMasterThread.java Tue Sep 17 13:58:51 2013
|
||||
+++ minecraft_patched\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:01:01 2013
|
||||
@@ -11,6 +11,7 @@
|
||||
this.field_74504_a = p_i3285_1_;
|
||||
this.field_74504_a = p_i1395_1_;
|
||||
}
|
||||
|
||||
+ @SuppressWarnings("deprecation")
|
||||
@@ -242,15 +297,13 @@ diff -r -U 3 minecraft\net\minecraft\src\TcpMasterThread.java minecraft_patched\
|
||||
try {
|
||||
Thread.sleep(5000L);
|
||||
diff -r -U 3 minecraft\net\minecraft\src\ThreadedFileIOBase.java minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java
|
||||
--- minecraft\net\minecraft\src\ThreadedFileIOBase.java Sat Apr 27 01:53:07 2013
|
||||
+++ minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java Sat Apr 27 01:55:19 2013
|
||||
@@ -20,7 +20,8 @@
|
||||
--- minecraft\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 13:58:52 2013
|
||||
+++ minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:01:01 2013
|
||||
@@ -20,6 +20,7 @@
|
||||
}
|
||||
|
||||
public void run() {
|
||||
- this.func_75736_b();
|
||||
+ while(true)
|
||||
+ this.func_75736_b();
|
||||
+ while(true)
|
||||
this.func_75736_b();
|
||||
}
|
||||
|
||||
private void func_75736_b() {
|
||||
@@ -1,42 +1,52 @@
|
||||
diff -r -U 3 minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java
|
||||
--- minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java Sat Apr 27 01:54:18 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java Sat Apr 27 01:56:15 2013
|
||||
--- minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:00:13 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:01:07 2013
|
||||
@@ -21,9 +21,14 @@
|
||||
|
||||
public String func_85085_a() {
|
||||
public String func_85085_a() throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
|
||||
StringBuilder var1 = new StringBuilder();
|
||||
- Field var2 = ClassLoader.class.getDeclaredField("classes");
|
||||
- var2.setAccessible(true);
|
||||
+ ArrayList var3;
|
||||
+ try {
|
||||
Field var2 = ClassLoader.class.getDeclaredField("classes");
|
||||
var2.setAccessible(true);
|
||||
- ArrayList var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
|
||||
+ ArrayList var3;
|
||||
+ try {
|
||||
+ Field var2 = ClassLoader.class.getDeclaredField("classes");
|
||||
+ var2.setAccessible(true);
|
||||
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
|
||||
+ } catch(Exception ex) {
|
||||
+ return "";
|
||||
+ }
|
||||
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
|
||||
+ } catch(Exception ex) {
|
||||
+ return "";
|
||||
+ }
|
||||
boolean var4 = true;
|
||||
boolean var5 = !CrashReport.class.getCanonicalName().equals("net.minecraft.CrashReport");
|
||||
HashMap var6 = new HashMap();
|
||||
@@ -98,6 +103,10 @@
|
||||
|
||||
// $FF: synthetic method
|
||||
public Object call() {
|
||||
- return this.func_85085_a();
|
||||
+ try {
|
||||
+ return this.func_85085_a();
|
||||
+ } catch(Exception ex) {
|
||||
+ return null;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
diff -r -U 3 minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java
|
||||
--- minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Apr 27 01:54:19 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Apr 27 01:56:15 2013
|
||||
--- minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:00:14 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:01:07 2013
|
||||
@@ -11,6 +11,10 @@
|
||||
|
||||
public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn {
|
||||
|
||||
+ public ComponentStrongholdRightTurn(int p_i3843_1_, Random p_i3843_2_, StructureBoundingBox p_i3843_3_, int p_i3843_4_) {
|
||||
+ super(p_i3843_1_, p_i3843_2_, p_i3843_3_, p_i3843_4_);
|
||||
+ public ComponentStrongholdRightTurn(int p_i2074_1_, Random p_i2074_2_, StructureBoundingBox p_i2074_3_, int p_i2074_4_) {
|
||||
+ super(p_i2074_1_, p_i2074_2_, p_i2074_3_, p_i2074_4_);
|
||||
+ }
|
||||
+
|
||||
public void func_74861_a(StructureComponent p_74861_1_, List p_74861_2_, Random p_74861_3_) {
|
||||
if(this.field_74885_f != 2 && this.field_74885_f != 3) {
|
||||
this.func_74989_b((ComponentStrongholdStairs2)p_74861_1_, p_74861_2_, p_74861_3_, 1, 1);
|
||||
diff -r -U 3 minecraft_server\net\minecraft\src\DedicatedServer.java minecraft_server_patched\net\minecraft\src\DedicatedServer.java
|
||||
--- minecraft_server\net\minecraft\src\DedicatedServer.java Sat Apr 27 01:54:19 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\DedicatedServer.java Sat Apr 27 01:56:15 2013
|
||||
@@ -208,7 +208,7 @@
|
||||
--- minecraft_server\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:00:14 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:01:07 2013
|
||||
@@ -209,7 +209,7 @@
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
@@ -46,53 +56,43 @@ diff -r -U 3 minecraft_server\net\minecraft\src\DedicatedServer.java minecraft_s
|
||||
this.func_71333_ah();
|
||||
}
|
||||
diff -r -U 3 minecraft_server\net\minecraft\src\EnumChatFormatting.java minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java
|
||||
--- minecraft_server\net\minecraft\src\EnumChatFormatting.java Sat Apr 27 01:54:20 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java Sat Apr 27 01:56:15 2013
|
||||
--- minecraft_server\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:00:14 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:01:07 2013
|
||||
@@ -38,7 +38,7 @@
|
||||
private final String field_96304_B;
|
||||
|
||||
private EnumChatFormatting(char p_i10000_3_) {
|
||||
- this(p_i10000_1_, p_i10000_2_, p_i10000_3_, false);
|
||||
+ this(p_i10000_3_, false);
|
||||
private EnumChatFormatting(char p_i1336_3_) {
|
||||
- this(p_i1336_1_, p_i1336_2_, p_i1336_3_, false);
|
||||
+ this(p_i1336_3_, false);
|
||||
}
|
||||
|
||||
private EnumChatFormatting(char p_i10001_3_, boolean p_i10001_4_) {
|
||||
private EnumChatFormatting(char p_i1337_3_, boolean p_i1337_4_) {
|
||||
diff -r -U 3 minecraft_server\net\minecraft\src\MemoryConnection.java minecraft_server_patched\net\minecraft\src\MemoryConnection.java
|
||||
--- minecraft_server\net\minecraft\src\MemoryConnection.java Sat Apr 27 01:54:20 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\MemoryConnection.java Sat Apr 27 01:56:15 2013
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
+import java.util.ArrayList;
|
||||
+import java.util.Collections;
|
||||
import java.util.List;
|
||||
import net.minecraft.src.ILogAgent;
|
||||
import net.minecraft.src.INetworkManager;
|
||||
@@ -11,7 +13,7 @@
|
||||
--- minecraft_server\net\minecraft\src\MemoryConnection.java Tue Sep 17 14:00:15 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\MemoryConnection.java Tue Sep 17 14:01:07 2013
|
||||
@@ -11,13 +11,18 @@
|
||||
public class MemoryConnection implements INetworkManager {
|
||||
|
||||
private static final SocketAddress field_74444_a = new InetSocketAddress("127.0.0.1", 0);
|
||||
- private final List field_74442_b;
|
||||
+ private final List field_74442_b = Collections.synchronizedList(new ArrayList());
|
||||
+ private final List field_74442_b = java.util.Collections.synchronizedList(new java.util.ArrayList());
|
||||
private final ILogAgent field_98214_c;
|
||||
private MemoryConnection field_74443_c;
|
||||
private NetHandler field_74440_d;
|
||||
@@ -19,6 +21,11 @@
|
||||
private boolean field_74441_e;
|
||||
private String field_74438_f;
|
||||
private Object[] field_74439_g;
|
||||
|
||||
+ public MemoryConnection(ILogAgent p_i11025_1_, NetHandler p_i11025_2_) {
|
||||
+ this.field_74440_d = p_i11025_2_;
|
||||
+ this.field_98214_c = p_i11025_1_;
|
||||
+
|
||||
+ public MemoryConnection(ILogAgent p_i1392_1_, NetHandler p_i1392_2_) {
|
||||
+ this.field_74440_d = p_i1392_2_;
|
||||
+ this.field_98214_c = p_i1392_1_;
|
||||
+ }
|
||||
+
|
||||
|
||||
public void func_74425_a(NetHandler p_74425_1_) {
|
||||
this.field_74440_d = p_74425_1_;
|
||||
}
|
||||
diff -r -U 3 minecraft_server\net\minecraft\src\RConThreadClient.java minecraft_server_patched\net\minecraft\src\RConThreadClient.java
|
||||
--- minecraft_server\net\minecraft\src\RConThreadClient.java Sat Apr 27 01:54:20 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\RConThreadClient.java Sat Apr 27 01:56:15 2013
|
||||
--- minecraft_server\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:00:15 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:01:07 2013
|
||||
@@ -32,8 +32,8 @@
|
||||
}
|
||||
|
||||
@@ -120,23 +120,22 @@ diff -r -U 3 minecraft_server\net\minecraft\src\RConThreadClient.java minecraft_
|
||||
}
|
||||
-
|
||||
- return;
|
||||
- }
|
||||
+ } catch (SocketTimeoutException var17) {
|
||||
+ } catch (IOException var18) {
|
||||
+ } catch (Exception var19) {
|
||||
+ System.out.println(var19);
|
||||
+ } finally {
|
||||
+ this.func_72653_g();
|
||||
}
|
||||
-
|
||||
+ } catch (SocketTimeoutException var17) {
|
||||
+ } catch (IOException var18) {
|
||||
+ } catch (Exception var19) {
|
||||
+ System.out.println(var19);
|
||||
+ } finally {
|
||||
+ this.func_72653_g();
|
||||
+ }
|
||||
}
|
||||
|
||||
private void func_72654_a(int p_72654_1_, int p_72654_2_, String p_72654_3_) throws IOException {
|
||||
diff -r -U 3 minecraft_server\net\minecraft\src\TcpMasterThread.java minecraft_server_patched\net\minecraft\src\TcpMasterThread.java
|
||||
--- minecraft_server\net\minecraft\src\TcpMasterThread.java Sat Apr 27 01:54:21 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\TcpMasterThread.java Sat Apr 27 01:56:15 2013
|
||||
--- minecraft_server\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:00:16 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:01:07 2013
|
||||
@@ -11,6 +11,7 @@
|
||||
this.field_74504_a = p_i3285_1_;
|
||||
this.field_74504_a = p_i1395_1_;
|
||||
}
|
||||
|
||||
+ @SuppressWarnings("deprecation")
|
||||
@@ -144,15 +143,13 @@ diff -r -U 3 minecraft_server\net\minecraft\src\TcpMasterThread.java minecraft_s
|
||||
try {
|
||||
Thread.sleep(5000L);
|
||||
diff -r -U 3 minecraft_server\net\minecraft\src\ThreadedFileIOBase.java minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java
|
||||
--- minecraft_server\net\minecraft\src\ThreadedFileIOBase.java Sat Apr 27 01:54:21 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java Sat Apr 27 01:56:15 2013
|
||||
@@ -20,7 +20,8 @@
|
||||
--- minecraft_server\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:00:16 2013
|
||||
+++ minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:01:07 2013
|
||||
@@ -20,6 +20,7 @@
|
||||
}
|
||||
|
||||
public void run() {
|
||||
- this.func_75736_b();
|
||||
+ while(true)
|
||||
+ this.func_75736_b();
|
||||
+ while(true)
|
||||
this.func_75736_b();
|
||||
}
|
||||
|
||||
private void func_75736_b() {
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
[VERSION]
|
||||
MCPVersion = 7.51
|
||||
ClientVersion = 1.5.2
|
||||
ServerVersion = 1.5.2
|
||||
MCPVersion = 8.09
|
||||
ClientVersion = 1.6.3
|
||||
ServerVersion = 1.6.3
|
||||
Binary file not shown.
@@ -1,12 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||
<listEntry value="/Minecraft/src/Start.java"/>
|
||||
<listEntry value="/Minecraft/lib/net/minecraft/launchwrapper/1.3/launchwrapper-1.3.jar"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="1"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Start"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="net.minecraft.launchwrapper.Launch"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--version 1.6 --tweakClass cpw.mods.fml.common.launcher.FMLTweaker"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Minecraft"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xincgc -Xmx1024M -Xms1024M"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:Minecraft/jars}"/>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||
<listEntry value="/Minecraft/common/net/minecraft/server/MinecraftServer.java"/>
|
||||
<listEntry value="/Minecraft/src/net/minecraft/server/MinecraftServer.java"/>
|
||||
</listAttribute>
|
||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||
<listEntry value="1"/>
|
||||
</listAttribute>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="net.minecraft.server.MinecraftServer"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="cpw.mods.fml.relauncher.ServerLaunchWrapper"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Minecraft"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xincgc -Xmx1024M -Xms1024M"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:Minecraft/jars}"/>
|
||||
|
||||
@@ -3,9 +3,14 @@
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/org/ow2/asm/asm-all/4.1/asm-all-4.1.jar" sourcepath="jars/libraries/org/ow2/asm/asm-all/4.1/asm-all-4.1-sources.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/org/ow2/asm/asm-debug-all/4.1/asm-debug-all-4.1.jar" sourcepath="jars/libraries/org/ow2/asm/asm-debug-all/4.1/asm-debug-all-4.1-sources.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/net/minecraft/launchwrapper/1.3/launchwrapper-1.3.jar"/>
|
||||
<classpathentry kind="lib" path="jars/versions/1.6/1.6.jar"/>
|
||||
<classpathentry kind="lib" path="jars/versions/1.6.2/1.6.2.jar">
|
||||
<attributes>
|
||||
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Minecraft/jars/versions/1.6.2/1.6.2-natives"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="jars/libraries/lzma/lzma/0.0.1/lzma-0.0.1.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar" sourcepath="jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5-sources.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/com/paulscode/codecjorbis/20101023/codecjorbis-20101023.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/com/paulscode/codecwav/20101023/codecwav-20101023.jar"/>
|
||||
@@ -19,19 +24,7 @@
|
||||
<classpathentry kind="lib" path="jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar" sourcepath="jars/libraries/commons-io/commons-io/2.4/commons-io-2.4-sources.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar" sourcepath="jars/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0-sources.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/com/google/code/gson/gson/2.2.2/gson-2.2.2.jar" sourcepath="jars/libraries/com/google/code/gson/gson/2.2.2/gson-2.2.2-sources.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar" sourcepath="jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5-sources.jar">
|
||||
<attributes>
|
||||
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Minecraft/natives"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar" sourcepath="jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0-sources.jar">
|
||||
<attributes>
|
||||
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Minecraft/natives"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.0/lwjgl_util-2.9.0.jar" sourcepath="jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.0/lwjgl_util-2.9.0-sources.jar">
|
||||
<attributes>
|
||||
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Minecraft/natives"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar" sourcepath="jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5-sources.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar" sourcepath="jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0-sources.jar"/>
|
||||
<classpathentry kind="lib" path="jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.0/lwjgl_util-2.9.0.jar" sourcepath="jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.0/lwjgl_util-2.9.0-sources.jar"/>
|
||||
</classpath>
|
||||
@@ -30,11 +30,6 @@
|
||||
<type>2</type>
|
||||
<locationURI>MCP_LOC/lib</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>natives</name>
|
||||
<type>2</type>
|
||||
<locationURI>MCP_LOC/jars/libraries/natives</locationURI>
|
||||
</link>
|
||||
</linkedResources>
|
||||
<filteredResources>
|
||||
<filter>
|
||||
@@ -73,15 +68,6 @@
|
||||
<arguments>1.0-name-matches-false-false-*.jar</arguments>
|
||||
</matcher>
|
||||
</filter>
|
||||
<filter>
|
||||
<id>1307293480435</id>
|
||||
<name>jars/bin/natives</name>
|
||||
<type>6</type>
|
||||
<matcher>
|
||||
<id>org.eclipse.ui.ide.multiFilter</id>
|
||||
<arguments>1.0-name-matches-false-false-*</arguments>
|
||||
</matcher>
|
||||
</filter>
|
||||
</filteredResources>
|
||||
<variableList>
|
||||
<variable>
|
||||
|
||||
+14
-12
@@ -75,13 +75,13 @@ def read_mc_versions(fml_dir, version=None, work_dir=None):
|
||||
mc_info['version'] = version
|
||||
if not 'client_url' in mc_info.keys():
|
||||
mc_info['new_launcher'] = True
|
||||
base_url = 'https://s3.amazonaws.com/Minecraft.Download/versions/%s' % version
|
||||
base_url = 'http://s3.amazonaws.com/Minecraft.Download/versions/%s' % version
|
||||
mc_info['client_url'] = '%s/%s.jar' % (base_url, version)
|
||||
mc_info['json_url'] = '%s/%s.json' % (base_url, version)
|
||||
mc_info['server_url'] = '%s/minecraft_server.%s.jar' % (base_url, version)
|
||||
if not work_dir is None:
|
||||
version_dir = os.path.join(work_dir, 'versions', version)
|
||||
mc_info['natives_dir'] = os.path.join(work_dir, 'libraries', 'natives')
|
||||
mc_info['natives_dir'] = os.path.join(version_dir, '%s-natives' % version)
|
||||
mc_info['library_dir'] = os.path.join(work_dir, 'libraries')
|
||||
mc_info['client_file'] = os.path.join(version_dir, '%s.jar' % version)
|
||||
mc_info['json_file'] = os.path.join(version_dir, '%s.json' % version)
|
||||
@@ -272,7 +272,7 @@ def file_backup(file, md5=None):
|
||||
|
||||
if os.path.isfile(src):
|
||||
if not get_md5(src) == md5 and not md5 is None:
|
||||
print 'Modified %s detected, removing' % os.path.basename(src_jar)
|
||||
print 'Modified %s detected, removing' % os.path.basename(src)
|
||||
os.remove(src)
|
||||
else:
|
||||
shutil.copy(src, bck)
|
||||
@@ -506,7 +506,7 @@ def copytree(src, dst, verbose=0, symlinks=False):
|
||||
#==========================================================================
|
||||
# MCP Related Functions
|
||||
#==========================================================================
|
||||
def download_mcp(mcp_dir, fml_dir, version=None):
|
||||
def download_mcp(fml_dir, mcp_dir, version=None):
|
||||
if os.path.isfile(os.path.join(mcp_dir, 'runtime', 'commands.py')):
|
||||
print 'MCP Detected already, not downloading'
|
||||
return True
|
||||
@@ -517,6 +517,7 @@ def download_mcp(mcp_dir, fml_dir, version=None):
|
||||
|
||||
mc_info = read_mc_versions(fml_dir, version=version)
|
||||
|
||||
print('Checking MCP zip (may take time to download)')
|
||||
if not download_file(mc_info['mcp_url'], mc_info['mcp_file'], mc_info['mcp_md5']):
|
||||
sys.exit(1)
|
||||
|
||||
@@ -672,7 +673,7 @@ def create_merged_conf(mcp_dir, fml_dir):
|
||||
#Creates the merged conf folder from MCP's conf folder to fml_dir/conf
|
||||
|
||||
#Lets grab the files we dont work on
|
||||
for file in ['version.cfg', 'newids.csv', 'joined.exc']:
|
||||
for file in ['version.cfg', 'joined.exc']:
|
||||
dst_file = os.path.join(fml_dir, 'conf', file)
|
||||
src_file = os.path.join(mcp_dir, 'conf', file)
|
||||
if not os.path.isdir(os.path.dirname(dst_file)):
|
||||
@@ -922,7 +923,7 @@ def decompile_minecraft(fml_dir, mcp_dir, disable_at=False, disable_merge=False,
|
||||
src_dir = os.path.join(mcp_dir, 'src')
|
||||
if os.path.isdir(src_dir):
|
||||
os.chdir(mcp_dir)
|
||||
cleanup(None, False)
|
||||
cleanup(None, False, False)
|
||||
reset_logger()
|
||||
os.chdir(fml_dir)
|
||||
|
||||
@@ -1016,8 +1017,8 @@ def decompile_minecraft(fml_dir, mcp_dir, disable_at=False, disable_merge=False,
|
||||
Commands.applyss = applyss_shunt
|
||||
Commands.checkjars = checkjars_shunt
|
||||
#decompile -d -n -r
|
||||
# Conf JAD CSV -r -d -a -n -p -o -l -g -c -s --rg
|
||||
decompile(None, False, False, True, True, False, True, False, False, False, False, not disable_client, enable_server, False)
|
||||
# Conf JAD CSV -r -d -a -n -p -o -l -g -c -s --rg --workDir --json(None=compute) --nocopy
|
||||
decompile(None, False, False, True, True, False, True, False, False, False, False, not disable_client, enable_server, False, os.path.join(mcp_dir,'jars'), None, True)
|
||||
reset_logger()
|
||||
os.chdir(fml_dir)
|
||||
post_decompile(mcp_dir, fml_dir)
|
||||
@@ -1034,7 +1035,7 @@ def decompile_minecraft(fml_dir, mcp_dir, disable_at=False, disable_merge=False,
|
||||
cleanup_source(src_dir)
|
||||
|
||||
os.chdir(mcp_dir)
|
||||
commands = Commands(verify=True)
|
||||
commands = Commands(verify=True,workdir=os.path.join(mcp_dir,'jars'))
|
||||
|
||||
if not disable_client:
|
||||
updatemd5_side(mcp_dir, commands, CLIENT)
|
||||
@@ -1130,6 +1131,7 @@ def download_minecraft(mcp_dir, fml_dir, version=None):
|
||||
|
||||
# Remove any invalid files
|
||||
for type in ['client', 'server']:
|
||||
print("Backing up %s"%type)
|
||||
file_backup(mc_info['%s_file' % type], mc_info['%s_md5' % type])
|
||||
failed = not download_file(mc_info['%s_url' % type], mc_info['%s_file' % type], mc_info['%s_md5' % type]) or failed
|
||||
file_backup(mc_info['%s_file' % type], mc_info['%s_md5' % type])
|
||||
@@ -1144,7 +1146,7 @@ def download_libraries(mcp_dir, libraries, natives_dir):
|
||||
# This list should be in the format of the new launcher's version.json file
|
||||
# Under the entry 'libraries'
|
||||
lib_dir = os.path.join(mcp_dir, 'jars', 'libraries')
|
||||
default_url = 'https://s3.amazonaws.com/Minecraft.Download/libraries'
|
||||
default_url = 'http://s3.amazonaws.com/Minecraft.Download/libraries'
|
||||
|
||||
downloads = []
|
||||
failed = False
|
||||
@@ -1237,7 +1239,7 @@ def download_list(list, natives_dir):
|
||||
def download_assets(mcp_dir):
|
||||
from xml.dom.minidom import parse
|
||||
asset_dir = os.path.join(mcp_dir, 'jars', 'assets')
|
||||
base_url = 'https://s3.amazonaws.com/Minecraft.Resources'
|
||||
base_url = 'http://s3.amazonaws.com/Minecraft.Resources'
|
||||
|
||||
print('Gathering assets list from %s' % base_url)
|
||||
|
||||
@@ -1284,7 +1286,7 @@ def download_assets(mcp_dir):
|
||||
|
||||
if failed:
|
||||
print(' Downloading assets failed, please review log for more details')
|
||||
sys.exit(1)
|
||||
|
||||
#==========================================================================
|
||||
# Transformers
|
||||
#==========================================================================
|
||||
|
||||
+4
-3
@@ -1,10 +1,11 @@
|
||||
import os, os.path, sys
|
||||
from optparse import OptionParser
|
||||
|
||||
from fml import setup_fml, finish_setup_fml, apply_fml_patches, setup_mcp, download_mcp
|
||||
|
||||
def fml_main(fml_dir, mcp_dir, gen_conf=True, disable_patches=False, disable_at=False, disable_merge=False, enable_server=False,
|
||||
disable_client=False, disable_rename=False, disable_assets=False, decompile=False):
|
||||
sys.path.append(fml_dir)
|
||||
from fml import download_mcp, setup_mcp, decompile_minecraft, apply_fml_patches, finish_setup_fml
|
||||
print '================ Forge ModLoader Setup Start ==================='
|
||||
download_mcp(fml_dir, mcp_dir)
|
||||
setup_mcp(fml_dir, mcp_dir, gen_conf)
|
||||
@@ -30,7 +31,7 @@ if __name__ == '__main__':
|
||||
parser.add_option('-c', '--no-client', action="store_true", dest='no_client', help='Disable decompilation of server', default=False)
|
||||
parser.add_option('-e', '--no-merge', action="store_true", dest='no_merge', help='Disable merging server code into client', default=False)
|
||||
parser.add_option('-n', '--no-rename', action="store_true", dest='no_rename', help='Disable running updatenames', default=False)
|
||||
parser.add_option('-a', '--no-assets', action="store_true", dest='no_assets', help='Disable downloading of assets folder', default=False)
|
||||
parser.add_option( '--no-assets', action="store_true", dest='no_assets', help='Disable downloading of assets folder', default=False)
|
||||
parser.add_option('-d', '--decompile', action="store_true", dest='decompile', help='Decompile minecraft and apply patches', default=True)
|
||||
options, _ = parser.parse_args()
|
||||
|
||||
@@ -51,5 +52,5 @@ if __name__ == '__main__':
|
||||
fml_main(fml_dir, mcp_dir, disable_patches=options.no_patch,
|
||||
disable_at=options.no_access, disable_merge=options.no_merge,
|
||||
enable_server=options.enable_server, disable_client=options.no_client,
|
||||
disable_rename=options.no_rename, disable_assets=options.assets,
|
||||
disable_rename=options.no_rename, disable_assets=options.no_assets,
|
||||
decompile=options.decompile, gen_conf=False)
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
#!/bin/bash
|
||||
python install.py
|
||||
python install.py "$@"
|
||||
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"id": "FML{version}",
|
||||
"time": "{timestamp}",
|
||||
"releaseTime": "{timestamp}",
|
||||
"type": "release",
|
||||
"processArguments": "username_session_version",
|
||||
"minecraftArguments": "--version FML_DEV --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
|
||||
"minimumLauncherVersion": 2,
|
||||
"libraries": [
|
||||
{
|
||||
"name": "net.minecraft:launchwrapper:1.3",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.ow2.asm:asm-all:4.1",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-library:2.10.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-compiler:2.10.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "net.sf.jopt-simple:jopt-simple:4.5",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "lzma:lzma:0.0.1"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecjorbis:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecwav:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:libraryjavasound:20101123"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:librarylwjglopenal:20100824"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:soundsystem:20120107"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "argo:argo:2.25_fixed"
|
||||
},
|
||||
{
|
||||
"name": "net.sourceforge.argo:argo:2.25",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "grumble grumble grumble, y u no use proper version/artifact id grumble"
|
||||
},
|
||||
{
|
||||
"name": "org.bouncycastle:bcprov-jdk15on:1.47",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "com.google.guava:guava:14.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.apache.commons:commons-lang3:3.1",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "commons-io:commons-io:2.4",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput:2.0.5",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jutils:jutils:1.0.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "com.google.code.gson:gson:2.2.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput-platform:2.0.5",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mainClass": "net.minecraft.launchwrapper.Launch"
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"install": {
|
||||
"profileName": "FML",
|
||||
"target":"FML@version@",
|
||||
"path":"cpw.mods:fml:@version@",
|
||||
"version":"FML @version@",
|
||||
"filePath":"@universal_jar@",
|
||||
"welcome":"Welcome to the simple FML installer.",
|
||||
"minecraft":"@minecraft_version@",
|
||||
"logo":"/big_logo.png"
|
||||
},
|
||||
"versionInfo": {
|
||||
"id": "FML@version@",
|
||||
"time": "@timestamp@",
|
||||
"releaseTime": "1960-01-01T00:00:00-0700",
|
||||
"type": "release",
|
||||
"processArguments": "username_session_version",
|
||||
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
|
||||
"minimumLauncherVersion": 2,
|
||||
"libraries": [
|
||||
{
|
||||
"name": "cpw.mods:fml:@version@",
|
||||
"url": "http://files.minecraftforge.net/maven/"
|
||||
},
|
||||
{
|
||||
"name": "net.minecraft:launchwrapper:1.3",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-library:2.10.2",
|
||||
"url" : "http://repo.maven.apache.org/maven2/",
|
||||
"comment" : "Important for FML, we add this",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-compiler:2.10.2",
|
||||
"url" : "http://repo.maven.apache.org/maven2/",
|
||||
"comment" : "Important for FML, we add this",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.ow2.asm:asm-all:4.1",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "net.sf.jopt-simple:jopt-simple:4.5",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "lzma:lzma:0.0.1",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecjorbis:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecwav:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:libraryjavasound:20101123"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:librarylwjglopenal:20100824"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:soundsystem:20120107"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0"
|
||||
},
|
||||
{
|
||||
"name": "argo:argo:2.25_fixed"
|
||||
},
|
||||
{
|
||||
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
|
||||
},
|
||||
{
|
||||
"name": "com.google.guava:guava:14.0"
|
||||
},
|
||||
{
|
||||
"name": "org.apache.commons:commons-lang3:3.1"
|
||||
},
|
||||
{
|
||||
"name": "commons-io:commons-io:2.4"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput:2.0.5"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jutils:jutils:1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "com.google.code.gson:gson:2.2.2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput-platform:2.0.5",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mainClass": "net.minecraft.launchwrapper.Launch"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"id": "FML{version}",
|
||||
"time": "{timestamp}",
|
||||
"releaseTime": "{timestamp}",
|
||||
"type": "release",
|
||||
"processArguments": "username_session_version",
|
||||
"minecraftArguments": "--version FML_DEV --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
|
||||
"minimumLauncherVersion": 2,
|
||||
"libraries": [
|
||||
{
|
||||
"name": "net.minecraft:launchwrapper:1.3",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.ow2.asm:asm-debug-all:4.1",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-library:2.10.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-compiler:2.10.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "net.sf.jopt-simple:jopt-simple:4.5",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "lzma:lzma:0.0.1"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecjorbis:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecwav:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:libraryjavasound:20101123"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:librarylwjglopenal:20100824"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:soundsystem:20120107"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "argo:argo:2.25_fixed"
|
||||
},
|
||||
{
|
||||
"name": "net.sourceforge.argo:argo:2.25",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "grumble grumble grumble, y u no use proper version/artifact id grumble"
|
||||
},
|
||||
{
|
||||
"name": "org.bouncycastle:bcprov-jdk15on:1.47",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "com.google.guava:guava:14.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.apache.commons:commons-lang3:3.1",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "commons-io:commons-io:2.4",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput:2.0.5",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jutils:jutils:1.0.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "com.google.code.gson:gson:2.2.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput-platform:2.0.5",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mainClass": "net.minecraft.launchwrapper.Launch"
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
{
|
||||
"install": {
|
||||
"profileName": "FML",
|
||||
"target":"@minecraft_version@-FML@version@",
|
||||
"path":"cpw.mods:fml:@version@",
|
||||
"version":"FML @version@",
|
||||
"filePath":"@universal_jar@",
|
||||
"welcome":"Welcome to the simple FML installer.",
|
||||
"minecraft":"@minecraft_version@",
|
||||
"mirrorList" : "http://files.minecraftforge.net/mirror-brand.list",
|
||||
"logo":"/big_logo.png"
|
||||
},
|
||||
"versionInfo": {
|
||||
"id": "@minecraft_version@-FML@version@",
|
||||
"time": "@timestamp@",
|
||||
"releaseTime": "1960-01-01T00:00:00-0700",
|
||||
"type": "release",
|
||||
"processArguments": "username_session_version",
|
||||
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
|
||||
"minimumLauncherVersion": 4,
|
||||
"libraries": [
|
||||
{
|
||||
"name": "cpw.mods:fml:@version@",
|
||||
"url": "http://files.minecraftforge.net/maven/"
|
||||
},
|
||||
{
|
||||
"name": "net.minecraft:launchwrapper:1.3",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.ow2.asm:asm-all:4.1",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-library:2.10.2",
|
||||
"url" : "http://files.minecraftforge.net/maven/",
|
||||
"checksums" : [ "6ba65d12cd09d441083262d6f73d2257fec7c663", "dffc88e804861c9eaba39283757000b6558ea573" ],
|
||||
"comment" : "Important for FML, we add this",
|
||||
"serverreq":true,
|
||||
"clientreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-compiler:2.10.2",
|
||||
"url" : "http://files.minecraftforge.net/maven/",
|
||||
"checksums" : [ "64c8b1380cc53d6850823d6e4e7ae984aa44ef9c", "40281b3ffc69fb385953522c843363ccaf71ba89" ],
|
||||
"comment" : "Important for FML, we add this",
|
||||
"serverreq":true,
|
||||
"clientreq":true
|
||||
},
|
||||
{
|
||||
"name": "net.sf.jopt-simple:jopt-simple:4.5",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "lzma:lzma:0.0.1",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecjorbis:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecwav:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:libraryjavasound:20101123"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:librarylwjglopenal:20100824"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:soundsystem:20120107"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0"
|
||||
},
|
||||
{
|
||||
"name": "argo:argo:2.25_fixed"
|
||||
},
|
||||
{
|
||||
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
|
||||
},
|
||||
{
|
||||
"name": "com.google.guava:guava:14.0"
|
||||
},
|
||||
{
|
||||
"name": "org.apache.commons:commons-lang3:3.1"
|
||||
},
|
||||
{
|
||||
"name": "commons-io:commons-io:2.4"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput:2.0.5"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jutils:jutils:1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "com.google.code.gson:gson:2.2.2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow"
|
||||
},
|
||||
{
|
||||
"action": "disallow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow"
|
||||
},
|
||||
{
|
||||
"action": "disallow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow"
|
||||
},
|
||||
{
|
||||
"action": "disallow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
],
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.1-nightly-20130708-debug3",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.1-nightly-20130708-debug3",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20130708-debug3",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
],
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput-platform:2.0.5",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mainClass": "net.minecraft.launchwrapper.Launch"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"id": "FML{version}",
|
||||
"time": "{timestamp}",
|
||||
"releaseTime": "{timestamp}",
|
||||
"type": "release",
|
||||
"processArguments": "username_session_version",
|
||||
"minecraftArguments": "--version FML_DEV --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
|
||||
"minimumLauncherVersion": 4,
|
||||
"libraries": [
|
||||
{
|
||||
"name": "net.minecraft:launchwrapper:1.7",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.ow2.asm:asm-debug-all:4.1",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-library:2.10.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-compiler:2.10.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "Important for FML, we add this"
|
||||
},
|
||||
{
|
||||
"name": "net.sf.jopt-simple:jopt-simple:4.5",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "lzma:lzma:0.0.1"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecjorbis:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecwav:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:libraryjavasound:20101123"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:librarylwjglopenal:20100824"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:soundsystem:20120107"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "argo:argo:2.25_fixed"
|
||||
},
|
||||
{
|
||||
"name": "net.sourceforge.argo:argo:2.25",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2",
|
||||
"comment" : "grumble grumble grumble, y u no use proper version/artifact id grumble"
|
||||
},
|
||||
{
|
||||
"name": "org.bouncycastle:bcprov-jdk15on:1.47",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "com.google.guava:guava:14.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.apache.commons:commons-lang3:3.1",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "commons-io:commons-io:2.4",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput:2.0.5",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jutils:jutils:1.0.0",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "com.google.code.gson:gson:2.2.2",
|
||||
"children" : ["sources"],
|
||||
"url" : "http://repo.maven.apache.org/maven2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput-platform:2.0.5",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mainClass": "net.minecraft.launchwrapper.Launch"
|
||||
}
|
||||
@@ -0,0 +1,214 @@
|
||||
{
|
||||
"install": {
|
||||
"profileName": "FML",
|
||||
"target":"@minecraft_version@-FML@version@",
|
||||
"path":"cpw.mods:fml:@version@",
|
||||
"version":"FML @version@",
|
||||
"filePath":"@universal_jar@",
|
||||
"welcome":"Welcome to the simple FML installer.",
|
||||
"minecraft":"@minecraft_version@",
|
||||
"mirrorList" : "http://files.minecraftforge.net/mirror-brand.list",
|
||||
"logo":"/big_logo.png"
|
||||
},
|
||||
"versionInfo": {
|
||||
"id": "@minecraft_version@-FML@version@",
|
||||
"time": "@timestamp@",
|
||||
"releaseTime": "1960-01-01T00:00:00-0700",
|
||||
"type": "release",
|
||||
"processArguments": "username_session_version",
|
||||
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
|
||||
"minimumLauncherVersion": 4,
|
||||
"libraries": [
|
||||
{
|
||||
"name": "cpw.mods:fml:@version@",
|
||||
"url": "http://files.minecraftforge.net/maven/"
|
||||
},
|
||||
{
|
||||
"name": "net.minecraft:launchwrapper:1.7",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.ow2.asm:asm-all:4.1",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-library:2.10.2",
|
||||
"url" : "http://files.minecraftforge.net/maven/",
|
||||
"checksums" : [ "6ba65d12cd09d441083262d6f73d2257fec7c663", "dffc88e804861c9eaba39283757000b6558ea573" ],
|
||||
"comment" : "Important for FML, we add this",
|
||||
"serverreq":true,
|
||||
"clientreq":true
|
||||
},
|
||||
{
|
||||
"name": "org.scala-lang:scala-compiler:2.10.2",
|
||||
"url" : "http://files.minecraftforge.net/maven/",
|
||||
"checksums" : [ "64c8b1380cc53d6850823d6e4e7ae984aa44ef9c", "40281b3ffc69fb385953522c843363ccaf71ba89" ],
|
||||
"comment" : "Important for FML, we add this",
|
||||
"serverreq":true,
|
||||
"clientreq":true
|
||||
},
|
||||
{
|
||||
"name": "lzma:lzma:0.0.1",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "net.sf.jopt-simple:jopt-simple:4.5",
|
||||
"serverreq":true
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecjorbis:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:codecwav:20101023"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:libraryjavasound:20101123"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:librarylwjglopenal:20100824"
|
||||
},
|
||||
{
|
||||
"name": "com.paulscode:soundsystem:20120107"
|
||||
},
|
||||
{
|
||||
"name": "argo:argo:2.25_fixed"
|
||||
},
|
||||
{
|
||||
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
|
||||
},
|
||||
{
|
||||
"name": "com.google.guava:guava:14.0"
|
||||
},
|
||||
{
|
||||
"name": "org.apache.commons:commons-lang3:3.1"
|
||||
},
|
||||
{
|
||||
"name": "commons-io:commons-io:2.4"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput:2.0.5"
|
||||
},
|
||||
{
|
||||
"name": "net.java.jutils:jutils:1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "com.google.code.gson:gson:2.2.2"
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow"
|
||||
},
|
||||
{
|
||||
"action": "disallow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow"
|
||||
},
|
||||
{
|
||||
"action": "disallow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow"
|
||||
},
|
||||
{
|
||||
"action": "disallow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
],
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl:2.9.1-nightly-20130708-debug3",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.1-nightly-20130708-debug3",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20130708-debug3",
|
||||
"rules": [
|
||||
{
|
||||
"action": "allow",
|
||||
"os": {
|
||||
"name": "osx",
|
||||
"version": "^10\\.5\\.\\d$"
|
||||
}
|
||||
}
|
||||
],
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "net.java.jinput:jinput-platform:2.0.5",
|
||||
"natives": {
|
||||
"linux": "natives-linux",
|
||||
"windows": "natives-windows",
|
||||
"osx": "natives-osx"
|
||||
},
|
||||
"extract": {
|
||||
"exclude": [
|
||||
"META-INF/"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"mainClass": "net.minecraft.launchwrapper.Launch"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.3 KiB |
Binary file not shown.
+22
-1
@@ -1,5 +1,5 @@
|
||||
[default]
|
||||
current_ver = 1.6
|
||||
current_ver = 1.6.3
|
||||
base_url = http://s3.amazonaws.com/MinecraftDownload/
|
||||
libraries = lwjgl.jar lwjgl_util.jar jinput.jar
|
||||
natives = windows_natives.jar macosx_natives.jar linux_natives.jar
|
||||
@@ -100,3 +100,24 @@ server_md5 = 7c03305c8bf97a8e8f3cdb147fc90607
|
||||
mcp_ver = 8.01
|
||||
mcp_url =
|
||||
mcp_md5 = 39da81bbb4d73b3f5e2d1f8f5682cdb9
|
||||
|
||||
[1.6.1]
|
||||
client_md5 = 3c56fb4b77b1ca37dde69b5eb896fc4d
|
||||
server_md5 = ff8f81970a5955737c356b534d3aee96
|
||||
mcp_ver = 8.03
|
||||
mcp_url = http://mcp.ocean-labs.de/files/archive/mcp803.zip
|
||||
mcp_md5 = 7810c2fba33e15889685b21ac8dc66cf
|
||||
|
||||
[1.6.2]
|
||||
client_md5 = 1d43cdba8b9752d7f557ab7d3e365964
|
||||
server_md5 = 39df9f29e6904ea7b351ffb4fe949881
|
||||
mcp_ver = 8.04
|
||||
mcp_url = http://mcp.ocean-labs.de/files/archive/mcp804.zip
|
||||
mcp_md5 = ebcecfa00aae07548e67787044410a11
|
||||
|
||||
[1.6.3]
|
||||
client_md5 = 233effe2110d40a0519cf1489e4ccb1c
|
||||
server_md5 = 8ed981ab6030412f586bfe38ff0aaa82
|
||||
mcp_ver = 8.09
|
||||
mcp_url =
|
||||
mcp_md5 =
|
||||
@@ -12,7 +12,7 @@
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.awt.image.BufferedImage;
|
||||
@@ -129,6 +134,8 @@
|
||||
@@ -130,6 +135,8 @@
|
||||
import org.lwjgl.opengl.PixelFormat;
|
||||
import org.lwjgl.util.glu.GLU;
|
||||
|
||||
@@ -21,24 +21,24 @@
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class Minecraft implements IPlayerUsage
|
||||
{
|
||||
@@ -364,6 +371,8 @@
|
||||
@@ -366,6 +373,8 @@
|
||||
this.func_71357_I();
|
||||
this.field_71466_p = new FontRenderer(this.field_71474_y, new ResourceLocation("textures/font/ascii.png"), this.field_71446_o, false);
|
||||
|
||||
+ FMLClientHandler.instance().beginMinecraftLoading(this);
|
||||
+ FMLClientHandler.instance().beginMinecraftLoading(this, this.field_110449_ao, this.field_110451_am);
|
||||
+
|
||||
if (this.field_71474_y.field_74363_ab != null)
|
||||
{
|
||||
this.field_71466_p.func_78264_a(this.field_135017_as.func_135042_a());
|
||||
@@ -396,6 +405,7 @@
|
||||
this.field_71446_o.func_130088_a(TextureMap.field_110576_c, new TextureMap(1, "textures/items/"));
|
||||
@@ -400,6 +409,7 @@
|
||||
this.field_71446_o.func_130088_a(TextureMap.field_110576_c, new TextureMap(1, "textures/items"));
|
||||
GL11.glViewport(0, 0, this.field_71443_c, this.field_71440_d);
|
||||
this.field_71452_i = new EffectRenderer(this.field_71441_e, this.field_71446_o);
|
||||
+ FMLClientHandler.instance().finishMinecraftLoading();
|
||||
this.func_71361_d("Post startup");
|
||||
this.field_71456_v = new GuiIngame(this);
|
||||
|
||||
@@ -414,6 +424,7 @@
|
||||
@@ -418,6 +428,7 @@
|
||||
{
|
||||
this.func_71352_k();
|
||||
}
|
||||
@@ -46,7 +46,7 @@
|
||||
}
|
||||
|
||||
public void func_110436_a()
|
||||
@@ -725,6 +736,7 @@
|
||||
@@ -733,6 +744,7 @@
|
||||
{
|
||||
this.func_71405_e();
|
||||
}
|
||||
@@ -54,7 +54,7 @@
|
||||
}
|
||||
|
||||
private void func_71411_J()
|
||||
@@ -793,9 +805,11 @@
|
||||
@@ -801,9 +813,11 @@
|
||||
|
||||
if (!this.field_71454_w)
|
||||
{
|
||||
@@ -66,7 +66,7 @@
|
||||
}
|
||||
|
||||
GL11.glFlush();
|
||||
@@ -1317,10 +1331,14 @@
|
||||
@@ -1325,10 +1339,14 @@
|
||||
|
||||
public void func_71407_l()
|
||||
{
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
this.field_71424_I.func_76320_a("stats");
|
||||
this.field_71413_E.func_77449_e();
|
||||
@@ -1771,6 +1789,8 @@
|
||||
@@ -1785,6 +1803,8 @@
|
||||
this.field_71453_ak.func_74428_b();
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
this.field_71424_I.func_76319_b();
|
||||
this.field_71423_H = func_71386_F();
|
||||
}
|
||||
@@ -1794,8 +1814,27 @@
|
||||
@@ -1808,8 +1828,27 @@
|
||||
}
|
||||
|
||||
this.field_71413_E.func_77450_a(StatList.field_75936_f, 1);
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--- ../src-base/minecraft/net/minecraft/client/gui/GuiErrorScreen.java
|
||||
+++ ../src-work/minecraft/net/minecraft/client/gui/GuiErrorScreen.java
|
||||
@@ -22,6 +22,8 @@
|
||||
this.field_73887_h.add(new GuiButton(0, this.field_73880_f / 2 - 100, 140, I18n.func_135053_a("gui.cancel")));
|
||||
}
|
||||
|
||||
+ public GuiErrorScreen(){}
|
||||
+
|
||||
public void func_73863_a(int p_73863_1_, int p_73863_2_, float p_73863_3_)
|
||||
{
|
||||
this.func_73733_a(0, 0, this.field_73880_f, this.field_73881_g, -12574688, -11530224);
|
||||
@@ -15,8 +15,8 @@
|
||||
+import java.util.List;
|
||||
import java.util.Random;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
@@ -23,6 +26,9 @@
|
||||
import net.minecraft.client.mco.ExceptionMcoService;
|
||||
@@ -26,6 +29,9 @@
|
||||
import org.apache.commons.io.Charsets;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.util.glu.Project;
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class GuiMainMenu extends GuiScreen
|
||||
@@ -52,6 +58,8 @@
|
||||
@@ -55,6 +61,8 @@
|
||||
private ResourceLocation field_110351_G;
|
||||
private GuiButton field_130023_H;
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
public GuiMainMenu()
|
||||
{
|
||||
BufferedReader bufferedreader = null;
|
||||
@@ -203,13 +211,22 @@
|
||||
@@ -206,13 +214,22 @@
|
||||
private void func_130022_h()
|
||||
{
|
||||
this.field_130023_H.field_73748_h = true;
|
||||
@@ -59,7 +59,7 @@
|
||||
this.field_130023_H.field_73748_h = false;
|
||||
}
|
||||
|
||||
@@ -256,6 +273,11 @@
|
||||
@@ -259,6 +276,11 @@
|
||||
if (p_73875_1_.field_73741_f == 4)
|
||||
{
|
||||
this.field_73882_e.func_71400_g();
|
||||
@@ -71,7 +71,7 @@
|
||||
}
|
||||
|
||||
if (p_73875_1_.field_73741_f == 11)
|
||||
@@ -492,7 +514,16 @@
|
||||
@@ -520,7 +542,16 @@
|
||||
s = s + " Demo";
|
||||
}
|
||||
|
||||
|
||||
@@ -1,44 +1,46 @@
|
||||
--- ../src-base/minecraft/net/minecraft/client/multiplayer/NetClientHandler.java
|
||||
+++ ../src-work/minecraft/net/minecraft/client/multiplayer/NetClientHandler.java
|
||||
@@ -1,5 +1,6 @@
|
||||
@@ -1,6 +1,8 @@
|
||||
package net.minecraft.client.multiplayer;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
+
|
||||
+import cpw.mods.fml.common.network.FMLNetworkHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.io.BufferedReader;
|
||||
@@ -201,11 +202,14 @@
|
||||
@@ -205,11 +207,14 @@
|
||||
private GuiScreen field_98183_l;
|
||||
Random field_72557_e = new Random();
|
||||
|
||||
+ private static byte connectionCompatibilityLevel;
|
||||
+
|
||||
public NetClientHandler(Minecraft p_i3103_1_, String p_i3103_2_, int p_i3103_3_) throws IOException
|
||||
public NetClientHandler(Minecraft p_i1176_1_, String p_i1176_2_, int p_i1176_3_) throws IOException
|
||||
{
|
||||
this.field_72563_h = p_i3103_1_;
|
||||
Socket socket = new Socket(InetAddress.getByName(p_i3103_2_), p_i3103_3_);
|
||||
this.field_72555_g = new TcpConnection(p_i3103_1_.func_98033_al(), socket, "Client", this);
|
||||
+ FMLNetworkHandler.onClientConnectionToRemoteServer(this, p_i3103_2_, p_i3103_3_, this.field_72555_g);
|
||||
this.field_72563_h = p_i1176_1_;
|
||||
Socket socket = new Socket(InetAddress.getByName(p_i1176_2_), p_i1176_3_);
|
||||
this.field_72555_g = new TcpConnection(p_i1176_1_.func_98033_al(), socket, "Client", this);
|
||||
+ FMLNetworkHandler.onClientConnectionToRemoteServer(this, p_i1176_2_, p_i1176_3_, this.field_72555_g);
|
||||
}
|
||||
|
||||
public NetClientHandler(Minecraft p_i11012_1_, String p_i11012_2_, int p_i11012_3_, GuiScreen p_i11012_4_) throws IOException
|
||||
@@ -214,6 +218,7 @@
|
||||
this.field_98183_l = p_i11012_4_;
|
||||
Socket socket = new Socket(InetAddress.getByName(p_i11012_2_), p_i11012_3_);
|
||||
this.field_72555_g = new TcpConnection(p_i11012_1_.func_98033_al(), socket, "Client", this);
|
||||
+ FMLNetworkHandler.onClientConnectionToRemoteServer(this, p_i11012_2_, p_i11012_3_, this.field_72555_g);
|
||||
public NetClientHandler(Minecraft p_i1177_1_, String p_i1177_2_, int p_i1177_3_, GuiScreen p_i1177_4_) throws IOException
|
||||
@@ -218,6 +223,7 @@
|
||||
this.field_98183_l = p_i1177_4_;
|
||||
Socket socket = new Socket(InetAddress.getByName(p_i1177_2_), p_i1177_3_);
|
||||
this.field_72555_g = new TcpConnection(p_i1177_1_.func_98033_al(), socket, "Client", this);
|
||||
+ FMLNetworkHandler.onClientConnectionToRemoteServer(this, p_i1177_2_, p_i1177_3_, this.field_72555_g);
|
||||
}
|
||||
|
||||
public NetClientHandler(Minecraft p_i3104_1_, IntegratedServer p_i3104_2_) throws IOException
|
||||
@@ -221,6 +226,7 @@
|
||||
this.field_72563_h = p_i3104_1_;
|
||||
this.field_72555_g = new MemoryConnection(p_i3104_1_.func_98033_al(), this);
|
||||
p_i3104_2_.func_71343_a().func_71754_a((MemoryConnection)this.field_72555_g, p_i3104_1_.func_110432_I().func_111285_a());
|
||||
+ FMLNetworkHandler.onClientConnectionToIntegratedServer(this, p_i3104_2_, this.field_72555_g);
|
||||
public NetClientHandler(Minecraft p_i1178_1_, IntegratedServer p_i1178_2_) throws IOException
|
||||
@@ -225,6 +231,7 @@
|
||||
this.field_72563_h = p_i1178_1_;
|
||||
this.field_72555_g = new MemoryConnection(p_i1178_1_.func_98033_al(), this);
|
||||
p_i1178_2_.func_71343_a().func_71754_a((MemoryConnection)this.field_72555_g, p_i1178_1_.func_110432_I().func_111285_a());
|
||||
+ FMLNetworkHandler.onClientConnectionToIntegratedServer(this, p_i1178_2_, this.field_72555_g);
|
||||
}
|
||||
|
||||
public void func_72547_c()
|
||||
@@ -292,6 +298,7 @@
|
||||
@@ -296,6 +303,7 @@
|
||||
|
||||
public void func_72513_a(Packet252SharedKey p_72513_1_)
|
||||
{
|
||||
@@ -46,15 +48,15 @@
|
||||
this.func_72552_c(new Packet205ClientCommand(0));
|
||||
}
|
||||
|
||||
@@ -307,6 +314,7 @@
|
||||
@@ -311,6 +319,7 @@
|
||||
this.field_72563_h.field_71439_g.field_70157_k = p_72455_1_.field_73561_a;
|
||||
this.field_72556_d = p_72455_1_.field_73562_h;
|
||||
this.field_72563_h.field_71442_b.func_78746_a(p_72455_1_.field_73557_d);
|
||||
+ FMLNetworkHandler.onConnectionEstablishedToServer(this, field_72555_g, p_72455_1_);
|
||||
this.field_72563_h.field_71474_y.func_82879_c();
|
||||
this.field_72555_g.func_74429_a(new Packet250CustomPayload("MC|Brand", ClientBrandRetriever.getClientModName().getBytes(Charsets.UTF_8)));
|
||||
}
|
||||
|
||||
@@ -760,6 +768,7 @@
|
||||
@@ -765,6 +774,7 @@
|
||||
{
|
||||
this.field_72555_g.func_74429_a(p_72546_1_);
|
||||
this.field_72555_g.func_74423_d();
|
||||
@@ -62,7 +64,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -799,6 +808,7 @@
|
||||
@@ -804,6 +814,7 @@
|
||||
|
||||
public void func_72481_a(Packet3Chat p_72481_1_)
|
||||
{
|
||||
@@ -70,7 +72,7 @@
|
||||
this.field_72563_h.field_71456_v.func_73827_b().func_73765_a(ChatMessageComponent.func_111078_c(p_72481_1_.field_73476_b).func_111068_a(true));
|
||||
}
|
||||
|
||||
@@ -1379,6 +1389,11 @@
|
||||
@@ -1403,6 +1414,11 @@
|
||||
|
||||
public void func_72494_a(Packet131MapData p_72494_1_)
|
||||
{
|
||||
@@ -82,7 +84,7 @@
|
||||
if (p_72494_1_.field_73438_a == Item.field_77744_bd.field_77779_bT)
|
||||
{
|
||||
ItemMap.func_77874_a(p_72494_1_.field_73436_b, this.field_72563_h.field_71441_e).func_76192_a(p_72494_1_.field_73437_c);
|
||||
@@ -1490,6 +1505,11 @@
|
||||
@@ -1514,6 +1530,11 @@
|
||||
|
||||
public void func_72501_a(Packet250CustomPayload p_72501_1_)
|
||||
{
|
||||
@@ -94,7 +96,7 @@
|
||||
if ("MC|TrList".equals(p_72501_1_.field_73630_a))
|
||||
{
|
||||
DataInputStream datainputstream = new DataInputStream(new ByteArrayInputStream(p_72501_1_.field_73629_c));
|
||||
@@ -1670,4 +1690,20 @@
|
||||
@@ -1707,4 +1728,20 @@
|
||||
{
|
||||
return this.field_72555_g;
|
||||
}
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
--- ../src-base/minecraft/net/minecraft/client/renderer/RenderEngine.java
|
||||
+++ ../src-work/minecraft/net/minecraft/client/renderer/RenderEngine.java
|
||||
@@ -1,8 +1,11 @@
|
||||
package net.minecraft.client.renderer;
|
||||
|
||||
+import cpw.mods.fml.client.TextureFXManager;
|
||||
+import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.awt.Color;
|
||||
+import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
@@ -11,6 +14,9 @@
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
+import java.util.logging.Level;
|
||||
+import java.util.logging.Logger;
|
||||
+
|
||||
import javax.imageio.ImageIO;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
@@ -37,6 +43,8 @@
|
||||
private final TextureMap field_94155_m;
|
||||
private int field_94153_n;
|
||||
|
||||
+ public static Logger log = FMLLog.getLogger();
|
||||
+
|
||||
public RenderEngine(TexturePackList p_i3192_1_, GameSettings p_i3192_2_)
|
||||
{
|
||||
this.field_78366_k = p_i3192_1_;
|
||||
@@ -87,14 +95,17 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
- aint1 = this.func_78348_b(this.func_78345_a(inputstream));
|
||||
+ BufferedImage bufferedimage = this.func_78345_a(inputstream);
|
||||
+ TextureFXManager.instance().fixTransparency(bufferedimage, p_78346_1_);
|
||||
+ aint1 = this.func_78348_b(bufferedimage);
|
||||
}
|
||||
|
||||
this.field_78359_d.put(p_78346_1_, aint1);
|
||||
return aint1;
|
||||
}
|
||||
- catch (IOException ioexception)
|
||||
- {
|
||||
+ catch (Exception ioexception)
|
||||
+ {
|
||||
+ log.log(Level.INFO, String.format("An error occured reading texture file %s (getTexture)", p_78346_1_), ioexception);
|
||||
ioexception.printStackTrace();
|
||||
int[] aint2 = this.func_78348_b(this.field_78364_l);
|
||||
this.field_78359_d.put(p_78346_1_, aint2);
|
||||
@@ -162,6 +173,7 @@
|
||||
try
|
||||
{
|
||||
int i = GLAllocation.func_74528_a();
|
||||
+ TextureFXManager.instance().bindTextureToName(p_78341_1_, i);
|
||||
boolean flag = p_78341_1_.startsWith("%blur%");
|
||||
|
||||
if (flag)
|
||||
@@ -184,7 +196,9 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
- this.func_98184_a(this.func_78345_a(inputstream), i, flag, flag1);
|
||||
+ BufferedImage bufferedimage = this.func_78345_a(inputstream);
|
||||
+ TextureFXManager.instance().fixTransparency(bufferedimage, p_78341_1_);
|
||||
+ this.func_98184_a(bufferedimage, i, flag, flag1);
|
||||
}
|
||||
|
||||
this.field_78362_c.put(s1, Integer.valueOf(i));
|
||||
@@ -240,6 +254,7 @@
|
||||
|
||||
int j = p_98184_1_.getWidth();
|
||||
int k = p_98184_1_.getHeight();
|
||||
+ TextureFXManager.instance().setTextureDimensions(p_98184_2_, j, k);
|
||||
int[] aint = new int[j * k];
|
||||
p_98184_1_.getRGB(0, 0, j, k, aint, 0, j);
|
||||
|
||||
@@ -412,10 +427,12 @@
|
||||
}
|
||||
|
||||
BufferedImage bufferedimage1 = this.func_78345_a(itexturepack.func_77532_a(s));
|
||||
+ TextureFXManager.instance().fixTransparency(bufferedimage1, s);
|
||||
this.func_98184_a(bufferedimage1, j, flag, flag1);
|
||||
}
|
||||
- catch (IOException ioexception)
|
||||
- {
|
||||
+ catch (Exception ioexception)
|
||||
+ {
|
||||
+ log.log(Level.INFO,String.format("An error occured reading texture file %s (refreshTexture)", s), ioexception);
|
||||
ioexception.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -429,10 +446,12 @@
|
||||
try
|
||||
{
|
||||
bufferedimage = this.func_78345_a(itexturepack.func_77532_a(s));
|
||||
+ TextureFXManager.instance().fixTransparency(bufferedimage, s);
|
||||
this.func_78340_a(bufferedimage, (int[])this.field_78359_d.get(s));
|
||||
}
|
||||
- catch (IOException ioexception1)
|
||||
- {
|
||||
+ catch (Exception ioexception1)
|
||||
+ {
|
||||
+ log.log(Level.INFO,String.format("An error occured reading texture file data %s (refreshTexture)", s), ioexception1);
|
||||
ioexception1.printStackTrace();
|
||||
}
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
--- ../src-base/minecraft/net/minecraft/client/renderer/texture/Texture.java
|
||||
+++ ../src-work/minecraft/net/minecraft/client/renderer/texture/Texture.java
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.minecraft.client.renderer.texture;
|
||||
|
||||
+import cpw.mods.fml.client.TextureFXManager;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.awt.image.BufferedImage;
|
||||
@@ -9,6 +10,8 @@
|
||||
import javax.imageio.ImageIO;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
+import net.minecraft.src.FMLRenderAccessLibrary;
|
||||
+
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
@@ -206,6 +209,12 @@
|
||||
{
|
||||
if (this.field_94300_h != 32879)
|
||||
{
|
||||
+ if (field_94303_q && !p_94281_4_)
|
||||
+ {
|
||||
+ FMLRenderAccessLibrary.doTextureCopy(this, p_94281_3_, p_94281_1_, p_94281_2_);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
ByteBuffer bytebuffer = p_94281_3_.func_94273_h();
|
||||
this.field_94302_r.position(0);
|
||||
bytebuffer.position(0);
|
||||
@@ -218,7 +227,7 @@
|
||||
|
||||
if (p_94281_4_)
|
||||
{
|
||||
- l = p_94281_2_ + (p_94281_3_.func_94276_e() - k);
|
||||
+ l = p_94281_1_ + (p_94281_3_.func_94276_e() - k - 1); //BUGFIX: targetY -> targetX and -1
|
||||
}
|
||||
|
||||
for (int k1 = 0; k1 < p_94281_3_.func_94275_d(); ++k1)
|
||||
@@ -228,7 +237,7 @@
|
||||
|
||||
if (p_94281_4_)
|
||||
{
|
||||
- l1 = p_94281_1_ + k1 * this.field_94289_d * 4 + l * 4;
|
||||
+ l1 = (p_94281_2_ + k1) * this.field_94289_d * 4 + l * 4; //BUGFIX: targetX -> targetY and parens
|
||||
}
|
||||
|
||||
this.field_94302_r.put(l1 + 0, bytebuffer.get(i2 + 0));
|
||||
@@ -378,4 +387,13 @@
|
||||
{
|
||||
return this.field_94302_r;
|
||||
}
|
||||
+
|
||||
+ public void createAndUploadTexture()
|
||||
+ {
|
||||
+ this.field_94293_a = GL11.glGenTextures();
|
||||
+ GL11.glBindTexture(this.field_94300_h, this.field_94293_a);
|
||||
+ System.out.printf("Buffer %s %x %d is %s\n",field_94297_m, field_94300_h, field_94293_a, field_94302_r);
|
||||
+ field_94302_r.position(field_94302_r.limit());
|
||||
+ func_94285_g();
|
||||
+ }
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
--- ../src-base/minecraft/net/minecraft/client/renderer/texture/TextureStitched.java
|
||||
+++ ../src-work/minecraft/net/minecraft/client/renderer/texture/TextureStitched.java
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.minecraft.client.renderer.texture;
|
||||
|
||||
+import cpw.mods.fml.client.TextureFXManager;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.io.BufferedReader;
|
||||
@@ -56,6 +57,11 @@
|
||||
this.field_94230_o = (float)(p_94218_4_ + p_94218_6_) / (float)p_94218_1_.func_94276_e() - f1;
|
||||
this.field_94238_p = (float)p_94218_5_ / 16.0F;
|
||||
this.field_94237_q = (float)p_94218_6_ / 16.0F;
|
||||
+ TextureFXManager.instance().getHelper().doTextureUpload(this);
|
||||
+ if (this.field_94227_c)
|
||||
+ {
|
||||
+ TextureFXManager.instance().getHelper().rotateTexture(this.field_94228_a, this.field_94228_a.func_94273_h());
|
||||
+ }
|
||||
}
|
||||
|
||||
public void func_94217_a(TextureStitched p_94217_1_)
|
||||
@@ -198,4 +204,12 @@
|
||||
this.field_94236_i = arraylist;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ public void createAndUploadTextures()
|
||||
+ {
|
||||
+ for (Texture t : ((List<Texture>)field_94226_b))
|
||||
+ {
|
||||
+ t.createAndUploadTexture();
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
- {
|
||||
- return this.func_85085_a();
|
||||
- }
|
||||
- catch (Exception e)
|
||||
- catch (Exception ex)
|
||||
- {
|
||||
- return null;
|
||||
- }
|
||||
|
||||
@@ -9,4 +9,4 @@
|
||||
-@SideOnly(Side.CLIENT)
|
||||
public interface IBossDisplayData
|
||||
{
|
||||
float func_70667_aM();
|
||||
float func_110138_aP();
|
||||
Loaded 100 of 119 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user