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)
- [ ] a leveling system - [ ] 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
- [ ] 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

@ -16,153 +16,167 @@ import org.bukkit.plugin.java.JavaPlugin;
public final class Raxen extends JavaPlugin { public final class Raxen extends JavaPlugin {
private static final String prefix = private static final String prefix =
"<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();
private static Raxen plugin; private static Raxen plugin;
private static Logger logger; private static Logger logger;
private static Config config; private static Config config;
private static PlayerConfig playerConfig; private static PlayerConfig playerConfig;
@Getter @Getter
private ProtocolManager protocolManager; private ProtocolManager protocolManager;
@Getter @Getter
private Manager manager; private Manager manager;
/** /**
* Method when the server launch the plugin. * Method when the server launch the plugin.
*/ */
@Override @Override
public void onEnable() { public void onEnable() {
plugin = this; plugin = this;
logger = getLogger(); logger = getLogger();
version = this.getPluginMeta().getVersion(); version = this.getPluginMeta().getVersion();
manager = new Manager(); manager = new Manager();
manager.set(plugin); manager.set(plugin);
// Config // Config
config = new Config(plugin); config = new Config(plugin);
protocolManager = ProtocolLibrary.getProtocolManager(); protocolManager = ProtocolLibrary.getProtocolManager();
playerConfig = new PlayerConfig(plugin); playerConfig = new PlayerConfig(plugin);
//register Commands and Events //register Commands and Events
registerCommands(); registerCommands();
registerEvents(); registerEvents();
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);
loading = false; loading = false;
}
/**
* register the command in the command manager class.
*/
private void registerCommands() {
manager.getCommandManager().register();
Bukkit
.getConsoleSender()
.sendMessage(colorComp(prefix + "<green>Commands Registered!</green>"));
}
/**
* register the events in the event manager class.
*/
private void registerEvents() {
manager.getListenerManager().register();
Bukkit
.getConsoleSender()
.sendMessage(colorComp(prefix + "<green>Events Registered!</green>"));
}
/**
* Method when the server stops the plugin.
*/
@Override
public void onDisable() {
if (!loading) {
manager.getListenerManager().getServerPingEvent().setLoading(true);
Reload.kickAll();
playerConfig.close();
} }
Bukkit /**
.getConsoleSender() * register the command in the command manager class.
.sendMessage( */
colorComp(prefix + "<red>Server Stopped Successfully!</red>") private void registerCommands() {
); manager.getCommandManager().register();
}
/** Bukkit
* getter for the logger .getConsoleSender()
* @return the plugin logger .sendMessage(
*/ colorComp(prefix + "<green>Commands Registered!</green>")
public Logger getPluginLogger() { );
return logger; }
}
/** /**
* getter for the bukkit's plugin manager * register the events in the event manager class.
* @return plugin manager */
*/ private void registerEvents() {
public PluginManager getPm() { manager.getListenerManager().register();
return pm;
}
/** Bukkit
* return the instance which is launched. .getConsoleSender()
* @return main instance .sendMessage(
*/ colorComp(prefix + "<green>Events Registered!</green>")
public Raxen getPlugin() { );
return plugin; }
}
/** /**
* getter for the raxen prefix * Method when the server stops the plugin.
* @return string prefix */
*/ @Override
public static String getPrefix() { public void onDisable() {
return prefix; if (!loading) {
} manager.getListenerManager().getServerPingEvent().setLoading(true);
Reload.kickAll();
/** playerConfig.close();
* getter for the yml's player configs. }
* @return player config instance
*/
public PlayerConfig getPlayerConfig() {
return playerConfig;
}
/** // save tutorial state
* getter for an instance of the config utility class
* @return raxen's config
*/
public Config getConf() {
return config;
}
public void disable() { Bukkit
this.setEnabled(false); .getConsoleSender()
} .sendMessage(
colorComp(prefix + "<red>Server Stopped Successfully!</red>")
);
}
/**
* getter for the logger
*
* @return the plugin logger
*/
public Logger getPluginLogger() {
return logger;
}
/**
* getter for the bukkit's plugin manager
*
* @return plugin manager
*/
public PluginManager getPm() {
return pm;
}
/**
* return the instance which is launched.
*
* @return main instance
*/
public Raxen getPlugin() {
return plugin;
}
/**
* getter for the raxen prefix
*
* @return string prefix
*/
public static String getPrefix() {
return prefix;
}
/**
* getter for the yml's player configs.
*
* @return player config instance
*/
public PlayerConfig getPlayerConfig() {
return playerConfig;
}
/**
* getter for an instance of the config utility class
*
* @return raxen's config
*/
public Config getConf() {
return config;
}
public void disable() {
this.setEnabled(false);
}
} }

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;
@ -16,207 +22,220 @@ import org.jetbrains.annotations.Nullable;
public class RaxenCommand implements TabExecutor { public class RaxenCommand implements TabExecutor {
private Raxen main; private Raxen main;
public RaxenCommand(Raxen main) { public RaxenCommand(Raxen main) {
this.main = main; this.main = main;
} }
@Override @Override
public boolean onCommand( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command cmd, @NotNull Command cmd,
@NotNull String msg, @NotNull String msg,
@NotNull String[] args @NotNull String[] args
) { ) {
if (sender instanceof Player) { if (sender instanceof Player) {
Player player = (Player) sender; Player player = (Player) sender;
if (!(player.hasPermission("raxen."))) { if (!(player.hasPermission("raxen."))) {
msgPlayer( msgPlayer(
player, player,
coloredString(Raxen.getPrefix()) + coloredString(Raxen.getPrefix()) +
colorTextComp( colorTextComp(
"<red>You can't execute this command. Insufficient permission." "<red>You can't execute this command. Insufficient permission."
) )
); );
}
switch (args.length) {
case 0 -> msgPl(player, 0);
case 1 -> {
switch (args[0]) {
case "mongodb", "mongo", "MONGODB", "MONGO" -> {
//print info about connection
sender.sendMessage(
stringToComp(
Raxen.getPrefix() +
colorTextComp(
"<gold>Printing About Raxen's MongoDB connection..."
)
)
);
msgPlayer(
player,
coloredString(Raxen.getPrefix()) +
colorTextComp(
"<gold>---------------------------------------------"
)
);
msgPlayer(player, colorTextComp("<red>MONGO DB<white>"));
msgPlayer(
player,
StorageManager
.getMongodb()
.getMongoClient()
.getClusterDescription()
.toString()
);
msgPlayer(
player,
StorageManager.getMongodb().getMongoDatabase().getName()
);
msgPlayer(
player,
StorageManager
.getMongodb()
.getMongoCollection()
.getNamespace()
.toString()
);
msgPlayer(
player,
"<gold>---------------------------------------------"
);
} }
case "v", "version", "ver" -> { switch (args.length) {
msgPlayer(player, Raxen.getVersion()); case 0 -> msgPl(player, 0);
case 1 -> {
switch (args[0]) {
case "mongodb", "mongo", "MONGODB", "MONGO" -> {
//print info about connection
sender.sendMessage(
stringToComp(
Raxen.getPrefix() +
colorTextComp(
"<gold>Printing About Raxen's MongoDB connection..."
)
)
);
msgPlayer(
player,
coloredString(Raxen.getPrefix()) +
colorTextComp(
"<gold>---------------------------------------------"
)
);
msgPlayer(
player,
colorTextComp("<red>MONGO DB<white>")
);
msgPlayer(
player,
StorageManager
.getMongodb()
.getMongoClient()
.getClusterDescription()
.toString()
);
msgPlayer(
player,
StorageManager
.getMongodb()
.getMongoDatabase()
.getName()
);
msgPlayer(
player,
StorageManager
.getMongodb()
.getMongoCollection()
.getNamespace()
.toString()
);
msgPlayer(
player,
"<gold>---------------------------------------------"
);
}
case "v", "version", "ver" -> {
msgPlayer(player, Raxen.getVersion());
}
case "hemlp", "?", "h" -> {
//print help
}
}
}
} }
case "hemlp", "?", "h" -> { } else {
//print help switch (args.length) {
case 0 -> {
msgSender(
sender,
Raxen.getPrefix() + "<gold>Printing About Raxen...",
"<gold>---------------------------------------------",
"<dark_aqua> Raxen ",
"<dark_aqua> - Version: " + Raxen.getVersion(),
"<dark_aqua> - Author: <b><red>U<gold>n<yellow>u<dark_green>r<green>l<aqua>e<dark_aqua>d<reset>"
);
TextComponent txt = colorTextComp(
"<dark_aqua> - Website: https://unurled.me"
);
sender.sendMessage(txt);
sender.sendMessage(
colorComp(
"<gold>---------------------------------------------"
)
);
return true;
}
case 1 -> {
switch (args[0]) {
case "mongodb", "mongo", "MONGODB", "MONGO" -> {
//print info about connection
msgSender(
sender,
Raxen.getPrefix() +
"<gold>Printing About Raxen's MongoDB connection...",
"<gold>---------------------------------------------" +
"<red>MONGO DB"
);
sender.sendMessage(
stringToComp(
StorageManager
.getMongodb()
.getMongoClient()
.getClusterDescription()
.toString()
)
);
sender.sendMessage(
stringToComp(
StorageManager
.getMongodb()
.getMongoDatabase()
.getName()
)
);
sender.sendMessage(
stringToComp(
StorageManager
.getMongodb()
.getMongoCollection()
.getNamespace()
.toString()
)
);
sender.sendMessage(
stringToComp(
coloredString(
"<gold>---------------------------------------------"
)
)
);
return true;
}
case "v", "version", "ver" -> {
msgSender(
sender,
Raxen.getPrefix() +
"<gold>Printing About Raxen...",
"<gold>---------------------------------------------",
"<dark_aqua> Raxen ",
"<dark_aqua> - Version: " + Raxen.getVersion(),
"<dark_aqua> - Author: <b><red>U<gold>n&eu<dark_green>r<green>l<aqua>e<dark_aqua>d<reset>"
);
TextComponent txt = colorTextComp(
"<dark_aqua> - Website: https://unurled.me"
);
sender.sendMessage(txt);
sender.sendMessage(
colorComp(
"<gold>---------------------------------------------"
)
);
return true;
}
case "hemlp", "?", "h" -> debug(main, "print help"); //print help
}
}
} }
}
} }
} return false;
} else { }
switch (args.length) {
case 0 -> { public void msgPl(Player player, Integer in) {
msgSender( switch (in) {
sender, case 0:
Raxen.getPrefix() + "<gold>Printing About Raxen...", msgPlayer(
"<gold>---------------------------------------------", player,
"<dark_aqua> Raxen ", Raxen.getPrefix() + "<gold>Printing About Raxen...",
"<dark_aqua> - Version: " + Raxen.getVersion(), "<gold>---------------------------------------------",
"<dark_aqua> - Author: <b><red>U<gold>n<yellow>u<dark_green>r<green>l<aqua>e<dark_aqua>d<reset>" "<dark_aqua> Raxen ",
); "<dark_aqua> - Version: " + Raxen.getVersion(),
TextComponent txt = colorTextComp( "<dark_aqua> - Author: <b><red>U<gold>n&eu<dark_green>r<green>l<aqua>e<dark_aqua>d<reset>"
"<dark_aqua> - Website: https://unurled.me" );
); TextComponent txt = (TextComponent) colorComp(
sender.sendMessage(txt); "<dark_aqua> - Website: https://unurled.me"
sender.sendMessage(
colorComp("<gold>---------------------------------------------")
);
return true;
}
case 1 -> {
switch (args[0]) {
case "mongodb", "mongo", "MONGODB", "MONGO" -> {
//print info about connection
msgSender(
sender,
Raxen.getPrefix() +
"<gold>Printing About Raxen's MongoDB connection...",
"<gold>---------------------------------------------" +
"<red>MONGO DB"
);
sender.sendMessage(
stringToComp(
StorageManager
.getMongodb()
.getMongoClient()
.getClusterDescription()
.toString()
) )
); .clickEvent(ClickEvent.openUrl("https://unurled.me"));
sender.sendMessage( player.sendMessage(txt);
stringToComp( msgPlayer(
StorageManager.getMongodb().getMongoDatabase().getName() player,
) "",
);
sender.sendMessage(
stringToComp(
StorageManager
.getMongodb()
.getMongoCollection()
.getNamespace()
.toString()
)
);
sender.sendMessage(
stringToComp(
coloredString(
"<gold>---------------------------------------------" "<gold>---------------------------------------------"
) );
)
);
return true;
}
case "v", "version", "ver" -> {
msgSender(
sender,
Raxen.getPrefix() + "<gold>Printing About Raxen...",
"<gold>---------------------------------------------",
"<dark_aqua> Raxen ",
"<dark_aqua> - Version: " + Raxen.getVersion(),
"<dark_aqua> - Author: <b><red>U<gold>n&eu<dark_green>r<green>l<aqua>e<dark_aqua>d<reset>"
);
TextComponent txt = colorTextComp(
"<dark_aqua> - Website: https://unurled.me"
);
sender.sendMessage(txt);
sender.sendMessage(
colorComp("<gold>---------------------------------------------")
);
return true;
}
case "hemlp", "?", "h" -> //print help
debug(main, "print help");
}
} }
}
} }
return false;
}
public void msgPl(Player player, Integer in) { @Override
switch (in) { public @Nullable List<String> onTabComplete(
case 0: @NotNull CommandSender sender,
msgPlayer( @NotNull Command command,
player, @NotNull String alias,
Raxen.getPrefix() + "<gold>Printing About Raxen...", @NotNull String[] args
"<gold>---------------------------------------------", ) {
"<dark_aqua> Raxen ", return null;
"<dark_aqua> - Version: " + Raxen.getVersion(),
"<dark_aqua> - Author: <b><red>U<gold>n&eu<dark_green>r<green>l<aqua>e<dark_aqua>d<reset>"
);
TextComponent txt = (TextComponent) colorComp(
"<dark_aqua> - Website: https://unurled.me"
)
.clickEvent(ClickEvent.openUrl("https://unurled.me"));
player.sendMessage(txt);
msgPlayer(
player,
"",
"<gold>---------------------------------------------"
);
} }
}
@Override
public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String alias,
@NotNull String[] args
) {
return null;
}
} }

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;
@ -19,104 +22,109 @@ import org.jetbrains.annotations.Nullable;
public class CustomModelDataCommand implements TabExecutor { 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 command Command which was executed * @param sender Source of the command
* @param label Alias of the command which was used * @param command Command which was executed
* @param args Passed command arguments * @param label Alias of the command which was used
* @return * @param args Passed command arguments
*/ * @return
@Override */
public boolean onCommand( @Override
@NotNull CommandSender sender, public boolean onCommand(
@NotNull Command command, @NotNull CommandSender sender,
@NotNull String label, @NotNull Command command,
@NotNull String[] args @NotNull String label,
) { @NotNull String[] args
if (!(sender instanceof Player)) { ) {
errorConsoleSender(sender); if (!(sender instanceof Player)) {
return true; errorConsoleSender(sender);
return true;
}
Player p = (Player) sender;
if (!(p.hasPermission("raxen.custommodeldata.cmd"))) {
p.sendMessage(noPerms());
return true;
}
ItemStack it = p.getInventory().getItemInMainHand();
if (args.length == 0) {
p.sendMessage(
colorComp(
"<gold>Usage: /custommodeldata <model-data-value> <item-name></gold>"
)
);
return true;
}
if (!(isInt(args[0]))) {
Material material = Material.getMaterial(args[1]);
if (material != null) {
it =
customModelData(
new ItemStack(material),
Integer.parseInt(args[0])
);
p.getInventory().setItemInMainHand(it);
p.updateInventory();
} else {
p.sendMessage(
colorComp(
"<red>Please specify a valid Item Name or a valid Integer.</red>"
)
);
}
} else {
if (it != null && it.getType() != Material.AIR) { // check if player has an item in hand
// has item in hand applying the custom model data
it = customModelData(it, Integer.parseInt(args[0]));
p.getInventory().setItemInMainHand(it);
p.updateInventory();
} else {
p.sendMessage(
colorComp(
"<red>Get an item in hand please or specify an item</red>"
)
);
p.sendMessage(
colorComp(
"<gold>Usage: /custommodeldata <model-data-value> <item-name></gold>"
)
);
}
}
return true;
} }
Player p = (Player) sender;
if (!(p.hasPermission("raxen.custommodeldata.cmd"))) {
p.sendMessage(noPerms());
return true;
}
ItemStack it = p.getInventory().getItemInMainHand();
if (args.length == 0) {
p.sendMessage(
colorComp(
"<gold>Usage: /custommodeldata <model-data-value> <item-name></gold>"
)
);
return true;
}
if (!(isInt(args[0]))) {
Material material = Material.getMaterial(args[1]);
if (material != null) {
it =
customModelData(new ItemStack(material), Integer.parseInt(args[0]));
p.getInventory().setItemInMainHand(it);
p.updateInventory();
} else {
p.sendMessage(
colorComp(
"<red>Please specify a valid Item Name or a valid Integer.</red>"
)
);
}
} else {
if (it != null && it.getType() != Material.AIR) { // check if player has an item in hand
// has item in hand applying the custom model data
it = customModelData(it, Integer.parseInt(args[0]));
p.getInventory().setItemInMainHand(it);
p.updateInventory();
} else {
p.sendMessage(
colorComp("<red>Get an item in hand please or specify an item</red>")
);
p.sendMessage(
colorComp(
"<gold>Usage: /custommodeldata <model-data-value> <item-name></gold>"
)
);
}
}
return true;
}
/** /**
* @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 partial argument to be
* @param args The arguments passed to the command, including final * completed
* partial argument to be completed * @return
* @return */
*/ @Override
@Override public @Nullable List<String> onTabComplete(
public @Nullable List<String> onTabComplete( @NotNull CommandSender sender,
@NotNull CommandSender sender, @NotNull Command command,
@NotNull Command command, @NotNull String label,
@NotNull String label, @NotNull String[] args
@NotNull String[] args ) {
) { final List<String> completions = new ArrayList<>();
final List<String> completions = new ArrayList<>();
List<String> SUB_COMMANDS = new ArrayList<>(); List<String> SUB_COMMANDS = new ArrayList<>();
if (!(isInt(args[0]))) { if (!(isInt(args[0]))) {
return Arrays.asList("§c" + args[0]); return Arrays.asList("§c" + args[0]);
}
if (args.length == 2) {
for (Material mat : Material.values()) {
SUB_COMMANDS.add(mat.name());
}
StringUtil.copyPartialMatches(args[1], SUB_COMMANDS, completions);
Collections.sort(completions);
}
return completions;
} }
if (args.length == 2) {
for (Material mat : Material.values()) {
SUB_COMMANDS.add(mat.name());
}
StringUtil.copyPartialMatches(args[1], SUB_COMMANDS, completions);
Collections.sort(completions);
}
return completions;
}
} }

View file

@ -9,41 +9,41 @@ import org.jetbrains.annotations.Nullable;
public class EntitiyCommand implements TabExecutor { public class EntitiyCommand implements TabExecutor {
/** /**
* Get the egg spawn of a custom entity :) * Get the egg spawn of a custom entity :)
* @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
* @param args Passed command arguments * @param args Passed command arguments
* @return * @return
*/ */
@Override @Override
public boolean onCommand( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String label, @NotNull String label,
@NotNull String[] args @NotNull String[] args
) { ) {
return false; return false;
} }
/** /**
* @param sender Source of the command. For players tab-completing a * @param sender Source of the command. For players tab-completing a
* command inside a command block, this will be the player, not * command inside a 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 completed * partial argument to be completed
* @return * @return
*/ */
@Override @Override
public @Nullable List<String> onTabComplete( public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String label, @NotNull String label,
@NotNull String[] args @NotNull String[] args
) { ) {
return null; return null;
} }
} }

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;
@ -15,49 +17,56 @@ import org.jetbrains.annotations.Nullable;
public class ItemListCommand implements TabExecutor { public class ItemListCommand implements TabExecutor {
private Raxen main; private Raxen main;
@Getter @Getter
private ItemListGui itemListGui; private ItemListGui itemListGui;
public ItemListCommand(Raxen main) { public ItemListCommand(Raxen main) {
this.main = main; this.main = main;
this.itemListGui = new ItemListGui(this.main); this.itemListGui = new ItemListGui(this.main);
}
@Override
public boolean onCommand(
@NotNull CommandSender sender,
@NotNull Command cmd,
@NotNull String msg,
@NotNull String[] args
) {
if (!(sender instanceof Player)) {
log("Console can't execute this command atm.");
return true;
} }
Player player = (Player) sender;
if (!(player.hasPermission("raxen.itemlist.cmd"))) {
msgPlayer(
player,
colorString(
"<red>You'dont have the permission to execute this command."
)
);
return true;
}
//openGui logic
player.openInventory(itemListGui.getInv());
return false;
}
@Override @Override
public @Nullable List<String> onTabComplete( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command cmd,
@NotNull String alias, @NotNull String msg,
@NotNull String[] args @NotNull String[] args
) { ) {
return null; if (!(sender instanceof Player)) {
} log("Console can't execute this command atm.");
return true;
}
Player player = (Player) sender;
if (!(player.hasPermission("raxen.itemlist.cmd"))) {
msgPlayer(
player,
colorString(
"<red>You'dont have the permission to execute this command."
)
);
return true;
}
int page = 1;
if (args.length > 0) {
try {
page = Integer.parseInt(args[0]);
} catch (NumberFormatException ignored) {
}
}
//openGui logic
itemListGui.openInventory(player, page);
return false;
}
@Override
public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String alias,
@NotNull String[] args
) {
return null;
}
} }

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;
@ -13,46 +14,45 @@ import org.jetbrains.annotations.Nullable;
public class ItemTo64Command implements TabExecutor { public class ItemTo64Command implements TabExecutor {
/** /**
* @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
* @param args Passed command arguments * @param args Passed command arguments
* @return * @return
*/ */
@Override @Override
public boolean onCommand( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String label, @NotNull String label,
@NotNull String[] args @NotNull String[] args
) { ) {
if (sender instanceof Player p) { if (sender instanceof Player p) {
msgPlayer(p, itemTo64(p.getInventory().getItemInMainHand())); msgPlayer(p, itemTo64(p.getInventory().getItemInMainHand()));
} else { } else {
errorConsoleSender(sender); errorConsoleSender(sender);
return true; return true;
}
return false;
} }
return false;
}
/** /**
* @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 partial argument to be
* @param args The arguments passed to the command, including final * completed
* partial argument to be completed * @return
* @return */
*/ @Override
@Override public @Nullable List<String> onTabComplete(
public @Nullable List<String> onTabComplete( @NotNull CommandSender sender,
@NotNull CommandSender sender, @NotNull Command command,
@NotNull Command command, @NotNull String label,
@NotNull String label, @NotNull String[] args
@NotNull String[] args ) {
) { return null;
return null; }
}
} }

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,123 +21,136 @@ 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;
public class NbtCommand implements TabExecutor { public class NbtCommand implements TabExecutor {
private final Raxen main; private final Raxen main;
public NbtCommand(Raxen main) { public NbtCommand(Raxen main) {
this.main = main; this.main = main;
} }
@Override @Override
public boolean onCommand( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command cmd, @NotNull Command cmd,
@NotNull String msg, @NotNull String msg,
@NotNull String[] args @NotNull String[] args
) { ) {
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; )
} );
if (player.getInventory().getItemInMainHand().getType() == Material.AIR) { return true;
msgPlayer(player, colorTextComp("<red>You must hold an Item in hand."));
return true;
} else {
player.getInventory().getItemInMainHand();
}
switch (args.length) {
case 0, 1 -> msgPlayer(
player,
colorTextComp("<red>You must specify an nbt and an int.")
);
case 2 -> {
debug("'" + args[0] + "'", "'" + args[1] + "'");
ItemStack it = player.getInventory().getItemInMainHand();
NBTItem nbti = new NBTItem(it);
int a = 0;
if (nbti.hasTag(args[0])) {
a = nbti.getInteger(args[0]);
} }
List<Component> lore = new ArrayList<>(); if (
// ItemMeta itm = it.getItemMeta(); player.getInventory().getItemInMainHand().getType() == Material.AIR
// lore.add((Component) itm.lore()); ) {
boolean yes = false; msgPlayer(
boolean ever = false; player,
for (Component ct : lore) { colorTextComp("<red>You must hold an Item in hand.")
if (ct != null) { );
if (ct.contains(Component.text("Attributes:"))) { return true;
yes = true; } else {
ever = true; player.getInventory().getItemInMainHand();
} else { }
if (yes) { switch (args.length) {
//ct.append(Component.text(colorString(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a)))); deprecated case 0, 1 -> msgPlayer(
yes = false; player,
} colorTextComp("<red>You must specify an nbt and an int.")
);
case 2 -> {
debug("'" + args[0] + "'", "'" + args[1] + "'");
ItemStack it = player.getInventory().getItemInMainHand();
NBTItem nbti = new NBTItem(it);
String a = "";
if (nbti.hasTag(args[0])) {
a = nbti.getString(args[0]);
}
List<Component> lore = new ArrayList<>();
// ItemMeta itm = it.getItemMeta();
// lore.add((Component) itm.lore());
boolean yes = false;
boolean ever = false;
for (Component ct : lore) {
if (ct != null) {
if (ct.contains(Component.text("Attributes:"))) {
yes = true;
ever = true;
} else {
if (yes) {
//ct.append(Component.text(colorString(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a)))); deprecated
yes = false;
}
}
}
}
if (!ever) {
lore.add(colorTextComp("<red>Attributes:"));
//lore.add(colorTextComp(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a))); deprecated
}
// itm.lore(lore);
// it.setItemMeta(itm);
PlayerManager pm =
(
(Raxen) Objects.requireNonNull(
Bukkit.getPluginManager().getPlugin("Raxen")
)
).getManager()
.getPlayerManager();
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")) {
pm.getSpeed().add(player, nbti.getInteger("SPEED"));
}
if (nbti.hasTag("HEALTH")) {
pm.getHealth().add(player, nbti.getInteger("HEALTH"));
}
if (nbti.hasTag("DEFENSE")) {
pm.getDefense().add(player, nbti.getInteger("DEFENSE"));
}
if (nbti.hasTag("STRENGTH")) {
pm.getStrength().add(player, nbti.getInteger("STRENGTH"));
}
it = nbti.getItem();
msgPlayer(
player,
colorTextComp(
Raxen.getPrefix() +
"<white>You successfully added the nbt " +
/*attributes(args[0])*/args[0] +
"<white>with " +
args[1] +
"<white>."
)
);
updateSkills(main, player);
player
.getInventory()
.setItem(player.getInventory().getHeldItemSlot(), it);
} }
}
} }
if (!ever) { return true;
lore.add(colorTextComp("<red>Attributes:"));
//lore.add(colorTextComp(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a))); deprecated
}
// itm.lore(lore);
// it.setItemMeta(itm);
PlayerManager pm =
(
(Raxen) Objects.requireNonNull(
Bukkit.getPluginManager().getPlugin("Raxen")
)
).getManager()
.getPlayerManager();
nbti.setInteger(args[0], Integer.parseInt(args[1]) + a);
if (nbti.hasTag("SPEED")) {
pm.getSpeed().add(player, nbti.getInteger("SPEED"));
}
if (nbti.hasTag("HEALTH")) {
pm.getHealth().add(player, nbti.getInteger("HEALTH"));
}
if (nbti.hasTag("DEFENSE")) {
pm.getDefense().add(player, nbti.getInteger("DEFENSE"));
}
if (nbti.hasTag("STRENGTH")) {
pm.getStrength().add(player, nbti.getInteger("STRENGTH"));
}
it = nbti.getItem();
msgPlayer(
player,
colorTextComp(
Raxen.getPrefix() +
"<white>You successfully added the nbt " +
/*attributes(args[0])*/args[0] +
"<white>with " +
args[1] +
"<white>."
)
);
updateSkills(main, player);
player
.getInventory()
.setItem(player.getInventory().getHeldItemSlot(), it);
}
} }
return true;
}
@Override @Override
public @Nullable List<String> onTabComplete( public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String alias, @NotNull String alias,
@NotNull String[] args @NotNull String[] args
) { ) {
return null; return null;
} }
} }

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,42 +11,48 @@ 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;
public class ReloadCommand implements TabExecutor { public class ReloadCommand implements TabExecutor {
@Override @Override
public boolean onCommand( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String msg, @NotNull String msg,
@NotNull String[] args @NotNull String[] args
) { ) {
if (sender instanceof Player) { if (sender instanceof Player) {
Player player = (Player) sender; Player player = (Player) sender;
if (!player.hasPermission("raxen.reload.cmd")) { if (!player.hasPermission("raxen.reload.cmd")) {
player.sendMessage(noPerms()); player.sendMessage(noPerms());
return true; return true;
} }
}
Reload.kickAll();
log(
colorString(
"<red>Server stopping!\n Using: /rlpl.\n Please wait a little bit."
)
);
new BukkitRunnable() {
@Override
public void run() {
Bukkit.getServer().shutdown();
}
}.runTaskLater(Bukkit.getPluginManager().getPlugin("Raxen"), 80L);
return false;
} }
Reload.kickAll();
log(
colorString(
"<red>Server stopping!\n Using: /rlpl.\n Please wait a little bit."
)
);
Bukkit.getServer().shutdown();
return false;
}
@Override @Override
public @Nullable List<String> onTabComplete( public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String alias, @NotNull String alias,
@NotNull String[] args @NotNull String[] args
) { ) {
return null; return null;
} }
} }

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;
@ -26,187 +30,190 @@ import org.jetbrains.annotations.Nullable;
public class SpawnEntity implements TabExecutor { public class SpawnEntity implements TabExecutor {
private Raxen main; private Raxen main;
private EntityNamespacedKey namespacedKey; private EntityNamespacedKey namespacedKey;
public SpawnEntity(Raxen main) { public SpawnEntity(Raxen main) {
this.main = main; this.main = main;
this.namespacedKey = new EntityNamespacedKey(main); this.namespacedKey = new EntityNamespacedKey(main);
} }
@Override @Override
public boolean onCommand( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String label, @NotNull String label,
@NotNull String[] args @NotNull String[] args
) { ) {
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
log(colorTextComp("<red>Console can't execute this command!")); log(colorTextComp("<red>Console can't execute this command!"));
try { // /entityspawn ZOMBIE "&cHello folks" x:0 y:0 z:0 level health defense speed strength itemStackBinary64: helmet, chestplate, leggings, boots, main-hand, off-hand try { // /entityspawn ZOMBIE "&cHello folks" x:0 y:0 z:0 level health defense speed strength itemStackBinary64: helmet, chestplate, leggings, boots, main-hand, off-hand
if (validateArgs(args, 16)) { if (validateArgs(args, 16)) {
args = setNullInArgs(args); args = setNullInArgs(args);
} else { } else {
log( log(
colorTextComp( colorTextComp(
"<red>Please use null if you don't want some parameters in the command.</red>" "<red>Please use null if you don't want some parameters in the command.</red>"
) )
); );
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>"
); )
return false; );
return false;
}
EntityType types = EntityType.valueOf(args[0]);
Location loc = new Location(
Bukkit.getWorld("world"),
Double.parseDouble(args[2]),
Double.parseDouble(args[3]),
Double.parseDouble(args[4])
);
Entity e = loc.getWorld().spawnEntity(loc, types, false);
/* setNameSpacedKeys(
e,
getStringFromArg(args),
Integer.parseInt(args[6]),
Integer.parseInt(args[7]),
0,
Integer.parseInt(args[8]),
0,
Integer.parseInt(args[9]),
0,
Integer.parseInt(args[10]),
0
); */
e.customName(colorTextComp(getStringFromArg(args)));
e.setCustomNameVisible(true);
if (e instanceof LivingEntity livingEntity) {
// livingEntity.getEquipment().set
ItemStack helmet = itemFrom64(args[11]);
ItemStack chestplate = itemFrom64(args[12]);
ItemStack leggins = itemFrom64(args[13]);
ItemStack boots = itemFrom64(args[14]);
ItemStack mainhand = itemFrom64(args[15]);
ItemStack offhand = itemFrom64(args[14]);
EntityEquipment equip = livingEntity.getEquipment();
equip.setHelmet(helmet);
equip.setChestplate(chestplate);
equip.setLeggings(leggins);
equip.setBoots(boots);
equip.setItemInMainHand(mainhand);
equip.setItemInOffHand(offhand);
}
System.out.println(e.getName());
} catch (IllegalArgumentException e) {
error("Something happened near the SpawnEntity command.");
throw new RuntimeException(e);
} catch (IOException e) {
error(
"Could not deserialize item from the command EntitySpawn (command launched by "
+
sender.getName() +
")"
);
throw new RuntimeException(e);
}
}
for (String arg : args) {
log(arg);
}
Player player = (Player) sender;
if (!player.hasPermission("raxen.entityspawn.cmd")) {
player.sendMessage(noPerms());
return false;
}
try { // /entityspawn ZOMBIE "&cHello folks" x:0 y:0 z:0 level health defense speed strength itemStackBinary64: helmet, chestplate, leggings, boots, main-hand, off-hand
if (validateArgs(args, 16)) {
args = setNullInArgs(args);
} else {
log(
colorTextComp(
"<red>Please use null if you don't want some parameters in the command.</red>"
)
);
log(
colorTextComp(
"<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>"
)
);
return false;
}
EntityType types = EntityType.valueOf(args[0]);
Location loc = new Location(
Bukkit.getWorld("world"),
Double.parseDouble(args[2]),
Double.parseDouble(args[3]),
Double.parseDouble(args[4])
);
Entity e = loc.getWorld().spawnEntity(loc, types, false);
/* setNameSpacedKeys(
e,
getStringFromArg(args),
Integer.parseInt(args[6]),
Integer.parseInt(args[7]),
0,
Integer.parseInt(args[8]),
0,
Integer.parseInt(args[9]),
0,
Integer.parseInt(args[10]),
0
); */
e.customName(colorTextComp(getStringFromArg(args)));
e.setCustomNameVisible(true);
if (e instanceof LivingEntity livingEntity) {
// livingEntity.getEquipment().set
ItemStack helmet = itemFrom64(args[11]);
ItemStack chestplate = itemFrom64(args[12]);
ItemStack leggins = itemFrom64(args[13]);
ItemStack boots = itemFrom64(args[14]);
ItemStack mainhand = itemFrom64(args[15]);
ItemStack offhand = itemFrom64(args[14]);
EntityEquipment equip = livingEntity.getEquipment();
equip.setHelmet(helmet);
equip.setChestplate(chestplate);
equip.setLeggings(leggins);
equip.setBoots(boots);
equip.setItemInMainHand(mainhand);
equip.setItemInOffHand(offhand);
}
System.out.println(e.getName());
} catch (IllegalArgumentException e) {
error("Something happened near the SpawnEntity command.");
throw new RuntimeException(e);
} catch (IOException e) {
error(
"Could not deserialize item from the command EntitySpawn (command launched by " +
sender.getName() +
")"
);
throw new RuntimeException(e);
} }
EntityType types = EntityType.valueOf(args[0]);
Location loc = new Location(
Bukkit.getWorld("world"),
Double.parseDouble(args[2]),
Double.parseDouble(args[3]),
Double.parseDouble(args[4])
);
Entity e = loc.getWorld().spawnEntity(loc, types, false);
setNameSpacedKeys(
e,
getStringFromArg(args),
Integer.parseInt(args[6]),
Integer.parseInt(args[7]),
0,
Integer.parseInt(args[8]),
0,
Integer.parseInt(args[9]),
0,
Integer.parseInt(args[10]),
0
);
e.customName(colorTextComp(getStringFromArg(args)));
e.setCustomNameVisible(true);
if (e instanceof LivingEntity livingEntity) {
// livingEntity.getEquipment().set
ItemStack helmet = itemFrom64(args[11]);
ItemStack chestplate = itemFrom64(args[12]);
ItemStack leggins = itemFrom64(args[13]);
ItemStack boots = itemFrom64(args[14]);
ItemStack mainhand = itemFrom64(args[15]);
ItemStack offhand = itemFrom64(args[14]);
EntityEquipment equip = livingEntity.getEquipment();
equip.setHelmet(helmet);
equip.setChestplate(chestplate);
equip.setLeggings(leggins);
equip.setBoots(boots);
equip.setItemInMainHand(mainhand);
equip.setItemInOffHand(offhand);
}
System.out.println(e.getName());
} catch (IllegalArgumentException e) {
error("Something happened near the SpawnEntity command.");
throw new RuntimeException(e);
} catch (IOException e) {
error(
"Could not deserialize item from the command EntitySpawn (command launched by " +
sender.getName() +
")"
);
throw new RuntimeException(e);
}
}
for (String arg : args) {
log(arg);
}
Player player = (Player) sender;
if (!player.hasPermission("raxen.entityspawn.cmd")) {
player.sendMessage(noPerms());
return false;
}
try { // /entityspawn ZOMBIE "&cHello folks" x:0 y:0 z:0 level health defense speed strength itemStackBinary64: helmet, chestplate, leggings, boots, main-hand, off-hand
if (validateArgs(args, 16)) {
args = setNullInArgs(args);
} else {
log(
colorTextComp(
"<red>Please use null if you don't want some parameters in the command.</red>"
)
);
log(
colorTextComp(
"<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>"
)
);
return false; return false;
}
EntityType types = EntityType.valueOf(args[0]);
Location loc = new Location(
Bukkit.getWorld("world"),
Double.parseDouble(args[2]),
Double.parseDouble(args[3]),
Double.parseDouble(args[4])
);
Entity e = loc.getWorld().spawnEntity(loc, types, false);
setNameSpacedKeys(
e,
getStringFromArg(args),
Integer.parseInt(args[6]),
Integer.parseInt(args[7]),
0,
Integer.parseInt(args[8]),
0,
Integer.parseInt(args[9]),
0,
Integer.parseInt(args[10]),
0
);
e.customName(colorTextComp(getStringFromArg(args)));
e.setCustomNameVisible(true);
if (e instanceof LivingEntity livingEntity) {
// livingEntity.getEquipment().set
ItemStack helmet = itemFrom64(args[11]);
ItemStack chestplate = itemFrom64(args[12]);
ItemStack leggins = itemFrom64(args[13]);
ItemStack boots = itemFrom64(args[14]);
ItemStack mainhand = itemFrom64(args[15]);
ItemStack offhand = itemFrom64(args[14]);
EntityEquipment equip = livingEntity.getEquipment();
equip.setHelmet(helmet);
equip.setChestplate(chestplate);
equip.setLeggings(leggins);
equip.setBoots(boots);
equip.setItemInMainHand(mainhand);
equip.setItemInOffHand(offhand);
}
System.out.println(e.getName());
} catch (IllegalArgumentException e) {
error("Something happened near the SpawnEntity command.");
throw new RuntimeException(e);
} catch (IOException e) {
error(
"Could not deserialize item from the command EntitySpawn (command launched by " +
sender.getName() +
")"
);
throw new RuntimeException(e);
} }
return false; @Override
} public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender,
@Override @NotNull Command command,
public @Nullable List<String> onTabComplete( @NotNull String alias,
@NotNull CommandSender sender, @NotNull String[] args
@NotNull Command command, ) {
@NotNull String alias, List<String> list = new ArrayList<>();
@NotNull String[] args for (EntityType types : EntityType.values()) {
) { list.add(types.name());
List<String> list = new ArrayList<>(); }
for (EntityType types : EntityType.values()) { return list;
list.add(types.name());
} }
return list;
}
} }

View file

@ -14,34 +14,34 @@ import org.jetbrains.annotations.Nullable;
public class TestGuiCommand implements TabExecutor { public class TestGuiCommand implements TabExecutor {
@Override @Override
public boolean onCommand( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String label, @NotNull String label,
@NotNull String[] args @NotNull String[] args
) { ) {
if (sender instanceof Player) { if (sender instanceof Player) {
Player player = (Player) sender; Player player = (Player) sender;
if (player.hasPermission("raxen.test.gui.cmd")) { if (player.hasPermission("raxen.test.gui.cmd")) {
player.openInventory( player.openInventory(
Bukkit.createInventory(null, 54, colorTextComp(args[0])) Bukkit.createInventory(null, 54, colorTextComp(args[0]))
); );
} }
} else { } else {
log("The console can't execute this Command!"); log("The console can't execute this Command!");
return true; return true;
}
return false;
} }
return false;
}
@Override @Override
public @Nullable List<String> onTabComplete( public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String alias, @NotNull String alias,
@NotNull String[] args @NotNull String[] args
) { ) {
return null; return null;
} }
} }

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

@ -19,64 +19,64 @@ import org.jetbrains.annotations.Nullable;
public class ClassCommand implements TabExecutor { public class ClassCommand implements TabExecutor {
private Raxen main; private Raxen main;
/** /**
* the Command to choose the class * the Command to choose the class
* @param main * @param main
*/ */
public ClassCommand(Raxen main) { public ClassCommand(Raxen main) {
this.main = main; this.main = main;
}
@Override
public boolean onCommand(
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String label,
@NotNull String[] args
) {
if (!(sender instanceof Player)) {
error(
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
"The console can't execute this Command!"
);
return true;
} }
Player player = (Player) sender;
Inventory inv = Bukkit.createInventory( @Override
null, public boolean onCommand(
9, @NotNull CommandSender sender,
colorTextComp("<grey>Choose your class</grey>") @NotNull Command command,
); @NotNull String label,
HashMap<String, Class> classes = main @NotNull String[] args
.getManager() ) {
.getPlayerManager() if (!(sender instanceof Player)) {
.getClasses(); error(
if (classes.size() > 10) { (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
if (classes.size() > 55) { "The console can't execute this Command!"
inv = );
Bukkit.createInventory( return true;
}
Player player = (Player) sender;
Inventory inv = Bukkit.createInventory(
null, null,
classes.size(), 9,
colorTextComp("<grey>Choose your class</grey>") colorTextComp("<grey>Choose your class</grey>")
); );
} HashMap<String, Class> classes = main
.getManager()
.getPlayerManager()
.getClasses();
if (classes.size() > 10) {
if (classes.size() > 55) {
inv =
Bukkit.createInventory(
null,
classes.size(),
colorTextComp("<grey>Choose your class</grey>")
);
}
}
for (Class clas : classes.values()) {
ItemStack item = clas.getPlaceHolder();
inv.addItem(item);
}
return false;
} }
for (Class clas : classes.values()) {
ItemStack item = clas.getPlaceHolder();
inv.addItem(item);
}
return false;
}
@Override @Override
public @Nullable List<String> onTabComplete( public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String alias, @NotNull String alias,
@NotNull String[] args @NotNull String[] args
) { ) {
return null; return null;
} }
} }

View file

@ -16,57 +16,57 @@ import org.jetbrains.annotations.Nullable;
public class MainGuiCommand implements TabExecutor { public class MainGuiCommand implements TabExecutor {
private Raxen main; private Raxen main;
public MainGuiCommand(Raxen main) { public MainGuiCommand(Raxen main) {
this.main = main; this.main = main;
}
/**
* @param sender Source of the command
* @param command Command which was executed
* @param label Alias of the command which was used
* @param args Passed command arguments
* @return
*/
@Override
public boolean onCommand(
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String label,
@NotNull String[] args
) {
if (!(sender instanceof Player)) {
errorConsoleSender(sender);
return true;
} }
Player p = (Player) sender;
if (!(p.hasPermission("raxen.maingui.cmd"))) {
sender.sendMessage(noPerms());
return true;
}
Inventory inv = MainGui.build(p);
p.openInventory(inv);
return true;
}
/** /**
* @param sender Source of the command. For players tab-completing a * @param sender Source of the command
* command inside of a command block, this will be the player, not * @param command Command which was executed
* the command block. * @param label Alias of the command which was used
* @param command Command which was executed * @param args Passed command arguments
* @param label Alias of the command which was used * @return
* @param args The arguments passed to the command, including final */
* partial argument to be completed @Override
* @return public boolean onCommand(
*/ @NotNull CommandSender sender,
@Override @NotNull Command command,
public @Nullable List<String> onTabComplete( @NotNull String label,
@NotNull CommandSender sender, @NotNull String[] args
@NotNull Command command, ) {
@NotNull String label, if (!(sender instanceof Player)) {
@NotNull String[] args errorConsoleSender(sender);
) { return true;
return null; }
} Player p = (Player) sender;
if (!(p.hasPermission("raxen.maingui.cmd"))) {
sender.sendMessage(noPerms());
return true;
}
Inventory inv = MainGui.build(p);
p.openInventory(inv);
return true;
}
/**
* @param sender Source of the command. For players tab-completing a
* command inside of a command block, this will be the player, not
* the command block.
* @param command Command which was executed
* @param label Alias of the command which was used
* @param args The arguments passed to the command, including final
* partial argument to be completed
* @return
*/
@Override
public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String label,
@NotNull String[] args
) {
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

@ -18,76 +18,87 @@ import org.jetbrains.annotations.Nullable;
public class SkillsCommand implements TabExecutor { public class SkillsCommand implements TabExecutor {
private Raxen main; private Raxen main;
public SkillsCommand(Raxen main) { public SkillsCommand(Raxen main) {
this.main = main; this.main = main;
}
@Override
public boolean onCommand(
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String msg,
@NotNull String[] args
) {
if (!(sender instanceof Player)) {
error(
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
"The console can't execute this Command!"
);
return true;
} }
Player player = (Player) sender;
Attributes attributes = new Attributes(main); @Override
switch (args.length) { public boolean onCommand(
case 0: @NotNull CommandSender sender,
//open gui @NotNull Command command,
player.sendMessage( @NotNull String msg,
colorTextComp("<red>GUI not implemented yet..") @NotNull String[] args
.append(colorTextComp("<red>Try /skill help.")) ) {
); if (!(sender instanceof Player)) {
break; error(
case 1: (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
case 2: "The console can't execute this Command!"
player.sendMessage( );
colorTextComp("<white>Use the command like: ") return true;
.append(
colorTextComp(
"<white>/skill <dark_aqua>{health|defense|speed|strength} {add|set|remove} {amount}"
)
)
);
break;
case 3:
PlayerManager pm =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
.getPlayerManager();
for (String s : pm.getAttribute().keySet()) {
if (s.equalsIgnoreCase(args[0])) switch (args[1]) {
case "add":
pm.getAttribute().get(s).add(player, Integer.parseInt(args[2]));
case "remove":
pm
.getAttribute()
.get(s)
.remove(player, Integer.parseInt(args[2]));
case "set":
pm.getAttribute().get(s).set(player, Integer.parseInt(args[2]));
}
} }
PlayerUtils.updateSkills(main, player); Player player = (Player) sender;
Attributes attributes = new Attributes(main);
switch (args.length) {
case 0:
//open gui
player.sendMessage(
colorTextComp("<red>GUI not implemented yet..")
.append(colorTextComp("<red>Try /skill help."))
);
break;
case 1:
case 2:
player.sendMessage(
colorTextComp("<white>Use the command like: ")
.append(
colorTextComp(
"<white>/skill <dark_aqua>{health|defense|speed|strength} {add|set|remove} {amount}"
)
)
);
break;
case 3:
PlayerManager pm =
(
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen")
).getManager()
.getPlayerManager();
for (String s : pm.getAttribute().keySet()) {
if (s.equalsIgnoreCase(args[0])) switch (args[1]) {
case "add":
pm
.getAttribute()
.get(s)
.add(player, Integer.parseInt(args[2]));
break;
case "remove":
pm
.getAttribute()
.get(s)
.remove(player, Integer.parseInt(args[2]));
break;
case "set":
pm
.getAttribute()
.get(s)
.set(player, Integer.parseInt(args[2]));
break;
}
}
PlayerUtils.updateSkills(main, player);
}
return false;
} }
return false;
}
@Override @Override
public @Nullable List<String> onTabComplete( public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String alias, @NotNull String alias,
@NotNull String[] args @NotNull String[] args
) { ) {
return null; return null;
} }
} }

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;
@ -16,65 +18,76 @@ import org.jetbrains.annotations.Nullable;
public class StorageCommand implements TabExecutor { public class StorageCommand implements TabExecutor {
private PlayerManager playerManager; private PlayerManager playerManager;
@Override @Override
public boolean onCommand( public boolean onCommand(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String label, @NotNull String label,
@NotNull String[] args @NotNull String[] args
) { ) {
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
error( error(
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
"The console can't execute this Command!" "The console can't execute this Command!"
); );
return true; return true;
}
Player player = (Player) sender;
Inventory inv;
playerManager =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
.getPlayerManager();
switch (args.length) {
case 0:
if (playerManager.getRaxenPlayer(player).getStorage() == null) {
inv =
playerManager
.getRaxenPlayer(player)
.createStorage()
.getEc()
.getEc();
} else {
inv =
playerManager.getRaxenPlayer(player).getStorage().getEc().getEc();
} }
player.openInventory(inv); Player player = (Player) sender;
break; Inventory inv;
case 1: playerManager =
Player p = Bukkit.getPlayer(args[0]); ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
if (p == null) { .getPlayerManager();
msgPlayer( switch (args.length) {
player, case 0:
colorString("<red>You can't open the Storage of an unknown Player.") if (playerManager.getRaxenPlayer(player).getStorage() == null) {
); inv =
return true; playerManager
.getRaxenPlayer(player)
.createStorage()
.getEc()
.getEc();
} else {
inv =
playerManager
.getRaxenPlayer(player)
.getStorage()
.getEc()
.getEc();
}
player.openInventory(inv);
break;
case 1:
Player p = Bukkit.getPlayer(args[0]);
if (p == null) {
msgPlayer(
player,
colorString(
"<red>You can't open the Storage of an unknown Player."
)
);
return true;
}
inv =
playerManager
.getRaxenPlayer(player)
.getStorage()
.getEc()
.getEc();
player.openInventory(inv);
break;
} }
inv = playerManager.getRaxenPlayer(player).getStorage().getEc().getEc(); return true;
player.openInventory(inv);
break;
} }
return true;
}
@Override @Override
public @Nullable List<String> onTabComplete( public @Nullable List<String> onTabComplete(
@NotNull CommandSender sender, @NotNull CommandSender sender,
@NotNull Command command, @NotNull Command command,
@NotNull String alias, @NotNull String alias,
@NotNull String[] args @NotNull String[] args
) { ) {
return null; return null;
} }
} }

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,67 +12,67 @@ import org.bukkit.Location;
public class Dungeon { public class Dungeon {
@Getter @Getter
private String name; private String name;
@Getter @Getter
private Rank rank; private Rank rank;
@Getter @Getter
private Gate gate; private Gate gate;
//String, RaxenEntity //String, RaxenEntity
@Getter @Getter
private HashMap<String, RaxenEntity> monster = new HashMap<>(); private HashMap<String, RaxenEntity> monster = new HashMap<>();
/** /**
* The Type of the Dungeon * The Type of the Dungeon
*/ */
@Getter @Getter
private Types types; private Types types;
/** /**
* Monster Types * Monster Types
*/ */
@Getter @Getter
private MonsterType monsterType; private MonsterType monsterType;
@Getter @Getter
private Location location; private Location location;
@Getter @Getter
private Integer radius; private Integer radius;
public Dungeon(String name, Rank rank, Types types, MonsterType mType) { public Dungeon(String name, Rank rank, Types types, MonsterType mType) {
this.name = name; this.name = name;
this.rank = rank; this.rank = rank;
this.types = types; this.types = types;
this.monsterType = mType; this.monsterType = mType;
generateGate(); generateGate();
} }
/** /**
* Generate the Gate and make it available to players in the world. * Generate the Gate and make it available to players in the world.
* //TODO: Place the gate at a random place. * //TODO: Place the gate at a random place.
*/ */
public void generateGate() { public void generateGate() {
// -281.50 36.00 187.50 // -281.50 36.00 187.50
Location loc = new Location( Location loc = new Location(
Bukkit.getWorld("Liberty_City"), Bukkit.getWorld("Liberty_City"),
-284.0, -284.0,
45.00, 45.00,
187.50 187.50
); );
Integer radius = getRadiusFromRank(this.rank); Integer radius = getRadiusFromRank(this.rank);
this.gate = new Gate(name, loc, radius); this.gate = new Gate(name, loc, radius);
} }
/** /**
* //TODO: Terrain Generation of the inside of the Dungeons * //TODO: Terrain Generation of the inside of the Dungeons
*/ */
public void generate() { public void generate() {
Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen");
main.getManager().getWorldManager().loadWorld(name); main.getManager().getWorldManager().loadWorld(name);
monsterType.genMonster(Bukkit.getWorld(name), rank); monsterType.genMonster(Bukkit.getWorld(name), rank);
} }
} }

View file

@ -6,39 +6,39 @@ import org.bukkit.Material;
public class Gate { public class Gate {
private String name; private String name;
private Location loc; private Location loc;
private Integer portalRadius; private Integer portalRadius;
public Gate(String name, Location loc, Integer portalRadius) { public Gate(String name, Location loc, Integer portalRadius) {
this.loc = loc; this.loc = loc;
this.portalRadius = portalRadius; this.portalRadius = portalRadius;
this.name = name; this.name = name;
}
public void teleport() {}
public void genGate() {
// get which side it's gonna expand with radius
Random r = new Random();
Boolean xExpend = false;
if (r.nextInt(2) == 0) {
xExpend = true;
} }
// place blocks public void teleport() {}
for (double i = 0; i <= Math.PI; i += Math.PI / portalRadius) {
double radius = Math.sin(i); public void genGate() {
double y = Math.cos(i); // get which side it's gonna expand with radius
for (double a = 0; a < Math.PI * 2; a += Math.PI / portalRadius) { Random r = new Random();
double x = Math.cos(a) * radius; Boolean xExpend = false;
double z = Math.sin(a) * radius; if (r.nextInt(2) == 0) {
Location locc = new Location(loc.getWorld(), x, y, z); xExpend = true;
loc.getBlock().setType(Material.NETHER_PORTAL); }
}
} // place blocks
/* for (double i = 0; i <= Math.PI; i += Math.PI / portalRadius) {
double radius = Math.sin(i);
double y = Math.cos(i);
for (double a = 0; a < Math.PI * 2; a += Math.PI / portalRadius) {
double x = Math.cos(a) * radius;
double z = Math.sin(a) * radius;
Location locc = new Location(loc.getWorld(), x, y, z);
loc.getBlock().setType(Material.NETHER_PORTAL);
}
}
/*
for (int n=0; n<portalRadius ; n++) { for (int n=0; n<portalRadius ; n++) {
Double x = loc.getX(); Double x = loc.getX();
Double y = loc.getY(); Double y = loc.getY();
@ -53,17 +53,17 @@ public class Gate {
} }
*/ */
} }
public Location getLoc() { public Location getLoc() {
return loc; return loc;
} }
public Integer getPortalRadius() { public Integer getPortalRadius() {
return portalRadius; return portalRadius;
} }
public String getName() { public String getName() {
return name; return name;
} }
} }

View file

@ -1,16 +1,16 @@
package me.unurled.raxen.components.dungeons; package me.unurled.raxen.components.dungeons;
public enum Rank { public enum Rank {
F, F,
E, E,
D, D,
C, C,
B, B,
A, A,
S, S,
SS, SS,
SSS, SSS,
WORLD, WORLD,
UNBEATABLE, UNBEATABLE,
NOT_DEFINED, NOT_DEFINED
} }

View file

@ -7,11 +7,11 @@ import me.unurled.raxen.components.lootchest.loots.LootItem;
public class Type { public class Type {
public String name; public String name;
public Map<String, RaxenEntity> monster = new HashMap<>(); public Map<String, RaxenEntity> monster = new HashMap<>();
public Map<String, LootItem> lootItem = new HashMap<>(); public Map<String, LootItem> lootItem = new HashMap<>();
// public Map<String, > chest // public Map<String, > chest
} }

View file

@ -1,20 +1,20 @@
package me.unurled.raxen.components.dungeons; package me.unurled.raxen.components.dungeons;
public enum Types { public enum Types {
JUNGLE, JUNGLE,
TROPICAL_JUNGLE, TROPICAL_JUNGLE,
PLAINS, PLAINS,
GRAVES, GRAVES,
CASTLE, CASTLE,
ABANDONED_CASTLE, ABANDONED_CASTLE,
FIELD, FIELD,
ICE_FOREST, ICE_FOREST,
FOREST, FOREST,
VOLCANO, VOLCANO,
MOUNTAINS, MOUNTAINS,
HIGH_MOUNTAINS, HIGH_MOUNTAINS,
CAVES, CAVES,
LABYRINTH, LABYRINTH,
UNDERGROUND_LABYRINTH, UNDERGROUND_LABYRINTH,
FOREST_LABYRINTH, FOREST_LABYRINTH
} }

View file

@ -16,93 +16,93 @@ import org.jetbrains.annotations.Nullable;
public class MonsterType { public class MonsterType {
public enum type { public enum type {
; ;
private Double rate; private Double rate;
public String ID; public String ID;
public Class clazz; public Class clazz;
type(Double rate, String ID, Class clazz) { type(Double rate, String ID, Class clazz) {
this.rate = rate; this.rate = rate;
this.ID = ID; this.ID = ID;
this.clazz = clazz; this.clazz = clazz;
}
public static @Nullable type getTypeById(String ID) {
for (type type : type.values()) {
if (type.ID.equals(ID)) {
return type;
} }
}
return null;
}
public Double getRate() { public static @Nullable type getTypeById(String ID) {
return rate; for (type type : type.values()) {
} if (type.ID.equals(ID)) {
return type;
public void setRate(Double rate) { }
this.rate = rate;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public Class getClazz() {
return clazz;
}
public void getClazz(Class clazz) {
this.clazz = clazz;
}
}
public void genMonster(World world, Rank rank) {
Double x = 0.0;
Double y = 100.0;
Double z = 0.0;
for (type type : type.values()) {
type.name();
Random r = new Random();
int per = r.nextInt(100);
if (per >= type.rate) {
// spawn entity
debug("Spawning Entity " + type.ID);
Entity e = world.spawnEntity(
new Location(world, x, y, z),
EntityType.ARROW
);
// e = ((RaxenEntity) type.getClazz()).createEntity();
e.setInvulnerable(true);
BukkitTask task = new BukkitRunnable() {
@Override
public void run() {
Location loc = new Location(
e.getWorld(),
e.getLocation().getX(),
e.getLocation().getY() - 1,
e.getLocation().getZ()
);
if (loc.getBlock().getType() != Material.AIR) {
e.setInvulnerable(false);
this.cancel();
} }
} return null;
}
public Double getRate() {
return rate;
}
public void setRate(Double rate) {
this.rate = rate;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public Class getClazz() {
return clazz;
}
public void getClazz(Class clazz) {
this.clazz = clazz;
}
}
public void genMonster(World world, Rank rank) {
Double x = 0.0;
Double y = 100.0;
Double z = 0.0;
for (type type : type.values()) {
type.name();
Random r = new Random();
int per = r.nextInt(100);
if (per >= type.rate) {
// spawn entity
debug("Spawning Entity " + type.ID);
Entity e = world.spawnEntity(
new Location(world, x, y, z),
EntityType.ARROW
);
// e = ((RaxenEntity) type.getClazz()).createEntity();
e.setInvulnerable(true);
BukkitTask task = new BukkitRunnable() {
@Override
public void run() {
Location loc = new Location(
e.getWorld(),
e.getLocation().getX(),
e.getLocation().getY() - 1,
e.getLocation().getZ()
);
if (loc.getBlock().getType() != Material.AIR) {
e.setInvulnerable(false);
this.cancel();
}
}
}
.runTaskTimerAsynchronously(
Bukkit.getPluginManager().getPlugin("Raxen"),
0L,
20L
);
}
x = 5.0 + (50.0 - 5.0) * r.nextDouble();
z = 5.0 + (50.0 - 5.0) * r.nextDouble();
} }
.runTaskTimerAsynchronously(
Bukkit.getPluginManager().getPlugin("Raxen"),
0L,
20L
);
}
x = 5.0 + (50.0 - 5.0) * r.nextDouble();
z = 5.0 + (50.0 - 5.0) * r.nextDouble();
} }
}
} }

View file

@ -7,11 +7,16 @@ 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(
super(name, rank, types, mType); String name,
} Rank rank,
Types types,
MonsterType mType
) {
super(name, rank, types, mType);
}
public ForestDungeon() { public ForestDungeon() {
super("Forest", Rank.E, Types.FOREST, new ForestMonster()); super("Forest", Rank.E, Types.FOREST, new ForestMonster());
} }
} }

View file

@ -7,19 +7,19 @@ import me.unurled.raxen.components.entity.other.custom.dungeon.forest.Wolf;
public class ForestMonster extends MonsterType { public class ForestMonster extends MonsterType {
@Getter @Getter
enum type { enum type {
ELF(50.0, "ELF", Elf.class), ELF(50.0, "ELF", Elf.class),
WOLF(50.0, "WOLF", Wolf.class); WOLF(50.0, "WOLF", Wolf.class);
private Double rate; private Double rate;
public String ID; public String ID;
public Class clazz; public Class clazz;
type(Double rate, String ID, Class clazz) { type(Double rate, String ID, Class clazz) {
this.rate = rate; this.rate = rate;
this.ID = ID; this.ID = ID;
this.clazz = clazz; this.clazz = clazz;
}
} }
}
} }

View file

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

View file

@ -14,94 +14,94 @@ import org.jetbrains.annotations.NotNull;
public class EnchantmentWarpper extends Enchantment { public class EnchantmentWarpper extends Enchantment {
private final int maxLevel; private final int maxLevel;
public EnchantmentWarpper(String nameSpace, String name, int lvl) { public EnchantmentWarpper(String nameSpace, String name, int lvl) {
super(NamespacedKey.minecraft(nameSpace)); super(NamespacedKey.minecraft(nameSpace));
this.maxLevel = lvl; this.maxLevel = lvl;
} }
@Override @Override
@Deprecated @Deprecated
public @NotNull String getName() { public @NotNull String getName() {
return null; return null;
} }
@Override @Override
public int getMaxLevel() { public int getMaxLevel() {
return maxLevel; return maxLevel;
} }
@Override @Override
public int getStartLevel() { public int getStartLevel() {
return 0; return 0;
} }
@Override @Override
public @NotNull EnchantmentTarget getItemTarget() { public @NotNull EnchantmentTarget getItemTarget() {
return null; return null;
} }
@Override @Override
public boolean isTreasure() { public boolean isTreasure() {
return false; return false;
} }
@Override @Override
public boolean isCursed() { public boolean isCursed() {
return false; return false;
} }
@Override @Override
public boolean conflictsWith(@NotNull Enchantment other) { public boolean conflictsWith(@NotNull Enchantment other) {
return false; return false;
} }
@Override @Override
public boolean canEnchantItem(@NotNull ItemStack item) { public boolean canEnchantItem(@NotNull ItemStack item) {
return false; return false;
} }
@Override @Override
public @NotNull Component displayName(int level) { public @NotNull Component displayName(int level) {
return null; return null;
} }
@Override @Override
public boolean isTradeable() { public boolean isTradeable() {
return false; return false;
} }
@Override @Override
public boolean isDiscoverable() { public boolean isDiscoverable() {
return false; return false;
} }
@Override @Override
public @NotNull EnchantmentRarity getRarity() { public @NotNull EnchantmentRarity getRarity() {
return null; return null;
} }
@Override @Override
public float getDamageIncrease( public float getDamageIncrease(
int level, int level,
@NotNull EntityCategory entityCategory @NotNull EntityCategory entityCategory
) { ) {
return 0; return 0;
} }
@Override @Override
public @NotNull Set<EquipmentSlot> getActiveSlots() { public @NotNull Set<EquipmentSlot> getActiveSlots() {
return null; return null;
} }
@Override @Override
public @NotNull String translationKey() { public @NotNull String translationKey() {
return null; return null;
} }
@Override @Override
public @NotNull Key key() { public @NotNull Key key() {
return super.key(); return super.key();
} }
} }

View file

@ -6,9 +6,9 @@ import org.bukkit.event.Listener;
public class Telekinesis implements Listener { public class Telekinesis implements Listener {
public static final Enchantment TELEKINESIS = new EnchantmentWarpper( public static final Enchantment TELEKINESIS = new EnchantmentWarpper(
"telekinesis", "telekinesis",
"telekinesis", "telekinesis",
1 1
); );
} }

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;
@ -14,158 +15,161 @@ import org.jetbrains.annotations.NotNull;
public class Attribute { public class Attribute {
/** /**
* The NamespaceKey register for the PersistentDataContainer. * The NamespaceKey register for the PersistentDataContainer.
* static NamespacedKey namespacekey = namespacedKey.TYPE; * static NamespacedKey namespacekey = namespacedKey.TYPE;
*/ */
public NamespacedKey namespacekey; public NamespacedKey namespacekey;
/** /**
* The name of the attribute * The name of the attribute
* static String name = "null"; * static String name = "null";
*/ */
public String name; public String name;
public Attribute(NamespacedKey namespacekey, String name) { public Attribute(NamespacedKey namespacekey, String name) {
this.namespacekey = namespacekey; this.namespacekey = namespacekey;
this.name = name; this.name = name;
} }
/** /**
* gives the name uppercased * gives the name uppercased
* @return the name in uppercase * @return the name in uppercase
*/ */
public String nameUppercase() { public String nameUppercase() {
return name.toUpperCase(); return name.toUpperCase();
} }
/** /**
* get how many the Entity has Attributed * get how many the Entity has Attributed
* @param entity a living entity * @param entity a living entity
* @return the amount of attribute * @return the amount of attribute
*/ */
public Integer get(@NotNull Entity entity) { public Integer get(@NotNull Entity entity) {
if ( if (
entity entity
.getPersistentDataContainer() .getPersistentDataContainer()
.has(namespacekey, PersistentDataType.INTEGER) .has(namespacekey, PersistentDataType.INTEGER)
) { ) {
debug( debug(
" attribute gett" + " attribute gett" +
entity
.getPersistentDataContainer()
.get(namespacekey, PersistentDataType.INTEGER)
);
return entity
.getPersistentDataContainer()
.get(namespacekey, PersistentDataType.INTEGER);
}
debug(
name +
" not found in Entity: " +
entity.getType().toString() +
" " +
entity.getName() +
" " +
entity.getUniqueId().toString()
);
set(entity, 0);
return 0;
}
/**
* get how many the Entity has Attributed
* @param it an ItemStack
* @return the amount of attribute
*/
public Integer get(@NotNull ItemStack it) {
NBTItem nbti = new NBTItem(it);
if (nbti.hasTag(name)) {
return nbti.getInteger(name);
}
return 0;
}
/**
* Get the amount of attribute on the item
* @param e a LivingEntity
* @return an amount of attribute on the item
*/
public Integer getItem(@NotNull LivingEntity e) {
EntityEquipment equi = e.getEquipment();
Integer attribute = 0;
if (equi != null) {
if (
equi.getItemInMainHand().getType() != Material.AIR &&
equi.getHelmet() != null
) {
ItemStack item = equi.getItemInMainHand();
attribute = attribute + get(item);
}
if (
equi.getHelmet().getType() != Material.AIR &&
equi.getHelmet() != null
) {
ItemStack item = equi.getHelmet();
attribute = attribute + get(item);
}
if (
equi.getChestplate().getType() != Material.AIR &&
equi.getChestplate() != null
) {
ItemStack item = equi.getChestplate();
attribute = attribute + get(item);
}
if (
equi.getChestplate().getType() != Material.AIR &&
equi.getChestplate() != null
) {
ItemStack item = equi.getChestplate();
attribute = attribute + get(item);
}
if (
equi.getLeggings().getType() != Material.AIR &&
equi.getLeggings() != null
) {
ItemStack item = equi.getLeggings();
attribute = attribute + get(item);
}
if (
equi.getBoots().getType() != Material.AIR &&
equi.getBoots() != null
) {
ItemStack item = equi.getBoots();
attribute = attribute + get(item);
}
}
return attribute;
}
/**
* set amount to the entity's attribute
* @param entity a living entity
* @param amount the amount you want to set
*/
public void set(@NotNull Entity entity, @NotNull Integer amount) {
entity entity
.getPersistentDataContainer() .getPersistentDataContainer()
.get(namespacekey, PersistentDataType.INTEGER) .set(namespacekey, PersistentDataType.INTEGER, amount);
); debug("set " + name + " " + amount);
return entity
.getPersistentDataContainer()
.get(namespacekey, PersistentDataType.INTEGER);
} }
debug(
name +
" not found in Entity: " +
entity.getType().toString() +
" " +
entity.getName() +
" " +
entity.getUniqueId().toString()
);
set(entity, 0);
return 0;
}
/** /**
* get how many the Entity has Attributed * add amount to the entity's attribute
* @param it an ItemStack * @param entity a living entity
* @return the amount of attribute * @param amount the amount you want to set
*/ */
public Integer get(@NotNull ItemStack it) { public void add(@NotNull Entity entity, @NotNull Integer amount) {
NBTItem nbti = new NBTItem(it); log(get(entity) + " " + amount);
if (nbti.hasTag(name)) { set(entity, get(entity) + amount);
return nbti.getInteger(name);
} }
return 0;
}
/** /**
* Get the amount of attribute on the item * remove amount to the entity's attribute
* @param e a LivingEntity * @param entity a living entity
* @return an amount of attribute on the item * @param amount the amount you want to set
*/ */
public Integer getItem(@NotNull LivingEntity e) { public void remove(@NotNull Entity entity, @NotNull Integer amount) {
EntityEquipment equi = e.getEquipment(); set(entity, get(entity) - amount);
Integer attribute = 0;
if (equi != null) {
if (
equi.getItemInMainHand().getType() != Material.AIR &&
equi.getHelmet() != null
) {
ItemStack item = equi.getItemInMainHand();
attribute = attribute + get(item);
}
if (
equi.getHelmet().getType() != Material.AIR && equi.getHelmet() != null
) {
ItemStack item = equi.getHelmet();
attribute = attribute + get(item);
}
if (
equi.getChestplate().getType() != Material.AIR &&
equi.getChestplate() != null
) {
ItemStack item = equi.getChestplate();
attribute = attribute + get(item);
}
if (
equi.getChestplate().getType() != Material.AIR &&
equi.getChestplate() != null
) {
ItemStack item = equi.getChestplate();
attribute = attribute + get(item);
}
if (
equi.getLeggings().getType() != Material.AIR &&
equi.getLeggings() != null
) {
ItemStack item = equi.getLeggings();
attribute = attribute + get(item);
}
if (
equi.getBoots().getType() != Material.AIR && equi.getBoots() != null
) {
ItemStack item = equi.getBoots();
attribute = attribute + get(item);
}
} }
return attribute;
}
/**
* set amount to the entity's attribute
* @param entity a living entity
* @param amount the amount you want to set
*/
public void set(@NotNull Entity entity, @NotNull Integer amount) {
entity
.getPersistentDataContainer()
.set(namespacekey, PersistentDataType.INTEGER, amount);
debug("set " + name + " " + amount);
}
/**
* add amount to the entity's attribute
* @param entity a living entity
* @param amount the amount you want to set
*/
public void add(@NotNull Entity entity, @NotNull Integer amount) {
set(entity, get(entity) + amount);
}
/**
* remove amount to the entity's attribute
* @param entity a living entity
* @param amount the amount you want to set
*/
public void remove(@NotNull Entity entity, @NotNull Integer amount) {
set(entity, get(entity) - amount);
}
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class Defense extends Attribute { public class Defense extends Attribute {
public Defense(NamespacedKey namespacekey, String name) { public Defense(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class Health extends Attribute { public class Health extends Attribute {
public Health(NamespacedKey namespacekey, String name) { public Health(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class ItemDefense extends Attribute { public class ItemDefense extends Attribute {
public ItemDefense(NamespacedKey namespacekey, String name) { public ItemDefense(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class ItemHealth extends Attribute { public class ItemHealth extends Attribute {
public ItemHealth(NamespacedKey namespacekey, String name) { public ItemHealth(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class ItemLuck extends Attribute { public class ItemLuck extends Attribute {
public ItemLuck(NamespacedKey namespacekey, String name) { public ItemLuck(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class ItemMana extends Attribute { public class ItemMana extends Attribute {
public ItemMana(NamespacedKey namespacekey, String name) { public ItemMana(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class ItemSpeed extends Attribute { public class ItemSpeed extends Attribute {
public ItemSpeed(NamespacedKey namespacekey, String name) { public ItemSpeed(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class ItemStrength extends Attribute { public class ItemStrength extends Attribute {
public ItemStrength(NamespacedKey namespacekey, String name) { public ItemStrength(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class Luck extends Attribute { public class Luck extends Attribute {
public Luck(NamespacedKey namespacekey, String name) { public Luck(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class Mana extends Attribute { public class Mana extends Attribute {
public Mana(NamespacedKey namespacekey, String name) { public Mana(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class MaxHealth extends Attribute { public class MaxHealth extends Attribute {
public MaxHealth(NamespacedKey namespacekey, String name) { public MaxHealth(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class MaxMana extends Attribute { public class MaxMana extends Attribute {
public MaxMana(NamespacedKey namespacekey, String name) { public MaxMana(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,20 +4,20 @@ import org.bukkit.NamespacedKey;
public class MaxManaBuilder { public class MaxManaBuilder {
private NamespacedKey namespacekey; private NamespacedKey namespacekey;
private String name; private String name;
public MaxManaBuilder setNamespacekey(NamespacedKey namespacekey) { public MaxManaBuilder setNamespacekey(NamespacedKey namespacekey) {
this.namespacekey = namespacekey; this.namespacekey = namespacekey;
return this; return this;
} }
public MaxManaBuilder setName(String name) { public MaxManaBuilder setName(String name) {
this.name = name; this.name = name;
return this; return this;
} }
public MaxMana createMaxMana() { public MaxMana createMaxMana() {
return new MaxMana(namespacekey, name); return new MaxMana(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class Speed extends Attribute { public class Speed extends Attribute {
public Speed(NamespacedKey namespacekey, String name) { public Speed(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

View file

@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey;
public class Strength extends Attribute { public class Strength extends Attribute {
public Strength(NamespacedKey namespacekey, String name) { public Strength(NamespacedKey namespacekey, String name) {
super(namespacekey, name); super(namespacekey, name);
} }
} }

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

@ -5,43 +5,43 @@ import org.bukkit.NamespacedKey;
public class EntityNamespacedKey { public class EntityNamespacedKey {
public EntityNamespacedKey(Raxen main) { public EntityNamespacedKey(Raxen main) {
name = new NamespacedKey(main, "NAME"); name = new NamespacedKey(main, "NAME");
level = new NamespacedKey(main, "LEVEL"); level = new NamespacedKey(main, "LEVEL");
maxHealth = new NamespacedKey(main, "MAX_HEALTH"); maxHealth = new NamespacedKey(main, "MAX_HEALTH");
health = new NamespacedKey(main, "HEALTH"); health = new NamespacedKey(main, "HEALTH");
itemHealth = new NamespacedKey(main, "ITEM_HEALTH"); itemHealth = new NamespacedKey(main, "ITEM_HEALTH");
speed = new NamespacedKey(main, "SPEED"); speed = new NamespacedKey(main, "SPEED");
itemSpeed = new NamespacedKey(main, "ITEM_SPEED"); itemSpeed = new NamespacedKey(main, "ITEM_SPEED");
defense = new NamespacedKey(main, "DEFENSE"); defense = new NamespacedKey(main, "DEFENSE");
itemDefense = new NamespacedKey(main, "ITEM_DEFENSE"); itemDefense = new NamespacedKey(main, "ITEM_DEFENSE");
strength = new NamespacedKey(main, "STRENGTH"); strength = new NamespacedKey(main, "STRENGTH");
itemStrength = new NamespacedKey(main, "ITEM_STRENGTH"); itemStrength = new NamespacedKey(main, "ITEM_STRENGTH");
maxMana = new NamespacedKey(main, "MAX_MANA"); maxMana = new NamespacedKey(main, "MAX_MANA");
mana = new NamespacedKey(main, "MANA"); mana = new NamespacedKey(main, "MANA");
itemMana = new NamespacedKey(main, "ITEM_MANA"); itemMana = new NamespacedKey(main, "ITEM_MANA");
luck = new NamespacedKey(main, "LUCK"); luck = new NamespacedKey(main, "LUCK");
itemLuck = new NamespacedKey(main, "ITEM_LUCK"); itemLuck = new NamespacedKey(main, "ITEM_LUCK");
inventory = new NamespacedKey(main, "INVENTORY"); inventory = new NamespacedKey(main, "INVENTORY");
storage = new NamespacedKey(main, "STORAGE"); storage = new NamespacedKey(main, "STORAGE");
} }
public final NamespacedKey name; public final NamespacedKey name;
public final NamespacedKey level; public final NamespacedKey level;
public final NamespacedKey maxHealth; public final NamespacedKey maxHealth;
public final NamespacedKey health; public final NamespacedKey health;
public final NamespacedKey itemHealth; public final NamespacedKey itemHealth;
public final NamespacedKey speed; public final NamespacedKey speed;
public final NamespacedKey itemSpeed; public final NamespacedKey itemSpeed;
public final NamespacedKey defense; public final NamespacedKey defense;
public final NamespacedKey itemDefense; public final NamespacedKey itemDefense;
public final NamespacedKey strength; public final NamespacedKey strength;
public final NamespacedKey itemStrength; public final NamespacedKey itemStrength;
public final NamespacedKey maxMana; public final NamespacedKey maxMana;
public final NamespacedKey mana; public final NamespacedKey mana;
public final NamespacedKey itemMana; public final NamespacedKey itemMana;
public final NamespacedKey luck; public final NamespacedKey luck;
public final NamespacedKey itemLuck; public final NamespacedKey itemLuck;
public final NamespacedKey inventory; public final NamespacedKey inventory;
public final NamespacedKey storage; public final NamespacedKey storage;
} }

View file

@ -12,94 +12,114 @@ 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(
org.bukkit.entity.@NotNull Entity e,
String name,
Integer level,
int health,
int itemHealth,
int defense,
int itemDefense,
int speed,
int itemSpeed,
int strength,
int itemDmg
) {
PersistentDataContainer data = e.getPersistentDataContainer();
data.set(namespacedKey.health, PersistentDataType.INTEGER, health);
data.set(namespacedKey.itemHealth, PersistentDataType.INTEGER, itemHealth);
data.set(namespacedKey.speed, PersistentDataType.INTEGER, speed);
data.set(namespacedKey.itemSpeed, PersistentDataType.INTEGER, itemSpeed);
data.set(namespacedKey.defense, PersistentDataType.INTEGER, defense);
data.set(
namespacedKey.itemDefense,
PersistentDataType.INTEGER,
itemDefense
);
data.set(namespacedKey.strength, PersistentDataType.INTEGER, strength);
data.set(namespacedKey.itemStrength, PersistentDataType.INTEGER, itemDmg);
data.set(namespacedKey.name, PersistentDataType.STRING, name);
data.set(namespacedKey.level, PersistentDataType.INTEGER, level);
}
public static void updateSkills(@NotNull LivingEntity livingEntity) {
PlayerManager pm =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
.getPlayerManager();
int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck;
defense = pm.getDefense().get(livingEntity);
maxMana = pm.getMaxMana().get(livingEntity);
itemDefense = pm.getItemDefense().get(livingEntity);
health = pm.getHealth().get(livingEntity);
itemHealth = pm.getItemHealth().get(livingEntity);
mana = pm.getMana().get(livingEntity);
speed = pm.getSpeed().get(livingEntity);
itemLuck = pm.getItemLuck().get(livingEntity);
strength = pm.getStrength().get(livingEntity);
luck = pm.getLuck().get(livingEntity);
maxHealth = pm.getMaxHealth().get(livingEntity);
itemStrength = pm.getItemStrength().get(livingEntity);
itemSpeed = pm.getItemSpeed().get(livingEntity);
itemMana = pm.getItemMana().get(livingEntity);
if (
livingEntity.getAttribute(
org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED
) !=
null
) {
livingEntity
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED)
.setBaseValue((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
} }
if (
livingEntity.getAttribute( public void setNameSpacedKeys(
org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED org.bukkit.entity.@NotNull Entity e,
) != String name,
null Integer level,
int health,
int itemHealth,
int defense,
int itemDefense,
int speed,
int itemSpeed,
int strength,
int itemDmg
) { ) {
livingEntity PersistentDataContainer data = e.getPersistentDataContainer();
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED) data.set(namespacedKey.health, PersistentDataType.INTEGER, health);
.setBaseValue((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); data.set(
namespacedKey.itemHealth,
PersistentDataType.INTEGER,
itemHealth
);
data.set(namespacedKey.speed, PersistentDataType.INTEGER, speed);
data.set(
namespacedKey.itemSpeed,
PersistentDataType.INTEGER,
itemSpeed
);
data.set(namespacedKey.defense, PersistentDataType.INTEGER, defense);
data.set(
namespacedKey.itemDefense,
PersistentDataType.INTEGER,
itemDefense
);
data.set(namespacedKey.strength, PersistentDataType.INTEGER, strength);
data.set(
namespacedKey.itemStrength,
PersistentDataType.INTEGER,
itemDmg
);
data.set(namespacedKey.name, PersistentDataType.STRING, name);
data.set(namespacedKey.level, PersistentDataType.INTEGER, level);
}
public void updateSkills(@NotNull LivingEntity livingEntity) {
PlayerManager pm =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
.getPlayerManager();
int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck;
defense = pm.getDefense().get(livingEntity);
maxMana = pm.getMaxMana().get(livingEntity);
itemDefense = pm.getItemDefense().get(livingEntity);
health = pm.getHealth().get(livingEntity);
itemHealth = pm.getItemHealth().get(livingEntity);
mana = pm.getMana().get(livingEntity);
speed = pm.getSpeed().get(livingEntity);
itemLuck = pm.getItemLuck().get(livingEntity);
strength = pm.getStrength().get(livingEntity);
luck = pm.getLuck().get(livingEntity);
maxHealth = pm.getMaxHealth().get(livingEntity);
itemStrength = pm.getItemStrength().get(livingEntity);
itemSpeed = pm.getItemSpeed().get(livingEntity);
itemMana = pm.getItemMana().get(livingEntity);
if (
livingEntity.getAttribute(
org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED
) !=
null
) {
livingEntity
.getAttribute(
org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED
)
.setBaseValue(
(float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)
);
}
if (
livingEntity.getAttribute(
org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED
) !=
null
) {
livingEntity
.getAttribute(
org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED
)
.setBaseValue(
(float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)
);
}
livingEntity
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH)
.setBaseValue(20D + (health + itemHealth) / 100);
debug(
"Entity " + livingEntity.getType().name(),
"Speed " + (speed + itemSpeed),
"Health " + (health + itemHealth) + " Max Health " + maxHealth,
"Defense " + (defense + itemDefense),
"Strength " + (strength + itemStrength),
"Luck " + (luck + itemLuck),
"Mana " + (mana + itemMana) + " Max Mana " + maxMana
);
} }
livingEntity
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH)
.setBaseValue(20D + (health + itemHealth) / 100);
debug(
"Entity " + livingEntity.getType().name(),
"Speed " + (speed + itemSpeed),
"Health " + (health + itemHealth) + " Max Health " + maxHealth,
"Defense " + (defense + itemDefense),
"Strength " + (strength + itemStrength),
"Luck " + (luck + itemLuck),
"Mana " + (mana + itemMana) + " Max Mana " + maxMana
);
}
} }

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,70 +1,276 @@
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;
public abstract class RaxenEntity { public abstract class RaxenEntity {
private final Raxen main; private final Raxen main;
@Getter @Getter
private final String name; private final String name;
@Getter @Getter
private Integer level; private final String ID;
@Getter public Component fullName;
@Setter
private Double health;
@Getter @Getter
@Setter private Integer level;
private Double strength;
@Getter @Getter
@Setter @Setter
Boolean isAlive = false; private Double health;
public RaxenEntity( @Getter
Raxen main, @Setter
String name, private Double strength;
Integer level,
Double health,
Double strength
) {
this.main = main;
this.name = name;
this.level = level;
this.health = health;
this.strength = strength;
}
public Entity createEntity(EntityType types, String name, Location location) { @Getter
Entity e = location.getWorld().spawnEntity(location, types); @Setter
e.setCustomNameVisible(true); Boolean isAlive = false;
e.customName(Component.text(name));
return e; boolean despawned = false;
}
public void register(Entity e) { me.unurled.raxen.components.entity.other.custom.Entity entity;
PersistentDataContainer data = e.getPersistentDataContainer(); public HashMap<UUID, Long> lastAttackedByTimes;
data.set(new NamespacedKey(main, "NAME"), PersistentDataType.STRING, name); public java.util.HashMap<UUID, Long> damageDealt;
}
public Double getMaxHealth(Entity e) { @Getter
PersistentDataContainer data = e.getPersistentDataContainer(); @Setter
EntityNamespacedKey key = new EntityNamespacedKey(main); Boolean isHostile;
return data.get(key.maxHealth, PersistentDataType.DOUBLE);
}
public abstract Entity createEntity(Location location); public RaxenEntity(
Raxen main,
String name,
String id,
Integer level,
Double health,
Double strength
) {
this.main = main;
this.name = name;
ID = id;
this.level = level;
this.health = health;
this.strength = strength;
isHostile = true;
}
/*public Entity createEntity(
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.customName(Component.text(name));
entity = e;
return e;
}*/
public void register(Entity e) {
PersistentDataContainer data = e.getPersistentDataContainer();
data.set(
new NamespacedKey(main, "NAME"),
PersistentDataType.STRING,
name
);
}
public Double getMaxHealth(Entity e) {
PersistentDataContainer data = e.getPersistentDataContainer();
EntityNamespacedKey key = new EntityNamespacedKey(main);
return data.get(key.maxHealth, PersistentDataType.DOUBLE);
}
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,97 +7,108 @@ 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;
private final String name; private final String name;
@Getter @Getter
private Integer level; private Integer level;
@Setter @Setter
private Double health; private Double health;
@Getter @Getter
@Setter @Setter
private Double strength; private Double strength;
@Getter @Getter
@Setter @Setter
private Double defense; private Double defense;
@Getter @Getter
@Setter @Setter
private Double speed; private Double speed;
@Getter @Getter
@Setter @Setter
private Double maxHealth; private Double maxHealth;
@Getter @Getter
@Setter @Setter
private boolean isHostile; private boolean isHostile;
public Entity( @Getter
String name, @Setter
Integer level, private double xp;
Double maxHealth,
Double strength,
Double defense,
Double speed,
boolean isHostile
) {
this.name = name;
this.level = level;
this.health = maxHealth;
this.strength = strength;
this.defense = defense;
this.speed = speed;
this.maxHealth = maxHealth;
this.isHostile = isHostile;
this.uuid = UUID.randomUUID();
}
public void register(Raxen main) { public Entity(
main.getManager().getEntityManager().entities.put(name, this); String name,
} Integer level,
Double maxHealth,
public String getName() { Double strength,
return "<white>" + name; Double defense,
} Double speed,
boolean isHostile,
public String getFullName(Entity e) { double xp
if (isHostile) { ) {
return colorString( this.name = name;
getColorLevel() + this.level = level;
"<white>⚔️" + this.health = maxHealth;
getName() + this.strength = strength;
"<red>" + this.defense = defense;
health + this.speed = speed;
"<white>/<white/>" + this.maxHealth = maxHealth;
maxHealth this.isHostile = isHostile;
); this.uuid = UUID.randomUUID();
} else { this.xp = xp;
return colorString(
getColorLevel() +
"<white>❤️" +
getName() +
"<red>" +
health +
"<white>/<white/>" +
maxHealth
);
} }
}
public String getColorLevel() { public void register(Raxen main) {
return level.toString(); // main.getManager().getEntityManager().entities.put(name, this);
} }
public Double getHealth() { public String getName() {
Double health = 0.0; return "<white>" + name;
}
return health; public String getFullName(Entity e) {
} if (isHostile) {
return colorString(
getColorLevel() +
"<white>⚔️" +
getName() +
"<red>" +
health +
"<white>/<white/>" +
maxHealth
);
} else {
return colorString(
getColorLevel() +
"<white>❤️" +
getName() +
"<red>" +
health +
"<white>/<white/>" +
maxHealth
);
}
}
public String getColorLevel() {
return level.toString();
}
public Double getHealth() {
Double health = 0.0;
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,36 +5,37 @@ 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,
String name, String name,
Integer level, Integer level,
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;
} }
@Override /**
public Entity createEntity(Location location) { * Elf Default values
return super.createEntity(EntityType.PLAYER, name, location); *
} * @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;
}
/** @Override
* Elf Default values public Entity createEntity(Location location) {
* @param main the main instance return null;
* @param name }
*/
public Elf(Raxen main, String name) {
super(main, "Elf", 10, 120.0, 25.0);
this.name = name;
}
} }

View file

@ -5,31 +5,30 @@ 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 {
@Getter @Getter
private final String name; private final String name;
public Wolf( public Wolf(
Raxen main, Raxen main,
String name, String name,
Integer level, Integer level,
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,39 +1,705 @@
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;
register(main); /* return super.createEntity(
} EntityType.PLAYER,
"Goblin",
location
);*/
}
};
register(main);
}
public String getName() { public String getName() {
return "<white>" + goblin.getName(); return "<white>" + goblin.getName();
} }
public String getFullName(Entity e) { public String getFullName(Entity e) {
return ( return (
"<white>⚔️" + "<white>⚔️" +
getName() + getName() +
"<red>" + "<red>" +
getHealth() + getHealth() +
"<white>/<white/>" + "<white>/<white/>" +
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

@ -4,17 +4,17 @@ import me.unurled.raxen.components.entity.player.storages.Inventory;
public class Inventories { public class Inventories {
private Inventory inv; private Inventory inv;
public Inventories(Inventory inv) { public Inventories(Inventory inv) {
this.inv = inv; this.inv = inv;
} }
public Inventory getInv() { public Inventory getInv() {
return inv; return inv;
} }
public void setInv(Inventory inv) { public void setInv(Inventory inv) {
this.inv = inv; this.inv = inv;
} }
} }

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,47 +1,99 @@
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() int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck;
.getPlayerManager(); defense = pm.getDefense().get(player);
int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; maxMana = pm.getMaxMana().get(player);
defense = pm.getDefense().get(player); itemDefense = pm.getItemDefense().get(player);
maxMana = pm.getMaxMana().get(player); health = pm.getHealth().get(player);
itemDefense = pm.getItemDefense().get(player); itemHealth = pm.getItemHealth().get(player);
health = pm.getHealth().get(player); mana = pm.getMana().get(player);
itemHealth = pm.getItemHealth().get(player); speed = pm.getSpeed().get(player);
mana = pm.getMana().get(player); itemLuck = pm.getItemLuck().get(player);
speed = pm.getSpeed().get(player); strength = pm.getStrength().get(player);
itemLuck = pm.getItemLuck().get(player); luck = pm.getLuck().get(player);
strength = pm.getStrength().get(player); maxHealth = pm.getMaxHealth().get(player);
luck = pm.getLuck().get(player); itemStrength = pm.getItemStrength().get(player);
maxHealth = pm.getMaxHealth().get(player); itemSpeed = pm.getItemSpeed().get(player);
itemStrength = pm.getItemStrength().get(player); itemMana = pm.getItemMana().get(player);
itemSpeed = pm.getItemSpeed().get(player); double hearts = maxHealth + itemHealth;
itemMana = pm.getItemMana().get(player); double heart = 10;
player if (hearts > 125 && hearts < 165) {
.getAttribute(Attribute.GENERIC_MAX_HEALTH) heart = 11;
.setBaseValue(20D + (health + itemHealth) / 100); } else if (hearts > 165 && hearts <= 230) {
player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); heart = 12;
player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); } else if (hearts > 230 && hearts <= 300) {
debug( heart = 13;
"Player " + player.getName(), } else if (hearts > 300 && hearts <= 400) {
"Speed " + (speed + itemSpeed), heart = 14;
"Health " + (health + itemHealth) + " Max Health " + maxHealth, } else if (hearts > 400 && hearts <= 500) {
"Defense " + (defense + itemDefense), heart = 15;
"Strength " + (strength + itemStrength), } else if (hearts > 500 && hearts <= 650) {
"Luck " + (luck + itemLuck), heart = 16;
"Mana " + (mana + itemMana) + " Max Mana " + maxMana } 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
.getAttribute(Attribute.GENERIC_MAX_HEALTH)
.setBaseValue(heart * 2);
player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
debug(
"Player " + player.getName(),
"Speed " + (speed + itemSpeed),
"Health " + (health + itemHealth) + " Max Health " + maxHealth,
"Defense " + (defense + itemDefense),
"Strength " + (strength + itemStrength),
"Luck " + (luck + itemLuck),
"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;
@ -24,151 +42,562 @@ import org.bukkit.persistence.PersistentDataType;
public class RaxenPlayer { public class RaxenPlayer {
private final Raxen main; private final Raxen main;
private final Player player; @Getter
private final EntityNamespacedKey namespacedKey; private final Player player;
private final EntityNamespacedKey namespacedKey;
private Boolean isRaxenPlayer; double crit_chance = 0.05;
public double critDamage = 1.50;
public boolean dead = false;
private Attribute attribute; private DamageType lastDamageCause = DamageType.NORMAL;
private Storage storages; private long lastEnvironmentalDamaged = 0;
private Inventories inventory; private long lastDamagedNonEnvironmental = 0;
private long lastDamaged = 0;
public RaxenPlayer(Raxen main, Player player) { private Boolean isRaxenPlayer;
this.main = main;
this.player = player;
this.namespacedKey = new EntityNamespacedKey(main);
this.isRaxenPlayer = true;
}
public Attribute createNewAttribute() { private Attribute attribute;
debug(main, "Created new Attribute");
EntityAttributes.setAttributes(
player,
100,
100,
0,
50,
0,
100,
0,
100,
0,
100,
100,
0,
10,
0
);
return new Attribute(
100,
100,
0,
50,
0,
100,
0,
100,
0,
100,
100,
0,
10,
0
);
}
public void setStorages( private Storage storages;
org.bukkit.inventory.Inventory inv, private Inventories inventory;
org.bukkit.inventory.Inventory ec
) {
setStorage(ec);
setInventory(inv);
}
public Storage getStorage() { private boolean inTutorial;
PersistentDataContainer data = player.getPersistentDataContainer();
String store = data.get(namespacedKey.storage, PersistentDataType.STRING);
org.bukkit.inventory.Inventory ec = Bukkit.createInventory(
null,
54,
Component.text("Ender Chest")
);
ec = setItemsToInventory(Items.mapItemStackDeserialize(store), ec);
EnderChest ecc = new EnderChest(ec);
Storage storage = new Storage(ecc);
return storage;
}
public Inventories getInventory() { private HashMap<String, HashMap<String, Integer>> mobCounter = new HashMap<String, HashMap<String, Integer>>();
PersistentDataContainer data = player.getPersistentDataContainer();
String inv = data.get(namespacedKey.inventory, PersistentDataType.STRING);
org.bukkit.inventory.Inventory invv = Bukkit.createInventory(
player,
InventoryType.PLAYER
);
invv =
setItemsToInventory(
Items.listItemStackDeserialize(inv),
(PlayerInventory) invv
);
Inventory invvv = new Inventory(invv);
Inventories invvvv = new Inventories(invvv);
return invvvv;
}
public void setInventory(org.bukkit.inventory.Inventory inv) { private int mobKills, playerKills, deaths, bossKills;
PersistentDataContainer data = player.getPersistentDataContainer();
List<String> listInv = new ArrayList<String>(); public long xp;
Integer reverse = 0; @Getter
for (ItemStack it : inv) { private int level;
reverse = reverse + 1;
if (it != null && it.getType() != Material.AIR) { @Getter
String s = Items.itemStackSerialize(it, reverse); @Setter
listInv.add(s); private Party party = null;
} @Getter
@Setter
private Party invitedParty = null;
BossBar bossBar;
public RaxenPlayer(Raxen main, Player player) {
this.main = main;
this.player = player;
this.namespacedKey = new EntityNamespacedKey(main);
this.isRaxenPlayer = true;
} }
String invv = Items.listItemStackSerialize(listInv);
this.inventory = new Inventories(new Inventory(inv));
data.set(namespacedKey.inventory, PersistentDataType.STRING, invv);
}
public void setStorage(org.bukkit.inventory.Inventory ec) { public Attribute createNewAttribute() {
PersistentDataContainer data = player.getPersistentDataContainer(); debug(main, "Created new Attribute");
List<String> list = new ArrayList<String>(); EntityAttributes.setAttributes(
int reverse = 0; player,
for (ItemStack it : ec) { 100,
if (it != null) { 100,
String s = Items.itemStackSerialize(it, reverse); 0,
list.add(s); 50,
} 0,
reverse += 1; 100,
0,
100,
0,
100,
100,
0,
10,
0
);
return new Attribute(
100,
100,
0,
50,
0,
100,
0,
100,
0,
100,
100,
0,
10,
0
);
} }
String store = Items.listItemStackSerialize(list);
this.storages = new Storage(new EnderChest(ec));
data.set(namespacedKey.storage, PersistentDataType.STRING, store);
}
public Storage createStorage() { public void setStorages(
setStorage(Bukkit.createInventory(null, 54, Component.text("Ender Chest"))); org.bukkit.inventory.Inventory inv,
return getStorage(); org.bukkit.inventory.Inventory ec
} ) {
setStorage(ec);
setInventory(inv);
}
public Inventories createInventory() { public Storage getStorage() {
setInventory(Bukkit.createInventory(null, InventoryType.PLAYER)); PersistentDataContainer data = player.getPersistentDataContainer();
return getInventory(); String store = data.get(
} namespacedKey.storage,
PersistentDataType.STRING
);
org.bukkit.inventory.Inventory ec = Bukkit.createInventory(
null,
54,
Component.text("Ender Chest")
);
ec = setItemsToInventory(Items.mapItemStackDeserialize(store), ec);
EnderChest ecc = new EnderChest(ec);
Storage storage = new Storage(ecc);
return storage;
}
public Boolean isRaxenPlayer() { public Inventories getInventory() {
return isRaxenPlayer; PersistentDataContainer data = player.getPersistentDataContainer();
} String inv = data.get(
namespacedKey.inventory,
PersistentDataType.STRING
);
org.bukkit.inventory.Inventory invv = Bukkit.createInventory(
player,
InventoryType.PLAYER
);
invv =
setItemsToInventory(
Items.listItemStackDeserialize(inv),
(PlayerInventory) invv
);
Inventory invvv = new Inventory(invv);
Inventories invvvv = new Inventories(invvv);
return invvvv;
}
public void isRaxenPlayer(boolean player) { public void setInventory(org.bukkit.inventory.Inventory inv) {
isRaxenPlayer = player; PersistentDataContainer data = player.getPersistentDataContainer();
} List<String> listInv = new ArrayList<String>();
int reverse = 0;
for (ItemStack it : inv) {
reverse = reverse + 1;
if (it != null && it.getType() != Material.AIR) {
String s = Items.itemStackSerialize(it, reverse);
listInv.add(s);
}
}
String invv = Items.listItemStackSerialize(listInv);
this.inventory = new Inventories(new Inventory(inv));
data.set(namespacedKey.inventory, PersistentDataType.STRING, invv);
}
public Attribute getAttribute() { public void setStorage(org.bukkit.inventory.Inventory ec) {
return attribute; PersistentDataContainer data = player.getPersistentDataContainer();
} List<String> list = new ArrayList<String>();
int reverse = 0;
for (ItemStack it : ec) {
if (it != null) {
String s = Items.itemStackSerialize(it, reverse);
list.add(s);
}
reverse += 1;
}
String store = Items.listItemStackSerialize(list);
this.storages = new Storage(new EnderChest(ec));
data.set(namespacedKey.storage, PersistentDataType.STRING, store);
}
public Storage createStorage() {
setStorage(
Bukkit.createInventory(null, 54, Component.text("Ender Chest"))
);
return getStorage();
}
public Inventories createInventory() {
org.bukkit.inventory.Inventory inv = Bukkit.createInventory(null, InventoryType.PLAYER);
setInventory(inv);
return new Inventories(new Inventory(inv));
}
public Boolean isRaxenPlayer() {
return isRaxenPlayer;
}
public void isRaxenPlayer(boolean player) {
isRaxenPlayer = player;
}
public Attribute getAttribute() {
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,75 +1,86 @@
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 {
private Raxen main; private Raxen main;
private Vault vault; private Vault vault;
public Scoreboard(Raxen main) { public Scoreboard(Raxen main) {
this.main = main; this.main = main;
this.vault = main.getManager().getLibsManager().getVault(); this.vault = main.getManager().getLibsManager().getVault();
} }
public void createScorebord(Player player) { public void createScorebord(Player player) {
ScoreboardManager manager = Bukkit.getScoreboardManager(); ScoreboardManager manager = Bukkit.getScoreboardManager();
org.bukkit.scoreboard.Scoreboard board = manager.getNewScoreboard(); org.bukkit.scoreboard.Scoreboard board = manager.getNewScoreboard();
Objective obj = board.registerNewObjective( Objective obj = board.registerNewObjective(
"Raxen", "Raxen",
Criteria.DUMMY, Criteria.DUMMY,
colorTextComp("<red>Elixium") colorTextComp("<red>Elixium")
); );
obj.setDisplaySlot(DisplaySlot.SIDEBAR); obj.setDisplaySlot(DisplaySlot.SIDEBAR);
Score score = obj.getScore( Score score = obj.getScore(
textCompToString(colorTextComp("<gold>-------------")) textCompToString(colorTextComp("<gold>-------------"))
); );
score.setScore(4); score.setScore(4);
Score score1 = obj.getScore( Score score1 = obj.getScore(
textCompToString(colorTextComp("<aqua>Name:" + player.getName())) textCompToString(colorTextComp("<aqua>Name:" + player.getName()))
); );
score1.setScore(3); score1.setScore(3);
Score score2 = obj.getScore( Score score2 = obj.getScore(
textCompToString(colorTextComp("<white>Location")) textCompToString(colorTextComp("<white>Location"))
); );
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); )
Score score4 = obj.getScore( );
textCompToString(colorTextComp("<yellow>unurled.me")) score3.setScore(1);
); Score score4 = obj.getScore(
score4.setScore(0); textCompToString(colorTextComp("<yellow>unurled.me"))
player.setScoreboard(board); );
} score4.setScore(0);
player.setScoreboard(board);
public void updateScoreboardTransaction(Player player) { }
if (player != null) {
Objective objective = player public void updateScoreboardTransaction(Player player) {
.getScoreboard() if (player != null) {
.getObjective(DisplaySlot.SIDEBAR); Objective objective = player
player.getScoreboard().getObjective(DisplaySlot.SIDEBAR); .getScoreboard()
debug(main, String.valueOf(player.getScoreboard().getEntries())); .getObjective(DisplaySlot.SIDEBAR);
for (String str : player.getScoreboard().getEntries()) { player.getScoreboard().getObjective(DisplaySlot.SIDEBAR);
if (str.contains(player.getName())) {} debug(main, String.valueOf(player.getScoreboard().getEntries()));
} for (String str : player.getScoreboard().getEntries()) {
player.getScoreboard().resetScores("Coins"); if (str.contains(player.getName())) {
assert objective != null; }
Score score = objective.getScore( }
textCompToString( player.getScoreboard().resetScores("Coins");
colorTextComp("<gold>Coins: <gold>" + vault.getBalanceString(player)) assert objective != null;
) Score score = objective.getScore(
); textCompToString(
score.setScore(1); colorTextComp(
"<gold>Coins: <gold>" + vault.getBalanceString(player)
)
)
);
score.setScore(1);
}
} }
}
} }

View file

@ -4,17 +4,17 @@ import me.unurled.raxen.components.entity.player.storages.EnderChest;
public class Storage { public class Storage {
private EnderChest ec; private EnderChest ec;
public Storage(EnderChest ec) { public Storage(EnderChest ec) {
this.ec = ec; this.ec = ec;
} }
public EnderChest getEc() { public EnderChest getEc() {
return ec; return ec;
} }
public void setEc(EnderChest ec) { public void setEc(EnderChest ec) {
this.ec = ec; this.ec = ec;
} }
} }

View file

@ -5,39 +5,39 @@ import lombok.Setter;
public class Attribute { public class Attribute {
@Getter @Getter
@Setter @Setter
private int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; private int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck;
public Attribute( public Attribute(
int maxHealth, int maxHealth,
int health, int health,
int itemHealth, int itemHealth,
int defense, int defense,
int itemDefense, int itemDefense,
int speed, int speed,
int itemSpeed, int itemSpeed,
int strength, int strength,
int itemStrength, int itemStrength,
int maxMana, int maxMana,
int mana, int mana,
int itemMana, int itemMana,
int luck, int luck,
int itemLuck int itemLuck
) { ) {
this.maxHealth = maxHealth; this.maxHealth = maxHealth;
this.health = health; this.health = health;
this.itemHealth = itemHealth; this.itemHealth = itemHealth;
this.defense = defense; this.defense = defense;
this.itemDefense = itemDefense; this.itemDefense = itemDefense;
this.speed = speed; this.speed = speed;
this.itemSpeed = itemSpeed; this.itemSpeed = itemSpeed;
this.strength = strength; this.strength = strength;
this.itemStrength = itemStrength; this.itemStrength = itemStrength;
this.maxHealth = maxMana; this.maxHealth = maxMana;
this.mana = mana; this.mana = mana;
this.itemMana = itemMana; this.itemMana = itemMana;
this.luck = luck; this.luck = luck;
this.itemLuck = itemLuck; this.itemLuck = itemLuck;
} }
} }

View file

@ -11,96 +11,96 @@ import org.jetbrains.annotations.NotNull;
public class Attributes { public class Attributes {
private static EntityNamespacedKey namespacedKey; private static EntityNamespacedKey namespacedKey;
public Attributes(Raxen main) { public Attributes(Raxen main) {
namespacedKey = new EntityNamespacedKey(main); namespacedKey = new EntityNamespacedKey(main);
} }
@Contract("_ -> new") @Contract("_ -> new")
public static @NotNull Attribute getAttribute(Player player) { public static @NotNull Attribute getAttribute(Player player) {
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;
PlayerManager pm = PlayerManager pm =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
.getPlayerManager(); .getPlayerManager();
Entity e = player; Entity e = player;
defense = pm.getDefense().get(e); defense = pm.getDefense().get(e);
maxMana = pm.getMaxMana().get(e); maxMana = pm.getMaxMana().get(e);
itemDefense = pm.getItemDefense().get(e); itemDefense = pm.getItemDefense().get(e);
health = pm.getHealth().get(e); health = pm.getHealth().get(e);
itemHealth = pm.getItemHealth().get(e); itemHealth = pm.getItemHealth().get(e);
mana = pm.getMana().get(e); mana = pm.getMana().get(e);
speed = pm.getSpeed().get(e); speed = pm.getSpeed().get(e);
itemLuck = pm.getItemLuck().get(e); itemLuck = pm.getItemLuck().get(e);
strength = pm.getStrength().get(e); strength = pm.getStrength().get(e);
luck = pm.getLuck().get(e); luck = pm.getLuck().get(e);
maxHealth = pm.getMaxHealth().get(e); maxHealth = pm.getMaxHealth().get(e);
itemStrength = pm.getItemStrength().get(e); itemStrength = pm.getItemStrength().get(e);
itemSpeed = pm.getItemSpeed().get(e); itemSpeed = pm.getItemSpeed().get(e);
itemMana = pm.getItemMana().get(e); itemMana = pm.getItemMana().get(e);
return new Attribute( return new Attribute(
maxHealth, maxHealth,
health, health,
itemHealth, itemHealth,
defense, defense,
itemDefense, itemDefense,
speed, speed,
itemSpeed, itemSpeed,
strength, strength,
itemStrength, itemStrength,
maxMana, maxMana,
mana, mana,
itemMana, itemMana,
luck, luck,
itemLuck itemLuck
); );
} }
public static void setAttributes( public static void setAttributes(
Player player, Player player,
int maxHealth, int maxHealth,
int health, int health,
int itemHealth, int itemHealth,
int defense, int defense,
int itemDefense, int itemDefense,
int speed, int speed,
int itemSpeed, int itemSpeed,
int strength, int strength,
int itemStrength, int itemStrength,
int maxMana, int maxMana,
int mana, int mana,
int itemMana, int itemMana,
int luck, int luck,
int itemLuck int itemLuck
) { ) {
PlayerManager pm = PlayerManager pm =
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
.getPlayerManager(); .getPlayerManager();
Entity e = player; Entity e = player;
pm.getDefense().set(e, defense); pm.getDefense().set(e, defense);
pm.getMaxMana().set(e, maxMana); pm.getMaxMana().set(e, maxMana);
pm.getItemDefense().set(e, itemDefense); pm.getItemDefense().set(e, itemDefense);
pm.getHealth().set(e, health); pm.getHealth().set(e, health);
pm.getItemHealth().set(e, itemHealth); pm.getItemHealth().set(e, itemHealth);
pm.getMana().set(e, mana); pm.getMana().set(e, mana);
pm.getSpeed().set(e, speed); pm.getSpeed().set(e, speed);
pm.getItemLuck().set(e, itemLuck); pm.getItemLuck().set(e, itemLuck);
pm.getStrength().set(e, strength); pm.getStrength().set(e, strength);
pm.getLuck().set(e, luck); pm.getLuck().set(e, luck);
pm.getMaxHealth().set(e, maxHealth); pm.getMaxHealth().set(e, maxHealth);
pm.getItemStrength().set(e, itemStrength); pm.getItemStrength().set(e, itemStrength);
pm.getItemSpeed().set(e, itemSpeed); pm.getItemSpeed().set(e, itemSpeed);
pm.getItemMana().set(e, itemMana); pm.getItemMana().set(e, itemMana);
} }
public static String[] getNameList() { public static String[] getNameList() {
return new String[] { return new String[] {
"Defense", "Defense",
"Health", "Health",
"Luck", "Luck",
"Mana", "Mana",
"Speed", "Speed",
"Strength", "Strength"
}; };
} }
} }

View file

@ -8,46 +8,46 @@ import org.bukkit.inventory.ItemStack;
public class Class { public class Class {
@Getter @Getter
String name; String name;
@Getter @Getter
String colorName; String colorName;
@Getter @Getter
String ID; String ID;
@Getter @Getter
ItemStack placeHolder; ItemStack placeHolder;
@Getter @Getter
Integer max_level; Integer max_level;
public Class( public Class(
String name, String name,
String colorName, String colorName,
String ID, String ID,
String itemPlaceHolder, String itemPlaceHolder,
Integer max_level Integer max_level
) { ) {
this.name = name; this.name = name;
this.ID = ID; this.ID = ID;
this.placeHolder = new ItemStack(Material.getMaterial(itemPlaceHolder)); this.placeHolder = new ItemStack(Material.getMaterial(itemPlaceHolder));
this.placeHolder.getItemMeta().displayName(colorTextComp(colorName)); this.placeHolder.getItemMeta().displayName(colorTextComp(colorName));
this.max_level = max_level; this.max_level = max_level;
} }
public Class( public Class(
String name, String name,
String colorName, String colorName,
String ID, String ID,
ItemStack itemPlaceHolder, ItemStack itemPlaceHolder,
Integer max_level Integer max_level
) { ) {
this.name = name; this.name = name;
this.ID = ID; this.ID = ID;
this.placeHolder = itemPlaceHolder; this.placeHolder = itemPlaceHolder;
this.placeHolder.getItemMeta().displayName(colorTextComp(colorName)); this.placeHolder.getItemMeta().displayName(colorTextComp(colorName));
this.max_level = max_level; this.max_level = max_level;
} }
} }

View file

@ -9,35 +9,35 @@ import me.unurled.raxen.components.entity.player.classes.list.Assassin;
public class Classes { public class Classes {
private final Raxen main; private final Raxen main;
public Classes(Raxen main) { public Classes(Raxen main) {
this.main = main; this.main = main;
register(); register();
}
public void register() {
registerClass(new Assassin());
}
public class resultClass {
@Getter
@Setter
public Class clas;
@Getter
@Setter
public String id;
public resultClass(Class clas, String id) {
this.clas = clas;
this.id = id;
} }
}
public void registerClass(Class clas) { public void register() {
debug(clas.getID()); registerClass(new Assassin());
main.getManager().getPlayerManager().addClasses(clas, clas.getID()); }
}
public class resultClass {
@Getter
@Setter
public Class clas;
@Getter
@Setter
public String id;
public resultClass(Class clas, String id) {
this.clas = clas;
this.id = id;
}
}
public void registerClass(Class clas) {
debug(clas.getID());
main.getManager().getPlayerManager().addClasses(clas, clas.getID());
}
} }

View file

@ -7,33 +7,33 @@ import org.bukkit.inventory.ItemStack;
public class Assassin extends Class { public class Assassin extends Class {
String ID = "ASSASSIN"; String ID = "ASSASSIN";
String name = "Assassin"; String name = "Assassin";
String colorName = "<red>Assassin"; String colorName = "<red>Assassin";
Integer max_level = 100; Integer max_level = 100;
ItemStack placeHolder; ItemStack placeHolder;
public Assassin() { public Assassin() {
super( super(
"Assassin", "Assassin",
"<red>Assassin", "<red>Assassin",
"ASSASSIN", "ASSASSIN",
new ItemStack(Material.AIR), new ItemStack(Material.AIR),
100 100
); );
Dagger dagger = new Dagger(); Dagger dagger = new Dagger();
dagger.buildItem(); dagger.buildItem();
placeHolder = dagger.getItem(); placeHolder = dagger.getItem();
} }
public Assassin( public Assassin(
String name, String name,
String colorName, String colorName,
String ID, String ID,
String itemPlaceHolder, String itemPlaceHolder,
Integer max_level Integer max_level
) { ) {
super(name, colorName, ID, itemPlaceHolder, max_level); super(name, colorName, ID, itemPlaceHolder, max_level);
} }
} }

View file

@ -8,15 +8,15 @@ import org.bukkit.inventory.Inventory;
public class EnderChest { public class EnderChest {
@Getter @Getter
@Setter @Setter
public Inventory ec = Bukkit.createInventory( public Inventory ec = Bukkit.createInventory(
null, null,
54, 54,
Component.text("Ender Chest") Component.text("Ender Chest")
); );
public EnderChest(Inventory ec) { public EnderChest(Inventory ec) {
this.ec = ec; this.ec = ec;
} }
} }

View file

@ -7,14 +7,14 @@ import org.bukkit.event.inventory.InventoryType;
public class Inventory { public class Inventory {
@Getter @Getter
@Setter @Setter
public org.bukkit.inventory.Inventory inv = Bukkit.createInventory( public org.bukkit.inventory.Inventory inv = Bukkit.createInventory(
null, null,
InventoryType.PLAYER InventoryType.PLAYER
); );
public Inventory(org.bukkit.inventory.Inventory inv) { public Inventory(org.bukkit.inventory.Inventory inv) {
this.inv = inv; this.inv = inv;
} }
} }

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;
@ -25,293 +19,61 @@ import org.bukkit.inventory.ItemStack;
public class ItemListGui implements Listener { public class ItemListGui implements Listener {
private Raxen main; private Raxen main;
@Getter @Getter
private Inventory inv = Bukkit.createInventory( private Inventory inv = Bukkit.createInventory(
null, null,
54, 54,
Component.text("Item List") Component.text("Item List")
); );
private Inventory inv2 = Bukkit.createInventory( private HashMap<String, ItemStack> itlist;
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; public ItemListGui(Raxen main) {
this.main = main;
public ItemListGui(Raxen main) { this.itlist = this.main.getManager().getItemManager().getList();
this.main = main;
this.itlist = this.main.getManager().getItemManager().getList();
this.inv = getInventories();
}
private ItemStack PREVIOUS = createItem(
Material.ARROW,
1,
true,
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() {
Integer page = 1;
Integer item = -1;
for (Map.Entry<String, ItemStack> entry : itlist.entrySet()) {
ItemStack it = entry.getValue();
item++;
if (item > 44 && item < 91) {
inv2.addItem(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);
}
}
}
}
}
}
}
}
page++;
inv.setItem(53, CLOSE);
inv = fillGreyPane(inv);
} }
return inv;
}
@EventHandler public Inventory getInventories(int page) {
public void clickInventory(InventoryClickEvent e) { int item = -1;
Player player = (Player) e.getWhoClicked(); int number = 54 * (page - 1);
Inventory einv = e.getClickedInventory(); int number_final = number + 54;
if (
einv == inv || for (ItemStack it : itlist.values()) {
einv == inv2 || item++;
einv == inv3 || if (item >= number && item < number_final) {
einv == inv4 || inv.setItem(item - number, it);
einv == inv5 ||
einv == inv6 ||
einv == inv7 ||
einv == inv8 ||
einv == inv9
) {
if (
e.getCurrentItem() != null &&
e.getCurrentItem().getType() != Material.AIR
) {
Integer slot = e.getSlot();
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) {
//add to stash
//}
player.getInventory().addItem(e.getCurrentItem());
PlayerUtils.updateSkills(main, player);
} }
} fillGreyPane(inv);
return inv;
}
@EventHandler
public void clickInventory(InventoryClickEvent e) {
Player player = (Player) e.getWhoClicked();
Inventory einv = e.getClickedInventory();
if (einv == inv) {
if (
e.getCurrentItem() != null &&
e.getCurrentItem().getType() != Material.AIR
) {
Integer slot = e.getSlot();
ItemStack clicked;
//if (player.getInventory().firstEmpty() == -1) {
//add to stash
//}
player.getInventory().addItem(e.getCurrentItem());
player.closeInventory();
player.playSound(player, Sound.UI_BUTTON_CLICK, 1, 0);
PlayerUtils.updateSkills(main, player);
}
}
}
public void openInventory(Player player, int page) {
inv = getInventories(page);
player.openInventory(inv);
} }
}
} }

View file

@ -14,66 +14,66 @@ import org.bukkit.inventory.meta.SkullMeta;
public class MainGui { public class MainGui {
public static Inventory build(Player p) { public static Inventory build(Player p) {
Inventory inv = Bukkit.createInventory( Inventory inv = Bukkit.createInventory(
null, null,
54, 54,
colorComp("<dark_grey>Raxen</dark_grey>") colorComp("<dark_grey>Raxen</dark_grey>")
); );
String gui = String gui =
"0,7,0,0,0,8,9,0,10," + "0,7,0,0,0,8,9,0,10," +
"0,0,0,0,0,0,0,0,0," + "0,0,0,0,0,0,0,0,0," +
"0,0,0,0,0,0,0,0,0," + "0,0,0,0,0,0,0,0,0," +
"0,2,3,0,0,0,0,4,0," + "0,2,3,0,0,0,0,4,0," +
"0,0,0,0,1,0,0,0,0," + "0,0,0,0,1,0,0,0,0," +
"0,0,0,0,0,0,0,0,0"; "0,0,0,0,0,0,0,0,0";
// 1 player Head // 1 player Head
ItemStack head = new ItemStack(Material.PLAYER_HEAD); ItemStack head = new ItemStack(Material.PLAYER_HEAD);
SkullMeta headm = (SkullMeta) head.getItemMeta(); SkullMeta headm = (SkullMeta) head.getItemMeta();
headm.setOwningPlayer(p.getPlayer()); headm.setOwningPlayer(p.getPlayer());
headm.displayName(colorComp("<green></green>")); headm.displayName(colorComp("<green></green>"));
// 2 bank // 2 bank
ItemStack bank = new ItemStack(Material.GOLD_INGOT); ItemStack bank = new ItemStack(Material.GOLD_INGOT);
// 3 ah // 3 ah
ItemStack ah = new ItemStack(Material.GOLD_INGOT); ItemStack ah = new ItemStack(Material.GOLD_INGOT);
// 4 skill tree // 4 skill tree
ItemStack sk_tree = new ItemStack(Material.OAK_SAPLING); ItemStack sk_tree = new ItemStack(Material.OAK_SAPLING);
// 7 teleport // 7 teleport
ItemStack tp = new ItemStack(Material.ENDER_PEARL); ItemStack tp = new ItemStack(Material.ENDER_PEARL);
// 8 select character // 8 select character
ItemStack sel_char = new ItemStack(Material.SNOWBALL); ItemStack sel_char = new ItemStack(Material.SNOWBALL);
// 9 Settings // 9 Settings
ItemStack sett = new ItemStack(Material.MAGMA_CREAM); ItemStack sett = new ItemStack(Material.MAGMA_CREAM);
// 10 barrier block close // 10 barrier block close
HashMap<String, ItemStack> list = new HashMap<>(); HashMap<String, ItemStack> list = new HashMap<>();
list.put("1", head); list.put("1", head);
list.put("2", bank); list.put("2", bank);
list.put("3", ah); list.put("3", ah);
list.put("4", sk_tree); list.put("4", sk_tree);
list.put("7", tp); list.put("7", tp);
list.put("8", sel_char); list.put("8", sel_char);
list.put("9", sett); list.put("9", sett);
list.put("10", Items.closeItem()); list.put("10", Items.closeItem());
Inventory inventory = stringToGui(inv, gui, list); Inventory inventory = stringToGui(inv, gui, list);
inventory = fillGreyPane(inventory); inventory = fillGreyPane(inventory);
return inventory; return inventory;
} }
public static Inventory stringToGui( public static Inventory stringToGui(
Inventory inv, Inventory inv,
String stt, String stt,
HashMap<String, ItemStack> it HashMap<String, ItemStack> it
) { ) {
String[] s = stt.split(","); String[] s = stt.split(",");
if (s.length != inv.getContents().length) { if (s.length != inv.getContents().length) {
return inv; return inv;
}
Integer i = 0;
for (String st : s) {
inv.setItem(i, it.get(st));
i++;
}
return inv;
} }
Integer i = 0;
for (String st : s) {
inv.setItem(i, it.get(st));
i++;
}
return inv;
}
} }

View file

@ -4,20 +4,20 @@ import lombok.Getter;
public class Attributes { public class Attributes {
@Getter @Getter
Integer health, speed, defense, strength; Integer health, speed, defense, strength;
public Attributes( public Attributes(
Integer health, Integer health,
Integer defense, Integer defense,
Integer speed, Integer speed,
Integer strength, Integer strength,
Integer mana, Integer mana,
Integer luck Integer luck
) { ) {
this.health = health; this.health = health;
this.defense = defense; this.defense = defense;
this.speed = speed; this.speed = speed;
this.strength = strength; this.strength = strength;
} }
} }

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