Using doubles in most places again to avoid precision loss

This commit is contained in:
nossr50
2019-06-04 21:12:10 -07:00
parent 32fa6cee96
commit fc6c6ed2c4
59 changed files with 382 additions and 351 deletions

View File

@@ -203,7 +203,7 @@ public class EventUtils {
}
public static boolean handleLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
public static boolean handleLevelChangeEvent(Player player, PrimarySkillType skill, int levelsChanged, double xpRemoved, boolean isLevelUp, XPGainReason xpGainReason) {
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
mcMMO.p.getServer().getPluginManager().callEvent(event);
@@ -219,7 +219,7 @@ public class EventUtils {
return !isCancelled;
}
public static void handleLevelChangeEventEdit(Player player, PrimarySkillType skill, int levelsChanged, float xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
public static void handleLevelChangeEventEdit(Player player, PrimarySkillType skill, int levelsChanged, double xpRemoved, boolean isLevelUp, XPGainReason xpGainReason, int oldLevel) {
McMMOPlayerLevelChangeEvent event = isLevelUp ? new McMMOPlayerLevelUpEvent(player, skill, levelsChanged - oldLevel, xpGainReason) : new McMMOPlayerLevelDownEvent(player, skill, levelsChanged, xpGainReason);
mcMMO.p.getServer().getPluginManager().callEvent(event);
@@ -280,7 +280,7 @@ public class EventUtils {
mcMMOPlayer.getPartyTeleportRecord().actualizeLastUse();
}
public static boolean handlePartyXpGainEvent(Party party, float xpGained) {
public static boolean handlePartyXpGainEvent(Party party, double xpGained) {
McMMOPartyXpGainEvent event = new McMMOPartyXpGainEvent(party, xpGained);
mcMMO.p.getServer().getPluginManager().callEvent(event);
@@ -293,7 +293,7 @@ public class EventUtils {
return !isCancelled;
}
public static boolean handlePartyLevelChangeEvent(Party party, int levelsChanged, float xpRemoved) {
public static boolean handlePartyLevelChangeEvent(Party party, int levelsChanged, double xpRemoved) {
McMMOPartyLevelUpEvent event = new McMMOPartyLevelUpEvent(party, levelsChanged);
mcMMO.p.getServer().getPluginManager().callEvent(event);
@@ -308,7 +308,7 @@ public class EventUtils {
return !isCancelled;
}
public static boolean handleXpGainEvent(Player player, PrimarySkillType skill, float xpGained, XPGainReason xpGainReason) {
public static boolean handleXpGainEvent(Player player, PrimarySkillType skill, double xpGained, XPGainReason xpGainReason) {
McMMOPlayerXpGainEvent event = new McMMOPlayerXpGainEvent(player, skill, xpGained, xpGainReason);
mcMMO.p.getServer().getPluginManager().callEvent(event);
@@ -322,7 +322,7 @@ public class EventUtils {
return !isCancelled;
}
public static boolean handleStatsLossEvent(Player player, HashMap<String, Integer> levelChanged, HashMap<String, Float> experienceChanged) {
public static boolean handleStatsLossEvent(Player player, HashMap<String, Integer> levelChanged, HashMap<String, Double> experienceChanged) {
if (UserManager.getPlayer(player) == null)
return true;
@@ -356,7 +356,7 @@ public class EventUtils {
return !isCancelled;
}
public static boolean handleVampirismEvent(Player killer, Player victim, HashMap<String, Integer> levelChanged, HashMap<String, Float> experienceChanged) {
public static boolean handleVampirismEvent(Player killer, Player victim, HashMap<String, Integer> levelChanged, HashMap<String, Double> experienceChanged) {
McMMOPlayerVampirismEvent eventKiller = new McMMOPlayerVampirismEvent(killer, false, levelChanged, experienceChanged);
McMMOPlayerVampirismEvent eventVictim = new McMMOPlayerVampirismEvent(victim, true, levelChanged, experienceChanged);
mcMMO.p.getServer().getPluginManager().callEvent(eventKiller);
@@ -366,10 +366,10 @@ public class EventUtils {
if (!isCancelled) {
HashMap<String, Integer> levelChangedKiller = eventKiller.getLevelChanged();
HashMap<String, Float> experienceChangedKiller = eventKiller.getExperienceChanged();
HashMap<String, Double> experienceChangedKiller = eventKiller.getExperienceChanged();
HashMap<String, Integer> levelChangedVictim = eventVictim.getLevelChanged();
HashMap<String, Float> experienceChangedVictim = eventVictim.getExperienceChanged();
HashMap<String, Double> experienceChangedVictim = eventVictim.getExperienceChanged();
McMMOPlayer killerPlayer = UserManager.getPlayer(killer);

View File

@@ -25,12 +25,12 @@ public final class HardcoreManager {
int totalLevelsLost = 0;
HashMap<String, Integer> levelChanged = new HashMap<>();
HashMap<String, Float> experienceChanged = new HashMap<>();
HashMap<String, Double> experienceChanged = new HashMap<>();
for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) {
if (!primarySkillType.getHardcoreStatLossEnabled()) {
levelChanged.put(primarySkillType.toString(), 0);
experienceChanged.put(primarySkillType.toString(), 0F);
experienceChanged.put(primarySkillType.toString(), 0.0);
continue;
}
@@ -39,7 +39,7 @@ public final class HardcoreManager {
if (playerSkillLevel <= 0 || playerSkillLevel <= levelThreshold) {
levelChanged.put(primarySkillType.toString(), 0);
experienceChanged.put(primarySkillType.toString(), 0F);
experienceChanged.put(primarySkillType.toString(), 0.0);
continue;
}
@@ -47,7 +47,7 @@ public final class HardcoreManager {
int levelsLost = (int) statsLost;
int xpLost = (int) Math.floor(playerSkillXpLevel * (statsLost - levelsLost));
levelChanged.put(primarySkillType.toString(), levelsLost);
experienceChanged.put(primarySkillType.toString(), (float) xpLost);
experienceChanged.put(primarySkillType.toString(), (double) xpLost);
totalLevelsLost += levelsLost;
}
@@ -71,12 +71,12 @@ public final class HardcoreManager {
int totalLevelsStolen = 0;
HashMap<String, Integer> levelChanged = new HashMap<>();
HashMap<String, Float> experienceChanged = new HashMap<>();
HashMap<String, Double> experienceChanged = new HashMap<>();
for (PrimarySkillType primarySkillType : PrimarySkillType.NON_CHILD_SKILLS) {
if (!primarySkillType.getHardcoreVampirismEnabled()) {
levelChanged.put(primarySkillType.toString(), 0);
experienceChanged.put(primarySkillType.toString(), 0F);
experienceChanged.put(primarySkillType.toString(), 0.0);
continue;
}
@@ -85,7 +85,7 @@ public final class HardcoreManager {
if (victimSkillLevel <= 0 || victimSkillLevel < killerSkillLevel / 2 || victimSkillLevel <= levelThreshold) {
levelChanged.put(primarySkillType.toString(), 0);
experienceChanged.put(primarySkillType.toString(), 0F);
experienceChanged.put(primarySkillType.toString(), 0.0);
continue;
}
@@ -95,7 +95,7 @@ public final class HardcoreManager {
int levelsStolen = (int) statsStolen;
int xpStolen = (int) Math.floor(victimSkillXpLevel * (statsStolen - levelsStolen));
levelChanged.put(primarySkillType.toString(), levelsStolen);
experienceChanged.put(primarySkillType.toString(), (float) xpStolen);
experienceChanged.put(primarySkillType.toString(), (double) xpStolen);
totalLevelsStolen += levelsStolen;
}

View File

@@ -19,9 +19,9 @@ public class ExperienceManager {
private HashMap<String, Integer> woodcuttingFullyQualifiedBlockXpMap;
private HashMap<String, Integer> excavationFullyQualifiedBlockXpMap;
private HashMap<String, Integer> furnaceFullyQualifiedItemXpMap;
private HashMap<EntityType, Float> tamingExperienceMap;
private HashMap<EntityType, Float> combatXPMultiplierMap;
private HashMap<SpecialXPKey, Float> specialCombatXPMultiplierMap; //Applies to "groups" of things for convenience
private HashMap<EntityType, Double> tamingExperienceMap;
private HashMap<EntityType, Double> combatXPMultiplierMap;
private HashMap<SpecialXPKey, Double> specialCombatXPMultiplierMap; //Applies to "groups" of things for convenience
private double globalXpMult;
@@ -57,7 +57,7 @@ public class ExperienceManager {
*
* @param platformSafeMap the platform safe map
*/
public void fillCombatXPMultiplierMap(HashMap<String, Float> platformSafeMap) {
public void fillCombatXPMultiplierMap(HashMap<String, Double> platformSafeMap) {
mcMMO.p.getLogger().info("Registering combat XP values...");
for (String entityString : platformSafeMap.keySet()) {
//Iterate over all EntityType(s)
@@ -83,7 +83,7 @@ public class ExperienceManager {
*
* @param map target map
*/
public void registerSpecialCombatXPMultiplierMap(HashMap<SpecialXPKey, Float> map) {
public void registerSpecialCombatXPMultiplierMap(HashMap<SpecialXPKey, Double> map) {
mcMMO.p.getLogger().info("Registering special combat XP values...");
specialCombatXPMultiplierMap = map;
}
@@ -122,7 +122,7 @@ public class ExperienceManager {
if (entityType.toString().equalsIgnoreCase(s)) {
//Match!
matchFound = true;
tamingExperienceMap.put(entityType, (float) userTamingConfigMap.get(s));
tamingExperienceMap.put(entityType, (double) userTamingConfigMap.get(s));
}
}
if (!matchFound) {
@@ -244,7 +244,7 @@ public class ExperienceManager {
* @deprecated its faster to use direct calls to get XP, for example getMiningXP(Material material) instead of using this method
*/
@Deprecated
public float getBlockBreakXpValue(PrimarySkillType primarySkillType, Material material) throws UndefinedSkillBehaviour {
public double getBlockBreakXpValue(PrimarySkillType primarySkillType, Material material) throws UndefinedSkillBehaviour {
switch (primarySkillType) {
case MINING:
return getMiningXp(material);
@@ -265,7 +265,7 @@ public class ExperienceManager {
* @param entityType target entity
* @return value of XP for this entity
*/
public float getTamingXp(EntityType entityType) {
public double getTamingXp(EntityType entityType) {
return tamingExperienceMap.get(entityType);
}
@@ -376,7 +376,7 @@ public class ExperienceManager {
* @param specialXPKey target special XP group
* @return XP multiplier for target special XP group
*/
public float getSpecialCombatXP(SpecialXPKey specialXPKey) {
public double getSpecialCombatXP(SpecialXPKey specialXPKey) {
return specialCombatXPMultiplierMap.get(specialXPKey);
}
@@ -386,7 +386,7 @@ public class ExperienceManager {
* @param entityType target entity type
* @return the combat XP multiplier for this entity
*/
public float getCombatXPMultiplier(EntityType entityType) {
public double getCombatXPMultiplier(EntityType entityType) {
return combatXPMultiplierMap.get(entityType);
}

View File

@@ -92,11 +92,11 @@ public class PlayerLevelUtils {
* @param skill target skill
* @return the highest XP boost that this player qualifies for through perks or otherwise for target skill
*/
public float determineXpPerkValue(Player player, PrimarySkillType skill) {
public Double determineXpPerkValue(Player player, PrimarySkillType skill) {
HashSet<CustomXPPerk> enabledCustomXPPerks = findCustomXPPerks(player);
//A player can have multiple overlapping perks at a time, we need to compile a list and then sort it for the highest value
HashSet<Float> xpPerkValues = new HashSet<>();
HashSet<Double> xpPerkValues = new HashSet<>();
if (enabledCustomXPPerks.size() >= 1) {
//Player has custom XP perks
@@ -110,17 +110,17 @@ public class PlayerLevelUtils {
//Disgusting legacy support start
if (Permissions.quadrupleXp(player, skill)) {
xpPerkValues.add(4f);
xpPerkValues.add(4.0);
} else if (Permissions.tripleXp(player, skill)) {
xpPerkValues.add(3f);
xpPerkValues.add(3.0);
} else if (Permissions.doubleAndOneHalfXp(player, skill)) {
xpPerkValues.add(2.5f);
xpPerkValues.add(2.5);
} else if (Permissions.doubleXp(player, skill)) {
xpPerkValues.add(2.0f);
xpPerkValues.add(2.0);
} else if (Permissions.oneAndOneHalfXp(player, skill)) {
xpPerkValues.add(1.5f);
xpPerkValues.add(1.5);
} else if (Permissions.oneAndOneTenthXp(player, skill)) {
xpPerkValues.add(1.1f);
xpPerkValues.add(1.1);
}
//Disgusting legacy support end
@@ -128,7 +128,7 @@ public class PlayerLevelUtils {
if (xpPerkValues.size() >= 1)
return Collections.max(xpPerkValues);
else
return 1.0F;
return 1.0;
}

View File

@@ -553,7 +553,7 @@ public final class CombatUtils {
* @param primarySkillType The skill being used
*/
private static void startGainXp(McMMOPlayer mcMMOPlayer, LivingEntity target, PrimarySkillType primarySkillType, double multiplier) {
float baseXPMultiplier = 0;
double baseXPMultiplier = 0;
XPGainReason xpGainReason;
if (target instanceof Player) {