big changes on spawn command

This commit is contained in:
NK 2022-11-17 00:04:43 +00:00
parent 4df924e3ce
commit 4274820d65
8 changed files with 196 additions and 475 deletions

View file

@ -1,26 +1,22 @@
package me.night.nullvalkyrie.commands; package me.night.nullvalkyrie.commands;
import me.night.nullvalkyrie.Main; import me.night.nullvalkyrie.Main;
import net.md_5.bungee.api.ChatMessageType; import net.minecraft.network.protocol.game.PacketPlayOutEntityHeadRotation;
import net.md_5.bungee.api.chat.TextComponent;
import net.minecraft.network.protocol.game.*;
import net.minecraft.server.level.EntityPlayer; import net.minecraft.server.level.EntityPlayer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitScheduler;
import org.apache.commons.lang3.time.StopWatch;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import static java.lang.Thread.sleep;
import static me.night.nullvalkyrie.database.Client.getUser;
public class BetaCommand extends Command { public class BetaCommand extends Command {
private Main main; private Main main;
private BukkitScheduler scheduler;
public BetaCommand(Main main) { public BetaCommand(Main main) {
super("beta", new String[]{"b"}, "Beta", ""); super("beta", new String[]{"b"}, "Beta", "");
@ -29,7 +25,6 @@ public class BetaCommand extends Command {
@Override @Override
public void onCommand(CommandSender sender, String[] args) { public void onCommand(CommandSender sender, String[] args) {
// getUser("Kaly15");
if (sender instanceof Player) { if (sender instanceof Player) {
Player pa = (Player) sender; Player pa = (Player) sender;
// CraftPlayer cp = (CraftPlayer) sender; // CraftPlayer cp = (CraftPlayer) sender;
@ -44,42 +39,6 @@ public class BetaCommand extends Command {
// TextComponent.fromLegacyText("§1NOT ENOUGH MANNER")); // TextComponent.fromLegacyText("§1NOT ENOUGH MANNER"));
// } // }
// }.runTaskTimer(main, 0L, 10); // }.runTaskTimer(main, 0L, 10);
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(main, new Runnable() {
int ms = 1;
@Override
public void run() {
while (true) {
try {
sleep(10); // will run every 0.1 seconds
long minutes = (ms / 1000) / 60;
long seconds = (ms / 100) % 60;
long milliseconds = (ms /10);
String secondsStr = Long.toString(seconds);
String secs;
if (secondsStr.length() >= 2) {
secs = secondsStr.substring(0, 2);
} else {
secs = "0" + secondsStr;
}
String minsStr = Long.toString(minutes);
String mins;
if (minsStr.length() >= 2) {
mins = minsStr.substring(0, 2);
} else {
mins = "0" + minsStr;
}
String sw = mins + ":" + secs + ":" + milliseconds;
System.out.println(sw);
pa.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§1"+ sw));
ms++;
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
}
}
}, 0L, 1);
} }
} }

View file

@ -1,152 +1,151 @@
package me.night.nullvalkyrie.commands; //package me.night.nullvalkyrie.commands;
//
import me.night.nullvalkyrie.Main; //import me.night.nullvalkyrie.Main;
import me.night.nullvalkyrie.util.components.CustomMob; //import me.night.nullvalkyrie.util.components.CustomMob;
import me.night.nullvalkyrie.util.Utils; //import org.bukkit.Bukkit;
import org.bukkit.Bukkit; //import org.bukkit.Location;
import org.bukkit.Location; //import org.bukkit.World;
import org.bukkit.World; //import org.bukkit.block.Block;
import org.bukkit.block.Block; //import org.bukkit.command.CommandSender;
import org.bukkit.command.CommandSender; //import org.bukkit.entity.*;
import org.bukkit.entity.*; //import org.bukkit.event.EventHandler;
import org.bukkit.event.EventHandler; //import org.bukkit.event.Listener;
import org.bukkit.event.Listener; //import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent; //import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityDeathEvent; //import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitRunnable; //
//import java.text.DecimalFormat;
import java.text.DecimalFormat; //import java.util.*;
import java.util.*; //
//public class SpawnCommand extends Command implements Listener {
public class SpawnCommand extends Command implements Listener { // private final Main main;
private final Main main; // public World world;
public World world; // public final Map<Entity, Integer> indicators = new HashMap<>();
public final Map<Entity, Integer> indicators = new HashMap<>(); // public final Map<Entity, CustomMob> entities = new HashMap<>();
public final Map<Entity, CustomMob> entities = new HashMap<>(); // private final DecimalFormat formatter = new DecimalFormat("#");
private final DecimalFormat formatter = new DecimalFormat("#"); // public SpawnCommand(Main main) {
public SpawnCommand(Main main) { // super(
super( // "spawn",
"spawn", // new String[]{},
new String[]{}, // "Spawn a custom mob",
"Spawn a custom mob", // ""
"" // );
); // this.main = main;
this.main = main; // }
} //
// @Override
@Override // public void onCommand(CommandSender sender, String[] args) {
public void onCommand(CommandSender sender, String[] args) { // world = Bukkit.getWorld("world");
world = Bukkit.getWorld("world"); //
// spawnMobs(9, 10, 5 * 20);
spawnMobs(9, 10, 5 * 20); // new BukkitRunnable() {
new BukkitRunnable() { // final Set<Entity> stands = indicators.keySet();
final Set<Entity> stands = indicators.keySet(); // final List<Entity> removal = new ArrayList<>();
final List<Entity> removal = new ArrayList<>(); // @Override
@Override // public void run() {
public void run() { // for (Entity stand : stands) {
for (Entity stand : stands) { // int ticksLeft = indicators.get(stand);
int ticksLeft = indicators.get(stand); // if (ticksLeft == 0) {
if (ticksLeft == 0) { // stand.remove();
stand.remove(); // removal.add(stand);
removal.add(stand); // continue;
continue; // }
} // ticksLeft--;
ticksLeft--; // indicators.put(stand, ticksLeft);
indicators.put(stand, ticksLeft); // }
} // stands.removeAll(removal);
stands.removeAll(removal); // }
} // }.runTaskTimer(main, 0L, 1L);
}.runTaskTimer(main, 0L, 1L); //
// }
} // public void spawnMobs(int size, int mobCap, int spawnTime) {
public void spawnMobs(int size, int mobCap, int spawnTime) { // CustomMob[] mobTypes = CustomMob.values();
CustomMob[] mobTypes = CustomMob.values(); // new BukkitRunnable() {
new BukkitRunnable() { // final Set<Entity> spawned = entities.keySet();
final Set<Entity> spawned = entities.keySet(); // final List<Entity> removal = new ArrayList<>();
final List<Entity> removal = new ArrayList<>(); // @Override
@Override // public void run() {
public void run() { // for (Entity entity : spawned) {
for (Entity entity : spawned) { // if (!entity.isValid() || entity.isDead()) removal.add(entity);
if (!entity.isValid() || entity.isDead()) removal.add(entity); // }
} // spawned.removeAll(removal);
spawned.removeAll(removal); //
// // Spawning Algorithm
// Spawning Algorithm // int diff = mobCap - entities.size();
int diff = mobCap - entities.size(); // if (diff <= 0) return;
if (diff <= 0) return; // int spawnAmount = (int) (Math.random() * (diff + 1)), count = 0;
int spawnAmount = (int) (Math.random() * (diff + 1)), count = 0; // while (count <= spawnAmount) {
while (count <= spawnAmount) { // count++;
count++; // int ranX = getRandomWithNeg(size), ranZ = getRandomWithNeg(size);
int ranX = getRandomWithNeg(size), ranZ = getRandomWithNeg(size); // Block block = world.getHighestBlockAt(ranX, ranZ);
Block block = world.getHighestBlockAt(ranX, ranZ); // double xOffset = getRandomOffset(), zOffset = getRandomOffset();
double xOffset = getRandomOffset(), zOffset = getRandomOffset(); // Location loc = block.getLocation().clone().add(xOffset, 1, zOffset);
Location loc = block.getLocation().clone().add(xOffset, 1, zOffset); // if (!isSpawnable(loc)) continue;
if (!isSpawnable(loc)) continue; // double random = Math.random() * 101, previous = 0;
double random = Math.random() * 101, previous = 0; // CustomMob typeToSpawn = mobTypes[0];
CustomMob typeToSpawn = mobTypes[0]; // for (CustomMob type : mobTypes) {
for (CustomMob type : mobTypes) { // previous += type.getSpawnChance();
previous += type.getSpawnChance(); // if (random <= previous) {
if (random <= previous) { // typeToSpawn = type;
typeToSpawn = type; // break;
break; // }
} // }
} // entities.put(typeToSpawn.spawn(loc), typeToSpawn);
entities.put(typeToSpawn.spawn(loc), typeToSpawn); // }
} // }
} // }.runTaskTimer(main, 0L, spawnTime);
}.runTaskTimer(main, 0L, spawnTime); // }
} //
// public static boolean isSpawnable(Location loc) {
public static boolean isSpawnable(Location loc) { // Block feetBlock = loc.getBlock(), headBlock = loc.clone().add(0, 1, 0).getBlock(), upperBlock = loc.clone().add(0, 2, 0).getBlock();
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();
return feetBlock.isPassable() && !feetBlock.isLiquid() && headBlock.isPassable() && !headBlock.isLiquid() && upperBlock.isPassable() && !upperBlock.isLiquid(); // }
} //
// private static double getRandomOffset() {
private static double getRandomOffset() { // double random = Math.random();
double random = Math.random(); // if (Math.random() > 0.5) random *= -1;
if (Math.random() > 0.5) random *= -1; // return random;
return random; // }
} //
// public static int getRandomWithNeg(int size) {
public static int getRandomWithNeg(int size) { // int random = (int) (Math.random() * (size + 1));
int random = (int) (Math.random() * (size + 1)); // if (Math.random() > 0.5) random *= -1;
if (Math.random() > 0.5) random *= -1; // return random;
return random; // }
} //
// @EventHandler
@EventHandler // public void onEntityDamage(EntityDamageEvent event) {
public void onEntityDamage(EntityDamageEvent event) { // Entity rawEntity = event.getEntity();
Entity rawEntity = event.getEntity(); // if (!entities.containsKey(rawEntity)) return;
if (!entities.containsKey(rawEntity)) return; // CustomMob mob = entities.get(rawEntity);
CustomMob mob = entities.get(rawEntity); // LivingEntity entity = (LivingEntity) rawEntity;
LivingEntity entity = (LivingEntity) rawEntity; // double damage = event.getFinalDamage(), health = entity.getHealth() + entity.getAbsorptionAmount();
double damage = event.getFinalDamage(), health = entity.getHealth() + entity.getAbsorptionAmount(); // if (health > damage) {
if (health > damage) { // // If the entity survived the hit
// If the entity survived the hit // health -= damage;
health -= damage; // entity.setCustomName(Utils.color(mob.getName() + " &r&c" + (int) health + "/" + (int) mob.getMaxHealth() + ""));
entity.setCustomName(Utils.color(mob.getName() + " &r&c" + (int) health + "/" + (int) mob.getMaxHealth() + "")); // }
} // Location loc = entity.getLocation().clone().add(getRandomOffset(), 1, getRandomOffset());
Location loc = entity.getLocation().clone().add(getRandomOffset(), 1, getRandomOffset()); // world.spawn(loc, ArmorStand.class, armorStand -> {
world.spawn(loc, ArmorStand.class, armorStand -> { // armorStand.setMarker(true);
armorStand.setMarker(true); // armorStand.setVisible(false);
armorStand.setVisible(false); // armorStand.setGravity(false);
armorStand.setGravity(false); // armorStand.setSmall(true);
armorStand.setSmall(true); // armorStand.setCustomNameVisible(true);
armorStand.setCustomNameVisible(true); // armorStand.setCustomName(Util.color("&c" + formatter.format(damage)));
armorStand.setCustomName(Utils.color("&c" + formatter.format(damage))); // indicators.put(armorStand, 30);
indicators.put(armorStand, 30); // });
}); // }
} //
// @EventHandler
@EventHandler // public void onEntityDeath(EntityDeathEvent event) {
public void onEntityDeath(EntityDeathEvent event) { // if (!entities.containsKey(event.getEntity())) return;
if (!entities.containsKey(event.getEntity())) return; // event.setDroppedExp(0);
event.setDroppedExp(0); // event.getDrops().clear();
event.getDrops().clear(); // entities.remove(event.getEntity()).tryDropLoot(event.getEntity().getLocation());
entities.remove(event.getEntity()).tryDropLoot(event.getEntity().getLocation()); // }
} // @Override
@Override // public List<String> onTabComplete(CommandSender sender, String[] args) {
public List<String> onTabComplete(CommandSender sender, String[] args) { // return null;
return null; // }
} //}
}

View file

@ -3,7 +3,6 @@ package me.night.nullvalkyrie.events;
import me.night.nullvalkyrie.items.CustomItemManager; import me.night.nullvalkyrie.items.CustomItemManager;
import me.night.nullvalkyrie.items.Rarity; import me.night.nullvalkyrie.items.Rarity;
import me.night.nullvalkyrie.Main; import me.night.nullvalkyrie.Main;
import me.night.nullvalkyrie.commands.SpawnCommand;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.*; import org.bukkit.*;
@ -20,11 +19,9 @@ import org.bukkit.inventory.MerchantRecipe;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.*; import java.util.*;
public class CustomItemEvents implements Listener { public class CustomItemEvents implements Listener {
private final Main main; private final Main main;
@ -48,23 +45,6 @@ public class CustomItemEvents implements Listener {
e.setDamage(0); 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));
}
}
}
} }
} }
@ -250,62 +230,37 @@ public class CustomItemEvents implements Listener {
} }
} }
private Location l;
private boolean spawnable = false;
@EventHandler @EventHandler
public void onDamage(EntityDamageByEntityEvent e) { public void onDamage(EntityDamageByEntityEvent e) {
if (e.getEntity() instanceof Player) { if (e.getEntity() instanceof Player) {
Player player = (Player) e.getEntity(); Player player = (Player) e.getEntity();
if ((player.getHealth() - e.getDamage()) <= 0) { // if ((player.getHealth() - e.getDamage()) <= 0) {
e.setCancelled(true); // e.setCancelled(true);
Location loc = player.getWorld().getBlockAt(-3, 23, -3).getLocation(); // Location loc = player.getWorld().getBlockAt(-3, 23, -3).getLocation();
player.teleport(loc); // player.teleport(loc);
for (Player p : Bukkit.getOnlinePlayers()) { // for (Player p : Bukkit.getOnlinePlayers()) {
p.sendMessage(e.getDamager() instanceof Player // p.sendMessage(e.getDamager() instanceof Player
? ChatColor.RED + player.getName() + " has been killed by " + e.getDamager().getName() // ? ChatColor.RED + player.getName() + " has been killed by " + e.getDamager().getName()
: ChatColor.RED + player.getName() + " died"); // : ChatColor.RED + player.getName() + " died");
p.hidePlayer(player); // 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);
// } // }
// new BukkitRunnable() {
// @Override
// public void run() {
// for (Player p : Bukkit.getOnlinePlayers()) {
// p.showPlayer(player);
// }
// player.setHealth(20);
// player.teleport(generateRandomCoord(9, Bukkit.getWorld("world")));
// }
// }.runTaskLater(main, 100L);
// countDown(player, new int[]{5});
// } // }
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; private int taskID;
public void countDown(Player player, int[] a) {
public void run(Player player, int[] a) {
taskID = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(main, () -> { taskID = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(main, () -> {
player.sendTitle(ChatColor.RED + "YOU DIED!", ChatColor.GREEN + "You will revive in " + a[0] + " seconds", player.sendTitle(ChatColor.RED + "YOU DIED!", ChatColor.GREEN + "You will revive in " + a[0] + " seconds",
0, 20, 0); 0, 20, 0);
@ -337,11 +292,9 @@ public class CustomItemEvents implements Listener {
MerchantRecipe tntStick = new MerchantRecipe(CustomItemManager.getItem("Terminator"), 10); MerchantRecipe tntStick = new MerchantRecipe(CustomItemManager.getItem("Terminator"), 10);
tntStick.addIngredient(CustomItemManager.getItem("Widow Sword")); tntStick.addIngredient(CustomItemManager.getItem("Widow Sword"));
recipes.add(tntStick); recipes.add(tntStick);
Merchant merchant = Bukkit.createMerchant("Yum Yum In The Tum Tum"); Merchant merchant = Bukkit.createMerchant("Exchange here");
merchant.setRecipes(recipes); merchant.setRecipes(recipes);
villagerlist.put(villager.getUniqueId(), merchant); villagerlist.put(villager.getUniqueId(), merchant);
p.spawnParticle(Particle.END_ROD, loc, 30, 0, 1, 0, 0.2); p.spawnParticle(Particle.END_ROD, loc, 30, 0, 1, 0, 0.2);
p.openMerchant(merchant, true); p.openMerchant(merchant, true);
} }
@ -353,4 +306,11 @@ public class CustomItemEvents implements Listener {
p.openMerchant(merchant, true); p.openMerchant(merchant, true);
} }
} }
// For hologram clicks to change page
// @EventHandler
// public void onEntityInteract(EntityInteractEvent e) {
// System.out.println(e.getEntity().getLocation());
// e.getEntity().setCustomName(ChatColor.RED + "Changed name since you ust clicked lol");
// }
} }

View file

@ -1,3 +0,0 @@
name: Zombie
level: 69
health: 1000

View file

@ -1,17 +1,19 @@
package me.night.nullvalkyrie.util; package me.night.nullvalkyrie.util;
import org.bukkit.ChatColor;
public class Util { public class Util {
public static String centerText(String text, int lineLength) { public static String centerText(String text, int lineLength) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
char space = ' '; char space = ' ';
int distance = (lineLength - text.length()) / 2; int distance = (lineLength - text.length()) / 2;
for (int ii = 0; ii < distance; ii++) { String repeat = String.valueOf(space).repeat(Math.max(0, distance));
builder.append(space); builder.append(repeat);
}
builder.append(text); builder.append(text);
for (int i = 0; i < distance; ++i) { builder.append(repeat);
builder.append(space);
}
return builder.toString(); return builder.toString();
} }
public static String color(String string) {
return ChatColor.translateAlternateColorCodes('&', string);
}
} }

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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);
}
}