package tc.oc.commons.bukkit.raindrops; import javax.inject.Inject; import com.sk89q.minecraft.util.commands.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandException; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.TranslatableComponent; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import tc.oc.minecraft.scheduler.SyncExecutor; import tc.oc.commons.bukkit.chat.Audiences; import tc.oc.commons.bukkit.chat.PlayerComponent; import tc.oc.commons.bukkit.commands.UserFinder; import tc.oc.commons.bukkit.nick.IdentityProvider; import tc.oc.commons.core.chat.Component; import tc.oc.commons.core.commands.CommandFutureCallback; import tc.oc.commons.core.commands.Commands; /** * General raindrop related commands */ public class RaindropCommands implements Commands { private final UserFinder userFinder; private final SyncExecutor executor; private final Audiences audiences; private final IdentityProvider identityProvider; @Inject RaindropCommands(UserFinder userFinder, SyncExecutor executor, Audiences audiences, IdentityProvider identityProvider) { this.userFinder = userFinder; this.executor = executor; this.audiences = audiences; this.identityProvider = identityProvider; } @Command( aliases = {"raindrops", "rds"}, usage = "[player]", desc = "Shows the amount of raindrops that you have", min = 0, max = 1 ) public void raindrops(final CommandContext args, final CommandSender sender) throws CommandException { executor.callback( userFinder.findUser(sender, args, 0, UserFinder.Default.SENDER), CommandFutureCallback.onSuccess(sender, args, result -> { final boolean self = sender instanceof Player && ((Player) sender).getUniqueId().equals(result.user.uuid()); final int raindrops; if(result.disguised && result.last_session != null) { // Generate a pseudo-random amount of raindrops between ~1000 and 100,000 raindrops = 10000000 / (100 + Math.abs(result.last_session.nickname().hashCode() % 9900)); } else { raindrops = result.user.raindrops(); } audiences.get(sender).sendMessage( new Component(ChatColor.WHITE) .translate(self ? "raindrops.balance.self" : "raindrops.balance.other", new PlayerComponent(identityProvider.createIdentity(result)), new Component(String.format("%,d", raindrops), ChatColor.AQUA), new TranslatableComponent(Math.abs(raindrops) == 1 ? "raindrops.singular" : "raindrops.plural")) ); }) ); } }