Blocking Mode for pattern (#785)

* Blocking Mode for pattern

* Another approach

* Let's not forget about task inside task

* Ops

* Better Approach

* Tweak!

* !Fix

* Moved stuff under CraftingStep

* Blocking Mode for pattern

Another approach

Let's not forget about task inside task

Ops

Better Approach

Tweak!

!Fix

Moved stuff under CraftingStep

* Removed unneeded stuff
This commit is contained in:
InusualZ
2016-12-28 02:44:30 +11:00
committed by Raoul
parent 4526c1a25f
commit da4b55ac6d
10 changed files with 114 additions and 5 deletions

View File

@@ -35,6 +35,11 @@ public interface ICraftingPattern {
*/ */
boolean isOredict(); boolean isOredict();
/**
* @return true if the crafting pattern may block crafting step
*/
boolean isBlocking();
/** /**
* @return the inputs, can contain nulls * @return the inputs, can contain nulls
*/ */

View File

@@ -34,4 +34,8 @@ public interface ICraftingPatternContainer {
* @return the position of this container * @return the position of this container
*/ */
BlockPos getPosition(); BlockPos getPosition();
boolean isBlocked();
void setBlocked(boolean value);
} }

View File

@@ -168,6 +168,11 @@ public class CraftingPattern implements ICraftingPattern {
return ItemPattern.isOredict(stack); return ItemPattern.isOredict(stack);
} }
@Override
public boolean isBlocking() {
return ItemPattern.isBlocking(stack);
}
@Override @Override
public List<ItemStack> getInputs() { public List<ItemStack> getInputs() {
return inputs; return inputs;

View File

@@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternProvider; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternProvider;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingStep; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingStep;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.api.util.IStackList; import com.raoulvdberge.refinedstorage.api.util.IStackList;
@@ -109,6 +110,10 @@ public abstract class CraftingStep implements ICraftingStep {
@Override @Override
public void setStartedProcessing() { public void setStartedProcessing() {
if (getPattern().isBlocking()) {
getPattern().getContainer().setBlocked(true);
}
startedProcessing = true; startedProcessing = true;
} }
@@ -126,6 +131,10 @@ public abstract class CraftingStep implements ICraftingStep {
} }
} }
if (getPattern().isBlocking()) {
getPattern().getContainer().setBlocked(false);
}
return true; return true;
} }

View File

@@ -294,6 +294,12 @@ public class CraftingTask implements ICraftingTask {
network.insertItemTracked(stack, stack.getCount()); network.insertItemTracked(stack, stack.getCount());
} }
for (ICraftingStep step : getSteps()) {
if (step.getPattern().isBlocking()) {
step.getPattern().getContainer().setBlocked(false);
}
}
network.markCraftingMonitorForUpdate(); network.markCraftingMonitorForUpdate();
} }
@@ -348,11 +354,13 @@ public class CraftingTask implements ICraftingTask {
} }
if (timesUsed++ <= container.getSpeedUpdateCount()) { if (timesUsed++ <= container.getSpeedUpdateCount()) {
if (!step.hasStartedProcessing() && step.canStartProcessing(oreDictPrepped, networkFluids)) { if (!step.getPattern().isProcessing() || !container.isBlocked()) {
step.setStartedProcessing(); if (!step.hasStartedProcessing() && step.canStartProcessing(oreDictPrepped, networkFluids)) {
step.execute(toInsertItems, toInsertFluids); step.setStartedProcessing();
usedContainers.put(container, timesUsed); step.execute(toInsertItems, toInsertFluids);
network.markCraftingMonitorForUpdate(); usedContainers.put(container, timesUsed);
network.markCraftingMonitorForUpdate();
}
} }
} }
} }
@@ -535,6 +543,8 @@ public class CraftingTask implements ICraftingTask {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_none"); element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_none");
} else if (!step.hasStartedProcessing() && !step.canStartProcessing()) { } else if (!step.hasStartedProcessing() && !step.canStartProcessing()) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_in_use"); element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_in_use");
} else if (!step.hasStartedProcessing() && step.getPattern().getContainer().isBlocked()) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.blocked");
} }
elements.add(element); elements.add(element);

View File

@@ -25,6 +25,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
public static final String ID = "crafter"; public static final String ID = "crafter";
private static final String NBT_TRIGGERED_AUTOCRAFTING = "TriggeredAutocrafting"; private static final String NBT_TRIGGERED_AUTOCRAFTING = "TriggeredAutocrafting";
private static final String NBT_BLOCKED = "Blocked";
private ItemHandlerBasic patterns = new ItemHandlerBasic(9, new ItemHandlerListenerNetworkNode(this), s -> { private ItemHandlerBasic patterns = new ItemHandlerBasic(9, new ItemHandlerListenerNetworkNode(this), s -> {
// We can only validate the crafting pattern if the world exists. // We can only validate the crafting pattern if the world exists.
@@ -54,6 +55,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ItemHandlerListenerNetworkNode(this), ItemUpgrade.TYPE_SPEED); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ItemHandlerListenerNetworkNode(this), ItemUpgrade.TYPE_SPEED);
private boolean triggeredAutocrafting = false; private boolean triggeredAutocrafting = false;
private boolean blocked = false;
public NetworkNodeCrafter(INetworkNodeHolder holder) { public NetworkNodeCrafter(INetworkNodeHolder holder) {
super(holder); super(holder);
@@ -124,6 +126,10 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
RSUtils.readItems(patterns, 0, tag); RSUtils.readItems(patterns, 0, tag);
RSUtils.readItems(upgrades, 1, tag); RSUtils.readItems(upgrades, 1, tag);
if (tag.hasKey(NBT_BLOCKED)) {
blocked = tag.getBoolean(NBT_BLOCKED);
}
} }
@Override @Override
@@ -138,6 +144,8 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
RSUtils.writeItems(patterns, 0, tag); RSUtils.writeItems(patterns, 0, tag);
RSUtils.writeItems(upgrades, 1, tag); RSUtils.writeItems(upgrades, 1, tag);
tag.setBoolean(NBT_BLOCKED, blocked);
return tag; return tag;
} }
@@ -204,4 +212,16 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
public boolean hasConnectivityState() { public boolean hasConnectivityState() {
return true; return true;
} }
@Override
public boolean isBlocked() {
return blocked;
}
@Override
public void setBlocked(boolean value) {
blocked = value;
markDirty();
}
} }

View File

@@ -18,6 +18,7 @@ public class GuiProcessingPatternEncoder extends GuiBase {
private TileProcessingPatternEncoder encoder; private TileProcessingPatternEncoder encoder;
private GuiCheckBox oredictPattern; private GuiCheckBox oredictPattern;
private GuiCheckBox blockingPattern;
public GuiProcessingPatternEncoder(ContainerProcessingPatternEncoder container, TileProcessingPatternEncoder encoder) { public GuiProcessingPatternEncoder(ContainerProcessingPatternEncoder container, TileProcessingPatternEncoder encoder) {
super(container, 176, 183); super(container, 176, 183);
@@ -28,6 +29,7 @@ public class GuiProcessingPatternEncoder extends GuiBase {
@Override @Override
public void init(int x, int y) { public void init(int x, int y) {
oredictPattern = addCheckBox(x + 7, y + 76, I18n.format("misc.refinedstorage:oredict"), TileProcessingPatternEncoder.OREDICT_PATTERN.getValue()); oredictPattern = addCheckBox(x + 7, y + 76, I18n.format("misc.refinedstorage:oredict"), TileProcessingPatternEncoder.OREDICT_PATTERN.getValue());
blockingPattern = addCheckBox(x + 60, y + 76, I18n.format("misc.refinedstorage:blocking"), TileProcessingPatternEncoder.BLOCKING_TASK_PATTERN.getValue());
} }
@Override @Override
@@ -81,6 +83,8 @@ public class GuiProcessingPatternEncoder extends GuiBase {
if (button == oredictPattern) { if (button == oredictPattern) {
TileDataManager.setParameter(TileProcessingPatternEncoder.OREDICT_PATTERN, oredictPattern.isChecked()); TileDataManager.setParameter(TileProcessingPatternEncoder.OREDICT_PATTERN, oredictPattern.isChecked());
} else if (button == blockingPattern) {
TileDataManager.setParameter(TileProcessingPatternEncoder.BLOCKING_TASK_PATTERN, blockingPattern.isChecked());
} }
} }
@@ -104,4 +108,10 @@ public class GuiProcessingPatternEncoder extends GuiBase {
oredictPattern.setIsChecked(checked); oredictPattern.setIsChecked(checked);
} }
} }
public void updateBlockingPattern(boolean checked) {
if (blockingPattern != null) {
blockingPattern.setIsChecked(checked);
}
}
} }

View File

@@ -35,6 +35,7 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
private static final String NBT_SLOT = "Slot_%d"; private static final String NBT_SLOT = "Slot_%d";
private static final String NBT_OUTPUTS = "Outputs"; private static final String NBT_OUTPUTS = "Outputs";
private static final String NBT_OREDICT = "Oredict"; private static final String NBT_OREDICT = "Oredict";
private static final String NBT_BLOCKING = "Blocking";
public ItemPattern() { public ItemPattern() {
super("pattern"); super("pattern");
@@ -70,6 +71,10 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
if (isOredict(stack)) { if (isOredict(stack)) {
tooltip.add(TextFormatting.BLUE + I18n.format("misc.refinedstorage:pattern.oredict") + TextFormatting.RESET); tooltip.add(TextFormatting.BLUE + I18n.format("misc.refinedstorage:pattern.oredict") + TextFormatting.RESET);
} }
if (isBlocking(stack)) {
tooltip.add(TextFormatting.BLUE + I18n.format("misc.refinedstorage:blocking") + TextFormatting.RESET);
}
} else { } else {
tooltip.add(TextFormatting.RED + I18n.format("misc.refinedstorage:pattern.invalid") + TextFormatting.RESET); tooltip.add(TextFormatting.RED + I18n.format("misc.refinedstorage:pattern.invalid") + TextFormatting.RESET);
@@ -159,6 +164,10 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
return pattern.hasTagCompound() && pattern.getTagCompound().hasKey(NBT_OREDICT) && pattern.getTagCompound().getBoolean(NBT_OREDICT); return pattern.hasTagCompound() && pattern.getTagCompound().hasKey(NBT_OREDICT) && pattern.getTagCompound().getBoolean(NBT_OREDICT);
} }
public static boolean isBlocking(ItemStack pattern) {
return pattern.hasTagCompound() && pattern.getTagCompound().hasKey(NBT_BLOCKING) && pattern.getTagCompound().getBoolean(NBT_BLOCKING);
}
public static void setOredict(ItemStack pattern, boolean oredict) { public static void setOredict(ItemStack pattern, boolean oredict) {
if (!pattern.hasTagCompound()) { if (!pattern.hasTagCompound()) {
pattern.setTagCompound(new NBTTagCompound()); pattern.setTagCompound(new NBTTagCompound());
@@ -167,6 +176,14 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
pattern.getTagCompound().setBoolean(NBT_OREDICT, oredict); pattern.getTagCompound().setBoolean(NBT_OREDICT, oredict);
} }
public static void setBlocking(ItemStack pattern, boolean blockingTask) {
if (!pattern.hasTagCompound()) {
pattern.setTagCompound(new NBTTagCompound());
}
pattern.getTagCompound().setBoolean(NBT_BLOCKING, blockingTask);
}
public static void combineItems(List<String> tooltip, boolean displayAmount, NonNullList<ItemStack> stacks) { public static void combineItems(List<String> tooltip, boolean displayAmount, NonNullList<ItemStack> stacks) {
Set<Integer> combinedIndices = new HashSet<>(); Set<Integer> combinedIndices = new HashSet<>();

View File

@@ -23,6 +23,7 @@ import javax.annotation.Nullable;
public class TileProcessingPatternEncoder extends TileBase { public class TileProcessingPatternEncoder extends TileBase {
private static final String NBT_OREDICT_PATTERN = "OredictPattern"; private static final String NBT_OREDICT_PATTERN = "OredictPattern";
private static final String NBT_BLOCKING_PATTERN = "BlockingPattern";
public static final TileDataParameter<Boolean> OREDICT_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileProcessingPatternEncoder>() { public static final TileDataParameter<Boolean> OREDICT_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileProcessingPatternEncoder>() {
@Override @Override
@@ -42,13 +43,33 @@ public class TileProcessingPatternEncoder extends TileBase {
} }
}); });
public static final TileDataParameter<Boolean> BLOCKING_TASK_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileProcessingPatternEncoder>() {
@Override
public Boolean getValue(TileProcessingPatternEncoder tile) {
return tile.blockingTask;
}
}, new ITileDataConsumer<Boolean, TileProcessingPatternEncoder>() {
@Override
public void setValue(TileProcessingPatternEncoder tile, Boolean value) {
tile.blockingTask = value;
tile.markDirty();
}
}, parameter -> {
if (Minecraft.getMinecraft().currentScreen instanceof GuiProcessingPatternEncoder) {
((GuiProcessingPatternEncoder) Minecraft.getMinecraft().currentScreen).updateBlockingPattern(parameter.getValue());
}
});
private ItemHandlerBasic patterns = new ItemHandlerBasic(2, new ItemHandlerListenerTile(this), new ItemValidatorBasic(RSItems.PATTERN)); private ItemHandlerBasic patterns = new ItemHandlerBasic(2, new ItemHandlerListenerTile(this), new ItemValidatorBasic(RSItems.PATTERN));
private ItemHandlerBasic configuration = new ItemHandlerBasic(9 * 2, new ItemHandlerListenerTile(this)); private ItemHandlerBasic configuration = new ItemHandlerBasic(9 * 2, new ItemHandlerListenerTile(this));
private boolean oredictPattern; private boolean oredictPattern;
private boolean blockingTask = false;
public TileProcessingPatternEncoder() { public TileProcessingPatternEncoder() {
dataManager.addWatchedParameter(OREDICT_PATTERN); dataManager.addWatchedParameter(OREDICT_PATTERN);
dataManager.addWatchedParameter(BLOCKING_TASK_PATTERN);
} }
@Override @Override
@@ -59,6 +80,7 @@ public class TileProcessingPatternEncoder extends TileBase {
RSUtils.writeItems(configuration, 1, tag); RSUtils.writeItems(configuration, 1, tag);
tag.setBoolean(NBT_OREDICT_PATTERN, oredictPattern); tag.setBoolean(NBT_OREDICT_PATTERN, oredictPattern);
tag.setBoolean(NBT_BLOCKING_PATTERN, blockingTask);
return tag; return tag;
} }
@@ -73,6 +95,10 @@ public class TileProcessingPatternEncoder extends TileBase {
if (tag.hasKey(NBT_OREDICT_PATTERN)) { if (tag.hasKey(NBT_OREDICT_PATTERN)) {
oredictPattern = tag.getBoolean(NBT_OREDICT_PATTERN); oredictPattern = tag.getBoolean(NBT_OREDICT_PATTERN);
} }
if (tag.hasKey(NBT_BLOCKING_PATTERN)) {
blockingTask = tag.getBoolean(NBT_BLOCKING_PATTERN);
}
} }
public void onCreatePattern() { public void onCreatePattern() {
@@ -80,6 +106,7 @@ public class TileProcessingPatternEncoder extends TileBase {
ItemStack pattern = new ItemStack(RSItems.PATTERN); ItemStack pattern = new ItemStack(RSItems.PATTERN);
ItemPattern.setOredict(pattern, oredictPattern); ItemPattern.setOredict(pattern, oredictPattern);
ItemPattern.setBlocking(pattern, blockingTask);
for (int i = 0; i < 18; ++i) { for (int i = 0; i < 18; ++i) {
if (!configuration.getStackInSlot(i).isEmpty()) { if (!configuration.getStackInSlot(i).isEmpty()) {

View File

@@ -29,6 +29,7 @@ gui.refinedstorage:crafting_monitor.items_missing=Items missing
gui.refinedstorage:crafting_monitor.machine_in_use=Machine is in use gui.refinedstorage:crafting_monitor.machine_in_use=Machine is in use
gui.refinedstorage:crafting_monitor.machine_none=No machine found gui.refinedstorage:crafting_monitor.machine_none=No machine found
gui.refinedstorage:crafting_monitor.waiting_for_items=Waiting for items gui.refinedstorage:crafting_monitor.waiting_for_items=Waiting for items
gui.refinedstorage:crafting_monitor.blocked=Blocked, waiting on other task
gui.refinedstorage:wireless_transmitter=Wireless Transmitter gui.refinedstorage:wireless_transmitter=Wireless Transmitter
gui.refinedstorage:wireless_transmitter.distance=%d blocks gui.refinedstorage:wireless_transmitter.distance=%d blocks
gui.refinedstorage:crafter=Crafter gui.refinedstorage:crafter=Crafter
@@ -101,6 +102,7 @@ misc.refinedstorage:set=Set
misc.refinedstorage:cancel_all=Cancel All misc.refinedstorage:cancel_all=Cancel All
misc.refinedstorage:priority=Priority misc.refinedstorage:priority=Priority
misc.refinedstorage:oredict=Oredict misc.refinedstorage:oredict=Oredict
misc.refinedstorage:blocking=Blocking
sidebutton.refinedstorage:compare.1=Compare damage sidebutton.refinedstorage:compare.1=Compare damage
sidebutton.refinedstorage:compare.2=Compare NBT sidebutton.refinedstorage:compare.2=Compare NBT