diff --git a/pom.xml b/pom.xml index 7c9998ca5..e8fd8557e 100755 --- a/pom.xml +++ b/pom.xml @@ -172,8 +172,18 @@ sk89q-repo http://maven.sk89q.com/repo/ + + jetbrains + https://mvnrepository.com/artifact/org.jetbrains/annotations + + + + org.jetbrains + annotations + 17.0.0 + com.typesafe config diff --git a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java index 8cd3cf498..420b81973 100644 --- a/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java +++ b/src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java @@ -5,7 +5,6 @@ import com.gmail.nossr50.config.ConfigValidated; import com.gmail.nossr50.datatypes.experience.FormulaType; import com.gmail.nossr50.datatypes.skills.ItemMaterialCategory; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; -import com.gmail.nossr50.datatypes.skills.alchemy.PotionStage; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.StringUtils; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java b/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java index 07f14da8c..2106de8e4 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/subskills/acrobatics/Roll.java @@ -1,7 +1,6 @@ package com.gmail.nossr50.datatypes.skills.subskills.acrobatics; import com.gmail.nossr50.config.AdvancedConfig; -import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.datatypes.LimitedSizeList; import com.gmail.nossr50.datatypes.experience.XPGainReason; import com.gmail.nossr50.datatypes.interactions.NotificationType; diff --git a/src/main/java/com/gmail/nossr50/skills/acrobatics/Acrobatics.java b/src/main/java/com/gmail/nossr50/skills/acrobatics/Acrobatics.java index 22b413e4e..5159bd866 100644 --- a/src/main/java/com/gmail/nossr50/skills/acrobatics/Acrobatics.java +++ b/src/main/java/com/gmail/nossr50/skills/acrobatics/Acrobatics.java @@ -1,8 +1,5 @@ package com.gmail.nossr50.skills.acrobatics; -import com.gmail.nossr50.config.AdvancedConfig; -import com.gmail.nossr50.config.MainConfig; -import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.mcMMO; public final class Acrobatics { diff --git a/src/main/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsManager.java b/src/main/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsManager.java index d64945c3b..18c7c3329 100644 --- a/src/main/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsManager.java +++ b/src/main/java/com/gmail/nossr50/skills/acrobatics/AcrobaticsManager.java @@ -16,7 +16,6 @@ import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.skills.SkillActivationType; import com.gmail.nossr50.util.skills.SkillUtils; import org.bukkit.entity.Entity; -import org.bukkit.entity.LightningStrike; import org.bukkit.entity.Player; public class AcrobaticsManager extends SkillManager { diff --git a/src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyManager.java b/src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyManager.java index 92cd46330..892db1066 100644 --- a/src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyManager.java +++ b/src/main/java/com/gmail/nossr50/skills/alchemy/AlchemyManager.java @@ -1,6 +1,5 @@ package com.gmail.nossr50.skills.alchemy; -import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.config.skills.alchemy.PotionConfig; import com.gmail.nossr50.datatypes.experience.XPGainReason; import com.gmail.nossr50.datatypes.experience.XPGainSource; diff --git a/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java b/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java index 3b4c99ed2..3cf74d73c 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java @@ -2,6 +2,7 @@ package com.gmail.nossr50.skills.fishing; import com.gmail.nossr50.config.treasure.FishingTreasureConfig; import com.gmail.nossr50.datatypes.treasure.ShakeTreasure; +import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.adapter.BiomeAdapter; import org.bukkit.Material; @@ -16,16 +17,45 @@ import java.util.Set; public final class Fishing { - protected static final HashMap> ENCHANTABLE_CACHE = new HashMap<>(); + private static HashMap> ENCHANTABLE_CACHE = new HashMap<>(); + private HashMap fishingXpRewardMap; + private static Set masterAnglerBiomes = BiomeAdapter.WATER_BIOMES; + private static Set iceFishingBiomes = BiomeAdapter.ICE_BIOMES; - /*public static int fishermansDietRankLevel1 = AdvancedConfig.getInstance().getFishermanDietRankChange(); - public static int fishermansDietRankLevel2 = fishermansDietRankLevel1 * 2; - public static int fishermansDietMaxLevel = fishermansDietRankLevel1 * 5;*/ + public static Fishing instance; - public static Set masterAnglerBiomes = BiomeAdapter.WATER_BIOMES; - public static Set iceFishingBiomes = BiomeAdapter.ICE_BIOMES; + public static Fishing getInstance() { + if(instance == null) + instance = new Fishing(); - private Fishing() {} + return instance; + } + + public Fishing() { + initFishingXPRewardMap(); + } + + /** + * Inits the Fishing Catch -> XP Reward map + */ + private void initFishingXPRewardMap() + { + fishingXpRewardMap = new HashMap<>(); + HashMap nameRegisterMap = mcMMO.getConfigManager().getConfigExperience().getFishingXPMap(); + + for(String qualifiedName : nameRegisterMap.keySet()) + { + Material material = Material.matchMaterial(qualifiedName); + + if(material == null) + { + mcMMO.p.getLogger().info("Unable to match qualified name to item for fishing xp map: "+qualifiedName); + continue; + } + + fishingXpRewardMap.putIfAbsent(material, nameRegisterMap.get(qualifiedName)); + } + } /** * Finds the possible drops of an entity @@ -34,7 +64,7 @@ public final class Fishing { * Targeted entity * @return possibleDrops List of ItemStack that can be dropped */ - protected static List findPossibleDrops(LivingEntity target) { + public List findPossibleDrops(LivingEntity target) { if (FishingTreasureConfig.getInstance().shakeMap.containsKey(target.getType())) return FishingTreasureConfig.getInstance().shakeMap.get(target.getType()); @@ -48,7 +78,7 @@ public final class Fishing { * List of ItemStack that can be dropped * @return Chosen ItemStack */ - protected static ItemStack chooseDrop(List possibleDrops) { + public ItemStack chooseDrop(List possibleDrops) { int dropProbability = Misc.getRandom().nextInt(100); double cumulatedProbability = 0; @@ -62,4 +92,26 @@ public final class Fishing { return null; } + + public HashMap> getEnchantableCache() { + return ENCHANTABLE_CACHE; + } + + public HashMap getFishingXpRewardMap() { + return fishingXpRewardMap; + } + + public Set getMasterAnglerBiomes() { + return masterAnglerBiomes; + } + + public Set getIceFishingBiomes() { + return iceFishingBiomes; + } + + + public int getFishXPValue(Material material) + { + return fishingXpRewardMap.get(material); + } } diff --git a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java index 270cf1360..261d7f7a4 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java @@ -48,21 +48,22 @@ public class FishingManager extends SkillManager { public final long FISHING_ROD_CAST_CD_MILLISECONDS; public final int OVERFISH_LIMIT; - private long fishingRodCastTimestamp = 0L; - private long fishHookSpawnTimestamp = 0L; - private long lastWarned = 0L; - private long lastWarnedExhaust = 0L; + private long fishingRodCastTimestamp; + private long fishHookSpawnTimestamp; + private long lastWarned; + private long lastWarnedExhaust; private BoundingBox lastFishingBoundingBox; private Location hookLocation; - private int fishCaughtCounter = 1; + private int fishCaughtCounter; private final float boundingBoxSize; - private int overFishCount = 0; + private int overFishCount; public FishingManager(McMMOPlayer mcMMOPlayer) { super(mcMMOPlayer, PrimarySkillType.FISHING); OVERFISH_LIMIT = mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitFishing().getOverfishingLimit() + 1; FISHING_ROD_CAST_CD_MILLISECONDS = mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitFishing().getFishingRodSpamMilliseconds(); boundingBoxSize = mcMMO.getConfigManager().getConfigExploitPrevention().getConfigSectionExploitFishing().getOverFishingAreaSize(); + fishCaughtCounter = 1; } public boolean canShake(Entity target) { @@ -186,7 +187,7 @@ public class FishingManager extends SkillManager { } // Make sure this is a body of water, not just a block of ice. - if (!Fishing.iceFishingBiomes.contains(block.getBiome()) && (block.getRelative(BlockFace.DOWN, 3).getType() != Material.WATER)) { + if (!Fishing.getInstance().getIceFishingBiomes().contains(block.getBiome()) && (block.getRelative(BlockFace.DOWN, 3).getType() != Material.WATER)) { return false; } @@ -261,7 +262,7 @@ public class FishingManager extends SkillManager { hookLocation = location; - if (Fishing.masterAnglerBiomes.contains(location.getBlock().getBiome())) { + if (Fishing.getInstance().getMasterAnglerBiomes().contains(location.getBlock().getBiome())) { biteChance = biteChance * AdvancedConfig.getInstance().getMasterAnglerBiomeModifier(); } @@ -329,6 +330,8 @@ public class FishingManager extends SkillManager { if (mcMMO.getConfigManager().getConfigFishing().isAlwaysCatchFish()) { Misc.dropItem(player.getEyeLocation(), fishingCatch.getItemStack()); + //Add XP from Fish + fishXp+=Fishing.getInstance().getFishXPValue(fishingCatch.getItemStack().getType()); } fishingCatch.setItemStack(treasureDrop); @@ -360,13 +363,13 @@ public class FishingManager extends SkillManager { */ public void shakeCheck(LivingEntity target) { if (RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(getShakeChance(), getPlayer(), SubSkillType.FISHING_SHAKE))) { - List possibleDrops = Fishing.findPossibleDrops(target); + List possibleDrops = Fishing.getInstance().findPossibleDrops(target); if (possibleDrops == null || possibleDrops.isEmpty()) { return; } - ItemStack drop = Fishing.chooseDrop(possibleDrops); + ItemStack drop = Fishing.getInstance().chooseDrop(possibleDrops); // It's possible that chooseDrop returns null if the sum of probability in possibleDrops is inferior than 100 if (drop == null) { @@ -579,8 +582,8 @@ public class FishingManager extends SkillManager { private List getPossibleEnchantments(ItemStack treasureDrop) { Material dropType = treasureDrop.getType(); - if (Fishing.ENCHANTABLE_CACHE.containsKey(dropType)) { - return Fishing.ENCHANTABLE_CACHE.get(dropType); + if (Fishing.getInstance().getEnchantableCache().containsKey(dropType)) { + return Fishing.getInstance().getEnchantableCache().get(dropType); } List possibleEnchantments = new ArrayList<>(); @@ -591,7 +594,7 @@ public class FishingManager extends SkillManager { } } - Fishing.ENCHANTABLE_CACHE.put(dropType, possibleEnchantments); + Fishing.getInstance().getEnchantableCache().put(dropType, possibleEnchantments); return possibleEnchantments; }