2018-12-21 22:46:10 +01:00
|
|
|
package com.massivecraft.factions.cmd;
|
|
|
|
|
2019-02-11 05:57:45 +01:00
|
|
|
import com.massivecraft.factions.*;
|
2018-12-21 22:46:10 +01:00
|
|
|
import com.massivecraft.factions.event.FactionDisbandEvent.PlayerDisbandReason;
|
|
|
|
import com.massivecraft.factions.struct.Permission;
|
|
|
|
import com.massivecraft.factions.struct.Role;
|
2019-02-11 05:57:45 +01:00
|
|
|
import com.massivecraft.factions.util.UtilFly;
|
2018-12-21 22:46:10 +01:00
|
|
|
import com.massivecraft.factions.zcore.fperms.Access;
|
|
|
|
import com.massivecraft.factions.zcore.fperms.PermissableAction;
|
|
|
|
import com.massivecraft.factions.zcore.util.TL;
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
|
|
|
|
|
|
|
public class CmdDisband extends FCommand {
|
|
|
|
|
|
|
|
|
2019-03-03 04:51:21 +01:00
|
|
|
private static HashMap<String, String> disbandMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
public CmdDisband() {
|
|
|
|
super();
|
|
|
|
this.aliases.add("disband");
|
|
|
|
|
|
|
|
//this.requiredArgs.add("");
|
|
|
|
this.optionalArgs.put("faction tag", "yours");
|
|
|
|
|
|
|
|
this.permission = Permission.DISBAND.node;
|
|
|
|
this.disableOnLock = true;
|
2019-06-02 20:28:42 +02:00
|
|
|
this.disableOnSpam = true;
|
2019-03-03 04:51:21 +01:00
|
|
|
|
|
|
|
senderMustBePlayer = false;
|
|
|
|
senderMustBeMember = false;
|
|
|
|
senderMustBeModerator = false;
|
|
|
|
senderMustBeColeader = false;
|
|
|
|
senderMustBeAdmin = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void perform() {
|
|
|
|
// The faction, default to your own.. but null if console sender.
|
|
|
|
Faction faction = this.argAsFaction(0, fme == null ? null : myFaction);
|
|
|
|
if (faction == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-06-02 20:28:42 +02:00
|
|
|
|
|
|
|
if (!fme.isCooldownEnded("disband")) {
|
|
|
|
fme.msg(TL.COMMAND_ONCOOOLDOWN, fme.getCooldown("disband"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-03-03 04:51:21 +01:00
|
|
|
boolean isMyFaction = fme != null && faction == myFaction;
|
|
|
|
|
|
|
|
if (isMyFaction) {
|
|
|
|
if (!assertMinRole(Role.LEADER)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (!Permission.DISBAND_ANY.has(sender, true)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-06-29 09:36:31 +02:00
|
|
|
if (fme != null && !fme.isAdminBypassing()) {
|
2019-03-03 04:51:21 +01:00
|
|
|
Access access = faction.getAccess(fme, PermissableAction.DISBAND);
|
|
|
|
if (fme.getRole() != Role.LEADER && faction.getFPlayerLeader() != fme && access != Access.ALLOW) {
|
|
|
|
fme.msg(TL.GENERIC_FPERM_NOPERMISSION, "disband " + faction.getTag());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!faction.isNormal()) {
|
|
|
|
msg(TL.COMMAND_DISBAND_IMMUTABLE.toString());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (faction.isPermanent()) {
|
|
|
|
msg(TL.COMMAND_DISBAND_MARKEDPERMANENT.toString());
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// check for tnt before disbanding.
|
|
|
|
|
2019-06-29 09:36:31 +02:00
|
|
|
if ((fme!= null && !disbandMap.containsKey(me.getUniqueId().toString())) && faction.getTnt() > 0) {
|
2019-03-03 04:51:21 +01:00
|
|
|
msg(TL.COMMAND_DISBAND_CONFIRM.toString().replace("{tnt}", faction.getTnt() + ""));
|
|
|
|
disbandMap.put(me.getUniqueId().toString(), faction.getId());
|
2019-08-02 23:01:33 +02:00
|
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(P.p, () -> disbandMap.remove(me.getUniqueId().toString()), 200L);
|
2019-03-03 04:51:21 +01:00
|
|
|
} else if (faction.getId().equals(disbandMap.get(me.getUniqueId().toString())) || faction.getTnt() == 0) {
|
2019-08-02 23:01:33 +02:00
|
|
|
if (P.p.getConfig().getBoolean("faction-disband-broadcast", true)) {
|
2019-03-03 04:51:21 +01:00
|
|
|
for (FPlayer follower : FPlayers.getInstance().getOnlinePlayers()) {
|
|
|
|
String amountString = senderIsConsole ? TL.GENERIC_SERVERADMIN.toString() : fme.describeTo(follower);
|
|
|
|
UtilFly.checkFly(this.fme, Board.getInstance().getFactionAt(new FLocation(follower)));
|
|
|
|
if (follower.getFaction() == faction) {
|
|
|
|
follower.msg(TL.COMMAND_DISBAND_BROADCAST_YOURS, amountString);
|
2019-08-02 23:01:33 +02:00
|
|
|
fme.setCooldown("disband", System.currentTimeMillis() + (P.p.getConfig().getInt("fcooldowns.f-disband") * 1000));
|
2019-03-03 04:51:21 +01:00
|
|
|
} else {
|
|
|
|
follower.msg(TL.COMMAND_DISBAND_BROADCAST_NOTYOURS, amountString, faction.getTag(follower));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
faction.disband(me, PlayerDisbandReason.COMMAND);
|
|
|
|
} else {
|
|
|
|
faction.disband(me, PlayerDisbandReason.COMMAND);
|
|
|
|
me.sendMessage(String.valueOf(TL.COMMAND_DISBAND_PLAYER));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public TL getUsageTranslation() {
|
|
|
|
return TL.COMMAND_DISBAND_DESCRIPTION;
|
|
|
|
}
|
2018-12-21 22:46:10 +01:00
|
|
|
}
|