aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java1
-rw-r--r--src/main/java/gregtech/api/enums/Textures.java16
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FluidStorageMonitor.java465
-rw-r--r--src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java3
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR0.pngbin0 -> 506 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR1.pngbin0 -> 583 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR10.pngbin0 -> 533 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR11.pngbin0 -> 527 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR12.pngbin0 -> 521 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR13.pngbin0 -> 505 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR14.pngbin0 -> 500 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR2.pngbin0 -> 580 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR3.pngbin0 -> 585 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR4.pngbin0 -> 579 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR5.pngbin0 -> 570 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR6.pngbin0 -> 563 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR7.pngbin0 -> 556 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR8.pngbin0 -> 559 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR9.pngbin0 -> 540 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/577.pngbin0 -> 304 bytes
20 files changed, 485 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java
index deee1b1d32..30d44b6278 100644
--- a/src/main/java/gregtech/api/enums/ItemList.java
+++ b/src/main/java/gregtech/api/enums/ItemList.java
@@ -559,6 +559,7 @@ public enum ItemList implements IItemContainer {
Cover_FluidDetector,
Cover_ItemDetector,
Cover_EnergyDetector,
+ Cover_FluidStorageMonitor,
Cover_Drain,
Cover_Shutter,
Cover_Crafting,
diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java
index d86e7dfd9f..960a6b6a07 100644
--- a/src/main/java/gregtech/api/enums/Textures.java
+++ b/src/main/java/gregtech/api/enums/Textures.java
@@ -490,6 +490,22 @@ public class Textures {
OVERLAY_FLUIDDETECTOR,
OVERLAY_ITEMDETECTOR,
+ OVERLAY_FLUID_STORAGE_MONITOR0,
+ OVERLAY_FLUID_STORAGE_MONITOR1,
+ OVERLAY_FLUID_STORAGE_MONITOR2,
+ OVERLAY_FLUID_STORAGE_MONITOR3,
+ OVERLAY_FLUID_STORAGE_MONITOR4,
+ OVERLAY_FLUID_STORAGE_MONITOR5,
+ OVERLAY_FLUID_STORAGE_MONITOR6,
+ OVERLAY_FLUID_STORAGE_MONITOR7,
+ OVERLAY_FLUID_STORAGE_MONITOR8,
+ OVERLAY_FLUID_STORAGE_MONITOR9,
+ OVERLAY_FLUID_STORAGE_MONITOR10,
+ OVERLAY_FLUID_STORAGE_MONITOR11,
+ OVERLAY_FLUID_STORAGE_MONITOR12,
+ OVERLAY_FLUID_STORAGE_MONITOR13,
+ OVERLAY_FLUID_STORAGE_MONITOR14,
+
OVERLAY_FUSION1,
OVERLAY_FUSION1_GLOW,
OVERLAY_FUSION2,
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidStorageMonitor.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidStorageMonitor.java
new file mode 100644
index 0000000000..b9486398a3
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/GT_Cover_FluidStorageMonitor.java
@@ -0,0 +1,465 @@
+package gregtech.common.covers;
+
+import com.google.common.io.ByteArrayDataInput;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GT_CoverBehaviorBase;
+import gregtech.api.util.GT_Utility;
+import gregtech.api.util.ISerializableObject;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTBase;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.common.util.ForgeDirection;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.FluidTankInfo;
+import net.minecraftforge.fluids.IFluidContainerItem;
+import net.minecraftforge.fluids.IFluidHandler;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.Optional;
+
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR0;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR1;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR10;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR11;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR12;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR13;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR14;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR2;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR3;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR4;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR5;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR6;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR7;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR8;
+import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR9;
+
+public class GT_Cover_FluidStorageMonitor extends GT_CoverBehaviorBase<GT_Cover_FluidStorageMonitor.FluidStorageData> {
+ private static final IIconContainer[] icons = new IIconContainer[]{
+ OVERLAY_FLUID_STORAGE_MONITOR0,
+ OVERLAY_FLUID_STORAGE_MONITOR1,
+ OVERLAY_FLUID_STORAGE_MONITOR2,
+ OVERLAY_FLUID_STORAGE_MONITOR3,
+ OVERLAY_FLUID_STORAGE_MONITOR4,
+ OVERLAY_FLUID_STORAGE_MONITOR5,
+ OVERLAY_FLUID_STORAGE_MONITOR6,
+ OVERLAY_FLUID_STORAGE_MONITOR7,
+ OVERLAY_FLUID_STORAGE_MONITOR8,
+ OVERLAY_FLUID_STORAGE_MONITOR9,
+ OVERLAY_FLUID_STORAGE_MONITOR10,
+ OVERLAY_FLUID_STORAGE_MONITOR11,
+ OVERLAY_FLUID_STORAGE_MONITOR12,
+ OVERLAY_FLUID_STORAGE_MONITOR13,
+ OVERLAY_FLUID_STORAGE_MONITOR14,
+ };
+
+ public GT_Cover_FluidStorageMonitor() {
+ super(FluidStorageData.class);
+ }
+
+ @Override
+ public FluidStorageData createDataObject(int aLegacyData) {
+ return new FluidStorageData();
+ }
+
+ @Override
+ public FluidStorageData createDataObject() {
+ return new FluidStorageData();
+ }
+
+ @Override
+ protected FluidStorageData doCoverThingsImpl(byte aSide, byte aInputRedstone, int aCoverID, FluidStorageData aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ final FluidTankInfo[] tanks = getValidFluidTankInfos(aTileEntity, aCoverVariable.side);
+ if (tanks == null) {
+ return aCoverVariable.disable().issueCoverUpdateIfNeeded(aTileEntity, aSide);
+ }
+ assert 0 < tanks.length;
+
+ if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) {
+ aCoverVariable.setSlot(0);
+ }
+
+ final FluidTankInfo tank = tanks[aCoverVariable.slot];
+ if (tank == null) {
+ return aCoverVariable.setNullTank().issueCoverUpdateIfNeeded(aTileEntity, aSide);
+ }
+
+ return aCoverVariable
+ .setFluid(tank.fluid)
+ .setScale(getTankScale(tank))
+ .issueCoverUpdateIfNeeded(aTileEntity, aSide);
+ }
+
+
+ @Override
+ protected ITexture getSpecialCoverTextureImpl(byte aSide, int aCoverID, FluidStorageData aCoverVariable, ICoverable aTileEntity) {
+ if (aCoverVariable.slot == -1 || aCoverVariable.fluid == null || aCoverVariable.scale == 0) {
+ return TextureFactory.of(OVERLAY_FLUID_STORAGE_MONITOR0);
+ }
+ return TextureFactory.of(
+ TextureFactory.of(new IIconContainer() {
+ @Override
+ public IIcon getIcon() {
+ return aCoverVariable.fluid.getStillIcon();
+ }
+
+ @Override
+ public IIcon getOverlayIcon() {
+ return null;
+ }
+
+ @Override
+ public ResourceLocation getTextureFile() {
+ return TextureMap.locationBlocksTexture;
+ }
+ }, colorToRGBA(aCoverVariable.fluid.getColor())),
+ TextureFactory.of(icons[aCoverVariable.scale])
+ );
+ }
+
+ @Override
+ protected boolean onCoverRightClickImpl(byte aSide, int aCoverID, FluidStorageData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (aPlayer == null || aPlayer.worldObj == null || aPlayer.worldObj.isRemote) {
+ return false;
+ }
+ final ItemStack heldItem = aPlayer.getHeldItem();
+ if (aPlayer.isSneaking() || heldItem == null) {
+ return false;
+ }
+ final FluidTankInfo[] tanks = getValidFluidTankInfos(aTileEntity, aCoverVariable.side);
+ if (tanks == null) {
+ return false;
+ }
+ if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) {
+ return false;
+ }
+ final FluidTankInfo tank = tanks[aCoverVariable.slot];
+ if (tank == null) {
+ return false;
+ }
+ IFluidHandler tankHandler = (IFluidHandler) aTileEntity;
+
+ final ItemStack heldItemSizedOne = GT_Utility.copyAmount(1, heldItem);
+ if (heldItemSizedOne == null || heldItemSizedOne.stackSize <= 0) {
+ return false;
+ }
+
+ ItemStack result;
+ result = fillToTank(heldItemSizedOne, tankHandler, aCoverVariable.side);
+ if (result != null) {
+ replaceHeldItemStack(aPlayer, heldItem, result);
+ return true;
+ }
+ result = fillToContainer(heldItemSizedOne, tank, tankHandler, aCoverVariable.side);
+ if (result != null) {
+ replaceHeldItemStack(aPlayer, heldItem, result);
+ return true;
+ }
+ return false;
+ }
+
+
+ protected static ItemStack fillToTank(@Nonnull ItemStack container, @Nonnull IFluidHandler tank, ForgeDirection side) {
+ final FluidStack fluidToFill = GT_Utility.getFluidForFilledItem(container, true);
+ if (fluidToFill == null || fluidToFill.getFluid() == null || fluidToFill.amount <= 0) {
+ return null;
+ }
+ if (!tank.canFill(side, fluidToFill.getFluid())) {
+ return null;
+ }
+
+ if (container.getItem() instanceof IFluidContainerItem) {
+ final IFluidContainerItem containerItem = (IFluidContainerItem) container.getItem();
+ final int filled = tank.fill(side, fluidToFill, true);
+ if (filled == 0) {
+ return null;
+ }
+ containerItem.drain(container, filled, true);
+ return container;
+ } else {
+ final int filled = tank.fill(side, fluidToFill, false);
+ if (filled != fluidToFill.amount) {
+ return null;
+ }
+ tank.fill(side, fluidToFill, true);
+ return GT_Utility.getContainerForFilledItem(container, false);
+ }
+ }
+
+ protected static ItemStack fillToContainer(@Nonnull ItemStack container, @Nonnull FluidTankInfo tankInfo, @Nonnull IFluidHandler tank, ForgeDirection side) {
+ if (tankInfo.fluid == null || tankInfo.fluid.getFluid() == null || tankInfo.fluid.amount <= 0) {
+ return null;
+ }
+ if (!tank.canDrain(side, tankInfo.fluid.getFluid())) {
+ return null;
+ }
+
+ if (container.getItem() instanceof IFluidContainerItem) {
+ final IFluidContainerItem containerItem = (IFluidContainerItem) container.getItem();
+ final int filled = Math.min(
+ Optional.ofNullable(tank.drain(side, new FluidStack(tankInfo.fluid.getFluid(), containerItem.getCapacity(container)), false)).filter(fs -> GT_Utility.areFluidsEqual(fs, tankInfo.fluid)).map(fs -> fs.amount).orElse(0),
+ containerItem.fill(container, new FluidStack(tankInfo.fluid.getFluid(), containerItem.getCapacity(container)), false)
+ );
+ if (filled == 0) {
+ return null;
+ }
+ containerItem.fill(container, new FluidStack(tankInfo.fluid.getFluid(), filled), true);
+ tank.drain(side, new FluidStack(tankInfo.fluid.getFluid(), filled), true);
+ return container;
+ } else {
+ final ItemStack filledContainer = GT_Utility.fillFluidContainer(tankInfo.fluid, container, false, false);
+ if (filledContainer == null) {
+ return null;
+ }
+ final FluidStack filledFluid = GT_Utility.getFluidForFilledItem(filledContainer, false);
+ if (filledFluid == null || filledFluid.getFluid() == null || filledFluid.amount <= 0) {
+ return null;
+ }
+ if (Optional.ofNullable(tank.drain(side, filledFluid, false)).filter(fs -> GT_Utility.areFluidsEqual(fs, filledFluid)).map(fs -> fs.amount).orElse(0) != filledFluid.amount) {
+ return null;
+ }
+ tank.drain(side, filledFluid, true);
+ return filledContainer;
+ }
+ }
+
+ protected static void replaceHeldItemStack(@Nonnull EntityPlayer player, @Nonnull ItemStack heldItem, @Nonnull ItemStack result) {
+ heldItem.stackSize--;
+ GT_Utility.addItemToPlayerInventory(player, result);
+ player.inventoryContainer.detectAndSendChanges();
+ }
+
+
+ @Override
+ protected FluidStorageData onCoverScrewdriverClickImpl(byte aSide, int aCoverID, FluidStorageData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (aPlayer.isSneaking()) {
+ aCoverVariable
+ .setSide(ForgeDirection.values()[(aCoverVariable.side.ordinal() + 1) % ForgeDirection.values().length])
+ .setSlot(0);
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("SIDE", "Side: ") + aCoverVariable.side.name());
+ return aCoverVariable;
+ }
+ final FluidTankInfo[] tanks = getValidFluidTankInfos(aTileEntity, aCoverVariable.side);
+ if (tanks == null) {
+ return aCoverVariable.disable();
+ }
+ assert 0 < tanks.length;
+ if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) {
+ aCoverVariable.setSlot(0);
+ } else {
+ aCoverVariable.setSlot((aCoverVariable.slot + tanks.length + (aPlayer.isSneaking() ? -1 : 1)) % tanks.length);
+ }
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("053", "Slot: ") + aCoverVariable.slot);
+ return aCoverVariable;
+ }
+
+ @Override
+ protected boolean isDataNeededOnClientImpl(byte aSide, int aCoverID, FluidStorageData aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ protected boolean letsFluidInImpl(byte aSide, int aCoverID, FluidStorageData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ protected boolean letsFluidOutImpl(byte aSide, int aCoverID, FluidStorageData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ @Override
+ protected int getTickRateImpl(byte aSide, int aCoverID, FluidStorageData aCoverVariable, ICoverable aTileEntity) {
+ return 10;
+ }
+
+ protected static FluidTankInfo[] getValidFluidTankInfos(@Nullable ICoverable tileEntity, @Nonnull ForgeDirection side) {
+ if (tileEntity instanceof IFluidHandler) {
+ final FluidTankInfo[] tanks = ((IFluidHandler) tileEntity).getTankInfo(side);
+ if (tanks != null && 0 < tanks.length) {
+ return tanks;
+ }
+ }
+ return null;
+ }
+
+ protected static int getTankScale(@Nonnull FluidTankInfo tank) {
+ if (tank.fluid == null || tank.capacity <= 0) {
+ return 0;
+ }
+ return (int) Math.ceil(tank.fluid.amount / (double) tank.capacity * (icons.length - 1));
+ }
+
+ protected short[] colorToRGBA(int color) {
+ return new short[]{
+ (short) (color >> 16 & 0xFF),
+ (short) (color >> 8 & 0xFF),
+ (short) (color & 0xFF),
+ (short) (0xFF)
+ };
+ }
+
+ public static class FluidStorageData implements ISerializableObject {
+ private ForgeDirection side;
+ private int slot;
+ private Fluid fluid;
+ private int scale;
+ private boolean dirty;
+
+ public FluidStorageData() {
+ this(ForgeDirection.UNKNOWN, 0, null, 0, false);
+ }
+
+ public FluidStorageData(ForgeDirection side, int slot, Fluid fluid, int scale, boolean dirty) {
+ this.side = side;
+ this.slot = slot;
+ this.fluid = fluid;
+ this.scale = scale;
+ this.dirty = dirty;
+ }
+
+ public FluidStorageData setSide(ForgeDirection side) {
+ this.side = side;
+ return this;
+ }
+
+ /**
+ * @param slot
+ * 0-based index of the tank, -1 for no correct FluidTankInfo[] for the current side.
+ */
+ public FluidStorageData setSlot(int slot) {
+ if (this.slot != slot) {
+ if (this.slot == -1 || slot == -1) {
+ this.dirty = true;
+ }
+ this.slot = slot;
+ }
+ return this;
+ }
+
+ /**
+ * Means there is no correct FluidTankInfo[] for the current side.
+ */
+ public FluidStorageData disable() {
+ setSlot(-1);
+ return this;
+ }
+
+ public FluidStorageData setFluid(@Nullable Fluid fluid) {
+ if (!Util.areFluidsEqual(this.fluid, fluid)) {
+ this.fluid = fluid;
+ this.dirty = true;
+ }
+ return this;
+ }
+
+ public FluidStorageData setFluid(@Nullable FluidStack fluidStack) {
+ final Fluid fluid = fluidStack == null ? null : fluidStack.getFluid();
+ return setFluid(fluid);
+ }
+
+ public FluidStorageData setScale(int scale) {
+ if (this.scale != scale) {
+ this.scale = scale;
+ this.dirty = true;
+ }
+ return this;
+ }
+
+ public FluidStorageData setNullTank() {
+ return this.setFluid((Fluid) null).setScale(0);
+ }
+
+ public FluidStorageData issueCoverUpdateIfNeeded(ICoverable tileEntity, byte side) {
+ if (this.dirty) {
+ tileEntity.issueCoverUpdate(side);
+ this.dirty = false;
+ }
+ return this;
+ }
+
+ //region ISerializableObject
+ @Nonnull
+ @Override
+ public ISerializableObject copy() {
+ return new FluidStorageData(side, slot, fluid, scale, dirty);
+ }
+
+ @Override
+ public void loadDataFromNBT(NBTBase aNBT) {
+ NBTTagCompound tag = (NBTTagCompound) aNBT;
+ side = ForgeDirection.getOrientation(tag.getByte("side"));
+ slot = tag.getInteger("slot");
+ fluid = Util.getFluid(tag.getString("fluidName"));
+ scale = tag.getInteger("scale");
+ dirty = tag.getBoolean("dirty");
+ }
+
+ @Nonnull
+ @Override
+ public NBTBase saveDataToNBT() {
+ NBTTagCompound tag = new NBTTagCompound();
+ tag.setByte("side", (byte) side.ordinal());
+ tag.setInteger("slot", slot);
+ tag.setString("fluidName", Util.getFluidName(fluid));
+ tag.setInteger("scale", scale);
+ tag.setBoolean("dirty", dirty);
+ return tag;
+ }
+
+ @Nonnull
+ @Override
+ public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) {
+ final ForgeDirection side = ForgeDirection.getOrientation(aBuf.readByte());
+ final int slot = aBuf.readInt();
+ final Fluid fluid = Util.getFluid(aBuf.readInt());
+ final int scale = aBuf.readInt();
+ final boolean dirty = aBuf.readBoolean();
+ return new FluidStorageData(side, slot, fluid, scale, dirty);
+ }
+
+ @Override
+ public void writeToByteBuf(ByteBuf aBuf) {
+ aBuf.writeByte(side.ordinal());
+ aBuf.writeInt(slot);
+ aBuf.writeInt(Util.getFluidID(fluid));
+ aBuf.writeInt(scale);
+ aBuf.writeBoolean(dirty);
+ }
+ //endregion
+
+ }
+
+ protected static class Util {
+ public static int getFluidID(@Nullable Fluid fluid) {
+ return fluid == null ? -1 : fluid.getID();
+ }
+
+ public static String getFluidName(@Nullable Fluid fluid) {
+ return fluid == null ? "" : fluid.getName();
+ }
+
+ public static Fluid getFluid(int id) {
+ return id == -1 ? null : FluidRegistry.getFluid(id);
+ }
+
+ public static Fluid getFluid(String name) {
+ return name.isEmpty() ? null : FluidRegistry.getFluid(name);
+ }
+
+ public static boolean areFluidsEqual(@Nullable Fluid a, @Nullable Fluid b) {
+ return getFluidID(a) == getFluidID(b);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java
index 851896e260..d2a9cbc6d3 100644
--- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java
+++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java
@@ -836,6 +836,7 @@ public class GT_MetaGenerated_Item_01 extends GT_MetaGenerated_Item_X32 {
ItemList.Cover_ItemDetector.set(addItem(tLastID = 733, "Item Detector Cover", "Gives out Item Amount as Redstone", new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1L)));
ItemList.Cover_EnergyDetector.set(addItem(tLastID = 734, "Energy Detector Cover", "Gives out Energy Amount as Redstone", new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L)));
ItemList.Cover_PlayerDetector.set(addItem(tLastID = 735, "Player Detector Cover", "Gives out close Players as Redstone", new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L)));
+ ItemList.Cover_FluidStorageMonitor.set(addItem(tLastID = 577, "Fluid Storage Monitor Cover", "Displays the fluid stored in the Tank", new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L)));
GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Sensor_EV.get(1L), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L), GT_Utility.getIntegratedCircuit(1)}, GT_Values.NF, ItemList.Cover_PlayerDetector.get(1L), 3200, 128);
GregTech_API.registerCover(ItemList.Cover_Controller.get(1L), TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_CONTROLLER)), new GT_Cover_ControlsWork());
@@ -844,6 +845,7 @@ public class GT_MetaGenerated_Item_01 extends GT_MetaGenerated_Item_X32 {
GregTech_API.registerCover(ItemList.Cover_ItemDetector.get(1L), TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ITEMDETECTOR)), new GT_Cover_ItemMeter());
GregTech_API.registerCover(ItemList.Cover_EnergyDetector.get(1L), TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ENERGYDETECTOR)), new GT_Cover_EUMeter());
GregTech_API.registerCover(ItemList.Cover_PlayerDetector.get(1L), TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(TextureFactory.of(OVERLAY_ACTIVITYDETECTOR), TextureFactory.builder().addIcon(OVERLAY_ACTIVITYDETECTOR_GLOW).glow().build())), new GT_Cover_PlayerDetector());
+ GregTech_API.registerCover(ItemList.Cover_FluidStorageMonitor.get(1L), TextureFactory.of(OVERLAY_FLUID_STORAGE_MONITOR0), new GT_Cover_FluidStorageMonitor());
ItemList.Cover_Screen.set(addItem(tLastID = 740, "Computer Monitor Cover", "Displays Data and GUI", new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 2L), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L)));
ItemList.Cover_Crafting.set(addItem(tLastID = 744, "Crafting Table Cover", "Better than a wooden Workbench", new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 4L)));
@@ -863,6 +865,7 @@ public class GT_MetaGenerated_Item_01 extends GT_MetaGenerated_Item_X32 {
GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), new ItemStack(Blocks.crafting_table, 1), GT_Utility.getIntegratedCircuit(1)}, GT_Values.NF, ItemList.Cover_Crafting.get(1L), 800, 16);
GT_Values.RA.addAssemblerRecipe(new ItemStack[]{GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L), new ItemStack(Blocks.crafting_table, 1), GT_Utility.getIntegratedCircuit(1)}, GT_Values.NF, ItemList.Cover_Crafting.get(1L), 800, 16);
GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Cover_Shutter.get(1L), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Basic, 2), GT_Utility.getIntegratedCircuit(1)}, GT_Values.NF, ItemList.FluidFilter.get(1L), 800, 4);
+ GT_Values.RA.addAssemblerRecipe(new ItemStack[]{ItemList.Cover_Screen.get(1L), ItemList.Cover_FluidDetector.get(1L), GT_Utility.getIntegratedCircuit(1)}, GT_Values.NF, ItemList.Cover_FluidStorageMonitor.get(1L), 1200, 128);
GregTech_API.registerCover(ItemList.Cover_Screen.get(1L), TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(TextureFactory.of(OVERLAY_SCREEN), TextureFactory.builder().addIcon(OVERLAY_SCREEN_GLOW).glow().build())), new GT_Cover_Screen());
GregTech_API.registerCover(ItemList.Cover_Crafting.get(1L), TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_CRAFTING)), new GT_Cover_Crafting());
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR0.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR0.png
new file mode 100644
index 0000000000..d9d5f1f816
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR0.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR1.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR1.png
new file mode 100644
index 0000000000..98a0aa32f9
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR1.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR10.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR10.png
new file mode 100644
index 0000000000..25800ca0a5
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR10.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR11.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR11.png
new file mode 100644
index 0000000000..84230f719e
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR11.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR12.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR12.png
new file mode 100644
index 0000000000..3108809659
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR12.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR13.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR13.png
new file mode 100644
index 0000000000..835dbe7d91
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR13.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR14.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR14.png
new file mode 100644
index 0000000000..fe27ae3bb8
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR14.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR2.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR2.png
new file mode 100644
index 0000000000..4a1ae7635a
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR2.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR3.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR3.png
new file mode 100644
index 0000000000..ebc0e64757
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR3.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR4.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR4.png
new file mode 100644
index 0000000000..41cbe06a38
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR4.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR5.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR5.png
new file mode 100644
index 0000000000..fa41c960e6
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR5.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR6.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR6.png
new file mode 100644
index 0000000000..85a2cef09a
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR6.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR7.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR7.png
new file mode 100644
index 0000000000..12e17f4d3b
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR7.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR8.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR8.png
new file mode 100644
index 0000000000..62d9bfc010
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR8.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR9.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR9.png
new file mode 100644
index 0000000000..b49dcad379
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_FLUID_STORAGE_MONITOR9.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/577.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/577.png
new file mode 100644
index 0000000000..9876085b93
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/577.png
Binary files differ