瀏覽代碼

Setup Fishing XP Methods

nossr50 6 年之前
父節點
當前提交
2170c6de24

+ 0 - 10
src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java

@@ -160,11 +160,6 @@ public class ExperienceConfig extends ConfigValidated {
         /*
          * XP SETTINGS
          */
-        /* Archery */
-        if (getArcheryDistanceMultiplier() < 0) {
-            reason.add(EXPERIENCE + "." + ARCHERY + "." + DISTANCE + MULTIPLIER + " should be at least 0!");
-        }
-
         /* Combat XP Multipliers */
         if (getAnimalsXP() < 0) {
             reason.add(EXPERIENCE + "." + COMBAT + "." + MULTIPLIER + "." + ANIMALS + " should be at least 0!");
@@ -379,11 +374,6 @@ public class ExperienceConfig extends ConfigValidated {
         return BarStyle.SOLID;
     }
 
-    /* Archery */
-    public double getArcheryDistanceMultiplier() {
-        return getDoubleValue(EXPERIENCE, ARCHERY, DISTANCE + MULTIPLIER);
-    }
-
     public int getFishingShakeXP() {
         return getIntValue(EXPERIENCE, FISHING, SHAKE);
     }

+ 12 - 0
src/main/java/com/gmail/nossr50/config/hocon/experience/ConfigExperience.java

@@ -143,4 +143,16 @@ public class ConfigExperience {
     public boolean isPvpXPEnabled() {
         return experienceCombat.isPvpXPEnabled();
     }
+
+    public double getDistanceMultiplier() {
+        return experienceArchery.getDistanceMultiplier();
+    }
+
+    public HashMap<String, Integer> getFishingXPMap() {
+        return experienceFishing.getFishingXPMap();
+    }
+
+    public int getShakeXP() {
+        return experienceFishing.getShakeXP();
+    }
 }

+ 12 - 0
src/main/java/com/gmail/nossr50/config/hocon/experience/ConfigExperienceArchery.java

@@ -1,10 +1,22 @@
 package com.gmail.nossr50.config.hocon.experience;
 
+import ninja.leaping.configurate.objectmapping.Setting;
 import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
 
 @ConfigSerializable
 public class ConfigExperienceArchery {
 
+    public static final double DISTANCE_MULTIPLIER_DEFAULT = 0.025D;
 
+    @Setting(value = "Distance-Multiplier", comment = "The distance multiplier is multiplied against the distance an " +
+            "arrow travels before hitting its target to determine final XP values awarded." +
+            "\nThe maximum distance bonus is 50, so expect this multiplier to peak at being multiplied against 50." +
+            "\nDistance is in blocks traveled." +
+            "\nThis value is added on to normal XP gains from damage for Archery." +
+            "\nDefault value: "+DISTANCE_MULTIPLIER_DEFAULT)
+    private double distanceMultiplier = DISTANCE_MULTIPLIER_DEFAULT;
 
+    public double getDistanceMultiplier() {
+        return distanceMultiplier;
+    }
 }

+ 28 - 0
src/main/java/com/gmail/nossr50/config/hocon/experience/ConfigExperienceFishing.java

@@ -1,8 +1,36 @@
 package com.gmail.nossr50.config.hocon.experience;
 
+import ninja.leaping.configurate.objectmapping.Setting;
 import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
+import org.bukkit.Material;
+
+import java.util.HashMap;
 
 @ConfigSerializable
 public class ConfigExperienceFishing {
+    private final static HashMap<String, Integer> FISHING_DEFAULT_XP_MAP;
+    public static final int SHAKE_XP_DEFAULT = 50;
+
+    static {
+        FISHING_DEFAULT_XP_MAP = new HashMap<>();
+
+        FISHING_DEFAULT_XP_MAP.put(Material.COD.getKey().toString(), 100);
+        FISHING_DEFAULT_XP_MAP.put(Material.SALMON.getKey().toString(), 600);
+        FISHING_DEFAULT_XP_MAP.put(Material.TROPICAL_FISH.getKey().toString(), 10000);
+        FISHING_DEFAULT_XP_MAP.put(Material.PUFFERFISH.getKey().toString(), 2400);
+    }
+
+    @Setting(value = "Fishing-Experience-Values", comment = "Experience values for Fishing.")
+    HashMap<String, Integer> fishingXPMap = FISHING_DEFAULT_XP_MAP;
+
+    @Setting(value = "Shake", comment = "XP Granted when shaking a mob")
+    private int shakeXP = SHAKE_XP_DEFAULT;
+
+    public HashMap<String, Integer> getFishingXPMap() {
+        return fishingXPMap;
+    }
 
+    public int getShakeXP() {
+        return shakeXP;
+    }
 }

+ 32 - 7
src/main/java/com/gmail/nossr50/skills/archery/Archery.java

@@ -1,8 +1,8 @@
 package com.gmail.nossr50.skills.archery;
 
 import com.gmail.nossr50.config.AdvancedConfig;
-import com.gmail.nossr50.config.experience.ExperienceConfig;
 import com.gmail.nossr50.datatypes.skills.SubSkillType;
+import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.util.Misc;
 import com.gmail.nossr50.util.skills.RankUtils;
 import org.bukkit.Material;
@@ -17,21 +17,30 @@ import java.util.List;
 public class Archery {
     private static List<TrackedEntity> trackedEntities;
 
-    public static double skillShotMaxBonusDamage;
+    private static double skillShotDamageCap;
 
-    public static double dazeBonusDamage;
+    private static double dazeBonusDamage;
 
-    public static double DISTANCE_XP_MULTIPLIER;
+    private static double distanceXpMultiplier;
+
+    private static Archery archery;
+
+    public static Archery getInstance() {
+        if(archery == null)
+            archery = new Archery();
+
+        return archery;
+    }
 
     public Archery()
     {
         List<TrackedEntity> trackedEntities = new ArrayList<>();
 
-        skillShotMaxBonusDamage     = AdvancedConfig.getInstance().getSkillShotDamageMax();
+        skillShotDamageCap = AdvancedConfig.getInstance().getSkillShotDamageMax();
 
         dazeBonusDamage = AdvancedConfig.getInstance().getDazeBonusDamage();
 
-        DISTANCE_XP_MULTIPLIER = ExperienceConfig.getInstance().getArcheryDistanceMultiplier();
+        distanceXpMultiplier = mcMMO.getConfigManager().getConfigExperience().getDistanceMultiplier();
     }
 
     protected static void incrementTrackerValue(LivingEntity livingEntity) {
@@ -77,10 +86,26 @@ public class Archery {
     {
         double damageBonusPercent = getDamageBonusPercent(player);
         double newDamage = oldDamage + (oldDamage * damageBonusPercent);
-        return Math.min(newDamage, Archery.skillShotMaxBonusDamage);
+        return Math.min(newDamage, Archery.skillShotDamageCap);
     }
 
     public static double getDamageBonusPercent(Player player) {
         return ((RankUtils.getRank(player, SubSkillType.ARCHERY_SKILL_SHOT)) * AdvancedConfig.getInstance().getSkillShotRankDamageMultiplier()) / 100.0D;
     }
+
+    public List<TrackedEntity> getTrackedEntities() {
+        return trackedEntities;
+    }
+
+    public double getSkillShotDamageCap() {
+        return skillShotDamageCap;
+    }
+
+    public double getDazeBonusDamage() {
+        return dazeBonusDamage;
+    }
+
+    public double getDistanceXpMultiplier() {
+        return distanceXpMultiplier;
+    }
 }

+ 2 - 2
src/main/java/com/gmail/nossr50/skills/archery/ArcheryManager.java

@@ -60,7 +60,7 @@ public class ArcheryManager extends SkillManager {
             return 1;
         }
 
-        return 1 + Math.min(firedLocation.distance(targetLocation), 50) * Archery.DISTANCE_XP_MULTIPLIER;
+        return 1 + Math.min(firedLocation.distance(targetLocation), 50) * Archery.getInstance().getDistanceXpMultiplier();
     }
 
     /**
@@ -98,7 +98,7 @@ public class ArcheryManager extends SkillManager {
             NotificationManager.sendPlayerInformation(getPlayer(), NotificationType.SUBSKILL_MESSAGE, "Combat.TargetDazed");
         }
 
-        return Archery.dazeBonusDamage;
+        return Archery.getInstance().getDazeBonusDamage();
     }
 
     /**