Controller doesn't need its own special package
This commit is contained in:
@@ -7,8 +7,8 @@ import net.minecraft.world.World;
|
|||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
import refinedstorage.api.network.INetworkNode;
|
import refinedstorage.api.network.INetworkNode;
|
||||||
import refinedstorage.api.network.INetworkNodeGraph;
|
import refinedstorage.api.network.INetworkNodeGraph;
|
||||||
|
import refinedstorage.tile.TileController;
|
||||||
import refinedstorage.tile.TileNetworkTransmitter;
|
import refinedstorage.tile.TileNetworkTransmitter;
|
||||||
import refinedstorage.tile.controller.TileController;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import refinedstorage.RefinedStorageBlocks;
|
|||||||
import refinedstorage.RefinedStorageGui;
|
import refinedstorage.RefinedStorageGui;
|
||||||
import refinedstorage.api.network.NetworkUtils;
|
import refinedstorage.api.network.NetworkUtils;
|
||||||
import refinedstorage.item.ItemBlockController;
|
import refinedstorage.item.ItemBlockController;
|
||||||
import refinedstorage.tile.controller.TileController;
|
import refinedstorage.tile.TileController;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ import net.minecraft.client.renderer.GlStateManager;
|
|||||||
import net.minecraft.client.renderer.RenderHelper;
|
import net.minecraft.client.renderer.RenderHelper;
|
||||||
import refinedstorage.container.ContainerController;
|
import refinedstorage.container.ContainerController;
|
||||||
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
|
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
|
||||||
import refinedstorage.tile.controller.ClientNode;
|
import refinedstorage.tile.TileController;
|
||||||
import refinedstorage.tile.controller.TileController;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -61,13 +60,13 @@ public class GuiController extends GuiBase {
|
|||||||
|
|
||||||
RenderHelper.enableGUIStandardItemLighting();
|
RenderHelper.enableGUIStandardItemLighting();
|
||||||
|
|
||||||
List<ClientNode> nodes = controller.getClientNodes();
|
List<TileController.ClientNode> nodes = controller.getClientNodes();
|
||||||
|
|
||||||
ClientNode nodeHovering = null;
|
TileController.ClientNode nodeHovering = null;
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i) {
|
for (int i = 0; i < 4; ++i) {
|
||||||
if (slot < nodes.size()) {
|
if (slot < nodes.size()) {
|
||||||
ClientNode node = nodes.get(slot);
|
TileController.ClientNode node = nodes.get(slot);
|
||||||
|
|
||||||
drawItem(x, y + 5, node.stack);
|
drawItem(x, y + 5, node.stack);
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import refinedstorage.RefinedStorageGui;
|
|||||||
import refinedstorage.container.*;
|
import refinedstorage.container.*;
|
||||||
import refinedstorage.gui.grid.GuiGrid;
|
import refinedstorage.gui.grid.GuiGrid;
|
||||||
import refinedstorage.tile.*;
|
import refinedstorage.tile.*;
|
||||||
import refinedstorage.tile.controller.TileController;
|
|
||||||
import refinedstorage.tile.grid.TileGrid;
|
import refinedstorage.tile.grid.TileGrid;
|
||||||
import refinedstorage.tile.grid.WirelessGrid;
|
import refinedstorage.tile.grid.WirelessGrid;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package refinedstorage.integration.ic2;
|
|||||||
|
|
||||||
import ic2.api.energy.prefab.BasicSink;
|
import ic2.api.energy.prefab.BasicSink;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import refinedstorage.tile.controller.TileController;
|
import refinedstorage.tile.TileController;
|
||||||
|
|
||||||
public class IC2EnergyController implements IIC2EnergyController {
|
public class IC2EnergyController implements IIC2EnergyController {
|
||||||
private BasicSink sink;
|
private BasicSink sink;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import net.minecraft.world.World;
|
|||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.RefinedStorageBlocks;
|
import refinedstorage.RefinedStorageBlocks;
|
||||||
import refinedstorage.block.EnumControllerType;
|
import refinedstorage.block.EnumControllerType;
|
||||||
import refinedstorage.tile.controller.TileController;
|
import refinedstorage.tile.TileController;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ import net.minecraftforge.fml.common.Optional;
|
|||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.RefinedStorageBlocks;
|
import refinedstorage.RefinedStorageBlocks;
|
||||||
import refinedstorage.integration.ic2.IC2Integration;
|
import refinedstorage.integration.ic2.IC2Integration;
|
||||||
import refinedstorage.tile.controller.TileController;
|
import refinedstorage.tile.TileController;
|
||||||
import refinedstorage.tile.grid.TileGrid;
|
import refinedstorage.tile.grid.TileGrid;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import refinedstorage.gui.GuiHandler;
|
|||||||
import refinedstorage.item.*;
|
import refinedstorage.item.*;
|
||||||
import refinedstorage.network.*;
|
import refinedstorage.network.*;
|
||||||
import refinedstorage.tile.*;
|
import refinedstorage.tile.*;
|
||||||
import refinedstorage.tile.controller.TileController;
|
|
||||||
import refinedstorage.tile.externalstorage.TileExternalStorage;
|
import refinedstorage.tile.externalstorage.TileExternalStorage;
|
||||||
import refinedstorage.tile.grid.TileGrid;
|
import refinedstorage.tile.grid.TileGrid;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package refinedstorage.tile.controller;
|
package refinedstorage.tile;
|
||||||
|
|
||||||
import cofh.api.energy.EnergyStorage;
|
import cofh.api.energy.EnergyStorage;
|
||||||
import cofh.api.energy.IEnergyReceiver;
|
import cofh.api.energy.IEnergyReceiver;
|
||||||
@@ -47,9 +47,6 @@ import refinedstorage.integration.ic2.IIC2EnergyController;
|
|||||||
import refinedstorage.item.ItemPattern;
|
import refinedstorage.item.ItemPattern;
|
||||||
import refinedstorage.network.MessageGridDelta;
|
import refinedstorage.network.MessageGridDelta;
|
||||||
import refinedstorage.network.MessageGridUpdate;
|
import refinedstorage.network.MessageGridUpdate;
|
||||||
import refinedstorage.tile.ISynchronizedContainer;
|
|
||||||
import refinedstorage.tile.TileBase;
|
|
||||||
import refinedstorage.tile.TileCrafter;
|
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
import refinedstorage.tile.config.RedstoneMode;
|
import refinedstorage.tile.config.RedstoneMode;
|
||||||
import refinedstorage.tile.externalstorage.ExternalStorage;
|
import refinedstorage.tile.externalstorage.ExternalStorage;
|
||||||
@@ -57,8 +54,8 @@ import refinedstorage.tile.externalstorage.ExternalStorage;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@Optional.InterfaceList({
|
@Optional.InterfaceList({
|
||||||
@Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaConsumer", modid = "Tesla"),
|
@Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaConsumer", modid = "tesla"),
|
||||||
@Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaHolder", modid = "Tesla")
|
@Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaHolder", modid = "tesla")
|
||||||
})
|
})
|
||||||
public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ITeslaHolder, ITeslaConsumer, ISynchronizedContainer, IRedstoneModeConfig {
|
public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ITeslaHolder, ITeslaConsumer, ISynchronizedContainer, IRedstoneModeConfig {
|
||||||
public static final String NBT_ENERGY = "Energy";
|
public static final String NBT_ENERGY = "Energy";
|
||||||
@@ -66,12 +63,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
private static final String NBT_CRAFTING_TASKS = "CraftingTasks";
|
private static final String NBT_CRAFTING_TASKS = "CraftingTasks";
|
||||||
|
|
||||||
private GridHandler gridHandler = new GridHandler(this);
|
private static final Comparator<IStorage> SIZE_COMPARATOR = new Comparator<IStorage>() {
|
||||||
private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this);
|
|
||||||
|
|
||||||
private IGroupedStorage storage = new GroupedStorage(this);
|
|
||||||
|
|
||||||
private Comparator<IStorage> sizeComparator = new Comparator<IStorage>() {
|
|
||||||
@Override
|
@Override
|
||||||
public int compare(IStorage left, IStorage right) {
|
public int compare(IStorage left, IStorage right) {
|
||||||
if (left.getStored() == right.getStored()) {
|
if (left.getStored() == right.getStored()) {
|
||||||
@@ -82,7 +74,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private Comparator<IStorage> priorityComparator = new Comparator<IStorage>() {
|
private static final Comparator<IStorage> PRIORITY_COMPARATOR = new Comparator<IStorage>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(IStorage left, IStorage right) {
|
public int compare(IStorage left, IStorage right) {
|
||||||
if (left.getPriority() == right.getPriority()) {
|
if (left.getPriority() == right.getPriority()) {
|
||||||
@@ -93,7 +85,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private GridHandler gridHandler = new GridHandler(this);
|
||||||
|
private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this);
|
||||||
|
|
||||||
private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this);
|
private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this);
|
||||||
|
private IGroupedStorage storage = new GroupedStorage(this);
|
||||||
|
|
||||||
private List<ICraftingPattern> patterns = new ArrayList<ICraftingPattern>();
|
private List<ICraftingPattern> patterns = new ArrayList<ICraftingPattern>();
|
||||||
|
|
||||||
@@ -151,8 +147,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
energyEU.update();
|
energyEU.update();
|
||||||
|
|
||||||
if (canRun()) {
|
if (canRun()) {
|
||||||
Collections.sort(storage.getStorages(), sizeComparator);
|
Collections.sort(storage.getStorages(), SIZE_COMPARATOR);
|
||||||
Collections.sort(storage.getStorages(), priorityComparator);
|
Collections.sort(storage.getStorages(), PRIORITY_COMPARATOR);
|
||||||
|
|
||||||
for (ICraftingTask taskToCancel : craftingTasksToCancel) {
|
for (ICraftingTask taskToCancel : craftingTasksToCancel) {
|
||||||
taskToCancel.onCancelled(this);
|
taskToCancel.onCancelled(this);
|
||||||
@@ -720,4 +716,30 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
|
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
|
||||||
return (RefinedStorage.hasTesla() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) || super.hasCapability(capability, facing);
|
return (RefinedStorage.hasTesla() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) || super.hasCapability(capability, facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ClientNode {
|
||||||
|
public ItemStack stack;
|
||||||
|
public int amount;
|
||||||
|
public int energyUsage;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object other) {
|
||||||
|
if (this == other) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(other instanceof ClientNode)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return energyUsage == ((ClientNode) other).energyUsage && CompareUtils.compareStack(stack, ((ClientNode) other).stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = stack.hashCode();
|
||||||
|
result = 31 * result + energyUsage;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
package refinedstorage.tile.controller;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import refinedstorage.api.storage.CompareUtils;
|
|
||||||
|
|
||||||
public final class ClientNode {
|
|
||||||
public ItemStack stack;
|
|
||||||
public int amount;
|
|
||||||
public int energyUsage;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object other) {
|
|
||||||
if (this == other) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(other instanceof ClientNode)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return energyUsage == ((ClientNode) other).energyUsage && CompareUtils.compareStack(stack, ((ClientNode) other).stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = stack.hashCode();
|
|
||||||
result = 31 * result + energyUsage;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
package refinedstorage.tile.externalstorage;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
|
||||||
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
|
|
||||||
import refinedstorage.api.storage.CompareUtils;
|
|
||||||
import refinedstorage.tile.config.ModeFilter;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class DeepStorageUnitStorage extends ExternalStorage {
|
|
||||||
private TileExternalStorage externalStorage;
|
|
||||||
private IDeepStorageUnit unit;
|
|
||||||
|
|
||||||
public DeepStorageUnitStorage(TileExternalStorage externalStorage, IDeepStorageUnit unit) {
|
|
||||||
this.externalStorage = externalStorage;
|
|
||||||
this.unit = unit;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCapacity() {
|
|
||||||
return unit.getMaxStoredCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ItemStack> getItems() {
|
|
||||||
if (unit.getStoredItemType() != null && unit.getStoredItemType().stackSize > 0) {
|
|
||||||
return Collections.singletonList(unit.getStoredItemType().copy());
|
|
||||||
}
|
|
||||||
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) {
|
|
||||||
if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) {
|
|
||||||
if (unit.getStoredItemType() != null) {
|
|
||||||
if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) {
|
|
||||||
if (getStored() + size > unit.getMaxStoredCount()) {
|
|
||||||
int remainingSpace = getCapacity() - getStored();
|
|
||||||
|
|
||||||
if (remainingSpace <= 0) {
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!simulate) {
|
|
||||||
unit.setStoredItemCount(unit.getStoredItemType().stackSize + remainingSpace);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace);
|
|
||||||
} else {
|
|
||||||
if (!simulate) {
|
|
||||||
unit.setStoredItemCount(unit.getStoredItemType().stackSize + size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (getStored() + size > unit.getMaxStoredCount()) {
|
|
||||||
int remainingSpace = getCapacity() - getStored();
|
|
||||||
|
|
||||||
if (remainingSpace <= 0) {
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!simulate) {
|
|
||||||
unit.setStoredItemType(stack.copy(), remainingSpace);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace);
|
|
||||||
} else {
|
|
||||||
if (!simulate) {
|
|
||||||
unit.setStoredItemType(stack.copy(), size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags) {
|
|
||||||
if (CompareUtils.compareStack(stack, unit.getStoredItemType(), flags)) {
|
|
||||||
if (size > unit.getStoredItemType().stackSize) {
|
|
||||||
size = unit.getStoredItemType().stackSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack stored = unit.getStoredItemType();
|
|
||||||
|
|
||||||
unit.setStoredItemCount(stored.stackSize - size);
|
|
||||||
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stored, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getStored() {
|
|
||||||
return unit.getStoredItemType() != null ? unit.getStoredItemType().stackSize : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPriority() {
|
|
||||||
return externalStorage.getPriority();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
package refinedstorage.tile.externalstorage;
|
|
||||||
|
|
||||||
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
|
|
||||||
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
|
||||||
import refinedstorage.api.storage.CompareUtils;
|
|
||||||
import refinedstorage.tile.config.ModeFilter;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class DrawerStorage extends ExternalStorage {
|
|
||||||
private TileExternalStorage externalStorage;
|
|
||||||
private IDrawer drawer;
|
|
||||||
|
|
||||||
public DrawerStorage(TileExternalStorage externalStorage, IDrawer drawer) {
|
|
||||||
this.externalStorage = externalStorage;
|
|
||||||
this.drawer = drawer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCapacity() {
|
|
||||||
return drawer.getMaxCapacity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ItemStack> getItems() {
|
|
||||||
if (!drawer.isEmpty() && drawer.getStoredItemCount() > 0) {
|
|
||||||
return Collections.singletonList(drawer.getStoredItemCopy());
|
|
||||||
}
|
|
||||||
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isVoidable() {
|
|
||||||
return drawer instanceof IVoidable && ((IVoidable) drawer).isVoid();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
|
|
||||||
if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) {
|
|
||||||
if (!drawer.isEmpty()) {
|
|
||||||
if (getStored() + size > drawer.getMaxCapacity(stack)) {
|
|
||||||
int remainingSpace = getCapacity() - getStored();
|
|
||||||
|
|
||||||
if (remainingSpace <= 0) {
|
|
||||||
return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!simulate) {
|
|
||||||
drawer.setStoredItemCount(drawer.getStoredItemCount() + remainingSpace);
|
|
||||||
}
|
|
||||||
|
|
||||||
return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace);
|
|
||||||
} else {
|
|
||||||
if (!simulate) {
|
|
||||||
drawer.setStoredItemCount(drawer.getStoredItemCount() + size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (getStored() + size > drawer.getMaxCapacity(stack)) {
|
|
||||||
int remainingSpace = getCapacity() - getStored();
|
|
||||||
|
|
||||||
if (remainingSpace <= 0) {
|
|
||||||
return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!simulate) {
|
|
||||||
drawer.setStoredItem(stack, remainingSpace);
|
|
||||||
}
|
|
||||||
|
|
||||||
return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace);
|
|
||||||
} else {
|
|
||||||
if (!simulate) {
|
|
||||||
drawer.setStoredItem(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack extractItem(ItemStack stack, int size, int flags) {
|
|
||||||
if (CompareUtils.compareStack(stack, drawer.getStoredItemPrototype(), flags) && drawer.canItemBeExtracted(stack)) {
|
|
||||||
if (size > drawer.getStoredItemCount()) {
|
|
||||||
size = drawer.getStoredItemCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack stored = drawer.getStoredItemPrototype();
|
|
||||||
|
|
||||||
drawer.setStoredItemCount(drawer.getStoredItemCount() - size);
|
|
||||||
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stored, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getStored() {
|
|
||||||
return drawer.getStoredItemCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPriority() {
|
|
||||||
return externalStorage.getPriority();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
package refinedstorage.tile.externalstorage;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import refinedstorage.api.storage.CompareUtils;
|
|
||||||
import refinedstorage.api.storage.IStorage;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public abstract class ExternalStorage implements IStorage {
|
|
||||||
private List<ItemStack> cache;
|
|
||||||
|
|
||||||
public abstract int getCapacity();
|
|
||||||
|
|
||||||
public boolean updateCache() {
|
|
||||||
List<ItemStack> items = getItems();
|
|
||||||
|
|
||||||
if (cache == null) {
|
|
||||||
cache = items;
|
|
||||||
} else if (items.size() != cache.size()) {
|
|
||||||
cache = items;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < items.size(); ++i) {
|
|
||||||
if (!CompareUtils.compareStack(items.get(i), cache.get(i))) {
|
|
||||||
cache = items;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateCacheForcefully() {
|
|
||||||
cache = getItems();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
package refinedstorage.tile.externalstorage;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraftforge.items.IItemHandler;
|
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
|
||||||
import refinedstorage.api.storage.CompareUtils;
|
|
||||||
import refinedstorage.tile.config.ModeFilter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class ItemHandlerStorage extends ExternalStorage {
|
|
||||||
private TileExternalStorage externalStorage;
|
|
||||||
private IItemHandler handler;
|
|
||||||
|
|
||||||
public ItemHandlerStorage(TileExternalStorage externalStorage, IItemHandler handler) {
|
|
||||||
this.externalStorage = externalStorage;
|
|
||||||
this.handler = handler;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCapacity() {
|
|
||||||
return handler.getSlots() * 64;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ItemStack> getItems() {
|
|
||||||
List<ItemStack> items = new ArrayList<ItemStack>();
|
|
||||||
|
|
||||||
for (int i = 0; i < handler.getSlots(); ++i) {
|
|
||||||
if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getItem() != null) {
|
|
||||||
items.add(handler.getStackInSlot(i).copy());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
|
|
||||||
if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) {
|
|
||||||
return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack extractItem(ItemStack stack, int size, int flags) {
|
|
||||||
for (int i = 0; i < handler.getSlots(); ++i) {
|
|
||||||
ItemStack slot = handler.getStackInSlot(i);
|
|
||||||
|
|
||||||
if (slot != null && CompareUtils.compareStack(slot, stack, flags)) {
|
|
||||||
size = Math.min(size, slot.stackSize);
|
|
||||||
|
|
||||||
ItemStack took = ItemHandlerHelper.copyStackWithSize(slot, size);
|
|
||||||
|
|
||||||
handler.extractItem(i, size, false);
|
|
||||||
|
|
||||||
return took;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getStored() {
|
|
||||||
int size = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < handler.getSlots(); ++i) {
|
|
||||||
if (handler.getStackInSlot(i) != null) {
|
|
||||||
size += handler.getStackInSlot(i).stackSize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPriority() {
|
|
||||||
return externalStorage.getPriority();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,276 +0,0 @@
|
|||||||
package refinedstorage.tile.externalstorage;
|
|
||||||
|
|
||||||
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
|
|
||||||
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup;
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import net.minecraft.inventory.Container;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraftforge.items.IItemHandler;
|
|
||||||
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
|
|
||||||
import refinedstorage.RefinedStorage;
|
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
|
||||||
import refinedstorage.api.storage.IStorage;
|
|
||||||
import refinedstorage.api.storage.IStorageProvider;
|
|
||||||
import refinedstorage.container.ContainerStorage;
|
|
||||||
import refinedstorage.inventory.ItemHandlerBasic;
|
|
||||||
import refinedstorage.network.MessagePriorityUpdate;
|
|
||||||
import refinedstorage.tile.IStorageGui;
|
|
||||||
import refinedstorage.tile.TileNode;
|
|
||||||
import refinedstorage.tile.config.ICompareConfig;
|
|
||||||
import refinedstorage.tile.config.IModeConfig;
|
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
|
||||||
import refinedstorage.tile.config.ModeConstants;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig {
|
|
||||||
private static final String NBT_PRIORITY = "Priority";
|
|
||||||
private static final String NBT_COMPARE = "Compare";
|
|
||||||
private static final String NBT_MODE = "Mode";
|
|
||||||
|
|
||||||
private ItemHandlerBasic filters = new ItemHandlerBasic(9, this);
|
|
||||||
|
|
||||||
private int priority = 0;
|
|
||||||
private int compare = 0;
|
|
||||||
private int mode = ModeConstants.WHITELIST;
|
|
||||||
|
|
||||||
private int stored;
|
|
||||||
private int capacity;
|
|
||||||
|
|
||||||
private List<ExternalStorage> storages = new ArrayList<ExternalStorage>();
|
|
||||||
private int lastDrawerCount;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getEnergyUsage() {
|
|
||||||
return RefinedStorage.INSTANCE.externalStorageUsage + (storages.size() * RefinedStorage.INSTANCE.externalStoragePerStorageUsage);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateNode() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onConnectionChange(INetworkMaster network, boolean state) {
|
|
||||||
super.onConnectionChange(network, state);
|
|
||||||
|
|
||||||
updateStorage(network);
|
|
||||||
|
|
||||||
network.getStorage().rebuild();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
if (!worldObj.isRemote && network != null) {
|
|
||||||
if (ticks % (20 * 4) == 0) {
|
|
||||||
boolean shouldRebuild = false;
|
|
||||||
|
|
||||||
for (ExternalStorage storage : storages) {
|
|
||||||
if (storage.updateCache()) {
|
|
||||||
shouldRebuild = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shouldRebuild) {
|
|
||||||
network.getStorage().rebuild();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) {
|
|
||||||
lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount();
|
|
||||||
|
|
||||||
updateStorage(network);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
super.update();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeContainerData(ByteBuf buf) {
|
|
||||||
super.writeContainerData(buf);
|
|
||||||
|
|
||||||
buf.writeInt(priority);
|
|
||||||
buf.writeInt(getStored());
|
|
||||||
buf.writeInt(getCapacity());
|
|
||||||
buf.writeInt(compare);
|
|
||||||
buf.writeInt(mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readContainerData(ByteBuf buf) {
|
|
||||||
super.readContainerData(buf);
|
|
||||||
|
|
||||||
priority = buf.readInt();
|
|
||||||
stored = buf.readInt();
|
|
||||||
capacity = buf.readInt();
|
|
||||||
compare = buf.readInt();
|
|
||||||
mode = buf.readInt();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<? extends Container> getContainer() {
|
|
||||||
return ContainerStorage.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void read(NBTTagCompound tag) {
|
|
||||||
super.read(tag);
|
|
||||||
|
|
||||||
readItems(filters, 0, tag);
|
|
||||||
|
|
||||||
if (tag.hasKey(NBT_PRIORITY)) {
|
|
||||||
priority = tag.getInteger(NBT_PRIORITY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tag.hasKey(NBT_COMPARE)) {
|
|
||||||
compare = tag.getInteger(NBT_COMPARE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tag.hasKey(NBT_MODE)) {
|
|
||||||
mode = tag.getInteger(NBT_MODE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NBTTagCompound write(NBTTagCompound tag) {
|
|
||||||
super.write(tag);
|
|
||||||
|
|
||||||
writeItems(filters, 0, tag);
|
|
||||||
|
|
||||||
tag.setInteger(NBT_PRIORITY, priority);
|
|
||||||
tag.setInteger(NBT_COMPARE, compare);
|
|
||||||
tag.setInteger(NBT_MODE, mode);
|
|
||||||
|
|
||||||
return tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCompare() {
|
|
||||||
return compare;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setCompare(int compare) {
|
|
||||||
this.compare = compare;
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMode() {
|
|
||||||
return mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMode(int mode) {
|
|
||||||
this.mode = mode;
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPriority() {
|
|
||||||
return priority;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPriority(int priority) {
|
|
||||||
this.priority = priority;
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateStorage(INetworkMaster network) {
|
|
||||||
storages.clear();
|
|
||||||
|
|
||||||
TileEntity facing = getFacingTile();
|
|
||||||
|
|
||||||
if (facing instanceof IDrawerGroup) {
|
|
||||||
IDrawerGroup group = (IDrawerGroup) facing;
|
|
||||||
|
|
||||||
for (int i = 0; i < group.getDrawerCount(); ++i) {
|
|
||||||
if (group.isDrawerEnabled(i)) {
|
|
||||||
storages.add(new DrawerStorage(this, group.getDrawer(i)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (facing instanceof IDrawer) {
|
|
||||||
storages.add(new DrawerStorage(this, (IDrawer) facing));
|
|
||||||
} else if (facing instanceof IDeepStorageUnit) {
|
|
||||||
storages.add(new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing));
|
|
||||||
} else {
|
|
||||||
IItemHandler handler = getItemHandler(facing, getDirection().getOpposite());
|
|
||||||
|
|
||||||
if (handler != null) {
|
|
||||||
storages.add(new ItemHandlerStorage(this, handler));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
network.getStorage().rebuild();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addStorages(List<IStorage> storages) {
|
|
||||||
storages.addAll(this.storages);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getGuiTitle() {
|
|
||||||
return "gui.refinedstorage:external_storage";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IRedstoneModeConfig getRedstoneModeConfig() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ICompareConfig getCompareConfig() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IModeConfig getModeConfig() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getStored() {
|
|
||||||
if (!worldObj.isRemote) {
|
|
||||||
int stored = 0;
|
|
||||||
|
|
||||||
for (ExternalStorage storage : storages) {
|
|
||||||
stored += storage.getStored();
|
|
||||||
}
|
|
||||||
|
|
||||||
return stored;
|
|
||||||
}
|
|
||||||
|
|
||||||
return stored;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCapacity() {
|
|
||||||
if (!worldObj.isRemote) {
|
|
||||||
int capacity = 0;
|
|
||||||
|
|
||||||
for (ExternalStorage storage : storages) {
|
|
||||||
capacity += storage.getCapacity();
|
|
||||||
}
|
|
||||||
|
|
||||||
return capacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
return capacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPriorityChanged(int priority) {
|
|
||||||
RefinedStorage.INSTANCE.network.sendToServer(new MessagePriorityUpdate(pos, priority));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IItemHandler getFilters() {
|
|
||||||
return filters;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,8 +15,8 @@ import refinedstorage.inventory.ItemHandlerGridFilterInGrid;
|
|||||||
import refinedstorage.item.ItemWirelessGrid;
|
import refinedstorage.item.ItemWirelessGrid;
|
||||||
import refinedstorage.network.MessageWirelessGridSettingsUpdate;
|
import refinedstorage.network.MessageWirelessGridSettingsUpdate;
|
||||||
import refinedstorage.tile.TileBase;
|
import refinedstorage.tile.TileBase;
|
||||||
|
import refinedstorage.tile.TileController;
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
import refinedstorage.tile.controller.TileController;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
Reference in New Issue
Block a user