initial commit
This commit is contained in:
Generated
+3
@@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
Generated
+8
@@ -0,0 +1,8 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="BungeeQueue:jar">
|
||||
<output-path>$PROJECT_DIR$/out/artifacts/BungeeQueue_jar</output-path>
|
||||
<root id="archive" name="BungeeQueue.jar">
|
||||
<element id="module-output" name="BungeeQueue" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
Generated
+9
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="waterfall-1.17-451">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/../ClientBlocker/run/proxy/waterfall-1.17-451.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
Generated
+11
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="EntryPointsManager">
|
||||
<list size="1">
|
||||
<item index="0" class="java.lang.String" itemvalue="net.md_5.bungee.event.EventHandler" />
|
||||
</list>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="adopt-openjdk-11" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
Generated
+8
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/BungeeQueue.iml" filepath="$PROJECT_DIR$/BungeeQueue.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
Generated
+10
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RunConfigurationProducerService">
|
||||
<option name="ignoredProducers">
|
||||
<set>
|
||||
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
Generated
+124
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Palette2">
|
||||
<group name="Swing">
|
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||
</item>
|
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||
<initial-values>
|
||||
<property name="text" value="Button" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="RadioButton" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="CheckBox" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="Label" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||
<preferred-size width="-1" height="20" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||
</item>
|
||||
</group>
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="minecraft" name="Minecraft">
|
||||
<configuration>
|
||||
<autoDetectTypes>
|
||||
<platformType>WATERFALL</platformType>
|
||||
</autoDetectTypes>
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="waterfall-1.17-451" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
name: BungeeQueue
|
||||
main: eu.mhsl.minecraft.bungeequeue.BungeeQueue
|
||||
version: 0.1
|
||||
@@ -0,0 +1,47 @@
|
||||
package eu.mhsl.minecraft.bungeequeue;
|
||||
|
||||
import eu.mhsl.minecraft.bungeequeue.command.MaxPlayers;
|
||||
import eu.mhsl.minecraft.bungeequeue.listener.PlayerJoin;
|
||||
import eu.mhsl.minecraft.bungeequeue.scheduler.MoveToTarget;
|
||||
import eu.mhsl.minecraft.bungeequeue.scheduler.PlayersWaitingCheck;
|
||||
import eu.mhsl.minecraft.bungeequeue.scheduler.QueueInfoMessager;
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class BungeeQueue extends Plugin {
|
||||
public static Plugin plugin;
|
||||
public static ServerInfo queueServer;
|
||||
public static ServerInfo targetServer;
|
||||
|
||||
public static int maxPlayers = 1; //mutable per command
|
||||
|
||||
public static List<ProxiedPlayer> list = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
plugin = this;
|
||||
ProxyServer instance = ProxyServer.getInstance();
|
||||
|
||||
queueServer = instance.getServerInfo("queue");
|
||||
targetServer = instance.getServerInfo("server");
|
||||
|
||||
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 PlayersWaitingCheck(), 10, 10, TimeUnit.SECONDS);
|
||||
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package eu.mhsl.minecraft.bungeequeue.command;
|
||||
|
||||
import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.plugin.Command;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class MaxPlayers extends Command {
|
||||
public MaxPlayers() {
|
||||
super("maxplayers", "bungeequeue.queue");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender p, String[] strings) {
|
||||
if(strings.length >= 1) {
|
||||
switch (strings[0]) {
|
||||
case "set":
|
||||
if(strings.length == 2) {
|
||||
BungeeQueue.maxPlayers = Integer.parseInt(strings[1]);
|
||||
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)
|
||||
.append("\n... davon belegt " + BungeeQueue.targetServer.getPlayers().size()).color(ChatColor.GREEN)
|
||||
.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());
|
||||
else
|
||||
p.sendMessage(new ComponentBuilder("Die maximale Spielerzahl ist nicht erreicht und kann somit auch nicht durchgesetzt werden!").color(ChatColor.RED).create());
|
||||
break;
|
||||
case "bypass":
|
||||
if(strings.length > 2) {
|
||||
p.sendMessage(new ComponentBuilder("Bitte definiere nur einen Nutzernamen").color(ChatColor.RED).create());
|
||||
} else if(strings.length == 2) {
|
||||
ProxiedPlayer targetPlayer = ProxyServer.getInstance().getPlayer(strings[1]);
|
||||
targetPlayer.connect(BungeeQueue.targetServer);
|
||||
p.sendMessage(new ComponentBuilder(targetPlayer.getName() + " wurde an der Queue vorbeigelassen!").color(ChatColor.GREEN).create());
|
||||
targetPlayer.sendMessage(new ComponentBuilder("Du wurdest von einem Administrator vorzeitig auf den Server verschoben!").color(ChatColor.GREEN).create());
|
||||
} else {
|
||||
((ProxiedPlayer) p).connect(BungeeQueue.targetServer);
|
||||
p.sendMessage(new ComponentBuilder("Du wurdest per Befehl von der Queue befreit!").color(ChatColor.GREEN).create());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
p.sendMessage(new ComponentBuilder("Invalide Command-Syntax, valide argumente sind <query | set <amount> | enforce>").color(ChatColor.RED).create());
|
||||
}
|
||||
} else p.sendMessage(new ComponentBuilder("Die Syntax des commands ist /maxplayers <query | set <amount> | enforce>").color(ChatColor.RED).create());
|
||||
}
|
||||
|
||||
private boolean enforceMaxPlayer(int timeout) {
|
||||
List<ProxiedPlayer> evaluatedPlayers = new ArrayList<>();
|
||||
|
||||
int leftOver = BungeeQueue.targetServer.getPlayers().size() - BungeeQueue.maxPlayers;
|
||||
if(leftOver <= 0) return false;
|
||||
|
||||
List<ProxiedPlayer> players = new ArrayList<>(BungeeQueue.targetServer.getPlayers());
|
||||
Collections.shuffle(players);
|
||||
for (int i = 0; i < leftOver; i++) {
|
||||
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)
|
||||
.create()
|
||||
);
|
||||
}
|
||||
|
||||
ProxyServer.getInstance().getScheduler().schedule(BungeeQueue.plugin, new Runnable() {
|
||||
@Override
|
||||
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());
|
||||
}
|
||||
}
|
||||
}, timeout, TimeUnit.SECONDS);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package eu.mhsl.minecraft.bungeequeue.listener;
|
||||
|
||||
import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.event.PostLoginEvent;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
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());
|
||||
BungeeQueue.list.add(e.getPlayer());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package eu.mhsl.minecraft.bungeequeue.scheduler;
|
||||
|
||||
import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
public class MoveToTarget implements Runnable {
|
||||
private boolean targetIsOnline = false;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
//check if people are in Queue
|
||||
if(BungeeQueue.list.size() == 0) return;
|
||||
|
||||
//check target-server reachable
|
||||
BungeeQueue.targetServer.ping((result, error) -> {
|
||||
targetIsOnline = (error == null);
|
||||
if(!targetIsOnline) ProxyServer.getInstance().getLogger().warning(error.getMessage());
|
||||
});
|
||||
if(!targetIsOnline) {
|
||||
ProxyServer.getInstance().getLogger().warning("Target-Server seems Offline! Cancelling Queue-Movement...");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//test if target-server has free Space - move Players
|
||||
if(BungeeQueue.targetServer.getPlayers().size() < BungeeQueue.maxPlayers) {
|
||||
ProxiedPlayer p = BungeeQueue.list.remove(0);
|
||||
p.sendMessage(new ComponentBuilder("Teleportiere zum Zielserver...").color(ChatColor.GRAY).append("\nViel Spaß!").color(ChatColor.GREEN).create());
|
||||
p.connect(BungeeQueue.targetServer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package eu.mhsl.minecraft.bungeequeue.scheduler;
|
||||
|
||||
import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
public class PlayersWaitingCheck implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
for(ProxiedPlayer p : BungeeQueue.queueServer.getPlayers()) {
|
||||
//check if there are players on queue but not registered by the Plugin
|
||||
if(!BungeeQueue.list.contains(p)) {
|
||||
ProxyServer.getInstance().getLogger().warning("Added missing Player " + p.getName() + " to Queue!");
|
||||
BungeeQueue.list.add(p);
|
||||
}
|
||||
}
|
||||
|
||||
for(ProxiedPlayer p : BungeeQueue.list) {
|
||||
//check if players not connected anymore in queue
|
||||
if(!BungeeQueue.queueServer.getPlayers().contains(p)) {
|
||||
ProxyServer.getInstance().getLogger().warning("Removed missing Player " + p.getName() + " from Queue!");
|
||||
BungeeQueue.list.remove(p);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package eu.mhsl.minecraft.bungeequeue.scheduler;
|
||||
|
||||
import eu.mhsl.minecraft.bungeequeue.BungeeQueue;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
public class QueueInfoMessager implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
for(ProxiedPlayer p : BungeeQueue.list) {
|
||||
p.sendMessage(
|
||||
ChatMessageType.ACTION_BAR,
|
||||
new ComponentBuilder("Warteschlange platz ").color(ChatColor.DARK_GREEN)
|
||||
.append((BungeeQueue.list.indexOf(p)+1)+"").bold(true).color(ChatColor.GREEN)
|
||||
.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("%)")
|
||||
.create()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
name: BungeeQueue
|
||||
main: eu.mhsl.minecraft.bungeequeue.BungeeQueue
|
||||
version: 0.1
|
||||
Reference in New Issue
Block a user