Abstract stuff into stuff

This commit is contained in:
Raoul Van den Berge
2016-06-06 22:41:45 +02:00
parent 94d01a1ac7
commit f3d8cf5b1c
6 changed files with 113 additions and 88 deletions

View File

@@ -10,7 +10,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageGui;
import refinedstorage.tile.TileExternalStorage;
import refinedstorage.tile.externalstorage.TileExternalStorage;
public class BlockExternalStorage extends BlockMachine {
public BlockExternalStorage() {

View File

@@ -6,8 +6,8 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.tile.TileDiskDrive;
import refinedstorage.tile.TileExternalStorage;
import refinedstorage.tile.TileStorage;
import refinedstorage.tile.externalstorage.TileExternalStorage;
public class MessagePriorityUpdate extends MessageHandlerPlayerToServer<MessagePriorityUpdate> implements IMessage {
private int x;

View File

@@ -32,6 +32,7 @@ import refinedstorage.solderer.SoldererRecipeStorage;
import refinedstorage.solderer.SoldererRecipeUpgrade;
import refinedstorage.tile.*;
import refinedstorage.tile.controller.TileController;
import refinedstorage.tile.externalstorage.TileExternalStorage;
import refinedstorage.tile.grid.TileGrid;
import static refinedstorage.RefinedStorage.ID;

View File

@@ -0,0 +1,7 @@
package refinedstorage.tile.externalstorage;
import refinedstorage.api.storage.IStorage;
public abstract class ExternalStorage implements IStorage {
public abstract int getCapacity();
}

View File

@@ -0,0 +1,79 @@
package refinedstorage.tile.externalstorage;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.tile.config.ModeFilter;
import java.util.List;
public class ItemHandlerStorage extends ExternalStorage {
private TileExternalStorage externalStorage;
private IItemHandler handler;
public ItemHandlerStorage(TileExternalStorage externalStorage, IItemHandler handler) {
this.externalStorage = externalStorage;
this.handler = handler;
}
@Override
public int getCapacity() {
return handler.getSlots() * 64;
}
@Override
public void addItems(List<ItemStack> items) {
for (int i = 0; i < handler.getSlots(); ++i) {
if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getItem() != null) {
items.add(handler.getStackInSlot(i).copy());
}
}
}
@Override
public ItemStack push(ItemStack stack, boolean simulate) {
if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) {
return ItemHandlerHelper.insertItem(handler, stack, simulate);
}
return stack;
}
@Override
public ItemStack take(ItemStack stack, int size, int flags) {
for (int i = 0; i < handler.getSlots(); ++i) {
ItemStack slot = handler.getStackInSlot(i);
if (slot != null && RefinedStorageUtils.compareStack(slot, stack, flags)) {
size = Math.min(size, slot.stackSize);
ItemStack took = ItemHandlerHelper.copyStackWithSize(slot, size);
handler.extractItem(i, size, false);
return took;
}
}
return null;
}
@Override
public int getStored() {
int size = 0;
for (int i = 0; i < handler.getSlots(); ++i) {
if (handler.getStackInSlot(i) != null) {
size += handler.getStackInSlot(i).stackSize;
}
}
return size;
}
@Override
public int getPriority() {
return externalStorage.getPriority();
}
}

View File

@@ -1,13 +1,11 @@
package refinedstorage.tile;
package refinedstorage.tile.externalstorage;
import io.netty.buffer.ByteBuf;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.RefinedStorageCapabilities;
@@ -16,11 +14,16 @@ import refinedstorage.api.storage.IStorageProvider;
import refinedstorage.container.ContainerStorage;
import refinedstorage.inventory.BasicItemHandler;
import refinedstorage.network.MessagePriorityUpdate;
import refinedstorage.tile.config.*;
import refinedstorage.tile.IStorageGui;
import refinedstorage.tile.TileMachine;
import refinedstorage.tile.config.ICompareConfig;
import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.config.ModeConstants;
import java.util.List;
public class TileExternalStorage extends TileMachine implements IStorageProvider, IStorage, IStorageGui, ICompareConfig, IModeConfig {
public class TileExternalStorage extends TileMachine implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig {
public static final String NBT_PRIORITY = "Priority";
public static final String NBT_COMPARE = "Compare";
public static final String NBT_MODE = "Mode";
@@ -31,7 +34,10 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
private int compare = 0;
private int mode = ModeConstants.WHITELIST;
private int stored = 0;
private ExternalStorage storage;
private int stored;
private int capacity;
@Override
public int getEnergyUsage() {
@@ -40,69 +46,22 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override
public void updateMachine() {
}
IItemHandler handler = RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite());
@Override
public void addItems(List<ItemStack> items) {
IItemHandler handler = getItemHandler();
if (handler != null) {
for (int i = 0; i < handler.getSlots(); ++i) {
if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getItem() != null) {
items.add(handler.getStackInSlot(i).copy());
}
}
if (handler == null) {
storage = null;
} else if (storage == null) {
storage = new ItemHandlerStorage(this, handler);
}
}
@Override
public ItemStack push(ItemStack stack, boolean simulate) {
if (ModeFilter.respectsMode(filters, this, compare, stack)) {
IItemHandler handler = getItemHandler();
if (handler != null) {
return ItemHandlerHelper.insertItem(handler, stack, simulate);
}
}
return stack;
}
@Override
public ItemStack take(ItemStack stack, int size, int flags) {
IItemHandler handler = getItemHandler();
if (handler != null) {
for (int i = 0; i < handler.getSlots(); ++i) {
ItemStack slot = handler.getStackInSlot(i);
if (slot != null && RefinedStorageUtils.compareStack(slot, stack, flags)) {
size = Math.min(size, slot.stackSize);
ItemStack took = ItemHandlerHelper.copyStackWithSize(slot, size);
handler.extractItem(i, size, false);
return took;
}
}
}
return null;
}
public IItemHandler getItemHandler() {
return RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite());
}
@Override
public void writeContainerData(ByteBuf buf) {
super.writeContainerData(buf);
buf.writeInt(priority);
buf.writeInt(getStored());
buf.writeInt(getCapacity());
buf.writeInt(compare);
buf.writeInt(mode);
}
@@ -113,6 +72,7 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
priority = buf.readInt();
stored = buf.readInt();
capacity = buf.readInt();
compare = buf.readInt();
mode = buf.readInt();
}
@@ -191,7 +151,9 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override
public void provide(List<IStorage> storages) {
storages.add(this);
if (storage != null) {
storages.add(storage);
}
}
@Override
@@ -216,36 +178,12 @@ public class TileExternalStorage extends TileMachine implements IStorageProvider
@Override
public int getStored() {
if (worldObj.isRemote) {
return stored;
}
IItemHandler handler = getItemHandler();
if (handler != null) {
int size = 0;
for (int i = 0; i < handler.getSlots(); ++i) {
if (handler.getStackInSlot(i) != null) {
size += handler.getStackInSlot(i).stackSize;
}
}
return size;
} else {
return 0;
}
return worldObj.isRemote ? stored : (storage != null ? storage.getStored() : 0);
}
@Override
public int getCapacity() {
IItemHandler handler = getItemHandler();
if (handler != null) {
return handler.getSlots() * 64;
}
return 0;
return worldObj.isRemote ? capacity : (storage != null ? storage.getCapacity() : 0);
}
@Override