add stats command, add tab complete to poll next
This commit is contained in:
parent
917f0ac795
commit
d6f2b5afa6
|
@ -85,6 +85,7 @@ public interface UserDoc {
|
|||
int mutationtokens();
|
||||
String mc_last_sign_in_ip();
|
||||
@Nullable Date trial_expires_at();
|
||||
Map<String, Map<String, Map<String, Object>>> stats_value();
|
||||
Map<String, Map<String, Boolean>> mc_permissions_by_realm();
|
||||
Map<String, Map<String, String>> mc_settings_by_profile();
|
||||
Map<String, String> classes();
|
||||
|
|
|
@ -100,6 +100,11 @@ public class LocalUserDocument extends SimplePlayerId implements User {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Map<String, Map<String, Object>>> stats_value() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Map<String, Boolean>> mc_permissions_by_realm() {
|
||||
return ImmutableMap.of(
|
||||
|
|
|
@ -24,13 +24,7 @@ import tc.oc.commons.bukkit.chat.TextComponentRenderer;
|
|||
import tc.oc.commons.bukkit.chat.TranslatableComponentRenderer;
|
||||
import tc.oc.commons.bukkit.chat.UserTextComponent;
|
||||
import tc.oc.commons.bukkit.chat.UserTextComponentRenderer;
|
||||
import tc.oc.commons.bukkit.commands.PermissionCommands;
|
||||
import tc.oc.commons.bukkit.commands.ServerCommands;
|
||||
import tc.oc.commons.bukkit.commands.ServerVisibilityCommands;
|
||||
import tc.oc.commons.bukkit.commands.SkinCommands;
|
||||
import tc.oc.commons.bukkit.commands.TraceCommands;
|
||||
import tc.oc.commons.bukkit.commands.UserCommands;
|
||||
import tc.oc.commons.bukkit.commands.UserFinder;
|
||||
import tc.oc.commons.bukkit.commands.*;
|
||||
import tc.oc.commons.bukkit.debug.LeakListener;
|
||||
import tc.oc.commons.bukkit.event.targeted.TargetedEventManifest;
|
||||
import tc.oc.commons.bukkit.format.ServerFormatter;
|
||||
|
@ -68,6 +62,8 @@ import tc.oc.commons.bukkit.respack.ResourcePackManager;
|
|||
import tc.oc.commons.bukkit.restart.RestartCommands;
|
||||
import tc.oc.commons.bukkit.sessions.SessionListener;
|
||||
import tc.oc.commons.bukkit.settings.SettingManifest;
|
||||
import tc.oc.commons.bukkit.stats.StatsCommands;
|
||||
import tc.oc.commons.bukkit.stats.StatsManifest;
|
||||
import tc.oc.commons.bukkit.suspend.SuspendListener;
|
||||
import tc.oc.commons.bukkit.tablist.PlayerTabEntry;
|
||||
import tc.oc.commons.bukkit.tablist.TabRender;
|
||||
|
@ -112,6 +108,7 @@ public final class CommonsBukkitManifest extends HybridManifest {
|
|||
install(new NavigatorManifest());
|
||||
install(new RaindropManifest());
|
||||
install(new TokenManifest());
|
||||
install(new StatsManifest());
|
||||
install(new PunishmentManifest());
|
||||
|
||||
// These are already bound as facets, so they only need to be exposed
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
package tc.oc.commons.bukkit.stats;
|
||||
|
||||
import com.sk89q.minecraft.util.commands.Command;
|
||||
import com.sk89q.minecraft.util.commands.CommandContext;
|
||||
import com.sk89q.minecraft.util.commands.CommandException;
|
||||
import com.sk89q.minecraft.util.commands.CommandPermissions;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import tc.oc.commons.bukkit.chat.Audiences;
|
||||
import tc.oc.commons.bukkit.chat.HeaderComponent;
|
||||
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.Audience;
|
||||
import tc.oc.commons.core.chat.Component;
|
||||
import tc.oc.commons.core.commands.CommandFutureCallback;
|
||||
import tc.oc.commons.core.commands.Commands;
|
||||
import tc.oc.minecraft.scheduler.SyncExecutor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class StatsCommands implements Commands {
|
||||
|
||||
private final SyncExecutor syncExecutor;
|
||||
private final UserFinder userFinder;
|
||||
private final Audiences audiences;
|
||||
private final IdentityProvider identityProvider;
|
||||
|
||||
@Inject
|
||||
StatsCommands(UserFinder userFinder, SyncExecutor executor, Audiences audiences, IdentityProvider identityProvider) {
|
||||
this.userFinder = userFinder;
|
||||
this.syncExecutor = executor;
|
||||
this.audiences = audiences;
|
||||
this.identityProvider = identityProvider;
|
||||
}
|
||||
|
||||
@Command(
|
||||
aliases = { "stats"},
|
||||
usage = "<player>",
|
||||
desc = "Shows when a player was last seen",
|
||||
min = 0,
|
||||
max = 1
|
||||
)
|
||||
@CommandPermissions("projectares.stats")
|
||||
public void listStats(final CommandContext args, final CommandSender sender) throws CommandException {
|
||||
syncExecutor.callback(
|
||||
userFinder.findUser(sender, args, 0, UserFinder.Default.SENDER),
|
||||
CommandFutureCallback.onSuccess(sender, args, result -> {
|
||||
HashMap<String, Double> stats = StatsUtil.getStats(result.user);
|
||||
|
||||
Audience audience = audiences.get(sender);
|
||||
|
||||
audience.sendMessage(new HeaderComponent(new Component(ChatColor.AQUA)
|
||||
.translate("stats.list", new PlayerComponent(identityProvider.createIdentity(result)))));
|
||||
audience.sendMessage(new Component(ChatColor.AQUA)
|
||||
.translate("stats.kills", new Component(String.format("%,d", (int)(double)stats.get("kills")), ChatColor.BLUE)));
|
||||
audience.sendMessage(new Component(ChatColor.AQUA)
|
||||
.translate("stats.deaths", new Component(String.format("%,d", (int)(double)stats.get("deaths")), ChatColor.BLUE)));
|
||||
audience.sendMessage(new Component(ChatColor.AQUA)
|
||||
.translate("stats.kd", new Component(String.format("%.2f", stats.get("kd")), ChatColor.BLUE)));
|
||||
audience.sendMessage(new Component(ChatColor.AQUA)
|
||||
.translate("stats.wools", new Component(String.format("%,d", (int)(double)stats.get("wool_placed")), ChatColor.BLUE)));
|
||||
audience.sendMessage(new Component(ChatColor.AQUA)
|
||||
.translate("stats.cores", new Component(String.format("%,d", (int)(double)stats.get("cores_leaked")), ChatColor.BLUE)));
|
||||
audience.sendMessage(new Component(ChatColor.AQUA)
|
||||
.translate("stats.monuments", new Component(String.format("%,d", (int)(double)stats.get("destroyables_destroyed")), ChatColor.BLUE)));
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package tc.oc.commons.bukkit.stats;
|
||||
|
||||
import tc.oc.commons.core.inject.HybridManifest;
|
||||
import tc.oc.commons.core.plugin.PluginFacetBinder;
|
||||
|
||||
public class StatsManifest extends HybridManifest {
|
||||
@Override
|
||||
protected void configure() {
|
||||
requestStaticInjection(StatsUtil.class);
|
||||
|
||||
new PluginFacetBinder(binder())
|
||||
.register(StatsCommands.class);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
package tc.oc.commons.bukkit.stats;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import tc.oc.api.bukkit.users.BukkitUserStore;
|
||||
import tc.oc.api.docs.User;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class StatsUtil {
|
||||
|
||||
@Inject
|
||||
private static BukkitUserStore userStore;
|
||||
|
||||
public static HashMap<String, Double> getStats(Player player) {
|
||||
return getStats(userStore.getUser(player));
|
||||
}
|
||||
|
||||
public static HashMap<String, Double> getStats(User user) {
|
||||
HashMap<String, Double> map = new HashMap<>();
|
||||
|
||||
if (user.stats_value() != null) {
|
||||
Map<String, Map<String, Object>> statsCheck = user.stats_value().get("eternity");
|
||||
if (statsCheck != null) {
|
||||
Map<String, Object> stats = statsCheck.get("global");
|
||||
if (stats != null) {
|
||||
map.put("kills", getDoubleValue(stats.get("kills")));
|
||||
map.put("deaths", getDoubleValue(stats.get("deaths")));
|
||||
map.put("kd", getDoubleValue(stats.get("kd")));
|
||||
map.put("kk", getDoubleValue(stats.get("kk")));
|
||||
map.put("wool_placed", getDoubleValue(stats.get("wool_placed")));
|
||||
map.put("cores_leaked", getDoubleValue(stats.get("cores_leaked")));
|
||||
map.put("destroyables_destroyed", getDoubleValue(stats.get("destroyables_destroyed")));
|
||||
map.put("tkrate", getDoubleValue(stats.get("tkrate")));
|
||||
|
||||
return map;
|
||||
}
|
||||
}
|
||||
}
|
||||
map.put("kills", 0.0);
|
||||
map.put("deaths", 0.0);
|
||||
map.put("kd", 0.0);
|
||||
map.put("kk", 0.0);
|
||||
map.put("wool_placed", 0.0);
|
||||
map.put("cores_leaked", 0.0);
|
||||
map.put("destroyables_destroyed", 0.0);
|
||||
map.put("tkrate", 0.0);
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
private static Double getDoubleValue(Object value) {
|
||||
if (value == null) {
|
||||
return 0.0;
|
||||
}
|
||||
return (Double)value;
|
||||
}
|
||||
|
||||
}
|
|
@ -203,6 +203,16 @@ mutationtokens.balance.other = {0} has {1} {2}
|
|||
mutationtokens.singular = Mutation Token
|
||||
mutationtokens.plural = Mutation Tokens
|
||||
|
||||
stats.list = {0}'s Stats
|
||||
stats.kills = Kills: {0}
|
||||
stats.deaths = Deaths: {0}
|
||||
stats.kd = KD: {0}
|
||||
stats.kk = KK: {0}
|
||||
stats.wools = Wools Placed: {0}
|
||||
stats.cores = Cores Leaked: {0}
|
||||
stats.monuments = Monuments Destroyed: {0}
|
||||
stats.teamkills = TK: {0}
|
||||
|
||||
material.Iron = Iron
|
||||
material.gold = Gold
|
||||
material.quartz = Quartz
|
||||
|
@ -211,13 +221,21 @@ punishment.prefix = Punish
|
|||
punishment.lookup = {0}'s Punishments
|
||||
punishment.warning = WARNING
|
||||
|
||||
punishment.screen.warn = You were warned by a staff member {0}
|
||||
punishment.screen.kick = You were kicked by a staff member {0}
|
||||
punishment.screen.ban = You were banned by a staff member {0}
|
||||
punishment.screen.forum_warn = You were forum warned by a staff member {0}
|
||||
punishment.screen.forum_ban = You were forum banned by a staff member {0}
|
||||
punishment.screen.tourney_ban = You were tournament banned by a staff member {0}
|
||||
punishment.screen.suspension = You were suspended by a staff member {0}
|
||||
punishment.screen.unknown = You were issued an unknown punishment by a staff member {0}
|
||||
punishment.screen.WARN = You were warned by a staff member {0}
|
||||
punishment.screen.KICK = You were kicked by a staff member {0}
|
||||
punishment.screen.BAN = You were banned by a staff member {0}
|
||||
punishment.screen.FORUM_WARN = You were forum warned by a staff member {0}
|
||||
punishment.screen.FORUM_BAN = You were forum banned by a staff member {0}
|
||||
punishment.screen.TOURNEY_BAN = You were tournament banned by a staff member {0}
|
||||
punishment.screen.SUSPENSION = You were suspended by a staff member {0}
|
||||
punishment.screen.UNKNOWN = You were issued an unknown punishment by a staff member {0}
|
||||
punishment.screen.rules = Read our server rules at {0}
|
||||
punishment.screen.appeal = or contest your punishment at {0}
|
||||
punishment.action.WARN = Warned
|
||||
punishment.action.KICK = Kicked
|
||||
punishment.action.BAN = Banned
|
||||
punishment.action.FORUM_WARN = Forum Warned
|
||||
punishment.action.FORUM_BAN = Forum Baned
|
||||
punishment.action.TOURNEY_BAN = Tourney Baned
|
||||
punishment.action.UNKNOWN = Unknown
|
||||
|
||||
|
|
|
@ -332,3 +332,14 @@ broadcast.alliancesNotAllowed = Creating alliances with other players is NOT all
|
|||
|
||||
countdown.chestsRefill = Chests will refill in {0}
|
||||
countdown.glowingEffect = Glowing effect in {0}
|
||||
|
||||
stats.ui.list = 's Stats
|
||||
stats.ui.kills = Kills:
|
||||
stats.ui.deaths = Deaths:
|
||||
stats.ui.kd = KD:
|
||||
stats.ui.kk = KK:
|
||||
stats.ui.wools = Wools Placed:
|
||||
stats.ui.cores = Cores Leaked:
|
||||
stats.ui.monuments = Monuments Destroyed:
|
||||
stats.ui.teamkills = TK:
|
||||
|
||||
|
|
|
@ -30,6 +30,8 @@ import tc.oc.pgm.polls.PollNextMap;
|
|||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static tc.oc.commons.bukkit.commands.CommandUtils.newCommandException;
|
||||
|
||||
public class PollCommands implements Commands {
|
||||
|
@ -126,7 +128,12 @@ public class PollCommands implements Commands {
|
|||
max = -1
|
||||
)
|
||||
@CommandPermissions("poll.next")
|
||||
public static void pollNext(CommandContext args, CommandSender sender) throws CommandException {
|
||||
public static List<String> pollNext(CommandContext args, CommandSender sender) throws CommandException {
|
||||
final String mapName = args.argsLength() > 0 ? args.getJoinedStrings(0) : "";
|
||||
if(args.getSuggestionContext() != null) {
|
||||
return CommandUtils.completeMapName(mapName);
|
||||
}
|
||||
|
||||
if (restartManager.isRestartRequested()) {
|
||||
throw newCommandException(sender, new TranslatableComponent("poll.map.restarting"));
|
||||
}
|
||||
|
@ -149,6 +156,7 @@ public class PollCommands implements Commands {
|
|||
}
|
||||
|
||||
startPoll(new PollNextMap(PGM.getPollManager(), Bukkit.getServer(), sender, initiator.getName(), PGM.getMatchManager(), nextMap));
|
||||
return null;
|
||||
}
|
||||
|
||||
@Command(
|
||||
|
|
|
@ -3,16 +3,21 @@ package tc.oc.pgm.menu.gui;
|
|||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import tc.oc.commons.bukkit.chat.PlayerComponent;
|
||||
import tc.oc.commons.bukkit.gui.buttons.Button;
|
||||
import tc.oc.commons.bukkit.gui.interfaces.ChestInterface;
|
||||
import tc.oc.commons.bukkit.stats.StatsUtil;
|
||||
import tc.oc.commons.bukkit.tokens.TokenUtil;
|
||||
import tc.oc.commons.bukkit.util.Constants;
|
||||
import tc.oc.commons.bukkit.util.ItemCreator;
|
||||
import tc.oc.commons.core.chat.Component;
|
||||
import tc.oc.pgm.PGMTranslations;
|
||||
import tc.oc.pgm.tokens.gui.MainTokenButton;
|
||||
import tc.oc.pgm.tokens.gui.MutationTokenInterface;
|
||||
import tc.oc.pgm.tokens.gui.TokenPurchaseInterface;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class MainMenuInterface extends ChestInterface {
|
||||
|
@ -40,11 +45,19 @@ public class MainMenuInterface extends ChestInterface {
|
|||
MainTokenButton.getInstance().setSlot(11);
|
||||
buttons.add(MainTokenButton.getInstance());
|
||||
|
||||
HashMap<String, Double> stats = StatsUtil.getStats(getPlayer());
|
||||
|
||||
buttons.add(new Button(
|
||||
new ItemCreator(Material.SKULL_ITEM)
|
||||
.setName(Constants.PREFIX + "Stats")
|
||||
.setData(3)
|
||||
, 13)); //TODO -- show stats in lore
|
||||
new ItemCreator(Material.GOLDEN_APPLE)
|
||||
.setData(1)
|
||||
.setName(Constants.PREFIX + getPlayer().getDisplayName() + PGMTranslations.get().t("stats.ui.list", getPlayer()))
|
||||
.addLore(ChatColor.AQUA + PGMTranslations.get().t("stats.ui.kills", getPlayer()) + ChatColor.BLUE + String.format("%,d", (int)(double)stats.get("kills")))
|
||||
.addLore(ChatColor.AQUA + PGMTranslations.get().t("stats.ui.deaths", getPlayer()) + ChatColor.BLUE + String.format("%,d", (int)(double)stats.get("deaths")))
|
||||
.addLore(ChatColor.AQUA + PGMTranslations.get().t("stats.ui.kd", getPlayer()) + ChatColor.BLUE + String.format("%.2f", stats.get("kd")))
|
||||
.addLore(ChatColor.AQUA + PGMTranslations.get().t("stats.ui.wools", getPlayer()) + ChatColor.BLUE + String.format("%,d", (int)(double)stats.get("wool_placed")))
|
||||
.addLore(ChatColor.AQUA + PGMTranslations.get().t("stats.ui.cores", getPlayer()) + ChatColor.BLUE + String.format("%,d", (int)(double)stats.get("cores_leaked")))
|
||||
.addLore(ChatColor.AQUA + PGMTranslations.get().t("stats.ui.monuments", getPlayer()) + ChatColor.BLUE + String.format("%,d", (int)(double)stats.get("destroyables_destroyed")))
|
||||
, 13));
|
||||
|
||||
buttons.add(new Button(
|
||||
new ItemCreator(Material.BOOK_AND_QUILL)
|
||||
|
|
|
@ -8,6 +8,7 @@ import tc.oc.commons.bukkit.util.Constants;
|
|||
import tc.oc.commons.bukkit.util.ItemCreator;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import tc.oc.pgm.menu.gui.MainMenuInterface;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -18,7 +19,7 @@ public class MainTokenMenu extends ChestInterface {
|
|||
private Player player;
|
||||
|
||||
public MainTokenMenu(Player player) {
|
||||
super(player, new ArrayList<Button>(), 27, "Token Menu", getInstance());
|
||||
super(player, new ArrayList<Button>(), 36, "Token Menu", getInstance());
|
||||
this.player = player;
|
||||
updateButtons();
|
||||
instance = this;
|
||||
|
@ -78,6 +79,15 @@ public class MainTokenMenu extends ChestInterface {
|
|||
}
|
||||
});
|
||||
|
||||
buttons.add(new Button(new ItemCreator(Material.WOOL)
|
||||
.setData(14)
|
||||
.setName( ChatColor.GREEN + "Cancel" ), 31){
|
||||
@Override
|
||||
public void function(Player player) {
|
||||
player.openInventory(new MainMenuInterface(player).getInventory());
|
||||
}
|
||||
});
|
||||
|
||||
setButtons(buttons);
|
||||
updateInventory();
|
||||
}
|
||||
|
|
|
@ -210,3 +210,7 @@ permissions:
|
|||
pgm.listing.announce:
|
||||
description: Allows the /announce command
|
||||
default: op
|
||||
|
||||
projectares.stats:
|
||||
description: Allows the player to use the /stats command
|
||||
default: true
|
||||
|
|
Loading…
Reference in New Issue