From 21ac44ee6184b5dcc3df50e9261e6a686af317f2 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Thu, 24 Dec 2020 16:41:09 -0800 Subject: [PATCH] More work on skill API impl/migration --- .../commands/skills/CrossbowsCommand.java | 6 +- .../nossr50/datatypes/player/McMMOPlayer.java | 25 ++--- .../player/PersistentPlayerData.java | 2 +- .../datatypes/skills/CoreRootSkill.java | 50 ++++++++- .../nossr50/datatypes/skills/CoreSkill.java | 15 +++ .../nossr50/datatypes/skills/CoreSkills.java | 100 +++++++++++++----- .../datatypes/skills/PrimarySkillType.java | 8 +- .../datatypes/skills/SkillRegisterImpl.java | 56 +++++++--- ...sbowManager.java => CrossbowsManager.java} | 4 +- ...identManager.java => TridentsManager.java} | 4 +- .../experience/MMOExperienceBarManager.java | 2 +- .../nossr50/util/skills/CombatUtils.java | 10 +- 12 files changed, 205 insertions(+), 77 deletions(-) create mode 100644 src/main/java/com/gmail/nossr50/datatypes/skills/CoreSkill.java rename src/main/java/com/gmail/nossr50/skills/crossbows/{CrossbowManager.java => CrossbowsManager.java} (97%) rename src/main/java/com/gmail/nossr50/skills/tridents/{TridentManager.java => TridentsManager.java} (71%) diff --git a/src/main/java/com/gmail/nossr50/commands/skills/CrossbowsCommand.java b/src/main/java/com/gmail/nossr50/commands/skills/CrossbowsCommand.java index b5e8ab075..af96e4054 100644 --- a/src/main/java/com/gmail/nossr50/commands/skills/CrossbowsCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/skills/CrossbowsCommand.java @@ -1,7 +1,7 @@ package com.gmail.nossr50.commands.skills; import com.gmail.nossr50.datatypes.skills.SubSkillType; -import com.gmail.nossr50.skills.crossbows.CrossbowManager; +import com.gmail.nossr50.skills.crossbows.CrossbowsManager; import com.gmail.nossr50.util.text.TextComponentFactory; import com.neetgames.mcmmo.player.OnlineMMOPlayer; import net.kyori.adventure.text.Component; @@ -29,10 +29,10 @@ public class CrossbowsCommand extends SkillCommand { protected @NotNull List statsDisplay(@NotNull OnlineMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) { List messages = new ArrayList<>(); - CrossbowManager crossbowManager = ((McMMOPlayer) (mmoPlayer)).getCrossbowManager(); + CrossbowsManager crossbowsManager = ((McMMOPlayer) (mmoPlayer)).getCrossbowManager(); if(canUseSubskill(mmoPlayer, SubSkillType.CROSSBOWS_SUPER_SHOTGUN)) { - String additionalArrowCount = String.valueOf(crossbowManager.getSuperShotgunAdditionalArrowCount()); + String additionalArrowCount = String.valueOf(crossbowsManager.getSuperShotgunAdditionalArrowCount()); messages.add(getStatMessage(SubSkillType.CROSSBOWS_SUPER_SHOTGUN, additionalArrowCount)); } diff --git a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java index 3ff484c5a..7bdb3da89 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java +++ b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java @@ -4,6 +4,8 @@ import com.gmail.nossr50.chat.author.PlayerAuthor; import com.gmail.nossr50.config.ChatConfig; import com.gmail.nossr50.config.WorldBlacklist; import com.gmail.nossr50.datatypes.chat.ChatChannel; +import com.gmail.nossr50.datatypes.skills.CoreRootSkill; +import com.gmail.nossr50.datatypes.skills.CoreSkills; import com.neetgames.mcmmo.party.Party; import com.gmail.nossr50.datatypes.party.PartyTeleportRecord; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; @@ -15,7 +17,7 @@ import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager; import com.gmail.nossr50.skills.alchemy.AlchemyManager; import com.gmail.nossr50.skills.archery.ArcheryManager; import com.gmail.nossr50.skills.axes.AxesManager; -import com.gmail.nossr50.skills.crossbows.CrossbowManager; +import com.gmail.nossr50.skills.crossbows.CrossbowsManager; import com.gmail.nossr50.skills.excavation.ExcavationManager; import com.gmail.nossr50.skills.fishing.FishingManager; import com.gmail.nossr50.skills.herbalism.HerbalismManager; @@ -25,7 +27,7 @@ import com.gmail.nossr50.skills.salvage.SalvageManager; import com.gmail.nossr50.skills.smelting.SmeltingManager; import com.gmail.nossr50.skills.swords.SwordsManager; import com.gmail.nossr50.skills.taming.TamingManager; -import com.gmail.nossr50.skills.tridents.TridentManager; +import com.gmail.nossr50.skills.tridents.TridentsManager; import com.gmail.nossr50.skills.unarmed.UnarmedManager; import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager; import com.gmail.nossr50.util.Misc; @@ -54,10 +56,9 @@ public class McMMOPlayer extends PlayerProfile implements OnlineMMOPlayer, Ident private final @NotNull Identity identity; private @Nullable Party playerPartyRef; - //Used in our chat systems for chat messages private final @NotNull PlayerAuthor playerAuthor; - private final @NotNull Map skillManagers = new HashMap<>(); + private final @NotNull Map skillManagers = new HashMap<>(); private final @NotNull MMOExperienceBarManager experienceBarManager; private @Nullable PartyTeleportRecord ptpRecord; @@ -141,8 +142,8 @@ public class McMMOPlayer extends PlayerProfile implements OnlineMMOPlayer, Ident * If in the future someone wants to remove this, don't forget to also remove what is in the PrimarySkillType enum. - bm01 */ try { - for (PrimarySkillType primarySkillType : PrimarySkillType.values()) { - skillManagers.put(primarySkillType, primarySkillType.getManagerClass().getConstructor(McMMOPlayer.class).newInstance(this)); + for (CoreRootSkill coreRootSkill : CoreSkills.getCoreRootSkills()) { + skillManagers.put(coreRootSkill, coreRootSkill.getSkillManagerClass().getConstructor(McMMOPlayer.class).newInstance(this)); } } catch (Exception e) { @@ -311,19 +312,19 @@ public class McMMOPlayer extends PlayerProfile implements OnlineMMOPlayer, Ident } /** - * Grab the {@link TridentManager} for this player + * Grab the {@link TridentsManager} for this player * @return this player's trident manager */ - public @NotNull TridentManager getTridentManager() { - return (TridentManager) skillManagers.get(PrimarySkillType.TRIDENTS); + public @NotNull TridentsManager getTridentManager() { + return (TridentsManager) skillManagers.get(PrimarySkillType.TRIDENTS); } /** - * Grab the {@link CrossbowManager} for this player + * Grab the {@link CrossbowsManager} for this player * @return this player's crossbow manager */ - public @NotNull CrossbowManager getCrossbowManager() { - return (CrossbowManager) skillManagers.get(PrimarySkillType.CROSSBOWS); + public @NotNull CrossbowsManager getCrossbowManager() { + return (CrossbowsManager) skillManagers.get(PrimarySkillType.CROSSBOWS); } /** diff --git a/src/main/java/com/gmail/nossr50/datatypes/player/PersistentPlayerData.java b/src/main/java/com/gmail/nossr50/datatypes/player/PersistentPlayerData.java index 9219a02b0..6df3982a4 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/player/PersistentPlayerData.java +++ b/src/main/java/com/gmail/nossr50/datatypes/player/PersistentPlayerData.java @@ -79,7 +79,7 @@ public class PersistentPlayerData implements MMOPlayerData { //Core skills //TODO: Don't store values for disabled skills - for(RootSkill rootSkill : CoreSkills.getCoreSkills()) { + for(RootSkill rootSkill : CoreSkills.getCoreRootSkills()) { skillLevelValues.put(rootSkill, AdvancedConfig.getInstance().getStartingLevel()); skillExperienceValues.put(rootSkill, 0F); } diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/CoreRootSkill.java b/src/main/java/com/gmail/nossr50/datatypes/skills/CoreRootSkill.java index ddecf38ee..fca9d360c 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/CoreRootSkill.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/CoreRootSkill.java @@ -1,14 +1,58 @@ package com.gmail.nossr50.datatypes.skills; +import com.gmail.nossr50.config.Config; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.skills.SkillManager; +import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.text.StringUtils; -import com.neetgames.mcmmo.skill.RootSkillImpl; +import com.neetgames.mcmmo.player.MMOPlayer; +import com.neetgames.mcmmo.skill.AbstractRootSkill; +import org.bukkit.entity.Player; +import org.bukkit.entity.Tameable; import org.jetbrains.annotations.NotNull; import java.util.Locale; -class CoreRootSkill extends RootSkillImpl { - public CoreRootSkill(@NotNull String skillName) { +public class CoreRootSkill extends AbstractRootSkill { + + @NotNull private final Class skillManagerClass; + + public CoreRootSkill(@NotNull String skillName, @NotNull Class clazz) { super(mcMMO.p.getName(), StringUtils.getCapitalized(skillName), "mcmmo.skills." + skillName.toLowerCase(Locale.ENGLISH)); + this.skillManagerClass = clazz; + } + + public @NotNull Class getSkillManagerClass() { + return skillManagerClass; + } + + @Override + public boolean isPVPPermitted() { + return Config.getInstance().getPVPEnabled(this); + } + + @Override + public boolean isPVEPermitted() { + return Config.getInstance().getPVEEnabled(this); + } + + @Override + public boolean isAffectedByHardcoreModeStatLoss() { + return Config.getInstance().getHardcoreStatLossEnabled(this); + } + + @Override + public boolean getHardcoreVampirismEnabled() { + return Config.getInstance().getHardcoreVampirismEnabled(this); + } + + @Override + public boolean isRootSkillPermitted(@NotNull MMOPlayer mmoPlayer) { + return Permissions.skillEnabled(mmoPlayer, this); + } + + @Override + public boolean isOffensiveActionAllowed(@NotNull Object victim) { + return (victim instanceof Player || (victim instanceof Tameable && ((Tameable) victim).isTamed())) ? isPVPPermitted() : isPVEPermitted();; } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/CoreSkill.java b/src/main/java/com/gmail/nossr50/datatypes/skills/CoreSkill.java new file mode 100644 index 000000000..daf51eed9 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/CoreSkill.java @@ -0,0 +1,15 @@ +package com.gmail.nossr50.datatypes.skills; + +import com.neetgames.mcmmo.skill.RootSkill; +import com.neetgames.mcmmo.skill.SkillImpl; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class CoreSkill extends SkillImpl { + + //TODO: Change to passing SkillIdentity + public CoreSkill(@NotNull String pluginName, @NotNull String skillName, @Nullable String permission, @NotNull RootSkill parentSkill) { + super(pluginName, skillName, permission, parentSkill); + } + +} diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/CoreSkills.java b/src/main/java/com/gmail/nossr50/datatypes/skills/CoreSkills.java index b5871c477..00f8e310a 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/CoreSkills.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/CoreSkills.java @@ -1,8 +1,26 @@ package com.gmail.nossr50.datatypes.skills; +import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager; +import com.gmail.nossr50.skills.alchemy.AlchemyManager; +import com.gmail.nossr50.skills.archery.ArcheryManager; +import com.gmail.nossr50.skills.axes.AxesManager; +import com.gmail.nossr50.skills.crossbows.CrossbowsManager; +import com.gmail.nossr50.skills.excavation.ExcavationManager; +import com.gmail.nossr50.skills.fishing.FishingManager; +import com.gmail.nossr50.skills.herbalism.HerbalismManager; +import com.gmail.nossr50.skills.mining.MiningManager; +import com.gmail.nossr50.skills.repair.RepairManager; +import com.gmail.nossr50.skills.salvage.SalvageManager; +import com.gmail.nossr50.skills.smelting.SmeltingManager; +import com.gmail.nossr50.skills.swords.SwordsManager; +import com.gmail.nossr50.skills.taming.TamingManager; +import com.gmail.nossr50.skills.tridents.TridentsManager; +import com.gmail.nossr50.skills.unarmed.UnarmedManager; +import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager; import com.google.common.collect.ImmutableSet; import com.neetgames.mcmmo.skill.RootSkill; import com.neetgames.mcmmo.skill.SkillIdentity; +import com.neetgames.mcmmo.skill.SuperSkill; import org.jetbrains.annotations.NotNull; import java.util.HashMap; @@ -13,18 +31,26 @@ import java.util.stream.Collectors; public class CoreSkills { - private static final @NotNull ImmutableSet CORE_ROOT_SKILLS; - private static final @NotNull ImmutableSet CORE_CHILD_SKILLS; - private static final @NotNull ImmutableSet CORE_NON_CHILD_SKILLS; + private static final @NotNull ImmutableSet CORE_ROOT_SKILLS; + private static final @NotNull ImmutableSet CORE_CHILD_SKILLS; //Could make this a marker interface + private static final @NotNull ImmutableSet CORE_NON_CHILD_SKILLS; + private static final @NotNull ImmutableSet CORE_SUB_SKILLS; + private static final @NotNull ImmutableSet CORE_SUPER_SKILLS; + //TODO: Use annotations instead public static final @NotNull CoreRootSkill ACROBATICS, ALCHEMY, ARCHERY, AXES, EXCAVATION, FISHING, HERBALISM, MINING, REPAIR, SALVAGE, SMELTING, SWORDS, TAMING, UNARMED, WOODCUTTING, TRIDENTS, CROSSBOWS; + //TODO: Needed? public static final @NotNull SkillIdentity ACROBATICS_ID, ALCHEMY_ID, ARCHERY_ID, AXES_ID, EXCAVATION_ID, FISHING_ID, HERBALISM_ID, MINING_ID, REPAIR_ID, SALVAGE_ID, SMELTING_ID, SWORDS_ID, TAMING_ID, UNARMED_ID, WOODCUTTING_ID, TRIDENTS_ID, CROSSBOWS_ID; + public static final @NotNull SuperSkill SKULL_SPLITTER, GIGA_DRILL_BREAKER, GREEN_TERRA, SUPER_BREAKER, + BLAST_MINING, SERRATED_STRIKES, CALL_OF_THE_WILD, BERSERK, TREE_FELLER, TRIDENTS_SUPER, SUPER_SHOT_GUN; + + public static final CoreSkill ROLL; private static @NotNull final HackySkillMappings hackySkillMappings = new HackySkillMappings(); @@ -32,56 +58,58 @@ public class CoreSkills { static { HashSet rootSkillSet = new HashSet<>(); HashSet childSkillSet = new HashSet<>(); + HashSet subSkillSet = new HashSet<>(); + HashSet superSkillSet = new HashSet<>(); - ACROBATICS = new CoreRootSkill("acrobatics"); + ACROBATICS = new CoreRootSkill("acrobatics", AcrobaticsManager.class); ACROBATICS_ID = ACROBATICS.getSkillIdentity(); - ALCHEMY = new CoreRootSkill("alchemy"); + ALCHEMY = new CoreRootSkill("alchemy", AlchemyManager.class); ALCHEMY_ID = ALCHEMY.getSkillIdentity(); - ARCHERY = new CoreRootSkill("archery"); + ARCHERY = new CoreRootSkill("archery", ArcheryManager.class); ARCHERY_ID = ARCHERY.getSkillIdentity(); - AXES = new CoreRootSkill("axes"); + AXES = new CoreRootSkill("axes", AxesManager.class); AXES_ID = AXES.getSkillIdentity(); - EXCAVATION = new CoreRootSkill("excavation"); + EXCAVATION = new CoreRootSkill("excavation", ExcavationManager.class); EXCAVATION_ID = EXCAVATION.getSkillIdentity(); - FISHING = new CoreRootSkill("fishing"); + FISHING = new CoreRootSkill("fishing", FishingManager.class); FISHING_ID = FISHING.getSkillIdentity(); - HERBALISM = new CoreRootSkill("herbalism"); + HERBALISM = new CoreRootSkill("herbalism", HerbalismManager.class); HERBALISM_ID = HERBALISM.getSkillIdentity(); - MINING = new CoreRootSkill("mining"); + MINING = new CoreRootSkill("mining", MiningManager.class); MINING_ID = MINING.getSkillIdentity(); - REPAIR = new CoreRootSkill("repair"); + REPAIR = new CoreRootSkill("repair", RepairManager.class); REPAIR_ID = REPAIR.getSkillIdentity(); - SALVAGE = new CoreRootSkill("salvage"); + SALVAGE = new CoreRootSkill("salvage", SalvageManager.class); SALVAGE_ID = SALVAGE.getSkillIdentity(); - SMELTING = new CoreRootSkill("smelting"); + SMELTING = new CoreRootSkill("smelting", SmeltingManager.class); SMELTING_ID = SMELTING.getSkillIdentity(); - SWORDS = new CoreRootSkill("swords"); + SWORDS = new CoreRootSkill("swords", SwordsManager.class); SWORDS_ID = SWORDS.getSkillIdentity(); - TAMING = new CoreRootSkill("taming"); + TAMING = new CoreRootSkill("taming", TamingManager.class); TAMING_ID = TAMING.getSkillIdentity(); - UNARMED = new CoreRootSkill("unarmed"); + UNARMED = new CoreRootSkill("unarmed", UnarmedManager.class); UNARMED_ID = UNARMED.getSkillIdentity(); - WOODCUTTING = new CoreRootSkill("woodcutting"); + WOODCUTTING = new CoreRootSkill("woodcutting", WoodcuttingManager.class); WOODCUTTING_ID = WOODCUTTING.getSkillIdentity(); - TRIDENTS = new CoreRootSkill("tridents"); + TRIDENTS = new CoreRootSkill("tridents", TridentsManager.class); TRIDENTS_ID = TRIDENTS.getSkillIdentity(); - CROSSBOWS = new CoreRootSkill("crossbows"); + CROSSBOWS = new CoreRootSkill("crossbows", CrossbowsManager.class); CROSSBOWS_ID = CROSSBOWS.getSkillIdentity(); //Child skills (soon to be removed) @@ -109,6 +137,22 @@ public class CoreSkills { CORE_ROOT_SKILLS = ImmutableSet.copyOf(rootSkillSet); CORE_CHILD_SKILLS = ImmutableSet.copyOf(childSkillSet); CORE_NON_CHILD_SKILLS = ImmutableSet.copyOf(generateNonChildSkillSet()); + CORE_SUB_SKILLS = ImmutableSet.copyOf(subSkillSet); + CORE_SUPER_SKILLS = ImmutableSet.copyOf(superSkillSet); + + /* + * Define managers + */ + } + + /** + * Returns a set of built in {@link RootSkill}s for mcMMO + * No guarantees for whether or not the skills are registered or active or inactive + * + * @return a set of all root skills built into mcMMO + */ + public static @NotNull Set getCoreRootSkills() { + return CORE_ROOT_SKILLS; } /** @@ -117,8 +161,8 @@ public class CoreSkills { * * @return a set of all root skills built into mcMMO */ - public static @NotNull Set getCoreSkills() { - return CORE_ROOT_SKILLS; + public static @NotNull Set getCoreSkills() { + return CORE; } /** @@ -129,7 +173,7 @@ public class CoreSkills { * @deprecated child skills will be removed in an upcoming update */ @Deprecated - public static @NotNull Set getChildSkills() { + public static @NotNull Set getChildSkills() { return CORE_CHILD_SKILLS; } @@ -161,17 +205,17 @@ public class CoreSkills { } @Deprecated - private static @NotNull Set generateNonChildSkillSet() { - return getCoreSkills().stream().filter((x) -> !isChildSkill(x)).collect(Collectors.toSet()); + private static @NotNull Set generateNonChildSkillSet() { + return getCoreRootSkills().stream().filter((x) -> !isChildSkill(x)).collect(Collectors.toSet()); } - public static @NotNull Set getNonChildSkills() { + public static @NotNull Set getNonChildSkills() { return CORE_NON_CHILD_SKILLS; } protected static class HackySkillMappings { - @NotNull Map primaryToRootMap = new HashMap<>(); - @NotNull Map rootToPrimaryMap = new HashMap<>(); + @NotNull Map primaryToRootMap = new HashMap<>(); + @NotNull Map rootToPrimaryMap = new HashMap<>(); boolean init = false; protected void initMappings() { diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java index cb6f06141..f6d073685 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/PrimarySkillType.java @@ -9,7 +9,7 @@ import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager; import com.gmail.nossr50.skills.alchemy.AlchemyManager; import com.gmail.nossr50.skills.archery.ArcheryManager; import com.gmail.nossr50.skills.axes.AxesManager; -import com.gmail.nossr50.skills.crossbows.CrossbowManager; +import com.gmail.nossr50.skills.crossbows.CrossbowsManager; import com.gmail.nossr50.skills.excavation.ExcavationManager; import com.gmail.nossr50.skills.fishing.FishingManager; import com.gmail.nossr50.skills.herbalism.HerbalismManager; @@ -19,7 +19,7 @@ import com.gmail.nossr50.skills.salvage.SalvageManager; import com.gmail.nossr50.skills.smelting.SmeltingManager; import com.gmail.nossr50.skills.swords.SwordsManager; import com.gmail.nossr50.skills.taming.TamingManager; -import com.gmail.nossr50.skills.tridents.TridentManager; +import com.gmail.nossr50.skills.tridents.TridentsManager; import com.gmail.nossr50.skills.unarmed.UnarmedManager; import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager; import com.gmail.nossr50.util.Permissions; @@ -67,8 +67,8 @@ public enum PrimarySkillType { ImmutableList.of(SubSkillType.UNARMED_BERSERK, SubSkillType.UNARMED_UNARMED_LIMIT_BREAK, SubSkillType.UNARMED_BLOCK_CRACKER, SubSkillType.UNARMED_ARROW_DEFLECT, SubSkillType.UNARMED_DISARM, SubSkillType.UNARMED_STEEL_ARM_STYLE, SubSkillType.UNARMED_IRON_GRIP)), WOODCUTTING(WoodcuttingManager.class, Color.OLIVE, SuperAbilityType.TREE_FELLER, ImmutableList.of(SubSkillType.WOODCUTTING_LEAF_BLOWER, SubSkillType.WOODCUTTING_TREE_FELLER, SubSkillType.WOODCUTTING_HARVEST_LUMBER, SubSkillType.WOODCUTTING_KNOCK_ON_WOOD)), - TRIDENTS(TridentManager.class, Color.TEAL, ImmutableList.of(SubSkillType.TRIDENTS_MULTI_TASKING, SubSkillType.TRIDENTS_TRIDENTS_LIMIT_BREAK)), - CROSSBOWS(CrossbowManager.class, Color.ORANGE, ImmutableList.of(SubSkillType.CROSSBOWS_SUPER_SHOTGUN, SubSkillType.CROSSBOWS_CROSSBOWS_LIMIT_BREAK)); + TRIDENTS(TridentsManager.class, Color.TEAL, ImmutableList.of(SubSkillType.TRIDENTS_MULTI_TASKING, SubSkillType.TRIDENTS_TRIDENTS_LIMIT_BREAK)), + CROSSBOWS(CrossbowsManager.class, Color.ORANGE, ImmutableList.of(SubSkillType.CROSSBOWS_SUPER_SHOTGUN, SubSkillType.CROSSBOWS_CROSSBOWS_LIMIT_BREAK)); private final Class managerClass; private final Color skillColor; diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/SkillRegisterImpl.java b/src/main/java/com/gmail/nossr50/datatypes/skills/SkillRegisterImpl.java index 261a63346..8005fc5d4 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/SkillRegisterImpl.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/SkillRegisterImpl.java @@ -25,7 +25,8 @@ public class SkillRegisterImpl implements SkillRegister { private final @NotNull Set superSkills; private final @NotNull Set rankedSkills; private final @NotNull Set rootSkills; //Can include not-official root skills - private final @NotNull Set coreRootSkills; //Only includes official root skills + private final @NotNull Set coreRootSkills; //Only includes official root skills + private final @NotNull Set coreSkills; //Only includes official core skills public SkillRegisterImpl() { skillNameMap = new HashMap<>(); @@ -34,11 +35,21 @@ public class SkillRegisterImpl implements SkillRegister { superSkills = new HashSet<>(); rankedSkills = new HashSet<>(); coreRootSkills = new HashSet<>(); + coreSkills = new HashSet<>(); //TODO: allow config to turn off certain core skills registerCoreSkills(); } + private void registerCoreSkills() { + for(CoreRootSkill coreRootSkill : CoreSkills.getCoreRootSkills()) { + mcMMO.p.getLogger().info("Registering core skill: " + coreRootSkill.getRawSkillName()); + registerSkill(coreRootSkill); + } + + for(CoreSkill coreSkill : CoreSkills.) + } + @Override public @Nullable Skill getSkill(@NotNull String fullyQualifiedName) { return skillNameMap.get(fullyQualifiedName); @@ -96,12 +107,24 @@ public class SkillRegisterImpl implements SkillRegister { } private void removeCollectionCache(@NotNull Skill skill) { - //Add to collections for cached lookups + //Remove from register cache(s) + if(skill instanceof CoreRootSkill) { + coreRootSkills.remove(skill); + } + + if(skill instanceof CoreSkill) { + coreSkills.remove(skill); + } + if(skill instanceof RootSkill) { rootSkills.remove(skill); - } else if (skill instanceof SuperSkill) { + } + + if (skill instanceof SuperSkill) { superSkills.remove(skill); - } else if(skill instanceof RankedSkill) { + } + + if(skill instanceof RankedSkill) { rankedSkills.remove( skill); } } @@ -117,15 +140,23 @@ public class SkillRegisterImpl implements SkillRegister { private void addCollectionCache(@NotNull Skill skill) { //Add to various collections for cached lookups + if(skill instanceof CoreSkill) { + coreSkills.add((CoreSkill) skill); + } + if(skill instanceof CoreRootSkill) { coreRootSkills.add((CoreRootSkill) skill); } if(skill instanceof RootSkill) { rootSkills.add((RootSkill) skill); - } else if (skill instanceof SuperSkill) { + } + + if (skill instanceof SuperSkill) { superSkills.add((SuperSkill) skill); - } else if(skill instanceof RankedSkill) { + } + + if(skill instanceof RankedSkill) { rankedSkills.add((RankedSkill) skill); } } @@ -144,15 +175,8 @@ public class SkillRegisterImpl implements SkillRegister { postRemovalSkillRegisterProcessing(skill); } - private void registerCoreSkills() { - for(RootSkill rootSkill : CoreSkills.getCoreSkills()) { - mcMMO.p.getLogger().info("Registering core skill: "+rootSkill.getSkillName()); - registerSkill(rootSkill); - } - } - @Override - public @NotNull Set getCoreRootSkills() { + public @NotNull Set getCoreRootSkills() { return coreRootSkills; } @@ -172,8 +196,8 @@ public class SkillRegisterImpl implements SkillRegister { public @Nullable RootSkill matchRootSkill(@NotNull String skillName) { for (RootSkill rootSkill : rootSkills) { if (rootSkill.getSkillIdentity().getFullyQualifiedName().equalsIgnoreCase(skillName) - || skillName.equalsIgnoreCase(LocaleLoader.getString(StringUtils.getCapitalized(rootSkill.getSkillName()) + ".SkillName")) - || rootSkill.getSkillName().equalsIgnoreCase(skillName)) { + || skillName.equalsIgnoreCase(LocaleLoader.getString(StringUtils.getCapitalized(rootSkill.getRawSkillName()) + ".SkillName")) + || rootSkill.getRawSkillName().equalsIgnoreCase(skillName)) { return rootSkill; } } diff --git a/src/main/java/com/gmail/nossr50/skills/crossbows/CrossbowManager.java b/src/main/java/com/gmail/nossr50/skills/crossbows/CrossbowsManager.java similarity index 97% rename from src/main/java/com/gmail/nossr50/skills/crossbows/CrossbowManager.java rename to src/main/java/com/gmail/nossr50/skills/crossbows/CrossbowsManager.java index 88cd59906..79bcec63d 100644 --- a/src/main/java/com/gmail/nossr50/skills/crossbows/CrossbowManager.java +++ b/src/main/java/com/gmail/nossr50/skills/crossbows/CrossbowsManager.java @@ -18,8 +18,8 @@ import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; -public class CrossbowManager extends SkillManager { - public CrossbowManager(OnlineMMOPlayer mmoPlayer) { +public class CrossbowsManager extends SkillManager { + public CrossbowsManager(OnlineMMOPlayer mmoPlayer) { super(mmoPlayer, PrimarySkillType.CROSSBOWS); } private static final int SPREAD_VALUE = 12; diff --git a/src/main/java/com/gmail/nossr50/skills/tridents/TridentManager.java b/src/main/java/com/gmail/nossr50/skills/tridents/TridentsManager.java similarity index 71% rename from src/main/java/com/gmail/nossr50/skills/tridents/TridentManager.java rename to src/main/java/com/gmail/nossr50/skills/tridents/TridentsManager.java index ab7ad3fa0..6c3affc97 100644 --- a/src/main/java/com/gmail/nossr50/skills/tridents/TridentManager.java +++ b/src/main/java/com/gmail/nossr50/skills/tridents/TridentsManager.java @@ -4,8 +4,8 @@ import com.neetgames.mcmmo.player.OnlineMMOPlayer; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.skills.SkillManager; -public class TridentManager extends SkillManager { - public TridentManager(OnlineMMOPlayer mmoPlayer) { +public class TridentsManager extends SkillManager { + public TridentsManager(OnlineMMOPlayer mmoPlayer) { super(mmoPlayer, PrimarySkillType.TRIDENTS); } diff --git a/src/main/java/com/gmail/nossr50/util/experience/MMOExperienceBarManager.java b/src/main/java/com/gmail/nossr50/util/experience/MMOExperienceBarManager.java index 79e696235..60f79c644 100644 --- a/src/main/java/com/gmail/nossr50/util/experience/MMOExperienceBarManager.java +++ b/src/main/java/com/gmail/nossr50/util/experience/MMOExperienceBarManager.java @@ -182,7 +182,7 @@ public class MMOExperienceBarManager { } public static void setBarStateDefaults(@NotNull Map barStateHashMap) { - for(RootSkill rootSkill : CoreSkills.getCoreSkills()) { + for(RootSkill rootSkill : CoreSkills.getCoreRootSkills()) { if(CoreSkills.isChildSkill(rootSkill)) { barStateHashMap.put(rootSkill, SkillBossBarState.DISABLED); diff --git a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java index 247ef2c93..3ecce20b8 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -14,10 +14,10 @@ import com.gmail.nossr50.runnables.skills.AwardCombatXpTask; import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager; import com.gmail.nossr50.skills.archery.ArcheryManager; import com.gmail.nossr50.skills.axes.AxesManager; -import com.gmail.nossr50.skills.crossbows.CrossbowManager; +import com.gmail.nossr50.skills.crossbows.CrossbowsManager; import com.gmail.nossr50.skills.swords.SwordsManager; import com.gmail.nossr50.skills.taming.TamingManager; -import com.gmail.nossr50.skills.tridents.TridentManager; +import com.gmail.nossr50.skills.tridents.TridentsManager; import com.gmail.nossr50.skills.unarmed.UnarmedManager; import com.gmail.nossr50.util.*; import com.gmail.nossr50.util.compat.layers.persistentdata.AbstractPersistentDataLayer; @@ -131,7 +131,7 @@ public final class CombatUtils { return; } - TridentManager tridentManager = ((McMMOPlayer) (mmoPlayer)).getTridentManager(); + TridentsManager tridentsManager = ((McMMOPlayer) (mmoPlayer)).getTridentManager(); // double initialDamage = entityDamageByEntityEvent.getDamage(); // double finalDamage = initialDamage; @@ -340,7 +340,7 @@ public final class CombatUtils { return; } - CrossbowManager crossbowManager = ((McMMOPlayer) (mmoPlayer)).getCrossbowManager(); + CrossbowsManager crossbowsManager = ((McMMOPlayer) (mmoPlayer)).getCrossbowManager(); double finalDamage = event.getDamage(); @@ -361,7 +361,7 @@ public final class CombatUtils { finalDamage+=getLimitBreakDamage(mmoPlayer, target, SubSkillType.CROSSBOWS_CROSSBOWS_LIMIT_BREAK); } - double distanceMultiplier = crossbowManager.distanceXpBonusMultiplier(target, arrow); + double distanceMultiplier = crossbowsManager.distanceXpBonusMultiplier(target, arrow); applyScaledModifiers(initialDamage, finalDamage, event);