diff --git a/CHANGELOG.md b/CHANGELOG.md index d27f47ec2..2751e23e3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ WIP **TODO** +- Fix wrong quantity per craft +- Better way to do crafting upgrades - Textures - Update wiki diff --git a/src/main/java/refinedstorage/RefinedStorageUtils.java b/src/main/java/refinedstorage/RefinedStorageUtils.java index a451c31b0..984fa2367 100755 --- a/src/main/java/refinedstorage/RefinedStorageUtils.java +++ b/src/main/java/refinedstorage/RefinedStorageUtils.java @@ -202,12 +202,20 @@ public class RefinedStorageUtils { return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE); } - public static int getSpeed(InventorySimple upgrades) { - return getSpeed(upgrades, 9, 2); + public static int getSpeed(InventorySimple inventory) { + return getSpeed(inventory, 9, 2, 0); + } + + public static int getSpeed(InventorySimple inventory, int start) { + return getSpeed(inventory, 9, 2, start); } public static int getSpeed(InventorySimple inventory, int speed, int speedIncrease) { - for (int i = 0; i < inventory.getSizeInventory(); ++i) { + return getSpeed(inventory, speed, speedIncrease, 0); + } + + public static int getSpeed(InventorySimple inventory, int speed, int speedIncrease, int start) { + for (int i = start; i < inventory.getSizeInventory(); ++i) { if (inventory.getStackInSlot(i) != null && inventory.getStackInSlot(i).getMetadata() == ItemUpgrade.TYPE_SPEED) { speed -= speedIncrease; } @@ -221,9 +229,13 @@ public class RefinedStorageUtils { } public static int getUpgradeCount(InventorySimple inventory, int type) { + return getUpgradeCount(inventory, type, 0); + } + + public static int getUpgradeCount(InventorySimple inventory, int type, int start) { int upgrades = 0; - for (int i = 0; i < inventory.getSizeInventory(); ++i) { + for (int i = start; i < inventory.getSizeInventory(); ++i) { if (inventory.getStackInSlot(i) != null && inventory.getStackInSlot(i).getMetadata() == type) { upgrades++; } diff --git a/src/main/java/refinedstorage/block/BlockSolderer.java b/src/main/java/refinedstorage/block/BlockSolderer.java index ce5f1916b..60d9a034d 100755 --- a/src/main/java/refinedstorage/block/BlockSolderer.java +++ b/src/main/java/refinedstorage/block/BlockSolderer.java @@ -14,8 +14,7 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileDetector; -import refinedstorage.tile.TileSolderer; +import refinedstorage.tile.solderer.TileSolderer; public class BlockSolderer extends BlockMachine { public static final PropertyBool WORKING = PropertyBool.create("working"); diff --git a/src/main/java/refinedstorage/container/ContainerSolderer.java b/src/main/java/refinedstorage/container/ContainerSolderer.java index a50a3bde1..5ca2e212b 100755 --- a/src/main/java/refinedstorage/container/ContainerSolderer.java +++ b/src/main/java/refinedstorage/container/ContainerSolderer.java @@ -7,7 +7,7 @@ import refinedstorage.container.slot.SlotFiltered; import refinedstorage.container.slot.SlotOutput; import refinedstorage.container.slot.UpgradeItemValidator; import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.TileSolderer; +import refinedstorage.tile.solderer.TileSolderer; public class ContainerSolderer extends ContainerBase { public ContainerSolderer(EntityPlayer player, TileSolderer solderer) { @@ -25,7 +25,7 @@ public class ContainerSolderer extends ContainerBase { addSlotToContainer(new SlotOutput(solderer, 3, 134, 38)); for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotFiltered(solderer.getUpgradesInventory(), i, 187, 6 + (i * 18), new UpgradeItemValidator(ItemUpgrade.TYPE_SPEED))); + addSlotToContainer(new SlotFiltered(solderer, 4 + i, 187, 6 + (i * 18), new UpgradeItemValidator(ItemUpgrade.TYPE_SPEED))); } addPlayerInventory(8, 95); diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 6ec7b9f73..adfbf43c9 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -16,6 +16,7 @@ import refinedstorage.tile.autocrafting.TileCraftingMonitor; import refinedstorage.tile.autocrafting.TileProcessingPatternEncoder; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; +import refinedstorage.tile.solderer.TileSolderer; public class GuiHandler implements IGuiHandler { private Container getContainer(int ID, EntityPlayer player, TileEntity tile) { diff --git a/src/main/java/refinedstorage/gui/GuiSolderer.java b/src/main/java/refinedstorage/gui/GuiSolderer.java index 3ba9386c6..f2d0bea9d 100755 --- a/src/main/java/refinedstorage/gui/GuiSolderer.java +++ b/src/main/java/refinedstorage/gui/GuiSolderer.java @@ -2,7 +2,7 @@ package refinedstorage.gui; import refinedstorage.container.ContainerSolderer; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileSolderer; +import refinedstorage.tile.solderer.TileSolderer; public class GuiSolderer extends GuiBase { private TileSolderer solderer; diff --git a/src/main/java/refinedstorage/tile/CraftingTaskScheduler.java b/src/main/java/refinedstorage/tile/CraftingTaskScheduler.java new file mode 100755 index 000000000..1bf0679fa --- /dev/null +++ b/src/main/java/refinedstorage/tile/CraftingTaskScheduler.java @@ -0,0 +1,47 @@ +package refinedstorage.tile; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import refinedstorage.RefinedStorageUtils; +import refinedstorage.tile.autocrafting.CraftingPattern; + +public class CraftingTaskScheduler { + public static String NBT_SCHEDULED = "CraftingTaskScheduled"; + + private ItemStack scheduledFor; + + public boolean canSchedule(int compare, ItemStack item) { + // We can only reschedule if: + // - we didn't schedule anything before + // - the item we can't to schedule is another item + return scheduledFor == null || !RefinedStorageUtils.compareStack(scheduledFor, item, compare); + } + + public void schedule(TileController controller, int compare, ItemStack item) { + CraftingPattern pattern = controller.getPattern(item, compare); + + if (pattern != null) { + scheduledFor = item; + + controller.addCraftingTask(pattern); + } + } + + public void resetSchedule() { + this.scheduledFor = null; + } + + public void writeToNBT(NBTTagCompound tag) { + if (scheduledFor != null) { + tag.setTag(NBT_SCHEDULED, scheduledFor.serializeNBT()); + } else { + tag.removeTag(NBT_SCHEDULED); + } + } + + public void readFromNBT(NBTTagCompound tag) { + if (tag.hasKey(NBT_SCHEDULED)) { + scheduledFor = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(NBT_SCHEDULED)); + } + } +} diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 7a6b2d97f..68443caaa 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -14,7 +14,6 @@ import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerConstructor; import refinedstorage.inventory.InventorySimple; import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.autocrafting.CraftingPattern; import refinedstorage.tile.config.ICompareConfig; public class TileConstructor extends TileMachine implements ICompareConfig { @@ -27,6 +26,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig { private int compare = 0; + private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(); + @Override public int getEnergyUsage() { return 1; @@ -43,15 +44,16 @@ public class TileConstructor extends TileMachine implements ICompareConfig { ItemStack took = controller.take(inventory.getStackInSlot(0).copy(), compare); if (took != null) { + scheduler.resetSchedule(); worldObj.setBlockState(front, block.getStateFromMeta(took.getItemDamage()), 1 | 2); // From ItemBlock.onItemUse SoundType blockSound = block.getStepSound(); worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F); } else if (RefinedStorageUtils.hasUpgrade(upgradesInventory, ItemUpgrade.TYPE_CRAFTING)) { - CraftingPattern pattern = controller.getPattern(inventory.getStackInSlot(0), compare); + ItemStack toCraft = inventory.getStackInSlot(0); - if (pattern != null && !controller.hasCraftingTask(pattern, compare)) { - controller.addCraftingTask(pattern); + if (scheduler.canSchedule(compare, toCraft)) { + scheduler.schedule(controller, compare, toCraft); } } } @@ -80,6 +82,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig { RefinedStorageUtils.restoreInventory(inventory, 0, nbt); RefinedStorageUtils.restoreInventory(upgradesInventory, 1, nbt); + + scheduler.readFromNBT(nbt); } @Override @@ -90,6 +94,8 @@ public class TileConstructor extends TileMachine implements ICompareConfig { RefinedStorageUtils.saveInventory(inventory, 0, nbt); RefinedStorageUtils.saveInventory(upgradesInventory, 1, nbt); + + scheduler.writeToNBT(nbt); } @Override @@ -115,6 +121,11 @@ public class TileConstructor extends TileMachine implements ICompareConfig { return upgradesInventory; } + @Override + public IInventory getDroppedInventory() { + return upgradesInventory; + } + public IInventory getInventory() { return inventory; } diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index bebc7c80b..a04c94476 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -147,6 +147,11 @@ public class TileDestructor extends TileMachine implements ICompareConfig, IMode return upgradesInventory; } + @Override + public IInventory getDroppedInventory() { + return upgradesInventory; + } + public IInventory getInventory() { return inventory; } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index b5bcc87c7..7ecbf1821 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -277,6 +277,20 @@ public class TileInterface extends TileMachine implements ICompareConfig, ISided @Override public IInventory getDroppedInventory() { - return upgradesInventory; + InventorySimple dummy = new InventorySimple(null, 9 + 9 + 4); + + for (int i = 0; i < 9; ++i) { + dummy.setInventorySlotContents(i, inventory.getStackInSlot(i)); + } + + for (int i = 0; i < 9; ++i) { + dummy.setInventorySlotContents(9 + i, inventory.getStackInSlot(18 + i)); + } + + for (int i = 0; i < 4; ++i) { + dummy.setInventorySlotContents(18 + i, upgradesInventory.getStackInSlot(i)); + } + + return dummy; } } diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/solderer/TileSolderer.java similarity index 93% rename from src/main/java/refinedstorage/tile/TileSolderer.java rename to src/main/java/refinedstorage/tile/solderer/TileSolderer.java index 9219e6b00..0c3cbe7d6 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/solderer/TileSolderer.java @@ -1,4 +1,4 @@ -package refinedstorage.tile; +package refinedstorage.tile.solderer; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; @@ -13,8 +13,7 @@ import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerSolderer; import refinedstorage.inventory.InventorySimple; import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.solderer.ISoldererRecipe; -import refinedstorage.tile.solderer.SoldererRegistry; +import refinedstorage.tile.TileMachine; public class TileSolderer extends TileMachine implements IInventory, ISidedInventory { public static final String NBT_WORKING = "Working"; @@ -27,8 +26,7 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven 3 }; - private InventorySimple inventory = new InventorySimple("solderer", 4, this); - private InventorySimple upgradesInventory = new InventorySimple("upgrades", 4, this); + private InventorySimple inventory = new InventorySimple("solderer", 4 + 4, this); private ISoldererRecipe recipe; @@ -58,7 +56,7 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven markDirty(); } } else if (working) { - progress += 1 + RefinedStorageUtils.getUpgradeCount(upgradesInventory, ItemUpgrade.TYPE_SPEED); + progress += 1 + RefinedStorageUtils.getUpgradeCount(inventory, ItemUpgrade.TYPE_SPEED, 4); if (progress >= recipe.getDuration()) { if (inventory.getStackInSlot(3) != null) { @@ -98,7 +96,6 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven super.readFromNBT(nbt); RefinedStorageUtils.restoreInventory(this, 0, nbt); - RefinedStorageUtils.restoreInventory(upgradesInventory, 1, nbt); recipe = SoldererRegistry.getRecipe(inventory); @@ -116,7 +113,6 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven super.writeToNBT(nbt); RefinedStorageUtils.saveInventory(this, 0, nbt); - RefinedStorageUtils.saveInventory(upgradesInventory, 1, nbt); nbt.setBoolean(NBT_WORKING, working); nbt.setInteger(NBT_PROGRESS, progress); @@ -278,8 +274,4 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven public boolean canExtractItem(int slot, ItemStack stack, EnumFacing direction) { return slot == 3; } - - public InventorySimple getUpgradesInventory() { - return upgradesInventory; - } }