commit 4863f9a29fe5e939011a094dd7b4ee266d253a24 Author: ryans1230 Date: Sat Sep 9 10:40:09 2017 -0400 Initial Commit diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..fcd4944 --- /dev/null +++ b/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + me.ryans1230 + BungeeKickListener + 1.0 + jar + + BungeeKickListener + + + UTF-8 + + + + clean package + + + 3.6.1 + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.0.0 + + + package + + shade + + + true + + + + + + + + src/main/resources + true + + + + + + + sonatype-oss-repo + https://oss.sonatype.org/content/groups/public/ + + + + + + net.md-5 + bungeecord-api + 1.12-SNAPSHOT + provided + + + diff --git a/src/main/java/me/ryans1230/bungeekicklistener/BungeeKickListener.java b/src/main/java/me/ryans1230/bungeekicklistener/BungeeKickListener.java new file mode 100644 index 0000000..fefb9e6 --- /dev/null +++ b/src/main/java/me/ryans1230/bungeekicklistener/BungeeKickListener.java @@ -0,0 +1,26 @@ +package me.ryans1230.bungeekicklistener; + +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.plugin.Plugin; + +import java.util.List; + +public final class BungeeKickListener extends Plugin { + List reasonList; + boolean banCheck; + ServerInfo fallback; + @Override + public void onEnable() { + ConfigUtil util = new ConfigUtil(this); + util.createConfig(); + getProxy().getPluginManager().registerListener(this, new KickListener(this)); + reasonList = ConfigUtil.c.getStringList("list"); + banCheck = ConfigUtil.c.getBoolean("ban-check"); + fallback = getProxy().getServerInfo(ConfigUtil.c.getString("fallback-server")); + } + + @Override + public void onDisable() { + // Plugin shutdown logic + } +} \ No newline at end of file diff --git a/src/main/java/me/ryans1230/bungeekicklistener/ConfigUtil.java b/src/main/java/me/ryans1230/bungeekicklistener/ConfigUtil.java new file mode 100644 index 0000000..cdd93f7 --- /dev/null +++ b/src/main/java/me/ryans1230/bungeekicklistener/ConfigUtil.java @@ -0,0 +1,42 @@ +package me.ryans1230.bungeekicklistener; + +import net.md_5.bungee.config.Configuration; +import net.md_5.bungee.config.ConfigurationProvider; +import net.md_5.bungee.config.YamlConfiguration; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; + +@SuppressWarnings("ResultOfMethodCallIgnored") +class ConfigUtil { + private volatile BungeeKickListener plugin; + ConfigUtil(BungeeKickListener plugin) {this.plugin = plugin;} + static Configuration c; + private static ConfigurationProvider provider = ConfigurationProvider.getProvider(YamlConfiguration.class); + + synchronized void createConfig() { + plugin.getLogger().info("Generating default configuration file. Edit it and restart your network."); + File f = plugin.getDataFolder(); + File conf = new File(f, "config.yml"); + try { + plugin.getDataFolder().mkdir(); + conf.createNewFile(); + Configuration config = provider.load(conf); + c = config; + + if(config.getString("fallback-server").isEmpty()) { + config.set("fallback-server", "lobby"); + } + if(!config.getBoolean("ban-check")) { + config.set("ban-check", false); + } + if (config.getStringList("list").isEmpty()) { + config.set("list", Arrays.asList("kicked", "restarting")); + } + provider.save(config, conf); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/me/ryans1230/bungeekicklistener/KickListener.java b/src/main/java/me/ryans1230/bungeekicklistener/KickListener.java new file mode 100644 index 0000000..bdfdc37 --- /dev/null +++ b/src/main/java/me/ryans1230/bungeekicklistener/KickListener.java @@ -0,0 +1,37 @@ +package me.ryans1230.bungeekicklistener; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.event.ServerKickEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import net.md_5.bungee.event.EventPriority; + +public class KickListener implements Listener { + private BungeeKickListener plugin; + KickListener(BungeeKickListener plugin) {this.plugin = plugin;} + + @EventHandler(priority = EventPriority.HIGHEST) + public void onServerKickEvent(ServerKickEvent e) { + ServerInfo fallback = plugin.fallback; + String reason = BaseComponent.toLegacyText(e.getKickReasonComponent()); + String from = e.getKickedFrom().getName(); + e.setCancelServer(fallback); + e.setCancelled(true); + + if(plugin.banCheck) { + e.getPlayer().disconnect(e.getKickReasonComponent()); + return; + } + + if(plugin.reasonList.contains(reason)) { + if(!from.equals(fallback.getName())) { + e.getPlayer().sendMessage(new ComponentBuilder(ChatColor.RED + from + " is most likely restarting, you have been connected to \"" + fallback.getName() + "\"").create()); + return; + } + } + e.getPlayer().sendMessage(new ComponentBuilder(ChatColor.RED + "Your connection to " + e.getKickedFrom().getName() + " was interrupted. You have been connected to: " + e.getCancelServer().getName()).color(ChatColor.RED).create()); + } +} \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..39c587b --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,5 @@ +fallback-server: lobby +ban-check: true +list: + - restarting + - kicked \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..1d8dfd1 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: BungeeKickListener +version: ${project.version} +main: me.ryans1230.bungeekicklistener.BungeeKickListener +author: ryans1230 \ No newline at end of file