Attempt to fix LOTR mod compat again

This commit is contained in:
FalsePattern committed 2024-06-07 19:56:57 +02:00
1 parent 410d344b84
commit c8de7349dc
7 files changed
+96 -1

No files matched your search

@@ -3,6 +3,7 @@ package com.falsepattern.endlessids.asm;
import com.falsepattern.endlessids.asm.transformer.ChunkProviderSuperPatcher;
import com.falsepattern.endlessids.asm.transformer.FmlRegistry;
import com.falsepattern.endlessids.asm.transformer.GameDataAccelerator;
import com.falsepattern.endlessids.asm.transformer.LOTRFieldExposer;
import com.falsepattern.endlessids.asm.transformer.SpaceCoreModInfoGenerator;
import com.falsepattern.endlessids.config.GeneralConfig;
import lombok.val;
@@ -21,6 +22,9 @@ public enum ClassEdit {
() -> GeneralConfig.extendBlockItem,
"cpw.mods.fml.common.registry.GameData",
"cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry"),
LOTRFieldExposer(new LOTRFieldExposer(),
() -> GeneralConfig.extendBiome,
"lotr.common.network.LOTRPacketBiomeVariantsWatch"),
SpaceCoreModInfoGenerator(new SpaceCoreModInfoGenerator(), () -> true,
"com.spacechase0.minecraft.spacecore.mcp.ModInfoGenerator"),
GameDataAccelerator(new GameDataAccelerator(), () -> GeneralConfig.enableRegistryPerformanceTweak, "cpw.mods.fml.common.registry.GameData"),
@@ -0,0 +1,20 @@
package com.falsepattern.endlessids.asm.transformer;
import com.falsepattern.endlessids.asm.IClassNodeTransformer;
import lombok.val;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.ClassNode;
public class LOTRFieldExposer implements IClassNodeTransformer {
@Override
public void transform(ClassNode classNode, boolean obfuscated) {
for (val field: classNode.fields) {
if ("chunkX".equals(field.name) ||
"chunkZ".equals(field.name) ||
"variants".equals(field.name)) {
field.access &= ~Opcodes.ACC_PRIVATE;
field.access |= Opcodes.ACC_PUBLIC;
}
}
}
}
@@ -0,0 +1,19 @@
package com.falsepattern.endlessids.mixin.mixins.common.biome.lotr;
import com.falsepattern.endlessids.constants.ExtendedConstants;
import com.falsepattern.endlessids.constants.VanillaConstants;
import lotr.common.LOTRDimension;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
@Mixin(value = LOTRDimension.class,
remap = false)
public abstract class LOTRDimensionMixin {
@ModifyConstant(method = "<init>",
constant = @Constant(intValue = VanillaConstants.biomeIDCount),
require = 1)
private int extendBiomes(int constant) {
return ExtendedConstants.biomeIDCount;
}
}
@@ -16,7 +16,7 @@ import cpw.mods.fml.common.network.simpleimpl.MessageContext;
@Mixin(value = LOTRPacketBiomeVariantsWatch.Handler.class,
remap = false)
public abstract class LOTRPacketBiomeVariantsWatchHandler {
public abstract class LOTRPacketBiomeVariantsWatchHandlerMixin {
/**
* @author FalsePattern
@@ -0,0 +1,49 @@
package com.falsepattern.endlessids.mixin.mixins.common.biome.lotr;
import com.falsepattern.endlessids.constants.ExtendedConstants;
import com.falsepattern.endlessids.mixin.helpers.ChunkBiomeHook;
import lombok.val;
import lotr.common.LOTRDimension;
import lotr.common.world.LOTRWorldProvider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import net.minecraft.world.WorldProvider;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.chunk.Chunk;
import static com.falsepattern.endlessids.constants.ExtendedConstants.biomeIDMask;
@Mixin(LOTRWorldProvider.class)
public abstract class LOTRWorldProviderMixin extends WorldProvider {
@Shadow public abstract LOTRDimension getLOTRDimension();
/**
* @author FalsePattern
* @reason ID extension
*/
@Overwrite(remap = false)
public BiomeGenBase getBiomeGenForCoords(int x, int z) {
if (worldObj.blockExists(x, 0, z)) {
val chunk = worldObj.getChunkFromBlockCoords(x, z);
if (chunk != null) {
val extendedChunk = (ChunkBiomeHook)chunk;
val biomeArray = extendedChunk.getBiomeShortArray();
int chunkX = x & 15;
int chunkZ = z & 15;
int biomeID = biomeArray[chunkZ << 4 | chunkX] & biomeIDMask;
if (biomeID == 255) {
val biome = worldChunkMgr.getBiomeGenAt((chunk.xPosition << 4) + chunkX, (chunk.zPosition << 4) + chunkZ);
biomeID = biome.biomeID;
biomeArray[chunkZ << 4 | chunkX] = (short)(biomeID & biomeIDMask);
}
val dim = this.getLOTRDimension();
return dim.biomeList[biomeID] == null ? dim.biomeList[0] : dim.biomeList[biomeID];
}
}
return this.worldChunkMgr.getBiomeGenAt(x, z);
}
}
@@ -123,8 +123,10 @@ public enum Mixin implements IMixin {
LOTRBiomeVariantStorageMixin(Side.COMMON, condition(() -> GeneralConfig.extendBiome).and(require(TargetedMod.LOTR)), "biome.lotr.LOTRBiomeVariantStorageMixin"),
LOTRChunkProviderMixin(Side.COMMON, condition(() -> GeneralConfig.extendBiome).and(require(TargetedMod.LOTR)), "biome.lotr.LOTRChunkProviderMixin"),
LOTRChunkProviderUtumnoMixin(Side.COMMON, condition(() -> GeneralConfig.extendBiome).and(require(TargetedMod.LOTR)), "biome.lotr.LOTRChunkProviderUtumnoMixin"),
LOTRDimensionMixin(Side.COMMON, condition(() -> GeneralConfig.extendBiome).and(require(TargetedMod.LOTR)), "biome.lotr.LOTRDimensionMixin"),
LOTRPacketBiomeVariantsWatchHandlerMixin(Side.COMMON, condition(() -> GeneralConfig.extendBiome).and(require(TargetedMod.LOTR)), "biome.lotr.LOTRPacketBiomeVariantsWatchHandlerMixin"),
LOTRWorldChunkManagerMixin(Side.COMMON, condition(() -> GeneralConfig.extendBiome).and(require(TargetedMod.LOTR)), "biome.lotr.LOTRWorldChunkManagerMixin"),
LOTRWorldProviderMixin(Side.COMMON, condition(() -> GeneralConfig.extendBiome).and(require(TargetedMod.LOTR)), "biome.lotr.LOTRWorldProviderMixin"),
//endregion LOTR
//region NaturesCompass
NaturesCompassBiomeUtilsMixin(Side.COMMON, condition(() -> GeneralConfig.extendBiome).and(require(TargetedMod.NATURESCOMPASS)), "biome.naturescompass.BiomeUtilsMixin"),