mirror of
https://github.com/Auxilor/EcoMobs.git
synced 2025-12-21 16:09:24 +00:00
Added top damager tracking
This commit is contained in:
@@ -119,8 +119,8 @@ public class EcoBossesPlugin extends AbstractEcoPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public List<Listener> getListeners() {
|
public List<Listener> getListeners() {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
new AttackListeners(),
|
new AttackListeners(this),
|
||||||
new DeathListeners(),
|
new DeathListeners(this),
|
||||||
new SpawnListeners(this)
|
new SpawnListeners(this)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.willfp.ecobosses.bosses;
|
|||||||
|
|
||||||
import com.willfp.eco.internal.config.AbstractUndefinedConfig;
|
import com.willfp.eco.internal.config.AbstractUndefinedConfig;
|
||||||
import com.willfp.eco.util.NumberUtils;
|
import com.willfp.eco.util.NumberUtils;
|
||||||
|
import com.willfp.eco.util.StringUtils;
|
||||||
import com.willfp.eco.util.internal.PluginDependent;
|
import com.willfp.eco.util.internal.PluginDependent;
|
||||||
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
|
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
|
||||||
import com.willfp.ecobosses.bosses.util.bosstype.BossEntityUtils;
|
import com.willfp.ecobosses.bosses.util.bosstype.BossEntityUtils;
|
||||||
@@ -36,14 +37,17 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
import org.bukkit.util.StringUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -117,7 +121,7 @@ public class EcoBoss extends PluginDependent {
|
|||||||
* The drops.
|
* The drops.
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
private final List<ItemStack> drops;
|
private final Map<Double, ItemStack> drops;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The exp to drop.
|
* The exp to drop.
|
||||||
@@ -185,6 +189,18 @@ public class EcoBoss extends PluginDependent {
|
|||||||
@Getter
|
@Getter
|
||||||
private final TeleportOptions teleportOptions;
|
private final TeleportOptions teleportOptions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spawn messages.
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
private final List<String> spawnMessages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Death messages.
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
private final List<String> deathMessages;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new Boss.
|
* Create a new Boss.
|
||||||
*
|
*
|
||||||
@@ -224,9 +240,15 @@ public class EcoBoss extends PluginDependent {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Rewards
|
// Rewards
|
||||||
this.drops = new ArrayList<>();
|
this.drops = new HashMap<>();
|
||||||
for (String string : this.getConfig().getStrings("rewards.drops")) {
|
for (String string : this.getConfig().getStrings("rewards.drops")) {
|
||||||
YamlConfiguration tempConfig = new YamlConfiguration();
|
YamlConfiguration tempConfig = new YamlConfiguration();
|
||||||
|
double chance = 100;
|
||||||
|
if (string.contains("::")) {
|
||||||
|
String[] split = string.split("::");
|
||||||
|
chance = Double.parseDouble(split[0]);
|
||||||
|
string = split[1];
|
||||||
|
}
|
||||||
String tempConfigString = new String(Base64.getDecoder().decode(string));
|
String tempConfigString = new String(Base64.getDecoder().decode(string));
|
||||||
try {
|
try {
|
||||||
tempConfig.load(tempConfigString);
|
tempConfig.load(tempConfigString);
|
||||||
@@ -234,7 +256,7 @@ public class EcoBoss extends PluginDependent {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
ItemStack itemStack = tempConfig.getItemStack("drop-key");
|
ItemStack itemStack = tempConfig.getItemStack("drop-key");
|
||||||
this.drops.add(itemStack);
|
this.drops.put(chance, itemStack);
|
||||||
}
|
}
|
||||||
this.experienceOptions = new ExperienceOptions(
|
this.experienceOptions = new ExperienceOptions(
|
||||||
this.getConfig().getInt("rewards.xp.minimum"),
|
this.getConfig().getInt("rewards.xp.minimum"),
|
||||||
@@ -339,6 +361,16 @@ public class EcoBoss extends PluginDependent {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Messages
|
||||||
|
this.spawnMessages = new ArrayList<>();
|
||||||
|
for (String string : this.getConfig().getStrings("broadcast.spawn")) {
|
||||||
|
this.spawnMessages.add(StringUtils.translate(string));
|
||||||
|
}
|
||||||
|
this.deathMessages = new ArrayList<>();
|
||||||
|
for (String string : this.getConfig().getStrings("broadcast.death")) {
|
||||||
|
this.deathMessages.add(StringUtils.translate(string));
|
||||||
|
}
|
||||||
|
|
||||||
// Teleportation
|
// Teleportation
|
||||||
this.teleportationEnabled = this.getConfig().getBool("defence.teleport.enabled");
|
this.teleportationEnabled = this.getConfig().getBool("defence.teleport.enabled");
|
||||||
this.teleportOptions = new TeleportOptions(
|
this.teleportOptions = new TeleportOptions(
|
||||||
@@ -361,6 +393,9 @@ public class EcoBoss extends PluginDependent {
|
|||||||
entity.getPersistentDataContainer().set(this.getPlugin().getNamespacedKeyFactory().create("boss"), PersistentDataType.STRING, name);
|
entity.getPersistentDataContainer().set(this.getPlugin().getNamespacedKeyFactory().create("boss"), PersistentDataType.STRING, name);
|
||||||
entity.setPersistent(true);
|
entity.setPersistent(true);
|
||||||
|
|
||||||
|
entity.setCustomName(this.getDisplayName());
|
||||||
|
entity.setCustomNameVisible(true);
|
||||||
|
|
||||||
AttributeInstance maxHealth = entity.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
AttributeInstance maxHealth = entity.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
||||||
assert maxHealth != null;
|
assert maxHealth != null;
|
||||||
maxHealth.setBaseValue(this.getMaxHealth());
|
maxHealth.setBaseValue(this.getMaxHealth());
|
||||||
@@ -375,6 +410,14 @@ public class EcoBoss extends PluginDependent {
|
|||||||
location.getWorld().playSound(location, sound.getSound(), sound.getVolume(), sound.getPitch());
|
location.getWorld().playSound(location, sound.getSound(), sound.getVolume(), sound.getPitch());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (String spawnMessage : this.getSpawnMessages()) {
|
||||||
|
Bukkit.broadcastMessage(spawnMessage
|
||||||
|
.replace("%x%", StringUtils.internalToString(location.getBlockX()))
|
||||||
|
.replace("%y%", StringUtils.internalToString(location.getBlockY()))
|
||||||
|
.replace("%z%", StringUtils.internalToString(location.getBlockZ()))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.isBossbarEnabled()) {
|
if (this.isBossbarEnabled()) {
|
||||||
createBossBar(entity);
|
createBossBar(entity);
|
||||||
}
|
}
|
||||||
@@ -382,7 +425,7 @@ public class EcoBoss extends PluginDependent {
|
|||||||
|
|
||||||
private void createBossBar(@NotNull final LivingEntity entity) {
|
private void createBossBar(@NotNull final LivingEntity entity) {
|
||||||
BossBar bossBar = Bukkit.getServer().createBossBar(
|
BossBar bossBar = Bukkit.getServer().createBossBar(
|
||||||
this.getDisplayName(),
|
entity.getCustomName(),
|
||||||
this.getBossbarProperties().getColor(),
|
this.getBossbarProperties().getColor(),
|
||||||
this.getBossbarProperties().getStyle(),
|
this.getBossbarProperties().getStyle(),
|
||||||
(BarFlag) null
|
(BarFlag) null
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
package com.willfp.ecobosses.bosses.listeners;
|
package com.willfp.ecobosses.bosses.listeners;
|
||||||
|
|
||||||
import com.willfp.eco.util.NumberUtils;
|
import com.willfp.eco.util.NumberUtils;
|
||||||
|
import com.willfp.eco.util.internal.PluginDependent;
|
||||||
|
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
|
||||||
|
import com.willfp.ecobosses.EcoBossesPlugin;
|
||||||
import com.willfp.ecobosses.bosses.EcoBoss;
|
import com.willfp.ecobosses.bosses.EcoBoss;
|
||||||
import com.willfp.ecobosses.bosses.util.BossUtils;
|
import com.willfp.ecobosses.bosses.util.BossUtils;
|
||||||
|
import com.willfp.ecobosses.bosses.util.obj.DamagerProperty;
|
||||||
import com.willfp.ecobosses.bosses.util.obj.ImmunityOptions;
|
import com.willfp.ecobosses.bosses.util.obj.ImmunityOptions;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@@ -10,17 +14,35 @@ import org.bukkit.block.Block;
|
|||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import javax.swing.tree.TreeNode;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class AttackListeners extends PluginDependent implements Listener {
|
||||||
|
/**
|
||||||
|
* Create new attack listeners.
|
||||||
|
*
|
||||||
|
* @param plugin Instance of EcoBosses.
|
||||||
|
*/
|
||||||
|
public AttackListeners(@NotNull final AbstractEcoPlugin plugin) {
|
||||||
|
super(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
public class AttackListeners implements Listener {
|
|
||||||
/**
|
/**
|
||||||
* Called when a player attacks a boss.
|
* Called when a player attacks a boss.
|
||||||
*
|
*
|
||||||
@@ -28,17 +50,25 @@ public class AttackListeners implements Listener {
|
|||||||
*/
|
*/
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public void onAttackBoss(@NotNull final EntityDamageByEntityEvent event) {
|
public void onAttackBoss(@NotNull final EntityDamageByEntityEvent event) {
|
||||||
if (!(event.getDamager() instanceof Player)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(event.getEntity() instanceof LivingEntity)) {
|
if (!(event.getEntity() instanceof LivingEntity)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LivingEntity entity = (LivingEntity) event.getEntity();
|
LivingEntity entity = (LivingEntity) event.getEntity();
|
||||||
|
|
||||||
Player player = (Player) event.getDamager();
|
Player player = null;
|
||||||
|
|
||||||
|
if (event.getDamager() instanceof Player) {
|
||||||
|
player = (Player) event.getDamager();
|
||||||
|
} else if (event.getDamager() instanceof Projectile) {
|
||||||
|
if (((Projectile) event.getDamager()).getShooter() instanceof Player) {
|
||||||
|
player = (Player) ((Projectile) event.getDamager()).getShooter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
EcoBoss boss = BossUtils.getBoss(entity);
|
EcoBoss boss = BossUtils.getBoss(entity);
|
||||||
|
|
||||||
@@ -51,6 +81,56 @@ public class AttackListeners implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Track top damage players.
|
||||||
|
*
|
||||||
|
* @param event The event to listen for.
|
||||||
|
*/
|
||||||
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
|
||||||
|
public void topDamageTracker(@NotNull final EntityDamageByEntityEvent event) {
|
||||||
|
if (!(event.getEntity() instanceof LivingEntity)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LivingEntity entity = (LivingEntity) event.getEntity();
|
||||||
|
|
||||||
|
Player temp = null;
|
||||||
|
|
||||||
|
if (event.getDamager() instanceof Player) {
|
||||||
|
temp = (Player) event.getDamager();
|
||||||
|
} else if (event.getDamager() instanceof Projectile) {
|
||||||
|
if (((Projectile) event.getDamager()).getShooter() instanceof Player) {
|
||||||
|
temp = (Player) ((Projectile) event.getDamager()).getShooter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (temp == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = temp;
|
||||||
|
|
||||||
|
EcoBoss boss = BossUtils.getBoss(entity);
|
||||||
|
|
||||||
|
if (boss == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<DamagerProperty> topDamagers = BossUtils.getTopDamagers(entity);
|
||||||
|
|
||||||
|
double playerDamage;
|
||||||
|
|
||||||
|
Optional<DamagerProperty> damager = topDamagers.stream().filter(damagerProperty -> damagerProperty.getPlayer().equals(player)).findFirst();
|
||||||
|
playerDamage = damager.map(DamagerProperty::getDamage).orElse(0.0);
|
||||||
|
|
||||||
|
playerDamage += event.getFinalDamage();
|
||||||
|
topDamagers.removeIf(damagerProperty -> damagerProperty.getPlayer().equals(player));
|
||||||
|
topDamagers.add(new DamagerProperty(player, playerDamage));
|
||||||
|
|
||||||
|
entity.removeMetadata("ecobosses-top-damagers", this.getPlugin());
|
||||||
|
entity.setMetadata("ecobosses-top-damagers", this.getPlugin().getMetadataValueFactory().create(topDamagers));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a boss attacks a player.
|
* Called when a boss attacks a player.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,18 +1,47 @@
|
|||||||
package com.willfp.ecobosses.bosses.listeners;
|
package com.willfp.ecobosses.bosses.listeners;
|
||||||
|
|
||||||
|
|
||||||
|
import com.willfp.eco.util.NumberUtils;
|
||||||
|
import com.willfp.eco.util.StringUtils;
|
||||||
import com.willfp.eco.util.events.entitydeathbyentity.EntityDeathByEntityEvent;
|
import com.willfp.eco.util.events.entitydeathbyentity.EntityDeathByEntityEvent;
|
||||||
|
import com.willfp.eco.util.internal.PluginDependent;
|
||||||
|
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
|
||||||
import com.willfp.ecobosses.bosses.EcoBoss;
|
import com.willfp.ecobosses.bosses.EcoBoss;
|
||||||
import com.willfp.ecobosses.bosses.util.BossUtils;
|
import com.willfp.ecobosses.bosses.util.BossUtils;
|
||||||
|
import com.willfp.ecobosses.bosses.util.obj.DamagerProperty;
|
||||||
import com.willfp.ecobosses.bosses.util.obj.OptionedSound;
|
import com.willfp.ecobosses.bosses.util.obj.OptionedSound;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import sun.reflect.generics.tree.Tree;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class DeathListeners extends PluginDependent implements Listener {
|
||||||
|
/**
|
||||||
|
* Create new death listeners.
|
||||||
|
*
|
||||||
|
* @param plugin Instance of EcoBosses.
|
||||||
|
*/
|
||||||
|
public DeathListeners(@NotNull final AbstractEcoPlugin plugin) {
|
||||||
|
super(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
public class DeathListeners implements Listener {
|
|
||||||
/**
|
/**
|
||||||
* Called when a boss dies.
|
* Called when a boss dies.
|
||||||
*
|
*
|
||||||
@@ -48,7 +77,52 @@ public class DeathListeners implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.getDrops().addAll(boss.getDrops());
|
List<DamagerProperty> topDamagers = BossUtils.getTopDamagers(entity);
|
||||||
|
|
||||||
|
DamagerProperty top = null;
|
||||||
|
DamagerProperty second = null;
|
||||||
|
DamagerProperty third = null;
|
||||||
|
|
||||||
|
if (topDamagers.size() >= 1) {
|
||||||
|
top = topDamagers.get(0);
|
||||||
|
}
|
||||||
|
if (topDamagers.size() >= 2) {
|
||||||
|
second = topDamagers.get(1);
|
||||||
|
}
|
||||||
|
if (topDamagers.size() >= 3) {
|
||||||
|
third = topDamagers.get(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
String na = this.getPlugin().getLangYml().getString("na");
|
||||||
|
|
||||||
|
String topDamager = top == null ? na : top.getPlayer().getDisplayName();
|
||||||
|
String topDamage = top == null ? na : StringUtils.internalToString(top.getDamage());
|
||||||
|
|
||||||
|
String secondDamager = second == null ? na : second.getPlayer().getDisplayName();
|
||||||
|
String secondDamage = second == null ? na : StringUtils.internalToString(second.getDamage());
|
||||||
|
|
||||||
|
String thirdDamager = third == null ? na : third.getPlayer().getDisplayName();
|
||||||
|
String thirdDamage = third == null ? na : StringUtils.internalToString(third.getDamage());
|
||||||
|
|
||||||
|
for (String spawnMessage : boss.getDeathMessages()) {
|
||||||
|
Bukkit.broadcastMessage(spawnMessage
|
||||||
|
.replace("%top%", topDamager)
|
||||||
|
.replace("%top_damage%", topDamage)
|
||||||
|
.replace("%second%", secondDamager)
|
||||||
|
.replace("%second_damage%", secondDamage)
|
||||||
|
.replace("%third%", thirdDamager)
|
||||||
|
.replace("%third_damage%", thirdDamage)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ItemStack> drops = new ArrayList<>();
|
||||||
|
boss.getDrops().forEach((aDouble, itemStack) -> {
|
||||||
|
if (NumberUtils.randFloat(0, 100) < aDouble) {
|
||||||
|
drops.add(itemStack);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
event.getDrops().addAll(drops);
|
||||||
event.setDroppedExp(boss.getExperienceOptions().generateXp());
|
event.setDroppedExp(boss.getExperienceOptions().generateXp());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,20 @@ package com.willfp.ecobosses.bosses.util;
|
|||||||
import com.willfp.ecobosses.EcoBossesPlugin;
|
import com.willfp.ecobosses.EcoBossesPlugin;
|
||||||
import com.willfp.ecobosses.bosses.EcoBoss;
|
import com.willfp.ecobosses.bosses.EcoBoss;
|
||||||
import com.willfp.ecobosses.bosses.EcoBosses;
|
import com.willfp.ecobosses.bosses.EcoBosses;
|
||||||
|
import com.willfp.ecobosses.bosses.util.obj.DamagerProperty;
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@UtilityClass
|
@UtilityClass
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public class BossUtils {
|
public class BossUtils {
|
||||||
/**
|
/**
|
||||||
* Instance of EcoBosses.
|
* Instance of EcoBosses.
|
||||||
@@ -36,4 +43,29 @@ public class BossUtils {
|
|||||||
|
|
||||||
return EcoBosses.getByName(bossName);
|
return EcoBosses.getByName(bossName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get top damagers for a boss.
|
||||||
|
*
|
||||||
|
* @param entity The boss entity.
|
||||||
|
* @return A list of the top damagers, sorted.
|
||||||
|
*/
|
||||||
|
public List<DamagerProperty> getTopDamagers(@NotNull final LivingEntity entity) {
|
||||||
|
if (getBoss(entity) == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<DamagerProperty> topDamagers;
|
||||||
|
if (entity.hasMetadata("ecobosses-top-damagers")) {
|
||||||
|
topDamagers = (List<DamagerProperty>) entity.getMetadata("ecobosses-top-damagers").get(0).value();
|
||||||
|
} else {
|
||||||
|
topDamagers = new ArrayList<>();
|
||||||
|
}
|
||||||
|
assert topDamagers != null;
|
||||||
|
|
||||||
|
topDamagers.sort(Comparator.comparingDouble(DamagerProperty::getDamage));
|
||||||
|
Collections.reverse(topDamagers);
|
||||||
|
|
||||||
|
return topDamagers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.willfp.ecobosses.bosses.util.obj;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class DamagerProperty {
|
||||||
|
/**
|
||||||
|
* The player.
|
||||||
|
*/
|
||||||
|
private final Player player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The damage.
|
||||||
|
*/
|
||||||
|
private final double damage;
|
||||||
|
}
|
||||||
@@ -21,8 +21,35 @@ rewards:
|
|||||||
xp:
|
xp:
|
||||||
minimum: 20000
|
minimum: 20000
|
||||||
maximum: 25000
|
maximum: 25000
|
||||||
|
top-damager-commands:
|
||||||
|
1:
|
||||||
|
- "40::give %player% diamond_block"
|
||||||
|
2:
|
||||||
|
- "25::give %player% emerald_block"
|
||||||
|
3:
|
||||||
|
- "10::give %player% iron_block"
|
||||||
|
nearby-player-commands:
|
||||||
|
radius: 10
|
||||||
|
commands: []
|
||||||
drops:
|
drops:
|
||||||
# Get items to add here by copying the console output for /ebdrop
|
# Get items to add here by copying the console output for /ebdrop
|
||||||
|
# To set the chance for a drop, put <chance>::<base64>
|
||||||
|
|
||||||
|
broadcast:
|
||||||
|
spawn:
|
||||||
|
- ""
|
||||||
|
- "&9The &9&lIllusioner&r&9 has been spawned!"
|
||||||
|
- "&9Come fight it at &b%x%&9, &b%y%&9, &b%z%&9!"
|
||||||
|
- ""
|
||||||
|
death:
|
||||||
|
- ""
|
||||||
|
- "&9The &9&lIllusioner&r&9 has been killed!"
|
||||||
|
- "&9Most Damage:"
|
||||||
|
- "&9 - &b%top%&9: &b%top_damage% &9Damage"
|
||||||
|
- "&9 - &b%second%&9: &b%second_damage% &9Damage"
|
||||||
|
- "&9 - &b%third%&9: &b%third_damage% &9Damage"
|
||||||
|
- ""
|
||||||
|
|
||||||
|
|
||||||
defence:
|
defence:
|
||||||
immunities:
|
immunities:
|
||||||
|
|||||||
@@ -7,3 +7,5 @@ messages:
|
|||||||
specify-boss: "&cYou must specify a valid boss!"
|
specify-boss: "&cYou must specify a valid boss!"
|
||||||
invalid-location: "&cInvalid location!"
|
invalid-location: "&cInvalid location!"
|
||||||
spawned: "Spawned a boss!"
|
spawned: "Spawned a boss!"
|
||||||
|
|
||||||
|
na: "N/A"
|
||||||
Reference in New Issue
Block a user