From fa66c21a8a0f58cb92ca2b598092157bda40b2dd Mon Sep 17 00:00:00 2001 From: FalsePattern Date: Sun, 9 Jun 2024 18:46:56 +0200 Subject: [PATCH] Matter Overdrive compat --- README.MD | 7 ++ dependencies.gradle | 3 + .../matteroverdrive/InventoryMixin.java | 20 ++++++ .../matteroverdrive/ItemPatternMixin.java | 70 +++++++++++++++++++ .../endlessids/mixin/plugin/Mixin.java | 4 ++ .../endlessids/mixin/plugin/TargetedMod.java | 1 + 6 files changed, 105 insertions(+) create mode 100644 src/main/java/com/falsepattern/endlessids/mixin/mixins/common/blockitem/matteroverdrive/InventoryMixin.java create mode 100644 src/main/java/com/falsepattern/endlessids/mixin/mixins/common/blockitem/matteroverdrive/ItemPatternMixin.java diff --git a/README.MD b/README.MD index 553db66..3e529e4 100644 --- a/README.MD +++ b/README.MD @@ -32,6 +32,9 @@ If you notice any problems when opening NEID worlds with EndlessIDs, please open This mod also contains patches for the following mods: +
+Mod list + - AbyssalCraft - Advanced Rocketry - Alternate Terrain Generation @@ -59,6 +62,7 @@ This mod also contains patches for the following mods: - Highlands - Immersive Cavegen - Industrial Revolution by Redstone Rebooted +- Matter Overdrive - More Fun Quicksand Mod - Nature's Compass - Netherlicious @@ -75,6 +79,9 @@ This mod also contains patches for the following mods: - Witchery - WorldEdit +
+ + Mods not listed here may or may not work. - For item/block IDs: diff --git a/dependencies.gradle b/dependencies.gradle index 810aa7d..c99a0d0 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -121,6 +121,9 @@ dependencies { //LOTR Mod 36.15 compileOnly(deobfCurse("lotrmod-423748:4091561")) + //Matter Overdrive 0.4.2-hotfix1 + compileOnly(deobfCurse("matteroverdrive-229694:2331162")) + //More Fun Quicksands Mod 1.0.8.8-fixed compileOnly(deobfCurse("more-fun-quicksand-mod-321960:2717318")) diff --git a/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/blockitem/matteroverdrive/InventoryMixin.java b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/blockitem/matteroverdrive/InventoryMixin.java new file mode 100644 index 0000000..0b766be --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/blockitem/matteroverdrive/InventoryMixin.java @@ -0,0 +1,20 @@ +package com.falsepattern.endlessids.mixin.mixins.common.blockitem.matteroverdrive; + +import com.falsepattern.endlessids.util.DataUtil; +import matteroverdrive.data.Inventory; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import net.minecraft.nbt.NBTTagCompound; + +@Mixin(Inventory.class) +public abstract class InventoryMixin { + @Redirect(method = "readFromNBT", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/nbt/NBTTagCompound;hasKey(Ljava/lang/String;I)Z"), + require = 1) + private boolean fixHasKey(NBTTagCompound instance, String p_150297_1_, int p_150297_2_) { + return DataUtil.nbtHasID(instance); + } +} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/blockitem/matteroverdrive/ItemPatternMixin.java b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/blockitem/matteroverdrive/ItemPatternMixin.java new file mode 100644 index 0000000..c7ad3b1 --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/mixins/common/blockitem/matteroverdrive/ItemPatternMixin.java @@ -0,0 +1,70 @@ +package com.falsepattern.endlessids.mixin.mixins.common.blockitem.matteroverdrive; + +import com.falsepattern.endlessids.constants.VanillaConstants; +import io.netty.buffer.ByteBuf; +import matteroverdrive.data.ItemPattern; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +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 net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.Constants; + +@Mixin(value = ItemPattern.class, + remap = false) +public abstract class ItemPatternMixin { + @Shadow private int itemID; + + @Shadow private int progress; + + @Shadow private int damage; + + @Shadow private int count; + + @Inject(method = "writeToNBT", + at = @At("RETURN"), + require = 1) + private void writeToNBT$writeInt(NBTTagCompound nbtTagCompound, CallbackInfo ci) { + int id = this.itemID; + if (id > VanillaConstants.maxItemID) { + nbtTagCompound.setShort("id", (short) 0); + } + nbtTagCompound.setInteger("idExt", id); + } + + @Inject(method = "readFromNBT", + at = @At("RETURN"), + require = 1) + private void readFromNBT$readInt(NBTTagCompound nbtTagCompound, CallbackInfo ci) { + if (nbtTagCompound.hasKey("idExt", Constants.NBT.TAG_INT)) + this.itemID = nbtTagCompound.getInteger("idExt"); + } + + /** + * @author FalsePattern + * @reason Extend IDs + */ + @Overwrite + public void writeToBuffer(ByteBuf byteBuf) { + byteBuf.writeInt(this.itemID); + byteBuf.writeByte(this.progress); + byteBuf.writeShort(this.damage); + byteBuf.writeByte(this.count); + } + + + /** + * @author FalsePattern + * @reason Extend IDs + */ + @Overwrite + public void readFromBuffer(ByteBuf byteBuf) { + this.itemID = byteBuf.readInt(); + this.progress = byteBuf.readByte(); + this.damage = byteBuf.readShort(); + this.count = byteBuf.readByte(); + } +} 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 2819bf4..a2f5513 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java @@ -186,6 +186,10 @@ public enum Mixin implements IMixin { DragonAPIBlockPropertiesMixin(Side.COMMON, condition(() -> GeneralConfig.extendBlockItem).and(require(TargetedMod.DRAGONAPI)), "blockitem.dragonapi.BlockPropertiesMixin"), DragonAPIBlockItemIDTypeMixin(Side.COMMON, condition(() -> GeneralConfig.extendBlockItem).and(require(TargetedMod.DRAGONAPI)), "blockitem.dragonapi.IDTypeMixin"), //endregion DragonAPI + //region Matter Overdrive + MOInventoryMixin(Side.COMMON, condition(() -> GeneralConfig.extendBlockItem).and(require(TargetedMod.MATTEROVERDRIVE)), "blockitem.matteroverdrive.InventoryMixin"), + MOItemPatternMixin(Side.COMMON, condition(() -> GeneralConfig.extendBlockItem).and(require(TargetedMod.MATTEROVERDRIVE)), "blockitem.matteroverdrive.ItemPatternMixin"), + //endregion Matter Overdrive //region MFQM MFQMMixin(Side.COMMON, condition(() -> GeneralConfig.extendBlockItem).and(require(TargetedMod.MFQM)), "blockitem.mfqm.MFQMMixin"), //endregion MFQM 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 34228e7..aa828e8 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/TargetedMod.java @@ -37,6 +37,7 @@ public enum TargetedMod implements ITargetedMod { ICG("Immersive Cavegen", false, startsWith("immersivecavegen")), IR3("Industrial Revolution by Redstone Rebooted", false, startsWith("industrialrevolutionbyredstonerebooted-")), LOTR("LOTR Mod", false, startsWith("lotrmod")), + MATTEROVERDRIVE("Matter Overdrive", false, startsWith("matteroverdrive-")), MFQM("More Fun Quicksand Mod", false, startsWith("morefunquicksandmod-")), NATURESCOMPASS("Nature's Compass", false, startsWith("naturescompass")), NETHERLICIOUS("Netherlicious", false, startsWith("netherlicious-")),