mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-25 06:36:45 +01:00
Wiring up Fishing config values
This commit is contained in:
parent
856e6f0447
commit
c41a650415
@ -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
|
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
|
Acrobatic's Dodge XP increased from 120 -> 480
|
||||||
Fishing's always catch fish setting now defaults to true instead of false
|
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
|
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")
|
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.
|
Note: Admins are players who are op or have adminchat permission.
|
||||||
|
@ -16,4 +16,12 @@ public class ConfigFishing {
|
|||||||
public boolean isAlwaysCatchFish() {
|
public boolean isAlwaysCatchFish() {
|
||||||
return fishingGeneral.isAlwaysCatchFish();
|
return fishingGeneral.isAlwaysCatchFish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getLureLuckModifier() {
|
||||||
|
return fishingGeneral.getLureLuckModifier();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOverrideVanillaTreasures() {
|
||||||
|
return fishingGeneral.isOverrideVanillaTreasures();
|
||||||
|
}
|
||||||
}
|
}
|
@ -7,12 +7,32 @@ import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
|
|||||||
public class ConfigFishingGeneral {
|
public class ConfigFishingGeneral {
|
||||||
|
|
||||||
private static final boolean ALWAYS_CATCH_FISH_DEFAULT = true;
|
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." +
|
@Setting(value = "Always-Catch-Fish", comment = "Enables fish to be caught alongside treasure." +
|
||||||
"\nDefault value: "+ALWAYS_CATCH_FISH_DEFAULT)
|
"\nDefault value: "+ALWAYS_CATCH_FISH_DEFAULT)
|
||||||
private boolean alwaysCatchFish = 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() {
|
public boolean isAlwaysCatchFish() {
|
||||||
return alwaysCatchFish;
|
return alwaysCatchFish;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isOverrideVanillaTreasures() {
|
||||||
|
return overrideVanillaTreasures;
|
||||||
|
}
|
||||||
}
|
}
|
@ -17,10 +17,13 @@ import java.util.Set;
|
|||||||
|
|
||||||
public final class Fishing {
|
public final class Fishing {
|
||||||
|
|
||||||
private static HashMap<Material, List<Enchantment>> ENCHANTABLE_CACHE = new HashMap<>();
|
private HashMap<Material, List<Enchantment>> enchantableCache = new HashMap<>();
|
||||||
private HashMap<Material, Integer> fishingXpRewardMap;
|
private HashMap<Material, Integer> fishingXpRewardMap;
|
||||||
private static Set<Biome> masterAnglerBiomes = BiomeAdapter.WATER_BIOMES;
|
private Set<Biome> masterAnglerBiomes = BiomeAdapter.WATER_BIOMES;
|
||||||
private static Set<Biome> iceFishingBiomes = BiomeAdapter.ICE_BIOMES;
|
private Set<Biome> iceFishingBiomes = BiomeAdapter.ICE_BIOMES;
|
||||||
|
private final long fishingRodCastCdMilliseconds;
|
||||||
|
private final int overfishLimit;
|
||||||
|
private final float boundingBoxSize;
|
||||||
|
|
||||||
public static Fishing instance;
|
public static Fishing instance;
|
||||||
|
|
||||||
@ -32,6 +35,9 @@ public final class Fishing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Fishing() {
|
public Fishing() {
|
||||||
|
overfishLimit = mcMMO.getConfigManager().getConfigExploitPrevention().getOverfishingLimit() + 1;
|
||||||
|
fishingRodCastCdMilliseconds = mcMMO.getConfigManager().getConfigExploitPrevention().getFishingRodSpamMilliseconds();
|
||||||
|
boundingBoxSize = mcMMO.getConfigManager().getConfigExploitPrevention().getOverFishingAreaSize();
|
||||||
initFishingXPRewardMap();
|
initFishingXPRewardMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +100,7 @@ public final class Fishing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public HashMap<Material, List<Enchantment>> getEnchantableCache() {
|
public HashMap<Material, List<Enchantment>> getEnchantableCache() {
|
||||||
return ENCHANTABLE_CACHE;
|
return enchantableCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HashMap<Material, Integer> getFishingXpRewardMap() {
|
public HashMap<Material, Integer> getFishingXpRewardMap() {
|
||||||
@ -109,9 +115,20 @@ public final class Fishing {
|
|||||||
return iceFishingBiomes;
|
return iceFishingBiomes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getFishXPValue(Material material)
|
public int getFishXPValue(Material material)
|
||||||
{
|
{
|
||||||
return fishingXpRewardMap.get(material);
|
return fishingXpRewardMap.get(material);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getFishingRodCastCdMilliseconds() {
|
||||||
|
return fishingRodCastCdMilliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getOverfishLimit() {
|
||||||
|
return overfishLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getBoundingBoxSize() {
|
||||||
|
return boundingBoxSize;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,9 +45,6 @@ import java.util.*;
|
|||||||
|
|
||||||
public class FishingManager extends SkillManager {
|
public class FishingManager extends SkillManager {
|
||||||
|
|
||||||
public final long FISHING_ROD_CAST_CD_MILLISECONDS;
|
|
||||||
public final int OVERFISH_LIMIT;
|
|
||||||
|
|
||||||
private long fishingRodCastTimestamp;
|
private long fishingRodCastTimestamp;
|
||||||
private long fishHookSpawnTimestamp;
|
private long fishHookSpawnTimestamp;
|
||||||
private long lastWarned;
|
private long lastWarned;
|
||||||
@ -55,14 +52,11 @@ public class FishingManager extends SkillManager {
|
|||||||
private BoundingBox lastFishingBoundingBox;
|
private BoundingBox lastFishingBoundingBox;
|
||||||
private Location hookLocation;
|
private Location hookLocation;
|
||||||
private int fishCaughtCounter;
|
private int fishCaughtCounter;
|
||||||
private final float boundingBoxSize;
|
|
||||||
private int overFishCount;
|
private int overFishCount;
|
||||||
|
|
||||||
public FishingManager(McMMOPlayer mcMMOPlayer) {
|
public FishingManager(McMMOPlayer mcMMOPlayer) {
|
||||||
super(mcMMOPlayer, PrimarySkillType.FISHING);
|
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;
|
fishCaughtCounter = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +75,7 @@ public class FishingManager extends SkillManager {
|
|||||||
if(currentTime > fishHookSpawnTimestamp + 1000)
|
if(currentTime > fishHookSpawnTimestamp + 1000)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(currentTime < fishingRodCastTimestamp + FISHING_ROD_CAST_CD_MILLISECONDS)
|
if(currentTime < fishingRodCastTimestamp + Fishing.getInstance().getFishingRodCastCdMilliseconds())
|
||||||
{
|
{
|
||||||
getPlayer().setFoodLevel(Math.max(getPlayer().getFoodLevel() - 1, 0));
|
getPlayer().setFoodLevel(Math.max(getPlayer().getFoodLevel() - 1, 0));
|
||||||
getPlayer().getInventory().getItemInMainHand().setDurability((short) (getPlayer().getInventory().getItemInMainHand().getDurability() + 5));
|
getPlayer().getInventory().getItemInMainHand().setDurability((short) (getPlayer().getInventory().getItemInMainHand().getDurability() + 5));
|
||||||
@ -131,6 +125,8 @@ public class FishingManager extends SkillManager {
|
|||||||
return false;
|
return false;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
int overfishLimit = Fishing.getInstance().getOverfishLimit();
|
||||||
|
|
||||||
BoundingBox newCastBoundingBox = makeBoundingBox(centerOfCastVector);
|
BoundingBox newCastBoundingBox = makeBoundingBox(centerOfCastVector);
|
||||||
|
|
||||||
boolean sameTarget = lastFishingBoundingBox != null && lastFishingBoundingBox.overlaps(newCastBoundingBox);
|
boolean sameTarget = lastFishingBoundingBox != null && lastFishingBoundingBox.overlaps(newCastBoundingBox);
|
||||||
@ -140,7 +136,7 @@ public class FishingManager extends SkillManager {
|
|||||||
else
|
else
|
||||||
fishCaughtCounter = 1;
|
fishCaughtCounter = 1;
|
||||||
|
|
||||||
if(fishCaughtCounter + 1 == OVERFISH_LIMIT)
|
if(fishCaughtCounter + 1 == overfishLimit)
|
||||||
{
|
{
|
||||||
getPlayer().sendMessage(LocaleLoader.getString("Fishing.LowResources"));
|
getPlayer().sendMessage(LocaleLoader.getString("Fishing.LowResources"));
|
||||||
}
|
}
|
||||||
@ -149,7 +145,7 @@ public class FishingManager extends SkillManager {
|
|||||||
if(!sameTarget)
|
if(!sameTarget)
|
||||||
lastFishingBoundingBox = newCastBoundingBox;
|
lastFishingBoundingBox = newCastBoundingBox;
|
||||||
|
|
||||||
if(sameTarget && fishCaughtCounter >= OVERFISH_LIMIT)
|
if(sameTarget && fishCaughtCounter >= overfishLimit)
|
||||||
{
|
{
|
||||||
overFishCount++;
|
overFishCount++;
|
||||||
} else
|
} else
|
||||||
@ -166,10 +162,11 @@ public class FishingManager extends SkillManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sameTarget && fishCaughtCounter >= OVERFISH_LIMIT;
|
return sameTarget && fishCaughtCounter >= overfishLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BoundingBox makeBoundingBox(Vector centerOfCastVector) {
|
public BoundingBox makeBoundingBox(Vector centerOfCastVector) {
|
||||||
|
double boundingBoxSize = Fishing.getInstance().getBoundingBoxSize();
|
||||||
return BoundingBox.of(centerOfCastVector, boundingBoxSize, boundingBoxSize, boundingBoxSize);
|
return BoundingBox.of(centerOfCastVector, boundingBoxSize, boundingBoxSize, boundingBoxSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,8 +327,6 @@ public class FishingManager extends SkillManager {
|
|||||||
|
|
||||||
if (mcMMO.getConfigManager().getConfigFishing().isAlwaysCatchFish()) {
|
if (mcMMO.getConfigManager().getConfigFishing().isAlwaysCatchFish()) {
|
||||||
Misc.dropItem(player.getEyeLocation(), fishingCatch.getItemStack());
|
Misc.dropItem(player.getEyeLocation(), fishingCatch.getItemStack());
|
||||||
//Add XP from Fish
|
|
||||||
fishXp+=Fishing.getInstance().getFishXPValue(fishingCatch.getItemStack().getType());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fishingCatch.setItemStack(treasureDrop);
|
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.
|
// 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;
|
FishingTreasure treasure = null;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user