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;
|
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 io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.inventory.Container;
|
import net.minecraft.inventory.Container;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
@@ -34,8 +36,6 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
|
|||||||
private int compare = 0;
|
private int compare = 0;
|
||||||
private int mode = ModeConstants.WHITELIST;
|
private int mode = ModeConstants.WHITELIST;
|
||||||
|
|
||||||
private ExternalStorage storage;
|
|
||||||
|
|
||||||
private int stored;
|
private int stored;
|
||||||
private int capacity;
|
private int capacity;
|
||||||
|
|
||||||
@@ -46,13 +46,6 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMachine() {
|
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
|
@Override
|
||||||
@@ -151,8 +144,40 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void provide(List<IStorage> storages) {
|
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);
|
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
|
@Override
|
||||||
public int getStored() {
|
public int getStored() {
|
||||||
return worldObj.isRemote ? stored : (storage != null ? storage.getStored() : 0);
|
return stored;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCapacity() {
|
public int getCapacity() {
|
||||||
return worldObj.isRemote ? capacity : (storage != null ? storage.getCapacity() : 0);
|
return capacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user