initial commit
This commit is contained in:
commit
441ded118b
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
8
.idea/artifacts/BungeeQueue_jar.xml
generated
Normal file
8
.idea/artifacts/BungeeQueue_jar.xml
generated
Normal file
@ -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>
|
9
.idea/libraries/waterfall_1_17_451.xml
generated
Normal file
9
.idea/libraries/waterfall_1_17_451.xml
generated
Normal file
@ -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>
|
11
.idea/misc.xml
generated
Normal file
11
.idea/misc.xml
generated
Normal file
@ -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>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -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>
|
10
.idea/runConfigurations.xml
generated
Normal file
10
.idea/runConfigurations.xml
generated
Normal file
@ -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>
|
124
.idea/uiDesigner.xml
generated
Normal file
124
.idea/uiDesigner.xml
generated
Normal file
@ -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>
|
21
BungeeQueue.iml
Normal file
21
BungeeQueue.iml
Normal file
@ -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>
|
BIN
out/artifacts/BungeeQueue_jar/BungeeQueue.jar
Normal file
BIN
out/artifacts/BungeeQueue_jar/BungeeQueue.jar
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3
out/production/BungeeQueue/plugin.yml
Normal file
3
out/production/BungeeQueue/plugin.yml
Normal file
@ -0,0 +1,3 @@
|
||||
name: BungeeQueue
|
||||
main: eu.mhsl.minecraft.bungeequeue.BungeeQueue
|
||||
version: 0.1
|
47
src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java
Normal file
47
src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java
Normal file
@ -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() {
|
||||
|
||||
}
|
||||
|
||||
}
|
95
src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java
Normal file
95
src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java
Normal file
@ -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;
|
||||
}
|
||||
}
|
16
src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java
Normal file
16
src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java
Normal file
@ -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()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
3
src/plugin.yml
Normal file
3
src/plugin.yml
Normal file
@ -0,0 +1,3 @@
|
||||
name: BungeeQueue
|
||||
main: eu.mhsl.minecraft.bungeequeue.BungeeQueue
|
||||
version: 0.1
|
Loading…
x
Reference in New Issue
Block a user