Jump to content

Issue setting up Forge Modloader


nqeron

Recommended Posts

I've been trying to setup the recent Forge Modloader (4.1.1) so I can work on a mod for MC 1.3.2 (in MCP 7.2), but I've been running into an issue with my install.  When I run the install.sh, it crashes in the execution of MCPMerger.

 

Various other details: I did this with appropriate, vanilla clients and server; and loaded everything into the appropriate folder.  I am running this on a Mac OS X (10.6.8 ).  Any help would be appreciated.

 

Full Logs are posted here:

 

 

> Running MCPMerger

Server -skip : aec  7 (<init> 8) 0 []

Client -skip : aec <init> 7 (<init> 8) 0 []

Server -skip : aec <init> 7 (<init> 8) 0 []

Client *add* : aec <init> 7 (<init> 8) 1 [<init>]

Client -skip : aec a 6 (<init> 8) 1 [<init>]

Server *add* : aec a 6 (<init> 8) 2 [<init>]

Server -skip : aec a 6 (d 7) 2 [<init>]

Client *add* : aec a 6 (d 7) 3 [a]

Client *add* : aec a 5 (d 7) 4 [a]

Client *add* : aec a 4 (d 7) 5 [a]

Client -skip : aec d 3 (d 7) 5 [a]

Server -skip : aec d 3 (d 7) 5 [a]

Client *add* : aec d 3 (d 7) 6 [d]

Client -skip : aec a 2 (d 7) 6 [d]

Server *add* : aec a 2 (d 7) 7 [d]

Server -skip : aec a 2 (c 6) 7 [d]

Client *add* : aec a 2 (c 6) 8 [a]

Client -skip : aec b 1 (c 6) 8 [a]

Server -skip : aec b 1 (c 6) 8 [a]

Client *add* : aec b 1 (c 6) 9

Server *add* : aec b 0 (c 6) 10

Server *add* : aec b 0 (e 5) 11

Server *add* : aec b 0 (a 4) 12

Server *add* : aec b 0 (a 3) 13

Server *add* : aec b 0 (b 2) 14

Server *add* : aec b 0 (a 1) 15

MethodWrapper{name=<init>, desc=()V, server=false, client=true}

MethodWrapper{name=<init>, desc=(Ljava/io/File;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Lbh;)F, server=false, client=true}

MethodWrapper{name=a, desc=(Lbh;IF)Z, server=false, client=true}

MethodWrapper{name=a, desc=(Lbh;F)V, server=false, client=true}

MethodWrapper{name=d, desc=(Lwd;F)V, server=false, client=true}

MethodWrapper{name=d, desc=()V, server=true, client=false}

MethodWrapper{name=a, desc=(Lwd;)F, server=false, client=true}

MethodWrapper{name=b, desc=(Lwd;IF)Z, server=false, client=true}

MethodWrapper{name=c, desc=(Ljava/lang/String;)Laed;, server=true, client=false}

MethodWrapper{name=e, desc=(Ljava/lang/String;)V, server=true, client=false}

MethodWrapper{name=a, desc=([Ljava/io/File;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/lang/String;Z)Laee;, server=true, client=false}

MethodWrapper{name=b, desc=(Ljava/lang/String;)Z, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/lang/String;Lim;)Z, server=true, client=false}

Server -skip : aeb  3 (<init> 17) 0 []

Client -skip : aeb <init> 3 (<init> 17) 0 []

Server -skip : aeb <init> 3 (<init> 17) 0 []

Client *add* : aeb <init> 3 (<init> 17) 1 [<init>]

Client -skip : aeb b 2 (<init> 17) 1 [<init>]

Server *add* : aeb b 2 (<init> 17) 2 [<init>]

Server -skip : aeb b 2 (h 16) 2 [<init>]

Client *add* : aeb b 2 (h 16) 3

Client -skip : aeb a 1 (h 16) 3

Server -skip : aeb a 1 (h 16) 3

Client *add* : aeb a 1 (h 16) 4 [a]

Server *add* : aeb a 0 (h 16) 5 [a]

Server *add* : aeb a 0 (b 15) 6 [a]

Server *add* : aeb a 0 (c 14) 7 [a]

Server *add* : aeb a 0 (a 13) 8 [a]

Server *add* : aeb a 0 (d 12) 9 [a]

Server *add* : aeb a 0 (a 11) 10 [a]

Server *add* : aeb a 0 (a 10) 11 [a]

Server *add* : aeb a 0 (a 9) 12 [a]

Server *add* : aeb a 0 (b 8) 13 [a]

Server *add* : aeb a 0 (a 7) 14 [a]

Server *add* : aeb a 0 (e 6) 15 [a]

Server *add* : aeb a 0 (f 5) 16 [a]

Server *add* : aeb a 0 (a 4) 17 [a]

Server *add* : aeb a 0 (b 3) 18 [a]

Server *add* : aeb a 0 (g 2) 19 [a]

Server *add* : aeb a 0 (<clinit> 1) 20 [a]

MethodWrapper{name=<init>, desc=(Lsz;Lgl;Lgl;III)V, server=false, client=true}

MethodWrapper{name=<init>, desc=(Ljava/io/File;Ljava/lang/String;Z)V, server=true, client=false}

MethodWrapper{name=b, desc=(Lul;)Z, server=false, client=true}

MethodWrapper{name=a, desc=(Lul;)V, server=false, client=true}

MethodWrapper{name=h, desc=()V, server=true, client=false}

MethodWrapper{name=b, desc=()Ljava/io/File;, server=true, client=false}

MethodWrapper{name=c, desc=()V, server=true, client=false}

MethodWrapper{name=a, desc=(Lxc;)Lwq;, server=true, client=false}

MethodWrapper{name=d, desc=()Laed;, server=true, client=false}

MethodWrapper{name=a, desc=(Laed;Lan;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Laed;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Log;)V, server=true, client=false}

MethodWrapper{name=b, desc=(Log;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/lang/String;)Lan;, server=true, client=false}

MethodWrapper{name=e, desc=()Laer;, server=true, client=false}

MethodWrapper{name=f, desc=()[Ljava/lang/String;, server=true, client=false}

MethodWrapper{name=a, desc=()V, server=true, client=false}

MethodWrapper{name=b, desc=(Ljava/lang/String;)Ljava/io/File;, server=true, client=false}

MethodWrapper{name=g, desc=()Ljava/lang/String;, server=true, client=false}

MethodWrapper{name=<clinit>, desc=()V, server=true, client=false}

Server -skip : aea  12 (<init> 32) 0 []

Client -skip : aea <init> 12 (<init> 32) 0 []

Server -skip : aea <init> 12 (<init> 32) 0 []

Client *add* : aea <init> 12 (<init> 32) 1 [<init>]

Client *add* : aea <init> 11 (<init> 32) 2 [<init>]

Client -skip : aea b 10 (<init> 32) 2 [<init>]

Server *add* : aea b 10 (<init> 32) 3 [<init>]

Server -skip : aea b 10 (a 31) 3 [<init>]

Client *add* : aea b 10 (a 31) 4

Client -skip : aea c 9 (a 31) 4

Server -skip : aea c 9 (a 31) 4

Client *add* : aea c 9 (a 31) 5 [c]

Client -skip : aea b 8 (a 31) 5 [c]

Server -skip : aea b 8 (a 31) 5 [c]

Client *add* : aea b 8 (a 31) 6

Client -skip : aea a 7 (a 31) 6

Server -skip : aea a 7 (a 31) 6

Client *add* : aea a 7 (a 31) 7 [a]

Client -skip : aea l 6 (a 31) 7 [a]

Server *add* : aea l 6 (a 31) 8 [a]

Server *add* : aea l 6 (a 30) 9 [a]

Server -skip : aea l 6 (b 29) 9 [a]

Client *add* : aea l 6 (b 29) 10 [l]

Client -skip : aea m 5 (b 29) 10 [l]

Server -skip : aea m 5 (b 29) 10 [l]

Client *add* : aea m 5 (b 29) 11 [m]

Client -skip : aea n 4 (b 29) 11 [m]

Server -skip : aea n 4 (b 29) 11 [m]

Client *add* : aea n 4 (b 29) 12 [n]

Client -skip : aea a 3 (b 29) 12 [n]

Server -skip : aea a 3 (b 29) 12 [n]

Client *add* : aea a 3 (b 29) 13 [a]

Client -skip : aea o 2 (b 29) 13 [a]

Server -skip : aea o 2 (b 29) 13 [a]

Client *add* : aea o 2 (b 29) 14 [o]

Client -skip : aea a 1 (b 29) 14 [o]

Server -skip : aea a 1 (b 29) 14 [o]

Client *add* : aea a 1 (b 29) 15 [a]

Server *add* : aea a 0 (b 29) 16 [a]

Server *add* : aea a 0 (c 28) 17 [a]

Server *add* : aea a 0 (d 27) 18 [a]

Server *add* : aea a 0 (e 26) 19 [a]

Server *add* : aea a 0 (f 25) 20 [a]

Server *add* : aea a 0 (h 24) 21 [a]

Server *add* : aea a 0 (i 23) 22 [a]

Server *add* : aea a 0 (j 22) 23 [a]

Server *add* : aea a 0 (k 21) 24 [a]

Server *add* : aea a 0 (m 20) 25 [a]

Server *add* : aea a 0 (n 19) 26 [a]

Server *add* : aea a 0 (o 18) 27 [a]

Server *add* : aea a 0 (p 17) 28 [a]

Server *add* : aea a 0 (q 16) 29 [a]

Server *add* : aea a 0 (b 15) 30 [a]

Server *add* : aea a 0 (a 14) 31 [a]

Server *add* : aea a 0 (a 13) 32 [a]

Server *add* : aea a 0 (e 12) 33 [a]

Server *add* : aea a 0 (a 11) 34 [a]

Server *add* : aea a 0 (f 10) 35 [a]

Server *add* : aea a 0 (b 9) 36 [a]

Server *add* : aea a 0 (g 8) 37 [a]

Server *add* : aea a 0 (r 7) 38 [a]

Server *add* : aea a 0 (s 6) 39 [a]

Server *add* : aea a 0 (t 5) 40 [a]

Server *add* : aea a 0 (a 4) 41 [a]

Server *add* : aea a 0 (u 3) 42 [a]

Server *add* : aea a 0 (v 2) 43 [a]

Server *add* : aea a 0 (d 1) 44 [a]

MethodWrapper{name=<init>, desc=(IIFZ)V, server=false, client=true}

MethodWrapper{name=<init>, desc=(IIZ)V, server=false, client=true}

MethodWrapper{name=<init>, desc=(Laed;)V, server=true, client=false}

MethodWrapper{name=b, desc=(Lul;Lrv;Lsz;)Lul;, server=false, client=true}

MethodWrapper{name=c, desc=(Lul;)I, server=false, client=true}

MethodWrapper{name=b, desc=(Lul;)Lun;, server=false, client=true}

MethodWrapper{name=a, desc=(Lul;Lrv;Lsz;)Lul;, server=false, client=true}

MethodWrapper{name=a, desc=()Lan;, server=true, client=false}

MethodWrapper{name=a, desc=(Lan;)Lan;, server=true, client=false}

MethodWrapper{name=l, desc=()I, server=false, client=true}

MethodWrapper{name=m, desc=()F, server=false, client=true}

MethodWrapper{name=n, desc=()Z, server=false, client=true}

MethodWrapper{name=a, desc=(IIIF)Laea;, server=false, client=true}

MethodWrapper{name=o, desc=()Laea;, server=false, client=true}

MethodWrapper{name=a, desc=(Ljava/lang/String;)Lsv;, server=false, client=true}

MethodWrapper{name=b, desc=()J, server=true, client=false}

MethodWrapper{name=c, desc=()I, server=true, client=false}

MethodWrapper{name=d, desc=()I, server=true, client=false}

MethodWrapper{name=e, desc=()I, server=true, client=false}

MethodWrapper{name=f, desc=()J, server=true, client=false}

MethodWrapper{name=h, desc=()Lan;, server=true, client=false}

MethodWrapper{name=i, desc=()I, server=true, client=false}

MethodWrapper{name=j, desc=()Ljava/lang/String;, server=true, client=false}

MethodWrapper{name=k, desc=()I, server=true, client=false}

MethodWrapper{name=m, desc=()Z, server=true, client=false}

MethodWrapper{name=n, desc=()I, server=true, client=false}

MethodWrapper{name=o, desc=()Z, server=true, client=false}

MethodWrapper{name=p, desc=()I, server=true, client=false}

MethodWrapper{name=q, desc=()Luy;, server=true, client=false}

MethodWrapper{name=b, desc=(J)V, server=true, client=false}

MethodWrapper{name=a, desc=(III)V, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/lang/String;)V, server=true, client=false}

MethodWrapper{name=e, desc=(I)V, server=true, client=false}

MethodWrapper{name=a, desc=(Z)V, server=true, client=false}

MethodWrapper{name=f, desc=(I)V, server=true, client=false}

MethodWrapper{name=b, desc=(Z)V, server=true, client=false}

MethodWrapper{name=g, desc=(I)V, server=true, client=false}

MethodWrapper{name=r, desc=()Z, server=true, client=false}

MethodWrapper{name=s, desc=()Z, server=true, client=false}

MethodWrapper{name=t, desc=()Lva;, server=true, client=false}

MethodWrapper{name=a, desc=(Lva;)V, server=true, client=false}

MethodWrapper{name=u, desc=()Z, server=true, client=false}

MethodWrapper{name=v, desc=()Z, server=true, client=false}

MethodWrapper{name=d, desc=(Z)V, server=true, client=false}

Server -skip : adz  4 (<init> 2) 0 []

Client -skip : adz <init> 4 (<init> 2) 0 []

Server -skip : adz <init> 4 (<init> 2) 0 []

Client *add* : adz <init> 4 (<init> 2) 1 [<init>]

Client -skip : adz a 3 (<init> 2) 1 [<init>]

Server *add* : adz a 3 (<init> 2) 2 [<init>]

Server -skip : adz a 3 (accept 1) 2 [<init>]

Client *add* : adz a 3 (accept 1) 3 [a]

Client *add* : adz a 2 (accept 1) 4 [a]

Client *add* : adz a 1 (accept 1) 5 [a]

Server *add* : adz a 0 (accept 1) 6 [a]

MethodWrapper{name=<init>, desc=(ILjava/util/Random;Lmp;I)V, server=false, client=true}

MethodWrapper{name=<init>, desc=(Lady;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Lfj;Ljava/util/List;Ljava/util/Random;)V, server=false, client=true}

MethodWrapper{name=a, desc=(Ljava/util/List;Ljava/util/Random;IIIII)Ladz;, server=false, client=true}

MethodWrapper{name=a, desc=(Lrv;Ljava/util/Random;Lmp;)Z, server=false, client=true}

MethodWrapper{name=accept, desc=(Ljava/io/File;Ljava/lang/String;)Z, server=true, client=false}

Server -skip : ady  2 (<init> 10) 0 []

Client -skip : ady <init> 2 (<init> 10) 0 []

Server -skip : ady <init> 2 (<init> 10) 0 []

Client *add* : ady <init> 2 (<init> 10) 1 [<init>]

Client -skip : ady toString 1 (<init> 10) 1 [<init>]

Server *add* : ady toString 1 (<init> 10) 2 [<init>]

Server -skip : ady toString 1 (c 9) 2 [<init>]

Client *add* : ady toString 1 (c 9) 3 [toString]

Server *add* : ady toString 0 (c 9) 4 [toString]

Server *add* : ady toString 0 (d 8) 5 [toString]

Server *add* : ady toString 0 (a 7) 6 [toString]

Server *add* : ady toString 0 (b 6) 7 [toString]

Server *add* : ady toString 0 (a 5) 8 [toString]

Server *add* : ady toString 0 (f 4) 9 [toString]

Server *add* : ady toString 0 (a 3) 10 [toString]

Server *add* : ady toString 0 (a 2) 11 [toString]

Server *add* : ady toString 0 (a 1) 12 [toString]

MethodWrapper{name=<init>, desc=(Ljava/lang/String;)V, server=false, client=true}

MethodWrapper{name=<init>, desc=(Ljava/io/File;)V, server=true, client=false}

MethodWrapper{name=toString, desc=()Ljava/lang/String;, server=false, client=true}

MethodWrapper{name=c, desc=()I, server=true, client=false}

MethodWrapper{name=d, desc=()V, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/lang/String;Z)Laee;, server=true, client=false}

MethodWrapper{name=b, desc=(Ljava/lang/String;)Z, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/lang/String;Lim;)Z, server=true, client=false}

MethodWrapper{name=f, desc=(Ljava/lang/String;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/io/File;Ljava/lang/Iterable;Lvp;IILim;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/io/File;Ljava/io/File;Lvp;IILim;)V, server=true, client=false}

MethodWrapper{name=a, desc=(Ljava/io/File;Ljava/util/Collection;)V, server=true, client=false}

Server -skip : adx  11 (<init> 4) 0 []

Client -skip : adx <init> 11 (<init> 4) 0 []

Server -skip : adx <init> 11 (<init> 4) 0 []

Client *add* : adx <init> 11 (<init> 4) 1 [<init>]

Client -skip : adx a 10 (<init> 4) 1 [<init>]

Server *add* : adx a 10 (<init> 4) 2 [<init>]

Server -skip : adx a 10 (a 3) 2 [<init>]

Client *add* : adx a 10 (a 3) 3 [a]

Client *add* : adx a 9 (a 3) 4 [a]

Client *add* : adx a 8 (a 3) 5 [a]

Client *add* : adx a 7 (a 3) 6 [a]

Client *add* : adx a 6 (a 3) 7 [a]

Client *add* : adx a 5 (a 3) 8 [a]

Client -skip : adx b 4 (a 3) 8 [a]

Server *add* : adx b 4 (a 3) 9 [a]

Server *add* : adx b 4 (a 2) 10 [a]

Server *add* : adx b 4 (a 1) 11 [a]

Client *add* : adx b 4 (a 0) 12

Client *add* : adx b 3 (a 0) 13

Client *add* : adx a 2 (a 0) 14

Client *add* : adx <clinit> 1 (a 0) 15 [a]

MethodWrapper{name=<init>, desc=(IZ)V, server=false, client=true}

MethodWrapper{name=<init>, desc=(Ljava/io/File;Ljava/lang/String;Z)V, server=true, client=false}

MethodWrapper{name=a, desc=(II)I, server=false, client=true}

MethodWrapper{name=a, desc=(I)I, server=false, client=true}

MethodWrapper{name=a, desc=()Z, server=false, client=true}

MethodWrapper{name=a, desc=(Lrv;III)V, server=false, client=true}

MethodWrapper{name=a, desc=(ILjava/util/Random;)I, server=false, client=true}

MethodWrapper{name=a, desc=(Ljava/util/Random;)I, server=false, client=true}

MethodWrapper{name=a, desc=(Lxc;)Lwq;, server=true, client=false}

MethodWrapper{name=a, desc=(Laed;Lan;)V, server=true, client=false}

MethodWrapper{name=a, desc=()V, server=true, client=false}

MethodWrapper{name=b, desc=(I)I, server=false, client=true}

MethodWrapper{name=b, desc=()Z, server=false, client=true}

MethodWrapper{name=a, desc=(Ladg;IIII)Z, server=false, client=true}

MethodWrapper{name=<clinit>, desc=()V, server=false, client=true}

Server -skip : adw  6 (<init> 6) 0 []

Client -skip : adw <init> 6 (<init> 6) 0 []

Server -skip : adw <init> 6 (<init> 6) 0 []

Client *add* : adw <init> 6 (<init> 6) 1 [<init>]

Client *add* : adw <init> 5 (<init> 6) 2 [<init>]

Client -skip : adw a 4 (<init> 6) 2 [<init>]

eq: MethodWrapper{name=<init>, desc=(Ljava/lang/String;)V, server=true, client=true} MethodWrapper{name=<init>, desc=(Ljava/lang/String;)V, server=true, client=true}

Server *add* : adw a 4 (<init> 6) 2 [<init>]

Server -skip : adw a 4 (a 5) 2 [<init>]

Client *add* : adw a 4 (a 5) 3 [a]

Client *add* : adw a 3 (a 5) 4 [a]

Client *add* : adw a 2 (a 5) 5 [a]

Client *add* : adw a 1 (a 5) 6 [a]

Server *add* : adw a 0 (a 5) 7 [a]

Server *add* : adw a 0 (b 4) 8 [a]

Server *add* : adw a 0 (a 3) 9 [a]

Server *add* : adw a 0 (a 2) 10 [a]

Server *add* : adw a 0 (b 1) 11 [a]

MethodWrapper{name=<init>, desc=()V, server=false, client=true}

MethodWrapper{name=<init>, desc=(Ljava/lang/String;)V, server=true, client=true}

MethodWrapper{name=a, desc=(Ljava/io/DataInputStream;)V, server=false, client=true}

MethodWrapper{name=a, desc=(Ljava/io/DataOutputStream;)V, server=false, client=true}

MethodWrapper{name=a, desc=(Lkx;)V, server=false, client=true}

MethodWrapper{name=a, desc=()I, server=false, client=true}

MethodWrapper{name=a, desc=(Lan;)V, server=true, client=false}

MethodWrapper{name=b, desc=(Lan;)V, server=true, client=false}

MethodWrapper{name=a, desc=()V, server=true, client=false}

MethodWrapper{name=a, desc=(Z)V, server=true, client=false}

MethodWrapper{name=b, desc=()Z, server=true, client=false}

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 3

at java.util.ArrayList.add(ArrayList.java:367)

at cpw.mods.fml.common.asm.transformers.MCPMerger.processFields(MCPMerger.java:468)

at cpw.mods.fml.common.asm.transformers.MCPMerger.processClass(MCPMerger.java:384)

at cpw.mods.fml.common.asm.transformers.MCPMerger.processJar(MCPMerger.java:217)

at cpw.mods.fml.common.asm.transformers.MCPMerger.main(MCPMerger.java:107)

Decompile Exception: 1

[\spoiler]

Link to comment
Share on other sites

Lex:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 3

  at java.util.ArrayList.add(ArrayList.java:367)

  at cpw.mods.fml.common.asm.transformers.MCPMerger.processFields(MCPMerger.java:468)

  at cpw.mods.fml.common.asm.transformers.MCPMerger.processClass(MCPMerger.java:384)

  at cpw.mods.fml.common.asm.transformers.MCPMerger.processJar(MCPMerger.java:217)

  at cpw.mods.fml.common.asm.transformers.MCPMerger.main(MCPMerger.java:107)

Seems like a MCPMerger issue to me.

Read the EAQ before posting! OR ELSE!

 

This isn't building better software, its trying to grab a place in the commit list of a highly visible github project.

 

www.forgeessentials.com

 

Don't PM me, I don't check this account unless I have to.

Link to comment
Share on other sites

Aha - I think I figured it out.  I had a clean .jar, but I had also copied over a modded .jar.backup, which was loading into the .jar.  To prevent this from happening, I would recommend including a clause in your backup function to check the md5 sum of the .jar.backup.

Link to comment
Share on other sites

You mean like these ones?

    if not md5_c == clean_c:
        print 'Warning, Modified Client jar detected'
        print 'Continuing with decompile may produce unpredictable results'
        print 'If you continue, do not come to the FML or Forge team with decompile issues.'
        answer = raw_input('If you really want to continue, enter "Yes" ')
        if answer.lower() not in ['yes', 'y']:
            print 'You have not entered "Yes", aborting the decompile process'
            sys.exit(1)
            
    if not md5_s == clean_s:
        print 'Warning, Modified Server jar detected'
        print 'Continuing with decompile may produce unpredictable results'
        print 'If you continue, do not come to the FML or Forge team with decompile issues.'
        answer = raw_input('If you really want to continue, enter "Yes" ')
        if answer.lower() not in ['yes', 'y']:
            print 'You have not entered "Yes", aborting the decompile process'
            sys.exit(1)
    

Yaya, I added them in for a reason.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.