From 3ceaa51119e4bcd99ec92742f693bf86e6614d8a Mon Sep 17 00:00:00 2001 From: FalsePattern <30945458+FalsePattern@users.noreply.github.com> Date: Mon, 11 Jul 2022 19:55:53 +0200 Subject: [PATCH] Extra Utilities compat --- README.MD | 1 + dependencies.gradle | 1 + .../ChunkProviderEndOfTimeMixin.java | 54 +++++++++++++++++++ .../ChunkProviderUnderdarkMixin.java | 48 +++++++++++++++++ .../endlessids/mixin/plugin/Mixin.java | 4 ++ .../endlessids/mixin/plugin/TargetedMod.java | 1 + 6 files changed, 109 insertions(+) create mode 100644 src/main/java/com/falsepattern/endlessids/mixin/mixins/common/extrautilities/ChunkProviderEndOfTimeMixin.java create mode 100644 src/main/java/com/falsepattern/endlessids/mixin/mixins/common/extrautilities/ChunkProviderUnderdarkMixin.java diff --git a/README.MD b/README.MD index 05b1f2d..a7da574 100644 --- a/README.MD +++ b/README.MD @@ -22,6 +22,7 @@ This mod also contains patches for the following mods: - Biomes O' Plenty - CoFH Lib - DragonAPI +- Extra Utilities - GalactiCraft - Immersive Cavegen - More Fun Quicksand Mod diff --git a/dependencies.gradle b/dependencies.gradle index 891f751..973de9c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -24,6 +24,7 @@ dependencies { compile(deobfMaven(curseMaven, "curse.maven:thaumcraft-223628:2227552")) // 4.2.3.5 compile(deobfMaven(curseMaven, "curse.maven:baubles-227083:2224857")) // 1.0.1.10, dependency of thaumcraft compile(deobfMaven(curseMaven, "curse.maven:antiqueatlas-227795:2454232")) // 4.4.4 + compile("curse.maven:extrautilities-225561:2264384") // 1.2.12 compile("com.github.embeddedt:ArchaicFix:be8666cb2dbf2e0a8b799e88cef3c0d12e5d4911:dev") compileOnly(deobf("https://micdoodle8.com/new-builds/GC-1.7/504/GalacticraftCore-1.7-3.0.12.504.jar")) } diff --git a/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/extrautilities/ChunkProviderEndOfTimeMixin.java b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/extrautilities/ChunkProviderEndOfTimeMixin.java new file mode 100644 index 0000000..77e059b --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/extrautilities/ChunkProviderEndOfTimeMixin.java @@ -0,0 +1,54 @@ +package com.falsepattern.endlessids.mixin.mixins.common.extrautilities; + +import com.falsepattern.endlessids.EndlessIDs; +import com.falsepattern.endlessids.mixin.helpers.IChunkMixin; +import com.rwtema.extrautils.worldgen.endoftime.ChunkProviderEndOfTime; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.chunk.Chunk; + +import java.util.Arrays; + +@Mixin(value = ChunkProviderEndOfTime.class, + remap = false) +public abstract class ChunkProviderEndOfTimeMixin { + private int id; + private Chunk chunk; + + @Redirect(method = "provideChunk", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/chunk/Chunk;getBiomeArray()[B", + remap = true), + remap = true, + require = 1) + private byte[] setBiomesTweaked1(Chunk instance) { + chunk = instance; + return EndlessIDs.BIOME_ARRAY_PLACEHOLDER; + } + + @Redirect(method = "provideChunk", + at = @At(value = "FIELD", + target = "Lnet/minecraft/world/biome/BiomeGenBase;biomeID:I", + remap = true), + remap = true) + private int setBiomesTweaked2(BiomeGenBase instance) { + return id = instance.biomeID; + } + + @Redirect(method = "provideChunk", + at = @At(value = "INVOKE", + target = "Ljava/util/Arrays;fill([BB)V"), + remap = true, + require = 1) + private void setBiomesTweaked3(byte[] bytes, byte b) { + try { + Arrays.fill(((IChunkMixin) chunk).getBiomeShortArray(), (short) id); + } finally { + chunk = null; + id = -1; + } + } +} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/extrautilities/ChunkProviderUnderdarkMixin.java b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/extrautilities/ChunkProviderUnderdarkMixin.java new file mode 100644 index 0000000..d0d524b --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/extrautilities/ChunkProviderUnderdarkMixin.java @@ -0,0 +1,48 @@ +package com.falsepattern.endlessids.mixin.mixins.common.extrautilities; + +import com.falsepattern.endlessids.mixin.helpers.BiomePatchHelper; +import com.rwtema.extrautils.worldgen.Underdark.ChunkProviderUnderdark; +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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import net.minecraft.block.Block; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.chunk.Chunk; + +@Mixin(value = ChunkProviderUnderdark.class, + remap = false) +public abstract class ChunkProviderUnderdarkMixin { + private BiomeGenBase[] bgb; + + @SuppressWarnings("InvalidInjectorMethodSignature") + @Inject(method = "provideChunk", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/chunk/Chunk;getBiomeArray()[B", + shift = At.Shift.BEFORE, + remap = true), + locals = LocalCapture.CAPTURE_FAILHARD, + remap = true, + require = 1) + private void setBiomesTweaked1(int par1, int par2, CallbackInfoReturnable cir, Chunk chunk, Block[] arr, int spire_x, int spire_z, Block stone_type, BiomeGenBase[] abiomegenbase) { + bgb = abiomegenbase; + + } + + @Redirect(method = "provideChunk", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/chunk/Chunk;getBiomeArray()[B", + remap = true), + remap = true, + require = 1) + private byte[] setBiomesTweaked2(Chunk chunk) { + try { + return BiomePatchHelper.getBiomeArrayTweaked(chunk, bgb); + } finally { + bgb = null; + } + } +} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java index 674fa68..b0104a5 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java @@ -98,6 +98,10 @@ public enum Mixin implements IMixin { DragonAPIBlockPropertiesMixin(Side.COMMON, require(TargetedMod.DRAGONAPI), "dragonapi.BlockPropertiesMixin"), DragonAPIIDTypeMixin(Side.COMMON, require(TargetedMod.DRAGONAPI), "dragonapi.IDTypeMixin"), //endregion DragonAPI->common + //region ExtraUtilities->common + ChunkProviderEndOfTimeMixin(Side.COMMON, require(TargetedMod.EXTRAUTILITIES), "extrautilities.ChunkProviderEndOfTimeMixin"), + ChunkProviderUnderdarkMixin(Side.COMMON, require(TargetedMod.EXTRAUTILITIES), "extrautilities.ChunkProviderUnderdarkMixin"), + //endregion ExtraUtilities->common //region GalactiCraftCore->common GalactiCraftCoreConfigManagerCoreMixin(Side.COMMON, require(TargetedMod.GALACTICRAFTCORE), "galacticraft.ConfigManagerCoreMixin"), diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java index 82c77e9..47f48fc 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java @@ -17,6 +17,7 @@ public enum TargetedMod implements ITargetedMod { BOP("Biomes O' Plenty", true, startsWith("biomesoplenty-")), COFHLIB("CoFH Lib", true, startsWith("cofhlib-")), DRAGONAPI("DragonAPI", false, startsWith("dragonapi")), + EXTRAUTILITIES("Extra Utilities", true, startsWith("extrautilities-")), GALACTICRAFTCORE("GalactiCraftCore", false, startsWith("galacticraftcore")), ICG("Immersive Cavegen", true, startsWith("immersivecavegen")), MFQM("More Fun Quicksand Mod", false, startsWith("morefunquicksandmod-")),