added effects and combo

This commit is contained in:
Elias Müller 2021-11-29 15:48:56 +01:00
parent 441ded118b
commit 2efb1cb69e
15 changed files with 84 additions and 16 deletions

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -0,0 +1,6 @@
queueServer: "queue"
targetServer: "server"
maxPlayers: 50
enforceDefaultTimeout: 30

View File

@ -1,3 +1,4 @@
name: BungeeQueue name: BungeeQueue
main: eu.mhsl.minecraft.bungeequeue.BungeeQueue main: eu.mhsl.minecraft.bungeequeue.BungeeQueue
version: 0.1 version: 0.1
author: MineTec

6
src/config.example.yml Normal file
View File

@ -0,0 +1,6 @@
queueServer: "queue"
targetServer: "server"
maxPlayers: 50
enforceDefaultTimeout: 30

View File

@ -9,7 +9,14 @@ import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.Plugin;
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.io.InputStream;
import java.nio.file.Files;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -19,29 +26,63 @@ public class BungeeQueue extends Plugin {
public static ServerInfo queueServer; public static ServerInfo queueServer;
public static ServerInfo targetServer; public static ServerInfo targetServer;
public static int maxPlayers = 1; //mutable per command public static int maxPlayers = 1; //mutable per command and config
public static Configuration conf;
public static File dataFolder;
public static List<ProxiedPlayer> list = new ArrayList<>(); public static List<ProxiedPlayer> list = new ArrayList<>();
@Override @Override
public void onEnable() { public void onEnable() {
plugin = this; plugin = this;
dataFolder = getDataFolder();
try {
if(!dataFolder.exists()) dataFolder.mkdir();
File configFile = new File(dataFolder, "config.yml");
if(!configFile.exists()) {
try(InputStream in = getResourceAsStream("config.example.yml")) {
Files.copy(in, configFile.toPath());
} catch(IOException e) {
e.printStackTrace();
}
}
conf = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(dataFolder, "config.yml"));
maxPlayers = conf.getInt("maxPlayers");
} catch(IOException e) {
e.printStackTrace();
}
ProxyServer instance = ProxyServer.getInstance(); ProxyServer instance = ProxyServer.getInstance();
queueServer = instance.getServerInfo("queue"); queueServer = instance.getServerInfo(conf.getString("queueServer"));
targetServer = instance.getServerInfo("server"); targetServer = instance.getServerInfo(conf.getString("targetServer"));
instance.getPluginManager().registerListener(this, new PlayerJoin()); instance.getPluginManager().registerListener(this, new PlayerJoin());
instance.getPluginManager().registerCommand(this, new MaxPlayers()); instance.getPluginManager().registerCommand(this, new MaxPlayers());
instance.getScheduler().schedule(this, new MoveToTarget(), 5, 1, TimeUnit.SECONDS); instance.getScheduler().schedule(this, new MoveToTarget(), 5, 1, TimeUnit.SECONDS);
instance.getScheduler().schedule(this, new QueueInfoMessager(), 5, 2, TimeUnit.SECONDS); instance.getScheduler().schedule(this, new QueueInfoMessager(), 1, 2, TimeUnit.SECONDS);
instance.getScheduler().schedule(this, new PlayersWaitingCheck(), 10, 10, TimeUnit.SECONDS); instance.getScheduler().schedule(this, new PlayersWaitingCheck(), 10, 10, TimeUnit.SECONDS);
} }
public void onDisable() { public void onDisable() {
ProxyServer.getInstance().getPluginManager().unregisterListeners(this);
ProxyServer.getInstance().getPluginManager().unregisterCommands(this);
saveConfig();
}
public static boolean saveConfig() {
try {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(conf, new File(dataFolder, "config.yml"));
return true;
} catch(IOException e) {
e.printStackTrace();
return false;
}
} }
} }

View File

@ -27,21 +27,23 @@ public class MaxPlayers extends Command {
case "set": case "set":
if(strings.length == 2) { if(strings.length == 2) {
BungeeQueue.maxPlayers = Integer.parseInt(strings[1]); BungeeQueue.maxPlayers = Integer.parseInt(strings[1]);
BungeeQueue.conf.set("maxPlayers", BungeeQueue.maxPlayers);
BungeeQueue.saveConfig();
p.sendMessage(new ComponentBuilder("Die Maximale Spieleranzahl wurde auf " + strings[1] + " gesetzt.").color(ChatColor.GREEN).create()); p.sendMessage(new ComponentBuilder("Die Maximale Spieleranzahl wurde auf " + strings[1] + " gesetzt.").color(ChatColor.GREEN).create());
} else p.sendMessage(new ComponentBuilder("Bitte definiere die maximale Spieleranzahl: /maxplayers set <amount> ").color(ChatColor.RED).create()); } else p.sendMessage(new ComponentBuilder("Bitte definiere die maximale Spieleranzahl: /maxplayers set <amount> ").color(ChatColor.RED).create());
break; break;
case "query": case "query":
p.sendMessage(new ComponentBuilder("Die aktuelle Spielerzahl ist " + BungeeQueue.maxPlayers).color(ChatColor.GREEN) p.sendMessage(new ComponentBuilder("Die aktuelle Spieleranzahl ist " + BungeeQueue.maxPlayers).color(ChatColor.GREEN)
.append("\n... davon belegt " + BungeeQueue.targetServer.getPlayers().size()).color(ChatColor.GREEN) .append("\n... davon belegt " + BungeeQueue.targetServer.getPlayers().size()).color(ChatColor.GREEN)
.append("\ndu kannst 'enforce' nutzen, um eine Überbelegung zu verhindern.").color(ChatColor.RED) .append("\nDu kannst 'enforce' nutzen, um eine Überbelegung zu verhindern.").color(ChatColor.RED)
.create() .create()
); );
break; break;
case "enforce": case "enforce":
if(enforceMaxPlayer(strings.length == 2 ? Integer.parseInt(strings[1]) : 30)) if(enforceMaxPlayer(strings.length == 2 ? Integer.parseInt(strings[1]) : BungeeQueue.conf.getInt("enforceDefaultTimeout")))
p.sendMessage(new ComponentBuilder("Die maximale Spielerzahl wird durchgesetzt...").color(ChatColor.GREEN).create()); p.sendMessage(new ComponentBuilder("Die maximale Spieleranzahl wird durchgesetzt...").color(ChatColor.GREEN).create());
else else
p.sendMessage(new ComponentBuilder("Die maximale Spielerzahl ist nicht erreicht und kann somit auch nicht durchgesetzt werden!").color(ChatColor.RED).create()); p.sendMessage(new ComponentBuilder("Die maximale Spieleranzahl ist nicht erreicht und kann somit auch nicht durchgesetzt werden!").color(ChatColor.RED).create());
break; break;
case "bypass": case "bypass":
if(strings.length > 2) { if(strings.length > 2) {
@ -74,8 +76,8 @@ public class MaxPlayers extends Command {
evaluatedPlayers.add(players.get(i)); evaluatedPlayers.add(players.get(i));
players.get(i).sendMessage(new ComponentBuilder("\n\n>> Achtung >> \n").bold(true).color(ChatColor.RED) players.get(i).sendMessage(new ComponentBuilder("\n\n>> Achtung >> \n").bold(true).color(ChatColor.RED)
.append("Aufgrund eines zu hohen Spieleraufkommens werden zufällige Spieler vom Server gekickt.\n Begebe dich an einen sicheren Ort.\n").color(ChatColor.GOLD) .append("Aufgrund eines zu hohen Spieleraufkommens, das Lags erzeugt, werden zufällige Spieler vom Server gekickt.\n Begebe dich an einen sicheren Ort.\n").color(ChatColor.GOLD)
.append("Du wirst in " + timeout + " sekunden in die Queue verschoben!\n\n").color(ChatColor.RED) .append("Du wirst in " + timeout + " Sekunden in die Warteschlange verschoben!\n\n").color(ChatColor.RED)
.create() .create()
); );
} }
@ -85,7 +87,7 @@ public class MaxPlayers extends Command {
public void run() { public void run() {
for(ProxiedPlayer p : evaluatedPlayers) { for(ProxiedPlayer p : evaluatedPlayers) {
p.connect(BungeeQueue.queueServer); p.connect(BungeeQueue.queueServer);
p.sendMessage(new ComponentBuilder("Du wurdest wie angekündigt aufgrund einer zu hohen Spielerzahl zurück in die Queue versetzt. Die Auswahl dich zu verschieben war Zufällig. Sorry - gönn dir eine Pause!").color(ChatColor.GOLD).create()); p.sendMessage(new ComponentBuilder("Du wurdest wie angekündigt aufgrund eines zu hohen Spieleraufkommens zurück in die Warteschlange versetzt. Die Auswahl Dich zu verschieben war zufällig. Sorry!").color(ChatColor.GOLD).create());
} }
} }
}, timeout, TimeUnit.SECONDS); }, timeout, TimeUnit.SECONDS);

View File

@ -10,7 +10,11 @@ import net.md_5.bungee.event.EventHandler;
public class PlayerJoin implements Listener { public class PlayerJoin implements Listener {
@EventHandler @EventHandler
public void onPlayerJoin(PostLoginEvent e) { public void onPlayerJoin(PostLoginEvent e) {
e.getPlayer().sendMessage(new ComponentBuilder("Du wurdest zur Queue hinzugefügt!").color(ChatColor.DARK_AQUA).create()); e.getPlayer().sendMessage(new ComponentBuilder("Hey,\nDu befindest dich gerade in der Warteschlange des ").color(ChatColor.GOLD)
.append(" CraftAttack 4 ").color(ChatColor.AQUA)
.append("Servers.\nÜber deiner Hotbar siehst Du deinen aktuellen Platz in der Warteschlange. Wir entschuldigen, dass Du hier warten musst, aber um den Server lagfrei zu betreiben ist dies unerlässlich.").color(ChatColor.GOLD)
.create()
);
BungeeQueue.list.add(e.getPlayer()); BungeeQueue.list.add(e.getPlayer());
} }
} }

View File

@ -10,6 +10,7 @@ public class QueueInfoMessager implements Runnable {
@Override @Override
public void run() { public void run() {
for(ProxiedPlayer p : BungeeQueue.list) { for(ProxiedPlayer p : BungeeQueue.list) {
int percent = (int) Math.abs(((((float) (BungeeQueue.list.indexOf(p)+1) / (BungeeQueue.list.size()+1)) * 100))-100);
p.sendMessage( p.sendMessage(
ChatMessageType.ACTION_BAR, ChatMessageType.ACTION_BAR,
new ComponentBuilder("Warteschlange platz ").color(ChatColor.DARK_GREEN) new ComponentBuilder("Warteschlange platz ").color(ChatColor.DARK_GREEN)
@ -17,7 +18,7 @@ public class QueueInfoMessager implements Runnable {
.append(" / ").bold(false).color(ChatColor.DARK_GREEN) .append(" / ").bold(false).color(ChatColor.DARK_GREEN)
.append(BungeeQueue.list.size()+"").bold(true).color(ChatColor.GREEN) .append(BungeeQueue.list.size()+"").bold(true).color(ChatColor.GREEN)
.append(" - (").color(ChatColor.GRAY) .append(" - (").color(ChatColor.GRAY)
.append("" + ((BungeeQueue.list.indexOf(p) / BungeeQueue.list.size()) * 100)) .append("" + percent)
.append("%)") .append("%)")
.create() .create()
); );

View File

@ -1,3 +1,4 @@
name: BungeeQueue name: BungeeQueue
main: eu.mhsl.minecraft.bungeequeue.BungeeQueue main: eu.mhsl.minecraft.bungeequeue.BungeeQueue
version: 0.1 version: 0.1
author: MineTec