diff --git a/README.md b/README.md index b835b8161..2b418f43c 100644 --- a/README.md +++ b/README.md @@ -593,6 +593,7 @@ Available in flavors [**Cleanroom**](https://www.curseforge.com/minecraft/modpac * **Sky of Old Dimension Fix:** Fixes a Stack Overflow crash when entering the Sky of Old Dimension * **Storage Drawers** * **Item Voiding Fix:** Prevents voiding of items when near capacity limits + * **Remove Position from Drops:** Removes position data from drawers that keep their contents when broken, allowing them to stack with each other * **Render Range:** Approximate range in blocks at which drawers render contained items * **Tardis** * **Memory Leak Fix:** Fixes a client-side memory leak associated with EntityPlayer diff --git a/src/main/java/mod/acgaming/universaltweaks/config/UTConfigMods.java b/src/main/java/mod/acgaming/universaltweaks/config/UTConfigMods.java index 2d55449b5..fa543004a 100644 --- a/src/main/java/mod/acgaming/universaltweaks/config/UTConfigMods.java +++ b/src/main/java/mod/acgaming/universaltweaks/config/UTConfigMods.java @@ -1530,6 +1530,11 @@ public static class StorageDrawersCategory @Config.Comment("Prevents voiding of items when near capacity limits") public boolean utSDItemVoidingFixToggle = false; + @Config.RequiresMcRestart + @Config.Name("Remove Position from Drops") + @Config.Comment("Removes position data from drawers that keep their contents when broken") + public boolean utSDRemoveDropCoordinatesToggle = true; + @Config.RequiresMcRestart @Config.Name("Render Range") @Config.Comment diff --git a/src/main/java/mod/acgaming/universaltweaks/core/UTMixinLoader.java b/src/main/java/mod/acgaming/universaltweaks/core/UTMixinLoader.java index 81b933e67..9fae05088 100644 --- a/src/main/java/mod/acgaming/universaltweaks/core/UTMixinLoader.java +++ b/src/main/java/mod/acgaming/universaltweaks/core/UTMixinLoader.java @@ -198,6 +198,7 @@ public class UTMixinLoader implements ILateMixinLoader put("mixins/mods/mixins.simpledifficulty.raincollector.json", c -> c.isModPresent("simpledifficulty") && UTConfigMods.SIMPLE_DIFFICULTY.utRainCollectorCanteenToggle); put("mixins/mods/mixins.spiceoflife.dupes.json", c -> c.isModPresent("spiceoflife") && UTConfigMods.SPICE_OF_LIFE.utDuplicationFixesToggle); put("mixins/mods/mixins.steamworld.json", c -> c.isModPresent("steamworld") && UTConfigMods.STEAMWORLD.utSkyOfOldFixToggle); + put("mixins/mods/mixins.storagedrawers.dropposition.json", c -> c.isModPresent("storagedrawers") && UTConfigMods.STORAGE_DRAWERS.utSDRemoveDropCoordinatesToggle); put("mixins/mods/mixins.storagedrawers.json", c -> c.isModPresent("storagedrawers") && UTConfigMods.STORAGE_DRAWERS.utSDItemVoidingFixToggle); put("mixins/mods/mixins.tconstruct.json", c -> regularTConLoaded()); put("mixins/mods/mixins.tconstruct.oredictcache.json", c -> regularTConLoaded() && UTConfigMods.TINKERS_CONSTRUCT.utTConOreDictCacheToggle); diff --git a/src/main/java/mod/acgaming/universaltweaks/mods/storagedrawers/mixin/UTDrawersDropMixin.java b/src/main/java/mod/acgaming/universaltweaks/mods/storagedrawers/mixin/UTDrawersDropMixin.java new file mode 100644 index 000000000..9db4de713 --- /dev/null +++ b/src/main/java/mod/acgaming/universaltweaks/mods/storagedrawers/mixin/UTDrawersDropMixin.java @@ -0,0 +1,38 @@ +package mod.acgaming.universaltweaks.mods.storagedrawers.mixin; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.Constants; + +import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +// Remove the position data from the dropped item so that it stacks with others +@Mixin(value = BlockDrawers.class, remap = false) +public abstract class UTDrawersDropMixin +{ + + @ModifyExpressionValue( + method = "getDrops", + at = @At( + value = "INVOKE", + target = "Lcom/jaquadro/minecraft/storagedrawers/block/BlockDrawers;getMainDrop(Lnet/minecraft/world/IBlockAccess;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/state/IBlockState;)Lnet/minecraft/item/ItemStack;" + ) + ) + private ItemStack utRemoveDropPosition(ItemStack original) + { + if (!original.hasTagCompound()) return original; + + NBTTagCompound data = original.getTagCompound(); + if (!data.hasKey("tile", Constants.NBT.TAG_COMPOUND)) return original; + + NBTTagCompound tileData = data.getCompoundTag("tile"); + tileData.removeTag("x"); + tileData.removeTag("y"); + tileData.removeTag("z"); + + return original; + } +} diff --git a/src/main/resources/mixins/mods/mixins.storagedrawers.dropposition.json b/src/main/resources/mixins/mods/mixins.storagedrawers.dropposition.json new file mode 100644 index 000000000..4c75759a6 --- /dev/null +++ b/src/main/resources/mixins/mods/mixins.storagedrawers.dropposition.json @@ -0,0 +1,7 @@ +{ + "package": "mod.acgaming.universaltweaks.mods.storagedrawers.mixin", + "refmap": "universaltweaks.refmap.json", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": ["UTDrawersDropMixin"] +}