Skip to content

Commit 97f66df

Browse files
committed
Another huge commit
New compat system, now it should be much more expandable! With the compat system also comes 2 new config options for compat logging. One toggles console compat logging, and the other toggles a feature where Spool can dump its changes (ASM, Mixin, etc) to a file for easier debugging. NTM Space should be compatible now, though it's not fully fixed yet. A bunch more changes were made, but I'm tired so that can be left for another time.
1 parent 8a909c9 commit 97f66df

30 files changed

+477
-80
lines changed

dependencies.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ dependencies {
4444
//implementation("com.falsepattern:endlessids-mc1.7.10:1.6.12:dev") { transitive = false }
4545
//implementation("com.falsepattern:falsepatternlib-mc1.7.10:1.9.0:dev")
4646

47+
//implementation(rfg.deobf("curse.maven:hbm-ntm-space-1121235:6229180"))
4748
//implementation(rfg.deobf("curse.maven:hbm-ntm-235439:6017897"))
4849

4950
//implementation("codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev")
@@ -56,6 +57,7 @@ dependencies {
5657
compileOnly("com.falsepattern:chunkapi-mc1.7.10:0.6.4")
5758
compileOnly("com.falsepattern:endlessids-mc1.7.10:1.6.12")
5859

60+
compileOnly(rfg.deobf("curse.maven:hbm-ntm-space-1121235:6229180"))
5961
compileOnly(rfg.deobf("curse.maven:hbm-ntm-235439:6017897"))
6062

6163
compileOnly("codechicken:CodeChickenLib:1.7.10-1.1.3.140:universal")

src/main/java/com/gamma/spool/asm/Names.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public static class Targets {
1010

1111
public static final String MIXINS = "com/gamma/spool/mixin";
1212
public static final String ASM = "com/gamma/spool/asm";
13+
public static final String CORE = "com/gamma/spool/core";
1314

1415
public static final String CHUNK = "net/minecraft/world/chunk/Chunk";
1516
public static final String CHUNK_OBF = "apx";

src/main/java/com/gamma/spool/asm/SpoolTransformerHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ public byte[] transform(String name, String transformedName, byte[] basicClass)
4040

4141
if (!ConcurrentConfig.enableConcurrentWorldAccess) return basicClass;
4242

43-
if (transformedName.contains(Names.Targets.MIXINS) || transformedName.contains(Names.Targets.ASM))
44-
return basicClass;
43+
if (transformedName.contains(Names.Targets.MIXINS) || transformedName.contains(Names.Targets.ASM)
44+
|| transformedName.contains(Names.Targets.CORE)) return basicClass;
4545

4646
// Get all valid transformers (transformers that would like to transform this class).
4747
ITransformer[] validTransformers = new ITransformer[transformers.length];

src/main/java/com/gamma/spool/asm/transformers/AtomicNibbleArrayTransformer.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.gamma.spool.asm.Names;
1111
import com.gamma.spool.asm.interfaces.IConstructorTransformer;
1212
import com.gamma.spool.asm.interfaces.IFieldTransformer;
13+
import com.gamma.spool.core.SpoolCompat;
1314
import com.gamma.spool.core.SpoolLogger;
1415
import com.gtnewhorizon.gtnhlib.asm.ClassConstantPoolParser;
1516

@@ -41,6 +42,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
4142
"Redirecting NibbleArray instantiation to AtomicNibbleArray in " + transformedName
4243
+ "."
4344
+ mn.name);
45+
SpoolCompat.logChange(
46+
"INSTN",
47+
"<init>",
48+
"NibbleArray",
49+
transformedName + "." + mn.name,
50+
"<init>",
51+
"AtomicNibbleArray");
4452

4553
BytecodeHelper.transformInstantiation(mn.instructions, typeNode, Names.Destinations.ATOMIC_NIBBLE);
4654
changed = true;
@@ -58,6 +66,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
5866
"Redirecting NibbleArray constructor to AtomicNibbleArray in " + transformedName
5967
+ "."
6068
+ mn.name);
69+
SpoolCompat.logChange(
70+
"CNSTR",
71+
"<init>",
72+
"NibbleArray",
73+
transformedName + "." + mn.name,
74+
"<init>",
75+
"AtomicNibbleArray");
6176

6277
BytecodeHelper.transformConstructor(mn.instructions, methodNode, Names.Destinations.ATOMIC_NIBBLE);
6378
}
@@ -99,6 +114,13 @@ public boolean transformFieldAccesses(String transformedName, MethodNode mn) {
99114
+ transformedName
100115
+ "."
101116
+ mn.name);
117+
SpoolCompat.logChange(
118+
"GET_F",
119+
fieldNode.name,
120+
"NibbleArray",
121+
transformedName + "." + mn.name,
122+
Names.Destinations.ATOMIC_NIBBLE_DATA,
123+
"AtomicNibbleArray");
102124

103125
BytecodeHelper.transformGetFieldToAtomic(
104126
mn.instructions,
@@ -131,6 +153,13 @@ public boolean transformFieldAccesses(String transformedName, MethodNode mn) {
131153
+ transformedName
132154
+ "."
133155
+ mn.name);
156+
SpoolCompat.logChange(
157+
"PUT_F",
158+
fieldNode.name,
159+
"NibbleArray",
160+
transformedName + "." + mn.name,
161+
Names.Destinations.ATOMIC_NIBBLE_DATA,
162+
"AtomicNibbleArray");
134163

135164
BytecodeHelper.transformPutFieldToAtomic(
136165
mn.instructions,

src/main/java/com/gamma/spool/asm/transformers/ConcurrentAnvilChunkLoaderTransformer.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.gamma.spool.asm.BytecodeHelper;
99
import com.gamma.spool.asm.Names;
1010
import com.gamma.spool.asm.interfaces.IConstructorTransformer;
11+
import com.gamma.spool.core.SpoolCompat;
1112
import com.gamma.spool.core.SpoolLogger;
1213
import com.gtnewhorizon.gtnhlib.asm.ClassConstantPoolParser;
1314

@@ -45,6 +46,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
4546
"Redirecting AnvilChunkLoader instantiation to ConcurrentAnvilChunkLoader in " + transformedName
4647
+ "."
4748
+ mn.name);
49+
SpoolCompat.logChange(
50+
"INSTN",
51+
"<init>",
52+
"AnvilChunkLoader",
53+
transformedName + "." + mn.name,
54+
"<init>",
55+
"ConcurrentAnvilChunkLoader");
4856

4957
BytecodeHelper.transformInstantiation(
5058
mn.instructions,
@@ -68,6 +76,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
6876
"Redirecting AnvilChunkLoader constructor to ConcurrentAnvilChunkLoader in " + transformedName
6977
+ "."
7078
+ mn.name);
79+
SpoolCompat.logChange(
80+
"CNSTR",
81+
"<init>",
82+
"AnvilChunkLoader",
83+
transformedName + "." + mn.name,
84+
"<init>",
85+
"ConcurrentAnvilChunkLoader");
7186

7287
BytecodeHelper.transformConstructor(
7388
mn.instructions,

src/main/java/com/gamma/spool/asm/transformers/ConcurrentChunkProviderTransformer.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.gamma.spool.asm.BytecodeHelper;
99
import com.gamma.spool.asm.Names;
1010
import com.gamma.spool.asm.interfaces.IConstructorTransformer;
11+
import com.gamma.spool.core.SpoolCompat;
1112
import com.gamma.spool.core.SpoolLogger;
1213
import com.gtnewhorizon.gtnhlib.asm.ClassConstantPoolParser;
1314

@@ -81,6 +82,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
8182
+ transformedName
8283
+ "."
8384
+ mn.name);
85+
SpoolCompat.logChange(
86+
"INSTN",
87+
"<init>",
88+
redirect[0],
89+
transformedName + "." + mn.name,
90+
"<init>",
91+
"Concurrent" + redirect[0]);
8492

8593
BytecodeHelper.transformInstantiation(mn.instructions, typeNode, redirect[2]);
8694

@@ -107,6 +115,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
107115
+ transformedName
108116
+ "."
109117
+ mn.name);
118+
SpoolCompat.logChange(
119+
"CNSTR",
120+
"<init>",
121+
redirect[0],
122+
transformedName + "." + mn.name,
123+
"<init>",
124+
"Concurrent" + redirect[0]);
110125

111126
BytecodeHelper.transformConstructor(mn.instructions, methodNode, redirect[2]);
112127

src/main/java/com/gamma/spool/asm/transformers/ConcurrentChunkTransformer.java

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
7070

7171
// EndlessIDs compatibility.
7272
SpoolCompat.earlyInitialization();
73-
final String targetClass = SpoolCompat.isEndlessIDsLoaded ? Names.Destinations.CONCURRENT_CHUNK_EID
73+
final String targetClass = SpoolCompat.isModLoaded("endlessids") ? Names.Destinations.CONCURRENT_CHUNK_EID
7474
: Names.Destinations.CONCURRENT_CHUNK;
7575

7676
boolean changed = false;
@@ -87,6 +87,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
8787
SpoolLogger.asmInfo(
8888
this,
8989
"Redirecting Chunk instantiation to ConcurrentChunk in " + transformedName + "." + mn.name);
90+
SpoolCompat.logChange(
91+
"INSTN",
92+
"<init>",
93+
"Chunk",
94+
transformedName + "." + mn.name,
95+
"<init>",
96+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
9097

9198
BytecodeHelper.transformInstantiation(mn.instructions, typeNode, targetClass);
9299

@@ -104,6 +111,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
104111
SpoolLogger.asmInfo(
105112
this,
106113
"Redirecting Chunk constructor to ConcurrentChunk in " + transformedName + "." + mn.name);
114+
SpoolCompat.logChange(
115+
"CNSTR",
116+
"<init>",
117+
"Chunk",
118+
transformedName + "." + mn.name,
119+
"<init>",
120+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
107121

108122
BytecodeHelper.transformConstructor(mn.instructions, methodNode, targetClass);
109123
}
@@ -123,7 +137,7 @@ public boolean transformFieldAccesses(String transformedName, MethodNode mn) {
123137

124138
// EndlessIDs compatibility.
125139
SpoolCompat.earlyInitialization();
126-
final String targetClass = SpoolCompat.isEndlessIDsLoaded ? Names.Destinations.CONCURRENT_CHUNK_EID
140+
final String targetClass = SpoolCompat.isModLoaded("endlessids") ? Names.Destinations.CONCURRENT_CHUNK_EID
127141
: Names.Destinations.CONCURRENT_CHUNK;
128142

129143
boolean changed = false;
@@ -151,6 +165,13 @@ public boolean transformFieldAccesses(String transformedName, MethodNode mn) {
151165
+ transformedName
152166
+ "."
153167
+ mn.name);
168+
SpoolCompat.logChange(
169+
"GETSF",
170+
fieldNode.name,
171+
"Chunk",
172+
transformedName + "." + mn.name,
173+
redirect[1],
174+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
154175

155176
// Get field and call get()
156177

@@ -179,6 +200,13 @@ public boolean transformFieldAccesses(String transformedName, MethodNode mn) {
179200
+ transformedName
180201
+ "."
181202
+ mn.name);
203+
SpoolCompat.logChange(
204+
"PUTSF",
205+
fieldNode.name,
206+
"Chunk",
207+
transformedName + "." + mn.name,
208+
redirect[1],
209+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
182210

183211
BytecodeHelper.transformStaticPutFieldToAtomic(
184212
mn.instructions,
@@ -205,6 +233,13 @@ public boolean transformFieldAccesses(String transformedName, MethodNode mn) {
205233
+ transformedName
206234
+ "."
207235
+ mn.name);
236+
SpoolCompat.logChange(
237+
"GET_F",
238+
fieldNode.name,
239+
"Chunk",
240+
transformedName + "." + mn.name,
241+
redirect[1],
242+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
208243

209244
BytecodeHelper
210245
.transformGetFieldToAtomic(mn.instructions, fieldNode, targetClass, redirect[1], redirect[2]);
@@ -227,6 +262,13 @@ public boolean transformFieldAccesses(String transformedName, MethodNode mn) {
227262
+ transformedName
228263
+ "."
229264
+ mn.name);
265+
SpoolCompat.logChange(
266+
"PUT_F",
267+
fieldNode.name,
268+
"Chunk",
269+
transformedName + "." + mn.name,
270+
redirect[1],
271+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
230272

231273
BytecodeHelper
232274
.transformPutFieldToAtomic(mn.instructions, fieldNode, targetClass, redirect[1], redirect[2]);

src/main/java/com/gamma/spool/asm/transformers/ConcurrentExtendedBlockStorageTransformer.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
2828

2929
// EndlessIDs compatibility.
3030
SpoolCompat.earlyInitialization();
31-
final String targetClass = SpoolCompat.isEndlessIDsLoaded ? Names.Destinations.CONCURRENT_EBS_EID
31+
final String targetClass = SpoolCompat.isModLoaded("endlessids") ? Names.Destinations.CONCURRENT_EBS_EID
3232
: Names.Destinations.CONCURRENT_EBS;
3333

3434
boolean changed = false;
@@ -49,6 +49,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
4949
+ transformedName
5050
+ "."
5151
+ mn.name);
52+
SpoolCompat.logChange(
53+
"CNSTR",
54+
"<init>",
55+
"ExtendedBlockStorage",
56+
transformedName + "." + mn.name,
57+
"<init>",
58+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
5259

5360
BytecodeHelper.transformInstantiation(mn.instructions, typeNode, targetClass);
5461

@@ -68,6 +75,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
6875
+ transformedName
6976
+ "."
7077
+ mn.name);
78+
SpoolCompat.logChange(
79+
"INSTN",
80+
"<init>",
81+
"ExtendedBlockStorage",
82+
transformedName + "." + mn.name,
83+
"<init>",
84+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
7185

7286
BytecodeHelper.transformConstructor(mn.instructions, methodNode, targetClass);
7387
}

src/main/java/com/gamma/spool/asm/transformers/EmptyChunkTransformer.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
2929

3030
// EndlessIDs compatibility.
3131
SpoolCompat.earlyInitialization();
32-
final String targetClass = SpoolCompat.isEndlessIDsLoaded ? Names.Destinations.CONCURRENT_CHUNK_EID
32+
final String targetClass = SpoolCompat.isModLoaded("endlessids") ? Names.Destinations.CONCURRENT_CHUNK_EID
3333
: Names.Destinations.CONCURRENT_CHUNK;
3434

3535
boolean changed = false;
@@ -51,6 +51,13 @@ public boolean[] transformConstructors(String transformedName, MethodNode mn) {
5151
+ transformedName
5252
+ "."
5353
+ mn.name);
54+
SpoolCompat.logChange(
55+
"CNSTR",
56+
"<init>",
57+
"EmptyChunk",
58+
transformedName + "." + mn.name,
59+
"<init>",
60+
targetClass.substring(targetClass.lastIndexOf('/') + 1));
5461

5562
BytecodeHelper.transformConstructor(mn.instructions, methodNode, targetClass);
5663

@@ -68,12 +75,13 @@ public boolean transformSuperclass(String transformedName, ClassNode cn) {
6875

6976
// EndlessIDs compatibility.
7077
SpoolCompat.earlyInitialization();
71-
final String targetClass = SpoolCompat.isEndlessIDsLoaded ? Names.Destinations.CONCURRENT_CHUNK_EID
78+
final String targetClass = SpoolCompat.isModLoaded("endlessids") ? Names.Destinations.CONCURRENT_CHUNK_EID
7279
: Names.Destinations.CONCURRENT_CHUNK;
7380

7481
if (BytecodeHelper.equalsAnyString(cn.name, Names.Targets.EMPTY_CHUNK, Names.Targets.EMPTY_CHUNK_OBF)) {
7582

7683
SpoolLogger.asmInfo(this, "Changing EmptyChunk superclass to ConcurrentChunk");
84+
SpoolCompat.logChange("SUPER", "class", "EmptyChunk", "EmptyChunk", "class", "ConcurrentChunk");
7785

7886
BytecodeHelper.replaceSuperclass(cn, targetClass);
7987

src/main/java/com/gamma/spool/compat/chunkapi/AnvilChunkLoaderCompat.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public static ConcurrentChunk readChunkFromNBT(World world, NBTTagCompound nbt)
4545
int z = nbt.getInteger("zPos");
4646

4747
ConcurrentChunk chunk;
48-
if (SpoolCompat.isEndlessIDsLoaded) chunk = new ConcurrentChunkWrapper(world, x, z);
48+
if (SpoolCompat.isModLoaded("endlessids")) chunk = new ConcurrentChunkWrapper(world, x, z);
4949
else chunk = new ConcurrentChunk(world, x, z);
5050

5151
chunk.isTerrainPopulated.set(nbt.getBoolean("TerrainPopulated"));
@@ -72,7 +72,7 @@ public static ConcurrentChunk readChunkFromNBT(World world, NBTTagCompound nbt)
7272

7373
ConcurrentExtendedBlockStorage subChunk;
7474

75-
if (SpoolCompat.isEndlessIDsLoaded) {
75+
if (SpoolCompat.isModLoaded("endlessids")) {
7676
subChunk = new ConcurrentExtendedBlockStorageWrapper(yLevel << 4, !chunk.worldObj.provider.hasNoSky);
7777
} else {
7878
subChunk = new ConcurrentExtendedBlockStorage(yLevel << 4, !chunk.worldObj.provider.hasNoSky);

0 commit comments

Comments
 (0)