Exemplo n.º 1
0
  @Override
  public void doAction(Side to) {
    Address address = this.getSignAddress();

    // Keep track on the subring level we are in
    int mask = this.getNetmask();
    if (mask < 8) {
      Stack<Integer> end = this.getEnd();
      if (to.equals(Side.LEVER_ON) && (end.isEmpty() || mask > end.peek())) {
        end.push(mask);
        if (ByteCart.debug) ByteCart.log.info("ByteCart : pushing mask " + mask + " on stack");
      } else if (to.equals(Side.LEVER_OFF) && !end.isEmpty()) {
        if (ByteCart.debug)
          ByteCart.log.info("ByteCart : popping mask " + end.peek() + " from stack");

        end.pop();
      }
    }
    save();

    // if we are not in the good region, skip update
    if (getContent().getCurrent() != getContent().getRegion()) return;

    if (address.isValid() && this.getContent().isFullreset()) {
      if (this.getNetmask() == 8) {
        UpdaterClearStationEvent event = new UpdaterClearStationEvent(this, address);
        Bukkit.getServer().getPluginManager().callEvent(event);
      } else {
        UpdaterClearSubnetEvent event =
            new UpdaterClearSubnetEvent(this, address, 256 >> this.getNetmask());
        Bukkit.getServer().getPluginManager().callEvent(event);
      }
    } else {
      UpdaterSignInvalidateEvent event = new UpdaterSignInvalidateEvent(this);
      Bukkit.getServer().getPluginManager().callEvent(event);
      if (!this.getContent().isFullreset()) return;
    }
    address.remove();
    if (ByteCart.debug) ByteCart.log.info("ByteCart: removing address");
  }