Merge pull request '0.5.8 refactor of all files, party, yml based system, damage listener' (#2) from unurled/Raxen:plugin into plugin

Reviewed-on: #2
This commit is contained in:
unurled 2023-06-06 15:31:55 +00:00
commit 9cfd556405
178 changed files with 12699 additions and 6199 deletions

4
.gitignore vendored
View file

@ -1,6 +1,6 @@
# User-specific stuff # User-specific stuff
server/ server/
.idea/ # .idea/
.vscode/ .vscode/
.settings/ .settings/
.factorypath .factorypath
@ -131,3 +131,5 @@ run/
/gradle/ /gradle/
resource_pack/raxen/assets/minecraft/ resource_pack/raxen/assets/minecraft/
.idea/codeStyles/codeStyleConfig.xml

92
.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,92 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
compiler.xml
discord.xml
gradle.xml
codeStyles/codeStylesConfig.xml
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

1
.idea/.name Normal file
View file

@ -0,0 +1 @@
raxen

View file

@ -0,0 +1,581 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="OTHER_INDENT_OPTIONS">
<value>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</value>
</option>
<option name="LINE_SEPARATOR" />
<option name="RIGHT_MARGIN" value="100" />
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="THROWS_KEYWORD_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="WRAP_COMMENTS" value="true" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<option name="SOFT_MARGINS" value="80,100,120" />
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true" />
<option name="LAYOUT_SETTINGS">
<value>
<option name="INSERT_BLANK_LINE_BEFORE_TAG" value="false" />
</value>
</option>
</AndroidXmlCodeStyleSettings>
<JSCodeStyleSettings version="0">
<option name="INDENT_CHAINED_CALLS" value="false" />
</JSCodeStyleSettings>
<JavaCodeStyleSettings>
<option name="INSERT_INNER_CLASS_IMPORTS" value="true" />
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="999" />
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value />
</option>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="true" />
<emptyLine />
<package name="" withSubpackages="true" static="false" />
</value>
</option>
</JavaCodeStyleSettings>
<Objective-C>
<option name="INDENT_NAMESPACE_MEMBERS" value="0" />
<option name="INDENT_C_STRUCT_MEMBERS" value="2" />
<option name="INDENT_CLASS_MEMBERS" value="2" />
<option name="INDENT_VISIBILITY_KEYWORDS" value="1" />
<option name="INDENT_INSIDE_CODE_BLOCK" value="2" />
<option name="KEEP_STRUCTURES_IN_ONE_LINE" value="true" />
<option name="FUNCTION_PARAMETERS_WRAP" value="5" />
<option name="FUNCTION_CALL_ARGUMENTS_WRAP" value="5" />
<option name="TEMPLATE_CALL_ARGUMENTS_WRAP" value="5" />
<option name="TEMPLATE_CALL_ARGUMENTS_ALIGN_MULTILINE" value="true" />
<option name="ALIGN_INIT_LIST_IN_COLUMNS" value="false" />
<option name="SPACE_BEFORE_SUPERCLASS_COLON" value="false" />
</Objective-C>
<Objective-C-extensions>
<option name="GENERATE_INSTANCE_VARIABLES_FOR_PROPERTIES" value="ASK" />
<option name="RELEASE_STYLE" value="IVAR" />
<option name="TYPE_QUALIFIERS_PLACEMENT" value="BEFORE" />
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cc" header="h" />
<pair source="c" header="h" />
</extensions>
</Objective-C-extensions>
<Python>
<option name="USE_CONTINUATION_INDENT_FOR_ARGUMENTS" value="true" />
</Python>
<TypeScriptCodeStyleSettings version="0">
<option name="INDENT_CHAINED_CALLS" value="false" />
</TypeScriptCodeStyleSettings>
<XML>
<option name="XML_ALIGN_ATTRIBUTES" value="false" />
</XML>
<codeStyleSettings language="CSS">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="ECMA Script Level 4">
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
</codeStyleSettings>
<codeStyleSettings language="HTML">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JAVA">
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_RESOURCES" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="THROWS_KEYWORD_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="WRAP_COMMENTS" value="true" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JSON">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="JavaScript">
<option name="RIGHT_MARGIN" value="80" />
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="1" />
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="ObjectiveC">
<option name="RIGHT_MARGIN" value="80" />
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" />
<option name="BLANK_LINES_BEFORE_IMPORTS" value="0" />
<option name="BLANK_LINES_AFTER_IMPORTS" value="0" />
<option name="BLANK_LINES_AROUND_CLASS" value="0" />
<option name="BLANK_LINES_AROUND_METHOD" value="0" />
<option name="BLANK_LINES_AROUND_METHOD_IN_INTERFACE" value="0" />
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="false" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_WRAP" value="1" />
<option name="ASSIGNMENT_WRAP" value="1" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="PROTO">
<option name="RIGHT_MARGIN" value="80" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="Python">
<option name="RIGHT_MARGIN" value="80" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="SASS">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="SCSS">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="TypeScript">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:.*Style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_width</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_height</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_weight</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_margin</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginTop</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginBottom</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginStart</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginEnd</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginLeft</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_marginRight</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:padding</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingTop</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingBottom</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingStart</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingEnd</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingLeft</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:paddingRight</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res-auto</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/tools</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="protobuf">
<option name="RIGHT_MARGIN" value="80" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
</component>

85
.idea/jarRepositories.xml Normal file
View file

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven8" />
<option name="name" value="maven8" />
<option name="url" value="https://repo.maven.apache.org/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven4" />
<option name="name" value="maven4" />
<option name="url" value="https://s01.oss.sonatype.org/content/repositories/snapshots/" />
</remote-repository>
<remote-repository>
<option name="id" value="paperweightDecompilerRepository" />
<option name="name" value="paperweightDecompilerRepository" />
<option name="url" value="https://repo.papermc.io/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="PaperMc" />
<option name="name" value="PaperMc" />
<option name="url" value="https://papermc.io/repo/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="PlaceHolderApi" />
<option name="name" value="PlaceHolderApi" />
<option name="url" value="https://repo.extendedclip.com/content/repositories/placeholderapi/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven3" />
<option name="name" value="maven3" />
<option name="url" value="https://repo.dmulloy2.net/repository/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenLocal" />
<option name="name" value="MavenLocal" />
<option name="url" value="file:$MAVEN_REPOSITORY$/" />
</remote-repository>
<remote-repository>
<option name="id" value="Citizens" />
<option name="name" value="Citizens" />
<option name="url" value="https://repo.citizensnpcs.co/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven2" />
<option name="name" value="maven2" />
<option name="url" value="https://oss.sonatype.org/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven6" />
<option name="name" value="maven6" />
<option name="url" value="https://repo.onarandombox.com/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven" />
<option name="name" value="maven" />
<option name="url" value="https://jitpack.io" />
</remote-repository>
<remote-repository>
<option name="id" value="EssentialsX" />
<option name="name" value="EssentialsX" />
<option name="url" value="https://repo.essentialsx.net/releases/" />
</remote-repository>
<remote-repository>
<option name="id" value="CodeMC" />
<option name="name" value="CodeMC" />
<option name="url" value="https://repo.codemc.org/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="Worldedit" />
<option name="name" value="Worldedit" />
<option name="url" value="https://maven.enginehub.org/repo/" />
</remote-repository>
</component>
</project>

13
.idea/misc.xml Normal file
View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<list size="1">
<item index="0" class="java.lang.String" itemvalue="org.bukkit.event.EventHandler" />
</list>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK" />
</project>

9
.idea/modules.xml Normal file
View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/modules/raxen.main.iml" filepath="$PROJECT_DIR$/.idea/modules/raxen.main.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/modules/raxen.test.iml" filepath="$PROJECT_DIR$/.idea/modules/raxen.test.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

10
.prettierrc.yml Normal file
View file

@ -0,0 +1,10 @@
# Prettier configuration
overrides:
- files:
- "*.java"
options:
printWidth: 80
tabWidth: 4
useTabs: false
trailingComma: "none"
endOfLine: "lf"

View file

@ -28,9 +28,10 @@ pipeline:
- api_key - api_key
commands: commands:
- export PRERELEASE=true - export PRERELEASE=true
- cd scripts
- chmod +x git_release.py - chmod +x git_release.py
- pip install giteapy - pip install giteapy
- python git_release.py --token "$API_KEY" --message "${DRONE_COMMIT_MESSAGE}" --prerelease $PRERELEASE --tag "${DRONE_TAG}" - python git_release.py --token "$API_KEY" --message "${CI_COMMIT_MESSAGE}" --prerelease $PRERELEASE --tag "${CI_COMMIT_TAG}"
when: when:
event: tag event: tag

View file

@ -1,4 +1,5 @@
# Raxen [![Build Status](https://drone.unurled.me/api/badges/Elixium/Raxen/status.svg)](https://drone.unurled.me/Elixium/Raxen) # Raxen [![Build Status](https://ci.unurled.me/api/badges/Elixium/Raxen/status.svg)](https://drone.unurled.me/Elixium/Raxen)
Project made by unurled. Project made by unurled.
Minecraft Plugin that do multiple stuff. (cutsom items, custom mobs...) Minecraft Plugin that do multiple stuff. (cutsom items, custom mobs...)
@ -13,14 +14,19 @@ Minecraft Plugin that do multiple stuff. (cutsom items, custom mobs...)
no build and no running info atm. no build and no running info atm.
to use custom texture for items, modify the custom data model => [Example](https://www.youtube.com/watch?v=XGxn_Mb8VzI) to use custom texture for items, modify the custom data
model => [Example](https://www.youtube.com/watch?v=XGxn_Mb8VzI)
for more info contact me. for more info contact me.
@unurled#0149\ @unurled#0149\
or create an [issue](https://git.unurled.me/Elixium/Raxen/issues/new) or create an [issue](https://git.unurled.me/Elixium/Raxen/issues/new)
custom Items uses custom model data to work => need to update in model/item/item.json [Example](https://github.com/elBukkit/MagicPlugin/wiki/ResourcePack#customizing)
see [Examples](/Elixium/raxen/docs/examples) for some config examples
model/item/item.json [Example](https://github.com/elBukkit/MagicPlugin/wiki/ResourcePack#customizing)
custom Items uses custom model data to work => need to update in
## Developing ## Developing
you can see [TODO.md](/Elixium/raxen/src/branch/plugin/docs/TODO.md) in which I did a list of what we must do you can see [TODO.md](/Elixium/raxen/src/branch/plugin/docs/TODO.md) in which I did a list of what
we must do

View file

@ -7,6 +7,7 @@ plugins {
apply plugin: "java" apply plugin: "java"
apply plugin: "io.papermc.paperweight.userdev" apply plugin: "io.papermc.paperweight.userdev"
apply plugin: "com.github.johnrengelman.shadow"
repositories { repositories {
mavenLocal() mavenLocal()
@ -48,41 +49,48 @@ repositories {
maven { maven {
url = "https://repo.onarandombox.com/content/groups/public/" url = "https://repo.onarandombox.com/content/groups/public/"
} }
maven {
name = "Worldedit"
url = 'https://maven.enginehub.org/repo/'
}
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
// lombok stuff // lombok stuff
implementation 'org.projectlombok:lombok:1.18.24' implementation 'org.projectlombok:lombok:1.18.26'
annotationProcessor 'org.projectlombok:lombok:1.18.24' annotationProcessor 'org.projectlombok:lombok:1.18.26'
testCompileOnly 'org.projectlombok:lombok:1.18.24' testCompileOnly 'org.projectlombok:lombok:1.18.26'
implementation 'org.apache.httpcomponents:httpclient:4.5.13'
implementation 'org.apache.httpcomponents:httpmime:4.5.13'
// mongo stuff // mongo stuff
implementation 'org.mongodb:mongodb-driver-sync:4.7.2' implementation 'org.mongodb:mongodb-driver-sync:4.9.1'
implementation 'org.mongodb:bson:4.7.2' implementation 'org.mongodb:bson:4.9.1'
implementation 'org.mongodb:mongodb-driver-core:4.7.2' implementation 'org.mongodb:mongodb-driver-core:4.9.1'
implementation 'redis.clients:jedis:4.3.1'
compileOnly 'io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT' compileOnly 'io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT'
implementation 'de.tr7zw:item-nbt-api-plugin:2.11.2' implementation 'de.tr7zw:item-nbt-api-plugin:2.11.2'
// compileOnly 'de.tr7zw:item-nbt-api:2.11.2' // compileOnly 'de.tr7zw:item-nbt-api:2.11.2'
compileOnly 'com.comphenix.protocol:ProtocolLib:4.8.0' compileOnly 'com.comphenix.protocol:ProtocolLib:5.0.0'
compileOnly 'net.luckperms:api:5.4'
compileOnly 'com.github.MilkBowl:VaultAPI:1.7.1' compileOnly 'com.github.MilkBowl:VaultAPI:1.7.1'
compileOnly 'net.essentialsx:EssentialsX:2.19.7' compileOnly 'net.essentialsx:EssentialsX:2.19.7'
//compileOnly 'com.fastasyncworldedit:FastAsyncWorldEdit-Core:2.3.0' compileOnly 'com.sk89q.worldedit:worldedit-core:7.2.14'
//compileOnly 'com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit:2.3.0' compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.2.14'
compileOnly 'me.clip:placeholderapi:2.11.2' compileOnly 'me.clip:placeholderapi:2.11.3'
compileOnly('net.citizensnpcs:citizens-main:2.0.31-SNAPSHOT') { compileOnly('net.citizensnpcs:citizens-main:2.0.31-SNAPSHOT') {
exclude group: '*', module: '*' exclude group: '*', module: '*'
} }
compileOnly 'com.onarandombox.multiversecore:Multiverse-Core:4.3.1' compileOnly 'com.onarandombox.multiversecore:Multiverse-Core:4.3.1'
// compileOnly 'me.filoghost.holographicdisplays:holographicdisplays-api:3.0.1' implementation 'com.github.decentsoftware-eu:decentholograms:2.8.1'
// compileOnly fileTree(dir: 'libs', include: '*.jar')
paperweightDevelopmentBundle("io.papermc.paper:dev-bundle:1.19.4-R0.1-SNAPSHOT") paperweightDevelopmentBundle("io.papermc.paper:dev-bundle:1.19.4-R0.1-SNAPSHOT")
} }
group = 'me.unurled' group = 'me.unurled'
version = '0.5.7' version = '0.6.0'
description = 'Raxen' description = 'Raxen'
java { java {
@ -91,19 +99,10 @@ java {
} }
} }
publishing {
publications {
maven(MavenPublication) {
from(components.java)
}
}
}
tasks.withType(JavaCompile) { tasks.withType(JavaCompile) {
options.encoding = 'UTF-8' options.encoding = 'UTF-8'
options.release = 17 options.release = 17
options.compilerArgs += ["-Xlint:unchecked", "-Xlint:deprecation"] options.compilerArgs += ["-Xlint:unchecked", "-Xlint:deprecation"]
} }
tasks { tasks {
@ -119,16 +118,34 @@ shadowJar {
dependencies { dependencies {
include dependency('de.tr7zw:item-nbt-api-plugin:2.11.2') include dependency('de.tr7zw:item-nbt-api-plugin:2.11.2')
include dependency('de.tr7zw:item-nbt-api:2.11.2') include dependency('de.tr7zw:item-nbt-api:2.11.2')
include dependency('org.mongodb:mongodb-driver-sync:4.7.2') include dependency('org.mongodb:mongodb-driver-sync:4.9.1')
include dependency('org.mongodb:bson:4.7.2') include dependency('org.mongodb:bson:4.9.1')
include dependency('org.mongodb:mongodb-driver-core:4.7.2') include dependency('org.mongodb:mongodb-driver-core:4.9.1')
include dependency('com.github.decentsoftware-eu:decentholograms:2.8.1')
include dependency('org.apache.httpcomponents:httpclient:4.5.13')
include dependency('org.apache.httpcomponents:httpmime:4.5.13')
include dependency('redis.clients:jedis:4.3.1')
} }
relocate("de.tr7zw", "me.unurled.libs.de.tr7zw") relocate("de.tr7zw", "me.unurled.libs.de.tr7zw")
relocate("com.mongodb", 'me.unurled.libs.com.mongodb') relocate("com.mongodb", 'me.unurled.libs.com.mongodb')
relocate("org.bson", 'me.unurled.libs.org.bson') relocate("org.bson", 'me.unurled.libs.org.bson')
relocate('eu.decentsoftware', 'me.unurled.libs.eu.decentsoftware')
relocate('org.apache', 'me.unurled.libs.org.apache')
relocate('redis.clients', 'me.unurled.libs.redis.clients')
processResources { processResources {
expand version: project.version expand version: project.version
} }
minimize() minimize()
} }
sourceSets {
main {
resources {
srcDirs = ['src/main/resources']
}
}
}
processResources {
exclude '**/*.schem'
}

View file

@ -9,18 +9,25 @@ Some RPG thing :
- Raxen must do : - Raxen must do :
- some survival and RPG(Class) thing - some survival and RPG(Class) thing
- need some sort of action => pve, pvp maybe ? - need some sort of action => pve, pvp maybe ?
- need custom mobs => some are made => not definitive need more => ~~juste made the damage system and persistentdatacontainer on entities outside of Player, might consider to switch to persistentdatacontainer on player instead of having an hashmap (ProfileManager.java)~~ already done - need custom mobs => some are made => not definitive need more => ~~juste made the damage
system and persistentdatacontainer on entities outside of Player, might consider to switch to
persistentdatacontainer on player instead of having an hashmap (ProfileManager.java)~~ already
done
- need custom items => partialy made => need custom resource pack support - need custom items => partialy made => need custom resource pack support
- can use custom texture pack => in making - can use custom texture pack => in making
- protection and logging feature => coreprotect - protection and logging feature => coreprotect
- solo leveling inspired thing with player being mc of his onw world, can do side quest with every1, and can make a party to play, max of 4?: - solo leveling inspired thing with player being mc of his onw world, can do side quest with
every1, and can make a party to play, max of 4?, more player means more difficulty:
- Gates: - Gates:
- power: ranked from F, E, D, C, B, A, S, SS, SSS, world, unbeatable and so on - power: ranked from F, E, D, C, B, A, S, SS, SSS, world, unbeatable and so on
- Dungunes: - Dungunes:
- differents types => labirynth, graves,abandoned castle, openfiled like jungles, forest, plains => all of them with night variant and many days to complete - differents types => labirynth, graves,abandoned castle, openfiled like jungles,
forest, plains => all of them with night variant and many days to complete
- Monster: - Monster:
- basic isekai manga sort of monster and also high leveled op monster king of something => bosses - basic isekai manga sort of monster and also high leveled op monster king of
something => bosses
- outbreak if gate isn't closed in time - outbreak if gate isn't closed in time
- loots: - loots:
- items of different rarities with multiple purpose => medicinal, combat related types, defensive etc... - items of different rarities with multiple purpose => medicinal, combat related
types, defensive etc...
- leveling system for the player - leveling system for the player

View file

@ -1,8 +1,42 @@
- [x] refactor all abilities to make them compatible between entities and also making it easier to add them. - [x] refactor all abilities to make them compatible between entities and also making it easier to
- [ ] make custom items (hard coded) add them.
- [ ] make custom class (hard coded) - [ ] make custom items (hard coded) / or all in db/json in Raxen plugin folder (like a serialized
- [ ] make custom abilities (hard coded) version of it)
- [ ] make custom mods (hard coded) - [ ] custom items effects (hard coded) / or all in db/json in Raxen plugin (have some sort of
- [ ] make gates serliazed
- [ ] a map version of it)
- [ ] make custom class (hard coded) / or all in db/json in Raxen plugin (have some sort of
serliazed
version of it)
- [ ] make custom abilities/skills (hard coded) / or all in db/json in Raxen plugin (can't have a
separate
file, must be in java files)
- [ ] make custom mods (hard coded) / or all in db/json in Raxen plugin (can have some of the infos
in db/json but not all)
- [ ] make gates (appears randomly in the world)
- [ ] a map (more wynncrafty than hypixel + dynnmap/bettermap)
- [ ] a leveling system - [ ] a leveling system
- [ ] spells (hard coded)
- [-] party
- [ ] boss monster
- [ ] guilds
- [ ] quests (hard coded) and db/json
- [ ] filter chat
- [ ] resource pack (host, upload, compress)
## tests
- [ ] party
- [ ] combat
- [ ] class
- [ ] items
- [ ] item effects
- [ ] mobs
- [ ] skills
- [ ] abilities
- [ ] gates
- [ ] leveling system
- [ ] spells
- [ ] boss monster
- [ ] quests
- [ ] filter chat

17
docs/examples/Effects.md Normal file
View file

@ -0,0 +1,17 @@
# Effects
### Simple Effects
this is an example of a simple effect, it will spawn an armor stand with an item in its hand, for 1
duration then will change to the second item, after 4 delay it will remove the armor stand
```yaml
testEffect:
type: armor_stand
Pose:
RightArm: 0, 0, 0
effects:
- item=testItem_1:0;delay=0;duration=1
- item=testItem_2:0;delay=3;duration=1
- remove;delay=4
```

12
docs/examples/Glyphs.md Normal file
View file

@ -0,0 +1,12 @@
# Glyphs
this is an example of a simple glyph
```yaml
testGlyph:
Pack:
model: raxen/testGlyph
texture: raxen/testGlyph
char: "\uE000"
placeholder: ":test:"
```

21
docs/examples/Items.md Normal file
View file

@ -0,0 +1,21 @@
# Items
## Simple Item
see an example of a simple item
```yaml
testItem:
Pack:
custom_model_data: 1
model: raxen/testItem
display_name: '<aqua>Test Item'
material: DIAMOND
lore:
- '<gray>Test Item'
- '<gray>Custom Model Data: <aqua>1'
enchantments:
- 'DURABILITY:1'
effect:
- 'testEffect'
```

32
docs/examples/Mobs.md Normal file
View file

@ -0,0 +1,32 @@
# Mobs
```yaml
testMob:
type: ZOMBIE
display_name: "<aqua>Test Mob"
health: 20
speed: 100
damage_min: 1
damage_max: 2
options:
show_health: true
persistent: true
despawn: true
prevent_other_drops: true
slient: true
prevent_sunburn: true
AI:
target:
- "NONE"
- "PLAYER"
goal:
- "NONE"
- "MOVE_TO_TARGET"
- "ATTACK_TARGET"
effect:
- model=testModel ~spawn
- sound=raxen:raxen.testSound;volume=1.0;pitch=1.0 ~timer:140 0.35
- sound=raxen:raxen.testSoundDeath;volume=1.0;pitch=1.0 ~death
- skill=testSkillDamage ~damaged
- skill=
```

10
docs/examples/README.md Normal file
View file

@ -0,0 +1,10 @@
# Exemples
see all the exemples in this folder :
to create any of the following, create a new file in the folder type of your choice (e.g. `
plugins/Raxen/items/exampleItem.yml`)
- [Effects.md](/Elixium/raxen/src/branch/plugin/docs/examples/Effects.md)
- [Items.md](/Elixium/raxen/src/branch/plugin/docs/examples/Items.md)
- [Mobs.md](/Elixium/raxen/src/branch/plugin/docs/examples/Mobs.md)

3
scripts/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
node_modules/
main.js
package-lock.json

View file

@ -23,10 +23,10 @@ owner = "Elixium"
repo = "Raxen" repo = "Raxen"
body = giteapy.CreateReleaseOption(body=doc['message'], draft=False, name=doc['tag'], prerelease=doc['prerelease'], tag_name=doc['tag'], target_commitish="string") body = giteapy.CreateReleaseOption(body=doc['message'], draft=False, name=doc['tag'], prerelease=doc['prerelease'], tag_name=doc['tag'], target_commitish="string")
attachments = [] attachments = []
for file in os.listdir(os.getcwd() +"/build/libs"): for file in os.listdir(os.getcwd() +"../build/libs"):
if file.endswith('.jar'): if file.endswith('.jar'):
if file.startswith('raxen'): if file.startswith('raxen'):
attachments.append(os.getcwd() + '/build/libs/' + file) attachments.append(os.getcwd() + '../build/libs/' + file)
print(attachments) print(attachments)
attachment1 = attachments[0] attachment1 = attachments[0]
attachment2 = attachments[1] attachment2 = attachments[1]

56
scripts/main.ts Normal file
View file

@ -0,0 +1,56 @@
import { giteaApi, CreatePullReviewOptions } from 'gitea-js';
import fetch from 'cross-fetch'; // You have to use a fetch compatible polyfill like cross-fetch for Node.JS
import fs = require('fs');
import path = require('path');
const api = giteaApi('https://git.unurled.me', {
token: process.env.TOKEN,
customFetch: fetch,
});
const todo: { [file: string]: string[]} = {};
function searchTodo(file: string): void {
let compteur = 0;
const lines: string[] = fs.readFileSync(file, 'utf-8').split('\n');
for (const line of lines) {
compteur += 1;
if (line.match(/[\S\s]*\btodo\b/i)) {
if (file in todo) {
todo[file].push(line.trim() + " (line " + compteur + ")");
} else {
todo[file] = [line.trim() + " (line " + compteur + ")"];
}
}
}
}
function searchTodoInDir(dir: string): void {
fs.readdirSync(dir).forEach(file => {
const filePath = path.join(dir, file);
if (fs.statSync(filePath).isDirectory()) {
searchTodoInDir(filePath);
}
if (file.endsWith(".java")) {
searchTodo(filePath);
}
});
}
function searchTodoInProject(): void {
const pwd = path.dirname(path.dirname(path.resolve(__filename)));
searchTodoInDir(path.join(pwd, "src/main/java/me/unurled/raxen"));
}
searchTodoInProject();
console.log();
const index: number = Number.parseInt(process.env.CI_COMMIT_PULL_REQUEST);
const body: CreatePullReviewOptions = {
body: "# TODO that needs to be done by next big release :\n```json\n" + JSON.stringify(todo, null, "\t") + "\n```",
commit_id: process.env.CI_COMMIT_SHA,
};
const pr_review = api.repos.repoCreatePullReview(process.env.CI_REPO_OWNER, process.env.CI_REPO_NAME, index, body, {});
pr_review.then(res => console.log(res)).catch(err => console.log(err));

20
scripts/package.json Normal file
View file

@ -0,0 +1,20 @@
{
"name": "scripts",
"version": "1.0.0",
"description": "a script for pull request comment",
"main": "main.js",
"author": "unurled",
"license": "MIT",
"scripts": {
"build": "tsc",
"start": "node main.js"
},
"dependencies": {
"cross-fetch": "^3.1.5",
"gitea-js": "^1.19.1"
},
"devDependencies": {
"@types/node": "^18.16.0",
"typescript": "^5.0.4"
}
}

8
scripts/tsconfig.json Normal file
View file

@ -0,0 +1,8 @@
{
"compilerOptions": {
"module": "CommonJS"
},
"files": [
"main.ts"
]
}

View file

@ -20,7 +20,7 @@ public final class Raxen extends JavaPlugin {
"<aqua>Rx</aqua><light_purple>></light_purple> "; "<aqua>Rx</aqua><light_purple>></light_purple> ";
@Getter @Getter
private static String version = "0.5.7"; private static String version = "0.6.0";
private boolean loading = true; private boolean loading = true;
private final PluginManager pm = getServer().getPluginManager(); private final PluginManager pm = getServer().getPluginManager();
@ -66,7 +66,9 @@ public final class Raxen extends JavaPlugin {
Bukkit Bukkit
.getConsoleSender() .getConsoleSender()
.sendMessage( .sendMessage(
colorComp(prefix + "<green>Server Started Successfully!</green>") colorComp(
prefix + "<green>Server Started Successfully!</green>"
)
); );
manager.getListenerManager().getServerPingEvent().setLoading(false); manager.getListenerManager().getServerPingEvent().setLoading(false);
@ -81,7 +83,9 @@ public final class Raxen extends JavaPlugin {
Bukkit Bukkit
.getConsoleSender() .getConsoleSender()
.sendMessage(colorComp(prefix + "<green>Commands Registered!</green>")); .sendMessage(
colorComp(prefix + "<green>Commands Registered!</green>")
);
} }
/** /**
@ -92,7 +96,9 @@ public final class Raxen extends JavaPlugin {
Bukkit Bukkit
.getConsoleSender() .getConsoleSender()
.sendMessage(colorComp(prefix + "<green>Events Registered!</green>")); .sendMessage(
colorComp(prefix + "<green>Events Registered!</green>")
);
} }
/** /**
@ -107,6 +113,8 @@ public final class Raxen extends JavaPlugin {
playerConfig.close(); playerConfig.close();
} }
// save tutorial state
Bukkit Bukkit
.getConsoleSender() .getConsoleSender()
.sendMessage( .sendMessage(
@ -116,6 +124,7 @@ public final class Raxen extends JavaPlugin {
/** /**
* getter for the logger * getter for the logger
*
* @return the plugin logger * @return the plugin logger
*/ */
public Logger getPluginLogger() { public Logger getPluginLogger() {
@ -124,6 +133,7 @@ public final class Raxen extends JavaPlugin {
/** /**
* getter for the bukkit's plugin manager * getter for the bukkit's plugin manager
*
* @return plugin manager * @return plugin manager
*/ */
public PluginManager getPm() { public PluginManager getPm() {
@ -132,6 +142,7 @@ public final class Raxen extends JavaPlugin {
/** /**
* return the instance which is launched. * return the instance which is launched.
*
* @return main instance * @return main instance
*/ */
public Raxen getPlugin() { public Raxen getPlugin() {
@ -140,6 +151,7 @@ public final class Raxen extends JavaPlugin {
/** /**
* getter for the raxen prefix * getter for the raxen prefix
*
* @return string prefix * @return string prefix
*/ */
public static String getPrefix() { public static String getPrefix() {
@ -148,6 +160,7 @@ public final class Raxen extends JavaPlugin {
/** /**
* getter for the yml's player configs. * getter for the yml's player configs.
*
* @return player config instance * @return player config instance
*/ */
public PlayerConfig getPlayerConfig() { public PlayerConfig getPlayerConfig() {
@ -156,6 +169,7 @@ public final class Raxen extends JavaPlugin {
/** /**
* getter for an instance of the config utility class * getter for an instance of the config utility class
*
* @return raxen's config * @return raxen's config
*/ */
public Config getConf() { public Config getConf() {

View file

@ -1,6 +1,12 @@
package me.unurled.raxen.commands; package me.unurled.raxen.commands;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorComp;
import static me.unurled.raxen.utils.Utils.colorTextComp;
import static me.unurled.raxen.utils.Utils.coloredString;
import static me.unurled.raxen.utils.Utils.debug;
import static me.unurled.raxen.utils.Utils.msgPlayer;
import static me.unurled.raxen.utils.Utils.msgSender;
import static me.unurled.raxen.utils.Utils.stringToComp;
import java.util.List; import java.util.List;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
@ -61,7 +67,10 @@ public class RaxenCommand implements TabExecutor {
"<gold>---------------------------------------------" "<gold>---------------------------------------------"
) )
); );
msgPlayer(player, colorTextComp("<red>MONGO DB<white>")); msgPlayer(
player,
colorTextComp("<red>MONGO DB<white>")
);
msgPlayer( msgPlayer(
player, player,
StorageManager StorageManager
@ -72,7 +81,10 @@ public class RaxenCommand implements TabExecutor {
); );
msgPlayer( msgPlayer(
player, player,
StorageManager.getMongodb().getMongoDatabase().getName() StorageManager
.getMongodb()
.getMongoDatabase()
.getName()
); );
msgPlayer( msgPlayer(
player, player,
@ -112,7 +124,9 @@ public class RaxenCommand implements TabExecutor {
); );
sender.sendMessage(txt); sender.sendMessage(txt);
sender.sendMessage( sender.sendMessage(
colorComp("<gold>---------------------------------------------") colorComp(
"<gold>---------------------------------------------"
)
); );
return true; return true;
} }
@ -138,7 +152,10 @@ public class RaxenCommand implements TabExecutor {
); );
sender.sendMessage( sender.sendMessage(
stringToComp( stringToComp(
StorageManager.getMongodb().getMongoDatabase().getName() StorageManager
.getMongodb()
.getMongoDatabase()
.getName()
) )
); );
sender.sendMessage( sender.sendMessage(
@ -162,7 +179,8 @@ public class RaxenCommand implements TabExecutor {
case "v", "version", "ver" -> { case "v", "version", "ver" -> {
msgSender( msgSender(
sender, sender,
Raxen.getPrefix() + "<gold>Printing About Raxen...", Raxen.getPrefix() +
"<gold>Printing About Raxen...",
"<gold>---------------------------------------------", "<gold>---------------------------------------------",
"<dark_aqua> Raxen ", "<dark_aqua> Raxen ",
"<dark_aqua> - Version: " + Raxen.getVersion(), "<dark_aqua> - Version: " + Raxen.getVersion(),
@ -173,12 +191,13 @@ public class RaxenCommand implements TabExecutor {
); );
sender.sendMessage(txt); sender.sendMessage(txt);
sender.sendMessage( sender.sendMessage(
colorComp("<gold>---------------------------------------------") colorComp(
"<gold>---------------------------------------------"
)
); );
return true; return true;
} }
case "hemlp", "?", "h" -> //print help case "hemlp", "?", "h" -> debug(main, "print help"); //print help
debug(main, "print help");
} }
} }
} }

View file

@ -0,0 +1,108 @@
package me.unurled.raxen.commands.admin;
import java.util.ArrayList;
import java.util.List;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.utils.Utils;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class BuildCommand implements TabExecutor {
private Raxen raxen;
List<String> complete = new ArrayList<>();
public BuildCommand(Raxen raxen) {
this.raxen = raxen;
}
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) {
if (!(sender instanceof Player)) {
Utils.errorConsoleSender(sender);
return true;
}
Player p = (Player) sender;
if (args.length == 0) {
p.sendMessage(Utils.colorComp(
"<reset><yellow>/build [discard|edit|hide|list|on|remove|save|show|tp]"));
return true;
}
if (args.length == 1) {
switch (args[0]) {
case "discard":
p.sendMessage(Utils.colorComp("<reset><yellow>Discarded build!"));
return true;
case "edit":
p.sendMessage(Utils.colorComp("<reset><yellow>Editing build!"));
return true;
case "hide":
p.sendMessage(Utils.colorComp("<reset><yellow>Hiding build!"));
return true;
case "list":
p.sendMessage(Utils.colorComp("<reset><yellow>Listing builds!"));
return true;
case "on":
p.sendMessage(Utils.colorComp("<reset><yellow>Build mode enabled!"));
return true;
case "remove":
p.sendMessage(Utils.colorComp("<reset><yellow>Removed build!"));
return true;
case "save":
p.sendMessage(Utils.colorComp("<reset><yellow>Saved build!"));
return true;
case "show":
p.sendMessage(Utils.colorComp("<reset><yellow>Showing build!"));
return true;
case "tp":
p.sendMessage(Utils.colorComp("<reset><yellow>Teleporting to build!"));
return true;
default:
p.sendMessage(Utils.colorComp(
"<reset><yellow>/build [discard|edit|hide|list|on|remove|save|show|tp]"));
return true;
}
}
return false;
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender,
@NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (complete.isEmpty()) {
complete.add("discard");
complete.add("edit");
complete.add("hide");
complete.add("list");
complete.add("on");
complete.add("remove");
complete.add("save");
complete.add("show");
complete.add("tp");
}
List<String> result = new ArrayList<>();
if (args.length == 1) {
for (String s : complete) {
if (s.toLowerCase().startsWith(args[0].toLowerCase())) {
result.add(s);
}
}
return result;
} else if (args.length == 2) {
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.getName().toLowerCase().startsWith(args[1].toLowerCase())) {
result.add(p.getName());
}
}
return result;
}
return null;
}
}

View file

@ -1,7 +1,10 @@
package me.unurled.raxen.commands.admin; package me.unurled.raxen.commands.admin;
import static me.unurled.raxen.utils.Items.customModelData; import static me.unurled.raxen.utils.Items.customModelData;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorComp;
import static me.unurled.raxen.utils.Utils.errorConsoleSender;
import static me.unurled.raxen.utils.Utils.isInt;
import static me.unurled.raxen.utils.Utils.noPerms;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -21,6 +24,7 @@ public class CustomModelDataCommand implements TabExecutor {
/** /**
* change custom model data of an item * change custom model data of an item
*
* @param sender Source of the command * @param sender Source of the command
* @param command Command which was executed * @param command Command which was executed
* @param label Alias of the command which was used * @param label Alias of the command which was used
@ -56,7 +60,10 @@ public class CustomModelDataCommand implements TabExecutor {
Material material = Material.getMaterial(args[1]); Material material = Material.getMaterial(args[1]);
if (material != null) { if (material != null) {
it = it =
customModelData(new ItemStack(material), Integer.parseInt(args[0])); customModelData(
new ItemStack(material),
Integer.parseInt(args[0])
);
p.getInventory().setItemInMainHand(it); p.getInventory().setItemInMainHand(it);
p.updateInventory(); p.updateInventory();
} else { } else {
@ -74,7 +81,9 @@ public class CustomModelDataCommand implements TabExecutor {
p.updateInventory(); p.updateInventory();
} else { } else {
p.sendMessage( p.sendMessage(
colorComp("<red>Get an item in hand please or specify an item</red>") colorComp(
"<red>Get an item in hand please or specify an item</red>"
)
); );
p.sendMessage( p.sendMessage(
colorComp( colorComp(
@ -87,13 +96,12 @@ public class CustomModelDataCommand implements TabExecutor {
} }
/** /**
* @param sender Source of the command. For players tab-completing a * @param sender Source of the command. For players tab-completing a command inside of a
* command inside of a command block, this will be the player, not * command block, this will be the player, not the command block.
* the command block.
* @param command Command which was executed * @param command Command which was executed
* @param label Alias of the command which was used * @param label Alias of the command which was used
* @param args The arguments passed to the command, including final * @param args The arguments passed to the command, including final partial argument to be
* partial argument to be completed * completed
* @return * @return
*/ */
@Override @Override

View file

@ -1,6 +1,8 @@
package me.unurled.raxen.commands.admin; package me.unurled.raxen.commands.admin;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorString;
import static me.unurled.raxen.utils.Utils.log;
import static me.unurled.raxen.utils.Utils.msgPlayer;
import java.util.List; import java.util.List;
import lombok.Getter; import lombok.Getter;
@ -46,8 +48,15 @@ public class ItemListCommand implements TabExecutor {
); );
return true; return true;
} }
int page = 1;
if (args.length > 0) {
try {
page = Integer.parseInt(args[0]);
} catch (NumberFormatException ignored) {
}
}
//openGui logic //openGui logic
player.openInventory(itemListGui.getInv()); itemListGui.openInventory(player, page);
return false; return false;
} }

View file

@ -1,7 +1,8 @@
package me.unurled.raxen.commands.admin; package me.unurled.raxen.commands.admin;
import static me.unurled.raxen.utils.Items.itemTo64; import static me.unurled.raxen.utils.Items.itemTo64;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.errorConsoleSender;
import static me.unurled.raxen.utils.Utils.msgPlayer;
import java.util.List; import java.util.List;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -37,13 +38,12 @@ public class ItemTo64Command implements TabExecutor {
} }
/** /**
* @param sender Source of the command. For players tab-completing a * @param sender Source of the command. For players tab-completing a command inside of a
* command inside of a command block, this will be the player, not * command block, this will be the player, not the command block.
* the command block.
* @param command Command which was executed * @param command Command which was executed
* @param label Alias of the command which was used * @param label Alias of the command which was used
* @param args The arguments passed to the command, including final * @param args The arguments passed to the command, including final partial argument to be
* partial argument to be completed * completed
* @return * @return
*/ */
@Override @Override

View file

@ -1,7 +1,11 @@
package me.unurled.raxen.commands.admin; package me.unurled.raxen.commands.admin;
import static me.unurled.raxen.components.entity.player.PlayerUtils.updateSkills; import static me.unurled.raxen.components.entity.player.PlayerUtils.updateSkills;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorString;
import static me.unurled.raxen.utils.Utils.colorTextComp;
import static me.unurled.raxen.utils.Utils.debug;
import static me.unurled.raxen.utils.Utils.error;
import static me.unurled.raxen.utils.Utils.msgPlayer;
import de.tr7zw.nbtapi.NBTItem; import de.tr7zw.nbtapi.NBTItem;
import java.util.ArrayList; import java.util.ArrayList;
@ -17,7 +21,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor; import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -39,12 +42,19 @@ public class NbtCommand implements TabExecutor {
if (!(sender instanceof Player player)) { if (!(sender instanceof Player player)) {
error( error(
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
colorString("<red>You can't execute this command as the Console!") colorString(
"<red>You can't execute this command as the Console!"
)
); );
return true; return true;
} }
if (player.getInventory().getItemInMainHand().getType() == Material.AIR) { if (
msgPlayer(player, colorTextComp("<red>You must hold an Item in hand.")); player.getInventory().getItemInMainHand().getType() == Material.AIR
) {
msgPlayer(
player,
colorTextComp("<red>You must hold an Item in hand.")
);
return true; return true;
} else { } else {
player.getInventory().getItemInMainHand(); player.getInventory().getItemInMainHand();
@ -58,9 +68,9 @@ public class NbtCommand implements TabExecutor {
debug("'" + args[0] + "'", "'" + args[1] + "'"); debug("'" + args[0] + "'", "'" + args[1] + "'");
ItemStack it = player.getInventory().getItemInMainHand(); ItemStack it = player.getInventory().getItemInMainHand();
NBTItem nbti = new NBTItem(it); NBTItem nbti = new NBTItem(it);
int a = 0; String a = "";
if (nbti.hasTag(args[0])) { if (nbti.hasTag(args[0])) {
a = nbti.getInteger(args[0]); a = nbti.getString(args[0]);
} }
List<Component> lore = new ArrayList<>(); List<Component> lore = new ArrayList<>();
// ItemMeta itm = it.getItemMeta(); // ItemMeta itm = it.getItemMeta();
@ -93,7 +103,14 @@ public class NbtCommand implements TabExecutor {
) )
).getManager() ).getManager()
.getPlayerManager(); .getPlayerManager();
nbti.setInteger(args[0], Integer.parseInt(args[1]) + a); try {
nbti.setInteger(
args[0],
Integer.parseInt(args[1]) + Integer.parseInt(a)
);
} catch (NumberFormatException ignored) {
nbti.setString(args[0], args[1]);
}
if (nbti.hasTag("SPEED")) { if (nbti.hasTag("SPEED")) {
pm.getSpeed().add(player, nbti.getInteger("SPEED")); pm.getSpeed().add(player, nbti.getInteger("SPEED"));
} }

View file

@ -1,6 +1,8 @@
package me.unurled.raxen.commands.admin; package me.unurled.raxen.commands.admin;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorString;
import static me.unurled.raxen.utils.Utils.log;
import static me.unurled.raxen.utils.Utils.noPerms;
import java.util.List; import java.util.List;
import me.unurled.raxen.utils.Reload; import me.unurled.raxen.utils.Reload;
@ -9,6 +11,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor; import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -34,7 +37,12 @@ public class ReloadCommand implements TabExecutor {
"<red>Server stopping!\n Using: /rlpl.\n Please wait a little bit." "<red>Server stopping!\n Using: /rlpl.\n Please wait a little bit."
) )
); );
new BukkitRunnable() {
@Override
public void run() {
Bukkit.getServer().shutdown(); Bukkit.getServer().shutdown();
}
}.runTaskLater(Bukkit.getPluginManager().getPlugin("Raxen"), 80L);
return false; return false;
} }

View file

@ -1,13 +1,17 @@
package me.unurled.raxen.commands.admin; package me.unurled.raxen.commands.admin;
import static me.unurled.raxen.components.entity.other.EntityUtils.setNameSpacedKeys;
import static me.unurled.raxen.utils.Items.itemFrom64; import static me.unurled.raxen.utils.Items.itemFrom64;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorTextComp;
import static me.unurled.raxen.utils.Utils.error;
import static me.unurled.raxen.utils.Utils.getStringFromArg;
import static me.unurled.raxen.utils.Utils.log;
import static me.unurled.raxen.utils.Utils.noPerms;
import static me.unurled.raxen.utils.Utils.setNullInArgs;
import static me.unurled.raxen.utils.Utils.validateArgs;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -54,7 +58,8 @@ public class SpawnEntity implements TabExecutor {
); );
log( log(
colorTextComp( colorTextComp(
"<red>Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + "<red>Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength "
+
"helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)</red>" "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)</red>"
) )
); );
@ -69,7 +74,7 @@ public class SpawnEntity implements TabExecutor {
Double.parseDouble(args[4]) Double.parseDouble(args[4])
); );
Entity e = loc.getWorld().spawnEntity(loc, types, false); Entity e = loc.getWorld().spawnEntity(loc, types, false);
setNameSpacedKeys( /* setNameSpacedKeys(
e, e,
getStringFromArg(args), getStringFromArg(args),
Integer.parseInt(args[6]), Integer.parseInt(args[6]),
@ -81,7 +86,7 @@ public class SpawnEntity implements TabExecutor {
0, 0,
Integer.parseInt(args[10]), Integer.parseInt(args[10]),
0 0
); ); */
e.customName(colorTextComp(getStringFromArg(args))); e.customName(colorTextComp(getStringFromArg(args)));
e.setCustomNameVisible(true); e.setCustomNameVisible(true);
if (e instanceof LivingEntity livingEntity) { if (e instanceof LivingEntity livingEntity) {
@ -107,7 +112,8 @@ public class SpawnEntity implements TabExecutor {
throw new RuntimeException(e); throw new RuntimeException(e);
} catch (IOException e) { } catch (IOException e) {
error( error(
"Could not deserialize item from the command EntitySpawn (command launched by " + "Could not deserialize item from the command EntitySpawn (command launched by "
+
sender.getName() + sender.getName() +
")" ")"
); );
@ -133,7 +139,8 @@ public class SpawnEntity implements TabExecutor {
); );
log( log(
colorTextComp( colorTextComp(
"<red>Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + "<red>Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength "
+
"helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)</red>" "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)</red>"
) )
); );
@ -148,7 +155,7 @@ public class SpawnEntity implements TabExecutor {
Double.parseDouble(args[4]) Double.parseDouble(args[4])
); );
Entity e = loc.getWorld().spawnEntity(loc, types, false); Entity e = loc.getWorld().spawnEntity(loc, types, false);
setNameSpacedKeys( /* setNameSpacedKeys(
e, e,
getStringFromArg(args), getStringFromArg(args),
Integer.parseInt(args[6]), Integer.parseInt(args[6]),
@ -160,7 +167,7 @@ public class SpawnEntity implements TabExecutor {
0, 0,
Integer.parseInt(args[10]), Integer.parseInt(args[10]),
0 0
); ); */
e.customName(colorTextComp(getStringFromArg(args))); e.customName(colorTextComp(getStringFromArg(args)));
e.setCustomNameVisible(true); e.setCustomNameVisible(true);
if (e instanceof LivingEntity livingEntity) { if (e instanceof LivingEntity livingEntity) {

View file

@ -0,0 +1,149 @@
package me.unurled.raxen.commands.admin;
import static me.unurled.raxen.utils.Utils.colorTextComp;
import static me.unurled.raxen.utils.Utils.msgPlayer;
import static me.unurled.raxen.utils.Utils.noPerms;
import java.util.ArrayList;
import java.util.List;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.tutorial.Tutorial;
import me.unurled.raxen.manager.server.TutorialManager;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class TutorialManagerCommand implements TabExecutor {
Raxen main;
List<String> complete = new ArrayList<>();
public TutorialManagerCommand(Raxen main) {
this.main = main;
}
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) {
if (!sender.hasPermission("raxen.tutorial.cmd")) {
sender.sendMessage(noPerms());
return true;
}
if (args.length == 0) {
// help
return true;
} else {
TutorialManager tutorialManager = main.getManager().getTutorialManager();
if (args.length == 1) {
if (args[0].equalsIgnoreCase("start")) {
// start tutorial for sender (if sender is a player)
if (sender instanceof Player player) {
Location loc = tutorialManager
.generateTutorial(player);
tutorialManager.getTutorial(player.getUniqueId())
.startTutorial(player, loc);
return true;
}
} else if (sender instanceof Player player) {
if (args[0].equalsIgnoreCase("stop")) {
// stop tutorial for sender
tutorialManager.getTutorial(player.getUniqueId())
.stopTutorial();
tutorialManager.removeTutorial(player.getUniqueId());
return true;
} else if (args[0].equalsIgnoreCase("next")) {
// next step for sender
tutorialManager.getTutorial(player.getUniqueId())
.nextStep();
return true;
} else if (args[0].equalsIgnoreCase("prev")) {
// prev step for sender
tutorialManager.getTutorial(player.getUniqueId())
.previousStep();
return true;
} else if (args[0].equalsIgnoreCase("status")) {
// status of tutorial for sender
Tutorial tutorial = tutorialManager.getTutorial(player.getUniqueId());
msgPlayer(player, colorTextComp(
"<gray>Tutorial status for player " + player.getName() + ": <reset>"
+ tutorial.getStep()));
return true;
}
}
} else if (args.length == 2) {
Player player = Bukkit.getPlayer(args[1]);
if (player != null) {
if (player.isOnline()) {
if (args[0].equalsIgnoreCase("start")) {
// start tutorial for player
Location loc = tutorialManager
.generateTutorial(player);
tutorialManager.getTutorial(player.getUniqueId())
.startTutorial(player, loc);
} else if (args[0].equalsIgnoreCase("stop")) {
// stop tutorial for sender
tutorialManager.getTutorial(player.getUniqueId())
.stopTutorial();
tutorialManager.removeTutorial(player.getUniqueId());
return true;
} else if (args[0].equalsIgnoreCase("next")) {
// next step for sender
tutorialManager.getTutorial(player.getUniqueId())
.nextStep();
return true;
} else if (args[0].equalsIgnoreCase("prev")) {
// prev step for sender
tutorialManager.getTutorial(player.getUniqueId())
.previousStep();
return true;
} else if (args[0].equalsIgnoreCase("status")) {
// status of tutorial for sender
Tutorial tutorial = tutorialManager.getTutorial(player.getUniqueId());
msgPlayer(player, colorTextComp(
"<gray>Tutorial status for player " + player.getName() + ": <reset>"
+ tutorial.getStep()));
return true;
}
return true;
}
}
}
}
return false;
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender,
@NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (complete.isEmpty()) {
complete.add("start");
complete.add("stop");
complete.add("next");
complete.add("prev");
complete.add("status");
}
List<String> result = new ArrayList<>();
if (args.length == 1) {
for (String s : complete) {
if (s.toLowerCase().startsWith(args[0].toLowerCase())) {
result.add(s);
}
}
return result;
} else if (args.length == 2) {
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.getName().toLowerCase().startsWith(args[1].toLowerCase())) {
result.add(p.getName());
}
}
return result;
}
return null;
}
}

View file

@ -0,0 +1,224 @@
package me.unurled.raxen.commands.player;
import java.util.ArrayList;
import java.util.List;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.player.RaxenPlayer;
import me.unurled.raxen.utils.Utils;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class PartyCommand implements TabExecutor {
Raxen main;
List<String> complete = new ArrayList<>();
public PartyCommand(Raxen main) {
this.main = main;
}
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command,
@NotNull String label, @NotNull String[] args) {
if (!(sender instanceof Player)) {
Utils.errorConsoleSender(sender);
return true;
}
Player player = (Player) sender;
if (player.getWorld().getName().equalsIgnoreCase("tutorial")) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>Sorry, you can't use this command in the tutorial!"));
player.sendMessage(Utils.colorComp(
"<grey>> <green>Please finish the tutorial first. Feel free to ask for help!"));
return true;
}
RaxenPlayer rx = main.getManager().getPlayerManager()
.getRaxenPlayer(player);
if (args.length == 0) {
player.sendMessage(
Utils.colorComp("<reset><yellow>/party help to view all infos on party"));
return true;
}
if (args[0].equalsIgnoreCase("help")) {
player.sendMessage(
Utils.colorComp("<reset><yellow>/party help to view all infos on party"));
player.sendMessage(Utils.colorComp("<reset><yellow>/party create to create a party"));
player.sendMessage(Utils.colorComp(
"<reset><yellow>/party invite <player> to invite a player to your party"));
player.sendMessage(Utils.colorComp("<reset><yellow>/party leave to leave your party"));
player.sendMessage(Utils.colorComp(
"<reset><yellow>/party kick <player> to kick a player from your party"));
player.sendMessage(
Utils.colorComp("<reset><yellow>/party disband to disband your party"));
player.sendMessage(
Utils.colorComp("<reset><yellow>/party accept to accept a party invite"));
player.sendMessage(
Utils.colorComp("<reset><yellow>/party decline to deny a party invite"));
player.sendMessage(
Utils.colorComp("<reset><yellow>/party list to list all members of your party"));
player.sendMessage(
Utils.colorComp("<reset><yellow>\\ before every message to send it to your party"));
return true;
} else if (args[0].equalsIgnoreCase("create")) {
main.getManager().getPartyManager().createParty(player, rx);
return true;
} else if (args[0].equalsIgnoreCase("invite")) {
if (rx.getParty() != null) {
if (args.length != 2) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>Usage: /party invite <player>"));
return true;
} else {
String name = args[1];
Player target = main.getServer().getPlayer(name);
RaxenPlayer rx2 = main.getManager().getPlayerManager()
.getRaxenPlayer(target);
if (rx2 == null || target == null || !target.isOnline()) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>Player not found!"));
return true;
}
if (rx.getParty().isFull()) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>Your party is full!"));
return true;
} else {
rx.getParty().sendInvite(target, rx2, player);
}
}
} else {
player.sendMessage(Utils.colorComp(
"<grey>> <green>You are not in a party!"));
return true;
}
} else if (args[0].equalsIgnoreCase("accept")) {
if (rx.getInvitedParty() == null) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>You have no pending party invites!"));
return true;
} else {
rx.getInvitedParty().addPlayer(player);
rx.setParty(rx.getInvitedParty());
rx.setInvitedParty(null);
return true;
}
} else if (args[0].equalsIgnoreCase("decline")) {
if (rx.getInvitedParty() != null) {
rx.getInvitedParty().sendMessage(Utils.colorComp(
"<grey>> <green>" + player.getName() + " has declined the party invite!"));
}
rx.setInvitedParty(null);
player.sendMessage(Utils.colorComp(
"<grey>> <green>You have declined the party invite!"));
} else if (args[0].equalsIgnoreCase("leave")) {
if (rx.getParty() == null) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>You are not in a party!"));
return true;
} else {
rx.getParty().leavePlayer(player.getUniqueId(), player.getName());
rx.setParty(null);
return true;
}
} else if (args[0].equalsIgnoreCase("kick")) {
if (rx.getParty() == null) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>You are not in a party!"));
return true;
} else {
if (!rx.getParty().isLeader(player)) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>You are not the party leader!"));
return true;
} else {
if (args.length != 2) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>Usage: /party kick <player>"));
return true;
} else {
String name = args[1];
Player target = main.getServer().getPlayer(name);
RaxenPlayer rx2 = main.getManager().getPlayerManager()
.getRaxenPlayer(target);
if (rx2 == null || target == null || !target.isOnline()) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>Player not found!"));
return true;
}
if (!rx2.getParty().equals(rx.getParty())) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>This player is not in your party!"));
return true;
}
if (target.equals(player) || rx.equals(rx2)) {
player.sendMessage(Utils.colorComp(
"<grey>> <green>You can't kick yourself!"));
return true;
}
target.playSound(target.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP,
1, 1);
rx.getParty().leavePlayer(target.getUniqueId(), target.getName());
return true;
}
}
}
} else {
if (rx.getParty() != null) {
StringBuilder sb = new StringBuilder();
for (String s : args) {
sb.append(s).append(" ");
}
String message = sb.toString().trim();
rx.getParty().sendMessage(player, Utils.colorComp(
"<reset>" + message));
} else {
player.sendMessage(Utils.colorComp(
"<grey>> <green>Not valid command!"));
player.sendMessage(Utils.colorComp(
"<grey>> <green>/party help to view all infos on party"));
return true;
}
}
return true;
}
@Override
public @Nullable List<String> onTabComplete(@NotNull CommandSender sender,
@NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (complete.isEmpty()) {
complete.add("create");
complete.add("invite");
complete.add("accept");
complete.add("decline");
complete.add("leave");
complete.add("kick");
complete.add("help");
}
List<String> result = new ArrayList<>();
if (args.length == 1) {
for (String s : complete) {
if (s.toLowerCase().startsWith(args[0].toLowerCase())) {
result.add(s);
}
}
return result;
} else if (args.length == 2) {
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.getName().toLowerCase().startsWith(args[1].toLowerCase())) {
result.add(p.getName());
}
}
return result;
}
return null;
}
}

View file

@ -61,19 +61,30 @@ public class SkillsCommand implements TabExecutor {
break; break;
case 3: case 3:
PlayerManager pm = PlayerManager pm =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() (
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen")
).getManager()
.getPlayerManager(); .getPlayerManager();
for (String s : pm.getAttribute().keySet()) { for (String s : pm.getAttribute().keySet()) {
if (s.equalsIgnoreCase(args[0])) switch (args[1]) { if (s.equalsIgnoreCase(args[0])) switch (args[1]) {
case "add": case "add":
pm.getAttribute().get(s).add(player, Integer.parseInt(args[2])); pm
.getAttribute()
.get(s)
.add(player, Integer.parseInt(args[2]));
break;
case "remove": case "remove":
pm pm
.getAttribute() .getAttribute()
.get(s) .get(s)
.remove(player, Integer.parseInt(args[2])); .remove(player, Integer.parseInt(args[2]));
break;
case "set": case "set":
pm.getAttribute().get(s).set(player, Integer.parseInt(args[2])); pm
.getAttribute()
.get(s)
.set(player, Integer.parseInt(args[2]));
break;
} }
} }
PlayerUtils.updateSkills(main, player); PlayerUtils.updateSkills(main, player);

View file

@ -1,6 +1,8 @@
package me.unurled.raxen.commands.player; package me.unurled.raxen.commands.player;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorString;
import static me.unurled.raxen.utils.Utils.error;
import static me.unurled.raxen.utils.Utils.msgPlayer;
import java.util.List; import java.util.List;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
@ -48,7 +50,11 @@ public class StorageCommand implements TabExecutor {
.getEc(); .getEc();
} else { } else {
inv = inv =
playerManager.getRaxenPlayer(player).getStorage().getEc().getEc(); playerManager
.getRaxenPlayer(player)
.getStorage()
.getEc()
.getEc();
} }
player.openInventory(inv); player.openInventory(inv);
break; break;
@ -57,11 +63,18 @@ public class StorageCommand implements TabExecutor {
if (p == null) { if (p == null) {
msgPlayer( msgPlayer(
player, player,
colorString("<red>You can't open the Storage of an unknown Player.") colorString(
"<red>You can't open the Storage of an unknown Player."
)
); );
return true; return true;
} }
inv = playerManager.getRaxenPlayer(player).getStorage().getEc().getEc(); inv =
playerManager
.getRaxenPlayer(player)
.getStorage()
.getEc()
.getEc();
player.openInventory(inv); player.openInventory(inv);
break; break;
} }

View file

@ -0,0 +1,55 @@
package me.unurled.raxen.components.clientbuild;
import java.time.Instant;
import java.util.ArrayList;
import java.util.UUID;
import org.bukkit.Location;
import org.bukkit.block.Block;
public class Builds {
private Instant start;
private Instant end;
private Location startLocation;
private UUID owner;
private ArrayList<Block> blocks = new ArrayList<>();
public Builds(Location startLocation, UUID owner) {
start = Instant.now();
this.startLocation = startLocation;
this.owner = owner;
}
public Instant getEnd() {
return end;
}
public void setEnd(Instant end) {
this.end = end;
}
public Location getStartLocation() {
return startLocation;
}
public UUID getOwner() {
return owner;
}
public ArrayList<Block> getBlocks() {
return blocks;
}
public void setBlocks(ArrayList<Block> blocks) {
this.blocks = blocks;
}
public void addBlock(Block block) {
blocks.add(block);
}
public void removeBlock(Block block) {
blocks.remove(block);
}
}

View file

@ -0,0 +1,22 @@
package me.unurled.raxen.components.clientbuild;
import java.util.ArrayList;
import org.bukkit.entity.Player;
public class PlayerList {
private final ArrayList<Player> players = new ArrayList<>();
public void addPlayer(Player player) {
players.add(player);
}
public void removePlayer(Player player) {
players.remove(player);
}
public ArrayList<Player> getPlayers() {
return players;
}
}

View file

@ -12,5 +12,5 @@ public enum Rank {
SSS, SSS,
WORLD, WORLD,
UNBEATABLE, UNBEATABLE,
NOT_DEFINED, NOT_DEFINED
} }

View file

@ -16,5 +16,5 @@ public enum Types {
CAVES, CAVES,
LABYRINTH, LABYRINTH,
UNDERGROUND_LABYRINTH, UNDERGROUND_LABYRINTH,
FOREST_LABYRINTH, FOREST_LABYRINTH
} }

View file

@ -7,7 +7,12 @@ import me.unurled.raxen.components.dungeons.types.MonsterType;
public class ForestDungeon extends Dungeon { public class ForestDungeon extends Dungeon {
public ForestDungeon(String name, Rank rank, Types types, MonsterType mType) { public ForestDungeon(
String name,
Rank rank,
Types types,
MonsterType mType
) {
super(name, rank, types, mType); super(name, rank, types, mType);
} }

View file

@ -0,0 +1,5 @@
package me.unurled.raxen.components.effect;
public class EffectBuilder {
}

View file

@ -1,6 +1,7 @@
package me.unurled.raxen.components.entity.Attributes; package me.unurled.raxen.components.entity.Attributes;
import static me.unurled.raxen.utils.Utils.debug; import static me.unurled.raxen.utils.Utils.debug;
import static me.unurled.raxen.utils.Utils.log;
import de.tr7zw.nbtapi.NBTItem; import de.tr7zw.nbtapi.NBTItem;
import org.bukkit.Material; import org.bukkit.Material;
@ -103,7 +104,8 @@ public class Attribute {
attribute = attribute + get(item); attribute = attribute + get(item);
} }
if ( if (
equi.getHelmet().getType() != Material.AIR && equi.getHelmet() != null equi.getHelmet().getType() != Material.AIR &&
equi.getHelmet() != null
) { ) {
ItemStack item = equi.getHelmet(); ItemStack item = equi.getHelmet();
attribute = attribute + get(item); attribute = attribute + get(item);
@ -130,7 +132,8 @@ public class Attribute {
attribute = attribute + get(item); attribute = attribute + get(item);
} }
if ( if (
equi.getBoots().getType() != Material.AIR && equi.getBoots() != null equi.getBoots().getType() != Material.AIR &&
equi.getBoots() != null
) { ) {
ItemStack item = equi.getBoots(); ItemStack item = equi.getBoots();
attribute = attribute + get(item); attribute = attribute + get(item);
@ -157,6 +160,7 @@ public class Attribute {
* @param amount the amount you want to set * @param amount the amount you want to set
*/ */
public void add(@NotNull Entity entity, @NotNull Integer amount) { public void add(@NotNull Entity entity, @NotNull Integer amount) {
log(get(entity) + " " + amount);
set(entity, get(entity) + amount); set(entity, get(entity) + amount);
} }

View file

@ -0,0 +1,10 @@
package me.unurled.raxen.components.entity;
public enum DamageType {
NORMAL,
NORMAL_SPELL,
ENVIRONMENTAL_LAVA,
ENVIRONMENTAL_DROWNING,
ENVIRONMENTAL_FALL,
ENVIRONMENTAL_INSTANT;
}

View file

@ -12,15 +12,15 @@ import org.jetbrains.annotations.NotNull;
public class EntityUtils { public class EntityUtils {
private static Raxen main; private Raxen main;
private static EntityNamespacedKey namespacedKey; private EntityNamespacedKey namespacedKey;
public EntityUtils(Raxen main) { public EntityUtils(Raxen main) {
this.main = main; this.main = main;
namespacedKey = new EntityNamespacedKey(main); namespacedKey = new EntityNamespacedKey(main);
} }
public static void setNameSpacedKeys( public void setNameSpacedKeys(
org.bukkit.entity.@NotNull Entity e, org.bukkit.entity.@NotNull Entity e,
String name, String name,
Integer level, Integer level,
@ -35,9 +35,17 @@ public class EntityUtils {
) { ) {
PersistentDataContainer data = e.getPersistentDataContainer(); PersistentDataContainer data = e.getPersistentDataContainer();
data.set(namespacedKey.health, PersistentDataType.INTEGER, health); data.set(namespacedKey.health, PersistentDataType.INTEGER, health);
data.set(namespacedKey.itemHealth, PersistentDataType.INTEGER, itemHealth); data.set(
namespacedKey.itemHealth,
PersistentDataType.INTEGER,
itemHealth
);
data.set(namespacedKey.speed, PersistentDataType.INTEGER, speed); data.set(namespacedKey.speed, PersistentDataType.INTEGER, speed);
data.set(namespacedKey.itemSpeed, PersistentDataType.INTEGER, itemSpeed); data.set(
namespacedKey.itemSpeed,
PersistentDataType.INTEGER,
itemSpeed
);
data.set(namespacedKey.defense, PersistentDataType.INTEGER, defense); data.set(namespacedKey.defense, PersistentDataType.INTEGER, defense);
data.set( data.set(
namespacedKey.itemDefense, namespacedKey.itemDefense,
@ -45,12 +53,16 @@ public class EntityUtils {
itemDefense itemDefense
); );
data.set(namespacedKey.strength, PersistentDataType.INTEGER, strength); data.set(namespacedKey.strength, PersistentDataType.INTEGER, strength);
data.set(namespacedKey.itemStrength, PersistentDataType.INTEGER, itemDmg); data.set(
namespacedKey.itemStrength,
PersistentDataType.INTEGER,
itemDmg
);
data.set(namespacedKey.name, PersistentDataType.STRING, name); data.set(namespacedKey.name, PersistentDataType.STRING, name);
data.set(namespacedKey.level, PersistentDataType.INTEGER, level); data.set(namespacedKey.level, PersistentDataType.INTEGER, level);
} }
public static void updateSkills(@NotNull LivingEntity livingEntity) { public void updateSkills(@NotNull LivingEntity livingEntity) {
PlayerManager pm = PlayerManager pm =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
.getPlayerManager(); .getPlayerManager();
@ -76,8 +88,12 @@ public class EntityUtils {
null null
) { ) {
livingEntity livingEntity
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED) .getAttribute(
.setBaseValue((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED
)
.setBaseValue(
(float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)
);
} }
if ( if (
livingEntity.getAttribute( livingEntity.getAttribute(
@ -86,8 +102,12 @@ public class EntityUtils {
null null
) { ) {
livingEntity livingEntity
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED) .getAttribute(
.setBaseValue((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED
)
.setBaseValue(
(float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)
);
} }
livingEntity livingEntity
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH) .getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH)

View file

@ -0,0 +1,352 @@
package me.unurled.raxen.components.entity.other;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.UUID;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.Attributes.Attribute;
import me.unurled.raxen.components.entity.Attributes.Health;
import me.unurled.raxen.components.entity.DamageType;
import me.unurled.raxen.components.entity.player.RaxenPlayer;
import me.unurled.raxen.manager.entity.EntityManager;
import me.unurled.raxen.utils.EntityUtils;
import me.unurled.raxen.utils.Tags;
import me.unurled.raxen.utils.Utils;
import net.kyori.adventure.text.Component;
import net.minecraft.world.entity.Entity;
import org.bukkit.Bukkit;
import org.bukkit.EntityEffect;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public class MobData {
public Raxen main;
private static int MOB_ID = 0;
public int id = MOB_ID++;
public boolean dead = false;
public LivingEntity entity;
public LivingEntity mount = null;
String nameWithoutLevel;
String fullName;
public MobType mobType;
public Attribute attributes;
public HashMap<UUID, Long> lastAttackedByTimes;
public HashMap<UUID, Long> damageDealt;
public long lastDamaged = 0;
public long lastKnockback = 0;
public boolean despawned = false;
public long invuln = 0; // cannot attack or damage
private Runnable lastScheduledRevertHP = null;
// TODO: public ArrayList<MobAttributes> attributes;
// TODO: mob ai
// TODO: mob spawn
public MobData() {
lastAttackedByTimes = new HashMap<>();
damageDealt = new HashMap<>();
}
public void mount(Class<? extends Entity> mountClass) {
if (entity == null || dead) {
return;
}
mount = EntityUtils.createLivingEntity(mountClass, entity.getLocation());
mount.addPassenger(entity);
}
public void die() {
die(true);
}
public void die(boolean drop) {
if (dead) {
return;
}
dead = true;
Location deathLoc = entity.getLocation();
entity.customName(Component.text(fullName));
Tags.makeFloatingText("<gold>+" + mobType.xp + " XP", deathLoc, 1.3, 1.0, 1.5, 1);
if (mount != null) {
try {
mount.eject();
entity.leaveVehicle();
} catch (Exception e) {
e.printStackTrace();
}
mount.damage(1000000000);
}
entity.damage(1000000000);
new BukkitRunnable() {
@Override
public void run() {
despawn();
}
}.runTaskLater(main, 20);
int totalLevel = 0;
int pdCount = 0;
ArrayList<RaxenPlayer> raxenPlayers = new ArrayList<>();
double damageSum = 0;
RaxenPlayer rx = null;
for (Entry<UUID, Long> entry : damageDealt.entrySet()) {
if ((rx = main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey()))
!= null) {
raxenPlayers.add(rx);
damageSum += entry.getValue();
totalLevel += rx.getLevel();
pdCount++;
}
}
if (pdCount < 1) {
totalLevel = 1;
pdCount = 1;
}
double avgLv = totalLevel / (double) pdCount;
for (RaxenPlayer tx : raxenPlayers) {
if (damageDealt.containsKey(tx.getPlayer().getUniqueId())) {
tx.incrementMobCounter(mobType.identifier);
double precentage =
damageDealt.get(tx.getPlayer().getUniqueId()) / (double) damageSum;
if (precentage >= 0.1) {
tx.addMobKills();
}
long amt = (long) Math.ceil(mobType.xp * precentage);
if (!(mobType.level >= 80 && tx.getLevel() >= 80) && Math.abs(
tx.getLevel() - mobType.level) >= 10) {
double penalty = 0.7;
penalty -= (Math.abs(tx.getLevel() - mobType.level) - 10) * 0.06;
if (penalty < 0.1) {
penalty = 0.1;
}
tx.gainXp((long) Math.ceil(amt * penalty), true);
} else {
tx.gainXp(amt);
}
}
}
long mostDealt = 0;
UUID priority = null;
RaxenPlayer topDamage = null;
for (Entry<UUID, Long> entry : damageDealt.entrySet()) {
Player p = Bukkit.getPlayer(entry.getKey());
if (p == null) {
continue;
}
if (me.unurled.raxen.utils.Math.flatDistance(p.getLocation(), deathLoc) < 50) {
if (entry.getValue() >= mostDealt) {
if (entry.getValue() == mostDealt && Math.random() > 0.5) {
continue;
}
if (main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey())
== null) {
continue;
}
mostDealt = entry.getValue();
priority = entry.getKey();
topDamage = main.getManager().getPlayerManager().getRaxenPlayer(priority);
}
}
}
EntityManager manager = main.getManager().getEntityManager();
if (drop || manager.getHealth().get(entity) < manager.getMaxMana().get(entity)) {
// TODO: mobdrop
}
// TODO: respawn
}
public void despawn() {
if (despawned) {
return;
}
// TODO: respawn
despawned = true;
dead = true;
EntityManager manager = main.getManager().getEntityManager();
if (entity == null) {
manager.getSpawnedMob().remove(entity.getUniqueId());
manager.getSpawnedMobsOnlyMain().remove(entity.getUniqueId());
entity.remove();
}
entity = null;
if (mount != null) {
manager.getSpawnedMob().remove(mount.getUniqueId());
manager.getSpawnedMobsOnlyMain().remove(mount.getUniqueId());
mount.remove();
}
mount = null;
// TODO: ai
if (damageDealt != null) {
damageDealt = null;
}
attributes = null;
lastAttackedByTimes = null;
}
public boolean attack(RaxenPlayer rx) {
return attack(rx, 0.5, -1, false);
}
public boolean attack(RaxenPlayer pd, int rpgDamage) {
return attack(pd, 0.5, rpgDamage, false);
}
public boolean attack(RaxenPlayer pd, int rpgDamage, boolean projectile) {
return attack(pd, 0.5, rpgDamage, projectile);
}
public int getDamage() {
return main.getManager().getEntityManager().getStrength()
.get(entity); // TODO: get damage properly
}
public boolean attack(RaxenPlayer pd, double knockback, int rpgDamage, boolean projectile) {
if (System.currentTimeMillis() < invuln) {
return false;
}
boolean success = false;
success = pd.damage(rpgDamage > -1 ? rpgDamage : getDamage(), entity,
DamageType.NORMAL);
if (success && !projectile) {
pd.knockback(entity, knockback);
}
return success;
}
public void knockback(LivingEntity attacker, double knockBackMultiplier) {
return;
}
public boolean damage(int damageAmount, org.bukkit.entity.Entity damager,
DamageType damageType) {
return damage(damageAmount, damager, damageType, false);
}
public boolean damage(int damageAmount, org.bukkit.entity.Entity damager, DamageType damageType,
boolean crit) {
if (System.currentTimeMillis() < invuln) {
return false;
}
if (dead) {
return false;
}
if (damager != null && damager instanceof Player player) {
if (!player.isOnline()
|| main.getManager().getPlayerManager().getRaxenPlayer(player) == null) {
return false;
}
}
Health health = main.getManager().getEntityManager().getHealth();
if (damageAmount > health.get(entity)) {
damageAmount = health.get(entity);
}
if (damager != null && damager instanceof Player player) {
if (damageDealt.containsKey(damager.getUniqueId())) {
damageDealt.put(damager.getUniqueId(),
damageDealt.get(damager.getUniqueId()) + damageAmount);
} else {
damageDealt.put(damager.getUniqueId(), (long) damageAmount);
}
// TODO: AI stuff
}
if (damager != null) {
lastAttackedByTimes.put(damager.getUniqueId(), System.currentTimeMillis());
}
if (damageAmount < 1) {
damageAmount = 1;
}
health.set(entity,
health.get(entity) - damageAmount);
if (health.get(entity) <= 0) {
health.set(entity, 0);
}
if (damager != null && damager instanceof Player player) {
RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(player);
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f);
}
if (health.get(entity) < 1) {
die();
} else {
entity.playEffect(EntityEffect.HURT);
if (mount != null) {
mount.playEffect(EntityEffect.HURT);
}
displayCurrentHP();
}
lastDamaged = System.currentTimeMillis();
return true;
}
public void displayCurrentHP() {
entity.customName(getHPDisplay());
Bukkit.getScheduler().scheduleSyncDelayedTask(main, lastScheduledRevertHP = new Runnable() {
public void run() {
if (!dead && entity != null && entity.isValid() && !entity.isDead()) {
if (lastScheduledRevertHP == this) {
entity.customName(Utils.colorComp(fullName));
}
}
}
}, 60L);
}
public Component getHPDisplay() {
EntityManager manager = main.getManager().getEntityManager();
int health = manager.getHealth().get(entity);
int maxHealth = manager.getMaxHealth().get(entity);
double percent = ((double) health) / ((double) maxHealth);
int green = (int) Math.floor(percent / 0.05);
if (green > 20) {
green = 20;
} else if (green < 1) {
green = 1;
}
StringBuilder sb = new StringBuilder();
sb.append("<gray>");
sb.append('[');
int firstHalf = green - 10;
if (firstHalf < 0) {
firstHalf = 0;
}
sb.append("<dark_red>");
for (int i = 0; i < 10 - firstHalf; i++) {
sb.append('|');
}
sb.append("<green>");
for (int i = 0; i < firstHalf; i++) {
sb.append('|');
}
sb.append("<gold>"); // TODO: tier color
sb.append(' ');
sb.append(health);
sb.append(' ');
int secondHalf = green - firstHalf;
sb.append("<dark_red>");
for (int i = 0; i < 10 - secondHalf; i++) {
sb.append('|');
}
sb.append("<green>");
for (int i = 0; i < secondHalf; i++) {
sb.append('|');
}
sb.append("<gray>");
sb.append(']');
return Utils.colorComp(sb.toString());
}
}

View file

@ -0,0 +1,35 @@
package me.unurled.raxen.components.entity.other;
import java.util.ArrayList;
import net.minecraft.world.entity.Entity;
import org.bukkit.inventory.ItemStack;
public class MobType {
public String identifier;
public String name;
public Class<? extends Entity> entityClass;
public int level;
public ArrayList<String> prefixes;
public ArrayList<String> suffix;
public long xp;
public ArrayList<ItemStack> equips;
// TODO: public ArrayList<MobAttributes> attributes;
public boolean hasSkull = false;
public ItemStack offHand;
public int getTier() {
if (level >= 80) {
return 5;
} else if (level >= 60) {
return 4;
} else if (level >= 40) {
return 3;
} else if (level >= 20) {
return 2;
} else {
return 1;
}
}
}

View file

@ -1,13 +1,23 @@
package me.unurled.raxen.components.entity.other; package me.unurled.raxen.components.entity.other;
import static me.unurled.raxen.utils.Utils.colorString;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.UUID;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.DamageType;
import me.unurled.raxen.components.entity.player.RaxenPlayer;
import me.unurled.raxen.utils.Tags;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.Sound;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.Player;
import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
@ -18,6 +28,11 @@ public abstract class RaxenEntity {
@Getter @Getter
private final String name; private final String name;
@Getter
private final String ID;
public Component fullName;
@Getter @Getter
private Integer level; private Integer level;
@ -33,31 +48,53 @@ public abstract class RaxenEntity {
@Setter @Setter
Boolean isAlive = false; Boolean isAlive = false;
boolean despawned = false;
me.unurled.raxen.components.entity.other.custom.Entity entity;
public HashMap<UUID, Long> lastAttackedByTimes;
public java.util.HashMap<UUID, Long> damageDealt;
@Getter
@Setter
Boolean isHostile;
public RaxenEntity( public RaxenEntity(
Raxen main, Raxen main,
String name, String name,
String id,
Integer level, Integer level,
Double health, Double health,
Double strength Double strength
) { ) {
this.main = main; this.main = main;
this.name = name; this.name = name;
ID = id;
this.level = level; this.level = level;
this.health = health; this.health = health;
this.strength = strength; this.strength = strength;
isHostile = true;
} }
public Entity createEntity(EntityType types, String name, Location location) { /*public Entity createEntity(
Entity e = location.getWorld().spawnEntity(location, types); me.unurled.raxen.components.entity.other.custom.Entity ent,
String name,
Location location
) {
me.unurled.raxen.components.entity.other.custom.Entity e = (me.unurled.raxen.components.entity.other.custom.Entity) location.getWorld()
// .spawnEntity(location, ent);
e.setCustomNameVisible(true); e.setCustomNameVisible(true);
e.customName(Component.text(name)); e.customName(Component.text(name));
entity = e;
return e; return e;
} }*/
public void register(Entity e) { public void register(Entity e) {
PersistentDataContainer data = e.getPersistentDataContainer(); PersistentDataContainer data = e.getPersistentDataContainer();
data.set(new NamespacedKey(main, "NAME"), PersistentDataType.STRING, name); data.set(
new NamespacedKey(main, "NAME"),
PersistentDataType.STRING,
name
);
} }
public Double getMaxHealth(Entity e) { public Double getMaxHealth(Entity e) {
@ -67,4 +104,173 @@ public abstract class RaxenEntity {
} }
public abstract Entity createEntity(Location location); public abstract Entity createEntity(Location location);
public void die() {
die(true);
}
public void die(boolean drop) {
if (!isAlive) {
return;
}
isAlive = false;
// set mob ai false
Location deathLoc = entity.getLocation();
entity.customName(fullName);
Tags.makeFloatingText("<gold>+ EXP", deathLoc, 1.3, 1.0, 1.5, 1);
// TODO: damge entity method damage
// TODO: desawn
// TODO: xp
// xp
int totalLevel = 0;
int pdCount = 0;
ArrayList<RaxenPlayer> players = new ArrayList<>();
double damageSum = 0;
RaxenPlayer player = null;
for (Entry<UUID, Long> entry : damageDealt.entrySet()) {
if ((player = main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey()))
!= null) {
damageSum += entry.getValue();
totalLevel += player.getLevel();
pdCount++;
players.add(main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey()));
}
}
if (pdCount < 1) {
totalLevel = 1;
pdCount = 1;
}
double avgLv = totalLevel / (double) pdCount;
for (RaxenPlayer pd : players) {
if (damageDealt.containsKey(pd.getPlayer().getUniqueId())) {
pd.incrementMobCounter(ID);
double percentage =
damageDealt.get(pd.getPlayer().getUniqueId()) / (double) damageSum;
if (percentage >= 0.10) {
pd.addMobKills();
// IDEA: is boss add to counter
}
long amt = (long) Math.ceil(entity.getXp() * percentage);
if (!(level >= 80 && pd.getLevel() >= 80)
&& Math.abs(pd.getLevel() - level) >= 10) {
double penalty = 0.70;
penalty -= (Math.abs(pd.getLevel() - level) - 10) * 0.06;
if (penalty < 0.10) {
penalty = 0.10;
}
pd.gainXp((long) Math.ceil(amt * penalty), true);
} else {
pd.gainXp(amt);
}
}
}
}
public void despawn() {
if (despawned) {
return;
}
despawned = true;
if (entity != null) {
entity.remove();
}
entity = null;
// TODO: bosses, respawn etc
}
public boolean attack(RaxenPlayer pd) {
return attack(pd, 0.5, -1, false);
}
public boolean attack(RaxenPlayer pd, int rpgDamage) {
return attack(pd, 0.5, rpgDamage, false);
}
public boolean attack(RaxenPlayer pd, int rpgDamage, boolean projectile) {
return attack(pd, 0.5, rpgDamage, projectile);
}
public boolean attack(RaxenPlayer pd, double knockback, int rDamage, boolean projectile) {
boolean sucess = false;
sucess = pd.damage(rDamage > -1 ? rDamage : (int) entity.getDamage(), entity,
DamageType.NORMAL);
if (sucess && !projectile) {
// pd.knockback(entity, knockback);
// TODO: knockback
}
return sucess;
}
public boolean damage(int damageAmount, Entity damager, DamageType damageType) {
return damage(damageAmount, damager, damageType, false);
}
public boolean damage(int damage, Entity damager, DamageType damageType, boolean crit) {
if (!isAlive) {
return false;
}
if (damager != null && damager instanceof Player player) {
if (!player.isOnline()
|| main.getManager().getPlayerManager().getRaxenPlayer(player) == null) {
return false;
}
}
if (damage > entity.getHealth()) {
damage = entity.getHealth().intValue();
}
if (damager != null && damager instanceof Player player) {
RaxenPlayer pd = main.getManager().getPlayerManager().getRaxenPlayer(player);
if (damageDealt.containsKey(damager.getUniqueId())) {
damageDealt.put(damager.getUniqueId(),
damageDealt.get(damager.getUniqueId()) + damage);
} else {
damageDealt.put(damager.getUniqueId(), (long) damage);
}
}
if (damager != null) {
lastAttackedByTimes.put(damager.getUniqueId(), System.currentTimeMillis());
}
if (damage < 1) {
damage = 1;
}
health -= damage;
if (health < 0) {
health = 0.0;
}
if (damager != null && damager instanceof Player player) {
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f);
}
if (health <= 0) {
die();
} else {
}
return true;
}
public String getFullName() {
if (isHostile) {
return colorString(
getLevel() +
"<white>⚔️" +
getName() +
"<red>" +
health +
"<white>/<white/>" +
getMaxHealth(entity)
);
} else {
return colorString(
getLevel() +
"<white>❤️" +
getName() +
"<red>" +
health +
"<white>/<white/>" +
getMaxHealth(entity)
);
}
}
} }

View file

@ -7,7 +7,7 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
public class Entity { public abstract class Entity implements org.bukkit.entity.Entity {
private java.util.UUID uuid; private java.util.UUID uuid;
@ -39,6 +39,10 @@ public class Entity {
@Setter @Setter
private boolean isHostile; private boolean isHostile;
@Getter
@Setter
private double xp;
public Entity( public Entity(
String name, String name,
Integer level, Integer level,
@ -46,7 +50,8 @@ public class Entity {
Double strength, Double strength,
Double defense, Double defense,
Double speed, Double speed,
boolean isHostile boolean isHostile,
double xp
) { ) {
this.name = name; this.name = name;
this.level = level; this.level = level;
@ -57,10 +62,11 @@ public class Entity {
this.maxHealth = maxHealth; this.maxHealth = maxHealth;
this.isHostile = isHostile; this.isHostile = isHostile;
this.uuid = UUID.randomUUID(); this.uuid = UUID.randomUUID();
this.xp = xp;
} }
public void register(Raxen main) { public void register(Raxen main) {
main.getManager().getEntityManager().entities.put(name, this); // main.getManager().getEntityManager().entities.put(name, this);
} }
public String getName() { public String getName() {
@ -100,4 +106,9 @@ public class Entity {
return health; return health;
} }
public double getDamage() {
// TODO: calculate properly the damage
return strength;
}
} }

View file

@ -1,25 +1,674 @@
package me.unurled.raxen.components.entity.other.custom; package me.unurled.raxen.components.entity.other.custom;
import io.papermc.paper.entity.TeleportFlag;
import java.util.List;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import net.kyori.adventure.text.Component;
import org.bukkit.EntityEffect;
import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.block.BlockFace;
import org.bukkit.block.PistonMoveReaction;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Pose;
import org.bukkit.entity.SpawnCategory;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.BoundingBox;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class Humanoid extends Entity { public class Humanoid extends Entity {
private String skin; // used to get the path to the skin private String skin; // used to get the path to the skin
private UUID skinUuid; // used to get the player skin (if i do it this way... private UUID skinUuid; // used to get the player skin (if i do it this way...
public Humanoid( public Humanoid(String name, Integer level, Double maxHealth, Double strength, Double defense,
String name, Double speed, boolean isHostile, double xp) {
Integer level, super(name, level, maxHealth, strength, defense, speed, isHostile, xp);
Double maxHealth, }
Double strength,
Double defense, @Override
Double speed, public @NotNull Location getLocation() {
boolean isHostile, return null;
String skin, }
UUID skinUuid
) { @Override
super(name, level, maxHealth, strength, defense, speed, isHostile); public @Nullable Location getLocation(@Nullable Location loc) {
this.skin = skin; return null;
this.skinUuid = skinUuid; }
@Override
public void setVelocity(@NotNull Vector velocity) {
}
@Override
public @NotNull Vector getVelocity() {
return null;
}
@Override
public double getHeight() {
return 0;
}
@Override
public double getWidth() {
return 0;
}
@Override
public @NotNull BoundingBox getBoundingBox() {
return null;
}
@Override
public boolean isOnGround() {
return false;
}
@Override
public boolean isInWater() {
return false;
}
@Override
public @NotNull World getWorld() {
return null;
}
@Override
public void setRotation(float yaw, float pitch) {
}
@Override
public boolean teleport(@NotNull Location location,
@NotNull PlayerTeleportEvent.TeleportCause cause,
@NotNull TeleportFlag @NotNull ... teleportFlags) {
return false;
}
@Override
public boolean teleport(@NotNull Location location) {
return false;
}
@Override
public boolean teleport(@NotNull Location location,
@NotNull PlayerTeleportEvent.TeleportCause cause) {
return false;
}
@Override
public boolean teleport(org.bukkit.entity.@NotNull Entity destination) {
return false;
}
@Override
public boolean teleport(org.bukkit.entity.@NotNull Entity destination,
@NotNull PlayerTeleportEvent.TeleportCause cause) {
return false;
}
@Override
public @NotNull List<org.bukkit.entity.Entity> getNearbyEntities(double x, double y, double z) {
return null;
}
@Override
public int getEntityId() {
return 0;
}
@Override
public int getFireTicks() {
return 0;
}
@Override
public int getMaxFireTicks() {
return 0;
}
@Override
public void setFireTicks(int ticks) {
}
@Override
public void setVisualFire(boolean fire) {
}
@Override
public boolean isVisualFire() {
return false;
}
@Override
public int getFreezeTicks() {
return 0;
}
@Override
public int getMaxFreezeTicks() {
return 0;
}
@Override
public void setFreezeTicks(int ticks) {
}
@Override
public boolean isFrozen() {
return false;
}
@Override
public boolean isFreezeTickingLocked() {
return false;
}
@Override
public void lockFreezeTicks(boolean locked) {
}
@Override
public void remove() {
}
@Override
public boolean isDead() {
return false;
}
@Override
public boolean isValid() {
return false;
}
@Override
public void sendMessage(@NotNull String message) {
}
@Override
public void sendMessage(@NotNull String... messages) {
}
@Override
public void sendMessage(@Nullable UUID sender, @NotNull String message) {
}
@Override
public void sendMessage(@Nullable UUID sender, @NotNull String... messages) {
}
@Override
public @NotNull Server getServer() {
return null;
}
@Override
public boolean isPersistent() {
return false;
}
@Override
public void setPersistent(boolean persistent) {
}
@Override
public org.bukkit.entity.@Nullable Entity getPassenger() {
return null;
}
@Override
public boolean setPassenger(org.bukkit.entity.@NotNull Entity passenger) {
return false;
}
@Override
public @NotNull List<org.bukkit.entity.Entity> getPassengers() {
return null;
}
@Override
public boolean addPassenger(org.bukkit.entity.@NotNull Entity passenger) {
return false;
}
@Override
public boolean removePassenger(org.bukkit.entity.@NotNull Entity passenger) {
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean eject() {
return false;
}
@Override
public float getFallDistance() {
return 0;
}
@Override
public void setFallDistance(float distance) {
}
@Override
public void setLastDamageCause(@Nullable EntityDamageEvent event) {
}
@Override
public @Nullable EntityDamageEvent getLastDamageCause() {
return null;
}
@Override
public @NotNull UUID getUniqueId() {
return null;
}
@Override
public int getTicksLived() {
return 0;
}
@Override
public void setTicksLived(int value) {
}
@Override
public void playEffect(@NotNull EntityEffect type) {
}
@Override
public @NotNull EntityType getType() {
return null;
}
@Override
public @NotNull Sound getSwimSound() {
return null;
}
@Override
public @NotNull Sound getSwimSplashSound() {
return null;
}
@Override
public @NotNull Sound getSwimHighSpeedSplashSound() {
return null;
}
@Override
public boolean isInsideVehicle() {
return false;
}
@Override
public boolean leaveVehicle() {
return false;
}
@Override
public org.bukkit.entity.@Nullable Entity getVehicle() {
return null;
}
@Override
public void setCustomNameVisible(boolean flag) {
}
@Override
public boolean isCustomNameVisible() {
return false;
}
@Override
public void setVisibleByDefault(boolean visible) {
}
@Override
public boolean isVisibleByDefault() {
return false;
}
@Override
public void setGlowing(boolean flag) {
}
@Override
public boolean isGlowing() {
return false;
}
@Override
public void setInvulnerable(boolean flag) {
}
@Override
public boolean isInvulnerable() {
return false;
}
@Override
public boolean isSilent() {
return false;
}
@Override
public void setSilent(boolean flag) {
}
@Override
public boolean hasGravity() {
return false;
}
@Override
public void setGravity(boolean gravity) {
}
@Override
public int getPortalCooldown() {
return 0;
}
@Override
public void setPortalCooldown(int cooldown) {
}
@Override
public @NotNull Set<String> getScoreboardTags() {
return null;
}
@Override
public boolean addScoreboardTag(@NotNull String tag) {
return false;
}
@Override
public boolean removeScoreboardTag(@NotNull String tag) {
return false;
}
@Override
public @NotNull PistonMoveReaction getPistonMoveReaction() {
return null;
}
@Override
public @NotNull BlockFace getFacing() {
return null;
}
@Override
public @NotNull Pose getPose() {
return null;
}
@Override
public boolean isSneaking() {
return false;
}
@Override
public void setSneaking(boolean sneak) {
}
@Override
public @NotNull SpawnCategory getSpawnCategory() {
return null;
}
@Override
public @NotNull Spigot spigot() {
return null;
}
@Override
public @NotNull Component name() {
return null;
}
@Override
public @NotNull Component teamDisplayName() {
return null;
}
@Override
public @Nullable Location getOrigin() {
return null;
}
@Override
public boolean fromMobSpawner() {
return false;
}
@Override
public @NotNull CreatureSpawnEvent.SpawnReason getEntitySpawnReason() {
return null;
}
@Override
public boolean isUnderWater() {
return false;
}
@Override
public boolean isInRain() {
return false;
}
@Override
public boolean isInBubbleColumn() {
return false;
}
@Override
public boolean isInWaterOrRain() {
return false;
}
@Override
public boolean isInWaterOrBubbleColumn() {
return false;
}
@Override
public boolean isInWaterOrRainOrBubbleColumn() {
return false;
}
@Override
public boolean isInLava() {
return false;
}
@Override
public boolean isTicking() {
return false;
}
@Override
public @NotNull Set<Player> getTrackedPlayers() {
return null;
}
@Override
public boolean spawnAt(@NotNull Location location,
@NotNull CreatureSpawnEvent.SpawnReason reason) {
return false;
}
@Override
public boolean isInPowderedSnow() {
return false;
}
@Override
public boolean collidesAt(@NotNull Location location) {
return false;
}
@Override
public boolean wouldCollideUsing(@NotNull BoundingBox boundingBox) {
return false;
}
@Override
public @Nullable Component customName() {
return null;
}
@Override
public void customName(@Nullable Component customName) {
}
@Override
public @Nullable String getCustomName() {
return null;
}
@Override
public void setCustomName(@Nullable String name) {
}
@Override
public void setMetadata(@NotNull String metadataKey, @NotNull MetadataValue newMetadataValue) {
}
@Override
public @NotNull List<MetadataValue> getMetadata(@NotNull String metadataKey) {
return null;
}
@Override
public boolean hasMetadata(@NotNull String metadataKey) {
return false;
}
@Override
public void removeMetadata(@NotNull String metadataKey, @NotNull Plugin owningPlugin) {
}
@Override
public boolean isPermissionSet(@NotNull String name) {
return false;
}
@Override
public boolean isPermissionSet(@NotNull Permission perm) {
return false;
}
@Override
public boolean hasPermission(@NotNull String name) {
return false;
}
@Override
public boolean hasPermission(@NotNull Permission perm) {
return false;
}
@Override
public @NotNull PermissionAttachment addAttachment(@NotNull Plugin plugin, @NotNull String name,
boolean value) {
return null;
}
@Override
public @NotNull PermissionAttachment addAttachment(@NotNull Plugin plugin) {
return null;
}
@Override
public @Nullable PermissionAttachment addAttachment(@NotNull Plugin plugin,
@NotNull String name, boolean value, int ticks) {
return null;
}
@Override
public @Nullable PermissionAttachment addAttachment(@NotNull Plugin plugin, int ticks) {
return null;
}
@Override
public void removeAttachment(@NotNull PermissionAttachment attachment) {
}
@Override
public void recalculatePermissions() {
}
@Override
public @NotNull Set<PermissionAttachmentInfo> getEffectivePermissions() {
return null;
}
@Override
public boolean isOp() {
return false;
}
@Override
public void setOp(boolean value) {
}
@Override
public @NotNull PersistentDataContainer getPersistentDataContainer() {
return null;
} }
} }

View file

@ -5,12 +5,12 @@ import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.other.RaxenEntity; import me.unurled.raxen.components.entity.other.RaxenEntity;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
public class Elf extends RaxenEntity { public class Elf extends RaxenEntity {
@Getter @Getter
private final String name; private final String name;
private final String id = "elf";
public Elf( public Elf(
Raxen main, Raxen main,
@ -19,22 +19,23 @@ public class Elf extends RaxenEntity {
Double health, Double health,
Double strength Double strength
) { ) {
super(main, name, level, health, strength); super(main, name, "elf", level, health, strength);
this.name = name;
}
/**
* Elf Default values
*
* @param main the main instance
* @param name
*/
public Elf(Raxen main, String name) {
super(main, "Elf", "elf", 10, 120.0, 25.0);
this.name = name; this.name = name;
} }
@Override @Override
public Entity createEntity(Location location) { public Entity createEntity(Location location) {
return super.createEntity(EntityType.PLAYER, name, location); return null;
}
/**
* Elf Default values
* @param main the main instance
* @param name
*/
public Elf(Raxen main, String name) {
super(main, "Elf", 10, 120.0, 25.0);
this.name = name;
} }
} }

View file

@ -5,7 +5,6 @@ import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.other.RaxenEntity; import me.unurled.raxen.components.entity.other.RaxenEntity;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
public class Wolf extends RaxenEntity { public class Wolf extends RaxenEntity {
@ -19,17 +18,17 @@ public class Wolf extends RaxenEntity {
Double health, Double health,
Double strength Double strength
) { ) {
super(main, name, level, health, strength); super(main, name, "elf", level, health, strength);
this.name = name; this.name = name;
} }
public Wolf(Raxen main) { public Wolf(Raxen main) {
super(main, "Wolf", 5, 100.0, 20.0); super(main, "Wolf", "elf", 5, 100.0, 20.0);
this.name = "Wolf"; this.name = "Wolf";
} }
@Override @Override
public Entity createEntity(Location location) { public Entity createEntity(Location location) {
return super.createEntity(EntityType.WOLF, name, location); return null;
} }
} }

View file

@ -1,22 +1,56 @@
package me.unurled.raxen.components.entity.other.custom.hostile.low; package me.unurled.raxen.components.entity.other.custom.hostile.low;
import io.papermc.paper.entity.TeleportFlag;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.other.RaxenEntity; import me.unurled.raxen.components.entity.other.RaxenEntity;
import me.unurled.raxen.components.entity.other.custom.Entity; import me.unurled.raxen.components.entity.other.custom.Entity;
import net.kyori.adventure.text.Component;
import org.bukkit.EntityEffect;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Server;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.block.BlockFace;
import org.bukkit.block.PistonMoveReaction;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Pose;
import org.bukkit.entity.SpawnCategory;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.BoundingBox;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class Goblin extends Entity { public class Goblin extends Entity {
RaxenEntity goblin; RaxenEntity goblin;
public Goblin(Raxen main) { public Goblin(Raxen main) {
super("Goblin", 1, 100.0, 10.0, 0.0, 50.0, true); super("Goblin", 1, 100.0, 10.0, 0.0, 50.0, true, 100);
this.goblin = this.goblin =
new RaxenEntity(main, "Goblin", 1, 100.0, 10.0) { new RaxenEntity(main, "Goblin", "goblin", 1, 100.0, 10.0) {
@Override @Override
public org.bukkit.entity.Entity createEntity(Location location) { public org.bukkit.entity.Entity createEntity(
return super.createEntity(EntityType.PLAYER, "Goblin", location); Location location
) {
return null;
/* return super.createEntity(
EntityType.PLAYER,
"Goblin",
location
);*/
} }
}; };
register(main); register(main);
@ -36,4 +70,636 @@ public class Goblin extends Entity {
getMaxHealth() getMaxHealth()
); );
} }
@Override
public @NotNull Location getLocation() {
return null;
}
@Override
public @Nullable Location getLocation(@Nullable Location loc) {
return null;
}
@Override
public void setVelocity(@NotNull Vector velocity) {
}
@Override
public @NotNull Vector getVelocity() {
return null;
}
@Override
public double getHeight() {
return 0;
}
@Override
public double getWidth() {
return 0;
}
@Override
public @NotNull BoundingBox getBoundingBox() {
return null;
}
@Override
public boolean isOnGround() {
return false;
}
@Override
public boolean isInWater() {
return false;
}
@Override
public @NotNull World getWorld() {
return null;
}
@Override
public void setRotation(float yaw, float pitch) {
}
@Override
public boolean teleport(@NotNull Location location,
@NotNull PlayerTeleportEvent.TeleportCause cause,
@NotNull TeleportFlag @NotNull ... teleportFlags) {
return false;
}
@Override
public boolean teleport(@NotNull Location location) {
return false;
}
@Override
public boolean teleport(@NotNull Location location,
@NotNull PlayerTeleportEvent.TeleportCause cause) {
return false;
}
@Override
public boolean teleport(org.bukkit.entity.@NotNull Entity destination) {
return false;
}
@Override
public boolean teleport(org.bukkit.entity.@NotNull Entity destination,
@NotNull PlayerTeleportEvent.TeleportCause cause) {
return false;
}
@Override
public @NotNull List<org.bukkit.entity.Entity> getNearbyEntities(double x, double y, double z) {
return null;
}
@Override
public int getEntityId() {
return 0;
}
@Override
public int getFireTicks() {
return 0;
}
@Override
public int getMaxFireTicks() {
return 0;
}
@Override
public void setFireTicks(int ticks) {
}
@Override
public void setVisualFire(boolean fire) {
}
@Override
public boolean isVisualFire() {
return false;
}
@Override
public int getFreezeTicks() {
return 0;
}
@Override
public int getMaxFreezeTicks() {
return 0;
}
@Override
public void setFreezeTicks(int ticks) {
}
@Override
public boolean isFrozen() {
return false;
}
@Override
public boolean isFreezeTickingLocked() {
return false;
}
@Override
public void lockFreezeTicks(boolean locked) {
}
@Override
public void remove() {
}
@Override
public boolean isDead() {
return false;
}
@Override
public boolean isValid() {
return false;
}
@Override
public void sendMessage(@NotNull String message) {
}
@Override
public void sendMessage(@NotNull String... messages) {
}
@Override
public void sendMessage(@Nullable UUID sender, @NotNull String message) {
}
@Override
public void sendMessage(@Nullable UUID sender, @NotNull String... messages) {
}
@Override
public @NotNull Server getServer() {
return null;
}
@Override
public boolean isPersistent() {
return false;
}
@Override
public void setPersistent(boolean persistent) {
}
@Override
public org.bukkit.entity.@Nullable Entity getPassenger() {
return null;
}
@Override
public boolean setPassenger(org.bukkit.entity.@NotNull Entity passenger) {
return false;
}
@Override
public @NotNull List<org.bukkit.entity.Entity> getPassengers() {
return null;
}
@Override
public boolean addPassenger(org.bukkit.entity.@NotNull Entity passenger) {
return false;
}
@Override
public boolean removePassenger(org.bukkit.entity.@NotNull Entity passenger) {
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean eject() {
return false;
}
@Override
public float getFallDistance() {
return 0;
}
@Override
public void setFallDistance(float distance) {
}
@Override
public void setLastDamageCause(@Nullable EntityDamageEvent event) {
}
@Override
public @Nullable EntityDamageEvent getLastDamageCause() {
return null;
}
@Override
public @NotNull UUID getUniqueId() {
return null;
}
@Override
public int getTicksLived() {
return 0;
}
@Override
public void setTicksLived(int value) {
}
@Override
public void playEffect(@NotNull EntityEffect type) {
}
@Override
public @NotNull EntityType getType() {
return null;
}
@Override
public @NotNull Sound getSwimSound() {
return null;
}
@Override
public @NotNull Sound getSwimSplashSound() {
return null;
}
@Override
public @NotNull Sound getSwimHighSpeedSplashSound() {
return null;
}
@Override
public boolean isInsideVehicle() {
return false;
}
@Override
public boolean leaveVehicle() {
return false;
}
@Override
public org.bukkit.entity.@Nullable Entity getVehicle() {
return null;
}
@Override
public void setCustomNameVisible(boolean flag) {
}
@Override
public boolean isCustomNameVisible() {
return false;
}
@Override
public void setVisibleByDefault(boolean visible) {
}
@Override
public boolean isVisibleByDefault() {
return false;
}
@Override
public void setGlowing(boolean flag) {
}
@Override
public boolean isGlowing() {
return false;
}
@Override
public void setInvulnerable(boolean flag) {
}
@Override
public boolean isInvulnerable() {
return false;
}
@Override
public boolean isSilent() {
return false;
}
@Override
public void setSilent(boolean flag) {
}
@Override
public boolean hasGravity() {
return false;
}
@Override
public void setGravity(boolean gravity) {
}
@Override
public int getPortalCooldown() {
return 0;
}
@Override
public void setPortalCooldown(int cooldown) {
}
@Override
public @NotNull Set<String> getScoreboardTags() {
return null;
}
@Override
public boolean addScoreboardTag(@NotNull String tag) {
return false;
}
@Override
public boolean removeScoreboardTag(@NotNull String tag) {
return false;
}
@Override
public @NotNull PistonMoveReaction getPistonMoveReaction() {
return null;
}
@Override
public @NotNull BlockFace getFacing() {
return null;
}
@Override
public @NotNull Pose getPose() {
return null;
}
@Override
public boolean isSneaking() {
return false;
}
@Override
public void setSneaking(boolean sneak) {
}
@Override
public @NotNull SpawnCategory getSpawnCategory() {
return null;
}
@Override
public @NotNull Spigot spigot() {
return null;
}
@Override
public @NotNull Component name() {
return null;
}
@Override
public @NotNull Component teamDisplayName() {
return null;
}
@Override
public @Nullable Location getOrigin() {
return null;
}
@Override
public boolean fromMobSpawner() {
return false;
}
@Override
public @NotNull CreatureSpawnEvent.SpawnReason getEntitySpawnReason() {
return null;
}
@Override
public boolean isUnderWater() {
return false;
}
@Override
public boolean isInRain() {
return false;
}
@Override
public boolean isInBubbleColumn() {
return false;
}
@Override
public boolean isInWaterOrRain() {
return false;
}
@Override
public boolean isInWaterOrBubbleColumn() {
return false;
}
@Override
public boolean isInWaterOrRainOrBubbleColumn() {
return false;
}
@Override
public boolean isInLava() {
return false;
}
@Override
public boolean isTicking() {
return false;
}
@Override
public @NotNull Set<Player> getTrackedPlayers() {
return null;
}
@Override
public boolean spawnAt(@NotNull Location location,
@NotNull CreatureSpawnEvent.SpawnReason reason) {
return false;
}
@Override
public boolean isInPowderedSnow() {
return false;
}
@Override
public boolean collidesAt(@NotNull Location location) {
return false;
}
@Override
public boolean wouldCollideUsing(@NotNull BoundingBox boundingBox) {
return false;
}
@Override
public @Nullable Component customName() {
return null;
}
@Override
public void customName(@Nullable Component customName) {
}
@Override
public @Nullable String getCustomName() {
return null;
}
@Override
public void setCustomName(@Nullable String name) {
}
@Override
public void setMetadata(@NotNull String metadataKey, @NotNull MetadataValue newMetadataValue) {
}
@Override
public @NotNull List<MetadataValue> getMetadata(@NotNull String metadataKey) {
return null;
}
@Override
public boolean hasMetadata(@NotNull String metadataKey) {
return false;
}
@Override
public void removeMetadata(@NotNull String metadataKey, @NotNull Plugin owningPlugin) {
}
@Override
public boolean isPermissionSet(@NotNull String name) {
return false;
}
@Override
public boolean isPermissionSet(@NotNull Permission perm) {
return false;
}
@Override
public boolean hasPermission(@NotNull String name) {
return false;
}
@Override
public boolean hasPermission(@NotNull Permission perm) {
return false;
}
@Override
public @NotNull PermissionAttachment addAttachment(@NotNull Plugin plugin, @NotNull String name,
boolean value) {
return null;
}
@Override
public @NotNull PermissionAttachment addAttachment(@NotNull Plugin plugin) {
return null;
}
@Override
public @Nullable PermissionAttachment addAttachment(@NotNull Plugin plugin,
@NotNull String name, boolean value, int ticks) {
return null;
}
@Override
public @Nullable PermissionAttachment addAttachment(@NotNull Plugin plugin, int ticks) {
return null;
}
@Override
public void removeAttachment(@NotNull PermissionAttachment attachment) {
}
@Override
public void recalculatePermissions() {
}
@Override
public @NotNull Set<PermissionAttachmentInfo> getEffectivePermissions() {
return null;
}
@Override
public boolean isOp() {
return false;
}
@Override
public void setOp(boolean value) {
}
@Override
public @NotNull PersistentDataContainer getPersistentDataContainer() {
return null;
}
} }

View file

@ -0,0 +1,224 @@
package me.unurled.raxen.components.entity.player;
public class PlayerStatistics {
public static long getEXPForNextLevel(int level) {
if (level < 1) {
level = 1;
}
long ret = 1;
if (level <= 200) {
ret = PlayerStatistics.EXP_REQUIREMENTS[level - 1][1];
} else {
ret = (int) (Math.pow(1.0548, level - 200) * EXP_REQUIREMENTS[EXP_REQUIREMENTS.length
- 1][1]);
}
if (ret < 0) {
ret = Long.MAX_VALUE;
}
return ret;
}
private static final int[][] EXP_REQUIREMENTS = {
{1, 15},
{2, 34},
{3, 57},
{4, 92},
{5, 135},
{6, 372},
{7, 560},
{8, 840},
{9, 1242},
{10, 1144},
{11, 1573},
{12, 2144},
{13, 2800},
{14, 3640},
{15, 4700},
{16, 5893},
{17, 7360},
{18, 9144},
{19, 11120},
{20, 13477},
{21, 16268},
{22, 19320},
{23, 22880},
{24, 27008},
{25, 31477},
{26, 36600},
{27, 42444},
{28, 48720},
{29, 55813},
{30, 63800},
{31, 86784},
{32, 98208},
{33, 110932},
{34, 124432},
{35, 139372},
{36, 155865},
{37, 173280},
{38, 192400},
{39, 213345},
{40, 235372},
{41, 259392},
{42, 285532},
{43, 312928},
{44, 342624},
{45, 374760},
{46, 408336},
{47, 445544},
{48, 483532},
{49, 524160},
{50, 567772},
{51, 598886},
{52, 631704},
{53, 666321},
{54, 702836},
{55, 741351},
{56, 781976},
{57, 824828},
{58, 870028},
{59, 917625},
{60, 967995},
{61, 1021041},
{62, 1076994},
{63, 1136013},
{64, 1198266},
{65, 1263930},
{66, 1333194},
{67, 1406252},
{68, 1483314},
{69, 1564600},
{70, 1650340},
{71, 1740778},
{72, 1836173},
{73, 1936794},
{74, 2042930},
{75, 2154882},
{76, 2272970},
{77, 2397528},
{78, 2528912},
{79, 2667496},
{80, 2813674},
{81, 2967863},
{82, 3130502},
{83, 3302053},
{84, 3483005},
{85, 3673873},
{86, 3875201},
{87, 4087562},
{88, 4311559},
{89, 4547832},
{90, 4797053},
{91, 5059931},
{92, 5337215},
{93, 5629694},
{94, 5938202},
{95, 6263614},
{96, 6606860},
{97, 6968915},
{98, 7350811},
{99, 7753635},
{100, 8178534},
{101, 8626718},
{102, 9099462},
{103, 9598112},
{104, 10124088},
{105, 10678888},
{106, 11264090},
{107, 11881362},
{108, 12532461},
{109, 13219239},
{110, 13943653},
{111, 14707765},
{112, 15513750},
{113, 16363902},
{114, 17260644},
{115, 18206527},
{116, 19204245},
{117, 20256637},
{118, 21366700},
{119, 22537594},
{120, 23772654},
{121, 25075395},
{122, 26449526},
{123, 27898960},
{124, 29427822},
{125, 31040466},
{126, 32741483},
{127, 34535716},
{128, 36428273},
{129, 38424542},
{130, 40530206},
{131, 42751262},
{132, 45094030},
{133, 47565183},
{134, 50171755},
{135, 52921167},
{136, 55821246},
{137, 58880250},
{138, 62106888},
{139, 65510344},
{140, 69100311},
{141, 72887008},
{142, 76881216},
{143, 81094306},
{144, 85594273},
{145, 90225770},
{146, 95170142},
{147, 100385466},
{148, 105886589},
{149, 111689174},
{150, 117809740},
{151, 124265714},
{152, 131075474},
{153, 138258410},
{154, 145834970},
{155, 153826726},
{156, 162256430},
{157, 171148082},
{158, 180526997},
{159, 190419876},
{160, 200854885},
{161, 211861732},
{162, 223471711},
{163, 223471711},
{164, 248635353},
{165, 262260570},
{166, 276632449},
{167, 291791906},
{168, 307782102},
{169, 324648562},
{170, 342439302},
{171, 361204976},
{172, 380999008},
{173, 401877754},
{174, 423900654},
{175, 447130410},
{176, 471633156},
{177, 497478653},
{178, 524740482},
{179, 553496261},
{180, 583827855},
{181, 615821622},
{182, 649568646},
{183, 685165008},
{184, 722712050},
{185, 762316670},
{186, 804091623},
{187, 848155844},
{188, 894634784},
{189, 943660770},
{190, 995373379},
{191, 1049919840},
{192, 1107455447},
{193, 1168144006},
{194, 1232158297},
{195, 1299680571},
{196, 1370903066},
{197, 1446028554},
{198, 1525246918},
{199, 1608855764},
{200, 1697021059},
};
}

View file

@ -1,19 +1,20 @@
package me.unurled.raxen.components.entity.player; package me.unurled.raxen.components.entity.player;
import static me.unurled.raxen.utils.Utils.colorComp;
import static me.unurled.raxen.utils.Utils.debug; import static me.unurled.raxen.utils.Utils.debug;
import static me.unurled.raxen.utils.Utils.log;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.manager.entity.PlayerManager; import me.unurled.raxen.manager.entity.PlayerManager;
import org.bukkit.Bukkit;
import org.bukkit.attribute.Attribute; import org.bukkit.attribute.Attribute;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
public class PlayerUtils { public class PlayerUtils {
public static void updateSkills(Raxen main, Player player) { public static void updateSkills(Raxen main, Player player) {
PlayerManager pm = PlayerManager pm = main.getManager().getPlayerManager();
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
.getPlayerManager();
int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck;
defense = pm.getDefense().get(player); defense = pm.getDefense().get(player);
maxMana = pm.getMaxMana().get(player); maxMana = pm.getMaxMana().get(player);
@ -29,9 +30,33 @@ public class PlayerUtils {
itemStrength = pm.getItemStrength().get(player); itemStrength = pm.getItemStrength().get(player);
itemSpeed = pm.getItemSpeed().get(player); itemSpeed = pm.getItemSpeed().get(player);
itemMana = pm.getItemMana().get(player); itemMana = pm.getItemMana().get(player);
double hearts = maxHealth + itemHealth;
double heart = 10;
if (hearts > 125 && hearts < 165) {
heart = 11;
} else if (hearts > 165 && hearts <= 230) {
heart = 12;
} else if (hearts > 230 && hearts <= 300) {
heart = 13;
} else if (hearts > 300 && hearts <= 400) {
heart = 14;
} else if (hearts > 400 && hearts <= 500) {
heart = 15;
} else if (hearts > 500 && hearts <= 650) {
heart = 16;
} else if (hearts > 650 && hearts <= 800) {
heart = 17;
} else if (hearts > 800 && hearts <= 1000) {
heart = 18;
} else if (hearts > 1000 && hearts <= 1250) {
heart = 19;
} else if (hearts > 1250) {
heart = 20;
}
log(heart + " " + hearts);
player player
.getAttribute(Attribute.GENERIC_MAX_HEALTH) .getAttribute(Attribute.GENERIC_MAX_HEALTH)
.setBaseValue(20D + (health + itemHealth) / 100); .setBaseValue(heart * 2);
player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
debug( debug(
@ -43,5 +68,32 @@ public class PlayerUtils {
"Luck " + (luck + itemLuck), "Luck " + (luck + itemLuck),
"Mana " + (mana + itemMana) + " Max Mana " + maxMana "Mana " + (mana + itemMana) + " Max Mana " + maxMana
); );
pm.updateActionBar(player);
}
public static BukkitTask actionBarPlayer(
Raxen main,
PlayerManager pm,
Player player
) {
return new BukkitRunnable() {
@Override
public void run() {
player.sendActionBar(
colorComp(
"<red>" +
pm.getHealth().get(player) +
"/" +
pm.getMaxHealth().get(player) +
"❤</red> <aqua>" +
pm.getMana().get(player) +
"/" +
pm.getMaxMana().get(player) +
"</aqua>"
)
);
}
}
.runTaskTimerAsynchronously(main, 10, 20);
} }
} }

View file

@ -2,19 +2,37 @@ package me.unurled.raxen.components.entity.player;
import static me.unurled.raxen.utils.Items.setItemsToInventory; import static me.unurled.raxen.utils.Items.setItemsToInventory;
import static me.unurled.raxen.utils.Utils.debug; import static me.unurled.raxen.utils.Utils.debug;
import static me.unurled.raxen.utils.Utils.log;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import lombok.Getter;
import lombok.Setter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.DamageType;
import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
import me.unurled.raxen.components.entity.other.MobData;
import me.unurled.raxen.components.entity.player.attributes.Attribute; import me.unurled.raxen.components.entity.player.attributes.Attribute;
import me.unurled.raxen.components.entity.player.storages.EnderChest; import me.unurled.raxen.components.entity.player.storages.EnderChest;
import me.unurled.raxen.components.entity.player.storages.Inventory; import me.unurled.raxen.components.entity.player.storages.Inventory;
import me.unurled.raxen.components.party.Party;
import me.unurled.raxen.manager.entity.PlayerManager;
import me.unurled.raxen.manager.entity.SpellManager.CastState;
import me.unurled.raxen.utils.EntityAttributes; import me.unurled.raxen.utils.EntityAttributes;
import me.unurled.raxen.utils.Items; import me.unurled.raxen.utils.Items;
import me.unurled.raxen.utils.Math;
import me.unurled.raxen.utils.Utils;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.EntityEffect;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -25,9 +43,20 @@ import org.bukkit.persistence.PersistentDataType;
public class RaxenPlayer { public class RaxenPlayer {
private final Raxen main; private final Raxen main;
@Getter
private final Player player; private final Player player;
private final EntityNamespacedKey namespacedKey; private final EntityNamespacedKey namespacedKey;
double crit_chance = 0.05;
public double critDamage = 1.50;
public boolean dead = false;
private DamageType lastDamageCause = DamageType.NORMAL;
private long lastEnvironmentalDamaged = 0;
private long lastDamagedNonEnvironmental = 0;
private long lastDamaged = 0;
private Boolean isRaxenPlayer; private Boolean isRaxenPlayer;
private Attribute attribute; private Attribute attribute;
@ -35,6 +64,25 @@ public class RaxenPlayer {
private Storage storages; private Storage storages;
private Inventories inventory; private Inventories inventory;
private boolean inTutorial;
private HashMap<String, HashMap<String, Integer>> mobCounter = new HashMap<String, HashMap<String, Integer>>();
private int mobKills, playerKills, deaths, bossKills;
public long xp;
@Getter
private int level;
@Getter
@Setter
private Party party = null;
@Getter
@Setter
private Party invitedParty = null;
BossBar bossBar;
public RaxenPlayer(Raxen main, Player player) { public RaxenPlayer(Raxen main, Player player) {
this.main = main; this.main = main;
this.player = player; this.player = player;
@ -89,7 +137,10 @@ public class RaxenPlayer {
public Storage getStorage() { public Storage getStorage() {
PersistentDataContainer data = player.getPersistentDataContainer(); PersistentDataContainer data = player.getPersistentDataContainer();
String store = data.get(namespacedKey.storage, PersistentDataType.STRING); String store = data.get(
namespacedKey.storage,
PersistentDataType.STRING
);
org.bukkit.inventory.Inventory ec = Bukkit.createInventory( org.bukkit.inventory.Inventory ec = Bukkit.createInventory(
null, null,
54, 54,
@ -103,7 +154,10 @@ public class RaxenPlayer {
public Inventories getInventory() { public Inventories getInventory() {
PersistentDataContainer data = player.getPersistentDataContainer(); PersistentDataContainer data = player.getPersistentDataContainer();
String inv = data.get(namespacedKey.inventory, PersistentDataType.STRING); String inv = data.get(
namespacedKey.inventory,
PersistentDataType.STRING
);
org.bukkit.inventory.Inventory invv = Bukkit.createInventory( org.bukkit.inventory.Inventory invv = Bukkit.createInventory(
player, player,
InventoryType.PLAYER InventoryType.PLAYER
@ -121,7 +175,7 @@ public class RaxenPlayer {
public void setInventory(org.bukkit.inventory.Inventory inv) { public void setInventory(org.bukkit.inventory.Inventory inv) {
PersistentDataContainer data = player.getPersistentDataContainer(); PersistentDataContainer data = player.getPersistentDataContainer();
List<String> listInv = new ArrayList<String>(); List<String> listInv = new ArrayList<String>();
Integer reverse = 0; int reverse = 0;
for (ItemStack it : inv) { for (ItemStack it : inv) {
reverse = reverse + 1; reverse = reverse + 1;
if (it != null && it.getType() != Material.AIR) { if (it != null && it.getType() != Material.AIR) {
@ -151,13 +205,16 @@ public class RaxenPlayer {
} }
public Storage createStorage() { public Storage createStorage() {
setStorage(Bukkit.createInventory(null, 54, Component.text("Ender Chest"))); setStorage(
Bukkit.createInventory(null, 54, Component.text("Ender Chest"))
);
return getStorage(); return getStorage();
} }
public Inventories createInventory() { public Inventories createInventory() {
setInventory(Bukkit.createInventory(null, InventoryType.PLAYER)); org.bukkit.inventory.Inventory inv = Bukkit.createInventory(null, InventoryType.PLAYER);
return getInventory(); setInventory(inv);
return new Inventories(new Inventory(inv));
} }
public Boolean isRaxenPlayer() { public Boolean isRaxenPlayer() {
@ -171,4 +228,376 @@ public class RaxenPlayer {
public Attribute getAttribute() { public Attribute getAttribute() {
return attribute; return attribute;
} }
public boolean isInTutorial() {
return inTutorial;
}
public void setInTutorial(boolean inTutorial) {
this.inTutorial = inTutorial;
}
public int getDamage() {
return 0;
}
public boolean attackPlayer(RaxenPlayer player) {
return attackPlayer(player, -1, false, 0.5);
}
public boolean attackPlayer(RaxenPlayer player, int damage) {
return attackPlayer(player, damage, false, 0.5);
}
public boolean attackPlayer(RaxenPlayer player, int damage, boolean projectile) {
return attackPlayer(player, damage, projectile, 0.5);
}
public boolean attackPlayer(RaxenPlayer player, int damage, boolean projectile,
double knockback) {
if (player == null) {
return false;
}
if (player == null) {
return false;
}
int eDamage;
if (damage > 0) {
eDamage = damage;
} else {
eDamage = getDamage();
}
boolean crit = false;
if (java.lang.Math.random() < crit_chance) {
crit = true;
eDamage = (int) (eDamage * 1.5);
}
boolean sucess = false;
// TODO: calculate with classes... later
sucess = player.damage(eDamage, this.player, DamageType.NORMAL, crit);
return sucess;
}
public boolean attackMob(MobData other) {
return attackMob(other, 0.5, -1, false);
}
public boolean attackMob(MobData other, int rpgDamage) {
return attackMob(other, 0.5, rpgDamage, false);
}
public boolean attackMob(MobData other, int rpgDamage, boolean projectile) {
return attackMob(other, 0.5, rpgDamage, projectile);
}
public boolean attackMob(MobData other, double knockback, int rpgDamage,
boolean projectil) {
Player p = getPlayer();
if (p == null || other == null) {
return false;
}
int damage;
if (rpgDamage > 0) {
damage = rpgDamage;
} else {
damage = getDamage();
}
boolean crit = false;
double critChanceTemp = crit_chance;
if (java.lang.Math.random() < critChanceTemp) {
crit = true;
damage *= critDamage;
}
boolean sucess = false;
sucess = other.damage(damage, p, DamageType.NORMAL, crit);
if (sucess && !projectil) {
// TODO: other.knockback(p, knockback);
}
return sucess;
}
public boolean damage(int damage, Entity damager, DamageType damageType) {
return damage(damage, damager, damageType, false);
}
public boolean damage(int damage, Entity damager, DamageType damageType, boolean crit) {
if (dead) {
return false;
}
if (System.currentTimeMillis() - lastEnvironmentalDamaged < 600 && (
damageType == DamageType.ENVIRONMENTAL_LAVA
|| damageType == DamageType.ENVIRONMENTAL_DROWNING
|| damageType == DamageType.ENVIRONMENTAL_FALL)) {
return false;
}
if (player == null) {
return false;
}
if (damager != null) {
if (damager instanceof Player) {
RaxenPlayer damagerRX = main.getManager().getPlayerManager()
.getRaxenPlayer((Player) damager);
if (!((Player) damager).isOnline() || damagerRX == null) {
return false;
}
// TODO: check if same party later not now
}
}
switch (lastDamageCause = damageType) {
case NORMAL:
case NORMAL_SPELL:
damage -= Math.randInt(0, getAttribute().getDefense());
lastDamagedNonEnvironmental = System.currentTimeMillis();
break;
case ENVIRONMENTAL_FALL:
if (damage >= getAttribute().getHealth()) {
damage = getAttribute().getHealth() - 1;
}
break;
}
if (damageType == DamageType.ENVIRONMENTAL_LAVA
|| damageType == DamageType.ENVIRONMENTAL_DROWNING
|| damageType == DamageType.ENVIRONMENTAL_FALL) {
lastEnvironmentalDamaged = System.currentTimeMillis();
} else if (damageType == DamageType.NORMAL) {
lastDamaged = System.currentTimeMillis();
}
if (damager != null && damager != player && damager instanceof Player) {
damage *= 0.8; // pvp nerf
}
if (damage < 1) {
damage = 1;
}
if (damageType == DamageType.NORMAL_SPELL || damageType == DamageType.NORMAL) {
if (damage > getAttribute().getHealth() * 0.5) {
player.leaveVehicle();
}
}
getAttribute().setHealth(getAttribute().getHealth() - damage);
if (getAttribute().getHealth() < 0) {
getAttribute().setHealth(0);
}
if (damager != null && damager != player) {
if (damager instanceof Player) {
RaxenPlayer damagerRX = main.getManager().getPlayerManager()
.getRaxenPlayer((Player) damager);
if (damagerRX != null) {
Player p2 = damagerRX.getPlayer();
if (p2 != null && p2.isValid()) {
p2.playSound(p2.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f);
}
}
}
}
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.85f, 0.85f);
if (System.currentTimeMillis() - lastDamaged < 1000) {
player.playEffect(EntityEffect.HURT);
}
if (getAttribute().getHealth() <= 0) {
die();
} else {
// TODO: update health display on action bar
}
return true;
}
public void die() {
log("player " + player.displayName() + " died");
}
public void incrementMobCounter(String mob) {
if (mobCounter.containsKey(mob)) {
mobCounter.get(mob).replaceAll((k, v) -> v + 1);
// TODO: mob quest tracker ?
}
}
public int getMobKills() {
return mobKills;
}
public int getPlayerKills() {
return playerKills;
}
public int getDeaths() {
return deaths;
}
public int getBossKills() {
return bossKills;
}
public void setMobKills(int mobKills) {
this.mobKills = mobKills;
}
public void setPlayerKills(int playerKills) {
this.playerKills = playerKills;
}
public void setDeaths(int deaths) {
this.deaths = deaths;
}
public void setBossKills(int bossKills) {
this.bossKills = bossKills;
}
public void addMobKills(int mobKills) {
this.mobKills += mobKills;
}
public void addMobKills() {
this.mobKills += 1;
}
public void addPlayerKills(int playerKills) {
this.playerKills += playerKills;
}
public void addPlayerKills() {
this.playerKills += 1;
}
public void addDeaths(int deaths) {
this.deaths += deaths;
}
public void addDeaths() {
this.deaths += 1;
}
public void addBossKills(int bossKills) {
this.bossKills += bossKills;
}
public void addBossKills() {
this.bossKills += 1;
}
public void gainXp(long amt) {
gainXp(amt, false);
}
public void gainXp(long amt, boolean penalty) {
xp += amt;
Player p = getPlayer();
if (p == null || !p.isValid()) {
return;
}
int bonus = 0;
// IDEA: per class xp bonus
// IDEA: party xp multiplier
long tXp = amt;
if (bonus > 0) {
tXp += bonus;
xp += bonus;
}
if (xp >= getXpForNextLevel()) {
long extra = xp - getXpForNextLevel();
xp = 0;
level++;
xp = extra < getXpForNextLevel() ? extra : getXpForNextLevel() - 1;
// TODO: take care of stats level up
// TODO: update health and mana display;
}
}
private int lastLevel = -1;
private long cachedXp = -1;
public long getXpForNextLevel() {
long ret = 1;
if (lastLevel == level && cachedXp > 0) {
return cachedXp;
}
ret = PlayerStatistics.getEXPForNextLevel(level);
if (ret < 0) {
ret = Long.MAX_VALUE;
}
lastLevel = level;
cachedXp = ret;
return ret;
}
public void knockback(LivingEntity attacker, double knockBackMultiplier) {
return;
}
public void updateHealthManaDisplay() {
Player p = getPlayer();
PlayerManager manager = main.getManager().getPlayerManager();
if (p != null) {
int health = manager.getHealth().get(p);
int maxHealth = manager.getMaxHealth().get(p);
int mana = manager.getMana().get(p);
int maxMana = manager.getMaxMana().get(p);
if (health > maxHealth) {
manager.getHealth().set(p, maxHealth);
health = manager.getHealth().get(p);
}
if (health < 0) {
manager.getHealth().set(p, 0);
health = manager.getHealth().get(p);
}
if (mana > maxMana) {
manager.getMana().set(p, maxMana);
mana = manager.getMana().get(p);
}
if (dead) {
return;
}
double percent = ((double) health) / ((double) maxHealth);
StringBuilder sb = new StringBuilder();
BarColor color = BarColor.GREEN;
if (percent > 0.5) {
sb.append("<green>");
sb.append(health);
sb.append(" <aqua><bold>HP");
} else if (percent > 0.20) {
sb.append("<yellow>");
sb.append(health);
sb.append(" <aqua><bold>HP");
color = BarColor.YELLOW;
} else {
sb.append("<dark_red><bold>DANGER - <reset><red>");
sb.append(health);
sb.append(" <dark_red><bold> - DANGER");
color = BarColor.RED;
}
sb.append("<reset>");
// TODO: status poison, burn, bleed
if (percent > 1) {
percent = 1;
} else if (percent < 0.01) {
percent = 0.01;
}
if (bossBar == null) {
bossBar = Bukkit.createBossBar(Utils.coloredString(sb.toString()), BarColor.GREEN,
BarStyle.SOLID);
bossBar.addPlayer(p);
}
bossBar.setTitle(Utils.coloredString(sb.toString().trim()));
bossBar.setProgress(percent);
bossBar.setColor(color);
if (!p.isGliding() && main.getManager().getSpellManager().casters.containsKey(
p.getUniqueId())) {
CastState cs = main.getManager().getSpellManager().casters.get(
p.getUniqueId()).state;
if (cs != CastState.NONE) {
StringBuilder sb2 = new StringBuilder();
sb2.append("<gold><bold> ");
sb2.append(cs.toString());
p.sendActionBar(Utils.colorComp(sb2.toString()));
}
}
// p.setFoodLevel(mana * 2);
p.setLevel(level);
p.setExp((float) (((double) xp) / ((double) getXpForNextLevel())));
}
}
} }

View file

@ -1,12 +1,18 @@
package me.unurled.raxen.components.entity.player; package me.unurled.raxen.components.entity.player;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorTextComp;
import static me.unurled.raxen.utils.Utils.debug;
import static me.unurled.raxen.utils.Utils.textCompToString;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.utils.libs.Vault; import me.unurled.raxen.utils.libs.Vault;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scoreboard.*; import org.bukkit.scoreboard.Criteria;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.ScoreboardManager;
public class Scoreboard { public class Scoreboard {
@ -41,7 +47,9 @@ public class Scoreboard {
score2.setScore(2); score2.setScore(2);
Score score3 = obj.getScore( Score score3 = obj.getScore(
textCompToString( textCompToString(
colorTextComp("<gold>Coins: <gold>" + vault.getBalanceString(player)) colorTextComp(
"<gold>Coins: <gold>" + vault.getBalanceString(player)
)
) )
); );
score3.setScore(1); score3.setScore(1);
@ -60,13 +68,16 @@ public class Scoreboard {
player.getScoreboard().getObjective(DisplaySlot.SIDEBAR); player.getScoreboard().getObjective(DisplaySlot.SIDEBAR);
debug(main, String.valueOf(player.getScoreboard().getEntries())); debug(main, String.valueOf(player.getScoreboard().getEntries()));
for (String str : player.getScoreboard().getEntries()) { for (String str : player.getScoreboard().getEntries()) {
if (str.contains(player.getName())) {} if (str.contains(player.getName())) {
}
} }
player.getScoreboard().resetScores("Coins"); player.getScoreboard().resetScores("Coins");
assert objective != null; assert objective != null;
Score score = objective.getScore( Score score = objective.getScore(
textCompToString( textCompToString(
colorTextComp("<gold>Coins: <gold>" + vault.getBalanceString(player)) colorTextComp(
"<gold>Coins: <gold>" + vault.getBalanceString(player)
)
) )
); );
score.setScore(1); score.setScore(1);

View file

@ -100,7 +100,7 @@ public class Attributes {
"Luck", "Luck",
"Mana", "Mana",
"Speed", "Speed",
"Strength", "Strength"
}; };
} }
} }

View file

@ -0,0 +1,5 @@
package me.unurled.raxen.components.glyph;
public class Glyph {
}

View file

@ -0,0 +1,25 @@
package me.unurled.raxen.components.glyph;
public class GlyphBuilder {
String chars;
String model;
String texture;
String placeholder;
public GlyphBuilder(String chars) {
this.chars = chars;
}
public void model(String s) {
model = s;
}
public void texture(String s) {
texture = s;
}
public void placeholder(String s) {
placeholder = s;
}
}

View file

@ -0,0 +1,44 @@
package me.unurled.raxen.components.glyph;
import org.bukkit.configuration.ConfigurationSection;
public class GlyphParser {
private final ConfigurationSection section;
public GlyphParser(ConfigurationSection section) {
this.section = section;
if (section.isConfigurationSection("Pack")) {
ConfigurationSection packSection = section.getConfigurationSection("Pack");
applyConfig(buildGlyph());
}
}
public GlyphBuilder buildGlyph() {
return buildGlyph(section.contains("char") ? section.getString("char") : null);
}
public GlyphBuilder buildGlyph(String car) {
GlyphBuilder glyph = null;
if (car != null) {
glyph = new GlyphBuilder(car);
}
return glyph;
}
private GlyphBuilder applyConfig(GlyphBuilder glyph) {
if (section.contains("Pack")) {
ConfigurationSection s = section.getConfigurationSection("Pack");
if (s.contains("model")) {
glyph.model(s.getString("model"));
}
if (s.contains("texture")) {
glyph.texture(s.getString("texture"));
}
if (s.contains("placeholder")) {
glyph.placeholder(s.getString("placeholder"));
}
}
return glyph;
}
}

View file

@ -1,21 +1,15 @@
package me.unurled.raxen.components.gui; package me.unurled.raxen.components.gui;
import static me.unurled.raxen.utils.Items.*; import static me.unurled.raxen.utils.Utils.fillGreyPane;
import static me.unurled.raxen.utils.Utils.*;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import lombok.Getter; import lombok.Getter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.player.PlayerUtils; import me.unurled.raxen.components.entity.player.PlayerUtils;
import me.unurled.raxen.utils.Utils;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -34,193 +28,25 @@ public class ItemListGui implements Listener {
Component.text("Item List") Component.text("Item List")
); );
private Inventory inv2 = Bukkit.createInventory(
null,
54,
Component.text("Item List")
);
private Inventory inv3 = Bukkit.createInventory(
null,
54,
Component.text("Item List")
);
private Inventory inv4 = Bukkit.createInventory(
null,
54,
Component.text("Item List")
);
private Inventory inv5 = Bukkit.createInventory(
null,
54,
Component.text("Item List")
);
private Inventory inv6 = Bukkit.createInventory(
null,
54,
Component.text("Item List")
);
private Inventory inv7 = Bukkit.createInventory(
null,
54,
Component.text("Item List")
);
private Inventory inv8 = Bukkit.createInventory(
null,
54,
Component.text("Item List")
);
private Inventory inv9 = Bukkit.createInventory(
null,
54,
Component.text("Item List")
);
private HashMap<String, ItemStack> itlist; private HashMap<String, ItemStack> itlist;
public ItemListGui(Raxen main) { public ItemListGui(Raxen main) {
this.main = main; this.main = main;
this.itlist = this.main.getManager().getItemManager().getList(); this.itlist = this.main.getManager().getItemManager().getList();
this.inv = getInventories();
} }
private ItemStack PREVIOUS = createItem( public Inventory getInventories(int page) {
Material.ARROW, int item = -1;
1, int number = 54 * (page - 1);
true, int number_final = number + 54;
false,
"Previous page"
);
private ItemStack NEXT = createItem(
Material.ARROW,
1,
true,
false,
"Next page"
);
private ItemStack PAGE = createItem(Material.PAPER, 1, true, false, "Page");
private ItemStack CLOSE = closeItem();
private ItemStack GREY_PANE = greyPane();
public Inventory getInventories() { for (ItemStack it : itlist.values()) {
Integer page = 1;
Integer item = -1;
for (Map.Entry<String, ItemStack> entry : itlist.entrySet()) {
ItemStack it = entry.getValue();
item++; item++;
if (item > 44 && item < 91) { if (item >= number && item < number_final) {
inv2.addItem(it); inv.setItem(item - number, it);
inv2.setItem(48, PREVIOUS);
inv2.setItem(
49,
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
);
inv2.setItem(53, CLOSE);
inv2 = fillGreyPane(inv2);
}
if (item > 90 && item < 136) {
inv3.setItem(48, PREVIOUS);
inv3.setItem(
49,
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
);
inv3.setItem(53, CLOSE);
inv3 = fillGreyPane(inv3);
}
if (item > 135 && item < 181) {
inv4.addItem(it);
inv4.setItem(48, PREVIOUS);
inv4.setItem(
49,
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
);
inv4.setItem(53, CLOSE);
inv4 = fillGreyPane(inv4);
}
if (item > 180 && item < 226) {
inv5.addItem(it);
inv5.setItem(48, PREVIOUS);
inv5.setItem(
49,
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
);
inv5.setItem(53, CLOSE);
inv5 = fillGreyPane(inv5);
}
if (item > 225 && item < 271) {
inv6.addItem(it);
inv6.setItem(48, PREVIOUS);
inv6.setItem(
49,
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
);
inv6.setItem(53, CLOSE);
inv6 = fillGreyPane(inv6);
}
if (item > 270 && item < 316) {
inv7.addItem(it);
inv7.setItem(48, PREVIOUS);
inv7.setItem(
49,
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
);
inv7.setItem(53, CLOSE);
inv7 = fillGreyPane(inv7);
}
if (item > 315 && item < 361) {
inv8.addItem(it);
inv8.setItem(48, PREVIOUS);
inv8.setItem(
49,
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
);
inv8.setItem(53, CLOSE);
inv8 = fillGreyPane(inv8);
}
if (item > 360 && item < 406) {
inv9.addItem(it);
inv9.setItem(48, PREVIOUS);
inv9.setItem(
49,
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
);
inv9.setItem(53, CLOSE);
inv9 = fillGreyPane(inv9);
}
if (item > 405) {
log("Too many item to render.");
} else {
inv.addItem(it);
inv.setItem(49, PAGE);
inv.setItem(50, NEXT);
}
if (item > 44) {
inv.setItem(50, NEXT);
if (item > 90) {
inv2.setItem(50, NEXT);
if (item > 135) {
inv3.setItem(50, NEXT);
if (item > 180) {
inv4.setItem(50, NEXT);
if (item > 225) {
inv5.setItem(50, NEXT);
if (item > 270) {
inv6.setItem(50, NEXT);
if (item > 315) {
inv7.setItem(50, NEXT);
if (item > 360) {
inv8.setItem(50, NEXT);
} }
} }
} fillGreyPane(inv);
}
}
}
}
}
page++;
inv.setItem(53, CLOSE);
inv = fillGreyPane(inv);
}
return inv; return inv;
} }
@ -228,90 +54,26 @@ public class ItemListGui implements Listener {
public void clickInventory(InventoryClickEvent e) { public void clickInventory(InventoryClickEvent e) {
Player player = (Player) e.getWhoClicked(); Player player = (Player) e.getWhoClicked();
Inventory einv = e.getClickedInventory(); Inventory einv = e.getClickedInventory();
if ( if (einv == inv) {
einv == inv ||
einv == inv2 ||
einv == inv3 ||
einv == inv4 ||
einv == inv5 ||
einv == inv6 ||
einv == inv7 ||
einv == inv8 ||
einv == inv9
) {
if ( if (
e.getCurrentItem() != null && e.getCurrentItem() != null &&
e.getCurrentItem().getType() != Material.AIR e.getCurrentItem().getType() != Material.AIR
) { ) {
Integer slot = e.getSlot(); Integer slot = e.getSlot();
ItemStack clicked; ItemStack clicked;
if (slot == 48) {
//previous
if (e.getCurrentItem() != GREY_PANE) {
ItemStack pagee = einv.getItem(49);
String name = textCompToString(pagee.displayName());
int page = Integer.parseInt(name.replace("page", ""));
switch (page) {
case 2:
player.openInventory(inv);
case 3:
player.openInventory(inv2);
case 4:
player.openInventory(inv3);
case 5:
player.openInventory(inv4);
case 6:
player.openInventory(inv5);
case 7:
player.openInventory(inv6);
case 8:
player.openInventory(inv7);
case 9:
player.openInventory(inv8);
}
}
} else if (slot == 49) {
//page
return;
} else if (slot == 50) {
//next
ItemStack pagee = einv.getItem(49);
if (pagee != null) {
String name = textCompToString(pagee.displayName());
name = name.replace("[", "");
name = name.replace("]", "");
log(name);
int page = Integer.parseInt(name.replace("page", ""));
switch (page) {
case 1:
player.openInventory(inv2);
case 2:
player.openInventory(inv3);
case 3:
player.openInventory(inv4);
case 4:
player.openInventory(inv5);
case 5:
player.openInventory(inv6);
case 6:
player.openInventory(inv7);
case 7:
player.openInventory(inv8);
case 8:
player.openInventory(inv9);
}
}
} else if (slot == 53) {
//close
player.closeInventory();
} else {
//if (player.getInventory().firstEmpty() == -1) { //if (player.getInventory().firstEmpty() == -1) {
//add to stash //add to stash
//} //}
player.getInventory().addItem(e.getCurrentItem()); player.getInventory().addItem(e.getCurrentItem());
player.closeInventory();
player.playSound(player, Sound.UI_BUTTON_CLICK, 1, 0);
PlayerUtils.updateSkills(main, player); PlayerUtils.updateSkills(main, player);
} }
} }
} }
public void openInventory(Player player, int page) {
inv = getInventories(page);
player.openInventory(inv);
} }
} }

View file

@ -0,0 +1,122 @@
package me.unurled.raxen.components.items;
import com.google.common.collect.Multimap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import me.unurled.raxen.utils.Utils;
import net.kyori.adventure.text.Component;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkEffectMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.inventory.meta.MapMeta;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionEffect;
import org.jetbrains.annotations.NotNull;
public class ItemBuilder {
private final PersistentDataContainer persistentDataContainer;
private ItemStack it;
private Material type;
private Component displayName;
private int amount;
private int customModelData;
private String customModelDataPath;
private boolean hasCustomModelData;
private Color color;
private @NotNull PotionData potionData;
private List<PotionEffect> potionEffects;
private Set<ItemFlag> itemFlags;
private boolean hasAttributeModifiers;
private Multimap<Attribute, AttributeModifier> attributeModifiers;
private List<String> lore;
private final Map<Enchantment, Integer> enchantments;
public ItemBuilder(ItemStack it) {
this.it = it;
type = it.getType();
amount = it.getAmount();
final ItemMeta itm = it.getItemMeta();
if (itm instanceof LeatherArmorMeta leatherArmorMeta) {
color = leatherArmorMeta.getColor();
}
if (itm instanceof PotionMeta potionMeta) {
color = potionMeta.getColor();
potionData = potionMeta.getBasePotionData();
potionEffects = new ArrayList<>(potionMeta.getCustomEffects());
}
if (itm instanceof MapMeta mapMeta) {
color = mapMeta.getColor();
}
if (itm instanceof FireworkEffectMeta effectMeta) {
color =
effectMeta.hasEffect() ? effectMeta.getEffect().getColors().get(0) : Color.WHITE;
}
if (itm.hasDisplayName()) {
displayName = itm.displayName();
}
if (!itm.getItemFlags().isEmpty()) {
itemFlags = itm.getItemFlags();
}
hasAttributeModifiers = itm.hasAttributeModifiers();
if (hasAttributeModifiers) {
attributeModifiers = itm.getAttributeModifiers();
}
hasCustomModelData = itm.hasCustomModelData();
if (itm.hasCustomModelData()) {
customModelData = itm.getCustomModelData();
}
if (itm.hasLore()) {
lore = itm.getLore();
}
persistentDataContainer = itm.getPersistentDataContainer();
enchantments = new HashMap<>();
}
public ItemBuilder(Material material) {
this(new ItemStack(material));
}
public ItemBuilder displayName(String name) {
this.displayName = Utils.colorComp(name);
return this;
}
public void lore(List<String> lore) {
this.lore = lore;
}
public void color(Color color) {
this.color = color;
}
public void modelData(String path, int data) {
this.customModelData = data;
this.customModelDataPath = path;
}
}

View file

@ -0,0 +1,52 @@
package me.unurled.raxen.components.items;
import java.util.List;
import me.unurled.raxen.utils.Utils;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
public class ItemParser {
private final ConfigurationSection section;
private Material type;
public ItemParser(ConfigurationSection section) {
this.section = section;
type = Material.getMaterial(section.getString("material", "PAPER"));
if (section.isConfigurationSection("Pack")) {
ConfigurationSection packSection = section.getConfigurationSection("Pack");
// TODO: Parse pack section
// item.modelData(section.getString("Pack.model", null), section.getInt("Pack.custom_model_data", 0));
}
}
public ItemBuilder buildItem() {
return buildItem(section.contains("name") ? section.getString("name") : null);
}
public ItemBuilder buildItem(String name) {
ItemBuilder item;
item = new ItemBuilder(type);
if (name != null) {
item.displayName(name);
}
return item;
}
private ItemBuilder applyConfig(ItemBuilder item) {
if (section.contains("lore")) {
List<String> lore = section.getStringList("lore");
item.lore(lore);
}
if (section.contains("color")) {
item.color(Utils.color(section.getString("color", "FFFFFF")));
}
if (section.contains("Pack")) {
item.modelData(section.getString("Pack.model", null), section.getInt("Pack.custom_model_data", 0));
}
return item;
}
}

View file

@ -1,14 +0,0 @@
package me.unurled.raxen.components.items;
public class NBT {
public static String HEALTH = "HEALTH";
public static String SPEED = "SPEED";
public static String STRENGTH = "STRENGTH";
public static String DEFENSE = "DEFENSE";
public static String LUCK = "LUCK";
public static String MANA = "MANA";
public static String ID = "ID";
public static String CUSTOM_ABILITY = "CUSTOM_ABILITY";
public static String DROP_RATE = "DROP_RATE";
}

View file

@ -0,0 +1,16 @@
package me.unurled.raxen.components.items;
public class NBTNames {
public static String HEALTH = "HEALTH";
public static String SPEED = "SPEED";
public static String STRENGTH = "STRENGTH";
public static String DEFENSE = "DEFENSE";
public static String LUCK = "LUCK";
public static String MANA = "MANA";
public static String ID = "ID";
public static String CUSTOM_ABILITY = "CUSTOM_ABILITY";
public static String DROP_RATE = "DROP_RATE";
public static String ITEM_CLASS = "ITEM_CLASS";
public static String ITEM_TYPE = "ITEM_TYPE";
}

View file

@ -26,6 +26,7 @@ public abstract class Item {
* need item to be set before calling this method. * need item to be set before calling this method.
*/ */
public void registerItem(@NotNull Raxen main) { public void registerItem(@NotNull Raxen main) {
item = buildItem();
main.getManager().getItemManager().registerItem(item); main.getManager().getItemManager().registerItem(item);
} }
} }

View file

@ -12,5 +12,5 @@ public enum ItemClass {
SSS, SSS,
MYTHIC, MYTHIC,
UNIC, UNIC,
GOD, GOD
} }

View file

@ -7,5 +7,5 @@ public enum ItemTypes {
MEDICINE, MEDICINE,
ARMOR, ARMOR,
BLOCKS, BLOCKS,
MISCELLANEOUS, MISCELLANEOUS
} }

View file

@ -3,6 +3,7 @@ package me.unurled.raxen.components.items.custom;
import java.util.ArrayList; import java.util.ArrayList;
import lombok.Getter; import lombok.Getter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.items.custom.weapon.CombatKnife;
import me.unurled.raxen.components.items.custom.weapon.Dagger; import me.unurled.raxen.components.items.custom.weapon.Dagger;
public class List { public class List {
@ -21,5 +22,6 @@ public class List {
public void build() { public void build() {
// weapons // weapons
items.add(new Dagger()); items.add(new Dagger());
items.add(new CombatKnife());
} }
} }

View file

@ -0,0 +1,56 @@
package me.unurled.raxen.components.items.custom.weapon;
import static me.unurled.raxen.utils.Utils.colorTextComp;
import de.tr7zw.nbtapi.NBT;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import me.unurled.raxen.components.items.NBTNames;
import me.unurled.raxen.components.items.custom.Item;
import me.unurled.raxen.components.items.custom.ItemClass;
import me.unurled.raxen.components.items.custom.ItemTypes;
import net.kyori.adventure.text.Component;
import org.bukkit.Material;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public class CombatKnife extends Item {
@Getter
ItemStack item;
static final String NAME = "Combat Knife";
static final String ID = "COMBAT_KNIFE";
static final ItemClass ITEM_CLASS = ItemClass.F;
static final ItemTypes ITEM_TYPES = ItemTypes.WEAPON;
public ItemStack buildItem() {
item = new ItemStack(Material.IRON_SWORD);
ItemMeta itm = item.getItemMeta();
itm.displayName(colorTextComp("<aqua>" + NAME));
itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
itm.setUnbreakable(true);
List<Component> lore = new ArrayList<>();
lore.add(
colorTextComp(
"<grey>A simple combat knife with a serrated edge.</grey>"
)
);
itm.setCustomModelData(1);
itm.lore(lore);
item.setItemMeta(itm);
NBT.modify(
item,
nbt -> {
nbt.setString(NBTNames.ID, ID);
nbt.setString(NBTNames.ITEM_TYPE, ITEM_TYPES.toString());
nbt.setString(NBTNames.ITEM_CLASS, ITEM_CLASS.toString());
nbt.setInteger(NBTNames.STRENGTH, 20);
}
);
return item;
}
}

View file

@ -6,7 +6,7 @@ import de.tr7zw.nbtapi.NBTItem;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import lombok.Getter; import lombok.Getter;
import me.unurled.raxen.components.items.NBT; import me.unurled.raxen.components.items.NBTNames;
import me.unurled.raxen.components.items.custom.Item; import me.unurled.raxen.components.items.custom.Item;
import me.unurled.raxen.components.items.custom.ItemClass; import me.unurled.raxen.components.items.custom.ItemClass;
import me.unurled.raxen.components.items.custom.ItemTypes; import me.unurled.raxen.components.items.custom.ItemTypes;
@ -22,16 +22,16 @@ public class Dagger extends Item {
@Getter @Getter
ItemStack item; ItemStack item;
String NAME = "Dager"; static final String NAME = "Dager";
String ID = "DAGER"; static final String ID = "DAGER";
ItemClass ITEM_CLASS = ItemClass.F; static final ItemClass ITEM_CLASS = ItemClass.F;
ItemTypes ITEM_TYPES = ItemTypes.WEAPON; static final ItemTypes ITEM_TYPES = ItemTypes.WEAPON;
public ItemStack buildItem() { public ItemStack buildItem() {
item = new ItemStack(Material.IRON_SWORD); item = new ItemStack(Material.IRON_SWORD);
ItemMeta itm = item.getItemMeta(); ItemMeta itm = item.getItemMeta();
itm.displayName(colorTextComp("<aqua>" + this.NAME)); itm.displayName(colorTextComp("<aqua>" + NAME));
itm.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1, false); itm.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1, false);
itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS); itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS);
itm.setUnbreakable(true); itm.setUnbreakable(true);
@ -40,11 +40,11 @@ public class Dagger extends Item {
itm.lore(lore); itm.lore(lore);
item.setItemMeta(itm); item.setItemMeta(itm);
NBTItem nbti = new NBTItem(item); NBTItem nbti = new NBTItem(item);
nbti.setString(NBT.ID, ID); nbti.setString(NBTNames.ID, ID);
nbti.setInteger(NBT.SPEED, 100); nbti.setInteger(NBTNames.SPEED, 100);
nbti.setInteger(NBT.STRENGTH, 50); nbti.setInteger(NBTNames.STRENGTH, 50);
nbti.setString(NBT.CUSTOM_ABILITY, "throwing_dager"); nbti.setString(NBTNames.CUSTOM_ABILITY, "throwing_dager");
nbti.setDouble(NBT.DROP_RATE, 50.0); nbti.setDouble(NBTNames.DROP_RATE, 50.0);
item = nbti.getItem(); item = nbti.getItem();
return item; return item;
} }

View file

@ -3,7 +3,7 @@ package me.unurled.raxen.components.lootchest.loots;
import de.tr7zw.nbtapi.NBTItem; import de.tr7zw.nbtapi.NBTItem;
import java.util.HashMap; import java.util.HashMap;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.items.NBT; import me.unurled.raxen.components.items.NBTNames;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -28,14 +28,17 @@ public class CustomLoot {
public Double getDrop_rate() { public Double getDrop_rate() {
NBTItem nbti = new NBTItem(item); NBTItem nbti = new NBTItem(item);
if (nbti.hasTag(NBT.DROP_RATE)) { if (nbti.hasTag(NBTNames.DROP_RATE)) {
return nbti.getDouble(NBT.DROP_RATE); return nbti.getDouble(NBTNames.DROP_RATE);
} }
return 0.0; return 0.0;
} }
public void tryDropLoot(Location location) { public void tryDropLoot(Location location) {
for (LootItem item : main.getManager().getLootManager().getLootTable()) { for (LootItem item : main
.getManager()
.getLootManager()
.getLootTable()) {
item.tryDropItem(location); item.tryDropItem(location);
} }
} }

View file

@ -0,0 +1,233 @@
package me.unurled.raxen.components.party;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.UUID;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.player.RaxenPlayer;
import me.unurled.raxen.manager.entity.PartyManager;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.ClickEvent.Action;
import net.kyori.adventure.text.format.TextColor;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.Scoreboard;
public class Party {
Raxen main;
private static int ID = 1;
public int id = ID++;
private ArrayList<UUID> uuids = new ArrayList<UUID>();
private UUID leaderUUID;
private String leaderName;
private ArrayList<Player> cachedPlayer = new ArrayList<Player>();
private long lastPlayerUpdate = 0L;
private Scoreboard board;
private boolean lootShare = false;
private HashMap<String, Long> lastInv = new HashMap<String, Long>();
public Party(Raxen main, Player leader) {
this.main = main;
this.leaderUUID = leader.getUniqueId();
this.leaderName = leader.getName();
// IDEA: adds scoreboard
addPlayer(leader);
}
public void sendInvite(Player p, RaxenPlayer rx, Player inviter) {
if (rx.getParty() == this) {
inviter.sendMessage(PartyManager.PREFIX.append(
Component.text(p.getName() + " is already in the party!")));
return;
}
if (lastInv.containsKey(p.getName())) {
if (System.currentTimeMillis() - lastInv.get(p.getName()) < 15000) {
inviter.sendMessage(PartyManager.PREFIX.append(Component.text(p.getName()
+ " was invited to the party in the last 15 seconds. Please wait a bit before inviting them again.")
.color(
TextColor.color(255, 0, 0))));
return;
}
}
lastInv.put(p.getName(), System.currentTimeMillis());
p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 10.0F, 1.0F);
p.sendMessage(PartyManager.PREFIX.append(Component.text(
"You have been invited to join " + leaderName
+ "'s party. Type /party join to join the party.").color(
TextColor.color(0, 255, 0))));
p.sendMessage(
Component.text("Or click Here").color(TextColor.color(255, 255, 0)).clickEvent(
ClickEvent.clickEvent(Action.SUGGEST_COMMAND, "/party join")));
p.sendMessage(PartyManager.PREFIX.append(
Component.text("Type /party decline to decline the party invitation.").color(
TextColor.color(0, 255, 0))));
p.sendMessage(
Component.text("Or click Here").color(TextColor.color(255, 255, 0)).clickEvent(
ClickEvent.clickEvent(Action.SUGGEST_COMMAND, "/party decline")));
sendMessage(Component.text(
p.getName() + " has been invited to the party by " + inviter.getName() + "."));
}
public void addPlayer(Player p) {
if (isFull()) {
p.sendMessage(PartyManager.PREFIX.append(Component.text("This party is full!")));
sendMessage(Component.text(p.getName() + " tried to join the party, but it was full."));
return;
}
lastPlayerUpdate = 0;
uuids.add(p.getUniqueId());
RaxenPlayer rx = main.getManager().getPlayerManager()
.getRaxenPlayer(p);
if (rx != null) {
rx.setParty(this);
}
p.sendMessage(Component.text("You have joined " + leaderName + "'s the party."));
Component comp = Component.text("The party is composed of ");
for (Player p2 : getPlayers()) {
comp.append(Component.text(p2.getName() + ", "));
}
p.sendMessage(comp);
sendMessage(Component.text(p.getName() + " has joined the party."));
}
public void leavePlayer(UUID uuid, String name) {
if (uuid != null) {
return;
}
Player player = Bukkit.getPlayer(uuid);
if (leaderUUID != null && leaderUUID == uuid) {
sendMessage(Component.text(name + " has left the party."));
if (player != null && player.isOnline()) {
main.getManager()
.getPlayerManager().getRaxenPlayer(player).setParty(null);
}
uuids.remove(uuid);
lastPlayerUpdate = 0;
if (uuids.size() == 0) {
destroy();
} else {
for (int k = 0; k < uuids.size(); k++) {
UUID nu = uuids.get(k);
Player temp = Bukkit.getPlayer(nu);
if (temp != null && temp.isOnline()) {
sendMessage(Component.text(temp.getName() + " is now the party leader."));
leaderUUID = nu;
leaderName = temp.getName();
break;
}
}
}
} else {
if (player != null && player.isOnline()) {
sendMessage(Component.text(name + " has left the party."));
main.getManager()
.getPlayerManager().getRaxenPlayer(player).setParty(null);
}
uuids.remove(uuid);
lastPlayerUpdate = 0;
if (uuids.size() == 0) {
destroy();
}
}
}
public boolean isFull() {
if (this.uuids == null) {
return true;
}
return uuids.size() >= PartyManager.MAX_SIZE;
}
public double getXpMultiplier() {
int size = uuids.size();
if (size < 0) {
size = 0;
}
return switch (size) {
case 0, 1 -> 0.0;
case 2 -> 0.1;
case 3 -> 0.15;
case 4 -> 0.2;
default -> 0.25;
};
}
public void destroy() {
for (UUID uuid : uuids) {
if (main.getManager().getPlayerManager().getRaxenPlayer(uuid) != null) {
RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(uuid);
if (rx.getParty() != null && rx.getParty().equals(this)) {
rx.setParty(null);
}
}
cachedPlayer.clear();
cachedPlayer = null;
uuids.clear();
uuids = null;
leaderUUID = null;
leaderName = null;
board = null;
main.getManager().getPartyManager().getParties().remove(this);
}
}
public ArrayList<Player> getPlayers() {
if (System.currentTimeMillis() - lastPlayerUpdate > 5000) {
lastPlayerUpdate = System.currentTimeMillis();
cachedPlayer.clear();
ArrayList<UUID> toRemove = new ArrayList<UUID>();
for (UUID uuid : uuids) {
Player p = Bukkit.getPlayer(uuid);
if (p != null && p.isOnline()) {
cachedPlayer.add(p);
} else {
toRemove.add(uuid);
}
}
uuids.removeAll(toRemove);
return cachedPlayer;
} else {
for (int k = 0; k < cachedPlayer.size(); k++) {
Player p = cachedPlayer.get(k);
if (p == null || !p.isOnline()) {
cachedPlayer.remove(k);
k--;
if (k < 0) {
k = 0;
}
}
}
return cachedPlayer;
}
}
public void sendMessage(Player sender, Component comp) {
Component msg = PartyManager.PREFIX.append(
Component.text(sender.getName() + "<reset><white>: ")).append(comp);
// TODO: Filter words
for (Player p : getPlayers()) {
p.sendMessage(msg);
}
}
public void sendMessage(Component comp) {
Component msg = PartyManager.PREFIX.append(comp);
for (Player p : getPlayers()) {
p.sendMessage(msg);
p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
}
}
public boolean isLeader(Player p) {
return p.getName().equals(leaderName) && p.getUniqueId().equals(leaderUUID);
}
}

View file

@ -2,6 +2,7 @@ package me.unurled.raxen.components.resourcepack;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.manager.server.ResourcePackManager; import me.unurled.raxen.manager.server.ResourcePackManager;
import me.unurled.raxen.utils.Utils;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
@ -24,12 +25,24 @@ public class ResourcePack {
public void run() { public void run() {
if (resourcePackManager.isUseRP()) { if (resourcePackManager.isUseRP()) {
player.setResourcePack( player.setResourcePack(
config.getString("ressource_pack_url"), resourcePackManager.getUrl(),
config.getString("resource_pack_sha1") resourcePackManager.getSha1(),
true
); );
} }
} }
} }.runTaskLater(main, 10L);
.runTaskLater(main, 2L); new BukkitRunnable() {
@Override
public void run() {
if (resourcePackManager.isUseRP()) {
if (!player.hasResourcePack()) {
player.kick(Utils.colorComp(
"<red>Raxen<gray>| <red>Please enable your resource pack!"));
}
}
}
}.runTaskLater(main, 600L);
} }
} }

View file

@ -0,0 +1,19 @@
package me.unurled.raxen.components.resourcepack.hosting;
import java.io.File;
import java.util.UUID;
public interface Hosting {
boolean upload(File resoucepack);
UUID getUUID();
String getPackURL();
String getMinecraftPackURL();
byte[] getSHA1();
String getOriginalSHA1();
}

View file

@ -0,0 +1,112 @@
package me.unurled.raxen.components.resourcepack.hosting;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
public class PackHoster implements Hosting {
private final String serverAddress;
private String packURL;
private String minecraftPackURL;
private String sha1;
private UUID uuid;
public PackHoster(String serverAddress) {
this.serverAddress = "https://" + serverAddress + "/";
}
@Override
public boolean upload(File resoucepack) {
try {
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(serverAddress + "upload/" + uuid.toString());
HttpEntity entity = MultipartEntityBuilder.create()
.addBinaryBody("file", resoucepack, ContentType.DEFAULT_BINARY,
resoucepack.getName())
.build();
httpPost.setEntity(entity);
// Execute the request
HttpResponse response = null;
response = httpClient.execute(httpPost);
String responseString = EntityUtils.toString(response.getEntity());
JsonObject json;
try {
json = JsonParser.parseString(responseString).getAsJsonObject();
} catch (JsonSyntaxException e) {
return false;
}
if (json.has("url") && json.has("sha1")) {
packURL = json.get("url").getAsString();
minecraftPackURL = packURL.replace("https://", "http://");
sha1 = json.get("sha1").getAsString();
return true;
}
// Get the response code
int responseCode = response.getStatusLine().getStatusCode();
System.out.println("Response Code: " + responseCode);
// Read the response body
String responseBody = null;
responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
System.out.println("Response Body: " + responseBody);
} catch (IOException e) {
return false;
}
return true;
}
@Override
public UUID getUUID() {
return uuid;
}
public void setUUID(UUID uuid) {
this.uuid = uuid;
}
@Override
public String getPackURL() {
return packURL;
}
@Override
public String getMinecraftPackURL() {
return minecraftPackURL;
}
@Override
public byte[] getSHA1() {
int len = sha1.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(sha1.charAt(i), 16) << 4)
+ Character.digit(sha1.charAt(i + 1), 16));
}
return data;
}
@Override
public String getOriginalSHA1() {
return sha1;
}
}

View file

@ -0,0 +1,74 @@
package me.unurled.raxen.components.tutorial;
import static me.unurled.raxen.utils.Utils.colorTextComp;
import static me.unurled.raxen.utils.Utils.log;
import static me.unurled.raxen.utils.Utils.msgPlayer;
import lombok.Getter;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.player.RaxenPlayer;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffectType;
public class Tutorial {
@Getter
private double x;
@Getter
private double y;
@Getter
private double z;
@Getter
private int step = 0;
@Getter
private World world;
public Tutorial() {
this.step = 0;
}
public Tutorial(int step) {
this.step = step;
}
public Tutorial(int step, double x, double y, double z, World world) {
this.x = x;
this.y = y;
this.z = z;
this.step = step;
this.world = world;
}
public void startTutorial(Player player, Location loc) {
x = loc.getX();
y = loc.getY();
z = loc.getZ();
world = loc.getWorld();
Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen");
RaxenPlayer rxPlayer = main.getManager().getPlayerManager().getRaxenPlayer(player);
rxPlayer.setInTutorial(true);
step = 1;
player.addPotionEffect(PotionEffectType.BLINDNESS.createEffect(100, 10));
player.teleport(
new Location(world, 15.82, 74.00, 117.21, 899.21F, 0.90f));
msgPlayer(player, colorTextComp("<green>Welcome to the tutorial!"));
// Hologram holo = api.createHologram(new Location(world, 15.5, 76.00, 112.5, 179.21f, 0.90f));
}
public void stopTutorial() {
log("needs to be implemented");
}
public void nextStep() {
log("needs to be implemented");
}
public void previousStep() {
log("needs to be implemented");
}
}

View file

@ -0,0 +1,74 @@
package me.unurled.raxen.config;
import java.io.File;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.glyph.GlyphBuilder;
import me.unurled.raxen.components.glyph.GlyphParser;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
public class GlyphConfig {
private Raxen main;
private File glyphFolder;
public GlyphConfig(Raxen main) {
this.main = main;
validatesConfig();
}
public void validatesConfig() {
glyphFolder = new File(main.getDataFolder(), "items");
if (!glyphFolder.exists()) {
glyphFolder.mkdirs();
}
}
public Map<File, Map<String, GlyphBuilder>> parseGlyphConfigs() {
Map<File, Map<String, GlyphBuilder>> parseMap = new LinkedHashMap<>();
List<File> config = Arrays.stream(getGlyphFiles())
.filter(file -> file.getName().endsWith(".yml"))
.toList();
for (File file : config) {
parseMap.put(file, parseGlyphConfig(YamlConfiguration.loadConfiguration(file), file));
}
return parseMap;
}
public Map<String, GlyphBuilder> parseGlyphConfig(YamlConfiguration config, File file) {
Map<String, GlyphParser> parseMap = new LinkedHashMap<>();
for (String glyphSelection : config.getKeys(false)) {
if (!config.isConfigurationSection(glyphSelection)) {
continue;
}
ConfigurationSection glyphSection = config.getConfigurationSection(glyphSelection);
parseMap.put(glyphSelection, new GlyphParser(glyphSection));
}
boolean configUpdated = false;
Map<String, GlyphBuilder> map = new LinkedHashMap<>();
for (Map.Entry<String, GlyphParser> entry : parseMap.entrySet()) {
GlyphParser parser = entry.getValue();
try {
map.put(entry.getKey(), parser.buildGlyph());
} catch (Exception e) {
e.printStackTrace();
}
}
return map;
}
private File[] getGlyphFiles() {
if (!glyphFolder.exists()) {
glyphFolder.mkdirs();
return new File[0];
}
File[] itemConfigs = Arrays.stream(glyphFolder.listFiles()).filter(File::isFile)
.toArray(File[]::new);
Arrays.sort(itemConfigs);
return itemConfigs;
}
}

View file

@ -0,0 +1,77 @@
package me.unurled.raxen.config;
import java.io.File;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.items.ItemBuilder;
import me.unurled.raxen.components.items.ItemParser;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
public class ItemConfig {
private File itemsFolder;
private Raxen main;
public ItemConfig(Raxen main) {
this.main = main;
validatesConfig();
}
public void validatesConfig() {
itemsFolder = new File(main.getDataFolder(), "items");
if (!itemsFolder.exists()) {
itemsFolder.mkdirs();
}
}
public Map<File, Map<String, ItemBuilder>> parseItemConfigs() {
Map<File, Map<String, ItemBuilder>> parseMap = new LinkedHashMap<>();
List<File> config = Arrays.stream(getItemsFiles())
.filter(file -> file.getName().endsWith(".yml")).toList();
for (File file : config) {
parseMap.put(file, parseItemConfig(YamlConfiguration.loadConfiguration(file), file));
}
return parseMap;
}
public Map<String, ItemBuilder> parseItemConfig(YamlConfiguration config, File file) {
Map<String, ItemParser> parseMap = new LinkedHashMap<>();
for (String itemSelection : config.getKeys(false)) {
if (!config.isConfigurationSection(itemSelection)) {
continue;
}
ConfigurationSection itemSection = config.getConfigurationSection(itemSelection);
parseMap.put(itemSelection, new ItemParser(itemSection));
}
boolean configUpdated = false;
Map<String, ItemBuilder> map = new LinkedHashMap<>();
for (Map.Entry<String, ItemParser> entry : parseMap.entrySet()) {
ItemParser parser = entry.getValue();
try {
map.put(entry.getKey(), parser.buildItem());
} catch (Exception e) {
e.printStackTrace();
}
}
return map;
}
/*public Map<File, Map<String, EffectBuilder>> parseEffectConfig() {
// TODO: efffects
}*/
private File[] getItemsFiles() {
if (!itemsFolder.exists()) {
itemsFolder.mkdirs();
return new File[0];
}
File[] itemConfigs = Arrays.stream(itemsFolder.listFiles()).filter(File::isFile)
.toArray(File[]::new);
Arrays.sort(itemConfigs);
return itemConfigs;
}
}

View file

@ -1,6 +1,8 @@
package me.unurled.raxen.config; package me.unurled.raxen.config;
import static me.unurled.raxen.utils.Items.*; import static me.unurled.raxen.utils.Items.listItemStackDeserialize;
import static me.unurled.raxen.utils.Items.mapItemStackDeserialize;
import static me.unurled.raxen.utils.Items.setItemsToInventory;
import static me.unurled.raxen.utils.Utils.debug; import static me.unurled.raxen.utils.Utils.debug;
import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCollection;
@ -16,6 +18,7 @@ import me.unurled.raxen.components.entity.player.PlayerUtils;
import me.unurled.raxen.components.entity.player.Storage; import me.unurled.raxen.components.entity.player.Storage;
import me.unurled.raxen.components.entity.player.attributes.Attributes; import me.unurled.raxen.components.entity.player.attributes.Attributes;
import me.unurled.raxen.components.entity.player.storages.EnderChest; import me.unurled.raxen.components.entity.player.storages.EnderChest;
import me.unurled.raxen.components.tutorial.Tutorial;
import me.unurled.raxen.manager.entity.PlayerManager; import me.unurled.raxen.manager.entity.PlayerManager;
import me.unurled.raxen.manager.entity.StorageManager; import me.unurled.raxen.manager.entity.StorageManager;
import me.unurled.raxen.utils.Items; import me.unurled.raxen.utils.Items;
@ -60,6 +63,7 @@ public class PlayerConfig {
/** /**
* save players stuff to mongo db * save players stuff to mongo db
*
* @param player * @param player
* @param attributes * @param attributes
* @param invstr * @param invstr
@ -84,7 +88,10 @@ public class PlayerConfig {
doc.append(s, attribute.get(s).get(player)); doc.append(s, attribute.get(s).get(player));
} }
if (playerManager.getRaxenPlayer(player).getStorage() != null) { if (playerManager.getRaxenPlayer(player).getStorage() != null) {
if (playerManager.getRaxenPlayer(player).getStorage().getEc() != null) { if (
playerManager.getRaxenPlayer(player).getStorage().getEc() !=
null
) {
debug(main, "Saving " + player.getName() + "'s storage!"); debug(main, "Saving " + player.getName() + "'s storage!");
EnderChest ec = playerManager EnderChest ec = playerManager
.getRaxenPlayer(player) .getRaxenPlayer(player)
@ -120,6 +127,7 @@ public class PlayerConfig {
/** /**
* save players stuff to yml * save players stuff to yml
*
* @param player * @param player
* @param attributes * @param attributes
* @param invstr * @param invstr
@ -142,7 +150,10 @@ public class PlayerConfig {
} }
config.set("inv", invstr); config.set("inv", invstr);
if (playerManager.getRaxenPlayer(player).getStorage() != null) { if (playerManager.getRaxenPlayer(player).getStorage() != null) {
if (playerManager.getRaxenPlayer(player).getStorage().getEc() != null) { if (
playerManager.getRaxenPlayer(player).getStorage().getEc() !=
null
) {
EnderChest ec = playerManager EnderChest ec = playerManager
.getRaxenPlayer(player) .getRaxenPlayer(player)
.getStorage() .getStorage()
@ -175,6 +186,7 @@ public class PlayerConfig {
/** /**
* load player stuff from mongo db * load player stuff from mongo db
*
* @param player * @param player
*/ */
public void loadUsingMongoDB(@NotNull Player player) { public void loadUsingMongoDB(@NotNull Player player) {
@ -183,6 +195,8 @@ public class PlayerConfig {
.first(); .first();
if (playerDoc == null) { if (playerDoc == null) {
debug(main, "Intiatilising Data for Player: " + player.getName()); debug(main, "Intiatilising Data for Player: " + player.getName());
Tutorial tutorial = new Tutorial();
main.getManager().getTutorialManager().addTutorial(player, tutorial);
playerManager.getRaxenPlayer(player).createNewAttribute(); playerManager.getRaxenPlayer(player).createNewAttribute();
playerManager.getRaxenPlayer(player).createStorage(); playerManager.getRaxenPlayer(player).createStorage();
playerManager.getRaxenPlayer(player).createInventory(); playerManager.getRaxenPlayer(player).createInventory();
@ -230,7 +244,9 @@ public class PlayerConfig {
player.getInventory().setContents(inv.getContents()); player.getInventory().setContents(inv.getContents());
player.updateInventory(); player.updateInventory();
me.unurled.raxen.components.entity.player.storages.Inventory invv = me.unurled.raxen.components.entity.player.storages.Inventory invv =
new me.unurled.raxen.components.entity.player.storages.Inventory(inv); new me.unurled.raxen.components.entity.player.storages.Inventory(
inv
);
Inventories invvv = new Inventories(invv); Inventories invvv = new Inventories(invv);
playerManager.getRaxenPlayer(player).setInventory(inv); playerManager.getRaxenPlayer(player).setInventory(inv);
PlayerUtils.updateSkills(main, player); PlayerUtils.updateSkills(main, player);
@ -238,6 +254,7 @@ public class PlayerConfig {
/** /**
* load player stuff from yml * load player stuff from yml
*
* @param player * @param player
* @throws IOException * @throws IOException
*/ */
@ -287,13 +304,16 @@ public class PlayerConfig {
player.getInventory().setContents(inv.getContents()); player.getInventory().setContents(inv.getContents());
player.updateInventory(); player.updateInventory();
me.unurled.raxen.components.entity.player.storages.Inventory invv = me.unurled.raxen.components.entity.player.storages.Inventory invv =
new me.unurled.raxen.components.entity.player.storages.Inventory(inv); new me.unurled.raxen.components.entity.player.storages.Inventory(
inv
);
Inventories invvv = new Inventories(invv); Inventories invvv = new Inventories(invv);
playerManager.getRaxenPlayer(player).setInventory(inv); playerManager.getRaxenPlayer(player).setInventory(inv);
} }
/** /**
* saves player stuff * saves player stuff
*
* @param player * @param player
*/ */
public void savePlayerConfig(@NotNull Player player) { public void savePlayerConfig(@NotNull Player player) {
@ -328,18 +348,27 @@ public class PlayerConfig {
new BukkitRunnable() { new BukkitRunnable() {
@Override @Override
public void run() { public void run() {
saveUsingYml(player, attributes, finalInvstr1, finalReverse1); saveUsingYml(
player,
attributes,
finalInvstr1,
finalReverse1
);
} }
} }
.runTaskAsynchronously(main); .runTaskAsynchronously(main);
debug(main, "using yml"); debug(main, "using yml");
} }
debug(main, "Player: " + player.getName() + " data successfully saved!"); debug(
main,
"Player: " + player.getName() + " data successfully saved!"
);
} }
/** /**
* load player stuff * load player stuff
*
* @param player * @param player
*/ */
public void loadPlayerConfig(Player player) { public void loadPlayerConfig(Player player) {
@ -370,7 +399,10 @@ public class PlayerConfig {
} }
debug( debug(
main, main,
"Player: " + player.getName() + " data successfully loaded using " + value "Player: " +
player.getName() +
" data successfully loaded using " +
value
); );
} }
} }

View file

@ -0,0 +1,99 @@
package me.unurled.raxen.config;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import java.util.Map.Entry;
import java.util.UUID;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.tutorial.Tutorial;
import me.unurled.raxen.manager.server.TutorialManager;
import me.unurled.raxen.utils.libs.MongoDB;
import org.bson.Document;
import org.bukkit.Location;
public class TutorialConfig {
private static Raxen main;
private MongoDB mongoDB;
private MongoCollection<Document> mongoCollection;
public TutorialConfig(Raxen main) {
this.main = main;
this.mongoDB = main.getManager().getLibsManager().getMongoDB();
this.mongoCollection = mongoDB.getMongoConfigs();
}
public void saveUsingMongoDB() {
TutorialManager manager = main.getManager().getTutorialManager();
Document doc = new Document();
Document loc = new Document();
for (Entry<UUID, Location> entry : manager.getLocations().entrySet()) {
Document location = new Document();
location.append("x", entry.getValue().getX());
location.append("y", entry.getValue().getY());
location.append("z", entry.getValue().getZ());
location.append("world", entry.getValue().getWorld().getName());
location.append("uuid", entry.getKey().toString());
loc.append("location", location);
}
doc.append("locations", loc);
Document tutorials = new Document();
for (Entry<UUID, Tutorial> entry : manager.getTutorials().entrySet()) {
Document tutorial = new Document();
tutorial.append("uuid", entry.getKey().toString());
tutorial.append("tutorial", entry.getValue().getStep());
tutorial.append("x", entry.getValue().getX());
tutorial.append("y", entry.getValue().getY());
tutorial.append("z", entry.getValue().getZ());
tutorial.append("world", entry.getValue().getWorld().getName());
tutorials.append(entry.getKey().toString(), tutorial);
}
doc.append("tutorials", tutorials);
Document find = mongoCollection.find(Filters.eq("tutorial", "tutorial")).first();
if (find == null) {
mongoCollection.insertOne(doc);
} else {
mongoCollection.replaceOne(find, doc);
}
}
public void loadUsingMongoDB() {
Document doc = mongoCollection.find(Filters.eq("tutorial", "tutorial")).first();
if (doc != null) {
TutorialManager manager = main.getManager().getTutorialManager();
Document loc = (Document) doc.get("locations");
for (Entry<String, Object> entry : loc.entrySet()) {
Document location = (Document) entry.getValue();
double x = location.getDouble("x");
double y = location.getDouble("y");
double z = location.getDouble("z");
String world = location.getString("world");
UUID uuid = UUID.fromString(location.getString("uuid"));
manager.getLocations()
.put(uuid, new Location(main.getServer().getWorld(world), x, y, z));
}
Document tutorials = (Document) doc.get("tutorials");
for (Entry<String, Object> entry : tutorials.entrySet()) {
Document tutorial = (Document) entry.getValue();
UUID uuid1 = UUID.fromString(tutorial.getString("uuid"));
double x = tutorial.getDouble("x");
double y = tutorial.getDouble("y");
double z = tutorial.getDouble("z");
String world = tutorial.getString("world");
int step = tutorial.getInteger("tutorial");
manager.getTutorials()
.put(uuid1, new Tutorial(step, x, y, z, main.getServer().getWorld(world)));
}
}
}
public void saveTutorialConfig() {
saveUsingMongoDB();
}
public void loadTutorialConfig() {
loadUsingMongoDB();
}
}

View file

@ -5,18 +5,24 @@ import static me.unurled.raxen.utils.Utils.debug;
import java.util.Objects; import java.util.Objects;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
import me.unurled.raxen.components.entity.other.MobData;
import me.unurled.raxen.components.entity.player.RaxenPlayer;
import me.unurled.raxen.manager.entity.PlayerManager; import me.unurled.raxen.manager.entity.PlayerManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.attribute.Attribute; import org.bukkit.attribute.Attribute;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByBlockEvent; import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.metadata.Metadatable;
import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
import org.bukkit.projectiles.ProjectileSource;
public class DamageEntity implements Listener { public class DamageEntity implements Listener {
@ -29,18 +35,127 @@ public class DamageEntity implements Listener {
} }
/** /**
* fired when an entity is damaged by another entity * fired when an entity is damaged by something TODO: calculate damage and apply it to the
* calculates the damage and apply it to the entity * entity
* @param e *
* @param e event
*/ */
@EventHandler @EventHandler
public void entityDamage(EntityDamageEvent e) {
e.setCancelled(true);
e.setDamage(0);
e.getEntity().setFireTicks(0);
if (e instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent ev2 = (EntityDamageByEntityEvent) e;
ev2.setCancelled(true);
Entity attacker = ev2.getDamager();
Entity defender = ev2.getEntity();
if (attacker instanceof Player) {
PlayerManager pm = main.getManager().getPlayerManager();
if (defender instanceof Player) {
// attack between players
RaxenPlayer rx = pm.getRaxenPlayer((Player) attacker);
RaxenPlayer rx2 = pm.getRaxenPlayer((Player) defender);
if (rx != null && rx2 != null) {
rx.attackPlayer(rx2);
}
} else {
// attack between player and mob
RaxenPlayer rx = pm.getRaxenPlayer((Player) attacker);
MobData re = main.getManager().getEntityManager().getSpawnedMob().get(
defender.getUniqueId());
if (rx != null) {
rx.attackMob(re);
}
}
} else if (attacker instanceof Projectile) {
boolean projectile = true;
ProjectileSource source = ((Projectile) attacker).getShooter();
double rpgKnockback = -1;
int rpgDamage = -1;
if (attacker != null) {
Metadatable sourceMeta = (Metadatable) attacker;
// TODO: check metadata
}
if (source == defender) {
attacker.remove();
return;
}
if (source instanceof Player) {
RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(
(Player) source);
if (defender instanceof Player) {
RaxenPlayer rx2 = main.getManager().getPlayerManager().getRaxenPlayer(
(Player) defender);
// range attack between players
if (rpgKnockback >= 0) {
rx.attackPlayer(rx2, rpgDamage, projectile, rpgKnockback);
} else {
rx.attackPlayer(rx2, rpgDamage, projectile);
}
} else {
MobData mb = main.getManager().getEntityManager().getSpawnedMob().get(
defender.getUniqueId());
if (rx != null && mb != null) {
if (rpgKnockback >= 0) {
rx.attackMob(mb, rpgKnockback, rpgDamage, projectile);
} else {
rx.attackMob(mb, rpgDamage, projectile);
}
}
// range attack between player and mob
}
} else {
if (defender instanceof Player) {
MobData a = main.getManager().getEntityManager().getSpawnedMob().get(
attacker.getUniqueId());
RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer(
(Player) defender);
if (a != null && d != null) {
a.attack(d, rpgDamage, projectile);
}
// range attack between mob and player
} else {
// range attack between mobs
}
}
attacker.remove();
} else {
if (defender instanceof Player) {
MobData a = main.getManager().getEntityManager().getSpawnedMob().get(
attacker.getUniqueId());
RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer(
(Player) defender);
if (a != null && d != null) {
a.attack(d);
}
// attack between mob and player
} else {
// attack between mobs
}
}
}
}
/**
* fired when an entity is damaged by another entity calculates the damage and apply it to the
* entity
*
* @param e
*/
@Deprecated
// @EventHandler
public void entityDamageByEntity(EntityDamageByEntityEvent e) { public void entityDamageByEntity(EntityDamageByEntityEvent e) {
if ( if (
!(e.getEntity() instanceof LivingEntity) || !(e.getEntity() instanceof LivingEntity) ||
!(e.getDamager() instanceof LivingEntity) !(e.getDamager() instanceof LivingEntity)
) { ) {
debug("Not Living Entity, Some block falling shit or block entities"); debug(
"Not Living Entity, Some block falling shit or block entities"
);
} else { } else {
e.setCancelled(true);
e.setDamage(0); e.setDamage(0);
Integer damage = 1; Integer damage = 1;
Integer strength = 0; Integer strength = 0;
@ -72,10 +187,16 @@ public class DamageEntity implements Listener {
PersistentDataContainer data = PersistentDataContainer data =
entityDamager.getPersistentDataContainer(); entityDamager.getPersistentDataContainer();
if ( if (
data.has(entityNamespacedKey.strength, PersistentDataType.INTEGER) data.has(
entityNamespacedKey.strength,
PersistentDataType.INTEGER
)
) { ) {
strength = strength =
data.get(entityNamespacedKey.strength, PersistentDataType.INTEGER); data.get(
entityNamespacedKey.strength,
PersistentDataType.INTEGER
);
} }
itemStrength = itemStrength =
pm.getItemStrength().getItem((LivingEntity) entityDamager); pm.getItemStrength().getItem((LivingEntity) entityDamager);
@ -93,16 +214,34 @@ public class DamageEntity implements Listener {
Entity entityVictim = e.getEntity(); Entity entityVictim = e.getEntity();
PersistentDataContainer data = PersistentDataContainer data =
entityVictim.getPersistentDataContainer(); entityVictim.getPersistentDataContainer();
if (data.has(entityNamespacedKey.defense, PersistentDataType.INTEGER)) { if (
data.has(
entityNamespacedKey.defense,
PersistentDataType.INTEGER
)
) {
defense = defense =
data.get(entityNamespacedKey.defense, PersistentDataType.INTEGER); data.get(
entityNamespacedKey.defense,
PersistentDataType.INTEGER
);
} }
if (data.has(entityNamespacedKey.health, PersistentDataType.INTEGER)) { if (
data.has(
entityNamespacedKey.health,
PersistentDataType.INTEGER
)
) {
health = health =
data.get(entityNamespacedKey.health, PersistentDataType.INTEGER); data.get(
entityNamespacedKey.health,
PersistentDataType.INTEGER
);
} }
itemDefense = pm.getItemDefense().getItem((LivingEntity) entityVictim); itemDefense =
itemHealth = pm.getItemHealth().getItem((LivingEntity) entityVictim); pm.getItemDefense().getItem((LivingEntity) entityVictim);
itemHealth =
pm.getItemHealth().getItem((LivingEntity) entityVictim);
} }
debug( debug(
main, main,
@ -159,9 +298,11 @@ public class DamageEntity implements Listener {
/** /**
* damage made by blocks on entity * damage made by blocks on entity
*
* @param e * @param e
*/ */
@EventHandler @Deprecated
// @EventHandler
public void entityDamageByBlock(EntityDamageByBlockEvent e) { public void entityDamageByBlock(EntityDamageByBlockEvent e) {
e.setDamage(0); e.setDamage(0);
if (e.getEntity() instanceof Player) { if (e.getEntity() instanceof Player) {

View file

@ -5,6 +5,7 @@ import static me.unurled.raxen.utils.Utils.debug;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
import me.unurled.raxen.components.entity.other.EntityUtils; import me.unurled.raxen.components.entity.other.EntityUtils;
import org.bukkit.entity.Display;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -26,18 +27,24 @@ public class SpawnEvent implements Listener {
} }
/** /**
* when a new entity spawns * when a new entity spawns adds all persistent data container
* adds all persistent data container *
* @param e * @param e
*/ */
@EventHandler @EventHandler
public void Spawn(EntitySpawnEvent e) { public void Spawn(EntitySpawnEvent e) {
e.getEntity().getWorld().spawn(e.getLocation(), Display.class);
if (e.getEntity() instanceof Player) { if (e.getEntity() instanceof Player) {
//player stuff dont want to talk about it; already doing it in player join event //player stuff dont want to talk about it; already doing it in player join event
debug(main, "Player: " + ((Player) e.getEntity()).getName()); debug(main, "Player: " + ((Player) e.getEntity()).getName());
} else if ( } else if (
e.getEntity().getType() != EntityType.DROPPED_ITEM && e.getEntity().getType() != EntityType.DROPPED_ITEM &&
e.getEntity().getType() != EntityType.FALLING_BLOCK e.getEntity().getType() != EntityType.FALLING_BLOCK &&
e.getEntity().getType() != EntityType.ARROW &&
e.getEntity().getType() != EntityType.ITEM_DISPLAY &&
e.getEntity().getType() != EntityType.BLOCK_DISPLAY &&
e.getEntity().getType() != EntityType.TEXT_DISPLAY &&
!(e.getEntity() instanceof Display)
) { ) {
debug(main, e.getEntity().getName()); debug(main, e.getEntity().getName());
if ( if (
@ -60,7 +67,10 @@ public class SpawnEvent implements Listener {
0 0
); );
} }
main.getManager().getEntityManager().registerEntity(e.getEntity());
entityUtils.updateSkills((LivingEntity) e.getEntity()); entityUtils.updateSkills((LivingEntity) e.getEntity());
// add nametag
} }
} }
} }

View file

@ -34,7 +34,9 @@ public class ArmorEvent implements Listener {
.getPlayerManager(); .getPlayerManager();
Entity entity = player; Entity entity = player;
Attributes attributes = new Attributes(main); Attributes attributes = new Attributes(main);
if (e.getOldItem() != null && e.getOldItem().getType() != Material.AIR) { if (
e.getOldItem() != null && e.getOldItem().getType() != Material.AIR
) {
ItemStack oldItem = e.getOldItem(); ItemStack oldItem = e.getOldItem();
NBTItem nbti = new NBTItem(oldItem); NBTItem nbti = new NBTItem(oldItem);
if (nbti.hasTag("SPEED")) { if (nbti.hasTag("SPEED")) {
@ -50,7 +52,9 @@ public class ArmorEvent implements Listener {
pm.getStrength().remove(entity, nbti.getInteger("STRENGTH")); pm.getStrength().remove(entity, nbti.getInteger("STRENGTH"));
} }
} }
if (e.getNewItem() != null && e.getNewItem().getType() != Material.AIR) { if (
e.getNewItem() != null && e.getNewItem().getType() != Material.AIR
) {
ItemStack newItem = e.getNewItem(); ItemStack newItem = e.getNewItem();
NBTItem nbti = new NBTItem(newItem); NBTItem nbti = new NBTItem(newItem);
if (nbti.hasTag("SPEED")) { if (nbti.hasTag("SPEED")) {

View file

@ -25,7 +25,9 @@ public class CloseInventoryEvent implements Listener {
Component title = e.getView().title(); Component title = e.getView().title();
if (title.toString().contains("Ender Chest")) { if (title.toString().contains("Ender Chest")) {
playerManager = playerManager =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() (
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen")
).getManager()
.getPlayerManager(); .getPlayerManager();
playerManager.getRaxenPlayer(player).setStorage(e.getInventory()); playerManager.getRaxenPlayer(player).setStorage(e.getInventory());
} }

View file

@ -0,0 +1,13 @@
package me.unurled.raxen.listener.player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.FoodLevelChangeEvent;
public class FoodLevelEvent implements Listener {
@EventHandler
public void FoodLevelChange(FoodLevelChangeEvent e) {
e.setFoodLevel(20);
}
}

View file

@ -1,5 +1,6 @@
package me.unurled.raxen.listener.player; package me.unurled.raxen.listener.player;
import de.tr7zw.nbtapi.NBT;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -11,9 +12,16 @@ public class InteractEvent implements Listener {
@EventHandler @EventHandler
public void PlayerInteractEvent(PlayerInteractEvent e) { public void PlayerInteractEvent(PlayerInteractEvent e) {
// Player p = e.getPlayer(); Player p = e.getPlayer();
// if (e.hasItem()) { if (e.hasItem()) {
// ItemStack i = e.getItem(); ItemStack i = e.getItem();
// } if (i != null && i.getType() != Material.AIR) {
String id = NBT.get(i, nbt -> nbt.getString("ID"));
if (id != null && !id.isEmpty()) {
if (id.equals("PHONE")) {
}
}
}
}
} }
} }

View file

@ -47,18 +47,29 @@ public class ItemHandEvent implements Listener {
java.lang.reflect.Method method = null; java.lang.reflect.Method method = null;
try { try {
method = pm.getClass().getMethod("getItem" + s); method = pm.getClass().getMethod("getItem" + s);
} catch (SecurityException | NoSuchMethodException exception) {} } catch (
SecurityException | NoSuchMethodException exception
) {}
if (method != null) { if (method != null) {
me.unurled.raxen.components.entity.Attributes.Attribute attribute = me.unurled.raxen.components.entity.Attributes.Attribute attribute =
null; null;
try { try {
attribute = (Attribute) method.invoke(pm, (Object) null); attribute = (Attribute) method.invoke(pm);
} catch ( } catch (
InvocationTargetException | IllegalAccessException ignored InvocationTargetException
| IllegalAccessException ignored
) {} ) {}
if (attribute != null) { if (attribute != null) {
attribute.remove(player, nbti.getInteger(s.toUpperCase())); attribute.remove(
debug("removed " + s + " for player " + player.getName()); player,
nbti.getInteger(s.toUpperCase())
);
debug(
"removed " +
s +
" for player " +
player.getName()
);
} }
} }
} }
@ -83,18 +94,26 @@ public class ItemHandEvent implements Listener {
java.lang.reflect.Method method = null; java.lang.reflect.Method method = null;
try { try {
method = pm.getClass().getMethod("getItem" + s); method = pm.getClass().getMethod("getItem" + s);
} catch (SecurityException | NoSuchMethodException exception) {} } catch (
SecurityException | NoSuchMethodException exception
) {}
if (method != null) { if (method != null) {
me.unurled.raxen.components.entity.Attributes.Attribute attribute = me.unurled.raxen.components.entity.Attributes.Attribute attribute =
null; null;
try { try {
attribute = (Attribute) method.invoke(pm, (Object) null); attribute = (Attribute) method.invoke(pm);
} catch ( } catch (
InvocationTargetException | IllegalAccessException ignored InvocationTargetException
| IllegalAccessException ignored
) {} ) {}
if (attribute != null) { if (attribute != null) {
attribute.add(player, nbti.getInteger(s.toUpperCase())); attribute.add(
debug("add " + s + " for player " + player.getName()); player,
nbti.getInteger(s.toUpperCase())
);
debug(
"add " + s + " for player " + player.getName()
);
} }
} }
} }

View file

@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.scheduler.BukkitRunnable;
public class JoinEvent implements Listener { public class JoinEvent implements Listener {
@ -30,6 +31,7 @@ public class JoinEvent implements Listener {
/** /**
* when player joins, load from config all stats * when player joins, load from config all stats
*
* @param e * @param e
*/ */
@EventHandler @EventHandler
@ -40,6 +42,13 @@ public class JoinEvent implements Listener {
resourcePack.join(player); resourcePack.join(player);
playerManager.getRaxenPlayer(player).isRaxenPlayer(true); playerManager.getRaxenPlayer(player).isRaxenPlayer(true);
playerManager.registerActionBar(player); playerManager.registerActionBar(player);
new BukkitRunnable() {
@Override
public void run() {
main.getManager().getTutorialManager().startTutorial(player);
}
}.runTaskLater(main, 40L);
PlayerUtils.updateSkills(main, player); PlayerUtils.updateSkills(main, player);
} }
} }

View file

@ -2,7 +2,6 @@ package me.unurled.raxen.listener.player;
import java.io.IOException; import java.io.IOException;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.player.PlayerUtils;
import me.unurled.raxen.config.PlayerConfig; import me.unurled.raxen.config.PlayerConfig;
import me.unurled.raxen.manager.entity.PlayerManager; import me.unurled.raxen.manager.entity.PlayerManager;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -22,6 +21,7 @@ public class LeaveEvent implements Listener {
/** /**
* when player leaves, saves everything * when player leaves, saves everything
*
* @param e * @param e
* @throws IOException * @throws IOException
*/ */

View file

@ -0,0 +1,53 @@
package me.unurled.raxen.listener.player;
import java.util.Set;
import me.unurled.raxen.Raxen;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.event.player.PlayerAnimationType;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
public class SpellsEvent implements Listener {
Raxen main;
public SpellsEvent(Raxen main) {
this.main = main;
}
@EventHandler
public void onSpellClickOnEntity(PlayerInteractEntityEvent event) {
Player p = event.getPlayer();
main.getManager().getSpellManager().click(p, false);
}
@EventHandler
public void event(PlayerAnimationEvent event) {
Block focused = event.getPlayer().getTargetBlock((Set<Material>) null, 5);
if (event.getAnimationType() == PlayerAnimationType.ARM_SWING
&& focused.getType() != Material.AIR
&& event.getPlayer().getGameMode() == GameMode.ADVENTURE) {
main.getManager().getSpellManager().click(event.getPlayer(), true);
}
}
@EventHandler
public void onSpellClicks(PlayerInteractEvent event) {
Player p = event.getPlayer();
if (event.getAction() == Action.LEFT_CLICK_AIR
|| event.getAction() == Action.LEFT_CLICK_BLOCK) {
main.getManager().getSpellManager().click(p, true);
} else if (event.getAction() == Action.RIGHT_CLICK_AIR
|| event.getAction() == Action.RIGHT_CLICK_BLOCK) {
main.getManager().getSpellManager().click(p, false);
}
}
}

View file

@ -2,13 +2,27 @@ package me.unurled.raxen.manager;
import lombok.Getter; import lombok.Getter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.manager.entity.*; import me.unurled.raxen.manager.entity.EntityManager;
import me.unurled.raxen.manager.server.*; import me.unurled.raxen.manager.entity.ItemManager;
import me.unurled.raxen.manager.entity.LootManager;
import me.unurled.raxen.manager.entity.PartyManager;
import me.unurled.raxen.manager.entity.PlayerManager;
import me.unurled.raxen.manager.entity.SpellManager;
import me.unurled.raxen.manager.entity.StorageManager;
import me.unurled.raxen.manager.server.BuildManager;
import me.unurled.raxen.manager.server.CommandManager;
import me.unurled.raxen.manager.server.DungeonsManager;
import me.unurled.raxen.manager.server.GlyphManager;
import me.unurled.raxen.manager.server.LibsManager;
import me.unurled.raxen.manager.server.ListenerManager;
import me.unurled.raxen.manager.server.ResourcePackManager;
import me.unurled.raxen.manager.server.TutorialManager;
import me.unurled.raxen.manager.server.WorldManager;
import me.unurled.raxen.utils.libs.Multiverse; import me.unurled.raxen.utils.libs.Multiverse;
/** /**
* Manager class, it enables all features of the plugin. * Manager class, it enables all features of the plugin. From commands, to Item and worlds, it links
* From commands, to Item and worlds, it links all of them together. * all of them together.
*/ */
public class Manager { public class Manager {
@ -48,8 +62,24 @@ public class Manager {
@Getter @Getter
private Multiverse multiverse; private Multiverse multiverse;
@Getter
private TutorialManager tutorialManager;
@Getter
private PartyManager partyManager;
@Getter
private SpellManager spellManager;
@Getter
private GlyphManager glyphManager;
@Getter
private BuildManager buildManager;
/** /**
* Create an instance of all managers. * Create an instance of all managers.
*
* @param main Raxen * @param main Raxen
*/ */
public void set(Raxen main) { public void set(Raxen main) {
@ -67,5 +97,10 @@ public class Manager {
entityManager = new EntityManager(main); entityManager = new EntityManager(main);
lootManager = new LootManager(main); lootManager = new LootManager(main);
dungeonsManager = new DungeonsManager(main); dungeonsManager = new DungeonsManager(main);
tutorialManager = new TutorialManager();
partyManager = new PartyManager(main);
spellManager = new SpellManager(main);
glyphManager = new GlyphManager(main);
buildManager = new BuildManager(main);
} }
} }

View file

@ -2,18 +2,43 @@ package me.unurled.raxen.manager.entity;
import static me.unurled.raxen.utils.Utils.debug; import static me.unurled.raxen.utils.Utils.debug;
import eu.decentsoftware.holograms.api.DHAPI;
import eu.decentsoftware.holograms.api.holograms.Hologram;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.Attributes.Defense;
import me.unurled.raxen.components.entity.Attributes.Health;
import me.unurled.raxen.components.entity.Attributes.ItemDefense;
import me.unurled.raxen.components.entity.Attributes.ItemHealth;
import me.unurled.raxen.components.entity.Attributes.ItemLuck;
import me.unurled.raxen.components.entity.Attributes.ItemMana;
import me.unurled.raxen.components.entity.Attributes.ItemSpeed;
import me.unurled.raxen.components.entity.Attributes.ItemStrength;
import me.unurled.raxen.components.entity.Attributes.Luck;
import me.unurled.raxen.components.entity.Attributes.Mana;
import me.unurled.raxen.components.entity.Attributes.MaxHealth;
import me.unurled.raxen.components.entity.Attributes.MaxMana;
import me.unurled.raxen.components.entity.Attributes.MaxManaBuilder;
import me.unurled.raxen.components.entity.Attributes.Speed;
import me.unurled.raxen.components.entity.Attributes.Strength;
import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
import me.unurled.raxen.components.entity.other.MobData;
import me.unurled.raxen.components.entity.other.MobType;
import me.unurled.raxen.components.entity.other.RaxenEntity;
import me.unurled.raxen.utils.Tags;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
public class EntityManager { public class EntityManager {
@ -21,21 +46,70 @@ public class EntityManager {
@Getter @Getter
@Setter @Setter
public List<EntityType> list = new ArrayList<>(); private List<EntityType> list = new ArrayList<>();
public HashMap<String, me.unurled.raxen.components.entity.other.custom.Entity> entities = @Getter
new HashMap<>(); private HashMap<String, MobType> mobTypes;
@Getter
private final HashMap<UUID, MobData> spawnedMob;
@Getter
private HashMap<UUID, MobData> spawnedMobsOnlyMain;
public HashMap<UUID, Entity> livingEntities = new HashMap<>(); @Getter
private final HashMap<String, me.unurled.raxen.components.entity.Attributes.Attribute> attribute;
private final HashMap<String, me.unurled.raxen.components.entity.other.RaxenEntity> entities;
private final HashMap<UUID, Entity> livingEntities = new HashMap<>();
private HashMap<UUID, BukkitTask> nameTags;
public EntityManager(Raxen main) { public EntityManager(Raxen main) {
this.main = main; this.main = main;
entities = new HashMap<>();
attribute = new HashMap<>();
mobTypes = new HashMap<>();
spawnedMob = new HashMap<>();
spawnedMobsOnlyMain = new HashMap<>();
nameTags = new HashMap<>();
reload();
registerAttributes();
} }
public void registerLivingEntities(World world) {} public void reload() {
Collection<MobData> collection = new ArrayList<>();
collection.addAll(spawnedMob.values());
for (MobData mobData : collection) {
// mobData.entity.die(false);
}
}
public void registerLivingEntities(World world) {
}
public void registerEntity(Entity entity) {
/* RaxenEntity raxenEntity = new RaxenEntity();
raxenEntity.register(entity);
entities.put(entity.getUniqueId(), raxenEntity); */
}
public void setNameTag(Entity entity) {
Hologram holo = Tags.createNameTag(main, entity);
if (holo == null) {
return;
}
BukkitTask run = new BukkitRunnable() {
@Override
public void run() {
DHAPI.moveHologram(holo, entity.getLocation());
}
}.runTaskAsynchronously(main);
nameTags.put(entity.getUniqueId(), run);
}
/** /**
* used to register entities using fileconfigs but rapidly abandoned * used to register entities using fileconfigs but rapidly abandoned
*
* @param file * @param file
*/ */
@Deprecated @Deprecated
@ -44,4 +118,121 @@ public class EntityManager {
World world = Bukkit.getWorld(file.getString("world")); World world = Bukkit.getWorld(file.getString("world"));
String name = file.getString("name"); String name = file.getString("name");
} }
public RaxenEntity getEntity(UUID uuid) {
return null;
}
public RaxenEntity getEntity(Entity entity) {
return entities.get(entity.getUniqueId());
}
/**
* register all Attributes in me.unurled.raxen.components.entity.Attributes;
*/
public void registerAttributes() {
EntityNamespacedKey key = new EntityNamespacedKey(main);
// Attributes
Defense defense = new Defense(key.defense, "DEFENSE");
attribute.put("DEFENSE", defense);
Health health = new Health(key.health, "HEALTH");
attribute.put("HEALTH", health);
ItemDefense itemDefense = new ItemDefense(key.itemDefense, "ITEM_DEFENSE");
attribute.put("ITEM_DEFENSE", itemDefense);
ItemHealth itemHealth = new ItemHealth(key.itemHealth, "ITEM_HEALTH");
attribute.put("ITEM_HEALTH", itemHealth);
ItemLuck itemLuck = new ItemLuck(key.itemLuck, "ITEM_LUCK");
attribute.put("ITEM_LUCK", itemLuck);
ItemMana itemMana = new ItemMana(key.itemMana, "ITEM_MANA");
attribute.put("ITEM_MANA", itemMana);
ItemSpeed itemSpeed = new ItemSpeed(key.itemSpeed, "ITEM_SPEED");
attribute.put("ITEM_SPEED", itemSpeed);
ItemStrength itemStrength = new ItemStrength(key.itemStrength, "ITEM_STRENGTH");
attribute.put("ITEM_STRENGTH", itemStrength);
Luck luck = new Luck(key.luck, "LUCK");
attribute.put("LUCK", luck);
Mana mana = new Mana(key.mana, "MANA");
attribute.put("MANA", mana);
MaxMana maxMana = new MaxManaBuilder()
.setNamespacekey(key.maxMana)
.setName("MAX_MANA")
.createMaxMana();
attribute.put("MAX_MANA", maxMana);
MaxHealth maxHealth = new MaxHealth(key.maxHealth, "MAX_HEALTH");
attribute.put("MAX_HEALTH", maxHealth);
Speed speed = new Speed(key.speed, "SPEED");
attribute.put("SPEED", speed);
Strength strength = new Strength(key.strength, "STRENGTH");
attribute.put("STRENGTH", strength);
}
public Defense getDefense() {
return (Defense) attribute.get("DEFENSE");
}
public Health getHealth() {
return (Health) attribute.get("HEALTH");
}
public ItemDefense getItemDefense() {
return (ItemDefense) attribute.get("ITEM_DEFENSE");
}
public ItemHealth getItemHealth() {
return (ItemHealth) attribute.get("ITEM_HEALTH");
}
public ItemLuck getItemLuck() {
return (ItemLuck) attribute.get("ITEM_LUCK");
}
public ItemMana getItemMana() {
return (ItemMana) attribute.get("ITEM_MANA");
}
public ItemSpeed getItemSpeed() {
return (ItemSpeed) attribute.get("ITEM_SPEED");
}
public ItemStrength getItemStrength() {
return (ItemStrength) attribute.get("ITEM_STRENGTH");
}
public Luck getLuck() {
return (Luck) attribute.get("LUCK");
}
public Mana getMana() {
return (Mana) attribute.get("MANA");
}
public MaxMana getMaxMana() {
return (MaxMana) attribute.get("MAX_MANA");
}
public MaxHealth getMaxHealth() {
return (MaxHealth) attribute.get("MAX_HEALTH");
}
public Speed getSpeed() {
return (Speed) attribute.get("SPEED");
}
public Strength getStrength() {
return (Strength) attribute.get("STRENGTH");
}
} }

View file

@ -1,6 +1,8 @@
package me.unurled.raxen.manager.entity; package me.unurled.raxen.manager.entity;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.utils.Utils.colorTextComp;
import static me.unurled.raxen.utils.Utils.debug;
import static me.unurled.raxen.utils.Utils.error;
import de.tr7zw.nbtapi.NBTItem; import de.tr7zw.nbtapi.NBTItem;
import java.io.File; import java.io.File;
@ -8,13 +10,14 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
import lombok.Getter; import lombok.Getter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.items.NBT; import me.unurled.raxen.components.items.ItemBuilder;
import me.unurled.raxen.components.items.NBTNames;
import me.unurled.raxen.components.items.custom.Item; import me.unurled.raxen.components.items.custom.Item;
import me.unurled.raxen.utils.Utils; import me.unurled.raxen.config.ItemConfig;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.TextComponent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -33,7 +36,10 @@ public class ItemManager {
@Getter @Getter
private HashMap<String, ItemStack> list = new HashMap<>(); private HashMap<String, ItemStack> list = new HashMap<>();
private NBT nbt = new NBT(); private NBTNames nbt = new NBTNames();
private ItemConfig itemConfig;
private String[] items;
private Map<File, Map<String, ItemBuilder>> map;
public ItemManager(Raxen main) { public ItemManager(Raxen main) {
this.main = main; this.main = main;
@ -45,6 +51,13 @@ public class ItemManager {
* register manually all item in Raxen * register manually all item in Raxen
*/ */
private void registerItem() { private void registerItem() {
itemConfig = new ItemConfig(main);
map = itemConfig.parseItemConfigs();
final List<String> itemsList = new ArrayList<>();
for (final Map<String, ItemBuilder> subMap : map.values()) {
itemsList.addAll(subMap.keySet());
}
items = itemsList.toArray(new String[0]);
me.unurled.raxen.components.items.custom.List lisst = me.unurled.raxen.components.items.custom.List lisst =
new me.unurled.raxen.components.items.custom.List(main); new me.unurled.raxen.components.items.custom.List(main);
for (Item items : lisst.getItems()) { for (Item items : lisst.getItems()) {
@ -75,13 +88,17 @@ public class ItemManager {
FileConfiguration customItem = new YamlConfiguration(); FileConfiguration customItem = new YamlConfiguration();
try { try {
customItem.load(listFile[i].listFiles()[a]); customItem.load(listFile[i].listFiles()[a]);
} catch (IOException | InvalidConfigurationException e) { } catch (
IOException | InvalidConfigurationException e
) {
e.printStackTrace(); e.printStackTrace();
} }
registerItem(customItem); registerItem(customItem);
} else if (listFile[i].listFiles()[a].isDirectory()) { } else if (listFile[i].listFiles()[a].isDirectory()) {
error( error(
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), (Raxen) Bukkit
.getPluginManager()
.getPlugin("Raxen"),
"Can't use more than 2 folder to get Items.yml" "Can't use more than 2 folder to get Items.yml"
); );
} }
@ -92,6 +109,7 @@ public class ItemManager {
/** /**
* Old system to register for a file config an item inside. * Old system to register for a file config an item inside.
*
* @param file * @param file
*/ */
@Deprecated @Deprecated
@ -99,7 +117,9 @@ public class ItemManager {
debug(main, file.getString("id")); debug(main, file.getString("id"));
ItemStack it = new ItemStack( ItemStack it = new ItemStack(
Objects.requireNonNull( Objects.requireNonNull(
Material.getMaterial((String) Objects.requireNonNull(file.get("id"))) Material.getMaterial(
(String) Objects.requireNonNull(file.get("id"))
)
) )
); );
ItemMeta itm = it.getItemMeta(); ItemMeta itm = it.getItemMeta();
@ -108,7 +128,9 @@ public class ItemManager {
if (lore_obj instanceof List<?> lore) { if (lore_obj instanceof List<?> lore) {
List<Component> lores = new ArrayList<>(); List<Component> lores = new ArrayList<>();
for (Object s : lore) { for (Object s : lore) {
if (s == null) continue; if (s == null) {
continue;
}
if (s instanceof String) { if (s instanceof String) {
TextComponent textComponent = colorTextComp((String) s); TextComponent textComponent = colorTextComp((String) s);
lores.add(textComponent); lores.add(textComponent);
@ -123,21 +145,24 @@ public class ItemManager {
); );
it.setItemMeta(itm); it.setItemMeta(itm);
NBTItem nbti = new NBTItem(it); NBTItem nbti = new NBTItem(it);
nbti.setInteger(NBT.SPEED, file.getInt("speed")); nbti.setInteger(NBTNames.SPEED, file.getInt("speed"));
nbti.setInteger(NBT.HEALTH, file.getInt("health")); nbti.setInteger(NBTNames.HEALTH, file.getInt("health"));
nbti.setInteger(NBT.DEFENSE, file.getInt("defense")); nbti.setInteger(NBTNames.DEFENSE, file.getInt("defense"));
nbti.setInteger(NBT.STRENGTH, file.getInt("strength")); nbti.setInteger(NBTNames.STRENGTH, file.getInt("strength"));
nbti.setString(NBT.ID, file.getString("customId")); nbti.setString(NBTNames.ID, file.getString("customId"));
nbti.setString(NBT.CUSTOM_ABILITY, file.getString("custom_ability")); nbti.setString(
nbti.setDouble(NBT.DROP_RATE, file.getDouble("drop_rate")); NBTNames.CUSTOM_ABILITY,
file.getString("custom_ability")
);
nbti.setDouble(NBTNames.DROP_RATE, file.getDouble("drop_rate"));
it = nbti.getItem(); it = nbti.getItem();
//it = setLoreFromNBT(it); deprecated //it = setLoreFromNBT(it); deprecated
list.put(file.getString("customId"), it); list.put(file.getString("customId"), it);
} }
/** /**
* register Item into the custom item list * register Item into the custom item list Need that the Itm is already set with custom nbt!
* Need that the Itm is already set with custom nbt! *
* @param itm an ItemStack with already set custom nbt using NBTapi * @param itm an ItemStack with already set custom nbt using NBTapi
*/ */
public void registerItem(ItemStack itm) { public void registerItem(ItemStack itm) {

View file

@ -0,0 +1,65 @@
package me.unurled.raxen.manager.entity;
import java.util.ArrayList;
import lombok.Getter;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.player.RaxenPlayer;
import me.unurled.raxen.components.party.Party;
import me.unurled.raxen.utils.Utils;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
public class PartyManager {
Raxen main;
public static final int MAX_SIZE = 10;
public static final Component PREFIX = Utils.colorComp("<reset><gray>[Party] </gray><yellow>");
public static final Component PREFIX_SYSTEM = Utils.colorComp(
"<reset><gray>[Party] </gray><dark_aqua>");
@Getter
private ArrayList<Party> parties;
public PartyManager(Raxen main) {
this.main = main;
}
public void initialize() {
parties = new ArrayList<Party>();
new BukkitRunnable() {
@Override
public void run() {
for (int k = 0; k < parties.size(); k++) {
Party p = parties.get(k);
if (p.getPlayers().size() == 0) {
parties.remove(k);
if (p != null) {
p.destroy();
}
k--;
if (k < 0) {
k = 0;
}
}
}
}
}.runTaskTimerAsynchronously(main, 0L, 20L * 30L);
}
public void createParty(Player p, RaxenPlayer rx) {
if (rx.getParty() != null) {
p.sendMessage(PREFIX_SYSTEM.append(Utils.colorComp(
"<reset><dark_aqua>You are already in a party!\nLeave your current party to create a new one.")));
return;
} else {
Party party = new Party(main, p);
rx.setParty(party);
parties.add(party);
p.sendMessage(PREFIX_SYSTEM.append(Utils.colorComp(
"<reset><dark_aqua>You have created a party!")));
}
}
}

View file

@ -1,18 +1,34 @@
package me.unurled.raxen.manager.entity; package me.unurled.raxen.manager.entity;
import static me.unurled.raxen.utils.Utils.*; import static me.unurled.raxen.components.entity.player.PlayerUtils.actionBarPlayer;
import static me.unurled.raxen.utils.Utils.colorTextComp;
import static me.unurled.raxen.utils.Utils.debug;
import java.util.HashMap; import java.util.HashMap;
import java.util.UUID; import java.util.UUID;
import lombok.Getter; import lombok.Getter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.Attributes.*; import me.unurled.raxen.components.entity.Attributes.Defense;
import me.unurled.raxen.components.entity.Attributes.Health;
import me.unurled.raxen.components.entity.Attributes.ItemDefense;
import me.unurled.raxen.components.entity.Attributes.ItemHealth;
import me.unurled.raxen.components.entity.Attributes.ItemLuck;
import me.unurled.raxen.components.entity.Attributes.ItemMana;
import me.unurled.raxen.components.entity.Attributes.ItemSpeed;
import me.unurled.raxen.components.entity.Attributes.ItemStrength;
import me.unurled.raxen.components.entity.Attributes.Luck;
import me.unurled.raxen.components.entity.Attributes.Mana;
import me.unurled.raxen.components.entity.Attributes.MaxHealth;
import me.unurled.raxen.components.entity.Attributes.MaxMana;
import me.unurled.raxen.components.entity.Attributes.MaxManaBuilder;
import me.unurled.raxen.components.entity.Attributes.Speed;
import me.unurled.raxen.components.entity.Attributes.Strength;
import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
import me.unurled.raxen.components.entity.player.RaxenPlayer; import me.unurled.raxen.components.entity.player.RaxenPlayer;
import me.unurled.raxen.components.entity.player.classes.Class; import me.unurled.raxen.components.entity.player.classes.Class;
import me.unurled.raxen.components.entity.player.classes.Classes; import me.unurled.raxen.components.entity.player.classes.Classes;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
public class PlayerManager { public class PlayerManager {
@ -26,6 +42,8 @@ public class PlayerManager {
private final HashMap<String, me.unurled.raxen.components.entity.Attributes.Attribute> attribute = private final HashMap<String, me.unurled.raxen.components.entity.Attributes.Attribute> attribute =
new HashMap<>(); new HashMap<>();
private HashMap<UUID, RaxenPlayer> raxenPlayer = new HashMap<>();
private Classes classesRegister; private Classes classesRegister;
// Attributes // Attributes
@ -50,34 +68,35 @@ public class PlayerManager {
} }
public RaxenPlayer getRaxenPlayer(Player player) { public RaxenPlayer getRaxenPlayer(Player player) {
return new RaxenPlayer(main, player); RaxenPlayer p = raxenPlayer.get(player.getUniqueId());
return p != null ? p : addRaxenPlayer(player);
}
public RaxenPlayer getRaxenPlayer(UUID uuid) {
RaxenPlayer p = raxenPlayer.get(uuid);
return p != null ? p : addRaxenPlayer(uuid);
}
public RaxenPlayer addRaxenPlayer(Player player) {
RaxenPlayer rp = new RaxenPlayer(main, player);
raxenPlayer.put(player.getUniqueId(), rp);
return rp;
}
public RaxenPlayer addRaxenPlayer(UUID uuid) {
RaxenPlayer rp = new RaxenPlayer(main, Bukkit.getPlayer(uuid));
raxenPlayer.put(uuid, rp);
return rp;
} }
/** /**
* add a task to the player action bar. * add a task to the player action bar.
*
* @param player * @param player
*/ */
public void registerActionBar(Player player) { public void registerActionBar(Player player) {
PlayerManager pm = main.getManager().getPlayerManager(); PlayerManager pm = main.getManager().getPlayerManager();
BukkitTask task = new BukkitRunnable() { BukkitTask task = actionBarPlayer(main, pm, player);
@Override
public void run() {
player.sendActionBar(
colorComp(
"<red>" +
pm.getHealth().get(player) +
"/" +
pm.getMaxHealth().get(player) +
"❤</red> <aqua>" +
pm.getMana().get(player) +
"/" +
pm.getMaxMana().get(player) +
"</aqua>"
)
);
}
}
.runTaskTimerAsynchronously(main, 10, 20);
if (actionBar.containsKey(player.getUniqueId())) { if (actionBar.containsKey(player.getUniqueId())) {
actionBar.replace(player.getUniqueId(), task); actionBar.replace(player.getUniqueId(), task);
} else { } else {
@ -87,6 +106,7 @@ public class PlayerManager {
/** /**
* removes the task of action bar to player * removes the task of action bar to player
*
* @param player * @param player
*/ */
public void unRegisterActionBar(Player player) { public void unRegisterActionBar(Player player) {
@ -107,10 +127,27 @@ public class PlayerManager {
} }
} }
public void unRegisterRaxenPlayer(Player player) {} /**
* Basically replace old task with old action bar with a new BukkitTask
*
* @param player
*/
public void updateActionBar(Player player) {
PlayerManager pm = main.getManager().getPlayerManager();
BukkitTask task = actionBarPlayer(main, pm, player);
if (actionBar.containsKey(player.getUniqueId())) {
actionBar.replace(player.getUniqueId(), task);
} else {
actionBar.put(player.getUniqueId(), task);
}
}
public void unRegisterRaxenPlayer(Player player) {
}
/** /**
* getClasses * getClasses
*
* @return the classes HashMap * @return the classes HashMap
*/ */
public HashMap<String, Class> getClasses() { public HashMap<String, Class> getClasses() {
@ -119,6 +156,7 @@ public class PlayerManager {
/** /**
* add @param to hashmap of classes * add @param to hashmap of classes
*
* @param clas a class instance * @param clas a class instance
* @param id the id of the class * @param id the id of the class
*/ */

View file

@ -0,0 +1,152 @@
package me.unurled.raxen.manager.entity;
import java.util.HashMap;
import java.util.UUID;
import me.unurled.raxen.Raxen;
import me.unurled.raxen.components.entity.player.RaxenPlayer;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class SpellManager {
static Raxen main;
public HashMap<UUID, Caster> casters = new HashMap<>();
public HashMap<UUID, Long> lastPress = new HashMap<>();
public boolean isCasting(Player player) {
if (!casters.containsKey(player.getUniqueId())) {
return false;
}
Caster caster = casters.get(player.getUniqueId());
return caster.state != CastState.NONE;
}
public SpellManager(Raxen main) {
SpellManager.main = main;
}
public enum CastState {
NONE(""), R("Right"), RL("Right-Left"), RLR("Right-Left-Right"), RLL("Right-Left-Left"), RR(
"Right-Right"), RRL("Right-Right-Left"), RRR("Right-Right-Right");
public String string;
@Override
public String toString() {
return string;
}
CastState(String s) {
this.string = s;
}
}
public static class Caster {
public CastState state = CastState.NONE;
public int pressCount = 0;
public void press(boolean left) {
pressCount++;
final int lastPressCount = pressCount;
Bukkit.getScheduler().scheduleSyncDelayedTask(main, new Runnable() {
@Override
public void run() {
if (lastPressCount != pressCount) {
return;
}
clear();
}
}, 20L);
switch (state) {
case NONE:
if (!left) {
state = CastState.R;
}
break;
case R:
if (!left) {
state = CastState.RR;
} else {
state = CastState.RL;
}
break;
case RL:
if (left) {
state = CastState.RLL;
} else {
state = CastState.RLR;
}
break;
case RR:
if (!left) {
state = CastState.RRR;
} else {
state = CastState.RRL;
}
break;
case RLL:
case RLR:
case RRL:
case RRR:
state = CastState.NONE;
break;
default:
break;
}
}
public void clear() {
state = CastState.NONE;
}
}
public static boolean isSpellWeapon(ItemStack it) {
if (it == null || it.getType() == Material.AIR) {
return false;
}
return true;
}
public void click(Player p, boolean left) {
if (p.isGliding()) {
return;
}
if (!casters.containsKey(p.getUniqueId())) {
casters.put(p.getUniqueId(), new Caster());
}
RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(p);
ItemStack it = p.getEquipment().getItemInMainHand();
boolean spellWep = false;
if (it != null) {
spellWep = isSpellWeapon(it);
}
if (rx != null) {
if (lastPress.containsKey(p.getUniqueId())) {
if (System.currentTimeMillis() - lastPress.get(p.getUniqueId()) < 50) {
return;
}
}
lastPress.put(p.getUniqueId(), System.currentTimeMillis());
final Caster c = casters.get(p.getUniqueId());
if (spellWep) {
c.press(left);
} else {
c.clear();
}
// TODO: checkState
}
}
public void checkState(Player p, RaxenPlayer rx, Caster c) {
rx.updateHealthManaDisplay();
ItemStack it = p.getEquipment().getItemInMainHand();
if (c.state == CastState.RLL) {
if (it != null) {
}
}
}
}

View file

@ -3,9 +3,19 @@ package me.unurled.raxen.manager.server;
import lombok.Getter; import lombok.Getter;
import me.unurled.raxen.Raxen; import me.unurled.raxen.Raxen;
import me.unurled.raxen.commands.RaxenCommand; import me.unurled.raxen.commands.RaxenCommand;
import me.unurled.raxen.commands.admin.*; import me.unurled.raxen.commands.admin.BuildCommand;
import me.unurled.raxen.commands.admin.CustomModelDataCommand;
import me.unurled.raxen.commands.admin.EntitiyCommand;
import me.unurled.raxen.commands.admin.ItemListCommand;
import me.unurled.raxen.commands.admin.ItemTo64Command;
import me.unurled.raxen.commands.admin.NbtCommand;
import me.unurled.raxen.commands.admin.ReloadCommand;
import me.unurled.raxen.commands.admin.SpawnEntity;
import me.unurled.raxen.commands.admin.TestGuiCommand;
import me.unurled.raxen.commands.admin.TutorialManagerCommand;
import me.unurled.raxen.commands.player.ClassCommand; import me.unurled.raxen.commands.player.ClassCommand;
import me.unurled.raxen.commands.player.MainGuiCommand; import me.unurled.raxen.commands.player.MainGuiCommand;
import me.unurled.raxen.commands.player.PartyCommand;
import me.unurled.raxen.commands.player.SkillsCommand; import me.unurled.raxen.commands.player.SkillsCommand;
import me.unurled.raxen.commands.player.StorageCommand; import me.unurled.raxen.commands.player.StorageCommand;
@ -28,6 +38,9 @@ public class CommandManager {
private CustomModelDataCommand customModelDataCommand; private CustomModelDataCommand customModelDataCommand;
private MainGuiCommand mainGuiCommand; private MainGuiCommand mainGuiCommand;
private ItemTo64Command itemTo64Command; private ItemTo64Command itemTo64Command;
private TutorialManagerCommand tutorialManagerCommand;
private PartyCommand partyCommand;
private BuildCommand buildCommand;
public CommandManager(Raxen main) { public CommandManager(Raxen main) {
this.main = main; this.main = main;
@ -41,6 +54,9 @@ public class CommandManager {
this.customModelDataCommand = new CustomModelDataCommand(); this.customModelDataCommand = new CustomModelDataCommand();
this.mainGuiCommand = new MainGuiCommand(this.main); this.mainGuiCommand = new MainGuiCommand(this.main);
this.itemTo64Command = new ItemTo64Command(); this.itemTo64Command = new ItemTo64Command();
this.tutorialManagerCommand = new TutorialManagerCommand(main);
this.partyCommand = new PartyCommand(main);
this.buildCommand = new BuildCommand(main);
} }
/** /**
@ -74,7 +90,9 @@ public class CommandManager {
main.getCommand("class").setTabCompleter(classCommand); main.getCommand("class").setTabCompleter(classCommand);
main.getCommand("class").setExecutor(classCommand); main.getCommand("class").setExecutor(classCommand);
main.getCommand("custommodeldata").setTabCompleter(customModelDataCommand); main
.getCommand("custommodeldata")
.setTabCompleter(customModelDataCommand);
main.getCommand("custommodeldata").setExecutor(customModelDataCommand); main.getCommand("custommodeldata").setExecutor(customModelDataCommand);
main.getCommand("main_gui").setTabCompleter(mainGuiCommand); main.getCommand("main_gui").setTabCompleter(mainGuiCommand);
@ -82,5 +100,14 @@ public class CommandManager {
main.getCommand("itemto64").setTabCompleter(itemTo64Command); main.getCommand("itemto64").setTabCompleter(itemTo64Command);
main.getCommand("itemto64").setExecutor(itemTo64Command); main.getCommand("itemto64").setExecutor(itemTo64Command);
main.getCommand("tutorial").setExecutor(tutorialManagerCommand);
main.getCommand("tutorial").setTabCompleter(tutorialManagerCommand);
main.getCommand("party").setExecutor(partyCommand);
main.getCommand("party").setTabCompleter(partyCommand);
main.getCommand("build").setExecutor(buildCommand);
main.getCommand("build").setTabCompleter(buildCommand);
} }
} }

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