Skip to content

Commit

Permalink
Updated Cmd Drain To Allow For Draining Per Role and Per Amount
Browse files Browse the repository at this point in the history
  • Loading branch information
Driftay committed Nov 7, 2021
1 parent b260a4f commit 94fe8a8
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 63 deletions.
2 changes: 2 additions & 0 deletions src/main/java/com/massivecraft/factions/Conf.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@ public class Conf {
public static int maxFillClaimCount = 25;
public static int maxFillClaimDistance = 5;

//Drain
public static boolean factionsDrainEnabled = false;
public static int factionDrainCooldown = 60;
//RESERVE
public static boolean useReserveSystem = true;
//AUDIT
Expand Down
63 changes: 0 additions & 63 deletions src/main/java/com/massivecraft/factions/cmd/CmdDrain.java

This file was deleted.

1 change: 1 addition & 0 deletions src/main/java/com/massivecraft/factions/cmd/FCmdRoot.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.massivecraft.factions.cmd.check.CmdWeeWoo;
import com.massivecraft.factions.cmd.chest.CmdChest;
import com.massivecraft.factions.cmd.claim.*;
import com.massivecraft.factions.cmd.drain.CmdDrain;
import com.massivecraft.factions.cmd.econ.CmdMoney;
import com.massivecraft.factions.cmd.grace.CmdGrace;
import com.massivecraft.factions.cmd.points.CmdPoints;
Expand Down
103 changes: 103 additions & 0 deletions src/main/java/com/massivecraft/factions/cmd/drain/CmdDrain.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package com.massivecraft.factions.cmd.drain;

import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.FactionsPlugin;
import com.massivecraft.factions.cmd.Aliases;
import com.massivecraft.factions.cmd.CommandContext;
import com.massivecraft.factions.cmd.CommandRequirements;
import com.massivecraft.factions.cmd.FCommand;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.CC;
import com.massivecraft.factions.util.Cooldown;
import com.massivecraft.factions.util.TimeUtil;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;

/**
* @author Saser
*/
public class CmdDrain extends FCommand {
public CmdDrain() {
this.aliases.addAll(Aliases.drain);

this.optionalArgs.put("amount", "money");
this.optionalArgs.put("role", "faction role");

this.requirements = new CommandRequirements.Builder(Permission.DRAIN)
.playerOnly()
.memberOnly()
.withAction(PermissableAction.DRAIN)
.build();
}


@Override
public void perform(CommandContext context) {
if (!Conf.factionsDrainEnabled) {
context.fPlayer.msg(TL.GENERIC_DISABLED, "Factions Drain");
return;
}
if(Cooldown.isOnCooldown(context.player, "drainCooldown")) {
long remaining = context.player.getMetadata("drainCooldown").get(0).asLong() - System.currentTimeMillis();
int remainSec = (int) (remaining / 1000L);
context.msg(CC.translate(TL.COMMAND_DRAIN_COOLDOWN.toString().replace("{seconds}", TimeUtil.formatSeconds(remainSec))));
return;
}

int calculatedAmount = 0;
boolean useRoleDrain = false;
int amountToDrain = 0;
Role roleToDrain = null;

if (context.args.size() == 2) {
amountToDrain = context.argAsInt(0);
roleToDrain = Role.fromString(context.args.get(1));
if (amountToDrain > 0) {
useRoleDrain = true;
}
}


for (FPlayer fPlayer : context.faction.getFPlayers()) {
if (context.faction.getFPlayers().size() == 1) {
context.fPlayer.msg(TL.COMMAND_DRAIN_NO_PLAYERS);
return;
}

if (FPlayers.getInstance().getByPlayer(context.player).equals(fPlayer)) {
continue; // skip the command executor
}

if (useRoleDrain) {
if (fPlayer.getRole() == roleToDrain) {
double balance = FactionsPlugin.getInstance().getEcon().getBalance(fPlayer.getPlayer());
if (balance >= amountToDrain) {
FactionsPlugin.getInstance().getEcon().withdrawPlayer(fPlayer.getPlayer(), amountToDrain);
calculatedAmount += amountToDrain;
}
}
} else {
amountToDrain = (int) FactionsPlugin.getInstance().getEcon().getBalance(fPlayer.getPlayer());
calculatedAmount += amountToDrain;
FactionsPlugin.getInstance().getEcon().withdrawPlayer(fPlayer.getPlayer(), amountToDrain);
}
}

if(useRoleDrain) {
context.msg(TL.COMMAND_DRAIN_ROLE_DRAINED_AMOUNT, roleToDrain, calculatedAmount);
} else {
context.msg(TL.COMMAND_DRAIN_RECIEVED_AMOUNT, calculatedAmount);
}

FactionsPlugin.getInstance().getEcon().depositPlayer(context.player, calculatedAmount);
Cooldown.setCooldown(context.faction, "drainCooldown", Conf.factionDrainCooldown);
}

@Override
public TL getUsageTranslation() {
return TL.COMMAND_DRAIN_DESCRIPTION;
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/massivecraft/factions/zcore/util/TL.java
Original file line number Diff line number Diff line change
Expand Up @@ -1067,9 +1067,11 @@ public enum TL {


COMMAND_DRAIN_DESCRIPTION("The ability to obtain all the money in faction members balances."),
COMMAND_DRAIN_ROLE_DRAINED_AMOUNT("&c&l[!] &fYou have drained members with %1$s Role for &b%2$s."),
COMMAND_DRAIN_NO_PLAYERS("&c&l[!] &cYou cannot drain a faction with no other members!"),
COMMAND_DRAIN_RECIEVED_AMOUNT("&c&l[!] &fYou have drained all of your faction members for &b%1$s."),
COMMAND_DRAIN_INVALID_AMOUNT("&c&l[!] &fYou cannot drain a faction with no worth."),
COMMAND_DRAIN_COOLDOWN("&c&l[!] &cYou may use /f drain again in &b{seconds} seconds&c!"),


COMMAND_WILD_DESCRIPTION("Teleport to a random location"),
Expand Down

0 comments on commit 94fe8a8

Please sign in to comment.