Exemplo n.º 1
0
  @Override
  protected void mouseClicked(int i, int j, int k) {
    super.mouseClicked(i, j, k);

    int cornerX = (width - xSize) / 2;
    int cornerY = (height - ySize) / 2;

    int position = getSlotAtLocation(i - cornerX, j - cornerY);

    AdvancedSlot slot = null;

    if (position < 0) return;

    slot = slots[position];

    if (slot instanceof TriggerSlot && _container.hasTriggers()) {
      TriggerSlot triggerSlot = (TriggerSlot) slot;

      ITrigger changed = null;
      if (triggerSlot.getTrigger() == null) {

        if (k == 0) {
          changed = _container.getFirstTrigger();
        } else {
          changed = _container.getLastTrigger();
        }

      } else {
        Iterator<ITrigger> it = _container.getTriggerIterator(k != 0);

        for (; it.hasNext(); ) {
          ITrigger trigger = it.next();

          if (!it.hasNext()) {
            changed = null;
            break;
          }

          if (trigger == triggerSlot.getTrigger()) {
            changed = it.next();
            break;
          }
        }
      }

      _container.setTrigger(position, changed, true);

      if (_container.getGateOrdinal() >= GateKind.AND_3.ordinal()) {
        _container.setTriggerParameter(position, null, true);
      }
    } else if (slot instanceof ActionSlot) {
      ActionSlot actionSlot = (ActionSlot) slot;

      IAction changed = null;
      if (actionSlot.getAction() == null) {

        if (k == 0) {
          changed = _container.getFirstAction();
        } else {
          changed = _container.getLastAction();
        }

      } else {
        Iterator<IAction> it = _container.getActionIterator(k != 0);

        for (; it.hasNext(); ) {
          IAction action = it.next();

          if (!it.hasNext()) {
            changed = null;
            break;
          }

          if (action == actionSlot.getAction()) {
            changed = it.next();
            break;
          }
        }
      }

      _container.setAction(position - nbEntries, changed, true);
    } else if (slot instanceof TriggerParameterSlot) {
      TriggerSlot trigger = (TriggerSlot) slots[position - nbEntries * 2];

      if (trigger.isDefined() && trigger.getTrigger().hasParameter()) {
        ITriggerParameter param = trigger.getTrigger().createParameter();

        if (param != null) {
          param.set(mc.thePlayer.inventory.getItemStack());
          _container.setTriggerParameter(position - nbEntries * 2, param, true);
        }
      }
    }

    _container.markDirty();
  }