Remove all specialized fluid tiles to the "real" tile with a toggle for fluids/items

This commit is contained in:
Raoul Van den Berge
2016-08-14 00:58:05 +02:00
parent 78aced64a1
commit 184c588a7a
38 changed files with 372 additions and 1226 deletions

View File

@@ -44,12 +44,10 @@ public final class RefinedStorage {
public int controllerBaseUsage;
public int cableUsage;
public int constructorUsage;
public int fluidConstructorUsage;
public int crafterUsage;
public int crafterPerPatternUsage;
public int craftingMonitorUsage;
public int destructorUsage;
public int fluidDestructorUsage;
public int detectorUsage;
public int diskDriveUsage;
public int diskDrivePerDiskUsage;
@@ -59,7 +57,6 @@ public final class RefinedStorage {
public int externalStoragePerStorageUsage;
public int exporterUsage;
public int importerUsage;
public int fluidImporterUsage;
public int interfaceUsage;
public int relayUsage;
public int soldererUsage;
@@ -94,12 +91,10 @@ public final class RefinedStorage {
controllerBaseUsage = config.getInt("controllerBase", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by the Controller");
cableUsage = config.getInt("cable", "energy", 0, 0, Integer.MAX_VALUE, "The energy used by Cables");
constructorUsage = config.getInt("constructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Constructors");
fluidConstructorUsage = config.getInt("fluidConstructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Constructors");
crafterUsage = config.getInt("crafter", "energy", 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters");
crafterPerPatternUsage = config.getInt("crafterPerPattern", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter");
craftingMonitorUsage = config.getInt("craftingMonitor", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors");
destructorUsage = config.getInt("destructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Destructors");
fluidDestructorUsage = config.getInt("fluidDestructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Destructors");
detectorUsage = config.getInt("detector", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Detectors");
diskDriveUsage = config.getInt("diskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Disk Drives");
diskDrivePerDiskUsage = config.getInt("diskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Storage Disks in Disk Drives");
@@ -109,7 +104,6 @@ public final class RefinedStorage {
externalStoragePerStorageUsage = config.getInt("externalStoragePerStorage", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per connected storage to an External Storage");
exporterUsage = config.getInt("exporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Exporters");
importerUsage = config.getInt("importer", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Importers");
fluidImporterUsage = config.getInt("fluidImporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Importers");
interfaceUsage = config.getInt("interface", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Interfaces");
relayUsage = config.getInt("relay", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Relays");
soldererUsage = config.getInt("solderer", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Solderers");

View File

@@ -25,7 +25,4 @@ public final class RefinedStorageBlocks {
public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter();
public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver();
public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive();
public static final BlockFluidConstructor FLUID_CONSTRUCTOR = new BlockFluidConstructor();
public static final BlockFluidDestructor FLUID_DESTRUCTOR = new BlockFluidDestructor();
public static final BlockFluidImporter FLUID_IMPORTER = new BlockFluidImporter();
}

View File

@@ -21,7 +21,4 @@ public final class RefinedStorageGui {
public static final int GRID_FILTER = 17;
public static final int NETWORK_TRANSMITTER = 18;
public static final int FLUID_DISK_DRIVE = 19;
public static final int FLUID_CONSTRUCTOR = 20;
public static final int FLUID_DESTRUCTOR = 21;
public static final int FLUID_IMPORTER = 22;
}

View File

@@ -1,37 +0,0 @@
package refinedstorage.block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageGui;
import refinedstorage.tile.TileFluidConstructor;
public class BlockFluidConstructor extends BlockConstructor {
public BlockFluidConstructor() {
super("fluid_constructor");
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileFluidConstructor();
}
@Override
public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
return false;
}
if (!world.isRemote) {
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_CONSTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ());
}
return true;
}
}

View File

@@ -1,37 +0,0 @@
package refinedstorage.block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageGui;
import refinedstorage.tile.TileFluidDestructor;
public class BlockFluidDestructor extends BlockDestructor {
public BlockFluidDestructor() {
super("fluid_destructor");
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileFluidDestructor();
}
@Override
public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
return false;
}
if (!world.isRemote) {
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_DESTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ());
}
return true;
}
}

View File

@@ -1,37 +0,0 @@
package refinedstorage.block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageGui;
import refinedstorage.tile.TileFluidImporter;
public class BlockFluidImporter extends BlockImporter {
public BlockFluidImporter() {
super("fluid_importer");
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileFluidImporter();
}
@Override
public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
return false;
}
if (!world.isRemote) {
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_IMPORTER, world, pos.getX(), pos.getY(), pos.getZ());
}
return true;
}
}

View File

@@ -115,7 +115,7 @@ public abstract class ContainerBase extends Container {
}
for (int i = begin; i < end; ++i) {
if (!getSlot(i).getHasStack()) {
if (!getSlot(i).getHasStack() && getSlot(i).isItemValid(stack)) {
getSlot(i).putStack(ItemHandlerHelper.copyStackWithSize(stack, 1));
getSlot(i).onSlotChanged();

View File

@@ -5,6 +5,7 @@ import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.container.slot.SlotSpecimenType;
import refinedstorage.tile.TileConstructor;
public class ContainerConstructor extends ContainerBase {
@@ -15,7 +16,7 @@ public class ContainerConstructor extends ContainerBase {
addSlotToContainer(new SlotItemHandler(constructor.getUpgrades(), i, 187, 6 + (i * 18)));
}
addSlotToContainer(new SlotSpecimen(constructor.getFilter(), 0, 80, 20, SlotSpecimen.SPECIMEN_BLOCK));
addSlotToContainer(new SlotSpecimenType(constructor, 0, 80, 20, SlotSpecimen.SPECIMEN_BLOCK));
addPlayerInventory(8, 55);
}

View File

@@ -5,6 +5,7 @@ import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.container.slot.SlotSpecimenType;
import refinedstorage.tile.TileDestructor;
public class ContainerDestructor extends ContainerBase {
@@ -16,7 +17,7 @@ public class ContainerDestructor extends ContainerBase {
}
for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotSpecimen(destructor.getInventory(), i, 8 + (18 * i), 20, SlotSpecimen.SPECIMEN_BLOCK));
addSlotToContainer(new SlotSpecimenType(destructor, i, 8 + (18 * i), 20, SlotSpecimen.SPECIMEN_BLOCK));
}
addPlayerInventory(8, 55);

View File

@@ -1,49 +0,0 @@
package refinedstorage.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.container.slot.SlotSpecimenFluid;
import refinedstorage.tile.TileFluidConstructor;
public class ContainerFluidConstructor extends ContainerBase {
public ContainerFluidConstructor(TileFluidConstructor fluidConstructor, EntityPlayer player) {
super(fluidConstructor, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(fluidConstructor.getUpgrades(), i, 187, 6 + (i * 18)));
}
addSlotToContainer(new SlotSpecimenFluid(!fluidConstructor.getWorld().isRemote, fluidConstructor.getFilter(), 0, 80, 20));
addPlayerInventory(8, 55);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack stack = null;
Slot slot = getSlot(index);
if (slot != null && slot.getHasStack()) {
stack = slot.getStack();
if (index < 4) {
if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) {
return null;
}
} else if (!mergeItemStack(stack, 0, 4, false)) {
return mergeItemStackToSpecimen(stack, 4, 4 + 1);
}
if (stack.stackSize == 0) {
slot.putStack(null);
} else {
slot.onSlotChanged();
}
}
return stack;
}
}

View File

@@ -1,51 +0,0 @@
package refinedstorage.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.container.slot.SlotSpecimenFluid;
import refinedstorage.tile.TileFluidDestructor;
public class ContainerFluidDestructor extends ContainerBase {
public ContainerFluidDestructor(TileFluidDestructor fluidDestructor, EntityPlayer player) {
super(fluidDestructor, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(fluidDestructor.getUpgrades(), i, 187, 6 + (i * 18)));
}
for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotSpecimenFluid(!fluidDestructor.getWorld().isRemote, fluidDestructor.getInventory(), i, 8 + (18 * i), 20));
}
addPlayerInventory(8, 55);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack stack = null;
Slot slot = getSlot(index);
if (slot != null && slot.getHasStack()) {
stack = slot.getStack();
if (index < 4) {
if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) {
return null;
}
} else if (!mergeItemStack(stack, 0, 4, false)) {
return mergeItemStackToSpecimen(stack, 4, 4 + 9);
}
if (stack.stackSize == 0) {
slot.putStack(null);
} else {
slot.onSlotChanged();
}
}
return stack;
}
}

View File

@@ -1,51 +0,0 @@
package refinedstorage.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.container.slot.SlotSpecimenFluid;
import refinedstorage.tile.TileFluidImporter;
public class ContainerFluidImporter extends ContainerBase {
public ContainerFluidImporter(TileFluidImporter fluidImporter, EntityPlayer player) {
super(fluidImporter, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(fluidImporter.getUpgrades(), i, 187, 6 + (i * 18)));
}
for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotSpecimenFluid(!fluidImporter.getWorld().isRemote, fluidImporter.getFilters(), i, 8 + (18 * i), 20));
}
addPlayerInventory(8, 55);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack stack = null;
Slot slot = getSlot(index);
if (slot != null && slot.getHasStack()) {
stack = slot.getStack();
if (index < 4) {
if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) {
return null;
}
} else if (!mergeItemStack(stack, 0, 4, false)) {
return mergeItemStackToSpecimen(stack, 4, 4 + 9);
}
if (stack.stackSize == 0) {
slot.putStack(null);
} else {
slot.onSlotChanged();
}
}
return stack;
}
}

View File

@@ -4,7 +4,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.container.slot.SlotSpecimenType;
import refinedstorage.tile.TileImporter;
public class ContainerImporter extends ContainerBase {
@@ -16,7 +16,7 @@ public class ContainerImporter extends ContainerBase {
}
for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotSpecimen(importer.getFilters(), i, 8 + (18 * i), 20));
addSlotToContainer(new SlotSpecimenType(importer, i, 8 + (18 * i), 20));
}
addPlayerInventory(8, 55);

View File

@@ -1,19 +1,14 @@
package refinedstorage.container.slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.SlotItemHandler;
public class SlotSpecimenFluid extends SlotSpecimen {
private boolean server;
public SlotSpecimenFluid(boolean server, IItemHandler handler, int id, int x, int y) {
super(handler, id, x, y);
this.server = server;
/**
* Created by Raoul on 13/08/2016.
*/
// @TODO: REMOVAL
public class SlotSpecimenFluid extends SlotItemHandler {
public SlotSpecimenFluid(boolean b, IItemHandler filters, int i, int i1, int i2) {
super(filters, i, i1, i2);
}
@Override
public ItemStack getStack() {
return server ? super.getStack() : null;
}
}
}

View File

@@ -0,0 +1,40 @@
package refinedstorage.container.slot;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.tile.config.IType;
public class SlotSpecimenType extends SlotSpecimen {
private IType type;
public SlotSpecimenType(IType type, int id, int x, int y, int flags) {
super(null, id, x, y, flags);
this.type = type;
}
public SlotSpecimenType(IType type, int id, int x, int y) {
this(type, id, x, y, 0);
}
@Override
public IItemHandler getItemHandler() {
return type.getFilterInventory();
}
@Override
public boolean isWithSize() {
return super.isWithSize() && type.getType() != IType.FLUIDS;
}
@Override
public boolean isBlockOnly() {
return super.isBlockOnly() && type.getType() == IType.ITEMS;
}
@Override
public ItemStack getStack() {
return (type.getType() == IType.ITEMS || !((TileEntity) type).getWorld().isRemote) ? super.getStack() : null;
}
}

View File

@@ -4,6 +4,7 @@ import refinedstorage.api.storage.CompareUtils;
import refinedstorage.container.ContainerConstructor;
import refinedstorage.gui.sidebutton.SideButtonCompare;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.gui.sidebutton.SideButtonType;
import refinedstorage.tile.TileConstructor;
public class GuiConstructor extends GuiBase {
@@ -15,6 +16,8 @@ public class GuiConstructor extends GuiBase {
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(TileConstructor.REDSTONE_MODE));
addSideButton(new SideButtonType(TileConstructor.TYPE));
addSideButton(new SideButtonCompare(TileConstructor.COMPARE, CompareUtils.COMPARE_DAMAGE));
addSideButton(new SideButtonCompare(TileConstructor.COMPARE, CompareUtils.COMPARE_NBT));
}

View File

@@ -5,6 +5,7 @@ import refinedstorage.container.ContainerDestructor;
import refinedstorage.gui.sidebutton.SideButtonCompare;
import refinedstorage.gui.sidebutton.SideButtonMode;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.gui.sidebutton.SideButtonType;
import refinedstorage.tile.TileDestructor;
public class GuiDestructor extends GuiBase {
@@ -16,6 +17,8 @@ public class GuiDestructor extends GuiBase {
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(TileDestructor.REDSTONE_MODE));
addSideButton(new SideButtonType(TileDestructor.TYPE));
addSideButton(new SideButtonMode(TileDestructor.MODE));
addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_DAMAGE));

View File

@@ -1,37 +0,0 @@
package refinedstorage.gui;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.container.ContainerFluidConstructor;
import refinedstorage.gui.sidebutton.SideButtonCompare;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.TileFluidConstructor;
public class GuiFluidConstructor extends GuiBase {
public GuiFluidConstructor(ContainerFluidConstructor container) {
super(container, 211, 137);
}
@Override
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(TileFluidConstructor.REDSTONE_MODE));
addSideButton(new SideButtonCompare(TileFluidConstructor.COMPARE, CompareUtils.COMPARE_NBT));
}
@Override
public void update(int x, int y) {
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY) {
bindTexture("gui/constructor.png");
drawTexture(x, y, 0, 0, width, height);
}
@Override
public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("gui.refinedstorage:fluid_constructor"));
drawString(7, 43, t("container.inventory"));
}
}

View File

@@ -1,40 +0,0 @@
package refinedstorage.gui;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.container.ContainerFluidDestructor;
import refinedstorage.gui.sidebutton.SideButtonCompare;
import refinedstorage.gui.sidebutton.SideButtonMode;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.TileFluidDestructor;
public class GuiFluidDestructor extends GuiBase {
public GuiFluidDestructor(ContainerFluidDestructor container) {
super(container, 211, 137);
}
@Override
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(TileFluidDestructor.REDSTONE_MODE));
addSideButton(new SideButtonMode(TileFluidDestructor.MODE));
addSideButton(new SideButtonCompare(TileFluidDestructor.COMPARE, CompareUtils.COMPARE_NBT));
}
@Override
public void update(int x, int y) {
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY) {
bindTexture("gui/destructor.png");
drawTexture(x, y, 0, 0, width, height);
}
@Override
public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("gui.refinedstorage:fluid_destructor"));
drawString(7, 43, t("container.inventory"));
}
}

View File

@@ -1,40 +0,0 @@
package refinedstorage.gui;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.container.ContainerFluidImporter;
import refinedstorage.gui.sidebutton.SideButtonCompare;
import refinedstorage.gui.sidebutton.SideButtonMode;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.TileFluidImporter;
public class GuiFluidImporter extends GuiBase {
public GuiFluidImporter(ContainerFluidImporter container) {
super(container, 211, 137);
}
@Override
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(TileFluidImporter.REDSTONE_MODE));
addSideButton(new SideButtonMode(TileFluidImporter.MODE));
addSideButton(new SideButtonCompare(TileFluidImporter.COMPARE, CompareUtils.COMPARE_NBT));
}
@Override
public void update(int x, int y) {
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY) {
bindTexture("gui/importer.png");
drawTexture(x, y, 0, 0, width, height);
}
@Override
public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("gui.refinedstorage:fluid_importer"));
drawString(7, 43, t("container.inventory"));
}
}

View File

@@ -53,12 +53,6 @@ public class GuiHandler implements IGuiHandler {
return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player);
case RefinedStorageGui.FLUID_DISK_DRIVE:
return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player);
case RefinedStorageGui.FLUID_CONSTRUCTOR:
return new ContainerFluidConstructor((TileFluidConstructor) tile, player);
case RefinedStorageGui.FLUID_DESTRUCTOR:
return new ContainerFluidDestructor((TileFluidDestructor) tile, player);
case RefinedStorageGui.FLUID_IMPORTER:
return new ContainerFluidImporter((TileFluidImporter) tile, player);
default:
return null;
}
@@ -132,12 +126,6 @@ public class GuiHandler implements IGuiHandler {
return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile);
case RefinedStorageGui.FLUID_DISK_DRIVE:
return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png");
case RefinedStorageGui.FLUID_CONSTRUCTOR:
return new GuiFluidConstructor((ContainerFluidConstructor) getContainer(ID, player, tile));
case RefinedStorageGui.FLUID_DESTRUCTOR:
return new GuiFluidDestructor((ContainerFluidDestructor) getContainer(ID, player, tile));
case RefinedStorageGui.FLUID_IMPORTER:
return new GuiFluidImporter((ContainerFluidImporter) getContainer(ID, player, tile));
default:
return null;
}

View File

@@ -5,6 +5,7 @@ import refinedstorage.container.ContainerImporter;
import refinedstorage.gui.sidebutton.SideButtonCompare;
import refinedstorage.gui.sidebutton.SideButtonMode;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.gui.sidebutton.SideButtonType;
import refinedstorage.tile.TileImporter;
public class GuiImporter extends GuiBase {
@@ -16,6 +17,8 @@ public class GuiImporter extends GuiBase {
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(TileImporter.REDSTONE_MODE));
addSideButton(new SideButtonType(TileImporter.TYPE));
addSideButton(new SideButtonMode(TileImporter.MODE));
addSideButton(new SideButtonCompare(TileImporter.COMPARE, CompareUtils.COMPARE_DAMAGE));

View File

@@ -0,0 +1,29 @@
package refinedstorage.gui.sidebutton;
import net.minecraft.util.text.TextFormatting;
import refinedstorage.gui.GuiBase;
import refinedstorage.tile.config.IType;
import refinedstorage.tile.data.TileDataManager;
import refinedstorage.tile.data.TileDataParameter;
public class SideButtonType extends SideButton {
private TileDataParameter<Integer> type;
public SideButtonType(TileDataParameter<Integer> type) {
this.type = type;
}
@Override
public String getTooltip(GuiBase gui) {
return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:type") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:type." + type.getValue());
}
@Override
public void draw(GuiBase gui, int x, int y) {
}
@Override
public void actionPerformed() {
TileDataManager.setParameter(type, type.getValue() == IType.ITEMS ? IType.FLUIDS : IType.ITEMS);
}
}

View File

@@ -258,8 +258,5 @@ public class ClientProxy extends CommonProxy {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=64k"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_constructor", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_destructor", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_IMPORTER), 0, new ModelResourceLocation("refinedstorage:fluid_importer", "inventory"));
}
}

View File

@@ -86,9 +86,6 @@ public class CommonProxy {
registerTile(TileNetworkReceiver.class, "network_receiver");
registerTile(TileNetworkTransmitter.class, "network_transmitter");
registerTile(TileFluidDiskDrive.class, "fluid_disk_drive");
registerTile(TileFluidConstructor.class, "fluid_constructor");
registerTile(TileFluidDestructor.class, "fluid_destructor");
registerTile(TileFluidImporter.class, "fluid_importer");
registerBlock(RefinedStorageBlocks.CONTROLLER);
registerBlock(RefinedStorageBlocks.GRID);
@@ -112,9 +109,6 @@ public class CommonProxy {
registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER);
registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER);
registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE);
registerBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR);
registerBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR);
registerBlock(RefinedStorageBlocks.FLUID_IMPORTER);
registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON);
registerItem(RefinedStorageItems.STORAGE_DISK);
@@ -333,14 +327,6 @@ public class CommonProxy {
new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
);
// Fluid Importer
GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.FLUID_IMPORTER),
new ItemStack(RefinedStorageBlocks.CABLE),
new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION),
new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED),
new ItemStack(Items.BUCKET)
);
// Exporter
GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.EXPORTER),
new ItemStack(RefinedStorageBlocks.CABLE),
@@ -360,18 +346,6 @@ public class CommonProxy {
'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
);
// Fluid Destructor
GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.DESTRUCTOR),
"EDE",
"RMR",
"EIE",
'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON),
'D', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_DESTRUCTION),
'R', new ItemStack(Items.BUCKET),
'M', new ItemStack(RefinedStorageBlocks.CABLE),
'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
);
// Constructor
GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.CONSTRUCTOR),
"ECE",
@@ -384,18 +358,6 @@ public class CommonProxy {
'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
);
// Fluid Constructor
GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.FLUID_CONSTRUCTOR),
"ECE",
"RMR",
"EIE",
'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON),
'C', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION),
'R', new ItemStack(Items.BUCKET),
'M', new ItemStack(RefinedStorageBlocks.CABLE),
'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
);
// Detector
GameRegistry.addRecipe(new ItemStack(RefinedStorageBlocks.DETECTOR),
"ECE",

View File

@@ -1,6 +1,7 @@
package refinedstorage.tile;
import mcmultipart.microblock.IMicroblock;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
@@ -9,25 +10,31 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IType;
import refinedstorage.tile.data.TileDataParameter;
public class TileConstructor extends TileMultipartNode implements IComparable {
public class TileConstructor extends TileMultipartNode implements IComparable, IType {
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> TYPE = IType.createParameter();
private static final String NBT_COMPARE = "Compare";
private static final String NBT_TYPE = "Type";
private static final int BASE_SPEED = 20;
private ItemHandlerBasic filter = new ItemHandlerBasic(1, this) {
private ItemHandlerBasic itemFilters = new ItemHandlerBasic(1, this) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
@@ -35,16 +42,20 @@ public class TileConstructor extends TileMultipartNode implements IComparable {
block = SlotSpecimen.getBlockState(worldObj, pos.offset(getDirection()), getStackInSlot(0));
}
};
private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(1, this);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING);
private int compare = 0;
private int type = IType.ITEMS;
private IBlockState block;
private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this);
public TileConstructor() {
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(TYPE);
}
@Override
@@ -59,23 +70,45 @@ public class TileConstructor extends TileMultipartNode implements IComparable {
@Override
public void updateNode() {
if (block != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) {
BlockPos front = pos.offset(getDirection());
if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) {
if (type == IType.ITEMS && block != null) {
BlockPos front = pos.offset(getDirection());
if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) {
ItemStack took = network.extractItem(filter.getStackInSlot(0), 1, compare);
if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) {
ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare);
if (took != null) {
scheduler.resetSchedule();
worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2);
// From ItemBlock.onItemUse
SoundType blockSound = block.getBlock().getSoundType();
worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F);
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
ItemStack craft = filter.getStackInSlot(0);
if (took != null) {
scheduler.resetSchedule();
worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2);
// From ItemBlock.onItemUse
SoundType blockSound = block.getBlock().getSoundType();
worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F);
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
ItemStack craft = itemFilters.getStackInSlot(0);
if (scheduler.canSchedule(compare, craft)) {
scheduler.schedule(network, compare, craft);
if (scheduler.canSchedule(compare, craft)) {
scheduler.schedule(network, compare, craft);
}
}
}
} else if (type == IType.FLUIDS) {
FluidStack stack = fluidFilters.getFluids()[0];
if (stack != null) {
BlockPos front = pos.offset(getDirection());
Block block = stack.getFluid().getBlock();
if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) {
FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
if (took != null) {
IBlockState state = block.getDefaultState();
// @TODO: This doesn't cause the block to flow?
worldObj.setBlockState(front, state, 1 | 2);
}
}
}
}
@@ -102,8 +135,13 @@ public class TileConstructor extends TileMultipartNode implements IComparable {
compare = tag.getInteger(NBT_COMPARE);
}
readItems(filter, 0, tag);
if (tag.hasKey(NBT_TYPE)) {
type = tag.getInteger(NBT_TYPE);
}
readItems(itemFilters, 0, tag);
readItems(upgrades, 1, tag);
readItems(fluidFilters, 2, tag);
scheduler.read(tag);
}
@@ -113,9 +151,11 @@ public class TileConstructor extends TileMultipartNode implements IComparable {
super.write(tag);
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_TYPE, type);
writeItems(filter, 0, tag);
writeItems(itemFilters, 0, tag);
writeItems(upgrades, 1, tag);
writeItems(fluidFilters, 2, tag);
scheduler.writeToNBT(tag);
@@ -126,15 +166,28 @@ public class TileConstructor extends TileMultipartNode implements IComparable {
return upgrades;
}
public IItemHandler getFilter() {
return filter;
}
@Override
public IItemHandler getDrops() {
return upgrades;
}
@Override
public int getType() {
return worldObj.isRemote ? TYPE.getValue() : type;
}
@Override
public void setType(int type) {
this.type = type;
markDirty();
}
@Override
public IItemHandler getFilterInventory() {
return getType() == IType.ITEMS ? itemFilters : fluidFilters;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {

View File

@@ -2,6 +2,7 @@ package refinedstorage.tile;
import mcmultipart.microblock.IMicroblock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockLiquid;
import net.minecraft.block.state.IBlockState;
import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.ItemStack;
@@ -9,36 +10,50 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper;
import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.config.IType;
import refinedstorage.tile.data.TileDataParameter;
import java.util.List;
public class TileDestructor extends TileMultipartNode implements IComparable, IFilterable {
public class TileDestructor extends TileMultipartNode implements IComparable, IFilterable, IType {
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
public static final TileDataParameter<Integer> TYPE = IType.createParameter();
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
private static final String NBT_TYPE = "Type";
private static final int BASE_SPEED = 20;
private ItemHandlerBasic filters = new ItemHandlerBasic(9, this);
private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this);
private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED);
private int compare = 0;
private int mode = IFilterable.WHITELIST;
private int type = IType.ITEMS;
public TileDestructor() {
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(MODE);
dataManager.addWatchedParameter(TYPE);
}
@Override
@@ -54,32 +69,56 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF
@Override
public void updateNode() {
if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) {
BlockPos front = pos.offset(getDirection());
if (type == IType.ITEMS) {
BlockPos front = pos.offset(getDirection());
IBlockState frontBlockState = worldObj.getBlockState(front);
ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState);
IBlockState frontBlockState = worldObj.getBlockState(front);
ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState);
if (frontStack != null) {
if (IFilterable.canTake(filters, mode, compare, frontStack)) {
List<ItemStack> drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0);
if (frontStack != null) {
if (IFilterable.canTake(itemFilters, mode, compare, frontStack)) {
List<ItemStack> drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0);
worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState));
worldObj.setBlockToAir(front);
worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState));
worldObj.setBlockToAir(front);
for (ItemStack drop : drops) {
// We check if the controller isn't null here because when a destructor faces a node and removes it
// it will essentially remove this block itself from the network without knowing
if (network == null) {
InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), drop);
} else {
ItemStack remainder = network.insertItem(drop, drop.stackSize, false);
for (ItemStack drop : drops) {
// We check if the controller isn't null here because when a destructor faces a node and removes it
// it will essentially remove this block itself from the network without knowing
if (network == null) {
InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), drop);
} else {
ItemStack remainder = network.insertItem(drop, drop.stackSize, false);
if (remainder != null) {
InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), remainder);
if (remainder != null) {
InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), remainder);
}
}
}
}
}
} else if (type == IType.FLUIDS) {
BlockPos front = pos.offset(getDirection());
Block frontBlock = worldObj.getBlockState(front).getBlock();
IFluidHandler handler = null;
if (frontBlock instanceof BlockLiquid) {
handler = new BlockLiquidWrapper((BlockLiquid) frontBlock, worldObj, front);
} else if (frontBlock instanceof IFluidBlock) {
handler = new FluidBlockWrapper((IFluidBlock) frontBlock, worldObj, front);
}
if (handler != null) {
FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false);
if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) {
FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true);
network.insertFluid(drained, drained.amount, false);
}
}
}
}
}
@@ -120,8 +159,13 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF
mode = tag.getInteger(NBT_MODE);
}
readItems(filters, 0, tag);
if (tag.hasKey(NBT_TYPE)) {
type = tag.getInteger(NBT_TYPE);
}
readItems(itemFilters, 0, tag);
readItems(upgrades, 1, tag);
readItems(fluidFilters, 2, tag);
}
@Override
@@ -130,9 +174,11 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_MODE, mode);
tag.setInteger(NBT_TYPE, type);
writeItems(filters, 0, tag);
writeItems(itemFilters, 0, tag);
writeItems(upgrades, 1, tag);
writeItems(fluidFilters, 2, tag);
return tag;
}
@@ -142,7 +188,7 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF
}
public IItemHandler getInventory() {
return filters;
return itemFilters;
}
@Override
@@ -150,6 +196,23 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF
return upgrades;
}
@Override
public int getType() {
return worldObj.isRemote ? TYPE.getValue() : type;
}
@Override
public void setType(int type) {
this.type = type;
markDirty();
}
@Override
public IItemHandler getFilterInventory() {
return getType() == IType.ITEMS ? itemFilters : fluidFilters;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {

View File

@@ -1,132 +0,0 @@
package refinedstorage.tile;
import mcmultipart.microblock.IMicroblock;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.data.TileDataParameter;
public class TileFluidConstructor extends TileMultipartNode implements IComparable {
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
private static final String NBT_COMPARE = "Compare";
private static final int BASE_SPEED = 20;
private ItemHandlerFluid filter = new ItemHandlerFluid(1, this);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED);
private int compare = 0;
public TileFluidConstructor() {
dataManager.addWatchedParameter(COMPARE);
}
@Override
public boolean canAddMicroblock(IMicroblock microblock) {
return !isBlockingMicroblock(microblock, getDirection());
}
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.fluidConstructorUsage + upgrades.getEnergyUsage();
}
@Override
public void updateNode() {
FluidStack stack = filter.getFluids()[0];
if (stack != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) {
BlockPos front = pos.offset(getDirection());
Block block = stack.getFluid().getBlock();
if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) {
FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
if (took != null) {
IBlockState state = block.getDefaultState();
// @TODO: This doesn't cause the block to flow?
worldObj.setBlockState(front, state, 1 | 2);
}
}
}
}
@Override
public int getCompare() {
return compare;
}
@Override
public void setCompare(int compare) {
this.compare = compare;
markDirty();
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
if (tag.hasKey(NBT_COMPARE)) {
compare = tag.getInteger(NBT_COMPARE);
}
readItems(filter, 0, tag);
readItems(upgrades, 1, tag);
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
tag.setInteger(NBT_COMPARE, compare);
writeItems(filter, 0, tag);
writeItems(upgrades, 1, tag);
return tag;
}
public IItemHandler getUpgrades() {
return upgrades;
}
public IItemHandler getFilter() {
return filter;
}
@Override
public IItemHandler getDrops() {
return upgrades;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return (T) upgrades;
}
return super.getCapability(capability, facing);
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
}

View File

@@ -1,162 +0,0 @@
package refinedstorage.tile;
import mcmultipart.microblock.IMicroblock;
import net.minecraft.block.Block;
import net.minecraft.block.BlockLiquid;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper;
import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.data.TileDataParameter;
public class TileFluidDestructor extends TileMultipartNode implements IComparable, IFilterable {
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
private static final int BASE_SPEED = 20;
private ItemHandlerFluid filters = new ItemHandlerFluid(9, this);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED);
private int compare = 0;
private int mode = IFilterable.WHITELIST;
public TileFluidDestructor() {
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(MODE);
}
@Override
public boolean canAddMicroblock(IMicroblock microblock) {
return !isBlockingMicroblock(microblock, getDirection());
}
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.fluidDestructorUsage + upgrades.getEnergyUsage();
}
@Override
public void updateNode() {
if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) {
BlockPos front = pos.offset(getDirection());
Block frontBlock = worldObj.getBlockState(front).getBlock();
IFluidHandler handler = null;
if (frontBlock instanceof BlockLiquid) {
handler = new BlockLiquidWrapper((BlockLiquid) frontBlock, worldObj, front);
} else if (frontBlock instanceof IFluidBlock) {
handler = new FluidBlockWrapper((IFluidBlock) frontBlock, worldObj, front);
}
if (handler != null) {
FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false);
if (stack != null && IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) {
FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true);
network.insertFluid(drained, drained.amount, false);
}
}
}
}
@Override
public int getCompare() {
return compare;
}
@Override
public void setCompare(int compare) {
this.compare = compare;
markDirty();
}
@Override
public int getMode() {
return mode;
}
@Override
public void setMode(int mode) {
this.mode = mode;
markDirty();
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
if (tag.hasKey(NBT_COMPARE)) {
compare = tag.getInteger(NBT_COMPARE);
}
if (tag.hasKey(NBT_MODE)) {
mode = tag.getInteger(NBT_MODE);
}
readItems(filters, 0, tag);
readItems(upgrades, 1, tag);
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_MODE, mode);
writeItems(filters, 0, tag);
writeItems(upgrades, 1, tag);
return tag;
}
public IItemHandler getUpgrades() {
return upgrades;
}
public IItemHandler getInventory() {
return filters;
}
@Override
public IItemHandler getDrops() {
return upgrades;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return (T) upgrades;
}
return super.getCapability(capability, facing);
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
}

View File

@@ -1,142 +0,0 @@
package refinedstorage.tile;
import mcmultipart.microblock.IMicroblock;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.data.TileDataParameter;
public class TileFluidImporter extends TileMultipartNode implements IComparable, IFilterable {
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
private ItemHandlerFluid filters = new ItemHandlerFluid(9, this);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED);
private int compare = 0;
private int mode = IFilterable.WHITELIST;
public TileFluidImporter() {
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(MODE);
}
@Override
public boolean canAddMicroblock(IMicroblock microblock) {
return !isBlockingMicroblock(microblock, getDirection());
}
@Override
public int getEnergyUsage() {
return RefinedStorage.INSTANCE.fluidImporterUsage + upgrades.getEnergyUsage();
}
@Override
public void updateNode() {
IFluidHandler handler = getFluidHandler(getFacingTile(), getDirection().getOpposite());
if (handler != null) {
FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false);
if (stack != null && IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) {
FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true);
network.insertFluid(drain, drain.amount, false);
}
}
}
@Override
public int getCompare() {
return compare;
}
@Override
public void setCompare(int compare) {
this.compare = compare;
markDirty();
}
@Override
public int getMode() {
return mode;
}
@Override
public void setMode(int mode) {
this.mode = mode;
markDirty();
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
if (tag.hasKey(NBT_COMPARE)) {
compare = tag.getInteger(NBT_COMPARE);
}
if (tag.hasKey(NBT_MODE)) {
mode = tag.getInteger(NBT_MODE);
}
readItems(filters, 0, tag);
readItems(upgrades, 1, tag);
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_MODE, mode);
writeItems(filters, 0, tag);
writeItems(upgrades, 1, tag);
return tag;
}
public IItemHandler getUpgrades() {
return upgrades;
}
public IItemHandler getFilters() {
return filters;
}
@Override
public IItemHandler getDrops() {
return upgrades;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return (T) upgrades;
}
return super.getCapability(capability, facing);
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
}

View File

@@ -5,34 +5,45 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.config.IType;
import refinedstorage.tile.data.TileDataParameter;
public class TileImporter extends TileMultipartNode implements IComparable, IFilterable {
public class TileImporter extends TileMultipartNode implements IComparable, IFilterable, IType {
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
public static final TileDataParameter<Integer> TYPE = IType.createParameter();
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
private static final String NBT_TYPE = "Type";
private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this);
private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this);
private ItemHandlerBasic filters = new ItemHandlerBasic(9, this);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK);
private int compare = 0;
private int mode = IFilterable.WHITELIST;
private int type = IType.ITEMS;
private int currentSlot;
public TileImporter() {
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(MODE);
dataManager.addWatchedParameter(TYPE);
}
@Override
@@ -47,32 +58,46 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil
@Override
public void updateNode() {
IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite());
if (type == IType.ITEMS) {
IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite());
if (getFacingTile() instanceof TileDiskDrive || handler == null) {
return;
}
if (getFacingTile() instanceof TileDiskDrive || handler == null) {
return;
}
if (currentSlot >= handler.getSlots()) {
currentSlot = 0;
}
if (currentSlot >= handler.getSlots()) {
currentSlot = 0;
}
if (handler.getSlots() > 0) {
ItemStack stack = handler.getStackInSlot(currentSlot);
if (handler.getSlots() > 0) {
ItemStack stack = handler.getStackInSlot(currentSlot);
if (stack == null || !IFilterable.canTake(filters, mode, compare, stack)) {
currentSlot++;
} else if (ticks % upgrades.getSpeed() == 0) {
int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1;
ItemStack result = handler.extractItem(currentSlot, quantity, true);
if (result != null && network.insertItem(result, result.stackSize, true) == null) {
network.insertItem(result, result.stackSize, false);
handler.extractItem(currentSlot, quantity, false);
} else {
if (stack == null || !IFilterable.canTake(itemFilters, mode, compare, stack)) {
currentSlot++;
} else if (ticks % upgrades.getSpeed() == 0) {
int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1;
ItemStack result = handler.extractItem(currentSlot, quantity, true);
if (result != null && network.insertItem(result, result.stackSize, true) == null) {
network.insertItem(result, result.stackSize, false);
handler.extractItem(currentSlot, quantity, false);
} else {
currentSlot++;
}
}
}
} else if (type == IType.FLUIDS && ticks % upgrades.getSpeed() == 0) {
IFluidHandler handler = getFluidHandler(getFacingTile(), getDirection().getOpposite());
if (handler != null) {
FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false);
if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) {
FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true);
network.insertFluid(drain, drain.amount, false);
}
}
}
@@ -114,8 +139,13 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil
mode = tag.getInteger(NBT_MODE);
}
readItems(filters, 0, tag);
if (tag.hasKey(NBT_TYPE)) {
type = tag.getInteger(NBT_TYPE);
}
readItems(itemFilters, 0, tag);
readItems(upgrades, 1, tag);
readItems(fluidFilters, 2, tag);
}
@Override
@@ -124,9 +154,11 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_MODE, mode);
tag.setInteger(NBT_TYPE, type);
writeItems(filters, 0, tag);
writeItems(itemFilters, 0, tag);
writeItems(upgrades, 1, tag);
writeItems(fluidFilters, 2, tag);
return tag;
}
@@ -135,15 +167,28 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil
return upgrades;
}
public IItemHandler getFilters() {
return filters;
}
@Override
public IItemHandler getDrops() {
return upgrades;
}
@Override
public int getType() {
return worldObj.isRemote ? TYPE.getValue() : type;
}
@Override
public void setType(int type) {
this.type = type;
markDirty();
}
@Override
public IItemHandler getFilterInventory() {
return getType() == IType.ITEMS ? itemFilters : fluidFilters;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {

View File

@@ -0,0 +1,40 @@
package refinedstorage.tile.config;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.container.ContainerBase;
import refinedstorage.tile.data.ITileDataConsumer;
import refinedstorage.tile.data.ITileDataProducer;
import refinedstorage.tile.data.TileDataParameter;
public interface IType {
int ITEMS = 0;
int FLUIDS = 1;
static <T extends TileEntity> TileDataParameter<Integer> createParameter() {
return new TileDataParameter<>(DataSerializers.VARINT, ITEMS, new ITileDataProducer<Integer, T>() {
@Override
public Integer getValue(T tile) {
return ((IType) tile).getType();
}
}, new ITileDataConsumer<Integer, T>() {
@Override
public void setValue(T tile, Integer value) {
if (value == 0 || value == 1) {
((IType) tile).setType(value);
tile.getWorld().playerEntities.stream()
.filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(tile.getPos()))
.forEach(p -> p.openContainer.detectAndSendChanges());
}
}
});
}
int getType();
void setType(int type);
IItemHandler getFilterInventory();
}

View File

@@ -1,83 +0,0 @@
{
"forge_marker": 1,
"defaults": {
"textures": {
"all": "refinedstorage:blocks/cable",
"particle": "refinedstorage:blocks/cable",
"front": "refinedstorage:blocks/fluid_constructor",
"line": "refinedstorage:blocks/cable_part"
},
"model": "refinedstorage:cable_core",
"uvlock": true
},
"variants": {
"inventory": [
{
"model": "refinedstorage:constructor_destructor",
"transform": "forge:default-block"
}
],
"direction": {
"north": {
"submodel": "refinedstorage:constructor_destructor_north"
},
"east": {
"submodel": "refinedstorage:constructor_destructor_east"
},
"south": {
"submodel": "refinedstorage:constructor_destructor_south"
},
"west": {
"submodel": "refinedstorage:constructor_destructor_west"
},
"up": {
"submodel": "refinedstorage:constructor_destructor_up"
},
"down": {
"submodel": "refinedstorage:constructor_destructor_down"
}
},
"north": {
"true": {
"submodel": "refinedstorage:cable_north"
},
"false": {
}
},
"east": {
"true": {
"submodel": "refinedstorage:cable_east"
},
"false": {
}
},
"south": {
"true": {
"submodel": "refinedstorage:cable_south"
},
"false": {
}
},
"west": {
"true": {
"submodel": "refinedstorage:cable_west"
},
"false": {
}
},
"up": {
"true": {
"submodel": "refinedstorage:cable_up"
},
"false": {
}
},
"down": {
"true": {
"submodel": "refinedstorage:cable_down"
},
"false": {
}
}
}
}

View File

@@ -1,83 +0,0 @@
{
"forge_marker": 1,
"defaults": {
"textures": {
"all": "refinedstorage:blocks/cable",
"particle": "refinedstorage:blocks/cable",
"front": "refinedstorage:blocks/fluid_destructor",
"line": "refinedstorage:blocks/cable_part"
},
"model": "refinedstorage:cable_core",
"uvlock": true
},
"variants": {
"inventory": [
{
"model": "refinedstorage:constructor_destructor",
"transform": "forge:default-block"
}
],
"direction": {
"north": {
"submodel": "refinedstorage:constructor_destructor_north"
},
"east": {
"submodel": "refinedstorage:constructor_destructor_east"
},
"south": {
"submodel": "refinedstorage:constructor_destructor_south"
},
"west": {
"submodel": "refinedstorage:constructor_destructor_west"
},
"up": {
"submodel": "refinedstorage:constructor_destructor_up"
},
"down": {
"submodel": "refinedstorage:constructor_destructor_down"
}
},
"north": {
"true": {
"submodel": "refinedstorage:cable_north"
},
"false": {
}
},
"east": {
"true": {
"submodel": "refinedstorage:cable_east"
},
"false": {
}
},
"south": {
"true": {
"submodel": "refinedstorage:cable_south"
},
"false": {
}
},
"west": {
"true": {
"submodel": "refinedstorage:cable_west"
},
"false": {
}
},
"up": {
"true": {
"submodel": "refinedstorage:cable_up"
},
"false": {
}
},
"down": {
"true": {
"submodel": "refinedstorage:cable_down"
},
"false": {
}
}
}
}

View File

@@ -1,82 +0,0 @@
{
"forge_marker": 1,
"defaults": {
"textures": {
"all": "refinedstorage:blocks/cable",
"particle": "refinedstorage:blocks/cable",
"line": "refinedstorage:blocks/cable_part"
},
"model": "refinedstorage:cable_core",
"uvlock": true
},
"variants": {
"inventory": [
{
"model": "refinedstorage:importer",
"transform": "forge:default-block"
}
],
"direction": {
"north": {
"submodel": "refinedstorage:importer_north"
},
"east": {
"submodel": "refinedstorage:importer_east"
},
"south": {
"submodel": "refinedstorage:importer_south"
},
"west": {
"submodel": "refinedstorage:importer_west"
},
"up": {
"submodel": "refinedstorage:importer_up"
},
"down": {
"submodel": "refinedstorage:importer_down"
}
},
"north": {
"true": {
"submodel": "refinedstorage:cable_north"
},
"false": {
}
},
"east": {
"true": {
"submodel": "refinedstorage:cable_east"
},
"false": {
}
},
"south": {
"true": {
"submodel": "refinedstorage:cable_south"
},
"false": {
}
},
"west": {
"true": {
"submodel": "refinedstorage:cable_west"
},
"false": {
}
},
"up": {
"true": {
"submodel": "refinedstorage:cable_up"
},
"false": {
}
},
"down": {
"true": {
"submodel": "refinedstorage:cable_down"
},
"false": {
}
}
}
}

View File

@@ -40,9 +40,6 @@ gui.refinedstorage:network_transmitter.dimension=Dimension %d
gui.refinedstorage:network_transmitter.missing_card=Missing Network Card
gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade
gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive
gui.refinedstorage:fluid_constructor=Fluid Constructor
gui.refinedstorage:fluid_destructor=Fluid Destructor
gui.refinedstorage:fluid_importer=Fluid Importer
misc.refinedstorage:energy_stored=%d / %d RS
misc.refinedstorage:energy_usage=Usage: %d RS/t
@@ -96,6 +93,10 @@ sidebutton.refinedstorage:mode=Mode
sidebutton.refinedstorage:mode.whitelist=Whitelist
sidebutton.refinedstorage:mode.blacklist=Blacklist
sidebutton.refinedstorage:type=Type
sidebutton.refinedstorage:type.0=Items
sidebutton.refinedstorage:type.1=Fluids
sidebutton.refinedstorage:detector.mode=Mode
sidebutton.refinedstorage:detector.mode.0=Emit signal when under the amount
sidebutton.refinedstorage:detector.mode.1=Emit signal when on the amount
@@ -131,9 +132,6 @@ block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder
block.refinedstorage:network_receiver.name=Network Receiver
block.refinedstorage:network_transmitter.name=Network Transmitter
block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive
block.refinedstorage:fluid_constructor.name=Fluid Constructor
block.refinedstorage:fluid_destructor.name=Fluid Destructor
block.refinedstorage:fluid_importer.name=Fluid Importer
item.refinedstorage:storage_disk.0.name=1k Storage Disk
item.refinedstorage:storage_disk.1.name=4k Storage Disk

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 638 B