From 5397f90843fc7e0a4dc918fe61d3edf9e8befe2c Mon Sep 17 00:00:00 2001 From: AMinecraftDev Date: Sat, 20 Oct 2018 23:20:50 +0800 Subject: [PATCH] 3.0.0-SNAPSHOT-U29 + Fully implemented BossCommands + Fully implemented BossMessages + Set up BossDamageListener + Small tweaks --- .../Core/resources-json/bosses.json | 11 +++- .../custombosses/api/BossAPI.java | 32 ++++++++- .../container/BossEntityContainer.java | 8 +++ .../entity/elements/MessagesElement.java | 2 +- .../entity/elements/SubMessageElement.java | 16 +++++ .../entity/elements/TauntElement.java | 2 +- .../custombosses/events/BossDamageEvent.java | 39 +++++++++++ .../custombosses/holder/ActiveBossHolder.java | 6 +- .../listeners/during/BossDamageListener.java | 65 +++++++++++++++++++ .../listeners/pre/BossSpawnListener.java | 36 +++++++++- .../managers/BossEntityManager.java | 55 +++++++++++++++- .../managers/BossListenerManager.java | 2 + .../files/BossCommandFileManager.java | 1 - .../custombosses/utils/Debug.java | 2 + .../custombosses/utils/Message.java | 1 + .../custombosses/utils/StringUtils.java | 14 ++++ pom.xml | 2 +- 17 files changed, 281 insertions(+), 13 deletions(-) create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/SubMessageElement.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/events/BossDamageEvent.java create mode 100644 plugin-modules/Core/src/net/aminecraftdev/custombosses/listeners/during/BossDamageListener.java diff --git a/plugin-modules/Core/resources-json/bosses.json b/plugin-modules/Core/resources-json/bosses.json index f6ecb06..51a6c4e 100644 --- a/plugin-modules/Core/resources-json/bosses.json +++ b/plugin-modules/Core/resources-json/bosses.json @@ -46,10 +46,17 @@ "dropTable": "SKTable" }, "messages": { - "onSpawn": "SKOnSpawn", - "onDeath": "SKOnDeath", + "onSpawn": { + "message": "SKOnSpawn", + "radius": -1 + }, + "onDeath": { + "message": "SKOnDeath", + "radius": -1 + }, "taunts": { "delay": 60, + "radius": 100, "taunts": [ "SKTaunt1", "SKTaunt2" diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/api/BossAPI.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/api/BossAPI.java index b75f17e..741fb8a 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/api/BossAPI.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/api/BossAPI.java @@ -4,7 +4,9 @@ import net.aminecraftdev.custombosses.CustomBosses; import net.aminecraftdev.custombosses.entity.BossEntity; import net.aminecraftdev.custombosses.entity.elements.*; import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import net.aminecraftdev.custombosses.managers.files.BossCommandFileManager; import net.aminecraftdev.custombosses.managers.files.BossItemFileManager; +import net.aminecraftdev.custombosses.managers.files.BossMessagesFileManager; import net.aminecraftdev.custombosses.utils.Debug; import net.aminecraftdev.custombosses.utils.EntityFinder; import net.aminecraftdev.custombosses.utils.itemstack.holder.ItemStackHolder; @@ -145,7 +147,9 @@ public class BossAPI { // return null; // } - return PLUGIN.getBossEntityManager().createActiveBossHolder(bossEntity, location); + String name = PLUGIN.getBossEntityContainer().getName(bossEntity); + + return PLUGIN.getBossEntityManager().createActiveBossHolder(bossEntity, location, name); } /** @@ -162,4 +166,30 @@ public class BossAPI { return bossItemFileManager.getItemStackHolder(name); } + /** + * Used to obtain the list of strings that + * a message is built in to. + * + * @param id - the id from the messages.json + * @return null if not found, instance if found + */ + public static List getStoredMessages(String id) { + BossMessagesFileManager bossMessagesFileManager = PLUGIN.getBossMessagesFileManager(); + + return bossMessagesFileManager.getMessages(id); + } + + /** + * Used to obtain the list of strings that + * a command is built of. + * + * @param id - the id from the commands.json + * @return null if not found, instance if found + */ + public static List getStoredCommands(String id) { + BossCommandFileManager bossCommandFileManager = PLUGIN.getBossCommandFileManager(); + + return bossCommandFileManager.getCommands(id); + } + } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/container/BossEntityContainer.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/container/BossEntityContainer.java index c2a7ff8..3e1eb33 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/container/BossEntityContainer.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/container/BossEntityContainer.java @@ -22,6 +22,14 @@ public class BossEntityContainer implements IContainer, return new HashMap<>(this.container); } + public String getName(BossEntity bossEntity) { + for(Map.Entry entry : getData().entrySet()) { + if(entry.getValue().equals(bossEntity)) return entry.getKey(); + } + + return null; + } + @Override public boolean saveData(Map stringBossEntityMap) { StringBuilder stringBuilder = new StringBuilder(); diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/MessagesElement.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/MessagesElement.java index e506047..881aeb8 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/MessagesElement.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/MessagesElement.java @@ -11,7 +11,7 @@ import lombok.Setter; */ public class MessagesElement { - @Expose @Getter @Setter private String onSpawn, onDeath; + @Expose @Getter @Setter private SubMessageElement onSpawn, onDeath; @Expose @Getter @Setter private TauntElement taunts; } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/SubMessageElement.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/SubMessageElement.java new file mode 100644 index 0000000..52aebad --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/SubMessageElement.java @@ -0,0 +1,16 @@ +package net.aminecraftdev.custombosses.entity.elements; + +import com.google.gson.annotations.Expose; +import lombok.Getter; +import lombok.Setter; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 20-Oct-18 + */ +public class SubMessageElement { + + @Expose @Getter @Setter private String message; + @Expose @Getter @Setter private Integer radius; +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/TauntElement.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/TauntElement.java index 1da8c8b..499a086 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/TauntElement.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/entity/elements/TauntElement.java @@ -13,7 +13,7 @@ import java.util.List; */ public class TauntElement { - @Expose @Getter @Setter private Integer delay; + @Expose @Getter @Setter private Integer delay, radius; @Expose @Getter @Setter private List taunts; } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/events/BossDamageEvent.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/events/BossDamageEvent.java new file mode 100644 index 0000000..36b072d --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/events/BossDamageEvent.java @@ -0,0 +1,39 @@ +package net.aminecraftdev.custombosses.events; + +import lombok.Getter; +import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import org.bukkit.Location; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 20-Oct-18 + */ +public class BossDamageEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + @Getter private ActiveBossHolder activeBossHolder; + @Getter private LivingEntity livingEntity; + @Getter private Location damageLocation; + @Getter private double damage; + + public BossDamageEvent(ActiveBossHolder activeBossHolder, LivingEntity livingEntity, Location damageLocation, double damageAmount) { + this.activeBossHolder = activeBossHolder; + this.damageLocation = damageLocation; + this.livingEntity = livingEntity; + this.damage = damageAmount; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/holder/ActiveBossHolder.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/holder/ActiveBossHolder.java index 30054f8..55b6c2f 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/holder/ActiveBossHolder.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/holder/ActiveBossHolder.java @@ -8,6 +8,7 @@ import org.bukkit.entity.LivingEntity; import java.util.HashMap; import java.util.Map; +import java.util.UUID; /** * @author Charles Cullen @@ -18,12 +19,15 @@ public class ActiveBossHolder { @Getter private final BossEntity bossEntity; @Getter private final Location location; + @Getter private final String name; @Getter private Map livingEntityMap = new HashMap<>(); + @Getter private Map mapOfDamagingUsers = new HashMap<>(); - public ActiveBossHolder(BossEntity bossEntity, Location spawnLocation) { + public ActiveBossHolder(BossEntity bossEntity, Location spawnLocation, String name) { this.location = spawnLocation; this.bossEntity = bossEntity; + this.name = name; } public void setLivingEntity(int position, LivingEntity livingEntity) { diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/listeners/during/BossDamageListener.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/listeners/during/BossDamageListener.java new file mode 100644 index 0000000..6e9381f --- /dev/null +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/listeners/during/BossDamageListener.java @@ -0,0 +1,65 @@ +package net.aminecraftdev.custombosses.listeners.during; + +import net.aminecraftdev.custombosses.CustomBosses; +import net.aminecraftdev.custombosses.events.BossDamageEvent; +import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import net.aminecraftdev.custombosses.managers.BossEntityManager; +import net.aminecraftdev.custombosses.utils.ServerUtils; +import org.bukkit.entity.*; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; + +/** + * @author Charles Cullen + * @version 1.0.0 + * @since 20-Oct-18 + */ +public class BossDamageListener implements Listener { + + private BossEntityManager bossEntityManager; + + public BossDamageListener(CustomBosses plugin) { + this.bossEntityManager = plugin.getBossEntityManager(); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onBossDamage(EntityDamageByEntityEvent event) { + Entity entityBeingDamaged = event.getEntity(); + Entity entityDamaging = event.getDamager(); + + if(!(entityBeingDamaged instanceof LivingEntity)) return; + + LivingEntity livingEntity = (LivingEntity) entityBeingDamaged; + ActiveBossHolder activeBossHolder = this.bossEntityManager.getActiveBossHolder(livingEntity); + double damage = event.getDamage(); + Player player = null; + + if(activeBossHolder == null) return; + + if(entityDamaging instanceof Player) { + player = (Player) entityDamaging; + } else if(entityDamaging instanceof Projectile) { + Projectile projectile = (Projectile) entityDamaging; + LivingEntity shooter = (LivingEntity) projectile.getShooter(); + + if(projectile instanceof ThrownPotion) { + event.setCancelled(true); + return; + } + if(!(shooter instanceof Player)) return; + + player = (Player) shooter; + } + + if(player == null) return; + + double currentDamage = activeBossHolder.getMapOfDamagingUsers().getOrDefault(player.getUniqueId(), 0.0); + BossDamageEvent bossDamageEvent = new BossDamageEvent(activeBossHolder, livingEntity, livingEntity.getEyeLocation(), damage); + + ServerUtils.get().callEvent(bossDamageEvent); + activeBossHolder.getMapOfDamagingUsers().put(player.getUniqueId(), currentDamage+damage); + } + +} diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/listeners/pre/BossSpawnListener.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/listeners/pre/BossSpawnListener.java index 9408033..06bf27a 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/listeners/pre/BossSpawnListener.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/listeners/pre/BossSpawnListener.java @@ -2,16 +2,20 @@ package net.aminecraftdev.custombosses.listeners.pre; import net.aminecraftdev.custombosses.CustomBosses; import net.aminecraftdev.custombosses.api.BossAPI; +import net.aminecraftdev.custombosses.container.BossEntityContainer; import net.aminecraftdev.custombosses.entity.BossEntity; import net.aminecraftdev.custombosses.events.BossSpawnEvent; import net.aminecraftdev.custombosses.events.PreBossSpawnEvent; import net.aminecraftdev.custombosses.holder.ActiveBossHolder; import net.aminecraftdev.custombosses.managers.BossEntityManager; import net.aminecraftdev.custombosses.managers.BossLocationManager; +import net.aminecraftdev.custombosses.utils.Debug; import net.aminecraftdev.custombosses.utils.Message; import net.aminecraftdev.custombosses.utils.ServerUtils; +import net.aminecraftdev.custombosses.utils.StringUtils; import net.aminecraftdev.custombosses.utils.itemstack.ItemStackUtils; import net.aminecraftdev.custombosses.utils.version.VersionHandler; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -23,6 +27,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; +import java.util.List; import java.util.Map; /** @@ -89,7 +94,7 @@ public class BossSpawnListener implements Listener { ActiveBossHolder activeBossHolder = BossAPI.spawnNewBoss(bossEntity, location); if(activeBossHolder == null) { - //TODO: Make log file to store when a boss was spawned, where, what boss, and who spawned it, and the debug reason to why it couldn't spawn. + Debug.FAILED_TO_CREATE_ACTIVE_BOSS_HOLDER.debug(); event.setCancelled(true); return; } @@ -104,6 +109,8 @@ public class BossSpawnListener implements Listener { @EventHandler public void onPreBossSpawnEvent(PreBossSpawnEvent event) { ActiveBossHolder activeBossHolder = event.getActiveBossHolder(); + BossEntity bossEntity = activeBossHolder.getBossEntity(); + Location location = activeBossHolder.getLocation(); ItemStack itemStack = event.getItemStackUsed().clone(); Player player = event.getPlayer(); @@ -111,13 +118,36 @@ public class BossSpawnListener implements Listener { player.getInventory().removeItem(itemStack); player.updateInventory(); + List commands = this.bossEntityManager.getOnSpawnCommands(bossEntity); + List messages = this.bossEntityManager.getOnSpawnMessage(bossEntity); + int messagesRadius = this.bossEntityManager.getOnSpawnMessageRadius(bossEntity); + + if(commands != null) { + commands.forEach(command -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command)); + } + if(messages != null) { + if(activeBossHolder.getName() != null) messages.replaceAll(s -> s.replace("{boss}", activeBossHolder.getName())); + messages.replaceAll(s -> s.replace("{location}", StringUtils.get().translateLocation(location))); + messages.replaceAll(s -> s.replace('&', 'ยง')); + + if(messagesRadius == -1) { + messages.forEach(Bukkit::broadcastMessage); + } else { + Bukkit.getOnlinePlayers().forEach(onlinePlayer -> { + if(onlinePlayer.getWorld().getName().equals(location.getWorld().getName())) { + if(onlinePlayer.getLocation().distanceSquared(location) <= messagesRadius) { + messages.forEach(player::sendMessage); + } + } + }); + } + } + //TODO: Create AutoTarget for TargetHandler - //TODO: Handle onSpawn commands, and messages BossSpawnEvent bossSpawnEvent = new BossSpawnEvent(activeBossHolder); ServerUtils.get().callEvent(bossSpawnEvent); - System.out.println("SPAWN EVENT CALLED"); } } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossEntityManager.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossEntityManager.java index be52462..6e8f622 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossEntityManager.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossEntityManager.java @@ -4,11 +4,14 @@ import net.aminecraftdev.custombosses.CustomBosses; import net.aminecraftdev.custombosses.api.BossAPI; import net.aminecraftdev.custombosses.entity.BossEntity; import net.aminecraftdev.custombosses.holder.ActiveBossHolder; +import net.aminecraftdev.custombosses.managers.files.BossCommandFileManager; import net.aminecraftdev.custombosses.managers.files.BossItemFileManager; +import net.aminecraftdev.custombosses.managers.files.BossMessagesFileManager; import net.aminecraftdev.custombosses.managers.files.BossesFileManager; import net.aminecraftdev.custombosses.utils.Debug; import net.aminecraftdev.custombosses.utils.itemstack.holder.ItemStackHolder; import org.bukkit.Location; +import org.bukkit.entity.LivingEntity; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; @@ -25,11 +28,15 @@ public class BossEntityManager { private static final List ACTIVE_BOSS_HOLDERS = new ArrayList<>(); + private BossMessagesFileManager bossMessagesFileManager; + private BossCommandFileManager bossCommandFileManager; private BossItemFileManager bossItemFileManager; private BossMechanicManager bossMechanicManager; private BossesFileManager bossesFileManager; public BossEntityManager(CustomBosses customBosses) { + this.bossMessagesFileManager = customBosses.getBossMessagesFileManager(); + this.bossCommandFileManager = customBosses.getBossCommandFileManager(); this.bossMechanicManager = customBosses.getBossMechanicManager(); this.bossItemFileManager = customBosses.getItemStackManager(); this.bossesFileManager = customBosses.getBossesFileManager(); @@ -53,6 +60,38 @@ public class BossEntityManager { return itemStack; } + public List getOnSpawnMessage(BossEntity bossEntity) { + String id = bossEntity.getMessages().getOnSpawn().getMessage(); + List messages = BossAPI.getStoredMessages(id); + + if(messages == null) { + Debug.FAILED_TO_LOAD_MESSAGES.debug(id); + return null; + } + + return messages; + } + + public int getOnSpawnMessageRadius(BossEntity bossEntity) { + Integer radius = bossEntity.getMessages().getOnSpawn().getRadius(); + + if(radius == null) radius = -1; + + return radius; + } + + public List getOnSpawnCommands(BossEntity bossEntity) { + String id = bossEntity.getCommands().getOnSpawn(); + List commands = BossAPI.getStoredCommands(id); + + if(commands == null) { + Debug.FAILED_TO_LOAD_COMMANDS.debug(id); + return null; + } + + return commands; + } + public Map getMapOfEntitiesAndSpawnItems() { Map currentEntities = new HashMap<>(this.bossesFileManager.getBossEntities()); Map newMap = new HashMap<>(); @@ -62,8 +101,8 @@ public class BossEntityManager { return newMap; } - public ActiveBossHolder createActiveBossHolder(BossEntity bossEntity, Location spawnLocation) { - ActiveBossHolder activeBossHolder = new ActiveBossHolder(bossEntity, spawnLocation); + public ActiveBossHolder createActiveBossHolder(BossEntity bossEntity, Location spawnLocation, String name) { + ActiveBossHolder activeBossHolder = new ActiveBossHolder(bossEntity, spawnLocation, name); if(!this.bossMechanicManager.handleMechanicApplication(bossEntity, activeBossHolder)) { Debug.FAILED_TO_CREATE_ACTIVE_BOSS_HOLDER.debug(); @@ -74,4 +113,16 @@ public class BossEntityManager { return activeBossHolder; } + public ActiveBossHolder getActiveBossHolder(LivingEntity livingEntity) { + List currentList = new ArrayList<>(ACTIVE_BOSS_HOLDERS); + + for(ActiveBossHolder activeBossHolder : currentList) { + for(Map.Entry entry : activeBossHolder.getLivingEntityMap().entrySet()) { + if(entry.getValue().getUniqueId().equals(livingEntity.getUniqueId())) return activeBossHolder; + } + } + + return null; + } + } diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossListenerManager.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossListenerManager.java index 949c633..53d191c 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossListenerManager.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/BossListenerManager.java @@ -1,6 +1,7 @@ package net.aminecraftdev.custombosses.managers; import net.aminecraftdev.custombosses.CustomBosses; +import net.aminecraftdev.custombosses.listeners.during.BossDamageListener; import net.aminecraftdev.custombosses.listeners.pre.BossSpawnListener; import net.aminecraftdev.custombosses.utils.Debug; import net.aminecraftdev.custombosses.utils.ILoadable; @@ -30,6 +31,7 @@ public class BossListenerManager implements ILoadable { ServerUtils serverUtils = ServerUtils.get(); serverUtils.registerListener(new BossSpawnListener(this.plugin)); + serverUtils.registerListener(new BossDamageListener(this.plugin)); this.hasBeenLoaded = true; diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/files/BossCommandFileManager.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/files/BossCommandFileManager.java index 183ec51..44704e8 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/files/BossCommandFileManager.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/managers/files/BossCommandFileManager.java @@ -1,6 +1,5 @@ package net.aminecraftdev.custombosses.managers.files; -import lombok.Getter; import net.aminecraftdev.custombosses.CustomBosses; import net.aminecraftdev.custombosses.file.CommandsFileHandler; import net.aminecraftdev.custombosses.utils.ILoadable; diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Debug.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Debug.java index e60cb13..c09d9a6 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Debug.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Debug.java @@ -26,6 +26,8 @@ public enum Debug { FAILED_TO_LOAD_BOSSCOMMANDMANAGER("The boss command manager tried to load again, but it has already loaded previously."), FAILED_TO_LOAD_BOSSLISTENERMANAGER("The boss listener manager tried to load again, but it has already loaded previously."), FAILED_TO_LOAD_CUSTOM_ITEM("The itemstack name that is provided ({0}) for the spawn item doesn't exist or wasn't found."), + FAILED_TO_LOAD_MESSAGES("The messages name that is provided ({0}) doesn't exist or wasn't found."), + FAILED_TO_LOAD_COMMANDS("The commands name that is provided ({0}) doesn't exist or wasn't found."), FAILED_TO_CREATE_ACTIVE_BOSS_HOLDER("Something went wrong while trying to create an active boss holder for someone who is trying to spawn a boss."), MECHANIC_TYPE_NOT_STORED("This mechanic type is not stored, therefore will not be applied. Valid mechanic types are IOptionalMechanic and IPrimaryMechanic."); diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Message.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Message.java index cc8cf56..19c6d51 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Message.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/Message.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack; */ public enum Message { + General_LocationFormat("{world}, {x}, {y}, {z}"), General_MustBePlayer("&c&l(!) &cYou must be a player to use this command."), General_CannotSpawn("&c&l(!) &cYou cannot spawn a boss at this location! &c&l(!)"), diff --git a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/StringUtils.java b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/StringUtils.java index 33dfd40..f1a3fe9 100644 --- a/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/StringUtils.java +++ b/plugin-modules/Core/src/net/aminecraftdev/custombosses/utils/StringUtils.java @@ -1,6 +1,7 @@ package net.aminecraftdev.custombosses.utils; import org.bukkit.ChatColor; +import org.bukkit.Location; import java.util.LinkedList; import java.util.List; @@ -23,6 +24,19 @@ public class StringUtils { return ChatColor.translateAlternateColorCodes('&', string); } + public String translateLocation(Location location) { + String world = location.getWorld().getName(); + int x = location.getBlockX(); + int y = location.getBlockY(); + int z = location.getBlockZ(); + + return Message.General_LocationFormat.toString() + .replace("{world}", world) + .replace("{x}", ""+x) + .replace("{y}", ""+y) + .replace("{z}", ""+z); + } + public String appendList(List list) { Queue queue = new LinkedList<>(list); StringBuilder stringBuilder = new StringBuilder(); diff --git a/pom.xml b/pom.xml index 34c512f..50c1878 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ - 3.0.0-SNAPSHOT-U28 + 3.0.0-SNAPSHOT-U29 CustomBosses net.aminecraftdev.custombosses.CustomBosses AMinecraftDev