package com.arckenver.nations.cmdexecutor.nation; import java.math.BigDecimal; import java.util.Optional; import org.spongepowered.api.command.CommandException; import org.spongepowered.api.command.CommandResult; import org.spongepowered.api.command.CommandSource; import org.spongepowered.api.command.args.CommandContext; import org.spongepowered.api.command.spec.CommandExecutor; import org.spongepowered.api.command.spec.CommandSpec; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.service.economy.account.Account; import org.spongepowered.api.service.economy.transaction.ResultType; import org.spongepowered.api.service.economy.transaction.TransactionResult; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.format.TextColors; import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; import com.arckenver.nations.ConfigHandler; import com.arckenver.nations.DataHandler; import com.arckenver.nations.LanguageHandler; import com.arckenver.nations.NationsPlugin; import com.arckenver.nations.Utils; import com.arckenver.nations.object.Nation; import com.arckenver.nations.object.Rect; public class NationClaimOutpostExecutor implements CommandExecutor { public static void create(CommandSpec.Builder cmd) { // subcommand of NationClaimOutpost } public CommandResult execute(CommandSource src, CommandContext ctx) throws CommandException { if (src instanceof Player) { Player player = (Player) src; if (!ConfigHandler.getNode("worlds").getNode(player.getWorld().getName()).getNode("enabled").getBoolean()) { src.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_PLUGINDISABLEDINWORLD)); return CommandResult.success(); } Nation nation = DataHandler.getNationOfPlayer(player.getUniqueId()); if (nation == null) { src.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_NONATION)); return CommandResult.success(); } if (!nation.isStaff(player.getUniqueId())) { src.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_PERM_NATIONSTAFF)); return CommandResult.success(); } Location<World> loc = player.getLocation(); if (!DataHandler.canClaim(loc, false, nation.getUUID())) { src.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_TOOCLOSE)); return CommandResult.success(); } if (NationsPlugin.getEcoService() == null) { src.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_NOECO)); return CommandResult.success(); } Optional<Account> optAccount = NationsPlugin.getEcoService().getOrCreateAccount("nation-" + nation.getUUID()); if (!optAccount.isPresent()) { src.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_ECONONATION)); return CommandResult.success(); } BigDecimal price = BigDecimal.valueOf(ConfigHandler.getNode("prices", "outpostCreationPrice").getDouble()); TransactionResult result = optAccount.get().withdraw(NationsPlugin.getEcoService().getDefaultCurrency(), price, NationsPlugin.getCause()); if (result.getResult() == ResultType.ACCOUNT_NO_FUNDS) { src.sendMessage(Text.builder() .append(Text.of(TextColors.RED, LanguageHandler.ERROR_NEEDMONEYNATION.split("\\{AMOUNT\\}")[0])) .append(Utils.formatPrice(TextColors.RED, price)) .append(Text.of(TextColors.RED, LanguageHandler.ERROR_NEEDMONEYNATION.split("\\{AMOUNT\\}")[1])).build()); return CommandResult.success(); } else if (result.getResult() != ResultType.SUCCESS) { src.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_ECOTRANSACTION)); return CommandResult.success(); } nation.getRegion().addRect(new Rect(loc.getExtent().getUniqueId(), loc.getBlockX(), loc.getBlockX(), loc.getBlockZ(), loc.getBlockZ())); DataHandler.addToWorldChunks(nation); DataHandler.saveNation(nation.getUUID()); src.sendMessage(Text.of(TextColors.GREEN, LanguageHandler.SUCCESS_OUTPOST)); } else { src.sendMessage(Text.of(TextColors.RED, LanguageHandler.ERROR_NOPLAYER)); } return CommandResult.success(); } }