Yeetus feetus ❤️

This commit is contained in:
disclearing 2019-06-13 22:29:39 +01:00
parent ec0495ae82
commit ce2cad7fab
122 changed files with 2919 additions and 0 deletions

21
.idea/compiler.xml Normal file
View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="application" />
<module name="common" />
<module name="plugin" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="application" target="1.8" />
<module name="common" target="1.8" />
<module name="plugin" target="1.8" />
<module name="quartz-parent" target="1.5" />
</bytecodeTargetLevel>
</component>
</project>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.google.code.gson:gson:2.2.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.2.4/gson-2.2.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.2.4/gson-2.2.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.2.4/gson-2.2.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.google.code.gson:gson:2.8.5">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.8.5/gson-2.8.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.google.guava:guava:17.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/17.0/guava-17.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/17.0/guava-17.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/17.0/guava-17.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.googlecode.json-simple:json-simple:1.1.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.minexd:pidgin:1.0-SNAPSHOT">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/minexd/pidgin/1.0-SNAPSHOT/pidgin-1.0-SNAPSHOT.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/minexd/pidgin/1.0-SNAPSHOT/pidgin-1.0-SNAPSHOT-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/minexd/pidgin/1.0-SNAPSHOT/pidgin-1.0-SNAPSHOT-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.qrakn:honcho:1.0-SNAPSHOT">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/qrakn/honcho/1.0-SNAPSHOT/honcho-1.0-SNAPSHOT.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/qrakn/honcho/1.0-SNAPSHOT/honcho-1.0-SNAPSHOT-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/qrakn/honcho/1.0-SNAPSHOT/honcho-1.0-SNAPSHOT-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: com.qrakn:phoenix-lang:1.0-SNAPSHOT">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/com/qrakn/phoenix-lang/1.0-SNAPSHOT/phoenix-lang-1.0-SNAPSHOT.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/com/qrakn/phoenix-lang/1.0-SNAPSHOT/phoenix-lang-1.0-SNAPSHOT-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/com/qrakn/phoenix-lang/1.0-SNAPSHOT/phoenix-lang-1.0-SNAPSHOT-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: commons-lang:commons-lang:2.6">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: javax.persistence:persistence-api:1.0">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/javax/persistence/persistence-api/1.0/persistence-api-1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/javax/persistence/persistence-api/1.0/persistence-api-1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: junit:junit:4.10">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: net.md-5:bungeecord-chat:1.8-SNAPSHOT">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/net/md-5/bungeecord-chat/1.8-SNAPSHOT/bungeecord-chat-1.8-20160221.214602-128.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/net/md-5/bungeecord-chat/1.8-SNAPSHOT/bungeecord-chat-1.8-20160221.214602-128-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/net/md-5/bungeecord-chat/1.8-SNAPSHOT/bungeecord-chat-1.8-20160221.214602-128-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: org.avaje:ebean:2.8.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/avaje/ebean/2.8.1/ebean-2.8.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/avaje/ebean/2.8.1/ebean-2.8.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/avaje/ebean/2.8.1/ebean-2.8.1-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: org.hamcrest:hamcrest-core:1.1">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: org.projectlombok:lombok:1.16.16">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.16.16/lombok-1.16.16.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.16.16/lombok-1.16.16-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.16.16/lombok-1.16.16-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.8.8-R0.1-SNAPSHOT/spigot-api-1.8.8-R0.1-SNAPSHOT.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.8.8-R0.1-SNAPSHOT/spigot-api-1.8.8-R0.1-SNAPSHOT-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.8.8-R0.1-SNAPSHOT/spigot-api-1.8.8-R0.1-SNAPSHOT-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: org.yaml:snakeyaml:1.15">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.15/snakeyaml-1.15-sources.jar!/" />
</SOURCES>
</library>
</component>

13
.idea/misc.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8 (1)" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

11
.idea/modules.xml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/application/application.iml" filepath="$PROJECT_DIR$/application/application.iml" />
<module fileurl="file://$PROJECT_DIR$/common/common.iml" filepath="$PROJECT_DIR$/common/common.iml" />
<module fileurl="file://$PROJECT_DIR$/plugin/plugin.iml" filepath="$PROJECT_DIR$/plugin/plugin.iml" />
<module fileurl="file://$PROJECT_DIR$/quartz-parent.iml" filepath="$PROJECT_DIR$/quartz-parent.iml" />
</modules>
</component>
</project>

409
.idea/workspace.xml Normal file
View File

@ -0,0 +1,409 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="de07dead-ef27-4866-8ccd-400c42d9fdb0" name="Default" comment="" />
<ignored path="$PROJECT_DIR$/out/" />
<ignored path="$PROJECT_DIR$/target/" />
<ignored path="$PROJECT_DIR$/plugin/target/" />
<ignored path="$PROJECT_DIR$/application/target/" />
<ignored path="$PROJECT_DIR$/common/target/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="pom.xml" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="357">
<caret line="21" column="10" lean-forward="false" selection-start-line="21" selection-start-column="10" selection-end-line="21" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Locale.java" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/plugin/src/main/java/com/minexd/quartz/Locale.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="238">
<caret line="17" column="0" lean-forward="false" selection-start-line="17" selection-start-column="0" selection-end-line="27" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>PlayerInteract</find>
</findStrings>
</component>
<component name="GradleLocalSettings">
<option name="externalProjectsViewState">
<projects_view />
</option>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="MavenImportPreferences">
<option name="importingSettings">
<MavenImportingSettings>
<option name="importAutomatically" value="true" />
</MavenImportingSettings>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="-8" />
<option name="width" value="1936" />
<option name="height" value="1040" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="PackagesPane" />
<pane id="AndroidView" />
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="quartz-parent" type="b2602c69:ProjectViewProjectNode" />
<item name="quartz-parent" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="quartz-parent" type="b2602c69:ProjectViewProjectNode" />
<item name="quartz-parent" type="462c0819:PsiDirectoryNode" />
<item name="plugin" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="quartz-parent" type="b2602c69:ProjectViewProjectNode" />
<item name="quartz-parent" type="462c0819:PsiDirectoryNode" />
<item name="plugin" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="quartz-parent" type="b2602c69:ProjectViewProjectNode" />
<item name="quartz-parent" type="462c0819:PsiDirectoryNode" />
<item name="plugin" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="quartz-parent" type="b2602c69:ProjectViewProjectNode" />
<item name="quartz-parent" type="462c0819:PsiDirectoryNode" />
<item name="plugin" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="462c0819:PsiDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="quartz-parent" type="b2602c69:ProjectViewProjectNode" />
<item name="quartz-parent" type="462c0819:PsiDirectoryNode" />
<item name="plugin" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="462c0819:PsiDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="quartz" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scratches" />
</panes>
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common" />
<recent name="C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\application" />
<recent name="C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\plugin" />
</key>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="Maven.Unnamed">
<configuration name="Unnamed" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings" />
<option name="myRunnerSettings" />
<option name="myRunnerParameters">
<MavenRunnerParameters>
<option name="profiles">
<set />
</option>
<option name="goals">
<list>
<option value="clean" />
<option value="install" />
</list>
</option>
<option name="profilesMap">
<map />
</option>
<option name="resolveToWorkspace" value="false" />
<option name="workingDirPath" value="$PROJECT_DIR$" />
</MavenRunnerParameters>
</option>
</MavenSettings>
</configuration>
<configuration default="true" type="Applet" factoryName="Applet">
<option name="WIDTH" value="400" />
<option name="HEIGHT" value="300" />
<option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
<module />
</configuration>
<configuration default="true" type="Application" factoryName="Application">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<option name="MAIN_CLASS_NAME" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="ENABLE_SWING_INSPECTOR" value="false" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="" />
<envs />
</configuration>
<configuration default="true" type="JUnit" factoryName="JUnit">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="TEST_OBJECT" value="class" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<envs />
<patterns />
</configuration>
<configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
<module name="" />
<option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
<option name="PROGRAM_PARAMETERS" />
<predefined_log_file id="idea.log" enabled="true" />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
<option name="SHMEM_ADDRESS" value="javadebug" />
<option name="HOST" value="localhost" />
<option name="PORT" value="5005" />
</configuration>
<configuration default="true" type="TestNG" factoryName="TestNG">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="SUITE_NAME" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="GROUP_NAME" />
<option name="TEST_OBJECT" value="CLASS" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
<option name="OUTPUT_DIRECTORY" />
<option name="ANNOTATION_TYPE" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="singleModule" />
</option>
<option name="USE_DEFAULT_REPORTERS" value="false" />
<option name="PROPERTIES_FILE" />
<envs />
<properties />
<listeners />
</configuration>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="de07dead-ef27-4866-8ccd-400c42d9fdb0" name="Default" comment="" />
<created>1543033884549</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1543033884549</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1456" height="1056" extended-state="6" />
<editor active="true" />
<layout>
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32934782" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Floobits" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25358167" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plugin/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plugin/src/main/java/com/minexd/quartz/task/UpdateTask.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="238">
<caret line="20" column="0" lean-forward="true" selection-start-line="20" selection-start-column="0" selection-end-line="20" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="204">
<caret line="12" column="0" lean-forward="true" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/src/main/java/com/minexd/quartz/log/Logger.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="119">
<caret line="9" column="0" lean-forward="true" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/common/src/main/java/com/minexd/quartz/data/QuartzData.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="357">
<caret line="35" column="0" lean-forward="true" selection-start-line="35" selection-start-column="0" selection-end-line="35" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/pom.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="357">
<caret line="21" column="10" lean-forward="false" selection-start-line="21" selection-start-column="10" selection-end-line="21" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/plugin/src/main/java/com/minexd/quartz/Locale.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="238">
<caret line="17" column="0" lean-forward="false" selection-start-line="17" selection-start-column="0" selection-end-line="27" selection-end-column="5" />
<folding />
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
<state key="ProjectJDKs.UI">
<settings>
<last-edited>1.8</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="common" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.16.16" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
<orderEntry type="library" name="Maven: com.minexd:pidgin:1.0-SNAPSHOT" level="project" />
</component>
</module>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>quartz-parent</artifactId>
<groupId>com.minexd.quartz</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>application</artifactId>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifestEntries>
<Built-By>joeleoli</Built-By>
<Main-Class>com.minexd.quartz.Quartz</Main-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>

63
application/pom.xml Normal file
View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.minexd.quartz</groupId>
<artifactId>quartz-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>application</artifactId>
<dependencies>
<dependency>
<groupId>com.minexd.quartz</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifestEntries>
<Built-By>joeleoli</Built-By>
<Main-Class>com.minexd.quartz.Quartz</Main-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,82 @@
package com.minexd.quartz;
import com.minexd.pidgin.Pidgin;
import com.minexd.quartz.network.NetworkListener;
import com.minexd.quartz.log.Logger;
import com.minexd.quartz.packet.PlayerAddPacket;
import com.minexd.quartz.packet.PlayerAddedPacket;
import com.minexd.quartz.packet.PlayerRemovePacket;
import com.minexd.quartz.packet.PlayerRemovedPacket;
import com.minexd.quartz.packet.PlayerSendPacket;
import com.minexd.quartz.packet.QueueListPacket;
import com.minexd.quartz.packet.ServerMetadataPacket;
import com.minexd.quartz.packet.ServerUpdatePacket;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.thread.BroadcastThread;
import com.minexd.quartz.thread.QueueThread;
import com.minexd.quartz.data.QuartzData;
import com.minexd.quartz.file.Config;
import java.util.Arrays;
import lombok.Getter;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class Quartz {
private static Quartz quartz;
@Getter private Config config;
@Getter private JedisPool jedisPool;
@Getter private Pidgin pidgin;
@Getter private QuartzData quartzData;
private Quartz() {
quartz = this;
config = new Config();
jedisPool = new JedisPool(config.getRedisHost(), config.getRedisPort());
if (config.getRedisPassword() != null) {
try (Jedis jedis = jedisPool.getResource()) {
jedis.auth(config.getRedisPassword());
}
}
pidgin = new Pidgin("quartz", config.getRedisHost(), config.getRedisPort(), config.getRedisPassword());
pidgin.registerListener(new NetworkListener());
Arrays.asList(
PlayerAddedPacket.class,
PlayerAddPacket.class,
PlayerRemovedPacket.class,
PlayerRemovePacket.class,
PlayerSendPacket.class,
QueueListPacket.class,
ServerMetadataPacket.class,
ServerUpdatePacket.class
).forEach(pidgin::registerPacket);
quartzData = new QuartzData(jedisPool);
for (String name : config.getQueues()) {
quartzData.getQueues().add(new Queue(name));
Logger.print("Loaded queue `" + name + "` from config");
}
Logger.print("Quartz is now running...");
new QueueThread().start();
new BroadcastThread().start();
}
public static void main(String[] args) {
new Quartz();
}
public static Quartz get() {
return quartz;
}
}

View File

@ -0,0 +1,69 @@
package com.minexd.quartz.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import lombok.Getter;
@Getter
public class Config {
private String[] queues;
private String redisHost;
private int redisPort;
private String redisPassword;
public Config() {
File file = new File("config.properties");
if (!file.exists()) {
try {
file.createNewFile();
FileOutputStream output = new FileOutputStream(file);
output.write("queues=test1,test2,test3\n".getBytes());
output.write("redis-host=127.0.0.1\n".getBytes());
output.write("redis-port=6379\n".getBytes());
output.write("redis-password=dev\n".getBytes());
output.flush();
output.close();
} catch (IOException io) {
io.printStackTrace();
}
}
Properties prop = new Properties();
InputStream input = null;
try {
input = new FileInputStream("config.properties");
prop.load(input);
String queues = ((String) prop.getOrDefault("queues", ""));
this.queues = queues.equals("") ? new String[0] : queues.split(",");
this.redisHost = ((String) prop.getOrDefault("redis-host", "127.0.0.1"));
this.redisPort = Integer.valueOf((String) prop.getOrDefault("redis-port", "6379"));
this.redisPassword = ((String) prop.getOrDefault("redis-password", null));
if (this.redisPassword.isEmpty()) {
this.redisPassword = null;
}
} catch (IOException io) {
io.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

View File

@ -0,0 +1,15 @@
package com.minexd.quartz.log;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Logger {
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
public static void print(String message) {
System.out.println("[" + DATE_FORMAT.format(Calendar.getInstance().getTime()) + "] [Quartz] " + message);
}
}

View File

@ -0,0 +1,110 @@
package com.minexd.quartz.network;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.handler.IncomingPacketHandler;
import com.minexd.pidgin.packet.listener.PacketListener;
import com.minexd.quartz.packet.PlayerAddPacket;
import com.minexd.quartz.packet.PlayerAddedPacket;
import com.minexd.quartz.packet.PlayerRemovePacket;
import com.minexd.quartz.packet.PlayerRemovedPacket;
import com.minexd.quartz.packet.ServerUpdatePacket;
import java.util.Iterator;
import java.util.UUID;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.log.Logger;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.queue.QueuePlayer;
import com.minexd.quartz.server.Server;
public class NetworkListener implements PacketListener {
@IncomingPacketHandler
public void onPlayerAddPacket(PlayerAddPacket packet) {
Queue queue = Quartz.get().getQuartzData().getQueueByName(packet.getData().get("queue").getAsString());
if (queue != null) {
JsonObject playerObject = packet.getData().get("player").getAsJsonObject();
QueuePlayer player = new QueuePlayer(playerObject);
if (Quartz.get().getQuartzData().getQueueByPlayer(player.getUuid()) != null) {
return;
}
player.setInserted(System.currentTimeMillis());
queue.getPlayers().add(player);
playerObject.addProperty("inserted-at", player.getInserted());
packet.getData().add("player", playerObject);
Quartz.get().getPidgin().sendPacket(new PlayerAddedPacket(packet.getData()));
}
}
@IncomingPacketHandler
public void onPlayerRemovePacket(PlayerRemovePacket packet) {
UUID uuid = UUID.fromString(packet.getData().get("uuid").getAsString());
Queue queue = Quartz.get().getQuartzData().getQueueByPlayer(uuid);
if (queue != null) {
QueuePlayer queuePlayer = null;
Iterator<QueuePlayer> iterator = queue.getPlayers().iterator();
while (iterator.hasNext()) {
QueuePlayer other = iterator.next();
if (other.getUuid().equals(uuid)) {
queuePlayer = other;
iterator.remove();
}
}
if (queuePlayer != null) {
JsonObject rankObject = new JsonObject();
rankObject.addProperty("name", queuePlayer.getRank().getName());
rankObject.addProperty("priority", queuePlayer.getRank().getPriority());
JsonObject playerObject = new JsonObject();
playerObject.addProperty("uuid", queuePlayer.getUuid().toString());
playerObject.addProperty("inserted-at", queuePlayer.getInserted());
playerObject.add("rank", rankObject);
JsonObject data = new JsonObject();
data.addProperty("queue", queue.getName());
data.add("player", playerObject);
Quartz.get().getPidgin().sendPacket(new PlayerRemovedPacket(data));
}
}
}
@IncomingPacketHandler
public void onServerUpdatePacket(ServerUpdatePacket packet) {
String serverId = packet.getData().get("id").getAsString();
Server server = Quartz.get().getQuartzData().getServerById(serverId);
Queue queue = Quartz.get().getQuartzData().getQueueByName(serverId);
if (server == null) {
server = new Server(serverId);
if (queue != null) {
queue.setEnabled(true);
}
Logger.print("Initiated server `" + serverId + "`");
}
server.setName(packet.getData().get("name").getAsString());
server.setOnlinePlayers(packet.getData().get("online-players").getAsInt());
server.setMaximumPlayers(packet.getData().get("maximum-players").getAsInt());
server.setWhitelisted(packet.getData().get("whitelisted").getAsBoolean());
server.setPort(packet.getData().get("port").getAsInt());
server.setMetadata(packet.getData().get("metadata").getAsJsonObject());
server.setLastUpdate(System.currentTimeMillis());
Logger.print("Updated server `" + serverId + "`");
}
}

View File

@ -0,0 +1,58 @@
package com.minexd.quartz.thread;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.minexd.quartz.log.Logger;
import com.minexd.quartz.packet.QueueListPacket;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.util.JsonChain;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.queue.QueuePlayer;
public class BroadcastThread extends Thread {
@Override
public void run() {
while (true) {
try {
JsonArray queues = new JsonArray();
for (Queue queue : Quartz.get().getQuartzData().getQueues()) {
JsonArray players = new JsonArray();
for (QueuePlayer player : queue.getPlayers()) {
JsonObject rankObject = new JsonChain()
.addProperty("name", player.getRank().getName())
.addProperty("priority", player.getRank().getPriority())
.get();
JsonObject playerObject = new JsonChain()
.addProperty("uuid", player.getUuid().toString())
.addProperty("inserted-at", player.getInserted())
.add("rank", rankObject)
.get();
players.add(playerObject);
}
JsonObject queueObject = new JsonObject();
queueObject.addProperty("id", queue.getName());
queueObject.addProperty("status", queue.isEnabled());
queueObject.add("players", players);
queues.add(queueObject);
}
Quartz.get().getPidgin().sendPacket(new QueueListPacket(queues));
Logger.print("Broadcast server and queue list");
Thread.sleep(5000L);
} catch (Exception e) {
e.printStackTrace();
continue;
}
}
}
}

View File

@ -0,0 +1,54 @@
package com.minexd.quartz.thread;
import com.minexd.quartz.packet.PlayerSendPacket;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.server.Server;
import com.minexd.quartz.util.JsonChain;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.queue.QueuePlayer;
public class QueueThread extends Thread {
private static final Long SEND_DELAY = 500L;
@Override
public void run() {
while (true) {
try {
for (Queue queue : Quartz.get().getQuartzData().getQueues()) {
if (!this.canSend(queue)) {
continue;
}
QueuePlayer next = queue.getPlayers().poll();
if (next != null) {
Quartz.get().getPidgin().sendPacket(new PlayerSendPacket(new JsonChain()
.addProperty("server", queue.getName())
.addProperty("uuid", next.getUuid().toString())
.get()));
}
}
Thread.sleep(SEND_DELAY);
} catch (Exception e) {
e.printStackTrace();
continue;
}
}
}
private boolean canSend(Queue queue) {
if (queue.isEnabled()) {
Server server = Quartz.get().getQuartzData().getServerById(queue.getName());
if (server != null) {
return server.isOnline() && !server.isWhitelisted() &&
server.getOnlinePlayers() < server.getMaximumPlayers();
}
}
return false;
}
}

View File

@ -0,0 +1,4 @@
#Created by Apache Maven 3.3.9
version=1.0-SNAPSHOT
groupId=com.minexd.quartz
artifactId=application

View File

@ -0,0 +1,6 @@
com\minexd\quartz\file\Config.class
com\minexd\quartz\thread\QueueThread.class
com\minexd\quartz\network\NetworkListener.class
com\minexd\quartz\Quartz.class
com\minexd\quartz\thread\BroadcastThread.class
com\minexd\quartz\log\Logger.class

View File

@ -0,0 +1,6 @@
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\application\src\main\java\com\minexd\quartz\thread\QueueThread.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\application\src\main\java\com\minexd\quartz\file\Config.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\application\src\main\java\com\minexd\quartz\log\Logger.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\application\src\main\java\com\minexd\quartz\network\NetworkListener.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\application\src\main\java\com\minexd\quartz\Quartz.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\application\src\main\java\com\minexd\quartz\thread\BroadcastThread.java

Binary file not shown.

18
common/common.iml Normal file
View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.16.16" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
<orderEntry type="library" name="Maven: com.minexd:pidgin:1.0-SNAPSHOT" level="project" />
</component>
</module>

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>quartz-parent</artifactId>
<groupId>com.minexd.quartz</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common</artifactId>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>plugin.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>plugin.yml</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-parameters</compilerArgument>
</configuration>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

79
common/pom.xml Normal file
View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.minexd.quartz</groupId>
<artifactId>quartz-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>common</artifactId>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>LATEST</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.minexd</groupId>
<artifactId>pidgin</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-parameters</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>plugin.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>plugin.yml</exclude>
</excludes>
</resource>
</resources>
</build>
</project>

View File

@ -0,0 +1,103 @@
package com.minexd.quartz.data;
import com.google.gson.JsonParser;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.server.Server;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import lombok.Getter;
import com.minexd.quartz.queue.QueuePlayer;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
public class QuartzData {
private final JedisPool jedisPool;
@Getter private final List<Server> servers = new ArrayList<>();
@Getter private final List<Queue> queues = new ArrayList<>();
public QuartzData(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
public void loadServers() {
try (Jedis jedis = jedisPool.getResource()) {
ScanResult<String> found = jedis.scan("0", new ScanParams().match("quartz:server-info").count(100));
for (String path : found.getResult()) {
String[] split = path.split(":");
int port = Integer.valueOf(split[2]);
Map<String, String> map = jedis.hgetAll(path);
if (map == null || map.isEmpty()) {
continue;
}
// Try and get the server if it is already cached
Server server = this.getServerById(map.get("id"));
// If not, create it
if (server == null) {
this.servers.add((server = new Server(map.get("id"))));
}
// Update fields
server.setName(map.get("name"));
server.setPort(port);
server.setOnlinePlayers(Integer.valueOf(map.get("online-players")));
server.setMaximumPlayers(Integer.valueOf(map.get("maximum-players")));
server.setWhitelisted(Boolean.valueOf(map.get("whitelisted")));
server.setMetadata(new JsonParser().parse(map.get("metadata")).getAsJsonObject());
server.setLastUpdate(Long.valueOf(map.get("last-update")));
}
}
}
public Server getServerById(String id) {
for (Server server : this.servers) {
if (server.getId().equalsIgnoreCase(id)) {
return server;
}
}
return null;
}
public Server getByPort(int port) {
for (Server server : this.servers) {
if (server.getPort() == port) {
return server;
}
}
return null;
}
public Queue getQueueByName(String name) {
for (Queue queue : this.queues) {
if (queue.getName().equalsIgnoreCase(name)) {
return queue;
}
}
return null;
}
public Queue getQueueByPlayer(UUID uuid) {
for (Queue queue : this.queues) {
for (QueuePlayer queuePlayer : queue.getPlayers()) {
if (queuePlayer.getUuid().equals(uuid)) {
return queue;
}
}
}
return null;
}
}

View File

@ -0,0 +1,31 @@
package com.minexd.quartz.packet;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.Packet;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PlayerAddPacket implements Packet {
private JsonObject data;
@Override
public int id() {
return 2;
}
@Override
public JsonObject serialize() {
return data;
}
@Override
public void deserialize(JsonObject object) {
data = object;
}
}

View File

@ -0,0 +1,31 @@
package com.minexd.quartz.packet;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.Packet;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PlayerAddedPacket implements Packet {
private JsonObject data;
@Override
public int id() {
return 1;
}
@Override
public JsonObject serialize() {
return data;
}
@Override
public void deserialize(JsonObject object) {
data = object;
}
}

View File

@ -0,0 +1,31 @@
package com.minexd.quartz.packet;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.Packet;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PlayerRemovePacket implements Packet {
private JsonObject data;
@Override
public int id() {
return 4;
}
@Override
public JsonObject serialize() {
return data;
}
@Override
public void deserialize(JsonObject object) {
data = object;
}
}

View File

@ -0,0 +1,31 @@
package com.minexd.quartz.packet;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.Packet;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PlayerRemovedPacket implements Packet {
private JsonObject data;
@Override
public int id() {
return 3;
}
@Override
public JsonObject serialize() {
return data;
}
@Override
public void deserialize(JsonObject object) {
data = object;
}
}

View File

@ -0,0 +1,31 @@
package com.minexd.quartz.packet;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.Packet;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class PlayerSendPacket implements Packet {
private JsonObject data;
@Override
public int id() {
return 5;
}
@Override
public JsonObject serialize() {
return data;
}
@Override
public void deserialize(JsonObject object) {
data = object;
}
}

View File

@ -0,0 +1,33 @@
package com.minexd.quartz.packet;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.Packet;
import com.minexd.quartz.util.JsonChain;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class QueueListPacket implements Packet {
private JsonArray data;
@Override
public int id() {
return 6;
}
@Override
public JsonObject serialize() {
return new JsonChain().add("data", data).get();
}
@Override
public void deserialize(JsonObject object) {
data = object.getAsJsonArray("data");
}
}

View File

@ -0,0 +1,31 @@
package com.minexd.quartz.packet;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.Packet;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class ServerMetadataPacket implements Packet {
private JsonObject data;
@Override
public int id() {
return 7;
}
@Override
public JsonObject serialize() {
return data;
}
@Override
public void deserialize(JsonObject object) {
data = object;
}
}

View File

@ -0,0 +1,31 @@
package com.minexd.quartz.packet;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.Packet;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Getter
public class ServerUpdatePacket implements Packet {
private JsonObject data;
@Override
public int id() {
return 8;
}
@Override
public JsonObject serialize() {
return data;
}
@Override
public void deserialize(JsonObject object) {
data = object;
}
}

View File

@ -0,0 +1,53 @@
package com.minexd.quartz.queue;
import lombok.Getter;
import lombok.Setter;
import java.util.*;
@Getter
public class Queue {
private String name;
@Setter
private PriorityQueue<QueuePlayer> players = new PriorityQueue<>(new QueuePlayerComparator());
@Setter
private boolean enabled;
public Queue(String name) {
this.name = name;
}
public boolean containsPlayer(UUID uuid) {
for (QueuePlayer player : this.players) {
if (player.getUuid().equals(uuid)) {
return true;
}
}
return false;
}
public int getPosition(UUID uuid) {
if (!this.containsPlayer(uuid)) {
return 0;
}
PriorityQueue<QueuePlayer> queue = new PriorityQueue<>(this.players);
int position = 0;
while (!queue.isEmpty()) {
QueuePlayer player = queue.poll();
if (player.getUuid().equals(uuid)) {
break;
}
position++;
}
return position + 1;
}
}

View File

@ -0,0 +1,50 @@
package com.minexd.quartz.queue;
import com.google.gson.JsonObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.UUID;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class QueuePlayer implements Comparable {
private UUID uuid;
private QueueRank rank;
private long inserted;
public QueuePlayer(JsonObject object) {
this.uuid = UUID.fromString(object.get("uuid").getAsString());
this.rank = new QueueRank(object.get("rank").getAsJsonObject());
if (object.has("inserted-at")) {
this.inserted = object.get("inserted-at").getAsLong();
}
}
@Override
public int compareTo(Object object) {
int result = 0;
if (object instanceof QueuePlayer) {
QueuePlayer otherPlayer = (QueuePlayer) object;
result = this.rank.getPriority() - otherPlayer.getRank().getPriority();
if (result == 0) {
if (this.inserted < otherPlayer.getInserted()) {
return -1;
} else {
return 1;
}
}
}
return result;
}
}

View File

@ -0,0 +1,12 @@
package com.minexd.quartz.queue;
import java.util.Comparator;
public class QueuePlayerComparator implements Comparator<QueuePlayer> {
@Override
public int compare(QueuePlayer firstPlayer, QueuePlayer secondPlayer) {
return firstPlayer.compareTo(secondPlayer);
}
}

View File

@ -0,0 +1,34 @@
package com.minexd.quartz.queue;
import com.google.gson.JsonObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class QueueRank implements Comparable {
private String name;
private int priority;
public QueueRank(JsonObject object) {
this.name = object.get("name").getAsString();
this.priority = object.get("priority").getAsInt();
}
@Override
public int compareTo(Object o) {
int result = 0;
if (o instanceof QueueRank) {
result = this.priority - ((QueueRank) o).priority;
}
return result;
}
}

View File

@ -0,0 +1,29 @@
package com.minexd.quartz.server;
import com.google.gson.JsonObject;
import java.util.HashSet;
import java.util.Set;
import lombok.Data;
import lombok.Getter;
@Data
public class Server {
private String id;
private String name;
private int onlinePlayers;
private int maximumPlayers;
private boolean whitelisted;
private int port;
private JsonObject metadata;
private long lastUpdate;
public Server(String id) {
this.id = id;
}
public boolean isOnline() {
return System.currentTimeMillis() - this.lastUpdate <= 15_000L;
}
}

View File

@ -0,0 +1,12 @@
package com.minexd.quartz.server;
public enum ServerType {
PRACTICE,
HCFACTIONS,
UHC_MEETUP,
POTION_SG;
private String readable;
}

View File

@ -0,0 +1,39 @@
package com.minexd.quartz.util;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public class JsonChain {
private JsonObject json = new JsonObject();
public JsonChain addProperty(String property, String value) {
this.json.addProperty(property, value);
return this;
}
public JsonChain addProperty(String property, Number value) {
this.json.addProperty(property, value);
return this;
}
public JsonChain addProperty(String property, Boolean value) {
this.json.addProperty(property, value);
return this;
}
public JsonChain addProperty(String property, Character value) {
this.json.addProperty(property, value);
return this;
}
public JsonChain add(String property, JsonElement element) {
this.json.add(property, element);
return this;
}
public JsonObject get() {
return this.json;
}
}

View File

@ -0,0 +1,23 @@
package com.minexd.quartz.util;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class MapUtil {
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
List<Map.Entry<K, V>> list = new ArrayList<>(map.entrySet());
list.sort(Map.Entry.comparingByValue());
Map<K, V> result = new LinkedHashMap<>();
for (Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
}

View File

@ -0,0 +1,5 @@
#Generated by Maven
#Fri Nov 23 23:38:54 EST 2018
version=1.0-SNAPSHOT
groupId=com.minexd.quartz
artifactId=common

View File

@ -0,0 +1,17 @@
com\minexd\quartz\util\MapUtil.class
com\minexd\quartz\packet\PlayerSendPacket.class
com\minexd\quartz\packet\PlayerRemovePacket.class
com\minexd\quartz\data\QuartzData.class
com\minexd\quartz\packet\PlayerRemovedPacket.class
com\minexd\quartz\packet\QueueListPacket.class
com\minexd\quartz\server\ServerType.class
com\minexd\quartz\queue\QueuePlayer.class
com\minexd\quartz\queue\QueueRank.class
com\minexd\quartz\packet\PlayerAddedPacket.class
com\minexd\quartz\packet\PlayerAddPacket.class
com\minexd\quartz\util\JsonChain.class
com\minexd\quartz\packet\ServerMetadataPacket.class
com\minexd\quartz\queue\QueuePlayerComparator.class
com\minexd\quartz\packet\ServerUpdatePacket.class
com\minexd\quartz\queue\Queue.class
com\minexd\quartz\server\Server.class

View File

@ -0,0 +1,17 @@
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\server\ServerType.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\packet\PlayerAddPacket.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\packet\QueueListPacket.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\server\Server.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\queue\QueuePlayer.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\util\MapUtil.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\queue\QueueRank.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\packet\PlayerAddedPacket.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\queue\Queue.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\queue\QueuePlayerComparator.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\data\QuartzData.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\packet\PlayerRemovePacket.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\util\JsonChain.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\packet\ServerMetadataPacket.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\packet\ServerUpdatePacket.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\packet\PlayerRemovedPacket.java
C:\Users\skruf\Documents\Projects\MineXD\quartz-parent\common\src\main\java\com\minexd\quartz\packet\PlayerSendPacket.java

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>quartz-parent</artifactId>
<groupId>com.minexd.quartz</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>plugin</artifactId>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>plugin.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>plugin.yml</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-parameters</compilerArgument>
</configuration>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>md5-repo</id>
<url>http://repo.md-5.net/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.8.8-R0.1-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>commons-lang</artifactId>
<groupId>commons-lang</groupId>
</exclusion>
<exclusion>
<artifactId>json-simple</artifactId>
<groupId>com.googlecode.json-simple</groupId>
</exclusion>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
<exclusion>
<artifactId>ebean</artifactId>
<groupId>org.avaje</groupId>
</exclusion>
<exclusion>
<artifactId>snakeyaml</artifactId>
<groupId>org.yaml</groupId>
</exclusion>
<exclusion>
<artifactId>bungeecord-chat</artifactId>
<groupId>net.md-5</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>

31
plugin/plugin.iml Normal file
View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:17.0" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.2.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.avaje:ebean:2.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.15" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.8-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.16.16" level="project" />
<orderEntry type="module" module-name="common" />
<orderEntry type="library" name="Maven: com.minexd:pidgin:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.qrakn:phoenix-lang:1.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.qrakn:honcho:1.0-SNAPSHOT" level="project" />
</component>
</module>

97
plugin/pom.xml Normal file
View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.minexd.quartz</groupId>
<artifactId>quartz-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>plugin</artifactId>
<repositories>
<repository>
<id>md5-repo</id>
<url>http://repo.md-5.net/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.8.8-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.minexd.quartz</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.qrakn</groupId>
<artifactId>phoenix-lang</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.qrakn</groupId>
<artifactId>honcho</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-parameters</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>plugin.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>plugin.yml</exclude>
</excludes>
</resource>
</resources>
</build>
</project>

View File

@ -0,0 +1,30 @@
package com.minexd.quartz;
import java.text.MessageFormat;
import lombok.AllArgsConstructor;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
@AllArgsConstructor
public enum Locale {
JOINED_QUEUE("QUEUE.JOINED"),
LEFT_QUEUE("QUEUE.LEFT"),
REMINDER("QUEUE.REMINDER"),
SENDING("QUEUE.SENDING");
private String path;
public void send(CommandSender sender, Object... objects) {
if (Quartz.get().getMainConfig().get(path) instanceof String) {
sender.sendMessage(new MessageFormat(ChatColor.translateAlternateColorCodes('&',
Quartz.get().getMainConfig().getString(path))).format(objects));
} else {
for (String string : Quartz.get().getMainConfig().getStringList(path)) {
sender.sendMessage(new MessageFormat(ChatColor.translateAlternateColorCodes('&', string))
.format(objects));
}
}
}
}

View File

@ -0,0 +1,144 @@
package com.minexd.quartz;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.minexd.pidgin.Pidgin;
import com.minexd.quartz.command.JoinQueueCommand;
import com.minexd.quartz.command.LeaveQueueCommand;
import com.minexd.quartz.command.adapter.QueueTypeAdapter;
import com.minexd.quartz.network.NetworkListener;
import com.minexd.quartz.packet.PlayerAddPacket;
import com.minexd.quartz.packet.PlayerAddedPacket;
import com.minexd.quartz.packet.PlayerRemovePacket;
import com.minexd.quartz.packet.PlayerRemovedPacket;
import com.minexd.quartz.packet.PlayerSendPacket;
import com.minexd.quartz.packet.QueueListPacket;
import com.minexd.quartz.packet.ServerMetadataPacket;
import com.minexd.quartz.packet.ServerUpdatePacket;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.util.JsonChain;
import com.qrakn.honcho.Honcho;
import com.qrakn.phoenix.lang.file.type.BasicConfigurationFile;
import java.util.Arrays;
import java.util.Map;
import lombok.Getter;
import lombok.Setter;
import com.minexd.quartz.data.QuartzData;
import com.minexd.quartz.priority.Priority;
import com.minexd.quartz.priority.impl.DefaultPriority;
import com.minexd.quartz.task.ReminderTask;
import com.minexd.quartz.task.UpdateTask;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class Quartz extends JavaPlugin {
private static Quartz quartz;
@Getter private BasicConfigurationFile mainConfig;
@Getter private JedisPool jedisPool;
@Getter private Honcho honcho;
@Getter private Pidgin pidgin;
@Getter private QuartzData quartzData;
@Getter @Setter private Priority priority;
@Getter private String serverId;
@Getter private String serverName;
@Getter private JsonObject metadata = new JsonObject();
@Override
public void onEnable() {
quartz = this;
mainConfig = new BasicConfigurationFile(this, "config");
final String redisHost = mainConfig.getString("REDIS.HOST");
final int redisPort = mainConfig.getInteger("REDIS.PORT");
final String redisPassword;
if (mainConfig.getBoolean("REDIS.AUTHENTICATION.ENABLED")) {
redisPassword = mainConfig.getString("REDIS.AUTHENTICATION.PASSWORD");
} else {
redisPassword = null;
}
jedisPool = new JedisPool(redisHost, redisPort);
if (redisPassword != null) {
try (Jedis jedis = jedisPool.getResource()) {
jedis.auth(redisPassword);
}
}
loadQuartzData();
honcho = new Honcho(this);
honcho.registerCommand(new JoinQueueCommand());
honcho.registerCommand(new LeaveQueueCommand());
honcho.registerTypeAdapter(Queue.class, new QueueTypeAdapter());
pidgin = new Pidgin("quartz", redisHost, redisPort, redisPassword);
pidgin.registerListener(new NetworkListener());
Arrays.asList(
PlayerAddedPacket.class,
PlayerAddPacket.class,
PlayerRemovedPacket.class,
PlayerRemovePacket.class,
PlayerSendPacket.class,
QueueListPacket.class,
ServerMetadataPacket.class,
ServerUpdatePacket.class
).forEach(pidgin::registerPacket);
quartzData = new QuartzData(jedisPool);
quartzData.loadServers();
priority = new DefaultPriority();
new ReminderTask().runTaskTimerAsynchronously(this, 0L, 20L * 10L);
new UpdateTask().runTaskTimerAsynchronously(this, 0L, 20L * 3L);
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
getServer().getPluginManager().registerEvents(new Listener() {
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Quartz.get().getPidgin().sendPacket(new PlayerRemovePacket(new JsonChain()
.addProperty("uuid", event.getPlayer().getUniqueId().toString())
.get()));
}
}, this);
}
private void loadQuartzData() {
serverId = mainConfig.getString("SETTINGS.SERVER_ID");
serverName = mainConfig.getString("SETTINGS.SERVER_NAME");
try (Jedis jedis = jedisPool.getResource()) {
String key = "quartz:server-info:" + Bukkit.getPort();
if (jedis.exists(key)) {
Map<String, String> map = jedis.hgetAll(key);
serverId = map.get("id");
serverName = map.get("name");
metadata = new JsonParser().parse(map.get("metadata")).getAsJsonObject();
}
}
if (metadata == null || metadata.isJsonNull()) {
metadata = new JsonObject();
}
}
public static Quartz get() {
return quartz;
}
}

View File

@ -0,0 +1,65 @@
package com.minexd.quartz.command;
import com.google.gson.JsonObject;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.packet.PlayerAddPacket;
import com.minexd.quartz.packet.PlayerSendPacket;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.queue.QueueRank;
import com.minexd.quartz.server.Server;
import com.minexd.quartz.util.JsonChain;
import com.qrakn.honcho.command.CPL;
import com.qrakn.honcho.command.CommandMeta;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@CommandMeta(label = "joinqueue", async = true)
public class JoinQueueCommand {
public void execute(Player player, @CPL("queue") Queue queue) {
if (queue == null) {
player.sendMessage(ChatColor.RED + "A queue with that name does not exist.");
return;
}
Server server = Quartz.get().getQuartzData().getServerById(queue.getName());
if (server == null || !server.isOnline()) {
player.sendMessage(ChatColor.RED + "That queue is offline.");
return;
}
if (Quartz.get().getQuartzData().getQueueByPlayer(player.getUniqueId()) != null) {
player.sendMessage(ChatColor.RED + "You are already in a queue!");
return;
}
if (player.hasPermission("quartz.bypass")) {
Quartz.get().getPidgin().sendPacket(new PlayerSendPacket(new JsonChain()
.addProperty("server", queue.getName())
.addProperty("uuid", player.getUniqueId().toString())
.get()));
return;
}
QueueRank queueRank = Quartz.get().getPriority().getRank(player);
JsonObject rankObject = new JsonChain()
.addProperty("name", queueRank.getName())
.addProperty("priority", queueRank.getPriority())
.get();
JsonObject playerObject = new JsonChain()
.addProperty("uuid", player.getUniqueId().toString())
.add("rank", rankObject)
.get();
JsonObject data = new JsonChain()
.addProperty("queue", queue.getName())
.add("player", playerObject)
.get();
Quartz.get().getPidgin().sendPacket(new PlayerAddPacket(data));
}
}

View File

@ -0,0 +1,27 @@
package com.minexd.quartz.command;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.packet.PlayerRemovePacket;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.util.JsonChain;
import com.qrakn.honcho.command.CommandMeta;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@CommandMeta(label = "leavequeue", async = true)
public class LeaveQueueCommand {
public void execute(Player player) {
Queue queue = Quartz.get().getQuartzData().getQueueByPlayer(player.getUniqueId());
if (queue == null) {
player.sendMessage(ChatColor.RED + "You are not in a queue!");
return;
}
Quartz.get().getPidgin().sendPacket(new PlayerRemovePacket(new JsonChain()
.addProperty("uuid", player.getUniqueId().toString())
.get()));
}
}

View File

@ -0,0 +1,13 @@
package com.minexd.quartz.command.adapter;
import com.minexd.quartz.Quartz;
import com.qrakn.honcho.command.adapter.CommandTypeAdapter;
public class QueueTypeAdapter implements CommandTypeAdapter {
@Override
public <T> T convert(String string, Class<T> type) {
return type.cast(Quartz.get().getQuartzData().getQueueByName(string));
}
}

View File

@ -0,0 +1,134 @@
package com.minexd.quartz.network;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.minexd.pidgin.packet.handler.IncomingPacketHandler;
import com.minexd.pidgin.packet.listener.PacketListener;
import com.minexd.quartz.Locale;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.packet.PlayerAddedPacket;
import com.minexd.quartz.packet.PlayerRemovedPacket;
import com.minexd.quartz.packet.PlayerSendPacket;
import com.minexd.quartz.packet.QueueListPacket;
import com.minexd.quartz.packet.ServerMetadataPacket;
import com.minexd.quartz.packet.ServerUpdatePacket;
import com.minexd.quartz.queue.Queue;
import com.minexd.quartz.queue.QueuePlayer;
import com.minexd.quartz.queue.QueuePlayerComparator;
import com.minexd.quartz.server.Server;
import com.minexd.quartz.util.BungeeUtil;
import java.util.PriorityQueue;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class NetworkListener implements PacketListener {
@IncomingPacketHandler
public void onPlayerAddedPacket(PlayerAddedPacket packet) {
Queue queue = Quartz.get().getQuartzData().getQueueByName(packet.getData().get("queue").getAsString());
if (queue != null) {
QueuePlayer queuePlayer = new QueuePlayer(packet.getData().get("player").getAsJsonObject());
Player player = Bukkit.getPlayer(queuePlayer.getUuid());
queue.getPlayers().add(queuePlayer);
if (player != null) {
Locale.JOINED_QUEUE.send(player, queue.getName());
}
}
}
@IncomingPacketHandler
public void onPlayerRemovedPacket(PlayerRemovedPacket packet) {
Queue queue = Quartz.get().getQuartzData().getQueueByName(packet.getData().get("queue").getAsString());
if (queue != null) {
QueuePlayer queuePlayer = new QueuePlayer(packet.getData().get("player").getAsJsonObject());
Player player = Bukkit.getPlayer(queuePlayer.getUuid());
queue.getPlayers().removeIf(check -> check.getUuid().equals(player.getUniqueId()));
if (player != null) {
Locale.LEFT_QUEUE.send(player, queue.getName());
}
}
}
@IncomingPacketHandler
public void onPlayerSendPacket(PlayerSendPacket packet) {
Player player = Bukkit.getPlayer(UUID.fromString(packet.getData().get("uuid").getAsString()));
if (player != null) {
final String server = packet.getData().get("server").getAsString();
Locale.SENDING.send(player, packet.getData().get("server").getAsString());
BungeeUtil.sendToServer(player, server);
}
}
@IncomingPacketHandler
public void onQueueListPacket(QueueListPacket packet) {
if (!Quartz.get().getMainConfig().getBoolean("SETTINGS.CACHE_SERVERS")) {
return;
}
JsonArray array = packet.getData();
for (JsonElement queueElement : array) {
JsonObject queueObject = queueElement.getAsJsonObject();
final String queueName = queueObject.get("id").getAsString();
Queue queue = Quartz.get().getQuartzData().getQueueByName(queueName);
if (queue == null) {
queue = new Queue(queueName);
Quartz.get().getQuartzData().getQueues().add(queue);
}
PriorityQueue<QueuePlayer> players = new PriorityQueue<>(new QueuePlayerComparator());
for (JsonElement playerElement : queueObject.get("players").getAsJsonArray()) {
QueuePlayer player = new QueuePlayer(playerElement.getAsJsonObject());
players.add(player);
}
queue.setPlayers(players);
queue.setEnabled(queueObject.get("status").getAsBoolean());
}
}
@IncomingPacketHandler
public void onServerMetadata(ServerMetadataPacket packet) {
Server server = Quartz.get().getQuartzData().getServerById(packet.getData().get("id").getAsString());
if (server != null) {
server.getMetadata().add(packet.getData().get("field").getAsString(), packet.getData().get("value"));
}
}
@IncomingPacketHandler
public void onServerUpdate(ServerUpdatePacket packet) {
String serverId = packet.getData().get("id").getAsString();
if (Quartz.get().getMainConfig().getBoolean("SETTINGS.CACHE_SERVERS")) {
Server server = Quartz.get().getQuartzData().getServerById(serverId);
if (server == null) {
server = new Server(serverId);
Quartz.get().getQuartzData().getServers().add(server);
}
server.setName(packet.getData().get("name").getAsString());
server.setOnlinePlayers(packet.getData().get("online-players").getAsInt());
server.setMaximumPlayers(packet.getData().get("maximum-players").getAsInt());
server.setWhitelisted(packet.getData().get("whitelisted").getAsBoolean());
server.setPort(packet.getData().get("port").getAsInt());
server.setMetadata(packet.getData().get("metadata").getAsJsonObject());
server.setLastUpdate(System.currentTimeMillis());
}
}
}

View File

@ -0,0 +1,10 @@
package com.minexd.quartz.priority;
import com.minexd.quartz.queue.QueueRank;
import org.bukkit.entity.Player;
public interface Priority {
QueueRank getRank(Player player);
}

View File

@ -0,0 +1,56 @@
package com.minexd.quartz.priority.impl;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.queue.QueueRank;
import com.minexd.quartz.util.MapUtil;
import com.minexd.quartz.priority.Priority;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
public class DefaultPriority implements Priority {
private QueueRank defaultPriority;
private Map<String, QueueRank> priorities = new HashMap<>();
public DefaultPriority() {
FileConfiguration config = Quartz.get().getMainConfig().getConfiguration();
try {
this.defaultPriority = new QueueRank("Default", 1);
if (config.contains("priority.default")) {
this.defaultPriority.setPriority(config.getInt("priority.default"));
}
if (config.contains("priority.ranks") && config.isConfigurationSection("priority.ranks")) {
for (String rank : config.getConfigurationSection("priority.ranks").getKeys(false)) {
String path = "priority.ranks." + rank;
if (config.contains(path + ".priority") && config.contains(path + ".permission")) {
this.priorities.put(config.getString(path + ".permission"), new QueueRank(rank, config.getInt
(path + ".priority")));
}
}
}
this.priorities = MapUtil.sortByValue(this.priorities);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public QueueRank getRank(Player player) {
for (Map.Entry<String, QueueRank> entry : this.priorities.entrySet()) {
if (player.hasPermission(entry.getKey())) {
return entry.getValue();
}
}
return this.defaultPriority;
}
}

View File

@ -0,0 +1,23 @@
package com.minexd.quartz.task;
import com.minexd.quartz.Locale;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.queue.Queue;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public class ReminderTask extends BukkitRunnable {
@Override
public void run() {
for (Player player : Bukkit.getOnlinePlayers()) {
Queue queue = Quartz.get().getQuartzData().getQueueByPlayer(player.getUniqueId());
if (queue != null) {
Locale.SENDING.send(player, queue.getName());
}
}
}
}

View File

@ -0,0 +1,53 @@
package com.minexd.quartz.task;
import com.google.gson.JsonObject;
import com.minexd.quartz.Quartz;
import com.minexd.quartz.packet.ServerUpdatePacket;
import com.minexd.quartz.util.JsonChain;
import org.bukkit.Bukkit;
import org.bukkit.scheduler.BukkitRunnable;
import redis.clients.jedis.Jedis;
public class UpdateTask extends BukkitRunnable {
private Quartz quartz = Quartz.get();
@Override
public void run() {
// Update server info in redis
{
try (Jedis jedis = Quartz.get().getJedisPool().getResource()) {
final String infoKey = "quartz:server-info:" + Bukkit.getPort();
jedis.hset(infoKey, "id", quartz.getServerId());
jedis.hset(infoKey, "name", quartz.getServerName());
jedis.hset(infoKey, "port", "" + Bukkit.getPort());
jedis.hset(infoKey, "online-players", Bukkit.getOnlinePlayers().size() + "");
jedis.hset(infoKey, "maximum-players", Bukkit.getMaxPlayers() + "");
jedis.hset(infoKey, "whitelisted", Bukkit.hasWhitelist() + "");
jedis.hset(infoKey, "metadata", quartz.getMetadata().toString());
jedis.hset(infoKey, "last-update", System.currentTimeMillis() + "");
// Update server lookup data
jedis.hset("quartz:lookup:port", "" + Bukkit.getPort(), quartz.getServerId());
jedis.hset("quartz:lookup:id", quartz.getServerId(), Bukkit.getPort() + "");
}
}
// Broadcast server info to other Quartz instances
{
JsonObject data = new JsonChain()
.addProperty("id", quartz.getServerId())
.addProperty("name", quartz.getServerName())
.addProperty("online-players", Bukkit.getOnlinePlayers().size())
.addProperty("maximum-players", Bukkit.getMaxPlayers())
.addProperty("whitelisted", Bukkit.hasWhitelist())
.addProperty("port", Bukkit.getPort())
.add("metadata", quartz.getMetadata())
.get();
Quartz.get().getPidgin().sendPacket(new ServerUpdatePacket(data));
}
}
}

View File

@ -0,0 +1,26 @@
package com.minexd.quartz.util;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.minexd.quartz.Quartz;
import org.bukkit.entity.Player;
public final class BungeeUtil {
private BungeeUtil() {
throw new RuntimeException("Cannot instantiate a utility class.");
}
public static void sendToServer(Player player, String server) {
try {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("Connect");
out.writeUTF(server);
player.sendPluginMessage(Quartz.get(), "BungeeCord", out.toByteArray());
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,29 @@
REDIS:
HOST: "127.0.0.1"
PORT: 6379
AUTHENTICATION:
ENABLED: false
PASSWORD: ""
SETTINGS:
SERVER_ID: "hub-1" # The server's unique ID
SERVER_NAME: "Hub" # The server's display name (not network name)
CACHE_SERVERS: true
PRIORITY:
DEFAULT: 1
RANKS:
Default:
PRIORITY: 1
PERMISSION: "ranks.default"
VIP:
PRIORITY: 2
PERMISSION: "ranks.vip"
MVP:
PRIORITY: 3
PERMISSION: "ranks.mvp"
QUEUE:
JOINED: "&aYou have joined the {0} queue."
LEFT: "&cYou have been removed from the {0} queue."
REMINDER:
- "&eYou are position &d#{0} &eof &d{1} &ein the &a{2} &equeue."
- "&7Purchase a rank at www.minexd.com to get a higher queue priority."
SENDING: "&aSending you to {0}..."

View File

@ -0,0 +1,6 @@
main: com.minexd.quartz.Quartz
name: Quartz
author: joeleoli
version: ${project.version}
description: ${project.description}
depend: [ProtocolLib]

Some files were not shown because too many files have changed in this diff Show More