killstreak command
This commit is contained in:
parent
dff4f13460
commit
3649f5a829
3 changed files with 117 additions and 3 deletions
|
|
@ -6,6 +6,8 @@ import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
|
||||||
|
|
||||||
public class Killstreak extends JavaPlugin implements Listener {
|
public class Killstreak extends JavaPlugin implements Listener {
|
||||||
private static Plugin invisNinja;
|
private static Plugin invisNinja;
|
||||||
public static Plugin getInvisNinja() {
|
public static Plugin getInvisNinja() {
|
||||||
|
|
@ -24,6 +26,9 @@ public class Killstreak extends JavaPlugin implements Listener {
|
||||||
new KillstreakManager(this);
|
new KillstreakManager(this);
|
||||||
pm.registerEvents(this, this);
|
pm.registerEvents(this, this);
|
||||||
pm.registerEvents(new PlayerManager(this), this);
|
pm.registerEvents(new PlayerManager(this), this);
|
||||||
|
this.getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, commands -> {
|
||||||
|
commands.registrar().register(KillstreakCommand.createCommand());
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
getLogger().warning("Could not find PlaceholderAPI! This plugin is required.");
|
getLogger().warning("Could not find PlaceholderAPI! This plugin is required.");
|
||||||
pm.disablePlugin(this);
|
pm.disablePlugin(this);
|
||||||
|
|
|
||||||
108
src/main/java/pl/piecuu/killstreak/KillstreakCommand.java
Normal file
108
src/main/java/pl/piecuu/killstreak/KillstreakCommand.java
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
package pl.piecuu.killstreak;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.destroystokyo.paper.profile.PlayerProfile;
|
||||||
|
import com.mojang.brigadier.arguments.LongArgumentType;
|
||||||
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||||
|
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
||||||
|
import com.mojang.brigadier.context.CommandContext;
|
||||||
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
|
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||||
|
|
||||||
|
import io.papermc.paper.command.brigadier.CommandSourceStack;
|
||||||
|
import io.papermc.paper.command.brigadier.Commands;
|
||||||
|
import io.papermc.paper.command.brigadier.argument.ArgumentTypes;
|
||||||
|
import io.papermc.paper.command.brigadier.argument.resolvers.PlayerProfileListResolver;
|
||||||
|
import io.papermc.paper.command.brigadier.argument.resolvers.selector.PlayerSelectorArgumentResolver;
|
||||||
|
|
||||||
|
public class KillstreakCommand {
|
||||||
|
public static LiteralCommandNode<CommandSourceStack> createCommand() {
|
||||||
|
RequiredArgumentBuilder<CommandSourceStack,PlayerSelectorArgumentResolver> playerArgument = Commands.argument("player", ArgumentTypes.player());
|
||||||
|
|
||||||
|
LiteralArgumentBuilder<CommandSourceStack> ks = Commands.literal("ks")
|
||||||
|
.then(Commands.literal("get")
|
||||||
|
.requires(s -> s.getSender().hasPermission("ks.get"))
|
||||||
|
.executes(KillstreakCommand::getOwnKillstreak)
|
||||||
|
.then(Commands.argument("profile", ArgumentTypes.playerProfiles())
|
||||||
|
.requires(s -> s.getSender().hasPermission("ks.admin.get"))
|
||||||
|
.executes(KillstreakCommand::getOtherKillstreak)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.then(Commands.literal("set")
|
||||||
|
.then(playerArgument.then(Commands.argument("killstreak", LongArgumentType.longArg(0L, 999999L))
|
||||||
|
.requires(s -> s.getSender().hasPermission("ks.admin.set"))
|
||||||
|
.executes(KillstreakCommand::setKillstreak)
|
||||||
|
))
|
||||||
|
)
|
||||||
|
.then(Commands.literal("reset")
|
||||||
|
.then(playerArgument
|
||||||
|
.requires(s -> s.getSender().hasPermission("ks.admin.reset"))
|
||||||
|
.executes(KillstreakCommand::resetKillstreak)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return ks.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Player getFirstPlayerFromCtx(CommandContext<CommandSourceStack> ctx) throws CommandSyntaxException {
|
||||||
|
final PlayerSelectorArgumentResolver playerResolver = ctx.getArgument("player", PlayerSelectorArgumentResolver.class);
|
||||||
|
return playerResolver.resolve(ctx.getSource()).getFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static OfflinePlayer getOfflinePlayerFromCtx(CommandContext<CommandSourceStack> ctx) throws CommandSyntaxException {
|
||||||
|
final PlayerProfileListResolver profilesResolver = ctx.getArgument("profile", PlayerProfileListResolver.class);
|
||||||
|
final Collection<PlayerProfile> foundProfiles = profilesResolver.resolve(ctx.getSource());
|
||||||
|
|
||||||
|
//for (final PlayerProfile profile : foundProfiles) {}
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(foundProfiles.iterator().next().getId());
|
||||||
|
return offlinePlayer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int resetKillstreak(CommandContext<CommandSourceStack> ctx) throws CommandSyntaxException {
|
||||||
|
final Player player = getFirstPlayerFromCtx(ctx);
|
||||||
|
KillstreakManager km = KillstreakManager.getInstance();
|
||||||
|
|
||||||
|
km.resetKillstreak(player);
|
||||||
|
|
||||||
|
ctx.getSource().getSender().sendMessage(km.getKillstreakComponent(0L));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int setKillstreak(CommandContext<CommandSourceStack> ctx) throws CommandSyntaxException {
|
||||||
|
final Player player = getFirstPlayerFromCtx(ctx);
|
||||||
|
final long killstreak = LongArgumentType.getLong(ctx, "killstreak");
|
||||||
|
|
||||||
|
KillstreakManager km = KillstreakManager.getInstance();
|
||||||
|
km.setKillstreak(player, killstreak);
|
||||||
|
|
||||||
|
ctx.getSource().getSender().sendMessage(km.getKillstreakComponent(killstreak));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getOtherKillstreak(CommandContext<CommandSourceStack> ctx) throws CommandSyntaxException {
|
||||||
|
final OfflinePlayer offlinePlayer = getOfflinePlayerFromCtx(ctx);
|
||||||
|
KillstreakManager km = KillstreakManager.getInstance();
|
||||||
|
|
||||||
|
final long killstreak = km.getKillstreak(offlinePlayer);
|
||||||
|
|
||||||
|
ctx.getSource().getSender().sendMessage(km.getKillstreakComponent(killstreak));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getOwnKillstreak(CommandContext<CommandSourceStack> ctx) {
|
||||||
|
final Entity entity = ctx.getSource().getExecutor();
|
||||||
|
if(!(entity instanceof Player p)) return 0;
|
||||||
|
KillstreakManager km = KillstreakManager.getInstance();
|
||||||
|
|
||||||
|
final long killstreak = km.getKillstreak(p);
|
||||||
|
|
||||||
|
ctx.getSource().getSender().sendMessage(km.getKillstreakComponent(killstreak));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package pl.piecuu.killstreak;
|
package pl.piecuu.killstreak;
|
||||||
|
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
@ -30,7 +31,7 @@ public class KillstreakManager {
|
||||||
player.getPersistentDataContainer().set(playerKillstreakKey, PersistentDataType.LONG, streak);
|
player.getPersistentDataContainer().set(playerKillstreakKey, PersistentDataType.LONG, streak);
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getKillstreak(Player player) {
|
public long getKillstreak(OfflinePlayer player) {
|
||||||
return player.getPersistentDataContainer().getOrDefault(playerKillstreakKey, PersistentDataType.LONG, 0L);
|
return player.getPersistentDataContainer().getOrDefault(playerKillstreakKey, PersistentDataType.LONG, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -53,8 +54,8 @@ public class KillstreakManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getColor(long killstreak) {
|
public int getColor(long killstreak) {
|
||||||
if(killstreak == 0) return 0x0;
|
if(killstreak == 0) return 0xffffff;
|
||||||
else if(killstreak == 1) return 0x858585; // dark grey
|
else if(killstreak == 1) return 0xfbffa8; // washed out yellow
|
||||||
else if(killstreak < 5) return 0xfae92f; // yellow
|
else if(killstreak < 5) return 0xfae92f; // yellow
|
||||||
else if(killstreak < 10) return 0xe6aa1e; // orange orange
|
else if(killstreak < 10) return 0xe6aa1e; // orange orange
|
||||||
else if(killstreak < 15) return 0xe6711e; // darker orange
|
else if(killstreak < 15) return 0xe6711e; // darker orange
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue