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();
/**
* @return true if the crafting pattern may block crafting step
*/
boolean isBlocking();
/**
* @return the inputs, can contain nulls
*/

View File

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

View File

@@ -168,6 +168,11 @@ public class CraftingPattern implements ICraftingPattern {
return ItemPattern.isOredict(stack);
}
@Override
public boolean isBlocking() {
return ItemPattern.isBlocking(stack);
}
@Override
public List<ItemStack> getInputs() {
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.ICraftingPatternProvider;
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.util.IComparer;
import com.raoulvdberge.refinedstorage.api.util.IStackList;
@@ -109,6 +110,10 @@ public abstract class CraftingStep implements ICraftingStep {
@Override
public void setStartedProcessing() {
if (getPattern().isBlocking()) {
getPattern().getContainer().setBlocked(true);
}
startedProcessing = true;
}
@@ -126,6 +131,10 @@ public abstract class CraftingStep implements ICraftingStep {
}
}
if (getPattern().isBlocking()) {
getPattern().getContainer().setBlocked(false);
}
return true;
}

View File

@@ -294,6 +294,12 @@ public class CraftingTask implements ICraftingTask {
network.insertItemTracked(stack, stack.getCount());
}
for (ICraftingStep step : getSteps()) {
if (step.getPattern().isBlocking()) {
step.getPattern().getContainer().setBlocked(false);
}
}
network.markCraftingMonitorForUpdate();
}
@@ -348,11 +354,13 @@ public class CraftingTask implements ICraftingTask {
}
if (timesUsed++ <= container.getSpeedUpdateCount()) {
if (!step.hasStartedProcessing() && step.canStartProcessing(oreDictPrepped, networkFluids)) {
step.setStartedProcessing();
step.execute(toInsertItems, toInsertFluids);
usedContainers.put(container, timesUsed);
network.markCraftingMonitorForUpdate();
if (!step.getPattern().isProcessing() || !container.isBlocked()) {
if (!step.hasStartedProcessing() && step.canStartProcessing(oreDictPrepped, networkFluids)) {
step.setStartedProcessing();
step.execute(toInsertItems, toInsertFluids);
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");
} else if (!step.hasStartedProcessing() && !step.canStartProcessing()) {
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);

View File

@@ -25,6 +25,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
public static final String ID = "crafter";
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 -> {
// 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 boolean triggeredAutocrafting = false;
private boolean blocked = false;
public NetworkNodeCrafter(INetworkNodeHolder holder) {
super(holder);
@@ -124,6 +126,10 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
RSUtils.readItems(patterns, 0, tag);
RSUtils.readItems(upgrades, 1, tag);
if (tag.hasKey(NBT_BLOCKED)) {
blocked = tag.getBoolean(NBT_BLOCKED);
}
}
@Override
@@ -138,6 +144,8 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
RSUtils.writeItems(patterns, 0, tag);
RSUtils.writeItems(upgrades, 1, tag);
tag.setBoolean(NBT_BLOCKED, blocked);
return tag;
}
@@ -204,4 +212,16 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
public boolean hasConnectivityState() {
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 GuiCheckBox oredictPattern;
private GuiCheckBox blockingPattern;
public GuiProcessingPatternEncoder(ContainerProcessingPatternEncoder container, TileProcessingPatternEncoder encoder) {
super(container, 176, 183);
@@ -28,6 +29,7 @@ public class GuiProcessingPatternEncoder extends GuiBase {
@Override
public void init(int x, int y) {
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
@@ -81,6 +83,8 @@ public class GuiProcessingPatternEncoder extends GuiBase {
if (button == oredictPattern) {
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);
}
}
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_OUTPUTS = "Outputs";
private static final String NBT_OREDICT = "Oredict";
private static final String NBT_BLOCKING = "Blocking";
public ItemPattern() {
super("pattern");
@@ -70,6 +71,10 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
if (isOredict(stack)) {
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 {
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);
}
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) {
if (!pattern.hasTagCompound()) {
pattern.setTagCompound(new NBTTagCompound());
@@ -167,6 +176,14 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider {
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) {
Set<Integer> combinedIndices = new HashSet<>();

View File

@@ -23,6 +23,7 @@ import javax.annotation.Nullable;
public class TileProcessingPatternEncoder extends TileBase {
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>() {
@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 configuration = new ItemHandlerBasic(9 * 2, new ItemHandlerListenerTile(this));
private boolean oredictPattern;
private boolean blockingTask = false;
public TileProcessingPatternEncoder() {
dataManager.addWatchedParameter(OREDICT_PATTERN);
dataManager.addWatchedParameter(BLOCKING_TASK_PATTERN);
}
@Override
@@ -59,6 +80,7 @@ public class TileProcessingPatternEncoder extends TileBase {
RSUtils.writeItems(configuration, 1, tag);
tag.setBoolean(NBT_OREDICT_PATTERN, oredictPattern);
tag.setBoolean(NBT_BLOCKING_PATTERN, blockingTask);
return tag;
}
@@ -73,6 +95,10 @@ public class TileProcessingPatternEncoder extends TileBase {
if (tag.hasKey(NBT_OREDICT_PATTERN)) {
oredictPattern = tag.getBoolean(NBT_OREDICT_PATTERN);
}
if (tag.hasKey(NBT_BLOCKING_PATTERN)) {
blockingTask = tag.getBoolean(NBT_BLOCKING_PATTERN);
}
}
public void onCreatePattern() {
@@ -80,6 +106,7 @@ public class TileProcessingPatternEncoder extends TileBase {
ItemStack pattern = new ItemStack(RSItems.PATTERN);
ItemPattern.setOredict(pattern, oredictPattern);
ItemPattern.setBlocking(pattern, blockingTask);
for (int i = 0; i < 18; ++i) {
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_none=No machine found
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.distance=%d blocks
gui.refinedstorage:crafter=Crafter
@@ -101,6 +102,7 @@ misc.refinedstorage:set=Set
misc.refinedstorage:cancel_all=Cancel All
misc.refinedstorage:priority=Priority
misc.refinedstorage:oredict=Oredict
misc.refinedstorage:blocking=Blocking
sidebutton.refinedstorage:compare.1=Compare damage
sidebutton.refinedstorage:compare.2=Compare NBT