Updated FML, Should fix a lot of installing issues for MCP.
Made patches error and not apply if the target file is not found. Updated Event Transformer to add a default constructor... Fixed 4096 setup code in MinecraftForge.initalize()
This commit is contained in:
parent
da426653a8
commit
a024be74e6
4 changed files with 40 additions and 17 deletions
|
@ -1,11 +1,14 @@
|
||||||
package net.minecraftforge.common;
|
package net.minecraftforge.common;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import net.minecraft.src.*;
|
import net.minecraft.src.*;
|
||||||
import net.minecraftforge.common.ForgeHooks.GrassEntry;
|
import net.minecraftforge.common.ForgeHooks.GrassEntry;
|
||||||
import net.minecraftforge.common.ForgeHooks.SeedEntry;
|
import net.minecraftforge.common.ForgeHooks.SeedEntry;
|
||||||
import net.minecraftforge.event.EventBus;
|
import net.minecraftforge.event.EventBus;
|
||||||
|
import net.minecraftforge.event.ForgeSubscribe;
|
||||||
|
import net.minecraftforge.event.entity.EntityEvent;
|
||||||
|
|
||||||
public class MinecraftForge
|
public class MinecraftForge
|
||||||
{
|
{
|
||||||
|
@ -170,14 +173,17 @@ public class MinecraftForge
|
||||||
Block filler = null;
|
Block filler = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
filler = Block.class.getConstructor(int.class, Material.class).newInstance(256, Material.air);
|
Constructor ctr = Block.class.getDeclaredConstructor(int.class, Material.class);
|
||||||
}catch (Exception e){}
|
ctr.setAccessible(true);
|
||||||
|
filler = (Block)ctr.newInstance(256, Material.air);
|
||||||
if (filler == null)
|
|
||||||
{
|
|
||||||
throw new RuntimeException("Could not create Forge filler block");
|
|
||||||
}
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
RuntimeException rte = new RuntimeException("Could not create Forge filler block", e);
|
||||||
|
rte.printStackTrace();
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
for (int x = 256; x < 4096; x++)
|
for (int x = 256; x < 4096; x++)
|
||||||
{
|
{
|
||||||
if (Item.itemsList[x - 256] != null)
|
if (Item.itemsList[x - 256] != null)
|
||||||
|
|
|
@ -59,6 +59,7 @@ public class EventTransformer implements IClassTransformer
|
||||||
|
|
||||||
boolean hasSetup = false;
|
boolean hasSetup = false;
|
||||||
boolean hasGetListenerList = false;
|
boolean hasGetListenerList = false;
|
||||||
|
boolean hasDefaultCtr = false;
|
||||||
|
|
||||||
Type tList = Type.getType(ListenerList.class);
|
Type tList = Type.getType(ListenerList.class);
|
||||||
|
|
||||||
|
@ -68,13 +69,18 @@ public class EventTransformer implements IClassTransformer
|
||||||
method.desc.equals(Type.getMethodDescriptor(VOID_TYPE)) &&
|
method.desc.equals(Type.getMethodDescriptor(VOID_TYPE)) &&
|
||||||
(method.access & ACC_PROTECTED) == ACC_PROTECTED)
|
(method.access & ACC_PROTECTED) == ACC_PROTECTED)
|
||||||
{
|
{
|
||||||
hasSetup = true;
|
hasSetup = true;
|
||||||
}
|
}
|
||||||
if (method.name.equals("getListenerList") &&
|
if (method.name.equals("getListenerList") &&
|
||||||
method.desc.equals(Type.getMethodDescriptor(tList)) &&
|
method.desc.equals(Type.getMethodDescriptor(tList)) &&
|
||||||
(method.access & ACC_PUBLIC) == ACC_PUBLIC)
|
(method.access & ACC_PUBLIC) == ACC_PUBLIC)
|
||||||
{
|
{
|
||||||
hasGetListenerList = true;
|
hasGetListenerList = true;
|
||||||
|
}
|
||||||
|
if (method.name.equals("<init>") &&
|
||||||
|
method.desc.equals(Type.getMethodDescriptor(VOID_TYPE)))
|
||||||
|
{
|
||||||
|
hasDefaultCtr = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +100,22 @@ public class EventTransformer implements IClassTransformer
|
||||||
|
|
||||||
//Add private static ListenerList LISTENER_LIST
|
//Add private static ListenerList LISTENER_LIST
|
||||||
classNode.fields.add(new FieldNode(ACC_PRIVATE | ACC_STATIC, "LISTENER_LIST", tList.getDescriptor(), null, null));
|
classNode.fields.add(new FieldNode(ACC_PRIVATE | ACC_STATIC, "LISTENER_LIST", tList.getDescriptor(), null, null));
|
||||||
|
|
||||||
|
/*Add:
|
||||||
|
* public <init>()
|
||||||
|
* {
|
||||||
|
* super();
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
MethodNode method = new MethodNode(ASM4, ACC_PUBLIC, "<init>", getMethodDescriptor(VOID_TYPE), null, null);
|
||||||
|
method.instructions.add(new VarInsnNode(ALOAD, 0));
|
||||||
|
method.instructions.add(new MethodInsnNode(INVOKESPECIAL, tSuper.getInternalName(), "<init>", getMethodDescriptor(VOID_TYPE)));
|
||||||
|
method.instructions.add(new InsnNode(RETURN));
|
||||||
|
if (!hasDefaultCtr)
|
||||||
|
{
|
||||||
|
classNode.methods.add(method);
|
||||||
|
}
|
||||||
|
|
||||||
/*Add:
|
/*Add:
|
||||||
* protected void setup()
|
* protected void setup()
|
||||||
* {
|
* {
|
||||||
|
@ -106,7 +127,7 @@ public class EventTransformer implements IClassTransformer
|
||||||
* LISTENER_LIST = new ListenerList(super.getListenerList());
|
* LISTENER_LIST = new ListenerList(super.getListenerList());
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
MethodNode method = new MethodNode(ASM4, ACC_PROTECTED, "setup", getMethodDescriptor(VOID_TYPE), null, null);
|
method = new MethodNode(ASM4, ACC_PROTECTED, "setup", getMethodDescriptor(VOID_TYPE), null, null);
|
||||||
method.instructions.add(new VarInsnNode(ALOAD, 0));
|
method.instructions.add(new VarInsnNode(ALOAD, 0));
|
||||||
method.instructions.add(new MethodInsnNode(INVOKESPECIAL, tSuper.getInternalName(), "setup", getMethodDescriptor(VOID_TYPE)));
|
method.instructions.add(new MethodInsnNode(INVOKESPECIAL, tSuper.getInternalName(), "setup", getMethodDescriptor(VOID_TYPE)));
|
||||||
method.instructions.add(new FieldInsnNode(GETSTATIC, classNode.name, "LISTENER_LIST", tList.getDescriptor()));
|
method.instructions.add(new FieldInsnNode(GETSTATIC, classNode.name, "LISTENER_LIST", tList.getDescriptor()));
|
||||||
|
|
Binary file not shown.
4
forge.py
4
forge.py
|
@ -89,16 +89,12 @@ def apply_forge_patches(fml_dir, mcp_dir, forge_dir, src_dir, copy_files=True):
|
||||||
if has_client:
|
if has_client:
|
||||||
if os.path.isdir(os.path.join(forge_dir, 'patches', 'minecraft')):
|
if os.path.isdir(os.path.join(forge_dir, 'patches', 'minecraft')):
|
||||||
apply_patches(mcp_dir, os.path.join(forge_dir, 'patches', 'minecraft'), src_dir)
|
apply_patches(mcp_dir, os.path.join(forge_dir, 'patches', 'minecraft'), src_dir)
|
||||||
if os.path.isdir(os.path.join(forge_dir, 'patches', 'common')):
|
|
||||||
apply_patches(mcp_dir, os.path.join(forge_dir, 'patches', 'common'), src_dir, '/common/', '/minecraft/')
|
|
||||||
if copy_files and os.path.isdir(os.path.join(forge_dir, 'client')):
|
if copy_files and os.path.isdir(os.path.join(forge_dir, 'client')):
|
||||||
copytree(os.path.join(forge_dir, 'client'), os.path.join(src_dir, 'minecraft'))
|
copytree(os.path.join(forge_dir, 'client'), os.path.join(src_dir, 'minecraft'))
|
||||||
|
|
||||||
if has_server:
|
if has_server:
|
||||||
if os.path.isdir(os.path.join(forge_dir, 'patches', 'minecraft_server')):
|
if os.path.isdir(os.path.join(forge_dir, 'patches', 'minecraft_server')):
|
||||||
apply_patches(mcp_dir, os.path.join(forge_dir, 'patches', 'minecraft_server'), src_dir)
|
apply_patches(mcp_dir, os.path.join(forge_dir, 'patches', 'minecraft_server'), src_dir)
|
||||||
if os.path.isdir(os.path.join(forge_dir, 'patches', 'common')):
|
|
||||||
apply_patches(mcp_dir, os.path.join(forge_dir, 'patches', 'common'), src_dir, '/common/', '/minecraft_server/')
|
|
||||||
if copy_files and os.path.isdir(os.path.join(forge_dir, 'server')):
|
if copy_files and os.path.isdir(os.path.join(forge_dir, 'server')):
|
||||||
copytree(os.path.join(forge_dir, 'server'), os.path.join(src_dir, 'minecraft_server'))
|
copytree(os.path.join(forge_dir, 'server'), os.path.join(src_dir, 'minecraft_server'))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue