From 14a6897297e1c490eded872504d015e1e20d2eac Mon Sep 17 00:00:00 2001 From: FalsePattern <30945458+FalsePattern@users.noreply.github.com> Date: Tue, 22 Mar 2022 13:17:19 +0100 Subject: [PATCH] WorldEdit --- dependencies.gradle | 4 ++ .../endlessids/asm/ClassEdit.java | 6 +-- .../asm/transformer/WorldEditBaseBlock.java | 39 ------------------- .../common/worldedit/BaseBlockMixin.java | 36 +++++++++++++++++ .../endlessids/mixin/plugin/Mixin.java | 5 ++- .../endlessids/mixin/plugin/TargetedMod.java | 4 +- 6 files changed, 50 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/com/falsepattern/endlessids/asm/transformer/WorldEditBaseBlock.java create mode 100644 src/main/java/com/falsepattern/endlessids/mixin/mixins/common/worldedit/BaseBlockMixin.java diff --git a/dependencies.gradle b/dependencies.gradle index d3ff8ed..089e802 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -12,6 +12,10 @@ dependencies { transitive = false } + compileOnly("curse.maven:worldedit-225608:2309699") { + transitive = false + } + compileOnly("curse.maven:cofh-lib-220333:2388747") { transitive = false } diff --git a/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java b/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java index 4b29fcb..84a5700 100644 --- a/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java +++ b/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java @@ -1,7 +1,6 @@ package com.falsepattern.endlessids.asm; import java.util.HashMap; -import com.falsepattern.endlessids.asm.transformer.WorldEditBaseBlock; import com.falsepattern.endlessids.asm.transformer.FmlRegistry; import java.util.Map; @@ -23,12 +22,13 @@ public enum ClassEdit //VanillaPlayerControllerMP(new VanillaPlayerControllerMP(), new String[] { "net.minecraft.client.multiplayer.PlayerControllerMP" }), //VanillaItemInWorldManager(new VanillaItemInWorldManager(), new String[] { "net.minecraft.server.management.ItemInWorldManager" }), //VanillaWorld(new VanillaWorld(), new String[] { "net.minecraft.world.World" }), - FmlRegistry(new FmlRegistry(), new String[] { "cpw.mods.fml.common.registry.GameData", "cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry" }), + FmlRegistry(new FmlRegistry(), new String[] { "cpw.mods.fml.common.registry.GameData", "cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry" }), //CofhBlockHelper(new CofhBlockHelper(), new String[] { "cofh.lib.util.helpers.BlockHelper" }), //UndergroundBiomesOreUBifier(new UndergroundBiomesOreUBifier(), new String[] { "exterminatorJeff.undergroundBiomes.worldGen.OreUBifier" }), //UndergroundBiomesBiomeUndergroundDecorator(new UndergroundBiomesBiomeUndergroundDecorator(), new String[] { "exterminatorJeff.undergroundBiomes.worldGen.BiomeUndergroundDecorator" }), //MFQM(new MFQM(), new String[] { "MoreFunQuicksandMod.main.MFQM" }), - WorldEditBaseBlock(new WorldEditBaseBlock(), new String[] { "com.sk89q.worldedit.blocks.BaseBlock" }); + //WorldEditBaseBlock(new WorldEditBaseBlock(), new String[] { "com.sk89q.worldedit.blocks.BaseBlock" }) + ; private static final Map editMap; private final IClassNodeTransformer transformer; diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/WorldEditBaseBlock.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/WorldEditBaseBlock.java deleted file mode 100644 index 75f6c6d..0000000 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/WorldEditBaseBlock.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.falsepattern.endlessids.asm.transformer; - -import com.falsepattern.endlessids.constants.ExtendedConstants; -import com.falsepattern.endlessids.constants.VanillaConstants; -import lombok.val; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.LdcInsnNode; -import com.falsepattern.endlessids.asm.AsmUtil; -import org.objectweb.asm.tree.ClassNode; -import com.falsepattern.endlessids.asm.IClassNodeTransformer; - -public class WorldEditBaseBlock implements IClassNodeTransformer -{ - public WorldEditBaseBlock() { - super(); - } - - @Override - public void transform(final ClassNode cn, final boolean obfuscated) { - final MethodNode method = AsmUtil.findMethod(cn, "internalSetId", true); - if (method == null) { - return; - } - AsmUtil.transformInlinedSizeMethod(cn, method, VanillaConstants.maxBlockID, ExtendedConstants.maxBlockID); - final InsnList code = method.instructions; - val iter = code.iterator(); - while (iter.hasNext()) { - val insn = iter.next(); - if (insn.getType() == 9 && ((LdcInsnNode)insn).cst instanceof String) { - final String string = (String)((LdcInsnNode)insn).cst; - if (string.contains(Integer.toString(VanillaConstants.maxBlockID))) { - ((LdcInsnNode)insn).cst = string.replace(Integer.toString(VanillaConstants.maxBlockID), Integer.toString(ExtendedConstants.maxBlockID)); - break; - } - } - } - } -} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/worldedit/BaseBlockMixin.java b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/worldedit/BaseBlockMixin.java new file mode 100644 index 0000000..6c75568 --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/worldedit/BaseBlockMixin.java @@ -0,0 +1,36 @@ +package com.falsepattern.endlessids.mixin.mixins.common.worldedit; + +import com.falsepattern.endlessids.constants.ExtendedConstants; +import com.sk89q.worldedit.blocks.BaseBlock; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(BaseBlock.class) +public abstract class BaseBlockMixin { + private int idExtended; + + /** + * @author FalsePattern + * @reason ID limit extension + */ + @Overwrite + protected final void internalSetId(int id) { + if (id > ExtendedConstants.maxBlockID) { + throw new IllegalArgumentException("Can't have a block ID above " + ExtendedConstants.maxBlockID + " (" + id + " given)"); + } else if (id < 0) { + throw new IllegalArgumentException("Can't have a block ID below 0"); + } else { + this.idExtended = id; + } + } + + /** + * @author FalsePattern + * @reason ID limit extension + */ + @Overwrite + public int getId() { + return idExtended; + } + +} 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 44a8f55..cc3f0b0 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java @@ -50,8 +50,11 @@ public enum Mixin { //END DragonAPI->common //BEGIN MFQM->common MFQMMixin(builder(Side.COMMON).target(TargetedMod.MFQM).mixin("mfqm.MFQMMixin")), - MFQMDataWatcherMixin(builder(Side.COMMON).target(TargetedMod.MFQM).condition(() -> IEConfig.extendDataWatcher).mixin("mfqm.MFQMDataWatcherMixin")) + MFQMDataWatcherMixin(builder(Side.COMMON).target(TargetedMod.MFQM).condition(() -> IEConfig.extendDataWatcher).mixin("mfqm.MFQMDataWatcherMixin")), //END MFQM->common + //BEGIN WorldEdit->common + BaseBlockMixin(builder(Side.COMMON).target(TargetedMod.WORLDEDIT).mixin("worldedit.BaseBlockMixin")), + //END WorldEdit->common ; public final String mixin; 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 347ec35..205d5cd 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java @@ -11,7 +11,9 @@ public enum TargetedMod { UBC("Underground Biomes Constructs", "undergroundbiomesconstructs-", "", false), COFHLIB("CoFH Lib", "cofhlib-", "", false), DRAGONAPI("DragonAPI", "dragonapi", "", false), - MFQM("More Fun Quicksand Mod", "morefunquicksandmod-", "", false); + MFQM("More Fun Quicksand Mod", "morefunquicksandmod-", "", false), + WORLDEDIT("WorldEdit", "worldedit-", "", false), + ; public final String modName; public final String jarNamePrefixLowercase;