mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 11:03:43 +01:00 
			
		
		
		
	endgame progression WIP
This commit is contained in:
		@@ -1,4 +1,18 @@
 | 
			
		||||
Version 2.1.175
 | 
			
		||||
    Added a new mastery sub-skill to each skill (see notes)
 | 
			
		||||
    Added /mmopower command (aliases /mmopowerlevel /powerlevel)
 | 
			
		||||
    Added 'mcmmo.commands.mmopower' permission node
 | 
			
		||||
    Added 'General.PowerLevel.Skill_Mastery.Enabled' to config.yml which is used to enable or disable the mastery skills (will also disable the new power level command)
 | 
			
		||||
 | 
			
		||||
    NOTES:
 | 
			
		||||
    Most skills have a mastery sub-skill, this mastery subskill provides a small benefit that scales to level 10,000 (or 1,000 for standard) and does not have ranks (other than the initial rank to unlock it)
 | 
			
		||||
    Mastery skills unlock at level 1000 for RetroMode (the default setting), and 100 for Standard
 | 
			
		||||
    Mastery skills are meant to provide an "end-game" to skills, a reason to continue leveling a skill past its "max".
 | 
			
		||||
    This system is brand new, it is entirely possible I will completely change, remove, or add more mastery skills in the future.
 | 
			
		||||
 | 
			
		||||
    New Power Level Command
 | 
			
		||||
    This power level command gives you a view of all your current masteries, it also provides a summary of your power level.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Version 2.1.174
 | 
			
		||||
    Some legacy color codes in our locale file were swapped to &-code equivalents (thanks ViaSnake)
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,9 @@ import co.aikar.commands.BukkitCommandManager;
 | 
			
		||||
import co.aikar.commands.ConditionFailedException;
 | 
			
		||||
import com.gmail.nossr50.commands.chat.AdminChatCommand;
 | 
			
		||||
import com.gmail.nossr50.commands.chat.PartyChatCommand;
 | 
			
		||||
import com.gmail.nossr50.commands.skills.PowerLevelCommand;
 | 
			
		||||
import com.gmail.nossr50.config.ChatConfig;
 | 
			
		||||
import com.gmail.nossr50.config.Config;
 | 
			
		||||
import com.gmail.nossr50.datatypes.chat.ChatChannel;
 | 
			
		||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
 | 
			
		||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
			
		||||
@@ -20,9 +22,14 @@ import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 * For now this class will only handle ACF converted commands, all other commands will be handled elsewhere
 | 
			
		||||
 */
 | 
			
		||||
public class CommandManager {
 | 
			
		||||
    public static final @NotNull String MMO_DATA_LOADED = "mmoDataLoaded";
 | 
			
		||||
 | 
			
		||||
    //CHAT
 | 
			
		||||
    public static final @NotNull String ADMIN_CONDITION = "adminCondition";
 | 
			
		||||
    public static final @NotNull String PARTY_CONDITION = "partyCondition";
 | 
			
		||||
    public static final @NotNull String MMO_DATA_LOADED = "mmoDataLoaded";
 | 
			
		||||
 | 
			
		||||
    //SKILLS
 | 
			
		||||
    public static final @NotNull String POWER_LEVEL_CONDITION = "powerLevelCondition";
 | 
			
		||||
 | 
			
		||||
    private final @NotNull mcMMO pluginRef;
 | 
			
		||||
    private final @NotNull BukkitCommandManager bukkitCommandManager;
 | 
			
		||||
@@ -36,9 +43,16 @@ public class CommandManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void registerCommands() {
 | 
			
		||||
        registerSkillCommands(); //TODO: Implement other skills not just power level
 | 
			
		||||
        registerChatCommands();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void registerSkillCommands() {
 | 
			
		||||
        if(Config.getInstance().isMasterySystemEnabled()) {
 | 
			
		||||
            bukkitCommandManager.registerCommand(new PowerLevelCommand(pluginRef));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Registers chat commands if the chat system is enabled
 | 
			
		||||
     */
 | 
			
		||||
@@ -54,6 +68,23 @@ public class CommandManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void registerConditions() {
 | 
			
		||||
        registerChatCommandConditions(); //Chat Commands
 | 
			
		||||
        registerSkillConditions();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void registerSkillConditions() {
 | 
			
		||||
        bukkitCommandManager.getCommandConditions().addCondition(POWER_LEVEL_CONDITION, (context) -> {
 | 
			
		||||
            BukkitCommandIssuer issuer = context.getIssuer();
 | 
			
		||||
 | 
			
		||||
            if(issuer.getIssuer() instanceof Player) {
 | 
			
		||||
                validateLoadedData(issuer.getPlayer());
 | 
			
		||||
            } else {
 | 
			
		||||
                throw new ConditionFailedException(LocaleLoader.getString("Commands.NoConsole"));
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void registerChatCommandConditions() {
 | 
			
		||||
        // Method or Class based - Can only be used on methods
 | 
			
		||||
        bukkitCommandManager.getCommandConditions().addCondition(ADMIN_CONDITION, (context) -> {
 | 
			
		||||
            BukkitCommandIssuer issuer = context.getIssuer();
 | 
			
		||||
@@ -78,6 +109,7 @@ public class CommandManager {
 | 
			
		||||
            if(bukkitCommandIssuer.getIssuer() instanceof Player) {
 | 
			
		||||
                validateLoadedData(bukkitCommandIssuer.getPlayer());
 | 
			
		||||
                validatePlayerParty(bukkitCommandIssuer.getPlayer());
 | 
			
		||||
                //TODO: Is there even a point in validating permission? look into this later
 | 
			
		||||
                validatePermission("mcmmo.chat.partychat", bukkitCommandIssuer.getPlayer());
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,31 @@
 | 
			
		||||
package com.gmail.nossr50.commands.skills;
 | 
			
		||||
 | 
			
		||||
import co.aikar.commands.BaseCommand;
 | 
			
		||||
import co.aikar.commands.BukkitCommandIssuer;
 | 
			
		||||
import co.aikar.commands.annotation.CommandAlias;
 | 
			
		||||
import co.aikar.commands.annotation.CommandPermission;
 | 
			
		||||
import co.aikar.commands.annotation.Conditions;
 | 
			
		||||
import co.aikar.commands.annotation.Default;
 | 
			
		||||
import com.gmail.nossr50.commands.CommandManager;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
@CommandPermission("mcmmo.commands.mmopower")
 | 
			
		||||
@CommandAlias("mmopowerlevel|powerlevel") //Kept for historical reasons
 | 
			
		||||
public class PowerLevelCommand extends BaseCommand {
 | 
			
		||||
    private final @NotNull mcMMO pluginRef;
 | 
			
		||||
 | 
			
		||||
    public PowerLevelCommand(@NotNull mcMMO pluginRef) {
 | 
			
		||||
        this.pluginRef = pluginRef;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Default
 | 
			
		||||
    @Conditions(CommandManager.ADMIN_CONDITION)
 | 
			
		||||
    public void processCommand(String[] args) {
 | 
			
		||||
        BukkitCommandIssuer bukkitCommandIssuer = (BukkitCommandIssuer) getCurrentCommandIssuer();
 | 
			
		||||
        Player player = bukkitCommandIssuer.getPlayer();
 | 
			
		||||
 | 
			
		||||
        //TODO: impl
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -597,4 +597,5 @@ public class Config extends AutoUpdateConfigLoader {
 | 
			
		||||
    public int getPowerLevelUpBroadcastRadius() { return config.getInt("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Broadcast_Targets.Distance_Restrictions.Restricted_Radius", 100); }
 | 
			
		||||
    public int getPowerLevelUpBroadcastInterval() { return config.getInt("General.Level_Up_Chat_Broadcasts.Broadcast_Powerlevels.Milestone_Interval", 100); }
 | 
			
		||||
 | 
			
		||||
    public boolean isMasterySystemEnabled() { return config.getBoolean( "General.PowerLevel.Skill_Mastery.Enabled"); }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,16 +11,19 @@ public enum SubSkillType {
 | 
			
		||||
    /* ACROBATICS */
 | 
			
		||||
    ACROBATICS_DODGE(1),
 | 
			
		||||
    ACROBATICS_ROLL,
 | 
			
		||||
    ACROBATICS_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* ALCHEMY */
 | 
			
		||||
    ALCHEMY_CATALYSIS(1),
 | 
			
		||||
    ALCHEMY_CONCOCTIONS(8),
 | 
			
		||||
    ALCHEMY_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* ARCHERY */
 | 
			
		||||
    ARCHERY_ARROW_RETRIEVAL(1),
 | 
			
		||||
    ARCHERY_DAZE,
 | 
			
		||||
    ARCHERY_SKILL_SHOT(20),
 | 
			
		||||
    ARCHERY_ARCHERY_LIMIT_BREAK(10),
 | 
			
		||||
    ARCHERY_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Axes */
 | 
			
		||||
    AXES_ARMOR_IMPACT(20),
 | 
			
		||||
@@ -29,10 +32,12 @@ public enum SubSkillType {
 | 
			
		||||
    AXES_CRITICAL_STRIKES(1),
 | 
			
		||||
    AXES_GREATER_IMPACT(1),
 | 
			
		||||
    AXES_SKULL_SPLITTER(1),
 | 
			
		||||
    AXES_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Excavation */
 | 
			
		||||
    EXCAVATION_ARCHAEOLOGY(8),
 | 
			
		||||
    EXCAVATION_GIGA_DRILL_BREAKER(1),
 | 
			
		||||
    EXCAVATION_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Fishing */
 | 
			
		||||
    FISHING_FISHERMANS_DIET(5),
 | 
			
		||||
@@ -41,6 +46,7 @@ public enum SubSkillType {
 | 
			
		||||
    FISHING_MASTER_ANGLER(8),
 | 
			
		||||
    FISHING_TREASURE_HUNTER(8),
 | 
			
		||||
    FISHING_SHAKE(1),
 | 
			
		||||
    FISHING_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Herbalism */
 | 
			
		||||
    HERBALISM_DOUBLE_DROPS(1),
 | 
			
		||||
@@ -49,6 +55,7 @@ public enum SubSkillType {
 | 
			
		||||
    HERBALISM_GREEN_THUMB(4),
 | 
			
		||||
    HERBALISM_HYLIAN_LUCK,
 | 
			
		||||
    HERBALISM_SHROOM_THUMB,
 | 
			
		||||
    HERBALISM_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Mining */
 | 
			
		||||
    MINING_BIGGER_BOMBS(1),
 | 
			
		||||
@@ -56,11 +63,13 @@ public enum SubSkillType {
 | 
			
		||||
    MINING_DEMOLITIONS_EXPERTISE(1),
 | 
			
		||||
    MINING_DOUBLE_DROPS(1),
 | 
			
		||||
    MINING_SUPER_BREAKER(1),
 | 
			
		||||
    MINING_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Repair */
 | 
			
		||||
    REPAIR_ARCANE_FORGING(8),
 | 
			
		||||
    REPAIR_REPAIR_MASTERY(1),
 | 
			
		||||
    REPAIR_SUPER_REPAIR(1),
 | 
			
		||||
    REPAIR_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Salvage */
 | 
			
		||||
    SALVAGE_SCRAP_COLLECTOR(8),
 | 
			
		||||
@@ -77,6 +86,7 @@ public enum SubSkillType {
 | 
			
		||||
    SWORDS_SERRATED_STRIKES(1),
 | 
			
		||||
    SWORDS_STAB(2),
 | 
			
		||||
    SWORDS_SWORDS_LIMIT_BREAK(10),
 | 
			
		||||
    SWORDS_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Taming */
 | 
			
		||||
    TAMING_BEAST_LORE(1),
 | 
			
		||||
@@ -89,6 +99,7 @@ public enum SubSkillType {
 | 
			
		||||
    TAMING_SHARPENED_CLAWS(1),
 | 
			
		||||
    TAMING_SHOCK_PROOF(1),
 | 
			
		||||
    TAMING_THICK_FUR(1),
 | 
			
		||||
    TAMING_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Unarmed */
 | 
			
		||||
    UNARMED_ARROW_DEFLECT(1),
 | 
			
		||||
@@ -98,6 +109,7 @@ public enum SubSkillType {
 | 
			
		||||
    UNARMED_STEEL_ARM_STYLE(20),
 | 
			
		||||
    UNARMED_IRON_GRIP(1),
 | 
			
		||||
    UNARMED_UNARMED_LIMIT_BREAK(10),
 | 
			
		||||
    UNARMED_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    /* Woodcutting */
 | 
			
		||||
/*    WOODCUTTING_BARK_SURGEON(3),*/
 | 
			
		||||
@@ -106,7 +118,10 @@ public enum SubSkillType {
 | 
			
		||||
    WOODCUTTING_LEAF_BLOWER(1),
 | 
			
		||||
/*    WOODCUTTING_NATURES_BOUNTY(3),
 | 
			
		||||
    WOODCUTTING_SPLINTER(3),*/
 | 
			
		||||
    WOODCUTTING_TREE_FELLER(1);
 | 
			
		||||
    WOODCUTTING_TREE_FELLER(1),
 | 
			
		||||
    WOODCUTTING_MASTERY(1),
 | 
			
		||||
 | 
			
		||||
    POWER_LEVEL_MASTERY(1);
 | 
			
		||||
 | 
			
		||||
    private final int numRanks;
 | 
			
		||||
    //TODO: SuperAbilityType should also contain flags for active by default? Not sure if it should work that way.
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,9 @@ General:
 | 
			
		||||
    RetroMode:
 | 
			
		||||
        Enabled: true
 | 
			
		||||
    Locale: en_US
 | 
			
		||||
    PowerLevel:
 | 
			
		||||
        Skill_Mastery:
 | 
			
		||||
            Enabled: true
 | 
			
		||||
    AprilFoolsEvent: true
 | 
			
		||||
    MOTD_Enabled: true
 | 
			
		||||
    EventBroadcasts: true
 | 
			
		||||
 
 | 
			
		||||
@@ -149,6 +149,10 @@ commands:
 | 
			
		||||
    salvage:
 | 
			
		||||
        description: Detailed mcMMO skill info
 | 
			
		||||
        permission: mcmmo.commands.salvage
 | 
			
		||||
    mmopower:
 | 
			
		||||
        description: Shows skill mastery and power level info
 | 
			
		||||
        permission: mcmmo.commands.mmopower
 | 
			
		||||
        aliases: [mmopowerlevel, powerlevel]
 | 
			
		||||
    adminchat:
 | 
			
		||||
        aliases: [ac, a]
 | 
			
		||||
        description: Toggle Admin chat or send admin chat messages
 | 
			
		||||
@@ -825,6 +829,7 @@ permissions:
 | 
			
		||||
            mcmmo.commands.taming: true
 | 
			
		||||
            mcmmo.commands.unarmed: true
 | 
			
		||||
            mcmmo.commands.woodcutting: true
 | 
			
		||||
            mcmmo.commands.mmopower: true
 | 
			
		||||
    mcmmo.commands.defaultsop:
 | 
			
		||||
        description: Implies all default op mcmmo.commands permissions.
 | 
			
		||||
        children:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user