"Craft if needed" upgrade

This commit is contained in:
Raoul Van den Berge
2016-05-05 10:32:08 +02:00
parent f5376c657c
commit ad173f2229
11 changed files with 83 additions and 17 deletions

View File

@@ -6,7 +6,7 @@ WIP
**TODO** **TODO**
- Saving crafting task state - Saving crafting task state
- Cancelling crafting tasks - Cancelling crafting tasks
- "Craft if needed" upgrade on exporter, constructor and interface - "Craft if needed" upgrade on constructor and interface
- Textures - Textures
- Update wiki - Update wiki

View File

@@ -21,7 +21,7 @@ public class ContainerExporter extends ContainerBase {
addSlotToContainer(new SlotFiltered(exporter.getUpgradesInventory(), i, 187, 6 + (i * 18), new IItemValidator() { addSlotToContainer(new SlotFiltered(exporter.getUpgradesInventory(), i, 187, 6 + (i * 18), new IItemValidator() {
@Override @Override
public boolean isValid(ItemStack stack) { public boolean isValid(ItemStack stack) {
return stack.getItem() == RefinedStorageItems.UPGRADE && stack.getMetadata() == ItemUpgrade.TYPE_SPEED; return stack.getItem() == RefinedStorageItems.UPGRADE && (stack.getMetadata() == ItemUpgrade.TYPE_SPEED || stack.getMetadata() == ItemUpgrade.TYPE_CRAFTING);
} }
})); }));
} }

View File

@@ -9,6 +9,7 @@ import java.util.List;
public class ItemUpgrade extends ItemBase { public class ItemUpgrade extends ItemBase {
public static final int TYPE_RANGE = 1; public static final int TYPE_RANGE = 1;
public static final int TYPE_SPEED = 2; public static final int TYPE_SPEED = 2;
public static final int TYPE_CRAFTING = 3;
public ItemUpgrade() { public ItemUpgrade() {
super("upgrade"); super("upgrade");
@@ -20,7 +21,7 @@ public class ItemUpgrade extends ItemBase {
@Override @Override
public void getSubItems(Item item, CreativeTabs tab, List list) { public void getSubItems(Item item, CreativeTabs tab, List list) {
for (int i = 0; i <= 2; ++i) { for (int i = 0; i <= 3; ++i) {
list.add(new ItemStack(item, 1, i)); list.add(new ItemStack(item, 1, i));
} }
} }

View File

@@ -260,6 +260,16 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
craftingTasksToAdd.add(task); craftingTasksToAdd.add(task);
} }
public boolean hasCraftingTaskWithPattern(CraftingPattern pattern, int flags) {
for (int i = 0; i < craftingTasks.size(); ++i) {
if (craftingTasks.get(i).getPattern().comparePattern(pattern, flags)) {
return true;
}
}
return false;
}
public void addCraftingTaskForPattern(CraftingPattern pattern) { public void addCraftingTaskForPattern(CraftingPattern pattern) {
if (pattern.isProcessing()) { if (pattern.isProcessing()) {
addCraftingTask(new ProcessingCraftingTask(pattern)); addCraftingTask(new ProcessingCraftingTask(pattern));
@@ -273,9 +283,13 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
} }
public CraftingPattern getPatternForItem(ItemStack stack) { public CraftingPattern getPatternForItem(ItemStack stack) {
return getPatternForItem(stack, InventoryUtils.COMPARE_DAMAGE | InventoryUtils.COMPARE_NBT);
}
public CraftingPattern getPatternForItem(ItemStack stack, int flags) {
for (CraftingPattern pattern : getPatterns()) { for (CraftingPattern pattern : getPatterns()) {
for (ItemStack output : pattern.getOutputs()) { for (ItemStack output : pattern.getOutputs()) {
if (InventoryUtils.compareStackNoQuantity(output, stack)) { if (InventoryUtils.compareStack(output, stack, flags)) {
return pattern; return pattern;
} }
} }

View File

@@ -9,6 +9,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityHopper; import net.minecraft.tileentity.TileEntityHopper;
import refinedstorage.container.ContainerExporter; import refinedstorage.container.ContainerExporter;
import refinedstorage.inventory.InventorySimple; import refinedstorage.inventory.InventorySimple;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.util.InventoryUtils; import refinedstorage.util.InventoryUtils;
@@ -48,6 +49,12 @@ public class TileExporter extends TileMachine implements ICompareConfig {
if (remaining != null) { if (remaining != null) {
controller.push(remaining); controller.push(remaining);
} }
} else if (TileInterface.hasCrafting(upgradesInventory)) {
CraftingPattern pattern = controller.getPatternForItem(slot, compare);
if (pattern != null && !controller.hasCraftingTaskWithPattern(pattern, compare)) {
controller.addCraftingTaskForPattern(pattern);
}
} }
} }
} }

View File

@@ -11,6 +11,7 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
import refinedstorage.container.ContainerInterface; import refinedstorage.container.ContainerInterface;
import refinedstorage.inventory.InventorySimple; import refinedstorage.inventory.InventorySimple;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.util.InventoryUtils; import refinedstorage.util.InventoryUtils;
@@ -40,7 +41,7 @@ public class TileInterface extends TileMachine implements ICompareConfig, ISided
int upgrades = 0; int upgrades = 0;
for (int i = 0; i < upgradesInventory.getSizeInventory(); ++i) { for (int i = 0; i < upgradesInventory.getSizeInventory(); ++i) {
if (upgradesInventory.getStackInSlot(i) != null) { if (upgradesInventory.getStackInSlot(i) != null && upgradesInventory.getStackInSlot(i).getMetadata() == ItemUpgrade.TYPE_SPEED) {
upgrades++; upgrades++;
} }
} }
@@ -48,6 +49,16 @@ public class TileInterface extends TileMachine implements ICompareConfig, ISided
return 9 - (upgrades * 2); return 9 - (upgrades * 2);
} }
public static boolean hasCrafting(InventorySimple upgradesInventory) {
for (int i = 0; i < upgradesInventory.getSizeInventory(); ++i) {
if (upgradesInventory.getStackInSlot(i) != null && upgradesInventory.getStackInSlot(i).getMetadata() == ItemUpgrade.TYPE_CRAFTING) {
return true;
}
}
return false;
}
@Override @Override
public void updateMachine() { public void updateMachine() {
if (currentSlot > 8) { if (currentSlot > 8) {
@@ -93,16 +104,18 @@ public class TileInterface extends TileMachine implements ICompareConfig, ISided
int needed = got == null ? wanted.stackSize : wanted.stackSize - got.stackSize; int needed = got == null ? wanted.stackSize : wanted.stackSize - got.stackSize;
ItemStack goingToTake = wanted.copy(); if (needed > 0) {
goingToTake.stackSize = needed; ItemStack goingToTake = wanted.copy();
goingToTake.stackSize = needed;
ItemStack took = controller.take(goingToTake, compare); ItemStack took = controller.take(goingToTake, compare);
if (took != null) { if (took != null) {
if (got == null) { if (got == null) {
inventory.setInventorySlotContents(i + 9, took); inventory.setInventorySlotContents(i + 9, took);
} else { } else {
got.stackSize += took.stackSize; got.stackSize += took.stackSize;
}
} }
} }
} }

View File

@@ -49,7 +49,7 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
} else if (newRecipe != recipe) { } else if (newRecipe != recipe) {
boolean isSameItem = inventory.getStackInSlot(3) != null ? InventoryUtils.compareStackNoQuantity(inventory.getStackInSlot(3), newRecipe.getResult()) : false; boolean isSameItem = inventory.getStackInSlot(3) != null ? InventoryUtils.compareStackNoQuantity(inventory.getStackInSlot(3), newRecipe.getResult()) : false;
if (inventory.getStackInSlot(3) == null || (isSameItem && ((inventory.getStackInSlot(3).stackSize + newRecipe.getResult().stackSize) < inventory.getStackInSlot(3).getMaxStackSize()))) { if (inventory.getStackInSlot(3) == null || (isSameItem && ((inventory.getStackInSlot(3).stackSize + newRecipe.getResult().stackSize) <= inventory.getStackInSlot(3).getMaxStackSize()))) {
recipe = newRecipe; recipe = newRecipe;
progress = 0; progress = 0;
working = true; working = true;

View File

@@ -1,6 +1,7 @@
package refinedstorage.tile.autocrafting; package refinedstorage.tile.autocrafting;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import refinedstorage.util.InventoryUtils;
public class CraftingPattern { public class CraftingPattern {
private TileCrafter crafter; private TileCrafter crafter;
@@ -30,4 +31,31 @@ public class CraftingPattern {
public ItemStack[] getOutputs() { public ItemStack[] getOutputs() {
return outputs; return outputs;
} }
public boolean comparePattern(CraftingPattern otherPattern, int flags) {
if (otherPattern == this) {
return true;
}
if (otherPattern.getInputs().length != inputs.length ||
otherPattern.getOutputs().length != outputs.length ||
otherPattern.isProcessing() != processing ||
!otherPattern.getCrafter().getPos().equals(crafter.getPos())) {
return false;
}
for (int i = 0; i < inputs.length; ++i) {
if (!InventoryUtils.compareStack(inputs[i], otherPattern.getInputs()[i], flags)) {
return false;
}
}
for (int i = 0; i < outputs.length; ++i) {
if (!InventoryUtils.compareStack(outputs[i], otherPattern.getOutputs()[i], flags)) {
return false;
}
}
return true;
}
} }

View File

@@ -1,5 +1,6 @@
package refinedstorage.tile.solderer; package refinedstorage.tile.solderer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items; import net.minecraft.init.Items;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageItems;
@@ -30,7 +31,7 @@ public class SoldererRecipeUpgrade implements ISoldererRecipe {
case ItemUpgrade.TYPE_RANGE: case ItemUpgrade.TYPE_RANGE:
return new ItemStack(Items.ender_pearl); return new ItemStack(Items.ender_pearl);
case ItemUpgrade.TYPE_SPEED: case ItemUpgrade.TYPE_SPEED:
return new ItemStack(Items.redstone); return new ItemStack(Blocks.redstone_block);
} }
return null; return null;

View File

@@ -131,4 +131,5 @@ item.refinedstorage:storage_part.3.name=64k Storage Part
item.refinedstorage:pattern.name=Pattern item.refinedstorage:pattern.name=Pattern
item.refinedstorage:upgrade.0.name=Upgrade item.refinedstorage:upgrade.0.name=Upgrade
item.refinedstorage:upgrade.1.name=Range Upgrade item.refinedstorage:upgrade.1.name=Range Upgrade
item.refinedstorage:upgrade.2.name=Speed Upgrade item.refinedstorage:upgrade.2.name=Speed Upgrade
item.refinedstorage:upgrade.3.name=Crafting Upgrade

View File

@@ -131,4 +131,5 @@ item.refinedstorage:storage_part.3.name=64k Opslagdeel
item.refinedstorage:pattern.name=Patroon item.refinedstorage:pattern.name=Patroon
item.refinedstorage:upgrade.0.name=Upgrade item.refinedstorage:upgrade.0.name=Upgrade
item.refinedstorage:upgrade.1.name=Afstand Upgrade item.refinedstorage:upgrade.1.name=Afstand Upgrade
item.refinedstorage:upgrade.2.name=Snelheid Upgrade item.refinedstorage:upgrade.2.name=Snelheid Upgrade
item.refinedstorage:upgrade.3.name=Crafting Upgrade