diff --git a/README.md b/README.md
index 3b130f12..cae5bc0a 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,14 @@
# Custom-Fishing

-
-
-
-
[](https://jitpack.io/#Xiao-MoMi/Custom-Fishing)
+
+
+
+
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