Skip to content

Commit

Permalink
Add MixinWorldChunkManagerTorment (fix compat between witchery and en…
Browse files Browse the repository at this point in the history
…dlessids)
  • Loading branch information
quentin452 committed Dec 29, 2024
1 parent b57f3bf commit 01ce4d6
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -806,9 +806,10 @@ public enum Mixin implements IMixin {

common_core_MixinGodZillaFix(Side.COMMON, m -> OptimizationsandTweaksConfig.enableMixinGodZillaFix,
"core.MixinGodZillaFix"),

common_witchery_MixinGenericEventsWitchery(Side.COMMON,
m -> OptimizationsandTweaksConfig.enableMixinGenericEventsWitchery, "witchery.MixinGenericEventsWitchery"),
common_witchery_MixinWorldProviderTorment(Side.COMMON,
m -> OptimizationsandTweaksConfig.enableMixinWorldProviderTorment, "witchery.MixinWorldProviderTorment"),
common_opis_MixinopisProfilerEvent(Side.COMMON,
require(TargetedMod.OPIS).and(m -> OptimizationsandTweaksConfig.enableMixinopisProfilerEvent),
"opis.MixinopisProfilerEvent"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,10 @@ public class OptimizationsandTweaksConfig {
@Config.DefaultBoolean(true)
@Config.RequiresWorldRestart
public static boolean MixinLOTRWorldProvider;
@Config.Comment("Fix Crash between Endlessids and dimensions from Witchery mod")
@Config.DefaultBoolean(true)
@Config.RequiresWorldRestart
public static boolean enableMixinWorldProviderTorment;
@Config.Comment("Avoid NullPointerException spam log caused by run() from CullTask from EntityCulling mod")
@Config.DefaultBoolean(true)
@Config.RequiresWorldRestart
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package fr.iamacat.optimizationsandtweaks.mixins.common.witchery;

import com.emoniph.witchery.dimension.WorldChunkManagerTorment;
import com.emoniph.witchery.dimension.WorldProviderTorment;
import fr.iamacat.optimizationsandtweaks.utilsformods.witchery.WorldChunkManagerTorment2;
import net.minecraft.world.WorldProvider;
import net.minecraft.world.chunk.IChunkProvider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;

@Mixin(WorldProviderTorment.class)
public abstract class MixinWorldProviderTorment extends WorldProvider {
@Overwrite(remap = false)
public IChunkProvider func_76555_c() {
return new WorldChunkManagerTorment2(this.worldObj);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package fr.iamacat.optimizationsandtweaks.utilsformods.witchery;

import com.emoniph.witchery.Witchery;
import com.emoniph.witchery.dimension.GenerateMaze;
import net.minecraft.block.Block;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.init.Blocks;
import net.minecraft.util.IProgressUpdate;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;

import java.util.List;

public class WorldChunkManagerTorment2 implements IChunkProvider {
public static final int NUM_LEVELS = 6;
public static final int BASE_LEVEL = 10;
public static final int LEVEL_HEIGHT = 15;
public static final int MAZE_SIZE = 31;
private final World world;

public WorldChunkManagerTorment2(World world) {
this.world = world;
}

@Override
public boolean chunkExists(int i, int j) {
return true;
}

@Override // FIX ENDLESSIDS COMPAT
public Chunk provideChunk(int x, int z) {
Chunk chunk = new Chunk(this.world, x, z);

for (int y = 0; y < 256; ++y) {
int l = y >> 4;
ExtendedBlockStorage extendedblockstorage = chunk.getBlockStorageArray()[l];
if (extendedblockstorage == null) {
extendedblockstorage = new ExtendedBlockStorage(y, !this.world.provider.hasNoSky);
chunk.getBlockStorageArray()[l] = extendedblockstorage;
}

for (int _x = 0; _x < 16; ++_x) {
for (int _z = 0; _z < 16; ++_z) {
Block blockId = Blocks.air;
extendedblockstorage.func_150818_a(_x, y & 15, _z, blockId);
extendedblockstorage.setExtBlockMetadata(_x, y & 15, _z, 0);
}
}
}

for (int i = 0; i < 16; ++i) {
for (int j = 0; j < 16; ++j) {
int biomeID = world.getWorldChunkManager().getBiomeGenAt((x << 4) + i, (z << 4) + j).biomeID;
BiomeGenBase[] biomesForGeneration = new BiomeGenBase[256];
biomesForGeneration[(j << 4) | i] = BiomeGenBase.getBiome(biomeID);
}
}

return chunk;
}
@Override
public Chunk loadChunk(int x, int z) {
return this.provideChunk(x, z);
}
@Override
public void populate(IChunkProvider ichunkprovider, int i, int j) {
if (i == 0 && j == 0) {
for(int slot = 0; slot < 6; ++slot) {
GenerateMaze maze = new GenerateMaze(31, 31, this.world.rand);
maze.display(this.world, i * 16 + 8 - 31, 10 + slot * 15, j * 16 + 8 - 2, Witchery.Blocks.FORCE, Witchery.Blocks.TORMENT_STONE);
}
}

}
@Override
public boolean saveChunks(boolean flag, IProgressUpdate iprogressupdate) {
return true;
}
@Override
public boolean unloadQueuedChunks() {
return false;
}
@Override
public boolean canSave() {
return true;
}
@Override
public String makeString() {
return "TormentChunk";
}
@Override
public List getPossibleCreatures(EnumCreatureType enumcreaturetype, int i, int j, int k) {
return null;
}
@Override
public ChunkPosition func_147416_a(World world, String s, int i, int j, int k) {
return null;
}
@Override
public int getLoadedChunkCount() {
return 0;
}
@Override
public void recreateStructures(int i, int j) {
}
@Override
public void saveExtraData() {
}
}

0 comments on commit 01ce4d6

Please sign in to comment.