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 786bb682d7e73f2ef32ad129f587e60fb9a9ed57
parent 34253529089af181af5ece9931f2d630c09f0bb7
Author: NK <[email protected]>
Date:   Sun, 13 Nov 2022 01:04:40 +0000

changing to 1.19.2 and having shop and nms

Diffstat:
Mpom.xml | 80++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Chests/MenuListener.java | 37-------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Chests/WitherChest.java | 9---------
Dsrc/main/java/me/night/nullvalkyrie/Discord/DiscordClientManager.java | 25-------------------------
Dsrc/main/java/me/night/nullvalkyrie/Enchantments/CustomEnchantment.java | 56--------------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Enchantments/EnchantmentManager.java | 38--------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Events/CustomItemEvents.java | 319-------------------------------------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Items/CustomItemManager.java | 206-------------------------------------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Items/Rarity.java | 47-----------------------------------------------
Msrc/main/java/me/night/nullvalkyrie/Main.java | 26++++++++++++++++----------
Dsrc/main/java/me/night/nullvalkyrie/Rank/BelowNameManager.java | 18------------------
Dsrc/main/java/me/night/nullvalkyrie/Rank/NameTagManager.java | 45---------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Rank/Rank.java | 20--------------------
Dsrc/main/java/me/night/nullvalkyrie/Rank/RankManager.java | 52----------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Rank/ScoreboardListener.java | 61-------------------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Rank/SideBarManager.java | 50--------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Util/Util.java | 17-----------------
Dsrc/main/java/me/night/nullvalkyrie/Util/Utils.java | 49-------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Util/components/CustomMob.java | 111-------------------------------------------------------------------------------
Dsrc/main/java/me/night/nullvalkyrie/Util/components/LootItem.java | 36------------------------------------
Asrc/main/java/me/night/nullvalkyrie/chests/MenuListener.java | 37+++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/chests/WitherChest.java | 9+++++++++
Asrc/main/java/me/night/nullvalkyrie/commands/BetaCommand.java | 36++++++++++++++++++++++++++++++++++++
Msrc/main/java/me/night/nullvalkyrie/commands/MinerCommand.java | 8+++++++-
Msrc/main/java/me/night/nullvalkyrie/commands/RankCommand.java | 4++--
Asrc/main/java/me/night/nullvalkyrie/commands/ShopCommand.java | 46++++++++++++++++++++++++++++++++++++++++++++++
Msrc/main/java/me/night/nullvalkyrie/commands/SpawnCommand.java | 4++--
Msrc/main/java/me/night/nullvalkyrie/commands/UtilCommand.java | 2+-
Msrc/main/java/me/night/nullvalkyrie/commands/WeaponCommand.java | 2+-
Asrc/main/java/me/night/nullvalkyrie/database/Client.java | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/discord/DiscordClientManager.java | 24++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/enchantments/CustomEnchantment.java | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/enchantments/EnchantmentManager.java | 35+++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/events/CustomItemEvents.java | 319+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/items/CustomItemManager.java | 204+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/items/Rarity.java | 47+++++++++++++++++++++++++++++++++++++++++++++++
Msrc/main/java/me/night/nullvalkyrie/miners/CryptoMiner.java | 52++++++++++++++++++++++++++++------------------------
Msrc/main/java/me/night/nullvalkyrie/miners/MinerGUI.java | 2+-
Rsrc/main/java/me/night/nullvalkyrie/Mobs/ModdedZombie.yml -> src/main/java/me/night/nullvalkyrie/mobs/ModdedZombie.yml | 0
Asrc/main/java/me/night/nullvalkyrie/rank/BelowNameManager.java | 18++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/rank/NameTagManager.java | 45+++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/rank/Rank.java | 20++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/rank/RankManager.java | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/rank/ScoreboardListener.java | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/rank/SideBarManager.java | 50++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/util/Util.java | 17+++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/util/Utils.java | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/util/components/CustomMob.java | 111+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/java/me/night/nullvalkyrie/util/components/LootItem.java | 36++++++++++++++++++++++++++++++++++++
Asrc/main/resources/miners.yml | 0
50 files changed, 1428 insertions(+), 1275 deletions(-)

diff --git a/pom.xml b/pom.xml @@ -51,42 +51,42 @@ <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> - <outputDirectory>media/night0721/Data/Network/Lobby/plugins</outputDirectory> + <outputDirectory>E:\Files\SB\plugins</outputDirectory> </configuration> </plugin> -<!-- <plugin>--> -<!-- <groupId>net.md-5</groupId>--> -<!-- <artifactId>specialsource-maven-plugin</artifactId>--> -<!-- <version>1.2.2</version>--> -<!-- <executions>--> -<!-- <execution>--> -<!-- <phase>package</phase>--> -<!-- <goals>--> -<!-- <goal>remap</goal>--> -<!-- </goals>--> -<!-- <id>remap-obf</id>--> -<!-- <configuration>--> -<!-- <srgIn>org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:txt:maps-mojang</srgIn>--> -<!-- <reverse>true</reverse>--> -<!-- <remappedDependencies>org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies>--> -<!-- <remappedArtifactAttached>true</remappedArtifactAttached>--> -<!-- <remappedClassifierName>remapped-obf</remappedClassifierName>--> -<!-- </configuration>--> -<!-- </execution>--> -<!-- <execution>--> -<!-- <phase>package</phase>--> -<!-- <goals>--> -<!-- <goal>remap</goal>--> -<!-- </goals>--> -<!-- <id>remap-spigot</id>--> -<!-- <configuration>--> -<!-- <inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile>--> -<!-- <srgIn>org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn>--> -<!-- <remappedDependencies>org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies>--> -<!-- </configuration>--> -<!-- </execution>--> -<!-- </executions>--> -<!-- </plugin>--> + <plugin> + <groupId>net.md-5</groupId> + <artifactId>specialsource-maven-plugin</artifactId> + <version>1.2.2</version> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>remap</goal> + </goals> + <id>remap-obf</id> + <configuration> + <srgIn>org.spigotmc:minecraft-server:1.19.2-R0.1-SNAPSHOT:txt:maps-mojang</srgIn> + <reverse>true</reverse> + <remappedDependencies>org.spigotmc:spigot:1.19.2-R0.1-SNAPSHOT:jar:remapped-mojang</remappedDependencies> + <remappedArtifactAttached>true</remappedArtifactAttached> + <remappedClassifierName>remapped-obf</remappedClassifierName> + </configuration> + </execution> + <execution> + <phase>package</phase> + <goals> + <goal>remap</goal> + </goals> + <id>remap-spigot</id> + <configuration> + <inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile> + <srgIn>org.spigotmc:minecraft-server:1.19.2-R0.1-SNAPSHOT:csrg:maps-spigot</srgIn> + <remappedDependencies>org.spigotmc:spigot:1.19.2-R0.1-SNAPSHOT:jar:remapped-obf</remappedDependencies> + </configuration> + </execution> + </executions> + </plugin> </plugins> <resources> <resource> @@ -109,9 +109,9 @@ <dependencies> <dependency> <groupId>org.spigotmc</groupId> - <artifactId>spigot-api</artifactId> - <version>1.18.1-R0.1-SNAPSHOT</version> -<!-- <classifier>remapped-mojang</classifier>--> + <artifactId>spigot</artifactId> + <version>1.19.2-R0.1-SNAPSHOT</version> + <classifier>remapped-mojang</classifier> <scope>provided</scope> </dependency> <dependency> @@ -119,5 +119,11 @@ <artifactId>JDA</artifactId> <version>5.0.0-alpha.13</version> </dependency> + <dependency> + <groupId>org.mongodb</groupId> + <artifactId>mongo-java-driver</artifactId> + <version>3.12.11</version> + <scope>compile</scope> + </dependency> </dependencies> </project> diff --git a/src/main/java/me/night/nullvalkyrie/Chests/MenuListener.java b/src/main/java/me/night/nullvalkyrie/Chests/MenuListener.java @@ -1,37 +0,0 @@ -package me.night.nullvalkyrie.Chests; - -import me.night.nullvalkyrie.commands.MenuCommand; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -public class MenuListener implements Listener { - - @EventHandler - public void onClick(InventoryClickEvent e) { - if(e.getInventory().equals(MenuCommand.inv) && e.getCurrentItem() != null) { - e.setCancelled(true); - Player player = (Player) e.getWhoClicked(); - switch (e.getRawSlot()) { - case 0: - break; - case 20: - player.setHealth(0); - player.sendMessage(ChatColor.RED + "又做兵 抵死"); - break; - case 22: - break; - case 24: - player.closeInventory(); - player.openInventory(WitherChest.witherchest); - return; - default: - return; - } - - - player.closeInventory(); - }else { return; } - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Chests/WitherChest.java b/src/main/java/me/night/nullvalkyrie/Chests/WitherChest.java @@ -1,9 +0,0 @@ -package me.night.nullvalkyrie.Chests; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.inventory.Inventory; - -public class WitherChest { - public static Inventory witherchest = Bukkit.createInventory(null,54, ChatColor.DARK_AQUA + "Whiter Chest"); -} diff --git a/src/main/java/me/night/nullvalkyrie/Discord/DiscordClientManager.java b/src/main/java/me/night/nullvalkyrie/Discord/DiscordClientManager.java @@ -1,25 +0,0 @@ -package me.night.nullvalkyrie.Discord; -import net.dv8tion.jda.api.JDA; -import net.dv8tion.jda.api.JDABuilder; -import net.dv8tion.jda.api.entities.Activity; - -import javax.security.auth.login.LoginException; - - -public class DiscordClientManager { - private JDA jda; - public DiscordClientManager() { - register(); - } - public void register() { - JDABuilder builder = JDABuilder.createDefault("OTk3ODczMzgyNjM0ODM2MDQ5.GTalga.2uMZE-S0t2yL-3jsglrpG9lMbIHHBMAedVZA4U"); - builder.setActivity(Activity.streaming("cath.exe", "https://www.youtube.com/watch?v=YSKDu1gKntY")); - try { - jda = builder.build(); - } catch (LoginException e) { - e.printStackTrace(); - } - } - - -} diff --git a/src/main/java/me/night/nullvalkyrie/Enchantments/CustomEnchantment.java b/src/main/java/me/night/nullvalkyrie/Enchantments/CustomEnchantment.java @@ -1,56 +0,0 @@ -package me.night.nullvalkyrie.Enchantments; - -import org.bukkit.NamespacedKey; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.enchantments.EnchantmentTarget; -import org.bukkit.inventory.ItemStack; - -public class CustomEnchantment extends Enchantment { - private final String name; - private final int maxlvl; - public CustomEnchantment(String namespace, String name, int lvl) { - super(NamespacedKey.minecraft(namespace)); - this.name = name; - this.maxlvl = lvl; - } - - @Override - public String getName() { - return name; - } - - @Override - public int getMaxLevel() { - return maxlvl; - } - - @Override - public int getStartLevel() { - return 1; - } - - @Override - public EnchantmentTarget getItemTarget() { - return null; - } - - @Override - public boolean isTreasure() { - return false; - } - - @Override - public boolean isCursed() { - return false; - } - - @Override - public boolean conflictsWith(Enchantment other) { - return false; - } - - @Override - public boolean canEnchantItem(ItemStack item) { - return true; - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Enchantments/EnchantmentManager.java b/src/main/java/me/night/nullvalkyrie/Enchantments/EnchantmentManager.java @@ -1,38 +0,0 @@ -package me.night.nullvalkyrie.Enchantments; - -import org.bukkit.enchantments.Enchantment; - -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.stream.Collectors; - -public class EnchantmentManager { - public EnchantmentManager() { - register(); - } - public static final Enchantment ThunderBolt = new CustomEnchantment("thunderbolt", "ThunderBolt", 5); - public static final Enchantment SmeltingTouch = new CustomEnchantment("smelting-touch", "Smelting Touch", 1); - public static void register() { - boolean registered = Arrays.stream(Enchantment.values()).collect(Collectors.toList()).contains(ThunderBolt); - if(!registered) { - registerEnchantment(ThunderBolt); - registerEnchantment(SmeltingTouch); - } - - } - public static void registerEnchantment(Enchantment en) { - try { - try { - Field f = Enchantment.class.getDeclaredField("acceptingNew"); - f.setAccessible(true); - f.set(null, true); - } catch (Exception e) { - e.printStackTrace(); - } - Enchantment.registerEnchantment(en); - } catch (Exception e) { - e.printStackTrace(); - } - } - -} diff --git a/src/main/java/me/night/nullvalkyrie/Events/CustomItemEvents.java b/src/main/java/me/night/nullvalkyrie/Events/CustomItemEvents.java @@ -1,318 +0,0 @@ -package me.night.nullvalkyrie.Events; - -import me.night.nullvalkyrie.Items.CustomItemManager; -import me.night.nullvalkyrie.Items.Rarity; -import me.night.nullvalkyrie.Main; -import me.night.nullvalkyrie.commands.SpawnCommand; -import org.bukkit.*; -import org.bukkit.block.Block; -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.*; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Merchant; -import org.bukkit.inventory.MerchantRecipe; -import org.bukkit.scheduler.BukkitRunnable; - -import java.util.*; - -public class CustomItemEvents implements Listener { - private Main main; - public CustomItemEvents(Main main) { - this.main = main; - } - @EventHandler - public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { - if (e.getDamager().getType().equals(EntityType.SNOWBALL)) { - Snowball sb = (Snowball) e.getDamager(); - Player pl = (Player) sb.getShooter(); - if (pl.getInventory().getItemInMainHand().getItemMeta() != null) { - String name = pl.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - if (name.equalsIgnoreCase(Rarity.ULTRA.getColor() + "Snow Gun")) { - ((Snowball) e.getDamager()).setShooter(pl.getPlayer()); - e.setDamage(2000); - } else if (name.equalsIgnoreCase("AA-12")) { - e.setDamage(7); - } else { - e.setDamage(0); - } - } - } else if (e.getDamager() instanceof Player) { - Player player = (Player) e.getDamager(); - if (player.getInventory().getItemInMainHand().getItemMeta() != null) { - String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - if(name.equalsIgnoreCase(Rarity.MYTHIC.getColor() + "Fabled Widow Sword")) { - if (e.getEntity() instanceof Zombie) { - int zombie = CustomItemManager.loadConfig("ItemData\\WidowSword.yml").getInt("zombie"); - e.setDamage(e.getDamage() * (1 + zombie / 100)); - } else if (e.getEntity() instanceof Skeleton) { - int skeleton = CustomItemManager.loadConfig("ItemData\\WidowSword.yml").getInt("skeleton"); - e.setDamage(e.getDamage() * (1 + skeleton / 100)); - } else if (e.getEntity() instanceof Spider) { - int spider = CustomItemManager.loadConfig("ItemData\\WidowSword.yml").getInt("spider"); - e.setDamage(e.getDamage() * (1 + spider / 100)); - } - } - } - } - } - - @EventHandler - public void onPlayerFish(PlayerFishEvent e) { - Player player = e.getPlayer(); - if (player.getInventory().getItemInMainHand().getItemMeta() != null) { - String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - if (name.equalsIgnoreCase(Rarity.RARE.getColor() + "Grappling Hook")) { - if(e.getState().equals(PlayerFishEvent.State.REEL_IN)) { - Location change = e.getHook().getLocation().subtract(player.getLocation()); - player.setVelocity(change.toVector().multiply(0.4)); - } - } - } - } - @EventHandler - public void onPlayerInteract(PlayerInteractEvent e) { - Player player = e.getPlayer(); - if (player.getInventory().getItemInMainHand().getItemMeta() != null) { - String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - if (e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { - if (name.equalsIgnoreCase(Rarity.GRAND.getColor() + "Teleport Door")) { - Block block = player.getTargetBlock((Set<Material>) null, 12); - Location l = block.getLocation(); - l.add(0, 1, 0); - float yaw = player.getEyeLocation().getYaw(); - float pitch = player.getEyeLocation().getPitch(); - l.setYaw(yaw); - l.setPitch(pitch); - player.teleport(l); - player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 10, 10); - } else if (name.equalsIgnoreCase(Rarity.ULTRA.getColor() + "Snow Gun")) { - Snowball s = player.launchProjectile(Snowball.class, player.getLocation().getDirection()); - s.setVelocity(player.getLocation().getDirection().multiply(10)); - } else if (name.equalsIgnoreCase(Rarity.MYTHIC.getColor() + "Terminator")) { - Arrow arrow = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); - arrow.setVelocity(arrow.getVelocity().multiply(5)); - arrow.setPickupStatus(Arrow.PickupStatus.DISALLOWED); - arrow.setShooter(player); - arrow.setDamage(50); - Arrow a1 = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); - a1.setVelocity(arrow.getVelocity().rotateAroundY(Math.toRadians(5)).multiply(5)); - a1.setPickupStatus(Arrow.PickupStatus.DISALLOWED); - a1.setShooter(player); - a1.setDamage(50); - Arrow a2 = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); - a2.setVelocity(arrow.getVelocity().rotateAroundY(Math.toRadians(-5)).multiply(5)); - a2.setPickupStatus(Arrow.PickupStatus.DISALLOWED); - a2.setShooter(player); - a2.setDamage(50); - e.setCancelled(true); - } else if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Explosive Bow")) { - Arrow arrow = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); - arrow.setVelocity(arrow.getVelocity().multiply(5)); - arrow.setShooter(player); - arrow.setDamage(50); - e.setCancelled(true); - } - } else if (e.getAction().equals(Action.LEFT_CLICK_AIR) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)) { - if (name.equalsIgnoreCase(Rarity.MYTHIC.getColor() + "Terminator")) { - Arrow arrow = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); - arrow.setVelocity(arrow.getVelocity().multiply(5)); - arrow.setPickupStatus(Arrow.PickupStatus.DISALLOWED); - arrow.setShooter(player); - arrow.setDamage(50); - Arrow a1 = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); - a1.setVelocity(arrow.getVelocity().rotateAroundY(Math.toRadians(5)).multiply(5)); - a1.setPickupStatus(Arrow.PickupStatus.DISALLOWED); - a1.setShooter(player); - a1.setDamage(50); - Arrow a2 = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); - a2.setVelocity(arrow.getVelocity().rotateAroundY(Math.toRadians(-5)).multiply(5)); - a2.setPickupStatus(Arrow.PickupStatus.DISALLOWED); - a2.setShooter(player); - a2.setDamage(50); - e.setCancelled(true); - } else if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Explosive Bow")) { - Arrow arrow = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); - arrow.setVelocity(arrow.getVelocity().multiply(5)); - arrow.setShooter(player); - arrow.setDamage(50); - e.setCancelled(true); - } - } - } - } - @EventHandler - public void onEntityShoot(EntityShootBowEvent e) { - if (e.getProjectile() instanceof Arrow) { - if (e.getEntity() instanceof Player) { - Player player = (Player) e.getEntity(); - if (player.getInventory().getItemInMainHand().getItemMeta() != null) { - String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - if (name.equalsIgnoreCase(Rarity.MYTHIC.getColor() + "Terminator")) { - e.setCancelled(true); - } else if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Explosive Bow")) { - e.setCancelled(true); - } - } - } - } - } - @EventHandler - public void onProjectileHit(ProjectileHitEvent e) { - if(e.getEntity().getShooter() instanceof Player) { - Player shooter = (Player) e.getEntity().getShooter(); - if(shooter.getInventory().getItemInMainHand().getItemMeta() != null) { - String name = shooter.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Frag Grenade")) { - if(e.getHitBlock() == null) { - Location l = e.getHitEntity().getLocation(); - e.getEntity().setShooter(shooter); - e.getHitEntity().getWorld().createExplosion(l.getX(),l.getY(),l.getZ(),100,false,false); - } else if(e.getHitEntity() == null) { - Location l = e.getHitBlock().getLocation(); - e.getHitBlock().getWorld().createExplosion(l.getX(),l.getY(),l.getZ(),100,false,false); - } - } else if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Explosive Bow")) { - Arrow arrow = (Arrow) e.getEntity(); - Location al = arrow.getLocation(); - arrow.setShooter(shooter); - shooter.getWorld().createExplosion(al, 100, false, false); - } - } - - } - } - @EventHandler - public void onCreatureSpawn(CreatureSpawnEvent event) { - if (event.getSpawnReason() == CreatureSpawnEvent.SpawnReason.EGG) { - event.setCancelled(true); - } - } - @EventHandler - public void Projectile(ProjectileLaunchEvent e) { - if(e.getEntity().getShooter() instanceof Player) { - Player player = (Player) e.getEntity().getShooter(); - if(player.getInventory().getItemInMainHand().getItemMeta() != null) { - String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - if (name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Frag Grenade")) { - Egg s = (Egg) e.getEntity(); - s.setVelocity(player.getLocation().getDirection().multiply(10)); - } - } - } - } - @EventHandler - public void onPlayerBucketEmpty(PlayerBucketEmptyEvent e) { - int x = e.getBlockClicked().getX() + e.getBlockFace().getModX(); - int y = e.getBlockClicked().getY() + e.getBlockFace().getModY(); - int z = e.getBlockClicked().getZ() + e.getBlockFace().getModZ(); - Player player = e.getPlayer(); - if(player.getInventory().getItemInMainHand().getItemMeta() != null) { - String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - if (name.equalsIgnoreCase(Rarity.EPIC.getColor() + "Infinite Water Bucket")) { - e.getPlayer().getWorld().getBlockAt(x,y,z).setType(Material.WATER); - e.setCancelled(true); - } else if (name.equalsIgnoreCase(Rarity.EPIC.getColor() + "Infinite LAVA Bucket")) { - e.getPlayer().getWorld().getBlockAt(x,y,z).setType(Material.LAVA); - e.setCancelled(true); - } - } - } - private Location l; - private boolean spawnable = false; - @EventHandler - public void onDamage(EntityDamageByEntityEvent e) { - if(e.getEntity() instanceof Player) { - Player player = (Player) e.getEntity(); - if((player.getHealth() - e.getDamage()) <= 0) { - e.setCancelled(true); - Location loc = player.getWorld().getBlockAt(-3,23,-3).getLocation(); - player.teleport(loc); - for (Player p : Bukkit.getOnlinePlayers()) { - p.sendMessage(e.getDamager() instanceof Player ? ChatColor.RED + player.getName() + " has been killed by " + e.getDamager().getName() : ChatColor.RED + player.getName() + " died"); - p.hidePlayer(player); - } - new BukkitRunnable() { - @Override - public void run() { - for (Player p : Bukkit.getOnlinePlayers()) { - p.showPlayer(player); - } - player.setHealth(20); -// while(!spawnable) { -// l = generateRandomCoord(9, Bukkit.getWorld("world")); -// if(isSpawnable(l)) { -// spawnable = true; -// player.teleport(l); -// } -// } - player.teleport(generateRandomCoord(9, Bukkit.getWorld("world"))); - } - }.runTaskLater(main, 100L); - run(player, new int[]{5}); - } - } - - } - public Location generateRandomCoord(int size, World world) { - int ranX = SpawnCommand.getRandomWithNeg(size), ranZ = SpawnCommand.getRandomWithNeg(size); - Block block = world.getHighestBlockAt(ranX, ranZ); - return block.getLocation(); - } - public boolean isSpawnable(Location loc) { - Block feetBlock = loc.getBlock(), headBlock = loc.clone().add(0, 1, 0).getBlock(), upperBlock = loc.clone().add(0, 2, 0).getBlock(); - return feetBlock.isPassable() && !feetBlock.isLiquid() && headBlock.isPassable() && !headBlock.isLiquid() && upperBlock.isPassable() && !upperBlock.isLiquid(); - } - private int taskID; - public void run(Player player, int[] a) { - taskID = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(main, () -> { - player.sendTitle(ChatColor.RED +"YOU DIED!",ChatColor.GREEN +"You will revive in " + a[0] + " seconds",0,20,0); - a[0]--; - if (a[0] == 0) { - Bukkit.getScheduler().cancelTask(taskID); - } - }, 0L, 20L); - } - - private final Map<UUID, Merchant> villagerlist = new HashMap<>(); - @EventHandler - public void onClick(PlayerInteractEntityEvent e) { - Player p = e.getPlayer(); - Entity clickedEntity = e.getRightClicked(); - if (clickedEntity instanceof Creeper) { - if (p.getInventory().getItemInMainHand().getType() != Material.STICK) return; - clickedEntity.remove(); - Location loc = clickedEntity.getLocation(); - Villager villager = (Villager) p.getWorld().spawnEntity(loc, EntityType.VILLAGER); - villager.setProfession(Villager.Profession.TOOLSMITH); - List<MerchantRecipe> recipes = new ArrayList<>(); - MerchantRecipe bread = new MerchantRecipe(new ItemStack(Material.BREAD, 3), 10); - bread.addIngredient(new ItemStack(Material.EMERALD, 10)); - recipes.add(bread); - - MerchantRecipe tntStick = new MerchantRecipe(CustomItemManager.getItem("Terminator"), 10); - tntStick.addIngredient(CustomItemManager.getItem("Widow Sword")); - recipes.add(tntStick); - Merchant merchant = Bukkit.createMerchant("Yum Yum In The Tum Tum"); - merchant.setRecipes(recipes); - - villagerlist.put(villager.getUniqueId(), merchant); - - p.spawnParticle(Particle.END_ROD, loc, 30, 0, 1, 0, 0.2); - p.openMerchant(merchant, true); - } - if (e.getRightClicked() instanceof Villager) { - Merchant merchant = villagerlist.get(clickedEntity.getUniqueId()); - if (merchant == null) return; - e.setCancelled(true); - p.openMerchant(merchant, true); - } - } - -} -\ No newline at end of file diff --git a/src/main/java/me/night/nullvalkyrie/Items/CustomItemManager.java b/src/main/java/me/night/nullvalkyrie/Items/CustomItemManager.java @@ -1,206 +0,0 @@ -package me.night.nullvalkyrie.Items; - -import me.night.nullvalkyrie.Main; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.configuration.MemorySection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.io.File; -import java.io.IOException; -import java.util.*; - - -public class CustomItemManager { - private static HashMap<String, ItemStack> a = new HashMap<>(); - private static Main main; - public CustomItemManager(Main main) { - this.main = main; - if(!main.getDataFolder().exists()) { - main.getDataFolder().mkdir(); - } - createDirectoryInPluginFolder("ItemData"); - createFilesFromConfig(main.getConfig()); - register(); - } - public void register() { - List<String> hh = getAllFilesFromDirectory("ItemData"); - for(int kk = 0; kk < hh.size(); kk++) { - FileConfiguration c = loadConfig("ItemData/" + hh.get(kk)); - ItemStack i = new ItemStack(Material.matchMaterial(c.getString("material"))); - HashMap<String, List<String>> d = new HashMap<>(); - List<String> pr = new ArrayList<>(); - List<String> ia = new ArrayList<>(); - HashMap<String, Double> aa = new HashMap<>(); - for (String key : c.getKeys(true)) { - if (key.startsWith("enchants.")) { - i.addUnsafeEnchantment(Enchantment.getByKey(NamespacedKey.minecraft(Arrays.asList(key.split("\\.")).get(1))), c.getInt(key)); - } else if (key.startsWith("lore.properties.")) { - String property = Arrays.asList(key.split("\\.")).get(2); - if (property.equals("damage") && c.getInt(key) > 0) { - pr.add(ChatColor.GRAY + "Damage: " + ChatColor.RED + "+" + c.getInt(key)); - } else if (property.equals("speed") && c.getInt(key) > 0) { - pr.add(ChatColor.GRAY + "Speed: " + ChatColor.RED + "+" + c.getInt(key)); - } - } else if (key.startsWith("lore.ability.")) { - String a = Arrays.asList(key.split("\\.")).get(2); - if (a.equals("name")) { - ia.add(ChatColor.GOLD + "Item Ability: " + c.getString(key)); - } else if (a.equals("details")) { - for (Object line : c.getList(key)) { - ia.add(ChatColor.GRAY.toString() + line); - } - } - } else if (key.startsWith("attributes.")) { - if (c.getDouble(key) > 0.0) { - aa.put(Arrays.asList(key.split("\\.")).get(1), c.getDouble(key)); - } - } else if (key.startsWith("recipe.")) { - - } - } - d.put("properties", pr); - d.put("ability", ia); - d.put("attributes", pr); - ItemMeta im = i.getItemMeta(); - im.setDisplayName(Rarity.getRarity(c.getString("rarity")).getColor() + c.getString("name")); - im.setUnbreakable(true); - ArrayList<String> l = new ArrayList<>(); - l.addAll(d.get("properties")); - l.add(""); - ArrayList<String> e = new ArrayList<>(); - for (Enchantment ee : i.getEnchantments().keySet()) { - List<String> splitted = Arrays.asList(Arrays.asList(ee.getKey().toString().split(":")).get(1).split("_")); - StringBuilder n = new StringBuilder(); - for (String ii : splitted) { - String s = ii.substring(0, 1).toUpperCase() + ii.substring(1); - if (splitted.size() > 1) { - if (ii.equals(splitted.get(splitted.size() - 1))) { - n.append(s); - } else { - n.append(s); - n.append(" "); - } - } else n.append(s); - } - e.add(n + " " + i.getEnchantmentLevel(ee)); - } - l.add(ChatColor.BLUE + String.join(", ", e)); - l.add(""); - l.addAll(ia); - l.add(""); - l.add(Rarity.getRarity(c.getString("rarity")).getDisplay()); - im.setLore(l); - for (String q : aa.keySet()) { - if (q.equals("damage")) { - AttributeModifier p = new AttributeModifier(UUID.randomUUID(), "generic.attackDamage", aa.get(q), AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - im.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, p); - } else if (q.equals("moveSpeed")) { - AttributeModifier s = new AttributeModifier(UUID.randomUUID(), "generic.movementSpeed", aa.get(q), AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); - im.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, s); - } - } - im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS); - i.setItemMeta(im); - a.put(c.getString("name"), i); - } - } - public static void setItemRecipe(NamespacedKey key, ItemStack i, int ingredient, String shape1, String shape2, String shape3, List<Material> ingredients) { -// ShapedRecipe wither_sword_recipe = new ShapedRecipe(new NamespacedKey(main, "widow_sword"), widow_sword); -// wither_sword_recipe.shape(" A ", " A "," B "); -// wither_sword_recipe.setIngredient('A', Material.IRON_INGOT); -// wither_sword_recipe.setIngredient('B', Material.STICK); -// Bukkit.addRecipe(wither_sword_recipe); - } - public static YamlConfiguration loadConfig(String path) { - File f = new File(main.getDataFolder(), path); - if(!f.exists()) { - try { - f.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - - } - return YamlConfiguration.loadConfiguration(f); - } - public static File loadFile(String path) { - File f = new File(main.getDataFolder(), path); - if(!f.exists()) { - try { - f.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - - } - return f; - } - public static void createDirectoryInPluginFolder(String path) { - File f = new File(main.getDataFolder(), path); - if(!f.exists()) { - try { - if(!f.mkdir()) { - try { - f.mkdir(); - } catch (SecurityException e) { - e.printStackTrace(); - } - } - } catch (SecurityException e) { - e.printStackTrace(); - } - - } - } - public static List<String> getAllFilesFromDirectory(String path) { - ArrayList<String> ns = new ArrayList<>(); - try { - File f = new File(main.getDataFolder(), path); - File[] files = f.listFiles(); - for (int i = 0; i < files.length; i++) { - System.out.println(files[i].getName()); - ns.add(files[i].getName()); - } - } catch (Exception e) { - e.printStackTrace(); - } - return ns; - } - public void createFilesFromConfig(FileConfiguration config) { - for(String a : config.getKeys(false)) { - FileConfiguration c = loadConfig("ItemData/" + a + ".yml"); - for(String b : config.getKeys(true)) { - if(b.startsWith(a)) { - List<String> d = new ArrayList<>(Arrays.asList(b.split("\\."))); - if(d.size() != 1) { - d.remove(0); - if(d.size() == 1) { - c.set(d.get(0), config.get(b)); - } else { - c.set(String.join(".", d), config.get(b)); - } - try { - c.save(loadFile("ItemData/" + a + ".yml")); - } catch (IOException e) { - e.printStackTrace(); - } - } - - } - } - } - } - public static ItemStack getItem(String name){ - return a.get(name); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Items/Rarity.java b/src/main/java/me/night/nullvalkyrie/Items/Rarity.java @@ -1,47 +0,0 @@ -package me.night.nullvalkyrie.Items; - -import org.bukkit.ChatColor; -public enum Rarity { - COMMON(ChatColor.WHITE.toString() + ChatColor.BOLD + "COMMON", ChatColor.WHITE.toString()), - UNCOMMON(net.md_5.bungee.api.ChatColor.of("#31ff09").toString() + ChatColor.BOLD + "UNCOMMON", net.md_5.bungee.api.ChatColor.of("#31ff09").toString()), - RARE(net.md_5.bungee.api.ChatColor.of("#2f57ae").toString() + ChatColor.BOLD + "RARE", net.md_5.bungee.api.ChatColor.of("#2f57ae").toString()), - EPIC(net.md_5.bungee.api.ChatColor.of("#b201b2").toString() + ChatColor.BOLD + "EPIC", net.md_5.bungee.api.ChatColor.of("#b201b2").toString()), - LEGENDARY(net.md_5.bungee.api.ChatColor.of("#ffa21b").toString() + ChatColor.BOLD + "LEGENDARY", net.md_5.bungee.api.ChatColor.of("#ffa21b").toString()), - MYTHIC(net.md_5.bungee.api.ChatColor.of("#ff23ff").toString() + ChatColor.BOLD + "MYTHIC", net.md_5.bungee.api.ChatColor.of("#ff23ff").toString()), - ULTRA(ChatColor.RED.toString() + ChatColor.BOLD + "ULTRA", ChatColor.RED.toString()), - GRAND(net.md_5.bungee.api.ChatColor.of("#00fdff").toString() + ChatColor.BOLD + "GRAND", net.md_5.bungee.api.ChatColor.of("#00fdff").toString()); - private String display; - private String color; - Rarity(String display, String color) { - this.display = display; - this.color = color; - } - public String getDisplay() { - return display; - } - public String getColor() { - return color; - } - public static Rarity getRarity(String str) { - switch(str) { - case "COMMON": - return COMMON; - case "UNCOMMON": - return UNCOMMON; - case "RARE": - return RARE; - case "EPIC": - return EPIC; - case "LEGENDARY": - return LEGENDARY; - case "MYTHIC": - return MYTHIC; - case "ULTRA": - return ULTRA; - case "GRAND": - return GRAND; - default: - return COMMON; - } - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Main.java b/src/main/java/me/night/nullvalkyrie/Main.java @@ -1,13 +1,15 @@ package me.night.nullvalkyrie; -import me.night.nullvalkyrie.Chests.MenuListener; -import me.night.nullvalkyrie.Discord.DiscordClientManager; -import me.night.nullvalkyrie.Enchantments.EnchantmentManager; -import me.night.nullvalkyrie.Events.CustomItemEvents; -import me.night.nullvalkyrie.Items.CustomItemManager; -import me.night.nullvalkyrie.Rank.ScoreboardListener; -import me.night.nullvalkyrie.Util.Util; +import me.night.nullvalkyrie.chests.MenuListener; +import me.night.nullvalkyrie.discord.DiscordClientManager; +import me.night.nullvalkyrie.enchantments.EnchantmentManager; +import me.night.nullvalkyrie.events.CustomItemEvents; +import me.night.nullvalkyrie.items.CustomItemManager; +import me.night.nullvalkyrie.rank.ScoreboardListener; +import me.night.nullvalkyrie.util.Util; import me.night.nullvalkyrie.commands.*; +import me.night.nullvalkyrie.database.Client; +import me.night.nullvalkyrie.miners.CryptoMiner; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.*; @@ -21,6 +23,7 @@ import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.plugin.java.JavaPlugin; import java.io.File; +import java.util.Date; public final class Main extends JavaPlugin implements Listener { private BossBar bossbar; @@ -28,7 +31,6 @@ public final class Main extends JavaPlugin implements Listener { public CustomItemManager getCustomItemManager() { return customItemManager; } - @Override public void onEnable() { getConfig().options().copyDefaults(); @@ -42,6 +44,7 @@ public final class Main extends JavaPlugin implements Listener { new HologramCommand(); new CraftCommand(); new EnchantingCommand(); + new BetaCommand(); new RankCommand(this); new UtilCommand(this); new WeaponCommand(this); @@ -52,9 +55,11 @@ public final class Main extends JavaPlugin implements Listener { Bukkit.getPluginManager().registerEvents(new ScoreboardListener(this), this); Bukkit.getPluginManager().registerEvents(new CustomItemEvents(this), this); Bukkit.getPluginManager().registerEvents(new SpawnCommand(this), this); - new EnchantmentManager(); + EnchantmentManager.register(); new DiscordClientManager(); customItemManager = new CustomItemManager(this); + new CryptoMiner(this, "Gay", Material.ENDER_CHEST, 10, 0.7, new Date().getTime()); + new Client(); } @@ -62,7 +67,8 @@ public final class Main extends JavaPlugin implements Listener { public void onJoin(PlayerJoinEvent e) { e.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§1NOT ENOUGH MANNER")); bossbar.addPlayer(e.getPlayer()); - } + + } @EventHandler public void onPing(ServerListPingEvent e) { diff --git a/src/main/java/me/night/nullvalkyrie/Rank/BelowNameManager.java b/src/main/java/me/night/nullvalkyrie/Rank/BelowNameManager.java @@ -1,18 +0,0 @@ -package me.night.nullvalkyrie.Rank; - -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -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", "health"); - obj.setDisplaySlot(DisplaySlot.BELOW_NAME); - obj.setDisplayName(ChatColor.RED + "❤"); - player.setScoreboard(board); - player.setHealth(player.getHealth()); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Rank/NameTagManager.java b/src/main/java/me/night/nullvalkyrie/Rank/NameTagManager.java @@ -1,45 +0,0 @@ -package me.night.nullvalkyrie.Rank; - -import me.night.nullvalkyrie.Main; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.Team; - -public class NameTagManager { - private Main main; - - public NameTagManager(Main main) { - this.main = main; - } - @SuppressWarnings("deprecation") - public void setNametags(Player player) { - Scoreboard newScoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); - Objective obj = newScoreboard.registerNewObjective("TabList", "dummy"); - 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 = ScoreboardListener.rankManager.getRank(target.getUniqueId()); - player.getScoreboard().getTeam(rank.name()).addEntry(target.getName()); - } - } - } - public void newTag(Player player) { - Rank rank = ScoreboardListener.rankManager.getRank(player.getUniqueId()); - for(Player target : Bukkit.getOnlinePlayers()) { - 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/Rank/Rank.java b/src/main/java/me/night/nullvalkyrie/Rank/Rank.java @@ -1,20 +0,0 @@ -package me.night.nullvalkyrie.Rank; - -import org.bukkit.ChatColor; - -public enum Rank { - OWNER(ChatColor.DARK_RED + "{OWNER}"), - ADMIN(ChatColor.RED + "{ADMIN}"), - SPECIAL(ChatColor.GOLD + "{SPECIAL}"), - ROOKIE(ChatColor.DARK_GREEN + "{ROOKIE}"); - - private String display; - - Rank(String display) { - this.display = display; - } - - public String getDisplay() { - return display; - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Rank/RankManager.java b/src/main/java/me/night/nullvalkyrie/Rank/RankManager.java @@ -1,52 +0,0 @@ -package me.night.nullvalkyrie.Rank; - -import me.night.nullvalkyrie.Main; -import org.bukkit.Bukkit; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Player; - -import java.io.File; -import java.io.IOException; -import java.util.UUID; - -import static me.night.nullvalkyrie.Rank.ScoreboardListener.nameTagManager; - -public class RankManager { - private File file; - private YamlConfiguration config; - - private Main main; - - public RankManager(Main main) { - this.main = main; - if(!main.getDataFolder().exists()) { - main.getDataFolder().mkdir(); - } - file = new File(main.getDataFolder(), "ranks.yml"); - if(!file.exists()) { - try { - file.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - config = YamlConfiguration.loadConfiguration(file); - } - public void setRank(UUID uuid, Rank rank) { - config.set(uuid.toString(), rank.name()); - try { - config.save(file); - } catch (IOException e) { - e.printStackTrace(); - } - for(Player player : Bukkit.getOnlinePlayers()) { - if(player.hasPlayedBefore()) { - nameTagManager.removeTag(player); - nameTagManager.newTag(player); - } - } - } - public Rank getRank(UUID uuid) { - return Rank.valueOf(config.getString(uuid.toString())); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Rank/ScoreboardListener.java b/src/main/java/me/night/nullvalkyrie/Rank/ScoreboardListener.java @@ -1,61 +0,0 @@ -package me.night.nullvalkyrie.Rank; - -import me.night.nullvalkyrie.Main; -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.entity.PlayerDeathEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -public class ScoreboardListener implements Listener { - - public static RankManager rankManager; - public static NameTagManager nameTagManager; - private SideBarManager sideBarManager; - private BelowNameManager belowNameManager; - public ScoreboardListener(Main main) { - nameTagManager = new NameTagManager(main); - rankManager = new RankManager(main); - sideBarManager = new SideBarManager(); - belowNameManager = new BelowNameManager(); - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - Player player = e.getPlayer(); - if(!player.hasPlayedBefore()) { - e.getPlayer().sendTitle(ChatColor.RED + "Welcome to Matrix!", ChatColor.GREEN + "LOL", 20, 100, 20); - rankManager.setRank(player.getUniqueId(), Rank.ROOKIE); - } - 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); - belowNameManager.setBelowName(player); - e.setJoinMessage(rankManager.getRank(e.getPlayer().getUniqueId()).getDisplay() + " " + e.getPlayer().getName() + ChatColor.WHITE + " joined the server!"); - } - - @EventHandler - public void onQuit(PlayerQuitEvent e) { - e.setQuitMessage(ChatColor.RED + "bozo " + e.getPlayer().getName() + " has left."); - nameTagManager.removeTag(e.getPlayer()); - e.getPlayer().setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); - } - - @EventHandler - public void onChat(AsyncPlayerChatEvent e) { - e.setCancelled(true); - Player player = e.getPlayer(); - Bukkit.broadcastMessage(rankManager.getRank(player.getUniqueId()).getDisplay() + " " + player.getName() + ChatColor.WHITE + ": " + e.getMessage()); - } - - //Death changing in sidebar - @EventHandler - public void onDeath(PlayerDeathEvent e) { - sideBarManager.changeOnDeath(e.getEntity().getPlayer()); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Rank/SideBarManager.java b/src/main/java/me/night/nullvalkyrie/Rank/SideBarManager.java @@ -1,50 +0,0 @@ -package me.night.nullvalkyrie.Rank; - -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.HashMap; -import java.util.UUID; - -public class SideBarManager { - private final HashMap<UUID, Integer> deaths = new HashMap<>(); - @SuppressWarnings("deprecation") - public void setSideBar(Player player) { - Scoreboard board = player.getScoreboard(); - Objective obj = board.registerNewObjective("Pluto", "dummy"); - obj.setDisplaySlot(DisplaySlot.SIDEBAR); - obj.setDisplayName(ChatColor.AQUA.toString() + ChatColor.BOLD + "Pluto"); - 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 playersOnline = board.registerNewTeam("deathsTotal"); - playersOnline.addEntry(ChatColor.BOLD.toString()); - playersOnline.setPrefix(ChatColor.BLUE + "Deaths: "); - playersOnline.setSuffix(ChatColor.YELLOW + "0"); - obj.getScore(ChatColor.BOLD.toString()).setScore(3); - player.setScoreboard(board); - deaths.put(player.getUniqueId(), 0); - } - - public void changeOnDeath(Player player) { - int amount = deaths.get(player.getUniqueId()); - amount++; - deaths.put(player.getUniqueId(), amount++); - player.getScoreboard().getTeam("deathsTotal").setSuffix(ChatColor.YELLOW.toString() + amount); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Util/Util.java b/src/main/java/me/night/nullvalkyrie/Util/Util.java @@ -1,17 +0,0 @@ -package me.night.nullvalkyrie.Util; - -public class Util { - public static String centerText(String text, int lineLength) { - StringBuilder builder = new StringBuilder(); - char space = ' '; - int distance = (lineLength - text.length()) / 2; - for (int ii = 0; ii < distance; ii++) { - builder.append(space); - } - builder.append(text); - for (int i = 0; i < distance; ++i) { - builder.append(space); - } - return builder.toString(); - } -} diff --git a/src/main/java/me/night/nullvalkyrie/Util/Utils.java b/src/main/java/me/night/nullvalkyrie/Util/Utils.java @@ -1,49 +0,0 @@ -package me.night.nullvalkyrie.Util; - -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.ArrayList; -import java.util.List; - -public class Utils { - public static String color(String string) { - return ChatColor.translateAlternateColorCodes('&', string); - } - - public static ItemStack createItem(Material type, int amount, String name, String... lines) { - ItemStack item = new ItemStack(type, amount); - ItemMeta meta = item.getItemMeta(); - meta.setUnbreakable(true); - meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS); - if (name != null) meta.setDisplayName(color(name)); - if (lines != null) { - List<String> lore = new ArrayList<>(); - for (String line : lines) { - lore.add(color(line)); - } - meta.setLore(lore); - } - item.setItemMeta(meta); - return item; - } - - public static ItemStack enchantItem(ItemStack item, Enchantment enchant, int level) { - item.addUnsafeEnchantment(enchant, level); - return item; - } - - public static ItemStack[] makeArmorSet(ItemStack helmet, ItemStack chestplate, ItemStack leggings, ItemStack boots) { - ItemStack[] armor = new ItemStack[4]; - armor[3] = helmet; - armor[2] = chestplate; - armor[1] = leggings; - armor[0] = boots; - return armor; - } - -} diff --git a/src/main/java/me/night/nullvalkyrie/Util/components/CustomMob.java b/src/main/java/me/night/nullvalkyrie/Util/components/CustomMob.java @@ -1,111 +0,0 @@ -package me.night.nullvalkyrie.Util.components; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.attribute.Attribute; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.inventory.EntityEquipment; -import org.bukkit.inventory.ItemStack; - -import java.util.Arrays; -import java.util.List; - -import static me.night.nullvalkyrie.Util.Utils.color; -import static me.night.nullvalkyrie.Util.Utils.*; - -public enum CustomMob { - - DESERT_RISEN( - "&6Desert Risen", - 2048, - 60, - EntityType.HUSK, - null, - null, - new LootItem(createItem(Material.ROTTEN_FLESH, 1, "&fPreserved Flesh", "&7A preserved flesh from a rotting corpse", "&7Not sure what you'd want this for, though", "&7", "&9Foodstuff"), 1, 3, 100)), - - SKELETAL_MAGE( - "&dSkeletal Mage", - 2048, - 15, - EntityType.SKELETON, - createItem(Material.BONE, 1, null), makeArmorSet(new ItemStack(Material.IRON_HELMET), - null, - null, - null), - new LootItem(createItem(Material.BONE, 1, "&dBone Wand", "&7A wand made from skeletal bones"), 30), - new LootItem(new ItemStack(Material.BONE), 1, 3, 100)), - - ZOMBIE_SQUIRE( - "&bZombie Squire", - 2048, - 12, - EntityType.ZOMBIE, - new ItemStack(Material.IRON_SWORD), - makeArmorSet(new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.IRON_BOOTS)), new LootItem(new ItemStack(Material.CHAINMAIL_CHESTPLATE), 35), new LootItem(new ItemStack(Material.CHAINMAIL_LEGGINGS), 35), new LootItem(new ItemStack(Material.CHAINMAIL_HELMET), 35), new LootItem(new ItemStack(Material.IRON_BOOTS), 25), new LootItem(new ItemStack(Material.IRON_SWORD), 40)), - - CHARRED_ARCHER( - "&8Charred Archer", - 2048, - 3, - EntityType.WITHER_SKELETON, - enchantItem(new ItemStack(Material.BOW), Enchantment.ARROW_KNOCKBACK, 2), - null, new LootItem(enchantItem(enchantItem(createItem(Material.BOW, 1, "&cBurnt Bow", "&7This bow is burnt to a crisp but remains intact", "&8due to special enchantments"), Enchantment.ARROW_FIRE, 1), Enchantment.ARROW_KNOCKBACK, 2), 100), - new LootItem(new ItemStack(Material.BONE), 1, 5, 100)), - ; - - private String name; - private double maxHealth, spawnChance; - private EntityType type; - private ItemStack mainItem; - private ItemStack[] armor; - private List<LootItem> lootTable; - - CustomMob(String name, double maxHealth, double spawnChance, EntityType type, ItemStack mainItem, ItemStack[] armor, LootItem... lootItems) { - this.name = name; - this.maxHealth = maxHealth; - this.spawnChance = spawnChance; - this.type = type; - this.mainItem = mainItem; - this.armor = armor; - lootTable = Arrays.asList(lootItems); - } - - public LivingEntity spawn(Location location) { - LivingEntity entity = (LivingEntity) location.getWorld().spawnEntity(location, type); - entity.setCustomNameVisible(true); - entity.setCustomName(color(name + " &r&c" + (int) maxHealth + "/" + (int) maxHealth + "❤")); - entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(maxHealth); - entity.setHealth(maxHealth); - EntityEquipment inv = entity.getEquipment(); - if (armor != null) inv.setArmorContents(armor); - inv.setHelmetDropChance(0f); - inv.setChestplateDropChance(0f); - inv.setLeggingsDropChance(0f); - inv.setBootsDropChance(0f); - inv.setItemInMainHand(mainItem); - inv.setItemInMainHandDropChance(0f); - return entity; - } - - public void tryDropLoot(Location location) { - for (LootItem item : lootTable) { - item.tryDropItem(location); - } - } - - public String getName() { - return name; - } - - public double getMaxHealth() { - return maxHealth; - } - - public double getSpawnChance() { - return spawnChance; - } - -} diff --git a/src/main/java/me/night/nullvalkyrie/Util/components/LootItem.java b/src/main/java/me/night/nullvalkyrie/Util/components/LootItem.java @@ -1,36 +0,0 @@ -package me.night.nullvalkyrie.Util.components; - -import org.bukkit.Location; -import org.bukkit.inventory.ItemStack; - -import java.util.Random; - -public class LootItem { - - private ItemStack item; - private int min = 1, max = 1; - private double dropRate; - private static Random randomiser = new Random(); - - public LootItem(ItemStack item, double dropRate) { - this.item = item; - this.dropRate = dropRate; - } - - public LootItem(ItemStack item, int min, int max, double dropRate) { - this.item = item; - this.min = min; - this.max = max; - this.dropRate = dropRate; - } - - public void tryDropItem(Location loc) { - if (Math.random() * 101 > dropRate) return; - int amount = randomiser.nextInt(max - min + 1) + min; - if (amount == 0) return; - ItemStack item = this.item.clone(); - item.setAmount(amount); - loc.getWorld().dropItemNaturally(loc, item); - } - -} diff --git a/src/main/java/me/night/nullvalkyrie/chests/MenuListener.java b/src/main/java/me/night/nullvalkyrie/chests/MenuListener.java @@ -0,0 +1,37 @@ +package me.night.nullvalkyrie.chests; + +import me.night.nullvalkyrie.commands.MenuCommand; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +public class MenuListener implements Listener { + + @EventHandler + public void onClick(InventoryClickEvent e) { + if(e.getInventory().equals(MenuCommand.inv) && e.getCurrentItem() != null) { + e.setCancelled(true); + Player player = (Player) e.getWhoClicked(); + switch (e.getRawSlot()) { + case 0: + break; + case 20: + player.setHealth(0); + player.sendMessage(ChatColor.RED + "又做兵 抵死"); + break; + case 22: + break; + case 24: + player.closeInventory(); + player.openInventory(WitherChest.witherchest); + return; + default: + return; + } + + + player.closeInventory(); + }else { return; } + } +} diff --git a/src/main/java/me/night/nullvalkyrie/chests/WitherChest.java b/src/main/java/me/night/nullvalkyrie/chests/WitherChest.java @@ -0,0 +1,9 @@ +package me.night.nullvalkyrie.chests; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.inventory.Inventory; + +public class WitherChest { + public static Inventory witherchest = Bukkit.createInventory(null,54, ChatColor.DARK_AQUA + "Whiter Chest"); +} diff --git a/src/main/java/me/night/nullvalkyrie/commands/BetaCommand.java b/src/main/java/me/night/nullvalkyrie/commands/BetaCommand.java @@ -0,0 +1,36 @@ +package me.night.nullvalkyrie.commands; + +import net.minecraft.network.protocol.game.ClientboundSetHealthPacket; +import org.bukkit.command.CommandSender; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; + +import java.util.List; + +import static me.night.nullvalkyrie.database.Client.getUser; + +public class BetaCommand extends Command { + public BetaCommand() { + super( + "beta", + new String[]{"b"}, + "Beta", + "" + ); + } + + @Override + public void onCommand(CommandSender sender, String[] args) { + getUser("Kaly15"); + if(sender instanceof Player) { + CraftPlayer p = (CraftPlayer) sender; + ClientboundSetHealthPacket packet = new ClientboundSetHealthPacket(19.5f, 20, 0.0f); + p.getHandle().connection.send(packet); + } + } + + @Override + public List<String> onTabComplete(CommandSender sender, String[] args) { + return null; + } +} diff --git a/src/main/java/me/night/nullvalkyrie/commands/MinerCommand.java b/src/main/java/me/night/nullvalkyrie/commands/MinerCommand.java @@ -4,10 +4,13 @@ import me.night.nullvalkyrie.Main; import me.night.nullvalkyrie.miners.MinerGUI; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import com.night.nullvalkyrie.miners.*; +import java.util.Date; import java.util.List; +import static me.night.nullvalkyrie.miners.CryptoMiner.generate; +import static me.night.nullvalkyrie.miners.CryptoMiner.getMiner; + public class MinerCommand extends Command { private Main main; public MinerCommand(Main main) { @@ -25,6 +28,9 @@ public class MinerCommand extends Command { if(sender instanceof Player) { Player player = (Player) sender; new MinerGUI(main, player); + int seconds = Math.round((new Date().getTime() - getMiner("1").getLastclaim()) / 1000); + System.out.println("Seconds" + seconds); + generate(50, seconds); } } diff --git a/src/main/java/me/night/nullvalkyrie/commands/RankCommand.java b/src/main/java/me/night/nullvalkyrie/commands/RankCommand.java @@ -3,7 +3,7 @@ package me.night.nullvalkyrie.commands; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import me.night.nullvalkyrie.Main; -import me.night.nullvalkyrie.Rank.Rank; +import me.night.nullvalkyrie.rank.Rank; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; @@ -16,7 +16,7 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; -import static me.night.nullvalkyrie.Rank.ScoreboardListener.rankManager; +import static me.night.nullvalkyrie.rank.ScoreboardListener.rankManager; //92.0.69.141:25565 public class RankCommand extends Command { diff --git a/src/main/java/me/night/nullvalkyrie/commands/ShopCommand.java b/src/main/java/me/night/nullvalkyrie/commands/ShopCommand.java @@ -0,0 +1,46 @@ +package me.night.nullvalkyrie.commands; + +import me.night.nullvalkyrie.items.CustomItemManager; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class ShopCommand extends Command{ + private FileConfiguration file; + private Inventory inv; + public ShopCommand() { + super("7elven", + new String[]{"711", "seven", "7ven"}, + "Shop", + "" + ); + file = CustomItemManager.loadConfig("miners.yml"); + } + @Override + public void onCommand(CommandSender sender, String[] args) { + inv = Bukkit.createInventory(null, 45, ChatColor.GREEN + "7-Eleven 24/7"); + for(String c : file.getKeys(false)) { + ItemStack item = new ItemStack(Material.matchMaterial(file.getString(c + ".material"))); + ItemMeta itemMeta = item.getItemMeta(); + itemMeta.setDisplayName(file.getString(c + ".name")); + List<String> lore = new ArrayList<>(); + lore.add("Price (BIN): " + file.getString(c + ".price")); + itemMeta.setLore(lore); + item.setItemMeta(itemMeta); + + } + } + + @Override + public List<String> onTabComplete(CommandSender sender, String[] args) { + return null; + } +} diff --git a/src/main/java/me/night/nullvalkyrie/commands/SpawnCommand.java b/src/main/java/me/night/nullvalkyrie/commands/SpawnCommand.java @@ -1,8 +1,8 @@ package me.night.nullvalkyrie.commands; import me.night.nullvalkyrie.Main; -import me.night.nullvalkyrie.Util.components.CustomMob; -import me.night.nullvalkyrie.Util.Utils; +import me.night.nullvalkyrie.util.components.CustomMob; +import me.night.nullvalkyrie.util.Utils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; diff --git a/src/main/java/me/night/nullvalkyrie/commands/UtilCommand.java b/src/main/java/me/night/nullvalkyrie/commands/UtilCommand.java @@ -1,7 +1,7 @@ package me.night.nullvalkyrie.commands; import me.night.nullvalkyrie.Main; -import me.night.nullvalkyrie.Items.CustomItemManager; +import me.night.nullvalkyrie.items.CustomItemManager; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; diff --git a/src/main/java/me/night/nullvalkyrie/commands/WeaponCommand.java b/src/main/java/me/night/nullvalkyrie/commands/WeaponCommand.java @@ -1,7 +1,7 @@ package me.night.nullvalkyrie.commands; import me.night.nullvalkyrie.Main; -import me.night.nullvalkyrie.Items.CustomItemManager; +import me.night.nullvalkyrie.items.CustomItemManager; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; diff --git a/src/main/java/me/night/nullvalkyrie/database/Client.java b/src/main/java/me/night/nullvalkyrie/database/Client.java @@ -0,0 +1,52 @@ +package me.night.nullvalkyrie.database; + +import com.mongodb.MongoException; +import com.mongodb.client.*; +import com.mongodb.client.model.Filters; +import org.bson.Document; +import org.bson.conversions.Bson; + +public class Client { + private MongoClient client; + private static MongoCollection<Document> users; + public Client() { + connect(); + } + public void connect() { + try (MongoClient client = MongoClients.create("mongodb+srv://cath_exe:[email protected]/NullValkyrie")) { + + } catch (MongoException e) { + System.out.println("An error occurred when logging in to MongoDB" + e); + } + MongoClient client = MongoClients.create("mongodb+srv://cath_exe:[email protected]/NullValkyrie"); + MongoDatabase database = client.getDatabase("NullValkyrie"); + users = database.getCollection("users"); + } + public static void createUserSchema(String username) { + Document document = new Document(); + document.put("Username", username); + document.put("Bank", 0); + users.insertOne(document); + } + public void updateUserBank(String username, Number coins) { + Document document = (Document) users.find(new Document("Username", username)).first(); + if(document != null) { + Bson updated = new Document("Bank", coins); + Bson update = new Document("$set", updated); + users.updateOne(document, update); + } + + } + public static void getUser(String username) { + try (MongoCursor<Document> cursor = users.find(Filters.eq("Username", username)).cursor()) { + while (cursor.hasNext()) { + Document doc = (Document) cursor.next(); + for(String a : doc.keySet()) { + if(!a.equals("_id")) { + System.out.println(a + ": " + doc.get(a)); + } + } + } + } + } +} diff --git a/src/main/java/me/night/nullvalkyrie/discord/DiscordClientManager.java b/src/main/java/me/night/nullvalkyrie/discord/DiscordClientManager.java @@ -0,0 +1,24 @@ +package me.night.nullvalkyrie.discord; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.entities.Activity; + +import javax.security.auth.login.LoginException; + + +public class DiscordClientManager { + private JDA jda; + public DiscordClientManager() { + register(); + } + public void register() { + JDABuilder builder = JDABuilder.createDefault("OTk3ODczMzgyNjM0ODM2MDQ5.Gd9Fdh.GEOleI-1znVeHwaAef54nXl2ovlSmC3hQX-qQI"); + builder.setActivity(Activity.streaming("cath.exe", "https://www.youtube.com/watch?v=YSKDu1gKntY")); + try { + jda = builder.build(); + } catch (LoginException e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/me/night/nullvalkyrie/enchantments/CustomEnchantment.java b/src/main/java/me/night/nullvalkyrie/enchantments/CustomEnchantment.java @@ -0,0 +1,56 @@ +package me.night.nullvalkyrie.enchantments; + +import org.bukkit.NamespacedKey; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.enchantments.EnchantmentTarget; +import org.bukkit.inventory.ItemStack; + +public class CustomEnchantment extends Enchantment { + private final String name; + private final int maxlvl; + public CustomEnchantment(String namespace, String name, int lvl) { + super(NamespacedKey.minecraft(namespace)); + this.name = name; + this.maxlvl = lvl; + } + + @Override + public String getName() { + return name; + } + + @Override + public int getMaxLevel() { + return maxlvl; + } + + @Override + public int getStartLevel() { + return 1; + } + + @Override + public EnchantmentTarget getItemTarget() { + return null; + } + + @Override + public boolean isTreasure() { + return false; + } + + @Override + public boolean isCursed() { + return false; + } + + @Override + public boolean conflictsWith(Enchantment other) { + return false; + } + + @Override + public boolean canEnchantItem(ItemStack item) { + return true; + } +} diff --git a/src/main/java/me/night/nullvalkyrie/enchantments/EnchantmentManager.java b/src/main/java/me/night/nullvalkyrie/enchantments/EnchantmentManager.java @@ -0,0 +1,35 @@ +package me.night.nullvalkyrie.enchantments; + +import org.bukkit.enchantments.Enchantment; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.stream.Collectors; + +public class EnchantmentManager { + public static final Enchantment ThunderBolt = new CustomEnchantment("thunderbolt", "ThunderBolt", 5); + public static final Enchantment SmeltingTouch = new CustomEnchantment("smelting-touch", "Smelting Touch", 1); + public static void register() { + boolean registered = Arrays.stream(Enchantment.values()).collect(Collectors.toList()).contains(ThunderBolt); + if(!registered) { + registerEnchantment(ThunderBolt); + registerEnchantment(SmeltingTouch); + } + + } + public static void registerEnchantment(Enchantment en) { + try { + try { + Field f = Enchantment.class.getDeclaredField("acceptingNew"); + f.setAccessible(true); + f.set(null, true); + } catch (Exception e) { + e.printStackTrace(); + } + Enchantment.registerEnchantment(en); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/me/night/nullvalkyrie/events/CustomItemEvents.java b/src/main/java/me/night/nullvalkyrie/events/CustomItemEvents.java @@ -0,0 +1,318 @@ +package me.night.nullvalkyrie.events; + +import me.night.nullvalkyrie.items.CustomItemManager; +import me.night.nullvalkyrie.items.Rarity; +import me.night.nullvalkyrie.Main; +import me.night.nullvalkyrie.commands.SpawnCommand; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.entity.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.*; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Merchant; +import org.bukkit.inventory.MerchantRecipe; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.*; + +public class CustomItemEvents implements Listener { + private Main main; + public CustomItemEvents(Main main) { + this.main = main; + } + @EventHandler + public void onEntityDamageByEntity(EntityDamageByEntityEvent e) { + if (e.getDamager().getType().equals(EntityType.SNOWBALL)) { + Snowball sb = (Snowball) e.getDamager(); + Player pl = (Player) sb.getShooter(); + if (pl.getInventory().getItemInMainHand().getItemMeta() != null) { + String name = pl.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + if (name.equalsIgnoreCase(Rarity.ULTRA.getColor() + "Snow Gun")) { + ((Snowball) e.getDamager()).setShooter(pl.getPlayer()); + e.setDamage(2000); + } else if (name.equalsIgnoreCase("AA-12")) { + e.setDamage(7); + } else { + e.setDamage(0); + } + } + } else if (e.getDamager() instanceof Player) { + Player player = (Player) e.getDamager(); + if (player.getInventory().getItemInMainHand().getItemMeta() != null) { + String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + if(name.equalsIgnoreCase(Rarity.MYTHIC.getColor() + "Fabled Widow Sword")) { + if (e.getEntity() instanceof Zombie) { + int zombie = CustomItemManager.loadConfig("ItemData\\WidowSword.yml").getInt("zombie"); + e.setDamage(e.getDamage() * (1 + zombie / 100)); + } else if (e.getEntity() instanceof Skeleton) { + int skeleton = CustomItemManager.loadConfig("ItemData\\WidowSword.yml").getInt("skeleton"); + e.setDamage(e.getDamage() * (1 + skeleton / 100)); + } else if (e.getEntity() instanceof Spider) { + int spider = CustomItemManager.loadConfig("ItemData\\WidowSword.yml").getInt("spider"); + e.setDamage(e.getDamage() * (1 + spider / 100)); + } + } + } + } + } + + @EventHandler + public void onPlayerFish(PlayerFishEvent e) { + Player player = e.getPlayer(); + if (player.getInventory().getItemInMainHand().getItemMeta() != null) { + String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + if (name.equalsIgnoreCase(Rarity.RARE.getColor() + "Grappling Hook")) { + if(e.getState().equals(PlayerFishEvent.State.REEL_IN)) { + Location change = e.getHook().getLocation().subtract(player.getLocation()); + player.setVelocity(change.toVector().multiply(0.4)); + } + } + } + } + @EventHandler + public void onPlayerInteract(PlayerInteractEvent e) { + Player player = e.getPlayer(); + if (player.getInventory().getItemInMainHand().getItemMeta() != null) { + String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + if (e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { + if (name.equalsIgnoreCase(Rarity.GRAND.getColor() + "Teleport Door")) { + Block block = player.getTargetBlock((Set<Material>) null, 12); + Location l = block.getLocation(); + l.add(0, 1, 0); + float yaw = player.getEyeLocation().getYaw(); + float pitch = player.getEyeLocation().getPitch(); + l.setYaw(yaw); + l.setPitch(pitch); + player.teleport(l); + player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 10, 10); + } else if (name.equalsIgnoreCase(Rarity.ULTRA.getColor() + "Snow Gun")) { + Snowball s = player.launchProjectile(Snowball.class, player.getLocation().getDirection()); + s.setVelocity(player.getLocation().getDirection().multiply(10)); + } else if (name.equalsIgnoreCase(Rarity.MYTHIC.getColor() + "Terminator")) { + Arrow arrow = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); + arrow.setVelocity(arrow.getVelocity().multiply(5)); + arrow.setPickupStatus(Arrow.PickupStatus.DISALLOWED); + arrow.setShooter(player); + arrow.setDamage(50); + Arrow a1 = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); + a1.setVelocity(arrow.getVelocity().rotateAroundY(Math.toRadians(5)).multiply(5)); + a1.setPickupStatus(Arrow.PickupStatus.DISALLOWED); + a1.setShooter(player); + a1.setDamage(50); + Arrow a2 = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); + a2.setVelocity(arrow.getVelocity().rotateAroundY(Math.toRadians(-5)).multiply(5)); + a2.setPickupStatus(Arrow.PickupStatus.DISALLOWED); + a2.setShooter(player); + a2.setDamage(50); + e.setCancelled(true); + } else if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Explosive Bow")) { + Arrow arrow = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); + arrow.setVelocity(arrow.getVelocity().multiply(5)); + arrow.setShooter(player); + arrow.setDamage(50); + e.setCancelled(true); + } + } else if (e.getAction().equals(Action.LEFT_CLICK_AIR) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)) { + if (name.equalsIgnoreCase(Rarity.MYTHIC.getColor() + "Terminator")) { + Arrow arrow = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); + arrow.setVelocity(arrow.getVelocity().multiply(5)); + arrow.setPickupStatus(Arrow.PickupStatus.DISALLOWED); + arrow.setShooter(player); + arrow.setDamage(50); + Arrow a1 = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); + a1.setVelocity(arrow.getVelocity().rotateAroundY(Math.toRadians(5)).multiply(5)); + a1.setPickupStatus(Arrow.PickupStatus.DISALLOWED); + a1.setShooter(player); + a1.setDamage(50); + Arrow a2 = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); + a2.setVelocity(arrow.getVelocity().rotateAroundY(Math.toRadians(-5)).multiply(5)); + a2.setPickupStatus(Arrow.PickupStatus.DISALLOWED); + a2.setShooter(player); + a2.setDamage(50); + e.setCancelled(true); + } else if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Explosive Bow")) { + Arrow arrow = player.launchProjectile(Arrow.class, player.getEyeLocation().getDirection()); + arrow.setVelocity(arrow.getVelocity().multiply(5)); + arrow.setShooter(player); + arrow.setDamage(50); + e.setCancelled(true); + } + } + } + } + @EventHandler + public void onEntityShoot(EntityShootBowEvent e) { + if (e.getProjectile() instanceof Arrow) { + if (e.getEntity() instanceof Player) { + Player player = (Player) e.getEntity(); + if (player.getInventory().getItemInMainHand().getItemMeta() != null) { + String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + if (name.equalsIgnoreCase(Rarity.MYTHIC.getColor() + "Terminator")) { + e.setCancelled(true); + } else if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Explosive Bow")) { + e.setCancelled(true); + } + } + } + } + } + @EventHandler + public void onProjectileHit(ProjectileHitEvent e) { + if(e.getEntity().getShooter() instanceof Player) { + Player shooter = (Player) e.getEntity().getShooter(); + if(shooter.getInventory().getItemInMainHand().getItemMeta() != null) { + String name = shooter.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Frag Grenade")) { + if(e.getHitBlock() == null) { + Location l = e.getHitEntity().getLocation(); + e.getEntity().setShooter(shooter); + e.getHitEntity().getWorld().createExplosion(l.getX(),l.getY(),l.getZ(),100,false,false); + } else if(e.getHitEntity() == null) { + Location l = e.getHitBlock().getLocation(); + e.getHitBlock().getWorld().createExplosion(l.getX(),l.getY(),l.getZ(),100,false,false); + } + } else if(name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Explosive Bow")) { + Arrow arrow = (Arrow) e.getEntity(); + Location al = arrow.getLocation(); + arrow.setShooter(shooter); + shooter.getWorld().createExplosion(al, 100, false, false); + } + } + + } + } + @EventHandler + public void onCreatureSpawn(CreatureSpawnEvent event) { + if (event.getSpawnReason() == CreatureSpawnEvent.SpawnReason.EGG) { + event.setCancelled(true); + } + } + @EventHandler + public void Projectile(ProjectileLaunchEvent e) { + if(e.getEntity().getShooter() instanceof Player) { + Player player = (Player) e.getEntity().getShooter(); + if(player.getInventory().getItemInMainHand().getItemMeta() != null) { + String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + if (name.equalsIgnoreCase(Rarity.LEGENDARY.getColor() + "Frag Grenade")) { + Egg s = (Egg) e.getEntity(); + s.setVelocity(player.getLocation().getDirection().multiply(10)); + } + } + } + } + @EventHandler + public void onPlayerBucketEmpty(PlayerBucketEmptyEvent e) { + int x = e.getBlockClicked().getX() + e.getBlockFace().getModX(); + int y = e.getBlockClicked().getY() + e.getBlockFace().getModY(); + int z = e.getBlockClicked().getZ() + e.getBlockFace().getModZ(); + Player player = e.getPlayer(); + if(player.getInventory().getItemInMainHand().getItemMeta() != null) { + String name = player.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + if (name.equalsIgnoreCase(Rarity.EPIC.getColor() + "Infinite Water Bucket")) { + e.getPlayer().getWorld().getBlockAt(x,y,z).setType(Material.WATER); + e.setCancelled(true); + } else if (name.equalsIgnoreCase(Rarity.EPIC.getColor() + "Infinite LAVA Bucket")) { + e.getPlayer().getWorld().getBlockAt(x,y,z).setType(Material.LAVA); + e.setCancelled(true); + } + } + } + private Location l; + private boolean spawnable = false; + @EventHandler + public void onDamage(EntityDamageByEntityEvent e) { + if(e.getEntity() instanceof Player) { + Player player = (Player) e.getEntity(); + if((player.getHealth() - e.getDamage()) <= 0) { + e.setCancelled(true); + Location loc = player.getWorld().getBlockAt(-3,23,-3).getLocation(); + player.teleport(loc); + for (Player p : Bukkit.getOnlinePlayers()) { + p.sendMessage(e.getDamager() instanceof Player ? ChatColor.RED + player.getName() + " has been killed by " + e.getDamager().getName() : ChatColor.RED + player.getName() + " died"); + p.hidePlayer(player); + } + new BukkitRunnable() { + @Override + public void run() { + for (Player p : Bukkit.getOnlinePlayers()) { + p.showPlayer(player); + } + player.setHealth(20); +// while(!spawnable) { +// l = generateRandomCoord(9, Bukkit.getWorld("world")); +// if(isSpawnable(l)) { +// spawnable = true; +// player.teleport(l); +// } +// } + player.teleport(generateRandomCoord(9, Bukkit.getWorld("world"))); + } + }.runTaskLater(main, 100L); + run(player, new int[]{5}); + } + } + + } + public Location generateRandomCoord(int size, World world) { + int ranX = SpawnCommand.getRandomWithNeg(size), ranZ = SpawnCommand.getRandomWithNeg(size); + Block block = world.getHighestBlockAt(ranX, ranZ); + return block.getLocation(); + } + public boolean isSpawnable(Location loc) { + Block feetBlock = loc.getBlock(), headBlock = loc.clone().add(0, 1, 0).getBlock(), upperBlock = loc.clone().add(0, 2, 0).getBlock(); + return feetBlock.isPassable() && !feetBlock.isLiquid() && headBlock.isPassable() && !headBlock.isLiquid() && upperBlock.isPassable() && !upperBlock.isLiquid(); + } + private int taskID; + public void run(Player player, int[] a) { + taskID = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(main, () -> { + player.sendTitle(ChatColor.RED +"YOU DIED!",ChatColor.GREEN +"You will revive in " + a[0] + " seconds",0,20,0); + a[0]--; + if (a[0] == 0) { + Bukkit.getScheduler().cancelTask(taskID); + } + }, 0L, 20L); + } + + private final Map<UUID, Merchant> villagerlist = new HashMap<>(); + @EventHandler + public void onClick(PlayerInteractEntityEvent e) { + Player p = e.getPlayer(); + Entity clickedEntity = e.getRightClicked(); + if (clickedEntity instanceof Creeper) { + if (p.getInventory().getItemInMainHand().getType() != Material.STICK) return; + clickedEntity.remove(); + Location loc = clickedEntity.getLocation(); + Villager villager = (Villager) p.getWorld().spawnEntity(loc, EntityType.VILLAGER); + villager.setProfession(Villager.Profession.TOOLSMITH); + List<MerchantRecipe> recipes = new ArrayList<>(); + MerchantRecipe bread = new MerchantRecipe(new ItemStack(Material.BREAD, 3), 10); + bread.addIngredient(new ItemStack(Material.EMERALD, 10)); + recipes.add(bread); + + MerchantRecipe tntStick = new MerchantRecipe(CustomItemManager.getItem("Terminator"), 10); + tntStick.addIngredient(CustomItemManager.getItem("Widow Sword")); + recipes.add(tntStick); + Merchant merchant = Bukkit.createMerchant("Yum Yum In The Tum Tum"); + merchant.setRecipes(recipes); + + villagerlist.put(villager.getUniqueId(), merchant); + + p.spawnParticle(Particle.END_ROD, loc, 30, 0, 1, 0, 0.2); + p.openMerchant(merchant, true); + } + if (e.getRightClicked() instanceof Villager) { + Merchant merchant = villagerlist.get(clickedEntity.getUniqueId()); + if (merchant == null) return; + e.setCancelled(true); + p.openMerchant(merchant, true); + } + } + +} +\ No newline at end of file diff --git a/src/main/java/me/night/nullvalkyrie/items/CustomItemManager.java b/src/main/java/me/night/nullvalkyrie/items/CustomItemManager.java @@ -0,0 +1,204 @@ +package me.night.nullvalkyrie.items; + +import me.night.nullvalkyrie.Main; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.io.File; +import java.io.IOException; +import java.util.*; + + +public class CustomItemManager { + private static HashMap<String, ItemStack> a = new HashMap<>(); + private static Main main; + public CustomItemManager(Main main) { + this.main = main; + if(!main.getDataFolder().exists()) { + main.getDataFolder().mkdir(); + } + createDirectoryInPluginFolder("ItemData"); + createFilesFromConfig(main.getConfig()); + register(); + } + public void register() { + List<String> hh = getAllFilesFromDirectory("ItemData"); + for(int kk = 0; kk < hh.size(); kk++) { + FileConfiguration c = loadConfig("ItemData/" + hh.get(kk)); + ItemStack i = new ItemStack(Material.matchMaterial(c.getString("material"))); + HashMap<String, List<String>> d = new HashMap<>(); + List<String> pr = new ArrayList<>(); + List<String> ia = new ArrayList<>(); + HashMap<String, Double> aa = new HashMap<>(); + for (String key : c.getKeys(true)) { + if (key.startsWith("enchants.")) { + i.addUnsafeEnchantment(Enchantment.getByKey(NamespacedKey.minecraft(Arrays.asList(key.split("\\.")).get(1))), c.getInt(key)); + } else if (key.startsWith("lore.properties.")) { + String property = Arrays.asList(key.split("\\.")).get(2); + if (property.equals("damage") && c.getInt(key) > 0) { + pr.add(ChatColor.GRAY + "Damage: " + ChatColor.RED + "+" + c.getInt(key)); + } else if (property.equals("speed") && c.getInt(key) > 0) { + pr.add(ChatColor.GRAY + "Speed: " + ChatColor.RED + "+" + c.getInt(key)); + } + } else if (key.startsWith("lore.ability.")) { + String a = Arrays.asList(key.split("\\.")).get(2); + if (a.equals("name")) { + ia.add(ChatColor.GOLD + "Item Ability: " + c.getString(key)); + } else if (a.equals("details")) { + for (Object line : c.getList(key)) { + ia.add(ChatColor.GRAY.toString() + line); + } + } + } else if (key.startsWith("attributes.")) { + if (c.getDouble(key) > 0.0) { + aa.put(Arrays.asList(key.split("\\.")).get(1), c.getDouble(key)); + } + } else if (key.startsWith("recipe.")) { + + } + } + d.put("properties", pr); + d.put("ability", ia); + d.put("attributes", pr); + ItemMeta im = i.getItemMeta(); + im.setDisplayName(Rarity.getRarity(c.getString("rarity")).getColor() + c.getString("name")); + im.setUnbreakable(true); + ArrayList<String> l = new ArrayList<>(); + l.addAll(d.get("properties")); + l.add(""); + ArrayList<String> e = new ArrayList<>(); + for (Enchantment ee : i.getEnchantments().keySet()) { + List<String> splitted = Arrays.asList(Arrays.asList(ee.getKey().toString().split(":")).get(1).split("_")); + StringBuilder n = new StringBuilder(); + for (String ii : splitted) { + String s = ii.substring(0, 1).toUpperCase() + ii.substring(1); + if (splitted.size() > 1) { + if (ii.equals(splitted.get(splitted.size() - 1))) { + n.append(s); + } else { + n.append(s); + n.append(" "); + } + } else n.append(s); + } + e.add(n + " " + i.getEnchantmentLevel(ee)); + } + l.add(ChatColor.BLUE + String.join(", ", e)); + l.add(""); + l.addAll(ia); + l.add(""); + l.add(Rarity.getRarity(c.getString("rarity")).getDisplay()); + im.setLore(l); + for (String q : aa.keySet()) { + if (q.equals("damage")) { + AttributeModifier p = new AttributeModifier(UUID.randomUUID(), "generic.attackDamage", aa.get(q), AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + im.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, p); + } else if (q.equals("moveSpeed")) { + AttributeModifier s = new AttributeModifier(UUID.randomUUID(), "generic.movementSpeed", aa.get(q), AttributeModifier.Operation.ADD_NUMBER, EquipmentSlot.HAND); + im.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, s); + } + } + im.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS); + i.setItemMeta(im); + a.put(c.getString("name"), i); + } + } + public static void setItemRecipe(NamespacedKey key, ItemStack i, int ingredient, String shape1, String shape2, String shape3, List<Material> ingredients) { +// ShapedRecipe wither_sword_recipe = new ShapedRecipe(new NamespacedKey(main, "widow_sword"), widow_sword); +// wither_sword_recipe.shape(" A ", " A "," B "); +// wither_sword_recipe.setIngredient('A', Material.IRON_INGOT); +// wither_sword_recipe.setIngredient('B', Material.STICK); +// Bukkit.addRecipe(wither_sword_recipe); + } + public static YamlConfiguration loadConfig(String path) { + File f = new File(main.getDataFolder(), path); + if(!f.exists()) { + try { + f.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + return YamlConfiguration.loadConfiguration(f); + } + public static File loadFile(String path) { + File f = new File(main.getDataFolder(), path); + if(!f.exists()) { + try { + f.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + return f; + } + public static void createDirectoryInPluginFolder(String path) { + File f = new File(main.getDataFolder(), path); + if(!f.exists()) { + try { + if(!f.mkdir()) { + try { + f.mkdir(); + } catch (SecurityException e) { + e.printStackTrace(); + } + } + } catch (SecurityException e) { + e.printStackTrace(); + } + + } + } + public static List<String> getAllFilesFromDirectory(String path) { + ArrayList<String> ns = new ArrayList<>(); + try { + File f = new File(main.getDataFolder(), path); + File[] files = f.listFiles(); + for (int i = 0; i < files.length; i++) { + ns.add(files[i].getName()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return ns; + } + public void createFilesFromConfig(FileConfiguration config) { + for(String a : config.getKeys(false)) { + FileConfiguration c = loadConfig("ItemData/" + a + ".yml"); + for(String b : config.getKeys(true)) { + if(b.startsWith(a)) { + List<String> d = new ArrayList<>(Arrays.asList(b.split("\\."))); + if(d.size() != 1) { + d.remove(0); + if(d.size() == 1) { + c.set(d.get(0), config.get(b)); + } else { + c.set(String.join(".", d), config.get(b)); + } + try { + c.save(loadFile("ItemData/" + a + ".yml")); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + } + } + } + public static ItemStack getItem(String name){ + return a.get(name); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/items/Rarity.java b/src/main/java/me/night/nullvalkyrie/items/Rarity.java @@ -0,0 +1,47 @@ +package me.night.nullvalkyrie.items; + +import org.bukkit.ChatColor; +public enum Rarity { + COMMON(ChatColor.WHITE.toString() + ChatColor.BOLD + "COMMON", ChatColor.WHITE.toString()), + UNCOMMON(net.md_5.bungee.api.ChatColor.of("#31ff09").toString() + ChatColor.BOLD + "UNCOMMON", net.md_5.bungee.api.ChatColor.of("#31ff09").toString()), + RARE(net.md_5.bungee.api.ChatColor.of("#2f57ae").toString() + ChatColor.BOLD + "RARE", net.md_5.bungee.api.ChatColor.of("#2f57ae").toString()), + EPIC(net.md_5.bungee.api.ChatColor.of("#b201b2").toString() + ChatColor.BOLD + "EPIC", net.md_5.bungee.api.ChatColor.of("#b201b2").toString()), + LEGENDARY(net.md_5.bungee.api.ChatColor.of("#ffa21b").toString() + ChatColor.BOLD + "LEGENDARY", net.md_5.bungee.api.ChatColor.of("#ffa21b").toString()), + MYTHIC(net.md_5.bungee.api.ChatColor.of("#ff23ff").toString() + ChatColor.BOLD + "MYTHIC", net.md_5.bungee.api.ChatColor.of("#ff23ff").toString()), + ULTRA(ChatColor.RED.toString() + ChatColor.BOLD + "ULTRA", ChatColor.RED.toString()), + GRAND(net.md_5.bungee.api.ChatColor.of("#00fdff").toString() + ChatColor.BOLD + "GRAND", net.md_5.bungee.api.ChatColor.of("#00fdff").toString()); + private String display; + private String color; + Rarity(String display, String color) { + this.display = display; + this.color = color; + } + public String getDisplay() { + return display; + } + public String getColor() { + return color; + } + public static Rarity getRarity(String str) { + switch(str) { + case "COMMON": + return COMMON; + case "UNCOMMON": + return UNCOMMON; + case "RARE": + return RARE; + case "EPIC": + return EPIC; + case "LEGENDARY": + return LEGENDARY; + case "MYTHIC": + return MYTHIC; + case "ULTRA": + return ULTRA; + case "GRAND": + return GRAND; + default: + return COMMON; + } + } +} diff --git a/src/main/java/me/night/nullvalkyrie/miners/CryptoMiner.java b/src/main/java/me/night/nullvalkyrie/miners/CryptoMiner.java @@ -2,34 +2,33 @@ package me.night.nullvalkyrie.miners; import me.night.nullvalkyrie.Main; import org.bukkit.Material; -import org.bukkit.configuration.Configuration; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.event.EventHandler; -import org.bukkit.scheduler.BukkitRunnable; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ThreadLocalRandom; -import static me.night.nullvalkyrie.Items.CustomItemManager.loadConfig; -import static me.night.nullvalkyrie.Items.CustomItemManager.loadFile; +import static me.night.nullvalkyrie.items.CustomItemManager.loadConfig; +import static me.night.nullvalkyrie.items.CustomItemManager.loadFile; public class CryptoMiner { - protected Main main; + protected static Main main; protected String name; protected Material type; protected int level; protected double rate; - protected int generated; - public CryptoMiner(Main main, String name, Material type, int level, double rate) { + protected static int generated; + protected long lastclaim; + public CryptoMiner(Main main, String name, Material type, int level, double rate, long lastclaim) { this.main = main; 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 - //generate(70); - + this.lastclaim = lastclaim; + FileConfiguration file = loadConfig("miners.yml"); + setMiner(Integer.toString(file.getKeys(false).size()), name, type.name(), level, rate, lastclaim); } public String getName() { @@ -53,30 +52,34 @@ public class CryptoMiner { public int getLevel() { return level; } - public void setLevel(int level) { this.level = level; } - public void generate(int pp) { - new BukkitRunnable() { - @Override - public void run() { - int count = ThreadLocalRandom.current().nextInt(100); - if(count > pp) generated++; - } - }.runTaskTimer(main, 0L, 1L); + public void setLevel(int level) { this.level = level; }; + public long getLastclaim() { + return lastclaim; + } + public void setLastClaim(long lastclaim) { + this.lastclaim = lastclaim; + } + private int aa; + public static void generate(int pp, int times) { + for (int ia = 0; ia < times; ia++) { + int count = ThreadLocalRandom.current().nextInt(100); + if(count > pp) generated++; + } + System.out.println(generated); } public List<CryptoMiner> getMiners() { List<CryptoMiner> arr = new ArrayList<>(); FileConfiguration file = loadConfig("miners.yml"); for(String c : file.getKeys(false)) { - arr.add(new CryptoMiner(main, file.getString(c + ".name"), Material.matchMaterial(file.getString(c + ".material")), file.getInt(c + ".level"), file.getDouble(c + ".rate"))); + arr.add(new CryptoMiner(main, file.getString(c + ".name"), Material.matchMaterial(file.getString(c + ".material")), file.getInt(c + ".level"), file.getDouble(c + ".rate"), file.getLong(c + ".last-claim"))); } return arr; } - public CryptoMiner getMiner(String index) { + public static CryptoMiner getMiner(String index) { FileConfiguration file = loadConfig("miners.yml"); - return new CryptoMiner(main, file.getString(index + ".name"), Material.matchMaterial(file.getString(index + ".name")), file.getInt(index + ".level"), file.getDouble(index + ".rate")); + return new CryptoMiner(main, file.getString(index + ".name"), Material.matchMaterial(file.getString(index + ".name")), file.getInt(index + ".level"), file.getDouble(index + ".rate"), file.getLong(index + ".last-claim")); } - public void setMiner(String index, String name, String material, int level, double rate) { - CryptoMiner miner = new CryptoMiner(main, name, Material.matchMaterial(material), level, rate); + public void setMiner(String index, String name, String material, int level, double rate, long time) { FileConfiguration file = loadConfig("miners.yml"); file.createSection(index); file.set(index + ".name", name); @@ -84,6 +87,7 @@ public class CryptoMiner { file.set(index + ".level", level); file.set(index + ".rate", rate); file.set(index + ".enabled", true); + file.set(index + ".last-claim", time); try { file.save(loadFile("miners.yml")); } catch (IOException e) { diff --git a/src/main/java/me/night/nullvalkyrie/miners/MinerGUI.java b/src/main/java/me/night/nullvalkyrie/miners/MinerGUI.java @@ -1,7 +1,7 @@ package me.night.nullvalkyrie.miners; import me.night.nullvalkyrie.Main; -import me.night.nullvalkyrie.Items.CustomItemManager; +import me.night.nullvalkyrie.items.CustomItemManager; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; diff --git a/src/main/java/me/night/nullvalkyrie/Mobs/ModdedZombie.yml b/src/main/java/me/night/nullvalkyrie/mobs/ModdedZombie.yml diff --git a/src/main/java/me/night/nullvalkyrie/rank/BelowNameManager.java b/src/main/java/me/night/nullvalkyrie/rank/BelowNameManager.java @@ -0,0 +1,18 @@ +package me.night.nullvalkyrie.rank; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +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", "health"); + obj.setDisplaySlot(DisplaySlot.BELOW_NAME); + obj.setDisplayName(ChatColor.RED + "❤"); + player.setScoreboard(board); + player.setHealth(player.getHealth()); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/rank/NameTagManager.java b/src/main/java/me/night/nullvalkyrie/rank/NameTagManager.java @@ -0,0 +1,45 @@ +package me.night.nullvalkyrie.rank; + +import me.night.nullvalkyrie.Main; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +public class NameTagManager { + private Main main; + + public NameTagManager(Main main) { + this.main = main; + } + @SuppressWarnings("deprecation") + public void setNametags(Player player) { + Scoreboard newScoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + Objective obj = newScoreboard.registerNewObjective("TabList", "dummy"); + 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 = ScoreboardListener.rankManager.getRank(target.getUniqueId()); + player.getScoreboard().getTeam(rank.name()).addEntry(target.getName()); + } + } + } + public void newTag(Player player) { + Rank rank = ScoreboardListener.rankManager.getRank(player.getUniqueId()); + for(Player target : Bukkit.getOnlinePlayers()) { + 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/rank/Rank.java b/src/main/java/me/night/nullvalkyrie/rank/Rank.java @@ -0,0 +1,20 @@ +package me.night.nullvalkyrie.rank; + +import org.bukkit.ChatColor; + +public enum Rank { + OWNER(ChatColor.DARK_RED + "{OWNER}"), + ADMIN(ChatColor.RED + "{ADMIN}"), + SPECIAL(ChatColor.GOLD + "{SPECIAL}"), + ROOKIE(ChatColor.DARK_GREEN + "{ROOKIE}"); + + private String display; + + Rank(String display) { + this.display = display; + } + + public String getDisplay() { + return display; + } +} diff --git a/src/main/java/me/night/nullvalkyrie/rank/RankManager.java b/src/main/java/me/night/nullvalkyrie/rank/RankManager.java @@ -0,0 +1,52 @@ +package me.night.nullvalkyrie.rank; + +import me.night.nullvalkyrie.Main; +import org.bukkit.Bukkit; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +import static me.night.nullvalkyrie.rank.ScoreboardListener.nameTagManager; + +public class RankManager { + private File file; + private YamlConfiguration config; + + private Main main; + + public RankManager(Main main) { + this.main = main; + if(!main.getDataFolder().exists()) { + main.getDataFolder().mkdir(); + } + file = new File(main.getDataFolder(), "ranks.yml"); + if(!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + config = YamlConfiguration.loadConfiguration(file); + } + public void setRank(UUID uuid, Rank rank) { + config.set(uuid.toString(), rank.name()); + try { + config.save(file); + } catch (IOException e) { + e.printStackTrace(); + } + for(Player player : Bukkit.getOnlinePlayers()) { + if(player.hasPlayedBefore()) { + nameTagManager.removeTag(player); + nameTagManager.newTag(player); + } + } + } + public Rank getRank(UUID uuid) { + return Rank.valueOf(config.getString(uuid.toString())); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/rank/ScoreboardListener.java b/src/main/java/me/night/nullvalkyrie/rank/ScoreboardListener.java @@ -0,0 +1,64 @@ +package me.night.nullvalkyrie.rank; + +import me.night.nullvalkyrie.Main; +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.entity.PlayerDeathEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import static me.night.nullvalkyrie.database.Client.createUserSchema; + +public class ScoreboardListener implements Listener { + + public static RankManager rankManager; + public static NameTagManager nameTagManager; + private SideBarManager sideBarManager; + private BelowNameManager belowNameManager; + public ScoreboardListener(Main main) { + nameTagManager = new NameTagManager(main); + rankManager = new RankManager(main); + sideBarManager = new SideBarManager(); + belowNameManager = new BelowNameManager(); + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + Player player = e.getPlayer(); + if(!player.hasPlayedBefore()) { + e.getPlayer().sendTitle(ChatColor.RED + "Welcome to Matrix!", ChatColor.GREEN + "LOL", 20, 100, 20); + rankManager.setRank(player.getUniqueId(), Rank.ROOKIE); + createUserSchema(e.getPlayer().getDisplayName()); + } + 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); + belowNameManager.setBelowName(player); + e.setJoinMessage(rankManager.getRank(e.getPlayer().getUniqueId()).getDisplay() + " " + e.getPlayer().getName() + ChatColor.WHITE + " joined the server!"); + } + + @EventHandler + public void onQuit(PlayerQuitEvent e) { + e.setQuitMessage(ChatColor.RED + "bozo " + e.getPlayer().getName() + " has left."); + nameTagManager.removeTag(e.getPlayer()); + e.getPlayer().setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); + } + + @EventHandler + public void onChat(AsyncPlayerChatEvent e) { + e.setCancelled(true); + Player player = e.getPlayer(); + Bukkit.broadcastMessage(rankManager.getRank(player.getUniqueId()).getDisplay() + " " + player.getName() + ChatColor.WHITE + ": " + e.getMessage()); + } + + //Death changing in sidebar + @EventHandler + public void onDeath(PlayerDeathEvent e) { + sideBarManager.changeOnDeath(e.getEntity().getPlayer()); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/rank/SideBarManager.java b/src/main/java/me/night/nullvalkyrie/rank/SideBarManager.java @@ -0,0 +1,50 @@ +package me.night.nullvalkyrie.rank; + +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.HashMap; +import java.util.UUID; + +public class SideBarManager { + private final HashMap<UUID, Integer> deaths = new HashMap<>(); + @SuppressWarnings("deprecation") + public void setSideBar(Player player) { + Scoreboard board = player.getScoreboard(); + Objective obj = board.registerNewObjective("Pluto", "dummy"); + obj.setDisplaySlot(DisplaySlot.SIDEBAR); + obj.setDisplayName(ChatColor.AQUA.toString() + ChatColor.BOLD + "Pluto"); + 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 playersOnline = board.registerNewTeam("deathsTotal"); + playersOnline.addEntry(ChatColor.BOLD.toString()); + playersOnline.setPrefix(ChatColor.BLUE + "Deaths: "); + playersOnline.setSuffix(ChatColor.YELLOW + "0"); + obj.getScore(ChatColor.BOLD.toString()).setScore(3); + player.setScoreboard(board); + deaths.put(player.getUniqueId(), 0); + } + + public void changeOnDeath(Player player) { + int amount = deaths.get(player.getUniqueId()); + amount++; + deaths.put(player.getUniqueId(), amount++); + player.getScoreboard().getTeam("deathsTotal").setSuffix(ChatColor.YELLOW.toString() + amount); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/util/Util.java b/src/main/java/me/night/nullvalkyrie/util/Util.java @@ -0,0 +1,17 @@ +package me.night.nullvalkyrie.util; + +public class Util { + public static String centerText(String text, int lineLength) { + StringBuilder builder = new StringBuilder(); + char space = ' '; + int distance = (lineLength - text.length()) / 2; + for (int ii = 0; ii < distance; ii++) { + builder.append(space); + } + builder.append(text); + for (int i = 0; i < distance; ++i) { + builder.append(space); + } + return builder.toString(); + } +} diff --git a/src/main/java/me/night/nullvalkyrie/util/Utils.java b/src/main/java/me/night/nullvalkyrie/util/Utils.java @@ -0,0 +1,49 @@ +package me.night.nullvalkyrie.util; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class Utils { + public static String color(String string) { + return ChatColor.translateAlternateColorCodes('&', string); + } + + public static ItemStack createItem(Material type, int amount, String name, String... lines) { + ItemStack item = new ItemStack(type, amount); + ItemMeta meta = item.getItemMeta(); + meta.setUnbreakable(true); + meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE, ItemFlag.HIDE_ENCHANTS); + if (name != null) meta.setDisplayName(color(name)); + if (lines != null) { + List<String> lore = new ArrayList<>(); + for (String line : lines) { + lore.add(color(line)); + } + meta.setLore(lore); + } + item.setItemMeta(meta); + return item; + } + + public static ItemStack enchantItem(ItemStack item, Enchantment enchant, int level) { + item.addUnsafeEnchantment(enchant, level); + return item; + } + + public static ItemStack[] makeArmorSet(ItemStack helmet, ItemStack chestplate, ItemStack leggings, ItemStack boots) { + ItemStack[] armor = new ItemStack[4]; + armor[3] = helmet; + armor[2] = chestplate; + armor[1] = leggings; + armor[0] = boots; + return armor; + } + +} diff --git a/src/main/java/me/night/nullvalkyrie/util/components/CustomMob.java b/src/main/java/me/night/nullvalkyrie/util/components/CustomMob.java @@ -0,0 +1,111 @@ +package me.night.nullvalkyrie.util.components; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.inventory.EntityEquipment; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.List; + +import static me.night.nullvalkyrie.util.Utils.color; +import static me.night.nullvalkyrie.util.Utils.*; + +public enum CustomMob { + + DESERT_RISEN( + "&6Desert Risen", + 2048, + 60, + EntityType.HUSK, + null, + null, + new LootItem(createItem(Material.ROTTEN_FLESH, 1, "&fPreserved Flesh", "&7A preserved flesh from a rotting corpse", "&7Not sure what you'd want this for, though", "&7", "&9Foodstuff"), 1, 3, 100)), + + SKELETAL_MAGE( + "&dSkeletal Mage", + 2048, + 15, + EntityType.SKELETON, + createItem(Material.BONE, 1, null), makeArmorSet(new ItemStack(Material.IRON_HELMET), + null, + null, + null), + new LootItem(createItem(Material.BONE, 1, "&dBone Wand", "&7A wand made from skeletal bones"), 30), + new LootItem(new ItemStack(Material.BONE), 1, 3, 100)), + + ZOMBIE_SQUIRE( + "&bZombie Squire", + 2048, + 12, + EntityType.ZOMBIE, + new ItemStack(Material.IRON_SWORD), + makeArmorSet(new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.IRON_BOOTS)), new LootItem(new ItemStack(Material.CHAINMAIL_CHESTPLATE), 35), new LootItem(new ItemStack(Material.CHAINMAIL_LEGGINGS), 35), new LootItem(new ItemStack(Material.CHAINMAIL_HELMET), 35), new LootItem(new ItemStack(Material.IRON_BOOTS), 25), new LootItem(new ItemStack(Material.IRON_SWORD), 40)), + + CHARRED_ARCHER( + "&8Charred Archer", + 2048, + 3, + EntityType.WITHER_SKELETON, + enchantItem(new ItemStack(Material.BOW), Enchantment.ARROW_KNOCKBACK, 2), + null, new LootItem(enchantItem(enchantItem(createItem(Material.BOW, 1, "&cBurnt Bow", "&7This bow is burnt to a crisp but remains intact", "&8due to special enchantments"), Enchantment.ARROW_FIRE, 1), Enchantment.ARROW_KNOCKBACK, 2), 100), + new LootItem(new ItemStack(Material.BONE), 1, 5, 100)), + ; + + private String name; + private double maxHealth, spawnChance; + private EntityType type; + private ItemStack mainItem; + private ItemStack[] armor; + private List<LootItem> lootTable; + + CustomMob(String name, double maxHealth, double spawnChance, EntityType type, ItemStack mainItem, ItemStack[] armor, LootItem... lootItems) { + this.name = name; + this.maxHealth = maxHealth; + this.spawnChance = spawnChance; + this.type = type; + this.mainItem = mainItem; + this.armor = armor; + lootTable = Arrays.asList(lootItems); + } + + public LivingEntity spawn(Location location) { + LivingEntity entity = (LivingEntity) location.getWorld().spawnEntity(location, type); + entity.setCustomNameVisible(true); + entity.setCustomName(color(name + " &r&c" + (int) maxHealth + "/" + (int) maxHealth + "❤")); + entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(maxHealth); + entity.setHealth(maxHealth); + EntityEquipment inv = entity.getEquipment(); + if (armor != null) inv.setArmorContents(armor); + inv.setHelmetDropChance(0f); + inv.setChestplateDropChance(0f); + inv.setLeggingsDropChance(0f); + inv.setBootsDropChance(0f); + inv.setItemInMainHand(mainItem); + inv.setItemInMainHandDropChance(0f); + return entity; + } + + public void tryDropLoot(Location location) { + for (LootItem item : lootTable) { + item.tryDropItem(location); + } + } + + public String getName() { + return name; + } + + public double getMaxHealth() { + return maxHealth; + } + + public double getSpawnChance() { + return spawnChance; + } + +} diff --git a/src/main/java/me/night/nullvalkyrie/util/components/LootItem.java b/src/main/java/me/night/nullvalkyrie/util/components/LootItem.java @@ -0,0 +1,36 @@ +package me.night.nullvalkyrie.util.components; + +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; + +import java.util.Random; + +public class LootItem { + + private ItemStack item; + private int min = 1, max = 1; + private double dropRate; + private static Random randomiser = new Random(); + + public LootItem(ItemStack item, double dropRate) { + this.item = item; + this.dropRate = dropRate; + } + + public LootItem(ItemStack item, int min, int max, double dropRate) { + this.item = item; + this.min = min; + this.max = max; + this.dropRate = dropRate; + } + + public void tryDropItem(Location loc) { + if (Math.random() * 101 > dropRate) return; + int amount = randomiser.nextInt(max - min + 1) + min; + if (amount == 0) return; + ItemStack item = this.item.clone(); + item.setAmount(amount); + loc.getWorld().dropItemNaturally(loc, item); + } + +} diff --git a/src/main/resources/miners.yml b/src/main/resources/miners.yml