A bit of storage drawers compatibility

This commit is contained in:
Raoul Van den Berge
2016-06-06 23:15:15 +02:00
parent f3d8cf5b1c
commit 809da44c83
2 changed files with 131 additions and 12 deletions

View File

@@ -0,0 +1,94 @@
package refinedstorage.tile.externalstorage;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.tile.config.ModeFilter;
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 void addItems(List<ItemStack> items) {
if (!drawer.isEmpty()) {
items.add(drawer.getStoredItemCopy());
}
}
@Override
public ItemStack push(ItemStack stack, boolean simulate) {
if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) {
if (drawer.isEmpty()) {
if (getStored() + stack.stackSize > getCapacity()) {
int remainingSpace = getCapacity() - getStored();
if (remainingSpace <= 0) {
return stack;
}
if (!simulate) {
drawer.setStoredItem(stack, remainingSpace);
}
return ItemHandlerHelper.copyStackWithSize(stack, stack.stackSize - remainingSpace);
} else {
if (!simulate) {
drawer.setStoredItem(stack, stack.stackSize);
}
return null;
}
} else {
if (getStored() + stack.stackSize > getCapacity()) {
int remainingSpace = getCapacity() - getStored();
if (remainingSpace <= 0) {
return stack;
}
if (!simulate) {
drawer.setStoredItemCount(drawer.getStoredItemCount() + remainingSpace);
}
return ItemHandlerHelper.copyStackWithSize(stack, stack.stackSize - remainingSpace);
} else {
if (!simulate) {
drawer.setStoredItemCount(drawer.getStoredItemCount() + stack.stackSize);
}
return null;
}
}
}
return stack;
}
@Override
public ItemStack take(ItemStack stack, int size, int flags) {
return null;
}
@Override
public int getStored() {
return drawer.getStoredItemCount();
}
@Override
public int getPriority() {
return externalStorage.getPriority();
}
}

View File

@@ -1,5 +1,7 @@
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;
@@ -34,8 +36,6 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
private int compare = 0;
private int mode = ModeConstants.WHITELIST;
private ExternalStorage storage;
private int stored;
private int capacity;
@@ -46,13 +46,6 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override
public void updateMachine() {
IItemHandler handler = RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite());
if (handler == null) {
storage = null;
} else if (storage == null) {
storage = new ItemHandlerStorage(this, handler);
}
}
@Override
@@ -151,8 +144,40 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override
public void provide(List<IStorage> storages) {
if (storage != null) {
if (getFacingTile() instanceof IDrawerGroup) {
stored = 0;
capacity = 0;
IDrawerGroup group = (IDrawerGroup) getFacingTile();
for (int i = 0; i < group.getDrawerCount(); ++i) {
if (group.isDrawerEnabled(i)) {
DrawerStorage storage = new DrawerStorage(this, group.getDrawer(i));
storages.add(storage);
stored += storage.getStored();
capacity += storage.getCapacity();
}
}
} else if (getFacingTile() instanceof IDrawer) {
DrawerStorage storage = new DrawerStorage(this, (IDrawer) getFacingTile());
storages.add(storage);
stored = storage.getStored();
capacity = storage.getCapacity();
} else {
IItemHandler handler = RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite());
if (handler != null) {
ItemHandlerStorage storage = new ItemHandlerStorage(this, handler);
storages.add(storage);
stored = storage.getStored();
capacity = storage.getCapacity();
}
}
}
@@ -178,12 +203,12 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override
public int getStored() {
return worldObj.isRemote ? stored : (storage != null ? storage.getStored() : 0);
return stored;
}
@Override
public int getCapacity() {
return worldObj.isRemote ? capacity : (storage != null ? storage.getCapacity() : 0);
return capacity;
}
@Override