9
0
mirror of https://github.com/Xiao-MoMi/Custom-Fishing.git synced 2025-12-29 03:49:07 +00:00
This commit is contained in:
Xiao-MoMi
2022-08-29 01:27:43 +08:00
parent b3c90ab917
commit 73b21baffa
7 changed files with 825 additions and 615 deletions

View File

@@ -97,12 +97,15 @@ public class ConfigReader{
public static boolean doubleRealIn;
public static boolean vanillaLoot;
public static boolean showBar;
public static boolean mcMMOLoot;
public static int fishFinderCoolDown;
public static double timeMultiply;
public static double vanillaRatio;
public static double mcMMOLootChance;
public static SkillXP skillXP;
public static String version;
public static String lang;
public static String priority;
public static SeasonInterface season;
public static void loadConfig() {
@@ -178,8 +181,14 @@ public class ConfigReader{
}
doubleRealIn = config.getBoolean("config.double-reel-in", true);
vanillaLoot = config.getBoolean("config.vanilla-loot.enable", true);
showBar = config.getBoolean("config.vanilla-loot.bar", true);
mcMMOLoot = config.getBoolean("config.other-loot.mcMMO", false);
mcMMOLootChance = config.getDouble("config.other-loot.mcMMO-chance", 0.5);
vanillaLoot = config.getBoolean("config.other-loot.vanilla", true);
showBar = config.getBoolean("config.other-loot.bar", true);
vanillaRatio = config.getDouble("config.other-loot.vanilla-ratio");
convertMMOItems = config.getBoolean("config.convert-MMOITEMS", false);
needOpenWater = config.getBoolean("config.need-open-water", false);
needSpecialRod = config.getBoolean("config.need-special-rod", false);
@@ -187,9 +196,9 @@ public class ConfigReader{
preventPick = config.getBoolean("config.prevent-other-players-pick-up-loot", false);
version = config.getString("config-version");
priority = config.getString("config.event-priority");
fishFinderCoolDown = config.getInt("config.fishfinder-cooldown");
timeMultiply = config.getDouble("config.time-multiply");
vanillaRatio = config.getDouble("config.vanilla-loot.ratio");
lang = config.getString("config.lang","cn");
competition = config.getBoolean("config.fishing-competition",true);
}
@@ -734,7 +743,7 @@ public class ConfigReader{
case "weight-MQ" -> {
HashMap<String, Double> mq = new HashMap<>();
config.getConfigurationSection(key + ".modifier.weight-MQ").getValues(false).forEach((group, value) -> {
mq.put(group, Double.valueOf(String.valueOf(value)));
mq.put(group, Double.parseDouble(String.valueOf(value))-1);
});
bonus.setWeightMQ(mq);
}
@@ -820,7 +829,7 @@ public class ConfigReader{
case "weight-MQ" -> {
HashMap<String, Double> mq = new HashMap<>();
config.getConfigurationSection(key + ".modifier.weight-MQ").getValues(false).forEach((group, value) -> {
mq.put(group, Double.valueOf(String.valueOf(value)));
mq.put(group, Double.parseDouble(String.valueOf(value))-1);
});
bonus.setWeightMQ(mq);
}
@@ -947,7 +956,7 @@ public class ConfigReader{
case "weight-MQ" -> {
HashMap<String, Double> mq = new HashMap<>();
config.getConfigurationSection(key + "." + level + ".weight-MQ").getValues(false).forEach((group, value) -> {
mq.put(group, Double.valueOf(String.valueOf(value)));
mq.put(group, Double.parseDouble(String.valueOf(value))-1);
});
bonus.setWeightMQ(mq);
}

View File

@@ -24,11 +24,9 @@ import net.momirealms.customfishing.command.TabComplete;
import net.momirealms.customfishing.competition.CompetitionSchedule;
import net.momirealms.customfishing.competition.bossbar.BossBarManager;
import net.momirealms.customfishing.helper.LibraryLoader;
import net.momirealms.customfishing.hook.McMMOTreasure;
import net.momirealms.customfishing.hook.Placeholders;
import net.momirealms.customfishing.listener.MMOItemsConverter;
import net.momirealms.customfishing.listener.PapiUnregister;
import net.momirealms.customfishing.listener.PickUpListener;
import net.momirealms.customfishing.listener.FishListener;
import net.momirealms.customfishing.listener.*;
import net.momirealms.customfishing.utils.AdventureUtil;
import net.momirealms.customfishing.utils.ConfigUtil;
import org.bukkit.Bukkit;
@@ -84,7 +82,7 @@ public final class CustomFishing extends JavaPlugin {
});
}
ConfigReader.tryEnableJedis();
if (!Objects.equals(ConfigReader.Config.version, "5")){
if (!Objects.equals(ConfigReader.Config.version, "6")){
ConfigUtil.update();
}
if (ConfigReader.Config.preventPick){

View File

@@ -0,0 +1,161 @@
package net.momirealms.customfishing.hook;
import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
import com.gmail.nossr50.datatypes.skills.SubSkillType;
import com.gmail.nossr50.datatypes.treasure.EnchantmentTreasure;
import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
import com.gmail.nossr50.datatypes.treasure.FishingTreasureBook;
import com.gmail.nossr50.datatypes.treasure.Rarity;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.skills.fishing.FishingManager;
import com.gmail.nossr50.util.ItemUtils;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.player.UserManager;
import com.gmail.nossr50.util.skills.RankUtils;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
public class McMMOTreasure {
/*
these codes are partly from mcMMO, because of the cancelled event limitation
Plugin has to get the loot in a raw way
*/
public static ItemStack getTreasure(Player player){
FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
FishingTreasure treasure = getFishingTreasure(player, fishingManager.getLootTier());
ItemStack treasureDrop;
if (treasure != null) {
if(treasure instanceof FishingTreasureBook) {
treasureDrop = ItemUtils.createEnchantBook((FishingTreasureBook) treasure);
} else {
treasureDrop = treasure.getDrop().clone();
}
Map<Enchantment, Integer> enchants = new HashMap<>();
if(treasure instanceof FishingTreasureBook) {
if(treasureDrop.getItemMeta() != null) {
enchants = new HashMap<>(treasureDrop.getItemMeta().getEnchants());
}
} else {
if (isMagicHunterEnabled(player) && ItemUtils.isEnchantable(treasureDrop)) {
enchants = processMagicHunter(treasureDrop, fishingManager.getLootTier());
}
}
if (!enchants.isEmpty()) {
treasureDrop.addUnsafeEnchantments(enchants);
}
return treasureDrop;
}
return null;
}
public static boolean isMagicHunterEnabled(Player player) {
return RankUtils.hasUnlockedSubskill(player, SubSkillType.FISHING_MAGIC_HUNTER)
&& RankUtils.hasUnlockedSubskill(player, SubSkillType.FISHING_TREASURE_HUNTER)
&& Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_TREASURE_HUNTER);
}
private static Map<Enchantment, Integer> processMagicHunter(@NotNull ItemStack treasureDrop, int tier) {
Map<Enchantment, Integer> enchants = new HashMap<>();
List<EnchantmentTreasure> fishingEnchantments = null;
double diceRoll = Misc.getRandom().nextDouble() * 100;
for (Rarity rarity : Rarity.values()) {
double dropRate = FishingTreasureConfig.getInstance().getEnchantmentDropRate(tier, rarity);
if (diceRoll <= dropRate) {
if (treasureDrop.getType() == Material.ENCHANTED_BOOK) {
diceRoll = dropRate + 1;
continue;
}
fishingEnchantments = FishingTreasureConfig.getInstance().fishingEnchantments.get(rarity);
break;
}
diceRoll -= dropRate;
}
if (fishingEnchantments == null) {
return enchants;
}
Collections.shuffle(fishingEnchantments, Misc.getRandom());
int specificChance = 1;
for (EnchantmentTreasure enchantmentTreasure : fishingEnchantments) {
Enchantment possibleEnchantment = enchantmentTreasure.getEnchantment();
if (treasureDrop.getItemMeta().hasConflictingEnchant(possibleEnchantment) || Misc.getRandom().nextInt(specificChance) != 0) {
continue;
}
enchants.put(possibleEnchantment, enchantmentTreasure.getLevel());
specificChance *= 2;
}
return enchants;
}
private static @Nullable FishingTreasure getFishingTreasure(Player player, int tier) {
double diceRoll = Misc.getRandom().nextDouble() * 100;
int luck;
if (player.getInventory().getItemInMainHand().getType() == Material.FISHING_ROD) {
luck = player.getInventory().getItemInMainHand().getEnchantmentLevel(Enchantment.LUCK);
}
else {
luck = player.getInventory().getItemInOffHand().getEnchantmentLevel(Enchantment.LUCK);
}
diceRoll *= (1.0 - luck * mcMMO.p.getGeneralConfig().getFishingLureModifier() / 100);
FishingTreasure treasure = null;
for (Rarity rarity : Rarity.values()) {
double dropRate = FishingTreasureConfig.getInstance().getItemDropRate(tier, rarity);
if (diceRoll <= dropRate) {
List<FishingTreasure> fishingTreasures = FishingTreasureConfig.getInstance().fishingRewards.get(rarity);
if (fishingTreasures.isEmpty()) {
return null;
}
treasure = fishingTreasures.get(Misc.getRandom().nextInt(fishingTreasures.size()));
break;
}
diceRoll -= dropRate;
}
if (treasure == null) {
return null;
}
ItemStack treasureDrop = treasure.getDrop().clone();
short maxDurability = treasureDrop.getType().getMaxDurability();
if (maxDurability > 0) {
treasureDrop.setDurability((short) (Misc.getRandom().nextInt(maxDurability)));
}
treasure.setDrop(treasureDrop);
return treasure;
}
}