From b28027be7678c5d96ee71e29b6c13b5cf9bf4884 Mon Sep 17 00:00:00 2001 From: CorwinDev <88144943+CorwinDev@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:14:55 +0200 Subject: [PATCH] Version 2.0 --- pom.xml | 33 ++++++++++-- .../streamervschat/command/TestCommand.java | 1 + .../nl/corwindev/streamervschat/commands.java | 51 ++++++++++++++++--- .../discord/DiscordConnectionHelper.java | 1 + .../nl/corwindev/streamervschat/main.java | 40 +++++++++++++-- .../streamervschat/objects/UpdateChecker.java | 33 ++++++++++++ .../twitch/TwitchConnectionHelper.java | 2 - .../streamervschat/twitch/TwitchEvents.java | 1 + .../youtube/YouTubeConnectionHelper.java | 11 +++- src/main/resources/plugin.yml | 2 +- 10 files changed, 159 insertions(+), 16 deletions(-) create mode 100644 src/main/java/nl/corwindev/streamervschat/objects/UpdateChecker.java diff --git a/pom.xml b/pom.xml index b93060c..70c16c3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ StreamerVSChat StreamerVSChat - 1.4 + 2.0 jar Streamer vs Chat @@ -31,9 +31,14 @@ maven-shade-plugin 3.2.4 + + + org.bstats + nl.corwindev.streamervschat.main + + - + nl.corwindev.streamervschat.main @@ -93,6 +98,10 @@ club.minnced opus-java + + org.slf4j + * + @@ -104,6 +113,18 @@ club.minnced opus-java + + org.slf4j + * + + + commons-lang + * + + + io.github.openfeign + * + @@ -111,5 +132,11 @@ google-api-services-youtube v3-rev182-1.22.0 + + org.bstats + bstats-bukkit + 3.0.0 + compile + diff --git a/src/main/java/nl/corwindev/streamervschat/command/TestCommand.java b/src/main/java/nl/corwindev/streamervschat/command/TestCommand.java index f62f3bb..0f92737 100644 --- a/src/main/java/nl/corwindev/streamervschat/command/TestCommand.java +++ b/src/main/java/nl/corwindev/streamervschat/command/TestCommand.java @@ -16,6 +16,7 @@ public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command commandSender.sendMessage(ChatColor.RED + "Correct usage: /testcommand "); return false; } + commands.UserList.add(commandSender.getName()); commands.commandList.add(strings[0]); commandSender.sendMessage(ChatColor.GREEN + "Added command: " + strings[0] + " to queue;"); return true; diff --git a/src/main/java/nl/corwindev/streamervschat/commands.java b/src/main/java/nl/corwindev/streamervschat/commands.java index 11835c5..3fed53e 100644 --- a/src/main/java/nl/corwindev/streamervschat/commands.java +++ b/src/main/java/nl/corwindev/streamervschat/commands.java @@ -1,25 +1,28 @@ package nl.corwindev.streamervschat; +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; +import org.bukkit.entity.*; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitTask; +import org.bukkit.util.Vector; import java.util.*; +import java.util.concurrent.ThreadLocalRandom; import static nl.corwindev.streamervschat.main.plugin; public class commands { public static List commandList = new ArrayList(); - + public static List UserList = new ArrayList(); public static void start() { BukkitTask task = Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() { @Override @@ -36,6 +39,10 @@ public void run() { } // Remove the command from the list runCmd(command); + // Alert the user + for(Player player: getPlayers()) { + player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent("§a§l" + UserList.get(randomCommand) + "§r§a has executed the command: §l" + command)); + } } }, plugin.getConfig().getInt("commands.delay") * 20, plugin.getConfig().getInt("commands.delay") * 20); } @@ -87,7 +94,13 @@ public static void runCmd(String command) { commands.jumpboost(); }else if(Objects.equals(command, "levitate") || Objects.equals(command, "fly")) { commands.fly(); - }else { + }else if(Objects.equals(command, "randomeffect") || Objects.equals(command, "randompoison")){ + commands.randomeffect(); + }else if(Objects.equals(command, "fireball")) { + commands.fireball(); + }else if(Objects.equals(command, "drop")){ + commands.drop(); + } else { commands.custom(command); } } @@ -270,4 +283,30 @@ public static void custom(String command){ } } } + + public static void randomeffect(){ + int rnd = ThreadLocalRandom.current().nextInt(PotionEffectType.values().length); + + for (Player player : getPlayers()) { + player.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.values()[rnd], 200, 1)); + } + } + + public static void fireball(){ + for (Player player : getPlayers()) { + // Send fireball to the player + Location location = new Location(player.getWorld(), player.getLocation().getX(), player.getLocation().getY() + 20, player.getLocation().getZ() ); + Vector vector = player.getLocation().toVector().subtract(location.toVector()).normalize(); + Fireball fire = (Fireball) location.getWorld().spawn(location, Fireball.class); + fire.setDirection(vector); + } + } + + public static void drop(){ + for (Player player : getPlayers()) { + ItemStack hand = player.getInventory().getItemInMainHand(); + player.getInventory().removeItem(hand); + player.getWorld().dropItemNaturally(player.getLocation(), hand); + } + } } \ No newline at end of file diff --git a/src/main/java/nl/corwindev/streamervschat/discord/DiscordConnectionHelper.java b/src/main/java/nl/corwindev/streamervschat/discord/DiscordConnectionHelper.java index 0636d42..9a8b786 100644 --- a/src/main/java/nl/corwindev/streamervschat/discord/DiscordConnectionHelper.java +++ b/src/main/java/nl/corwindev/streamervschat/discord/DiscordConnectionHelper.java @@ -41,6 +41,7 @@ public void onMessageReceived(MessageReceivedEvent event) { Message message = event.getMessage(); String content = message.getContentRaw(); if (content.contains(main.plugin.getConfig().getString("commands.prefix"))) { + commands.UserList.add(event.getAuthor().getName()); commands.commandList.add(content.replace(main.plugin.getConfig().getString("commands.prefix"), "")); } } diff --git a/src/main/java/nl/corwindev/streamervschat/main.java b/src/main/java/nl/corwindev/streamervschat/main.java index aa2a60c..953b606 100644 --- a/src/main/java/nl/corwindev/streamervschat/main.java +++ b/src/main/java/nl/corwindev/streamervschat/main.java @@ -1,19 +1,22 @@ package nl.corwindev.streamervschat; -import net.dv8tion.jda.api.JDA; import nl.corwindev.streamervschat.command.DiscordReload; import nl.corwindev.streamervschat.command.TwitchReload; import nl.corwindev.streamervschat.command.YouTubeReload; +import nl.corwindev.streamervschat.objects.UpdateChecker; import nl.corwindev.streamervschat.youtube.YouTubeConnectionHelper; +import org.bstats.charts.DrilldownPie; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import nl.corwindev.streamervschat.discord.DiscordConnectionHelper; import nl.corwindev.streamervschat.twitch.TwitchConnectionHelper; import javax.security.auth.login.LoginException; import nl.corwindev.streamervschat.objects.JdaFilter; import nl.corwindev.streamervschat.command.TestCommand; -import org.bukkit.util.Vector; +import org.bstats.bukkit.Metrics; + +import java.util.HashMap; +import java.util.Map; public final class main extends JavaPlugin { // Exports this class to the plugin. @@ -25,6 +28,14 @@ public void onEnable() { this.reloadConfig(); this.saveDefaultConfig(); plugin = this; + int pluginId = 16419; + new UpdateChecker(this, pluginId).getVersion(version -> { + if (this.getDescription().getVersion().equals(version)) { + getLogger().info("There is not a new update available."); + } else { + getLogger().warning("There is a new update available. Download it here: https://www.spigotmc.org/resources/streamer-vs-chat-1-13-1-19.105119/"); + } + }); if (!plugin.getConfig().getBoolean("twitch.enabled") && !plugin.getConfig().getBoolean("discord.enabled") && !plugin.getConfig().getBoolean("youtube.enabled")) { getLogger().info("No services enabled, disabling plugin."); Bukkit.getPluginManager().disablePlugin(this); @@ -76,6 +87,27 @@ public void onEnable() { this.getCommand("youtube-reload").setExecutor(new YouTubeReload()); this.getCommand("twitch-reload").setExecutor(new TwitchReload()); this.getCommand("discord-reload").setExecutor(new DiscordReload()); + Metrics metrics = new Metrics(this, pluginId); + metrics.addCustomChart(new DrilldownPie("live_platform", () -> { + Map> map = new HashMap<>(); + Boolean YouTubeEnabled = this.getConfig().getBoolean("youtube.enabled"); + Boolean TwitchEnabled = this.getConfig().getBoolean("twitch.enabled"); + Boolean DiscordEnabled = this.getConfig().getBoolean("discord.enabled"); + Map entry = new HashMap<>(); + entry.put("YouTube", YouTubeEnabled ? 1 : 0); + entry.put("Twitch", TwitchEnabled ? 1 : 0); + entry.put("Discord", DiscordEnabled ? 1 : 0); + if(YouTubeEnabled) { + map.put("YouTube", entry); + } + if(TwitchEnabled) { + map.put("Twitch", entry); + } + if(DiscordEnabled) { + map.put("Discord", entry); + } + return map; + })); } @Override @@ -88,6 +120,8 @@ public void onDisable() { if (TwitchConnectionHelper.isConnected()) { TwitchConnectionHelper.getBot().disconnect(); } + YouTubeConnectionHelper.stop(); + getLogger().info("Corwin shutting down!"); } diff --git a/src/main/java/nl/corwindev/streamervschat/objects/UpdateChecker.java b/src/main/java/nl/corwindev/streamervschat/objects/UpdateChecker.java new file mode 100644 index 0000000..297b7aa --- /dev/null +++ b/src/main/java/nl/corwindev/streamervschat/objects/UpdateChecker.java @@ -0,0 +1,33 @@ +package nl.corwindev.streamervschat.objects; + +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Scanner; +import java.util.function.Consumer; + +public class UpdateChecker { + + private final JavaPlugin plugin; + private final int resourceId; + + public UpdateChecker(JavaPlugin plugin, int resourceId) { + this.plugin = plugin; + this.resourceId = resourceId; + } + + public void getVersion(final Consumer consumer) { + Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> { + try (InputStream inputStream = new URL("https://api.spigotmc.org/legacy/update.php?resource=" + this.resourceId).openStream(); Scanner scanner = new Scanner(inputStream)) { + if (scanner.hasNext()) { + consumer.accept(scanner.next()); + } + } catch (IOException exception) { + plugin.getLogger().info("Unable to check for updates: " + exception.getMessage()); + } + }); + } +} diff --git a/src/main/java/nl/corwindev/streamervschat/twitch/TwitchConnectionHelper.java b/src/main/java/nl/corwindev/streamervschat/twitch/TwitchConnectionHelper.java index 00eabe9..91c58c4 100644 --- a/src/main/java/nl/corwindev/streamervschat/twitch/TwitchConnectionHelper.java +++ b/src/main/java/nl/corwindev/streamervschat/twitch/TwitchConnectionHelper.java @@ -29,11 +29,9 @@ public static boolean login() { botThread = new Thread(() -> { - TwitchEvents bot = new TwitchEvents(twitchClient.getEventManager().getEventHandler(SimpleEventHandler.class)); twitchClient.joinChannel(plugin.getConfig().getString("twitch.channel")); twitchClient.connect(); - }); botThread.start(); diff --git a/src/main/java/nl/corwindev/streamervschat/twitch/TwitchEvents.java b/src/main/java/nl/corwindev/streamervschat/twitch/TwitchEvents.java index c1899b1..c86326f 100644 --- a/src/main/java/nl/corwindev/streamervschat/twitch/TwitchEvents.java +++ b/src/main/java/nl/corwindev/streamervschat/twitch/TwitchEvents.java @@ -15,6 +15,7 @@ public TwitchEvents(SimpleEventHandler eventHandler) { private void onChannelMessage(ChannelMessageEvent event) { System.out.println(event.getUser().getName() + ": " + event.getMessage()); if (event.getMessage().contains(main.plugin.getConfig().getString("commands.prefix"))) { + commands.UserList.add(event.getUser().getName()); commands.commandList.add(event.getMessage().replace(main.plugin.getConfig().getString("commands.prefix"), "")); } } diff --git a/src/main/java/nl/corwindev/streamervschat/youtube/YouTubeConnectionHelper.java b/src/main/java/nl/corwindev/streamervschat/youtube/YouTubeConnectionHelper.java index 3964275..ba4ab60 100644 --- a/src/main/java/nl/corwindev/streamervschat/youtube/YouTubeConnectionHelper.java +++ b/src/main/java/nl/corwindev/streamervschat/youtube/YouTubeConnectionHelper.java @@ -44,7 +44,7 @@ public static void main(String args) { main.plugin.getLogger().warning("[YouTube] Error: " + t.getMessage()); } } - + public static TimerTask tt = null; /** * Lists live chat messages, polling at the server supplied interval. Owners and moderators of a * live chat will poll at a faster rate. @@ -62,6 +62,7 @@ private static void listChatMessages( new TimerTask() { @Override public void run() { + tt = this; try { // Get chat messages from YouTube LiveChatMessageListResponse response = youtube @@ -123,6 +124,7 @@ private static String buildOutput( if (author.getIsChatSponsor()) { roles.add("SPONSOR"); } + commands.UserList.add(author.getDisplayName()); if (roles.size() > 0) { output.append(" ("); String delim = ""; @@ -147,7 +149,14 @@ private static String buildOutput( public static void reload(){ main.plugin.getLogger().info("[YouTube] Reloading..."); main.plugin.reloadConfig(); + tt.cancel(); main("run"); main.plugin.getLogger().info("[YouTube] Reloaded!"); } + + public static void stop(){ + main.plugin.getLogger().info("[YouTube] Stopping..."); + tt.cancel(); + main.plugin.getLogger().info("[YouTube] Stopped!"); + } } \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a14bf81..f0c30f4 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: StreamerVsChat -version: '1.4' +version: '2.0' main: nl.corwindev.streamervschat.main api-version: 1.13 commands: