Implement more error handling and fix rendering of some stuff.

This commit is contained in:
raoulvdberge
2018-08-11 19:01:17 +02:00
parent ae0ca35fdb
commit a10a3fe87d
3 changed files with 32 additions and 7 deletions

View File

@@ -61,31 +61,31 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen
int yy = y + 7; int yy = y + 7;
if (stored > 0) { if (stored > 0) {
drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.stored", stored)); drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.stored", API.instance().getQuantityFormatter().formatInBucketForm(stored)));
yy += 7; yy += 7;
} }
if (missing > 0) { if (missing > 0) {
drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.missing", missing)); drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.missing", API.instance().getQuantityFormatter().formatInBucketForm(missing)));
yy += 7; yy += 7;
} }
if (processing > 0) { if (processing > 0) {
drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.processing", processing)); drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.processing", API.instance().getQuantityFormatter().formatInBucketForm(processing)));
yy += 7; yy += 7;
} }
if (scheduled > 0) { if (scheduled > 0) {
drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.scheduled", scheduled)); drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.scheduled", API.instance().getQuantityFormatter().formatInBucketForm(scheduled)));
yy += 7; yy += 7;
} }
if (crafting > 0) { if (crafting > 0) {
drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.crafting", crafting)); drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy, scale), I18n.format("gui.refinedstorage:crafting_monitor.crafting", API.instance().getQuantityFormatter().formatInBucketForm(crafting)));
} }
GlStateManager.popMatrix(); GlStateManager.popMatrix();

View File

@@ -6,6 +6,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternChainLis
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList;
import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskErrorType;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingRequestInfo; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingRequestInfo;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError;
@@ -31,16 +32,18 @@ import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.*; import java.util.*;
// TODO: Calculation time.
// TODO: Progressive outputs?
public class CraftingTask implements ICraftingTask { public class CraftingTask implements ICraftingTask {
private static final long CALCULATION_TIMEOUT_MS = 5000;
private INetwork network; private INetwork network;
private ICraftingRequestInfo requested; private ICraftingRequestInfo requested;
private int quantity; private int quantity;
private ICraftingPattern pattern; private ICraftingPattern pattern;
private UUID id = UUID.randomUUID(); private UUID id = UUID.randomUUID();
private int ticks; private int ticks;
private long calculationStarted = -1;
private long executionStarted = -1; private long executionStarted = -1;
private Set<ICraftingPattern> patternsUsed = new HashSet<>();
private IStorage<ItemStack> internalStorage; private IStorage<ItemStack> internalStorage;
private IStorage<FluidStack> internalFluidStorage; private IStorage<FluidStack> internalFluidStorage;
@@ -73,6 +76,16 @@ public class CraftingTask implements ICraftingTask {
@Override @Override
@Nullable @Nullable
public ICraftingTaskError calculate() { public ICraftingTaskError calculate() {
if (calculationStarted != -1) {
throw new IllegalStateException("Task already calculated!");
}
if (executionStarted != -1) {
throw new IllegalStateException("Task already started!");
}
this.calculationStarted = System.currentTimeMillis();
int qty = this.quantity; int qty = this.quantity;
int qtyPerCraft = getQuantityPerCraft(); int qtyPerCraft = getQuantityPerCraft();
int crafted = 0; int crafted = 0;
@@ -119,6 +132,14 @@ public class CraftingTask implements ICraftingTask {
ICraftingPatternChainList patternChainList, ICraftingPatternChainList patternChainList,
ICraftingPattern pattern) { ICraftingPattern pattern) {
if (System.currentTimeMillis() - calculationStarted > CALCULATION_TIMEOUT_MS) {
return new CraftingTaskError(CraftingTaskErrorType.TOO_COMPLEX);
}
if (!patternsUsed.add(pattern)) {
return new CraftingTaskError(CraftingTaskErrorType.RECURSIVE, pattern);
}
IStackList<ItemStack> itemsToExtract = API.instance().createItemStackList(); IStackList<ItemStack> itemsToExtract = API.instance().createItemStackList();
IStackList<FluidStack> fluidsToExtract = API.instance().createFluidStackList(); IStackList<FluidStack> fluidsToExtract = API.instance().createFluidStackList();
@@ -297,6 +318,8 @@ public class CraftingTask implements ICraftingTask {
} }
} }
patternsUsed.remove(pattern);
if (pattern.isProcessing()) { if (pattern.isProcessing()) {
IStackList<ItemStack> itemsToReceive = API.instance().createItemStackList(); IStackList<ItemStack> itemsToReceive = API.instance().createItemStackList();
IStackList<FluidStack> fluidsToReceive = API.instance().createFluidStackList(); IStackList<FluidStack> fluidsToReceive = API.instance().createFluidStackList();

View File

@@ -97,6 +97,8 @@ public class GuiCraftingMonitor extends GuiBase {
@Override @Override
public void drawIcon(int x, int y, IElementDrawer<ItemStack> itemDrawer, IElementDrawer<FluidStack> fluidDrawer) { public void drawIcon(int x, int y, IElementDrawer<ItemStack> itemDrawer, IElementDrawer<FluidStack> fluidDrawer) {
if (requested.getItem() != null) { if (requested.getItem() != null) {
RenderHelper.enableGUIStandardItemLighting();
itemDrawer.draw(x, y, requested.getItem()); itemDrawer.draw(x, y, requested.getItem());
} else { } else {
fluidDrawer.draw(x, y, requested.getFluid()); fluidDrawer.draw(x, y, requested.getFluid());