Doesn't work yet

This commit is contained in:
Raoul Van den Berge
2016-06-29 14:36:23 +02:00
parent 907107353d
commit 0a76dd683a
7 changed files with 66 additions and 53 deletions

View File

@@ -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);

View File

@@ -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);
} }

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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) {

View File

@@ -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