mirror of
https://github.com/Xiao-MoMi/Custom-Fishing.git
synced 2025-12-22 00:23:52 +00:00
1.0
This commit is contained in:
@@ -21,6 +21,9 @@ import net.kyori.adventure.bossbar.BossBar;
|
|||||||
import net.momirealms.customfishing.competition.CompetitionConfig;
|
import net.momirealms.customfishing.competition.CompetitionConfig;
|
||||||
import net.momirealms.customfishing.competition.Goal;
|
import net.momirealms.customfishing.competition.Goal;
|
||||||
import net.momirealms.customfishing.competition.bossbar.BossBarConfig;
|
import net.momirealms.customfishing.competition.bossbar.BossBarConfig;
|
||||||
|
import net.momirealms.customfishing.competition.reward.CommandImpl;
|
||||||
|
import net.momirealms.customfishing.competition.reward.MessageImpl;
|
||||||
|
import net.momirealms.customfishing.competition.reward.Reward;
|
||||||
import net.momirealms.customfishing.titlebar.Difficulty;
|
import net.momirealms.customfishing.titlebar.Difficulty;
|
||||||
import net.momirealms.customfishing.titlebar.Layout;
|
import net.momirealms.customfishing.titlebar.Layout;
|
||||||
import net.momirealms.customfishing.hook.skill.Aurelium;
|
import net.momirealms.customfishing.hook.skill.Aurelium;
|
||||||
@@ -59,7 +62,7 @@ public class ConfigReader{
|
|||||||
public static HashMap<String, CompetitionConfig> Competitions = new HashMap<>();
|
public static HashMap<String, CompetitionConfig> Competitions = new HashMap<>();
|
||||||
public static HashMap<String, CompetitionConfig> CompetitionsCommand = new HashMap<>();
|
public static HashMap<String, CompetitionConfig> CompetitionsCommand = new HashMap<>();
|
||||||
|
|
||||||
private static YamlConfiguration getConfig(String configName) {
|
public static YamlConfiguration getConfig(String configName) {
|
||||||
File file = new File(CustomFishing.instance.getDataFolder(), configName);
|
File file = new File(CustomFishing.instance.getDataFolder(), configName);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
CustomFishing.instance.saveResource(configName, false);
|
CustomFishing.instance.saveResource(configName, false);
|
||||||
@@ -366,7 +369,7 @@ public class ConfigReader{
|
|||||||
loot.setNick(loot.getName());
|
loot.setNick(loot.getName());
|
||||||
}
|
}
|
||||||
loot.setUnbreakable(config.getBoolean("items." + key + ".unbreakable",false));
|
loot.setUnbreakable(config.getBoolean("items." + key + ".unbreakable",false));
|
||||||
loot.setPoint((float) config.getDouble("items." + key + ".score"));
|
loot.setScore((float) config.getDouble("items." + key + ".score",0));
|
||||||
|
|
||||||
if (config.contains("items." + key + ".action.message"))
|
if (config.contains("items." + key + ".action.message"))
|
||||||
loot.setMsg(config.getString("items." + key + ".action.message"));
|
loot.setMsg(config.getString("items." + key + ".action.message"));
|
||||||
@@ -505,7 +508,7 @@ public class ConfigReader{
|
|||||||
}else {
|
}else {
|
||||||
loot.setShowInFinder(true);
|
loot.setShowInFinder(true);
|
||||||
}
|
}
|
||||||
loot.setPoint((float) config.getDouble("mobs." + key + ".score"));
|
loot.setScore((float) config.getDouble("mobs." + key + ".score",0));
|
||||||
/*
|
/*
|
||||||
设置捕获条件
|
设置捕获条件
|
||||||
*/
|
*/
|
||||||
@@ -673,6 +676,7 @@ public class ConfigReader{
|
|||||||
case "time" -> rodInstance.setTime(config.getDouble("rods." + key + ".modifier.time"));
|
case "time" -> rodInstance.setTime(config.getDouble("rods." + key + ".modifier.time"));
|
||||||
case "difficulty" -> rodInstance.setDifficulty(config.getInt("rods." + key + ".modifier.difficulty"));
|
case "difficulty" -> rodInstance.setDifficulty(config.getInt("rods." + key + ".modifier.difficulty"));
|
||||||
case "double-loot" -> rodInstance.setDoubleLoot(config.getDouble("rods." + key + ".modifier.double-loot"));
|
case "double-loot" -> rodInstance.setDoubleLoot(config.getDouble("rods." + key + ".modifier.double-loot"));
|
||||||
|
case "score" -> rodInstance.setScoreModifier(config.getDouble("rods." + key + ".modifier.score"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -750,6 +754,7 @@ public class ConfigReader{
|
|||||||
case "time" -> baitInstance.setTime(config.getDouble("baits." + key + ".modifier.time"));
|
case "time" -> baitInstance.setTime(config.getDouble("baits." + key + ".modifier.time"));
|
||||||
case "difficulty" -> baitInstance.setDifficulty(config.getInt("baits." + key + ".modifier.difficulty"));
|
case "difficulty" -> baitInstance.setDifficulty(config.getInt("baits." + key + ".modifier.difficulty"));
|
||||||
case "double-loot" -> baitInstance.setDoubleLoot(config.getDouble("baits." + key + ".modifier.double-loot"));
|
case "double-loot" -> baitInstance.setDoubleLoot(config.getDouble("baits." + key + ".modifier.double-loot"));
|
||||||
|
case "score" -> baitInstance.setScoreModifier(config.getDouble("baits." + key + ".modifier.score"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -791,10 +796,34 @@ public class ConfigReader{
|
|||||||
if (config.contains(key + ".broadcast.end")){
|
if (config.contains(key + ".broadcast.end")){
|
||||||
competitionConfig.setEndMessage(config.getStringList(key + ".broadcast.end"));
|
competitionConfig.setEndMessage(config.getStringList(key + ".broadcast.end"));
|
||||||
}
|
}
|
||||||
|
if (config.contains(key + ".prize")){
|
||||||
|
HashMap<String, List<Reward>> rewardsMap = new HashMap<>();
|
||||||
|
config.getConfigurationSection(key + ".prize").getKeys(false).forEach(rank -> {
|
||||||
|
List<Reward> rewards = new ArrayList<>();
|
||||||
|
if (config.contains(key + ".prize." + rank + ".messages")){
|
||||||
|
rewards.add(new MessageImpl(config.getStringList(key + ".prize." + rank + ".messages")));
|
||||||
|
}
|
||||||
|
if (config.contains(key + ".prize." + rank + ".commands")){
|
||||||
|
rewards.add(new CommandImpl(config.getStringList(key + ".prize." + rank + ".commands")));
|
||||||
|
}
|
||||||
|
rewardsMap.put(rank, rewards);
|
||||||
|
});
|
||||||
|
competitionConfig.setRewards(rewardsMap);
|
||||||
|
}
|
||||||
config.getStringList(key + ".start-time").forEach(time -> {
|
config.getStringList(key + ".start-time").forEach(time -> {
|
||||||
Competitions.put(time, competitionConfig);
|
Competitions.put(time, competitionConfig);
|
||||||
});
|
});
|
||||||
CompetitionsCommand.put(key, competitionConfig);
|
CompetitionsCommand.put(key, competitionConfig);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void tryEnableJedis(){
|
||||||
|
YamlConfiguration configuration = ConfigReader.getConfig("redis.yml");
|
||||||
|
if (configuration.getBoolean("redis.enable")){
|
||||||
|
JedisUtil.initializeRedis(configuration);
|
||||||
|
JedisUtil.useRedis = true;
|
||||||
|
}else {
|
||||||
|
JedisUtil.useRedis = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ import net.momirealms.customfishing.command.Execute;
|
|||||||
import net.momirealms.customfishing.command.TabComplete;
|
import net.momirealms.customfishing.command.TabComplete;
|
||||||
import net.momirealms.customfishing.competition.CompetitionSchedule;
|
import net.momirealms.customfishing.competition.CompetitionSchedule;
|
||||||
import net.momirealms.customfishing.competition.bossbar.BossBarManager;
|
import net.momirealms.customfishing.competition.bossbar.BossBarManager;
|
||||||
|
import net.momirealms.customfishing.helper.LibraryLoader;
|
||||||
import net.momirealms.customfishing.listener.PlayerListener;
|
import net.momirealms.customfishing.listener.PlayerListener;
|
||||||
import net.momirealms.customfishing.utils.AdventureManager;
|
import net.momirealms.customfishing.utils.AdventureManager;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.checkerframework.checker.units.qual.C;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -37,8 +37,14 @@ public final class CustomFishing extends JavaPlugin {
|
|||||||
private CompetitionSchedule competitionSchedule;
|
private CompetitionSchedule competitionSchedule;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onLoad(){
|
||||||
instance = this;
|
instance = this;
|
||||||
|
LibraryLoader.load("redis.clients","jedis","4.2.3","https://repo.maven.apache.org/maven2/");
|
||||||
|
LibraryLoader.load("org.apache.commons","commons-pool2","2.11.1","https://repo.maven.apache.org/maven2/");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
adventure = BukkitAudiences.create(this);
|
adventure = BukkitAudiences.create(this);
|
||||||
Objects.requireNonNull(Bukkit.getPluginCommand("customfishing")).setExecutor(new Execute());
|
Objects.requireNonNull(Bukkit.getPluginCommand("customfishing")).setExecutor(new Execute());
|
||||||
Objects.requireNonNull(Bukkit.getPluginCommand("customfishing")).setTabCompleter(new TabComplete());
|
Objects.requireNonNull(Bukkit.getPluginCommand("customfishing")).setTabCompleter(new TabComplete());
|
||||||
@@ -50,6 +56,7 @@ public final class CustomFishing extends JavaPlugin {
|
|||||||
competitionSchedule.checkTime();
|
competitionSchedule.checkTime();
|
||||||
Bukkit.getPluginManager().registerEvents(new BossBarManager(), this);
|
Bukkit.getPluginManager().registerEvents(new BossBarManager(), this);
|
||||||
}
|
}
|
||||||
|
ConfigReader.tryEnableJedis();
|
||||||
AdventureManager.consoleMessage("<gradient:#0070B3:#A0EACF>[CustomFishing] </gradient><color:#E1FFFF>Plugin Enabled!");
|
AdventureManager.consoleMessage("<gradient:#0070B3:#A0EACF>[CustomFishing] </gradient><color:#E1FFFF>Plugin Enabled!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,12 @@ import net.momirealms.customfishing.ConfigReader;
|
|||||||
import net.momirealms.customfishing.CustomFishing;
|
import net.momirealms.customfishing.CustomFishing;
|
||||||
import net.momirealms.customfishing.competition.bossbar.BossBarConfig;
|
import net.momirealms.customfishing.competition.bossbar.BossBarConfig;
|
||||||
import net.momirealms.customfishing.competition.bossbar.BossBarManager;
|
import net.momirealms.customfishing.competition.bossbar.BossBarManager;
|
||||||
import net.momirealms.customfishing.item.Loot;
|
import net.momirealms.customfishing.competition.ranking.Ranking;
|
||||||
|
import net.momirealms.customfishing.competition.ranking.RankingImpl;
|
||||||
|
import net.momirealms.customfishing.competition.ranking.RedisRankingImpl;
|
||||||
|
import net.momirealms.customfishing.competition.reward.Reward;
|
||||||
import net.momirealms.customfishing.utils.AdventureManager;
|
import net.momirealms.customfishing.utils.AdventureManager;
|
||||||
|
import net.momirealms.customfishing.utils.JedisUtil;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
@@ -43,6 +47,7 @@ public class Competition {
|
|||||||
private final BossBarConfig bossBarConfig;
|
private final BossBarConfig bossBarConfig;
|
||||||
private final List<String> startMessage;
|
private final List<String> startMessage;
|
||||||
private final List<String> endMessage;
|
private final List<String> endMessage;
|
||||||
|
private final HashMap<String, List<Reward>> rewardsMap;
|
||||||
|
|
||||||
public static long remainingTime;
|
public static long remainingTime;
|
||||||
public static float progress;
|
public static float progress;
|
||||||
@@ -55,21 +60,24 @@ public class Competition {
|
|||||||
this.bossBarConfig = competitionConfig.getBossBarConfig();
|
this.bossBarConfig = competitionConfig.getBossBarConfig();
|
||||||
this.startMessage = competitionConfig.getStartMessage();
|
this.startMessage = competitionConfig.getStartMessage();
|
||||||
this.endMessage = competitionConfig.getEndMessage();
|
this.endMessage = competitionConfig.getEndMessage();
|
||||||
|
this.rewardsMap = competitionConfig.getRewards();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void begin(boolean forceStart) {
|
public void begin(boolean forceStart) {
|
||||||
|
|
||||||
if (goal == Goal.RANDOM) {
|
if (goal == Goal.RANDOM) {
|
||||||
goal = getRandomGoal();
|
goal = getRandomGoal();
|
||||||
}
|
}
|
||||||
|
|
||||||
remainingTime = this.duration;
|
remainingTime = this.duration;
|
||||||
this.startTime = Instant.now().getEpochSecond();
|
this.startTime = Instant.now().getEpochSecond();
|
||||||
|
|
||||||
Collection<? extends Player> playerCollections = Bukkit.getOnlinePlayers();
|
Collection<? extends Player> playerCollections = Bukkit.getOnlinePlayers();
|
||||||
if (playerCollections.size() >= minPlayers || forceStart) {
|
if (playerCollections.size() >= minPlayers || forceStart) {
|
||||||
status = true;
|
status = true;
|
||||||
ranking = new Ranking();
|
if (JedisUtil.useRedis){
|
||||||
|
ranking = new RedisRankingImpl();
|
||||||
|
}else {
|
||||||
|
ranking = new RankingImpl();
|
||||||
|
}
|
||||||
startTimer();
|
startTimer();
|
||||||
if (startMessage != null){
|
if (startMessage != null){
|
||||||
playerCollections.forEach(player -> {
|
playerCollections.forEach(player -> {
|
||||||
@@ -118,16 +126,18 @@ public class Competition {
|
|||||||
BossBarManager.stopAllTimer();
|
BossBarManager.stopAllTimer();
|
||||||
this.timerTask.cancel();
|
this.timerTask.cancel();
|
||||||
status = false;
|
status = false;
|
||||||
|
givePrize();
|
||||||
if (endMessage != null){
|
if (endMessage != null){
|
||||||
List<String> newMessage = new ArrayList<>();
|
List<String> newMessage = new ArrayList<>();
|
||||||
endMessage.forEach(message -> {
|
endMessage.forEach(message -> {
|
||||||
float first = ranking.getScoreAt(1);
|
CompetitionPlayer[] competitionPlayers = ranking.getTop3Player();
|
||||||
float second = ranking.getScoreAt(2);
|
float first = Optional.ofNullable(competitionPlayers[0]).orElse(CompetitionPlayer.emptyPlayer).getScore();
|
||||||
float third = ranking.getScoreAt(3);
|
float second = Optional.ofNullable(competitionPlayers[1]).orElse(CompetitionPlayer.emptyPlayer).getScore();
|
||||||
|
float third = Optional.ofNullable(competitionPlayers[2]).orElse(CompetitionPlayer.emptyPlayer).getScore();
|
||||||
newMessage.add(message
|
newMessage.add(message
|
||||||
.replace("{1st}", Optional.ofNullable(ranking.getPlayerAt(1)).orElse(ConfigReader.Message.noPlayer))
|
.replace("{1st}", Optional.ofNullable(Optional.ofNullable(competitionPlayers[0]).orElse(CompetitionPlayer.emptyPlayer).getPlayer()).orElse(ConfigReader.Message.noPlayer))
|
||||||
.replace("{2nd}", Optional.ofNullable(ranking.getPlayerAt(2)).orElse(ConfigReader.Message.noPlayer))
|
.replace("{2nd}", Optional.ofNullable(Optional.ofNullable(competitionPlayers[1]).orElse(CompetitionPlayer.emptyPlayer).getPlayer()).orElse(ConfigReader.Message.noPlayer))
|
||||||
.replace("{3rd}", Optional.ofNullable(ranking.getPlayerAt(3)).orElse(ConfigReader.Message.noPlayer))
|
.replace("{3rd}", Optional.ofNullable(Optional.ofNullable(competitionPlayers[2]).orElse(CompetitionPlayer.emptyPlayer).getPlayer()).orElse(ConfigReader.Message.noPlayer))
|
||||||
.replace("{1st_points}", first < 0 ? ConfigReader.Message.noScore : String.format("%.1f",(first)))
|
.replace("{1st_points}", first < 0 ? ConfigReader.Message.noScore : String.format("%.1f",(first)))
|
||||||
.replace("{2nd_points}", second < 0 ? ConfigReader.Message.noScore : String.format("%.1f",(second)))
|
.replace("{2nd_points}", second < 0 ? ConfigReader.Message.noScore : String.format("%.1f",(second)))
|
||||||
.replace("{3rd_points}", third < 0 ? ConfigReader.Message.noScore : String.format("%.1f",(third))));
|
.replace("{3rd_points}", third < 0 ? ConfigReader.Message.noScore : String.format("%.1f",(third))));
|
||||||
@@ -138,7 +148,44 @@ public class Competition {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Bukkit.getScheduler().runTaskLaterAsynchronously(CustomFishing.instance, ()-> {
|
||||||
ranking.clear();
|
ranking.clear();
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void givePrize(){
|
||||||
|
if (ranking.getSize() != 0 && rewardsMap != null) {
|
||||||
|
Iterator<String> iterator = ranking.getIterator();
|
||||||
|
int i = 1;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
if (i < rewardsMap.size()) {
|
||||||
|
String playerName = iterator.next();
|
||||||
|
Player player = Bukkit.getPlayer(playerName);
|
||||||
|
if (player != null){
|
||||||
|
for (Reward reward : rewardsMap.get(String.valueOf(i))) {
|
||||||
|
reward.giveReward(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
List<Reward> rewards = rewardsMap.get("participation");
|
||||||
|
if (rewards != null) {
|
||||||
|
iterator.forEachRemaining(playerName -> {
|
||||||
|
Player player = Bukkit.getPlayer(playerName);
|
||||||
|
if (player != null){
|
||||||
|
for (Reward reward : rewards) {
|
||||||
|
reward.giveReward(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
@@ -148,18 +195,10 @@ public class Competition {
|
|||||||
status = false;
|
status = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refreshRanking(String player, Loot loot) {
|
public void refreshRanking(String player, float score) {
|
||||||
CompetitionPlayer competitionPlayer = ranking.getCompetitionPlayer(player);
|
if (this.goal != Goal.TOTAL_SCORE) score = 1.0f;
|
||||||
float score;
|
if (score == 0) return;
|
||||||
if (this.goal == Goal.TOTAL_POINTS) score = loot.getPoint();
|
ranking.refreshData(player, score);
|
||||||
else score = 1.0f;
|
|
||||||
if (competitionPlayer != null) {
|
|
||||||
ranking.removePlayer(competitionPlayer);
|
|
||||||
competitionPlayer.addScore(score);
|
|
||||||
ranking.addPlayer(competitionPlayer);
|
|
||||||
} else {
|
|
||||||
ranking.addPlayer(player, score);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Goal getRandomGoal() {
|
private Goal getRandomGoal() {
|
||||||
|
|||||||
@@ -18,7 +18,9 @@
|
|||||||
package net.momirealms.customfishing.competition;
|
package net.momirealms.customfishing.competition;
|
||||||
|
|
||||||
import net.momirealms.customfishing.competition.bossbar.BossBarConfig;
|
import net.momirealms.customfishing.competition.bossbar.BossBarConfig;
|
||||||
|
import net.momirealms.customfishing.competition.reward.Reward;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class CompetitionConfig {
|
public class CompetitionConfig {
|
||||||
@@ -30,6 +32,7 @@ public class CompetitionConfig {
|
|||||||
private Goal goal;
|
private Goal goal;
|
||||||
private BossBarConfig bossBarConfig;
|
private BossBarConfig bossBarConfig;
|
||||||
private final boolean enableBossBar;
|
private final boolean enableBossBar;
|
||||||
|
private HashMap<String, List<Reward>> rewards;
|
||||||
|
|
||||||
public CompetitionConfig(boolean enableBossBar){this.enableBossBar = enableBossBar;}
|
public CompetitionConfig(boolean enableBossBar){this.enableBossBar = enableBossBar;}
|
||||||
|
|
||||||
@@ -38,6 +41,7 @@ public class CompetitionConfig {
|
|||||||
public void setGoal(Goal goal) {this.goal = goal;}
|
public void setGoal(Goal goal) {this.goal = goal;}
|
||||||
public void setEndMessage(List<String> endMessage) {this.endMessage = endMessage;}
|
public void setEndMessage(List<String> endMessage) {this.endMessage = endMessage;}
|
||||||
public void setStartMessage(List<String> startMessage) {this.startMessage = startMessage;}
|
public void setStartMessage(List<String> startMessage) {this.startMessage = startMessage;}
|
||||||
|
public HashMap<String, List<Reward>> getRewards() {return rewards;}
|
||||||
|
|
||||||
public Goal getGoal() {return goal;}
|
public Goal getGoal() {return goal;}
|
||||||
public int getMinPlayers() {return minPlayers;}
|
public int getMinPlayers() {return minPlayers;}
|
||||||
@@ -46,4 +50,5 @@ public class CompetitionConfig {
|
|||||||
public boolean isEnableBossBar() {return enableBossBar;}
|
public boolean isEnableBossBar() {return enableBossBar;}
|
||||||
public List<String> getEndMessage() {return endMessage;}
|
public List<String> getEndMessage() {return endMessage;}
|
||||||
public List<String> getStartMessage() {return startMessage;}
|
public List<String> getStartMessage() {return startMessage;}
|
||||||
|
public void setRewards(HashMap<String, List<Reward>> rewards) {this.rewards = rewards;}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ public class CompetitionPlayer implements Comparable<CompetitionPlayer>{
|
|||||||
private final String player;
|
private final String player;
|
||||||
private float score;
|
private float score;
|
||||||
|
|
||||||
|
public static CompetitionPlayer emptyPlayer = new CompetitionPlayer(null, 0);
|
||||||
|
|
||||||
public CompetitionPlayer(String player, float score) {
|
public CompetitionPlayer(String player, float score) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.score = score;
|
this.score = score;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class CompetitionSchedule {
|
|||||||
public static boolean startCompetition(String competitionName){
|
public static boolean startCompetition(String competitionName){
|
||||||
CompetitionConfig competitionConfig = ConfigReader.CompetitionsCommand.get(competitionName);
|
CompetitionConfig competitionConfig = ConfigReader.CompetitionsCommand.get(competitionName);
|
||||||
if (competitionConfig == null) return false;
|
if (competitionConfig == null) return false;
|
||||||
if (competition != null){
|
if (competition != null && competition.isGoingOn()){
|
||||||
competition.end();
|
competition.end();
|
||||||
}
|
}
|
||||||
competition = new Competition(competitionConfig);
|
competition = new Competition(competitionConfig);
|
||||||
@@ -61,7 +61,7 @@ public class CompetitionSchedule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void startCompetition(CompetitionConfig competitionConfig){
|
public void startCompetition(CompetitionConfig competitionConfig){
|
||||||
if (competition != null){
|
if (competition != null && competition.isGoingOn()){
|
||||||
competition.end();
|
competition.end();
|
||||||
}
|
}
|
||||||
competition = new Competition(competitionConfig);
|
competition = new Competition(competitionConfig);
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ package net.momirealms.customfishing.competition;
|
|||||||
|
|
||||||
public enum Goal {
|
public enum Goal {
|
||||||
|
|
||||||
TOTAL_POINTS,
|
TOTAL_SCORE,
|
||||||
CATCH_AMOUNT,
|
CATCH_AMOUNT,
|
||||||
RANDOM
|
RANDOM
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class BossBarManager implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void joinCompetition(Player player){
|
public static void joinCompetition(Player player){
|
||||||
if (cache.get(player) == null){
|
if (cache.get(player) == null) {
|
||||||
BossBarTimer timerTask = new BossBarTimer(player, CompetitionSchedule.competition.getBossBarConfig());
|
BossBarTimer timerTask = new BossBarTimer(player, CompetitionSchedule.competition.getBossBarConfig());
|
||||||
cache.put(player, timerTask);
|
cache.put(player, timerTask);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package net.momirealms.customfishing.competition.ranking;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.competition.CompetitionPlayer;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
public interface Ranking {
|
||||||
|
void clear();
|
||||||
|
CompetitionPlayer getCompetitionPlayer(String player);
|
||||||
|
Iterator<String> getIterator();
|
||||||
|
int getSize();
|
||||||
|
String getPlayerRank(String player);
|
||||||
|
CompetitionPlayer[] getTop3Player();
|
||||||
|
void refreshData(String player, float score);
|
||||||
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) <2022> <XiaoMoMi>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.momirealms.customfishing.competition.ranking;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.competition.CompetitionPlayer;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class RankingImpl implements Ranking{
|
||||||
|
|
||||||
|
private final Set<CompetitionPlayer> competitionPlayers = Collections.synchronizedSet(new TreeSet<>());
|
||||||
|
|
||||||
|
public void addPlayer(CompetitionPlayer competitionPlayer) {
|
||||||
|
competitionPlayers.add(competitionPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePlayer(CompetitionPlayer competitionPlayer) {
|
||||||
|
competitionPlayers.removeIf(e -> e == competitionPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clear() {
|
||||||
|
competitionPlayers.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompetitionPlayer getCompetitionPlayer(String player) {
|
||||||
|
for (CompetitionPlayer competitionPlayer : competitionPlayers) {
|
||||||
|
if (competitionPlayer.getPlayer().equals(player)) {
|
||||||
|
return competitionPlayer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<String> getIterator() {
|
||||||
|
List<String> players = new ArrayList<>();
|
||||||
|
for (CompetitionPlayer competitionPlayer: competitionPlayers){
|
||||||
|
players.add(competitionPlayer.getPlayer());
|
||||||
|
}
|
||||||
|
return players.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSize() {
|
||||||
|
return competitionPlayers.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPlayerRank(String player) {
|
||||||
|
int index = 1;
|
||||||
|
for (CompetitionPlayer competitionPlayer : competitionPlayers) {
|
||||||
|
if (competitionPlayer.getPlayer().equals(player)) {
|
||||||
|
return String.valueOf(index);
|
||||||
|
}else {
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompetitionPlayer[] getTop3Player() {
|
||||||
|
CompetitionPlayer[] competitionPlayers = new CompetitionPlayer[3];
|
||||||
|
int index = 1;
|
||||||
|
for (CompetitionPlayer competitionPlayer : this.competitionPlayers) {
|
||||||
|
if (index == 1) {
|
||||||
|
competitionPlayers[0] = competitionPlayer;
|
||||||
|
}
|
||||||
|
if (index == 2) {
|
||||||
|
competitionPlayers[1] = competitionPlayer;
|
||||||
|
}
|
||||||
|
if (index == 3) {
|
||||||
|
competitionPlayers[2] = competitionPlayer;
|
||||||
|
return competitionPlayers;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return competitionPlayers;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getPlayerAt(int i) {
|
||||||
|
int index = 1;
|
||||||
|
for (CompetitionPlayer competitionPlayer : competitionPlayers) {
|
||||||
|
if (index == i) {
|
||||||
|
return competitionPlayer.getPlayer();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public float getScoreAt(int i) {
|
||||||
|
int index = 1;
|
||||||
|
for (CompetitionPlayer competitionPlayer : competitionPlayers) {
|
||||||
|
if (index == i) {
|
||||||
|
return competitionPlayer.getScore();
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return -1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void refreshData(String player, float score) {
|
||||||
|
CompetitionPlayer competitionPlayer = getCompetitionPlayer(player);
|
||||||
|
if (competitionPlayer != null) {
|
||||||
|
removePlayer(competitionPlayer);
|
||||||
|
competitionPlayer.addScore(score);
|
||||||
|
addPlayer(competitionPlayer);
|
||||||
|
} else {
|
||||||
|
competitionPlayer = new CompetitionPlayer(player, score);
|
||||||
|
addPlayer(competitionPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
package net.momirealms.customfishing.competition.ranking;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.competition.CompetitionPlayer;
|
||||||
|
import net.momirealms.customfishing.utils.JedisUtil;
|
||||||
|
import redis.clients.jedis.Jedis;
|
||||||
|
import redis.clients.jedis.resps.Tuple;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class RedisRankingImpl implements Ranking{
|
||||||
|
|
||||||
|
public void addPlayer(CompetitionPlayer competitionPlayer) {
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
jedis.zadd("cf_competition", competitionPlayer.getScore(), competitionPlayer.getPlayer());
|
||||||
|
jedis.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePlayer(CompetitionPlayer competitionPlayer) {
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
jedis.zrem("cf_competition", competitionPlayer.getPlayer());
|
||||||
|
jedis.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clear() {
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
jedis.zremrangeByRank("cf_competition",0,-1);
|
||||||
|
jedis.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompetitionPlayer getCompetitionPlayer(String player) {
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
Double score = jedis.zscore("cf_competition", player);
|
||||||
|
jedis.close();
|
||||||
|
if (score == 0) return null;
|
||||||
|
return new CompetitionPlayer(player, Float.parseFloat(score.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<String> getIterator() {
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
List<String> players = jedis.zrevrange("cf_competition", 0, -1);
|
||||||
|
jedis.close();
|
||||||
|
return players.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSize() {
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
long size = jedis.zcard("cf_competition");
|
||||||
|
jedis.close();
|
||||||
|
return (int) size;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPlayerRank(String player) {
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
Long rank = jedis.zrevrank("cf_competition", player);
|
||||||
|
jedis.close();
|
||||||
|
if(rank == null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return String.valueOf(rank + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompetitionPlayer[] getTop3Player() {
|
||||||
|
CompetitionPlayer[] competitionPlayers = new CompetitionPlayer[3];
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
List<Tuple> players = jedis.zrevrangeWithScores("cf_competition", 0, -1);
|
||||||
|
jedis.close();
|
||||||
|
int index = 1;
|
||||||
|
for (Tuple tuple : players){
|
||||||
|
if (index == 1){
|
||||||
|
competitionPlayers[0] = new CompetitionPlayer(tuple.getElement(), (float) tuple.getScore());
|
||||||
|
}
|
||||||
|
if (index == 2){
|
||||||
|
competitionPlayers[1] = new CompetitionPlayer(tuple.getElement(), (float) tuple.getScore());
|
||||||
|
}
|
||||||
|
if (index == 3){
|
||||||
|
competitionPlayers[2] = new CompetitionPlayer(tuple.getElement(), (float) tuple.getScore());
|
||||||
|
return competitionPlayers;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return competitionPlayers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void refreshData(String player, float score) {
|
||||||
|
Jedis jedis = JedisUtil.getJedis();
|
||||||
|
jedis.zincrby("cf_competition", score, player);
|
||||||
|
jedis.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) <2022> <XiaoMoMi>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.momirealms.customfishing.competition.reward;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CommandImpl implements Reward{
|
||||||
|
|
||||||
|
private final List<String> commands;
|
||||||
|
|
||||||
|
public CommandImpl(List<String> commands){
|
||||||
|
this.commands = commands;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void giveReward(Player player) {
|
||||||
|
commands.forEach(command -> {
|
||||||
|
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player}", player.getName()));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) <2022> <XiaoMoMi>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.momirealms.customfishing.competition.reward;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.utils.AdventureManager;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MessageImpl implements Reward{
|
||||||
|
|
||||||
|
private final List<String> messages;
|
||||||
|
|
||||||
|
public MessageImpl(List<String> messages){
|
||||||
|
this.messages = messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void giveReward(Player player) {
|
||||||
|
if (!player.isOnline()) return;
|
||||||
|
messages.forEach(message -> {
|
||||||
|
AdventureManager.playerMessage(player, message);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,6 +31,7 @@ public class Bait implements Item{
|
|||||||
private HashMap<String, Double> weightMQ;
|
private HashMap<String, Double> weightMQ;
|
||||||
private HashMap<String, Integer> weightPM;
|
private HashMap<String, Integer> weightPM;
|
||||||
private double time;
|
private double time;
|
||||||
|
private double scoreModifier;
|
||||||
private double doubleLoot;
|
private double doubleLoot;
|
||||||
private int difficulty;
|
private int difficulty;
|
||||||
private final String material;
|
private final String material;
|
||||||
@@ -43,7 +44,6 @@ public class Bait implements Item{
|
|||||||
this.material = material;
|
this.material = material;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setName(String name) {this.name = name;}
|
public void setName(String name) {this.name = name;}
|
||||||
public void setItemFlags(List<ItemFlag> itemFlags) {this.itemFlags = itemFlags;}
|
public void setItemFlags(List<ItemFlag> itemFlags) {this.itemFlags = itemFlags;}
|
||||||
public void setDifficulty(int difficulty) {this.difficulty = difficulty;}
|
public void setDifficulty(int difficulty) {this.difficulty = difficulty;}
|
||||||
@@ -56,12 +56,14 @@ public class Bait implements Item{
|
|||||||
public void setEnchantment(List<net.momirealms.customfishing.utils.Enchantment> enchantment) {this.enchantment = enchantment;}
|
public void setEnchantment(List<net.momirealms.customfishing.utils.Enchantment> enchantment) {this.enchantment = enchantment;}
|
||||||
public void setCustommodeldata(int custommodeldata){this.custommodeldata = custommodeldata;}
|
public void setCustommodeldata(int custommodeldata){this.custommodeldata = custommodeldata;}
|
||||||
public void setUnbreakable(boolean unbreakable){this.unbreakable = unbreakable;}
|
public void setUnbreakable(boolean unbreakable){this.unbreakable = unbreakable;}
|
||||||
|
public void setScoreModifier(double scoreModifier) {this.scoreModifier = scoreModifier;}
|
||||||
|
|
||||||
public double getDoubleLoot() {return this.doubleLoot;}
|
public double getDoubleLoot() {return this.doubleLoot;}
|
||||||
public int getDifficulty() {return difficulty;}
|
public int getDifficulty() {return difficulty;}
|
||||||
public double getTime() {return time;}
|
public double getTime() {return time;}
|
||||||
public HashMap<String, Double> getWeightMQ() {return weightMQ;}
|
public HashMap<String, Double> getWeightMQ() {return weightMQ;}
|
||||||
public HashMap<String, Integer> getWeightPM() {return weightPM;}
|
public HashMap<String, Integer> getWeightPM() {return weightPM;}
|
||||||
|
public double getScoreModifier() {return scoreModifier;}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isUnbreakable() {return this.unbreakable;}
|
public boolean isUnbreakable() {return this.unbreakable;}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class Loot implements Item {
|
|||||||
private int custommodeldata;
|
private int custommodeldata;
|
||||||
private boolean unbreakable;
|
private boolean unbreakable;
|
||||||
private double skillXP;
|
private double skillXP;
|
||||||
private float point;
|
private float score;
|
||||||
|
|
||||||
public Loot(String key, Difficulty difficulty, int weight, int time){
|
public Loot(String key, Difficulty difficulty, int weight, int time){
|
||||||
this.key = key;
|
this.key = key;
|
||||||
@@ -75,7 +75,7 @@ public class Loot implements Item {
|
|||||||
public String getGroup() {return group;}
|
public String getGroup() {return group;}
|
||||||
public int getExp() {return exp;}
|
public int getExp() {return exp;}
|
||||||
public double getSkillXP() {return skillXP;}
|
public double getSkillXP() {return skillXP;}
|
||||||
public float getPoint() {return point;}
|
public float getScore() {return score;}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getLore(){return this.lore;}
|
public List<String> getLore(){return this.lore;}
|
||||||
@@ -114,5 +114,5 @@ public class Loot implements Item {
|
|||||||
public void setCustommodeldata(int custommodeldata){this.custommodeldata = custommodeldata;}
|
public void setCustommodeldata(int custommodeldata){this.custommodeldata = custommodeldata;}
|
||||||
public void setUnbreakable(boolean unbreakable){this.unbreakable = unbreakable;}
|
public void setUnbreakable(boolean unbreakable){this.unbreakable = unbreakable;}
|
||||||
public void setSkillXP(double skillXP) {this.skillXP = skillXP;}
|
public void setSkillXP(double skillXP) {this.skillXP = skillXP;}
|
||||||
public void setPoint(float point) {this.point = point;}
|
public void setScore(float score) {this.score = score;}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public class Rod implements Item{
|
|||||||
private HashMap<String, Double> weightMQ;
|
private HashMap<String, Double> weightMQ;
|
||||||
private HashMap<String, Integer> weightPM;
|
private HashMap<String, Integer> weightPM;
|
||||||
private double time;
|
private double time;
|
||||||
|
private double scoreModifier;
|
||||||
private int difficulty;
|
private int difficulty;
|
||||||
private double doubleLoot;
|
private double doubleLoot;
|
||||||
private List<net.momirealms.customfishing.utils.Enchantment> enchantment;
|
private List<net.momirealms.customfishing.utils.Enchantment> enchantment;
|
||||||
@@ -51,12 +52,14 @@ public class Rod implements Item{
|
|||||||
public void setCustommodeldata(int custommodeldata){this.custommodeldata = custommodeldata;}
|
public void setCustommodeldata(int custommodeldata){this.custommodeldata = custommodeldata;}
|
||||||
public void setUnbreakable(boolean unbreakable){this.unbreakable = unbreakable;}
|
public void setUnbreakable(boolean unbreakable){this.unbreakable = unbreakable;}
|
||||||
public void setName(String name) {this.name = name;}
|
public void setName(String name) {this.name = name;}
|
||||||
|
public void setScoreModifier(double scoreModifier) {this.scoreModifier = scoreModifier;}
|
||||||
|
|
||||||
public double getTime() {return time;}
|
public double getTime() {return time;}
|
||||||
public HashMap<String, Double> getWeightMQ() {return weightMQ;}
|
public HashMap<String, Double> getWeightMQ() {return weightMQ;}
|
||||||
public HashMap<String, Integer> getWeightPM() {return weightPM;}
|
public HashMap<String, Integer> getWeightPM() {return weightPM;}
|
||||||
public int getDifficulty() {return difficulty;}
|
public int getDifficulty() {return difficulty;}
|
||||||
public double getDoubleLoot() {return this.doubleLoot;}
|
public double getDoubleLoot() {return this.doubleLoot;}
|
||||||
|
public double getScoreModifier() {return scoreModifier;}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isUnbreakable() {return this.unbreakable;}
|
public boolean isUnbreakable() {return this.unbreakable;}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package net.momirealms.customfishing.listener;
|
|||||||
|
|
||||||
import de.tr7zw.changeme.nbtapi.NBTCompound;
|
import de.tr7zw.changeme.nbtapi.NBTCompound;
|
||||||
import de.tr7zw.changeme.nbtapi.NBTItem;
|
import de.tr7zw.changeme.nbtapi.NBTItem;
|
||||||
import net.momirealms.customfishing.competition.Competition;
|
|
||||||
import net.momirealms.customfishing.competition.CompetitionSchedule;
|
import net.momirealms.customfishing.competition.CompetitionSchedule;
|
||||||
import net.momirealms.customfishing.competition.bossbar.BossBarManager;
|
import net.momirealms.customfishing.competition.bossbar.BossBarManager;
|
||||||
import net.momirealms.customfishing.hook.MythicMobsUtils;
|
import net.momirealms.customfishing.hook.MythicMobsUtils;
|
||||||
@@ -35,6 +34,7 @@ import net.momirealms.customfishing.item.Rod;
|
|||||||
import net.momirealms.customfishing.requirements.FishingCondition;
|
import net.momirealms.customfishing.requirements.FishingCondition;
|
||||||
import net.momirealms.customfishing.requirements.Requirement;
|
import net.momirealms.customfishing.requirements.Requirement;
|
||||||
import net.momirealms.customfishing.titlebar.Timer;
|
import net.momirealms.customfishing.titlebar.Timer;
|
||||||
|
import net.momirealms.customfishing.utils.Modifier;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@@ -61,8 +61,7 @@ public class PlayerListener implements Listener {
|
|||||||
|
|
||||||
private final HashMap<Player, Long> coolDown = new HashMap<>();
|
private final HashMap<Player, Long> coolDown = new HashMap<>();
|
||||||
private final HashMap<Player, Loot> nextLoot = new HashMap<>();
|
private final HashMap<Player, Loot> nextLoot = new HashMap<>();
|
||||||
private final HashMap<Player, Integer> modifier = new HashMap<>();
|
private final HashMap<Player, Modifier> modifiers = new HashMap<>();
|
||||||
private final HashSet<Player> willDouble = new HashSet<>();
|
|
||||||
public static ConcurrentHashMap<Player, FishingPlayer> fishingPlayers = new ConcurrentHashMap<>();
|
public static ConcurrentHashMap<Player, FishingPlayer> fishingPlayers = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -88,6 +87,7 @@ public class PlayerListener implements Listener {
|
|||||||
boolean noRod = true;
|
boolean noRod = true;
|
||||||
double timeModifier = 1;
|
double timeModifier = 1;
|
||||||
double doubleLoot = 0;
|
double doubleLoot = 0;
|
||||||
|
double scoreModifier = 1;
|
||||||
int difficultyModifier = 0;
|
int difficultyModifier = 0;
|
||||||
|
|
||||||
HashMap<String, Integer> pm1 = new HashMap<>();
|
HashMap<String, Integer> pm1 = new HashMap<>();
|
||||||
@@ -107,6 +107,7 @@ public class PlayerListener implements Listener {
|
|||||||
if (rod.getTime() != 0) timeModifier *= rod.getTime();
|
if (rod.getTime() != 0) timeModifier *= rod.getTime();
|
||||||
if (rod.getDoubleLoot() != 0) doubleLoot += rod.getDoubleLoot();
|
if (rod.getDoubleLoot() != 0) doubleLoot += rod.getDoubleLoot();
|
||||||
if (rod.getDifficulty() != 0) difficultyModifier += rod.getDifficulty();
|
if (rod.getDifficulty() != 0) difficultyModifier += rod.getDifficulty();
|
||||||
|
if (rod.getScoreModifier() != 0) scoreModifier *= rod.getScoreModifier();
|
||||||
noRod = false;
|
noRod = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -119,6 +120,7 @@ public class PlayerListener implements Listener {
|
|||||||
if (bait.getTime() != 0) timeModifier *= bait.getTime();
|
if (bait.getTime() != 0) timeModifier *= bait.getTime();
|
||||||
if (bait.getDoubleLoot() != 0) doubleLoot += bait.getDoubleLoot();
|
if (bait.getDoubleLoot() != 0) doubleLoot += bait.getDoubleLoot();
|
||||||
if (bait.getDifficulty() != 0) difficultyModifier += bait.getDifficulty();
|
if (bait.getDifficulty() != 0) difficultyModifier += bait.getDifficulty();
|
||||||
|
if (bait.getScoreModifier() != 0) scoreModifier *= bait.getScoreModifier();
|
||||||
mainHandItem.setAmount(mainHandItem.getAmount() - 1);
|
mainHandItem.setAmount(mainHandItem.getAmount() - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -142,6 +144,7 @@ public class PlayerListener implements Listener {
|
|||||||
if (bait.getTime() != 0) timeModifier *= bait.getTime();
|
if (bait.getTime() != 0) timeModifier *= bait.getTime();
|
||||||
if (bait.getDoubleLoot() != 0) doubleLoot += bait.getDoubleLoot();
|
if (bait.getDoubleLoot() != 0) doubleLoot += bait.getDoubleLoot();
|
||||||
if (bait.getDifficulty() != 0) difficultyModifier += bait.getDifficulty();
|
if (bait.getDifficulty() != 0) difficultyModifier += bait.getDifficulty();
|
||||||
|
if (bait.getScoreModifier() != 0) scoreModifier *= bait.getScoreModifier();
|
||||||
offHandItem.setAmount(offHandItem.getAmount() - 1);
|
offHandItem.setAmount(offHandItem.getAmount() - 1);
|
||||||
}
|
}
|
||||||
}else if (noRod && offHandCompound.getString("type").equals("rod")){
|
}else if (noRod && offHandCompound.getString("type").equals("rod")){
|
||||||
@@ -153,6 +156,7 @@ public class PlayerListener implements Listener {
|
|||||||
if (rod.getTime() != 0) timeModifier *= rod.getTime();
|
if (rod.getTime() != 0) timeModifier *= rod.getTime();
|
||||||
if (rod.getDoubleLoot() != 0) doubleLoot += rod.getDoubleLoot();
|
if (rod.getDoubleLoot() != 0) doubleLoot += rod.getDoubleLoot();
|
||||||
if (rod.getDifficulty() != 0) difficultyModifier += rod.getDifficulty();
|
if (rod.getDifficulty() != 0) difficultyModifier += rod.getDifficulty();
|
||||||
|
if (rod.getScoreModifier() != 0) scoreModifier *= rod.getScoreModifier();
|
||||||
noRod = false;
|
noRod = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -179,15 +183,12 @@ public class PlayerListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//双倍掉落
|
Modifier modifier = new Modifier();
|
||||||
if (doubleLoot > Math.random()) {
|
modifier.setDifficultyModifier(difficultyModifier);
|
||||||
willDouble.add(player);
|
modifier.setScoreModifier(scoreModifier);
|
||||||
}else {
|
modifier.setWillDouble(doubleLoot > Math.random());
|
||||||
willDouble.remove(player);
|
//修改
|
||||||
}
|
modifiers.put(player, modifier);
|
||||||
|
|
||||||
//难度修改
|
|
||||||
modifier.put(player, difficultyModifier);
|
|
||||||
|
|
||||||
double[] weights = new double[possibleLoots.size()];
|
double[] weights = new double[possibleLoots.size()];
|
||||||
int index = 0;
|
int index = 0;
|
||||||
@@ -262,7 +263,7 @@ public class PlayerListener implements Listener {
|
|||||||
});
|
});
|
||||||
|
|
||||||
int difficulty = lootInstance.getDifficulty().getSpeed();
|
int difficulty = lootInstance.getDifficulty().getSpeed();
|
||||||
difficulty += modifier.get(player);
|
difficulty += Objects.requireNonNullElse(modifiers.get(player).getDifficultyModifier(), 0);;
|
||||||
if (difficulty < 1){
|
if (difficulty < 1){
|
||||||
difficulty = 1;
|
difficulty = 1;
|
||||||
}
|
}
|
||||||
@@ -311,7 +312,7 @@ public class PlayerListener implements Listener {
|
|||||||
Vector vector = player.getLocation().subtract(location).toVector().multiply(0.1);
|
Vector vector = player.getLocation().subtract(location).toVector().multiply(0.1);
|
||||||
vector = vector.setY((vector.getY()+0.2)*1.2);
|
vector = vector.setY((vector.getY()+0.2)*1.2);
|
||||||
item.setVelocity(vector);
|
item.setVelocity(vector);
|
||||||
if (willDouble.contains(player)){
|
if (modifiers.get(player).willDouble()){
|
||||||
Entity item2 = location.getWorld().dropItem(location, itemStack);
|
Entity item2 = location.getWorld().dropItem(location, itemStack);
|
||||||
item2.setVelocity(vector);
|
item2.setVelocity(vector);
|
||||||
}
|
}
|
||||||
@@ -342,7 +343,8 @@ public class PlayerListener implements Listener {
|
|||||||
ConfigReader.Config.skillXP.addXp(player, lootInstance.getSkillXP());
|
ConfigReader.Config.skillXP.addXp(player, lootInstance.getSkillXP());
|
||||||
}
|
}
|
||||||
if (CompetitionSchedule.competition != null && CompetitionSchedule.competition.isGoingOn()){
|
if (CompetitionSchedule.competition != null && CompetitionSchedule.competition.isGoingOn()){
|
||||||
CompetitionSchedule.competition.refreshRanking(player.getName(), lootInstance);
|
float score = (float) (lootInstance.getScore() * modifiers.get(player).getScoreModifier());
|
||||||
|
CompetitionSchedule.competition.refreshRanking(player.getName(), score);
|
||||||
BossBarManager.joinCompetition(player);
|
BossBarManager.joinCompetition(player);
|
||||||
}
|
}
|
||||||
//发送Title
|
//发送Title
|
||||||
@@ -373,8 +375,7 @@ public class PlayerListener implements Listener {
|
|||||||
player.removePotionEffect(PotionEffectType.SLOW);
|
player.removePotionEffect(PotionEffectType.SLOW);
|
||||||
coolDown.remove(player);
|
coolDown.remove(player);
|
||||||
nextLoot.remove(player);
|
nextLoot.remove(player);
|
||||||
modifier.remove(player);
|
modifiers.remove(player);
|
||||||
willDouble.remove(player);
|
|
||||||
fishingPlayers.remove(player);
|
fishingPlayers.remove(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package net.momirealms.customfishing.utils;
|
||||||
|
|
||||||
|
import net.momirealms.customfishing.helper.Log;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import redis.clients.jedis.Jedis;
|
||||||
|
import redis.clients.jedis.JedisPool;
|
||||||
|
import redis.clients.jedis.JedisPoolConfig;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class JedisUtil {
|
||||||
|
|
||||||
|
private static JedisPool jedisPool;
|
||||||
|
public static boolean useRedis;
|
||||||
|
|
||||||
|
public static Jedis getJedis(){
|
||||||
|
return jedisPool.getResource();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initializeRedis(YamlConfiguration configuration){
|
||||||
|
|
||||||
|
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
|
||||||
|
jedisPoolConfig.setTestWhileIdle(true);
|
||||||
|
jedisPoolConfig.setTimeBetweenEvictionRunsMillis(30000);
|
||||||
|
jedisPoolConfig.setNumTestsPerEvictionRun(-1);
|
||||||
|
jedisPoolConfig.setMinEvictableIdleTimeMillis(configuration.getInt("redis.MinEvictableIdleTimeMillis",1800000));
|
||||||
|
jedisPoolConfig.setMaxTotal(configuration.getInt("redis.MaxTotal",8));
|
||||||
|
jedisPoolConfig.setMaxIdle(configuration.getInt("redis.MaxIdle",8));
|
||||||
|
jedisPoolConfig.setMinIdle(configuration.getInt("redis.MinIdle",1));
|
||||||
|
jedisPoolConfig.setMaxWaitMillis(configuration.getInt("redis.MaxWaitMillis",30000));
|
||||||
|
|
||||||
|
jedisPool = new JedisPool(jedisPoolConfig, configuration.getString("redis.host","localhost"), configuration.getInt("redis.port",6379));
|
||||||
|
|
||||||
|
AdventureManager.consoleMessage("<gradient:#0070B3:#A0EACF>[CustomFishing] <color:#E1FFFF>Redis Enabled!");
|
||||||
|
|
||||||
|
List<Jedis> minIdleJedisList = new ArrayList<>(jedisPoolConfig.getMinIdle());
|
||||||
|
for (int i = 0; i < jedisPoolConfig.getMinIdle(); i++) {
|
||||||
|
Jedis jedis;
|
||||||
|
try {
|
||||||
|
jedis = jedisPool.getResource();
|
||||||
|
minIdleJedisList.add(jedis);
|
||||||
|
jedis.ping();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.warn(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < jedisPoolConfig.getMinIdle(); i++) {
|
||||||
|
Jedis jedis;
|
||||||
|
try {
|
||||||
|
jedis = minIdleJedisList.get(i);
|
||||||
|
jedis.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.warn(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package net.momirealms.customfishing.utils;
|
||||||
|
|
||||||
|
public class Modifier {
|
||||||
|
|
||||||
|
private int difficulty;
|
||||||
|
private double score;
|
||||||
|
private boolean willDouble;
|
||||||
|
|
||||||
|
public int getDifficultyModifier() {
|
||||||
|
return difficulty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDifficultyModifier(int difficulty) {
|
||||||
|
this.difficulty = difficulty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getScoreModifier() {
|
||||||
|
return score;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScoreModifier(double score) {
|
||||||
|
this.score = score;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean willDouble() {
|
||||||
|
return willDouble;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWillDouble(boolean willDouble) {
|
||||||
|
this.willDouble = willDouble;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,3 +24,5 @@ baits:
|
|||||||
difficulty: 3
|
difficulty: 3
|
||||||
#双倍掉落概率
|
#双倍掉落概率
|
||||||
double-loot: 0.05
|
double-loot: 0.05
|
||||||
|
#比赛分数加成
|
||||||
|
score: 1.2
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
example:
|
example:
|
||||||
|
|
||||||
#TOTAL_POINTS
|
#TOTAL_SCORE
|
||||||
#CATCH_AMOUNT
|
#CATCH_AMOUNT
|
||||||
goal: TOTAL_POINTS
|
goal: TOTAL_SCORE
|
||||||
|
|
||||||
start-time:
|
start-time:
|
||||||
- '5:30'
|
- '5:30'
|
||||||
|
|||||||
@@ -15,3 +15,5 @@ commands:
|
|||||||
usage: /customfishing
|
usage: /customfishing
|
||||||
description: main command
|
description: main command
|
||||||
permission: customfishing.admin
|
permission: customfishing.admin
|
||||||
|
aliases:
|
||||||
|
- cfishing
|
||||||
9
src/main/resources/redis.yml
Normal file
9
src/main/resources/redis.yml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
redis:
|
||||||
|
enable: false
|
||||||
|
host: localhost
|
||||||
|
port: 6379
|
||||||
|
MaxTotal: 10
|
||||||
|
MaxIdle: 10
|
||||||
|
MinIdle: 1
|
||||||
|
MaxWaitMillis: 30000
|
||||||
|
MinEvictableIdleTimeMillis: 1800000
|
||||||
@@ -22,3 +22,5 @@ rods:
|
|||||||
difficulty: -1
|
difficulty: -1
|
||||||
#双倍掉落概率
|
#双倍掉落概率
|
||||||
double-loot: 0.05
|
double-loot: 0.05
|
||||||
|
#比赛分数加成
|
||||||
|
score: 1.2
|
||||||
Reference in New Issue
Block a user