Skip to content

Commit 398e94b

Browse files
committed
Fix crash with disableChunkTerrainGeneration and EndlessIDs
EndlessIDs disallows the suse of `getBiomeArray()` and `setBiomeArray()`. Those calls are replaced with `getBiomeShortArray()` and `.setBiomeShortArray()` From EndlessIDs' `ChunkBiomeHook`. Fixes: GTNewHorizons#876
1 parent b15e5a8 commit 398e94b

4 files changed

Lines changed: 57 additions & 0 deletions

File tree

dependencies.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ dependencies {
3434
transformedModCompileOnly(rfg.deobf("curse.maven:biomes-o-plenty-220318:2499612"))
3535
transformedModCompileOnly("curse.maven:cofh-core-69162:2388751")
3636
//transformedModCompileOnly('curse.maven:dragon-api-235591:3574508')
37+
transformedModCompileOnly(rfg.deobf("curse.maven:endlessids-665730:7585931"))
3738
transformedModCompileOnly("curse.maven:minefactory-reloaded-66672:2277486")
3839
transformedModCompileOnly(rfg.deobf('curse.maven:damage-indicators-mod-59489:2692129'))
3940
transformedModCompileOnly("curse.maven:extra-utilities-225561:2264384")

src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,7 +1221,13 @@ public enum Mixins implements IMixins {
12211221
DISABLE_CHUNK_TERRAIN_GENERATION(new MixinBuilder()
12221222
.addCommonMixins("minecraft.MixinChunkProviderServer_DisableTerrain")
12231223
.setApplyIf(() -> TweaksConfig.disableChunkTerrainGeneration)
1224+
.addExcludedMod(TargetedMod.ENDLESSIDS)
12241225
.setPhase(Phase.EARLY)),
1226+
// DISABLE_CHUNK_TERRAIN_GENERATION_ENDLESS_IDS(new MixinBuilder()
1227+
// .addCommonMixins("minecraft.MixinChunkProviderServer_DisableTerrain_EndlessIDs")
1228+
// .setApplyIf(() -> TweaksConfig.disableChunkTerrainGeneration)
1229+
// .addRequiredMod(TargetedMod.ENDLESSIDS)
1230+
// .setPhase(Phase.EARLY)),
12251231
DISABLE_WORLD_TYPE_CHUNK_POPULATION(new MixinBuilder("Disable chunk population tied to chunk generation (ores/structure)")
12261232
.addCommonMixins("minecraft.MixinChunkProviderServer_DisablePopulation")
12271233
.setApplyIf(() -> TweaksConfig.disableWorldTypeChunkPopulation)

src/main/java/com/mitchej123/hodgepodge/mixins/TargetedMod.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public enum TargetedMod implements ITargetMod {
3131
// transformer that got removed and added via mixin in this mod, so we don't
3232
// load our mixins if an old version of the mod that contains this class is loaded
3333
ENDERCORE_WITH_MODLIST(null, null, "com.enderio.core.common.transform.EnderCoreTransformerClient"),
34+
//ENDLESSIDS("endlessids"),
35+
ENDLESSIDS("com.falsepattern.endlessids.EndlessIDs", "endlessids"),
3436
ETFURUMREQUIEM("ganymedes01.etfuturum.mixinplugin.EtFuturumEarlyMixins", "etfuturum"),
3537
EXTRATIC("ExtraTiC"),
3638
EXTRA_UTILITIES("ExtraUtilities"),
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.mitchej123.hodgepodge.mixins.early.minecraft;
2+
3+
import java.util.Arrays;
4+
5+
import net.minecraft.block.Block;
6+
import net.minecraft.init.Blocks;
7+
import net.minecraft.world.chunk.Chunk;
8+
import net.minecraft.world.gen.ChunkProviderServer;
9+
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Unique;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
14+
15+
import com.falsepattern.endlessids.mixin.helpers.ChunkBiomeHook;
16+
17+
@Mixin(ChunkProviderServer.class)
18+
public class MixinChunkProviderServer_DisableTerrain_EndlessIDs {
19+
20+
@Unique
21+
private static final int CHUNK_WIDTH = 16;
22+
23+
@Unique
24+
private static final int CHUNK_LENGTH = 16;
25+
26+
@Unique
27+
private static final int CHUNK_HEIGHT = 256;
28+
29+
@Unique
30+
private static final int BLOCKS_TOTAL = CHUNK_LENGTH * CHUNK_WIDTH * CHUNK_HEIGHT;
31+
32+
@ModifyVariable(
33+
at = @At(
34+
value = "INVOKE_ASSIGN",
35+
target = "Lnet/minecraft/world/chunk/IChunkProvider;provideChunk(II)Lnet/minecraft/world/chunk/Chunk;"),
36+
method = "originalLoadChunk")
37+
public Chunk hodgepodge$disableTerrainEndlessIds(Chunk chunk) {
38+
final Block[] ids = new Block[BLOCKS_TOTAL];
39+
final byte[] metadata = new byte[BLOCKS_TOTAL];
40+
Arrays.fill(ids, Blocks.air);
41+
42+
short[] biomeArray = ((ChunkBiomeHook) chunk).getBiomeShortArray();
43+
Chunk newChunk = new Chunk(chunk.worldObj, ids, metadata, chunk.xPosition, chunk.zPosition);
44+
((ChunkBiomeHook) chunk).setBiomeShortArray(biomeArray);
45+
46+
return newChunk;
47+
}
48+
}

0 commit comments

Comments
 (0)