From 23349618ff45a77677f381441fd87e001b688ef7 Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sun, 3 Mar 2024 22:46:38 +0300 Subject: [PATCH] license --- LICENSE | 13 + README.md | 41 +++ pom.xml | 33 +- .../rewardplugin/FormDataHandler.java | 2 +- .../ru.froggymonitor/rewardplugin/Main.java | 344 +++--------------- .../ru.froggymonitor/rewardplugin/Reward.java | 48 +++ .../rewardplugin/SitePart.java | 110 +++--- .../rewardplugin/UnrealConfig.java | 55 +-- src/main/resources/config.yml | 117 ++---- src/main/resources/plugin.yml | 18 +- 10 files changed, 244 insertions(+), 537 deletions(-) diff --git a/LICENSE b/LICENSE index e69de29..07b7a81 100644 --- a/LICENSE +++ b/LICENSE @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + +Copyright (C) 2004 Sam Hocevar + +Everyone is permitted to copy and distribute verbatim or modified +copies of this license document, and changing it is allowed as long +as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. \ No newline at end of file diff --git a/README.md b/README.md index 93123bf..16f524b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,43 @@ # FroggyMonitorReward Плагин для награды игроков за голоса и отзывы на FroggyMonitor + +Плагин запускает сайт, +на который будут приходить запросы от +FroggyMonitor на поощрение игрока, +плагин их читает и выполняет действие из конфига + +## Конфиг +```yml +site_host: localhost # IP адрес для сайта +site_port: 8080 # Порт для сайта +site_backlog: 5 # Максимальное кол-во подключений одновременно + +secret_token: "ваш_секретный_токен" # Секретный токен с FroggyMonitor + +comment_page: "/api/comment" # Страница для награды за отзыв +vote_page: "/api/vote" # Страница для награды за голос + +# Что указать в FroggyMonitor? +# В URL для поощрения за отзыв: +# http://{ip_сервера}:{site_port}{comment_page} +# -> http://example.com:8080/api/comment +# В URL для поощрения за голос: +# http://{ip_сервера}:{site_port}{vote_page} +# -> http://example.com:8080/api/vote +# Также возможно понадобится открыть порт на хосте + +vote: # Награда за голос + vault: 10 # Выдать валюту (необяз.) + item: "diamond 10" # Выдать предмет (необяз.) (забрать предмет нельзя) + message: "Спасибо за голос!" # Отправить сообщение (необяз.) + commands: # Исполнить команды (необяз.) + - "/title {player_name} subtitle на FroggyMonitor" + - "/title {player_name} title Спасибо за отзыв!" + +add_comment: # Награда за удаление отзыва + vault: 10 + message: "Спасибо за отзыв!" + +del_comment: # Награда за удаление отзыва + vault: -10 # Снять валюту +``` \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9c91653..8b6f472 100755 --- a/pom.xml +++ b/pom.xml @@ -4,14 +4,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - themixray - monitoring-reward + ru.froggymonitor + rewardplugin 1.0 jar - Monitoring Reward + FroggyMonitorReward - Monitoring Rewards + Плагин для награды игроков за голоса и отзывы на FroggyMonitor 1.8 UTF-8 @@ -76,13 +76,8 @@ https://jitpack.io - codemc-repo - https://repo.codemc.org/repository/maven-public/ - default - - - enginehub-maven - https://maven.enginehub.org/repo/ + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ @@ -90,7 +85,7 @@ org.spigotmc spigot-api - 1.20.1-R0.1-SNAPSHOT + 1.13.1-R0.1-SNAPSHOT provided @@ -100,16 +95,10 @@ provided - com.ssomar.score - SCore - 4.24.2.14 - system - ${project.basedir}/src/main/resources/SCore.jar - - - de.tr7zw - item-nbt-api-plugin - 2.12.0 + me.clip + placeholderapi + 2.11.5 + provided diff --git a/src/main/java/ru.froggymonitor/rewardplugin/FormDataHandler.java b/src/main/java/ru.froggymonitor/rewardplugin/FormDataHandler.java index 8b49514..74814c6 100755 --- a/src/main/java/ru.froggymonitor/rewardplugin/FormDataHandler.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/FormDataHandler.java @@ -1,4 +1,4 @@ -package themixray.monitoringreward; +package ru.froggymonitor.rewardplugin; import com.google.common.base.Charsets; import com.sun.net.httpserver.Headers; diff --git a/src/main/java/ru.froggymonitor/rewardplugin/Main.java b/src/main/java/ru.froggymonitor/rewardplugin/Main.java index 7a4fc74..8fb43f9 100755 --- a/src/main/java/ru.froggymonitor/rewardplugin/Main.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/Main.java @@ -1,6 +1,5 @@ -package themixray.monitoringreward; +package ru.froggymonitor.rewardplugin; -import net.md_5.bungee.api.ChatColor; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -29,200 +28,8 @@ public final class Main extends JavaPlugin implements Listener { public SitePart site; public Economy econ; - public Random rand; - public FileConfiguration file; - - public Map> cache; - public ConfigReader cache_conf; - public FileConfiguration cache_file; - - public String hotmc_token; - public String mineserv_token; - public String minecraftrating_token; - public String misterlauncher_token; - - public String site_ip; - public int site_port; - - public Map reward_messages; - public Map super_reward_messages; - public int super_reward_votes; - public int spec_super_reward_votes; - - public boolean player_offline_only_money; - public boolean add_vote_command; - public boolean add_general_monitoring; - public boolean add_specific_monitoring; - - public List> super_reward; - public List> spec_super_reward; - public List> default_reward; - - public Map> reward_when_join; - - @Override - public void onEnable() { - if (!setupEconomy()) { - getLogger().severe(String.format("[%s] - Disabled due to no Vault dependency found!", getDescription().getName())); - getServer().getPluginManager().disablePlugin(this); - return; - } - - me = this; - - new ReloadCommand(this); - - rand = new Random(); - - reward_when_join = new HashMap<>(); - - saveDefaultConfig(); - file = getConfig(); - - cache = new HashMap<>(); - - File f = Path.of(getDataFolder().getPath(),"cache.yml").toFile(); - if (!f.exists()) { - try { - f.createNewFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - cache_conf = new ConfigReader(this,"./","cache.yml"); - cache_file = cache_conf.getConfig(); - - Map players_sect = cache_file.getValues(false); - for (Map.Entry p:players_sect.entrySet()) { - Map monitoring_sect = ((MemorySection)p.getValue()).getValues(false); - Map monitoring = new HashMap<>(); - for (Map.Entry m:monitoring_sect.entrySet()) - monitoring.put(m.getKey(),(Integer)m.getValue()); - cache.put(p.getKey(),monitoring); - } - - site_ip = file.getString("site_ip"); - site_port = file.getInt("site_port"); - - hotmc_token = file.getString("hotmc_token"); - minecraftrating_token = file.getString("minecraftrating_token"); - misterlauncher_token = file.getString("misterlauncher_token"); - mineserv_token = file.getString("mineserv_token"); - - reward_messages = new HashMap<>(); - Map reward_message_sect = ((MemorySection)file.get("reward_message")).getValues(false); - for (Map.Entry e:reward_message_sect.entrySet()) - reward_messages.put(e.getKey(),translateHexCodes((String) e.getValue())); - - super_reward_messages = new HashMap<>(); - Map super_reward_message_sect = ((MemorySection)file.get("super_reward_message")).getValues(false); - for (Map.Entry e:super_reward_message_sect.entrySet()) - super_reward_messages.put(e.getKey(),translateHexCodes((String) e.getValue())); - - player_offline_only_money = file.getBoolean("player_offline_only_money"); - add_vote_command = file.getBoolean("add_vote_command"); - add_general_monitoring = file.getBoolean("add_general_monitoring"); - add_specific_monitoring = file.getBoolean("add_specific_monitoring"); - super_reward_votes = file.getInt("super_reward_votes"); - super_reward = new ArrayList<>(); - List> super_reward_sect = file.getMapList("super_reward"); - for (Map e:super_reward_sect) { - Map i = (Map) e; - Map o = new HashMap<>(); - - String type = (String) i.get("type"); - if (type.equals("item")) { - o.put("name", i.get("name")); - o.put("item", ItemsParser.parseItem((Map) i.get("item"))); - } else if (type.equals("money")) { - o.put("count", i.get("count")); - } - o.put("type", i.get("type")); - super_reward.add(o); - } - spec_super_reward_votes = file.getInt("special_super_reward_votes"); - spec_super_reward = new ArrayList<>(); - List> spec_super_reward_sect = file.getMapList("special_super_reward"); - for (Map e:spec_super_reward_sect) { - Map i = (Map) e; - Map o = new HashMap<>(); - - String type = (String) i.get("type"); - if (type.equals("item")) { - o.put("name", i.get("name")); - o.put("item", ItemsParser.parseItem((Map) i.get("item"))); - } else if (type.equals("money")) { - o.put("count", i.get("count")); - } - o.put("type", i.get("type")); - spec_super_reward.add(o); - } - default_reward = new ArrayList<>(); - List> default_reward_sect = file.getMapList("default_reward"); - for (Map e:default_reward_sect) { - Map i = (Map) e; - Map o = new HashMap<>(); - - String type = (String) i.get("type"); - if (type.equals("item")) { - o.put("name", i.get("name")); - o.put("item", ItemsParser.parseItem((Map) i.get("item"))); - } else if (type.equals("money")) { - o.put("count", i.get("count")); - } - o.put("type", i.get("type")); - default_reward.add(o); - } - - site = new SitePart(site_ip,site_port); - getLogger().info("Server "+site_ip+":"+site_port+" started!"); - - getServer().getPluginManager().registerEvents(this,this); - } - - @Override - public void onDisable() { - site.server.stop(0); - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - Player p = e.getPlayer(); - String player = e.getPlayer().getName(); - if (reward_when_join.containsKey(player)) { - Map r = reward_when_join.get(player); - String type = (String) r.get("type"); - if (type.equals("item")) { - ItemStack item = (ItemStack) r.get("item"); - String name = (String) r.get("name"); - p.getInventory().addItem(item); - String rm = (String) r.get("message"); - if (rm.contains("%d")) { - p.sendMessage(String.format(rm,name, - getVotesBeforeSuper(player))); - } else { - p.sendMessage(String.format(rm,name)); - } - } - reward_when_join.remove(player); - } - } - - @EventHandler - public void onCommand(PlayerCommandPreprocessEvent e) { - if (add_vote_command) { - String cmd = e.getMessage().split(" ")[0]; - if (cmd.startsWith("/")) cmd = cmd.substring(1); - - if (cmd.startsWith("vote")) { - String monitoring = cmd.split("/")[1]; - sendVote(e.getPlayer().getName(), monitoring); - e.setCancelled(true); - } - } - } + public UnrealConfig conf; private boolean setupEconomy() { if (getServer().getPluginManager().getPlugin("Vault") == null) { @@ -236,94 +43,58 @@ public final class Main extends JavaPlugin implements Listener { return econ != null; } - public void sendVote(String player, String monitoring) { - getLogger().info(player+" voted on "+monitoring); - if (add_general_monitoring) addVoteGeneral(player,monitoring); - if (add_specific_monitoring) addVote(player,monitoring); + public String secret_token; + + public String comment_page; + public String vote_page; + + public Reward vote_reward; + public Reward add_comment_reward; + public Reward del_comment_reward; + + @Override + public void onEnable() { + if (!setupEconomy()) { + getLogger().severe("[FroggyMonitorReward] - Disabled due to no Vault dependency found!"); + getServer().getPluginManager().disablePlugin(this); + return; + } + + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") == null) { + getLogger().severe("[FroggyMonitorReward] - Disabled due to no PlaceholderAPI dependency found!"); + getServer().getPluginManager().disablePlugin(this); + return; + } + + me = this; + + conf = new UnrealConfig(this, "config.yml"); + + secret_token = (String) conf.get("secret_token"); + + comment_page = (String) conf.get("comment_page"); + vote_page = (String) conf.get("vote_page"); + + vote_reward = new Reward((Map) conf.get("vote")); + add_comment_reward = new Reward((Map) conf.get("add_comment")); + del_comment_reward = new Reward((Map) conf.get("del_comment")); + + site = new SitePart( + (String) conf.get("site_host"), + ((Number) conf.get("site_port")).intValue(), + ((Number) conf.get("site_backlog")).intValue()); + + site.start(); + + getServer().getPluginManager().registerEvents(this,this); } - public void addVote(String player, String monitoring) { - if (cache.containsKey(player)) { - cache.get(player).put(monitoring, - cache.get(player).getOrDefault( - monitoring,0)+1); - } else { - Map m = new HashMap<>(); - m.put(monitoring,1); - cache.put(player,m); - } - if (cache.get(player).get(monitoring) >= spec_super_reward_votes) { - giveReward(player, spec_super_reward, super_reward_messages.get(monitoring)); - cache.get(player).put(monitoring, 0); - } - saveCache(); + @Override + public void onDisable() { + site.stop(); } - public void addVoteGeneral(String player, String monitoring) { - if (cache.containsKey(player)) { - cache.get(player).put("general", - cache.get(player).getOrDefault( - "general",0)+1); - } else { - Map m = new HashMap<>(); - m.put("general",1); - cache.put(player,m); - } - if (cache.get(player).get("general") >= super_reward_votes) { - giveReward(player, super_reward, super_reward_messages.get("general")); - cache.get(player).put("general", 0); - } else { - giveReward(player, default_reward, reward_messages.get(monitoring)); - } - saveCache(); - } - - public int getVotesBeforeSuper(String player) { - return super_reward_votes-cache.get(player).getOrDefault("general",0); - } - - public void giveReward(String player, List> rewards, String message) { - Player p = Bukkit.getPlayer(player); - if (player_offline_only_money && p == null) { - while (true) { - int index = rand.nextInt(0, rewards.size()); - Map r = rewards.get(index); - String type = (String) r.get("type"); - if (!type.equals("money")) continue; - econ.depositPlayer(getOfflinePlayer(player), (int) r.get("count")); - break; - } - } else { - int index = rand.nextInt(0, rewards.size()); - Map r = rewards.get(index); - String type = (String) r.get("type"); - String name = null; - if (type.equals("item")) { - ItemStack item = (ItemStack) r.get("item"); - name = (String) r.get("name"); - if (p != null) p.getInventory().addItem(item); - else { - Map t = new HashMap<>(r); - t.put("message", message); - reward_when_join.put(player,t); - } - } else if (type.equals("money")) { - int count = (int) r.get("count"); - econ.depositPlayer(getOfflinePlayer(player),count); - name = econ.format(count); - } - if (p != null) { - if (message.contains("%d")) { - p.sendMessage(String.format(message,name, - getVotesBeforeSuper(player))); - } else { - p.sendMessage(String.format(message,name)); - } - } - } - } - - public OfflinePlayer getOfflinePlayer(String name) { + public static OfflinePlayer getOfflinePlayer(String name) { for (OfflinePlayer p:Bukkit.getOfflinePlayers()) { if (p.getName().equals(name)) { return p; @@ -331,19 +102,4 @@ public final class Main extends JavaPlugin implements Listener { } return null; } - - public void saveCache() { - for (Map.Entry> e:cache.entrySet()) - cache_file.set(e.getKey(),e.getValue()); - cache_conf.saveConfig(); - } - - public static final Pattern HEX_PATTERN = Pattern.compile("&#(\\w{5}[0-9a-f])"); - - public String translateHexCodes(String textToTranslate) { - Matcher matcher = HEX_PATTERN.matcher(textToTranslate); - StringBuffer buffer = new StringBuffer(); - while (matcher.find()) matcher.appendReplacement(buffer, ChatColor.of("#" + matcher.group(1)).toString()); - return ChatColor.translateAlternateColorCodes('&', matcher.appendTail(buffer).toString()); - } } diff --git a/src/main/java/ru.froggymonitor/rewardplugin/Reward.java b/src/main/java/ru.froggymonitor/rewardplugin/Reward.java index dee83eb..8e37210 100644 --- a/src/main/java/ru.froggymonitor/rewardplugin/Reward.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/Reward.java @@ -1,4 +1,52 @@ package ru.froggymonitor.rewardplugin; +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.bukkit.Bukkit.getServer; + public class Reward { + public Map data; + + public Reward(Map data) { + this.data = data; + } + + public void execute(String nickname) { + Player player = Bukkit.getPlayer(nickname); + + if (player != null) { + if (data.containsKey("item")) { + String[] ss = ((String)data.get("item")).split(" "); + ItemStack item = new ItemStack(Material.valueOf(ss[0].toUpperCase()), ss.length == 1 ? 1 : Integer.parseInt(ss[1])); + player.getInventory().addItem(item); + } + if (data.containsKey("message")) { + player.sendMessage(PlaceholderAPI.setPlaceholders(player, (String) data.get("message"))); + } + } + + OfflinePlayer offlinePlayer = Main.getOfflinePlayer(nickname); + + if (offlinePlayer != null) { + if (data.containsKey("vault")) { + Main.me.econ.depositPlayer(offlinePlayer, + ((Number) data.get("vault")).doubleValue()); + } + if (data.containsKey("commands")) { + for (String c : new ArrayList<>((List) data.get("commands"))) { + if (c.startsWith("/")) c = c.substring(1); + getServer().dispatchCommand(getServer().getConsoleSender(),c); + } + } + } + } } diff --git a/src/main/java/ru.froggymonitor/rewardplugin/SitePart.java b/src/main/java/ru.froggymonitor/rewardplugin/SitePart.java index 66fbcc1..ad8c689 100755 --- a/src/main/java/ru.froggymonitor/rewardplugin/SitePart.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/SitePart.java @@ -1,4 +1,4 @@ -package themixray.monitoringreward; +package ru.froggymonitor.rewardplugin; import com.google.common.base.Charsets; import com.google.common.hash.Hashing; @@ -17,20 +17,24 @@ import java.util.Map; public class SitePart extends FormDataHandler { public HttpServer server; - public SitePart(String host, int port) { + public SitePart(String host, int port, int backlog) { try { - server = HttpServer.create(new InetSocketAddress(host,port),0); - server.createContext("/vote",this); + server = HttpServer.create(new InetSocketAddress(host,port),backlog); + server.createContext("/",this); server.setExecutor(null); - server.start(); } catch (IOException e) { e.printStackTrace(); } } - public String sha1(String s) { - return Hashing.sha1().hashString(s, Charsets.UTF_8).toString(); + public void start() { + server.start(); } + + public void stop() { + server.stop(1); + } + public String sha256(String s) { return Hashing.sha256().hashString(s, Charsets.UTF_8).toString(); } @@ -43,76 +47,44 @@ public class SitePart extends FormDataHandler { String method = e.getRequestMethod(); String path = e.getRequestURI().getPath(); - if (method.equals("POST")) { - if (path.equals("/vote/hotmc")) { - if (params.size() == 3) { - if (params.containsKey("nick") && - params.containsKey("time") && - params.containsKey("sign")) { - String nick = (String) params.get("nick"); - String time = (String) params.get("time"); - String sign = (String) params.get("sign"); - String sign_gen = sha1(nick+time+Main.me.hotmc_token); + if (method.equals("GET")) { + if (path.equals(Main.me.vote_page)) { + if (params.containsKey("nickname") && + params.containsKey("timestamp") && + params.containsKey("secret")) { + String nickname = (String) params.get("nickname"); + String timestamp = (String) params.get("timestamp"); + String secret = (String) params.get("secret"); - if (sign.equals(sign_gen)) { - response = "ok"; - status_code = 200; - Main.me.sendVote(nick,"hotmc"); - } + if (sha256(nickname + timestamp + Main.me.secret_token).equals(secret)) { + Main.me.vote_reward.execute(nickname); + response = "ok"; + status_code = 200; } } - } else if (path.equals("/vote/mineserv")) { - if (params.size() == 4) { - if (params.containsKey("project") && - params.containsKey("username") && - params.containsKey("timestamp") && - params.containsKey("signature")) { - String project = (String) params.get("project"); - String username = (String) params.get("username"); - String timestamp = (String) params.get("timestamp"); - String signature = (String) params.get("signature"); - String sign_gen = sha256(project+"."+Main.me.mineserv_token+"."+timestamp+"."+username); + } else if (path.equals(Main.me.comment_page)) { + if (params.containsKey("nickname") && + params.containsKey("type") && + params.containsKey("username") && + params.containsKey("timestamp") && + params.containsKey("secret")) { + String type = (String) params.get("type"); + String username = (String) params.get("username"); + String nickname = (String) params.get("nickname"); + String timestamp = (String) params.get("timestamp"); + String secret = (String) params.get("secret"); - if (signature.equals(sign_gen)) { - response = "done"; - status_code = 200; - Main.me.sendVote(username,"mineserv"); - } - } - } - } else if (path.equals("/vote/minecraftrating")) { - if (params.size() == 4) { - if (params.containsKey("ip") && - params.containsKey("username") && - params.containsKey("timestamp") && - params.containsKey("signature")) { - String username = (String) params.get("username"); - String timestamp = (String) params.get("timestamp"); - String signature = (String) params.get("signature"); - String sign_gen = sha1(username+timestamp+Main.me.minecraftrating_token); + if (sha256(username + nickname + timestamp + Main.me.secret_token).equals(secret)) { + if (type.equals("insert")) { + Main.me.add_comment_reward.execute(nickname); - if (signature.equals(sign_gen)) { response = "ok"; status_code = 200; - Main.me.sendVote(username,"minecraftrating"); - } - } - } - } else if (path.equals("/vote/misterlauncher")) { - if (params.size() == 4) { - if (params.containsKey("ip") && - params.containsKey("username") && - params.containsKey("timestamp") && - params.containsKey("signature")) { - String username = (String) params.get("username"); - String timestamp = (String) params.get("timestamp"); - String signature = (String) params.get("signature"); - String sign_gen = sha1(username+timestamp+Main.me.misterlauncher_token); + } else if (type.equals("delete")) { + Main.me.del_comment_reward.execute(nickname); - if (signature.equals(sign_gen)) { response = "ok"; status_code = 200; - Main.me.sendVote(username,"misterlauncher"); } } } @@ -122,8 +94,8 @@ public class SitePart extends FormDataHandler { try { e.sendResponseHeaders(status_code, response.length()); - OutputStream os = e.getResponseBody(); - os.write(response.getBytes()); + OutputStream os = e.getResponseBody(); + os.write(response.getBytes()); } catch (IOException ex) { ex.printStackTrace(); } diff --git a/src/main/java/ru.froggymonitor/rewardplugin/UnrealConfig.java b/src/main/java/ru.froggymonitor/rewardplugin/UnrealConfig.java index 4d9e5ce..2d20db8 100755 --- a/src/main/java/ru.froggymonitor/rewardplugin/UnrealConfig.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/UnrealConfig.java @@ -1,4 +1,4 @@ -package themixray.mainplugin.util; +package ru.froggymonitor.rewardplugin; import com.google.common.base.Charsets; import org.bukkit.plugin.java.JavaPlugin; @@ -10,54 +10,21 @@ import java.util.HashMap; import java.util.Map; public class UnrealConfig extends HashMap { - private static final Yaml yaml = new Yaml(); - + private Yaml yaml; private File file; - public static UnrealConfig getByFileOrDefault(File file, Map def) { - return new UnrealConfig(file,def); - } - - public static UnrealConfig getByFileOrDefault(File file, Runnable on_def) { - return new UnrealConfig(file,on_def); - } - - public static UnrealConfig getByResource(JavaPlugin plugin, String resource) { - return new UnrealConfig(plugin,resource); - } - - public static UnrealConfig getByFile(JavaPlugin plugin, String file) { - return new UnrealConfig(plugin, file); - } - - public static UnrealConfig getByFile(File file) { - return new UnrealConfig(file,new HashMap<>()); - } - - private UnrealConfig(File file, Map def) { - this.file = file; - if (file.exists()) { - reload(); - } else { - file.mkdirs(); - putAll(def); - save(); - } - } - - private UnrealConfig(File file, Runnable on_def) { - this.file = file; - if (!file.exists()) on_def.run(); - reload(); - } - - private UnrealConfig(JavaPlugin plugin, String filename) { + public UnrealConfig(JavaPlugin plugin, String filename) { file = Paths.get(plugin.getDataFolder().getPath(),filename).toFile(); if (!file.exists()) plugin.saveResource(filename,false); - reload(); + yaml = new Yaml(); + reloadConfig(); } - public void reload() { + public File getFile() { + return file; + } + + public void reloadConfig() { try { clear(); putAll(yaml.load(new FileInputStream(file))); @@ -66,7 +33,7 @@ public class UnrealConfig extends HashMap { } } - public void save() { + public void saveConfig() { try { yaml.dump(this,new FileWriter(file, Charsets.UTF_8)); } catch (IOException e) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 7b8e6a1..5bade75 100755 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,101 +1,28 @@ -site_ip: localhost # IP адрес для сайта -site_port: 8080 # Порт для сайта +site_host: localhost # IP адрес для сайта +site_port: 8080 # Порт для сайта +site_backlog: 5 # Максимальное кол-во подключений одновременно -add_vote_command: false # Тестовая команда /vote/мониторинг +secret_token: "ваш_секретный_токен" # Секретный токен с FroggyMonitor -add_general_monitoring: true # Добавлять голос к общему счетчику -add_specific_monitoring: true # Добавлять голос к счетчику мониторинга +comment_page: "/api/comment" # Страница для награды за отзыв +vote_page: "/api/vote" # Страница для награды за голос -hotmc_token: "SECRET_TOKEN" # Секретный токен HotMC -mineserv_token: "SECRET_TOKEN" # Секретный токен MineServ -minecraftrating_token: "SECRET_TOKEN" # Секретный токен MinecraftRating -misterlauncher_token: "SECRET_TOKEN" # Секретный токен MisterLauncher +# Что указать в FroggyMonitor? +# В URL для поощрения за отзыв: http://{ip_сервера}:{site_port}{comment_page} -> http://example.com:8080/api/comment +# В URL для поощрения за голос: http://{ip_сервера}:{site_port}{vote_page} -> http://example.com:8080/api/vote +# Также возможно понадобится открыть порт на хосте -reward_message: # Сообщение о получении награды голосуя (%d необязательно) - hotmc: "Вы получили %s за голос на HotMC!\nДо супер-награды осталось %d голосов." - mineserv: "Вы получили %s за голос на MineServ!\nДо супер-награды осталось %d голосов." - minecraftrating: "Вы получили %s за голос на MinecraftRating!\nДо супер-награды осталось %d голосов." - misterlauncher: "Вы получили %s за голос на MisterLauncher!\nДо супер-награды осталось %d голосов." +vote: # Награда за голос + vault: 10 # Выдать валюту (необяз.) + item: "diamond 10" # Выдать предмет (необяз.) (забрать предмет нельзя) + message: "Спасибо за голос!" # Отправить сообщение (необяз.) + commands: # Исполнить команды (необяз.) + - "/title {player_name} subtitle на FroggyMonitor" + - "/title {player_name} title Спасибо за отзыв!" -super_reward_message: # Сообщение о получении супер-награды - general: "§6Вы получили %s за голоса на мониторингах!" - hotmc: "§6Вы получили %s за голоса на HotMC!" - mineserv: "§6Вы получили %s за голоса на MineServ!" - minecraftrating: "§6Вы получили %s за голоса на MinecraftRating!" - misterlauncher: "§6Вы получили %s за голоса на MisterLauncher!" +add_comment: # Награда за удаление отзыва + vault: 10 + message: "Спасибо за отзыв!" -player_offline_only_money: false # Если игрок оффлайн, выдавать в награду только монеты - -super_reward_votes: 10 # Число голосов для супер-награды -super_reward: # Супер-награды - - type: item # Тип награды (предмет) - name: "Алмаз x1" # Название награды (в чате) - item: - type: item - material: diamond # Тип предмета - count: 1 # Кол-во предметов - display_name: "Алмаз (легендарный)" # Название предмета (необязательно) - lore: | # Описание (лор) предмета (необязательно) - Описание предмета - Вторая строчка описания - Третья строчка описания - - type: money # Тип награды (валюта) - count: 10 # Кол-во валюты - -special_super_reward_votes: 10 # Число голосов для супер-награды (по мониторингу) -special_super_reward: # Супер-награды по мониторингам - - type: item - name: "Изумруд x1" - item: - material: emerald - count: 5 - display_name: "Алмаз (легендарный)" - lore: | - Описание предмета - Вторая строчка описания - Третья строчка описания - - type: money - count: 100 - -default_reward: # Обычные награды - - type: item - name: "Палка x5" - item: - material: stick - count: 5 - display_name: "Палка (обычная)" - lore: | - Описание предмета - Вторая строчка описания - Третья строчка описания - - type: money - count: 1 - - -# Формат конфига для предмета: - -# -- Обычный предмет -- -# type: item -# material: <тип_предмета> -# count: <колво_предмета> -# enchants: -# <название_зачарования>: <сила_зачарования> -# nbt: -# <нбт_ключ>: <значение> -# display_name: <название_предмета> -# lore: -# - <первая_строка_описания> -# - <вторая_строка_описания> -# - - -# -- Зелье -- -# type: potion -# material: <тип_предмета> -# effect: <тип_эффекта> -# duration: <длительность_эффекта> -# amplifier: <сила_эффекта> - -# -- Кастомный предмет -- -# type: custom -# name: <имя_кстамного_предмета> -# count: <кол_во_предмета> \ No newline at end of file +del_comment: # Награда за удаление отзыва + vault: -10 # Снять валюту \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 90ebb29..5228323 100755 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,14 +1,8 @@ name: MonitoringReward version: '${project.version}' -main: themixray.monitoringreward.Main -api-version: 1.20 -authors: [ TheMixRay ] -description: Monitoring Rewards - -commands: - reload: - description: Перезагрузка плагина - permission: monitoring-reward.command.reload -permissions: - monitoring-reward.command.reload: - default: op \ No newline at end of file +main: ru.froggymonitor.rewardplugin.Main +api-version: 1.13 +authors: [ FroggyMonitor ] +description: FroggyMonitor plugin that rewards votes and comments +website: https://froggymonitor.ru +softdepend: [ PlaceholderAPI, Vault ] \ No newline at end of file