diff --git a/build.gradle b/build.gradle index 8446c21..3d7141e 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { apply plugin: 'forge' -version = "1.7.10-1.5.2" +version = "1.7.10-1.5.3" group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "StorageDrawers" diff --git a/src/com/jaquadro/minecraft/storagedrawers/api/storage/IFractionalDrawer.java b/src/com/jaquadro/minecraft/storagedrawers/api/storage/IFractionalDrawer.java new file mode 100644 index 0000000..03316e3 --- /dev/null +++ b/src/com/jaquadro/minecraft/storagedrawers/api/storage/IFractionalDrawer.java @@ -0,0 +1,22 @@ +package com.jaquadro.minecraft.storagedrawers.api.storage; + +/** + * Represents a drawer with items that are a fractional component of another item within the drawer group. Compacting + * Drawers are a primary example of this drawer type. + */ +public interface IFractionalDrawer extends IDrawer +{ + /** + * Gets the storage ratio between the held item and the most compressed item within the drawer group. + * + * For example, most ingots have a conversion rate of 9 compared to metal blocks, and nuggets a rate of 81. + * Actual conversion rates are implementation-defined. + */ + int getConversionRate (); + + /** + * Gets the number of items left in the drawer if the maximum number of equivalent compressed items had been removed. + * The equivalency is determined by the conversion rate. + */ + int getStoredItemRemainder (); +} diff --git a/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityDrawersComp.java b/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityDrawersComp.java index 0111c62..e2ec887 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityDrawersComp.java +++ b/src/com/jaquadro/minecraft/storagedrawers/block/tile/TileEntityDrawersComp.java @@ -486,6 +486,19 @@ public class TileEntityDrawersComp extends TileEntityDrawers return getMaxCapacity(slot); } + @Override + public int getConversionRate (int slot) { + if (protoStack[slot] == null || convRate == null || convRate[slot] == 0) + return 0; + + return convRate[0] / convRate[slot]; + } + + @Override + public int getStoredItemRemainder (int slot) { + return TileEntityDrawersComp.this.getStoredItemRemainder(slot); + } + @Override public boolean isVoidSlot (int slot) { return isVoid(); diff --git a/src/com/jaquadro/minecraft/storagedrawers/integration/Waila.java b/src/com/jaquadro/minecraft/storagedrawers/integration/Waila.java index 76cea77..03de8d5 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/integration/Waila.java +++ b/src/com/jaquadro/minecraft/storagedrawers/integration/Waila.java @@ -3,10 +3,11 @@ package com.jaquadro.minecraft.storagedrawers.integration; import com.jaquadro.minecraft.storagedrawers.StorageDrawers; import com.jaquadro.minecraft.storagedrawers.api.registry.IWailaTooltipHandler; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; +import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup; +import com.jaquadro.minecraft.storagedrawers.api.storage.IFractionalDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.LockAttribute; import com.jaquadro.minecraft.storagedrawers.block.BlockDrawers; import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawers; -import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawersComp; import cpw.mods.fml.common.event.FMLInterModComms; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; @@ -60,10 +61,14 @@ public class Waila extends IntegrationModule public List getWailaBody (ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { TileEntityDrawers tile = (TileEntityDrawers) accessor.getTileEntity(); - for (int i = 0; i < tile.getDrawerCount(); i++) { + IDrawerGroup group = tile; + for (int i = 0; i < group.getDrawerCount(); i++) { + if (!group.isDrawerEnabled(i)) + continue; + String name = StatCollector.translateToLocal("storageDrawers.waila.empty"); - IDrawer drawer = tile.getDrawer(i); + IDrawer drawer = group.getDrawer(i); ItemStack stack = drawer.getStoredItemPrototype(); if (stack != null && stack.getItem() != null) { String stackName = stack.getDisplayName(); @@ -71,8 +76,8 @@ public class Waila extends IntegrationModule for (int j = 0, n = handlers.size(); j < n; j++) stackName = handlers.get(j).transformItemName(drawer, stackName); - if (tile instanceof TileEntityDrawersComp) - name = stackName + ((i == 0) ? " [" : " [+") + ((TileEntityDrawersComp) tile).getStoredItemRemainder(i) + "]"; + if (drawer instanceof IFractionalDrawer && ((IFractionalDrawer) drawer).getConversionRate() > 1) + name = stackName + ((i == 0) ? " [" : " [+") + ((IFractionalDrawer) drawer).getStoredItemRemainder() + "]"; else name = stackName + " [" + drawer.getStoredItemCount() + "]"; } diff --git a/src/com/jaquadro/minecraft/storagedrawers/storage/CompDrawerData.java b/src/com/jaquadro/minecraft/storagedrawers/storage/CompDrawerData.java index ba9d7e8..054e585 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/storage/CompDrawerData.java +++ b/src/com/jaquadro/minecraft/storagedrawers/storage/CompDrawerData.java @@ -1,5 +1,6 @@ package com.jaquadro.minecraft.storagedrawers.storage; +import com.jaquadro.minecraft.storagedrawers.api.storage.IFractionalDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.ILockable; import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IShroudable; import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable; @@ -8,7 +9,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -public class CompDrawerData extends BaseDrawerData implements IVoidable, IShroudable, ILockable +public class CompDrawerData extends BaseDrawerData implements IFractionalDrawer, IVoidable, IShroudable, ILockable { private static final ItemStack nullStack = new ItemStack((Item)null); @@ -97,6 +98,16 @@ public class CompDrawerData extends BaseDrawerData implements IVoidable, IShroud refresh(); } + @Override + public int getConversionRate () { + return central.getConversionRate(slot); + } + + @Override + public int getStoredItemRemainder () { + return central.getStoredItemRemainder(slot); + } + public void refresh () { reset(); refreshOreDictMatches(); diff --git a/src/com/jaquadro/minecraft/storagedrawers/storage/ICentralInventory.java b/src/com/jaquadro/minecraft/storagedrawers/storage/ICentralInventory.java index abcaff4..28c03aa 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/storage/ICentralInventory.java +++ b/src/com/jaquadro/minecraft/storagedrawers/storage/ICentralInventory.java @@ -24,6 +24,10 @@ public interface ICentralInventory public int getItemCapacityForInventoryStack (int slot); + public int getConversionRate (int slot); + + public int getStoredItemRemainder (int slot); + public boolean isVoidSlot (int slot); public boolean isShroudedSlot (int slot);