"Craft if needed" upgrade
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
@@ -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
|
Reference in New Issue
Block a user