A bit of storage drawers compatibility
This commit is contained in:
94
src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java
Executable file
94
src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java
Executable 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();
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user