diff --git a/Changelog.txt b/Changelog.txt index 389a79e2a..1ca092279 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -104,9 +104,17 @@ Version 2.2.000 About the removed party features, all the features I removed I consider poor quality features and I don't think they belong in mcMMO. Feel free to yell at me in discord if you disagree. I don't know what genius decided to make parties public by default, when I found out that parties had been changed to such a system I could barely contain my disgust. Parties are back to being private, you get invited by a party leader or party officer. That is the only way to join a party. Version 2.1.182 + You can now use '.all' (for example: mcmmo.perks.xp.customboost.all) to give an XP perk to all skills + Removed hardcore and vampirism commands, these commands are dangerous, just modify the config file if you want to use hardcore / vampirism Fixed several errors in de locale (Thanks TheBusyBiscuit & w1tcherrr) - Fixed a bug where double smelt never succeeded if the furnace was empty + Fixed a bug where double smelt never succeeded if the furnace was empty (but worked normally afterwards) Added some safety so that mcMMO automatic save interval is never more frequent than 1 minute + Removed a few silent exceptions for scoreboards & mcMMO + Added warning about UltraPermissions to mcMMO + Fixed a potential NPE in McMMOPlayerExperienceEvent + + NOTES: + mcMMO will do a better job reporting if something went wrong with scoreboards, which may lead to improved plugin compatibility between mcMMO and other plugins touching scoreboards. Version 2.1.181 mcMMO no longer pointlessly tries to check for missing UUIDs for FlatFile database diff --git a/src/main/java/com/gmail/nossr50/commands/hardcore/HardcoreCommand.java b/src/main/java/com/gmail/nossr50/commands/hardcore/HardcoreCommand.java index 6375265b2..e3697be36 100644 --- a/src/main/java/com/gmail/nossr50/commands/hardcore/HardcoreCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/hardcore/HardcoreCommand.java @@ -1,64 +1,64 @@ -package com.gmail.nossr50.commands.hardcore; - -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.datatypes.skills.PrimarySkillType; -import com.gmail.nossr50.locale.LocaleLoader; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.util.Permissions; -import org.bukkit.command.CommandSender; - -public class HardcoreCommand extends HardcoreModeCommand { - @Override - protected boolean checkTogglePermissions(CommandSender sender) { - return Permissions.hardcoreToggle(sender); - } - - @Override - protected boolean checkModifyPermissions(CommandSender sender) { - return Permissions.hardcoreModify(sender); - } - - @Override - protected boolean checkEnabled(PrimarySkillType skill) { - if (skill == null) { - for (PrimarySkillType primarySkillType : PrimarySkillType.values()) { - if (!primarySkillType.getHardcoreStatLossEnabled()) { - return false; - } - } - - return true; - } - - return skill.getHardcoreStatLossEnabled(); - } - - @Override - protected void enable(PrimarySkillType skill) { - toggle(true, skill); - } - - @Override - protected void disable(PrimarySkillType skill) { - toggle(false, skill); - } - - @Override - protected void modify(CommandSender sender, double newPercentage) { - Config.getInstance().setHardcoreDeathStatPenaltyPercentage(newPercentage); - sender.sendMessage(LocaleLoader.getString("Hardcore.DeathStatLoss.PercentageChanged", percent.format(newPercentage / 100.0D))); - } - - private void toggle(boolean enable, PrimarySkillType skill) { - if (skill == null) { - for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) { - primarySkillType.setHardcoreStatLossEnabled(enable); - } - } - else { - skill.setHardcoreStatLossEnabled(enable); - } - - mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Mode." + (enable ? "Enabled" : "Disabled"), LocaleLoader.getString("Hardcore.DeathStatLoss.Name"), (skill == null ? "all skills" : skill.getName()))); - } -} \ No newline at end of file +//package com.gmail.nossr50.commands.hardcore; +// +//import com.gmail.nossr50.config.Config; +//import com.gmail.nossr50.datatypes.skills.PrimarySkillType; +//import com.gmail.nossr50.locale.LocaleLoader; +//import com.gmail.nossr50.mcMMO; +//import com.gmail.nossr50.util.Permissions; +//import org.bukkit.command.CommandSender; +// +//public class HardcoreCommand extends HardcoreModeCommand { +// @Override +// protected boolean checkTogglePermissions(CommandSender sender) { +// return Permissions.hardcoreToggle(sender); +// } +// +// @Override +// protected boolean checkModifyPermissions(CommandSender sender) { +// return Permissions.hardcoreModify(sender); +// } +// +// @Override +// protected boolean checkEnabled(PrimarySkillType skill) { +// if (skill == null) { +// for (PrimarySkillType primarySkillType : PrimarySkillType.values()) { +// if (!primarySkillType.getHardcoreStatLossEnabled()) { +// return false; +// } +// } +// +// return true; +// } +// +// return skill.getHardcoreStatLossEnabled(); +// } +// +// @Override +// protected void enable(PrimarySkillType skill) { +// toggle(true, skill); +// } +// +// @Override +// protected void disable(PrimarySkillType skill) { +// toggle(false, skill); +// } +// +// @Override +// protected void modify(CommandSender sender, double newPercentage) { +// Config.getInstance().setHardcoreDeathStatPenaltyPercentage(newPercentage); +// sender.sendMessage(LocaleLoader.getString("Hardcore.DeathStatLoss.PercentageChanged", percent.format(newPercentage / 100.0D))); +// } +// +// private void toggle(boolean enable, PrimarySkillType skill) { +// if (skill == null) { +// for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) { +// primarySkillType.setHardcoreStatLossEnabled(enable); +// } +// } +// else { +// skill.setHardcoreStatLossEnabled(enable); +// } +// +// mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Mode." + (enable ? "Enabled" : "Disabled"), LocaleLoader.getString("Hardcore.DeathStatLoss.Name"), (skill == null ? "all skills" : skill.getName()))); +// } +//} \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/commands/hardcore/VampirismCommand.java b/src/main/java/com/gmail/nossr50/commands/hardcore/VampirismCommand.java index 854871e05..8bdfa83f9 100644 --- a/src/main/java/com/gmail/nossr50/commands/hardcore/VampirismCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/hardcore/VampirismCommand.java @@ -1,64 +1,64 @@ -package com.gmail.nossr50.commands.hardcore; - -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.datatypes.skills.PrimarySkillType; -import com.gmail.nossr50.locale.LocaleLoader; -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.util.Permissions; -import org.bukkit.command.CommandSender; - -public class VampirismCommand extends HardcoreModeCommand { - @Override - protected boolean checkTogglePermissions(CommandSender sender) { - return Permissions.vampirismToggle(sender); - } - - @Override - protected boolean checkModifyPermissions(CommandSender sender) { - return Permissions.vampirismModify(sender); - } - - @Override - protected boolean checkEnabled(PrimarySkillType skill) { - if (skill == null) { - for (PrimarySkillType primarySkillType : PrimarySkillType.values()) { - if (!primarySkillType.getHardcoreVampirismEnabled()) { - return false; - } - } - - return true; - } - - return skill.getHardcoreVampirismEnabled(); - } - - @Override - protected void enable(PrimarySkillType skill) { - toggle(true, skill); - } - - @Override - protected void disable(PrimarySkillType skill) { - toggle(false, skill); - } - - @Override - protected void modify(CommandSender sender, double newPercentage) { - Config.getInstance().setHardcoreVampirismStatLeechPercentage(newPercentage); - sender.sendMessage(LocaleLoader.getString("Hardcore.Vampirism.PercentageChanged", percent.format(newPercentage / 100.0D))); - } - - private void toggle(boolean enable, PrimarySkillType skill) { - if (skill == null) { - for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) { - primarySkillType.setHardcoreVampirismEnabled(enable); - } - } - else { - skill.setHardcoreVampirismEnabled(enable); - } - - mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Mode." + (enable ? "Enabled" : "Disabled"), LocaleLoader.getString("Hardcore.Vampirism.Name"), (skill == null ? "all skills" : skill))); - } -} \ No newline at end of file +//package com.gmail.nossr50.commands.hardcore; +// +//import com.gmail.nossr50.config.Config; +//import com.gmail.nossr50.datatypes.skills.PrimarySkillType; +//import com.gmail.nossr50.locale.LocaleLoader; +//import com.gmail.nossr50.mcMMO; +//import com.gmail.nossr50.util.Permissions; +//import org.bukkit.command.CommandSender; +// +//public class VampirismCommand extends HardcoreModeCommand { +// @Override +// protected boolean checkTogglePermissions(CommandSender sender) { +// return Permissions.vampirismToggle(sender); +// } +// +// @Override +// protected boolean checkModifyPermissions(CommandSender sender) { +// return Permissions.vampirismModify(sender); +// } +// +// @Override +// protected boolean checkEnabled(PrimarySkillType skill) { +// if (skill == null) { +// for (PrimarySkillType primarySkillType : PrimarySkillType.values()) { +// if (!primarySkillType.getHardcoreVampirismEnabled()) { +// return false; +// } +// } +// +// return true; +// } +// +// return skill.getHardcoreVampirismEnabled(); +// } +// +// @Override +// protected void enable(PrimarySkillType skill) { +// toggle(true, skill); +// } +// +// @Override +// protected void disable(PrimarySkillType skill) { +// toggle(false, skill); +// } +// +// @Override +// protected void modify(CommandSender sender, double newPercentage) { +// Config.getInstance().setHardcoreVampirismStatLeechPercentage(newPercentage); +// sender.sendMessage(LocaleLoader.getString("Hardcore.Vampirism.PercentageChanged", percent.format(newPercentage / 100.0D))); +// } +// +// private void toggle(boolean enable, PrimarySkillType skill) { +// if (skill == null) { +// for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) { +// primarySkillType.setHardcoreVampirismEnabled(enable); +// } +// } +// else { +// skill.setHardcoreVampirismEnabled(enable); +// } +// +// mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Mode." + (enable ? "Enabled" : "Disabled"), LocaleLoader.getString("Hardcore.Vampirism.Name"), (skill == null ? "all skills" : skill))); +// } +//} \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerExperienceEvent.java b/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerExperienceEvent.java index 5e070bdba..7620b09c4 100644 --- a/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerExperienceEvent.java +++ b/src/main/java/com/gmail/nossr50/events/experience/McMMOPlayerExperienceEvent.java @@ -27,7 +27,12 @@ public abstract class McMMOPlayerExperienceEvent extends PlayerEvent implements protected McMMOPlayerExperienceEvent(Player player, PrimarySkillType skill, XPGainReason xpGainReason) { super(player); this.skill = skill; - this.skillLevel = mcMMO.getUserManager().getPlayer(player).getSkillLevel(skill); + + if(UserManager.getPlayer(player) != null) { + this.skillLevel = mcMMO.getUserManager().getPlayer(player).getSkillLevel(skill); + } else { + this.skillLevel = 0; + } this.xpGainReason = xpGainReason; } diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index 277b1b06b..682656c3c 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -149,6 +149,11 @@ public class mcMMO extends JavaPlugin { public static FixedMetadataValue metadataValue; + public static final String ULTRA_PERMISSONS = "UltraPermissons"; + public static final String UP_WARNING_2 = "Stop using " + ULTRA_PERMISSONS + " with mcMMO immediately!"; + public static final String UP_WARNING_1 = "mcMMO has detected " + ULTRA_PERMISSONS + " on your server, users have reported a severe plugin conflict between these two plugins which severely degrades server performance"; + public static final String UP_WARNING_3 = "The author of UltraPermissions has passed away and its unlikely this issue will ever be solved"; + public mcMMO() { p = this; } @@ -263,6 +268,24 @@ public class mcMMO extends JavaPlugin { else metrics.addCustomChart(new SimplePie("leveling_system", () -> "Standard")); } + + //Can't confirm this bug myself as the plugin is premium +// //TODO: Remove this when ChatControlRed fixes itself +// if(pluginManager.getPlugin("ChatControlRed") != null) { +// getLogger().severe("mcMMO has detected ChatControlRed on your server, users have reported a severe plugin conflict between these two plugins which degrades server performance and wastes many server resources."); +// getLogger().severe("It is HIGHLY RECOMMENDED that you do --NOT-- use ChatControlRed until this issue is resolved!"); +// } + if(pluginManager.getPlugin(ULTRA_PERMISSONS) != null) { + Bukkit.getScheduler().runTaskTimer(this, () -> { + getLogger().severe(UP_WARNING_1); + getLogger().severe(UP_WARNING_2); + getLogger().severe(UP_WARNING_3); + + Bukkit.broadcastMessage(UP_WARNING_1); + Bukkit.broadcastMessage(UP_WARNING_2); + Bukkit.broadcastMessage(UP_WARNING_3); + }, 0L, 1200L); + } } catch (Throwable t) { getLogger().severe("There was an error while enabling mcMMO!"); diff --git a/src/main/java/com/gmail/nossr50/runnables/SaveTimerTask.java b/src/main/java/com/gmail/nossr50/runnables/SaveTimerTask.java index 7fdf8d986..063122cc2 100644 --- a/src/main/java/com/gmail/nossr50/runnables/SaveTimerTask.java +++ b/src/main/java/com/gmail/nossr50/runnables/SaveTimerTask.java @@ -7,6 +7,7 @@ import org.bukkit.scheduler.BukkitRunnable; public class SaveTimerTask extends BukkitRunnable { @Override public void run() { + mcMMO.p.debug("[User Data] Saving..."); // All player data will be saved periodically through this int count = 1; diff --git a/src/main/java/com/gmail/nossr50/util/Permissions.java b/src/main/java/com/gmail/nossr50/util/Permissions.java index 5a039487e..9272df9c9 100644 --- a/src/main/java/com/gmail/nossr50/util/Permissions.java +++ b/src/main/java/com/gmail/nossr50/util/Permissions.java @@ -126,7 +126,12 @@ public final class Permissions { public static boolean doubleXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.double." + skill.toString().toLowerCase(Locale.ENGLISH)); } public static boolean oneAndOneHalfXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.50percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } public static boolean oneAndOneTenthXp(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.10percentboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } - public static boolean customXpBoost(Permissible permissible, PrimarySkillType skill) { return permissible.hasPermission("mcmmo.perks.xp.customboost." + skill.toString().toLowerCase(Locale.ENGLISH)); } + + public static boolean customXpBoost(Permissible permissible, PrimarySkillType skill) { + return permissible.hasPermission("mcmmo.perks.xp.customboost.all") + ||permissible.hasPermission("mcmmo.perks.xp.customboost." + skill.toString().toLowerCase(Locale.ENGLISH)); + } + /* ACTIVATION PERKS */ public static boolean twelveSecondActivationBoost(Permissible permissible) { return permissible.hasPermission("mcmmo.perks.activationtime.twelveseconds"); } diff --git a/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java b/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java index bd59f409e..9274989f9 100644 --- a/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java +++ b/src/main/java/com/gmail/nossr50/util/commands/CommandRegistrationManager.java @@ -11,8 +11,6 @@ import com.gmail.nossr50.commands.experience.AddlevelsCommand; import com.gmail.nossr50.commands.experience.AddxpCommand; import com.gmail.nossr50.commands.experience.MmoeditCommand; import com.gmail.nossr50.commands.experience.SkillresetCommand; -import com.gmail.nossr50.commands.hardcore.HardcoreCommand; -import com.gmail.nossr50.commands.hardcore.VampirismCommand; import com.gmail.nossr50.commands.party.PartyCommand; import com.gmail.nossr50.commands.party.teleport.PtpCommand; import com.gmail.nossr50.commands.player.*; @@ -369,25 +367,25 @@ public final class CommandRegistrationManager { command.setExecutor(new PtpCommand()); } - private static void registerHardcoreCommand() { - PluginCommand command = mcMMO.p.getCommand("hardcore"); - command.setDescription(LocaleLoader.getString("Commands.Description.hardcore")); - command.setPermission("mcmmo.commands.hardcore;mcmmo.commands.hardcore.toggle;mcmmo.commands.hardcore.modify"); - command.setPermissionMessage(permissionsMessage); - command.setUsage(LocaleLoader.getString("Commands.Usage.1", "hardcore", "[on|off]")); - command.setUsage(command.getUsage() + "\n" + LocaleLoader.getString("Commands.Usage.1", "hardcore", "<" + LocaleLoader.getString("Commands.Usage.Rate") + ">")); - command.setExecutor(new HardcoreCommand()); - } - - private static void registerVampirismCommand() { - PluginCommand command = mcMMO.p.getCommand("vampirism"); - command.setDescription(LocaleLoader.getString("Commands.Description.vampirism")); - command.setPermission("mcmmo.commands.vampirism;mcmmo.commands.vampirism.toggle;mcmmo.commands.vampirism.modify"); - command.setPermissionMessage(permissionsMessage); - command.setUsage(LocaleLoader.getString("Commands.Usage.1", "vampirism", "[on|off]")); - command.setUsage(command.getUsage() + "\n" + LocaleLoader.getString("Commands.Usage.1", "vampirism", "<" + LocaleLoader.getString("Commands.Usage.Rate") + ">")); - command.setExecutor(new VampirismCommand()); - } +// private static void registerHardcoreCommand() { +// PluginCommand command = mcMMO.p.getCommand("hardcore"); +// command.setDescription(LocaleLoader.getString("Commands.Description.hardcore")); +// command.setPermission("mcmmo.commands.hardcore;mcmmo.commands.hardcore.toggle;mcmmo.commands.hardcore.modify"); +// command.setPermissionMessage(permissionsMessage); +// command.setUsage(LocaleLoader.getString("Commands.Usage.1", "hardcore", "[on|off]")); +// command.setUsage(command.getUsage() + "\n" + LocaleLoader.getString("Commands.Usage.1", "hardcore", "<" + LocaleLoader.getString("Commands.Usage.Rate") + ">")); +// command.setExecutor(new HardcoreCommand()); +// } +// +// private static void registerVampirismCommand() { +// PluginCommand command = mcMMO.p.getCommand("vampirism"); +// command.setDescription(LocaleLoader.getString("Commands.Description.vampirism")); +// command.setPermission("mcmmo.commands.vampirism;mcmmo.commands.vampirism.toggle;mcmmo.commands.vampirism.modify"); +// command.setPermissionMessage(permissionsMessage); +// command.setUsage(LocaleLoader.getString("Commands.Usage.1", "vampirism", "[on|off]")); +// command.setUsage(command.getUsage() + "\n" + LocaleLoader.getString("Commands.Usage.1", "vampirism", "<" + LocaleLoader.getString("Commands.Usage.Rate") + ">")); +// command.setExecutor(new VampirismCommand()); +// } private static void registerMcnotifyCommand() { PluginCommand command = mcMMO.p.getCommand("mcnotify"); @@ -469,8 +467,8 @@ public final class CommandRegistrationManager { registerSkillresetCommand(); // Hardcore Commands - registerHardcoreCommand(); - registerVampirismCommand(); +// registerHardcoreCommand(); +// registerVampirismCommand(); // Party Commands registerPartyCommand(); diff --git a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java index 470865c7b..06e5029c6 100644 --- a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java +++ b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardWrapper.java @@ -125,7 +125,8 @@ public class ScoreboardWrapper { try { cooldownTask.cancel(); } - catch (Throwable ignored) { + catch (Exception e) { + e.printStackTrace(); } cooldownTask = null; @@ -429,8 +430,9 @@ public class ScoreboardWrapper { try { updateTask.cancel(); } - catch (Throwable ignored) { - } // catch NullPointerException and IllegalStateException and any Error; don't care + catch (Exception e) { + e.printStackTrace(); + } updateTask = null; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index fb41e484e..9b0b03ab4 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -159,14 +159,14 @@ commands: mcpurge: description: Purge users with 0 powerlevel and/or who haven't connected in several months from the server DB. permission: mcmmo.commands.mcpurge - hardcore: - aliases: [mchardcore] - description: Modify the mcMMO hardcore percentage or toggle hardcore mode on/off - permission: mcmmo.commands.hardcore - vampirism: - aliases: [mcvampirism] - description: Modify the mcMMO vampirism percentage or toggle vampirism mode on/off - permission: mcmmo.commands.vampirism +# hardcore: +# aliases: [mchardcore] +# description: Modify the mcMMO hardcore percentage or toggle hardcore mode on/off +# permission: mcmmo.commands.hardcore +# vampirism: +# aliases: [mcvampirism] +# description: Modify the mcMMO vampirism percentage or toggle vampirism mode on/off +# permission: mcmmo.commands.vampirism mcnotify: aliases: [notify] description: Toggle mcMMO abilities chat display notifications on/off @@ -868,7 +868,7 @@ permissions: mcmmo.commands.addxp: true mcmmo.commands.addxp.others: true mcmmo.commands.defaults: true - mcmmo.commands.hardcore.all: true +# mcmmo.commands.hardcore.all: true mcmmo.commands.inspect.far: true mcmmo.commands.inspect.hidden: true mcmmo.commands.mcability.others: true @@ -888,7 +888,7 @@ permissions: mcmmo.commands.ptp.world.all: true mcmmo.commands.reloadlocale: true mcmmo.commands.skillreset.all: true - mcmmo.commands.vampirism.all: true +# mcmmo.commands.vampirism.all: true mcmmo.commands.xprate.all: true mcmmo.commands.acrobatics: description: Allows access to the acrobatics command @@ -910,23 +910,23 @@ permissions: description: Allows access to the excavation command mcmmo.commands.fishing: description: Allows access to the fishing command - mcmmo.commands.hardcore.*: - default: false - description: Implies access to all mcmmo.commands.hardcore permissions - children: - mcmmo.commands.hardcore.all: true - mcmmo.commands.hardcore.all: - description: Implies access to all mcmmo.commands.hardcore permissions - children: - mcmmo.commands.hardcore: true - mcmmo.commands.hardcore.modify: true - mcmmo.commands.hardcore.toggle: true - mcmmo.commands.hardcore: - description: Allows access to the hardcore command - mcmmo.commands.hardcore.modify: - description: Allows access to the hardcore command to modify the hardcore rate - mcmmo.commands.hardcore.toggle: - description: Allows access to the hardcore command to toggle hardcore on/off +# mcmmo.commands.hardcore.*: +# default: false +# description: Implies access to all mcmmo.commands.hardcore permissions +# children: +# mcmmo.commands.hardcore.all: true +# mcmmo.commands.hardcore.all: +# description: Implies access to all mcmmo.commands.hardcore permissions +# children: +# mcmmo.commands.hardcore: true +# mcmmo.commands.hardcore.modify: true +# mcmmo.commands.hardcore.toggle: true +# mcmmo.commands.hardcore: +# description: Allows access to the hardcore command +# mcmmo.commands.hardcore.modify: +# description: Allows access to the hardcore command to modify the hardcore rate +# mcmmo.commands.hardcore.toggle: +# description: Allows access to the hardcore command to toggle hardcore on/off mcmmo.commands.herbalism: description: Allows access to the herbalism command mcmmo.commands.inspect.*: @@ -1298,23 +1298,23 @@ permissions: description: Allows access to the taming command mcmmo.commands.unarmed: description: Allows access to the unarmed command - mcmmo.commands.vampirism.*: - default: false - description: Implies access to all mcmmo.commands.vampirism permissions - children: - mcmmo.commands.vampirism.all: true - mcmmo.commands.vampirism.all: - description: Implies access to all mcmmo.commands.vampirism permissions - children: - mcmmo.commands.vampirism: true - mcmmo.commands.vampirism.modify: true - mcmmo.commands.vampirism.toggle: true - mcmmo.commands.vampirism: - description: Allows access to the vampirism command - mcmmo.commands.vampirism.modify: - description: Allows access to the vampirism command to modify the vampirism rate - mcmmo.commands.vampirism.toggle: - description: Allows access to the vampirism command to toggle vampirism on/off +# mcmmo.commands.vampirism.*: +# default: false +# description: Implies access to all mcmmo.commands.vampirism permissions +# children: +# mcmmo.commands.vampirism.all: true +# mcmmo.commands.vampirism.all: +# description: Implies access to all mcmmo.commands.vampirism permissions +# children: +# mcmmo.commands.vampirism: true +# mcmmo.commands.vampirism.modify: true +# mcmmo.commands.vampirism.toggle: true +# mcmmo.commands.vampirism: +# description: Allows access to the vampirism command +# mcmmo.commands.vampirism.modify: +# description: Allows access to the vampirism command to modify the vampirism rate +# mcmmo.commands.vampirism.toggle: +# description: Allows access to the vampirism command to toggle vampirism on/off mcmmo.commands.woodcutting: description: Allows access to the woodcutting command mcmmo.commands.xprate.*: