@Override
  public void perform() throws MassiveException {
    // Args
    MPlayer you = this.readArg();
    String newTitle = this.readArg("");

    newTitle = Txt.parse(newTitle);
    if (!Perm.TITLE_COLOR.has(sender, false)) {
      newTitle = ChatColor.stripColor(newTitle);
    }

    // MPerm
    if (!MPerm.getPermTitle().has(msender, you.getFaction(), true)) return;

    // Rank Check
    if (!msender.isUsingAdminMode() && you.getRole().isMoreThan(msender.getRole())) {
      msg("<b>You can not edit titles for higher ranks.");
      return;
    }

    // Event
    EventFactionsTitleChange event = new EventFactionsTitleChange(sender, you, newTitle);
    event.run();
    if (event.isCancelled()) return;
    newTitle = event.getNewTitle();

    // Apply
    you.setTitle(newTitle);

    // Inform
    msenderFaction.msg(
        "%s<i> changed a title: %s",
        msender.describeTo(msenderFaction, true), you.describeTo(msenderFaction, true));
  }
  @Override
  public void perform() throws MassiveException {
    // Args
    MPerm perm = this.readArg();
    Rel rel = this.readArg();
    Boolean value = this.readArg();
    Faction faction = this.readArg(msenderFaction);

    // Do the sender have the right to change perms for this faction?
    if (!MPerm.getPermPerms().has(msender, faction, true)) return;

    // Is this perm editable?
    if (!msender.isUsingAdminMode() && !perm.isEditable()) {
      msg("<b>The perm <h>%s <b>is not editable.", perm.getName());
      return;
    }

    // No change
    if (faction.getPermitted(perm).contains(rel) == value) {
      msg(
          "%s <i>already has %s <i>set to %s <i>for %s<i>.",
          faction.describeTo(msender),
          perm.getDesc(true, false),
          Txt.parse(value ? "<g>YES" : "<b>NOO"),
          rel.getColor() + rel.getDescPlayerMany());
      return;
    }

    // Apply
    faction.setRelationPermitted(perm, rel, value);

    // The following is to make sure the leader always has the right to change perms if that is our
    // goal.
    if (perm == MPerm.getPermPerms() && MPerm.getPermPerms().getStandard().contains(Rel.LEADER)) {
      faction.setRelationPermitted(MPerm.getPermPerms(), Rel.LEADER, true);
    }

    // Create messages
    List<String> messages = new ArrayList<String>();

    // Inform sender
    messages.add(Txt.titleize("Perm for " + faction.describeTo(msender, true)));
    messages.add(MPerm.getStateHeaders());
    messages.add(Txt.parse(perm.getStateInfo(faction.getPermitted(perm), true)));
    sendMessage(messages);

    // Inform faction (their message is slighly different)
    List<MPlayer> recipients = faction.getMPlayers();
    recipients.remove(msender);

    for (MPlayer recipient : recipients) {
      messages.add(
          0,
          Txt.parse(
              "<h>%s <i>set a perm for <h>%s<i>.",
              msender.describeTo(recipient, true), faction.describeTo(recipient, true)));
      recipient.sendMessage(messages);
    }
  }
 @Override
 public void change(Event e, Object[] delta, Changer.ChangeMode mode) {
   Player player = getExpr().getSingle(e);
   MPlayer mplayer = MPlayer.get(player);
   if (player == null) return;
   double power = ((Number) delta[0]).doubleValue();
   if (mode == Changer.ChangeMode.SET) {
     mplayer.setPower(power);
   }
 }
  @Override
  public void innerPerform() throws MassiveException {
    // Args
    MPlayer mplayer = this.readArg();
    boolean newValue = this.readArg(!ta.isPlayerIdGranted(mplayer.getId()));

    // MPerm
    if (!MPerm.getPermAccess().has(msender, hostFaction, true)) return;

    // Apply
    ta = ta.withPlayerId(mplayer.getId(), newValue);
    BoardColl.get().setTerritoryAccessAt(chunk, ta);

    // Inform
    this.sendAccessInfo();
  }
 @Override
 public Double convert(Player player) {
   MPlayer mplayer = MPlayer.get(player);
   return mplayer.getPower();
 }