Merge pull request #360 from way2muchnoise/mc1.10

Finish Disk Manipulator
This commit is contained in:
Raoul
2016-09-18 15:28:39 +02:00
committed by GitHub
10 changed files with 117 additions and 23 deletions

View File

@@ -93,7 +93,7 @@ public abstract class GuiBase extends GuiContainer {
Slot slot = inventorySlots.inventorySlots.get(i);
if (slot instanceof SlotItemHandler && ((SlotItemHandler) slot).getItemHandler() instanceof ItemHandlerFluid) {
FluidStack stack = ((ItemHandlerFluid) ((SlotItemHandler) slot).getItemHandler()).getFluids()[slot.getSlotIndex()];
FluidStack stack = ((ItemHandlerFluid) ((SlotItemHandler) slot).getItemHandler()).getFluidStackInSlot(slot.getSlotIndex());
if (stack != null) {
FLUID_RENDERER.draw(mc, guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, stack);

View File

@@ -36,5 +36,7 @@ public class GuiDiskManipulator extends GuiBase {
public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("block.refinedstorage:disk_manipulator.name"));
drawString(7, 117, t("container.inventory"));
drawString(25, 45, t("gui.refinedstorage:fluid_interface.in"));
drawString(115, 45, t("gui.refinedstorage:fluid_interface.out"));
}
}

View File

@@ -28,6 +28,10 @@ public class ItemHandlerFluid extends ItemHandlerBasic {
}
}
public FluidStack getFluidStackInSlot(int slot) {
return fluids[slot];
}
public FluidStack[] getFluids() {
return fluids;
}

View File

@@ -39,7 +39,7 @@ import java.util.ArrayList;
import java.util.List;
public class CommonProxy {
public static final boolean ENABLE_DISK_MANIPULATOR = false;
public static final boolean ENABLE_DISK_MANIPULATOR = true;
protected List<BlockCable> cableTypes = new ArrayList<>();

View File

@@ -92,7 +92,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
}
}
} else if (type == IType.FLUIDS) {
FluidStack stack = fluidFilters.getFluids()[0];
FluidStack stack = fluidFilters.getFluidStackInSlot(0);
if (stack != null && stack.getFluid().canBePlacedInWorld()) {
BlockPos front = pos.offset(getDirection());

View File

@@ -136,7 +136,7 @@ public class TileDetector extends TileNode implements IComparable, IType {
powered = mode == MODE_AUTOCRAFTING && !network.getCraftingTasks().isEmpty();
}
} else if (type == IType.FLUIDS) {
FluidStack slot = fluidFilters.getFluids()[0];
FluidStack slot = fluidFilters.getFluidStackInSlot(0);
if (slot != null) {
FluidStack stack = network.getFluidStorage().get(slot, compare);

View File

@@ -27,6 +27,8 @@ import refinedstorage.tile.data.ITileDataConsumer;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataParameter;
import java.util.ArrayList;
public class TileDiskManipulator extends TileNode implements IComparable, IFilterable, IType {
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
@@ -49,6 +51,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
private static final String NBT_TYPE = "Type";
private static final String NBT_IO_MODE = "IOMode";
private int compare = 0;
private int mode = IFilterable.WHITELIST;
@@ -190,28 +193,63 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
return;
}
ItemStack extracted = null;
int ii = 0;
int i = 0;
do {
ItemStack stack = null;
while (storage.getItems().size() > ii && stack == null) {
stack = storage.getItems().get(ii++);
while (storage.getItems().size() > i && stack == null) {
stack = storage.getItems().get(i++);
}
if (stack != null) {
extracted = storage.extractItem(stack, 1, compare);
}
} while (storage.getItems().size() > ii && extracted == null);
} while (storage.getItems().size() > i && extracted == null);
if (extracted == null) {
moveDriveToOutput(slot);
return;
}
ItemStack leftOver = network.insertItem(extracted, extracted.stackSize, false);
if (leftOver != null) {
storage.insertItem(leftOver, leftOver.stackSize, false);
ItemStack remainder = network.insertItem(extracted, extracted.stackSize, false);
if (remainder != null) {
storage.insertItem(remainder, remainder.stackSize, false);
}
}
private void extractFromNetwork(ItemStorage storage, int slot) {
if (storage.getStored() == storage.getCapacity()) {
moveDriveToOutput(slot);
return;
}
ItemStack extracted = null;
int i = 0;
if (IFilterable.isEmpty(itemFilters)) {
ItemStack toExtract = null;
ArrayList<ItemStack> networkItems = new ArrayList<>(network.getItemStorage().getStacks());
int iii = 0;
while ((toExtract == null || toExtract.stackSize == 0) && iii < networkItems.size()) {
toExtract = networkItems.get(iii++);
}
if (toExtract != null) {
extracted = network.extractItem(toExtract, 1, compare);
}
} else {
while (itemFilters.getSlots() > i && extracted == null) {
ItemStack stack = null;
while (itemFilters.getSlots() > i && stack == null) {
stack = itemFilters.getStackInSlot(i++);
}
if (stack != null) {
extracted = network.extractItem(stack, 1, compare);
}
}
}
if (extracted == null) {
moveDriveToOutput(slot);
return;
}
ItemStack remainder = storage.insertItem(extracted, extracted.stackSize, false);
if (remainder != null) {
network.insertItem(remainder, remainder.stackSize, false);
}
}
private void insertIntoNetwork(FluidStorage storage, int slot) {
@@ -220,27 +258,63 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
return;
}
FluidStack extracted = null;
int ii = 0;
int i = 0;
do {
FluidStack stack = storage.getStacks().get(ii);
while (stack == null && storage.getStacks().size() > ii) {
ii++;
FluidStack stack = storage.getStacks().get(i);
while (stack == null && storage.getStacks().size() > i) {
i++;
}
if (stack != null) {
extracted = storage.extractFluid(stack, 1, compare);
}
} while (extracted == null && storage.getStacks().size() > ii);
} while (extracted == null && storage.getStacks().size() > i);
if (extracted == null) {
moveDriveToOutput(slot);
return;
}
FluidStack leftOver = network.insertFluid(extracted, extracted.amount, false);
if (leftOver != null) {
storage.insertFluid(leftOver, leftOver.amount, false);
FluidStack remainder = network.insertFluid(extracted, extracted.amount, false);
if (remainder != null) {
storage.insertFluid(remainder, remainder.amount, false);
}
}
private void extractFromNetwork(FluidStorage storage, int slot) {
if (storage.getStored() == storage.getCapacity()) {
moveDriveToOutput(slot);
return;
}
FluidStack extracted = null;
int i = 0;
if (IFilterable.isEmpty(itemFilters)) {
FluidStack toExtract = null;
ArrayList<FluidStack> networkFluids = new ArrayList<>(network.getFluidStorage().getStacks());
int j = 0;
while ((toExtract == null || toExtract.amount == 0) && j < networkFluids.size()) {
toExtract = networkFluids.get(j++);
}
if (toExtract != null) {
extracted = network.extractFluid(toExtract, 1, compare);
}
} else {
while (fluidFilters.getSlots() > i && extracted == null) {
FluidStack stack = null;
while (fluidFilters.getSlots() > i && stack == null) {
stack = fluidFilters.getFluidStackInSlot(i++);
}
if (stack != null) {
extracted = network.extractFluid(stack, 1, compare);
}
}
}
if (extracted == null) {
moveDriveToOutput(slot);
return;
}
FluidStack remainder = storage.insertFluid(extracted, extracted.amount, false);
if (remainder != null) {
network.insertFluid(remainder, remainder.amount, false);
}
}
private void moveDriveToOutput(int slot) {
@@ -326,6 +400,10 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
if (tag.hasKey(NBT_TYPE)) {
type = tag.getInteger(NBT_TYPE);
}
if (tag.hasKey(NBT_IO_MODE)) {
ioMode = tag.getInteger(NBT_IO_MODE);
}
}
@Override
@@ -339,6 +417,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_MODE, mode);
tag.setInteger(NBT_TYPE, type);
tag.setInteger(NBT_IO_MODE, ioMode);
return tag;
}

View File

@@ -110,7 +110,7 @@ public class TileFluidInterface extends TileNode implements IComparable {
}
}
FluidStack stack = out.getFluids()[0];
FluidStack stack = out.getFluidStackInSlot(0);
if (tankOut.getFluid() != null && (stack == null || (tankOut.getFluid().getFluid() != stack.getFluid()))) {
FluidStack remainder = tankOut.drainInternal(Fluid.BUCKET_VOLUME, true);

View File

@@ -68,7 +68,7 @@ public interface IFilterable {
int slots = 0;
for (int i = 0; i < filters.getSlots(); ++i) {
FluidStack slot = filters.getFluids()[i];
FluidStack slot = filters.getFluidStackInSlot(i);
if (slot != null) {
slots++;
@@ -82,7 +82,7 @@ public interface IFilterable {
return slots == 0;
} else if (mode == BLACKLIST) {
for (int i = 0; i < filters.getSlots(); ++i) {
FluidStack slot = filters.getFluids()[i];
FluidStack slot = filters.getFluidStackInSlot(i);
if (slot != null && CompareUtils.compareStack(slot, stack, compare)) {
return false;
@@ -95,6 +95,15 @@ public interface IFilterable {
return false;
}
static boolean isEmpty(IItemHandler filter) {
for (int i = 0; i < filter.getSlots(); i++) {
if (filter.getStackInSlot(i) != null) {
return false;
}
}
return true;
}
void setMode(int mode);
int getMode();

View File

@@ -96,7 +96,7 @@ sidebutton.refinedstorage:mode=Mode
sidebutton.refinedstorage:mode.whitelist=Whitelist
sidebutton.refinedstorage:mode.blacklist=Blacklist
sidebutton.refinedstorage:iomode=IOMode
sidebutton.refinedstorage:iomode=IO Mode
sidebutton.refinedstorage:iomode.insert=Insert into network
sidebutton.refinedstorage:iomode.extract=Extract from network