mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-09-16 17:57:53 +02:00
Add + Wire up Combat XP Multipliers
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.gmail.nossr50.util.experience;
|
||||
|
||||
import com.gmail.nossr50.api.exceptions.UndefinedSkillBehaviour;
|
||||
import com.gmail.nossr50.datatypes.experience.SpecialXPKey;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.Material;
|
||||
@@ -19,12 +20,13 @@ public class ExperienceMapManager {
|
||||
private HashMap<String, Integer> excavationFullyQualifiedBlockXpMap;
|
||||
private HashMap<EntityType, Float> tamingExperienceMap;
|
||||
private HashMap<EntityType, Float> combatXPMultiplierMap;
|
||||
private HashMap<EntityType, Float> specialCombatXPMultiplierMap; //Applies to "groups" of things for convenience
|
||||
private HashMap<SpecialXPKey, Float> specialCombatXPMultiplierMap; //Applies to "groups" of things for convenience
|
||||
|
||||
private double globalXpMult;
|
||||
|
||||
public ExperienceMapManager() {
|
||||
initExperienceMaps();
|
||||
registerDefaultValues();
|
||||
|
||||
//Register with unloader
|
||||
}
|
||||
@@ -39,6 +41,12 @@ public class ExperienceMapManager {
|
||||
tamingExperienceMap = new HashMap<>();
|
||||
}
|
||||
|
||||
private void registerDefaultValues()
|
||||
{
|
||||
fillCombatXPMultiplierMap(mcMMO.getConfigManager().getConfigExperience().getCombatExperienceMap());
|
||||
buildBlockXPMaps();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fills the combat XP multiplier map with values from a platform generic map
|
||||
* Platform safe map, is just a map which uses strings to define target entities/etc
|
||||
@@ -46,6 +54,7 @@ public class ExperienceMapManager {
|
||||
* @param platformSafeMap the platform safe map
|
||||
*/
|
||||
public void fillCombatXPMultiplierMap(HashMap<String, Float> platformSafeMap) {
|
||||
mcMMO.p.getLogger().info("Registering combat XP values...");
|
||||
for(String entityString : platformSafeMap.keySet())
|
||||
{
|
||||
//Iterate over all EntityType(s)
|
||||
@@ -69,6 +78,12 @@ public class ExperienceMapManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void copySpecialCombatXPMultiplierMap(HashMap<SpecialXPKey, Float> map)
|
||||
{
|
||||
mcMMO.p.getLogger().info("Registering special combat XP values...");
|
||||
specialCombatXPMultiplierMap = map;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds fully qualified name to xp value maps of blocks for XP lookups
|
||||
* This method servers two purposes
|
||||
@@ -312,4 +327,34 @@ public class ExperienceMapManager {
|
||||
public int getExcavationXp(Material material) {
|
||||
return excavationFullyQualifiedBlockXpMap.get(material.getKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the XP multiplier value for a special XP group
|
||||
* @param specialXPKey target special XP group
|
||||
* @return XP multiplier for target special XP group
|
||||
*/
|
||||
public float getSpecialCombatXP(SpecialXPKey specialXPKey)
|
||||
{
|
||||
return specialCombatXPMultiplierMap.get(specialXPKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the combat XP multiplier for this entity type
|
||||
* @param entityType target entity type
|
||||
* @return the combat XP multiplier for this entity
|
||||
*/
|
||||
public float getCombatXPMultiplier(EntityType entityType)
|
||||
{
|
||||
return combatXPMultiplierMap.get(entityType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true/false if a EntityType has a defined XP multiplier (from the config typically)
|
||||
* @param entityType target entity type
|
||||
* @return true if entity type has XP
|
||||
*/
|
||||
public boolean hasCombatXP(EntityType entityType)
|
||||
{
|
||||
return combatXPMultiplierMap.get(entityType) != null;
|
||||
}
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@ package com.gmail.nossr50.util.skills;
|
||||
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.core.MetadataConstants;
|
||||
import com.gmail.nossr50.datatypes.experience.SpecialXPKey;
|
||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
@@ -532,7 +533,7 @@ public final class CombatUtils {
|
||||
* @param primarySkillType The skill being used
|
||||
*/
|
||||
private static void startGainXp(McMMOPlayer mcMMOPlayer, LivingEntity target, PrimarySkillType primarySkillType, double multiplier) {
|
||||
double baseXP = 0;
|
||||
float baseXPMultiplier = 0;
|
||||
XPGainReason xpGainReason;
|
||||
|
||||
if (target instanceof Player) {
|
||||
@@ -544,7 +545,7 @@ public final class CombatUtils {
|
||||
Player defender = (Player) target;
|
||||
|
||||
if (defender.isOnline() && SkillUtils.cooldownExpired(mcMMOPlayer.getRespawnATS(), Misc.PLAYER_RESPAWN_COOLDOWN_SECONDS)) {
|
||||
baseXP = 20 * mcMMO.getConfigManager().getConfigExperience().getPVPXPMult();
|
||||
baseXPMultiplier = 20 * mcMMO.getConfigManager().getConfigExperience().getPVPXPMult();
|
||||
}
|
||||
} else {
|
||||
/*if (mcMMO.getModManager().isCustomEntity(target)) {
|
||||
@@ -552,45 +553,44 @@ public final class CombatUtils {
|
||||
}*/
|
||||
//else if (target instanceof Animals) {
|
||||
if (target instanceof Animals) {
|
||||
EntityType type = target.getType();
|
||||
baseXP = mcMMO.getConfigManager().getConfigExperience().getAnimalsXPMult();
|
||||
baseXPMultiplier = mcMMO.getDynamicSettingsManager().getExperienceMapManager().getSpecialCombatXP(SpecialXPKey.ANIMALS);
|
||||
} else if (target instanceof Monster) {
|
||||
EntityType type = target.getType();
|
||||
baseXP = ExperienceConfig.getInstance().getCombatXP(type);
|
||||
baseXPMultiplier = mcMMO.getDynamicSettingsManager().getExperienceMapManager().getCombatXPMultiplier(type);
|
||||
} else {
|
||||
EntityType type = target.getType();
|
||||
|
||||
if (ExperienceConfig.getInstance().hasCombatXP(type)) {
|
||||
if (mcMMO.getDynamicSettingsManager().getExperienceMapManager().hasCombatXP(type)) {
|
||||
//Exploit stuff
|
||||
if (type == EntityType.IRON_GOLEM) {
|
||||
if (!((IronGolem) target).isPlayerCreated()) {
|
||||
baseXP = ExperienceConfig.getInstance().getCombatXP(type);
|
||||
baseXPMultiplier = mcMMO.getDynamicSettingsManager().getExperienceMapManager().getCombatXPMultiplier(type);
|
||||
}
|
||||
} else {
|
||||
baseXP = ExperienceConfig.getInstance().getCombatXP(type);
|
||||
baseXPMultiplier = mcMMO.getDynamicSettingsManager().getExperienceMapManager().getCombatXPMultiplier(type);
|
||||
}
|
||||
} else {
|
||||
baseXP = 1.0;
|
||||
//mcMMO.getModManager().addCustomEntity(target);
|
||||
baseXPMultiplier = 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if (target.hasMetadata(MetadataConstants.UNNATURAL_MOB_METAKEY)) {
|
||||
baseXP *= mcMMO.getConfigManager().getConfigExperience().getSpawnedMobXPMult();
|
||||
baseXPMultiplier *= mcMMO.getConfigManager().getConfigExperience().getSpawnedMobXPMult();
|
||||
}
|
||||
|
||||
if (target.hasMetadata(MetadataConstants.BRED_ANIMAL_TRACKING_METAKEY)) {
|
||||
baseXP *= mcMMO.getConfigManager().getConfigExperience().getPlayerBredMobsXPMult();
|
||||
baseXPMultiplier *= mcMMO.getConfigManager().getConfigExperience().getPlayerBredMobsXPMult();
|
||||
}
|
||||
|
||||
xpGainReason = XPGainReason.PVE;
|
||||
|
||||
baseXP *= 10;
|
||||
baseXPMultiplier *= 10;
|
||||
}
|
||||
|
||||
baseXP *= multiplier;
|
||||
baseXPMultiplier *= multiplier;
|
||||
|
||||
if (baseXP != 0) {
|
||||
new AwardCombatXpTask(mcMMOPlayer, primarySkillType, baseXP, target, xpGainReason).runTaskLater(mcMMO.p, 0);
|
||||
if (baseXPMultiplier != 0) {
|
||||
new AwardCombatXpTask(mcMMOPlayer, primarySkillType, baseXPMultiplier, target, xpGainReason).runTaskLater(mcMMO.p, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user