From 8812e63b3e0c1bf586670fe0b212c5e5f68cd1fd Mon Sep 17 00:00:00 2001 From: ASangarin Date: Sun, 29 Nov 2020 00:58:56 +0100 Subject: [PATCH] Added two new placeholders: %mmocore_profession_experience_% %mmocore_profession_next_level_% (more information on the wiki) API Changes: CustomBlockMineEvent now has a new method to check if the block was actually broken or not. --- .../api/event/CustomBlockMineEvent.java | 12 +++++- .../api/experience/PlayerProfessions.java | 9 ++++- .../comp/placeholder/RPGPlaceholders.java | 39 ++++++++++--------- .../mmocore/listener/BlockListener.java | 19 ++++----- 4 files changed, 49 insertions(+), 30 deletions(-) diff --git a/src/main/java/net/Indyuce/mmocore/api/event/CustomBlockMineEvent.java b/src/main/java/net/Indyuce/mmocore/api/event/CustomBlockMineEvent.java index 3cc6c087..6f6199fe 100644 --- a/src/main/java/net/Indyuce/mmocore/api/event/CustomBlockMineEvent.java +++ b/src/main/java/net/Indyuce/mmocore/api/event/CustomBlockMineEvent.java @@ -22,9 +22,10 @@ public class CustomBlockMineEvent extends PlayerDataEvent implements Cancellable private final List drops; private final ExperienceInfo experience; + private boolean canBreak; private boolean cancelled = false; - public CustomBlockMineEvent(PlayerData player, Block block, BlockInfo info) { + public CustomBlockMineEvent(PlayerData player, Block block, BlockInfo info, boolean canBreak) { super(player); this.block = block; @@ -33,6 +34,7 @@ public class CustomBlockMineEvent extends PlayerDataEvent implements Cancellable && info.getDropTable().areConditionsMet(new ConditionInstance(player.getPlayer()))) ? info.collectDrops(new LootBuilder(player, 0)) : new ArrayList<>(); this.experience = info.hasExperience() ? info.getExperience().newInfo() : null; + this.canBreak = canBreak; } public Block getBlock() { @@ -55,6 +57,14 @@ public class CustomBlockMineEvent extends PlayerDataEvent implements Cancellable return experience; } + public boolean canBreak() { + return canBreak; + } + + public void setCanBreak(boolean value) { + canBreak = value; + } + @Override public boolean isCancelled() { return cancelled; diff --git a/src/main/java/net/Indyuce/mmocore/api/experience/PlayerProfessions.java b/src/main/java/net/Indyuce/mmocore/api/experience/PlayerProfessions.java index 6f7f564a..64d18bac 100644 --- a/src/main/java/net/Indyuce/mmocore/api/experience/PlayerProfessions.java +++ b/src/main/java/net/Indyuce/mmocore/api/experience/PlayerProfessions.java @@ -76,7 +76,7 @@ public class PlayerProfessions { } public int getLevel(String profession) { - return Math.max(1, level.containsKey(profession) ? level.get(profession) : 1); + return Math.max(1, level.getOrDefault(profession, 1)); } public int getLevel(Profession profession) { @@ -84,7 +84,7 @@ public class PlayerProfessions { } public int getExperience(String id) { - return exp.containsKey(id) ? exp.get(id) : 0; + return exp.getOrDefault(id, 0); } public int getExperience(Profession profession) { @@ -95,6 +95,11 @@ public class PlayerProfessions { return profession.getExpCurve().getExperience(getLevel(profession) + 1); } + public int getLevelUpExperience(String id) { + if(!MMOCore.plugin.professionManager.has(id)) return 0; + return MMOCore.plugin.professionManager.get(id).getExpCurve().getExperience(getLevel(id) + 1); + } + public void setLevel(Profession profession, int value) { level.put(profession.getId(), value); } diff --git a/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java b/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java index 15c37194..ae89df4f 100644 --- a/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java +++ b/src/main/java/net/Indyuce/mmocore/comp/placeholder/RPGPlaceholders.java @@ -1,12 +1,5 @@ package net.Indyuce.mmocore.comp.placeholder; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.attribute.Attribute; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - import me.clip.placeholderapi.expansion.PlaceholderExpansion; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.experience.PlayerProfessions; @@ -15,6 +8,12 @@ import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.stats.StatType; import net.Indyuce.mmocore.api.quest.PlayerQuests; import net.mmogroup.mmolib.api.util.AltChar; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.attribute.Attribute; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class RPGPlaceholders extends PlaceholderExpansion { @Override @@ -74,9 +73,7 @@ public class RPGPlaceholders extends PlaceholderExpansion { double ratio = 20 * player.getPlayer().getHealth() / player.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); for (double j = 1; j < 20; j++) - format.append((ratio >= j ? ChatColor.RED - : ratio >= j - .5 ? ChatColor.DARK_RED : ChatColor.DARK_GRAY) - + AltChar.listSquare); + format.append(ratio >= j ? ChatColor.RED : ratio >= j - .5 ? ChatColor.DARK_RED : ChatColor.DARK_GRAY).append(AltChar.listSquare); return format.toString(); } @@ -98,6 +95,14 @@ public class RPGPlaceholders extends PlaceholderExpansion { : MMOCore.plugin.configManager.noSkillBoundPlaceholder; } + else if (identifier.startsWith("profession_experience_")) + return "" + PlayerData.get(player).getCollectionSkills() + .getExperience(identifier.substring(22).replace(" ", "-").replace("_", "-").toLowerCase()); + + else if (identifier.startsWith("profession_next_level_")) + return "" + PlayerData.get(player).getCollectionSkills() + .getLevelUpExperience(identifier.substring(21).replace(" ", "-").replace("_", "-").toLowerCase()); + else if (identifier.startsWith("profession_")) return "" + PlayerData.get(player).getCollectionSkills() .getLevel(identifier.substring(11).replace(" ", "-").replace("_", "-").toLowerCase()); @@ -148,14 +153,12 @@ public class RPGPlaceholders extends PlaceholderExpansion { return MMOCore.plugin.configManager.decimal.format(PlayerData.get(player).getStamina()); else if (identifier.equals("stamina_bar")) { - String format = ""; + StringBuilder format = new StringBuilder(); PlayerData data = PlayerData.get(player); double ratio = 20 * data.getStamina() / data.getStats().getStat(StatType.MAX_STAMINA); for (double j = 1; j < 20; j++) - format += (ratio >= j ? MMOCore.plugin.configManager.staminaFull - : ratio >= j - .5 ? MMOCore.plugin.configManager.staminaHalf : MMOCore.plugin.configManager.staminaEmpty) - + AltChar.listSquare; - return format; + format.append(ratio >= j ? MMOCore.plugin.configManager.staminaFull : ratio >= j - .5 ? MMOCore.plugin.configManager.staminaHalf : MMOCore.plugin.configManager.staminaEmpty).append(AltChar.listSquare); + return format.toString(); } else if (identifier.startsWith("stat_")) { @@ -167,12 +170,12 @@ public class RPGPlaceholders extends PlaceholderExpansion { return MMOCore.plugin.configManager.decimal.format(PlayerData.get(player).getStellium()); else if (identifier.equals("stellium_bar")) { - String format = ""; + StringBuilder format = new StringBuilder(); PlayerData data = PlayerData.get(player); double ratio = 20 * data.getStellium() / data.getStats().getStat(StatType.MAX_STELLIUM); for (double j = 1; j < 20; j++) - format += (ratio >= j ? ChatColor.BLUE : ratio >= j - .5 ? ChatColor.AQUA : ChatColor.WHITE) + AltChar.listSquare; - return format; + format.append(ratio >= j ? ChatColor.BLUE : ratio >= j - .5 ? ChatColor.AQUA : ChatColor.WHITE).append(AltChar.listSquare); + return format.toString(); } else if (identifier.equals("quest")) { diff --git a/src/main/java/net/Indyuce/mmocore/listener/BlockListener.java b/src/main/java/net/Indyuce/mmocore/listener/BlockListener.java index 7ba15027..91273573 100644 --- a/src/main/java/net/Indyuce/mmocore/listener/BlockListener.java +++ b/src/main/java/net/Indyuce/mmocore/listener/BlockListener.java @@ -76,20 +76,21 @@ public class BlockListener implements Listener { return; } + boolean canBreak = true; + ItemStack item = player.getInventory().getItemInMainHand(); + if (!MMOCore.plugin.restrictionManager.checkPermissions(item, info.getBlock())) { + MMOCore.plugin.configManager.getSimpleMessage("cannot-break").send(player); + canBreak = false; + } + /* * Calls the event and listen for cancel & for drops changes... also * allows to apply tool durability & enchants to drops, etc. */ - CustomBlockMineEvent called = new CustomBlockMineEvent(PlayerData.get(player), block, info); + CustomBlockMineEvent called = new CustomBlockMineEvent(PlayerData.get(player), block, info, canBreak); Bukkit.getPluginManager().callEvent(called); - if (called.isCancelled()) { - event.setCancelled(true); - return; - } - ItemStack item = player.getInventory().getItemInMainHand(); - if (!MMOCore.plugin.restrictionManager.checkPermissions(item, info.getBlock())) { - MMOCore.plugin.configManager.getSimpleMessage("cannot-break").send(player); + if(called.isCancelled() || !called.canBreak()) { event.setCancelled(true); return; } @@ -141,7 +142,7 @@ public class BlockListener implements Listener { if (!movedBlock.hasMetadata("player_placed")) return; BlockFace direction = event.getDirection(); - movedBlock = movedBlock.getRelative(direction, 2); + //movedBlock = movedBlock.getRelative(direction, 2); for (Block b : event.getBlocks()) if (b.hasMetadata("player_placed")) {