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
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.connection.ProxiedPlayer;
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.List;
import java.util.concurrent.TimeUnit;
@ -19,29 +26,63 @@ public class BungeeQueue extends Plugin {
public static ServerInfo queueServer;
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<>();
@Override
public void onEnable() {
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();
queueServer = instance.getServerInfo("queue");
targetServer = instance.getServerInfo("server");
queueServer = instance.getServerInfo(conf.getString("queueServer"));
targetServer = instance.getServerInfo(conf.getString("targetServer"));
instance.getPluginManager().registerListener(this, new PlayerJoin());
instance.getPluginManager().registerCommand(this, new MaxPlayers());
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);
}
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":
if(strings.length == 2) {
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());
} else p.sendMessage(new ComponentBuilder("Bitte definiere die maximale Spieleranzahl: /maxplayers set <amount> ").color(ChatColor.RED).create());
break;
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("\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()
);
break;
case "enforce":
if(enforceMaxPlayer(strings.length == 2 ? Integer.parseInt(strings[1]) : 30))
p.sendMessage(new ComponentBuilder("Die maximale Spielerzahl wird durchgesetzt...").color(ChatColor.GREEN).create());
if(enforceMaxPlayer(strings.length == 2 ? Integer.parseInt(strings[1]) : BungeeQueue.conf.getInt("enforceDefaultTimeout")))
p.sendMessage(new ComponentBuilder("Die maximale Spieleranzahl wird durchgesetzt...").color(ChatColor.GREEN).create());
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;
case "bypass":
if(strings.length > 2) {
@ -74,8 +76,8 @@ public class MaxPlayers extends Command {
evaluatedPlayers.add(players.get(i));
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("Du wirst in " + timeout + " sekunden in die Queue verschoben!\n\n").color(ChatColor.RED)
.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 Warteschlange verschoben!\n\n").color(ChatColor.RED)
.create()
);
}
@ -85,7 +87,7 @@ public class MaxPlayers extends Command {
public void run() {
for(ProxiedPlayer p : evaluatedPlayers) {
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);

View File

@ -10,7 +10,11 @@ import net.md_5.bungee.event.EventHandler;
public class PlayerJoin implements Listener {
@EventHandler
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());
}
}

View File

@ -10,6 +10,7 @@ public class QueueInfoMessager implements Runnable {
@Override
public void run() {
for(ProxiedPlayer p : BungeeQueue.list) {
int percent = (int) Math.abs(((((float) (BungeeQueue.list.indexOf(p)+1) / (BungeeQueue.list.size()+1)) * 100))-100);
p.sendMessage(
ChatMessageType.ACTION_BAR,
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(BungeeQueue.list.size()+"").bold(true).color(ChatColor.GREEN)
.append(" - (").color(ChatColor.GRAY)
.append("" + ((BungeeQueue.list.indexOf(p) / BungeeQueue.list.size()) * 100))
.append("" + percent)
.append("%)")
.create()
);

View File

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