/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.gui.containers; import cofh.api.energy.EnergyStorage; import mods.railcraft.api.crafting.RailcraftCraftingManager; import mods.railcraft.common.gui.widgets.RFEnergyIndicator; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.Slot; import mods.railcraft.common.blocks.machine.alpha.TileRockCrusher; import mods.railcraft.common.gui.widgets.IndicatorWidget; import mods.railcraft.common.gui.slots.SlotOutput; import mods.railcraft.common.gui.slots.SlotRailcraft; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; public class ContainerRockCrusher extends RailcraftContainer { private final TileRockCrusher tile; private int lastProcessTime; private final RFEnergyIndicator energyIndicator; public ContainerRockCrusher(InventoryPlayer inventoryplayer, TileRockCrusher crusher) { super(crusher); this.tile = crusher; energyIndicator = new RFEnergyIndicator(tile); addWidget(new IndicatorWidget(energyIndicator, 157, 23, 176, 53, 6, 48)); for (int i = 0; i < 3; i++) { for (int k = 0; k < 3; k++) { addSlot(new SlotRockCrusher(crusher, i * 3 + k, 8 + k * 18, 21 + i * 18)); } } for (int i = 0; i < 3; i++) { for (int k = 0; k < 3; k++) { addSlot(new SlotOutput(crusher, 9 + i * 3 + k, 98 + k * 18, 21 + i * 18)); } } for (int i = 0; i < 3; i++) { for (int k = 0; k < 9; k++) { addSlot(new Slot(inventoryplayer, k + i * 9 + 9, 8 + k * 18, 84 + i * 18)); } } for (int j = 0; j < 9; j++) { addSlot(new Slot(inventoryplayer, j, 8 + j * 18, 142)); } } @Override public void addCraftingToCrafters(ICrafting icrafting) { super.addCraftingToCrafters(icrafting); icrafting.sendProgressBarUpdate(this, 0, tile.getProcessTime()); EnergyStorage storage = tile.getEnergyStorage(); if (storage != null) icrafting.sendProgressBarUpdate(this, 1, storage.getEnergyStored()); } @Override public void sendUpdateToClient() { super.sendUpdateToClient(); EnergyStorage storage = tile.getEnergyStorage(); for (Object crafter : crafters) { ICrafting icrafting = (ICrafting) crafter; if (lastProcessTime != tile.getProcessTime()) icrafting.sendProgressBarUpdate(this, 0, tile.getProcessTime()); if (storage != null) icrafting.sendProgressBarUpdate(this, 2, storage.getEnergyStored()); } lastProcessTime = tile.getProcessTime(); } @Override public void updateProgressBar(int id, int data) { switch (id) { case 0: tile.setProcessTime(data); break; case 1: energyIndicator.setEnergy(data); break; case 2: energyIndicator.updateEnergy(data); break; } } public class SlotRockCrusher extends SlotRailcraft { public SlotRockCrusher(IInventory iinventory, int slotIndex, int posX, int posY) { super(iinventory, slotIndex, posX, posY); } @Override public boolean isItemValid(ItemStack stack) { if (stack != null && RailcraftCraftingManager.rockCrusher.getRecipe(stack) != null) return true; return false; } } }