diff --git a/Changelog.txt b/Changelog.txt index 9b6097573..67a225344 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -26,6 +26,7 @@ Version 2.2.0 Expanded settings relating to purging users who have not leveled or users who had not logged in for many months Acrobatic's Dodge XP increased from 120 -> 480 Fishing's always catch fish setting now defaults to true instead of false + Optimized code related to Fishing NOTE: Not every config key that was renamed will be listed here Admins will now be notified if a player trips over-fishing exploit detection 3+ times in a row (Locale: "Fishing.OverFishingDetected") Note: Admins are players who are op or have adminchat permission. diff --git a/src/main/java/com/gmail/nossr50/config/hocon/skills/fishing/ConfigFishing.java b/src/main/java/com/gmail/nossr50/config/hocon/skills/fishing/ConfigFishing.java index 83e752ea3..c50cec746 100644 --- a/src/main/java/com/gmail/nossr50/config/hocon/skills/fishing/ConfigFishing.java +++ b/src/main/java/com/gmail/nossr50/config/hocon/skills/fishing/ConfigFishing.java @@ -16,4 +16,12 @@ public class ConfigFishing { public boolean isAlwaysCatchFish() { return fishingGeneral.isAlwaysCatchFish(); } + + public double getLureLuckModifier() { + return fishingGeneral.getLureLuckModifier(); + } + + public boolean isOverrideVanillaTreasures() { + return fishingGeneral.isOverrideVanillaTreasures(); + } } \ No newline at end of file diff --git a/src/main/java/com/gmail/nossr50/config/hocon/skills/fishing/ConfigFishingGeneral.java b/src/main/java/com/gmail/nossr50/config/hocon/skills/fishing/ConfigFishingGeneral.java index 6bc2e0f0f..a57227206 100644 --- a/src/main/java/com/gmail/nossr50/config/hocon/skills/fishing/ConfigFishingGeneral.java +++ b/src/main/java/com/gmail/nossr50/config/hocon/skills/fishing/ConfigFishingGeneral.java @@ -7,12 +7,32 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; public class ConfigFishingGeneral { private static final boolean ALWAYS_CATCH_FISH_DEFAULT = true; + private static final boolean OVERRIDE_VANILLA_TREASURES = true; + public static final double LURE_MODIFIER_DEFAULT = 4.0D; @Setting(value = "Always-Catch-Fish", comment = "Enables fish to be caught alongside treasure." + "\nDefault value: "+ALWAYS_CATCH_FISH_DEFAULT) private boolean alwaysCatchFish = ALWAYS_CATCH_FISH_DEFAULT; + @Setting(value = "Override-Vanilla-Fishing-Treasures", comment = "When set to true, mcMMO fishing loot tables will be used instead of vanilla." + + "\nIt is recommended you use vanilla mcMMO fishing tables, as they are configurable." + + "\nDefault value: "+OVERRIDE_VANILLA_TREASURES) + private boolean overrideVanillaTreasures = OVERRIDE_VANILLA_TREASURES; + + @Setting(value = "Lure-Luck-Modifier", comment = "Lure luck modifier is used to determine how much to" + + " increase drop chance by for fishing rods with the Luck enchantment." + + "\nDefault value: "+LURE_MODIFIER_DEFAULT) + private double lureLuckModifier = LURE_MODIFIER_DEFAULT; + + public double getLureLuckModifier() { + return lureLuckModifier; + } + public boolean isAlwaysCatchFish() { return alwaysCatchFish; } + + public boolean isOverrideVanillaTreasures() { + return overrideVanillaTreasures; + } } \ No newline at end of file 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 3cf74d73c..e0715069d 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java @@ -17,10 +17,13 @@ import java.util.Set; public final class Fishing { - private static HashMap> ENCHANTABLE_CACHE = new HashMap<>(); + private HashMap> enchantableCache = new HashMap<>(); private HashMap fishingXpRewardMap; - private static Set masterAnglerBiomes = BiomeAdapter.WATER_BIOMES; - private static Set iceFishingBiomes = BiomeAdapter.ICE_BIOMES; + private Set masterAnglerBiomes = BiomeAdapter.WATER_BIOMES; + private Set iceFishingBiomes = BiomeAdapter.ICE_BIOMES; + private final long fishingRodCastCdMilliseconds; + private final int overfishLimit; + private final float boundingBoxSize; public static Fishing instance; @@ -32,6 +35,9 @@ public final class Fishing { } public Fishing() { + overfishLimit = mcMMO.getConfigManager().getConfigExploitPrevention().getOverfishingLimit() + 1; + fishingRodCastCdMilliseconds = mcMMO.getConfigManager().getConfigExploitPrevention().getFishingRodSpamMilliseconds(); + boundingBoxSize = mcMMO.getConfigManager().getConfigExploitPrevention().getOverFishingAreaSize(); initFishingXPRewardMap(); } @@ -94,7 +100,7 @@ public final class Fishing { } public HashMap> getEnchantableCache() { - return ENCHANTABLE_CACHE; + return enchantableCache; } public HashMap getFishingXpRewardMap() { @@ -109,9 +115,20 @@ public final class Fishing { return iceFishingBiomes; } - public int getFishXPValue(Material material) { return fishingXpRewardMap.get(material); } + + public long getFishingRodCastCdMilliseconds() { + return fishingRodCastCdMilliseconds; + } + + public int getOverfishLimit() { + return overfishLimit; + } + + public float getBoundingBoxSize() { + return boundingBoxSize; + } } 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 261d7f7a4..7003b49e8 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java @@ -45,9 +45,6 @@ import java.util.*; public class FishingManager extends SkillManager { - public final long FISHING_ROD_CAST_CD_MILLISECONDS; - public final int OVERFISH_LIMIT; - private long fishingRodCastTimestamp; private long fishHookSpawnTimestamp; private long lastWarned; @@ -55,14 +52,11 @@ public class FishingManager extends SkillManager { private BoundingBox lastFishingBoundingBox; private Location hookLocation; private int fishCaughtCounter; - private final float boundingBoxSize; 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; } @@ -81,7 +75,7 @@ public class FishingManager extends SkillManager { if(currentTime > fishHookSpawnTimestamp + 1000) return; - if(currentTime < fishingRodCastTimestamp + FISHING_ROD_CAST_CD_MILLISECONDS) + if(currentTime < fishingRodCastTimestamp + Fishing.getInstance().getFishingRodCastCdMilliseconds()) { getPlayer().setFoodLevel(Math.max(getPlayer().getFoodLevel() - 1, 0)); getPlayer().getInventory().getItemInMainHand().setDurability((short) (getPlayer().getInventory().getItemInMainHand().getDurability() + 5)); @@ -131,6 +125,8 @@ public class FishingManager extends SkillManager { return false; }*/ + int overfishLimit = Fishing.getInstance().getOverfishLimit(); + BoundingBox newCastBoundingBox = makeBoundingBox(centerOfCastVector); boolean sameTarget = lastFishingBoundingBox != null && lastFishingBoundingBox.overlaps(newCastBoundingBox); @@ -140,7 +136,7 @@ public class FishingManager extends SkillManager { else fishCaughtCounter = 1; - if(fishCaughtCounter + 1 == OVERFISH_LIMIT) + if(fishCaughtCounter + 1 == overfishLimit) { getPlayer().sendMessage(LocaleLoader.getString("Fishing.LowResources")); } @@ -149,7 +145,7 @@ public class FishingManager extends SkillManager { if(!sameTarget) lastFishingBoundingBox = newCastBoundingBox; - if(sameTarget && fishCaughtCounter >= OVERFISH_LIMIT) + if(sameTarget && fishCaughtCounter >= overfishLimit) { overFishCount++; } else @@ -166,10 +162,11 @@ public class FishingManager extends SkillManager { } } - return sameTarget && fishCaughtCounter >= OVERFISH_LIMIT; + return sameTarget && fishCaughtCounter >= overfishLimit; } public BoundingBox makeBoundingBox(Vector centerOfCastVector) { + double boundingBoxSize = Fishing.getInstance().getBoundingBoxSize(); return BoundingBox.of(centerOfCastVector, boundingBoxSize, boundingBoxSize, boundingBoxSize); } @@ -330,8 +327,6 @@ 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); @@ -463,7 +458,7 @@ public class FishingManager extends SkillManager { } // Rather than subtracting luck (and causing a minimum 3% chance for every drop), scale by luck. - diceRoll *= (1.0 - luck * MainConfig.getInstance().getFishingLureModifier() / 100); + diceRoll *= (1.0 - luck * mcMMO.getConfigManager().getConfigFishing().getLureLuckModifier() / 100); FishingTreasure treasure = null;