NullValkyrie

Minecraft 1.19 multipurpose plugin for spigot servers with a lot of features where most modern servers have.
git clone https://codeberg.org/night0721/NullValkyrie
Log | Files | Refs | README | LICENSE

commit 569f14bc39deeb26965f581366699ba1a509dc09
parent d763a05158c72f59c93147316c3e7db678050243
Author: NK <[email protected]>
Date:   Wed,  7 Dec 2022 20:46:09 +0000

mini miner

Diffstat:
Msrc/main/java/me/night/nullvalkyrie/Main.java | 2+-
Msrc/main/java/me/night/nullvalkyrie/commands/BetaCommand.java | 3+++
Msrc/main/java/me/night/nullvalkyrie/commands/MinerCommand.java | 2+-
Msrc/main/java/me/night/nullvalkyrie/database/MinerDataManager.java | 2+-
Msrc/main/java/me/night/nullvalkyrie/database/RankDataManager.java | 2+-
Msrc/main/java/me/night/nullvalkyrie/database/UserDataManager.java | 2+-
Asrc/main/java/me/night/nullvalkyrie/entities/miners/CryptoMiner.java | 150+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/main/java/me/night/nullvalkyrie/entities/npcs/NPCManager.java | 1+
Dsrc/main/java/me/night/nullvalkyrie/entities/npcs/Skin.java | 49-------------------------------------------------
Msrc/main/java/me/night/nullvalkyrie/events/listeners/ServerEvents.java | 1+
Dsrc/main/java/me/night/nullvalkyrie/miners/CryptoMiner.java | 68--------------------------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/ui/AnimatedSideBar.java | 28----------------------------
Dsrc/main/java/me/night/nullvalkyrie/ui/BelowNameManager.java | 18------------------
Dsrc/main/java/me/night/nullvalkyrie/ui/NameTagManager.java | 40----------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/ui/ScoreboardListener.java | 66------------------------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/ui/SideBarManager.java | 102-------------------------------------------------------------------------------
Msrc/main/java/me/night/nullvalkyrie/ui/inventory/Miner.java | 2+-
Asrc/main/java/me/night/nullvalkyrie/ui/player/AnimatedSideBar.java | 28++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/ui/player/BelowNameManager.java | 18++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/ui/player/NameTagManager.java | 40++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/ui/player/ScoreboardListener.java | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/ui/player/SideBarManager.java | 102+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/util/Skin.java | 40++++++++++++++++++++++++++++++++++++++++
23 files changed, 454 insertions(+), 377 deletions(-)

diff --git a/src/main/java/me/night/nullvalkyrie/Main.java b/src/main/java/me/night/nullvalkyrie/Main.java @@ -10,7 +10,7 @@ import me.night.nullvalkyrie.ui.inventory.InventoryListener; import me.night.nullvalkyrie.database.NPCDataManager; import me.night.nullvalkyrie.discord.DiscordClientManager; import me.night.nullvalkyrie.enchantments.EnchantmentManager; -import me.night.nullvalkyrie.ui.ScoreboardListener; +import me.night.nullvalkyrie.ui.player.ScoreboardListener; import me.night.nullvalkyrie.util.*; import me.night.nullvalkyrie.commands.*; import me.night.nullvalkyrie.database.DatabaseManager; diff --git a/src/main/java/me/night/nullvalkyrie/commands/BetaCommand.java b/src/main/java/me/night/nullvalkyrie/commands/BetaCommand.java @@ -1,5 +1,6 @@ package me.night.nullvalkyrie.commands; +import me.night.nullvalkyrie.entities.miners.CryptoMiner; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -14,6 +15,8 @@ public class BetaCommand extends Command { @Override public void onCommand(CommandSender sender, String[] args) { if (sender instanceof Player player) { + // TODO: how to make a armor stand turn + CryptoMiner.spawn(player, args[0], "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"); } } diff --git a/src/main/java/me/night/nullvalkyrie/commands/MinerCommand.java b/src/main/java/me/night/nullvalkyrie/commands/MinerCommand.java @@ -9,7 +9,7 @@ import org.bukkit.entity.Player; import java.util.Date; import java.util.List; -import static me.night.nullvalkyrie.miners.CryptoMiner.generate; +import static me.night.nullvalkyrie.entities.miners.CryptoMiner.generate; public class MinerCommand extends Command { diff --git a/src/main/java/me/night/nullvalkyrie/database/MinerDataManager.java b/src/main/java/me/night/nullvalkyrie/database/MinerDataManager.java @@ -2,7 +2,7 @@ package me.night.nullvalkyrie.database; import com.mongodb.client.MongoCursor; import com.mongodb.client.model.Filters; -import me.night.nullvalkyrie.miners.CryptoMiner; +import me.night.nullvalkyrie.entities.miners.CryptoMiner; import org.bson.Document; import org.bson.conversions.Bson; import org.bukkit.Material; diff --git a/src/main/java/me/night/nullvalkyrie/database/RankDataManager.java b/src/main/java/me/night/nullvalkyrie/database/RankDataManager.java @@ -10,7 +10,7 @@ import org.bukkit.entity.Player; import java.util.UUID; -import static me.night.nullvalkyrie.ui.ScoreboardListener.nameTagManager; +import static me.night.nullvalkyrie.ui.player.ScoreboardListener.nameTagManager; public class RankDataManager { public static void setRank(UUID uuid, Rank rank) { diff --git a/src/main/java/me/night/nullvalkyrie/database/UserDataManager.java b/src/main/java/me/night/nullvalkyrie/database/UserDataManager.java @@ -1,6 +1,6 @@ package me.night.nullvalkyrie.database; -import me.night.nullvalkyrie.ui.ScoreboardListener; +import me.night.nullvalkyrie.ui.player.ScoreboardListener; import org.bson.Document; import org.bson.conversions.Bson; diff --git a/src/main/java/me/night/nullvalkyrie/entities/miners/CryptoMiner.java b/src/main/java/me/night/nullvalkyrie/entities/miners/CryptoMiner.java @@ -0,0 +1,150 @@ +package me.night.nullvalkyrie.entities.miners; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import com.mojang.datafixers.util.Pair; +import me.night.nullvalkyrie.util.Util; +import net.minecraft.network.protocol.game.PacketPlayOutEntityEquipment; +import net.minecraft.network.protocol.game.PacketPlayOutPlayerInfo; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.EntityPlayer; +import net.minecraft.server.level.WorldServer; +import net.minecraft.server.network.PlayerConnection; +import net.minecraft.world.entity.EnumItemSlot; +import org.apache.commons.codec.binary.Base64; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_19_R1.CraftServer; +import org.bukkit.craftbukkit.v1_19_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +public class CryptoMiner { + protected String name; + protected Material type; + protected int level; + protected double rate; + protected long lastclaim; + + public CryptoMiner(String name, Material type, int level, double rate, long lastclaim) { + this.name = name; // Name of the miner + this.type = type; // Material to mine + this.level = level; + this.rate = rate; // Percentage generate chance in each tick 20tick per sec + this.lastclaim = lastclaim; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getRate() { + return rate; + } + + public void setRate(double rate) { + this.rate = rate; + } + + public Material getType() { + return type; + } + + public void setType(Material type) { + this.type = type; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public long getLastclaim() { + return lastclaim; + } + + public static void generate(int pp, int times) { + int generated = 0; + for (int counter = 0; counter < times; counter++) { + int count = ThreadLocalRandom.current().nextInt(100); + if (count > pp) generated++; + } + System.out.println(generated); + } + + public static void spawn(Player player, String name, String url) { + Location loc = player.getLocation(); + loc.setX(Math.round(loc.getX() * 2) / 2.0); + loc.setZ(Math.round(loc.getZ() * 2) / 2.0); + if (player.getLocation().getWorld() == null) return; + ArmorStand stand = player.getLocation().getWorld().spawn(loc, ArmorStand.class); + stand.setGravity(false); + stand.setBasePlate(false); + stand.setSmall(true); + stand.setArms(true); + stand.setVisible(true); + ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1, (short) 3); + SkullMeta meta = (SkullMeta) head.getItemMeta(); + GameProfile profile = new GameProfile(UUID.randomUUID(), null); + byte[] encodedData = Base64.encodeBase64(String.format("{textures:{SKIN:{url:\"%s\"}}}", url).getBytes()); + profile.getProperties().put("textures", new Property("textures", new String(encodedData))); + Field profileField; + try { + profileField = meta.getClass().getDeclaredField("profile"); + profileField.setAccessible(true); + profileField.set(meta, profile); + } catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e1) { + e1.printStackTrace(); + } + head.setItemMeta(meta); + + ItemStack chest = new ItemStack(Material.LEATHER_CHESTPLATE); + LeatherArmorMeta chestdata = (LeatherArmorMeta) chest.getItemMeta(); + chestdata.setColor(org.bukkit.Color.fromRGB(2, 2, 58)); + chest.setItemMeta(chestdata); + ItemStack leg = new ItemStack(Material.LEATHER_LEGGINGS); + LeatherArmorMeta legdata = (LeatherArmorMeta) leg.getItemMeta(); + legdata.setColor(org.bukkit.Color.fromRGB(2, 2, 58)); + leg.setItemMeta(legdata); + ItemStack boot = new ItemStack(Material.LEATHER_BOOTS); + LeatherArmorMeta bootdata = (LeatherArmorMeta) boot.getItemMeta(); + bootdata.setColor(org.bukkit.Color.fromRGB(2, 2, 58)); + boot.setItemMeta(bootdata); + ItemStack pick = new ItemStack(Material.GOLDEN_PICKAXE); + List<Pair<EnumItemSlot, net.minecraft.world.item.ItemStack>> list = new ArrayList<>(); + list.add(new Pair<>(EnumItemSlot.a, CraftItemStack.asNMSCopy(pick))); + list.add(new Pair<>(EnumItemSlot.c, CraftItemStack.asNMSCopy(boot))); + list.add(new Pair<>(EnumItemSlot.d, CraftItemStack.asNMSCopy(leg))); + list.add(new Pair<>(EnumItemSlot.e, CraftItemStack.asNMSCopy(chest))); + list.add(new Pair<>(EnumItemSlot.f, CraftItemStack.asNMSCopy(head))); + + GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color(name)); + MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer(); + WorldServer w = ((CraftWorld) player.getLocation().getWorld()).getHandle(); + EntityPlayer miner = new EntityPlayer(server, w, gameProfile, null); + // set the icon to the tab list + + + PlayerConnection pc = ((org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer) player).getHandle().b; + pc.a(new PacketPlayOutEntityEquipment(stand.getEntityId(), list)); + pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a, miner)); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/entities/npcs/NPCManager.java b/src/main/java/me/night/nullvalkyrie/entities/npcs/NPCManager.java @@ -5,6 +5,7 @@ import com.mojang.authlib.properties.Property; import com.mojang.datafixers.util.Pair; import me.night.nullvalkyrie.Main; import me.night.nullvalkyrie.database.NPCDataManager; +import me.night.nullvalkyrie.util.Skin; import me.night.nullvalkyrie.util.Util; import net.minecraft.network.protocol.game.*; import net.minecraft.network.syncher.DataWatcher; diff --git a/src/main/java/me/night/nullvalkyrie/entities/npcs/Skin.java b/src/main/java/me/night/nullvalkyrie/entities/npcs/Skin.java @@ -1,49 +0,0 @@ -package me.night.nullvalkyrie.entities.npcs; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.mojang.authlib.GameProfile; -import com.mojang.authlib.properties.Property; -import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; - -import java.io.InputStreamReader; -import java.net.URL; - -public class Skin { - private final String texture; - private final String signature; - public Skin(String texture, String signature) { - this.texture = texture; - this.signature = signature; - } - public String getTexture() { return texture; } - public String getSignature() { return signature; } - - public static String[] getSkin(String name) { - try { - URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + name); - InputStreamReader reader = new InputStreamReader(url.openStream()); - String uuid = new JsonParser().parse(reader).getAsJsonObject().get("id").getAsString(); - URL url2 = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false"); - InputStreamReader reader2 = new InputStreamReader(url2.openStream()); - JsonObject properties = new JsonParser().parse(reader2).getAsJsonObject().get("properties").getAsJsonArray().get(0).getAsJsonObject(); - String texture = properties.get("value").getAsString(); - String signature = properties.get("signature").getAsString(); - return new String[] {texture, signature}; - } catch (Exception e) { - return new String[]{}; - } - } - public static String[] getSkin(Player player) { - try { - GameProfile profile = ((CraftPlayer) player).getProfile(); - Property property = profile.getProperties().get("textures").iterator().next(); - String texture = property.getValue(); - String signature = property.getSignature(); - return new String[]{texture, signature}; - } catch (Exception e) { - return new String[]{}; - } - } -} diff --git a/src/main/java/me/night/nullvalkyrie/events/listeners/ServerEvents.java b/src/main/java/me/night/nullvalkyrie/events/listeners/ServerEvents.java @@ -41,6 +41,7 @@ public class ServerEvents implements Listener { } @EventHandler public void onClickHologram(InteractHologramEvent e) { + if (e.getHologram().getCustomName() == null) return; if (e.getHologram().getCustomName().equals(ChatColor.GOLD + "Click me to change!!!")) { // TODO: change hologram things } diff --git a/src/main/java/me/night/nullvalkyrie/miners/CryptoMiner.java b/src/main/java/me/night/nullvalkyrie/miners/CryptoMiner.java @@ -1,68 +0,0 @@ -package me.night.nullvalkyrie.miners; - -import org.bukkit.Material; - -import java.util.concurrent.ThreadLocalRandom; - -public class CryptoMiner { - protected String name; - protected Material type; - protected int level; - protected double rate; - protected long lastclaim; - - public CryptoMiner(String name, Material type, int level, double rate, long lastclaim) { - this.name = name; // Name of the miner - this.type = type; // Material to mine - this.level = level; - this.rate = rate; // Percentage generate chance in each tick 20tick per sec - this.lastclaim = lastclaim; - - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public double getRate() { - return rate; - } - - public void setRate(double rate) { - this.rate = rate; - } - - public Material getType() { - return type; - } - - public void setType(Material type) { - this.type = type; - } - - public int getLevel() { - return level; - } - - public void setLevel(int level) { - this.level = level; - } - - public long getLastclaim() { - return lastclaim; - } - - public static void generate(int pp, int times) { - int generated = 0; - for (int counter = 0; counter < times; counter++) { - int count = ThreadLocalRandom.current().nextInt(100); - if (count > pp) generated++; - } - System.out.println(generated); - } - -} diff --git a/src/main/java/me/night/nullvalkyrie/ui/AnimatedSideBar.java b/src/main/java/me/night/nullvalkyrie/ui/AnimatedSideBar.java @@ -1,28 +0,0 @@ -package me.night.nullvalkyrie.ui; - -import org.bukkit.Bukkit; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public class AnimatedSideBar { - private static final Map<UUID, Integer> Tasks = new HashMap<>(); - private final UUID uuid; - - public AnimatedSideBar(UUID uuid) { - this.uuid = uuid; - } - - public void setID(int id) { - Tasks.put(uuid, id); - } - - public boolean hasID() { - return Tasks.containsKey(uuid); - } - - public void stop() { - Bukkit.getScheduler().cancelTask(Tasks.get(uuid)); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/ui/BelowNameManager.java b/src/main/java/me/night/nullvalkyrie/ui/BelowNameManager.java @@ -1,18 +0,0 @@ -package me.night.nullvalkyrie.ui; - -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.Criteria; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.Scoreboard; - -public class BelowNameManager { - public void setBelowName(Player player) { - Scoreboard board = player.getScoreboard(); - Objective obj = board.registerNewObjective("HealthBar", Criteria.DUMMY, ChatColor.RED.toString()); - obj.setDisplaySlot(DisplaySlot.BELOW_NAME); - obj.setDisplayName(ChatColor.RED.toString() + player.getHealth() + "❤"); - player.setScoreboard(board); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/ui/NameTagManager.java b/src/main/java/me/night/nullvalkyrie/ui/NameTagManager.java @@ -1,40 +0,0 @@ -package me.night.nullvalkyrie.ui; - -import me.night.nullvalkyrie.database.RankDataManager; -import me.night.nullvalkyrie.enums.Rank; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.*; - -public class NameTagManager { - public void setNametags(Player player) { - Scoreboard newScoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); - Objective obj = newScoreboard.registerNewObjective("TabList", Criteria.DUMMY, "Test"); - obj.setDisplaySlot(DisplaySlot.PLAYER_LIST); - player.setScoreboard(newScoreboard); - for (Rank rank : Rank.values()) { - Team team = player.getScoreboard().registerNewTeam(rank.name()); - team.setPrefix(rank.getDisplay() + " "); - } - for (Player target : Bukkit.getOnlinePlayers()) { - if (player.getUniqueId() != target.getUniqueId()) { - Rank rank = RankDataManager.getRank(target.getUniqueId()); - player.getScoreboard().getTeam(rank.name()).addEntry(target.getName()); - } - } - } - - public void newTag(Player player) { - Rank rank = RankDataManager.getRank(player.getUniqueId()); - for (Player target : Bukkit.getOnlinePlayers()) { - if (rank == null) target.getScoreboard().getTeam(Rank.ROOKIE.name()).addEntry(player.getName()); - else target.getScoreboard().getTeam(rank.name()).addEntry(player.getName()); - } - } - - public void removeTag(Player player) { - for (Player target : Bukkit.getOnlinePlayers()) { - target.getScoreboard().getEntryTeam(player.getName()).removeEntry(player.getName()); - } - } -} diff --git a/src/main/java/me/night/nullvalkyrie/ui/ScoreboardListener.java b/src/main/java/me/night/nullvalkyrie/ui/ScoreboardListener.java @@ -1,66 +0,0 @@ -package me.night.nullvalkyrie.ui; - -import me.night.nullvalkyrie.Main; -import me.night.nullvalkyrie.database.RankDataManager; -import me.night.nullvalkyrie.enums.Rank; -import me.night.nullvalkyrie.entities.npcs.NPCManager; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import static me.night.nullvalkyrie.database.UserDataManager.createUserBank; - -public class ScoreboardListener implements Listener { - - public static NameTagManager nameTagManager; - public static SideBarManager sideBarManager; - private final BelowNameManager belowNameManager; - - public ScoreboardListener(Main main) { - nameTagManager = new NameTagManager(); - sideBarManager = new SideBarManager(main); - belowNameManager = new BelowNameManager(); - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - Player player = e.getPlayer(); - if (!player.hasPlayedBefore()) { - e.getPlayer().sendTitle(ChatColor.RED + "Welcome to Vanadium!", ChatColor.GREEN + "LOL", 20, 100, 20); - RankDataManager.setRank(player.getUniqueId(), Rank.ROOKIE); - createUserBank(e.getPlayer().getUniqueId().toString()); - } - e.getPlayer().setPlayerListHeaderFooter(ChatColor.AQUA + "You are playing on " + ChatColor.GREEN + "127.0.0.1", ChatColor.GOLD + "Ranks, boosters, & more!" + ChatColor.AQUA + "127.0.0.1"); - nameTagManager.setNametags(player); - nameTagManager.newTag(player); - sideBarManager.setSideBar(player); - sideBarManager.start(player); - belowNameManager.setBelowName(player); - e.setJoinMessage(RankDataManager.getRank(e.getPlayer().getUniqueId()).getDisplay() + " " + e.getPlayer().getName() + ChatColor.WHITE + " joined the server!"); - if (NPCManager.getNPCs() == null) return; - if (NPCManager.getNPCs().isEmpty()) return; - NPCManager.addJoinPacket(e.getPlayer()); - } - - @EventHandler - public void onQuit(PlayerQuitEvent e) { - e.setQuitMessage(null); - nameTagManager.removeTag(e.getPlayer()); - e.getPlayer().setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); - AnimatedSideBar board = sideBarManager.board; - if (board.hasID()) board.stop(); - - } - - @EventHandler - public void onChat(AsyncPlayerChatEvent e) { - e.setCancelled(true); - Player player = e.getPlayer(); - Bukkit.broadcastMessage(RankDataManager.getRank(player.getUniqueId()).getDisplay() + " " + player.getName() + ChatColor.WHITE + ": " + e.getMessage()); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/ui/SideBarManager.java b/src/main/java/me/night/nullvalkyrie/ui/SideBarManager.java @@ -1,102 +0,0 @@ -package me.night.nullvalkyrie.ui; - -import me.night.nullvalkyrie.Main; -import me.night.nullvalkyrie.database.UserDataManager; -import me.night.nullvalkyrie.util.Util; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.*; -import org.bukkit.scoreboard.Scoreboard; - -import java.util.UUID; - -public class SideBarManager { - private int taskID; - private final Main main; - public AnimatedSideBar board = null; - - public SideBarManager(Main main) { - this.main = main; - } - - public void setSideBar(Player player) { - Scoreboard board = player.getScoreboard(); - Objective obj; - if (board.getObjective("Vanadium") != null) obj = board.getObjective("Vanadium"); - else - obj = board.registerNewObjective("Vanadium", Criteria.DUMMY, ChatColor.AQUA.toString() + ChatColor.BOLD + ">> Vanadium <<"); - obj.setDisplaySlot(DisplaySlot.SIDEBAR); - Score hypens = obj.getScore(ChatColor.GOLD + "=-=-=-=-=-=-=-="); - hypens.setScore(9); - Score name = obj.getScore(ChatColor.BLUE + "Player Name: "); - name.setScore(8); - Score name2 = obj.getScore(ChatColor.WHITE + player.getName()); - name2.setScore(7); - Score space1 = obj.getScore(" "); - space1.setScore(6); - Score players = obj.getScore(ChatColor.LIGHT_PURPLE + "Players Online:"); - players.setScore(5); - Score playercount = obj.getScore(ChatColor.YELLOW.toString() + Bukkit.getServer().getOnlinePlayers().size()); - playercount.setScore(4); - Score space2 = obj.getScore(" "); - space2.setScore(2); - Score website = obj.getScore(ChatColor.YELLOW + "cath.js.org"); - website.setScore(1); - Team bankTeam; - if (board.getTeam("Bank") != null) bankTeam = board.getTeam("Bank"); - else bankTeam = board.registerNewTeam("Bank"); - bankTeam.addEntry(ChatColor.BOLD.toString()); - bankTeam.setPrefix(ChatColor.BLUE + "Bank: "); - bankTeam.setSuffix(ChatColor.YELLOW + UserDataManager.getUser(player.getUniqueId().toString()).get("Bank").toString()); - obj.getScore(ChatColor.BOLD.toString()).setScore(3); - player.setScoreboard(board); - } - - public void start(Player player) { - board = new AnimatedSideBar(player.getUniqueId()); - taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(main, new Runnable() { - int count = 0; - - public void animate(String str) { - Scoreboard board = player.getScoreboard(); - Objective objective; - if (board.getObjective("Vanadium") != null) objective = board.getObjective("Vanadium"); - else - objective = board.registerNewObjective("Vanadium", Criteria.DUMMY, ChatColor.AQUA.toString() + ChatColor.BOLD + ">> Vanadium <<"); - objective.setDisplaySlot(DisplaySlot.SIDEBAR); - objective.setDisplayName(Util.color(str)); - } - - @Override - public void run() { - if (!board.hasID()) board.setID(taskID); - if (count == 13) count = 0; - switch (count) { - case 0 -> animate("&1&l>> &e&lVanadium&1&l <<"); - case 1 -> animate("&b&l>&1&l> &e&lVanadium &1&l<<"); - case 2 -> animate("&1&l>&b&l> &e&lVanadium &1&l<<"); - case 3 -> animate("&1&l>> &b&lV&e&lanadium&1&l <<"); - case 4 -> animate("&1&l>> &e&lV&b&la&e&lnadium&1&l <<"); - case 5 -> animate("&1&l>> &e&lVa&b&ln&e&ladium&1&l <<"); - case 6 -> animate("&1&l>> &e&lVan&b&la&e&ldium&1&l <<"); - case 7 -> animate("&1&l>> &e&lVana&b&ld&e&lium&1&l <<"); - case 8 -> animate("&1&l>> &e&lVanad&b&li&e&lum&1&l <<"); - case 9 -> animate("&1&l>> &e&lVanadi&b&lu&e&lm&1&l <<"); - case 10 -> animate("&1&l>> &e&lVanadiu&b&lm&1&l <<"); - case 11 -> animate("&1&l>> &e&lVanadium &b&l<&1&l<"); - case 12 -> { - animate("&1&l>> &e&lVanadium &1&l<&b&l<"); - setSideBar(player); - } - } - count++; - } - }, 0, 10); - } - - public void addBank(String uuid, Integer amount) { - UUID uid = UUID.fromString(uuid); - Bukkit.getPlayer(uid).getScoreboard().getTeam("Bank").setSuffix(ChatColor.YELLOW.toString() + UserDataManager.getUser(uuid).get("Bank") + ChatColor.WHITE + "+(" + amount + ")"); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/ui/inventory/Miner.java b/src/main/java/me/night/nullvalkyrie/ui/inventory/Miner.java @@ -1,7 +1,7 @@ package me.night.nullvalkyrie.ui.inventory; import me.night.nullvalkyrie.database.MinerDataManager; -import me.night.nullvalkyrie.miners.CryptoMiner; +import me.night.nullvalkyrie.entities.miners.CryptoMiner; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; diff --git a/src/main/java/me/night/nullvalkyrie/ui/player/AnimatedSideBar.java b/src/main/java/me/night/nullvalkyrie/ui/player/AnimatedSideBar.java @@ -0,0 +1,28 @@ +package me.night.nullvalkyrie.ui.player; + +import org.bukkit.Bukkit; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class AnimatedSideBar { + private static final Map<UUID, Integer> Tasks = new HashMap<>(); + private final UUID uuid; + + public AnimatedSideBar(UUID uuid) { + this.uuid = uuid; + } + + public void setID(int id) { + Tasks.put(uuid, id); + } + + public boolean hasID() { + return Tasks.containsKey(uuid); + } + + public void stop() { + Bukkit.getScheduler().cancelTask(Tasks.get(uuid)); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/ui/player/BelowNameManager.java b/src/main/java/me/night/nullvalkyrie/ui/player/BelowNameManager.java @@ -0,0 +1,18 @@ +package me.night.nullvalkyrie.ui.player; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Criteria; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; + +public class BelowNameManager { + public void setBelowName(Player player) { + Scoreboard board = player.getScoreboard(); + Objective obj = board.registerNewObjective("HealthBar", Criteria.DUMMY, ChatColor.RED.toString()); + obj.setDisplaySlot(DisplaySlot.BELOW_NAME); + obj.setDisplayName(ChatColor.RED.toString() + player.getHealth() + "❤"); + player.setScoreboard(board); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/ui/player/NameTagManager.java b/src/main/java/me/night/nullvalkyrie/ui/player/NameTagManager.java @@ -0,0 +1,40 @@ +package me.night.nullvalkyrie.ui.player; + +import me.night.nullvalkyrie.database.RankDataManager; +import me.night.nullvalkyrie.enums.Rank; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.*; + +public class NameTagManager { + public void setNametags(Player player) { + Scoreboard newScoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + Objective obj = newScoreboard.registerNewObjective("TabList", Criteria.DUMMY, "Test"); + obj.setDisplaySlot(DisplaySlot.PLAYER_LIST); + player.setScoreboard(newScoreboard); + for (Rank rank : Rank.values()) { + Team team = player.getScoreboard().registerNewTeam(rank.name()); + team.setPrefix(rank.getDisplay() + " "); + } + for (Player target : Bukkit.getOnlinePlayers()) { + if (player.getUniqueId() != target.getUniqueId()) { + Rank rank = RankDataManager.getRank(target.getUniqueId()); + if (rank != null) player.getScoreboard().getTeam(rank.name()).addEntry(target.getName()); + } + } + } + + public void newTag(Player player) { + Rank rank = RankDataManager.getRank(player.getUniqueId()); + for (Player target : Bukkit.getOnlinePlayers()) { + if (rank == null) target.getScoreboard().getTeam(Rank.ROOKIE.name()).addEntry(player.getName()); + else target.getScoreboard().getTeam(rank.name()).addEntry(player.getName()); + } + } + + public void removeTag(Player player) { + for (Player target : Bukkit.getOnlinePlayers()) { + target.getScoreboard().getEntryTeam(player.getName()).removeEntry(player.getName()); + } + } +} diff --git a/src/main/java/me/night/nullvalkyrie/ui/player/ScoreboardListener.java b/src/main/java/me/night/nullvalkyrie/ui/player/ScoreboardListener.java @@ -0,0 +1,65 @@ +package me.night.nullvalkyrie.ui.player; + +import me.night.nullvalkyrie.Main; +import me.night.nullvalkyrie.database.RankDataManager; +import me.night.nullvalkyrie.enums.Rank; +import me.night.nullvalkyrie.entities.npcs.NPCManager; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import static me.night.nullvalkyrie.database.UserDataManager.createUserBank; + +public class ScoreboardListener implements Listener { + + public static NameTagManager nameTagManager; + public static SideBarManager sideBarManager; + private final BelowNameManager belowNameManager; + + public ScoreboardListener(Main main) { + nameTagManager = new NameTagManager(); + sideBarManager = new SideBarManager(main); + belowNameManager = new BelowNameManager(); + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + Player player = e.getPlayer(); + if (!player.hasPlayedBefore()) { + e.getPlayer().sendTitle(ChatColor.RED + "Welcome to Vanadium!", ChatColor.GREEN + "LOL", 20, 100, 20); + RankDataManager.setRank(player.getUniqueId(), Rank.ROOKIE); + createUserBank(e.getPlayer().getUniqueId().toString()); + } + e.getPlayer().setPlayerListHeaderFooter(ChatColor.AQUA + "You are playing on " + ChatColor.GREEN + "127.0.0.1", ChatColor.GOLD + "Ranks, boosters, & more!" + ChatColor.AQUA + "127.0.0.1"); + nameTagManager.setNametags(player); + nameTagManager.newTag(player); + sideBarManager.setSideBar(player); + sideBarManager.start(player); + belowNameManager.setBelowName(player); + e.setJoinMessage(RankDataManager.getRank(e.getPlayer().getUniqueId()).getDisplay() + " " + e.getPlayer().getName() + ChatColor.WHITE + " joined the server!"); + if (NPCManager.getNPCs() == null) return; + if (NPCManager.getNPCs().isEmpty()) return; + NPCManager.addJoinPacket(e.getPlayer()); + } + + @EventHandler + public void onQuit(PlayerQuitEvent e) { + e.setQuitMessage(null); + nameTagManager.removeTag(e.getPlayer()); + e.getPlayer().setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); + AnimatedSideBar board = sideBarManager.board; + if (board.hasID()) board.stop(); + } + + @EventHandler + public void onChat(AsyncPlayerChatEvent e) { + e.setCancelled(true); + Player player = e.getPlayer(); + Bukkit.broadcastMessage(RankDataManager.getRank(player.getUniqueId()).getDisplay() + " " + player.getName() + ChatColor.WHITE + ": " + e.getMessage()); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/ui/player/SideBarManager.java b/src/main/java/me/night/nullvalkyrie/ui/player/SideBarManager.java @@ -0,0 +1,102 @@ +package me.night.nullvalkyrie.ui.player; + +import me.night.nullvalkyrie.Main; +import me.night.nullvalkyrie.database.UserDataManager; +import me.night.nullvalkyrie.util.Util; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.*; +import org.bukkit.scoreboard.Scoreboard; + +import java.util.UUID; + +public class SideBarManager { + private int taskID; + private final Main main; + public AnimatedSideBar board = null; + + public SideBarManager(Main main) { + this.main = main; + } + + public void setSideBar(Player player) { + Scoreboard board = player.getScoreboard(); + Objective obj; + if (board.getObjective("Vanadium") != null) obj = board.getObjective("Vanadium"); + else + obj = board.registerNewObjective("Vanadium", Criteria.DUMMY, ChatColor.AQUA.toString() + ChatColor.BOLD + ">> Vanadium <<"); + obj.setDisplaySlot(DisplaySlot.SIDEBAR); + Score hypens = obj.getScore(ChatColor.GOLD + "=-=-=-=-=-=-=-="); + hypens.setScore(9); + Score name = obj.getScore(ChatColor.BLUE + "Player Name: "); + name.setScore(8); + Score name2 = obj.getScore(ChatColor.WHITE + player.getName()); + name2.setScore(7); + Score space1 = obj.getScore(" "); + space1.setScore(6); + Score players = obj.getScore(ChatColor.LIGHT_PURPLE + "Players Online:"); + players.setScore(5); + Score playercount = obj.getScore(ChatColor.YELLOW.toString() + Bukkit.getServer().getOnlinePlayers().size()); + playercount.setScore(4); + Score space2 = obj.getScore(" "); + space2.setScore(2); + Score website = obj.getScore(ChatColor.YELLOW + "cath.js.org"); + website.setScore(1); + Team bankTeam; + if (board.getTeam("Bank") != null) bankTeam = board.getTeam("Bank"); + else bankTeam = board.registerNewTeam("Bank"); + bankTeam.addEntry(ChatColor.BOLD.toString()); + bankTeam.setPrefix(ChatColor.BLUE + "Bank: "); + bankTeam.setSuffix(ChatColor.YELLOW + UserDataManager.getUser(player.getUniqueId().toString()).get("Bank").toString()); + obj.getScore(ChatColor.BOLD.toString()).setScore(3); + player.setScoreboard(board); + } + + public void start(Player player) { + board = new AnimatedSideBar(player.getUniqueId()); + taskID = Bukkit.getScheduler().scheduleSyncRepeatingTask(main, new Runnable() { + int count = 0; + + public void animate(String str) { + Scoreboard board = player.getScoreboard(); + Objective objective; + if (board.getObjective("Vanadium") != null) objective = board.getObjective("Vanadium"); + else + objective = board.registerNewObjective("Vanadium", Criteria.DUMMY, ChatColor.AQUA.toString() + ChatColor.BOLD + ">> Vanadium <<"); + objective.setDisplaySlot(DisplaySlot.SIDEBAR); + objective.setDisplayName(Util.color(str)); + } + + @Override + public void run() { + if (!board.hasID()) board.setID(taskID); + if (count == 13) count = 0; + switch (count) { + case 0 -> animate("&1&l>> &e&lVanadium&1&l <<"); + case 1 -> animate("&b&l>&1&l> &e&lVanadium &1&l<<"); + case 2 -> animate("&1&l>&b&l> &e&lVanadium &1&l<<"); + case 3 -> animate("&1&l>> &b&lV&e&lanadium&1&l <<"); + case 4 -> animate("&1&l>> &e&lV&b&la&e&lnadium&1&l <<"); + case 5 -> animate("&1&l>> &e&lVa&b&ln&e&ladium&1&l <<"); + case 6 -> animate("&1&l>> &e&lVan&b&la&e&ldium&1&l <<"); + case 7 -> animate("&1&l>> &e&lVana&b&ld&e&lium&1&l <<"); + case 8 -> animate("&1&l>> &e&lVanad&b&li&e&lum&1&l <<"); + case 9 -> animate("&1&l>> &e&lVanadi&b&lu&e&lm&1&l <<"); + case 10 -> animate("&1&l>> &e&lVanadiu&b&lm&1&l <<"); + case 11 -> animate("&1&l>> &e&lVanadium &b&l<&1&l<"); + case 12 -> { + animate("&1&l>> &e&lVanadium &1&l<&b&l<"); + setSideBar(player); + } + } + count++; + } + }, 0, 10); + } + + public void addBank(String uuid, Integer amount) { + UUID uid = UUID.fromString(uuid); + Bukkit.getPlayer(uid).getScoreboard().getTeam("Bank").setSuffix(ChatColor.YELLOW.toString() + UserDataManager.getUser(uuid).get("Bank") + ChatColor.WHITE + "+(" + amount + ")"); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/util/Skin.java b/src/main/java/me/night/nullvalkyrie/util/Skin.java @@ -0,0 +1,40 @@ +package me.night.nullvalkyrie.util; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import java.io.InputStreamReader; +import java.net.URL; + +public class Skin { + public static String[] getSkin(String name) { + try { + URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + name); + InputStreamReader reader = new InputStreamReader(url.openStream()); + String uuid = new JsonParser().parse(reader).getAsJsonObject().get("id").getAsString(); + URL url2 = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid + "?unsigned=false"); + InputStreamReader reader2 = new InputStreamReader(url2.openStream()); + JsonObject properties = new JsonParser().parse(reader2).getAsJsonObject().get("properties").getAsJsonArray().get(0).getAsJsonObject(); + String texture = properties.get("value").getAsString(); + String signature = properties.get("signature").getAsString(); + return new String[] {texture, signature}; + } catch (Exception e) { + return new String[]{}; + } + } + public static String[] getSkin(Player player) { + try { + GameProfile profile = ((CraftPlayer) player).getProfile(); + Property property = profile.getProperties().get("textures").iterator().next(); + String texture = property.getValue(); + String signature = property.getSignature(); + return new String[]{texture, signature}; + } catch (Exception e) { + return new String[]{}; + } + } +}