diff --git a/README.md b/README.md index 3b130f12..cae5bc0a 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # Custom-Fishing ![CodeFactor Grade](https://img.shields.io/codefactor/grade/github/Xiao-MoMi/Custom-Fishing) -![Code Size](https://img.shields.io/github/languages/code-size/Xiao-MoMi/Custom-Fishing) -![bStats Servers](https://img.shields.io/bstats/servers/16648) -![bStats Players](https://img.shields.io/bstats/players/16648) -![GitHub](https://img.shields.io/github/license/Xiao-MoMi/Custom-Fishing) [![](https://jitpack.io/v/Xiao-MoMi/Custom-Fishing.svg)](https://jitpack.io/#Xiao-MoMi/Custom-Fishing) Gitbook +![GitHub](https://img.shields.io/github/license/Xiao-MoMi/Custom-Fishing) +![Code Size](https://img.shields.io/github/languages/code-size/Xiao-MoMi/Custom-Fishing) +![bStats Servers](https://img.shields.io/bstats/servers/16648) +![bStats Players](https://img.shields.io/bstats/players/16648) CustomFishing is a Paper plugin that provides minigames and a powerful condition & action system for fishing. With the new concept of weight system, CustomFishing brings unlimited customization possibilities and best performance. @@ -33,7 +33,7 @@ If you are using a proxy, configurate the proxy in gradle.properties. Otherwise Polymart: https://polymart.org/resource/customfishing.2723 \ Afdian: https://afdian.net/@xiaomomi -## Use CustomFishing API +## CustomFishing API ### Maven @@ -50,7 +50,7 @@ Afdian: https://afdian.net/@xiaomomi com.github.Xiao-MoMi Custom-Fishing - {LATEST} + {VERSION} provided @@ -64,7 +64,7 @@ repositories { ``` ``` dependencies { - compileOnly 'com.github.Xiao-MoMi:Custom-Fishing:{LATEST}' + compileOnly 'com.github.Xiao-MoMi:Custom-Fishing:{VERSION}' } ``` ### Gradle (Kotlin) @@ -76,6 +76,6 @@ repositories { ``` ``` dependencies { - compileOnly("com.github.Xiao-MoMi:Custom-Fishing:{LATEST}") + compileOnly("com.github.Xiao-MoMi:Custom-Fishing:{VERSION}") } ``` \ No newline at end of file diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/CompetitionGoal.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/CompetitionGoal.java index d1972e51..7946fc46 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/CompetitionGoal.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/competition/CompetitionGoal.java @@ -54,7 +54,8 @@ public final class CompetitionGoal { public static final CompetitionGoal MIN_SIZE = new CompetitionGoal( "min_size", true, ((rankingProvider, player, score) -> { - if (-rankingProvider.getPlayerScore(player) > score) { + double previousScore = -rankingProvider.getPlayerScore(player); + if (previousScore == 0 || previousScore > score) { rankingProvider.setData(player, -score); } }), diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigManager.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigManager.java index 9390c434..8e59af31 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/config/ConfigManager.java @@ -369,7 +369,9 @@ public abstract class ConfigManager implements ConfigLoader, Reloadable { @Override public YamlDocument loadData(File file, char routeSeparator) { try (InputStream inputStream = new FileInputStream(file)) { - return YamlDocument.create(inputStream, GeneralSettings.builder().setRouteSeparator(routeSeparator).build()); + return YamlDocument.create(inputStream, GeneralSettings.builder() + .setRouteSeparator(routeSeparator) + .build()); } catch (IOException e) { plugin.getPluginLogger().severe("Failed to load config " + file, e); throw new RuntimeException(e); diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/effect/EffectImpl.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/effect/EffectImpl.java index be5ea5c8..434f0049 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/effect/EffectImpl.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/effect/EffectImpl.java @@ -231,4 +231,24 @@ public class EffectImpl implements Effect { .properties(this.properties); } + + @Override + public String toString() { + return "Effect{" + + "properties=" + properties + + ", multipleLootChance=" + multipleLootChance + + ", sizeAdder=" + sizeAdder + + ", sizeMultiplier=" + sizeMultiplier + + ", scoreAdder=" + scoreAdder + + ", scoreMultiplier=" + scoreMultiplier + + ", gameTimeAdder=" + gameTimeAdder + + ", gameTimeMultiplier=" + gameTimeMultiplier + + ", waitTimeAdder=" + waitTimeAdder + + ", waitTimeMultiplier=" + waitTimeMultiplier + + ", difficultyAdder=" + difficultyAdder + + ", difficultyMultiplier=" + difficultyMultiplier + + ", weightOperations=" + weightOperations + + ", weightOperationsIgnored=" + weightOperationsIgnored + + '}'; + } } diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java index fc31917b..685f2acc 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java @@ -163,6 +163,7 @@ public class CustomFishingHook { // to update some properties mechanic.preStart(); Effect tempEffect = effect.copy(); + for (EffectModifier modifier : gears.effectModifiers()) { for (TriConsumer, Integer> consumer : modifier.modifiers()) { consumer.accept(tempEffect, context, 1); @@ -175,7 +176,7 @@ public class CustomFishingHook { context.arg(ContextKeys.OTHER_Z, hook.getLocation().getBlockZ()); // get the next loot - Loot loot = plugin.getLootManager().getNextLoot(effect, context); + Loot loot = plugin.getLootManager().getNextLoot(tempEffect, context); if (loot != null) { this.nextLoot = loot; @@ -517,7 +518,7 @@ public class CustomFishingHook { competition.refreshData(context.getHolder(), score); } else if (competition.getGoal() == CompetitionGoal.MAX_SIZE || competition.getGoal() == CompetitionGoal.MIN_SIZE) { Float size = context.arg(ContextKeys.SIZE); - if (size != null) { + if (size != null && size > 0) { competition.refreshData(context.getHolder(), size); } } else if (competition.getGoal() == CompetitionGoal.TOTAL_SCORE) { diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/LootManager.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/LootManager.java index 87b54578..e3effc33 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/LootManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/LootManager.java @@ -24,6 +24,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Optional; @@ -41,6 +42,13 @@ public interface LootManager extends Reloadable { */ boolean registerLoot(@NotNull Loot loot); + /** + * Get all the registered loots + * + * @return registered loots + */ + Collection getRegisteredLoots(); + /** * Retrieves the members of a loot group identified by the given key. * diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/competition/actionbar/ActionBarSender.java b/core/src/main/java/net/momirealms/customfishing/bukkit/competition/actionbar/ActionBarSender.java index 45b3a7cc..1de36742 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/competition/actionbar/ActionBarSender.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/competition/actionbar/ActionBarSender.java @@ -65,7 +65,7 @@ public class ActionBarSender { @SuppressWarnings("DuplicatedCode") private void updatePrivatePlaceholders() { double score = competition.getRanking().getPlayerScore(player.getName()); - this.privateContext.arg(ContextKeys.SCORE_FORMATTED, String.format("%.2f", competition.getGoal().isReversed() ? -score : score)); + this.privateContext.arg(ContextKeys.SCORE_FORMATTED, score == 0 ? TranslationManager.miniMessageTranslation(MessageConstants.COMPETITION_NO_SCORE.build().key()) : String.format("%.2f", competition.getGoal().isReversed() ? -score : score)); this.privateContext.arg(ContextKeys.SCORE, competition.getGoal().isReversed() ? -score : score); int rank = competition.getRanking().getPlayerRank(player.getName()); this.privateContext.arg(ContextKeys.RANK, rank != -1 ? String.valueOf(rank) : TranslationManager.miniMessageTranslation(MessageConstants.COMPETITION_NO_RANK.build().key())); diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/competition/bossbar/BossBarSender.java b/core/src/main/java/net/momirealms/customfishing/bukkit/competition/bossbar/BossBarSender.java index 06af48b0..bbe26a28 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/competition/bossbar/BossBarSender.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/competition/bossbar/BossBarSender.java @@ -75,7 +75,7 @@ public class BossBarSender { @SuppressWarnings("DuplicatedCode") private void updatePrivatePlaceholders() { double score = competition.getRanking().getPlayerScore(player.getName()); - this.privateContext.arg(ContextKeys.SCORE_FORMATTED, String.format("%.2f", competition.getGoal().isReversed() ? -score : score)); + this.privateContext.arg(ContextKeys.SCORE_FORMATTED, score == 0 ? TranslationManager.miniMessageTranslation(MessageConstants.COMPETITION_NO_SCORE.build().key()) : String.format("%.2f", competition.getGoal().isReversed() ? -score : score)); this.privateContext.arg(ContextKeys.SCORE, competition.getGoal().isReversed() ? -score : score); int rank = competition.getRanking().getPlayerRank(player.getName()); this.privateContext.arg(ContextKeys.RANK, rank != -1 ? String.valueOf(rank) : TranslationManager.miniMessageTranslation(MessageConstants.COMPETITION_NO_RANK.build().key())); diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/loot/BukkitLootManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/loot/BukkitLootManager.java index 0bb23f39..e1c14b6e 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/loot/BukkitLootManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/loot/BukkitLootManager.java @@ -106,6 +106,11 @@ public class BukkitLootManager implements LootManager { return true; } + @Override + public Collection getRegisteredLoots() { + return lootMap.values(); + } + private void addGroupMember(String group, String member) { List members = groupMembersMap.get(group); if (members == null) { @@ -155,13 +160,16 @@ public class BukkitLootManager implements LootManager { } for (Pair, Double, Double>> pair : effect.weightOperations()) { double previous = lootWeightMap.getOrDefault(pair.left(), 0d); - if (previous > 0) + if (previous > 0) { lootWeightMap.put(pair.left(), pair.right().apply(context, previous)); + } } for (Pair, Double, Double>> pair : effect.weightOperationsIgnored()) { double previous = lootWeightMap.getOrDefault(pair.left(), 0d); lootWeightMap.put(pair.left(), pair.right().apply(context, previous)); } + + plugin.debug(lootWeightMap); String lootID = WeightUtils.getRandom(lootWeightMap); return Optional.ofNullable(lootID) .map(id -> getLoot(lootID).orElseThrow(() -> new RuntimeException("Could not find loot " + lootID))) diff --git a/core/src/main/resources/contents/item/default.yml b/core/src/main/resources/contents/item/default.yml index 0e51cbe6..333a34ab 100644 --- a/core/src/main/resources/contents/item/default.yml +++ b/core/src/main/resources/contents/item/default.yml @@ -916,6 +916,7 @@ red_snapper_fish: base: 10 bonus: 2.3 red_snapper_fish_silver_star: + amount: 7~9 show-in-fishfinder: false material: cod display: diff --git a/gradle.properties b/gradle.properties index 559464b8..dccd1e88 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=2.2.0 +project_version=2.2.1 config_version=34 project_group=net.momirealms