Package erogenousbeef.bigreactors.client.gui

Source Code of erogenousbeef.bigreactors.client.gui.BeefGuiDeviceBase

package erogenousbeef.bigreactors.client.gui;

import net.minecraft.client.gui.GuiButton;
import net.minecraft.inventory.Container;
import cofh.lib.util.helpers.BlockHelper;
import erogenousbeef.bigreactors.common.BigReactors;
import erogenousbeef.bigreactors.common.block.BlockBRDevice;
import erogenousbeef.bigreactors.common.tileentity.base.TileEntityBeefBase;
import erogenousbeef.bigreactors.gui.controls.GuiIconButton;
import erogenousbeef.bigreactors.net.CommonPacketHandler;
import erogenousbeef.bigreactors.net.message.DeviceChangeExposureMessage;

public abstract class BeefGuiDeviceBase extends BeefGuiBase {

  protected static final int EXPOSURE_BUTTON_ID_BASE = 100;
  private GuiIconButton[] exposureButtons;
 
  TileEntityBeefBase _entity;
 
  public BeefGuiDeviceBase(Container container, TileEntityBeefBase tileEntity) {
    super(container);
    _entity = tileEntity;
  }

  /**
   * Used to set the icon for the front face of the machine on the exposure button panel. No other uses.
   * @return The metadata of the machine whose icon should show up in the center of the exposure buttons.
   */
  protected abstract int getBlockMetadata();
 
  private void createInventoryExposureButton(int side, int x, int y) {
    if(exposureButtons[side] != null) { throw new IllegalArgumentException("Direction already exposed"); }

    GuiIconButton newBtn = new GuiIconButton(EXPOSURE_BUTTON_ID_BASE + side, x, y, 20, 20, null);
    buttonList.add(newBtn);
    exposureButtons[side] = newBtn;
  }
 
  /**
   * Create GUI inventory exposure button grid
   * @param minLeft The leftmost coordinate for the buttons, including guiLeft
   * @param minTop The topmost coordinate for the buttons, including guiTop
   */
  protected void createInventoryExposureButtons(int minLeft, int minTop) {
    // Do this here to make the GUI resize-proof
    exposureButtons = new GuiIconButton[6];
    for(int i = 0; i < 6; i++) {
      exposureButtons[i] = null;
    }

    int facing = _entity.getFacing();   
    createInventoryExposureButton(BlockHelper.SIDE_LEFT[facing], minLeft, minTop + 21);
    createInventoryExposureButton(BlockHelper.SIDE_RIGHT[facing], minLeft + 42, minTop + 21);
    createInventoryExposureButton(facing, minLeft + 21, minTop + 21);
    createInventoryExposureButton(BlockHelper.SIDE_ABOVE[facing], minLeft + 21, minTop);
    createInventoryExposureButton(BlockHelper.SIDE_BELOW[facing], minLeft + 21, minTop + 42);
    createInventoryExposureButton(BlockHelper.SIDE_OPPOSITE[facing], minLeft + 42, minTop + 42);

    exposureButtons[facing].setIcon(BigReactors.blockDevice.getIcon(4, getBlockMetadata()));
    exposureButtons[facing].enabled = false;
  }

  @Override
  public void updateScreen() {
    super.updateScreen();
    updateInventoryExposures();
  }

  @Override
  protected void actionPerformed(GuiButton button) {
    super.actionPerformed(button);
    if(button.id >= EXPOSURE_BUTTON_ID_BASE && button.id < EXPOSURE_BUTTON_ID_BASE + 6) {
      // TODO: Figure out how to detect rightclicks
            CommonPacketHandler.INSTANCE.sendToServer(new DeviceChangeExposureMessage(_entity.xCoord, _entity.yCoord, _entity.zCoord, button.id - EXPOSURE_BUTTON_ID_BASE, true));
    }
  }
 
  protected void updateInventoryExposures() {
    int facing = _entity.getFacing();
    BlockBRDevice deviceBlock = (BlockBRDevice)BigReactors.blockDevice;
    for(int side = 0; side < 6; side++) {
      if(side == facing) { continue; }
      exposureButtons[side].setIcon( deviceBlock.getIconFromTileEntity(_entity, BlockBRDevice.META_CYANITE_REPROCESSOR, side) );
    }
  }
}
TOP

Related Classes of erogenousbeef.bigreactors.client.gui.BeefGuiDeviceBase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.