From af278e6d7a995f923bef86edfeaba65a8dfc3b5f Mon Sep 17 00:00:00 2001 From: Sam Kirby Date: Fri, 23 Aug 2019 06:24:24 +0100 Subject: [PATCH] BiomeTweaker compatibility --- build.gradle | 1 + .../biometweaker/MixinCommandSetBiome.java | 55 +++++++++++++++++++ .../resources/mixins.jeid.modsupport.json | 1 + 3 files changed, 57 insertions(+) create mode 100644 src/main/java/org/dimdev/jeid/mixin/modsupport/biometweaker/MixinCommandSetBiome.java diff --git a/build.gradle b/build.gradle index dfa68da..c102a36 100644 --- a/build.gradle +++ b/build.gradle @@ -55,6 +55,7 @@ dependencies { compileOnly "2692:524:TofuCraftReload-0.0.2.1@jar" compileOnly "2636:492:tropicraft-MC1.12.2-7.1.8.105@jar" compileOnly "2724:738:gaiadimension-1.12.2-1.0.5@jar" + compileOnly "2572:722:BiomeTweaker-1.12.2-3.2.354@jar" } def travisBuildNumber = System.getenv("TRAVIS_BUILD_NUMBER") diff --git a/src/main/java/org/dimdev/jeid/mixin/modsupport/biometweaker/MixinCommandSetBiome.java b/src/main/java/org/dimdev/jeid/mixin/modsupport/biometweaker/MixinCommandSetBiome.java new file mode 100644 index 0000000..b435642 --- /dev/null +++ b/src/main/java/org/dimdev/jeid/mixin/modsupport/biometweaker/MixinCommandSetBiome.java @@ -0,0 +1,55 @@ +package org.dimdev.jeid.mixin.modsupport.biometweaker; + +import me.superckl.biometweaker.server.command.CommandSetBiome; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import org.dimdev.jeid.INewChunk; +import org.dimdev.jeid.Utils; +import org.dimdev.jeid.network.BiomeArrayMessage; +import org.dimdev.jeid.network.BiomeChangeMessage; +import org.dimdev.jeid.network.MessageManager; +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.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import java.util.Arrays; + +@Mixin(CommandSetBiome.class) +public class MixinCommandSetBiome { + @Inject(method = "func_184881_a", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/chunk/Chunk;func_76605_m()[B", remap = false), locals = LocalCapture.CAPTURE_FAILHARD, remap = false) + private void setBiomeArrayElement(MinecraftServer server, ICommandSender sender, String args[], CallbackInfo ci, BlockPos coord, World world, Biome gen, Integer i, int id, boolean blocks, int count, int x, int z, int realX, int realZ, Chunk chunk) { + Utils.LOGGER.info("setting biome at {}, {}", x, z); + ((INewChunk) chunk).getIntBiomeArray()[(z & 0xF) << 4 | x & 0xF] = id; + MessageManager.CHANNEL.sendToAllTracking(new BiomeChangeMessage(x, z, id), new NetworkRegistry.TargetPoint(world.provider.getDimension(), coord.getX(), coord.getY(), coord.getZ(), 256)); + } + + @Inject(method = "func_184881_a", at = @At(value = "INVOKE", target = "Ljava/util/Arrays;fill([BB)V"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD, remap = false) + private void setBiomeArray(MinecraftServer server, ICommandSender sender, String args[], CallbackInfo ci, BlockPos coord, World world, Biome gen, Integer i, int id, boolean blocks, int count, byte biomeArray[]) { + final int[] intBiomeArray = new int[256]; + Arrays.fill(intBiomeArray, id); + ChunkPos chunkPos = new ChunkPos(coord); + + for (int x = chunkPos.x - i; x <= chunkPos.x + i; x++) { + for (int z = chunkPos.z - i; z <= chunkPos.z + i; z++) { + ((INewChunk) world.getChunk(x, z)).setIntBiomeArray(Arrays.copyOf(intBiomeArray, intBiomeArray.length)); + MessageManager.CHANNEL.sendToAllTracking(new BiomeArrayMessage(x, z, Arrays.copyOf(intBiomeArray, intBiomeArray.length)), new NetworkRegistry.TargetPoint(world.provider.getDimension(), coord.getX(), coord.getY(), coord.getZ(), 256)); + count++; + } + } + + sender.sendMessage(new TextComponentTranslation("biometweaker.msg.setbiome.chunksuccess.text", count, gen.getBiomeName()).setStyle(new Style().setColor(TextFormatting.GOLD))); + + ci.cancel(); + } +} diff --git a/src/main/resources/mixins.jeid.modsupport.json b/src/main/resources/mixins.jeid.modsupport.json index 966a726..24429a5 100644 --- a/src/main/resources/mixins.jeid.modsupport.json +++ b/src/main/resources/mixins.jeid.modsupport.json @@ -11,6 +11,7 @@ "advancedrocketry.MixinPacketBiomeIDChange", "biomesoplenty.MixinBOPCommand", "biomesoplenty.MixinModBiomes", + "biometweaker.MixinCommandSetBiome", "bookshelf.MixinWorldUtils", "creepingnether.MixinCorruptorAbstract", "cyclopscore.MixinWorldHelpers",