From c91a1abb90bef9053b1584007efc5bea7540db62 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 12 Feb 2017 15:31:36 +0100 Subject: [PATCH] Storage monitor! Renderer isn't working yet... --- .../raoulvdberge/refinedstorage/RSBlocks.java | 1 + .../raoulvdberge/refinedstorage/RSGui.java | 1 + .../network/node/NetworkNodeImporter.java | 1 - .../node/NetworkNodeStorageMonitor.java | 63 +++++++++++++++++++ .../block/BlockStorageMonitor.java | 39 ++++++++++++ .../container/ContainerStorageMonitor.java | 44 +++++++++++++ .../refinedstorage/gui/GuiHandler.java | 4 ++ .../refinedstorage/gui/GuiStorageMonitor.java | 39 ++++++++++++ .../refinedstorage/proxy/ProxyClient.java | 7 +++ .../refinedstorage/proxy/ProxyCommon.java | 2 + ...leEntitySpecialRendererStorageMonitor.java | 37 +++++++++++ .../tile/TileStorageMonitor.java | 21 +++++++ .../blockstates/storage_monitor.json | 19 ++++++ .../assets/refinedstorage/lang/en_US.lang | 2 + 14 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorageMonitor.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/container/ContainerStorageMonitor.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/gui/GuiStorageMonitor.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/render/TileEntitySpecialRendererStorageMonitor.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorageMonitor.java create mode 100644 src/main/resources/assets/refinedstorage/blockstates/storage_monitor.json diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index 625884325..75faac31a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -31,4 +31,5 @@ public final class RSBlocks { public static final BlockWriter WRITER = new BlockWriter(); public static final BlockSecurityManager SECURITY_MANAGER = new BlockSecurityManager(); public static final BlockQuartzEnrichedIron QUARTZ_ENRICHED_IRON = new BlockQuartzEnrichedIron(); + public static final BlockStorageMonitor STORAGE_MONITOR = new BlockStorageMonitor(); } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java index b80628530..9bdbf8052 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java @@ -27,4 +27,5 @@ public final class RSGui { public static final int WIRELESS_CRAFTING_MONITOR = 23; public static final int READER_WRITER = 24; public static final int SECURITY_MANAGER = 25; + public static final int STORAGE_MONITOR = 26; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java index 9e70c9a25..1339af4de 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java @@ -125,7 +125,6 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IFi return tag; } - @Override public NBTTagCompound writeConfiguration(NBTTagCompound tag) { super.writeConfiguration(tag); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorageMonitor.java new file mode 100644 index 000000000..aff5e859e --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeStorageMonitor.java @@ -0,0 +1,63 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.node; + +import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBasic; +import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; +import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode; +import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; +import com.raoulvdberge.refinedstorage.tile.config.IComparable; +import com.raoulvdberge.refinedstorage.tile.config.IType; +import net.minecraftforge.items.IItemHandler; + +public class NetworkNodeStorageMonitor extends NetworkNode implements IComparable, IType { + public static final String ID = "storage_monitor"; + + private ItemHandlerBasic itemFilter = new ItemHandlerBasic(1, new ItemHandlerListenerNetworkNode(this)); + private ItemHandlerFluid fluidFilter = new ItemHandlerFluid(1, new ItemHandlerListenerNetworkNode(this)); + + private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE; + private int type = IType.ITEMS; + + public NetworkNodeStorageMonitor(INetworkNodeHolder holder) { + super(holder); + } + + @Override + public int getEnergyUsage() { + return 0; + } + + @Override + public String getId() { + return ID; + } + + @Override + public int getCompare() { + return compare; + } + + @Override + public void setCompare(int compare) { + this.compare = compare; + + markDirty(); + } + + @Override + public int getType() { + return holder.world().isRemote ? TileStorageMonitor.TYPE.getValue() : type; + } + + @Override + public void setType(int type) { + this.type = type; + + markDirty(); + } + + @Override + public IItemHandler getFilterInventory() { + return getType() == IType.ITEMS ? itemFilter : fluidFilter; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java new file mode 100644 index 000000000..5373f468b --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockStorageMonitor.java @@ -0,0 +1,39 @@ +package com.raoulvdberge.refinedstorage.block; + +import com.raoulvdberge.refinedstorage.RSGui; +import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class BlockStorageMonitor extends BlockNode { + public BlockStorageMonitor() { + super("storage_monitor"); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + tryOpenNetworkGui(RSGui.STORAGE_MONITOR, player, world, pos, side); + } + + return true; + } + + @Nullable + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileStorageMonitor(); + } + + @Override + public EnumPlacementType getPlacementType() { + return null; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerStorageMonitor.java new file mode 100644 index 000000000..a9c8bd8e3 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerStorageMonitor.java @@ -0,0 +1,44 @@ +package com.raoulvdberge.refinedstorage.container; + +import com.raoulvdberge.refinedstorage.container.slot.SlotFilterType; +import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerStorageMonitor extends ContainerBase { + public ContainerStorageMonitor(TileStorageMonitor storageMonitor, EntityPlayer player) { + super(storageMonitor, player); + + addSlotToContainer(new SlotFilterType(storageMonitor.getNode(), 0, 80, 20)); + + addPlayerInventory(8, 55); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = ItemStack.EMPTY; + + Slot slot = getSlot(index); + + if (slot.getHasStack()) { + stack = slot.getStack(); + + if (index < 4) { + if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) { + return ItemStack.EMPTY; + } + } else if (!mergeItemStack(stack, 0, 4, false)) { + return mergeItemStackToFilters(stack, 4, 4 + 1); + } + + if (stack.getCount() == 0) { + slot.putStack(ItemStack.EMPTY); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index 248f65011..5311a47ed 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -72,6 +72,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerReaderWriter((IGuiReaderWriter) ((TileNode) tile).getNode(), (TileBase) tile, player); case RSGui.SECURITY_MANAGER: return new ContainerSecurityManager((TileSecurityManager) tile, player); + case RSGui.STORAGE_MONITOR: + return new ContainerStorageMonitor((TileStorageMonitor) tile, player); default: return null; } @@ -150,6 +152,8 @@ public class GuiHandler implements IGuiHandler { return new GuiReaderWriter((ContainerReaderWriter) getContainer(ID, player, tile), (IGuiReaderWriter) ((TileNode) tile).getNode()); case RSGui.SECURITY_MANAGER: return new GuiSecurityManager((ContainerSecurityManager) getContainer(ID, player, tile), (TileSecurityManager) tile); + case RSGui.STORAGE_MONITOR: + return new GuiStorageMonitor((ContainerStorageMonitor) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiStorageMonitor.java new file mode 100644 index 000000000..d7be5f180 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiStorageMonitor.java @@ -0,0 +1,39 @@ +package com.raoulvdberge.refinedstorage.gui; + +import com.raoulvdberge.refinedstorage.api.util.IComparer; +import com.raoulvdberge.refinedstorage.container.ContainerStorageMonitor; +import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonCompare; +import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonType; +import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; + +public class GuiStorageMonitor extends GuiBase { + public GuiStorageMonitor(ContainerStorageMonitor container) { + super(container, 211, 137); + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonType(this, TileStorageMonitor.TYPE)); + + addSideButton(new SideButtonCompare(this, TileStorageMonitor.COMPARE, IComparer.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(this, TileStorageMonitor.COMPARE, IComparer.COMPARE_NBT)); + addSideButton(new SideButtonCompare(this, TileStorageMonitor.COMPARE, IComparer.COMPARE_OREDICT)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/storage_monitor.png"); + + drawTexture(x, y, 0, 0, screenWidth, screenHeight); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:storage_monitor")); + drawString(7, 43, t("container.inventory")); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index 55e0543e5..4566f2241 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -12,7 +12,9 @@ import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewRespons import com.raoulvdberge.refinedstorage.render.BakedModelPattern; import com.raoulvdberge.refinedstorage.render.ModelDiskDrive; import com.raoulvdberge.refinedstorage.render.ModelDiskManipulator; +import com.raoulvdberge.refinedstorage.render.TileEntitySpecialRendererStorageMonitor; import com.raoulvdberge.refinedstorage.tile.TileController; +import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; @@ -36,6 +38,7 @@ import net.minecraftforge.client.model.IModel; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.client.model.ModelLoaderRegistry; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; @@ -50,6 +53,9 @@ public class ProxyClient extends ProxyCommon { MinecraftForge.EVENT_BUS.register(this); + // TESRs + ClientRegistry.bindTileEntitySpecialRenderer(TileStorageMonitor.class, new TileEntitySpecialRendererStorageMonitor()); + // Item Variants ModelBakery.registerItemVariants(RSItems.STORAGE_DISK, new ResourceLocation("refinedstorage:1k_storage_disk"), @@ -201,6 +207,7 @@ public class ProxyClient extends ProxyCommon { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.DISK_MANIPULATOR), 0, new ModelResourceLocation("refinedstorage:disk_manipulator", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.SECURITY_MANAGER), 0, new ModelResourceLocation("refinedstorage:security_manager", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.QUARTZ_ENRICHED_IRON), 0, new ModelResourceLocation("refinedstorage:quartz_enriched_iron_block", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.STORAGE_MONITOR), 0, new ModelResourceLocation("refinedstorage:storage_monitor", "inventory")); ModelLoaderRegistry.registerLoader(new ICustomModelLoader() { @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 1976027a4..fec8e2928 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -156,6 +156,7 @@ public class ProxyCommon { registerTile(TileSecurityManager.class, "security_manager"); registerTile(TileReader.class, "reader"); registerTile(TileWriter.class, "writer"); + registerTile(TileStorageMonitor.class, "storage_monitor"); registerBlock(RSBlocks.CONTROLLER); registerBlock(RSBlocks.GRID); @@ -175,6 +176,7 @@ public class ProxyCommon { registerBlock(RSBlocks.SECURITY_MANAGER); registerBlock(RSBlocks.READER); registerBlock(RSBlocks.WRITER); + registerBlock(RSBlocks.STORAGE_MONITOR); registerBlock(RSBlocks.DETECTOR); registerBlock(RSBlocks.RELAY); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/TileEntitySpecialRendererStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/render/TileEntitySpecialRendererStorageMonitor.java new file mode 100644 index 000000000..a7d48ef2d --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/TileEntitySpecialRendererStorageMonitor.java @@ -0,0 +1,37 @@ +package com.raoulvdberge.refinedstorage.render; + +import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.ForgeHooksClient; +import org.lwjgl.opengl.GL11; + +public class TileEntitySpecialRendererStorageMonitor extends TileEntitySpecialRenderer { + @Override + public void renderTileEntityAt(TileStorageMonitor tile, double x, double y, double z, float partialTicks, int destroyStage) { + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, z); + + GlStateManager.enableRescaleNormal(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.enableAlpha(); + GlStateManager.enableLighting(); + GlStateManager.alphaFunc(GL11.GL_GREATER, 0.0F); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.scale(0.5F, 0.5F, 0.02F); + + IBakedModel model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(new ItemStack(Blocks.DIRT), null, null); + + model = ForgeHooksClient.handleCameraTransforms(model, ItemCameraTransforms.TransformType.GUI, false); + + Minecraft.getMinecraft().getRenderItem().renderItem(new ItemStack(Blocks.DIRT), model); + + GlStateManager.popMatrix(); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorageMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorageMonitor.java new file mode 100644 index 000000000..2909bf16b --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileStorageMonitor.java @@ -0,0 +1,21 @@ +package com.raoulvdberge.refinedstorage.tile; + +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeStorageMonitor; +import com.raoulvdberge.refinedstorage.tile.config.IComparable; +import com.raoulvdberge.refinedstorage.tile.config.IType; +import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; + +public class TileStorageMonitor extends TileNode { + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); + + public TileStorageMonitor() { + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(TYPE); + } + + @Override + public NetworkNodeStorageMonitor createNode() { + return new NetworkNodeStorageMonitor(this); + } +} diff --git a/src/main/resources/assets/refinedstorage/blockstates/storage_monitor.json b/src/main/resources/assets/refinedstorage/blockstates/storage_monitor.json new file mode 100644 index 000000000..88f2eceb7 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/storage_monitor.json @@ -0,0 +1,19 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "cube_all", + "textures": { + "all": "refinedstorage:blocks/machine_casing" + } + }, + "variants": { + "inventory": [ + { + "transform": "forge:default-block" + } + ], + "normal": { + "model": "cube_all" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index f74abb5f9..f75594356 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -72,6 +72,7 @@ gui.refinedstorage:security_manager.permission.4=Build gui.refinedstorage:security_manager.permission.4.tooltip=Adding or removing devices to or from the network gui.refinedstorage:security_manager.permission.5=Security gui.refinedstorage:security_manager.permission.5.tooltip=Ability to change security options +gui.refinedstorage:storage_monitor=Storage Monitor misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -221,6 +222,7 @@ block.refinedstorage:reader.name=Reader block.refinedstorage:writer.name=Writer block.refinedstorage:security_manager.name=Security Manager block.refinedstorage:quartz_enriched_iron_block.name=Block of Quartz Enriched Iron +block.refinedstorage:storage_monitor.name=Storage Monitor item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk