more Reika mods compat (fixes #26)

This commit is contained in:
FalsePattern committed 2022-07-23 21:39:29 +02:00
1 parent 4233905892
commit 973a178fad
7 files changed
+121 -5

No files matched your search

@@ -17,7 +17,8 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
acceptedMinecraftVersions = "[1.7.10]",
dependencies = "required-after:falsepatternlib@[0.9.2,);after:antiidconflict")
public class EndlessIDs {
public static final byte[] BIOME_ARRAY_PLACEHOLDER = new byte[0];
public static final byte[] ZERO_LENGTH_BIOME_ARRAY_PLACEHOLDER = new byte[0];
public static final byte[] FAKE_BIOME_ARRAY_PLACEHOLDER = new byte[256];
public static final Logger LOG = LogManager.getLogger(Tags.MODNAME);
@SidedProxy(clientSide = Tags.GROUPNAME + ".patching.ClientManager",
@@ -7,7 +7,7 @@ import net.minecraft.world.chunk.Chunk;
import java.util.function.IntFunction;
import static com.falsepattern.endlessids.EndlessIDs.BIOME_ARRAY_PLACEHOLDER;
import static com.falsepattern.endlessids.EndlessIDs.ZERO_LENGTH_BIOME_ARRAY_PLACEHOLDER;
public class BiomePatchHelper {
public static byte[] getBiomeArrayTweaked(Chunk chunk, IntFunction<BiomeGenBase> biomesForGeneration) {
@@ -16,7 +16,7 @@ public class BiomePatchHelper {
for (int i = 0; i < chunkBiomes.length; ++i) {
chunkBiomes[i] = (short) biomesForGeneration.apply(i).biomeID;
}
return BIOME_ARRAY_PLACEHOLDER;
return ZERO_LENGTH_BIOME_ARRAY_PLACEHOLDER;
}
public static byte[] getBiomeArrayTweaked(Chunk chunk, BiomeGenBase[] biomesForGeneration) {
@@ -25,6 +25,6 @@ public class BiomePatchHelper {
for (int i = 0; i < chunkBiomes.length; ++i) {
chunkBiomes[i] = (short) biomesForGeneration[i].biomeID;
}
return BIOME_ARRAY_PLACEHOLDER;
return ZERO_LENGTH_BIOME_ARRAY_PLACEHOLDER;
}
}
@@ -0,0 +1,35 @@
package com.falsepattern.endlessids.mixin.mixins.common.dragonapi;
import Reika.DragonAPI.Libraries.World.ReikaChunkHelper;
import com.falsepattern.endlessids.EndlessIDs;
import com.falsepattern.endlessids.mixin.helpers.IChunkMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import net.minecraft.world.chunk.Chunk;
@Mixin(value = ReikaChunkHelper.class,
remap = false)
public abstract class ReikaChunkHelperMixin {
private static short[] biomeArray;
@Redirect(method = "copyChunk",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/chunk/Chunk;setBiomeArray([B)V",
remap = true),
require = 1)
private static void customSet(Chunk chunk, byte[] p_76616_1_) {
((IChunkMixin)chunk).setBiomeShortArray(biomeArray);
biomeArray = null;
}
@Redirect(method = "copyChunk",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/chunk/Chunk;getBiomeArray()[B",
remap = true),
require = 1)
private static byte[] customGet(Chunk chunk) {
biomeArray = ((IChunkMixin)chunk).getBiomeShortArray();
return EndlessIDs.ZERO_LENGTH_BIOME_ARRAY_PLACEHOLDER;
}
}
@@ -0,0 +1,77 @@
package com.falsepattern.endlessids.mixin.mixins.common.dragonapi;
import Reika.DragonAPI.Libraries.World.ReikaWorldHelper;
import com.falsepattern.endlessids.EndlessIDs;
import com.falsepattern.endlessids.mixin.helpers.IChunkMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.chunk.Chunk;
@Mixin(value = ReikaWorldHelper.class,
remap = false)
public abstract class ReikaWorldHelperMixin {
@Redirect(method = {"setBiomeForXZ", "setBiomeAndBlocksForXZ"},
at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/chunk/Chunk;getBiomeArray()[B",
remap = true),
require = 2)
private static byte[] getFake(Chunk instance) {
return EndlessIDs.FAKE_BIOME_ARRAY_PLACEHOLDER;
}
@Redirect(method = {"setBiomeForXZ", "setBiomeAndBlocksForXZ"},
at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/chunk/Chunk;setBiomeArray([B)V",
remap = true),
require = 2)
private static void noSet(Chunk instance, byte[] arr) {
}
@Inject(method = "setBiomeForXZ",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/chunk/Chunk;setChunkModified()V",
remap = true),
locals = LocalCapture.CAPTURE_FAILHARD,
require = 1)
private static void customLogicSetBiome(World world, int x, int z, BiomeGenBase biome, CallbackInfo ci, Chunk ch, int ax, int az, byte[] biomes, int index) {
((IChunkMixin)ch).getBiomeShortArray()[index] = (short) biome.biomeID;
}
private static int fromBiomeID;
@Inject(method = "setBiomeAndBlocksForXZ",
at = @At(value = "FIELD",
target = "Lnet/minecraft/world/biome/BiomeGenBase;biomeList:[Lnet/minecraft/world/biome/BiomeGenBase;",
remap = true),
locals = LocalCapture.CAPTURE_FAILEXCEPTION,
require = 1)
private static void captureIndexSetBiomeAndBlocks(World world, int x, int z, BiomeGenBase biome, CallbackInfo ci, Chunk ch, int ax, int az, byte[] biomes, int index) {
fromBiomeID = ((IChunkMixin)ch).getBiomeShortArray()[index];
}
@ModifyVariable(method = "setBiomeAndBlocksForXZ",
at = @At("STORE"),
ordinal = 1)
private static BiomeGenBase changeBiomeFrom(BiomeGenBase value) {
return BiomeGenBase.getBiome(fromBiomeID);
}
@Inject(method = "setBiomeAndBlocksForXZ",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/chunk/Chunk;setBiomeArray([B)V",
remap = true),
locals = LocalCapture.CAPTURE_FAILEXCEPTION,
require = 1)
private static void customLogicSetBiomeAndBlocks(World world, int x, int z, BiomeGenBase biome, CallbackInfo ci, Chunk ch, int ax, int az, byte[] biomes, int index, BiomeGenBase from) {
((IChunkMixin)ch).getBiomeShortArray()[index] = (short) biome.biomeID;
}
}
@@ -26,7 +26,7 @@ public abstract class ChunkProviderEndOfTimeMixin {
require = 1)
private byte[] setBiomesTweaked1(Chunk instance) {
chunk = instance;
return EndlessIDs.BIOME_ARRAY_PLACEHOLDER;
return EndlessIDs.ZERO_LENGTH_BIOME_ARRAY_PLACEHOLDER;
}
@Redirect(method = "provideChunk",
@@ -107,6 +107,8 @@ public enum Mixin implements IMixin {
DragonAPIGenLayerRiverEventMixin(Side.COMMON, require(TargetedMod.DRAGONAPI), "dragonapi.GenLayerRiverEventMixin"),
DragonAPIBlockPropertiesMixin(Side.COMMON, require(TargetedMod.DRAGONAPI), "dragonapi.BlockPropertiesMixin"),
DragonAPIIDTypeMixin(Side.COMMON, require(TargetedMod.DRAGONAPI), "dragonapi.IDTypeMixin"),
ReikaChunkHelperMixin(Side.COMMON, require(TargetedMod.DRAGONAPI), "dragonapi.ReikaChunkHelperMixin"),
ReikaWorldHelperMixin(Side.COMMON, require(TargetedMod.DRAGONAPI), "dragonapi.ReikaWorldHelperMixin"),
//endregion DragonAPI->common
//region EnhancedBiomes
EBBiomeIDsMixin(Side.COMMON, require(TargetedMod.EB), "eb.BiomeIDsMixin"),