package crazypants.enderio.machine; public class SlotDefinition { public final int minUpgradeSlot; public final int maxUpgradeSlot; public final int minInputSlot; public final int maxInputSlot; public final int minOutputSlot; public final int maxOutputSlot; public SlotDefinition(int numInputs, int numOutputs, int numUpgradeSlots) { this.minInputSlot = 0; this.maxInputSlot = numInputs - 1; this.minOutputSlot = numOutputs > 0 ? numInputs : -10; this.maxOutputSlot = minOutputSlot + (numOutputs - 1); this.minUpgradeSlot = numUpgradeSlots > 0 ? numInputs + numOutputs : -1; this.maxUpgradeSlot = minUpgradeSlot + (numUpgradeSlots - 1); } public SlotDefinition(int numInputs, int numOutputs) { this.minInputSlot = 0; this.maxInputSlot = numInputs - 1; this.minOutputSlot = numOutputs > 0 ? numInputs : -10; this.maxOutputSlot = minOutputSlot + (numOutputs - 1); this.minUpgradeSlot = Math.max(maxInputSlot, maxOutputSlot) + 1; this.maxUpgradeSlot = minUpgradeSlot; } public SlotDefinition(int minInputSlot, int maxInputSlot, int minOutputSlot, int maxOutputSlot, int minUpgradeSlot, int maxUpgradeSlot) { this.minInputSlot = minInputSlot; this.maxInputSlot = maxInputSlot; this.minOutputSlot = minOutputSlot; this.maxOutputSlot = maxOutputSlot; this.minUpgradeSlot = minUpgradeSlot; this.maxUpgradeSlot = maxUpgradeSlot; } public boolean isUpgradeSlot(int slot) { return slot >= minUpgradeSlot && slot <= maxUpgradeSlot; } public boolean isInputSlot(int slot) { return slot >= minInputSlot && slot <= maxInputSlot; } public boolean isOutputSlot(int slot) { return slot >= minOutputSlot && slot <= maxOutputSlot; } public int getNumUpgradeSlots() { if(minUpgradeSlot < 0) { return 0; } return Math.max(0, maxUpgradeSlot - minUpgradeSlot + 1); } public int getNumInputSlots() { if(minInputSlot < 0) { return 0; } return Math.max(0, maxInputSlot - minInputSlot + 1); } public int getNumOutputSlots() { if(minOutputSlot < 0) { return 0; } return Math.max(0, maxOutputSlot - minOutputSlot + 1); } public int getNumSlots() { return Math.max(Math.max(getMaxInputSlot(), getMaxOutputSlot()), getMaxUpgradeSlot()) + 1; } public int getMinUpgradeSlot() { return minUpgradeSlot; } public int getMaxUpgradeSlot() { return maxUpgradeSlot; } public int getMinInputSlot() { return minInputSlot; } public int getMaxInputSlot() { return maxInputSlot; } public int getMinOutputSlot() { return minOutputSlot; } public int getMaxOutputSlot() { return maxOutputSlot; } @Override public String toString() { return "SlotDefinition [minUpgradeSlot=" + minUpgradeSlot + ", maxUpgradeSlot=" + maxUpgradeSlot + ", minInputSlot=" + minInputSlot + ", maxInputSlot=" + maxInputSlot + ", minOutputSlot=" + minOutputSlot + ", maxOutputSlot=" + maxOutputSlot + ", nunSlots=" + getNumSlots() + " ]"; } }