Added regulator mode to Exporter, fixes #684

This commit is contained in:
Raoul Van den Berge
2016-12-13 22:27:50 +01:00
parent 4195c15166
commit fd4a73210b
3 changed files with 59 additions and 11 deletions

View File

@@ -2,6 +2,7 @@
### 1.3.5 ### 1.3.5
- Fixed Controller not using energy (raoulvdberge) - Fixed Controller not using energy (raoulvdberge)
- Added regulator mode to Exporter (InusualZ)
### 1.3.4 ### 1.3.4
- Added option to check for oredict in the Grid Filter (raoulvdberge) - Added option to check for oredict in the Grid Filter (raoulvdberge)

View File

@@ -9,15 +9,26 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler; import net.minecraftforge.items.SlotItemHandler;
public class ContainerExporter extends ContainerBase { public class ContainerExporter extends ContainerBase {
private TileExporter exporter;
public ContainerExporter(TileExporter exporter, EntityPlayer player) { public ContainerExporter(TileExporter exporter, EntityPlayer player) {
super(exporter, player); super(exporter, player);
this.exporter = exporter;
initSlots();
}
public void initSlots() {
this.inventorySlots.clear();
this.inventoryItemStacks.clear();
for (int i = 0; i < 4; ++i) { for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(exporter.getUpgrades(), i, 187, 6 + (i * 18))); addSlotToContainer(new SlotItemHandler(exporter.getUpgrades(), i, 187, 6 + (i * 18)));
} }
for (int i = 0; i < 9; ++i) { for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotFilterType(exporter, i, 8 + (18 * i), 20, TileExporter.REGULATOR.getValue() ? SlotFilter.FILTER_ALLOW_SIZE : 0)); addSlotToContainer(new SlotFilterType(exporter, i, 8 + (18 * i), 20, exporter.isRegulator() ? SlotFilter.FILTER_ALLOW_SIZE : 0));
} }
addPlayerInventory(8, 55); addPlayerInventory(8, 55);

View File

@@ -4,6 +4,8 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.container.ContainerExporter;
import com.raoulvdberge.refinedstorage.gui.GuiExporter;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerUpgrade; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerUpgrade;
@@ -11,8 +13,10 @@ import com.raoulvdberge.refinedstorage.item.ItemUpgrade;
import com.raoulvdberge.refinedstorage.tile.config.IComparable; import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType; import com.raoulvdberge.refinedstorage.tile.config.IType;
import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer;
import com.raoulvdberge.refinedstorage.tile.data.ITileDataListener;
import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.DataSerializers;
@@ -39,9 +43,34 @@ public class TileExporter extends TileNode implements IComparable, IType {
}, new ITileDataConsumer<Boolean, TileExporter>() { }, new ITileDataConsumer<Boolean, TileExporter>() {
@Override @Override
public void setValue(TileExporter tile, Boolean value) { public void setValue(TileExporter tile, Boolean value) {
if (!value && tile.regulator) {
for (int i = 0; i < tile.itemFilters.getSlots() + tile.fluidFilters.getSlots(); ++i) {
ItemStack slot = i >= tile.itemFilters.getSlots() ? tile.fluidFilters.getStackInSlot(i - tile.itemFilters.getSlots()) : tile.itemFilters.getStackInSlot(i);
if (!slot.isEmpty()) {
slot.setCount(1);
}
}
}
tile.regulator = value; tile.regulator = value;
tile.markDirty(); tile.markDirty();
tile.getWorld().getMinecraftServer().getPlayerList().getPlayers().stream()
.filter(player -> player.openContainer instanceof ContainerExporter && ((ContainerExporter) player.openContainer).getTile().getPos().equals(tile.getPos()))
.forEach(player -> {
((ContainerExporter) player.openContainer).initSlots();
player.openContainer.detectAndSendChanges();
});
}
}, new ITileDataListener<Boolean>() {
@Override
public void onChanged(TileDataParameter<Boolean> parameter) {
if (Minecraft.getMinecraft().currentScreen instanceof GuiExporter) {
((ContainerExporter) ((GuiExporter) Minecraft.getMinecraft().currentScreen).inventorySlots).initSlots();
}
} }
}); });
@@ -81,15 +110,18 @@ public class TileExporter extends TileNode implements IComparable, IType {
if (!slot.isEmpty()) { if (!slot.isEmpty()) {
int stackSize = upgrades.getItemInteractCount(); int stackSize = upgrades.getItemInteractCount();
boolean skipSlot = false; boolean skipSlot = false;
if (regulator) { if (regulator) {
for (int index = 0; i < handler.getSlots() && !skipSlot; i++) { for (int index = 0; i < handler.getSlots() && !skipSlot; i++) {
ItemStack handlerStack = handler.getStackInSlot(index); ItemStack exporterStack = handler.getStackInSlot(index);
if (API.instance().getComparer().isEqual(slot, handlerStack, compare)) {
if (handlerStack.getCount() >= slot.getCount()) { if (API.instance().getComparer().isEqual(slot, exporterStack, compare)) {
if (exporterStack.getCount() >= slot.getCount()) {
skipSlot = true; skipSlot = true;
} else { } else {
stackSize = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? slot.getCount() - handlerStack.getCount() : 1; stackSize = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? slot.getCount() - exporterStack.getCount() : 1;
} }
} }
} }
@@ -123,16 +155,20 @@ public class TileExporter extends TileNode implements IComparable, IType {
if (stackInStorage != null) { if (stackInStorage != null) {
int toExtract = Math.min(Fluid.BUCKET_VOLUME * upgrades.getItemInteractCount(), stackInStorage.amount); int toExtract = Math.min(Fluid.BUCKET_VOLUME * upgrades.getItemInteractCount(), stackInStorage.amount);
boolean skipSlot = false; boolean skipSlot = false;
if (regulator) { if (regulator) {
for (IFluidTankProperties tankProperty : handler.getTankProperties()) { for (IFluidTankProperties tankProperty : handler.getTankProperties()) {
FluidStack fluidStack = tankProperty.getContents(); FluidStack exporterStack = tankProperty.getContents();
if (API.instance().getComparer().isEqual(stackInStorage, fluidStack, compare)) {
if (fluidStack.amount >= stack.amount * Fluid.BUCKET_VOLUME) { if (API.instance().getComparer().isEqual(stackInStorage, exporterStack, compare)) {
if (exporterStack.amount >= stack.amount * Fluid.BUCKET_VOLUME) {
skipSlot = true; skipSlot = true;
break; break;
} else { } else {
toExtract = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? stack.amount * Fluid.BUCKET_VOLUME - fluidStack.amount : Fluid.BUCKET_VOLUME; toExtract = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? stack.amount * Fluid.BUCKET_VOLUME - exporterStack.amount : Fluid.BUCKET_VOLUME;
toExtract = Math.min(toExtract, stackInStorage.amount); toExtract = Math.min(toExtract, stackInStorage.amount);
} }
} }
@@ -247,8 +283,8 @@ public class TileExporter extends TileNode implements IComparable, IType {
markDirty(); markDirty();
} }
public boolean isRegulated() { public boolean isRegulator() {
return this.regulator; return !getWorld().isRemote ? regulator : REGULATOR.getValue();
} }
@Override @Override