From dea4766634abd4adeb41de588147b4ed7c9fb7da Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Mon, 5 Dec 2022 17:42:32 +0100 Subject: [PATCH] feat: WIP storage monitor implementation --- .../appeng/api/definitions/IMaterials.java | 2 + .../block/legacy/BlockStorageMonitor.java | 73 +++++++++ .../blocks/RenderBlockStorageMonitor.java | 146 ++++++++++++++++++ .../core/api/definitions/ApiBlocks.java | 4 + .../appeng/core/api/definitions/ApiItems.java | 44 +++--- .../core/api/definitions/ApiMaterials.java | 5 + .../tools/powered/ToolVibrationCatalyst.java | 2 - .../tile/legacy/TileLegacyController.java | 1 - .../appeng/tile/legacy/TileLegacyDisplay.java | 5 +- .../tile/legacy/TileStorageMonitor.java | 90 +++++++++++ .../appliedenergistics2/lang/en_US.lang | 1 + .../textures/blocks/BlockStorageMonitor.png | Bin 0 -> 398 bytes .../blocks/BlockStorageMonitorBottom.png | Bin 0 -> 398 bytes .../blocks/BlockStorageMonitorFront.png | Bin 0 -> 335 bytes .../BlockStorageMonitorFront_Matrix.png | Bin 0 -> 364 bytes .../blocks/BlockStorageMonitorSide.png | Bin 0 -> 438 bytes 16 files changed, 348 insertions(+), 25 deletions(-) create mode 100644 src/main/java/appeng/block/legacy/BlockStorageMonitor.java create mode 100644 src/main/java/appeng/client/render/blocks/RenderBlockStorageMonitor.java create mode 100644 src/main/java/appeng/tile/legacy/TileStorageMonitor.java create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitor.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorBottom.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorFront.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorFront_Matrix.png create mode 100644 src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorSide.png diff --git a/src/api/java/appeng/api/definitions/IMaterials.java b/src/api/java/appeng/api/definitions/IMaterials.java index 4527deb1..d1bc00e6 100644 --- a/src/api/java/appeng/api/definitions/IMaterials.java +++ b/src/api/java/appeng/api/definitions/IMaterials.java @@ -134,4 +134,6 @@ public interface IMaterials { IItemDefinition qESingularity(); IItemDefinition blankPattern(); + + IItemDefinition conversionMatrix(); } diff --git a/src/main/java/appeng/block/legacy/BlockStorageMonitor.java b/src/main/java/appeng/block/legacy/BlockStorageMonitor.java new file mode 100644 index 00000000..fe585df9 --- /dev/null +++ b/src/main/java/appeng/block/legacy/BlockStorageMonitor.java @@ -0,0 +1,73 @@ +package appeng.block.legacy; + +import java.util.EnumSet; + +import appeng.block.AEBaseBlock; +import appeng.client.render.BaseBlockRender; +import appeng.client.render.blocks.RenderBlockStorageMonitor; +import appeng.core.Api; +import appeng.core.features.AEFeature; +import appeng.tile.AEBaseTile; +import appeng.tile.legacy.TileStorageMonitor; +import appeng.util.item.AEItemStack; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class BlockStorageMonitor extends BlockLegacyDisplay { + public BlockStorageMonitor() { + super(Material.iron); + this.setTileEntity(TileStorageMonitor.class); + this.setFeature(EnumSet.of(AEFeature.Legacy)); + } + + @Override + protected BaseBlockRender getRenderer() { + return new RenderBlockStorageMonitor(); + } + + @Override + public boolean onBlockActivated( + World w, + int x, + int y, + int z, + EntityPlayer player, + int side, + float hitX, + float hitY, + float hitZ + ) { + TileStorageMonitor tile = (TileStorageMonitor) w.getTileEntity(x, y, z); + + if (player.getHeldItem() != null) { + if (player.getHeldItem().getItem() + == Api.INSTANCE.definitions() + .materials() + .conversionMatrix() + .maybeItem() + .get() + && player.isSneaking() && !tile.upgraded) { + if (!w.isRemote) { + player.inventory.decrStackSize(player.inventory.currentItem, 1); + tile.upgraded = true; + tile.markForUpdate(); + } + return true; + } else if (side == tile.getForward().ordinal() && !tile.isLocked) { + if (!w.isRemote) { + tile.myItem = AEItemStack.create(new ItemStack( + player.getHeldItem().getItem(), + 1, + player.getHeldItem().getItemDamage() + )); + tile.markForUpdate(); + } + return true; + } + } + + return false; + } +} diff --git a/src/main/java/appeng/client/render/blocks/RenderBlockStorageMonitor.java b/src/main/java/appeng/client/render/blocks/RenderBlockStorageMonitor.java new file mode 100644 index 00000000..97e0318b --- /dev/null +++ b/src/main/java/appeng/client/render/blocks/RenderBlockStorageMonitor.java @@ -0,0 +1,146 @@ +package appeng.client.render.blocks; + +import appeng.api.storage.data.IAEItemStack; +import appeng.block.AEBaseTileBlock; +import appeng.client.ClientHelper; +import appeng.core.AELog; +import appeng.tile.legacy.TileLegacyDisplay; +import appeng.tile.legacy.TileStorageMonitor; +import appeng.util.ReadableNumberConverter; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderBlockStorageMonitor extends RenderBlockLegacyDisplay { + private int dspList; + + public RenderBlockStorageMonitor() { + this.dspList = GLAllocation.generateDisplayLists(1); + } + + @Override + protected void finalize() throws Throwable { + super.finalize(); + + GLAllocation.deleteDisplayLists(this.dspList); + } + + @Override + public boolean hasTESR() { + return true; + } + + @Override + public void renderTile( + AEBaseTileBlock b, + TileLegacyDisplay tile_, + Tessellator tess, + double x, + double y, + double z, + float f, + RenderBlocks renderer + ) { + TileStorageMonitor tile = (TileStorageMonitor) tile_; + if (tile.myItem != null && tile.isDisplayPowered()) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + if (tile.updateDisplayList) { + tile.updateDisplayList = false; + GL11.glNewList(this.dspList, GL11.GL_COMPILE_AND_EXECUTE); + this.tesrRenderScreen(tile, tess, tile.myItem); + GL11.glEndList(); + } else { + GL11.glCallList(this.dspList); + } + GL11.glPopMatrix(); + } + } + + private void + tesrRenderScreen(TileLegacyDisplay tile, Tessellator tess, IAEItemStack ais) { + // GL11.glPushAttrib( GL11.GL_ALL_ATTRIB_BITS ); + + final ForgeDirection d = tile.getForward(); + + GL11.glTranslated(d.offsetX * 0.77, d.offsetY * 0.77, d.offsetZ * 0.77); + + switch (d) { + case UP: + GL11.glScalef(1.0f, -1.0f, 1.0f); + GL11.glRotatef(90.0f, 1.0f, 0.0f, 0.0f); + GL11.glRotatef(tile.getUp().ordinal() * 90.0F, 0, 0, 1); + break; + case DOWN: + GL11.glScalef(1.0f, -1.0f, 1.0f); + GL11.glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); + GL11.glRotatef(tile.getUp().ordinal() * -90.0F, 0, 0, 1); + break; + case EAST: + GL11.glScalef(-1.0f, -1.0f, -1.0f); + GL11.glRotatef(-90.0f, 0.0f, 1.0f, 0.0f); + break; + case WEST: + GL11.glScalef(-1.0f, -1.0f, -1.0f); + GL11.glRotatef(90.0f, 0.0f, 1.0f, 0.0f); + break; + case NORTH: + GL11.glScalef(-1.0f, -1.0f, -1.0f); + break; + case SOUTH: + GL11.glScalef(-1.0f, -1.0f, -1.0f); + GL11.glRotatef(180.0f, 0.0f, 1.0f, 0.0f); + break; + + default: + break; + } + + try { + final ItemStack sis = ais.getItemStack(); + sis.stackSize = 1; + + final int br = 16 << 20 | 16 << 4; + final int var11 = br % 65536; + final int var12 = br / 65536; + OpenGlHelper.setLightmapTextureCoords( + OpenGlHelper.lightmapTexUnit, var11 * 0.8F, var12 * 0.8F + ); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + // RenderHelper.enableGUIStandardItemLighting(); + tess.setColorOpaque_F(1.0f, 1.0f, 1.0f); + + ClientHelper.proxy.doRenderItem(sis, tile.getWorldObj()); + } catch (final Exception e) { + AELog.debug(e); + } finally { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } + + GL11.glTranslatef(0.0f, 0.14f, -0.24f); + GL11.glScalef(1.0f / 62.0f, 1.0f / 62.0f, 1.0f / 62.0f); + + final long stackSize = ais.getStackSize(); + final String renderedStackSize + = ReadableNumberConverter.INSTANCE.toWideReadableForm(stackSize); + + final FontRenderer fr = Minecraft.getMinecraft().fontRenderer; + final int width = fr.getStringWidth(renderedStackSize); + GL11.glTranslatef(-0.5f * width, 0.0f, -1.0f); + fr.drawString(renderedStackSize, 0, 0, 0); + + // GL11.glPopAttrib(); + } +} diff --git a/src/main/java/appeng/core/api/definitions/ApiBlocks.java b/src/main/java/appeng/core/api/definitions/ApiBlocks.java index 22d614f0..7154525f 100644 --- a/src/main/java/appeng/core/api/definitions/ApiBlocks.java +++ b/src/main/java/appeng/core/api/definitions/ApiBlocks.java @@ -32,6 +32,7 @@ import appeng.block.grindstone.BlockGrinder; import appeng.block.legacy.BlockCraftMonitor; import appeng.block.legacy.BlockCraftTerminal; import appeng.block.legacy.BlockLegacyController; +import appeng.block.legacy.BlockStorageMonitor; import appeng.block.legacy.BlockTerminal; import appeng.block.legacy.BlockTransitionPlane; import appeng.block.legacy.BlockWirelessAccessPoint; @@ -139,6 +140,7 @@ public final class ApiBlocks implements IBlocks { private final ITileDefinition legacyController; private final ITileDefinition legacyWirelessAccessPoint; private final ITileDefinition transitionPlane; + private final ITileDefinition storageMonitor; public ApiBlocks(final DefinitionConstructor constructor) { final BlockLightDetector lightDetector = new BlockLightDetector(); @@ -316,6 +318,8 @@ public final class ApiBlocks implements IBlocks { = constructor.registerTileDefinition(new BlockWirelessAccessPoint()); this.transitionPlane = constructor.registerTileDefinition(new BlockTransitionPlane()); + this.storageMonitor + = constructor.registerTileDefinition(new BlockStorageMonitor()); } @Override diff --git a/src/main/java/appeng/core/api/definitions/ApiItems.java b/src/main/java/appeng/core/api/definitions/ApiItems.java index 9b57a9e7..14d0b0fb 100644 --- a/src/main/java/appeng/core/api/definitions/ApiItems.java +++ b/src/main/java/appeng/core/api/definitions/ApiItems.java @@ -61,16 +61,16 @@ public final class ApiItems implements IItems { private final IItemDefinition netherQuartzWrench; private final IItemDefinition netherQuartzKnife; - private final IItemDefinition entropyManipulator; - private final IItemDefinition vibrationCatalyst; - private final IItemDefinition entropyAccelerator; - private final IItemDefinition wirelessTerminal; - private final IItemDefinition biometricCard; - private final IItemDefinition chargedStaff; - private final IItemDefinition massCannon; - private final IItemDefinition memoryCard; - private final IItemDefinition networkTool; - private final IItemDefinition portableCell; + private final IItemDefinition entropyManipulator; + private final IItemDefinition vibrationCatalyst; + private final IItemDefinition entropyAccelerator; + private final IItemDefinition wirelessTerminal; + private final IItemDefinition biometricCard; + private final IItemDefinition chargedStaff; + private final IItemDefinition massCannon; + private final IItemDefinition memoryCard; + private final IItemDefinition networkTool; + private final IItemDefinition portableCell; private final IItemDefinition cellCreative; private final IItemDefinition viewCell; @@ -146,17 +146,21 @@ public final class ApiItems implements IItems { new ToolQuartzCuttingKnife(AEFeature.NetherQuartzTools) ); - this.entropyManipulator = constructor.registerItemDefinition( new ToolEntropyManipulator() ); - this.vibrationCatalyst = constructor.registerItemDefinition( new ToolVibrationCatalyst() ); - this.entropyAccelerator = constructor.registerItemDefinition( new ToolEntropyAccelerator() ); + this.entropyManipulator + = constructor.registerItemDefinition(new ToolEntropyManipulator()); + this.vibrationCatalyst + = constructor.registerItemDefinition(new ToolVibrationCatalyst()); + this.entropyAccelerator + = constructor.registerItemDefinition(new ToolEntropyAccelerator()); - this.wirelessTerminal = constructor.registerItemDefinition( new ToolWirelessTerminal() ); - this.biometricCard = constructor.registerItemDefinition( new ToolBiometricCard() ); - this.chargedStaff = constructor.registerItemDefinition( new ToolChargedStaff() ); - this.massCannon = constructor.registerItemDefinition( new ToolMassCannon() ); - this.memoryCard = constructor.registerItemDefinition( new ToolMemoryCard() ); - this.networkTool = constructor.registerItemDefinition( new ToolNetworkTool() ); - this.portableCell = constructor.registerItemDefinition( new ToolPortableCell() ); + this.wirelessTerminal + = constructor.registerItemDefinition(new ToolWirelessTerminal()); + this.biometricCard = constructor.registerItemDefinition(new ToolBiometricCard()); + this.chargedStaff = constructor.registerItemDefinition(new ToolChargedStaff()); + this.massCannon = constructor.registerItemDefinition(new ToolMassCannon()); + this.memoryCard = constructor.registerItemDefinition(new ToolMemoryCard()); + this.networkTool = constructor.registerItemDefinition(new ToolNetworkTool()); + this.portableCell = constructor.registerItemDefinition(new ToolPortableCell()); this.cellCreative = constructor.registerItemDefinition(new ItemCreativeStorageCell()); diff --git a/src/main/java/appeng/core/api/definitions/ApiMaterials.java b/src/main/java/appeng/core/api/definitions/ApiMaterials.java index dcc98022..6f5c7f62 100644 --- a/src/main/java/appeng/core/api/definitions/ApiMaterials.java +++ b/src/main/java/appeng/core/api/definitions/ApiMaterials.java @@ -562,4 +562,9 @@ public final class ApiMaterials implements IMaterials { public IItemDefinition blankPattern() { return this.blankPattern; } + + @Override + public IItemDefinition conversionMatrix() { + return this.conversionMatrix; + } } diff --git a/src/main/java/appeng/items/tools/powered/ToolVibrationCatalyst.java b/src/main/java/appeng/items/tools/powered/ToolVibrationCatalyst.java index c252cdae..b5d1d11d 100644 --- a/src/main/java/appeng/items/tools/powered/ToolVibrationCatalyst.java +++ b/src/main/java/appeng/items/tools/powered/ToolVibrationCatalyst.java @@ -3,8 +3,6 @@ package appeng.items.tools.powered; import java.util.ArrayList; import java.util.List; -import com.google.common.base.Optional; - import appeng.block.misc.BlockTinyTNT; import appeng.util.InWorldToolOperationResult; import appeng.util.Platform; diff --git a/src/main/java/appeng/tile/legacy/TileLegacyController.java b/src/main/java/appeng/tile/legacy/TileLegacyController.java index eb0429f7..dbde9743 100644 --- a/src/main/java/appeng/tile/legacy/TileLegacyController.java +++ b/src/main/java/appeng/tile/legacy/TileLegacyController.java @@ -152,5 +152,4 @@ public class TileLegacyController extends AENetworkPowerTile implements ILocatab new LocatableEventAnnounce(this, LocatableEvent.Unregister) ); } - } diff --git a/src/main/java/appeng/tile/legacy/TileLegacyDisplay.java b/src/main/java/appeng/tile/legacy/TileLegacyDisplay.java index 536c6e6c..2c50597e 100644 --- a/src/main/java/appeng/tile/legacy/TileLegacyDisplay.java +++ b/src/main/java/appeng/tile/legacy/TileLegacyDisplay.java @@ -15,18 +15,19 @@ public class TileLegacyDisplay extends AENetworkTile { } @TileEvent(TileEventType.NETWORK_WRITE) - public void writeToStreamTileLegacyTerminal(ByteBuf data) { + public void writeToStreamTileLegacyDisplay(ByteBuf data) { data.writeBoolean(this.displayPowered); } @TileEvent(TileEventType.NETWORK_READ) - public void readFromStreamTileLegacyTerminal(ByteBuf data) { + public void readFromStreamTileLegacyDisplay(ByteBuf data) { this.displayPowered = data.readBoolean(); this.worldObj.func_147451_t(this.xCoord, this.yCoord, this.zCoord); } @MENetworkEventSubscribe public void powerUpdate(final MENetworkPowerStatusChange changed) { + System.out.println("ALEC"); this.displayPowered = this.getProxy().isPowered(); this.worldObj.func_147451_t(this.xCoord, this.yCoord, this.zCoord); this.markForUpdate(); diff --git a/src/main/java/appeng/tile/legacy/TileStorageMonitor.java b/src/main/java/appeng/tile/legacy/TileStorageMonitor.java new file mode 100644 index 00000000..4bf851df --- /dev/null +++ b/src/main/java/appeng/tile/legacy/TileStorageMonitor.java @@ -0,0 +1,90 @@ +package appeng.tile.legacy; + +import java.io.IOException; +import java.util.EnumSet; + +import appeng.api.networking.GridFlags; +import appeng.api.storage.data.IAEItemStack; +import appeng.tile.TileEvent; +import appeng.tile.events.TileEventType; +import appeng.util.item.AEItemStack; +import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileStorageMonitor extends TileLegacyDisplay { + public boolean isLocked; + public boolean upgraded; + public IAEItemStack myItem; + public boolean updateDisplayList; + + public TileStorageMonitor() { + this.getProxy().setFlags(GridFlags.REQUIRE_CHANNEL); + this.getProxy().setIdlePowerUsage(0.5); + this.getProxy().setValidSides(EnumSet.allOf(ForgeDirection.class)); + } + + @Override + public boolean requiresTESR() { + return true; + } + + @TileEvent(TileEventType.NETWORK_WRITE) + public void writeToStreamTileStorageMonitor(ByteBuf data) { + try { + // TODO: this is a hack because the stupid AE2 reflection BS doesn't work + super.writeToStreamTileLegacyDisplay(data); + int flags = (this.isLocked ? 1 : 0) | (this.upgraded ? 0b10 : 0) + | (this.myItem != null ? 0b100 : 0); + + data.writeByte(flags); + if (this.myItem != null) + ; + this.myItem.writeToPacket(data); + } catch (IOException kek) { + throw new RuntimeException(kek); + } + } + + @TileEvent(TileEventType.NETWORK_READ) + public void readFromStreamTileStorageMonitor(ByteBuf data) { + try { + // TODO: this is a hack because the stupid AE2 reflection BS doesn't work + super.readFromStreamTileLegacyDisplay(data); + byte flags = data.readByte(); + this.isLocked = (flags & 0b1) > 0; + this.upgraded = (flags & 0b10) > 0; + + // 3rd flag means that there's an item set + if ((flags & 0b100) > 0) { + this.myItem = AEItemStack.loadItemStackFromPacket(data); + } + } catch (IOException kek) { + throw new RuntimeException(kek); + } + + this.updateDisplayList = true; + } + + @TileEvent(TileEventType.WORLD_NBT_WRITE) + public void writeNbt(NBTTagCompound nbt) { + nbt.setBoolean("isLocked", this.isLocked); + nbt.setBoolean("upgraded", this.upgraded); + if (this.myItem != null) { + NBTTagCompound item = new NBTTagCompound(); + this.myItem.writeToNBT(item); + nbt.setTag("item", item); + } + } + + @TileEvent(TileEventType.WORLD_NBT_READ) + public void readNbt(NBTTagCompound nbt) { + this.isLocked = nbt.getBoolean("isLocked"); + this.upgraded = nbt.getBoolean("upgraded"); + if (nbt.hasKey("item")) { + this.myItem = AEItemStack.loadItemStackFromNBT(nbt.getCompoundTag("item")); + } else { + this.myItem = null; + } + } +} diff --git a/src/main/resources/assets/appliedenergistics2/lang/en_US.lang b/src/main/resources/assets/appliedenergistics2/lang/en_US.lang index 50408c2f..7a9e1e6e 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/en_US.lang +++ b/src/main/resources/assets/appliedenergistics2/lang/en_US.lang @@ -57,6 +57,7 @@ tile.appliedenergistics2.BlockCraftTerminal.name=ME Crafting Terminal tile.appliedenergistics2.BlockCraftMonitor.name=ME Crafting Monitor tile.appliedenergistics2.BlockLegacyController.name=ME Controller (W.I.P) tile.appliedenergistics2.BlockWirelessAccessPoint.name=Wireless Access Point +tile.appliedenergistics2.BlockStorageMonitor.name=Storage Monitor item.appliedenergistics2.ItemMaterial.ConversionMatrix.name=Conversion Matrix diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitor.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitor.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec66578158e7a321dc0d6e99aeaeb072c4130f4 GIT binary patch literal 398 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF8om~%3A2F8tJP2|NnnClN={dJ!6u$y9>Ac^&9L@rd$YKTt zzGWcH*nVeaK2Xr!)5S4_<9c#}NJvl+5TykaGBUfjO)xPiNDpW2OC7#SEE z>lzsA8XAQdSXdbwTNzsD8kkxc7+iBbxgSMCZhlH;S|wbAfk}vwv6TT3ndlmr0X2NR z%Do<_K?-C;aDG}zd16s2LqK9?UWuNcYluRbv7V`(p@G4dqJ=eN`=0SqpttBVD!s|NqYv?RyDS&zR)x?!qm9{m20zhqJ&VvY3H^ zZy5+Pw%=Kq4-~Zbba4#fxSpIK5)u>yL}>wqjLhzB6HE*W(gPX|=190G@VK{laL$ra z(VVkO#<0ZlpiXI0#(XKsC2?}191KoVwPdSO8NLFIQY~?fC`m~yNwrEYN(E93Mh1q) zx(3F&hDIR<7FNc_R)!Y32Bua92G?9q?nlv(o1c=IRteW&U=m_vY-IpMCb|Y@Kn-87 za<2z!kOJ8doS#-wo>-L15RjOeSEA?V8lq5UtY@lcXkhTAXdzG)gQu&X%Q~loCIDqY BYh3^U literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorFront.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorFront.png new file mode 100644 index 0000000000000000000000000000000000000000..326f41c716a0d3584bde39e75bcbc95c0a8395ee GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z_$#98Qbry z%m)femAFQf1m~xflqVLYG6W=M=9TFAxrQi|8S9zq85$UTDOw0rHQ&?4F~q_@`9j#_ z|M_c{a~*%y_DVux`i{1)H}z}+kFVYPo}jb#jgv^*N_NRJ39Ht#UB4r_xk-b^_=t~u z2Ez$fgR=&cITL3nD(vM^NS~0+aD!W9H^USDBHjfSJS!fvcJVGy5nJ(?Y1I)X4}mle zLy09~OW5DB&N!*SnPlK&dxJqYG;%|*PJ_ghjSdpW*fbduC)n^bAL%VoeAV+c>FVdQ&MBb@0A2uXfB*mh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorFront_Matrix.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorFront_Matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..469e2eace04ad7d9db11c217eaaa915067e04175 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z_$#98Qbry z%m)femAFQf1m~xflqVLYG6W=M=9TFAxrQi|8S9zq85$UTDOw0rwa3%NF~q_@`9j#_ z|M_c{a~*%y_DVux`i{1)H}z}+%4e3d_vF8={U0B7lU1K>W#dYA$ukM7*0VipP_a%9 z6KHkJa;!S@rID>6hQUZwg>g~mL4&OddwCSn59GLqcW@t$Vf@B)LZpb7VK>7Q{vzIn zcE+7-0mr#Tq#ZnU0*A zw1FWh;22Y)g!B@I7ROHpJVNG|T2~lf3;xT`uxfH&_dap)4M2Y|c)I$ztaD0e0s#MV BcGUm? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorSide.png b/src/main/resources/assets/appliedenergistics2/textures/blocks/BlockStorageMonitorSide.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7e4831f00092a2dd623bf67ad9459ea03435c6 GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>!~(0G-#;Ey4VVSyJMySIh+L^k;M!Qe9J(XvHi}XUXZc~`OR4l}sqx!r49 z{saW3Id1C^Qz^E+$In#AS<3zX@l2r6swJ)wB`Jv|saDBFsX&Us$iUE8*T7iU&?v;f z!phj#%FsgBz|_jX;F{~n{U{o8^HVa@D&ZOoOhSx|tqg$3MAyI!sNw5X?)5+oQXm_G t^V3So6N^$A0unRxO7#3(Llnx4^-T2)4Gg{%Ed;7!@O1TaS?83{1OV!5doch2 literal 0 HcmV?d00001