Doesn't work yet
This commit is contained in:
@@ -8,6 +8,8 @@ import java.util.List;
|
|||||||
public interface IItemList {
|
public interface IItemList {
|
||||||
void rebuild(INetworkMaster master);
|
void rebuild(INetworkMaster master);
|
||||||
|
|
||||||
|
List<IStorage> getStorages();
|
||||||
|
|
||||||
void add(ItemStack stack);
|
void add(ItemStack stack);
|
||||||
|
|
||||||
void remove(ItemStack stack);
|
void remove(ItemStack stack);
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
package refinedstorage.api.storage;
|
package refinedstorage.api.storage;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implement this interface on the tile that has a {@link refinedstorage.api.RefinedStorageCapabilities#NETWORK_SLAVE_CAPABILITY} capability.
|
* Implement this interface on the tile that has a {@link refinedstorage.api.RefinedStorageCapabilities#NETWORK_SLAVE_CAPABILITY} capability.
|
||||||
*/
|
*/
|
||||||
public interface IStorageProvider {
|
public interface IStorageProvider {
|
||||||
/**
|
/**
|
||||||
* @return The storages that this tile provides.
|
* Adds the storages.
|
||||||
|
*
|
||||||
|
* @param storages The previously added storages
|
||||||
*/
|
*/
|
||||||
IStorage[] getStorages();
|
void addStorages(List<IStorage> storages);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,30 +8,35 @@ import refinedstorage.api.storage.IItemList;
|
|||||||
import refinedstorage.api.storage.IStorage;
|
import refinedstorage.api.storage.IStorage;
|
||||||
import refinedstorage.api.storage.IStorageProvider;
|
import refinedstorage.api.storage.IStorageProvider;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ItemList implements IItemList {
|
public class ItemList implements IItemList {
|
||||||
private List<ItemStack> stacks;
|
private List<IStorage> storages = new ArrayList<IStorage>();
|
||||||
|
private List<ItemStack> stacks = new ArrayList<ItemStack>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rebuild(INetworkMaster master) {
|
public void rebuild(INetworkMaster master) {
|
||||||
stacks.clear();
|
storages.clear();
|
||||||
|
|
||||||
for (INetworkSlave slave : master.getSlaves()) {
|
for (INetworkSlave slave : master.getSlaves()) {
|
||||||
if (slave instanceof IStorageProvider) {
|
if (slave.canUpdate() && slave instanceof IStorageProvider) {
|
||||||
IStorage[] storages = ((IStorageProvider) slave).getStorages();
|
((IStorageProvider) slave).addStorages(storages);
|
||||||
|
|
||||||
if (storages != null) {
|
|
||||||
for (IStorage storage : storages) {
|
|
||||||
if (storage != null) {
|
|
||||||
for (ItemStack stack : storage.getItems()) {
|
|
||||||
add(stack);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stacks.clear();
|
||||||
|
|
||||||
|
for (IStorage storage : storages) {
|
||||||
|
for (ItemStack stack : storage.getItems()) {
|
||||||
|
add(stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IStorage> getStorages() {
|
||||||
|
return storages;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import refinedstorage.inventory.BasicItemValidator;
|
|||||||
import refinedstorage.network.MessagePriorityUpdate;
|
import refinedstorage.network.MessagePriorityUpdate;
|
||||||
import refinedstorage.tile.config.*;
|
import refinedstorage.tile.config.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class TileDiskDrive extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig {
|
public class TileDiskDrive extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig {
|
||||||
public class Storage extends NBTStorage {
|
public class Storage extends NBTStorage {
|
||||||
public Storage(ItemStack disk) {
|
public Storage(ItemStack disk) {
|
||||||
@@ -60,6 +62,10 @@ public class TileDiskDrive extends TileSlave implements IStorageProvider, IStora
|
|||||||
} else {
|
} else {
|
||||||
storages[slot] = new Storage(disk);
|
storages[slot] = new Storage(disk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isConnected()) {
|
||||||
|
network.getItems().rebuild(network);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -108,8 +114,12 @@ public class TileDiskDrive extends TileSlave implements IStorageProvider, IStora
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IStorage[] getStorages() {
|
public void addStorages(List<IStorage> storages) {
|
||||||
return storages;
|
for (IStorage storage : storages) {
|
||||||
|
if (storage != null) {
|
||||||
|
storages.add(storage);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import refinedstorage.inventory.BasicItemHandler;
|
|||||||
import refinedstorage.network.MessagePriorityUpdate;
|
import refinedstorage.network.MessagePriorityUpdate;
|
||||||
import refinedstorage.tile.config.*;
|
import refinedstorage.tile.config.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class TileStorage extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig {
|
public class TileStorage extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig {
|
||||||
class Storage extends NBTStorage {
|
class Storage extends NBTStorage {
|
||||||
public Storage() {
|
public Storage() {
|
||||||
@@ -87,14 +89,11 @@ public class TileStorage extends TileSlave implements IStorageProvider, IStorage
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IStorage[] getStorages() {
|
|
||||||
if (storage != null) {
|
|
||||||
return new IStorage[]{
|
|
||||||
storage
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
public void addStorages(List<IStorage> storages) {
|
||||||
|
if (storage != null) {
|
||||||
|
storages.add(storage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
private GridHandler gridHandler = new GridHandler(this);
|
private GridHandler gridHandler = new GridHandler(this);
|
||||||
private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this);
|
private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this);
|
||||||
|
|
||||||
private List<IStorage> storages = new ArrayList<IStorage>();
|
|
||||||
private IItemList items = new ItemList();
|
private IItemList items = new ItemList();
|
||||||
private boolean rebuildItemList;
|
private boolean rebuildItemList;
|
||||||
|
|
||||||
@@ -132,6 +131,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
slaves.removeAll(slavesToRemove);
|
slaves.removeAll(slavesToRemove);
|
||||||
slavesToRemove.clear();
|
slavesToRemove.clear();
|
||||||
|
|
||||||
|
if (rebuildItemList) {
|
||||||
|
items.rebuild(this);
|
||||||
|
|
||||||
|
rebuildItemList = false;
|
||||||
|
|
||||||
|
updateItemsWithClient();
|
||||||
|
}
|
||||||
|
|
||||||
if (canRun()) {
|
if (canRun()) {
|
||||||
if (ticks % 20 == 0 || forceUpdate) {
|
if (ticks % 20 == 0 || forceUpdate) {
|
||||||
updateSlaves();
|
updateSlaves();
|
||||||
@@ -185,14 +192,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
updateSlaves();
|
updateSlaves();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rebuildItemList) {
|
|
||||||
items.rebuild(this);
|
|
||||||
|
|
||||||
rebuildItemList = false;
|
|
||||||
|
|
||||||
updateItemsWithClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (couldRun != canRun()) {
|
if (couldRun != canRun()) {
|
||||||
couldRun = canRun();
|
couldRun = canRun();
|
||||||
|
|
||||||
@@ -388,7 +387,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
wirelessGridHandler.setRange(range);
|
wirelessGridHandler.setRange(range);
|
||||||
|
|
||||||
Collections.sort(storages, new Comparator<IStorage>() {
|
Collections.sort(items.getStorages(), new Comparator<IStorage>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(IStorage left, IStorage right) {
|
public int compare(IStorage left, IStorage right) {
|
||||||
int leftStored = left.getStored();
|
int leftStored = left.getStored();
|
||||||
@@ -402,7 +401,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Collections.sort(storages, new Comparator<IStorage>() {
|
Collections.sort(items.getStorages(), 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()) {
|
||||||
@@ -430,7 +429,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack push(ItemStack stack, int size, boolean simulate) {
|
public ItemStack push(ItemStack stack, int size, boolean simulate) {
|
||||||
if (stack == null || stack.getItem() == null || storages.isEmpty()) {
|
if (stack == null || stack.getItem() == null || items.getStorages().isEmpty()) {
|
||||||
|
System.out.println("Cannot push!");
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,7 +438,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
ItemStack remainder = stack;
|
ItemStack remainder = stack;
|
||||||
|
|
||||||
for (IStorage storage : storages) {
|
for (IStorage storage : items.getStorages()) {
|
||||||
remainder = storage.push(remainder, size, simulate);
|
remainder = storage.push(remainder, size, simulate);
|
||||||
|
|
||||||
if (remainder == null) {
|
if (remainder == null) {
|
||||||
@@ -476,7 +476,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
ItemStack newStack = null;
|
ItemStack newStack = null;
|
||||||
|
|
||||||
for (IStorage storage : storages) {
|
for (IStorage storage : items.getStorages()) {
|
||||||
ItemStack took = storage.take(stack, requested - received, flags);
|
ItemStack took = storage.take(stack, requested - received, flags);
|
||||||
|
|
||||||
if (took != null) {
|
if (took != null) {
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import refinedstorage.tile.config.IModeConfig;
|
|||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
import refinedstorage.tile.config.ModeConstants;
|
import refinedstorage.tile.config.ModeConstants;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class TileExternalStorage extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig {
|
public class TileExternalStorage extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig {
|
||||||
public static final String NBT_PRIORITY = "Priority";
|
public static final String NBT_PRIORITY = "Priority";
|
||||||
public static final String NBT_COMPARE = "Compare";
|
public static final String NBT_COMPARE = "Compare";
|
||||||
@@ -141,13 +143,12 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IStorage[] getStorages() {
|
public void addStorages(List<IStorage> storages) {
|
||||||
TileEntity facing = getFacingTile();
|
TileEntity facing = getFacingTile();
|
||||||
|
|
||||||
if (facing instanceof IDrawerGroup) {
|
if (facing instanceof IDrawerGroup) {
|
||||||
IDrawerGroup group = (IDrawerGroup) facing;
|
IDrawerGroup group = (IDrawerGroup) facing;
|
||||||
|
|
||||||
IStorage[] storages = new IStorage[group.getDrawerCount()];
|
|
||||||
|
|
||||||
energyUsage = group.getDrawerCount();
|
energyUsage = group.getDrawerCount();
|
||||||
stored = 0;
|
stored = 0;
|
||||||
@@ -157,7 +158,7 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider,
|
|||||||
if (group.isDrawerEnabled(i)) {
|
if (group.isDrawerEnabled(i)) {
|
||||||
DrawerStorage storage = new DrawerStorage(this, group.getDrawer(i));
|
DrawerStorage storage = new DrawerStorage(this, group.getDrawer(i));
|
||||||
|
|
||||||
storages[i] = storage;
|
storages.add(storage);
|
||||||
|
|
||||||
stored += storage.getStored();
|
stored += storage.getStored();
|
||||||
capacity += storage.getCapacity();
|
capacity += storage.getCapacity();
|
||||||
@@ -170,9 +171,7 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider,
|
|||||||
stored = storage.getStored();
|
stored = storage.getStored();
|
||||||
capacity = storage.getCapacity();
|
capacity = storage.getCapacity();
|
||||||
|
|
||||||
return new IStorage[]{
|
storages.add(storage);
|
||||||
storage
|
|
||||||
};
|
|
||||||
} else if (facing instanceof IDeepStorageUnit) {
|
} else if (facing instanceof IDeepStorageUnit) {
|
||||||
DeepStorageUnitStorage storage = new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing);
|
DeepStorageUnitStorage storage = new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing);
|
||||||
|
|
||||||
@@ -180,9 +179,7 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider,
|
|||||||
stored = storage.getStored();
|
stored = storage.getStored();
|
||||||
capacity = storage.getCapacity();
|
capacity = storage.getCapacity();
|
||||||
|
|
||||||
return new IStorage[]{
|
storages.add(storage);
|
||||||
storage
|
|
||||||
};
|
|
||||||
} else {
|
} else {
|
||||||
IItemHandler handler = RefinedStorageUtils.getItemHandler(facing, getDirection().getOpposite());
|
IItemHandler handler = RefinedStorageUtils.getItemHandler(facing, getDirection().getOpposite());
|
||||||
|
|
||||||
@@ -193,17 +190,13 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider,
|
|||||||
stored = storage.getStored();
|
stored = storage.getStored();
|
||||||
capacity = storage.getCapacity();
|
capacity = storage.getCapacity();
|
||||||
|
|
||||||
return new IStorage[]{
|
storages.add(storage);
|
||||||
storage
|
|
||||||
};
|
|
||||||
} else {
|
} else {
|
||||||
energyUsage = 0;
|
energyUsage = 0;
|
||||||
stored = 0;
|
stored = 0;
|
||||||
capacity = 0;
|
capacity = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user