From 441ded118b0eb13fb08b83a491ad75cd2faa1181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= <elias@elias-mueller.com> Date: Sat, 27 Nov 2021 23:06:48 +0100 Subject: [PATCH] initial commit --- .idea/.gitignore | 3 + .idea/artifacts/BungeeQueue_jar.xml | 8 ++ .idea/libraries/waterfall_1_17_451.xml | 9 ++ .idea/misc.xml | 11 ++ .idea/modules.xml | 8 ++ .idea/runConfigurations.xml | 10 ++ .idea/uiDesigner.xml | 124 ++++++++++++++++++ BungeeQueue.iml | 21 +++ out/artifacts/BungeeQueue_jar/BungeeQueue.jar | Bin 0 -> 11738 bytes .../minecraft/bungeequeue/BungeeQueue.class | Bin 0 -> 2399 bytes .../bungeequeue/command/MaxPlayers$1.class | Bin 0 -> 1957 bytes .../bungeequeue/command/MaxPlayers.class | Bin 0 -> 5922 bytes .../bungeequeue/listener/PlayerJoin.class | Bin 0 -> 1439 bytes .../bungeequeue/scheduler/MoveToTarget.class | Bin 0 -> 3114 bytes .../scheduler/PlayersWaitingCheck.class | Bin 0 -> 2130 bytes .../scheduler/QueueInfoMessager.class | Bin 0 -> 2334 bytes out/production/BungeeQueue/plugin.yml | 3 + .../minecraft/bungeequeue/BungeeQueue.java | 47 +++++++ .../bungeequeue/command/MaxPlayers.java | 95 ++++++++++++++ .../bungeequeue/listener/PlayerJoin.java | 16 +++ .../bungeequeue/scheduler/MoveToTarget.java | 36 +++++ .../scheduler/PlayersWaitingCheck.java | 29 ++++ .../scheduler/QueueInfoMessager.java | 26 ++++ src/plugin.yml | 3 + 24 files changed, 449 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/artifacts/BungeeQueue_jar.xml create mode 100644 .idea/libraries/waterfall_1_17_451.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 BungeeQueue.iml create mode 100644 out/artifacts/BungeeQueue_jar/BungeeQueue.jar create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.class create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.class create mode 100644 out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class create mode 100644 out/production/BungeeQueue/plugin.yml create mode 100644 src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java create mode 100644 src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java create mode 100644 src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java create mode 100644 src/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.java create mode 100644 src/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.java create mode 100644 src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java create mode 100644 src/plugin.yml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/artifacts/BungeeQueue_jar.xml b/.idea/artifacts/BungeeQueue_jar.xml new file mode 100644 index 0000000..b33c59d --- /dev/null +++ b/.idea/artifacts/BungeeQueue_jar.xml @@ -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> \ No newline at end of file diff --git a/.idea/libraries/waterfall_1_17_451.xml b/.idea/libraries/waterfall_1_17_451.xml new file mode 100644 index 0000000..d25e01c --- /dev/null +++ b/.idea/libraries/waterfall_1_17_451.xml @@ -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> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..6b02fc2 --- /dev/null +++ b/.idea/misc.xml @@ -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> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5258986 --- /dev/null +++ b/.idea/modules.xml @@ -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> \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -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> \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -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> \ No newline at end of file diff --git a/BungeeQueue.iml b/BungeeQueue.iml new file mode 100644 index 0000000..9c3cf1a --- /dev/null +++ b/BungeeQueue.iml @@ -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> \ No newline at end of file diff --git a/out/artifacts/BungeeQueue_jar/BungeeQueue.jar b/out/artifacts/BungeeQueue_jar/BungeeQueue.jar new file mode 100644 index 0000000000000000000000000000000000000000..69bb97516ca7295253b51f9eb69b5198e2d65fea GIT binary patch literal 11738 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	$ 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 Dlq5+x literal 0 HcmV?d00001 diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..7773d136805cc8277f798039079251ed959cbc6f GIT binary patch literal 2399 zcmbtWZF3V<6n<_=y2*BHU#JCzPFsqSCcuJ%im4H3i#8;sC7~7HaJ#upE^O}NX17DX z`3?V$cBZJz_yhbE{u0M?ck>2rLubrna`&Ed&)ajKb2fkd^T(e6K8DnB9)&a(@VSng zxRt_fwJs~kN(!rLy`v;wX!ufxj)IOg6gAw{F&b@3N?q2lu44j)B)L_eWE%IdF@jCp z*HF=Ms;3&#P}Om!C(u=t2O73?%tgs;YxqjTLx$m}PEZ$;VWA|sZ#HX>uA4i7taEN! zPlXw2&5iI-o?+z2fCs$7y*=(RT!^)?UAZgjW^`yx?z&`W_?B1ae#cO6TF*8dYoB{9 z2DZkKa74>z7%x4x_AE2-g=3aTLYC=@s7uQaJkD_QHTBX_@g=u?;YxGEbDs%bi$diK z<ZgILNZ}V4PGlChDDJXbBgbPUA^CdH+~Ho;+HpuSS#oX5*|I#L_HALpZwN{_SK@)$ zY_uG+NoKZZ?fPxZLUhdAA%2?*DT<hK<*JOFri5(ymbA(Ld~E6}-~9+ARk|xzM5}GO zWIOH5^@<yKHoqfOp5uMNE-Ua1T)|ZX@8Nw7UmN%a-!de_ybOGY?+si)hG1xgS7=}n z83T{-1H;w9MX3wol6%Ajb#FyiNDUNi2R6f%!M3*BY+ABrmb<rZpayPW7j=efgN<8u zgVzFwBA4AgUUjP>lQc982t3yC#DIe)!;Ry*2`@(Rvdmj8tFDNgKdx<?wA+^Og{&_( zxJ}`+$T6JkG540|S^J8<1}@?f!{T7?eK$zFcw-kb%*LJRqYkwx_1apOYYUmhW3X+s z+n)*>!Xy)Qn`238X5XWF^YMP-8h)I-MN^|}$q3|&N2Kw}jA@@H_GjX%j5|wB;PJYm zr>8(yBxSgpi7ojR`~09I9aniZCdN7emLn!J6#uXPwx`g&p`h>3oWVQ-s9q;jt=5yS z0bw=MBOhIc9e5s>zF8Gb{(z<(gH~BxzPG+oA@1~z(3qp-D;J0R5us_ibu<jmj|EAX zX~?PjfehzjzF2%iQt`CwME1-M6g7oQ9`p3JJFi}mNUJ$WPiZyv!j<M-xKhuCD>Wz> zF4OZ6OeE-;#wY!LKoXNyMr$(r0_>OY$cOYh9116Jjh>C@0IuUB+A(_JcZ~l=id+Ie zXAdy+8%~sRlZitl4=|jY)WU~U?hxthOXv?@VB`=+dpk<ow+=Bz+i}uP&~|bPC-q<P z_V1WZVY{t3MT*m;n8G`+tIm+>>=b6`+g0`Q&(gmP;4Bq8LpjdUpNcuWi*xiUSimO) z*d{^d5Ma+qqH3Iu>S))P!cTPS2Gz>&X}4Mhrh@7}FkR|{iFIA%`wSIGz*yn{voA46 bna>~KoXVC#p{<9}rzzXhBv~TK5I*}C8>x<l literal 0 HcmV?d00001 diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class new file mode 100644 index 0000000000000000000000000000000000000000..072b04821f6c1941cb4d3dace19e327629236987 GIT binary patch literal 1957 zcmb7FZBHCk6n^fqFt9r<6e-ph?4Y#WUA7F=zNpkHyU-Th1=_7tsEN7ETy}4ny@T@t zls{tpZsG?&*|aohV@&vF{6)s7=MD=rW^2kOd+yvb=jA!)KIhKwfB*a|fNS`w2d7Zf z;$jB<7|X)Ocoyd{p~WQw@Au#`u4G~0s)1|W_#lG}KJ39qnAA_#wfI=SzG2`K1D_h0 zVi?%q-iRO(^GLW09)Bc)kfE>gkZ*81j-+Q-WEf2{bVUsrj*K&0s)*QbHbT#CN+q0t zuSWJttm;C16N^~bj^Au@<=R!g)rzORuS+GP8w@kK<GcSCOn#9eUG`nU&|4u4b8&M; z1o!xgN1FbM?{IIC2U71_%CrX0V9qKfg0jcMP|)`Bv7wAiP%RxntVrfG47ScNR#76d zo9@?FT79tjx}-KxE+>+{vKIn>OCEHW0-UHt+*zyg^#q-P5<{lu$AKemN?k(lQR~L^ zIgn;XIi4R%Rj-Pu;kyRPCZ;jN&^;%@=(Zn5CI<1ki2<B8aR$Q%Zko7-+a_l5nTgL) zVJIF4r-7=8In0|_z#WEsTi*tc?6Tin_mxmlDVClq0)`)_V{0=GTta4TN?~y#$J*X= z<;r?w@p!dP4RkF*Cl^@TvDNS!LRqzSDLfHu^M*&tVDGuJW=Una<bOx=%Gw}iifB6; zv!+Qm6^EPJ)Rj&{2hnexh7>ClYLf@na=g0tz30jLm{s$G;E{FFs_*S69WY2zTMIl6 z#jtMHT>~`}_wa>@Mcg;>C6-Jq;{kE~xKtmRpy5eo$D^w4`IU#n0V3s*>Tax5i>XI5 zHXDh6M?Up#{J0q@pHQnlk>`*#G#$Cw{4&GIqYQeAi7oOl(O@qB!dx8yAa)uJ9?pp^ zvL=dCkhDrR0|)jm6h_wh|HoTOE{5a)8M4U*Q4;|j7Q=;?jm@g8+xtedRG3E8nk9xp z?iHQ%Y@W{T7nlI9MFCCEq}C6$qjH(3T=qSE1nFDzm1%~vZBrfE5w1>W-=WeT)sbnw zZ78SR^ibF?ClGWSGmPf)4_@wB;-NU4J#x#2Lb+8DhP+O`#oQ~q<`-enXQdwuuOZdf zr|%GeR=QB=)03kA8N5Mn-=wE9?K^1gEsQ<|D-@q1Rd|MupAy5jNOqASP{Z3K2NUOB z4B;&8$SDa)w<aYVZUy`n=_FvO@C2z{q!}usyXa*24iogy#qb-9YVk3;chQqV@fT#4 z`m@hqKE{b1oZLb0F8WgV;h#S=h7M>9gXko=NO|w$JdN`WEMbZ!`T)}qWq%j%CFn{m rbR*=EMd~kP44nHDR|(d6Ql)SKIa<@mqkz#wlgB%>W~hKuw9@Zil;0oy literal 0 HcmV?d00001 diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class new file mode 100644 index 0000000000000000000000000000000000000000..f7004e09a8a87ff3259c77e1576767a3a5a30f15 GIT binary patch literal 5922 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 literal 0 HcmV?d00001 diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class new file mode 100644 index 0000000000000000000000000000000000000000..75ee954974051cd9df2568fc811123b0731299f5 GIT binary patch literal 1439 zcmb7ETT|396#lYY>Mm6f6-7mti`oKO5fK%<EDMgKRq=+SJ~*WfOPp?sZHkwFB@ZyD z<BM<pD94kQVP~{D`jX@%Ip=)md|&eY$EU9Vrm;}LUYw}lB&r4m_h6`kHVl_Bf>U~R zS`TNsV8Je96k}Z&$5{jC3^)ePGjz@hDb#g_Hp^aOXs<^BXXti?<oDC&GLN5l%OUOb zx{>dNOI|Fry|dY_Rz<=v>GITRt|p<=BsV|yR+O`x$_D3eQl4@r6p7-J$IfEtz31_r zNXQumGm<Tv;jHCKuAFA@YHG*X@z#XH*SS>AVw5O1Y6!WY%^8i95vb9BcVXy%lu9L< zd`TpNN~lR0DNl(=QUxQw1<Lbg>27;62zgA9E03cz_W3QLJJQ`kf9|!n?wRODkAVpj z7cj|S7ggi0ddjIs&9z8U9doG&10FLB&8OA3X&mrGRX?P0^`UNCbydg@X@jqP`_fQ@ zI{HNeQzkB9+QemCF>w_$24+oM!*v5UOx#4xz?_LX<{2jbn-hi}U568Tvf(^fe$9Qw zFkDo|T9^_Sj=RGvgH?2^h&qOHgR8uA4CgKTx5jJI{Ya9IG&jy-9K91f$UTUHLzdeD z`B=q5HZnO36d|ZnyX#RHQH#s-wMTbf)gC^rF`O(+x_g<jbojZKTP(`f)j!}bqM5>W z`Z4zuX=lu`UlxMM1TyC(d{-poHeOWQpL)d5m2er{<4NK*DAl<2&zbbIvi~ldx$IeI z`lQc7KWtJ>&Pb|6m`Q>V@5?ya-J##b3xZ$B%M~_bzrY|&`oqYJKC}|e^p0rUPnJV7 zqq$>r3+!Wd+)HC;wpqaeTATR=9K<2A82WISf@o)sc3J`U*d|J!(e}KzeG45M=-h;{ zi9OpWm#~3~KHWxF3C~&y_R*&a!gP!<S%gO?>dS-eB%-i5f__SPl+HAuV>B}yr?G^A EpH$|IZU6uP literal 0 HcmV?d00001 diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.class new file mode 100644 index 0000000000000000000000000000000000000000..3802aca59d918edbd0bba1823586eeda71ef2661 GIT binary patch literal 3114 zcmbVOYf~Fl7=BI?SO{C76ezu6pwxyy*{Z!t?S<G2HYpSkZL8KpatK>CyXo$R7QElB z_xq*ZX8hvkGD@Y+IL`RN8OQ(N4{=6)&u*He)1}saNX|L$c`wg<J^TCL*M0`D8(&A! ziQV<sggy1xi~Aceh<$SRKnvX`8}J|wM{xv4<=?S73`g-0j!SZ?0coH0gcKT4Fsk5W z9mb+qjq!R+;9<F&tivO6eN<9T$=&G&G~<l?dn}3_cwE5~3eGBclA+P%c22m%&WLH~ zreI*F8EW_Grta=%2*-OT86rt5OE*m^VmMLEPYHX1PZ>mMNm&_gOmbV7=MpjE&gc%q zu9PTh`5DL1@+6kA`LwG|70sLw=Zm5!G$%77vPDDKTH2Zu6V`->V~}jxMU!9@7zR?N zaJ78)?9P&;#tXWZu}sqE>XxaE+SWx~WJe7?FKiNBHSY4vY?>EJP*j8Gr?R|<H1=#~ z*b@&_I4<ltVUOx&ZZLI@&vDJ*W=@-!v8@Zztw9-rT3a|p!)1v5mkNd&VcV9?&=#mo z0aq}^5FNLQc19f0Wgu5q$6!E$P|=OeDq`qTkWrC^P%y0`hZz+*&M`C(S(fX#HZP=w zJ7Z;?rdrH4!)Q{FZ^nQM6PAL4iu14)I4WEeRm|Z6!(Knu+kD4kju3e#HZnae3!p2O z<Yq<~w9my(%1mvO*z&@32L=WdTvRcS1r<->X$8-ycoxs8cpfh>^#7k^G4uwq&u~{u zTKR%ylEI;(Ze#^TvU5ThqF~vsE^HB7DCT3QbzwMO-UyY9)q;W-RlJ0kRlI^%8Pw<` zvBbs;{MT=~RJ?}QRa}y{Z{ST8Z{ckf@8De(@8Nxh9d}Zyl!8jNj7*)Qnxu}Xkj9Fp z>9<K|kgJudV^~v>DwiEa=+>x)yk_!JL@jFQ4w-NEORnhZhL$1<^+cnmyG$WgM_-_l zqt+g#F!}B8gJIYjSl!fd(|S(xnTE}2YcPrr@F7DYURC0L2v%yLD9yW%$at1A%P<+g zv+2+qh%d<vV~QG|yxkHM>YMNrjsn#;Ls#%bC@Yk$e^-!7IeF%<N3B5)P}6Z`<1lQF z2cxVKA)xgnld^I-S>78-qLL+ps02>)Z;7>Ir8@@Y0=G@ileX$qjJq}wy}=bFJN|s6 zncQ)Mp`>LP{vahItra5`I!&oOzgQM$R4_CM^E3}=y2Xb}sJ(Gn%09!Upl~IruSu<( zijkvZhfYycgEM)Zj}X;le1X&oIV!UThdUEAN=R)jFBF8CWjGKNu|QNSsj4|TcKGlK zQkk&@cPS=)@!m5lYZ&5=D9<)R(%=w|v~V1rBia7=ZHvmPR7%gF*MvbKzp3cU<xn=+ zdc7RH43>&U!N)2-!DSWOFu>65)rH5Pn{(Ez&{E!;N{<eo<{8(r=gE_N<)q+Cib%?` zW{dQMtHbnI+ew2vj-UekqdMj#eg5-xjGI|QI6b~#^%N=Ls+u%62u{owL^b>EU-~9* zEn8jUCCzd;jO(r#RPYrIoSWhk<PSYzx8_3^&BsnqU(hckpMClk4AY*z0_eYoPJ4*X zXpJVWf+fN~AasRJA#9N}T7h~*Xm>a5RG$-D5vLP9C1ovt5|89vSVVXk5r)f%Tv<d- z;u>m!WhfyezDMXXntnvx66#x`OK6Y`%TO8JuVPq4<G0vH@}!_CgkR{@>H7(*PqnmM z#hOL5E}^ZZeF<w9(LviKtXszV5c)hF8$yt%!yf7cp#_=<Z41_;oqS%4esoabb>bjJ zB29595Oto=ORw4qd73y9==1zrDEZe<cM8I4>@OT|4#~QuYZ<ajBoL;xJJJ6el*o68 z$guhTHT(YcFJYtfkhpwMjh@6BtU@c9Zu1Psd@Ut&qz@Xldl0&D5AG!^62b<AhZSu4 vN2;P#!F>vSY=>ye+DXAqqKB{xpVJy8;ZN}eKEpcfr?br00pdA`Lm2uOtr25u literal 0 HcmV?d00001 diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.class new file mode 100644 index 0000000000000000000000000000000000000000..5a03e40ab183916c01caae75917a6a924e801d50 GIT binary patch literal 2130 zcmbtVU3U{z6x}y1nKT*NS_>3KNuWSmN=H;gNCDeurIMD?)K)>o+vGNxW-=3JCY3IK zgs<YlXP@N(Ee|Z$^39*5EOpOE+EfEBmoN9@+;jFhXP<lS{q>K>PXJs*GmS$y)rZqK zlff9qGnl~H3{GG&7|v;!3eJoSUc>n`UdJ23@MZ=YE({UiQW}?$4^F3pftC|EKLmkG z!S<?#YZ~6sFe8whHf__tD$p}FzADgLa4Je*plI4^vDH{t?uuNuC>bg`WofNS*9`Wt zu-C7dp1_r&Y8j21XBiEem0h{v8|y8*s?--P)l!C6uBl4PQm(ON$!+C&Ytr;hyIQEJ zay?JiZp#)BO@XPRt$d?VxqBf7Fl5s-%8pG~-*jwa$#w3TsuJPQ^kB)C<@$nbh7oC) z6-bwymRnYHW)SvB7mrh$a!cwsf)Nb`9q-~j4Rbo)$8`<!IzGS+9YrkYSj0_%$^R0O zjwRgEu&kqm6%8NiSjC!-kMOaM+qfezIO{mR=ex4Gp!}Ls@dlFkB!y3Pe1^LkKGz|! zuA_{V6e>CtRs{0@gI#(IvNbGeSB;zNo1~Go+!HOgY&$M+C~WzrWz74^mA>N&j6dJ? zY*^%5L6HSAVX;ff-BPqX^Q=m4m{lWEnzuI`mhjXw2;Q&Ax>l7RSCe%e8!zq!TyQKa zx*)_G?j{#VnY&pX-e=s-mZn-wdW-5FDPlL=W;fX3X1J~2!6LPLEz_gwU`HTDN_f)0 z7eXMRb6#Oznl_u|&{(A3i52)d-i?Ofx^K5B&5(e3+w-MeCfz3))W4W8l0MoLooY2G z$+31CVUaCL*@H%O8YEBEMcE+q{(MWmOTBy=8>k9oXDSs{$u>;Sqcj^8BrCGMlMU}d zPT)vG)>Xl=%hF#n{Tf$6%sz8J-I;rg8`m+UBNnl|dj#%}lVN@-U7N1|#$+3fZ&;74 zR0KwsRm0ip7V3uUG<Jhcx}lneTF`<P?LyaKIHtYj)RhrIM+wczG8<!C10Sqp(Q)c6 zzFPV`-zT?VNzYTv@|(^qV~nWVuS>gPDQ`3~%y(RbIQ$ODKEsvmrs|@8r$aw#?tCYm zF+@RHR*APiufbuv{Ug6_u?f8Td_Cka%r8pdFu$7wXFjJKk8)>l7Mu@E{0Q+wc>EH_ zWGGDGWv=x|0mtwPcXZY^7CD0TQ1;zJBzDjvu!CNK;@KS>5V()aTqFg4hPLn!smUGm zCGahBKOy}H8E$of$2bT)LVt8VkigpafBwSF4hB1bu5|)Mo@o9;7c~B-yJ#<lXitKq zdJrTvg$zfXZ1m$C1~7v`+`tgOj$v$)o3F^r*G%p{wI49uAo(n9bNrBxbCsZ$5wDnZ zOh}GeBS=0)zlIajzajAyDXxCU4A-<i$@2t8QRkc{eI^>jIf}Qq@8`)y%H9sgD}Mp} CT0l4e literal 0 HcmV?d00001 diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class new file mode 100644 index 0000000000000000000000000000000000000000..052d84ba9044aacfb17e0f6519e09a64f79d5fc1 GIT binary patch literal 2334 zcmbVN-BTM?6#v~MWb?5UngXrbk7&Urg|cdGwWhX`6liSt3J4ag^k#D*3!B|^KM<;q zKKraMI-}z_<BZP810Cv&<FkK~<EUphi=-t~@nP@YbME;*zjN<ze?I;Nz#I4^f#-2C zjzJ71aS6joT!7*&uSj?`j@NKm!s{_yNg#%+aZ-5G+g<Zy-%62%8y<PnTi)?bM`Fl( zXN4GUdGu%uW8UF-5>eciP?YelggXq;>zbiCHyFa1>^wuHU{(b~S4lI(q+72DYmQfR z;-pHZ%Jq3}X&xOgBTh}T8FD4zD)pMJD|J#+ExzI?71vl5;(;q%q1b9oR9#(I%8W-B zjTLi3*fw7kR*oE7uED?>48tWuI7+>`d?ip<ctcZE(;%acW*W-0Wo~MsI<509U$t}A z;p+MXZ}{;@C@~~vP1jPznC1oDcfjB98sFeDPUDP(2^o`^k}xe}24xwun3M4ys0u?z zi9^DIjQ4SuA=_51#vP?#)*GfF3@7hudR15qJqz4&1XV`oRH$@A=gz~l7uceNB^e*! zo{SH%EaN^nLwDXZ9ow;ZV?sDJvubxmQHep7QH7APf>jwcXfoDtk1Cp0$kaM?>Sy{= zIwPa*u|oq{83s%l4Lo4D_P?7(@pxraywH`Y${KZt0J6_2yM_^<#%H>YrYl89Sllrw z_3X19=Y8b(oul}5%_igBrF}ys;t*_(J;`B+Y5#cW%Vb*=_B@l4RO9xf*d&Vt_eC;q z_(ad1d`m_oeZE~k3)Ig5y>nX)0$F0DFjt(KT+WY_83x)y_$eJS-J59!=sTQsEX`QW zdGmMXFqZ{W_iC58HB!E_JYF6hon$z7s54)h+;pf-wNmC^M6+$r)ppqR%BUGtu{pK! zR31$z<g&#CEYQ8c7{kdrUl#?_P`R_9IW^kZ4mTV+?adT}F0~ecZY17l2&2kyvt5mj z6lbJj>SSm*vv{=pI)Va6Z0#X+n6OeLtc;gOXvm|gCAdS}!Ay4P@M!YfrnG~pr;;UY z$|=AN!_49RXu($QKikjFOK`l)V3VPLe-Jfe!(10i6JO0HjB%BQa7)5NN~L6)>n>fq za*?iBtDtk+7Sx%~TMHl9Xx=-wxlz@H-QQHq9mH@8=Ltn`RN9CywaD+Gr-c=mC~#e$ zrRmN|_?SlQKz{9FV>tV4IlPGH=*eYxfnLuL{pn4h^(;{e{Tcl`E<OVL$v-|vYt(1P zk*2-e6d)rn5k*(Uo-#X+4upyK<2FLO2s4xhcM)Ou0$<XmgW*?1Cx*5m{fyY%RQwSV z+eq#}Ch?(NbcPVQ{}{)B9dt!@(7lc0beKvJ8TQFQb{8iY+6eZL;5K?&4f=tQwBB8< z?P;X?NNxuwcX29=@BUi$vJAt^@+vxM^<JV*4515`(M`|fae9nW_y{NPDSGe~dhs>- z@GZ%Fk5l-8N|`3DJ}TsCe1?7u(2i;l)aPZ|ClUGsaS0cG$2a6EL#z<8WD-bF0bOii PgUsZJjuCyGzPJAd_<?;6 literal 0 HcmV?d00001 diff --git a/out/production/BungeeQueue/plugin.yml b/out/production/BungeeQueue/plugin.yml new file mode 100644 index 0000000..86d0427 --- /dev/null +++ b/out/production/BungeeQueue/plugin.yml @@ -0,0 +1,3 @@ +name: BungeeQueue +main: eu.mhsl.minecraft.bungeequeue.BungeeQueue +version: 0.1 \ No newline at end of file diff --git a/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java b/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java new file mode 100644 index 0000000..0070374 --- /dev/null +++ b/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java @@ -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() { + + } + +} diff --git a/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java b/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java new file mode 100644 index 0000000..daaddb6 --- /dev/null +++ b/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java @@ -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; + } +} diff --git a/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java b/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java new file mode 100644 index 0000000..b1e423d --- /dev/null +++ b/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java @@ -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()); + } +} diff --git a/src/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.java b/src/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.java new file mode 100644 index 0000000..372fc30 --- /dev/null +++ b/src/eu/mhsl/minecraft/bungeequeue/scheduler/MoveToTarget.java @@ -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); + } + } +} diff --git a/src/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.java b/src/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.java new file mode 100644 index 0000000..58c1c56 --- /dev/null +++ b/src/eu/mhsl/minecraft/bungeequeue/scheduler/PlayersWaitingCheck.java @@ -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); + } + } + + } +} diff --git a/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java b/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java new file mode 100644 index 0000000..936ee7f --- /dev/null +++ b/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java @@ -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() + ); + } + } +} diff --git a/src/plugin.yml b/src/plugin.yml new file mode 100644 index 0000000..86d0427 --- /dev/null +++ b/src/plugin.yml @@ -0,0 +1,3 @@ +name: BungeeQueue +main: eu.mhsl.minecraft.bungeequeue.BungeeQueue +version: 0.1 \ No newline at end of file