From 4f54c9bb28da803174f826a76cddde3d11f17f5a Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Sun, 12 Feb 2023 20:12:23 +0800 Subject: [PATCH] add 5 type fluid cell --- .../github/common/item/FCBaseItemCell.java | 121 ++++++++------ .../item/ItemBasicFluidStorageCell.java | 116 ++++++-------- .../item/ItemFluidExtremeStorageCell.java | 4 +- .../common/item/ItemFluidStorageHousing.java | 2 +- .../item/ItemMultiFluidStorageCell.java | 151 ++++++++++++++++++ .../github/common/storage/CellType.java | 15 -- .../github/loader/ItemAndBlockHolder.java | 48 ++++-- .../glodblock/github/loader/RecipeLoader.java | 64 +++++++- .../com/glodblock/github/util/NameConst.java | 1 + .../resources/assets/ae2fc/lang/en_US.lang | 10 ++ .../textures/items/fluid_storage.16384.png | Bin 486 -> 480 bytes .../items/fluid_storage_housing.2.png | Bin 0 -> 348 bytes .../items/fluid_storage_housing.3.png | Bin 0 -> 344 bytes .../textures/items/multi_fluid_storage.1.png | Bin 0 -> 1192 bytes .../items/multi_fluid_storage.1024.png | Bin 0 -> 1199 bytes .../textures/items/multi_fluid_storage.16.png | Bin 0 -> 1194 bytes .../items/multi_fluid_storage.16384.png | Bin 0 -> 448 bytes .../items/multi_fluid_storage.256.png | Bin 0 -> 1191 bytes .../textures/items/multi_fluid_storage.4.png | Bin 0 -> 1190 bytes .../items/multi_fluid_storage.4096.png | Bin 0 -> 361 bytes .../textures/items/multi_fluid_storage.64.png | Bin 0 -> 1212 bytes 21 files changed, 380 insertions(+), 152 deletions(-) create mode 100644 src/main/java/com/glodblock/github/common/item/ItemMultiFluidStorageCell.java create mode 100644 src/main/resources/assets/ae2fc/textures/items/fluid_storage_housing.2.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/fluid_storage_housing.3.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.1.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.1024.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.16.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.16384.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.256.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.4.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.4096.png create mode 100644 src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.64.png diff --git a/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java b/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java index c013e6d0..d0d7b232 100644 --- a/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java +++ b/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java @@ -6,22 +6,28 @@ import java.util.List; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; import appeng.api.AEApi; import appeng.api.config.FuzzyMode; import appeng.api.config.IncludeExclude; +import appeng.api.implementations.items.IUpgradeModule; import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IItemList; import appeng.core.features.AEFeature; import appeng.core.localization.GuiText; import appeng.items.AEBaseItem; import appeng.items.contents.CellConfig; import appeng.items.contents.CellUpgrades; +import appeng.util.InventoryAdaptor; import appeng.util.Platform; import appeng.util.ReadableNumberConverter; @@ -30,74 +36,43 @@ import com.glodblock.github.common.storage.CellType; import com.glodblock.github.common.storage.IFluidCellInventory; import com.glodblock.github.common.storage.IFluidCellInventoryHandler; import com.glodblock.github.common.storage.IStorageFluidCell; +import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.NameConst; import com.google.common.base.Optional; public abstract class FCBaseItemCell extends AEBaseItem implements IStorageFluidCell { - protected final CellType component; - protected final long totalBytes; - protected final int perType; - protected final double idleDrain; + protected CellType component; + protected long totalBytes; + protected int perType; + protected double idleDrain; + protected int maxType = 1; private final ReadableNumberConverter format = ReadableNumberConverter.INSTANCE; @SuppressWarnings("Guava") - public FCBaseItemCell(long bytes, int perType, double drain) { + public FCBaseItemCell(long bytes, int perType, int totalType, double drain) { super(Optional.of(bytes / 1024 + "k")); this.setFeature(EnumSet.of(AEFeature.StorageCells)); this.setMaxStackSize(1); this.totalBytes = bytes; this.perType = perType; this.idleDrain = drain; + this.maxType = totalType; this.component = null; } - @SuppressWarnings("Guava") - public FCBaseItemCell(final CellType whichCell, final long kilobytes) { - super(Optional.of(kilobytes + "k")); - this.setFeature(EnumSet.of(AEFeature.StorageCells)); - this.setMaxStackSize(1); - this.totalBytes = kilobytes * 1024; - this.component = whichCell; + @SuppressWarnings("all") + public FCBaseItemCell(final Optional subName) { + super(subName); + } - switch (this.component) { - case Cell1kPart: - this.idleDrain = 0.5; - this.perType = 8; - break; - case Cell4kPart: - this.idleDrain = 1.0; - this.perType = 8; - break; - case Cell16kPart: - this.idleDrain = 1.5; - this.perType = 8; - break; - case Cell64kPart: - this.idleDrain = 2.0; - this.perType = 8; - break; - case Cell256kPart: - this.idleDrain = 2.5; - this.perType = 8; - break; - case Cell1024kPart: - this.idleDrain = 3.0; - this.perType = 8; - break; - case Cell4096kPart: - this.idleDrain = 3.5; - this.perType = 8; - break; - case Cell16384kPart: - this.idleDrain = 4.0; - this.perType = 8; - break; - default: - this.idleDrain = 0.0; - this.perType = 8; - } + public ItemStack getHousing() { + return ItemAndBlockHolder.CELL_HOUSING.stack(); + } + + public ItemStack getComponent() { + return component.stack(1); } @Override @@ -206,7 +181,7 @@ public abstract class FCBaseItemCell extends AEBaseItem implements IStorageFluid @Override public int getTotalTypes(final ItemStack cellItem) { - return 1; + return this.maxType; } @Override @@ -239,6 +214,52 @@ public abstract class FCBaseItemCell extends AEBaseItem implements IStorageFluid Platform.openNbtData(is).setString("FuzzyMode", fzMode.name()); } + @SuppressWarnings("unchecked") + protected boolean disassembleDrive(final ItemStack stack, final World world, final EntityPlayer player) { + if (player.isSneaking()) { + if (Platform.isClient()) { + return false; + } + final InventoryPlayer playerInventory = player.inventory; + final IMEInventoryHandler inv = AEApi.instance().registries().cell() + .getCellInventory(stack, null, StorageChannel.FLUIDS); + if (inv != null && playerInventory.getCurrentItem() == stack) { + final InventoryAdaptor ia = InventoryAdaptor.getAdaptor(player, ForgeDirection.UNKNOWN); + final IItemList list = inv.getAvailableItems(StorageChannel.FLUIDS.createList()); + if (list.isEmpty() && ia != null) { + playerInventory.setInventorySlotContents(playerInventory.currentItem, null); + + // drop core + final ItemStack extraB = ia.addItems(this.component.stack(1)); + if (extraB != null) { + player.dropPlayerItemWithRandomChoice(extraB, false); + } + + // drop upgrades + final IInventory upgradesInventory = this.getUpgradesInventory(stack); + for (int upgradeIndex = 0; upgradeIndex < upgradesInventory.getSizeInventory(); upgradeIndex++) { + final ItemStack upgradeStack = upgradesInventory.getStackInSlot(upgradeIndex); + final ItemStack leftStack = ia.addItems(upgradeStack); + if (leftStack != null && upgradeStack.getItem() instanceof IUpgradeModule) { + player.dropPlayerItemWithRandomChoice(upgradeStack, false); + } + } + + // drop empty storage cell case + final ItemStack extraA = ia.addItems(this.getHousing()); + if (extraA != null) { + player.dropPlayerItemWithRandomChoice(this.getHousing(), false); + } + if (player.inventoryContainer != null) { + player.inventoryContainer.detectAndSendChanges(); + } + return true; + } + } + } + return false; + } + public ItemStack stack(int size) { return new ItemStack(this, size); } diff --git a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java index 474f5f9f..e3aa3926 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBasicFluidStorageCell.java @@ -1,30 +1,20 @@ package com.glodblock.github.common.item; +import java.util.EnumSet; import java.util.HashMap; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.event.ForgeEventFactory; -import appeng.api.AEApi; import appeng.api.exceptions.MissingDefinition; -import appeng.api.implementations.items.IUpgradeModule; -import appeng.api.storage.IMEInventoryHandler; -import appeng.api.storage.StorageChannel; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IItemList; import appeng.core.AEConfig; import appeng.core.features.AEFeature; -import appeng.util.InventoryAdaptor; -import appeng.util.Platform; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.Config; @@ -32,7 +22,9 @@ import com.glodblock.github.common.storage.CellType; import com.glodblock.github.common.storage.IStorageFluidCell; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.loader.IRegister; +import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.util.NameConst; +import com.google.common.base.Optional; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; @@ -42,18 +34,60 @@ public class ItemBasicFluidStorageCell extends FCBaseItemCell implements IStorageFluidCell, IRegister { private static final HashMap icon = new HashMap<>(); + private final int housingValue; - public ItemBasicFluidStorageCell(final CellType whichCell, final long kilobytes) { - super(whichCell, kilobytes); + @SuppressWarnings("Guava") + public ItemBasicFluidStorageCell(final CellType whichCell, final int housingValue, final long kilobytes) { + super(Optional.of(kilobytes + "k")); + this.setFeature(EnumSet.of(AEFeature.StorageCells)); + this.setMaxStackSize(1); + this.totalBytes = kilobytes * 1024; + this.component = whichCell; + this.housingValue = housingValue; setUnlocalizedName(NameConst.ITEM_FLUID_STORAGE + kilobytes); + + switch (this.component) { + case Cell1kPart: + this.idleDrain = 0.5; + this.perType = 8; + break; + case Cell4kPart: + this.idleDrain = 1.0; + this.perType = 8; + break; + case Cell16kPart: + this.idleDrain = 1.5; + this.perType = 8; + break; + case Cell64kPart: + this.idleDrain = 2.0; + this.perType = 8; + break; + case Cell256kPart: + this.idleDrain = 2.5; + this.perType = 8; + break; + case Cell1024kPart: + this.idleDrain = 3.0; + this.perType = 8; + break; + case Cell4096kPart: + this.idleDrain = 3.5; + this.perType = 8; + break; + case Cell16384kPart: + this.idleDrain = 4.0; + this.perType = 8; + break; + default: + this.idleDrain = 0.0; + this.perType = 8; + } } - public ItemStack getComponent() { - return component.stack(1); - } - + @Override public ItemStack getHousing() { - return component.getHousing(1); + return ItemAndBlockHolder.CELL_HOUSING.stack(1, this.housingValue); } @Override @@ -86,52 +120,6 @@ public class ItemBasicFluidStorageCell extends FCBaseItemCell return stack; } - @SuppressWarnings("unchecked") - private boolean disassembleDrive(final ItemStack stack, final World world, final EntityPlayer player) { - if (player.isSneaking()) { - if (Platform.isClient()) { - return false; - } - final InventoryPlayer playerInventory = player.inventory; - final IMEInventoryHandler inv = AEApi.instance().registries().cell() - .getCellInventory(stack, null, StorageChannel.FLUIDS); - if (inv != null && playerInventory.getCurrentItem() == stack) { - final InventoryAdaptor ia = InventoryAdaptor.getAdaptor(player, ForgeDirection.UNKNOWN); - final IItemList list = inv.getAvailableItems(StorageChannel.FLUIDS.createList()); - if (list.isEmpty() && ia != null) { - playerInventory.setInventorySlotContents(playerInventory.currentItem, null); - - // drop core - final ItemStack extraB = ia.addItems(this.component.stack(1)); - if (extraB != null) { - player.dropPlayerItemWithRandomChoice(extraB, false); - } - - // drop upgrades - final IInventory upgradesInventory = this.getUpgradesInventory(stack); - for (int upgradeIndex = 0; upgradeIndex < upgradesInventory.getSizeInventory(); upgradeIndex++) { - final ItemStack upgradeStack = upgradesInventory.getStackInSlot(upgradeIndex); - final ItemStack leftStack = ia.addItems(upgradeStack); - if (leftStack != null && upgradeStack.getItem() instanceof IUpgradeModule) { - player.dropPlayerItemWithRandomChoice(upgradeStack, false); - } - } - - // drop empty storage cell case - final ItemStack extraA = ia.addItems(this.component.getHousing(1)); - if (extraA != null) { - player.dropPlayerItemWithRandomChoice(this.component.getHousing(1), false); - } - if (player.inventoryContainer != null) { - player.inventoryContainer.detectAndSendChanges(); - } - return true; - } - } - } - return false; - } - @Override public boolean onItemUseFirst(final ItemStack stack, final EntityPlayer player, final World world, final int x, final int y, final int z, final int side, final float hitX, final float hitY, final float hitZ) { diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidExtremeStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemFluidExtremeStorageCell.java index bb775378..03679cf5 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidExtremeStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidExtremeStorageCell.java @@ -16,8 +16,8 @@ public class ItemFluidExtremeStorageCell extends FCBaseItemCell private final String name; - public ItemFluidExtremeStorageCell(String name, long bytes, int perType, double drain) { - super(bytes, perType, drain); + public ItemFluidExtremeStorageCell(String name, long bytes, int perType, int totalTypes, double drain) { + super(bytes, perType, totalTypes, drain); setUnlocalizedName(name); this.name = name; setTextureName(FluidCraft.resource(name).toString()); diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidStorageHousing.java b/src/main/java/com/glodblock/github/common/item/ItemFluidStorageHousing.java index aed9a268..1b555336 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidStorageHousing.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidStorageHousing.java @@ -21,7 +21,7 @@ import cpw.mods.fml.relauncher.SideOnly; public class ItemFluidStorageHousing extends FCBaseItem { - public static final int types = 2; + public static final int types = 4; private static final HashMap icon = new HashMap<>(); public ItemFluidStorageHousing() { diff --git a/src/main/java/com/glodblock/github/common/item/ItemMultiFluidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemMultiFluidStorageCell.java new file mode 100644 index 00000000..45911a1e --- /dev/null +++ b/src/main/java/com/glodblock/github/common/item/ItemMultiFluidStorageCell.java @@ -0,0 +1,151 @@ +package com.glodblock.github.common.item; + +import java.util.EnumSet; +import java.util.HashMap; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.event.ForgeEventFactory; + +import appeng.api.exceptions.MissingDefinition; +import appeng.core.AEConfig; +import appeng.core.features.AEFeature; + +import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.Config; +import com.glodblock.github.common.storage.CellType; +import com.glodblock.github.common.storage.IStorageFluidCell; +import com.glodblock.github.common.tabs.FluidCraftingTabs; +import com.glodblock.github.loader.IRegister; +import com.glodblock.github.loader.ItemAndBlockHolder; +import com.glodblock.github.util.NameConst; +import com.google.common.base.Optional; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemMultiFluidStorageCell extends FCBaseItemCell + implements IStorageFluidCell, IRegister { + + private static final HashMap icon = new HashMap<>(); + private final int housingValue; + + @SuppressWarnings("Guava") + public ItemMultiFluidStorageCell(final CellType whichCell, final int housingValue, final long kilobytes) { + super(Optional.of(kilobytes + "k")); + this.setFeature(EnumSet.of(AEFeature.StorageCells)); + this.setMaxStackSize(1); + this.totalBytes = kilobytes * 1024; + this.component = whichCell; + this.housingValue = housingValue; + this.maxType = 5; + setUnlocalizedName(NameConst.ITEM_MULTI_FLUID_STORAGE + kilobytes); + + switch (this.component) { + case Cell1kPart: + this.idleDrain = 0.5; + this.perType = 8; + break; + case Cell4kPart: + this.idleDrain = 1.0; + this.perType = 32; + break; + case Cell16kPart: + this.idleDrain = 1.5; + this.perType = 128; + break; + case Cell64kPart: + this.idleDrain = 2.0; + this.perType = 512; + break; + case Cell256kPart: + this.idleDrain = 2.5; + this.perType = 2048; + break; + case Cell1024kPart: + this.idleDrain = 3.0; + this.perType = 8192; + break; + case Cell4096kPart: + this.idleDrain = 3.5; + this.perType = 32768; + break; + case Cell16384kPart: + this.idleDrain = 4.0; + this.perType = 131072; + break; + default: + this.idleDrain = 0.0; + this.perType = 8; + } + } + + @Override + public ItemStack getHousing() { + return ItemAndBlockHolder.CELL_HOUSING.stack(1, this.housingValue); + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + return StatCollector.translateToLocalFormatted( + "item.multi_fluid_storage." + this.totalBytes / 1024 + ".name", + CellType.getTypeColor(this.component), + EnumChatFormatting.RESET); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + icon.put( + (int) (this.totalBytes / 1024), + iconRegister.registerIcon( + NameConst.RES_KEY + NameConst.ITEM_MULTI_FLUID_STORAGE + "." + this.totalBytes / 1024)); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + int id = (int) (this.totalBytes / 1024); + return icon.get(id); + } + + @Override + public ItemStack onItemRightClick(final ItemStack stack, final World world, final EntityPlayer player) { + this.disassembleDrive(stack, world, player); + return stack; + } + + @Override + public boolean onItemUseFirst(final ItemStack stack, final EntityPlayer player, final World world, final int x, + final int y, final int z, final int side, final float hitX, final float hitY, final float hitZ) { + if (ForgeEventFactory.onItemUseStart(player, stack, 1) <= 0) return true; + return this.disassembleDrive(stack, world, player); + } + + @Override + public boolean hasContainerItem(final ItemStack stack) { + return AEConfig.instance.isFeatureEnabled(AEFeature.EnableDisassemblyCrafting); + } + + @Override + public ItemStack getContainerItem(final ItemStack itemStack) { + if (this.getHousing() != null) { + return this.getHousing(); + } + throw new MissingDefinition("Tried to use empty storage cells while basic storage cells are defined."); + } + + @Override + public ItemMultiFluidStorageCell register() { + if (!Config.fluidCells) return null; + GameRegistry.registerItem(this, NameConst.ITEM_MULTI_FLUID_STORAGE + this.totalBytes / 1024, FluidCraft.MODID); + setCreativeTab(FluidCraftingTabs.INSTANCE); + return this; + } +} diff --git a/src/main/java/com/glodblock/github/common/storage/CellType.java b/src/main/java/com/glodblock/github/common/storage/CellType.java index 3b1412f2..6b997088 100644 --- a/src/main/java/com/glodblock/github/common/storage/CellType.java +++ b/src/main/java/com/glodblock/github/common/storage/CellType.java @@ -8,8 +8,6 @@ import net.minecraft.util.EnumChatFormatting; import appeng.core.features.AEFeature; -import com.glodblock.github.loader.ItemAndBlockHolder; - public enum CellType { Cell1kPart(0, AEFeature.StorageCells), @@ -24,7 +22,6 @@ public enum CellType { private final EnumSet features; private int damageValue; private Item itemInstance; - private int housingValue; CellType(final int metaValue, final AEFeature part) { this.setDamageValue(metaValue); @@ -39,14 +36,6 @@ public enum CellType { this.damageValue = damageValue; } - public int getHousingValue() { - return this.housingValue; - } - - public void setHousingValue(final int housingValue) { - this.housingValue = housingValue; - } - EnumSet getFeature() { return this.features; } @@ -55,10 +44,6 @@ public enum CellType { return new ItemStack(this.getItemInstance(), size, this.getDamageValue()); } - public ItemStack getHousing(final int size) { - return new ItemStack(ItemAndBlockHolder.CELL_HOUSING, size, this.getHousingValue()); - } - public Item getItemInstance() { return this.itemInstance; } diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index 17d52188..1067fb30 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -41,29 +41,53 @@ public class ItemAndBlockHolder { public static ItemWirelessInterfaceTerminal WIRELESS_INTERFACE_TERM = new ItemWirelessInterfaceTerminal() .register(); public static ItemFluidPacket PACKET = new ItemFluidPacket().register(); - public static ItemBasicFluidStorageCell CELL1K = new ItemBasicFluidStorageCell(CellType.Cell1kPart, 1).register(); - public static ItemBasicFluidStorageCell CELL4K = new ItemBasicFluidStorageCell(CellType.Cell4kPart, 4).register(); - public static ItemBasicFluidStorageCell CELL16K = new ItemBasicFluidStorageCell(CellType.Cell16kPart, 16) + public static ItemBasicFluidStorageCell CELL1K = new ItemBasicFluidStorageCell(CellType.Cell1kPart, 0, 1) .register(); - public static ItemBasicFluidStorageCell CELL64K = new ItemBasicFluidStorageCell(CellType.Cell64kPart, 64) + public static ItemBasicFluidStorageCell CELL4K = new ItemBasicFluidStorageCell(CellType.Cell4kPart, 0, 4) .register(); - public static ItemBasicFluidStorageCell CELL256K = new ItemBasicFluidStorageCell(CellType.Cell256kPart, 256) + public static ItemBasicFluidStorageCell CELL16K = new ItemBasicFluidStorageCell(CellType.Cell16kPart, 0, 16) .register(); - public static ItemBasicFluidStorageCell CELL1024K = new ItemBasicFluidStorageCell(CellType.Cell1024kPart, 1024) + public static ItemBasicFluidStorageCell CELL64K = new ItemBasicFluidStorageCell(CellType.Cell64kPart, 0, 64) .register(); - public static ItemBasicFluidStorageCell CELL4096K = new ItemBasicFluidStorageCell(CellType.Cell4096kPart, 4096) + public static ItemBasicFluidStorageCell CELL256K = new ItemBasicFluidStorageCell(CellType.Cell256kPart, 1, 256) .register(); - public static ItemBasicFluidStorageCell CELL16384K = new ItemBasicFluidStorageCell(CellType.Cell16384kPart, 16384) + public static ItemBasicFluidStorageCell CELL1024K = new ItemBasicFluidStorageCell(CellType.Cell1024kPart, 1, 1024) .register(); + public static ItemBasicFluidStorageCell CELL4096K = new ItemBasicFluidStorageCell(CellType.Cell4096kPart, 1, 4096) + .register(); + public static ItemBasicFluidStorageCell CELL16384K = new ItemBasicFluidStorageCell( + CellType.Cell16384kPart, + 1, + 16384).register(); + public static ItemMultiFluidStorageCell CELL1KM = new ItemMultiFluidStorageCell(CellType.Cell1kPart, 2, 1) + .register(); + public static ItemMultiFluidStorageCell CELL4KM = new ItemMultiFluidStorageCell(CellType.Cell4kPart, 2, 4) + .register(); + public static ItemMultiFluidStorageCell CELL16KM = new ItemMultiFluidStorageCell(CellType.Cell16kPart, 2, 16) + .register(); + public static ItemMultiFluidStorageCell CELL64KM = new ItemMultiFluidStorageCell(CellType.Cell64kPart, 2, 64) + .register(); + public static ItemMultiFluidStorageCell CELL256KM = new ItemMultiFluidStorageCell(CellType.Cell256kPart, 3, 256) + .register(); + public static ItemMultiFluidStorageCell CELL1024KM = new ItemMultiFluidStorageCell(CellType.Cell1024kPart, 3, 1024) + .register(); + public static ItemMultiFluidStorageCell CELL4096KM = new ItemMultiFluidStorageCell(CellType.Cell4096kPart, 3, 4096) + .register(); + public static ItemMultiFluidStorageCell CELL16384KM = new ItemMultiFluidStorageCell( + CellType.Cell16384kPart, + 3, + 16384).register(); public static ItemFluidExtremeStorageCell QUANTUM_CELL = new ItemFluidExtremeStorageCell( NameConst.ITEM_QUANTUM_FLUID_STORAGE, Integer.MAX_VALUE / 16, 8, + 5, 4.5).register(); public static ItemFluidExtremeStorageCell SINGULARITY_CELL = new ItemFluidExtremeStorageCell( NameConst.ITEM_SINGULARITY_FLUID_STORAGE, Long.MAX_VALUE / (singleByteAmount * 2), 8, + 1, 5).register(); public static ItemCreativeFluidStorageCell CREATIVE_CELL = new ItemCreativeFluidStorageCell().register(); public static ItemBasicFluidStoragePart CELL_PART = new ItemBasicFluidStoragePart().register(); @@ -79,13 +103,5 @@ public class ItemAndBlockHolder { CellType.Cell1024kPart.setItemInstance(CELL_PART); CellType.Cell4096kPart.setItemInstance(CELL_PART); CellType.Cell16384kPart.setItemInstance(CELL_PART); - CellType.Cell1kPart.setHousingValue(0); - CellType.Cell4kPart.setHousingValue(0); - CellType.Cell16kPart.setHousingValue(0); - CellType.Cell64kPart.setHousingValue(0); - CellType.Cell256kPart.setHousingValue(1); - CellType.Cell1024kPart.setHousingValue(1); - CellType.Cell4096kPart.setHousingValue(1); - CellType.Cell16384kPart.setHousingValue(1); } } diff --git a/src/main/java/com/glodblock/github/loader/RecipeLoader.java b/src/main/java/com/glodblock/github/loader/RecipeLoader.java index 1ae8de36..ca0e9df5 100644 --- a/src/main/java/com/glodblock/github/loader/RecipeLoader.java +++ b/src/main/java/com/glodblock/github/loader/RecipeLoader.java @@ -2,6 +2,7 @@ package com.glodblock.github.loader; import static com.glodblock.github.common.storage.CellType.Cell16384kPart; import static com.glodblock.github.loader.ItemAndBlockHolder.*; +import static com.glodblock.github.loader.ItemAndBlockHolder.CELL4KM; import static net.minecraft.init.Blocks.redstone_torch; import static net.minecraft.init.Items.fish; @@ -16,7 +17,7 @@ import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe; import com.glodblock.github.common.Config; -import com.glodblock.github.common.item.ItemBasicFluidStorageCell; +import com.glodblock.github.common.item.FCBaseItemCell; import com.glodblock.github.common.storage.CellType; import com.glodblock.github.loader.recipe.WirelessTerminalRecipe; import com.glodblock.github.util.ModAndClassUtil; @@ -393,8 +394,9 @@ public class RecipeLoader implements Runnable { 'G', AE2_LAMP_GLASS)); - ItemBasicFluidStorageCell[] cells = new ItemBasicFluidStorageCell[] { CELL1K, CELL4K, CELL16K, CELL64K, - CELL256K, CELL1024K, CELL4096K, CELL16384K }; + FCBaseItemCell[] cells = new FCBaseItemCell[] { CELL1K, CELL4K, CELL16K, CELL64K, CELL256K, CELL1024K, + CELL4096K, CELL16384K, CELL1KM, CELL4KM, CELL16KM, CELL64KM, CELL256KM, CELL1024KM, CELL4096KM, + CELL16384KM }; GameRegistry.addRecipe( new ShapedOreRecipe( QUANTUM_CELL.stack(), @@ -417,7 +419,7 @@ public class RecipeLoader implements Runnable { QUANTUM_CELL, 'M', AE2_MATTER_CONDENSER)); - for (ItemBasicFluidStorageCell cell : cells) { + for (FCBaseItemCell cell : cells) { if (cell.getHousing().getItemDamage() == 0) { GameRegistry.addRecipe( new ShapedOreRecipe( @@ -443,10 +445,40 @@ public class RecipeLoader implements Runnable { 'D', "dustRedstone", 'G', + AE2_LAMP_GLASS, + 'C', + cell.getComponent(), + 'I', + "gemDiamond")); + } else if (cell.getHousing().getItemDamage() == 2) { + GameRegistry.addRecipe( + new ShapedOreRecipe( + cell, + "GDG", + "DCD", + "III", + 'D', + "dyeBlue", + 'G', AE2_QUARTZ_GLASS, 'C', cell.getComponent(), 'I', + "ingotIron")); + } else if (cell.getHousing().getItemDamage() == 3) { + GameRegistry.addRecipe( + new ShapedOreRecipe( + cell, + "GDG", + "DCD", + "III", + 'D', + "dustGlowstone", + 'G', + AE2_LAMP_GLASS, + 'C', + cell.getComponent(), + 'I', "gemDiamond")); } GameRegistry.addRecipe(new ShapelessOreRecipe(cell, cell.getHousing(), cell.getComponent())); @@ -472,8 +504,32 @@ public class RecipeLoader implements Runnable { 'D', "dustRedstone", 'G', + AE2_LAMP_GLASS, + 'I', + "gemDiamond")); + GameRegistry.addRecipe( + new ShapedOreRecipe( + CELL_HOUSING.stack(1, 2), + "GDG", + "D D", + "III", + 'D', + "dyeBlue", + 'G', AE2_QUARTZ_GLASS, 'I', + "ingotIron")); + GameRegistry.addRecipe( + new ShapedOreRecipe( + CELL_HOUSING.stack(1, 3), + "GDG", + "D D", + "III", + 'D', + "dustGlowstone", + 'G', + AE2_LAMP_GLASS, + 'I', "gemDiamond")); } diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index f73a536a..72c17295 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -35,6 +35,7 @@ public class NameConst { public static final String ITEM_PART_FLUID_LEVEL_EMITTER = "part_fluid_level_emitter"; public static final String ITEM_FLUID_PACKET = "fluid_packet"; public static final String ITEM_FLUID_STORAGE = "fluid_storage"; + public static final String ITEM_MULTI_FLUID_STORAGE = "multi_fluid_storage"; public static final String ITEM_QUANTUM_FLUID_STORAGE = ITEM_FLUID_STORAGE + ".quantum"; public static final String ITEM_SINGULARITY_FLUID_STORAGE = ITEM_FLUID_STORAGE + ".singularity"; public static final String ITEM_CREATIVE_FLUID_STORAGE = "creative_" + ITEM_FLUID_STORAGE; diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index f3068aff..3f88032f 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -30,6 +30,14 @@ item.fluid_storage.256.name=%s256k%s ME Fluid Storage Cell item.fluid_storage.1024.name=%s1024k%s ME Fluid Storage Cell item.fluid_storage.4096.name=%s4096k%s ME Fluid Storage Cell item.fluid_storage.16384.name=%s16384k%s ME Fluid Storage Cell +item.multi_fluid_storage.1.name=%s1k%s ME Multi-Fluid Storage Cell +item.multi_fluid_storage.4.name=%s4k%s ME Multi-Fluid Storage Cell +item.multi_fluid_storage.16.name=%s16k%s ME Multi-Fluid Storage Cell +item.multi_fluid_storage.64.name=%s64k%s ME Multi-Fluid Storage Cell +item.multi_fluid_storage.256.name=%s256k%s ME Multi-Fluid Storage Cell +item.multi_fluid_storage.1024.name=%s1024k%s ME Multi-Fluid Storage Cell +item.multi_fluid_storage.4096.name=%s4096k%s ME Multi-Fluid Storage Cell +item.multi_fluid_storage.16384.name=%s16384k%s ME Multi-Fluid Storage Cell item.fluid_storage.quantum.name=ME Fluid Quantum Storage Cell item.fluid_storage.singularity.name=ME Fluid Digital Singularity Storage Cell item.fluid_part.0.name=%s1k%s ME Fluid Storage Component @@ -42,6 +50,8 @@ item.fluid_part.6.name=%s4096k%s ME Fluid Storage Component item.fluid_part.7.name=%s16384k%s ME Fluid Storage Component item.fluid_storage_housing.0.name=ME Fluid Storage Housing item.fluid_storage_housing.1.name=ME Advanced Fluid Storage Housing +item.fluid_storage_housing.2.name=ME Multi-Fluid Storage Housing +item.fluid_storage_housing.3.name=ME Advanced Multi-Fluid Storage Housing tile.fluid_discretizer.name=Fluid Discretizer tile.fluid_pattern_encoder.name=Fluid Pattern Encoder diff --git a/src/main/resources/assets/ae2fc/textures/items/fluid_storage.16384.png b/src/main/resources/assets/ae2fc/textures/items/fluid_storage.16384.png index 0b987302ede43dc3f97d5a466209f7c61630d259..ea485742df4a0ad38c8dffd2da52571f864fb562 100644 GIT binary patch delta 454 zcmV;%0XhEW1Kv+P^~MG+uJ&TmS&(( z0L7H6hOKCzk$tBp$m|{>vv&mFS)^_gDS`A(4h#yR$E_1mbA+m~Yu`Gc)v*tnp`2DRpCGvTosP2R~GS6eD--VR$madeLRip&MY7OKP z11lbcgCS&rw8huO?E!VtDn|3ggpU2cBmBrmT*#FPJDjys(ux`M|~|Ru>g)n{13J<>)Rk6Fujfx7e((&pTz_?mwJ^(GvJI761SM delta 460 zcmV;-0W<#K1LgyeB!8_*L_t(IjeS!~O9D|8{;aWd5iOb)E!`y44~U4us2m7#QR>Dv z{el+JwuM{&K^v*;fd~cB!X6++n+ST*12?XcK%>OO#K(zyrWqX_y>OVzIp6oq`Odu; zotArKm_&5KShP(h95ECEp&-R?9{{@z%BT~&>l>EF`ryhke}B8oR0X-eZvg1+0jgDq zy~vqiTLd(6^!yCj?R{i-4iLRebQIAo2*19uaiaVWWx^5u>ib%aYXZ}3mzOBe*SCQj zv)*v%xt{`2E^intTM)|ZxmpEErM6w7QUPk}Oaw>IbKB_;(k;BFTP@`Bx&?vN1nNU9 zSHw{vm;Z!+aeoQ&>@>2mBMy09f#2=sn!up=Ydi%}K%oHH;XpigtcrNOkX@6IC&uCT zcsLh7JYfuMJt{{NIDJW46z>AEsT4q@cOtq%m!|-1D0{gT%G@MH1Il33$~`y1VOzav4+3Ehs(@V@0@bCZLG~LP0>1>Pbn0eI|k8 zh0EA><6~;JqrZp$A#3ETp-nT2`Py4uBN1%@0R8|!A|q}#fASvy0000z=0^RF8x0Pj|es|Vg>9xA`I*xJq!$t za2J4V*|l~)oQ>`U5Dfw#H83`c7mgo32X-F1A?TVxYCvjH4EXuw4TGhv5mrO6X$GkU z>46&nN+ci!*bKp@8N`PrEO<%`ur+4fuy+1`m_iVZ9P-GTU%nS$6 zE~Xc-S@ZUiM3P<+Dz8KfD+ uMm7MH8}Vjm=SQ=^5_{#+uxIBeMg{=Ty~WdSZ+tKS0000N`JAHi5qR_*_xN58-r#Dk}mN3v06tWATVkqiB0B3FlC0kH@gTT)(Z$L>IthV?JA6yM6 qH{#9C&W~n+CHBgtVb9J{j0^yBzhk%;Ww-_a0000Chu literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.1.png b/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.1.png new file mode 100644 index 0000000000000000000000000000000000000000..99a0009ddfc42c9a8af4d4b69c2c818b00b8f4a8 GIT binary patch literal 1192 zcmaJ>ZD<>19KWtx2{UmW9j;Dv&o1aJCb^e1sdqH(vP-gtd8MYoxV5})gu&JV_eyXS@9 z@ArTEai>OxkN9@(+euNBFFlmVkhRl&Jssq`zur*D@*qy;@F*(cvSLFjuAu@1X+s%@ z8K`K}$3KVt6xDt}&*pGWeo9o45mH=CsA5=zO;P=W6-!YkAO;0EuA4FXx9TS}(6tzS zEF!bACBc$DG-Jcjnc=KDGocC^JvadRD`MvpWKs}PO>P3IQwB6~ldIk1hFfx7Cm0rqoPf6e z9Mn=aGQdW~qTV_ewx!-CS8JUM*OJSSWEgj@|C)32ikQdUZn>5mwtNpwVs@Ljx~p6A zQB>Q*=|ntR`MR*)XbirvW_O&Qb)LTSeCOXWGw6^0^~K9xZ@}xl5UK7sIJa7zog6#K z?!MvO2BKd^w)+mChGdb#tl6R)3H**nV(NVN{n`J;{HCI96^ z0qX4?KgW-^T|4{i#O*7q;GyM?VM={%zQ%3KwyWp5t@S&?LjAfgzT(ZaXXXpFWd?Nz zj57=S=H&2DaA?;pYJ_gt$d<=_7y zruglvk6!z(Uaj|xh2MYV!hL6-cqZQcqW5(54gLFXm)^=BSXex@_tMf&(tIX0_R;QF za(TUdPyQ>u>ziAi8~Hy<4?Owaudg0eufBOds8PGtKK*6o`Z@QXM5U9%iFXg@=l%f_ CqLWPk literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.1024.png b/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.1024.png new file mode 100644 index 0000000000000000000000000000000000000000..d649d46a6ae566f21a2d0e133337c18720aa5364 GIT binary patch literal 1199 zcmaJ>Z)h839KLjGC~LL_1nE|oZ!bkFCb`@tX?AC`F1yQI*sgSGv|*j4m%BI3+1WxSrfV~IU(H&)D;A1$);-9D$;?g zC>7ASog{Il_e;=>by?k7YZGo5E5fXd=clb*_NqaSiHrovS?H#u{>6Cujza zEI?Cz0V;be6#9-Bs{mmly1xZ?A~a+2e8l`E3<(OW@%{LqoJLb+76DB73*fdm=wIO$^CjoccsK z_SXsH*o^he(xuex%QK^GyG`o5*7;7=8P1=}H%nbiq;hjt*N^eR_dKoBzJ<)Uo@=?6 zN(aAu?TJL??NCr#UcTcUd*k!D_SE);9o44C-dQx&*$ZELHntI8ot}CYq;LP}{z5Y8 KKH=P+k;*^TjgmD0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.16.png b/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.16.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0c367da721c9a7966737e1c836e5aedeac72fa GIT binary patch literal 1194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=!ZaB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc$WX!DQqR!T z#M01EN5ROz&{*HlK;Otx*U-?)#N5izOaTg%fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7KMf<|~|UP^v> zu_jo#udkJ7UU5lcUUI6Zi>(sS0KLr26e}}VR|5+pM@v^j14lzcS7Rr0BQr}Ab2nE* za~C&DXE&H$m;B_?+|;}hnBEkGUPqjIK`9}(0BEyIYEfocYKmJ?ey#%8$5xrR-C~Z@ zJgD9j+-|YJsaGH97=2K@BE>UI2$*<4On9mVa^UGcH4m8Bi-4)RUiyeO0|TSHr;B4q z#jT`2|Nq-Jzbj%}(@-4vpR<0^)aAxf^r+Y&grz8~^|S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.16384.png b/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.16384.png new file mode 100644 index 0000000000000000000000000000000000000000..85026a11f086b10ef34858f52a1c314c086e5c59 GIT binary patch literal 448 zcmV;x0YCnUP)6tGm5}PyK|DQT~gn^fpfkD&EhQW9GPDW(;ZWA6b&4kTVkY+|< zSq3f^28Q4N7#KiokQg?#7zV&JAKAE^q4L~UhU)WQ8P0B5j@J;l7eM~i^oaQX_UHfq zrDwkUKl}ba7{k~gIglE3?}7nH;`#UgD4N%>o&sZJLqHfgV8LDhnGAB`pZ^RD-~Qrs zBpiU$g7m-zK%Cp3Atr;^H$UO`0!S^)0C*s_b}V4nyzdCZ|F@4B0>UC0lGL~vR^0sx z#u3Wg3^9?BU^$Q)kXj7?A9?fte?s+qFb#9bg%AJ#pMHn1`Q$r@8juSy5*W;BAO$e* zfHcDb4P7pwdOr4Ogelzf3Su(|AAbuGJMZD<>19KWu$30;C^L)T5g>s4f9&Al~mclK7ZT)JfRN=<_ePD?L$Pnx5>dv146 zmox~*ZioZL_cF#%H|hs*lyr(HG8CDzIR!!SjeXJKz%SD>QN+#oT-S7dFdp1JFZ_PL z|J#o{IySm5*tMgJAc$ZlEobrC?Y;g^{JrN|L&eK>l**%VSVU#j0YpNF1wdv@bsA)W zs?Q(100s%7z1PU)QC=AlHE7bRhoLK`joAb-I8?D!Z3ZB+0HzH~qJDY*1Bx_siJFKg ztYRlY$w*fnFkT(aY1J7`(5az4hofvF9B*=EsLh$cLQSrIiyLpr^_*bZII;{J;}Fn? z9cYqk6^lmeTp}&?*13A?T%s+x3{Hme=K8NWH?OdHyzPc-@nOUFz`|yCu&Y1nx^kT$ z+V0NCiCpFT!u3XD=8Ug%k59`q?>|;#rg{2?n)%OZ_965RZL;wE2UVG`AFP*mj4!#~aczb+&^<-*S-|{8@ z{&(tcuU@-&*J)u3v^tD>HN5#m{`XH`=YGukx~GVHrRp($_0g@~uOpKhm6!KUE&KzR C`->j{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.4.png b/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.4.png new file mode 100644 index 0000000000000000000000000000000000000000..d37d66cbc96dc621e9d6c1dbc195f29e650a037e GIT binary patch literal 1190 zcmaJ>ZD<>19KSZ%tXqPeg47nbXID_Cx!gTTlk|?JU7Aa6#4BAISV6&F?w%w^bNAft zt|l!N)9yvbHdqmK__8^NpPaH!T9~?2+?dWXkx`xaWiarIT4jC_Eb+On>HJ_kxO-ms z{eJ(qA9r+g9%jXPsF@04W=Q3)025J>BC z0cDV^P9OLR^-+{(x0W4u#-(Qk1?xfC#RMz5N!S$CH&8KUWfD0chYFezr&ljtqJgHy z>HQIjlguP4YQr-Y8k-r(Dl?M`uhIkkpsykj0UbFqsOTlb7AkRiT~{D`_nM`_I>ecb z(|3~^mqtMnTL?sg5k}!c5XAT(jP&pj20(~|VHR?1h-V-adSU{Mf{lkJ(JVDDWW=G3 zSmYF^i;iOoEL$#@gXM4#TLl*KJkN3=HWXqAg0ZI!N3Jl2-Q7?Sk*!#o>1fyhuA-d7 zQ%;;FncgiyH#cPsd!tRHVQfVE_6C{)1iT#?P;#W%PjR;F}hI1R3PkDF-9b)BG_B(jJs z?M0*xSy%__6$@JPTw+c2Hn?i@TzZ>wS&|Iv&h=k&Zd?)bxZ6$FlEbF&kwMIE5m$e( zCZ46Jmaepz$X0&L{avpQ9Q@7NdcJD!`~BtiwYb4_NB_FE;PVB1zQxFWU*-?q?5dWY zKf>+!&esZ}-$cCry(^!-wDt^lrO@_J|MKa%TNB5xw?8)frhV@1rH(VZCp_Mj_v?k9 zcgW!3>W%q7-(95CYez1R-71|t@!A`|Zc$DhtHIW+M>*GFnydF;xbv+)@x3qO$sEho zuCut~mv@*8o%2$7m>GWHCu)>#*;C86MVCQ;KwcWlRX>DRPu97^pp(D75V$7 zJi6CEchSqwe*Q`Sp~;~YPkG6@{A62lVeWvZM=HHgZx47s=Kl!%aC5e}@9S5eip@W` zJ)l=xeb42;c&jVXd4A_|>*KF~W@*P4Z?t$jsI#kA0@m%?d+whjof;888l0H_2V5hK Ah5!Hn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.4096.png b/src/main/resources/assets/ae2fc/textures/items/multi_fluid_storage.4096.png new file mode 100644 index 0000000000000000000000000000000000000000..ec78661e5876512dd31d34e6e114beea0203cc67 GIT binary patch literal 361 zcmV-v0ha!WP)5e9aU9tH+T?AU~)!A(YY1vcA3G)NCh7|fiq0PM%S#9%NV=66_F zfB;Aiqz0rG1;9*AsGg7E5_Fr9)nE-oY=&TyLrJ|LPHSr`h9Mw-!omkxvz&Pn14=Bw zK!B|=V_qU8Eg<_7#J-zzoFOl9GsDaG0x0c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc$WX!DQqR!T z#M01EN5ROz&{*HlK;Otx*U-?)#N5izOaTg%fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7KMf<|~|UP^v> zu_jo#udkJ7UU5lcUUI6Zi>(sS0KLr26f1KRBVfoFo4XnsI2szd8aq0fIl4KS8n_u- znwc6}I>Ge1U>IMGV=IJV%{X9L9hewBpXNT$YkZsL3gKstee{9s!IU!Ae zVPoPt#SDf`&u&hxJ}5C?(dUQB@@HbrhH=ggjVm_4v2R}Ke&K&Bdw$bKUk|An+nBwY z3^qw{G+$}@((t7zR$+tQUwi9*4(5#vOT?D2zhj#5@by zKhvooW%