From 74b65aed291b288bba81e013074916f714067ec4 Mon Sep 17 00:00:00 2001 From: Exsolutus Date: Tue, 27 Feb 2024 13:40:22 -0500 Subject: [PATCH 1/2] Update CubicChunks support for version 1271 --- build.gradle | 2 +- .../modsupport/cubicchunks/MixinCube.java | 66 ++++++------- .../cubicchunks/MixinIONbtReader.java | 53 ++++++---- .../cubicchunks/MixinIONbtWriter.java | 4 +- .../cubicchunks/MixinWorldEncoder.java | 99 +++++++++++-------- .../jeid/modsupport/cubicchunks/INewCube.java | 4 +- 6 files changed, 130 insertions(+), 98 deletions(-) diff --git a/build.gradle b/build.gradle index e513ec9..7f2eeb1 100644 --- a/build.gradle +++ b/build.gradle @@ -145,7 +145,7 @@ dependencies { compileOnly rfg.deobf( "curse.maven:bewitchment-285439:3256343" ) compileOnly rfg.deobf( "curse.maven:compact-machines-224218:2707509") - compileOnly rfg.deobf( "curse.maven:CubicChunks-292243:3546640" ) + compileOnly rfg.deobf( "curse.maven:CubicChunks-292243:5135427" ) compileOnly rfg.deobf( "curse.maven:RTGU-648514:4396319" ) } diff --git a/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinCube.java b/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinCube.java index 95771ff..6b0e0ba 100644 --- a/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinCube.java +++ b/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinCube.java @@ -12,18 +12,17 @@ import org.dimdev.jeid.JEID; import org.dimdev.jeid.modsupport.cubicchunks.INewCube; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.ModifyVariable; import javax.annotation.Nonnull; import javax.annotation.Nullable; @Pseudo @Mixin(Cube.class) -public abstract class MixinCube implements INewCube { +@Implements(@Interface(iface = INewCube.class, prefix = "int$")) +public abstract class MixinCube { @Shadow @Final @Nonnull private World world; @Shadow @@ -31,40 +30,41 @@ public abstract class MixinCube implements INewCube { private static final byte errorBiomeID = (byte) Biome.REGISTRY.getIDForObject(JEID.errorBiome); - @Nullable private int[] intBlockBiomeArray = null; + @Nullable private int[] blockBiomeArray; - @Nullable - @Override - public int[] getIntBiomeArray() { - return this.intBlockBiomeArray; - } - - @Override - public void setIntBiomeArray(int[] intBiomeArray) { - if (this.intBlockBiomeArray == null) - this.intBlockBiomeArray = intBiomeArray; - if (this.intBlockBiomeArray.length != intBiomeArray.length) - CubicChunks.LOGGER.warn("Could not set level cube biomes, array length is {} instead of {}", Integer.valueOf(intBiomeArray.length), - Integer.valueOf(this.intBlockBiomeArray.length)); - System.arraycopy(intBiomeArray, 0, this.intBlockBiomeArray, 0, this.intBlockBiomeArray.length); - } - @Overwrite(remap = false) public Biome getBiome(BlockPos pos) { - if (this.intBlockBiomeArray == null) + if (this.blockBiomeArray == null) return this.getColumn().getBiome(pos, world.getBiomeProvider()); - int biomeX = Coords.blockToBiome(pos.getX()); - int biomeZ = Coords.blockToBiome(pos.getZ()); - int biomeId = this.intBlockBiomeArray[AddressTools.getBiomeAddress(biomeX, biomeZ)] & 255; - Biome biome = Biome.getBiome(biomeId); - return biome; + + int biomeX = Coords.blockToLocalBiome3d(pos.getX()); + int biomeY = Coords.blockToLocalBiome3d(pos.getY()); + int biomeZ = Coords.blockToLocalBiome3d(pos.getZ()); + int biomeId = this.blockBiomeArray[AddressTools.getBiomeAddress3d(biomeX, biomeY, biomeZ)]; + return Biome.getBiome(biomeId); } @Overwrite(remap = false) - public void setBiome(int localBiomeX, int localBiomeZ, Biome biome) { - if (this.intBlockBiomeArray == null) - this.intBlockBiomeArray = new int[64]; + public void setBiome(int localBiomeX, int localBiomeY, int localBiomeZ, Biome biome) { + if (this.blockBiomeArray == null) + this.blockBiomeArray = new int[64]; + + this.blockBiomeArray[AddressTools.getBiomeAddress3d(localBiomeX, localBiomeY, localBiomeZ)] = Biome.REGISTRY.getIDForObject(biome); + } + + @Nullable + public int[] int$getBiomeArray() { + return this.blockBiomeArray; + } + + public void int$setBiomeArray(int[] biomeArray) { + if (this.blockBiomeArray == null) + this.blockBiomeArray = biomeArray; - this.intBlockBiomeArray[AddressTools.getBiomeAddress(localBiomeX, localBiomeZ)] = Biome.REGISTRY.getIDForObject(biome); + if (this.blockBiomeArray.length != biomeArray.length) { + CubicChunks.LOGGER.warn("Could not set level cube biomes, array length is {} instead of {}", biomeArray.length, this.blockBiomeArray.length); + } else { + System.arraycopy(biomeArray, 0, this.blockBiomeArray, 0, this.blockBiomeArray.length); + } } } diff --git a/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinIONbtReader.java b/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinIONbtReader.java index 37c0974..6d8f6c7 100644 --- a/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinIONbtReader.java +++ b/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinIONbtReader.java @@ -2,6 +2,7 @@ import io.github.opencubicchunks.cubicchunks.api.util.Coords; import io.github.opencubicchunks.cubicchunks.core.server.chunkio.IONbtReader; +import io.github.opencubicchunks.cubicchunks.core.util.AddressTools; import io.github.opencubicchunks.cubicchunks.core.world.cube.Cube; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -12,28 +13,11 @@ import org.dimdev.jeid.INewBlockStateContainer; import org.dimdev.jeid.INewChunk; import org.dimdev.jeid.modsupport.cubicchunks.INewCube; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.*; @Pseudo @Mixin(IONbtReader.class) public class MixinIONbtReader { - - @Overwrite - private static void readBiomes(NBTTagCompound nbt, Chunk column) {// column biomes - System.arraycopy(nbt.getIntArray("Biomes"), 0, ((INewChunk)column).getIntBiomeArray(), 0, Cube.SIZE * Cube.SIZE); - } - - @Overwrite - private static void readBiomes(Cube cube, NBTTagCompound nbt) {// cube biomes - if (nbt.hasKey("Biomes")) - { - INewCube newCube = (INewCube) cube; - newCube.setIntBiomeArray(nbt.getIntArray("Biomes")); - } - } - @Overwrite private static void readBlocks(NBTTagCompound nbt, World world, Cube cube) { boolean isEmpty = !nbt.hasKey("Sections");// is this an empty cube? @@ -54,7 +38,6 @@ private static void readBlocks(NBTTagCompound nbt, World world, Cube cube) { ebs.getData().setDataFromNBT(abyte, data, add); ebs.setBlockLight(new NibbleArray(nbt.getByteArray("BlockLight"))); - if (world.provider.hasSkyLight()) { ebs.setSkyLight(new NibbleArray(nbt.getByteArray("SkyLight"))); } @@ -64,4 +47,36 @@ private static void readBlocks(NBTTagCompound nbt, World world, Cube cube) { } } + @Overwrite + private static void readBiomes(NBTTagCompound nbt, Chunk column) {// column biomes + System.arraycopy(nbt.getIntArray("Biomes"), 0, ((INewChunk)column).getIntBiomeArray(), 0, Cube.SIZE * Cube.SIZE); + } + + @Overwrite + private static void readBiomes(Cube cube, NBTTagCompound nbt) {// cube biomes + if (nbt.hasKey("Biomes3D")) { + ((INewCube) cube).setBiomeArray(nbt.getIntArray("Biomes3D")); + } + if (nbt.hasKey("Biomes")) + { + ((INewCube) cube).setBiomeArray(convertFromOldCubeBiomes(nbt.getIntArray("Biomes"))); + } + } + + private static int[] convertFromOldCubeBiomes(int[] biomes) { + int[] newBiomes = new int[64]; + + for(int x = 0; x < 4; ++x) { + for(int y = 0; y < 4; ++y) { + for(int z = 0; z < 4; ++z) { + newBiomes[AddressTools.getBiomeAddress3d(x, y, z)] = biomes[getOldBiomeAddress(x << 1 | y & 1, z << 1 | y >> 1 & 1)]; + } + } + } + + return newBiomes; + } + + @Shadow + public static int getOldBiomeAddress(int biomeX, int biomeZ) { return biomeX << 3 | biomeZ; } } diff --git a/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinIONbtWriter.java b/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinIONbtWriter.java index c151948..b4ca65b 100644 --- a/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinIONbtWriter.java +++ b/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinIONbtWriter.java @@ -24,8 +24,7 @@ private static void writeBiomes(Chunk column, NBTTagCompound nbt) {// column bio @Overwrite private static void writeBiomes(Cube cube, NBTTagCompound nbt) {// cube biomes - INewCube newCube = (INewCube) cube; - int[] biomes = newCube.getIntBiomeArray(); + int[] biomes = ((INewCube) cube).getBiomeArray(); if (biomes != null) nbt.setIntArray("Biomes", biomes); } @@ -56,7 +55,6 @@ private static void writeBlocks(Cube cube, NBTTagCompound cubeNbt) { } section.setByteArray("BlockLight", ebs.getBlockLight().getData()); - if (cube.getWorld().provider.hasSkyLight()) { section.setByteArray("SkyLight", ebs.getSkyLight().getData()); } diff --git a/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinWorldEncoder.java b/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinWorldEncoder.java index 947da55..0f68c2d 100644 --- a/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinWorldEncoder.java +++ b/src/main/java/org/dimdev/jeid/mixin/modsupport/cubicchunks/MixinWorldEncoder.java @@ -1,7 +1,11 @@ package org.dimdev.jeid.mixin.modsupport.cubicchunks; import io.github.opencubicchunks.cubicchunks.api.util.Coords; +import io.github.opencubicchunks.cubicchunks.core.asm.mixin.ICubicWorldInternal; +import io.github.opencubicchunks.cubicchunks.core.lighting.ILightingManager; +import io.github.opencubicchunks.cubicchunks.core.util.AddressTools; import io.github.opencubicchunks.cubicchunks.core.world.ClientHeightMap; +import io.github.opencubicchunks.cubicchunks.core.world.IColumnInternal; import io.github.opencubicchunks.cubicchunks.core.world.cube.Cube; import io.github.opencubicchunks.cubicchunks.core.world.ServerHeightMap; import net.minecraft.network.PacketBuffer; @@ -22,28 +26,6 @@ @Pseudo @Mixin(targets = "io.github.opencubicchunks.cubicchunks.core.network.WorldEncoder") public class MixinWorldEncoder { - - @Overwrite - static void encodeColumn(PacketBuffer out, Chunk column) { - // 1. biomes - INewChunk newColumn = (INewChunk)column; - int[] biomes = newColumn.getIntBiomeArray(); - //Utils.LOGGER.info("current biome: {}", biomes[128]); - for (int i = 0; i < 256; i++) - out.writeInt(biomes[i]); - } - - @Overwrite - static void decodeColumn(PacketBuffer in, Chunk column) { - // 1. biomes - int[] biomes = new int[256]; - for (int i = 0; i < 256; i++) - { - biomes[i] = in.readInt(); - } - ((INewChunk)column).setIntBiomeArray(biomes); - } - @Overwrite static void encodeCubes(PacketBuffer out, Collection cubes) { // write first all the flags, then all the block data, then all the light data etc for better compression @@ -55,7 +37,7 @@ static void encodeCubes(PacketBuffer out, Collection cubes) { flags |= 1; if(cube.getStorage() != null) flags |= 2; - if(((INewCube)cube).getIntBiomeArray() != null) + if(((INewCube) cube).getBiomeArray() != null) flags |= 4; out.writeByte(flags); }); @@ -88,22 +70,45 @@ static void encodeCubes(PacketBuffer out, Collection cubes) { // it wil all cubes cubes.forEach(cube -> { if (!cube.isEmpty()) { - byte[] heightmaps = ((ServerHeightMap) cube.getColumn().getOpacityIndex()).getDataForClient(); - assert heightmaps.length == Cube.SIZE * Cube.SIZE * Integer.BYTES; - out.writeBytes(heightmaps); + ((IColumnInternal) cube.getColumn()).writeHeightmapDataForClient(out); } }); // 6. biomes cubes.forEach(cube -> { - INewCube newCube = (INewCube) cube; - int[] biomes = newCube.getIntBiomeArray(); + int[] biomes = ((INewCube) cube).getBiomeArray(); if (biomes != null) for (int biome : biomes) out.writeInt(biome); }); } + @Overwrite + static void encodeColumn(PacketBuffer out, Chunk column) { + // 1. biomes + int[] biomes = ((INewChunk) column).getIntBiomeArray(); + //Utils.LOGGER.info("current biome: {}", biomes[128]); + for (int i = 0; i < 256; i++) + out.writeInt(biomes[i]); + + ((IColumnInternal) column).writeHeightmapDataForClient(out); + } + + @Overwrite + static void decodeColumn(PacketBuffer in, Chunk column) { + // 1. biomes + int[] biomes = new int[256]; + for (int i = 0; i < 256; i++) + { + biomes[i] = in.readInt(); + } + ((INewChunk)column).setIntBiomeArray(biomes); + + if (in.readableBytes() > 0) { + ((IColumnInternal) column).loadClientHeightmapData(in); + } + } + @Overwrite static void decodeCube(PacketBuffer in, List cubes) { cubes.stream().filter(Objects::nonNull).forEach(Cube::setClientCube); @@ -125,7 +130,7 @@ static void decodeCube(PacketBuffer in, List cubes) { Cube cube = cubes.get(i); ExtendedBlockStorage storage = new ExtendedBlockStorage(Coords.cubeToMinBlock(cube.getY()), cube.getWorld().provider.hasSkyLight()); - cube.setStorage(storage); + cube.setStorageFromSave(storage); } } @@ -155,15 +160,29 @@ static void decodeCube(PacketBuffer in, List cubes) { } } + int[] oldHeights = new int[Cube.SIZE * Cube.SIZE]; // 5. heightmaps and after all that - update ref counts for (int i = 0; i < cubes.size(); i++) { if (!isEmpty[i]) { Cube cube = cubes.get(i); - byte[] heightmaps = new byte[Cube.SIZE * Cube.SIZE * Integer.BYTES]; - in.readBytes(heightmaps); - ClientHeightMap coi = ((ClientHeightMap) cube.getColumn().getOpacityIndex()); - coi.setData(heightmaps); - + ILightingManager lm = ((ICubicWorldInternal) cube.getWorld()).getLightingManager(); + IColumnInternal column = cube.getColumn(); + ClientHeightMap coi = (ClientHeightMap) column.getOpacityIndex(); + for (int dx = 0; dx < Cube.SIZE; dx++) { + for (int dz = 0; dz < Cube.SIZE; dz++) { + oldHeights[AddressTools.getLocalAddress(dx, dz)] = coi.getTopBlockY(dx, dz); + } + } + column.loadClientHeightmapData(in); + for (int dx = 0; dx < Cube.SIZE; dx++) { + for (int dz = 0; dz < Cube.SIZE; dz++) { + int oldY = oldHeights[AddressTools.getLocalAddress(dx, dz)]; + int newY = coi.getTopBlockY(dx, dz); + if (oldY != newY) { + lm.updateLightBetween(cube.getColumn(), dx, oldY, newY, dz); + } + } + } //noinspection ConstantConditions cube.getStorage().recalculateRefCounts(); } @@ -174,16 +193,16 @@ static void decodeCube(PacketBuffer in, List cubes) { if (!hasCustomBiomeMap[i]) continue; Cube cube = cubes.get(i); - int[] blockBiomeArray = new int[64]; + int[] blockBiomeArray = new int[Coords.BIOMES_PER_CUBE]; for (int j = 0; j < 64; j++) blockBiomeArray[j] = in.readInt(); - ((INewCube)cube).setIntBiomeArray(blockBiomeArray); + ((INewCube)cube).setBiomeArray(blockBiomeArray); } } @Overwrite static int getEncodedSize(Chunk column) { - return Integer.BYTES * 256; // 256 = ((INewChunk)column).getIntBiomeArray().length + return (((INewChunk) column).getIntBiomeArray().length * Integer.BYTES) + (Cube.SIZE * Cube.SIZE * Integer.BYTES); } @Overwrite @@ -208,13 +227,13 @@ static int getEncodedSize(Collection cubes) { } // heightmaps - size += 256 * Integer.BYTES * cubes.size(); + size += Cube.SIZE * Cube.SIZE * Integer.BYTES * cubes.size(); // biomes for (Cube cube : cubes) { - int[] biomeArray = ((INewCube)cube).getIntBiomeArray(); + int[] biomeArray = ((INewCube)cube).getBiomeArray(); if (biomeArray == null) continue; - size += Integer.BYTES * 64; // 64 = biomeArray.length + size += Integer.BYTES * biomeArray.length; } return size; } diff --git a/src/main/java/org/dimdev/jeid/modsupport/cubicchunks/INewCube.java b/src/main/java/org/dimdev/jeid/modsupport/cubicchunks/INewCube.java index 8d4f258..d7d0ea8 100644 --- a/src/main/java/org/dimdev/jeid/modsupport/cubicchunks/INewCube.java +++ b/src/main/java/org/dimdev/jeid/modsupport/cubicchunks/INewCube.java @@ -1,6 +1,6 @@ package org.dimdev.jeid.modsupport.cubicchunks; public interface INewCube { - int[] getIntBiomeArray(); - void setIntBiomeArray(int[] intBiomeArray); + int[] getBiomeArray(); + void setBiomeArray(int[] biomeArray); } \ No newline at end of file From c5800ec68a25c08a98a2b8b1e347dfb4c288c120 Mon Sep 17 00:00:00 2001 From: Exsolutus Date: Wed, 28 Feb 2024 10:48:01 -0500 Subject: [PATCH 2/2] Refactor Mixin loading to use MixinBooter --- src/main/java/org/dimdev/jeid/JEID.java | 3 +- .../org/dimdev/jeid/JEIDLoadingPlugin.java | 19 ++- .../jeid/mixin/init/JEIDMixinLoader.java | 153 +++++++++--------- .../resources/mixins.jeid.abyssalcraft.json | 15 ++ .../mixins.jeid.advancedrocketry.json | 16 ++ .../resources/mixins.jeid.bewitchment.json | 16 ++ .../resources/mixins.jeid.biomesoplenty.json | 16 ++ .../resources/mixins.jeid.biometweaker.json | 17 ++ src/main/resources/mixins.jeid.bookshelf.json | 15 ++ .../mixins.jeid.compactmachines.json | 15 ++ .../resources/mixins.jeid.creepingnether.json | 15 ++ .../resources/mixins.jeid.cubicchunks.json | 20 +++ .../resources/mixins.jeid.cyclopscore.json | 15 ++ .../resources/mixins.jeid.extrautils2.json | 16 ++ .../resources/mixins.jeid.gaiadimension.json | 15 ++ .../resources/mixins.jeid.geographicraft.json | 15 ++ .../resources/mixins.jeid.hammercore.json | 15 ++ .../resources/mixins.jeid.journeymap.json | 15 ++ .../resources/mixins.jeid.modsupport.json | 48 ------ src/main/resources/mixins.jeid.mystcraft.json | 15 ++ ....init.json => mixins.jeid.thaumcraft.json} | 6 +- .../mixins.jeid.thebetweenlands.json | 16 ++ src/main/resources/mixins.jeid.tofucraft.json | 16 ++ .../resources/mixins.jeid.tropicraft.json | 15 ++ src/main/resources/mixins.jeid.worldedit.json | 15 ++ 25 files changed, 399 insertions(+), 143 deletions(-) create mode 100644 src/main/resources/mixins.jeid.abyssalcraft.json create mode 100644 src/main/resources/mixins.jeid.advancedrocketry.json create mode 100644 src/main/resources/mixins.jeid.bewitchment.json create mode 100644 src/main/resources/mixins.jeid.biomesoplenty.json create mode 100644 src/main/resources/mixins.jeid.biometweaker.json create mode 100644 src/main/resources/mixins.jeid.bookshelf.json create mode 100644 src/main/resources/mixins.jeid.compactmachines.json create mode 100644 src/main/resources/mixins.jeid.creepingnether.json create mode 100644 src/main/resources/mixins.jeid.cubicchunks.json create mode 100644 src/main/resources/mixins.jeid.cyclopscore.json create mode 100644 src/main/resources/mixins.jeid.extrautils2.json create mode 100644 src/main/resources/mixins.jeid.gaiadimension.json create mode 100644 src/main/resources/mixins.jeid.geographicraft.json create mode 100644 src/main/resources/mixins.jeid.hammercore.json create mode 100644 src/main/resources/mixins.jeid.journeymap.json delete mode 100644 src/main/resources/mixins.jeid.modsupport.json create mode 100644 src/main/resources/mixins.jeid.mystcraft.json rename src/main/resources/{mixins.jeid.init.json => mixins.jeid.thaumcraft.json} (65%) create mode 100644 src/main/resources/mixins.jeid.thebetweenlands.json create mode 100644 src/main/resources/mixins.jeid.tofucraft.json create mode 100644 src/main/resources/mixins.jeid.tropicraft.json create mode 100644 src/main/resources/mixins.jeid.worldedit.json diff --git a/src/main/java/org/dimdev/jeid/JEID.java b/src/main/java/org/dimdev/jeid/JEID.java index 05bbf1d..da9c79e 100644 --- a/src/main/java/org/dimdev/jeid/JEID.java +++ b/src/main/java/org/dimdev/jeid/JEID.java @@ -25,7 +25,8 @@ @Mod(modid = "jeid", name = "JustEnoughIDs", - updateJSON = "https://gist.githubusercontent.com/Runemoro/67b1d8d31af58e9d35410ef60b2017c3/raw/1fe08a6c45a1f481a8a2a8c71e52d4245dcb7713/jeid_update.json") + updateJSON = "https://gist.githubusercontent.com/Runemoro/67b1d8d31af58e9d35410ef60b2017c3/raw/1fe08a6c45a1f481a8a2a8c71e52d4245dcb7713/jeid_update.json", + dependencies = "required:mixinbooter@[7.1,)") public class JEID { private static final boolean DEBUG_BLOCK_IDS = false; private static final boolean DEBUG_ITEM_IDS = false; diff --git a/src/main/java/org/dimdev/jeid/JEIDLoadingPlugin.java b/src/main/java/org/dimdev/jeid/JEIDLoadingPlugin.java index bcf91d3..9b681c2 100644 --- a/src/main/java/org/dimdev/jeid/JEIDLoadingPlugin.java +++ b/src/main/java/org/dimdev/jeid/JEIDLoadingPlugin.java @@ -1,30 +1,29 @@ package org.dimdev.jeid; +import com.google.common.collect.ImmutableList; import net.minecraftforge.common.ForgeVersion; import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin; import org.spongepowered.asm.launch.MixinBootstrap; import org.spongepowered.asm.mixin.Mixins; +import zone.rong.mixinbooter.IEarlyMixinLoader; +import zone.rong.mixinbooter.ILateMixinLoader; import javax.annotation.Nullable; +import java.util.List; import java.util.Map; @IFMLLoadingPlugin.MCVersion(ForgeVersion.mcVersion) @IFMLLoadingPlugin.SortingIndex(-7500) @IFMLLoadingPlugin.Name("JustEnoughIDs Extension Plugin") //@IFMLLoadingPlugin.TransformerExclusions("org.dimdev.jeid.") -public class JEIDLoadingPlugin implements IFMLLoadingPlugin { - - public JEIDLoadingPlugin() { - MixinBootstrap.init(); - Utils.LOGGER.info("Initializing JustEnoughIDs core mixins"); - Mixins.addConfiguration("mixins.jeid.core.json"); - Utils.LOGGER.info("Initializing JustEnoughIDs initialization mixins"); - Mixins.addConfiguration("mixins.jeid.init.json"); - } - +public class JEIDLoadingPlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { @Override public String[] getASMTransformerClass() { Obf.loadData(); return new String[]{ "org.dimdev.jeid.JEIDTransformer" }; } @Override public String getModContainerClass() { return null; } @Nullable @Override public String getSetupClass() { return null; } @Override public void injectData(Map data) {} @Override public String getAccessTransformerClass() { return null; } + + public List getMixinConfigs() { + return ImmutableList.of("mixins.jeid.core.json"); + } } diff --git a/src/main/java/org/dimdev/jeid/mixin/init/JEIDMixinLoader.java b/src/main/java/org/dimdev/jeid/mixin/init/JEIDMixinLoader.java index 0e32768..e8d088f 100644 --- a/src/main/java/org/dimdev/jeid/mixin/init/JEIDMixinLoader.java +++ b/src/main/java/org/dimdev/jeid/mixin/init/JEIDMixinLoader.java @@ -1,92 +1,83 @@ package org.dimdev.jeid.mixin.init; import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.ModClassLoader; -import net.minecraftforge.fml.common.ModContainer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.MixinEnvironment; -import org.spongepowered.asm.mixin.Mixins; -import org.spongepowered.asm.mixin.Shadow; -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.transformer.ext.Extensions; +import zone.rong.mixinbooter.ILateMixinLoader; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.net.MalformedURLException; +import java.util.ArrayList; import java.util.List; -@Mixin(Loader.class) -public class JEIDMixinLoader { - @Shadow - private List mods; - @Shadow private ModClassLoader modClassLoader; - /** - * @reason Load all mods now and load mod support mixin configs. This can't be done later - * since constructing mods loads classes from them. - */ - @Inject(method = "loadMods", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/common/LoadController;transition(Lnet/minecraftforge/fml/common/LoaderState;Z)V", ordinal = 1), remap = false) - private void beforeConstructingMods(List nonMod, CallbackInfo ci) { - // Add all mods to class loader - for (ModContainer mod : mods) { - try { - modClassLoader.addFile(mod.getSource()); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } - } - - // Add and reload mixin configs - Mixins.addConfiguration("mixins.jeid.modsupport.json"); - Mixins.addConfiguration("mixins.jeid.twilightforest.json"); +public class JEIDMixinLoader implements ILateMixinLoader { + public List getMixinConfigs() { + List configs = new ArrayList(); - try { - // This will very likely break on the next major mixin release. - Class proxyClass = Class.forName("org.spongepowered.asm.mixin.transformer.Proxy"); - Field transformerField = proxyClass.getDeclaredField("transformer"); - transformerField.setAccessible(true); - Object transformer = transformerField.get(null); - - Class mixinTransformerClass = Class.forName("org.spongepowered.asm.mixin.transformer.MixinTransformer"); - Field processorField = mixinTransformerClass.getDeclaredField("processor"); - processorField.setAccessible(true); - Object processor = processorField.get(transformer); - - Class mixinProcessorClass = Class.forName("org.spongepowered.asm.mixin.transformer.MixinProcessor"); - - Field extensionsField = mixinProcessorClass.getDeclaredField("extensions"); - extensionsField.setAccessible(true); - Object extensions = extensionsField.get(processor); - - Method selectConfigsMethod = mixinProcessorClass.getDeclaredMethod("selectConfigs", MixinEnvironment.class); - selectConfigsMethod.setAccessible(true); - selectConfigsMethod.invoke(processor, MixinEnvironment.getCurrentEnvironment()); - - // Mixin 0.8.4+ - try { - Method prepareConfigs = mixinProcessorClass.getDeclaredMethod("prepareConfigs", MixinEnvironment.class, Extensions.class); - prepareConfigs.setAccessible(true); - prepareConfigs.invoke(processor, MixinEnvironment.getCurrentEnvironment(), extensions); - return; - } catch (NoSuchMethodException ex) { - // no-op - } - - // Mixin 0.8+ - try { - Method prepareConfigs = mixinProcessorClass.getDeclaredMethod("prepareConfigs", MixinEnvironment.class); - prepareConfigs.setAccessible(true); - prepareConfigs.invoke(processor, MixinEnvironment.getCurrentEnvironment()); - return; - } catch (NoSuchMethodException ex) { - // no-op - } - - throw new UnsupportedOperationException("Unsupported Mixin"); - } catch (Exception ex) { - throw new RuntimeException(ex); + if (Loader.isModLoaded("abyssalcraft")) { + configs.add("mixins.jeid.abyssalcraft.json"); + } + if (Loader.isModLoaded("advancedrocketry")) { + configs.add("mixins.jeid.advancedrocketry.json"); + } + if (Loader.isModLoaded("bewitchment")) { + configs.add("mixins.jeid.bewitchment.json"); + } + if (Loader.isModLoaded("biomesoplenty")) { + configs.add("mixins.jeid.biomesoplenty.json"); + } + if (Loader.isModLoaded("biometweaker")) { + configs.add("mixins.jeid.biometweaker.json"); + } + if (Loader.isModLoaded("bookeshelf")) { + configs.add("mixins.jeid.bookshelf.json"); + } + if (Loader.isModLoaded("compactmachines")) { + configs.add("mixins.jeid.compactmachines.json"); + } + if (Loader.isModLoaded("creepingnether")) { + configs.add("mixins.jeid.creepingnether.json"); + } + if (Loader.isModLoaded("cubicchunks")) { + configs.add("mixins.jeid.cubicchunks.json"); + } + if (Loader.isModLoaded("cyclopscore")) { + configs.add("mixins.jeid.cyclopscore.json"); + } + if (Loader.isModLoaded("extrautils2")) { + configs.add("mixins.jeid.extrautils2.json"); } + if (Loader.isModLoaded("gaiadimension")) { + configs.add("mixins.jeid.gaiadimension.json"); + } + if (Loader.isModLoaded("geographicraft")) { + configs.add("mixins.jeid.geographicraft.json"); + } + if (Loader.isModLoaded("hammercore")) { + configs.add("mixins.jeid.hammercore.json"); + } + if (Loader.isModLoaded("journeymap")) { + configs.add("mixins.jeid.journeymap.json"); + } + if (Loader.isModLoaded("mystcraft")) { + configs.add("mixins.jeid.mystcraft.json"); + } + if (Loader.isModLoaded("thaumcraft")) { + configs.add("mixins.jeid.thaumcraft.json"); + } + if (Loader.isModLoaded("thebetweenlands")) { + configs.add("mixins.jeid.thebetweenlands.json"); + } + if (Loader.isModLoaded("tofucraft")) { + configs.add("mixins.jeid.tofucraft.json"); + } + if (Loader.isModLoaded("tropicraft")) { + configs.add("mixins.jeid.tropicraft.json"); + } + if (Loader.isModLoaded("twilightforest")) { + configs.add("mixins.jeid.twilightforest.json"); + } + if (Loader.isModLoaded("worldedit")) { + configs.add("mixins.jeid.worldedit.json"); + } + + return configs; } } diff --git a/src/main/resources/mixins.jeid.abyssalcraft.json b/src/main/resources/mixins.jeid.abyssalcraft.json new file mode 100644 index 0000000..4fcf1f4 --- /dev/null +++ b/src/main/resources/mixins.jeid.abyssalcraft.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "abyssalcraft.MixinBiomeUtil" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.advancedrocketry.json b/src/main/resources/mixins.jeid.advancedrocketry.json new file mode 100644 index 0000000..cb9ade1 --- /dev/null +++ b/src/main/resources/mixins.jeid.advancedrocketry.json @@ -0,0 +1,16 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "advancedrocketry.MixinBiomeHandler", + "advancedrocketry.MixinPacketBiomeIDChange" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.bewitchment.json b/src/main/resources/mixins.jeid.bewitchment.json new file mode 100644 index 0000000..25e7b96 --- /dev/null +++ b/src/main/resources/mixins.jeid.bewitchment.json @@ -0,0 +1,16 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "bewitchment.MixinRitualBiomeShift", + "bewitchment.MixinUtils" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.biomesoplenty.json b/src/main/resources/mixins.jeid.biomesoplenty.json new file mode 100644 index 0000000..464b304 --- /dev/null +++ b/src/main/resources/mixins.jeid.biomesoplenty.json @@ -0,0 +1,16 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "biomesoplenty.MixinBOPCommand", + "biomesoplenty.MixinModBiomes" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.biometweaker.json b/src/main/resources/mixins.jeid.biometweaker.json new file mode 100644 index 0000000..3368aaa --- /dev/null +++ b/src/main/resources/mixins.jeid.biometweaker.json @@ -0,0 +1,17 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "biometweaker.MixinBiomeColorMappings", + "biometweaker.MixinBiomeHelper", + "biometweaker.MixinCommandSetBiome" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.bookshelf.json b/src/main/resources/mixins.jeid.bookshelf.json new file mode 100644 index 0000000..547835f --- /dev/null +++ b/src/main/resources/mixins.jeid.bookshelf.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "bookshelf.MixinWorldUtils" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.compactmachines.json b/src/main/resources/mixins.jeid.compactmachines.json new file mode 100644 index 0000000..3529065 --- /dev/null +++ b/src/main/resources/mixins.jeid.compactmachines.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "compactmachines.MixinChunkUtils" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.creepingnether.json b/src/main/resources/mixins.jeid.creepingnether.json new file mode 100644 index 0000000..5515322 --- /dev/null +++ b/src/main/resources/mixins.jeid.creepingnether.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "creepingnether.MixinCorruptorAbstract" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.cubicchunks.json b/src/main/resources/mixins.jeid.cubicchunks.json new file mode 100644 index 0000000..c6bfc51 --- /dev/null +++ b/src/main/resources/mixins.jeid.cubicchunks.json @@ -0,0 +1,20 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "cubicchunks.MixinCube", + "cubicchunks.MixinCubePrimer", + "cubicchunks.MixinIONbtReader", + "cubicchunks.MixinIONbtWriter", + "cubicchunks.MixinVanillaCompatibilityGenerator", + "cubicchunks.MixinWorldEncoder" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.cyclopscore.json b/src/main/resources/mixins.jeid.cyclopscore.json new file mode 100644 index 0000000..934b329 --- /dev/null +++ b/src/main/resources/mixins.jeid.cyclopscore.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "cyclopscore.MixinWorldHelpers" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.extrautils2.json b/src/main/resources/mixins.jeid.extrautils2.json new file mode 100644 index 0000000..cf24692 --- /dev/null +++ b/src/main/resources/mixins.jeid.extrautils2.json @@ -0,0 +1,16 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "extrautils2.MixinBiomeManip", + "extrautils2.MixinWorldProviderSpecialDim" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.gaiadimension.json b/src/main/resources/mixins.jeid.gaiadimension.json new file mode 100644 index 0000000..c478d24 --- /dev/null +++ b/src/main/resources/mixins.jeid.gaiadimension.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "gaiadimension.MixinGenLayerGDRiverMix" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.geographicraft.json b/src/main/resources/mixins.jeid.geographicraft.json new file mode 100644 index 0000000..d4c71cc --- /dev/null +++ b/src/main/resources/mixins.jeid.geographicraft.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "geographicraft.MixinDimensionManager" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.hammercore.json b/src/main/resources/mixins.jeid.hammercore.json new file mode 100644 index 0000000..94828ed --- /dev/null +++ b/src/main/resources/mixins.jeid.hammercore.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "hammercore.MixinWorldLocation" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.journeymap.json b/src/main/resources/mixins.jeid.journeymap.json new file mode 100644 index 0000000..26966d0 --- /dev/null +++ b/src/main/resources/mixins.jeid.journeymap.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "journeymap.MixinChunkMD" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.modsupport.json b/src/main/resources/mixins.jeid.modsupport.json deleted file mode 100644 index 3f7e1e3..0000000 --- a/src/main/resources/mixins.jeid.modsupport.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "package": "org.dimdev.jeid.mixin.modsupport", - "required": true, - "refmap": "mixins.jeid.refmap.json", - "target": "@env(DEFAULT)", - "minVersion": "0.6", - "compatibilityLevel": "JAVA_8", - "mixins": [ - "abyssalcraft.MixinBiomeUtil", - "advancedrocketry.MixinBiomeHandler", - "advancedrocketry.MixinPacketBiomeIDChange", - "bewitchment.MixinRitualBiomeShift", - "bewitchment.MixinUtils", - "biomesoplenty.MixinBOPCommand", - "biomesoplenty.MixinModBiomes", - "biometweaker.MixinBiomeColorMappings", - "biometweaker.MixinBiomeHelper", - "biometweaker.MixinCommandSetBiome", - "bookshelf.MixinWorldUtils", - "compactmachines.MixinChunkUtils", - "creepingnether.MixinCorruptorAbstract", - "cubicchunks.MixinCube", - "cubicchunks.MixinCubePrimer", - "cubicchunks.MixinIONbtReader", - "cubicchunks.MixinIONbtWriter", - "cubicchunks.MixinVanillaCompatibilityGenerator", - "cubicchunks.MixinWorldEncoder", - "cyclopscore.MixinWorldHelpers", - "extrautils2.MixinBiomeManip", - "extrautils2.MixinWorldProviderSpecialDim", - "gaiadimension.MixinGenLayerGDRiverMix", - "geographicraft.MixinDimensionManager", - "hammercore.MixinWorldLocation", - "journeymap.MixinChunkMD", - "mystcraft.MixinBiomeReplacer", - "thaumcraft.MixinUtils", - "thebetweenlands.MixinBlockSpreadingDeath", - "thebetweenlands.MixinGenLayerVoronoiZoomInstanced", - "tofucraft.MixinGenLayerRiverMix", - "tofucraft.MixinGenLayerTofuVoronoiZoom", - "tropicraft.MixinGenLayerTropiVoronoiZoom", - "worldedit.MixinBaseBlock" - ], - "client": [], - "injectors": { - "maxShiftBy": 10 - } -} diff --git a/src/main/resources/mixins.jeid.mystcraft.json b/src/main/resources/mixins.jeid.mystcraft.json new file mode 100644 index 0000000..e9e9f8c --- /dev/null +++ b/src/main/resources/mixins.jeid.mystcraft.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "mystcraft.MixinBiomeReplacer" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.init.json b/src/main/resources/mixins.jeid.thaumcraft.json similarity index 65% rename from src/main/resources/mixins.jeid.init.json rename to src/main/resources/mixins.jeid.thaumcraft.json index 4b27f96..bd43b37 100644 --- a/src/main/resources/mixins.jeid.init.json +++ b/src/main/resources/mixins.jeid.thaumcraft.json @@ -1,12 +1,12 @@ { - "package": "org.dimdev.jeid.mixin.init", + "package": "org.dimdev.jeid.mixin.modsupport", "required": true, "refmap": "mixins.jeid.refmap.json", - "target": "@env(INIT)", + "target": "@env(DEFAULT)", "minVersion": "0.6", "compatibilityLevel": "JAVA_8", "mixins": [ - "JEIDMixinLoader" + "thaumcraft.MixinUtils" ], "client": [], "injectors": { diff --git a/src/main/resources/mixins.jeid.thebetweenlands.json b/src/main/resources/mixins.jeid.thebetweenlands.json new file mode 100644 index 0000000..a924a21 --- /dev/null +++ b/src/main/resources/mixins.jeid.thebetweenlands.json @@ -0,0 +1,16 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "thebetweenlands.MixinBlockSpreadingDeath", + "thebetweenlands.MixinGenLayerVoronoiZoomInstanced" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.tofucraft.json b/src/main/resources/mixins.jeid.tofucraft.json new file mode 100644 index 0000000..cdcdf78 --- /dev/null +++ b/src/main/resources/mixins.jeid.tofucraft.json @@ -0,0 +1,16 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "tofucraft.MixinGenLayerRiverMix", + "tofucraft.MixinGenLayerTofuVoronoiZoom" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.tropicraft.json b/src/main/resources/mixins.jeid.tropicraft.json new file mode 100644 index 0000000..c4ff0a0 --- /dev/null +++ b/src/main/resources/mixins.jeid.tropicraft.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "tropicraft.MixinGenLayerTropiVoronoiZoom" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +} diff --git a/src/main/resources/mixins.jeid.worldedit.json b/src/main/resources/mixins.jeid.worldedit.json new file mode 100644 index 0000000..20d175b --- /dev/null +++ b/src/main/resources/mixins.jeid.worldedit.json @@ -0,0 +1,15 @@ +{ + "package": "org.dimdev.jeid.mixin.modsupport", + "required": true, + "refmap": "mixins.jeid.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.6", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "worldedit.MixinBaseBlock" + ], + "client": [], + "injectors": { + "maxShiftBy": 10 + } +}