diff --git a/pom.xml b/pom.xml index 5316a49..bdc8e1a 100755 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ru.froggymonitor rewardplugin - 1.4.1 + 1.4.3 jar FroggyMonitorReward @@ -89,16 +89,14 @@ provided - com.github.MilkBowl - VaultAPI - 1.7 - provided + net.kyori + adventure-api + 4.16.0 - me.clip - placeholderapi - 2.11.5 - provided + net.kyori + adventure-text-minimessage + 4.16.0 net.kyori @@ -111,14 +109,16 @@ 4.16.0 - net.kyori - adventure-text-minimessage - 4.16.0 + com.github.MilkBowl + VaultAPI + 1.7 + provided - net.kyori - adventure-api - 4.16.0 + me.clip + placeholderapi + 2.11.5 + provided diff --git a/src/main/java/ru.froggymonitor/rewardplugin/Main.java b/src/main/java/ru.froggymonitor/rewardplugin/Main.java index 07c643b..25fb860 100755 --- a/src/main/java/ru.froggymonitor/rewardplugin/Main.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/Main.java @@ -9,13 +9,15 @@ import org.bukkit.block.data.type.TripwireHook; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; -import java.io.File; -import java.io.IOException; +import java.io.*; +import java.net.HttpURLConnection; import java.net.URI; +import java.net.URL; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @@ -198,14 +200,34 @@ public final class Main extends JavaPlugin implements Listener { "\"comment_url\": \""+start_url+comment_page+"\"}"; try { - httpClient.send(HttpRequest.newBuilder() - .POST(HttpRequest.BodyPublishers.ofString(body)) - .uri(URI.create("http://froggymonitor.ru/api/set_reward_urls")) - .build(), HttpResponse.BodyHandlers.ofString()); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (InterruptedException e) { - throw new RuntimeException(e); + URL url = new URL("http://froggymonitor.ru/api/set_reward_urls"); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Content-Length", Integer.toString(body.getBytes().length)); + + connection.setUseCaches(false); + connection.setDoOutput(true); + + DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); + wr.writeBytes(body); + wr.close(); + + InputStream is = connection.getInputStream(); + BufferedReader rd = new BufferedReader(new InputStreamReader(is)); + StringBuilder response = new StringBuilder(); + String line; + + while ((line = rd.readLine()) != null) { + response.append(line); + response.append('\r'); + } + rd.close(); + + connection.disconnect(); + } catch (Exception e) { + e.printStackTrace(); } } diff --git a/src/main/java/ru.froggymonitor/rewardplugin/MessageFormatting.java b/src/main/java/ru.froggymonitor/rewardplugin/MessageFormatting.java index 1bfd5a5..669f1b3 100644 --- a/src/main/java/ru.froggymonitor/rewardplugin/MessageFormatting.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/MessageFormatting.java @@ -1,20 +1,20 @@ package ru.froggymonitor.rewardplugin; -import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.json.JSONComponentSerializer; import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.chat.ComponentSerializer; public enum MessageFormatting { - AMPERSAND("ampersand", (str) -> LegacyComponentSerializer.legacyAmpersand().deserialize(str)), - SECTION("section", (str) -> LegacyComponentSerializer.legacySection().deserialize(str)), - MINIMESSAGE("minimessage", (str) -> (TextComponent) MiniMessage.miniMessage().deserialize(str)), - JSON("json", (str) -> (TextComponent) JSONComponentSerializer.json().deserialize(str)); + AMPERSAND("ampersand", (str) -> TextComponent.fromLegacyText(str.replace("&", "ยง"))), + SECTION("section", (str) -> TextComponent.fromLegacyText(str)), + MINIMESSAGE("minimessage", (str) -> kyoriToBungee((net.kyori.adventure.text.TextComponent) MiniMessage.miniMessage().deserialize(str))), + JSON("json", (str) -> ComponentSerializer.parse(str)); public interface MessageFormat { - TextComponent format(String input); + BaseComponent[] format(String input); } private MessageFormat format_func; @@ -29,7 +29,7 @@ public enum MessageFormatting { } public BaseComponent[] format(String str) { - return ComponentSerializer.parse(JSONComponentSerializer.json().serialize(format_func.format(str))); + return format_func.format(str); } public static MessageFormatting getFormatting(String name) { @@ -40,4 +40,12 @@ public enum MessageFormatting { } return SECTION; } + + public static BaseComponent[] kyoriToBungee(net.kyori.adventure.text.TextComponent text) { + return ComponentSerializer.parse(JSONComponentSerializer.json().serialize(text)); + } + + public static net.kyori.adventure.text.TextComponent bungeeToKyori(BaseComponent[] text) { + return (net.kyori.adventure.text.TextComponent) JSONComponentSerializer.json().deserialize(ComponentSerializer.toString(text)); + } } diff --git a/src/main/java/ru.froggymonitor/rewardplugin/Reward.java b/src/main/java/ru.froggymonitor/rewardplugin/Reward.java index ac269f1..a998797 100644 --- a/src/main/java/ru.froggymonitor/rewardplugin/Reward.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/Reward.java @@ -6,6 +6,7 @@ import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; import java.util.List; @@ -23,42 +24,84 @@ public class Reward { } public void execute(String nickname) { - Player player = Bukkit.getPlayer(nickname); + new BukkitRunnable() { + public void run() { +// System.out.println("nickname "+nickname); - if (player != null) { - later(player); - } else { - Main.me.cache.put(nickname, name); - } + Player player = Bukkit.getPlayer(nickname); - OfflinePlayer offlinePlayer = player != null ? player : Main.getOfflinePlayer(nickname); +// System.out.println("player "+player); - if (offlinePlayer != null) { - if (data.containsKey("vault")) { - Main.me.giveVault(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(),PlaceholderAPI.setPlaceholders(offlinePlayer, c)); +// System.out.println("data "+data); + + if (player != null) { + later(player); + } else { + Main.me.cache.put(nickname, name); + } + +// System.out.println("cache "+Main.me.cache); + + OfflinePlayer offlinePlayer = player != null ? player : Main.getOfflinePlayer(nickname); + +// System.out.println("offlineplayer "+offlinePlayer); + + if (offlinePlayer != null) { + if (data.containsKey("vault")) { +// System.out.println("vault "+data.get("vault")); + try { + Main.me.giveVault(offlinePlayer, + ((Number) data.get("vault")).doubleValue()); + } catch (Exception e) { + e.printStackTrace(); + } + } + if (data.containsKey("commands")) { +// System.out.println("commands "+data.get("commands")); + try { + for (String c : new ArrayList<>((List) data.get("commands"))) { + if (c.startsWith("/")) c = c.substring(1); + getServer().dispatchCommand(getServer().getConsoleSender(),PlaceholderAPI.setPlaceholders(offlinePlayer, c)); +// System.out.println("commands c "+c); + } + } catch (Exception e) { + e.printStackTrace(); + } + } } } - } + }.runTask(Main.me); } public void later(Player player) { 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); +// System.out.println("item "+data.get("item")); + try { + 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); + } catch (Exception e) { + e.printStackTrace(); + } } if (data.containsKey("message")) { - player.spigot().sendMessage(Main.me.formatMessage(player, (String) data.get("message"))); +// System.out.println("message "+data.get("message")); + try { +// System.out.println("basecomponents "+Main.me.formatMessage(player, (String) data.get("message"))); + player.spigot().sendMessage(Main.me.formatMessage(player, (String) data.get("message"))); + } catch (Exception e) { + e.printStackTrace(); + } } if (data.containsKey("as_player")) { - for (String c : new ArrayList<>((List) data.get("as_player"))) { - player.chat(c); +// System.out.println("as_player "+data.get("as_player")); + try { + for (String c : new ArrayList<>((List) data.get("as_player"))) { +// System.out.println("as_player c "+c); + player.chat(c); + } + } catch (Exception e) { + e.printStackTrace(); } } } diff --git a/src/main/java/ru.froggymonitor/rewardplugin/SitePart.java b/src/main/java/ru.froggymonitor/rewardplugin/SitePart.java index 4ddbd6d..9b94075 100755 --- a/src/main/java/ru.froggymonitor/rewardplugin/SitePart.java +++ b/src/main/java/ru.froggymonitor/rewardplugin/SitePart.java @@ -4,12 +4,24 @@ import com.google.common.base.Charsets; import com.google.common.hash.Hashing; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpServer; +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; import java.io.IOException; import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.StringWriter; import java.net.InetSocketAddress; import java.util.Map; +import static org.bukkit.Bukkit.getServer; + public class SitePart extends FormDataHandler { public HttpServer server; @@ -51,62 +63,66 @@ public class SitePart extends FormDataHandler { String method = e.getRequestMethod(); String path = e.getRequestURI().getPath(); - 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"); + try { + 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 (sha256(nickname + timestamp + Main.me.secret_token).equals(secret)) { - Main.me.vote_reward.execute(nickname); - response = "ok"; - status_code = 200; + String secret_gen = sha256(nickname + timestamp + Main.me.secret_token); - if (Main.me.enable_logs) Main.me.getLogger().info("Reward \"vote\" gave to player "+nickname); + if (secret_gen.equals(secret)) { + Main.me.vote_reward.execute(nickname); + response = "ok"; + status_code = 200; + + if (Main.me.enable_logs) Main.me.getLogger().info("Reward \"vote\" gave to player "+nickname); + } } - } - } 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"); + } 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 (sha256(username + nickname + timestamp + Main.me.secret_token).equals(secret)) { - if (type.equals("insert")) { - Main.me.add_comment_reward.execute(nickname); + String secret_gen = sha256(username + nickname + timestamp + Main.me.secret_token); - response = "ok"; - status_code = 200; + if (secret_gen.equals(secret)) { + if (type.equals("insert")) { + Main.me.add_comment_reward.execute(nickname); - if (Main.me.enable_logs) Main.me.getLogger().info("Reward \"add_comment\" gave to player "+nickname); - } else if (type.equals("delete")) { - Main.me.del_comment_reward.execute(nickname); + response = "ok"; + status_code = 200; - response = "ok"; - status_code = 200; + if (Main.me.enable_logs) Main.me.getLogger().info("Reward \"add_comment\" gave to player "+nickname); + } else if (type.equals("delete")) { + Main.me.del_comment_reward.execute(nickname); - if (Main.me.enable_logs) Main.me.getLogger().info("Reward \"del_comment\" gave to player "+nickname); + response = "ok"; + status_code = 200; + + if (Main.me.enable_logs) Main.me.getLogger().info("Reward \"del_comment\" gave to player "+nickname); + } } } } } - } - try { e.sendResponseHeaders(status_code, response.length()); OutputStream os = e.getResponseBody(); os.write(response.getBytes()); - } catch (IOException ex) { + } catch (Exception ex) { ex.printStackTrace(); } }