0.5.8 refactor of all files, party, yml based system, damage listener
This commit is contained in:
parent
3f5e9b1f5e
commit
39de57bf69
160 changed files with 11215 additions and 6137 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -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
92
.idea/.gitignore
vendored
Normal 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
1
.idea/.name
Normal file
|
@ -0,0 +1 @@
|
||||||
|
raxen
|
73
.idea/codeStyles/Project.xml
Normal file
73
.idea/codeStyles/Project.xml
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<option name="LINE_SEPARATOR" value=" " />
|
||||||
|
<option name="RIGHT_MARGIN" value="80" />
|
||||||
|
<HTMLCodeStyleSettings>
|
||||||
|
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
||||||
|
<option name="HTML_ENFORCE_QUOTES" value="true" />
|
||||||
|
</HTMLCodeStyleSettings>
|
||||||
|
<JSCodeStyleSettings version="0">
|
||||||
|
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||||
|
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||||
|
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||||
|
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||||
|
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||||
|
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||||
|
</JSCodeStyleSettings>
|
||||||
|
<ScalaCodeStyleSettings>
|
||||||
|
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
|
||||||
|
</ScalaCodeStyleSettings>
|
||||||
|
<TypeScriptCodeStyleSettings version="0">
|
||||||
|
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||||
|
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||||
|
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||||
|
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||||
|
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||||
|
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||||
|
</TypeScriptCodeStyleSettings>
|
||||||
|
<VueCodeStyleSettings>
|
||||||
|
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
|
||||||
|
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
|
||||||
|
</VueCodeStyleSettings>
|
||||||
|
<codeStyleSettings language="HTML">
|
||||||
|
<option name="SOFT_MARGINS" 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="JAVA">
|
||||||
|
<option name="RIGHT_MARGIN" value="80" />
|
||||||
|
<option name="KEEP_SIMPLE_BLOCKS_IN_ONE_LINE" value="true" />
|
||||||
|
<option name="KEEP_SIMPLE_METHODS_IN_ONE_LINE" value="true" />
|
||||||
|
<option name="KEEP_SIMPLE_LAMBDAS_IN_ONE_LINE" value="true" />
|
||||||
|
<option name="KEEP_SIMPLE_CLASSES_IN_ONE_LINE" value="true" />
|
||||||
|
<option name="KEEP_MULTIPLE_EXPRESSIONS_IN_ONE_LINE" value="true" />
|
||||||
|
<option name="WRAP_LONG_LINES" value="true" />
|
||||||
|
<option name="WRAP_ON_TYPING" value="1" />
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="JavaScript">
|
||||||
|
<option name="SOFT_MARGINS" 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="TypeScript">
|
||||||
|
<option name="SOFT_MARGINS" 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="Vue">
|
||||||
|
<option name="SOFT_MARGINS" value="80" />
|
||||||
|
<indentOptions>
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
85
.idea/jarRepositories.xml
Normal file
85
.idea/jarRepositories.xml
Normal 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
13
.idea/misc.xml
Normal 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
9
.idea/modules.xml
Normal 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
6
.idea/vcs.xml
Normal 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
10
.prettierrc.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Prettier configuration
|
||||||
|
overrides:
|
||||||
|
- files:
|
||||||
|
- "*.java"
|
||||||
|
options:
|
||||||
|
printWidth: 80
|
||||||
|
tabWidth: 4
|
||||||
|
useTabs: false
|
||||||
|
trailingComma: "none"
|
||||||
|
endOfLine: "lf"
|
14
README.md
14
README.md
|
@ -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
|
25
build.gradle
25
build.gradle
|
@ -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,6 +49,10 @@ 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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,20 +74,20 @@ dependencies {
|
||||||
compileOnly 'net.luckperms:api:5.4'
|
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.2'
|
||||||
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'
|
compileOnly 'me.filoghost.holographicdisplays:holographicdisplays-api:3.0.2-SNAPSHOT'
|
||||||
// compileOnly fileTree(dir: 'libs', include: '*.jar')
|
// 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.5.8'
|
||||||
description = 'Raxen'
|
description = 'Raxen'
|
||||||
|
|
||||||
java {
|
java {
|
||||||
|
@ -103,7 +108,6 @@ 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 {
|
||||||
|
@ -132,3 +136,14 @@ shadowJar {
|
||||||
minimize()
|
minimize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main {
|
||||||
|
resources {
|
||||||
|
srcDirs = ['src/main/resources', 'src/main/resources/schematics']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
processResources {
|
||||||
|
exclude '**/*.schem'
|
||||||
|
}
|
|
@ -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
|
47
docs/TODO.md
47
docs/TODO.md
|
@ -1,8 +1,41 @@
|
||||||
- [x] refactor all abilities to make them compatible between entities and also making it easier to add them.
|
- [x] refactor all abilities to make them compatible between entities and also making it easier to
|
||||||
- [ ] make custom items (hard coded)
|
add them.
|
||||||
- [ ] make custom class (hard coded)
|
- [ ] make custom items (hard coded) / or all in db/json in Raxen plugin folder (like a serialized
|
||||||
- [ ] make custom abilities (hard coded)
|
version of it)
|
||||||
- [ ] make custom mods (hard coded)
|
- [ ] custom items effects (hard coded) / or all in db/json in Raxen plugin (have some sort of
|
||||||
- [ ] make gates
|
serliazed
|
||||||
- [ ] a map
|
version of it)
|
||||||
|
- [ ] make custom class (hard coded) / or all in db/json in Raxen plugin (have some sort of
|
||||||
|
serliazed
|
||||||
|
version of it)
|
||||||
|
- [ ] make custom abilities/skills (hard coded) / or all in db/json in Raxen plugin (can't have a
|
||||||
|
separate
|
||||||
|
file, must be in java files)
|
||||||
|
- [ ] make custom mods (hard coded) / or all in db/json in Raxen plugin (can have some of the infos
|
||||||
|
in db/json but not all)
|
||||||
|
- [ ] make gates (appears randomly in the world)
|
||||||
|
- [ ] a map (more wynncrafty than hypixel + dynnmap/bettermap)
|
||||||
- [ ] a leveling system
|
- [ ] a leveling system
|
||||||
|
- [ ] spells (hard coded)
|
||||||
|
- [-] party
|
||||||
|
- [ ] boss monster
|
||||||
|
- [ ] guilds
|
||||||
|
- [ ] quests (hard coded) and db/json
|
||||||
|
- [ ] filter chat
|
||||||
|
|
||||||
|
## 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
17
docs/examples/Effects.md
Normal 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
|
||||||
|
```
|
21
docs/examples/Items.md
Normal file
21
docs/examples/Items.md
Normal 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
32
docs/examples/Mobs.md
Normal 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=
|
||||||
|
```
|
7
docs/examples/README.md
Normal file
7
docs/examples/README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Exemples
|
||||||
|
|
||||||
|
see all the exemples in this folder :
|
||||||
|
|
||||||
|
- [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)
|
|
@ -20,7 +20,7 @@ public final class Raxen extends JavaPlugin {
|
||||||
"<aqua>Rx</aqua><light_purple>></light_purple> ";
|
"<aqua>Rx</aqua><light_purple>></light_purple> ";
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private static String version = "0.5.7";
|
private static String version = "0.5.8";
|
||||||
|
|
||||||
private boolean loading = true;
|
private boolean loading = true;
|
||||||
private final PluginManager pm = getServer().getPluginManager();
|
private final PluginManager pm = getServer().getPluginManager();
|
||||||
|
@ -66,7 +66,9 @@ public final class Raxen extends JavaPlugin {
|
||||||
Bukkit
|
Bukkit
|
||||||
.getConsoleSender()
|
.getConsoleSender()
|
||||||
.sendMessage(
|
.sendMessage(
|
||||||
colorComp(prefix + "<green>Server Started Successfully!</green>")
|
colorComp(
|
||||||
|
prefix + "<green>Server Started Successfully!</green>"
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
manager.getListenerManager().getServerPingEvent().setLoading(false);
|
manager.getListenerManager().getServerPingEvent().setLoading(false);
|
||||||
|
@ -81,7 +83,9 @@ public final class Raxen extends JavaPlugin {
|
||||||
|
|
||||||
Bukkit
|
Bukkit
|
||||||
.getConsoleSender()
|
.getConsoleSender()
|
||||||
.sendMessage(colorComp(prefix + "<green>Commands Registered!</green>"));
|
.sendMessage(
|
||||||
|
colorComp(prefix + "<green>Commands Registered!</green>")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -92,7 +96,9 @@ public final class Raxen extends JavaPlugin {
|
||||||
|
|
||||||
Bukkit
|
Bukkit
|
||||||
.getConsoleSender()
|
.getConsoleSender()
|
||||||
.sendMessage(colorComp(prefix + "<green>Events Registered!</green>"));
|
.sendMessage(
|
||||||
|
colorComp(prefix + "<green>Events Registered!</green>")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -107,6 +113,8 @@ public final class Raxen extends JavaPlugin {
|
||||||
playerConfig.close();
|
playerConfig.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// save tutorial state
|
||||||
|
|
||||||
Bukkit
|
Bukkit
|
||||||
.getConsoleSender()
|
.getConsoleSender()
|
||||||
.sendMessage(
|
.sendMessage(
|
||||||
|
@ -116,6 +124,7 @@ public final class Raxen extends JavaPlugin {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getter for the logger
|
* getter for the logger
|
||||||
|
*
|
||||||
* @return the plugin logger
|
* @return the plugin logger
|
||||||
*/
|
*/
|
||||||
public Logger getPluginLogger() {
|
public Logger getPluginLogger() {
|
||||||
|
@ -124,6 +133,7 @@ public final class Raxen extends JavaPlugin {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getter for the bukkit's plugin manager
|
* getter for the bukkit's plugin manager
|
||||||
|
*
|
||||||
* @return plugin manager
|
* @return plugin manager
|
||||||
*/
|
*/
|
||||||
public PluginManager getPm() {
|
public PluginManager getPm() {
|
||||||
|
@ -132,6 +142,7 @@ public final class Raxen extends JavaPlugin {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return the instance which is launched.
|
* return the instance which is launched.
|
||||||
|
*
|
||||||
* @return main instance
|
* @return main instance
|
||||||
*/
|
*/
|
||||||
public Raxen getPlugin() {
|
public Raxen getPlugin() {
|
||||||
|
@ -140,6 +151,7 @@ public final class Raxen extends JavaPlugin {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getter for the raxen prefix
|
* getter for the raxen prefix
|
||||||
|
*
|
||||||
* @return string prefix
|
* @return string prefix
|
||||||
*/
|
*/
|
||||||
public static String getPrefix() {
|
public static String getPrefix() {
|
||||||
|
@ -148,6 +160,7 @@ public final class Raxen extends JavaPlugin {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getter for the yml's player configs.
|
* getter for the yml's player configs.
|
||||||
|
*
|
||||||
* @return player config instance
|
* @return player config instance
|
||||||
*/
|
*/
|
||||||
public PlayerConfig getPlayerConfig() {
|
public PlayerConfig getPlayerConfig() {
|
||||||
|
@ -156,6 +169,7 @@ public final class Raxen extends JavaPlugin {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getter for an instance of the config utility class
|
* getter for an instance of the config utility class
|
||||||
|
*
|
||||||
* @return raxen's config
|
* @return raxen's config
|
||||||
*/
|
*/
|
||||||
public Config getConf() {
|
public Config getConf() {
|
||||||
|
|
|
@ -61,7 +61,10 @@ public class RaxenCommand implements TabExecutor {
|
||||||
"<gold>---------------------------------------------"
|
"<gold>---------------------------------------------"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
msgPlayer(player, colorTextComp("<red>MONGO DB<white>"));
|
msgPlayer(
|
||||||
|
player,
|
||||||
|
colorTextComp("<red>MONGO DB<white>")
|
||||||
|
);
|
||||||
msgPlayer(
|
msgPlayer(
|
||||||
player,
|
player,
|
||||||
StorageManager
|
StorageManager
|
||||||
|
@ -72,7 +75,10 @@ public class RaxenCommand implements TabExecutor {
|
||||||
);
|
);
|
||||||
msgPlayer(
|
msgPlayer(
|
||||||
player,
|
player,
|
||||||
StorageManager.getMongodb().getMongoDatabase().getName()
|
StorageManager
|
||||||
|
.getMongodb()
|
||||||
|
.getMongoDatabase()
|
||||||
|
.getName()
|
||||||
);
|
);
|
||||||
msgPlayer(
|
msgPlayer(
|
||||||
player,
|
player,
|
||||||
|
@ -112,7 +118,9 @@ public class RaxenCommand implements TabExecutor {
|
||||||
);
|
);
|
||||||
sender.sendMessage(txt);
|
sender.sendMessage(txt);
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
colorComp("<gold>---------------------------------------------")
|
colorComp(
|
||||||
|
"<gold>---------------------------------------------"
|
||||||
|
)
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -138,7 +146,10 @@ public class RaxenCommand implements TabExecutor {
|
||||||
);
|
);
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
stringToComp(
|
stringToComp(
|
||||||
StorageManager.getMongodb().getMongoDatabase().getName()
|
StorageManager
|
||||||
|
.getMongodb()
|
||||||
|
.getMongoDatabase()
|
||||||
|
.getName()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
|
@ -162,7 +173,8 @@ public class RaxenCommand implements TabExecutor {
|
||||||
case "v", "version", "ver" -> {
|
case "v", "version", "ver" -> {
|
||||||
msgSender(
|
msgSender(
|
||||||
sender,
|
sender,
|
||||||
Raxen.getPrefix() + "<gold>Printing About Raxen...",
|
Raxen.getPrefix() +
|
||||||
|
"<gold>Printing About Raxen...",
|
||||||
"<gold>---------------------------------------------",
|
"<gold>---------------------------------------------",
|
||||||
"<dark_aqua> Raxen ",
|
"<dark_aqua> Raxen ",
|
||||||
"<dark_aqua> - Version: " + Raxen.getVersion(),
|
"<dark_aqua> - Version: " + Raxen.getVersion(),
|
||||||
|
@ -173,12 +185,13 @@ public class RaxenCommand implements TabExecutor {
|
||||||
);
|
);
|
||||||
sender.sendMessage(txt);
|
sender.sendMessage(txt);
|
||||||
sender.sendMessage(
|
sender.sendMessage(
|
||||||
colorComp("<gold>---------------------------------------------")
|
colorComp(
|
||||||
|
"<gold>---------------------------------------------"
|
||||||
|
)
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "hemlp", "?", "h" -> //print help
|
case "hemlp", "?", "h" -> debug(main, "print help"); //print help
|
||||||
debug(main, "print help");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,10 @@ public class CustomModelDataCommand implements TabExecutor {
|
||||||
Material material = Material.getMaterial(args[1]);
|
Material material = Material.getMaterial(args[1]);
|
||||||
if (material != null) {
|
if (material != null) {
|
||||||
it =
|
it =
|
||||||
customModelData(new ItemStack(material), Integer.parseInt(args[0]));
|
customModelData(
|
||||||
|
new ItemStack(material),
|
||||||
|
Integer.parseInt(args[0])
|
||||||
|
);
|
||||||
p.getInventory().setItemInMainHand(it);
|
p.getInventory().setItemInMainHand(it);
|
||||||
p.updateInventory();
|
p.updateInventory();
|
||||||
} else {
|
} else {
|
||||||
|
@ -74,7 +77,9 @@ public class CustomModelDataCommand implements TabExecutor {
|
||||||
p.updateInventory();
|
p.updateInventory();
|
||||||
} else {
|
} else {
|
||||||
p.sendMessage(
|
p.sendMessage(
|
||||||
colorComp("<red>Get an item in hand please or specify an item</red>")
|
colorComp(
|
||||||
|
"<red>Get an item in hand please or specify an item</red>"
|
||||||
|
)
|
||||||
);
|
);
|
||||||
p.sendMessage(
|
p.sendMessage(
|
||||||
colorComp(
|
colorComp(
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package me.unurled.raxen.commands.admin;
|
package me.unurled.raxen.commands.admin;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Utils.*;
|
import static me.unurled.raxen.utils.Utils.colorString;
|
||||||
|
import static me.unurled.raxen.utils.Utils.log;
|
||||||
|
import static me.unurled.raxen.utils.Utils.msgPlayer;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
@ -46,8 +48,15 @@ public class ItemListCommand implements TabExecutor {
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
int page = 1;
|
||||||
|
if (args.length > 0) {
|
||||||
|
try {
|
||||||
|
page = Integer.parseInt(args[0]);
|
||||||
|
} catch (NumberFormatException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
//openGui logic
|
//openGui logic
|
||||||
player.openInventory(itemListGui.getInv());
|
itemListGui.openInventory(player, page);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@ import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.TabExecutor;
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@ -39,12 +38,19 @@ public class NbtCommand implements TabExecutor {
|
||||||
if (!(sender instanceof Player player)) {
|
if (!(sender instanceof Player player)) {
|
||||||
error(
|
error(
|
||||||
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
|
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
|
||||||
colorString("<red>You can't execute this command as the Console!")
|
colorString(
|
||||||
|
"<red>You can't execute this command as the Console!"
|
||||||
|
)
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (player.getInventory().getItemInMainHand().getType() == Material.AIR) {
|
if (
|
||||||
msgPlayer(player, colorTextComp("<red>You must hold an Item in hand."));
|
player.getInventory().getItemInMainHand().getType() == Material.AIR
|
||||||
|
) {
|
||||||
|
msgPlayer(
|
||||||
|
player,
|
||||||
|
colorTextComp("<red>You must hold an Item in hand.")
|
||||||
|
);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
player.getInventory().getItemInMainHand();
|
player.getInventory().getItemInMainHand();
|
||||||
|
@ -58,9 +64,9 @@ public class NbtCommand implements TabExecutor {
|
||||||
debug("'" + args[0] + "'", "'" + args[1] + "'");
|
debug("'" + args[0] + "'", "'" + args[1] + "'");
|
||||||
ItemStack it = player.getInventory().getItemInMainHand();
|
ItemStack it = player.getInventory().getItemInMainHand();
|
||||||
NBTItem nbti = new NBTItem(it);
|
NBTItem nbti = new NBTItem(it);
|
||||||
int a = 0;
|
String a = "";
|
||||||
if (nbti.hasTag(args[0])) {
|
if (nbti.hasTag(args[0])) {
|
||||||
a = nbti.getInteger(args[0]);
|
a = nbti.getString(args[0]);
|
||||||
}
|
}
|
||||||
List<Component> lore = new ArrayList<>();
|
List<Component> lore = new ArrayList<>();
|
||||||
// ItemMeta itm = it.getItemMeta();
|
// ItemMeta itm = it.getItemMeta();
|
||||||
|
@ -93,7 +99,14 @@ public class NbtCommand implements TabExecutor {
|
||||||
)
|
)
|
||||||
).getManager()
|
).getManager()
|
||||||
.getPlayerManager();
|
.getPlayerManager();
|
||||||
nbti.setInteger(args[0], Integer.parseInt(args[1]) + a);
|
try {
|
||||||
|
nbti.setInteger(
|
||||||
|
args[0],
|
||||||
|
Integer.parseInt(args[1]) + Integer.parseInt(a)
|
||||||
|
);
|
||||||
|
} catch (NumberFormatException ignored) {
|
||||||
|
nbti.setString(args[0], args[1]);
|
||||||
|
}
|
||||||
if (nbti.hasTag("SPEED")) {
|
if (nbti.hasTag("SPEED")) {
|
||||||
pm.getSpeed().add(player, nbti.getInteger("SPEED"));
|
pm.getSpeed().add(player, nbti.getInteger("SPEED"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package me.unurled.raxen.commands.admin;
|
package me.unurled.raxen.commands.admin;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Utils.*;
|
import static me.unurled.raxen.utils.Utils.colorString;
|
||||||
|
import static me.unurled.raxen.utils.Utils.log;
|
||||||
|
import static me.unurled.raxen.utils.Utils.noPerms;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.unurled.raxen.utils.Reload;
|
import me.unurled.raxen.utils.Reload;
|
||||||
|
@ -9,6 +11,7 @@ import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.TabExecutor;
|
import org.bukkit.command.TabExecutor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@ -34,7 +37,12 @@ public class ReloadCommand implements TabExecutor {
|
||||||
"<red>Server stopping!\n Using: /rlpl.\n Please wait a little bit."
|
"<red>Server stopping!\n Using: /rlpl.\n Please wait a little bit."
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
Bukkit.getServer().shutdown();
|
Bukkit.getServer().shutdown();
|
||||||
|
}
|
||||||
|
}.runTaskLater(Bukkit.getPluginManager().getPlugin("Raxen"), 80L);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
224
src/main/java/me/unurled/raxen/commands/player/PartyCommand.java
Normal file
224
src/main/java/me/unurled/raxen/commands/player/PartyCommand.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -61,19 +61,30 @@ public class SkillsCommand implements TabExecutor {
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
PlayerManager pm =
|
PlayerManager pm =
|
||||||
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
|
(
|
||||||
|
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen")
|
||||||
|
).getManager()
|
||||||
.getPlayerManager();
|
.getPlayerManager();
|
||||||
for (String s : pm.getAttribute().keySet()) {
|
for (String s : pm.getAttribute().keySet()) {
|
||||||
if (s.equalsIgnoreCase(args[0])) switch (args[1]) {
|
if (s.equalsIgnoreCase(args[0])) switch (args[1]) {
|
||||||
case "add":
|
case "add":
|
||||||
pm.getAttribute().get(s).add(player, Integer.parseInt(args[2]));
|
pm
|
||||||
|
.getAttribute()
|
||||||
|
.get(s)
|
||||||
|
.add(player, Integer.parseInt(args[2]));
|
||||||
|
break;
|
||||||
case "remove":
|
case "remove":
|
||||||
pm
|
pm
|
||||||
.getAttribute()
|
.getAttribute()
|
||||||
.get(s)
|
.get(s)
|
||||||
.remove(player, Integer.parseInt(args[2]));
|
.remove(player, Integer.parseInt(args[2]));
|
||||||
|
break;
|
||||||
case "set":
|
case "set":
|
||||||
pm.getAttribute().get(s).set(player, Integer.parseInt(args[2]));
|
pm
|
||||||
|
.getAttribute()
|
||||||
|
.get(s)
|
||||||
|
.set(player, Integer.parseInt(args[2]));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PlayerUtils.updateSkills(main, player);
|
PlayerUtils.updateSkills(main, player);
|
||||||
|
|
|
@ -48,7 +48,11 @@ public class StorageCommand implements TabExecutor {
|
||||||
.getEc();
|
.getEc();
|
||||||
} else {
|
} else {
|
||||||
inv =
|
inv =
|
||||||
playerManager.getRaxenPlayer(player).getStorage().getEc().getEc();
|
playerManager
|
||||||
|
.getRaxenPlayer(player)
|
||||||
|
.getStorage()
|
||||||
|
.getEc()
|
||||||
|
.getEc();
|
||||||
}
|
}
|
||||||
player.openInventory(inv);
|
player.openInventory(inv);
|
||||||
break;
|
break;
|
||||||
|
@ -57,11 +61,18 @@ public class StorageCommand implements TabExecutor {
|
||||||
if (p == null) {
|
if (p == null) {
|
||||||
msgPlayer(
|
msgPlayer(
|
||||||
player,
|
player,
|
||||||
colorString("<red>You can't open the Storage of an unknown Player.")
|
colorString(
|
||||||
|
"<red>You can't open the Storage of an unknown Player."
|
||||||
|
)
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
inv = playerManager.getRaxenPlayer(player).getStorage().getEc().getEc();
|
inv =
|
||||||
|
playerManager
|
||||||
|
.getRaxenPlayer(player)
|
||||||
|
.getStorage()
|
||||||
|
.getEc()
|
||||||
|
.getEc();
|
||||||
player.openInventory(inv);
|
player.openInventory(inv);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,5 +12,5 @@ public enum Rank {
|
||||||
SSS,
|
SSS,
|
||||||
WORLD,
|
WORLD,
|
||||||
UNBEATABLE,
|
UNBEATABLE,
|
||||||
NOT_DEFINED,
|
NOT_DEFINED
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,5 +16,5 @@ public enum Types {
|
||||||
CAVES,
|
CAVES,
|
||||||
LABYRINTH,
|
LABYRINTH,
|
||||||
UNDERGROUND_LABYRINTH,
|
UNDERGROUND_LABYRINTH,
|
||||||
FOREST_LABYRINTH,
|
FOREST_LABYRINTH
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,12 @@ import me.unurled.raxen.components.dungeons.types.MonsterType;
|
||||||
|
|
||||||
public class ForestDungeon extends Dungeon {
|
public class ForestDungeon extends Dungeon {
|
||||||
|
|
||||||
public ForestDungeon(String name, Rank rank, Types types, MonsterType mType) {
|
public ForestDungeon(
|
||||||
|
String name,
|
||||||
|
Rank rank,
|
||||||
|
Types types,
|
||||||
|
MonsterType mType
|
||||||
|
) {
|
||||||
super(name, rank, types, mType);
|
super(name, rank, types, mType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package me.unurled.raxen.components.effect;
|
||||||
|
|
||||||
|
public class EffectBuilder {
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package me.unurled.raxen.components.entity.Attributes;
|
package me.unurled.raxen.components.entity.Attributes;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Utils.debug;
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
import static me.unurled.raxen.utils.Utils.log;
|
||||||
|
|
||||||
import de.tr7zw.nbtapi.NBTItem;
|
import de.tr7zw.nbtapi.NBTItem;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -103,7 +104,8 @@ public class Attribute {
|
||||||
attribute = attribute + get(item);
|
attribute = attribute + get(item);
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
equi.getHelmet().getType() != Material.AIR && equi.getHelmet() != null
|
equi.getHelmet().getType() != Material.AIR &&
|
||||||
|
equi.getHelmet() != null
|
||||||
) {
|
) {
|
||||||
ItemStack item = equi.getHelmet();
|
ItemStack item = equi.getHelmet();
|
||||||
attribute = attribute + get(item);
|
attribute = attribute + get(item);
|
||||||
|
@ -130,7 +132,8 @@ public class Attribute {
|
||||||
attribute = attribute + get(item);
|
attribute = attribute + get(item);
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
equi.getBoots().getType() != Material.AIR && equi.getBoots() != null
|
equi.getBoots().getType() != Material.AIR &&
|
||||||
|
equi.getBoots() != null
|
||||||
) {
|
) {
|
||||||
ItemStack item = equi.getBoots();
|
ItemStack item = equi.getBoots();
|
||||||
attribute = attribute + get(item);
|
attribute = attribute + get(item);
|
||||||
|
@ -157,6 +160,7 @@ public class Attribute {
|
||||||
* @param amount the amount you want to set
|
* @param amount the amount you want to set
|
||||||
*/
|
*/
|
||||||
public void add(@NotNull Entity entity, @NotNull Integer amount) {
|
public void add(@NotNull Entity entity, @NotNull Integer amount) {
|
||||||
|
log(get(entity) + " " + amount);
|
||||||
set(entity, get(entity) + amount);
|
set(entity, get(entity) + amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package me.unurled.raxen.components.entity;
|
||||||
|
|
||||||
|
public enum DamageType {
|
||||||
|
NORMAL,
|
||||||
|
NORMAL_SPELL,
|
||||||
|
ENVIRONMENTAL_LAVA,
|
||||||
|
ENVIRONMENTAL_DROWNING,
|
||||||
|
ENVIRONMENTAL_FALL,
|
||||||
|
ENVIRONMENTAL_INSTANT;
|
||||||
|
}
|
|
@ -35,9 +35,17 @@ public class EntityUtils {
|
||||||
) {
|
) {
|
||||||
PersistentDataContainer data = e.getPersistentDataContainer();
|
PersistentDataContainer data = e.getPersistentDataContainer();
|
||||||
data.set(namespacedKey.health, PersistentDataType.INTEGER, health);
|
data.set(namespacedKey.health, PersistentDataType.INTEGER, health);
|
||||||
data.set(namespacedKey.itemHealth, PersistentDataType.INTEGER, itemHealth);
|
data.set(
|
||||||
|
namespacedKey.itemHealth,
|
||||||
|
PersistentDataType.INTEGER,
|
||||||
|
itemHealth
|
||||||
|
);
|
||||||
data.set(namespacedKey.speed, PersistentDataType.INTEGER, speed);
|
data.set(namespacedKey.speed, PersistentDataType.INTEGER, speed);
|
||||||
data.set(namespacedKey.itemSpeed, PersistentDataType.INTEGER, itemSpeed);
|
data.set(
|
||||||
|
namespacedKey.itemSpeed,
|
||||||
|
PersistentDataType.INTEGER,
|
||||||
|
itemSpeed
|
||||||
|
);
|
||||||
data.set(namespacedKey.defense, PersistentDataType.INTEGER, defense);
|
data.set(namespacedKey.defense, PersistentDataType.INTEGER, defense);
|
||||||
data.set(
|
data.set(
|
||||||
namespacedKey.itemDefense,
|
namespacedKey.itemDefense,
|
||||||
|
@ -45,7 +53,11 @@ public class EntityUtils {
|
||||||
itemDefense
|
itemDefense
|
||||||
);
|
);
|
||||||
data.set(namespacedKey.strength, PersistentDataType.INTEGER, strength);
|
data.set(namespacedKey.strength, PersistentDataType.INTEGER, strength);
|
||||||
data.set(namespacedKey.itemStrength, PersistentDataType.INTEGER, itemDmg);
|
data.set(
|
||||||
|
namespacedKey.itemStrength,
|
||||||
|
PersistentDataType.INTEGER,
|
||||||
|
itemDmg
|
||||||
|
);
|
||||||
data.set(namespacedKey.name, PersistentDataType.STRING, name);
|
data.set(namespacedKey.name, PersistentDataType.STRING, name);
|
||||||
data.set(namespacedKey.level, PersistentDataType.INTEGER, level);
|
data.set(namespacedKey.level, PersistentDataType.INTEGER, level);
|
||||||
}
|
}
|
||||||
|
@ -76,8 +88,12 @@ public class EntityUtils {
|
||||||
null
|
null
|
||||||
) {
|
) {
|
||||||
livingEntity
|
livingEntity
|
||||||
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED)
|
.getAttribute(
|
||||||
.setBaseValue((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
|
org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED
|
||||||
|
)
|
||||||
|
.setBaseValue(
|
||||||
|
(float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
livingEntity.getAttribute(
|
livingEntity.getAttribute(
|
||||||
|
@ -86,8 +102,12 @@ public class EntityUtils {
|
||||||
null
|
null
|
||||||
) {
|
) {
|
||||||
livingEntity
|
livingEntity
|
||||||
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED)
|
.getAttribute(
|
||||||
.setBaseValue((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
|
org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED
|
||||||
|
)
|
||||||
|
.setBaseValue(
|
||||||
|
(float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
livingEntity
|
livingEntity
|
||||||
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH)
|
.getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH)
|
||||||
|
|
|
@ -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.spawnedMob.remove(entity.getUniqueId());
|
||||||
|
manager.spawnedMobsOnlyMain.remove(entity.getUniqueId());
|
||||||
|
entity.remove();
|
||||||
|
}
|
||||||
|
entity = null;
|
||||||
|
if (mount != null) {
|
||||||
|
manager.spawnedMob.remove(mount.getUniqueId());
|
||||||
|
manager.spawnedMobsOnlyMain.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());
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,13 +1,21 @@
|
||||||
package me.unurled.raxen.components.entity.other;
|
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 lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.entity.DamageType;
|
||||||
|
import me.unurled.raxen.components.entity.player.RaxenPlayer;
|
||||||
|
import me.unurled.raxen.utils.Tags;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.persistence.PersistentDataContainer;
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
|
@ -18,6 +26,11 @@ public abstract class RaxenEntity {
|
||||||
@Getter
|
@Getter
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final String ID;
|
||||||
|
|
||||||
|
public Component fullName;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private Integer level;
|
private Integer level;
|
||||||
|
|
||||||
|
@ -33,31 +46,48 @@ public abstract class RaxenEntity {
|
||||||
@Setter
|
@Setter
|
||||||
Boolean isAlive = false;
|
Boolean isAlive = false;
|
||||||
|
|
||||||
|
boolean despawned = false;
|
||||||
|
|
||||||
|
me.unurled.raxen.components.entity.other.custom.Entity entity;
|
||||||
|
public HashMap<UUID, Long> lastAttackedByTimes;
|
||||||
|
public java.util.HashMap<UUID, Long> damageDealt;
|
||||||
|
|
||||||
public RaxenEntity(
|
public RaxenEntity(
|
||||||
Raxen main,
|
Raxen main,
|
||||||
String name,
|
String name,
|
||||||
|
String id,
|
||||||
Integer level,
|
Integer level,
|
||||||
Double health,
|
Double health,
|
||||||
Double strength
|
Double strength
|
||||||
) {
|
) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
ID = id;
|
||||||
this.level = level;
|
this.level = level;
|
||||||
this.health = health;
|
this.health = health;
|
||||||
this.strength = strength;
|
this.strength = strength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Entity createEntity(EntityType types, String name, Location location) {
|
/*public Entity createEntity(
|
||||||
Entity e = location.getWorld().spawnEntity(location, types);
|
me.unurled.raxen.components.entity.other.custom.Entity ent,
|
||||||
|
String name,
|
||||||
|
Location location
|
||||||
|
) {
|
||||||
|
me.unurled.raxen.components.entity.other.custom.Entity e = (me.unurled.raxen.components.entity.other.custom.Entity) location.getWorld()
|
||||||
|
// .spawnEntity(location, ent);
|
||||||
e.setCustomNameVisible(true);
|
e.setCustomNameVisible(true);
|
||||||
e.customName(Component.text(name));
|
e.customName(Component.text(name));
|
||||||
|
entity = e;
|
||||||
return e;
|
return e;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
public void register(Entity e) {
|
public void register(Entity e) {
|
||||||
PersistentDataContainer data = e.getPersistentDataContainer();
|
PersistentDataContainer data = e.getPersistentDataContainer();
|
||||||
data.set(new NamespacedKey(main, "NAME"), PersistentDataType.STRING, name);
|
data.set(
|
||||||
|
new NamespacedKey(main, "NAME"),
|
||||||
|
PersistentDataType.STRING,
|
||||||
|
name
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Double getMaxHealth(Entity e) {
|
public Double getMaxHealth(Entity e) {
|
||||||
|
@ -67,4 +97,149 @@ public abstract class RaxenEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract Entity createEntity(Location location);
|
public abstract Entity createEntity(Location location);
|
||||||
|
|
||||||
|
public void die() {
|
||||||
|
die(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void die(boolean drop) {
|
||||||
|
if (!isAlive) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isAlive = false;
|
||||||
|
// set mob ai false
|
||||||
|
Location deathLoc = entity.getLocation();
|
||||||
|
entity.customName(fullName);
|
||||||
|
Tags.makeFloatingText("<gold>+ EXP", deathLoc, 1.3, 1.0, 1.5, 1);
|
||||||
|
// TODO: damge entity method damage
|
||||||
|
// TODO: desawn
|
||||||
|
// TODO: xp
|
||||||
|
|
||||||
|
// xp
|
||||||
|
int totalLevel = 0;
|
||||||
|
int pdCount = 0;
|
||||||
|
ArrayList<RaxenPlayer> players = new ArrayList<>();
|
||||||
|
double damageSum = 0;
|
||||||
|
RaxenPlayer player = null;
|
||||||
|
for (Entry<UUID, Long> entry : damageDealt.entrySet()) {
|
||||||
|
if ((player = main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey()))
|
||||||
|
!= null) {
|
||||||
|
damageSum += entry.getValue();
|
||||||
|
totalLevel += player.getLevel();
|
||||||
|
pdCount++;
|
||||||
|
players.add(main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pdCount < 1) {
|
||||||
|
totalLevel = 1;
|
||||||
|
pdCount = 1;
|
||||||
|
}
|
||||||
|
double avgLv = totalLevel / (double) pdCount;
|
||||||
|
for (RaxenPlayer pd : players) {
|
||||||
|
if (damageDealt.containsKey(pd.getPlayer().getUniqueId())) {
|
||||||
|
pd.incrementMobCounter(ID);
|
||||||
|
double percentage =
|
||||||
|
damageDealt.get(pd.getPlayer().getUniqueId()) / (double) damageSum;
|
||||||
|
if (percentage >= 0.10) {
|
||||||
|
pd.addMobKills();
|
||||||
|
// IDEA: is boss add to counter
|
||||||
|
}
|
||||||
|
long amt = (long) Math.ceil(entity.getXp() * percentage);
|
||||||
|
if (!(level >= 80 && pd.getLevel() >= 80)
|
||||||
|
&& Math.abs(pd.getLevel() - level) >= 10) {
|
||||||
|
double penalty = 0.70;
|
||||||
|
penalty -= (Math.abs(pd.getLevel() - level) - 10) * 0.06;
|
||||||
|
if (penalty < 0.10) {
|
||||||
|
penalty = 0.10;
|
||||||
|
}
|
||||||
|
pd.gainXp((long) Math.ceil(amt * penalty), true);
|
||||||
|
} else {
|
||||||
|
pd.gainXp(amt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void despawn() {
|
||||||
|
if (despawned) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
despawned = true;
|
||||||
|
if (entity != null) {
|
||||||
|
entity.remove();
|
||||||
|
}
|
||||||
|
entity = null;
|
||||||
|
// TODO: bosses, respawn etc
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean attack(RaxenPlayer pd) {
|
||||||
|
return attack(pd, 0.5, -1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attack(RaxenPlayer pd, int rpgDamage) {
|
||||||
|
return attack(pd, 0.5, rpgDamage, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attack(RaxenPlayer pd, int rpgDamage, boolean projectile) {
|
||||||
|
return attack(pd, 0.5, rpgDamage, projectile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attack(RaxenPlayer pd, double knockback, int rDamage, boolean projectile) {
|
||||||
|
boolean sucess = false;
|
||||||
|
sucess = pd.damage(rDamage > -1 ? rDamage : (int) entity.getDamage(), entity,
|
||||||
|
DamageType.NORMAL);
|
||||||
|
if (sucess && !projectile) {
|
||||||
|
// pd.knockback(entity, knockback);
|
||||||
|
// TODO: knockback
|
||||||
|
}
|
||||||
|
return sucess;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean damage(int damageAmount, Entity damager, DamageType damageType) {
|
||||||
|
return damage(damageAmount, damager, damageType, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean damage(int damage, Entity damager, DamageType damageType, boolean crit) {
|
||||||
|
if (!isAlive) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (damager != null && damager instanceof Player player) {
|
||||||
|
if (!player.isOnline()
|
||||||
|
|| main.getManager().getPlayerManager().getRaxenPlayer(player) == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (damage > entity.getHealth()) {
|
||||||
|
damage = entity.getHealth().intValue();
|
||||||
|
}
|
||||||
|
if (damager != null && damager instanceof Player player) {
|
||||||
|
RaxenPlayer pd = main.getManager().getPlayerManager().getRaxenPlayer(player);
|
||||||
|
if (damageDealt.containsKey(damager.getUniqueId())) {
|
||||||
|
damageDealt.put(damager.getUniqueId(),
|
||||||
|
damageDealt.get(damager.getUniqueId()) + damage);
|
||||||
|
} else {
|
||||||
|
damageDealt.put(damager.getUniqueId(), (long) damage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (damager != null) {
|
||||||
|
lastAttackedByTimes.put(damager.getUniqueId(), System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
if (damage < 1) {
|
||||||
|
damage = 1;
|
||||||
|
}
|
||||||
|
health -= damage;
|
||||||
|
if (health < 0) {
|
||||||
|
health = 0.0;
|
||||||
|
}
|
||||||
|
if (damager != null && damager instanceof Player player) {
|
||||||
|
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f);
|
||||||
|
}
|
||||||
|
if (health <= 0) {
|
||||||
|
die();
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
|
|
||||||
public class Entity {
|
public abstract class Entity implements org.bukkit.entity.Entity {
|
||||||
|
|
||||||
private java.util.UUID uuid;
|
private java.util.UUID uuid;
|
||||||
|
|
||||||
|
@ -39,6 +39,10 @@ public class Entity {
|
||||||
@Setter
|
@Setter
|
||||||
private boolean isHostile;
|
private boolean isHostile;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private double xp;
|
||||||
|
|
||||||
public Entity(
|
public Entity(
|
||||||
String name,
|
String name,
|
||||||
Integer level,
|
Integer level,
|
||||||
|
@ -46,7 +50,8 @@ public class Entity {
|
||||||
Double strength,
|
Double strength,
|
||||||
Double defense,
|
Double defense,
|
||||||
Double speed,
|
Double speed,
|
||||||
boolean isHostile
|
boolean isHostile,
|
||||||
|
double xp
|
||||||
) {
|
) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.level = level;
|
this.level = level;
|
||||||
|
@ -57,6 +62,7 @@ public class Entity {
|
||||||
this.maxHealth = maxHealth;
|
this.maxHealth = maxHealth;
|
||||||
this.isHostile = isHostile;
|
this.isHostile = isHostile;
|
||||||
this.uuid = UUID.randomUUID();
|
this.uuid = UUID.randomUUID();
|
||||||
|
this.xp = xp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(Raxen main) {
|
public void register(Raxen main) {
|
||||||
|
@ -100,4 +106,9 @@ public class Entity {
|
||||||
|
|
||||||
return health;
|
return health;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getDamage() {
|
||||||
|
// TODO: calculate properly the damage
|
||||||
|
return strength;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,12 @@ import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.entity.other.RaxenEntity;
|
import me.unurled.raxen.components.entity.other.RaxenEntity;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
|
|
||||||
public class Elf extends RaxenEntity {
|
public class Elf extends RaxenEntity {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final String name;
|
private final String name;
|
||||||
|
private final String id = "elf";
|
||||||
|
|
||||||
public Elf(
|
public Elf(
|
||||||
Raxen main,
|
Raxen main,
|
||||||
|
@ -19,22 +19,23 @@ public class Elf extends RaxenEntity {
|
||||||
Double health,
|
Double health,
|
||||||
Double strength
|
Double strength
|
||||||
) {
|
) {
|
||||||
super(main, name, level, health, strength);
|
super(main, name, "elf", level, health, strength);
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Elf Default values
|
||||||
|
*
|
||||||
|
* @param main the main instance
|
||||||
|
* @param name
|
||||||
|
*/
|
||||||
|
public Elf(Raxen main, String name) {
|
||||||
|
super(main, "Elf", "elf", 10, 120.0, 25.0);
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Entity createEntity(Location location) {
|
public Entity createEntity(Location location) {
|
||||||
return super.createEntity(EntityType.PLAYER, name, location);
|
return null;
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Elf Default values
|
|
||||||
* @param main the main instance
|
|
||||||
* @param name
|
|
||||||
*/
|
|
||||||
public Elf(Raxen main, String name) {
|
|
||||||
super(main, "Elf", 10, 120.0, 25.0);
|
|
||||||
this.name = name;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.entity.other.RaxenEntity;
|
import me.unurled.raxen.components.entity.other.RaxenEntity;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
|
|
||||||
public class Wolf extends RaxenEntity {
|
public class Wolf extends RaxenEntity {
|
||||||
|
|
||||||
|
@ -19,17 +18,17 @@ public class Wolf extends RaxenEntity {
|
||||||
Double health,
|
Double health,
|
||||||
Double strength
|
Double strength
|
||||||
) {
|
) {
|
||||||
super(main, name, level, health, strength);
|
super(main, name, "elf", level, health, strength);
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Wolf(Raxen main) {
|
public Wolf(Raxen main) {
|
||||||
super(main, "Wolf", 5, 100.0, 20.0);
|
super(main, "Wolf", "elf", 5, 100.0, 20.0);
|
||||||
this.name = "Wolf";
|
this.name = "Wolf";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Entity createEntity(Location location) {
|
public Entity createEntity(Location location) {
|
||||||
return super.createEntity(EntityType.WOLF, name, location);
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,56 @@
|
||||||
package me.unurled.raxen.components.entity.other.custom.hostile.low;
|
package me.unurled.raxen.components.entity.other.custom.hostile.low;
|
||||||
|
|
||||||
|
import io.papermc.paper.entity.TeleportFlag;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.entity.other.RaxenEntity;
|
import me.unurled.raxen.components.entity.other.RaxenEntity;
|
||||||
import me.unurled.raxen.components.entity.other.custom.Entity;
|
import me.unurled.raxen.components.entity.other.custom.Entity;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.EntityEffect;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.block.PistonMoveReaction;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Pose;
|
||||||
|
import org.bukkit.entity.SpawnCategory;
|
||||||
|
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
|
import org.bukkit.metadata.MetadataValue;
|
||||||
|
import org.bukkit.permissions.Permission;
|
||||||
|
import org.bukkit.permissions.PermissionAttachment;
|
||||||
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
import org.bukkit.util.BoundingBox;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class Goblin extends Entity {
|
public class Goblin extends Entity {
|
||||||
|
|
||||||
RaxenEntity goblin;
|
RaxenEntity goblin;
|
||||||
|
|
||||||
public Goblin(Raxen main) {
|
public Goblin(Raxen main) {
|
||||||
super("Goblin", 1, 100.0, 10.0, 0.0, 50.0, true);
|
super("Goblin", 1, 100.0, 10.0, 0.0, 50.0, true, 100);
|
||||||
this.goblin =
|
this.goblin =
|
||||||
new RaxenEntity(main, "Goblin", 1, 100.0, 10.0) {
|
new RaxenEntity(main, "Goblin", "goblin", 1, 100.0, 10.0) {
|
||||||
@Override
|
@Override
|
||||||
public org.bukkit.entity.Entity createEntity(Location location) {
|
public org.bukkit.entity.Entity createEntity(
|
||||||
return super.createEntity(EntityType.PLAYER, "Goblin", location);
|
Location location
|
||||||
|
) {
|
||||||
|
return null;
|
||||||
|
/* return super.createEntity(
|
||||||
|
EntityType.PLAYER,
|
||||||
|
"Goblin",
|
||||||
|
location
|
||||||
|
);*/
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
register(main);
|
register(main);
|
||||||
|
@ -36,4 +70,636 @@ public class Goblin extends Entity {
|
||||||
getMaxHealth()
|
getMaxHealth()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Location getLocation() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Location getLocation(@Nullable Location loc) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setVelocity(@NotNull Vector velocity) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Vector getVelocity() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getHeight() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getWidth() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull BoundingBox getBoundingBox() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOnGround() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInWater() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull World getWorld() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRotation(float yaw, float pitch) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean teleport(@NotNull Location location,
|
||||||
|
@NotNull PlayerTeleportEvent.TeleportCause cause,
|
||||||
|
@NotNull TeleportFlag @NotNull ... teleportFlags) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean teleport(@NotNull Location location) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean teleport(@NotNull Location location,
|
||||||
|
@NotNull PlayerTeleportEvent.TeleportCause cause) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean teleport(org.bukkit.entity.@NotNull Entity destination) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean teleport(org.bukkit.entity.@NotNull Entity destination,
|
||||||
|
@NotNull PlayerTeleportEvent.TeleportCause cause) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<org.bukkit.entity.Entity> getNearbyEntities(double x, double y, double z) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEntityId() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFireTicks() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxFireTicks() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFireTicks(int ticks) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setVisualFire(boolean fire) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisualFire() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFreezeTicks() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxFreezeTicks() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFreezeTicks(int ticks) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFrozen() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFreezeTickingLocked() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void lockFreezeTicks(boolean locked) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDead() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isValid() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(@NotNull String message) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(@NotNull String... messages) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(@Nullable UUID sender, @NotNull String message) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendMessage(@Nullable UUID sender, @NotNull String... messages) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Server getServer() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isPersistent() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPersistent(boolean persistent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.bukkit.entity.@Nullable Entity getPassenger() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setPassenger(org.bukkit.entity.@NotNull Entity passenger) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<org.bukkit.entity.Entity> getPassengers() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addPassenger(org.bukkit.entity.@NotNull Entity passenger) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removePassenger(org.bukkit.entity.@NotNull Entity passenger) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean eject() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float getFallDistance() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFallDistance(float distance) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLastDamageCause(@Nullable EntityDamageEvent event) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable EntityDamageEvent getLastDamageCause() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull UUID getUniqueId() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTicksLived() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTicksLived(int value) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void playEffect(@NotNull EntityEffect type) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull EntityType getType() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Sound getSwimSound() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Sound getSwimSplashSound() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Sound getSwimHighSpeedSplashSound() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInsideVehicle() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean leaveVehicle() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.bukkit.entity.@Nullable Entity getVehicle() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCustomNameVisible(boolean flag) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCustomNameVisible() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setVisibleByDefault(boolean visible) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisibleByDefault() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGlowing(boolean flag) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isGlowing() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setInvulnerable(boolean flag) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInvulnerable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSilent() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSilent(boolean flag) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasGravity() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGravity(boolean gravity) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPortalCooldown() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPortalCooldown(int cooldown) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Set<String> getScoreboardTags() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addScoreboardTag(@NotNull String tag) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeScoreboardTag(@NotNull String tag) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull PistonMoveReaction getPistonMoveReaction() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull BlockFace getFacing() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Pose getPose() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSneaking() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSneaking(boolean sneak) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull SpawnCategory getSpawnCategory() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Spigot spigot() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Component name() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Component teamDisplayName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Location getOrigin() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean fromMobSpawner() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull CreatureSpawnEvent.SpawnReason getEntitySpawnReason() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isUnderWater() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInRain() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInBubbleColumn() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInWaterOrRain() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInWaterOrBubbleColumn() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInWaterOrRainOrBubbleColumn() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInLava() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTicking() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Set<Player> getTrackedPlayers() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean spawnAt(@NotNull Location location,
|
||||||
|
@NotNull CreatureSpawnEvent.SpawnReason reason) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInPowderedSnow() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean collidesAt(@NotNull Location location) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean wouldCollideUsing(@NotNull BoundingBox boundingBox) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Component customName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void customName(@Nullable Component customName) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable String getCustomName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCustomName(@Nullable String name) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMetadata(@NotNull String metadataKey, @NotNull MetadataValue newMetadataValue) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<MetadataValue> getMetadata(@NotNull String metadataKey) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasMetadata(@NotNull String metadataKey) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeMetadata(@NotNull String metadataKey, @NotNull Plugin owningPlugin) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isPermissionSet(@NotNull String name) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isPermissionSet(@NotNull Permission perm) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(@NotNull String name) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasPermission(@NotNull Permission perm) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull PermissionAttachment addAttachment(@NotNull Plugin plugin, @NotNull String name,
|
||||||
|
boolean value) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull PermissionAttachment addAttachment(@NotNull Plugin plugin) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable PermissionAttachment addAttachment(@NotNull Plugin plugin,
|
||||||
|
@NotNull String name, boolean value, int ticks) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable PermissionAttachment addAttachment(@NotNull Plugin plugin, int ticks) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeAttachment(@NotNull PermissionAttachment attachment) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void recalculatePermissions() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Set<PermissionAttachmentInfo> getEffectivePermissions() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOp() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setOp(boolean value) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull PersistentDataContainer getPersistentDataContainer() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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},
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,19 +1,19 @@
|
||||||
package me.unurled.raxen.components.entity.player;
|
package me.unurled.raxen.components.entity.player;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Utils.debug;
|
import static me.unurled.raxen.utils.Utils.*;
|
||||||
|
|
||||||
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.Bukkit;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
public class PlayerUtils {
|
public class PlayerUtils {
|
||||||
|
|
||||||
public static void updateSkills(Raxen main, Player player) {
|
public static void updateSkills(Raxen main, Player player) {
|
||||||
PlayerManager pm =
|
PlayerManager pm = main.getManager().getPlayerManager();
|
||||||
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
|
|
||||||
.getPlayerManager();
|
|
||||||
int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck;
|
int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck;
|
||||||
defense = pm.getDefense().get(player);
|
defense = pm.getDefense().get(player);
|
||||||
maxMana = pm.getMaxMana().get(player);
|
maxMana = pm.getMaxMana().get(player);
|
||||||
|
@ -29,9 +29,33 @@ public class PlayerUtils {
|
||||||
itemStrength = pm.getItemStrength().get(player);
|
itemStrength = pm.getItemStrength().get(player);
|
||||||
itemSpeed = pm.getItemSpeed().get(player);
|
itemSpeed = pm.getItemSpeed().get(player);
|
||||||
itemMana = pm.getItemMana().get(player);
|
itemMana = pm.getItemMana().get(player);
|
||||||
|
double hearts = maxHealth + itemHealth;
|
||||||
|
double heart = 10;
|
||||||
|
if (hearts > 125 && hearts < 165) {
|
||||||
|
heart = 11;
|
||||||
|
} else if (hearts > 165 && hearts <= 230) {
|
||||||
|
heart = 12;
|
||||||
|
} else if (hearts > 230 && hearts <= 300) {
|
||||||
|
heart = 13;
|
||||||
|
} else if (hearts > 300 && hearts <= 400) {
|
||||||
|
heart = 14;
|
||||||
|
} else if (hearts > 400 && hearts <= 500) {
|
||||||
|
heart = 15;
|
||||||
|
} else if (hearts > 500 && hearts <= 650) {
|
||||||
|
heart = 16;
|
||||||
|
} else if (hearts > 650 && hearts <= 800) {
|
||||||
|
heart = 17;
|
||||||
|
} else if (hearts > 800 && hearts <= 1000) {
|
||||||
|
heart = 18;
|
||||||
|
} else if (hearts > 1000 && hearts <= 1250) {
|
||||||
|
heart = 19;
|
||||||
|
} else if (hearts > 1250) {
|
||||||
|
heart = 20;
|
||||||
|
}
|
||||||
|
log(heart + " " + hearts);
|
||||||
player
|
player
|
||||||
.getAttribute(Attribute.GENERIC_MAX_HEALTH)
|
.getAttribute(Attribute.GENERIC_MAX_HEALTH)
|
||||||
.setBaseValue(20D + (health + itemHealth) / 100);
|
.setBaseValue(heart * 2);
|
||||||
player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
|
player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
|
||||||
player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
|
player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2));
|
||||||
debug(
|
debug(
|
||||||
|
@ -43,5 +67,32 @@ public class PlayerUtils {
|
||||||
"Luck " + (luck + itemLuck),
|
"Luck " + (luck + itemLuck),
|
||||||
"Mana " + (mana + itemMana) + " Max Mana " + maxMana
|
"Mana " + (mana + itemMana) + " Max Mana " + maxMana
|
||||||
);
|
);
|
||||||
|
pm.updateActionBar(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BukkitTask actionBarPlayer(
|
||||||
|
Raxen main,
|
||||||
|
PlayerManager pm,
|
||||||
|
Player player
|
||||||
|
) {
|
||||||
|
return new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
player.sendActionBar(
|
||||||
|
colorComp(
|
||||||
|
"<red>" +
|
||||||
|
pm.getHealth().get(player) +
|
||||||
|
"/" +
|
||||||
|
pm.getMaxHealth().get(player) +
|
||||||
|
"❤</red> <aqua>" +
|
||||||
|
pm.getMana().get(player) +
|
||||||
|
"/" +
|
||||||
|
pm.getMaxMana().get(player) +
|
||||||
|
"</aqua>"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.runTaskTimerAsynchronously(main, 10, 20);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,19 +2,37 @@ package me.unurled.raxen.components.entity.player;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Items.setItemsToInventory;
|
import static me.unurled.raxen.utils.Items.setItemsToInventory;
|
||||||
import static me.unurled.raxen.utils.Utils.debug;
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
import static me.unurled.raxen.utils.Utils.log;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.entity.DamageType;
|
||||||
import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
|
import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
|
||||||
|
import me.unurled.raxen.components.entity.other.MobData;
|
||||||
import me.unurled.raxen.components.entity.player.attributes.Attribute;
|
import me.unurled.raxen.components.entity.player.attributes.Attribute;
|
||||||
import me.unurled.raxen.components.entity.player.storages.EnderChest;
|
import me.unurled.raxen.components.entity.player.storages.EnderChest;
|
||||||
import me.unurled.raxen.components.entity.player.storages.Inventory;
|
import me.unurled.raxen.components.entity.player.storages.Inventory;
|
||||||
|
import me.unurled.raxen.components.party.Party;
|
||||||
|
import me.unurled.raxen.manager.entity.PlayerManager;
|
||||||
|
import me.unurled.raxen.manager.entity.SpellManager.CastState;
|
||||||
import me.unurled.raxen.utils.EntityAttributes;
|
import me.unurled.raxen.utils.EntityAttributes;
|
||||||
import me.unurled.raxen.utils.Items;
|
import me.unurled.raxen.utils.Items;
|
||||||
|
import me.unurled.raxen.utils.Math;
|
||||||
|
import me.unurled.raxen.utils.Utils;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.EntityEffect;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.boss.BarColor;
|
||||||
|
import org.bukkit.boss.BarStyle;
|
||||||
|
import org.bukkit.boss.BossBar;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
@ -25,9 +43,20 @@ import org.bukkit.persistence.PersistentDataType;
|
||||||
public class RaxenPlayer {
|
public class RaxenPlayer {
|
||||||
|
|
||||||
private final Raxen main;
|
private final Raxen main;
|
||||||
|
@Getter
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final EntityNamespacedKey namespacedKey;
|
private final EntityNamespacedKey namespacedKey;
|
||||||
|
|
||||||
|
double crit_chance = 0.05;
|
||||||
|
public double critDamage = 1.50;
|
||||||
|
public boolean dead = false;
|
||||||
|
|
||||||
|
private DamageType lastDamageCause = DamageType.NORMAL;
|
||||||
|
|
||||||
|
private long lastEnvironmentalDamaged = 0;
|
||||||
|
private long lastDamagedNonEnvironmental = 0;
|
||||||
|
private long lastDamaged = 0;
|
||||||
|
|
||||||
private Boolean isRaxenPlayer;
|
private Boolean isRaxenPlayer;
|
||||||
|
|
||||||
private Attribute attribute;
|
private Attribute attribute;
|
||||||
|
@ -35,6 +64,25 @@ public class RaxenPlayer {
|
||||||
private Storage storages;
|
private Storage storages;
|
||||||
private Inventories inventory;
|
private Inventories inventory;
|
||||||
|
|
||||||
|
private boolean inTutorial;
|
||||||
|
|
||||||
|
private HashMap<String, HashMap<String, Integer>> mobCounter = new HashMap<String, HashMap<String, Integer>>();
|
||||||
|
|
||||||
|
private int mobKills, playerKills, deaths, bossKills;
|
||||||
|
|
||||||
|
public long xp;
|
||||||
|
@Getter
|
||||||
|
private int level;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private Party party = null;
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private Party invitedParty = null;
|
||||||
|
|
||||||
|
BossBar bossBar;
|
||||||
|
|
||||||
public RaxenPlayer(Raxen main, Player player) {
|
public RaxenPlayer(Raxen main, Player player) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
|
@ -89,7 +137,10 @@ public class RaxenPlayer {
|
||||||
|
|
||||||
public Storage getStorage() {
|
public Storage getStorage() {
|
||||||
PersistentDataContainer data = player.getPersistentDataContainer();
|
PersistentDataContainer data = player.getPersistentDataContainer();
|
||||||
String store = data.get(namespacedKey.storage, PersistentDataType.STRING);
|
String store = data.get(
|
||||||
|
namespacedKey.storage,
|
||||||
|
PersistentDataType.STRING
|
||||||
|
);
|
||||||
org.bukkit.inventory.Inventory ec = Bukkit.createInventory(
|
org.bukkit.inventory.Inventory ec = Bukkit.createInventory(
|
||||||
null,
|
null,
|
||||||
54,
|
54,
|
||||||
|
@ -103,7 +154,10 @@ public class RaxenPlayer {
|
||||||
|
|
||||||
public Inventories getInventory() {
|
public Inventories getInventory() {
|
||||||
PersistentDataContainer data = player.getPersistentDataContainer();
|
PersistentDataContainer data = player.getPersistentDataContainer();
|
||||||
String inv = data.get(namespacedKey.inventory, PersistentDataType.STRING);
|
String inv = data.get(
|
||||||
|
namespacedKey.inventory,
|
||||||
|
PersistentDataType.STRING
|
||||||
|
);
|
||||||
org.bukkit.inventory.Inventory invv = Bukkit.createInventory(
|
org.bukkit.inventory.Inventory invv = Bukkit.createInventory(
|
||||||
player,
|
player,
|
||||||
InventoryType.PLAYER
|
InventoryType.PLAYER
|
||||||
|
@ -121,7 +175,7 @@ public class RaxenPlayer {
|
||||||
public void setInventory(org.bukkit.inventory.Inventory inv) {
|
public void setInventory(org.bukkit.inventory.Inventory inv) {
|
||||||
PersistentDataContainer data = player.getPersistentDataContainer();
|
PersistentDataContainer data = player.getPersistentDataContainer();
|
||||||
List<String> listInv = new ArrayList<String>();
|
List<String> listInv = new ArrayList<String>();
|
||||||
Integer reverse = 0;
|
int reverse = 0;
|
||||||
for (ItemStack it : inv) {
|
for (ItemStack it : inv) {
|
||||||
reverse = reverse + 1;
|
reverse = reverse + 1;
|
||||||
if (it != null && it.getType() != Material.AIR) {
|
if (it != null && it.getType() != Material.AIR) {
|
||||||
|
@ -151,13 +205,16 @@ public class RaxenPlayer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Storage createStorage() {
|
public Storage createStorage() {
|
||||||
setStorage(Bukkit.createInventory(null, 54, Component.text("Ender Chest")));
|
setStorage(
|
||||||
|
Bukkit.createInventory(null, 54, Component.text("Ender Chest"))
|
||||||
|
);
|
||||||
return getStorage();
|
return getStorage();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Inventories createInventory() {
|
public Inventories createInventory() {
|
||||||
setInventory(Bukkit.createInventory(null, InventoryType.PLAYER));
|
org.bukkit.inventory.Inventory inv = Bukkit.createInventory(null, InventoryType.PLAYER);
|
||||||
return getInventory();
|
setInventory(inv);
|
||||||
|
return new Inventories(new Inventory(inv));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isRaxenPlayer() {
|
public Boolean isRaxenPlayer() {
|
||||||
|
@ -171,4 +228,376 @@ public class RaxenPlayer {
|
||||||
public Attribute getAttribute() {
|
public Attribute getAttribute() {
|
||||||
return attribute;
|
return attribute;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isInTutorial() {
|
||||||
|
return inTutorial;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInTutorial(boolean inTutorial) {
|
||||||
|
this.inTutorial = inTutorial;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDamage() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attackPlayer(RaxenPlayer player) {
|
||||||
|
return attackPlayer(player, -1, false, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attackPlayer(RaxenPlayer player, int damage) {
|
||||||
|
return attackPlayer(player, damage, false, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attackPlayer(RaxenPlayer player, int damage, boolean projectile) {
|
||||||
|
return attackPlayer(player, damage, projectile, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attackPlayer(RaxenPlayer player, int damage, boolean projectile,
|
||||||
|
double knockback) {
|
||||||
|
if (player == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (player == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int eDamage;
|
||||||
|
if (damage > 0) {
|
||||||
|
eDamage = damage;
|
||||||
|
} else {
|
||||||
|
eDamage = getDamage();
|
||||||
|
}
|
||||||
|
boolean crit = false;
|
||||||
|
if (java.lang.Math.random() < crit_chance) {
|
||||||
|
crit = true;
|
||||||
|
eDamage = (int) (eDamage * 1.5);
|
||||||
|
}
|
||||||
|
boolean sucess = false;
|
||||||
|
// TODO: calculate with classes... later
|
||||||
|
sucess = player.damage(eDamage, this.player, DamageType.NORMAL, crit);
|
||||||
|
return sucess;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attackMob(MobData other) {
|
||||||
|
return attackMob(other, 0.5, -1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attackMob(MobData other, int rpgDamage) {
|
||||||
|
return attackMob(other, 0.5, rpgDamage, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attackMob(MobData other, int rpgDamage, boolean projectile) {
|
||||||
|
return attackMob(other, 0.5, rpgDamage, projectile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean attackMob(MobData other, double knockback, int rpgDamage,
|
||||||
|
boolean projectil) {
|
||||||
|
Player p = getPlayer();
|
||||||
|
if (p == null || other == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int damage;
|
||||||
|
if (rpgDamage > 0) {
|
||||||
|
damage = rpgDamage;
|
||||||
|
} else {
|
||||||
|
damage = getDamage();
|
||||||
|
}
|
||||||
|
boolean crit = false;
|
||||||
|
double critChanceTemp = crit_chance;
|
||||||
|
if (java.lang.Math.random() < critChanceTemp) {
|
||||||
|
crit = true;
|
||||||
|
damage *= critDamage;
|
||||||
|
}
|
||||||
|
boolean sucess = false;
|
||||||
|
sucess = other.damage(damage, p, DamageType.NORMAL, crit);
|
||||||
|
if (sucess && !projectil) {
|
||||||
|
// TODO: other.knockback(p, knockback);
|
||||||
|
}
|
||||||
|
return sucess;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean damage(int damage, Entity damager, DamageType damageType) {
|
||||||
|
return damage(damage, damager, damageType, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean damage(int damage, Entity damager, DamageType damageType, boolean crit) {
|
||||||
|
if (dead) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (System.currentTimeMillis() - lastEnvironmentalDamaged < 600 && (
|
||||||
|
damageType == DamageType.ENVIRONMENTAL_LAVA
|
||||||
|
|| damageType == DamageType.ENVIRONMENTAL_DROWNING
|
||||||
|
|| damageType == DamageType.ENVIRONMENTAL_FALL)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (player == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (damager != null) {
|
||||||
|
if (damager instanceof Player) {
|
||||||
|
RaxenPlayer damagerRX = main.getManager().getPlayerManager()
|
||||||
|
.getRaxenPlayer((Player) damager);
|
||||||
|
if (!((Player) damager).isOnline() || damagerRX == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// TODO: check if same party later not now
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (lastDamageCause = damageType) {
|
||||||
|
case NORMAL:
|
||||||
|
case NORMAL_SPELL:
|
||||||
|
damage -= Math.randInt(0, getAttribute().getDefense());
|
||||||
|
lastDamagedNonEnvironmental = System.currentTimeMillis();
|
||||||
|
break;
|
||||||
|
case ENVIRONMENTAL_FALL:
|
||||||
|
if (damage >= getAttribute().getHealth()) {
|
||||||
|
damage = getAttribute().getHealth() - 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (damageType == DamageType.ENVIRONMENTAL_LAVA
|
||||||
|
|| damageType == DamageType.ENVIRONMENTAL_DROWNING
|
||||||
|
|| damageType == DamageType.ENVIRONMENTAL_FALL) {
|
||||||
|
lastEnvironmentalDamaged = System.currentTimeMillis();
|
||||||
|
} else if (damageType == DamageType.NORMAL) {
|
||||||
|
lastDamaged = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
if (damager != null && damager != player && damager instanceof Player) {
|
||||||
|
damage *= 0.8; // pvp nerf
|
||||||
|
}
|
||||||
|
if (damage < 1) {
|
||||||
|
damage = 1;
|
||||||
|
}
|
||||||
|
if (damageType == DamageType.NORMAL_SPELL || damageType == DamageType.NORMAL) {
|
||||||
|
if (damage > getAttribute().getHealth() * 0.5) {
|
||||||
|
player.leaveVehicle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getAttribute().setHealth(getAttribute().getHealth() - damage);
|
||||||
|
if (getAttribute().getHealth() < 0) {
|
||||||
|
getAttribute().setHealth(0);
|
||||||
|
}
|
||||||
|
if (damager != null && damager != player) {
|
||||||
|
if (damager instanceof Player) {
|
||||||
|
RaxenPlayer damagerRX = main.getManager().getPlayerManager()
|
||||||
|
.getRaxenPlayer((Player) damager);
|
||||||
|
if (damagerRX != null) {
|
||||||
|
Player p2 = damagerRX.getPlayer();
|
||||||
|
if (p2 != null && p2.isValid()) {
|
||||||
|
p2.playSound(p2.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.85f, 0.85f);
|
||||||
|
if (System.currentTimeMillis() - lastDamaged < 1000) {
|
||||||
|
player.playEffect(EntityEffect.HURT);
|
||||||
|
}
|
||||||
|
if (getAttribute().getHealth() <= 0) {
|
||||||
|
die();
|
||||||
|
} else {
|
||||||
|
// TODO: update health display on action bar
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void die() {
|
||||||
|
log("player " + player.displayName() + " died");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void incrementMobCounter(String mob) {
|
||||||
|
if (mobCounter.containsKey(mob)) {
|
||||||
|
mobCounter.get(mob).replaceAll((k, v) -> v + 1);
|
||||||
|
// TODO: mob quest tracker ?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMobKills() {
|
||||||
|
return mobKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPlayerKills() {
|
||||||
|
return playerKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDeaths() {
|
||||||
|
return deaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBossKills() {
|
||||||
|
return bossKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMobKills(int mobKills) {
|
||||||
|
this.mobKills = mobKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlayerKills(int playerKills) {
|
||||||
|
this.playerKills = playerKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeaths(int deaths) {
|
||||||
|
this.deaths = deaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBossKills(int bossKills) {
|
||||||
|
this.bossKills = bossKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMobKills(int mobKills) {
|
||||||
|
this.mobKills += mobKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMobKills() {
|
||||||
|
this.mobKills += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPlayerKills(int playerKills) {
|
||||||
|
this.playerKills += playerKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPlayerKills() {
|
||||||
|
this.playerKills += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDeaths(int deaths) {
|
||||||
|
this.deaths += deaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDeaths() {
|
||||||
|
this.deaths += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addBossKills(int bossKills) {
|
||||||
|
this.bossKills += bossKills;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addBossKills() {
|
||||||
|
this.bossKills += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void gainXp(long amt) {
|
||||||
|
gainXp(amt, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void gainXp(long amt, boolean penalty) {
|
||||||
|
xp += amt;
|
||||||
|
Player p = getPlayer();
|
||||||
|
if (p == null || !p.isValid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int bonus = 0;
|
||||||
|
// IDEA: per class xp bonus
|
||||||
|
// IDEA: party xp multiplier
|
||||||
|
long tXp = amt;
|
||||||
|
if (bonus > 0) {
|
||||||
|
tXp += bonus;
|
||||||
|
xp += bonus;
|
||||||
|
}
|
||||||
|
if (xp >= getXpForNextLevel()) {
|
||||||
|
long extra = xp - getXpForNextLevel();
|
||||||
|
xp = 0;
|
||||||
|
level++;
|
||||||
|
xp = extra < getXpForNextLevel() ? extra : getXpForNextLevel() - 1;
|
||||||
|
// TODO: take care of stats level up
|
||||||
|
// TODO: update health and mana display;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int lastLevel = -1;
|
||||||
|
private long cachedXp = -1;
|
||||||
|
|
||||||
|
public long getXpForNextLevel() {
|
||||||
|
long ret = 1;
|
||||||
|
if (lastLevel == level && cachedXp > 0) {
|
||||||
|
return cachedXp;
|
||||||
|
}
|
||||||
|
ret = PlayerStatistics.getEXPForNextLevel(level);
|
||||||
|
if (ret < 0) {
|
||||||
|
ret = Long.MAX_VALUE;
|
||||||
|
}
|
||||||
|
lastLevel = level;
|
||||||
|
cachedXp = ret;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void knockback(LivingEntity attacker, double knockBackMultiplier) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateHealthManaDisplay() {
|
||||||
|
Player p = getPlayer();
|
||||||
|
PlayerManager manager = main.getManager().getPlayerManager();
|
||||||
|
if (p != null) {
|
||||||
|
int health = manager.getHealth().get(p);
|
||||||
|
int maxHealth = manager.getMaxHealth().get(p);
|
||||||
|
int mana = manager.getMana().get(p);
|
||||||
|
int maxMana = manager.getMaxMana().get(p);
|
||||||
|
if (health > maxHealth) {
|
||||||
|
manager.getHealth().set(p, maxHealth);
|
||||||
|
health = manager.getHealth().get(p);
|
||||||
|
}
|
||||||
|
if (health < 0) {
|
||||||
|
manager.getHealth().set(p, 0);
|
||||||
|
health = manager.getHealth().get(p);
|
||||||
|
}
|
||||||
|
if (mana > maxMana) {
|
||||||
|
manager.getMana().set(p, maxMana);
|
||||||
|
mana = manager.getMana().get(p);
|
||||||
|
}
|
||||||
|
if (dead) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
double percent = ((double) health) / ((double) maxHealth);
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
BarColor color = BarColor.GREEN;
|
||||||
|
if (percent > 0.5) {
|
||||||
|
sb.append("<green>");
|
||||||
|
sb.append(health);
|
||||||
|
sb.append(" <aqua><bold>HP");
|
||||||
|
} else if (percent > 0.20) {
|
||||||
|
sb.append("<yellow>");
|
||||||
|
sb.append(health);
|
||||||
|
sb.append(" <aqua><bold>HP");
|
||||||
|
color = BarColor.YELLOW;
|
||||||
|
} else {
|
||||||
|
sb.append("<dark_red><bold>DANGER - <reset><red>");
|
||||||
|
sb.append(health);
|
||||||
|
sb.append(" <dark_red><bold> - DANGER");
|
||||||
|
color = BarColor.RED;
|
||||||
|
}
|
||||||
|
sb.append("<reset>");
|
||||||
|
// TODO: status poison, burn, bleed
|
||||||
|
if (percent > 1) {
|
||||||
|
percent = 1;
|
||||||
|
} else if (percent < 0.01) {
|
||||||
|
percent = 0.01;
|
||||||
|
}
|
||||||
|
if (bossBar == null) {
|
||||||
|
bossBar = Bukkit.createBossBar(Utils.coloredString(sb.toString()), BarColor.GREEN,
|
||||||
|
BarStyle.SOLID);
|
||||||
|
bossBar.addPlayer(p);
|
||||||
|
}
|
||||||
|
bossBar.setTitle(Utils.coloredString(sb.toString().trim()));
|
||||||
|
bossBar.setProgress(percent);
|
||||||
|
bossBar.setColor(color);
|
||||||
|
|
||||||
|
if (!p.isGliding() && main.getManager().getSpellManager().casters.containsKey(
|
||||||
|
p.getUniqueId())) {
|
||||||
|
CastState cs = main.getManager().getSpellManager().casters.get(
|
||||||
|
p.getUniqueId()).state;
|
||||||
|
if (cs != CastState.NONE) {
|
||||||
|
StringBuilder sb2 = new StringBuilder();
|
||||||
|
sb2.append("<gold><bold> ");
|
||||||
|
sb2.append(cs.toString());
|
||||||
|
p.sendActionBar(Utils.colorComp(sb2.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// p.setFoodLevel(mana * 2);
|
||||||
|
p.setLevel(level);
|
||||||
|
p.setExp((float) (((double) xp) / ((double) getXpForNextLevel())));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,9 @@ public class Scoreboard {
|
||||||
score2.setScore(2);
|
score2.setScore(2);
|
||||||
Score score3 = obj.getScore(
|
Score score3 = obj.getScore(
|
||||||
textCompToString(
|
textCompToString(
|
||||||
colorTextComp("<gold>Coins: <gold>" + vault.getBalanceString(player))
|
colorTextComp(
|
||||||
|
"<gold>Coins: <gold>" + vault.getBalanceString(player)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
score3.setScore(1);
|
score3.setScore(1);
|
||||||
|
@ -66,7 +68,9 @@ public class Scoreboard {
|
||||||
assert objective != null;
|
assert objective != null;
|
||||||
Score score = objective.getScore(
|
Score score = objective.getScore(
|
||||||
textCompToString(
|
textCompToString(
|
||||||
colorTextComp("<gold>Coins: <gold>" + vault.getBalanceString(player))
|
colorTextComp(
|
||||||
|
"<gold>Coins: <gold>" + vault.getBalanceString(player)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
score.setScore(1);
|
score.setScore(1);
|
||||||
|
|
|
@ -100,7 +100,7 @@ public class Attributes {
|
||||||
"Luck",
|
"Luck",
|
||||||
"Mana",
|
"Mana",
|
||||||
"Speed",
|
"Speed",
|
||||||
"Strength",
|
"Strength"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,15 @@
|
||||||
package me.unurled.raxen.components.gui;
|
package me.unurled.raxen.components.gui;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Items.*;
|
import static me.unurled.raxen.utils.Utils.fillGreyPane;
|
||||||
import static me.unurled.raxen.utils.Utils.*;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.entity.player.PlayerUtils;
|
import me.unurled.raxen.components.entity.player.PlayerUtils;
|
||||||
import me.unurled.raxen.utils.Utils;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
@ -34,193 +28,25 @@ public class ItemListGui implements Listener {
|
||||||
Component.text("Item List")
|
Component.text("Item List")
|
||||||
);
|
);
|
||||||
|
|
||||||
private Inventory inv2 = Bukkit.createInventory(
|
|
||||||
null,
|
|
||||||
54,
|
|
||||||
Component.text("Item List")
|
|
||||||
);
|
|
||||||
private Inventory inv3 = Bukkit.createInventory(
|
|
||||||
null,
|
|
||||||
54,
|
|
||||||
Component.text("Item List")
|
|
||||||
);
|
|
||||||
private Inventory inv4 = Bukkit.createInventory(
|
|
||||||
null,
|
|
||||||
54,
|
|
||||||
Component.text("Item List")
|
|
||||||
);
|
|
||||||
private Inventory inv5 = Bukkit.createInventory(
|
|
||||||
null,
|
|
||||||
54,
|
|
||||||
Component.text("Item List")
|
|
||||||
);
|
|
||||||
private Inventory inv6 = Bukkit.createInventory(
|
|
||||||
null,
|
|
||||||
54,
|
|
||||||
Component.text("Item List")
|
|
||||||
);
|
|
||||||
private Inventory inv7 = Bukkit.createInventory(
|
|
||||||
null,
|
|
||||||
54,
|
|
||||||
Component.text("Item List")
|
|
||||||
);
|
|
||||||
private Inventory inv8 = Bukkit.createInventory(
|
|
||||||
null,
|
|
||||||
54,
|
|
||||||
Component.text("Item List")
|
|
||||||
);
|
|
||||||
private Inventory inv9 = Bukkit.createInventory(
|
|
||||||
null,
|
|
||||||
54,
|
|
||||||
Component.text("Item List")
|
|
||||||
);
|
|
||||||
|
|
||||||
private HashMap<String, ItemStack> itlist;
|
private HashMap<String, ItemStack> itlist;
|
||||||
|
|
||||||
public ItemListGui(Raxen main) {
|
public ItemListGui(Raxen main) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
this.itlist = this.main.getManager().getItemManager().getList();
|
this.itlist = this.main.getManager().getItemManager().getList();
|
||||||
this.inv = getInventories();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemStack PREVIOUS = createItem(
|
public Inventory getInventories(int page) {
|
||||||
Material.ARROW,
|
int item = -1;
|
||||||
1,
|
int number = 54 * (page - 1);
|
||||||
true,
|
int number_final = number + 54;
|
||||||
false,
|
|
||||||
"Previous page"
|
|
||||||
);
|
|
||||||
private ItemStack NEXT = createItem(
|
|
||||||
Material.ARROW,
|
|
||||||
1,
|
|
||||||
true,
|
|
||||||
false,
|
|
||||||
"Next page"
|
|
||||||
);
|
|
||||||
private ItemStack PAGE = createItem(Material.PAPER, 1, true, false, "Page");
|
|
||||||
private ItemStack CLOSE = closeItem();
|
|
||||||
private ItemStack GREY_PANE = greyPane();
|
|
||||||
|
|
||||||
public Inventory getInventories() {
|
for (ItemStack it : itlist.values()) {
|
||||||
Integer page = 1;
|
|
||||||
Integer item = -1;
|
|
||||||
for (Map.Entry<String, ItemStack> entry : itlist.entrySet()) {
|
|
||||||
ItemStack it = entry.getValue();
|
|
||||||
item++;
|
item++;
|
||||||
if (item > 44 && item < 91) {
|
if (item >= number && item < number_final) {
|
||||||
inv2.addItem(it);
|
inv.setItem(item - number, it);
|
||||||
inv2.setItem(48, PREVIOUS);
|
|
||||||
inv2.setItem(
|
|
||||||
49,
|
|
||||||
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
|
|
||||||
);
|
|
||||||
inv2.setItem(53, CLOSE);
|
|
||||||
inv2 = fillGreyPane(inv2);
|
|
||||||
}
|
|
||||||
if (item > 90 && item < 136) {
|
|
||||||
inv3.setItem(48, PREVIOUS);
|
|
||||||
inv3.setItem(
|
|
||||||
49,
|
|
||||||
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
|
|
||||||
);
|
|
||||||
inv3.setItem(53, CLOSE);
|
|
||||||
inv3 = fillGreyPane(inv3);
|
|
||||||
}
|
|
||||||
if (item > 135 && item < 181) {
|
|
||||||
inv4.addItem(it);
|
|
||||||
inv4.setItem(48, PREVIOUS);
|
|
||||||
inv4.setItem(
|
|
||||||
49,
|
|
||||||
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
|
|
||||||
);
|
|
||||||
inv4.setItem(53, CLOSE);
|
|
||||||
inv4 = fillGreyPane(inv4);
|
|
||||||
}
|
|
||||||
if (item > 180 && item < 226) {
|
|
||||||
inv5.addItem(it);
|
|
||||||
inv5.setItem(48, PREVIOUS);
|
|
||||||
inv5.setItem(
|
|
||||||
49,
|
|
||||||
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
|
|
||||||
);
|
|
||||||
inv5.setItem(53, CLOSE);
|
|
||||||
inv5 = fillGreyPane(inv5);
|
|
||||||
}
|
|
||||||
if (item > 225 && item < 271) {
|
|
||||||
inv6.addItem(it);
|
|
||||||
inv6.setItem(48, PREVIOUS);
|
|
||||||
inv6.setItem(
|
|
||||||
49,
|
|
||||||
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
|
|
||||||
);
|
|
||||||
inv6.setItem(53, CLOSE);
|
|
||||||
inv6 = fillGreyPane(inv6);
|
|
||||||
}
|
|
||||||
if (item > 270 && item < 316) {
|
|
||||||
inv7.addItem(it);
|
|
||||||
inv7.setItem(48, PREVIOUS);
|
|
||||||
inv7.setItem(
|
|
||||||
49,
|
|
||||||
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
|
|
||||||
);
|
|
||||||
inv7.setItem(53, CLOSE);
|
|
||||||
inv7 = fillGreyPane(inv7);
|
|
||||||
}
|
|
||||||
if (item > 315 && item < 361) {
|
|
||||||
inv8.addItem(it);
|
|
||||||
inv8.setItem(48, PREVIOUS);
|
|
||||||
inv8.setItem(
|
|
||||||
49,
|
|
||||||
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
|
|
||||||
);
|
|
||||||
inv8.setItem(53, CLOSE);
|
|
||||||
inv8 = fillGreyPane(inv8);
|
|
||||||
}
|
|
||||||
if (item > 360 && item < 406) {
|
|
||||||
inv9.addItem(it);
|
|
||||||
inv9.setItem(48, PREVIOUS);
|
|
||||||
inv9.setItem(
|
|
||||||
49,
|
|
||||||
editItem(PAGE, "page" + page, 1, new ArrayList<Component>())
|
|
||||||
);
|
|
||||||
inv9.setItem(53, CLOSE);
|
|
||||||
inv9 = fillGreyPane(inv9);
|
|
||||||
}
|
|
||||||
if (item > 405) {
|
|
||||||
log("Too many item to render.");
|
|
||||||
} else {
|
|
||||||
inv.addItem(it);
|
|
||||||
inv.setItem(49, PAGE);
|
|
||||||
inv.setItem(50, NEXT);
|
|
||||||
}
|
|
||||||
if (item > 44) {
|
|
||||||
inv.setItem(50, NEXT);
|
|
||||||
if (item > 90) {
|
|
||||||
inv2.setItem(50, NEXT);
|
|
||||||
if (item > 135) {
|
|
||||||
inv3.setItem(50, NEXT);
|
|
||||||
if (item > 180) {
|
|
||||||
inv4.setItem(50, NEXT);
|
|
||||||
if (item > 225) {
|
|
||||||
inv5.setItem(50, NEXT);
|
|
||||||
if (item > 270) {
|
|
||||||
inv6.setItem(50, NEXT);
|
|
||||||
if (item > 315) {
|
|
||||||
inv7.setItem(50, NEXT);
|
|
||||||
if (item > 360) {
|
|
||||||
inv8.setItem(50, NEXT);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
fillGreyPane(inv);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
page++;
|
|
||||||
inv.setItem(53, CLOSE);
|
|
||||||
inv = fillGreyPane(inv);
|
|
||||||
}
|
|
||||||
return inv;
|
return inv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,90 +54,26 @@ public class ItemListGui implements Listener {
|
||||||
public void clickInventory(InventoryClickEvent e) {
|
public void clickInventory(InventoryClickEvent e) {
|
||||||
Player player = (Player) e.getWhoClicked();
|
Player player = (Player) e.getWhoClicked();
|
||||||
Inventory einv = e.getClickedInventory();
|
Inventory einv = e.getClickedInventory();
|
||||||
if (
|
if (einv == inv) {
|
||||||
einv == inv ||
|
|
||||||
einv == inv2 ||
|
|
||||||
einv == inv3 ||
|
|
||||||
einv == inv4 ||
|
|
||||||
einv == inv5 ||
|
|
||||||
einv == inv6 ||
|
|
||||||
einv == inv7 ||
|
|
||||||
einv == inv8 ||
|
|
||||||
einv == inv9
|
|
||||||
) {
|
|
||||||
if (
|
if (
|
||||||
e.getCurrentItem() != null &&
|
e.getCurrentItem() != null &&
|
||||||
e.getCurrentItem().getType() != Material.AIR
|
e.getCurrentItem().getType() != Material.AIR
|
||||||
) {
|
) {
|
||||||
Integer slot = e.getSlot();
|
Integer slot = e.getSlot();
|
||||||
ItemStack clicked;
|
ItemStack clicked;
|
||||||
if (slot == 48) {
|
|
||||||
//previous
|
|
||||||
if (e.getCurrentItem() != GREY_PANE) {
|
|
||||||
ItemStack pagee = einv.getItem(49);
|
|
||||||
String name = textCompToString(pagee.displayName());
|
|
||||||
int page = Integer.parseInt(name.replace("page", ""));
|
|
||||||
switch (page) {
|
|
||||||
case 2:
|
|
||||||
player.openInventory(inv);
|
|
||||||
case 3:
|
|
||||||
player.openInventory(inv2);
|
|
||||||
case 4:
|
|
||||||
player.openInventory(inv3);
|
|
||||||
case 5:
|
|
||||||
player.openInventory(inv4);
|
|
||||||
case 6:
|
|
||||||
player.openInventory(inv5);
|
|
||||||
case 7:
|
|
||||||
player.openInventory(inv6);
|
|
||||||
case 8:
|
|
||||||
player.openInventory(inv7);
|
|
||||||
case 9:
|
|
||||||
player.openInventory(inv8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (slot == 49) {
|
|
||||||
//page
|
|
||||||
return;
|
|
||||||
} else if (slot == 50) {
|
|
||||||
//next
|
|
||||||
ItemStack pagee = einv.getItem(49);
|
|
||||||
if (pagee != null) {
|
|
||||||
String name = textCompToString(pagee.displayName());
|
|
||||||
name = name.replace("[", "");
|
|
||||||
name = name.replace("]", "");
|
|
||||||
log(name);
|
|
||||||
int page = Integer.parseInt(name.replace("page", ""));
|
|
||||||
switch (page) {
|
|
||||||
case 1:
|
|
||||||
player.openInventory(inv2);
|
|
||||||
case 2:
|
|
||||||
player.openInventory(inv3);
|
|
||||||
case 3:
|
|
||||||
player.openInventory(inv4);
|
|
||||||
case 4:
|
|
||||||
player.openInventory(inv5);
|
|
||||||
case 5:
|
|
||||||
player.openInventory(inv6);
|
|
||||||
case 6:
|
|
||||||
player.openInventory(inv7);
|
|
||||||
case 7:
|
|
||||||
player.openInventory(inv8);
|
|
||||||
case 8:
|
|
||||||
player.openInventory(inv9);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (slot == 53) {
|
|
||||||
//close
|
|
||||||
player.closeInventory();
|
|
||||||
} else {
|
|
||||||
//if (player.getInventory().firstEmpty() == -1) {
|
//if (player.getInventory().firstEmpty() == -1) {
|
||||||
//add to stash
|
//add to stash
|
||||||
//}
|
//}
|
||||||
player.getInventory().addItem(e.getCurrentItem());
|
player.getInventory().addItem(e.getCurrentItem());
|
||||||
|
player.closeInventory();
|
||||||
|
player.playSound(player, Sound.UI_BUTTON_CLICK, 1, 0);
|
||||||
PlayerUtils.updateSkills(main, player);
|
PlayerUtils.updateSkills(main, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void openInventory(Player player, int page) {
|
||||||
|
inv = getInventories(page);
|
||||||
|
player.openInventory(inv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
116
src/main/java/me/unurled/raxen/components/items/ItemBuilder.java
Normal file
116
src/main/java/me/unurled/raxen/components/items/ItemBuilder.java
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
package me.unurled.raxen.components.items;
|
||||||
|
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import me.unurled.raxen.utils.Utils;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Color;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.attribute.Attribute;
|
||||||
|
import org.bukkit.attribute.AttributeModifier;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.inventory.ItemFlag;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.FireworkEffectMeta;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
||||||
|
import org.bukkit.inventory.meta.MapMeta;
|
||||||
|
import org.bukkit.inventory.meta.PotionMeta;
|
||||||
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
|
import org.bukkit.potion.PotionData;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ItemBuilder {
|
||||||
|
|
||||||
|
private final PersistentDataContainer persistentDataContainer;
|
||||||
|
private ItemStack it;
|
||||||
|
private Material type;
|
||||||
|
private Component displayName;
|
||||||
|
private int amount;
|
||||||
|
private int customModelData;
|
||||||
|
private boolean hasCustomModelData;
|
||||||
|
private Color color;
|
||||||
|
private @NotNull PotionData potionData;
|
||||||
|
|
||||||
|
private List<PotionEffect> potionEffects;
|
||||||
|
private Set<ItemFlag> itemFlags;
|
||||||
|
private boolean hasAttributeModifiers;
|
||||||
|
private Multimap<Attribute, AttributeModifier> attributeModifiers;
|
||||||
|
private List<String> lore;
|
||||||
|
private final Map<Enchantment, Integer> enchantments;
|
||||||
|
|
||||||
|
public ItemBuilder(ItemStack it) {
|
||||||
|
this.it = it;
|
||||||
|
type = it.getType();
|
||||||
|
amount = it.getAmount();
|
||||||
|
|
||||||
|
final ItemMeta itm = it.getItemMeta();
|
||||||
|
|
||||||
|
if (itm instanceof LeatherArmorMeta leatherArmorMeta) {
|
||||||
|
color = leatherArmorMeta.getColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itm instanceof PotionMeta potionMeta) {
|
||||||
|
color = potionMeta.getColor();
|
||||||
|
potionData = potionMeta.getBasePotionData();
|
||||||
|
potionEffects = new ArrayList<>(potionMeta.getCustomEffects());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itm instanceof MapMeta mapMeta) {
|
||||||
|
color = mapMeta.getColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itm instanceof FireworkEffectMeta effectMeta) {
|
||||||
|
color =
|
||||||
|
effectMeta.hasEffect() ? effectMeta.getEffect().getColors().get(0) : Color.WHITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itm.hasDisplayName()) {
|
||||||
|
displayName = itm.displayName();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!itm.getItemFlags().isEmpty()) {
|
||||||
|
itemFlags = itm.getItemFlags();
|
||||||
|
}
|
||||||
|
|
||||||
|
hasAttributeModifiers = itm.hasAttributeModifiers();
|
||||||
|
if (hasAttributeModifiers) {
|
||||||
|
attributeModifiers = itm.getAttributeModifiers();
|
||||||
|
}
|
||||||
|
|
||||||
|
hasCustomModelData = itm.hasCustomModelData();
|
||||||
|
if (itm.hasCustomModelData()) {
|
||||||
|
customModelData = itm.getCustomModelData();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itm.hasLore()) {
|
||||||
|
lore = itm.getLore();
|
||||||
|
}
|
||||||
|
|
||||||
|
persistentDataContainer = itm.getPersistentDataContainer();
|
||||||
|
|
||||||
|
enchantments = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemBuilder(Material material) {
|
||||||
|
this(new ItemStack(material));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemBuilder displayName(String name) {
|
||||||
|
this.displayName = Utils.colorComp(name);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void lore(List<String> lore) {
|
||||||
|
this.lore = lore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void color(Color color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package me.unurled.raxen.components.items;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import me.unurled.raxen.utils.Utils;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
|
||||||
|
public class ItemParser {
|
||||||
|
|
||||||
|
private final ConfigurationSection section;
|
||||||
|
private Material type;
|
||||||
|
|
||||||
|
public ItemParser(ConfigurationSection section) {
|
||||||
|
this.section = section;
|
||||||
|
type = Material.getMaterial(section.getString("material", "PAPER"));
|
||||||
|
if (section.isConfigurationSection("Pack")) {
|
||||||
|
ConfigurationSection packSection = section.getConfigurationSection("Pack");
|
||||||
|
// TODO: Parse pack section
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemBuilder buildItem() {
|
||||||
|
return buildItem(section.contains("name") ? section.getString("name") : null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemBuilder buildItem(String name) {
|
||||||
|
ItemBuilder item;
|
||||||
|
item = new ItemBuilder(type);
|
||||||
|
if (name != null) {
|
||||||
|
item.displayName(name);
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ItemBuilder applyConfig(ItemBuilder item) {
|
||||||
|
if (section.contains("lore")) {
|
||||||
|
List<String> lore = section.getStringList("lore");
|
||||||
|
item.lore(lore);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section.contains("color")) {
|
||||||
|
item.color(Utils.color(section.getString("color", "FFFFFF")));
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,14 +0,0 @@
|
||||||
package me.unurled.raxen.components.items;
|
|
||||||
|
|
||||||
public class NBT {
|
|
||||||
|
|
||||||
public static String HEALTH = "HEALTH";
|
|
||||||
public static String SPEED = "SPEED";
|
|
||||||
public static String STRENGTH = "STRENGTH";
|
|
||||||
public static String DEFENSE = "DEFENSE";
|
|
||||||
public static String LUCK = "LUCK";
|
|
||||||
public static String MANA = "MANA";
|
|
||||||
public static String ID = "ID";
|
|
||||||
public static String CUSTOM_ABILITY = "CUSTOM_ABILITY";
|
|
||||||
public static String DROP_RATE = "DROP_RATE";
|
|
||||||
}
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package me.unurled.raxen.components.items;
|
||||||
|
|
||||||
|
public class NBTNames {
|
||||||
|
|
||||||
|
public static String HEALTH = "HEALTH";
|
||||||
|
public static String SPEED = "SPEED";
|
||||||
|
public static String STRENGTH = "STRENGTH";
|
||||||
|
public static String DEFENSE = "DEFENSE";
|
||||||
|
public static String LUCK = "LUCK";
|
||||||
|
public static String MANA = "MANA";
|
||||||
|
public static String ID = "ID";
|
||||||
|
public static String CUSTOM_ABILITY = "CUSTOM_ABILITY";
|
||||||
|
public static String DROP_RATE = "DROP_RATE";
|
||||||
|
public static String ITEM_CLASS = "ITEM_CLASS";
|
||||||
|
public static String ITEM_TYPE = "ITEM_TYPE";
|
||||||
|
}
|
|
@ -26,6 +26,7 @@ public abstract class Item {
|
||||||
* need item to be set before calling this method.
|
* need item to be set before calling this method.
|
||||||
*/
|
*/
|
||||||
public void registerItem(@NotNull Raxen main) {
|
public void registerItem(@NotNull Raxen main) {
|
||||||
|
item = buildItem();
|
||||||
main.getManager().getItemManager().registerItem(item);
|
main.getManager().getItemManager().registerItem(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,5 +12,5 @@ public enum ItemClass {
|
||||||
SSS,
|
SSS,
|
||||||
MYTHIC,
|
MYTHIC,
|
||||||
UNIC,
|
UNIC,
|
||||||
GOD,
|
GOD
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,5 +7,5 @@ public enum ItemTypes {
|
||||||
MEDICINE,
|
MEDICINE,
|
||||||
ARMOR,
|
ARMOR,
|
||||||
BLOCKS,
|
BLOCKS,
|
||||||
MISCELLANEOUS,
|
MISCELLANEOUS
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package me.unurled.raxen.components.items.custom;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.items.custom.weapon.CombatKnife;
|
||||||
import me.unurled.raxen.components.items.custom.weapon.Dagger;
|
import me.unurled.raxen.components.items.custom.weapon.Dagger;
|
||||||
|
|
||||||
public class List {
|
public class List {
|
||||||
|
@ -21,5 +22,6 @@ public class List {
|
||||||
public void build() {
|
public void build() {
|
||||||
// weapons
|
// weapons
|
||||||
items.add(new Dagger());
|
items.add(new Dagger());
|
||||||
|
items.add(new CombatKnife());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
package me.unurled.raxen.components.items.custom.weapon;
|
||||||
|
|
||||||
|
import static me.unurled.raxen.utils.Utils.colorTextComp;
|
||||||
|
|
||||||
|
import de.tr7zw.nbtapi.NBT;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Getter;
|
||||||
|
import me.unurled.raxen.components.items.NBTNames;
|
||||||
|
import me.unurled.raxen.components.items.custom.Item;
|
||||||
|
import me.unurled.raxen.components.items.custom.ItemClass;
|
||||||
|
import me.unurled.raxen.components.items.custom.ItemTypes;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemFlag;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
public class CombatKnife extends Item {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
ItemStack item;
|
||||||
|
|
||||||
|
static final String NAME = "Combat Knife";
|
||||||
|
static final String ID = "COMBAT_KNIFE";
|
||||||
|
|
||||||
|
static final ItemClass ITEM_CLASS = ItemClass.F;
|
||||||
|
static final ItemTypes ITEM_TYPES = ItemTypes.WEAPON;
|
||||||
|
|
||||||
|
public ItemStack buildItem() {
|
||||||
|
item = new ItemStack(Material.IRON_SWORD);
|
||||||
|
ItemMeta itm = item.getItemMeta();
|
||||||
|
itm.displayName(colorTextComp("<aqua>" + NAME));
|
||||||
|
itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
||||||
|
itm.setUnbreakable(true);
|
||||||
|
List<Component> lore = new ArrayList<>();
|
||||||
|
lore.add(
|
||||||
|
colorTextComp(
|
||||||
|
"<grey>A simple combat knife with a serrated edge.</grey>"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
itm.setCustomModelData(1);
|
||||||
|
itm.lore(lore);
|
||||||
|
item.setItemMeta(itm);
|
||||||
|
NBT.modify(
|
||||||
|
item,
|
||||||
|
nbt -> {
|
||||||
|
nbt.setString(NBTNames.ID, ID);
|
||||||
|
nbt.setString(NBTNames.ITEM_TYPE, ITEM_TYPES.toString());
|
||||||
|
nbt.setString(NBTNames.ITEM_CLASS, ITEM_CLASS.toString());
|
||||||
|
nbt.setInteger(NBTNames.STRENGTH, 20);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ import de.tr7zw.nbtapi.NBTItem;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.components.items.NBT;
|
import me.unurled.raxen.components.items.NBTNames;
|
||||||
import me.unurled.raxen.components.items.custom.Item;
|
import me.unurled.raxen.components.items.custom.Item;
|
||||||
import me.unurled.raxen.components.items.custom.ItemClass;
|
import me.unurled.raxen.components.items.custom.ItemClass;
|
||||||
import me.unurled.raxen.components.items.custom.ItemTypes;
|
import me.unurled.raxen.components.items.custom.ItemTypes;
|
||||||
|
@ -22,16 +22,16 @@ public class Dagger extends Item {
|
||||||
@Getter
|
@Getter
|
||||||
ItemStack item;
|
ItemStack item;
|
||||||
|
|
||||||
String NAME = "Dager";
|
static final String NAME = "Dager";
|
||||||
String ID = "DAGER";
|
static final String ID = "DAGER";
|
||||||
|
|
||||||
ItemClass ITEM_CLASS = ItemClass.F;
|
static final ItemClass ITEM_CLASS = ItemClass.F;
|
||||||
ItemTypes ITEM_TYPES = ItemTypes.WEAPON;
|
static final ItemTypes ITEM_TYPES = ItemTypes.WEAPON;
|
||||||
|
|
||||||
public ItemStack buildItem() {
|
public ItemStack buildItem() {
|
||||||
item = new ItemStack(Material.IRON_SWORD);
|
item = new ItemStack(Material.IRON_SWORD);
|
||||||
ItemMeta itm = item.getItemMeta();
|
ItemMeta itm = item.getItemMeta();
|
||||||
itm.displayName(colorTextComp("<aqua>" + this.NAME));
|
itm.displayName(colorTextComp("<aqua>" + NAME));
|
||||||
itm.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1, false);
|
itm.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1, false);
|
||||||
itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS);
|
itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS);
|
||||||
itm.setUnbreakable(true);
|
itm.setUnbreakable(true);
|
||||||
|
@ -40,11 +40,11 @@ public class Dagger extends Item {
|
||||||
itm.lore(lore);
|
itm.lore(lore);
|
||||||
item.setItemMeta(itm);
|
item.setItemMeta(itm);
|
||||||
NBTItem nbti = new NBTItem(item);
|
NBTItem nbti = new NBTItem(item);
|
||||||
nbti.setString(NBT.ID, ID);
|
nbti.setString(NBTNames.ID, ID);
|
||||||
nbti.setInteger(NBT.SPEED, 100);
|
nbti.setInteger(NBTNames.SPEED, 100);
|
||||||
nbti.setInteger(NBT.STRENGTH, 50);
|
nbti.setInteger(NBTNames.STRENGTH, 50);
|
||||||
nbti.setString(NBT.CUSTOM_ABILITY, "throwing_dager");
|
nbti.setString(NBTNames.CUSTOM_ABILITY, "throwing_dager");
|
||||||
nbti.setDouble(NBT.DROP_RATE, 50.0);
|
nbti.setDouble(NBTNames.DROP_RATE, 50.0);
|
||||||
item = nbti.getItem();
|
item = nbti.getItem();
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ package me.unurled.raxen.components.lootchest.loots;
|
||||||
import de.tr7zw.nbtapi.NBTItem;
|
import de.tr7zw.nbtapi.NBTItem;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.items.NBT;
|
import me.unurled.raxen.components.items.NBTNames;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
@ -28,14 +28,17 @@ public class CustomLoot {
|
||||||
|
|
||||||
public Double getDrop_rate() {
|
public Double getDrop_rate() {
|
||||||
NBTItem nbti = new NBTItem(item);
|
NBTItem nbti = new NBTItem(item);
|
||||||
if (nbti.hasTag(NBT.DROP_RATE)) {
|
if (nbti.hasTag(NBTNames.DROP_RATE)) {
|
||||||
return nbti.getDouble(NBT.DROP_RATE);
|
return nbti.getDouble(NBTNames.DROP_RATE);
|
||||||
}
|
}
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void tryDropLoot(Location location) {
|
public void tryDropLoot(Location location) {
|
||||||
for (LootItem item : main.getManager().getLootManager().getLootTable()) {
|
for (LootItem item : main
|
||||||
|
.getManager()
|
||||||
|
.getLootManager()
|
||||||
|
.getLootTable()) {
|
||||||
item.tryDropItem(location);
|
item.tryDropItem(location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
233
src/main/java/me/unurled/raxen/components/party/Party.java
Normal file
233
src/main/java/me/unurled/raxen/components/party/Party.java
Normal file
|
@ -0,0 +1,233 @@
|
||||||
|
package me.unurled.raxen.components.party;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.entity.player.RaxenPlayer;
|
||||||
|
import me.unurled.raxen.manager.entity.PartyManager;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
|
import net.kyori.adventure.text.event.ClickEvent.Action;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
|
||||||
|
public class Party {
|
||||||
|
|
||||||
|
Raxen main;
|
||||||
|
|
||||||
|
private static int ID = 1;
|
||||||
|
public int id = ID++;
|
||||||
|
|
||||||
|
private ArrayList<UUID> uuids = new ArrayList<UUID>();
|
||||||
|
private UUID leaderUUID;
|
||||||
|
private String leaderName;
|
||||||
|
|
||||||
|
private ArrayList<Player> cachedPlayer = new ArrayList<Player>();
|
||||||
|
|
||||||
|
private long lastPlayerUpdate = 0L;
|
||||||
|
private Scoreboard board;
|
||||||
|
|
||||||
|
private boolean lootShare = false;
|
||||||
|
private HashMap<String, Long> lastInv = new HashMap<String, Long>();
|
||||||
|
|
||||||
|
|
||||||
|
public Party(Raxen main, Player leader) {
|
||||||
|
this.main = main;
|
||||||
|
this.leaderUUID = leader.getUniqueId();
|
||||||
|
this.leaderName = leader.getName();
|
||||||
|
// IDEA: adds scoreboard
|
||||||
|
addPlayer(leader);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendInvite(Player p, RaxenPlayer rx, Player inviter) {
|
||||||
|
if (rx.getParty() == this) {
|
||||||
|
inviter.sendMessage(PartyManager.PREFIX.append(
|
||||||
|
Component.text(p.getName() + " is already in the party!")));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (lastInv.containsKey(p.getName())) {
|
||||||
|
if (System.currentTimeMillis() - lastInv.get(p.getName()) < 15000) {
|
||||||
|
inviter.sendMessage(PartyManager.PREFIX.append(Component.text(p.getName()
|
||||||
|
+ " was invited to the party in the last 15 seconds. Please wait a bit before inviting them again.")
|
||||||
|
.color(
|
||||||
|
TextColor.color(255, 0, 0))));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lastInv.put(p.getName(), System.currentTimeMillis());
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 10.0F, 1.0F);
|
||||||
|
p.sendMessage(PartyManager.PREFIX.append(Component.text(
|
||||||
|
"You have been invited to join " + leaderName
|
||||||
|
+ "'s party. Type /party join to join the party.").color(
|
||||||
|
TextColor.color(0, 255, 0))));
|
||||||
|
p.sendMessage(
|
||||||
|
Component.text("Or click Here").color(TextColor.color(255, 255, 0)).clickEvent(
|
||||||
|
ClickEvent.clickEvent(Action.SUGGEST_COMMAND, "/party join")));
|
||||||
|
p.sendMessage(PartyManager.PREFIX.append(
|
||||||
|
Component.text("Type /party decline to decline the party invitation.").color(
|
||||||
|
TextColor.color(0, 255, 0))));
|
||||||
|
p.sendMessage(
|
||||||
|
Component.text("Or click Here").color(TextColor.color(255, 255, 0)).clickEvent(
|
||||||
|
ClickEvent.clickEvent(Action.SUGGEST_COMMAND, "/party decline")));
|
||||||
|
sendMessage(Component.text(
|
||||||
|
p.getName() + " has been invited to the party by " + inviter.getName() + "."));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPlayer(Player p) {
|
||||||
|
if (isFull()) {
|
||||||
|
p.sendMessage(PartyManager.PREFIX.append(Component.text("This party is full!")));
|
||||||
|
sendMessage(Component.text(p.getName() + " tried to join the party, but it was full."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lastPlayerUpdate = 0;
|
||||||
|
uuids.add(p.getUniqueId());
|
||||||
|
RaxenPlayer rx = main.getManager().getPlayerManager()
|
||||||
|
.getRaxenPlayer(p);
|
||||||
|
if (rx != null) {
|
||||||
|
rx.setParty(this);
|
||||||
|
}
|
||||||
|
p.sendMessage(Component.text("You have joined " + leaderName + "'s the party."));
|
||||||
|
Component comp = Component.text("The party is composed of ");
|
||||||
|
for (Player p2 : getPlayers()) {
|
||||||
|
comp.append(Component.text(p2.getName() + ", "));
|
||||||
|
}
|
||||||
|
p.sendMessage(comp);
|
||||||
|
sendMessage(Component.text(p.getName() + " has joined the party."));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void leavePlayer(UUID uuid, String name) {
|
||||||
|
if (uuid != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Player player = Bukkit.getPlayer(uuid);
|
||||||
|
if (leaderUUID != null && leaderUUID == uuid) {
|
||||||
|
sendMessage(Component.text(name + " has left the party."));
|
||||||
|
if (player != null && player.isOnline()) {
|
||||||
|
main.getManager()
|
||||||
|
.getPlayerManager().getRaxenPlayer(player).setParty(null);
|
||||||
|
}
|
||||||
|
uuids.remove(uuid);
|
||||||
|
lastPlayerUpdate = 0;
|
||||||
|
if (uuids.size() == 0) {
|
||||||
|
destroy();
|
||||||
|
} else {
|
||||||
|
for (int k = 0; k < uuids.size(); k++) {
|
||||||
|
UUID nu = uuids.get(k);
|
||||||
|
Player temp = Bukkit.getPlayer(nu);
|
||||||
|
if (temp != null && temp.isOnline()) {
|
||||||
|
sendMessage(Component.text(temp.getName() + " is now the party leader."));
|
||||||
|
leaderUUID = nu;
|
||||||
|
leaderName = temp.getName();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (player != null && player.isOnline()) {
|
||||||
|
sendMessage(Component.text(name + " has left the party."));
|
||||||
|
main.getManager()
|
||||||
|
.getPlayerManager().getRaxenPlayer(player).setParty(null);
|
||||||
|
}
|
||||||
|
uuids.remove(uuid);
|
||||||
|
lastPlayerUpdate = 0;
|
||||||
|
if (uuids.size() == 0) {
|
||||||
|
destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFull() {
|
||||||
|
if (this.uuids == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return uuids.size() >= PartyManager.MAX_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getXpMultiplier() {
|
||||||
|
int size = uuids.size();
|
||||||
|
if (size < 0) {
|
||||||
|
size = 0;
|
||||||
|
}
|
||||||
|
return switch (size) {
|
||||||
|
case 0, 1 -> 0.0;
|
||||||
|
case 2 -> 0.1;
|
||||||
|
case 3 -> 0.15;
|
||||||
|
case 4 -> 0.2;
|
||||||
|
default -> 0.25;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
for (UUID uuid : uuids) {
|
||||||
|
if (main.getManager().getPlayerManager().getRaxenPlayer(uuid) != null) {
|
||||||
|
RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(uuid);
|
||||||
|
if (rx.getParty() != null && rx.getParty().equals(this)) {
|
||||||
|
rx.setParty(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cachedPlayer.clear();
|
||||||
|
cachedPlayer = null;
|
||||||
|
uuids.clear();
|
||||||
|
uuids = null;
|
||||||
|
leaderUUID = null;
|
||||||
|
leaderName = null;
|
||||||
|
board = null;
|
||||||
|
main.getManager().getPartyManager().getParties().remove(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Player> getPlayers() {
|
||||||
|
if (System.currentTimeMillis() - lastPlayerUpdate > 5000) {
|
||||||
|
lastPlayerUpdate = System.currentTimeMillis();
|
||||||
|
cachedPlayer.clear();
|
||||||
|
ArrayList<UUID> toRemove = new ArrayList<UUID>();
|
||||||
|
for (UUID uuid : uuids) {
|
||||||
|
Player p = Bukkit.getPlayer(uuid);
|
||||||
|
if (p != null && p.isOnline()) {
|
||||||
|
cachedPlayer.add(p);
|
||||||
|
} else {
|
||||||
|
toRemove.add(uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uuids.removeAll(toRemove);
|
||||||
|
return cachedPlayer;
|
||||||
|
} else {
|
||||||
|
for (int k = 0; k < cachedPlayer.size(); k++) {
|
||||||
|
Player p = cachedPlayer.get(k);
|
||||||
|
if (p == null || !p.isOnline()) {
|
||||||
|
cachedPlayer.remove(k);
|
||||||
|
k--;
|
||||||
|
if (k < 0) {
|
||||||
|
k = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cachedPlayer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendMessage(Player sender, Component comp) {
|
||||||
|
Component msg = PartyManager.PREFIX.append(
|
||||||
|
Component.text(sender.getName() + "<reset><white>: ")).append(comp);
|
||||||
|
// TODO: Filter words
|
||||||
|
for (Player p : getPlayers()) {
|
||||||
|
p.sendMessage(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendMessage(Component comp) {
|
||||||
|
Component msg = PartyManager.PREFIX.append(comp);
|
||||||
|
for (Player p : getPlayers()) {
|
||||||
|
p.sendMessage(msg);
|
||||||
|
p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLeader(Player p) {
|
||||||
|
return p.getName().equals(leaderName) && p.getUniqueId().equals(leaderUUID);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
package me.unurled.raxen.components.tutorial;
|
||||||
|
|
||||||
|
import static me.unurled.raxen.utils.Utils.colorTextComp;
|
||||||
|
import static me.unurled.raxen.utils.Utils.log;
|
||||||
|
import static me.unurled.raxen.utils.Utils.msgPlayer;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI;
|
||||||
|
import me.filoghost.holographicdisplays.api.hologram.Hologram;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.entity.player.RaxenPlayer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
public class Tutorial {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private double x;
|
||||||
|
@Getter
|
||||||
|
private double y;
|
||||||
|
@Getter
|
||||||
|
private double z;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private int step = 0;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private World world;
|
||||||
|
|
||||||
|
public Tutorial() {
|
||||||
|
this.step = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Tutorial(int step) {
|
||||||
|
this.step = step;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Tutorial(int step, double x, double y, double z, World world) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.z = z;
|
||||||
|
this.step = step;
|
||||||
|
this.world = world;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startTutorial(Player player, Location loc) {
|
||||||
|
x = loc.getX();
|
||||||
|
y = loc.getY();
|
||||||
|
z = loc.getZ();
|
||||||
|
world = loc.getWorld();
|
||||||
|
Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen");
|
||||||
|
RaxenPlayer rxPlayer = main.getManager().getPlayerManager().getRaxenPlayer(player);
|
||||||
|
rxPlayer.setInTutorial(true);
|
||||||
|
step = 1;
|
||||||
|
player.addPotionEffect(PotionEffectType.BLINDNESS.createEffect(100, 10));
|
||||||
|
player.teleport(
|
||||||
|
new Location(world, 15.82, 74.00, 117.21, 899.21F, 0.90f));
|
||||||
|
msgPlayer(player, colorTextComp("<green>Welcome to the tutorial!"));
|
||||||
|
HolographicDisplaysAPI api = main.getManager().getLibsManager().getHolographicDisplay()
|
||||||
|
.getApi();
|
||||||
|
Hologram holo = api.createHologram(new Location(world, 15.5, 76.00, 112.5, 179.21f, 0.90f));
|
||||||
|
holo.getLines().appendText("Welcome to the tutorial!");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stopTutorial() {
|
||||||
|
log("needs to be implemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void nextStep() {
|
||||||
|
log("needs to be implemented");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void previousStep() {
|
||||||
|
log("needs to be implemented");
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,7 +3,12 @@ package me.unurled.raxen.config;
|
||||||
import static me.unurled.raxen.utils.Utils.debug;
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.channels.Channels;
|
||||||
|
import java.nio.channels.FileChannel;
|
||||||
|
import java.nio.channels.ReadableByteChannel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
|
@ -45,5 +50,22 @@ public class Config {
|
||||||
if (!Raxen.getVersion().equals(config.getString("version"))) {
|
if (!Raxen.getVersion().equals(config.getString("version"))) {
|
||||||
main.saveResource("config.yml", true);
|
main.saveResource("config.yml", true);
|
||||||
}
|
}
|
||||||
|
if (new File(main.getDataFolder().toString() + "/schematics/").mkdir()) {
|
||||||
|
String url = "https://pb.unurled.me/file/otter-panda-cobra/template_tuto.schem";
|
||||||
|
ReadableByteChannel readableByteChannel = null;
|
||||||
|
try {
|
||||||
|
readableByteChannel = Channels.newChannel(new URL(url).openStream());
|
||||||
|
FileOutputStream fileOutputStream = new FileOutputStream(
|
||||||
|
main.getDataFolder() + "schematics/template_tuto.schem");
|
||||||
|
FileChannel fileChannel = fileOutputStream.getChannel();
|
||||||
|
fileOutputStream.getChannel()
|
||||||
|
.transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
|
||||||
|
} catch (IOException e) {
|
||||||
|
// throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// main.saveResource("schematics/template_tuto.schem", false);
|
||||||
|
}
|
||||||
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
74
src/main/java/me/unurled/raxen/config/ItemConfig.java
Normal file
74
src/main/java/me/unurled/raxen/config/ItemConfig.java
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
package me.unurled.raxen.config;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.effect.EffectBuilder;
|
||||||
|
import me.unurled.raxen.components.items.ItemBuilder;
|
||||||
|
import me.unurled.raxen.components.items.ItemParser;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
|
public class ItemConfig {
|
||||||
|
|
||||||
|
private File itemsFolder;
|
||||||
|
private Raxen main;
|
||||||
|
|
||||||
|
public ItemConfig(Raxen main) {
|
||||||
|
this.main = main;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean validatesConfig() {
|
||||||
|
itemsFolder = new File(main.getDataFolder(), "items");
|
||||||
|
if (!itemsFolder.exists()) {
|
||||||
|
itemsFolder.mkdirs();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<File, Map<String, ItemBuilder>> parseItemConfigs() {
|
||||||
|
Map<File, Map<String, ItemBuilder>> parseMap = new LinkedHashMap<>();
|
||||||
|
List<File> config = Arrays.stream(getItemsFiles())
|
||||||
|
.filter(file -> file.getName().endsWith(".yml")).toList();
|
||||||
|
for (File file : config) {
|
||||||
|
parseMap.put(file, parseItemConfig(YamlConfiguration.loadConfiguration(file), file));
|
||||||
|
}
|
||||||
|
return parseMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, ItemBuilder> parseItemConfig(YamlConfiguration config, File file) {
|
||||||
|
Map<String, ItemParser> parseMap = new LinkedHashMap<>();
|
||||||
|
for (String itemSelection : config.getKeys(false)) {
|
||||||
|
if (!config.isConfigurationSection(itemSelection)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ConfigurationSection itemSection = config.getConfigurationSection(itemSelection);
|
||||||
|
parseMap.put(itemSelection, new ItemParser(itemSection));
|
||||||
|
}
|
||||||
|
boolean configUpdated = false;
|
||||||
|
Map<String, ItemBuilder> map = new LinkedHashMap<>();
|
||||||
|
for (Map.Entry<String, ItemParser> entry : parseMap.entrySet()) {
|
||||||
|
ItemParser parser = entry.getValue();
|
||||||
|
try {
|
||||||
|
map.put(entry.getKey(), parser.buildItem());
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<File, Map<String, EffectBuilder>> parseEffectConfig() {
|
||||||
|
// TODO: efffects
|
||||||
|
}
|
||||||
|
|
||||||
|
private File[] getItemsFiles() {
|
||||||
|
File[] itemConfigs = Arrays.stream(itemsFolder.listFiles()).filter(File::isFile)
|
||||||
|
.toArray(File[]::new);
|
||||||
|
Arrays.sort(itemConfigs);
|
||||||
|
return itemConfigs;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,8 @@
|
||||||
package me.unurled.raxen.config;
|
package me.unurled.raxen.config;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Items.*;
|
import static me.unurled.raxen.utils.Items.listItemStackDeserialize;
|
||||||
|
import static me.unurled.raxen.utils.Items.mapItemStackDeserialize;
|
||||||
|
import static me.unurled.raxen.utils.Items.setItemsToInventory;
|
||||||
import static me.unurled.raxen.utils.Utils.debug;
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
|
||||||
import com.mongodb.client.MongoCollection;
|
import com.mongodb.client.MongoCollection;
|
||||||
|
@ -16,6 +18,7 @@ import me.unurled.raxen.components.entity.player.PlayerUtils;
|
||||||
import me.unurled.raxen.components.entity.player.Storage;
|
import me.unurled.raxen.components.entity.player.Storage;
|
||||||
import me.unurled.raxen.components.entity.player.attributes.Attributes;
|
import me.unurled.raxen.components.entity.player.attributes.Attributes;
|
||||||
import me.unurled.raxen.components.entity.player.storages.EnderChest;
|
import me.unurled.raxen.components.entity.player.storages.EnderChest;
|
||||||
|
import me.unurled.raxen.components.tutorial.Tutorial;
|
||||||
import me.unurled.raxen.manager.entity.PlayerManager;
|
import me.unurled.raxen.manager.entity.PlayerManager;
|
||||||
import me.unurled.raxen.manager.entity.StorageManager;
|
import me.unurled.raxen.manager.entity.StorageManager;
|
||||||
import me.unurled.raxen.utils.Items;
|
import me.unurled.raxen.utils.Items;
|
||||||
|
@ -60,6 +63,7 @@ public class PlayerConfig {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* save players stuff to mongo db
|
* save players stuff to mongo db
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
* @param attributes
|
* @param attributes
|
||||||
* @param invstr
|
* @param invstr
|
||||||
|
@ -84,7 +88,10 @@ public class PlayerConfig {
|
||||||
doc.append(s, attribute.get(s).get(player));
|
doc.append(s, attribute.get(s).get(player));
|
||||||
}
|
}
|
||||||
if (playerManager.getRaxenPlayer(player).getStorage() != null) {
|
if (playerManager.getRaxenPlayer(player).getStorage() != null) {
|
||||||
if (playerManager.getRaxenPlayer(player).getStorage().getEc() != null) {
|
if (
|
||||||
|
playerManager.getRaxenPlayer(player).getStorage().getEc() !=
|
||||||
|
null
|
||||||
|
) {
|
||||||
debug(main, "Saving " + player.getName() + "'s storage!");
|
debug(main, "Saving " + player.getName() + "'s storage!");
|
||||||
EnderChest ec = playerManager
|
EnderChest ec = playerManager
|
||||||
.getRaxenPlayer(player)
|
.getRaxenPlayer(player)
|
||||||
|
@ -120,6 +127,7 @@ public class PlayerConfig {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* save players stuff to yml
|
* save players stuff to yml
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
* @param attributes
|
* @param attributes
|
||||||
* @param invstr
|
* @param invstr
|
||||||
|
@ -142,7 +150,10 @@ public class PlayerConfig {
|
||||||
}
|
}
|
||||||
config.set("inv", invstr);
|
config.set("inv", invstr);
|
||||||
if (playerManager.getRaxenPlayer(player).getStorage() != null) {
|
if (playerManager.getRaxenPlayer(player).getStorage() != null) {
|
||||||
if (playerManager.getRaxenPlayer(player).getStorage().getEc() != null) {
|
if (
|
||||||
|
playerManager.getRaxenPlayer(player).getStorage().getEc() !=
|
||||||
|
null
|
||||||
|
) {
|
||||||
EnderChest ec = playerManager
|
EnderChest ec = playerManager
|
||||||
.getRaxenPlayer(player)
|
.getRaxenPlayer(player)
|
||||||
.getStorage()
|
.getStorage()
|
||||||
|
@ -175,6 +186,7 @@ public class PlayerConfig {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load player stuff from mongo db
|
* load player stuff from mongo db
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
*/
|
*/
|
||||||
public void loadUsingMongoDB(@NotNull Player player) {
|
public void loadUsingMongoDB(@NotNull Player player) {
|
||||||
|
@ -183,6 +195,8 @@ public class PlayerConfig {
|
||||||
.first();
|
.first();
|
||||||
if (playerDoc == null) {
|
if (playerDoc == null) {
|
||||||
debug(main, "Intiatilising Data for Player: " + player.getName());
|
debug(main, "Intiatilising Data for Player: " + player.getName());
|
||||||
|
Tutorial tutorial = new Tutorial();
|
||||||
|
main.getManager().getTutorialManager().addTutorial(player, tutorial);
|
||||||
playerManager.getRaxenPlayer(player).createNewAttribute();
|
playerManager.getRaxenPlayer(player).createNewAttribute();
|
||||||
playerManager.getRaxenPlayer(player).createStorage();
|
playerManager.getRaxenPlayer(player).createStorage();
|
||||||
playerManager.getRaxenPlayer(player).createInventory();
|
playerManager.getRaxenPlayer(player).createInventory();
|
||||||
|
@ -230,7 +244,9 @@ public class PlayerConfig {
|
||||||
player.getInventory().setContents(inv.getContents());
|
player.getInventory().setContents(inv.getContents());
|
||||||
player.updateInventory();
|
player.updateInventory();
|
||||||
me.unurled.raxen.components.entity.player.storages.Inventory invv =
|
me.unurled.raxen.components.entity.player.storages.Inventory invv =
|
||||||
new me.unurled.raxen.components.entity.player.storages.Inventory(inv);
|
new me.unurled.raxen.components.entity.player.storages.Inventory(
|
||||||
|
inv
|
||||||
|
);
|
||||||
Inventories invvv = new Inventories(invv);
|
Inventories invvv = new Inventories(invv);
|
||||||
playerManager.getRaxenPlayer(player).setInventory(inv);
|
playerManager.getRaxenPlayer(player).setInventory(inv);
|
||||||
PlayerUtils.updateSkills(main, player);
|
PlayerUtils.updateSkills(main, player);
|
||||||
|
@ -238,6 +254,7 @@ public class PlayerConfig {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load player stuff from yml
|
* load player stuff from yml
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
|
@ -287,13 +304,16 @@ public class PlayerConfig {
|
||||||
player.getInventory().setContents(inv.getContents());
|
player.getInventory().setContents(inv.getContents());
|
||||||
player.updateInventory();
|
player.updateInventory();
|
||||||
me.unurled.raxen.components.entity.player.storages.Inventory invv =
|
me.unurled.raxen.components.entity.player.storages.Inventory invv =
|
||||||
new me.unurled.raxen.components.entity.player.storages.Inventory(inv);
|
new me.unurled.raxen.components.entity.player.storages.Inventory(
|
||||||
|
inv
|
||||||
|
);
|
||||||
Inventories invvv = new Inventories(invv);
|
Inventories invvv = new Inventories(invv);
|
||||||
playerManager.getRaxenPlayer(player).setInventory(inv);
|
playerManager.getRaxenPlayer(player).setInventory(inv);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* saves player stuff
|
* saves player stuff
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
*/
|
*/
|
||||||
public void savePlayerConfig(@NotNull Player player) {
|
public void savePlayerConfig(@NotNull Player player) {
|
||||||
|
@ -328,18 +348,27 @@ public class PlayerConfig {
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
saveUsingYml(player, attributes, finalInvstr1, finalReverse1);
|
saveUsingYml(
|
||||||
|
player,
|
||||||
|
attributes,
|
||||||
|
finalInvstr1,
|
||||||
|
finalReverse1
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.runTaskAsynchronously(main);
|
.runTaskAsynchronously(main);
|
||||||
debug(main, "using yml");
|
debug(main, "using yml");
|
||||||
}
|
}
|
||||||
|
|
||||||
debug(main, "Player: " + player.getName() + " data successfully saved!");
|
debug(
|
||||||
|
main,
|
||||||
|
"Player: " + player.getName() + " data successfully saved!"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load player stuff
|
* load player stuff
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
*/
|
*/
|
||||||
public void loadPlayerConfig(Player player) {
|
public void loadPlayerConfig(Player player) {
|
||||||
|
@ -370,7 +399,10 @@ public class PlayerConfig {
|
||||||
}
|
}
|
||||||
debug(
|
debug(
|
||||||
main,
|
main,
|
||||||
"Player: " + player.getName() + " data successfully loaded using " + value
|
"Player: " +
|
||||||
|
player.getName() +
|
||||||
|
" data successfully loaded using " +
|
||||||
|
value
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
99
src/main/java/me/unurled/raxen/config/TutorialConfig.java
Normal file
99
src/main/java/me/unurled/raxen/config/TutorialConfig.java
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
package me.unurled.raxen.config;
|
||||||
|
|
||||||
|
import com.mongodb.client.MongoCollection;
|
||||||
|
import com.mongodb.client.model.Filters;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.UUID;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.tutorial.Tutorial;
|
||||||
|
import me.unurled.raxen.manager.server.TutorialManager;
|
||||||
|
import me.unurled.raxen.utils.libs.MongoDB;
|
||||||
|
import org.bson.Document;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
public class TutorialConfig {
|
||||||
|
|
||||||
|
private static Raxen main;
|
||||||
|
private MongoDB mongoDB;
|
||||||
|
private MongoCollection<Document> mongoCollection;
|
||||||
|
|
||||||
|
public TutorialConfig(Raxen main) {
|
||||||
|
this.main = main;
|
||||||
|
this.mongoDB = main.getManager().getLibsManager().getMongoDB();
|
||||||
|
this.mongoCollection = mongoDB.getMongoConfigs();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveUsingMongoDB() {
|
||||||
|
TutorialManager manager = main.getManager().getTutorialManager();
|
||||||
|
Document doc = new Document();
|
||||||
|
Document loc = new Document();
|
||||||
|
for (Entry<UUID, Location> entry : manager.getLocations().entrySet()) {
|
||||||
|
Document location = new Document();
|
||||||
|
location.append("x", entry.getValue().getX());
|
||||||
|
location.append("y", entry.getValue().getY());
|
||||||
|
location.append("z", entry.getValue().getZ());
|
||||||
|
location.append("world", entry.getValue().getWorld().getName());
|
||||||
|
location.append("uuid", entry.getKey().toString());
|
||||||
|
loc.append("location", location);
|
||||||
|
}
|
||||||
|
doc.append("locations", loc);
|
||||||
|
Document tutorials = new Document();
|
||||||
|
for (Entry<UUID, Tutorial> entry : manager.getTutorials().entrySet()) {
|
||||||
|
Document tutorial = new Document();
|
||||||
|
tutorial.append("uuid", entry.getKey().toString());
|
||||||
|
tutorial.append("tutorial", entry.getValue().getStep());
|
||||||
|
tutorial.append("x", entry.getValue().getX());
|
||||||
|
tutorial.append("y", entry.getValue().getY());
|
||||||
|
tutorial.append("z", entry.getValue().getZ());
|
||||||
|
tutorial.append("world", entry.getValue().getWorld().getName());
|
||||||
|
tutorials.append(entry.getKey().toString(), tutorial);
|
||||||
|
}
|
||||||
|
doc.append("tutorials", tutorials);
|
||||||
|
Document find = mongoCollection.find(Filters.eq("tutorial", "tutorial")).first();
|
||||||
|
if (find == null) {
|
||||||
|
mongoCollection.insertOne(doc);
|
||||||
|
} else {
|
||||||
|
mongoCollection.replaceOne(find, doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadUsingMongoDB() {
|
||||||
|
Document doc = mongoCollection.find(Filters.eq("tutorial", "tutorial")).first();
|
||||||
|
if (doc != null) {
|
||||||
|
TutorialManager manager = main.getManager().getTutorialManager();
|
||||||
|
Document loc = (Document) doc.get("locations");
|
||||||
|
for (Entry<String, Object> entry : loc.entrySet()) {
|
||||||
|
Document location = (Document) entry.getValue();
|
||||||
|
double x = location.getDouble("x");
|
||||||
|
double y = location.getDouble("y");
|
||||||
|
double z = location.getDouble("z");
|
||||||
|
String world = location.getString("world");
|
||||||
|
UUID uuid = UUID.fromString(location.getString("uuid"));
|
||||||
|
manager.getLocations()
|
||||||
|
.put(uuid, new Location(main.getServer().getWorld(world), x, y, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
Document tutorials = (Document) doc.get("tutorials");
|
||||||
|
for (Entry<String, Object> entry : tutorials.entrySet()) {
|
||||||
|
Document tutorial = (Document) entry.getValue();
|
||||||
|
UUID uuid1 = UUID.fromString(tutorial.getString("uuid"));
|
||||||
|
double x = tutorial.getDouble("x");
|
||||||
|
double y = tutorial.getDouble("y");
|
||||||
|
double z = tutorial.getDouble("z");
|
||||||
|
String world = tutorial.getString("world");
|
||||||
|
int step = tutorial.getInteger("tutorial");
|
||||||
|
manager.getTutorials()
|
||||||
|
.put(uuid1, new Tutorial(step, x, y, z, main.getServer().getWorld(world)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveTutorialConfig() {
|
||||||
|
saveUsingMongoDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadTutorialConfig() {
|
||||||
|
loadUsingMongoDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -5,18 +5,24 @@ import static me.unurled.raxen.utils.Utils.debug;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
|
import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
|
||||||
|
import me.unurled.raxen.components.entity.other.MobData;
|
||||||
|
import me.unurled.raxen.components.entity.player.RaxenPlayer;
|
||||||
import me.unurled.raxen.manager.entity.PlayerManager;
|
import me.unurled.raxen.manager.entity.PlayerManager;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
|
import org.bukkit.metadata.Metadatable;
|
||||||
import org.bukkit.persistence.PersistentDataContainer;
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
import org.bukkit.projectiles.ProjectileSource;
|
||||||
|
|
||||||
public class DamageEntity implements Listener {
|
public class DamageEntity implements Listener {
|
||||||
|
|
||||||
|
@ -29,18 +35,127 @@ public class DamageEntity implements Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fired when an entity is damaged by another entity
|
* fired when an entity is damaged by something TODO: calculate damage and apply it to the
|
||||||
* calculates the damage and apply it to the entity
|
* entity
|
||||||
* @param e
|
*
|
||||||
|
* @param e event
|
||||||
*/
|
*/
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
public void entityDamage(EntityDamageEvent e) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
e.setDamage(0);
|
||||||
|
e.getEntity().setFireTicks(0);
|
||||||
|
if (e instanceof EntityDamageByEntityEvent) {
|
||||||
|
EntityDamageByEntityEvent ev2 = (EntityDamageByEntityEvent) e;
|
||||||
|
ev2.setCancelled(true);
|
||||||
|
Entity attacker = ev2.getDamager();
|
||||||
|
Entity defender = ev2.getEntity();
|
||||||
|
if (attacker instanceof Player) {
|
||||||
|
PlayerManager pm = main.getManager().getPlayerManager();
|
||||||
|
if (defender instanceof Player) {
|
||||||
|
// attack between players
|
||||||
|
RaxenPlayer rx = pm.getRaxenPlayer((Player) attacker);
|
||||||
|
RaxenPlayer rx2 = pm.getRaxenPlayer((Player) defender);
|
||||||
|
if (rx != null && rx2 != null) {
|
||||||
|
rx.attackPlayer(rx2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// attack between player and mob
|
||||||
|
RaxenPlayer rx = pm.getRaxenPlayer((Player) attacker);
|
||||||
|
MobData re = main.getManager().getEntityManager().spawnedMob.get(
|
||||||
|
defender.getUniqueId());
|
||||||
|
if (rx != null) {
|
||||||
|
rx.attackMob(re);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (attacker instanceof Projectile) {
|
||||||
|
boolean projectile = true;
|
||||||
|
ProjectileSource source = ((Projectile) attacker).getShooter();
|
||||||
|
double rpgKnockback = -1;
|
||||||
|
int rpgDamage = -1;
|
||||||
|
if (attacker != null) {
|
||||||
|
Metadatable sourceMeta = (Metadatable) attacker;
|
||||||
|
// TODO: check metadata
|
||||||
|
}
|
||||||
|
if (source == defender) {
|
||||||
|
attacker.remove();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (source instanceof Player) {
|
||||||
|
RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(
|
||||||
|
(Player) source);
|
||||||
|
if (defender instanceof Player) {
|
||||||
|
RaxenPlayer rx2 = main.getManager().getPlayerManager().getRaxenPlayer(
|
||||||
|
(Player) defender);
|
||||||
|
// range attack between players
|
||||||
|
if (rpgKnockback >= 0) {
|
||||||
|
rx.attackPlayer(rx2, rpgDamage, projectile, rpgKnockback);
|
||||||
|
} else {
|
||||||
|
rx.attackPlayer(rx2, rpgDamage, projectile);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
MobData mb = main.getManager().getEntityManager().spawnedMob.get(
|
||||||
|
defender.getUniqueId());
|
||||||
|
if (rx != null && mb != null) {
|
||||||
|
if (rpgKnockback >= 0) {
|
||||||
|
rx.attackMob(mb, rpgKnockback, rpgDamage, projectile);
|
||||||
|
} else {
|
||||||
|
rx.attackMob(mb, rpgDamage, projectile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// range attack between player and mob
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (defender instanceof Player) {
|
||||||
|
MobData a = main.getManager().getEntityManager().spawnedMob.get(
|
||||||
|
attacker.getUniqueId());
|
||||||
|
RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer(
|
||||||
|
(Player) defender);
|
||||||
|
if (a != null && d != null) {
|
||||||
|
a.attack(d, rpgDamage, projectile);
|
||||||
|
}
|
||||||
|
// range attack between mob and player
|
||||||
|
} else {
|
||||||
|
// range attack between mobs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
attacker.remove();
|
||||||
|
} else {
|
||||||
|
if (defender instanceof Player) {
|
||||||
|
MobData a = main.getManager().getEntityManager().spawnedMob.get(
|
||||||
|
attacker.getUniqueId());
|
||||||
|
RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer(
|
||||||
|
(Player) defender);
|
||||||
|
if (a != null && d != null) {
|
||||||
|
a.attack(d);
|
||||||
|
}
|
||||||
|
// attack between mob and player
|
||||||
|
} else {
|
||||||
|
// attack between mobs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fired when an entity is damaged by another entity calculates the damage and apply it to the
|
||||||
|
* entity
|
||||||
|
*
|
||||||
|
* @param e
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
// @EventHandler
|
||||||
public void entityDamageByEntity(EntityDamageByEntityEvent e) {
|
public void entityDamageByEntity(EntityDamageByEntityEvent e) {
|
||||||
if (
|
if (
|
||||||
!(e.getEntity() instanceof LivingEntity) ||
|
!(e.getEntity() instanceof LivingEntity) ||
|
||||||
!(e.getDamager() instanceof LivingEntity)
|
!(e.getDamager() instanceof LivingEntity)
|
||||||
) {
|
) {
|
||||||
debug("Not Living Entity, Some block falling shit or block entities");
|
debug(
|
||||||
|
"Not Living Entity, Some block falling shit or block entities"
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
|
e.setCancelled(true);
|
||||||
e.setDamage(0);
|
e.setDamage(0);
|
||||||
Integer damage = 1;
|
Integer damage = 1;
|
||||||
Integer strength = 0;
|
Integer strength = 0;
|
||||||
|
@ -72,10 +187,16 @@ public class DamageEntity implements Listener {
|
||||||
PersistentDataContainer data =
|
PersistentDataContainer data =
|
||||||
entityDamager.getPersistentDataContainer();
|
entityDamager.getPersistentDataContainer();
|
||||||
if (
|
if (
|
||||||
data.has(entityNamespacedKey.strength, PersistentDataType.INTEGER)
|
data.has(
|
||||||
|
entityNamespacedKey.strength,
|
||||||
|
PersistentDataType.INTEGER
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
strength =
|
strength =
|
||||||
data.get(entityNamespacedKey.strength, PersistentDataType.INTEGER);
|
data.get(
|
||||||
|
entityNamespacedKey.strength,
|
||||||
|
PersistentDataType.INTEGER
|
||||||
|
);
|
||||||
}
|
}
|
||||||
itemStrength =
|
itemStrength =
|
||||||
pm.getItemStrength().getItem((LivingEntity) entityDamager);
|
pm.getItemStrength().getItem((LivingEntity) entityDamager);
|
||||||
|
@ -93,16 +214,34 @@ public class DamageEntity implements Listener {
|
||||||
Entity entityVictim = e.getEntity();
|
Entity entityVictim = e.getEntity();
|
||||||
PersistentDataContainer data =
|
PersistentDataContainer data =
|
||||||
entityVictim.getPersistentDataContainer();
|
entityVictim.getPersistentDataContainer();
|
||||||
if (data.has(entityNamespacedKey.defense, PersistentDataType.INTEGER)) {
|
if (
|
||||||
|
data.has(
|
||||||
|
entityNamespacedKey.defense,
|
||||||
|
PersistentDataType.INTEGER
|
||||||
|
)
|
||||||
|
) {
|
||||||
defense =
|
defense =
|
||||||
data.get(entityNamespacedKey.defense, PersistentDataType.INTEGER);
|
data.get(
|
||||||
|
entityNamespacedKey.defense,
|
||||||
|
PersistentDataType.INTEGER
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (data.has(entityNamespacedKey.health, PersistentDataType.INTEGER)) {
|
if (
|
||||||
|
data.has(
|
||||||
|
entityNamespacedKey.health,
|
||||||
|
PersistentDataType.INTEGER
|
||||||
|
)
|
||||||
|
) {
|
||||||
health =
|
health =
|
||||||
data.get(entityNamespacedKey.health, PersistentDataType.INTEGER);
|
data.get(
|
||||||
|
entityNamespacedKey.health,
|
||||||
|
PersistentDataType.INTEGER
|
||||||
|
);
|
||||||
}
|
}
|
||||||
itemDefense = pm.getItemDefense().getItem((LivingEntity) entityVictim);
|
itemDefense =
|
||||||
itemHealth = pm.getItemHealth().getItem((LivingEntity) entityVictim);
|
pm.getItemDefense().getItem((LivingEntity) entityVictim);
|
||||||
|
itemHealth =
|
||||||
|
pm.getItemHealth().getItem((LivingEntity) entityVictim);
|
||||||
}
|
}
|
||||||
debug(
|
debug(
|
||||||
main,
|
main,
|
||||||
|
@ -159,9 +298,11 @@ public class DamageEntity implements Listener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* damage made by blocks on entity
|
* damage made by blocks on entity
|
||||||
|
*
|
||||||
* @param e
|
* @param e
|
||||||
*/
|
*/
|
||||||
@EventHandler
|
@Deprecated
|
||||||
|
// @EventHandler
|
||||||
public void entityDamageByBlock(EntityDamageByBlockEvent e) {
|
public void entityDamageByBlock(EntityDamageByBlockEvent e) {
|
||||||
e.setDamage(0);
|
e.setDamage(0);
|
||||||
if (e.getEntity() instanceof Player) {
|
if (e.getEntity() instanceof Player) {
|
||||||
|
|
|
@ -37,7 +37,8 @@ public class SpawnEvent implements Listener {
|
||||||
debug(main, "Player: " + ((Player) e.getEntity()).getName());
|
debug(main, "Player: " + ((Player) e.getEntity()).getName());
|
||||||
} else if (
|
} else if (
|
||||||
e.getEntity().getType() != EntityType.DROPPED_ITEM &&
|
e.getEntity().getType() != EntityType.DROPPED_ITEM &&
|
||||||
e.getEntity().getType() != EntityType.FALLING_BLOCK
|
e.getEntity().getType() != EntityType.FALLING_BLOCK &&
|
||||||
|
e.getEntity().getType() != EntityType.ARROW
|
||||||
) {
|
) {
|
||||||
debug(main, e.getEntity().getName());
|
debug(main, e.getEntity().getName());
|
||||||
if (
|
if (
|
||||||
|
|
|
@ -34,7 +34,9 @@ public class ArmorEvent implements Listener {
|
||||||
.getPlayerManager();
|
.getPlayerManager();
|
||||||
Entity entity = player;
|
Entity entity = player;
|
||||||
Attributes attributes = new Attributes(main);
|
Attributes attributes = new Attributes(main);
|
||||||
if (e.getOldItem() != null && e.getOldItem().getType() != Material.AIR) {
|
if (
|
||||||
|
e.getOldItem() != null && e.getOldItem().getType() != Material.AIR
|
||||||
|
) {
|
||||||
ItemStack oldItem = e.getOldItem();
|
ItemStack oldItem = e.getOldItem();
|
||||||
NBTItem nbti = new NBTItem(oldItem);
|
NBTItem nbti = new NBTItem(oldItem);
|
||||||
if (nbti.hasTag("SPEED")) {
|
if (nbti.hasTag("SPEED")) {
|
||||||
|
@ -50,7 +52,9 @@ public class ArmorEvent implements Listener {
|
||||||
pm.getStrength().remove(entity, nbti.getInteger("STRENGTH"));
|
pm.getStrength().remove(entity, nbti.getInteger("STRENGTH"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (e.getNewItem() != null && e.getNewItem().getType() != Material.AIR) {
|
if (
|
||||||
|
e.getNewItem() != null && e.getNewItem().getType() != Material.AIR
|
||||||
|
) {
|
||||||
ItemStack newItem = e.getNewItem();
|
ItemStack newItem = e.getNewItem();
|
||||||
NBTItem nbti = new NBTItem(newItem);
|
NBTItem nbti = new NBTItem(newItem);
|
||||||
if (nbti.hasTag("SPEED")) {
|
if (nbti.hasTag("SPEED")) {
|
||||||
|
|
|
@ -25,7 +25,9 @@ public class CloseInventoryEvent implements Listener {
|
||||||
Component title = e.getView().title();
|
Component title = e.getView().title();
|
||||||
if (title.toString().contains("Ender Chest")) {
|
if (title.toString().contains("Ender Chest")) {
|
||||||
playerManager =
|
playerManager =
|
||||||
((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager()
|
(
|
||||||
|
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen")
|
||||||
|
).getManager()
|
||||||
.getPlayerManager();
|
.getPlayerManager();
|
||||||
playerManager.getRaxenPlayer(player).setStorage(e.getInventory());
|
playerManager.getRaxenPlayer(player).setStorage(e.getInventory());
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package me.unurled.raxen.listener.player;
|
||||||
|
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||||
|
|
||||||
|
public class FoodLevelEvent implements Listener {
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void FoodLevelChange(FoodLevelChangeEvent e) {
|
||||||
|
e.setFoodLevel(20);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,9 @@
|
||||||
package me.unurled.raxen.listener.player;
|
package me.unurled.raxen.listener.player;
|
||||||
|
|
||||||
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
import static me.unurled.raxen.utils.Utils.log;
|
||||||
|
|
||||||
|
import de.tr7zw.nbtapi.NBT;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
@ -11,9 +15,15 @@ public class InteractEvent implements Listener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void PlayerInteractEvent(PlayerInteractEvent e) {
|
public void PlayerInteractEvent(PlayerInteractEvent e) {
|
||||||
// Player p = e.getPlayer();
|
Player p = e.getPlayer();
|
||||||
// if (e.hasItem()) {
|
if (e.hasItem()) {
|
||||||
// ItemStack i = e.getItem();
|
ItemStack i = e.getItem();
|
||||||
// }
|
if (i != null && i.getType() != Material.AIR) {
|
||||||
|
String id = NBT.get(i, nbt -> nbt.getString("ID"));
|
||||||
|
if (id != null && !id.isEmpty()) {
|
||||||
|
if (id.equals("PHONE")) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,18 +47,29 @@ public class ItemHandEvent implements Listener {
|
||||||
java.lang.reflect.Method method = null;
|
java.lang.reflect.Method method = null;
|
||||||
try {
|
try {
|
||||||
method = pm.getClass().getMethod("getItem" + s);
|
method = pm.getClass().getMethod("getItem" + s);
|
||||||
} catch (SecurityException | NoSuchMethodException exception) {}
|
} catch (
|
||||||
|
SecurityException | NoSuchMethodException exception
|
||||||
|
) {}
|
||||||
if (method != null) {
|
if (method != null) {
|
||||||
me.unurled.raxen.components.entity.Attributes.Attribute attribute =
|
me.unurled.raxen.components.entity.Attributes.Attribute attribute =
|
||||||
null;
|
null;
|
||||||
try {
|
try {
|
||||||
attribute = (Attribute) method.invoke(pm, (Object) null);
|
attribute = (Attribute) method.invoke(pm);
|
||||||
} catch (
|
} catch (
|
||||||
InvocationTargetException | IllegalAccessException ignored
|
InvocationTargetException
|
||||||
|
| IllegalAccessException ignored
|
||||||
) {}
|
) {}
|
||||||
if (attribute != null) {
|
if (attribute != null) {
|
||||||
attribute.remove(player, nbti.getInteger(s.toUpperCase()));
|
attribute.remove(
|
||||||
debug("removed " + s + " for player " + player.getName());
|
player,
|
||||||
|
nbti.getInteger(s.toUpperCase())
|
||||||
|
);
|
||||||
|
debug(
|
||||||
|
"removed " +
|
||||||
|
s +
|
||||||
|
" for player " +
|
||||||
|
player.getName()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,18 +94,26 @@ public class ItemHandEvent implements Listener {
|
||||||
java.lang.reflect.Method method = null;
|
java.lang.reflect.Method method = null;
|
||||||
try {
|
try {
|
||||||
method = pm.getClass().getMethod("getItem" + s);
|
method = pm.getClass().getMethod("getItem" + s);
|
||||||
} catch (SecurityException | NoSuchMethodException exception) {}
|
} catch (
|
||||||
|
SecurityException | NoSuchMethodException exception
|
||||||
|
) {}
|
||||||
if (method != null) {
|
if (method != null) {
|
||||||
me.unurled.raxen.components.entity.Attributes.Attribute attribute =
|
me.unurled.raxen.components.entity.Attributes.Attribute attribute =
|
||||||
null;
|
null;
|
||||||
try {
|
try {
|
||||||
attribute = (Attribute) method.invoke(pm, (Object) null);
|
attribute = (Attribute) method.invoke(pm);
|
||||||
} catch (
|
} catch (
|
||||||
InvocationTargetException | IllegalAccessException ignored
|
InvocationTargetException
|
||||||
|
| IllegalAccessException ignored
|
||||||
) {}
|
) {}
|
||||||
if (attribute != null) {
|
if (attribute != null) {
|
||||||
attribute.add(player, nbti.getInteger(s.toUpperCase()));
|
attribute.add(
|
||||||
debug("add " + s + " for player " + player.getName());
|
player,
|
||||||
|
nbti.getInteger(s.toUpperCase())
|
||||||
|
);
|
||||||
|
debug(
|
||||||
|
"add " + s + " for player " + player.getName()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
public class JoinEvent implements Listener {
|
public class JoinEvent implements Listener {
|
||||||
|
|
||||||
|
@ -30,6 +31,7 @@ public class JoinEvent implements Listener {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* when player joins, load from config all stats
|
* when player joins, load from config all stats
|
||||||
|
*
|
||||||
* @param e
|
* @param e
|
||||||
*/
|
*/
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -40,6 +42,13 @@ public class JoinEvent implements Listener {
|
||||||
resourcePack.join(player);
|
resourcePack.join(player);
|
||||||
playerManager.getRaxenPlayer(player).isRaxenPlayer(true);
|
playerManager.getRaxenPlayer(player).isRaxenPlayer(true);
|
||||||
playerManager.registerActionBar(player);
|
playerManager.registerActionBar(player);
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
main.getManager().getTutorialManager().startTutorial(player);
|
||||||
|
|
||||||
|
}
|
||||||
|
}.runTaskLater(main, 40L);
|
||||||
PlayerUtils.updateSkills(main, player);
|
PlayerUtils.updateSkills(main, player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
package me.unurled.raxen.listener.player;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.player.PlayerAnimationEvent;
|
||||||
|
import org.bukkit.event.player.PlayerAnimationType;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
|
public class SpellsEvent implements Listener {
|
||||||
|
|
||||||
|
Raxen main;
|
||||||
|
|
||||||
|
public SpellsEvent(Raxen main) {
|
||||||
|
this.main = main;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onSpellClickOnEntity(PlayerInteractEntityEvent event) {
|
||||||
|
Player p = event.getPlayer();
|
||||||
|
main.getManager().getSpellManager().click(p, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void event(PlayerAnimationEvent event) {
|
||||||
|
Block focused = event.getPlayer().getTargetBlock((Set<Material>) null, 5);
|
||||||
|
if (event.getAnimationType() == PlayerAnimationType.ARM_SWING
|
||||||
|
&& focused.getType() != Material.AIR
|
||||||
|
&& event.getPlayer().getGameMode() == GameMode.ADVENTURE) {
|
||||||
|
main.getManager().getSpellManager().click(event.getPlayer(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onSpellClicks(PlayerInteractEvent event) {
|
||||||
|
Player p = event.getPlayer();
|
||||||
|
if (event.getAction() == Action.LEFT_CLICK_AIR
|
||||||
|
|| event.getAction() == Action.LEFT_CLICK_BLOCK) {
|
||||||
|
main.getManager().getSpellManager().click(p, true);
|
||||||
|
} else if (event.getAction() == Action.RIGHT_CLICK_AIR
|
||||||
|
|| event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||||
|
main.getManager().getSpellManager().click(p, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,13 +2,25 @@ package me.unurled.raxen.manager;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.manager.entity.*;
|
import me.unurled.raxen.manager.entity.EntityManager;
|
||||||
import me.unurled.raxen.manager.server.*;
|
import me.unurled.raxen.manager.entity.ItemManager;
|
||||||
|
import me.unurled.raxen.manager.entity.LootManager;
|
||||||
|
import me.unurled.raxen.manager.entity.PartyManager;
|
||||||
|
import me.unurled.raxen.manager.entity.PlayerManager;
|
||||||
|
import me.unurled.raxen.manager.entity.SpellManager;
|
||||||
|
import me.unurled.raxen.manager.entity.StorageManager;
|
||||||
|
import me.unurled.raxen.manager.server.CommandManager;
|
||||||
|
import me.unurled.raxen.manager.server.DungeonsManager;
|
||||||
|
import me.unurled.raxen.manager.server.LibsManager;
|
||||||
|
import me.unurled.raxen.manager.server.ListenerManager;
|
||||||
|
import me.unurled.raxen.manager.server.ResourcePackManager;
|
||||||
|
import me.unurled.raxen.manager.server.TutorialManager;
|
||||||
|
import me.unurled.raxen.manager.server.WorldManager;
|
||||||
import me.unurled.raxen.utils.libs.Multiverse;
|
import me.unurled.raxen.utils.libs.Multiverse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manager class, it enables all features of the plugin.
|
* Manager class, it enables all features of the plugin. From commands, to Item and worlds, it links
|
||||||
* From commands, to Item and worlds, it links all of them together.
|
* all of them together.
|
||||||
*/
|
*/
|
||||||
public class Manager {
|
public class Manager {
|
||||||
|
|
||||||
|
@ -48,8 +60,18 @@ public class Manager {
|
||||||
@Getter
|
@Getter
|
||||||
private Multiverse multiverse;
|
private Multiverse multiverse;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private TutorialManager tutorialManager;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private PartyManager partyManager;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private SpellManager spellManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an instance of all managers.
|
* Create an instance of all managers.
|
||||||
|
*
|
||||||
* @param main Raxen
|
* @param main Raxen
|
||||||
*/
|
*/
|
||||||
public void set(Raxen main) {
|
public void set(Raxen main) {
|
||||||
|
@ -67,5 +89,8 @@ public class Manager {
|
||||||
entityManager = new EntityManager(main);
|
entityManager = new EntityManager(main);
|
||||||
lootManager = new LootManager(main);
|
lootManager = new LootManager(main);
|
||||||
dungeonsManager = new DungeonsManager(main);
|
dungeonsManager = new DungeonsManager(main);
|
||||||
|
tutorialManager = new TutorialManager();
|
||||||
|
partyManager = new PartyManager(main);
|
||||||
|
spellManager = new SpellManager(main);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,12 +3,32 @@ package me.unurled.raxen.manager.entity;
|
||||||
import static me.unurled.raxen.utils.Utils.debug;
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Defense;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Health;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemDefense;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemHealth;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemLuck;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemMana;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemSpeed;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemStrength;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Luck;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Mana;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.MaxHealth;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.MaxMana;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.MaxManaBuilder;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Speed;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Strength;
|
||||||
|
import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
|
||||||
|
import me.unurled.raxen.components.entity.other.MobData;
|
||||||
|
import me.unurled.raxen.components.entity.other.MobType;
|
||||||
|
import me.unurled.raxen.components.entity.other.RaxenEntity;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
@ -23,19 +43,58 @@ public class EntityManager {
|
||||||
@Setter
|
@Setter
|
||||||
public List<EntityType> list = new ArrayList<>();
|
public List<EntityType> list = new ArrayList<>();
|
||||||
|
|
||||||
public HashMap<String, me.unurled.raxen.components.entity.other.custom.Entity> entities =
|
public HashMap<String, MobType> mobTypes;
|
||||||
|
public HashMap<UUID, MobData> spawnedMob;
|
||||||
|
public HashMap<UUID, MobData> spawnedMobsOnlyMain;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private final HashMap<String, me.unurled.raxen.components.entity.Attributes.Attribute> attribute =
|
||||||
|
new HashMap<>();
|
||||||
|
|
||||||
|
public HashMap<String, me.unurled.raxen.components.entity.other.RaxenEntity> entities =
|
||||||
new HashMap<>();
|
new HashMap<>();
|
||||||
|
|
||||||
public HashMap<UUID, Entity> livingEntities = new HashMap<>();
|
public HashMap<UUID, Entity> livingEntities = new HashMap<>();
|
||||||
|
|
||||||
|
// Attributes
|
||||||
|
private Defense defense;
|
||||||
|
private Health health;
|
||||||
|
private ItemDefense itemDefense;
|
||||||
|
private ItemHealth itemHealth;
|
||||||
|
private ItemLuck itemLuck;
|
||||||
|
private ItemMana itemMana;
|
||||||
|
private ItemSpeed itemSpeed;
|
||||||
|
private ItemStrength itemStrength;
|
||||||
|
private Luck luck;
|
||||||
|
private Mana mana;
|
||||||
|
private MaxHealth maxHealth;
|
||||||
|
private MaxMana maxMana;
|
||||||
|
private Speed speed;
|
||||||
|
private Strength strength;
|
||||||
|
|
||||||
public EntityManager(Raxen main) {
|
public EntityManager(Raxen main) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
|
mobTypes = new HashMap<>();
|
||||||
|
spawnedMob = new HashMap<>();
|
||||||
|
spawnedMobsOnlyMain = new HashMap<>();
|
||||||
|
reload();
|
||||||
|
registerAttributes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerLivingEntities(World world) {}
|
public static void reload() {
|
||||||
|
Collection<MobData> collection = new ArrayList<>();
|
||||||
|
collection.addAll(spawnedMob.values());
|
||||||
|
for (MobData mobData : collection) {
|
||||||
|
mobData.entity.die(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerLivingEntities(World world) {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* used to register entities using fileconfigs but rapidly abandoned
|
* used to register entities using fileconfigs but rapidly abandoned
|
||||||
|
*
|
||||||
* @param file
|
* @param file
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -44,4 +103,121 @@ public class EntityManager {
|
||||||
World world = Bukkit.getWorld(file.getString("world"));
|
World world = Bukkit.getWorld(file.getString("world"));
|
||||||
String name = file.getString("name");
|
String name = file.getString("name");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RaxenEntity getEntity(UUID uuid) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RaxenEntity getEntity(Entity entity) {
|
||||||
|
entities.get(entity.getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* register all Attributes in me.unurled.raxen.components.entity.Attributes;
|
||||||
|
*/
|
||||||
|
public void registerAttributes() {
|
||||||
|
EntityNamespacedKey key = new EntityNamespacedKey(main);
|
||||||
|
|
||||||
|
this.defense = new Defense(key.defense, "DEFENSE");
|
||||||
|
attribute.put("DEFENSE", defense);
|
||||||
|
|
||||||
|
this.health = new Health(key.health, "HEALTH");
|
||||||
|
attribute.put("HEALTH", health);
|
||||||
|
|
||||||
|
this.itemDefense = new ItemDefense(key.itemDefense, "ITEM_DEFENSE");
|
||||||
|
attribute.put("ITEM_DEFENSE", itemDefense);
|
||||||
|
|
||||||
|
this.itemHealth = new ItemHealth(key.itemHealth, "ITEM_HEALTH");
|
||||||
|
attribute.put("ITEM_HEALTH", itemHealth);
|
||||||
|
|
||||||
|
this.itemLuck = new ItemLuck(key.itemLuck, "ITEM_LUCK");
|
||||||
|
attribute.put("ITEM_LUCK", itemLuck);
|
||||||
|
|
||||||
|
this.itemMana = new ItemMana(key.itemMana, "ITEM_MANA");
|
||||||
|
attribute.put("ITEM_MANA", itemMana);
|
||||||
|
|
||||||
|
this.itemSpeed = new ItemSpeed(key.itemSpeed, "ITEM_SPEED");
|
||||||
|
attribute.put("ITEM_SPEED", itemSpeed);
|
||||||
|
|
||||||
|
this.itemStrength = new ItemStrength(key.itemStrength, "ITEM_STRENGTH");
|
||||||
|
attribute.put("ITEM_STRENGTH", itemStrength);
|
||||||
|
|
||||||
|
this.luck = new Luck(key.luck, "LUCK");
|
||||||
|
attribute.put("LUCK", luck);
|
||||||
|
|
||||||
|
this.mana = new Mana(key.mana, "MANA");
|
||||||
|
attribute.put("MANA", mana);
|
||||||
|
|
||||||
|
this.maxMana =
|
||||||
|
new MaxManaBuilder()
|
||||||
|
.setNamespacekey(key.maxMana)
|
||||||
|
.setName("MAX_MANA")
|
||||||
|
.createMaxMana();
|
||||||
|
attribute.put("MAX_MANA", maxMana);
|
||||||
|
|
||||||
|
this.maxHealth = new MaxHealth(key.maxHealth, "MAX_HEALTH");
|
||||||
|
attribute.put("MAX_HEALTH", maxHealth);
|
||||||
|
|
||||||
|
this.speed = new Speed(key.speed, "SPEED");
|
||||||
|
attribute.put("SPEED", speed);
|
||||||
|
|
||||||
|
this.strength = new Strength(key.strength, "STRENGTH");
|
||||||
|
attribute.put("STRENGTH", strength);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Defense getDefense() {
|
||||||
|
return (Defense) attribute.get("DEFENSE");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Health getHealth() {
|
||||||
|
return (Health) attribute.get("HEALTH");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemDefense getItemDefense() {
|
||||||
|
return (ItemDefense) attribute.get("ITEM_DEFENSE");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemHealth getItemHealth() {
|
||||||
|
return (ItemHealth) attribute.get("ITEM_HEALTH");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemLuck getItemLuck() {
|
||||||
|
return (ItemLuck) attribute.get("ITEM_LUCK");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemMana getItemMana() {
|
||||||
|
return (ItemMana) attribute.get("ITEM_MANA");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemSpeed getItemSpeed() {
|
||||||
|
return (ItemSpeed) attribute.get("ITEM_SPEED");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStrength getItemStrength() {
|
||||||
|
return (ItemStrength) attribute.get("ITEM_STRENGTH");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Luck getLuck() {
|
||||||
|
return (Luck) attribute.get("LUCK");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mana getMana() {
|
||||||
|
return (Mana) attribute.get("MANA");
|
||||||
|
}
|
||||||
|
|
||||||
|
public MaxMana getMaxMana() {
|
||||||
|
return (MaxMana) attribute.get("MAX_MANA");
|
||||||
|
}
|
||||||
|
|
||||||
|
public MaxHealth getMaxHealth() {
|
||||||
|
return (MaxHealth) attribute.get("MAX_HEALTH");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Speed getSpeed() {
|
||||||
|
return (Speed) attribute.get("SPEED");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Strength getStrength() {
|
||||||
|
return (Strength) attribute.get("STRENGTH");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package me.unurled.raxen.manager.entity;
|
package me.unurled.raxen.manager.entity;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Utils.*;
|
import static me.unurled.raxen.utils.Utils.colorTextComp;
|
||||||
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
import static me.unurled.raxen.utils.Utils.error;
|
||||||
|
|
||||||
import de.tr7zw.nbtapi.NBTItem;
|
import de.tr7zw.nbtapi.NBTItem;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -8,13 +10,14 @@ import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.items.NBT;
|
import me.unurled.raxen.components.items.ItemBuilder;
|
||||||
|
import me.unurled.raxen.components.items.NBTNames;
|
||||||
import me.unurled.raxen.components.items.custom.Item;
|
import me.unurled.raxen.components.items.custom.Item;
|
||||||
import me.unurled.raxen.utils.Utils;
|
import me.unurled.raxen.config.ItemConfig;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
@ -33,7 +36,10 @@ public class ItemManager {
|
||||||
@Getter
|
@Getter
|
||||||
private HashMap<String, ItemStack> list = new HashMap<>();
|
private HashMap<String, ItemStack> list = new HashMap<>();
|
||||||
|
|
||||||
private NBT nbt = new NBT();
|
private NBTNames nbt = new NBTNames();
|
||||||
|
private ItemConfig itemConfig;
|
||||||
|
private String[] items;
|
||||||
|
private Map<File, Map<String, ItemBuilder>> map;
|
||||||
|
|
||||||
public ItemManager(Raxen main) {
|
public ItemManager(Raxen main) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
|
@ -45,6 +51,13 @@ public class ItemManager {
|
||||||
* register manually all item in Raxen
|
* register manually all item in Raxen
|
||||||
*/
|
*/
|
||||||
private void registerItem() {
|
private void registerItem() {
|
||||||
|
itemConfig = new ItemConfig(main);
|
||||||
|
map = itemConfig.parseItemConfigs();
|
||||||
|
final List<String> itemsList = new ArrayList<>();
|
||||||
|
for (final Map<String, ItemBuilder> subMap : map.values()) {
|
||||||
|
itemsList.addAll(subMap.keySet());
|
||||||
|
}
|
||||||
|
items = itemsList.toArray(new String[0]);
|
||||||
me.unurled.raxen.components.items.custom.List lisst =
|
me.unurled.raxen.components.items.custom.List lisst =
|
||||||
new me.unurled.raxen.components.items.custom.List(main);
|
new me.unurled.raxen.components.items.custom.List(main);
|
||||||
for (Item items : lisst.getItems()) {
|
for (Item items : lisst.getItems()) {
|
||||||
|
@ -75,13 +88,17 @@ public class ItemManager {
|
||||||
FileConfiguration customItem = new YamlConfiguration();
|
FileConfiguration customItem = new YamlConfiguration();
|
||||||
try {
|
try {
|
||||||
customItem.load(listFile[i].listFiles()[a]);
|
customItem.load(listFile[i].listFiles()[a]);
|
||||||
} catch (IOException | InvalidConfigurationException e) {
|
} catch (
|
||||||
|
IOException | InvalidConfigurationException e
|
||||||
|
) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
registerItem(customItem);
|
registerItem(customItem);
|
||||||
} else if (listFile[i].listFiles()[a].isDirectory()) {
|
} else if (listFile[i].listFiles()[a].isDirectory()) {
|
||||||
error(
|
error(
|
||||||
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
|
(Raxen) Bukkit
|
||||||
|
.getPluginManager()
|
||||||
|
.getPlugin("Raxen"),
|
||||||
"Can't use more than 2 folder to get Items.yml"
|
"Can't use more than 2 folder to get Items.yml"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -92,6 +109,7 @@ public class ItemManager {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Old system to register for a file config an item inside.
|
* Old system to register for a file config an item inside.
|
||||||
|
*
|
||||||
* @param file
|
* @param file
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -99,7 +117,9 @@ public class ItemManager {
|
||||||
debug(main, file.getString("id"));
|
debug(main, file.getString("id"));
|
||||||
ItemStack it = new ItemStack(
|
ItemStack it = new ItemStack(
|
||||||
Objects.requireNonNull(
|
Objects.requireNonNull(
|
||||||
Material.getMaterial((String) Objects.requireNonNull(file.get("id")))
|
Material.getMaterial(
|
||||||
|
(String) Objects.requireNonNull(file.get("id"))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
ItemMeta itm = it.getItemMeta();
|
ItemMeta itm = it.getItemMeta();
|
||||||
|
@ -108,7 +128,9 @@ public class ItemManager {
|
||||||
if (lore_obj instanceof List<?> lore) {
|
if (lore_obj instanceof List<?> lore) {
|
||||||
List<Component> lores = new ArrayList<>();
|
List<Component> lores = new ArrayList<>();
|
||||||
for (Object s : lore) {
|
for (Object s : lore) {
|
||||||
if (s == null) continue;
|
if (s == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (s instanceof String) {
|
if (s instanceof String) {
|
||||||
TextComponent textComponent = colorTextComp((String) s);
|
TextComponent textComponent = colorTextComp((String) s);
|
||||||
lores.add(textComponent);
|
lores.add(textComponent);
|
||||||
|
@ -123,21 +145,24 @@ public class ItemManager {
|
||||||
);
|
);
|
||||||
it.setItemMeta(itm);
|
it.setItemMeta(itm);
|
||||||
NBTItem nbti = new NBTItem(it);
|
NBTItem nbti = new NBTItem(it);
|
||||||
nbti.setInteger(NBT.SPEED, file.getInt("speed"));
|
nbti.setInteger(NBTNames.SPEED, file.getInt("speed"));
|
||||||
nbti.setInteger(NBT.HEALTH, file.getInt("health"));
|
nbti.setInteger(NBTNames.HEALTH, file.getInt("health"));
|
||||||
nbti.setInteger(NBT.DEFENSE, file.getInt("defense"));
|
nbti.setInteger(NBTNames.DEFENSE, file.getInt("defense"));
|
||||||
nbti.setInteger(NBT.STRENGTH, file.getInt("strength"));
|
nbti.setInteger(NBTNames.STRENGTH, file.getInt("strength"));
|
||||||
nbti.setString(NBT.ID, file.getString("customId"));
|
nbti.setString(NBTNames.ID, file.getString("customId"));
|
||||||
nbti.setString(NBT.CUSTOM_ABILITY, file.getString("custom_ability"));
|
nbti.setString(
|
||||||
nbti.setDouble(NBT.DROP_RATE, file.getDouble("drop_rate"));
|
NBTNames.CUSTOM_ABILITY,
|
||||||
|
file.getString("custom_ability")
|
||||||
|
);
|
||||||
|
nbti.setDouble(NBTNames.DROP_RATE, file.getDouble("drop_rate"));
|
||||||
it = nbti.getItem();
|
it = nbti.getItem();
|
||||||
//it = setLoreFromNBT(it); deprecated
|
//it = setLoreFromNBT(it); deprecated
|
||||||
list.put(file.getString("customId"), it);
|
list.put(file.getString("customId"), it);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* register Item into the custom item list
|
* register Item into the custom item list Need that the Itm is already set with custom nbt!
|
||||||
* Need that the Itm is already set with custom nbt!
|
*
|
||||||
* @param itm an ItemStack with already set custom nbt using NBTapi
|
* @param itm an ItemStack with already set custom nbt using NBTapi
|
||||||
*/
|
*/
|
||||||
public void registerItem(ItemStack itm) {
|
public void registerItem(ItemStack itm) {
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
package me.unurled.raxen.manager.entity;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import lombok.Getter;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.entity.player.RaxenPlayer;
|
||||||
|
import me.unurled.raxen.components.party.Party;
|
||||||
|
import me.unurled.raxen.utils.Utils;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
public class PartyManager {
|
||||||
|
|
||||||
|
Raxen main;
|
||||||
|
|
||||||
|
public static final int MAX_SIZE = 10;
|
||||||
|
|
||||||
|
public static final Component PREFIX = Utils.colorComp("<reset><gray>[Party] </gray><yellow>");
|
||||||
|
public static final Component PREFIX_SYSTEM = Utils.colorComp(
|
||||||
|
"<reset><gray>[Party] </gray><dark_aqua>");
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private ArrayList<Party> parties;
|
||||||
|
|
||||||
|
public PartyManager(Raxen main) {
|
||||||
|
this.main = main;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initialize() {
|
||||||
|
parties = new ArrayList<Party>();
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (int k = 0; k < parties.size(); k++) {
|
||||||
|
Party p = parties.get(k);
|
||||||
|
if (p.getPlayers().size() == 0) {
|
||||||
|
parties.remove(k);
|
||||||
|
if (p != null) {
|
||||||
|
p.destroy();
|
||||||
|
}
|
||||||
|
k--;
|
||||||
|
if (k < 0) {
|
||||||
|
k = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskTimerAsynchronously(main, 0L, 20L * 30L);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createParty(Player p, RaxenPlayer rx) {
|
||||||
|
if (rx.getParty() != null) {
|
||||||
|
p.sendMessage(PREFIX_SYSTEM.append(Utils.colorComp(
|
||||||
|
"<reset><dark_aqua>You are already in a party!\nLeave your current party to create a new one.")));
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
Party party = new Party(main, p);
|
||||||
|
rx.setParty(party);
|
||||||
|
parties.add(party);
|
||||||
|
p.sendMessage(PREFIX_SYSTEM.append(Utils.colorComp(
|
||||||
|
"<reset><dark_aqua>You have created a party!")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,18 +1,34 @@
|
||||||
package me.unurled.raxen.manager.entity;
|
package me.unurled.raxen.manager.entity;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Utils.*;
|
import static me.unurled.raxen.components.entity.player.PlayerUtils.actionBarPlayer;
|
||||||
|
import static me.unurled.raxen.utils.Utils.colorTextComp;
|
||||||
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.entity.Attributes.*;
|
import me.unurled.raxen.components.entity.Attributes.Defense;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Health;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemDefense;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemHealth;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemLuck;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemMana;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemSpeed;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.ItemStrength;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Luck;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Mana;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.MaxHealth;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.MaxMana;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.MaxManaBuilder;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Speed;
|
||||||
|
import me.unurled.raxen.components.entity.Attributes.Strength;
|
||||||
import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
|
import me.unurled.raxen.components.entity.other.EntityNamespacedKey;
|
||||||
import me.unurled.raxen.components.entity.player.RaxenPlayer;
|
import me.unurled.raxen.components.entity.player.RaxenPlayer;
|
||||||
import me.unurled.raxen.components.entity.player.classes.Class;
|
import me.unurled.raxen.components.entity.player.classes.Class;
|
||||||
import me.unurled.raxen.components.entity.player.classes.Classes;
|
import me.unurled.raxen.components.entity.player.classes.Classes;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
public class PlayerManager {
|
public class PlayerManager {
|
||||||
|
@ -26,6 +42,8 @@ public class PlayerManager {
|
||||||
private final HashMap<String, me.unurled.raxen.components.entity.Attributes.Attribute> attribute =
|
private final HashMap<String, me.unurled.raxen.components.entity.Attributes.Attribute> attribute =
|
||||||
new HashMap<>();
|
new HashMap<>();
|
||||||
|
|
||||||
|
private HashMap<UUID, RaxenPlayer> raxenPlayer = new HashMap<>();
|
||||||
|
|
||||||
private Classes classesRegister;
|
private Classes classesRegister;
|
||||||
|
|
||||||
// Attributes
|
// Attributes
|
||||||
|
@ -50,34 +68,35 @@ public class PlayerManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RaxenPlayer getRaxenPlayer(Player player) {
|
public RaxenPlayer getRaxenPlayer(Player player) {
|
||||||
return new RaxenPlayer(main, player);
|
RaxenPlayer p = raxenPlayer.get(player.getUniqueId());
|
||||||
|
return p != null ? p : addRaxenPlayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RaxenPlayer getRaxenPlayer(UUID uuid) {
|
||||||
|
RaxenPlayer p = raxenPlayer.get(uuid);
|
||||||
|
return p != null ? p : addRaxenPlayer(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RaxenPlayer addRaxenPlayer(Player player) {
|
||||||
|
RaxenPlayer rp = new RaxenPlayer(main, player);
|
||||||
|
raxenPlayer.put(player.getUniqueId(), rp);
|
||||||
|
return rp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RaxenPlayer addRaxenPlayer(UUID uuid) {
|
||||||
|
RaxenPlayer rp = new RaxenPlayer(main, Bukkit.getPlayer(uuid));
|
||||||
|
raxenPlayer.put(uuid, rp);
|
||||||
|
return rp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add a task to the player action bar.
|
* add a task to the player action bar.
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
*/
|
*/
|
||||||
public void registerActionBar(Player player) {
|
public void registerActionBar(Player player) {
|
||||||
PlayerManager pm = main.getManager().getPlayerManager();
|
PlayerManager pm = main.getManager().getPlayerManager();
|
||||||
BukkitTask task = new BukkitRunnable() {
|
BukkitTask task = actionBarPlayer(main, pm, player);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
player.sendActionBar(
|
|
||||||
colorComp(
|
|
||||||
"<red>" +
|
|
||||||
pm.getHealth().get(player) +
|
|
||||||
"/" +
|
|
||||||
pm.getMaxHealth().get(player) +
|
|
||||||
"❤</red> <aqua>" +
|
|
||||||
pm.getMana().get(player) +
|
|
||||||
"/" +
|
|
||||||
pm.getMaxMana().get(player) +
|
|
||||||
"</aqua>"
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.runTaskTimerAsynchronously(main, 10, 20);
|
|
||||||
if (actionBar.containsKey(player.getUniqueId())) {
|
if (actionBar.containsKey(player.getUniqueId())) {
|
||||||
actionBar.replace(player.getUniqueId(), task);
|
actionBar.replace(player.getUniqueId(), task);
|
||||||
} else {
|
} else {
|
||||||
|
@ -87,6 +106,7 @@ public class PlayerManager {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* removes the task of action bar to player
|
* removes the task of action bar to player
|
||||||
|
*
|
||||||
* @param player
|
* @param player
|
||||||
*/
|
*/
|
||||||
public void unRegisterActionBar(Player player) {
|
public void unRegisterActionBar(Player player) {
|
||||||
|
@ -107,10 +127,27 @@ public class PlayerManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unRegisterRaxenPlayer(Player player) {}
|
/**
|
||||||
|
* Basically replace old task with old action bar with a new BukkitTask
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
*/
|
||||||
|
public void updateActionBar(Player player) {
|
||||||
|
PlayerManager pm = main.getManager().getPlayerManager();
|
||||||
|
BukkitTask task = actionBarPlayer(main, pm, player);
|
||||||
|
if (actionBar.containsKey(player.getUniqueId())) {
|
||||||
|
actionBar.replace(player.getUniqueId(), task);
|
||||||
|
} else {
|
||||||
|
actionBar.put(player.getUniqueId(), task);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unRegisterRaxenPlayer(Player player) {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getClasses
|
* getClasses
|
||||||
|
*
|
||||||
* @return the classes HashMap
|
* @return the classes HashMap
|
||||||
*/
|
*/
|
||||||
public HashMap<String, Class> getClasses() {
|
public HashMap<String, Class> getClasses() {
|
||||||
|
@ -119,6 +156,7 @@ public class PlayerManager {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add @param to hashmap of classes
|
* add @param to hashmap of classes
|
||||||
|
*
|
||||||
* @param clas a class instance
|
* @param clas a class instance
|
||||||
* @param id the id of the class
|
* @param id the id of the class
|
||||||
*/
|
*/
|
||||||
|
|
152
src/main/java/me/unurled/raxen/manager/entity/SpellManager.java
Normal file
152
src/main/java/me/unurled/raxen/manager/entity/SpellManager.java
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
package me.unurled.raxen.manager.entity;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import me.unurled.raxen.components.entity.player.RaxenPlayer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SpellManager {
|
||||||
|
|
||||||
|
static Raxen main;
|
||||||
|
|
||||||
|
public HashMap<UUID, Caster> casters = new HashMap<>();
|
||||||
|
public HashMap<UUID, Long> lastPress = new HashMap<>();
|
||||||
|
|
||||||
|
public boolean isCasting(Player player) {
|
||||||
|
if (!casters.containsKey(player.getUniqueId())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Caster caster = casters.get(player.getUniqueId());
|
||||||
|
return caster.state != CastState.NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SpellManager(Raxen main) {
|
||||||
|
SpellManager.main = main;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum CastState {
|
||||||
|
NONE(""), R("Right"), RL("Right-Left"), RLR("Right-Left-Right"), RLL("Right-Left-Left"), RR(
|
||||||
|
"Right-Right"), RRL("Right-Right-Left"), RRR("Right-Right-Right");
|
||||||
|
public String string;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
CastState(String s) {
|
||||||
|
this.string = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Caster {
|
||||||
|
|
||||||
|
public CastState state = CastState.NONE;
|
||||||
|
public int pressCount = 0;
|
||||||
|
|
||||||
|
public void press(boolean left) {
|
||||||
|
pressCount++;
|
||||||
|
final int lastPressCount = pressCount;
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(main, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (lastPressCount != pressCount) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
}, 20L);
|
||||||
|
switch (state) {
|
||||||
|
case NONE:
|
||||||
|
if (!left) {
|
||||||
|
state = CastState.R;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case R:
|
||||||
|
if (!left) {
|
||||||
|
state = CastState.RR;
|
||||||
|
} else {
|
||||||
|
state = CastState.RL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RL:
|
||||||
|
if (left) {
|
||||||
|
state = CastState.RLL;
|
||||||
|
} else {
|
||||||
|
state = CastState.RLR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RR:
|
||||||
|
if (!left) {
|
||||||
|
state = CastState.RRR;
|
||||||
|
} else {
|
||||||
|
state = CastState.RRL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RLL:
|
||||||
|
case RLR:
|
||||||
|
case RRL:
|
||||||
|
case RRR:
|
||||||
|
state = CastState.NONE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clear() {
|
||||||
|
state = CastState.NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSpellWeapon(ItemStack it) {
|
||||||
|
if (it == null || it.getType() == Material.AIR) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void click(Player p, boolean left) {
|
||||||
|
if (p.isGliding()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!casters.containsKey(p.getUniqueId())) {
|
||||||
|
casters.put(p.getUniqueId(), new Caster());
|
||||||
|
}
|
||||||
|
RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(p);
|
||||||
|
ItemStack it = p.getEquipment().getItemInMainHand();
|
||||||
|
boolean spellWep = false;
|
||||||
|
if (it != null) {
|
||||||
|
spellWep = isSpellWeapon(it);
|
||||||
|
}
|
||||||
|
if (rx != null) {
|
||||||
|
if (lastPress.containsKey(p.getUniqueId())) {
|
||||||
|
if (System.currentTimeMillis() - lastPress.get(p.getUniqueId()) < 50) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lastPress.put(p.getUniqueId(), System.currentTimeMillis());
|
||||||
|
final Caster c = casters.get(p.getUniqueId());
|
||||||
|
if (spellWep) {
|
||||||
|
c.press(left);
|
||||||
|
} else {
|
||||||
|
c.clear();
|
||||||
|
}
|
||||||
|
// TODO: checkState
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkState(Player p, RaxenPlayer rx, Caster c) {
|
||||||
|
rx.updateHealthManaDisplay();
|
||||||
|
ItemStack it = p.getEquipment().getItemInMainHand();
|
||||||
|
if (c.state == CastState.RLL) {
|
||||||
|
if (it != null) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,9 +3,18 @@ package me.unurled.raxen.manager.server;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.commands.RaxenCommand;
|
import me.unurled.raxen.commands.RaxenCommand;
|
||||||
import me.unurled.raxen.commands.admin.*;
|
import me.unurled.raxen.commands.admin.CustomModelDataCommand;
|
||||||
|
import me.unurled.raxen.commands.admin.EntitiyCommand;
|
||||||
|
import me.unurled.raxen.commands.admin.ItemListCommand;
|
||||||
|
import me.unurled.raxen.commands.admin.ItemTo64Command;
|
||||||
|
import me.unurled.raxen.commands.admin.NbtCommand;
|
||||||
|
import me.unurled.raxen.commands.admin.ReloadCommand;
|
||||||
|
import me.unurled.raxen.commands.admin.SpawnEntity;
|
||||||
|
import me.unurled.raxen.commands.admin.TestGuiCommand;
|
||||||
|
import me.unurled.raxen.commands.admin.TutorialManagerCommand;
|
||||||
import me.unurled.raxen.commands.player.ClassCommand;
|
import me.unurled.raxen.commands.player.ClassCommand;
|
||||||
import me.unurled.raxen.commands.player.MainGuiCommand;
|
import me.unurled.raxen.commands.player.MainGuiCommand;
|
||||||
|
import me.unurled.raxen.commands.player.PartyCommand;
|
||||||
import me.unurled.raxen.commands.player.SkillsCommand;
|
import me.unurled.raxen.commands.player.SkillsCommand;
|
||||||
import me.unurled.raxen.commands.player.StorageCommand;
|
import me.unurled.raxen.commands.player.StorageCommand;
|
||||||
|
|
||||||
|
@ -28,6 +37,8 @@ public class CommandManager {
|
||||||
private CustomModelDataCommand customModelDataCommand;
|
private CustomModelDataCommand customModelDataCommand;
|
||||||
private MainGuiCommand mainGuiCommand;
|
private MainGuiCommand mainGuiCommand;
|
||||||
private ItemTo64Command itemTo64Command;
|
private ItemTo64Command itemTo64Command;
|
||||||
|
private TutorialManagerCommand tutorialManagerCommand;
|
||||||
|
private PartyCommand partyCommand;
|
||||||
|
|
||||||
public CommandManager(Raxen main) {
|
public CommandManager(Raxen main) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
|
@ -41,6 +52,8 @@ public class CommandManager {
|
||||||
this.customModelDataCommand = new CustomModelDataCommand();
|
this.customModelDataCommand = new CustomModelDataCommand();
|
||||||
this.mainGuiCommand = new MainGuiCommand(this.main);
|
this.mainGuiCommand = new MainGuiCommand(this.main);
|
||||||
this.itemTo64Command = new ItemTo64Command();
|
this.itemTo64Command = new ItemTo64Command();
|
||||||
|
this.tutorialManagerCommand = new TutorialManagerCommand(main);
|
||||||
|
this.partyCommand = new PartyCommand(main);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -74,7 +87,9 @@ public class CommandManager {
|
||||||
main.getCommand("class").setTabCompleter(classCommand);
|
main.getCommand("class").setTabCompleter(classCommand);
|
||||||
main.getCommand("class").setExecutor(classCommand);
|
main.getCommand("class").setExecutor(classCommand);
|
||||||
|
|
||||||
main.getCommand("custommodeldata").setTabCompleter(customModelDataCommand);
|
main
|
||||||
|
.getCommand("custommodeldata")
|
||||||
|
.setTabCompleter(customModelDataCommand);
|
||||||
main.getCommand("custommodeldata").setExecutor(customModelDataCommand);
|
main.getCommand("custommodeldata").setExecutor(customModelDataCommand);
|
||||||
|
|
||||||
main.getCommand("main_gui").setTabCompleter(mainGuiCommand);
|
main.getCommand("main_gui").setTabCompleter(mainGuiCommand);
|
||||||
|
@ -82,5 +97,11 @@ public class CommandManager {
|
||||||
|
|
||||||
main.getCommand("itemto64").setTabCompleter(itemTo64Command);
|
main.getCommand("itemto64").setTabCompleter(itemTo64Command);
|
||||||
main.getCommand("itemto64").setExecutor(itemTo64Command);
|
main.getCommand("itemto64").setExecutor(itemTo64Command);
|
||||||
|
|
||||||
|
main.getCommand("tutorial").setExecutor(tutorialManagerCommand);
|
||||||
|
main.getCommand("tutorial").setTabCompleter(tutorialManagerCommand);
|
||||||
|
|
||||||
|
main.getCommand("party").setExecutor(partyCommand);
|
||||||
|
main.getCommand("party").setTabCompleter(partyCommand);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,13 @@ package me.unurled.raxen.manager.server;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.utils.libs.*;
|
import me.unurled.raxen.utils.libs.CitizensApi;
|
||||||
|
import me.unurled.raxen.utils.libs.HolographicDisplay;
|
||||||
|
import me.unurled.raxen.utils.libs.LuckPerm;
|
||||||
|
import me.unurled.raxen.utils.libs.MongoDB;
|
||||||
|
import me.unurled.raxen.utils.libs.Mysql;
|
||||||
|
import me.unurled.raxen.utils.libs.PlaceHolderAPI;
|
||||||
|
import me.unurled.raxen.utils.libs.Vault;
|
||||||
|
|
||||||
public class LibsManager {
|
public class LibsManager {
|
||||||
|
|
||||||
|
@ -27,6 +33,9 @@ public class LibsManager {
|
||||||
@Getter
|
@Getter
|
||||||
private CitizensApi citizens;
|
private CitizensApi citizens;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private HolographicDisplay holographicDisplay;
|
||||||
|
|
||||||
public LibsManager(Raxen main) {
|
public LibsManager(Raxen main) {
|
||||||
this.luckPerm = new LuckPerm(main);
|
this.luckPerm = new LuckPerm(main);
|
||||||
this.luckPerm.register();
|
this.luckPerm.register();
|
||||||
|
@ -35,5 +44,6 @@ public class LibsManager {
|
||||||
this.mongoDB = new MongoDB();
|
this.mongoDB = new MongoDB();
|
||||||
this.placeHolderAPI = new PlaceHolderAPI(main);
|
this.placeHolderAPI = new PlaceHolderAPI(main);
|
||||||
this.citizens = new CitizensApi(main);
|
this.citizens = new CitizensApi(main);
|
||||||
|
this.holographicDisplay = new HolographicDisplay(main);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,17 @@ import lombok.Getter;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.listener.entity.DamageEntity;
|
import me.unurled.raxen.listener.entity.DamageEntity;
|
||||||
import me.unurled.raxen.listener.entity.SpawnEvent;
|
import me.unurled.raxen.listener.entity.SpawnEvent;
|
||||||
import me.unurled.raxen.listener.player.*;
|
import me.unurled.raxen.listener.player.ArmorEvent;
|
||||||
|
import me.unurled.raxen.listener.player.ClickBlockEvent;
|
||||||
|
import me.unurled.raxen.listener.player.CloseInventoryEvent;
|
||||||
|
import me.unurled.raxen.listener.player.FoodLevelEvent;
|
||||||
|
import me.unurled.raxen.listener.player.InteractEvent;
|
||||||
|
import me.unurled.raxen.listener.player.ItemHandEvent;
|
||||||
|
import me.unurled.raxen.listener.player.JoinEvent;
|
||||||
|
import me.unurled.raxen.listener.player.LeaveEvent;
|
||||||
|
import me.unurled.raxen.listener.player.ServerPingEvent;
|
||||||
|
import me.unurled.raxen.listener.player.SpellsEvent;
|
||||||
|
import me.unurled.raxen.listener.player.TransactionEvent;
|
||||||
import me.unurled.raxen.utils.Reload;
|
import me.unurled.raxen.utils.Reload;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
|
@ -45,5 +55,8 @@ public class ListenerManager {
|
||||||
this.pm.registerEvents(new ClickBlockEvent(main), main);
|
this.pm.registerEvents(new ClickBlockEvent(main), main);
|
||||||
this.pm.registerEvents(serverPingEvent, main);
|
this.pm.registerEvents(serverPingEvent, main);
|
||||||
this.pm.registerEvents(new CloseInventoryEvent(), main);
|
this.pm.registerEvents(new CloseInventoryEvent(), main);
|
||||||
|
this.pm.registerEvents(new InteractEvent(), main);
|
||||||
|
this.pm.registerEvents(new FoodLevelEvent(), main);
|
||||||
|
this.pm.registerEvents(new SpellsEvent(main), main);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,10 @@ public class ResourcePackManager {
|
||||||
config.getString("resource_pack_url"),
|
config.getString("resource_pack_url"),
|
||||||
"https://mc-packs.net/"
|
"https://mc-packs.net/"
|
||||||
) ||
|
) ||
|
||||||
Objects.equals(config.getString("resource_pack_sha1"), "sha1hallo")
|
Objects.equals(
|
||||||
|
config.getString("resource_pack_sha1"),
|
||||||
|
"sha1hallo"
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
error(
|
error(
|
||||||
main,
|
main,
|
||||||
|
|
|
@ -111,7 +111,9 @@ public class WorldManager {
|
||||||
File newWorld = new File(worldFolder + "/" + name);
|
File newWorld = new File(worldFolder + "/" + name);
|
||||||
try {
|
try {
|
||||||
log(
|
log(
|
||||||
colorTextComp("<aqua>Copping world " + world.getName() + ".</aqua>"),
|
colorTextComp(
|
||||||
|
"<aqua>Copping world " + world.getName() + ".</aqua>"
|
||||||
|
),
|
||||||
colorTextComp(
|
colorTextComp(
|
||||||
"<blue>From " +
|
"<blue>From " +
|
||||||
world.getAbsolutePath() +
|
world.getAbsolutePath() +
|
||||||
|
|
|
@ -1,14 +1,35 @@
|
||||||
package me.unurled.raxen.utils;
|
package me.unurled.raxen.utils;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.craftbukkit.v1_19_R3.CraftRegionAccessor;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||||
|
|
||||||
public class EntityUtils {
|
public class EntityUtils {
|
||||||
|
|
||||||
public void setSkin(Entity e) {
|
public void setSkin(Entity e) {
|
||||||
if (e instanceof Player) {}
|
if (e instanceof Player) {
|
||||||
|
}
|
||||||
// Bukkit.getWorld("aa").spawn(new Location(Bukkit.getWorld("aa"), 0, 0, 0), new CraftPlayer())
|
// Bukkit.getWorld("aa").spawn(new Location(Bukkit.getWorld("aa"), 0, 0, 0), new CraftPlayer())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static LivingEntity createLivingEntity(
|
||||||
|
Class<? extends net.minecraft.world.entity.Entity> type, Location loc) {
|
||||||
|
net.minecraft.world.entity.LivingEntity e = null;
|
||||||
|
CraftRegionAccessor cra = (CraftRegionAccessor) loc.getWorld();
|
||||||
|
try {
|
||||||
|
e = (net.minecraft.world.entity.LivingEntity) (type.getDeclaredConstructor(
|
||||||
|
CraftRegionAccessor.class).newInstance(cra));
|
||||||
|
} catch (Exception e2) {
|
||||||
|
e2.printStackTrace();
|
||||||
|
}
|
||||||
|
e.setPos(loc.getX(), loc.getY(), loc.getZ());
|
||||||
|
e.setRot(loc.getYaw(), loc.getPitch());
|
||||||
|
cra.addEntity(e, SpawnReason.CUSTOM);
|
||||||
|
LivingEntity le = (LivingEntity) (((net.minecraft.world.entity.Entity) e).getBukkitEntity());
|
||||||
|
le.setRemoveWhenFarAway(false);
|
||||||
|
return le;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,21 @@
|
||||||
package me.unurled.raxen.utils;
|
package me.unurled.raxen.utils;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Utils.*;
|
import static me.unurled.raxen.utils.Utils.colorComp;
|
||||||
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
import static me.unurled.raxen.utils.Utils.error;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import de.tr7zw.nbtapi.NBTItem;
|
import de.tr7zw.nbtapi.NBTItem;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import me.unurled.raxen.components.items.NBT;
|
import me.unurled.raxen.components.items.NBTNames;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -28,6 +34,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* create an item with @param
|
* create an item with @param
|
||||||
|
*
|
||||||
* @param material the item material
|
* @param material the item material
|
||||||
* @param amount the amount of the itemstack
|
* @param amount the amount of the itemstack
|
||||||
* @param glow if the item glows or not
|
* @param glow if the item glows or not
|
||||||
|
@ -69,6 +76,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* edit an item with provided @param
|
* edit an item with provided @param
|
||||||
|
*
|
||||||
* @param item the item to modify
|
* @param item the item to modify
|
||||||
* @param name the new name of the item
|
* @param name the new name of the item
|
||||||
* @param amount the new amount
|
* @param amount the new amount
|
||||||
|
@ -96,6 +104,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the basic close gui button
|
* the basic close gui button
|
||||||
|
*
|
||||||
* @return a barrier block itemstack named close
|
* @return a barrier block itemstack named close
|
||||||
*/
|
*/
|
||||||
public static @NotNull ItemStack closeItem() {
|
public static @NotNull ItemStack closeItem() {
|
||||||
|
@ -104,7 +113,7 @@ public class Items {
|
||||||
1,
|
1,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
colorString("<red>CLOSE</red>")
|
"<reset><red>CLOSE</red>"
|
||||||
);
|
);
|
||||||
ItemMeta clo = close.getItemMeta();
|
ItemMeta clo = close.getItemMeta();
|
||||||
clo.setCustomModelData(1);
|
clo.setCustomModelData(1);
|
||||||
|
@ -114,6 +123,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fill item in chest and guis
|
* fill item in chest and guis
|
||||||
|
*
|
||||||
* @return a grey glass pane named nothing
|
* @return a grey glass pane named nothing
|
||||||
*/
|
*/
|
||||||
public static @NotNull ItemStack greyPane() {
|
public static @NotNull ItemStack greyPane() {
|
||||||
|
@ -122,6 +132,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* serialize item
|
* serialize item
|
||||||
|
*
|
||||||
* @param it an itemstack
|
* @param it an itemstack
|
||||||
* @param slot the slot it was in the inventory
|
* @param slot the slot it was in the inventory
|
||||||
* @return the serialized string
|
* @return the serialized string
|
||||||
|
@ -138,6 +149,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serelize the PlayerInventory
|
* Serelize the PlayerInventory
|
||||||
|
*
|
||||||
* @param inv a player inventory
|
* @param inv a player inventory
|
||||||
* @return return a serelized string
|
* @return return a serelized string
|
||||||
*/
|
*/
|
||||||
|
@ -162,6 +174,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* if item is in its
|
* if item is in its
|
||||||
|
*
|
||||||
* @param item an Itemstack
|
* @param item an Itemstack
|
||||||
* @param its an Itemstack[]
|
* @param its an Itemstack[]
|
||||||
* @return return if item is in its
|
* @return return if item is in its
|
||||||
|
@ -177,6 +190,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get which armor the type is
|
* Get which armor the type is
|
||||||
|
*
|
||||||
* @param type a material type
|
* @param type a material type
|
||||||
* @return the armor type or null
|
* @return the armor type or null
|
||||||
*/
|
*/
|
||||||
|
@ -205,6 +219,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* custructor
|
* custructor
|
||||||
|
*
|
||||||
* @param slot an int of the slot of the item
|
* @param slot an int of the slot of the item
|
||||||
* @param it the item which is deserialized.
|
* @param it the item which is deserialized.
|
||||||
*/
|
*/
|
||||||
|
@ -233,6 +248,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* constructor
|
* constructor
|
||||||
|
*
|
||||||
* @param inv a list of itemstack with their slot.
|
* @param inv a list of itemstack with their slot.
|
||||||
*/
|
*/
|
||||||
public itemStackListDeserilize(HashMap<Integer, ItemStack> inv) {
|
public itemStackListDeserilize(HashMap<Integer, ItemStack> inv) {
|
||||||
|
@ -242,10 +258,11 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* deserilize items
|
* deserilize items
|
||||||
|
*
|
||||||
* @param str the serilized item
|
* @param str the serilized item
|
||||||
* @return a deserialized item instance
|
* @return a deserialized item instance
|
||||||
*/
|
*/
|
||||||
public static @NotNull Items.itemStackDeserializeResult itemStackDeserilize(
|
public static @NotNull Items.itemStackDeserializeResult itemStackDeserialize(
|
||||||
@NotNull String str
|
@NotNull String str
|
||||||
) {
|
) {
|
||||||
List<String> mapp = Arrays.asList(str.split("@#SLOT#"));
|
List<String> mapp = Arrays.asList(str.split("@#SLOT#"));
|
||||||
|
@ -281,6 +298,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* a list of serialized item in one string
|
* a list of serialized item in one string
|
||||||
|
*
|
||||||
* @param list the list of all serialized item
|
* @param list the list of all serialized item
|
||||||
* @return a string
|
* @return a string
|
||||||
*/
|
*/
|
||||||
|
@ -295,6 +313,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* deserialize item
|
* deserialize item
|
||||||
|
*
|
||||||
* @param str a list of all serialized item
|
* @param str a list of all serialized item
|
||||||
* @return a list of itemstack with their slot
|
* @return a list of itemstack with their slot
|
||||||
*/
|
*/
|
||||||
|
@ -309,7 +328,7 @@ public class Items {
|
||||||
ItemStack itt;
|
ItemStack itt;
|
||||||
Integer slot;
|
Integer slot;
|
||||||
if (s != null) {
|
if (s != null) {
|
||||||
itemStackDeserializeResult itm = itemStackDeserilize(s);
|
itemStackDeserializeResult itm = itemStackDeserialize(s);
|
||||||
itt = itm.it;
|
itt = itm.it;
|
||||||
if (itt != null && itt.getType() != Material.AIR) {
|
if (itt != null && itt.getType() != Material.AIR) {
|
||||||
items.add(itt);
|
items.add(itt);
|
||||||
|
@ -324,6 +343,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* deserialize item
|
* deserialize item
|
||||||
|
*
|
||||||
* @param str a list of all serialized item
|
* @param str a list of all serialized item
|
||||||
* @return a list of itemstack with their slot
|
* @return a list of itemstack with their slot
|
||||||
*/
|
*/
|
||||||
|
@ -338,7 +358,7 @@ public class Items {
|
||||||
ItemStack itt;
|
ItemStack itt;
|
||||||
Integer slot;
|
Integer slot;
|
||||||
if (s != null) {
|
if (s != null) {
|
||||||
itemStackDeserializeResult itm = itemStackDeserilize(s);
|
itemStackDeserializeResult itm = itemStackDeserialize(s);
|
||||||
itt = itm.it;
|
itt = itm.it;
|
||||||
if (itt != null && itt.getType() != Material.AIR) {
|
if (itt != null && itt.getType() != Material.AIR) {
|
||||||
items.add(itt);
|
items.add(itt);
|
||||||
|
@ -350,6 +370,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set all item in the list to their slot in inv
|
* set all item in the list to their slot in inv
|
||||||
|
*
|
||||||
* @param list a list of item with their slot
|
* @param list a list of item with their slot
|
||||||
* @param inv the destined inventory
|
* @param inv the destined inventory
|
||||||
* @return the inv
|
* @return the inv
|
||||||
|
@ -366,6 +387,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set all item in the list to their slot in inv
|
* set all item in the list to their slot in inv
|
||||||
|
*
|
||||||
* @param list a list of item with their slot
|
* @param list a list of item with their slot
|
||||||
* @param inv the destined inventory
|
* @param inv the destined inventory
|
||||||
* @return the inv
|
* @return the inv
|
||||||
|
@ -400,6 +422,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set all item in the list to their slot in inv
|
* set all item in the list to their slot in inv
|
||||||
|
*
|
||||||
* @param list a list of item with their slot
|
* @param list a list of item with their slot
|
||||||
* @param inv the player inventory
|
* @param inv the player inventory
|
||||||
* @return the inv
|
* @return the inv
|
||||||
|
@ -428,6 +451,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* serialize an item
|
* serialize an item
|
||||||
|
*
|
||||||
* @param stack the item
|
* @param stack the item
|
||||||
* @return a string
|
* @return a string
|
||||||
* @throws IllegalStateException stream errors
|
* @throws IllegalStateException stream errors
|
||||||
|
@ -451,6 +475,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* deserialize item for string to itemstack
|
* deserialize item for string to itemstack
|
||||||
|
*
|
||||||
* @param data string
|
* @param data string
|
||||||
* @return itemstack
|
* @return itemstack
|
||||||
* @throws IOException stream error
|
* @throws IOException stream error
|
||||||
|
@ -478,6 +503,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return in correct naming each attributes,
|
* return in correct naming each attributes,
|
||||||
|
*
|
||||||
* @param str the nbt attribute
|
* @param str the nbt attribute
|
||||||
* @return the good name
|
* @return the good name
|
||||||
*/
|
*/
|
||||||
|
@ -507,6 +533,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set the attribute of an item
|
* set the attribute of an item
|
||||||
|
*
|
||||||
* @param main a main instance
|
* @param main a main instance
|
||||||
* @param str the attribute
|
* @param str the attribute
|
||||||
* @param nb how many of the attribute
|
* @param nb how many of the attribute
|
||||||
|
@ -522,17 +549,17 @@ public class Items {
|
||||||
) {
|
) {
|
||||||
switch (str) {
|
switch (str) {
|
||||||
case "SPEED":
|
case "SPEED":
|
||||||
nbti.setInteger(NBT.SPEED, nb);
|
nbti.setInteger(NBTNames.SPEED, nb);
|
||||||
case "STRENGTH":
|
case "STRENGTH":
|
||||||
nbti.setInteger(NBT.STRENGTH, nb);
|
nbti.setInteger(NBTNames.STRENGTH, nb);
|
||||||
case "HEALTH":
|
case "HEALTH":
|
||||||
nbti.setInteger(NBT.HEALTH, nb);
|
nbti.setInteger(NBTNames.HEALTH, nb);
|
||||||
case "DEFENSE":
|
case "DEFENSE":
|
||||||
nbti.setInteger(NBT.DEFENSE, nb);
|
nbti.setInteger(NBTNames.DEFENSE, nb);
|
||||||
case "LUCK":
|
case "LUCK":
|
||||||
nbti.setInteger(NBT.LUCK, nb);
|
nbti.setInteger(NBTNames.LUCK, nb);
|
||||||
case "MANA":
|
case "MANA":
|
||||||
nbti.setInteger(NBT.MANA, nb);
|
nbti.setInteger(NBTNames.MANA, nb);
|
||||||
default:
|
default:
|
||||||
error(
|
error(
|
||||||
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
|
(Raxen) Bukkit.getPluginManager().getPlugin("Raxen"),
|
||||||
|
@ -544,6 +571,7 @@ public class Items {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set the lore from the nbt
|
* set the lore from the nbt
|
||||||
|
*
|
||||||
* @param it an itemstack
|
* @param it an itemstack
|
||||||
* @return the modified item
|
* @return the modified item
|
||||||
*/
|
*/
|
||||||
|
@ -555,87 +583,99 @@ public class Items {
|
||||||
lore.add(cp);
|
lore.add(cp);
|
||||||
}
|
}
|
||||||
NBTItem nbti = new NBTItem(it);
|
NBTItem nbti = new NBTItem(it);
|
||||||
if (nbti.hasTag(NBT.SPEED)) {
|
if (nbti.hasTag(NBTNames.SPEED)) {
|
||||||
if (lore.size() > 2) {
|
if (lore.size() > 2) {
|
||||||
lore.add(
|
lore.add(
|
||||||
2,
|
2,
|
||||||
colorComp(attributes("SPEED"))
|
colorComp(attributes("SPEED"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.SPEED)))
|
.append(Component.text(nbti.getInteger(NBTNames.SPEED)))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
lore.add(
|
lore.add(
|
||||||
colorComp(attributes("SPEED"))
|
colorComp(attributes("SPEED"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.SPEED)))
|
.append(Component.text(nbti.getInteger(NBTNames.SPEED)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nbti.hasTag(NBT.HEALTH)) {
|
if (nbti.hasTag(NBTNames.HEALTH)) {
|
||||||
if (lore.size() > 1) {
|
if (lore.size() > 1) {
|
||||||
lore.add(
|
lore.add(
|
||||||
1,
|
1,
|
||||||
colorComp(attributes("HEALTH"))
|
colorComp(attributes("HEALTH"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.HEALTH)))
|
.append(
|
||||||
|
Component.text(nbti.getInteger(NBTNames.HEALTH))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
lore.add(
|
lore.add(
|
||||||
colorComp(attributes("HEALTH"))
|
colorComp(attributes("HEALTH"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.HEALTH)))
|
.append(
|
||||||
|
Component.text(nbti.getInteger(NBTNames.HEALTH))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nbti.hasTag(NBT.DEFENSE)) {
|
if (nbti.hasTag(NBTNames.DEFENSE)) {
|
||||||
if (lore.size() > 3) {
|
if (lore.size() > 3) {
|
||||||
lore.add(
|
lore.add(
|
||||||
3,
|
3,
|
||||||
colorComp(attributes("DEFENSE"))
|
colorComp(attributes("DEFENSE"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.DEFENSE)))
|
.append(
|
||||||
|
Component.text(nbti.getInteger(NBTNames.DEFENSE))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
lore.add(
|
lore.add(
|
||||||
colorComp(attributes("DEFENSE"))
|
colorComp(attributes("DEFENSE"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.DEFENSE)))
|
.append(
|
||||||
|
Component.text(nbti.getInteger(NBTNames.DEFENSE))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nbti.hasTag(NBT.STRENGTH)) {
|
if (nbti.hasTag(NBTNames.STRENGTH)) {
|
||||||
if (lore.size() > 3) {
|
if (lore.size() > 3) {
|
||||||
lore.add(
|
lore.add(
|
||||||
3,
|
3,
|
||||||
colorComp(attributes("STRENGTH"))
|
colorComp(attributes("STRENGTH"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.STRENGTH)))
|
.append(
|
||||||
|
Component.text(nbti.getInteger(NBTNames.STRENGTH))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
lore.add(
|
lore.add(
|
||||||
colorComp(attributes("STRENGTH"))
|
colorComp(attributes("STRENGTH"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.STRENGTH)))
|
.append(
|
||||||
|
Component.text(nbti.getInteger(NBTNames.STRENGTH))
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nbti.hasTag(NBT.MANA)) {
|
if (nbti.hasTag(NBTNames.MANA)) {
|
||||||
if (lore.size() > 3) {
|
if (lore.size() > 3) {
|
||||||
lore.add(
|
lore.add(
|
||||||
3,
|
3,
|
||||||
colorComp(attributes("MANA"))
|
colorComp(attributes("MANA"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.MANA)))
|
.append(Component.text(nbti.getInteger(NBTNames.MANA)))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
lore.add(
|
lore.add(
|
||||||
colorComp(attributes("MANA"))
|
colorComp(attributes("MANA"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.MANA)))
|
.append(Component.text(nbti.getInteger(NBTNames.MANA)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nbti.hasTag(NBT.LUCK)) {
|
if (nbti.hasTag(NBTNames.LUCK)) {
|
||||||
if (lore.size() > 3) {
|
if (lore.size() > 3) {
|
||||||
lore.add(
|
lore.add(
|
||||||
3,
|
3,
|
||||||
colorComp(attributes("LUCK"))
|
colorComp(attributes("LUCK"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.LUCK)))
|
.append(Component.text(nbti.getInteger(NBTNames.LUCK)))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
lore.add(
|
lore.add(
|
||||||
colorComp(attributes("LUCK"))
|
colorComp(attributes("LUCK"))
|
||||||
.append(Component.text(nbti.getInteger(NBT.LUCK)))
|
.append(Component.text(nbti.getInteger(NBTNames.LUCK)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
34
src/main/java/me/unurled/raxen/utils/Math.java
Normal file
34
src/main/java/me/unurled/raxen/utils/Math.java
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
package me.unurled.raxen.utils;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
public class Math {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* author: Edasaki Generates a random integer in the range [a, b].
|
||||||
|
*
|
||||||
|
* @param a minimum
|
||||||
|
* @param b maximum
|
||||||
|
*/
|
||||||
|
public static int randInt(int a, int b) {
|
||||||
|
return (int) (java.lang.Math.random() * (b - a + 1) + a);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* author: Edasaki Returns the Manhattan distance in the x-z plane between locations a and b.
|
||||||
|
*
|
||||||
|
* @param a
|
||||||
|
* @param b
|
||||||
|
* @return distance between a and b.
|
||||||
|
*/
|
||||||
|
public static double flatDistance(Location a, Location b) {
|
||||||
|
if (!a.getWorld().equals(b.getWorld())) {
|
||||||
|
return Double.MAX_VALUE;
|
||||||
|
}
|
||||||
|
double sum = 0;
|
||||||
|
sum += java.lang.Math.abs(a.getX() - b.getX());
|
||||||
|
sum += java.lang.Math.abs(a.getZ() - b.getZ());
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -83,7 +83,9 @@ public class RayTrace {
|
||||||
) {
|
) {
|
||||||
ArrayList<Vector> positions = traverse(blocksAway, accuracy);
|
ArrayList<Vector> positions = traverse(blocksAway, accuracy);
|
||||||
for (Vector position : positions) {
|
for (Vector position : positions) {
|
||||||
if (intersects(position, boundingBox.getMin(), boundingBox.getMax())) {
|
if (
|
||||||
|
intersects(position, boundingBox.getMin(), boundingBox.getMax())
|
||||||
|
) {
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,7 +100,9 @@ public class RayTrace {
|
||||||
) {
|
) {
|
||||||
ArrayList<Vector> positions = traverse(blocksAway, accuracy);
|
ArrayList<Vector> positions = traverse(blocksAway, accuracy);
|
||||||
for (Vector position : positions) {
|
for (Vector position : positions) {
|
||||||
if (intersects(position, boundingBox.getMin(), boundingBox.getMax())) {
|
if (
|
||||||
|
intersects(position, boundingBox.getMin(), boundingBox.getMax())
|
||||||
|
) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,9 +113,13 @@ public class RayTrace {
|
||||||
public static boolean intersects(Vector position, Vector min, Vector max) {
|
public static boolean intersects(Vector position, Vector min, Vector max) {
|
||||||
if (position.getX() < min.getX() || position.getX() > max.getX()) {
|
if (position.getX() < min.getX() || position.getX() > max.getX()) {
|
||||||
return false;
|
return false;
|
||||||
} else if (position.getY() < min.getY() || position.getY() > max.getY()) {
|
} else if (
|
||||||
|
position.getY() < min.getY() || position.getY() > max.getY()
|
||||||
|
) {
|
||||||
return false;
|
return false;
|
||||||
} else if (position.getZ() < min.getZ() || position.getZ() > max.getZ()) {
|
} else if (
|
||||||
|
position.getZ() < min.getZ() || position.getZ() > max.getZ()
|
||||||
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
35
src/main/java/me/unurled/raxen/utils/Tags.java
Normal file
35
src/main/java/me/unurled/raxen/utils/Tags.java
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
package me.unurled.raxen.utils;
|
||||||
|
|
||||||
|
import static me.unurled.raxen.utils.Utils.coloredString;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI;
|
||||||
|
import me.filoghost.holographicdisplays.api.hologram.Hologram;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
public class Tags {
|
||||||
|
|
||||||
|
public static void makeFloatingText(String name, Location loc, double xzOffset, double yMin,
|
||||||
|
double yMax, double durationSec) {
|
||||||
|
loc.add(-xzOffset / 2 + (java.lang.Math.random() * (xzOffset)),
|
||||||
|
(java.lang.Math.random() * (yMax - yMin)) + yMin, -xzOffset / 2 + (
|
||||||
|
java.lang.Math.random() * (xzOffset)));
|
||||||
|
HolographicDisplaysAPI api = HolographicDisplaysAPI.get((Raxen) Objects.requireNonNull(
|
||||||
|
Bukkit.getPluginManager()
|
||||||
|
.getPlugin("Raxen")));
|
||||||
|
Hologram hologram = api.createHologram(loc);
|
||||||
|
hologram.getLines().appendText(coloredString(name));
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
hologram.delete();
|
||||||
|
}
|
||||||
|
}.runTaskLater(((Raxen) Objects.requireNonNull(
|
||||||
|
Bukkit.getPluginManager()
|
||||||
|
.getPlugin("Raxen"))).getPlugin(), (long) (durationSec * 20));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,7 +1,11 @@
|
||||||
package me.unurled.raxen.utils;
|
package me.unurled.raxen.utils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.*;
|
import java.nio.file.DirectoryStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.LinkOption;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import me.unurled.raxen.Raxen;
|
import me.unurled.raxen.Raxen;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
@ -11,7 +15,7 @@ import net.kyori.adventure.text.minimessage.tag.standard.StandardTags;
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
@ -24,6 +28,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* convert a string with mini-message formatting to a colored Component
|
* convert a string with mini-message formatting to a colored Component
|
||||||
|
*
|
||||||
* @param stringToComponent a string
|
* @param stringToComponent a string
|
||||||
* @return a component
|
* @return a component
|
||||||
*/
|
*/
|
||||||
|
@ -44,10 +49,13 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* convert a string with mini-message formatting to a colored TextComponent
|
* convert a string with mini-message formatting to a colored TextComponent
|
||||||
|
*
|
||||||
* @param stringToComponent a string
|
* @param stringToComponent a string
|
||||||
* @return a component
|
* @return a component
|
||||||
*/
|
*/
|
||||||
public static @NotNull TextComponent colorTextComp(String stringToComponent) {
|
public static @NotNull TextComponent colorTextComp(
|
||||||
|
String stringToComponent
|
||||||
|
) {
|
||||||
MiniMessage minimessage = MiniMessage
|
MiniMessage minimessage = MiniMessage
|
||||||
.builder()
|
.builder()
|
||||||
.tags(
|
.tags(
|
||||||
|
@ -64,6 +72,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* change the mini-message colorized format to the legacy format, with §
|
* change the mini-message colorized format to the legacy format, with §
|
||||||
|
*
|
||||||
* @param string a string
|
* @param string a string
|
||||||
* @return a colored string
|
* @return a colored string
|
||||||
*/
|
*/
|
||||||
|
@ -86,6 +95,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* change the mini-message colorized format to the legacy format, with §
|
* change the mini-message colorized format to the legacy format, with §
|
||||||
|
*
|
||||||
* @param string a string
|
* @param string a string
|
||||||
* @return a String
|
* @return a String
|
||||||
*/
|
*/
|
||||||
|
@ -97,6 +107,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* transform a text-component to a string
|
* transform a text-component to a string
|
||||||
|
*
|
||||||
* @param comp a string
|
* @param comp a string
|
||||||
* @return a String
|
* @return a String
|
||||||
*/
|
*/
|
||||||
|
@ -106,6 +117,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* transform a text-component to a string
|
* transform a text-component to a string
|
||||||
|
*
|
||||||
* @param comp a string
|
* @param comp a string
|
||||||
* @return a String
|
* @return a String
|
||||||
*/
|
*/
|
||||||
|
@ -113,12 +125,17 @@ public class Utils {
|
||||||
return LegacyComponentSerializer.legacyAmpersand().serialize(comp);
|
return LegacyComponentSerializer.legacyAmpersand().serialize(comp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String comptToPlainText(Component comp) {
|
||||||
|
return PlainTextComponentSerializer.plainText().serialize(comp);
|
||||||
|
}
|
||||||
|
|
||||||
public static void comp(Component comp) {
|
public static void comp(Component comp) {
|
||||||
LegacyComponentSerializer.legacyAmpersand().serialize(comp);
|
LegacyComponentSerializer.legacyAmpersand().serialize(comp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Strips all color from a string.
|
* Strips all color from a string.
|
||||||
|
*
|
||||||
* @param string the string that wants to be decolored.
|
* @param string the string that wants to be decolored.
|
||||||
* @return a decolored string
|
* @return a decolored string
|
||||||
*/
|
*/
|
||||||
|
@ -128,6 +145,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* transform a new line to a component
|
* transform a new line to a component
|
||||||
|
*
|
||||||
* @param string
|
* @param string
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@ -137,6 +155,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* debug output to console if debug is set to true in config
|
* debug output to console if debug is set to true in config
|
||||||
|
*
|
||||||
* @param main Raxen instance
|
* @param main Raxen instance
|
||||||
* @param strings output to console
|
* @param strings output to console
|
||||||
*/
|
*/
|
||||||
|
@ -151,6 +170,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* debug output to console if debug is set to true in config
|
* debug output to console if debug is set to true in config
|
||||||
|
*
|
||||||
* @param strings output to console
|
* @param strings output to console
|
||||||
*/
|
*/
|
||||||
public static void debug(String... strings) {
|
public static void debug(String... strings) {
|
||||||
|
@ -166,6 +186,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* debug output to console if debug is set to true in config
|
* debug output to console if debug is set to true in config
|
||||||
|
*
|
||||||
* @param config main file config
|
* @param config main file config
|
||||||
* @param strings ouput to console
|
* @param strings ouput to console
|
||||||
*/
|
*/
|
||||||
|
@ -181,6 +202,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* debug output to console if debug is set to true in config
|
* debug output to console if debug is set to true in config
|
||||||
|
*
|
||||||
* @param comps output to console
|
* @param comps output to console
|
||||||
*/
|
*/
|
||||||
public static void debug(TextComponent... comps) {
|
public static void debug(TextComponent... comps) {
|
||||||
|
@ -196,6 +218,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log the strings to the console
|
* Log the strings to the console
|
||||||
|
*
|
||||||
* @param main a main instance running
|
* @param main a main instance running
|
||||||
* @param strings string that want to be outputted.
|
* @param strings string that want to be outputted.
|
||||||
*/
|
*/
|
||||||
|
@ -207,6 +230,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log the strings to the console
|
* Log the strings to the console
|
||||||
|
*
|
||||||
* @param strings string that want to be outputted.
|
* @param strings string that want to be outputted.
|
||||||
*/
|
*/
|
||||||
public static void log(String... strings) {
|
public static void log(String... strings) {
|
||||||
|
@ -219,6 +243,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Log the TextComponent to the console
|
* Log the TextComponent to the console
|
||||||
|
*
|
||||||
* @param comp TextComponent that want to be outputted.
|
* @param comp TextComponent that want to be outputted.
|
||||||
*/
|
*/
|
||||||
public static void log(TextComponent... comp) {
|
public static void log(TextComponent... comp) {
|
||||||
|
@ -231,6 +256,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Warns strings to the console using the logger
|
* Warns strings to the console using the logger
|
||||||
|
*
|
||||||
* @param strings to warn message
|
* @param strings to warn message
|
||||||
*/
|
*/
|
||||||
public static void warn(String... strings) {
|
public static void warn(String... strings) {
|
||||||
|
@ -243,6 +269,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Warns strings to the console using the logger
|
* Warns strings to the console using the logger
|
||||||
|
*
|
||||||
* @param strings to warn message
|
* @param strings to warn message
|
||||||
* @param main a running instance
|
* @param main a running instance
|
||||||
*/
|
*/
|
||||||
|
@ -254,6 +281,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Error strings to the console using the logger
|
* Error strings to the console using the logger
|
||||||
|
*
|
||||||
* @param strings to error message
|
* @param strings to error message
|
||||||
*/
|
*/
|
||||||
public static void error(String... strings) {
|
public static void error(String... strings) {
|
||||||
|
@ -266,6 +294,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Error strings to the console using the logger
|
* Error strings to the console using the logger
|
||||||
|
*
|
||||||
* @param strings to error message
|
* @param strings to error message
|
||||||
* @param main a main instance running
|
* @param main a main instance running
|
||||||
*/
|
*/
|
||||||
|
@ -277,6 +306,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message strings to player.
|
* message strings to player.
|
||||||
|
*
|
||||||
* @param player an online player
|
* @param player an online player
|
||||||
* @param strings strings that will be sent.
|
* @param strings strings that will be sent.
|
||||||
*/
|
*/
|
||||||
|
@ -288,6 +318,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message textComponent to player.
|
* message textComponent to player.
|
||||||
|
*
|
||||||
* @param player an online player
|
* @param player an online player
|
||||||
* @param comp textComponent that will be sent.
|
* @param comp textComponent that will be sent.
|
||||||
*/
|
*/
|
||||||
|
@ -299,6 +330,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message the command sender with textComponent.
|
* message the command sender with textComponent.
|
||||||
|
*
|
||||||
* @param player the command sender
|
* @param player the command sender
|
||||||
* @param textComponent message
|
* @param textComponent message
|
||||||
*/
|
*/
|
||||||
|
@ -308,13 +340,16 @@ public class Utils {
|
||||||
) {
|
) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
colorComp(
|
colorComp(
|
||||||
PlainTextComponentSerializer.plainText().serialize(textComponent)
|
PlainTextComponentSerializer
|
||||||
|
.plainText()
|
||||||
|
.serialize(textComponent)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message the command sender with strings.
|
* message the command sender with strings.
|
||||||
|
*
|
||||||
* @param player the command sender
|
* @param player the command sender
|
||||||
* @param strings message
|
* @param strings message
|
||||||
*/
|
*/
|
||||||
|
@ -326,6 +361,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fill an inventory with grey glass pane.
|
* fill an inventory with grey glass pane.
|
||||||
|
*
|
||||||
* @param inv an inventory
|
* @param inv an inventory
|
||||||
* @return the inventory filled
|
* @return the inventory filled
|
||||||
*/
|
*/
|
||||||
|
@ -342,14 +378,18 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* output message when player have no perms
|
* output message when player have no perms
|
||||||
|
*
|
||||||
* @return a component
|
* @return a component
|
||||||
*/
|
*/
|
||||||
public static Component noPerms() {
|
public static Component noPerms() {
|
||||||
return colorComp("<red>You don't have the permission to use this feature.");
|
return colorComp(
|
||||||
|
"<red>You don't have the permission to use this feature."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* error message output to player
|
* error message output to player
|
||||||
|
*
|
||||||
* @return a component
|
* @return a component
|
||||||
*/
|
*/
|
||||||
public static Component error() {
|
public static Component error() {
|
||||||
|
@ -366,6 +406,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy folder from sourceDirectoryLocation to destinationDirectoryLocation
|
* Copy folder from sourceDirectoryLocation to destinationDirectoryLocation
|
||||||
|
*
|
||||||
* @param sourceDirectoryLocation the source directory
|
* @param sourceDirectoryLocation the source directory
|
||||||
* @param destinationDirectoryLocation the copy location
|
* @param destinationDirectoryLocation the copy location
|
||||||
* @throws IOException exception with coping data
|
* @throws IOException exception with coping data
|
||||||
|
@ -379,7 +420,9 @@ public class Utils {
|
||||||
.forEach(source -> {
|
.forEach(source -> {
|
||||||
Path destination = Paths.get(
|
Path destination = Paths.get(
|
||||||
destinationDirectoryLocation,
|
destinationDirectoryLocation,
|
||||||
source.toString().substring(sourceDirectoryLocation.length())
|
source
|
||||||
|
.toString()
|
||||||
|
.substring(sourceDirectoryLocation.length())
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
Files.copy(source, destination);
|
Files.copy(source, destination);
|
||||||
|
@ -391,12 +434,15 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* remove path directory
|
* remove path directory
|
||||||
|
*
|
||||||
* @param path removed folder
|
* @param path removed folder
|
||||||
* @throws IOException error with handling data
|
* @throws IOException error with handling data
|
||||||
*/
|
*/
|
||||||
public static void removeDirectory(Path path) throws IOException {
|
public static void removeDirectory(Path path) throws IOException {
|
||||||
if (Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) {
|
if (Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) {
|
||||||
try (DirectoryStream<Path> entries = Files.newDirectoryStream(path)) {
|
try (
|
||||||
|
DirectoryStream<Path> entries = Files.newDirectoryStream(path)
|
||||||
|
) {
|
||||||
for (Path entry : entries) {
|
for (Path entry : entries) {
|
||||||
removeDirectory(entry);
|
removeDirectory(entry);
|
||||||
}
|
}
|
||||||
|
@ -419,6 +465,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get a string from args which contains ""
|
* get a string from args which contains ""
|
||||||
|
*
|
||||||
* @param args a string list
|
* @param args a string list
|
||||||
* @return a string
|
* @return a string
|
||||||
*/
|
*/
|
||||||
|
@ -443,6 +490,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* search if there is an args that is null or do not exist
|
* search if there is an args that is null or do not exist
|
||||||
|
*
|
||||||
* @param args a list of string
|
* @param args a list of string
|
||||||
* @param n a number of entries a list should have
|
* @param n a number of entries a list should have
|
||||||
* @return a boolean if true or not
|
* @return a boolean if true or not
|
||||||
|
@ -460,6 +508,7 @@ public class Utils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* changes every "null" in list to the object null
|
* changes every "null" in list to the object null
|
||||||
|
*
|
||||||
* @param args a list of strings
|
* @param args a list of strings
|
||||||
* @return return a new list
|
* @return return a new list
|
||||||
*/
|
*/
|
||||||
|
@ -474,4 +523,21 @@ public class Utils {
|
||||||
}
|
}
|
||||||
return newList;
|
return newList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Color color(String string) {
|
||||||
|
if (string.startsWith("#") || string.startsWith("0x")) {
|
||||||
|
return Color.fromBGR(Integer.parseInt(string.substring(1), 16));
|
||||||
|
} else if (string.contains(",")) {
|
||||||
|
String[] newString = string.replace(", ", ",").split(",", 3);
|
||||||
|
try {
|
||||||
|
int r = Integer.parseInt(newString[0]);
|
||||||
|
int g = Integer.parseInt(newString[1]);
|
||||||
|
int b = Integer.parseInt(newString[2]);
|
||||||
|
return Color.fromRGB(r, g, b);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return Color.WHITE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Color.WHITE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package me.unurled.raxen.utils.libs;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI;
|
||||||
|
import me.filoghost.holographicdisplays.api.hologram.Hologram;
|
||||||
|
import me.unurled.raxen.Raxen;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
public class HolographicDisplay {
|
||||||
|
|
||||||
|
private Raxen main;
|
||||||
|
@Getter
|
||||||
|
private HolographicDisplaysAPI api;
|
||||||
|
|
||||||
|
public HolographicDisplay(Raxen main) {
|
||||||
|
this.main = main;
|
||||||
|
api = HolographicDisplaysAPI.get(main);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* template to use
|
||||||
|
*
|
||||||
|
* @param loc
|
||||||
|
* @param text
|
||||||
|
*/
|
||||||
|
public void createHologram(Location loc, String... text) {
|
||||||
|
Hologram hologram = api.createHologram(loc);
|
||||||
|
for (String s : text) {
|
||||||
|
hologram.getLines().appendText(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package me.unurled.raxen.utils.libs;
|
package me.unurled.raxen.utils.libs;
|
||||||
|
|
||||||
import static me.unurled.raxen.utils.Utils.*;
|
import static me.unurled.raxen.utils.Utils.colorComp;
|
||||||
|
import static me.unurled.raxen.utils.Utils.debug;
|
||||||
|
|
||||||
import com.mongodb.ConnectionString;
|
import com.mongodb.ConnectionString;
|
||||||
import com.mongodb.client.MongoClient;
|
import com.mongodb.client.MongoClient;
|
||||||
|
@ -8,8 +9,6 @@ import com.mongodb.client.MongoClients;
|
||||||
import com.mongodb.client.MongoCollection;
|
import com.mongodb.client.MongoCollection;
|
||||||
import com.mongodb.client.MongoDatabase;
|
import com.mongodb.client.MongoDatabase;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
|
@ -3,8 +3,8 @@ version: '${version}'
|
||||||
main: me.unurled.raxen.Raxen
|
main: me.unurled.raxen.Raxen
|
||||||
author: unurled
|
author: unurled
|
||||||
api-version: 1.19
|
api-version: 1.19
|
||||||
depend: [ProtocolLib, PlaceholderAPI, 'Multiverse-Core', Citizens]
|
depend: [ ProtocolLib, PlaceholderAPI, 'Multiverse-Core', Citizens, HolographicDisplays ]
|
||||||
softdepend: [LuckPerms, Essentials, HolographicDisplays]
|
softdepend: [ LuckPerms, Essentials ]
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
reloadplugin:
|
reloadplugin:
|
||||||
|
@ -42,6 +42,10 @@ commands:
|
||||||
description: not very much used, more with right click on device
|
description: not very much used, more with right click on device
|
||||||
itemto64:
|
itemto64:
|
||||||
description: transform an item to it's 64encoded byte
|
description: transform an item to it's 64encoded byte
|
||||||
|
tutorial:
|
||||||
|
description: tutorial command
|
||||||
|
party:
|
||||||
|
description: party command
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
raxen.reload.cmd:
|
raxen.reload.cmd:
|
||||||
|
@ -68,3 +72,7 @@ permissions:
|
||||||
description: item to 64 command permission
|
description: item to 64 command permission
|
||||||
raxen.testholo.cmd:
|
raxen.testholo.cmd:
|
||||||
description: testholo command permission
|
description: testholo command permission
|
||||||
|
raxen.tutorial.cmd:
|
||||||
|
description: tutorial command permission
|
||||||
|
raxen.party.cmd:
|
||||||
|
description: party command permission
|
BIN
src/main/resources/schematics/template_tuto.schem
Normal file
BIN
src/main/resources/schematics/template_tuto.schem
Normal file
Binary file not shown.
Loading…
Reference in a new issue