diff --git a/.gitignore b/.gitignore index d8a5b8f..6b38285 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # User-specific stuff server/ -.idea/ +# .idea/ .vscode/ .settings/ .factorypath @@ -131,3 +131,5 @@ run/ /gradle/ resource_pack/raxen/assets/minecraft/ + +.idea/codeStyles/codeStyleConfig.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..f44e6dd --- /dev/null +++ b/.idea/.gitignore @@ -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 diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..e458dba --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +raxen \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..0c26b77 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,581 @@ + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..6385772 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..acff71d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..edf799d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.prettierrc.yml b/.prettierrc.yml new file mode 100644 index 0000000..739f85c --- /dev/null +++ b/.prettierrc.yml @@ -0,0 +1,10 @@ +# Prettier configuration +overrides: + - files: + - "*.java" + options: + printWidth: 80 + tabWidth: 4 + useTabs: false + trailingComma: "none" + endOfLine: "lf" \ No newline at end of file diff --git a/.woodpecker.yml b/.woodpecker.yml index 8c68956..ac6bb43 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -28,9 +28,10 @@ pipeline: - api_key commands: - export PRERELEASE=true + - cd scripts - chmod +x git_release.py - pip install giteapy - - python git_release.py --token "$API_KEY" --message "${DRONE_COMMIT_MESSAGE}" --prerelease $PRERELEASE --tag "${DRONE_TAG}" + - python git_release.py --token "$API_KEY" --message "${CI_COMMIT_MESSAGE}" --prerelease $PRERELEASE --tag "${CI_COMMIT_TAG}" when: event: tag diff --git a/README.md b/README.md index 17bb82c..1b913d2 100644 --- a/README.md +++ b/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. 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. -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. @unurled#0149\ 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 -you can see [TODO.md](/Elixium/raxen/src/branch/plugin/docs/TODO.md) in which I did a list of what we must do \ No newline at end of file +you can see [TODO.md](/Elixium/raxen/src/branch/plugin/docs/TODO.md) in which I did a list of what +we must do \ No newline at end of file diff --git a/build.gradle b/build.gradle index fd8b58b..c46931c 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ plugins { apply plugin: "java" apply plugin: "io.papermc.paperweight.userdev" +apply plugin: "com.github.johnrengelman.shadow" repositories { mavenLocal() @@ -48,41 +49,48 @@ repositories { maven { url = "https://repo.onarandombox.com/content/groups/public/" } + maven { + name = "Worldedit" + url = 'https://maven.enginehub.org/repo/' + } mavenCentral() } dependencies { // lombok stuff - implementation 'org.projectlombok:lombok:1.18.24' - annotationProcessor 'org.projectlombok:lombok:1.18.24' - testCompileOnly 'org.projectlombok:lombok:1.18.24' + implementation 'org.projectlombok:lombok:1.18.26' + annotationProcessor 'org.projectlombok:lombok:1.18.26' + testCompileOnly 'org.projectlombok:lombok:1.18.26' + + implementation 'org.apache.httpcomponents:httpclient:4.5.13' + implementation 'org.apache.httpcomponents:httpmime:4.5.13' // mongo stuff - implementation 'org.mongodb:mongodb-driver-sync:4.7.2' - implementation 'org.mongodb:bson:4.7.2' - implementation 'org.mongodb:mongodb-driver-core:4.7.2' + implementation 'org.mongodb:mongodb-driver-sync:4.9.1' + implementation 'org.mongodb:bson:4.9.1' + implementation 'org.mongodb:mongodb-driver-core:4.9.1' + + implementation 'redis.clients:jedis:4.3.1' compileOnly 'io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT' implementation 'de.tr7zw:item-nbt-api-plugin:2.11.2' // compileOnly 'de.tr7zw:item-nbt-api:2.11.2' - compileOnly 'com.comphenix.protocol:ProtocolLib:4.8.0' - compileOnly 'net.luckperms:api:5.4' + compileOnly 'com.comphenix.protocol:ProtocolLib:5.0.0' compileOnly 'com.github.MilkBowl:VaultAPI:1.7.1' compileOnly 'net.essentialsx:EssentialsX:2.19.7' - //compileOnly 'com.fastasyncworldedit:FastAsyncWorldEdit-Core:2.3.0' - //compileOnly 'com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit:2.3.0' - compileOnly 'me.clip:placeholderapi:2.11.2' + compileOnly 'com.sk89q.worldedit:worldedit-core:7.2.14' + compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.2.14' + compileOnly 'me.clip:placeholderapi:2.11.3' compileOnly('net.citizensnpcs:citizens-main:2.0.31-SNAPSHOT') { exclude group: '*', module: '*' } compileOnly 'com.onarandombox.multiversecore:Multiverse-Core:4.3.1' -// compileOnly 'me.filoghost.holographicdisplays:holographicdisplays-api:3.0.1' -// compileOnly fileTree(dir: 'libs', include: '*.jar') + implementation 'com.github.decentsoftware-eu:decentholograms:2.8.1' paperweightDevelopmentBundle("io.papermc.paper:dev-bundle:1.19.4-R0.1-SNAPSHOT") } group = 'me.unurled' -version = '0.5.7' +version = '0.6.0' description = 'Raxen' java { @@ -91,19 +99,10 @@ java { } } -publishing { - publications { - maven(MavenPublication) { - from(components.java) - } - } -} - tasks.withType(JavaCompile) { options.encoding = 'UTF-8' options.release = 17 options.compilerArgs += ["-Xlint:unchecked", "-Xlint:deprecation"] - } tasks { @@ -119,16 +118,34 @@ shadowJar { dependencies { include dependency('de.tr7zw:item-nbt-api-plugin:2.11.2') include dependency('de.tr7zw:item-nbt-api:2.11.2') - include dependency('org.mongodb:mongodb-driver-sync:4.7.2') - include dependency('org.mongodb:bson:4.7.2') - include dependency('org.mongodb:mongodb-driver-core:4.7.2') + include dependency('org.mongodb:mongodb-driver-sync:4.9.1') + include dependency('org.mongodb:bson:4.9.1') + include dependency('org.mongodb:mongodb-driver-core:4.9.1') + include dependency('com.github.decentsoftware-eu:decentholograms:2.8.1') + include dependency('org.apache.httpcomponents:httpclient:4.5.13') + include dependency('org.apache.httpcomponents:httpmime:4.5.13') + include dependency('redis.clients:jedis:4.3.1') } relocate("de.tr7zw", "me.unurled.libs.de.tr7zw") relocate("com.mongodb", 'me.unurled.libs.com.mongodb') relocate("org.bson", 'me.unurled.libs.org.bson') + relocate('eu.decentsoftware', 'me.unurled.libs.eu.decentsoftware') + relocate('org.apache', 'me.unurled.libs.org.apache') + relocate('redis.clients', 'me.unurled.libs.redis.clients') processResources { expand version: project.version } minimize() } +sourceSets { + main { + resources { + srcDirs = ['src/main/resources'] + } + } +} + +processResources { + exclude '**/*.schem' +} \ No newline at end of file diff --git a/docs/FUTURE.md b/docs/FUTURE.md index e372ada..616582a 100644 --- a/docs/FUTURE.md +++ b/docs/FUTURE.md @@ -9,18 +9,25 @@ Some RPG thing : - Raxen must do : - some survival and RPG(Class) thing - 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 - can use custom texture pack => in making - 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: - power: ranked from F, E, D, C, B, A, S, SS, SSS, world, unbeatable and so on - 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: - - 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 - 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 \ No newline at end of file diff --git a/docs/TODO.md b/docs/TODO.md index d9480d7..0205832 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -1,8 +1,42 @@ -- [x] refactor all abilities to make them compatible between entities and also making it easier to add them. -- [ ] make custom items (hard coded) -- [ ] make custom class (hard coded) -- [ ] make custom abilities (hard coded) -- [ ] make custom mods (hard coded) -- [ ] make gates -- [ ] a map -- [ ] a leveling system \ No newline at end of file +- [x] refactor all abilities to make them compatible between entities and also making it easier to + add them. +- [ ] make custom items (hard coded) / or all in db/json in Raxen plugin folder (like a serialized + version of it) +- [ ] custom items effects (hard coded) / or all in db/json in Raxen plugin (have some sort of + serliazed + 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 +- [ ] spells (hard coded) +- [-] party +- [ ] boss monster +- [ ] guilds +- [ ] quests (hard coded) and db/json +- [ ] filter chat +- [ ] resource pack (host, upload, compress) + +## tests + +- [ ] party +- [ ] combat +- [ ] class +- [ ] items +- [ ] item effects +- [ ] mobs +- [ ] skills +- [ ] abilities +- [ ] gates +- [ ] leveling system +- [ ] spells +- [ ] boss monster +- [ ] quests +- [ ] filter chat diff --git a/docs/examples/Effects.md b/docs/examples/Effects.md new file mode 100644 index 0000000..dc36f42 --- /dev/null +++ b/docs/examples/Effects.md @@ -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 +``` \ No newline at end of file diff --git a/docs/examples/Glyphs.md b/docs/examples/Glyphs.md new file mode 100644 index 0000000..8944b2c --- /dev/null +++ b/docs/examples/Glyphs.md @@ -0,0 +1,12 @@ +# Glyphs + +this is an example of a simple glyph + +```yaml +testGlyph: + Pack: + model: raxen/testGlyph + texture: raxen/testGlyph + char: "\uE000" + placeholder: ":test:" +``` \ No newline at end of file diff --git a/docs/examples/Items.md b/docs/examples/Items.md new file mode 100644 index 0000000..cdc1d5c --- /dev/null +++ b/docs/examples/Items.md @@ -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: 'Test Item' + material: DIAMOND + lore: + - 'Test Item' + - 'Custom Model Data: 1' + enchantments: + - 'DURABILITY:1' + effect: + - 'testEffect' +``` \ No newline at end of file diff --git a/docs/examples/Mobs.md b/docs/examples/Mobs.md new file mode 100644 index 0000000..fc4ed28 --- /dev/null +++ b/docs/examples/Mobs.md @@ -0,0 +1,32 @@ +# Mobs + +```yaml +testMob: + type: ZOMBIE + display_name: "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= +``` \ No newline at end of file diff --git a/docs/examples/README.md b/docs/examples/README.md new file mode 100644 index 0000000..158181d --- /dev/null +++ b/docs/examples/README.md @@ -0,0 +1,10 @@ +# Exemples + +see all the exemples in this folder : + +to create any of the following, create a new file in the folder type of your choice (e.g. ` +plugins/Raxen/items/exampleItem.yml`) + +- [Effects.md](/Elixium/raxen/src/branch/plugin/docs/examples/Effects.md) +- [Items.md](/Elixium/raxen/src/branch/plugin/docs/examples/Items.md) +- [Mobs.md](/Elixium/raxen/src/branch/plugin/docs/examples/Mobs.md) \ No newline at end of file diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 0000000..0901dc0 --- /dev/null +++ b/scripts/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +main.js +package-lock.json \ No newline at end of file diff --git a/git_release.py b/scripts/git_release.py similarity index 93% rename from git_release.py rename to scripts/git_release.py index 38aa546..388c492 100644 --- a/git_release.py +++ b/scripts/git_release.py @@ -23,10 +23,10 @@ owner = "Elixium" repo = "Raxen" body = giteapy.CreateReleaseOption(body=doc['message'], draft=False, name=doc['tag'], prerelease=doc['prerelease'], tag_name=doc['tag'], target_commitish="string") attachments = [] -for file in os.listdir(os.getcwd() +"/build/libs"): +for file in os.listdir(os.getcwd() +"../build/libs"): if file.endswith('.jar'): if file.startswith('raxen'): - attachments.append(os.getcwd() + '/build/libs/' + file) + attachments.append(os.getcwd() + '../build/libs/' + file) print(attachments) attachment1 = attachments[0] attachment2 = attachments[1] diff --git a/scripts/main.ts b/scripts/main.ts new file mode 100644 index 0000000..6c8eb03 --- /dev/null +++ b/scripts/main.ts @@ -0,0 +1,56 @@ +import { giteaApi, CreatePullReviewOptions } from 'gitea-js'; +import fetch from 'cross-fetch'; // You have to use a fetch compatible polyfill like cross-fetch for Node.JS +import fs = require('fs'); +import path = require('path'); + +const api = giteaApi('https://git.unurled.me', { + token: process.env.TOKEN, + customFetch: fetch, +}); + +const todo: { [file: string]: string[]} = {}; + +function searchTodo(file: string): void { + let compteur = 0; + const lines: string[] = fs.readFileSync(file, 'utf-8').split('\n'); + for (const line of lines) { + compteur += 1; + if (line.match(/[\S\s]*\btodo\b/i)) { + if (file in todo) { + todo[file].push(line.trim() + " (line " + compteur + ")"); + } else { + todo[file] = [line.trim() + " (line " + compteur + ")"]; + } + } + } + +} + +function searchTodoInDir(dir: string): void { + fs.readdirSync(dir).forEach(file => { + const filePath = path.join(dir, file); + if (fs.statSync(filePath).isDirectory()) { + searchTodoInDir(filePath); + } + if (file.endsWith(".java")) { + searchTodo(filePath); + } + }); +} + +function searchTodoInProject(): void { + const pwd = path.dirname(path.dirname(path.resolve(__filename))); + searchTodoInDir(path.join(pwd, "src/main/java/me/unurled/raxen")); +} + +searchTodoInProject(); + +console.log(); +const index: number = Number.parseInt(process.env.CI_COMMIT_PULL_REQUEST); +const body: CreatePullReviewOptions = { + body: "# TODO that needs to be done by next big release :\n```json\n" + JSON.stringify(todo, null, "\t") + "\n```", + commit_id: process.env.CI_COMMIT_SHA, +}; + +const pr_review = api.repos.repoCreatePullReview(process.env.CI_REPO_OWNER, process.env.CI_REPO_NAME, index, body, {}); +pr_review.then(res => console.log(res)).catch(err => console.log(err)); diff --git a/scripts/package.json b/scripts/package.json new file mode 100644 index 0000000..8c9836b --- /dev/null +++ b/scripts/package.json @@ -0,0 +1,20 @@ +{ + "name": "scripts", + "version": "1.0.0", + "description": "a script for pull request comment", + "main": "main.js", + "author": "unurled", + "license": "MIT", + "scripts": { + "build": "tsc", + "start": "node main.js" + }, + "dependencies": { + "cross-fetch": "^3.1.5", + "gitea-js": "^1.19.1" + }, + "devDependencies": { + "@types/node": "^18.16.0", + "typescript": "^5.0.4" + } +} diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 0000000..bd562e9 --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "module": "CommonJS" + }, + "files": [ + "main.ts" + ] +} \ No newline at end of file diff --git a/src/main/java/me/unurled/raxen/Raxen.java b/src/main/java/me/unurled/raxen/Raxen.java index 1335948..5a8264f 100644 --- a/src/main/java/me/unurled/raxen/Raxen.java +++ b/src/main/java/me/unurled/raxen/Raxen.java @@ -16,153 +16,167 @@ import org.bukkit.plugin.java.JavaPlugin; public final class Raxen extends JavaPlugin { - private static final String prefix = - "Rx> "; + private static final String prefix = + "Rx> "; - @Getter - private static String version = "0.5.7"; + @Getter + private static String version = "0.6.0"; - private boolean loading = true; - private final PluginManager pm = getServer().getPluginManager(); + private boolean loading = true; + private final PluginManager pm = getServer().getPluginManager(); - private static Raxen plugin; + private static Raxen plugin; - private static Logger logger; + private static Logger logger; - private static Config config; + private static Config config; - private static PlayerConfig playerConfig; + private static PlayerConfig playerConfig; - @Getter - private ProtocolManager protocolManager; + @Getter + private ProtocolManager protocolManager; - @Getter - private Manager manager; + @Getter + private Manager manager; - /** - * Method when the server launch the plugin. - */ - @Override - public void onEnable() { - plugin = this; - logger = getLogger(); + /** + * Method when the server launch the plugin. + */ + @Override + public void onEnable() { + plugin = this; + logger = getLogger(); - version = this.getPluginMeta().getVersion(); + version = this.getPluginMeta().getVersion(); - manager = new Manager(); - manager.set(plugin); + manager = new Manager(); + manager.set(plugin); - // Config - config = new Config(plugin); + // Config + config = new Config(plugin); - protocolManager = ProtocolLibrary.getProtocolManager(); + protocolManager = ProtocolLibrary.getProtocolManager(); - playerConfig = new PlayerConfig(plugin); + playerConfig = new PlayerConfig(plugin); - //register Commands and Events - registerCommands(); - registerEvents(); + //register Commands and Events + registerCommands(); + registerEvents(); - Bukkit - .getConsoleSender() - .sendMessage( - colorComp(prefix + "Server Started Successfully!") - ); + Bukkit + .getConsoleSender() + .sendMessage( + colorComp( + prefix + "Server Started Successfully!" + ) + ); - manager.getListenerManager().getServerPingEvent().setLoading(false); - loading = false; - } - - /** - * register the command in the command manager class. - */ - private void registerCommands() { - manager.getCommandManager().register(); - - Bukkit - .getConsoleSender() - .sendMessage(colorComp(prefix + "Commands Registered!")); - } - - /** - * register the events in the event manager class. - */ - private void registerEvents() { - manager.getListenerManager().register(); - - Bukkit - .getConsoleSender() - .sendMessage(colorComp(prefix + "Events Registered!")); - } - - /** - * Method when the server stops the plugin. - */ - @Override - public void onDisable() { - if (!loading) { - manager.getListenerManager().getServerPingEvent().setLoading(true); - Reload.kickAll(); - - playerConfig.close(); + manager.getListenerManager().getServerPingEvent().setLoading(false); + loading = false; } - Bukkit - .getConsoleSender() - .sendMessage( - colorComp(prefix + "Server Stopped Successfully!") - ); - } + /** + * register the command in the command manager class. + */ + private void registerCommands() { + manager.getCommandManager().register(); - /** - * getter for the logger - * @return the plugin logger - */ - public Logger getPluginLogger() { - return logger; - } + Bukkit + .getConsoleSender() + .sendMessage( + colorComp(prefix + "Commands Registered!") + ); + } - /** - * getter for the bukkit's plugin manager - * @return plugin manager - */ - public PluginManager getPm() { - return pm; - } + /** + * register the events in the event manager class. + */ + private void registerEvents() { + manager.getListenerManager().register(); - /** - * return the instance which is launched. - * @return main instance - */ - public Raxen getPlugin() { - return plugin; - } + Bukkit + .getConsoleSender() + .sendMessage( + colorComp(prefix + "Events Registered!") + ); + } - /** - * getter for the raxen prefix - * @return string prefix - */ - public static String getPrefix() { - return prefix; - } + /** + * Method when the server stops the plugin. + */ + @Override + public void onDisable() { + if (!loading) { + manager.getListenerManager().getServerPingEvent().setLoading(true); + Reload.kickAll(); - /** - * getter for the yml's player configs. - * @return player config instance - */ - public PlayerConfig getPlayerConfig() { - return playerConfig; - } + playerConfig.close(); + } - /** - * getter for an instance of the config utility class - * @return raxen's config - */ - public Config getConf() { - return config; - } + // save tutorial state - public void disable() { - this.setEnabled(false); - } + Bukkit + .getConsoleSender() + .sendMessage( + colorComp(prefix + "Server Stopped Successfully!") + ); + } + + /** + * getter for the logger + * + * @return the plugin logger + */ + public Logger getPluginLogger() { + return logger; + } + + /** + * getter for the bukkit's plugin manager + * + * @return plugin manager + */ + public PluginManager getPm() { + return pm; + } + + /** + * return the instance which is launched. + * + * @return main instance + */ + public Raxen getPlugin() { + return plugin; + } + + /** + * getter for the raxen prefix + * + * @return string prefix + */ + public static String getPrefix() { + return prefix; + } + + /** + * getter for the yml's player configs. + * + * @return player config instance + */ + public PlayerConfig getPlayerConfig() { + return playerConfig; + } + + /** + * getter for an instance of the config utility class + * + * @return raxen's config + */ + public Config getConf() { + return config; + } + + public void disable() { + this.setEnabled(false); + } } diff --git a/src/main/java/me/unurled/raxen/commands/RaxenCommand.java b/src/main/java/me/unurled/raxen/commands/RaxenCommand.java index b12bb22..ff6494c 100644 --- a/src/main/java/me/unurled/raxen/commands/RaxenCommand.java +++ b/src/main/java/me/unurled/raxen/commands/RaxenCommand.java @@ -1,6 +1,12 @@ package me.unurled.raxen.commands; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorComp; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.coloredString; +import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.msgPlayer; +import static me.unurled.raxen.utils.Utils.msgSender; +import static me.unurled.raxen.utils.Utils.stringToComp; import java.util.List; import me.unurled.raxen.Raxen; @@ -16,207 +22,220 @@ import org.jetbrains.annotations.Nullable; public class RaxenCommand implements TabExecutor { - private Raxen main; + private Raxen main; - public RaxenCommand(Raxen main) { - this.main = main; - } + public RaxenCommand(Raxen main) { + this.main = main; + } - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command cmd, - @NotNull String msg, - @NotNull String[] args - ) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (!(player.hasPermission("raxen."))) { - msgPlayer( - player, - coloredString(Raxen.getPrefix()) + - colorTextComp( - "You can't execute this command. Insufficient permission." - ) - ); - } - switch (args.length) { - case 0 -> msgPl(player, 0); - case 1 -> { - switch (args[0]) { - case "mongodb", "mongo", "MONGODB", "MONGO" -> { - //print info about connection - sender.sendMessage( - stringToComp( - Raxen.getPrefix() + - colorTextComp( - "Printing About Raxen's MongoDB connection..." - ) - ) - ); - msgPlayer( - player, - coloredString(Raxen.getPrefix()) + - colorTextComp( - "---------------------------------------------" - ) - ); - msgPlayer(player, colorTextComp("MONGO DB")); - msgPlayer( - player, - StorageManager - .getMongodb() - .getMongoClient() - .getClusterDescription() - .toString() - ); - msgPlayer( - player, - StorageManager.getMongodb().getMongoDatabase().getName() - ); - msgPlayer( - player, - StorageManager - .getMongodb() - .getMongoCollection() - .getNamespace() - .toString() - ); - msgPlayer( - player, - "---------------------------------------------" - ); + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command cmd, + @NotNull String msg, + @NotNull String[] args + ) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (!(player.hasPermission("raxen."))) { + msgPlayer( + player, + coloredString(Raxen.getPrefix()) + + colorTextComp( + "You can't execute this command. Insufficient permission." + ) + ); } - case "v", "version", "ver" -> { - msgPlayer(player, Raxen.getVersion()); + switch (args.length) { + case 0 -> msgPl(player, 0); + case 1 -> { + switch (args[0]) { + case "mongodb", "mongo", "MONGODB", "MONGO" -> { + //print info about connection + sender.sendMessage( + stringToComp( + Raxen.getPrefix() + + colorTextComp( + "Printing About Raxen's MongoDB connection..." + ) + ) + ); + msgPlayer( + player, + coloredString(Raxen.getPrefix()) + + colorTextComp( + "---------------------------------------------" + ) + ); + msgPlayer( + player, + colorTextComp("MONGO DB") + ); + msgPlayer( + player, + StorageManager + .getMongodb() + .getMongoClient() + .getClusterDescription() + .toString() + ); + msgPlayer( + player, + StorageManager + .getMongodb() + .getMongoDatabase() + .getName() + ); + msgPlayer( + player, + StorageManager + .getMongodb() + .getMongoCollection() + .getNamespace() + .toString() + ); + msgPlayer( + player, + "---------------------------------------------" + ); + } + case "v", "version", "ver" -> { + msgPlayer(player, Raxen.getVersion()); + } + case "hemlp", "?", "h" -> { + //print help + } + } + } } - case "hemlp", "?", "h" -> { - //print help + } else { + switch (args.length) { + case 0 -> { + msgSender( + sender, + Raxen.getPrefix() + "Printing About Raxen...", + "---------------------------------------------", + " Raxen ", + " - Version: " + Raxen.getVersion(), + " - Author: Unurled" + ); + TextComponent txt = colorTextComp( + " - Website: https://unurled.me" + ); + sender.sendMessage(txt); + sender.sendMessage( + colorComp( + "---------------------------------------------" + ) + ); + return true; + } + case 1 -> { + switch (args[0]) { + case "mongodb", "mongo", "MONGODB", "MONGO" -> { + //print info about connection + msgSender( + sender, + Raxen.getPrefix() + + "Printing About Raxen's MongoDB connection...", + "---------------------------------------------" + + "MONGO DB" + ); + sender.sendMessage( + stringToComp( + StorageManager + .getMongodb() + .getMongoClient() + .getClusterDescription() + .toString() + ) + ); + sender.sendMessage( + stringToComp( + StorageManager + .getMongodb() + .getMongoDatabase() + .getName() + ) + ); + sender.sendMessage( + stringToComp( + StorageManager + .getMongodb() + .getMongoCollection() + .getNamespace() + .toString() + ) + ); + sender.sendMessage( + stringToComp( + coloredString( + "---------------------------------------------" + ) + ) + ); + return true; + } + case "v", "version", "ver" -> { + msgSender( + sender, + Raxen.getPrefix() + + "Printing About Raxen...", + "---------------------------------------------", + " Raxen ", + " - Version: " + Raxen.getVersion(), + " - Author: Un&eurled" + ); + TextComponent txt = colorTextComp( + " - Website: https://unurled.me" + ); + sender.sendMessage(txt); + sender.sendMessage( + colorComp( + "---------------------------------------------" + ) + ); + return true; + } + case "hemlp", "?", "h" -> debug(main, "print help"); //print help + } + } } - } } - } - } else { - switch (args.length) { - case 0 -> { - msgSender( - sender, - Raxen.getPrefix() + "Printing About Raxen...", - "---------------------------------------------", - " Raxen ", - " - Version: " + Raxen.getVersion(), - " - Author: Unurled" - ); - TextComponent txt = colorTextComp( - " - Website: https://unurled.me" - ); - sender.sendMessage(txt); - sender.sendMessage( - colorComp("---------------------------------------------") - ); - return true; - } - case 1 -> { - switch (args[0]) { - case "mongodb", "mongo", "MONGODB", "MONGO" -> { - //print info about connection - msgSender( - sender, - Raxen.getPrefix() + - "Printing About Raxen's MongoDB connection...", - "---------------------------------------------" + - "MONGO DB" - ); - sender.sendMessage( - stringToComp( - StorageManager - .getMongodb() - .getMongoClient() - .getClusterDescription() - .toString() + return false; + } + + public void msgPl(Player player, Integer in) { + switch (in) { + case 0: + msgPlayer( + player, + Raxen.getPrefix() + "Printing About Raxen...", + "---------------------------------------------", + " Raxen ", + " - Version: " + Raxen.getVersion(), + " - Author: Un&eurled" + ); + TextComponent txt = (TextComponent) colorComp( + " - Website: https://unurled.me" ) - ); - sender.sendMessage( - stringToComp( - StorageManager.getMongodb().getMongoDatabase().getName() - ) - ); - sender.sendMessage( - stringToComp( - StorageManager - .getMongodb() - .getMongoCollection() - .getNamespace() - .toString() - ) - ); - sender.sendMessage( - stringToComp( - coloredString( + .clickEvent(ClickEvent.openUrl("https://unurled.me")); + player.sendMessage(txt); + msgPlayer( + player, + "", "---------------------------------------------" - ) - ) - ); - return true; - } - case "v", "version", "ver" -> { - msgSender( - sender, - Raxen.getPrefix() + "Printing About Raxen...", - "---------------------------------------------", - " Raxen ", - " - Version: " + Raxen.getVersion(), - " - Author: Un&eurled" - ); - TextComponent txt = colorTextComp( - " - Website: https://unurled.me" - ); - sender.sendMessage(txt); - sender.sendMessage( - colorComp("---------------------------------------------") - ); - return true; - } - case "hemlp", "?", "h" -> //print help - debug(main, "print help"); - } + ); } - } } - return false; - } - public void msgPl(Player player, Integer in) { - switch (in) { - case 0: - msgPlayer( - player, - Raxen.getPrefix() + "Printing About Raxen...", - "---------------------------------------------", - " Raxen ", - " - Version: " + Raxen.getVersion(), - " - Author: Un&eurled" - ); - TextComponent txt = (TextComponent) colorComp( - " - Website: https://unurled.me" - ) - .clickEvent(ClickEvent.openUrl("https://unurled.me")); - player.sendMessage(txt); - msgPlayer( - player, - "", - "---------------------------------------------" - ); + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + return null; } - } - - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - return null; - } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/BuildCommand.java b/src/main/java/me/unurled/raxen/commands/admin/BuildCommand.java new file mode 100644 index 0000000..8c8779e --- /dev/null +++ b/src/main/java/me/unurled/raxen/commands/admin/BuildCommand.java @@ -0,0 +1,108 @@ +package me.unurled.raxen.commands.admin; + +import java.util.ArrayList; +import java.util.List; +import me.unurled.raxen.Raxen; +import me.unurled.raxen.utils.Utils; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class BuildCommand implements TabExecutor { + + private Raxen raxen; + + List complete = new ArrayList<>(); + + public BuildCommand(Raxen raxen) { + this.raxen = raxen; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, + @NotNull String label, @NotNull String[] args) { + if (!(sender instanceof Player)) { + Utils.errorConsoleSender(sender); + return true; + } + Player p = (Player) sender; + if (args.length == 0) { + p.sendMessage(Utils.colorComp( + "/build [discard|edit|hide|list|on|remove|save|show|tp]")); + return true; + } + if (args.length == 1) { + switch (args[0]) { + case "discard": + p.sendMessage(Utils.colorComp("Discarded build!")); + return true; + case "edit": + p.sendMessage(Utils.colorComp("Editing build!")); + return true; + case "hide": + p.sendMessage(Utils.colorComp("Hiding build!")); + return true; + case "list": + p.sendMessage(Utils.colorComp("Listing builds!")); + return true; + case "on": + p.sendMessage(Utils.colorComp("Build mode enabled!")); + return true; + case "remove": + p.sendMessage(Utils.colorComp("Removed build!")); + return true; + case "save": + p.sendMessage(Utils.colorComp("Saved build!")); + return true; + case "show": + p.sendMessage(Utils.colorComp("Showing build!")); + return true; + case "tp": + p.sendMessage(Utils.colorComp("Teleporting to build!")); + return true; + default: + p.sendMessage(Utils.colorComp( + "/build [discard|edit|hide|list|on|remove|save|show|tp]")); + return true; + } + } + return false; + } + + @Override + public @Nullable List onTabComplete(@NotNull CommandSender sender, + @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (complete.isEmpty()) { + complete.add("discard"); + complete.add("edit"); + complete.add("hide"); + complete.add("list"); + complete.add("on"); + complete.add("remove"); + complete.add("save"); + complete.add("show"); + complete.add("tp"); + } + List 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; + } +} diff --git a/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java b/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java index c070758..4208aae 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java @@ -1,7 +1,10 @@ package me.unurled.raxen.commands.admin; import static me.unurled.raxen.utils.Items.customModelData; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorComp; +import static me.unurled.raxen.utils.Utils.errorConsoleSender; +import static me.unurled.raxen.utils.Utils.isInt; +import static me.unurled.raxen.utils.Utils.noPerms; import java.util.ArrayList; import java.util.Arrays; @@ -19,104 +22,109 @@ import org.jetbrains.annotations.Nullable; public class CustomModelDataCommand implements TabExecutor { - /** - * change custom model data of an item - * @param sender Source of the command - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args Passed command arguments - * @return - */ - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - if (!(sender instanceof Player)) { - errorConsoleSender(sender); - return true; + /** + * change custom model data of an item + * + * @param sender Source of the command + * @param command Command which was executed + * @param label Alias of the command which was used + * @param args Passed command arguments + * @return + */ + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + if (!(sender instanceof Player)) { + errorConsoleSender(sender); + return true; + } + Player p = (Player) sender; + if (!(p.hasPermission("raxen.custommodeldata.cmd"))) { + p.sendMessage(noPerms()); + return true; + } + ItemStack it = p.getInventory().getItemInMainHand(); + if (args.length == 0) { + p.sendMessage( + colorComp( + "Usage: /custommodeldata " + ) + ); + return true; + } + if (!(isInt(args[0]))) { + Material material = Material.getMaterial(args[1]); + if (material != null) { + it = + customModelData( + new ItemStack(material), + Integer.parseInt(args[0]) + ); + p.getInventory().setItemInMainHand(it); + p.updateInventory(); + } else { + p.sendMessage( + colorComp( + "Please specify a valid Item Name or a valid Integer." + ) + ); + } + } else { + if (it != null && it.getType() != Material.AIR) { // check if player has an item in hand + // has item in hand applying the custom model data + it = customModelData(it, Integer.parseInt(args[0])); + p.getInventory().setItemInMainHand(it); + p.updateInventory(); + } else { + p.sendMessage( + colorComp( + "Get an item in hand please or specify an item" + ) + ); + p.sendMessage( + colorComp( + "Usage: /custommodeldata " + ) + ); + } + } + return true; } - Player p = (Player) sender; - if (!(p.hasPermission("raxen.custommodeldata.cmd"))) { - p.sendMessage(noPerms()); - return true; - } - ItemStack it = p.getInventory().getItemInMainHand(); - if (args.length == 0) { - p.sendMessage( - colorComp( - "Usage: /custommodeldata " - ) - ); - return true; - } - if (!(isInt(args[0]))) { - Material material = Material.getMaterial(args[1]); - if (material != null) { - it = - customModelData(new ItemStack(material), Integer.parseInt(args[0])); - p.getInventory().setItemInMainHand(it); - p.updateInventory(); - } else { - p.sendMessage( - colorComp( - "Please specify a valid Item Name or a valid Integer." - ) - ); - } - } else { - if (it != null && it.getType() != Material.AIR) { // check if player has an item in hand - // has item in hand applying the custom model data - it = customModelData(it, Integer.parseInt(args[0])); - p.getInventory().setItemInMainHand(it); - p.updateInventory(); - } else { - p.sendMessage( - colorComp("Get an item in hand please or specify an item") - ); - p.sendMessage( - colorComp( - "Usage: /custommodeldata " - ) - ); - } - } - return true; - } - /** - * @param sender Source of the command. For players tab-completing a - * command inside of a command block, this will be the player, not - * the command block. - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args The arguments passed to the command, including final - * partial argument to be completed - * @return - */ - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - final List completions = new ArrayList<>(); + /** + * @param sender Source of the command. For players tab-completing a command inside of a + * command block, this will be the player, not the command block. + * @param command Command which was executed + * @param label Alias of the command which was used + * @param args The arguments passed to the command, including final partial argument to be + * completed + * @return + */ + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + final List completions = new ArrayList<>(); - List SUB_COMMANDS = new ArrayList<>(); + List SUB_COMMANDS = new ArrayList<>(); - if (!(isInt(args[0]))) { - return Arrays.asList("§c" + args[0]); + if (!(isInt(args[0]))) { + return Arrays.asList("§c" + args[0]); + } + if (args.length == 2) { + for (Material mat : Material.values()) { + SUB_COMMANDS.add(mat.name()); + } + StringUtil.copyPartialMatches(args[1], SUB_COMMANDS, completions); + Collections.sort(completions); + } + return completions; } - if (args.length == 2) { - for (Material mat : Material.values()) { - SUB_COMMANDS.add(mat.name()); - } - StringUtil.copyPartialMatches(args[1], SUB_COMMANDS, completions); - Collections.sort(completions); - } - return completions; - } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/EntitiyCommand.java b/src/main/java/me/unurled/raxen/commands/admin/EntitiyCommand.java index 2afc02a..1abb4bf 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/EntitiyCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/EntitiyCommand.java @@ -9,41 +9,41 @@ import org.jetbrains.annotations.Nullable; public class EntitiyCommand implements TabExecutor { - /** - * Get the egg spawn of a custom entity :) - * @param sender Source of the command - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args Passed command arguments - * @return - */ - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - return false; - } + /** + * Get the egg spawn of a custom entity :) + * @param sender Source of the command + * @param command Command which was executed + * @param label Alias of the command which was used + * @param args Passed command arguments + * @return + */ + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + return false; + } - /** - * @param sender Source of the command. For players tab-completing a - * command inside a command block, this will be the player, not - * the command block. - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args The arguments passed to the command, including final - * partial argument to be completed - * @return - */ - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - return null; - } + /** + * @param sender Source of the command. For players tab-completing a + * command inside a command block, this will be the player, not + * the command block. + * @param command Command which was executed + * @param label Alias of the command which was used + * @param args The arguments passed to the command, including final + * partial argument to be completed + * @return + */ + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/ItemListCommand.java b/src/main/java/me/unurled/raxen/commands/admin/ItemListCommand.java index d6b507d..d50c576 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/ItemListCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/ItemListCommand.java @@ -1,6 +1,8 @@ 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 lombok.Getter; @@ -15,49 +17,56 @@ import org.jetbrains.annotations.Nullable; public class ItemListCommand implements TabExecutor { - private Raxen main; + private Raxen main; - @Getter - private ItemListGui itemListGui; + @Getter + private ItemListGui itemListGui; - public ItemListCommand(Raxen main) { - this.main = main; - this.itemListGui = new ItemListGui(this.main); - } - - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command cmd, - @NotNull String msg, - @NotNull String[] args - ) { - if (!(sender instanceof Player)) { - log("Console can't execute this command atm."); - return true; + public ItemListCommand(Raxen main) { + this.main = main; + this.itemListGui = new ItemListGui(this.main); } - Player player = (Player) sender; - if (!(player.hasPermission("raxen.itemlist.cmd"))) { - msgPlayer( - player, - colorString( - "You'dont have the permission to execute this command." - ) - ); - return true; - } - //openGui logic - player.openInventory(itemListGui.getInv()); - return false; - } - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - return null; - } + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command cmd, + @NotNull String msg, + @NotNull String[] args + ) { + if (!(sender instanceof Player)) { + log("Console can't execute this command atm."); + return true; + } + Player player = (Player) sender; + if (!(player.hasPermission("raxen.itemlist.cmd"))) { + msgPlayer( + player, + colorString( + "You'dont have the permission to execute this command." + ) + ); + return true; + } + int page = 1; + if (args.length > 0) { + try { + page = Integer.parseInt(args[0]); + } catch (NumberFormatException ignored) { + } + } + //openGui logic + itemListGui.openInventory(player, page); + return false; + } + + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java b/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java index 8638a31..851dee9 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java +++ b/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java @@ -1,7 +1,8 @@ package me.unurled.raxen.commands.admin; import static me.unurled.raxen.utils.Items.itemTo64; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.errorConsoleSender; +import static me.unurled.raxen.utils.Utils.msgPlayer; import java.util.List; import org.bukkit.command.Command; @@ -13,46 +14,45 @@ import org.jetbrains.annotations.Nullable; public class ItemTo64Command implements TabExecutor { - /** - * @param sender Source of the command - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args Passed command arguments - * @return - */ - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - if (sender instanceof Player p) { - msgPlayer(p, itemTo64(p.getInventory().getItemInMainHand())); - } else { - errorConsoleSender(sender); - return true; + /** + * @param sender Source of the command + * @param command Command which was executed + * @param label Alias of the command which was used + * @param args Passed command arguments + * @return + */ + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + if (sender instanceof Player p) { + msgPlayer(p, itemTo64(p.getInventory().getItemInMainHand())); + } else { + errorConsoleSender(sender); + return true; + } + return false; } - return false; - } - /** - * @param sender Source of the command. For players tab-completing a - * command inside of a command block, this will be the player, not - * the command block. - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args The arguments passed to the command, including final - * partial argument to be completed - * @return - */ - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - return null; - } + /** + * @param sender Source of the command. For players tab-completing a command inside of a + * command block, this will be the player, not the command block. + * @param command Command which was executed + * @param label Alias of the command which was used + * @param args The arguments passed to the command, including final partial argument to be + * completed + * @return + */ + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java b/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java index 8267eca..53b3b8b 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java @@ -1,7 +1,11 @@ package me.unurled.raxen.commands.admin; import static me.unurled.raxen.components.entity.player.PlayerUtils.updateSkills; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorString; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.error; +import static me.unurled.raxen.utils.Utils.msgPlayer; import de.tr7zw.nbtapi.NBTItem; import java.util.ArrayList; @@ -17,123 +21,136 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class NbtCommand implements TabExecutor { - private final Raxen main; + private final Raxen main; - public NbtCommand(Raxen main) { - this.main = main; - } + public NbtCommand(Raxen main) { + this.main = main; + } - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command cmd, - @NotNull String msg, - @NotNull String[] args - ) { - if (!(sender instanceof Player player)) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - colorString("You can't execute this command as the Console!") - ); - return true; - } - if (player.getInventory().getItemInMainHand().getType() == Material.AIR) { - msgPlayer(player, colorTextComp("You must hold an Item in hand.")); - return true; - } else { - player.getInventory().getItemInMainHand(); - } - switch (args.length) { - case 0, 1 -> msgPlayer( - player, - colorTextComp("You must specify an nbt and an int.") - ); - case 2 -> { - debug("'" + args[0] + "'", "'" + args[1] + "'"); - ItemStack it = player.getInventory().getItemInMainHand(); - NBTItem nbti = new NBTItem(it); - int a = 0; - if (nbti.hasTag(args[0])) { - a = nbti.getInteger(args[0]); + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command cmd, + @NotNull String msg, + @NotNull String[] args + ) { + if (!(sender instanceof Player player)) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + colorString( + "You can't execute this command as the Console!" + ) + ); + return true; } - List lore = new ArrayList<>(); - // ItemMeta itm = it.getItemMeta(); - // lore.add((Component) itm.lore()); - boolean yes = false; - boolean ever = false; - for (Component ct : lore) { - if (ct != null) { - if (ct.contains(Component.text("Attributes:"))) { - yes = true; - ever = true; - } else { - if (yes) { - //ct.append(Component.text(colorString(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a)))); deprecated - yes = false; - } + if ( + player.getInventory().getItemInMainHand().getType() == Material.AIR + ) { + msgPlayer( + player, + colorTextComp("You must hold an Item in hand.") + ); + return true; + } else { + player.getInventory().getItemInMainHand(); + } + switch (args.length) { + case 0, 1 -> msgPlayer( + player, + colorTextComp("You must specify an nbt and an int.") + ); + case 2 -> { + debug("'" + args[0] + "'", "'" + args[1] + "'"); + ItemStack it = player.getInventory().getItemInMainHand(); + NBTItem nbti = new NBTItem(it); + String a = ""; + if (nbti.hasTag(args[0])) { + a = nbti.getString(args[0]); + } + List lore = new ArrayList<>(); + // ItemMeta itm = it.getItemMeta(); + // lore.add((Component) itm.lore()); + boolean yes = false; + boolean ever = false; + for (Component ct : lore) { + if (ct != null) { + if (ct.contains(Component.text("Attributes:"))) { + yes = true; + ever = true; + } else { + if (yes) { + //ct.append(Component.text(colorString(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a)))); deprecated + yes = false; + } + } + } + } + if (!ever) { + lore.add(colorTextComp("Attributes:")); + //lore.add(colorTextComp(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a))); deprecated + } + // itm.lore(lore); + // it.setItemMeta(itm); + PlayerManager pm = + ( + (Raxen) Objects.requireNonNull( + Bukkit.getPluginManager().getPlugin("Raxen") + ) + ).getManager() + .getPlayerManager(); + try { + nbti.setInteger( + args[0], + Integer.parseInt(args[1]) + Integer.parseInt(a) + ); + } catch (NumberFormatException ignored) { + nbti.setString(args[0], args[1]); + } + if (nbti.hasTag("SPEED")) { + pm.getSpeed().add(player, nbti.getInteger("SPEED")); + } + if (nbti.hasTag("HEALTH")) { + pm.getHealth().add(player, nbti.getInteger("HEALTH")); + } + if (nbti.hasTag("DEFENSE")) { + pm.getDefense().add(player, nbti.getInteger("DEFENSE")); + } + if (nbti.hasTag("STRENGTH")) { + pm.getStrength().add(player, nbti.getInteger("STRENGTH")); + } + it = nbti.getItem(); + msgPlayer( + player, + colorTextComp( + Raxen.getPrefix() + + "You successfully added the nbt " + + /*attributes(args[0])*/args[0] + + "with " + + args[1] + + "." + ) + ); + updateSkills(main, player); + player + .getInventory() + .setItem(player.getInventory().getHeldItemSlot(), it); } - } } - if (!ever) { - lore.add(colorTextComp("Attributes:")); - //lore.add(colorTextComp(attributes(args[0]) + ": " + (Integer.parseInt(args[1]) + a))); deprecated - } - // itm.lore(lore); - // it.setItemMeta(itm); - PlayerManager pm = - ( - (Raxen) Objects.requireNonNull( - Bukkit.getPluginManager().getPlugin("Raxen") - ) - ).getManager() - .getPlayerManager(); - nbti.setInteger(args[0], Integer.parseInt(args[1]) + a); - if (nbti.hasTag("SPEED")) { - pm.getSpeed().add(player, nbti.getInteger("SPEED")); - } - if (nbti.hasTag("HEALTH")) { - pm.getHealth().add(player, nbti.getInteger("HEALTH")); - } - if (nbti.hasTag("DEFENSE")) { - pm.getDefense().add(player, nbti.getInteger("DEFENSE")); - } - if (nbti.hasTag("STRENGTH")) { - pm.getStrength().add(player, nbti.getInteger("STRENGTH")); - } - it = nbti.getItem(); - msgPlayer( - player, - colorTextComp( - Raxen.getPrefix() + - "You successfully added the nbt " + - /*attributes(args[0])*/args[0] + - "with " + - args[1] + - "." - ) - ); - updateSkills(main, player); - player - .getInventory() - .setItem(player.getInventory().getHeldItemSlot(), it); - } + return true; } - return true; - } - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - return null; - } + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/ReloadCommand.java b/src/main/java/me/unurled/raxen/commands/admin/ReloadCommand.java index 89115e3..f7acda5 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/ReloadCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/ReloadCommand.java @@ -1,6 +1,8 @@ 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 me.unurled.raxen.utils.Reload; @@ -9,42 +11,48 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class ReloadCommand implements TabExecutor { - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String msg, - @NotNull String[] args - ) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (!player.hasPermission("raxen.reload.cmd")) { - player.sendMessage(noPerms()); - return true; - } + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String msg, + @NotNull String[] args + ) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (!player.hasPermission("raxen.reload.cmd")) { + player.sendMessage(noPerms()); + return true; + } + } + Reload.kickAll(); + log( + colorString( + "Server stopping!\n Using: /rlpl.\n Please wait a little bit." + ) + ); + new BukkitRunnable() { + @Override + public void run() { + Bukkit.getServer().shutdown(); + } + }.runTaskLater(Bukkit.getPluginManager().getPlugin("Raxen"), 80L); + return false; } - Reload.kickAll(); - log( - colorString( - "Server stopping!\n Using: /rlpl.\n Please wait a little bit." - ) - ); - Bukkit.getServer().shutdown(); - return false; - } - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - return null; - } + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java b/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java index 66e6c2f..0141ee0 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java +++ b/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java @@ -1,13 +1,17 @@ package me.unurled.raxen.commands.admin; -import static me.unurled.raxen.components.entity.other.EntityUtils.setNameSpacedKeys; import static me.unurled.raxen.utils.Items.itemFrom64; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.error; +import static me.unurled.raxen.utils.Utils.getStringFromArg; +import static me.unurled.raxen.utils.Utils.log; +import static me.unurled.raxen.utils.Utils.noPerms; +import static me.unurled.raxen.utils.Utils.setNullInArgs; +import static me.unurled.raxen.utils.Utils.validateArgs; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Objects; import me.unurled.raxen.Raxen; import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import org.bukkit.Bukkit; @@ -26,187 +30,190 @@ import org.jetbrains.annotations.Nullable; public class SpawnEntity implements TabExecutor { - private Raxen main; - private EntityNamespacedKey namespacedKey; + private Raxen main; + private EntityNamespacedKey namespacedKey; - public SpawnEntity(Raxen main) { - this.main = main; - this.namespacedKey = new EntityNamespacedKey(main); - } + public SpawnEntity(Raxen main) { + this.main = main; + this.namespacedKey = new EntityNamespacedKey(main); + } - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - if (!(sender instanceof Player)) { - log(colorTextComp("Console can't execute this command!")); - try { // /entityspawn ZOMBIE "&cHello folks" x:0 y:0 z:0 level health defense speed strength itemStackBinary64: helmet, chestplate, leggings, boots, main-hand, off-hand - if (validateArgs(args, 16)) { - args = setNullInArgs(args); - } else { - log( - colorTextComp( - "Please use null if you don't want some parameters in the command." - ) - ); - log( - colorTextComp( - "Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + - "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)" - ) - ); - return false; + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + if (!(sender instanceof Player)) { + log(colorTextComp("Console can't execute this command!")); + try { // /entityspawn ZOMBIE "&cHello folks" x:0 y:0 z:0 level health defense speed strength itemStackBinary64: helmet, chestplate, leggings, boots, main-hand, off-hand + if (validateArgs(args, 16)) { + args = setNullInArgs(args); + } else { + log( + colorTextComp( + "Please use null if you don't want some parameters in the command." + ) + ); + log( + colorTextComp( + "Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + + + "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)" + ) + ); + return false; + } + + EntityType types = EntityType.valueOf(args[0]); + Location loc = new Location( + Bukkit.getWorld("world"), + Double.parseDouble(args[2]), + Double.parseDouble(args[3]), + Double.parseDouble(args[4]) + ); + Entity e = loc.getWorld().spawnEntity(loc, types, false); + /* setNameSpacedKeys( + e, + getStringFromArg(args), + Integer.parseInt(args[6]), + Integer.parseInt(args[7]), + 0, + Integer.parseInt(args[8]), + 0, + Integer.parseInt(args[9]), + 0, + Integer.parseInt(args[10]), + 0 + ); */ + e.customName(colorTextComp(getStringFromArg(args))); + e.setCustomNameVisible(true); + if (e instanceof LivingEntity livingEntity) { + // livingEntity.getEquipment().set + ItemStack helmet = itemFrom64(args[11]); + ItemStack chestplate = itemFrom64(args[12]); + ItemStack leggins = itemFrom64(args[13]); + ItemStack boots = itemFrom64(args[14]); + ItemStack mainhand = itemFrom64(args[15]); + ItemStack offhand = itemFrom64(args[14]); + EntityEquipment equip = livingEntity.getEquipment(); + equip.setHelmet(helmet); + equip.setChestplate(chestplate); + equip.setLeggings(leggins); + equip.setBoots(boots); + equip.setItemInMainHand(mainhand); + equip.setItemInOffHand(offhand); + } + + System.out.println(e.getName()); + } catch (IllegalArgumentException e) { + error("Something happened near the SpawnEntity command."); + throw new RuntimeException(e); + } catch (IOException e) { + error( + "Could not deserialize item from the command EntitySpawn (command launched by " + + + sender.getName() + + ")" + ); + throw new RuntimeException(e); + } + } + for (String arg : args) { + log(arg); + } + Player player = (Player) sender; + if (!player.hasPermission("raxen.entityspawn.cmd")) { + player.sendMessage(noPerms()); + return false; + } + try { // /entityspawn ZOMBIE "&cHello folks" x:0 y:0 z:0 level health defense speed strength itemStackBinary64: helmet, chestplate, leggings, boots, main-hand, off-hand + if (validateArgs(args, 16)) { + args = setNullInArgs(args); + } else { + log( + colorTextComp( + "Please use null if you don't want some parameters in the command." + ) + ); + log( + colorTextComp( + "Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + + + "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)" + ) + ); + return false; + } + + EntityType types = EntityType.valueOf(args[0]); + Location loc = new Location( + Bukkit.getWorld("world"), + Double.parseDouble(args[2]), + Double.parseDouble(args[3]), + Double.parseDouble(args[4]) + ); + Entity e = loc.getWorld().spawnEntity(loc, types, false); + /* setNameSpacedKeys( + e, + getStringFromArg(args), + Integer.parseInt(args[6]), + Integer.parseInt(args[7]), + 0, + Integer.parseInt(args[8]), + 0, + Integer.parseInt(args[9]), + 0, + Integer.parseInt(args[10]), + 0 + ); */ + e.customName(colorTextComp(getStringFromArg(args))); + e.setCustomNameVisible(true); + if (e instanceof LivingEntity livingEntity) { + // livingEntity.getEquipment().set + ItemStack helmet = itemFrom64(args[11]); + ItemStack chestplate = itemFrom64(args[12]); + ItemStack leggins = itemFrom64(args[13]); + ItemStack boots = itemFrom64(args[14]); + ItemStack mainhand = itemFrom64(args[15]); + ItemStack offhand = itemFrom64(args[14]); + EntityEquipment equip = livingEntity.getEquipment(); + equip.setHelmet(helmet); + equip.setChestplate(chestplate); + equip.setLeggings(leggins); + equip.setBoots(boots); + equip.setItemInMainHand(mainhand); + equip.setItemInOffHand(offhand); + } + + System.out.println(e.getName()); + } catch (IllegalArgumentException e) { + error("Something happened near the SpawnEntity command."); + throw new RuntimeException(e); + } catch (IOException e) { + error( + "Could not deserialize item from the command EntitySpawn (command launched by " + + sender.getName() + + ")" + ); + throw new RuntimeException(e); } - EntityType types = EntityType.valueOf(args[0]); - Location loc = new Location( - Bukkit.getWorld("world"), - Double.parseDouble(args[2]), - Double.parseDouble(args[3]), - Double.parseDouble(args[4]) - ); - Entity e = loc.getWorld().spawnEntity(loc, types, false); - setNameSpacedKeys( - e, - getStringFromArg(args), - Integer.parseInt(args[6]), - Integer.parseInt(args[7]), - 0, - Integer.parseInt(args[8]), - 0, - Integer.parseInt(args[9]), - 0, - Integer.parseInt(args[10]), - 0 - ); - e.customName(colorTextComp(getStringFromArg(args))); - e.setCustomNameVisible(true); - if (e instanceof LivingEntity livingEntity) { - // livingEntity.getEquipment().set - ItemStack helmet = itemFrom64(args[11]); - ItemStack chestplate = itemFrom64(args[12]); - ItemStack leggins = itemFrom64(args[13]); - ItemStack boots = itemFrom64(args[14]); - ItemStack mainhand = itemFrom64(args[15]); - ItemStack offhand = itemFrom64(args[14]); - EntityEquipment equip = livingEntity.getEquipment(); - equip.setHelmet(helmet); - equip.setChestplate(chestplate); - equip.setLeggings(leggins); - equip.setBoots(boots); - equip.setItemInMainHand(mainhand); - equip.setItemInOffHand(offhand); - } - - System.out.println(e.getName()); - } catch (IllegalArgumentException e) { - error("Something happened near the SpawnEntity command."); - throw new RuntimeException(e); - } catch (IOException e) { - error( - "Could not deserialize item from the command EntitySpawn (command launched by " + - sender.getName() + - ")" - ); - throw new RuntimeException(e); - } - } - for (String arg : args) { - log(arg); - } - Player player = (Player) sender; - if (!player.hasPermission("raxen.entityspawn.cmd")) { - player.sendMessage(noPerms()); - return false; - } - try { // /entityspawn ZOMBIE "&cHello folks" x:0 y:0 z:0 level health defense speed strength itemStackBinary64: helmet, chestplate, leggings, boots, main-hand, off-hand - if (validateArgs(args, 16)) { - args = setNullInArgs(args); - } else { - log( - colorTextComp( - "Please use null if you don't want some parameters in the command." - ) - ); - log( - colorTextComp( - "Follow this command: /entityspawn TYPE \"name\" x y z level health defense speed strength " + - "helmet(itemStackBinary64) chestplate(itemStackBinary64) leggings(itemStackBinary64) boots(itemStackBinary64) main-hand(itemStackBinary64) off-hand(itemStackBinary64)" - ) - ); return false; - } - - EntityType types = EntityType.valueOf(args[0]); - Location loc = new Location( - Bukkit.getWorld("world"), - Double.parseDouble(args[2]), - Double.parseDouble(args[3]), - Double.parseDouble(args[4]) - ); - Entity e = loc.getWorld().spawnEntity(loc, types, false); - setNameSpacedKeys( - e, - getStringFromArg(args), - Integer.parseInt(args[6]), - Integer.parseInt(args[7]), - 0, - Integer.parseInt(args[8]), - 0, - Integer.parseInt(args[9]), - 0, - Integer.parseInt(args[10]), - 0 - ); - e.customName(colorTextComp(getStringFromArg(args))); - e.setCustomNameVisible(true); - if (e instanceof LivingEntity livingEntity) { - // livingEntity.getEquipment().set - ItemStack helmet = itemFrom64(args[11]); - ItemStack chestplate = itemFrom64(args[12]); - ItemStack leggins = itemFrom64(args[13]); - ItemStack boots = itemFrom64(args[14]); - ItemStack mainhand = itemFrom64(args[15]); - ItemStack offhand = itemFrom64(args[14]); - EntityEquipment equip = livingEntity.getEquipment(); - equip.setHelmet(helmet); - equip.setChestplate(chestplate); - equip.setLeggings(leggins); - equip.setBoots(boots); - equip.setItemInMainHand(mainhand); - equip.setItemInOffHand(offhand); - } - - System.out.println(e.getName()); - } catch (IllegalArgumentException e) { - error("Something happened near the SpawnEntity command."); - throw new RuntimeException(e); - } catch (IOException e) { - error( - "Could not deserialize item from the command EntitySpawn (command launched by " + - sender.getName() + - ")" - ); - throw new RuntimeException(e); } - return false; - } - - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - List list = new ArrayList<>(); - for (EntityType types : EntityType.values()) { - list.add(types.name()); + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + List list = new ArrayList<>(); + for (EntityType types : EntityType.values()) { + list.add(types.name()); + } + return list; } - return list; - } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/TestGuiCommand.java b/src/main/java/me/unurled/raxen/commands/admin/TestGuiCommand.java index 83c3b42..5548867 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/TestGuiCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/TestGuiCommand.java @@ -14,34 +14,34 @@ import org.jetbrains.annotations.Nullable; public class TestGuiCommand implements TabExecutor { - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (player.hasPermission("raxen.test.gui.cmd")) { - player.openInventory( - Bukkit.createInventory(null, 54, colorTextComp(args[0])) - ); - } - } else { - log("The console can't execute this Command!"); - return true; + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + if (sender instanceof Player) { + Player player = (Player) sender; + if (player.hasPermission("raxen.test.gui.cmd")) { + player.openInventory( + Bukkit.createInventory(null, 54, colorTextComp(args[0])) + ); + } + } else { + log("The console can't execute this Command!"); + return true; + } + return false; } - return false; - } - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - return null; - } + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/admin/TutorialManagerCommand.java b/src/main/java/me/unurled/raxen/commands/admin/TutorialManagerCommand.java new file mode 100644 index 0000000..c402510 --- /dev/null +++ b/src/main/java/me/unurled/raxen/commands/admin/TutorialManagerCommand.java @@ -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 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( + "Tutorial status for player " + player.getName() + ": " + + 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( + "Tutorial status for player " + player.getName() + ": " + + tutorial.getStep())); + return true; + } + return true; + } + } + + } + } + return false; + } + + @Override + public @Nullable List 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 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; + } +} diff --git a/src/main/java/me/unurled/raxen/commands/player/ClassCommand.java b/src/main/java/me/unurled/raxen/commands/player/ClassCommand.java index 47900ed..a152a39 100644 --- a/src/main/java/me/unurled/raxen/commands/player/ClassCommand.java +++ b/src/main/java/me/unurled/raxen/commands/player/ClassCommand.java @@ -19,64 +19,64 @@ import org.jetbrains.annotations.Nullable; public class ClassCommand implements TabExecutor { - private Raxen main; + private Raxen main; - /** - * the Command to choose the class - * @param main - */ - public ClassCommand(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)) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "The console can't execute this Command!" - ); - return true; + /** + * the Command to choose the class + * @param main + */ + public ClassCommand(Raxen main) { + this.main = main; } - Player player = (Player) sender; - Inventory inv = Bukkit.createInventory( - null, - 9, - colorTextComp("Choose your class") - ); - HashMap classes = main - .getManager() - .getPlayerManager() - .getClasses(); - if (classes.size() > 10) { - if (classes.size() > 55) { - inv = - Bukkit.createInventory( + + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + if (!(sender instanceof Player)) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "The console can't execute this Command!" + ); + return true; + } + Player player = (Player) sender; + Inventory inv = Bukkit.createInventory( null, - classes.size(), + 9, colorTextComp("Choose your class") - ); - } + ); + HashMap classes = main + .getManager() + .getPlayerManager() + .getClasses(); + if (classes.size() > 10) { + if (classes.size() > 55) { + inv = + Bukkit.createInventory( + null, + classes.size(), + colorTextComp("Choose your class") + ); + } + } + for (Class clas : classes.values()) { + ItemStack item = clas.getPlaceHolder(); + inv.addItem(item); + } + return false; } - for (Class clas : classes.values()) { - ItemStack item = clas.getPlaceHolder(); - inv.addItem(item); - } - return false; - } - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - return null; - } + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/player/MainGuiCommand.java b/src/main/java/me/unurled/raxen/commands/player/MainGuiCommand.java index 694c2f9..c8784ef 100644 --- a/src/main/java/me/unurled/raxen/commands/player/MainGuiCommand.java +++ b/src/main/java/me/unurled/raxen/commands/player/MainGuiCommand.java @@ -16,57 +16,57 @@ import org.jetbrains.annotations.Nullable; public class MainGuiCommand implements TabExecutor { - private Raxen main; + private Raxen main; - public MainGuiCommand(Raxen main) { - this.main = main; - } - - /** - * @param sender Source of the command - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args Passed command arguments - * @return - */ - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - if (!(sender instanceof Player)) { - errorConsoleSender(sender); - return true; + public MainGuiCommand(Raxen main) { + this.main = main; } - Player p = (Player) sender; - if (!(p.hasPermission("raxen.maingui.cmd"))) { - sender.sendMessage(noPerms()); - return true; - } - Inventory inv = MainGui.build(p); - p.openInventory(inv); - return true; - } - /** - * @param sender Source of the command. For players tab-completing a - * command inside of a command block, this will be the player, not - * the command block. - * @param command Command which was executed - * @param label Alias of the command which was used - * @param args The arguments passed to the command, including final - * partial argument to be completed - * @return - */ - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - return null; - } + /** + * @param sender Source of the command + * @param command Command which was executed + * @param label Alias of the command which was used + * @param args Passed command arguments + * @return + */ + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + if (!(sender instanceof Player)) { + errorConsoleSender(sender); + return true; + } + Player p = (Player) sender; + if (!(p.hasPermission("raxen.maingui.cmd"))) { + sender.sendMessage(noPerms()); + return true; + } + Inventory inv = MainGui.build(p); + p.openInventory(inv); + return true; + } + + /** + * @param sender Source of the command. For players tab-completing a + * command inside of a command block, this will be the player, not + * the command block. + * @param command Command which was executed + * @param label Alias of the command which was used + * @param args The arguments passed to the command, including final + * partial argument to be completed + * @return + */ + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/player/PartyCommand.java b/src/main/java/me/unurled/raxen/commands/player/PartyCommand.java new file mode 100644 index 0000000..37391fd --- /dev/null +++ b/src/main/java/me/unurled/raxen/commands/player/PartyCommand.java @@ -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 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( + "> Sorry, you can't use this command in the tutorial!")); + player.sendMessage(Utils.colorComp( + "> 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("/party help to view all infos on party")); + return true; + } + if (args[0].equalsIgnoreCase("help")) { + player.sendMessage( + Utils.colorComp("/party help to view all infos on party")); + player.sendMessage(Utils.colorComp("/party create to create a party")); + player.sendMessage(Utils.colorComp( + "/party invite to invite a player to your party")); + player.sendMessage(Utils.colorComp("/party leave to leave your party")); + player.sendMessage(Utils.colorComp( + "/party kick to kick a player from your party")); + player.sendMessage( + Utils.colorComp("/party disband to disband your party")); + player.sendMessage( + Utils.colorComp("/party accept to accept a party invite")); + player.sendMessage( + Utils.colorComp("/party decline to deny a party invite")); + player.sendMessage( + Utils.colorComp("/party list to list all members of your party")); + player.sendMessage( + Utils.colorComp("\\ 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( + "> Usage: /party invite ")); + 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( + "> Player not found!")); + return true; + } + if (rx.getParty().isFull()) { + player.sendMessage(Utils.colorComp( + "> Your party is full!")); + return true; + } else { + rx.getParty().sendInvite(target, rx2, player); + } + } + } else { + player.sendMessage(Utils.colorComp( + "> You are not in a party!")); + return true; + } + } else if (args[0].equalsIgnoreCase("accept")) { + if (rx.getInvitedParty() == null) { + player.sendMessage(Utils.colorComp( + "> 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( + "> " + player.getName() + " has declined the party invite!")); + } + rx.setInvitedParty(null); + player.sendMessage(Utils.colorComp( + "> You have declined the party invite!")); + } else if (args[0].equalsIgnoreCase("leave")) { + if (rx.getParty() == null) { + player.sendMessage(Utils.colorComp( + "> 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( + "> You are not in a party!")); + return true; + } else { + if (!rx.getParty().isLeader(player)) { + player.sendMessage(Utils.colorComp( + "> You are not the party leader!")); + return true; + } else { + if (args.length != 2) { + player.sendMessage(Utils.colorComp( + "> Usage: /party kick ")); + 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( + "> Player not found!")); + return true; + } + if (!rx2.getParty().equals(rx.getParty())) { + player.sendMessage(Utils.colorComp( + "> This player is not in your party!")); + return true; + } + if (target.equals(player) || rx.equals(rx2)) { + player.sendMessage(Utils.colorComp( + "> 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( + "" + message)); + } else { + player.sendMessage(Utils.colorComp( + "> Not valid command!")); + player.sendMessage(Utils.colorComp( + "> /party help to view all infos on party")); + return true; + } + } + return true; + } + + @Override + public @Nullable List 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 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; + } +} diff --git a/src/main/java/me/unurled/raxen/commands/player/SkillsCommand.java b/src/main/java/me/unurled/raxen/commands/player/SkillsCommand.java index 83863b4..cd380c3 100644 --- a/src/main/java/me/unurled/raxen/commands/player/SkillsCommand.java +++ b/src/main/java/me/unurled/raxen/commands/player/SkillsCommand.java @@ -18,76 +18,87 @@ import org.jetbrains.annotations.Nullable; public class SkillsCommand implements TabExecutor { - private Raxen main; + private Raxen main; - public SkillsCommand(Raxen main) { - this.main = main; - } - - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String msg, - @NotNull String[] args - ) { - if (!(sender instanceof Player)) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "The console can't execute this Command!" - ); - return true; + public SkillsCommand(Raxen main) { + this.main = main; } - Player player = (Player) sender; - Attributes attributes = new Attributes(main); - switch (args.length) { - case 0: - //open gui - player.sendMessage( - colorTextComp("GUI not implemented yet..") - .append(colorTextComp("Try /skill help.")) - ); - break; - case 1: - case 2: - player.sendMessage( - colorTextComp("Use the command like: ") - .append( - colorTextComp( - "/skill {health|defense|speed|strength} {add|set|remove} {amount}" - ) - ) - ); - break; - case 3: - PlayerManager pm = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - for (String s : pm.getAttribute().keySet()) { - if (s.equalsIgnoreCase(args[0])) switch (args[1]) { - case "add": - pm.getAttribute().get(s).add(player, Integer.parseInt(args[2])); - case "remove": - pm - .getAttribute() - .get(s) - .remove(player, Integer.parseInt(args[2])); - case "set": - pm.getAttribute().get(s).set(player, Integer.parseInt(args[2])); - } + + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String msg, + @NotNull String[] args + ) { + if (!(sender instanceof Player)) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "The console can't execute this Command!" + ); + return true; } - PlayerUtils.updateSkills(main, player); + Player player = (Player) sender; + Attributes attributes = new Attributes(main); + switch (args.length) { + case 0: + //open gui + player.sendMessage( + colorTextComp("GUI not implemented yet..") + .append(colorTextComp("Try /skill help.")) + ); + break; + case 1: + case 2: + player.sendMessage( + colorTextComp("Use the command like: ") + .append( + colorTextComp( + "/skill {health|defense|speed|strength} {add|set|remove} {amount}" + ) + ) + ); + break; + case 3: + PlayerManager pm = + ( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen") + ).getManager() + .getPlayerManager(); + for (String s : pm.getAttribute().keySet()) { + if (s.equalsIgnoreCase(args[0])) switch (args[1]) { + case "add": + pm + .getAttribute() + .get(s) + .add(player, Integer.parseInt(args[2])); + break; + case "remove": + pm + .getAttribute() + .get(s) + .remove(player, Integer.parseInt(args[2])); + break; + case "set": + pm + .getAttribute() + .get(s) + .set(player, Integer.parseInt(args[2])); + break; + } + } + PlayerUtils.updateSkills(main, player); + } + return false; } - return false; - } - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - return null; - } + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java b/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java index 6558421..3869efb 100644 --- a/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java +++ b/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java @@ -1,6 +1,8 @@ package me.unurled.raxen.commands.player; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorString; +import static me.unurled.raxen.utils.Utils.error; +import static me.unurled.raxen.utils.Utils.msgPlayer; import java.util.List; import me.unurled.raxen.Raxen; @@ -16,65 +18,76 @@ import org.jetbrains.annotations.Nullable; public class StorageCommand implements TabExecutor { - private PlayerManager playerManager; + private PlayerManager playerManager; - @Override - public boolean onCommand( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String label, - @NotNull String[] args - ) { - if (!(sender instanceof Player)) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "The console can't execute this Command!" - ); - return true; - } - Player player = (Player) sender; - Inventory inv; - playerManager = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - switch (args.length) { - case 0: - if (playerManager.getRaxenPlayer(player).getStorage() == null) { - inv = - playerManager - .getRaxenPlayer(player) - .createStorage() - .getEc() - .getEc(); - } else { - inv = - playerManager.getRaxenPlayer(player).getStorage().getEc().getEc(); + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + if (!(sender instanceof Player)) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "The console can't execute this Command!" + ); + return true; } - player.openInventory(inv); - break; - case 1: - Player p = Bukkit.getPlayer(args[0]); - if (p == null) { - msgPlayer( - player, - colorString("You can't open the Storage of an unknown Player.") - ); - return true; + Player player = (Player) sender; + Inventory inv; + playerManager = + ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() + .getPlayerManager(); + switch (args.length) { + case 0: + if (playerManager.getRaxenPlayer(player).getStorage() == null) { + inv = + playerManager + .getRaxenPlayer(player) + .createStorage() + .getEc() + .getEc(); + } else { + inv = + playerManager + .getRaxenPlayer(player) + .getStorage() + .getEc() + .getEc(); + } + player.openInventory(inv); + break; + case 1: + Player p = Bukkit.getPlayer(args[0]); + if (p == null) { + msgPlayer( + player, + colorString( + "You can't open the Storage of an unknown Player." + ) + ); + return true; + } + inv = + playerManager + .getRaxenPlayer(player) + .getStorage() + .getEc() + .getEc(); + player.openInventory(inv); + break; } - inv = playerManager.getRaxenPlayer(player).getStorage().getEc().getEc(); - player.openInventory(inv); - break; + return true; } - return true; - } - @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, - @NotNull Command command, - @NotNull String alias, - @NotNull String[] args - ) { - return null; - } + @Override + public @Nullable List onTabComplete( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String alias, + @NotNull String[] args + ) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/components/clientbuild/Builds.java b/src/main/java/me/unurled/raxen/components/clientbuild/Builds.java new file mode 100644 index 0000000..5a5f993 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/clientbuild/Builds.java @@ -0,0 +1,55 @@ +package me.unurled.raxen.components.clientbuild; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.UUID; +import org.bukkit.Location; +import org.bukkit.block.Block; + +public class Builds { + + private Instant start; + private Instant end; + private Location startLocation; + private UUID owner; + + private ArrayList blocks = new ArrayList<>(); + + public Builds(Location startLocation, UUID owner) { + start = Instant.now(); + this.startLocation = startLocation; + this.owner = owner; + } + + public Instant getEnd() { + return end; + } + + public void setEnd(Instant end) { + this.end = end; + } + + public Location getStartLocation() { + return startLocation; + } + + public UUID getOwner() { + return owner; + } + + public ArrayList getBlocks() { + return blocks; + } + + public void setBlocks(ArrayList blocks) { + this.blocks = blocks; + } + + public void addBlock(Block block) { + blocks.add(block); + } + + public void removeBlock(Block block) { + blocks.remove(block); + } +} diff --git a/src/main/java/me/unurled/raxen/components/clientbuild/PlayerList.java b/src/main/java/me/unurled/raxen/components/clientbuild/PlayerList.java new file mode 100644 index 0000000..a7edfcd --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/clientbuild/PlayerList.java @@ -0,0 +1,22 @@ +package me.unurled.raxen.components.clientbuild; + +import java.util.ArrayList; +import org.bukkit.entity.Player; + +public class PlayerList { + + private final ArrayList players = new ArrayList<>(); + + public void addPlayer(Player player) { + players.add(player); + } + + public void removePlayer(Player player) { + players.remove(player); + } + + public ArrayList getPlayers() { + return players; + } + +} diff --git a/src/main/java/me/unurled/raxen/components/dungeons/Dungeon.java b/src/main/java/me/unurled/raxen/components/dungeons/Dungeon.java index 0192dda..2a7a04f 100644 --- a/src/main/java/me/unurled/raxen/components/dungeons/Dungeon.java +++ b/src/main/java/me/unurled/raxen/components/dungeons/Dungeon.java @@ -12,67 +12,67 @@ import org.bukkit.Location; public class Dungeon { - @Getter - private String name; + @Getter + private String name; - @Getter - private Rank rank; + @Getter + private Rank rank; - @Getter - private Gate gate; + @Getter + private Gate gate; - //String, RaxenEntity - @Getter - private HashMap monster = new HashMap<>(); + //String, RaxenEntity + @Getter + private HashMap monster = new HashMap<>(); - /** - * The Type of the Dungeon - */ - @Getter - private Types types; + /** + * The Type of the Dungeon + */ + @Getter + private Types types; - /** - * Monster Types - */ - @Getter - private MonsterType monsterType; + /** + * Monster Types + */ + @Getter + private MonsterType monsterType; - @Getter - private Location location; + @Getter + private Location location; - @Getter - private Integer radius; + @Getter + private Integer radius; - public Dungeon(String name, Rank rank, Types types, MonsterType mType) { - this.name = name; - this.rank = rank; - this.types = types; - this.monsterType = mType; - generateGate(); - } + public Dungeon(String name, Rank rank, Types types, MonsterType mType) { + this.name = name; + this.rank = rank; + this.types = types; + this.monsterType = mType; + generateGate(); + } - /** - * Generate the Gate and make it available to players in the world. - * //TODO: Place the gate at a random place. - */ - public void generateGate() { - // -281.50 36.00 187.50 - Location loc = new Location( - Bukkit.getWorld("Liberty_City"), - -284.0, - 45.00, - 187.50 - ); - Integer radius = getRadiusFromRank(this.rank); - this.gate = new Gate(name, loc, radius); - } + /** + * Generate the Gate and make it available to players in the world. + * //TODO: Place the gate at a random place. + */ + public void generateGate() { + // -281.50 36.00 187.50 + Location loc = new Location( + Bukkit.getWorld("Liberty_City"), + -284.0, + 45.00, + 187.50 + ); + Integer radius = getRadiusFromRank(this.rank); + this.gate = new Gate(name, loc, radius); + } - /** - * //TODO: Terrain Generation of the inside of the Dungeons - */ - public void generate() { - Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); - main.getManager().getWorldManager().loadWorld(name); - monsterType.genMonster(Bukkit.getWorld(name), rank); - } + /** + * //TODO: Terrain Generation of the inside of the Dungeons + */ + public void generate() { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + main.getManager().getWorldManager().loadWorld(name); + monsterType.genMonster(Bukkit.getWorld(name), rank); + } } diff --git a/src/main/java/me/unurled/raxen/components/dungeons/Gate.java b/src/main/java/me/unurled/raxen/components/dungeons/Gate.java index 0cc4323..8768219 100644 --- a/src/main/java/me/unurled/raxen/components/dungeons/Gate.java +++ b/src/main/java/me/unurled/raxen/components/dungeons/Gate.java @@ -6,39 +6,39 @@ import org.bukkit.Material; public class Gate { - private String name; + private String name; - private Location loc; - private Integer portalRadius; + private Location loc; + private Integer portalRadius; - public Gate(String name, Location loc, Integer portalRadius) { - this.loc = loc; - this.portalRadius = portalRadius; - this.name = name; - } - - public void teleport() {} - - public void genGate() { - // get which side it's gonna expand with radius - Random r = new Random(); - Boolean xExpend = false; - if (r.nextInt(2) == 0) { - xExpend = true; + public Gate(String name, Location loc, Integer portalRadius) { + this.loc = loc; + this.portalRadius = portalRadius; + this.name = name; } - // place blocks - for (double i = 0; i <= Math.PI; i += Math.PI / portalRadius) { - double radius = Math.sin(i); - double y = Math.cos(i); - for (double a = 0; a < Math.PI * 2; a += Math.PI / portalRadius) { - double x = Math.cos(a) * radius; - double z = Math.sin(a) * radius; - Location locc = new Location(loc.getWorld(), x, y, z); - loc.getBlock().setType(Material.NETHER_PORTAL); - } - } - /* + public void teleport() {} + + public void genGate() { + // get which side it's gonna expand with radius + Random r = new Random(); + Boolean xExpend = false; + if (r.nextInt(2) == 0) { + xExpend = true; + } + + // place blocks + for (double i = 0; i <= Math.PI; i += Math.PI / portalRadius) { + double radius = Math.sin(i); + double y = Math.cos(i); + for (double a = 0; a < Math.PI * 2; a += Math.PI / portalRadius) { + double x = Math.cos(a) * radius; + double z = Math.sin(a) * radius; + Location locc = new Location(loc.getWorld(), x, y, z); + loc.getBlock().setType(Material.NETHER_PORTAL); + } + } + /* for (int n=0; n monster = new HashMap<>(); + public Map monster = new HashMap<>(); - public Map lootItem = new HashMap<>(); - // public Map chest + public Map lootItem = new HashMap<>(); + // public Map chest } diff --git a/src/main/java/me/unurled/raxen/components/dungeons/Types.java b/src/main/java/me/unurled/raxen/components/dungeons/Types.java index c842107..7685d19 100644 --- a/src/main/java/me/unurled/raxen/components/dungeons/Types.java +++ b/src/main/java/me/unurled/raxen/components/dungeons/Types.java @@ -1,20 +1,20 @@ package me.unurled.raxen.components.dungeons; public enum Types { - JUNGLE, - TROPICAL_JUNGLE, - PLAINS, - GRAVES, - CASTLE, - ABANDONED_CASTLE, - FIELD, - ICE_FOREST, - FOREST, - VOLCANO, - MOUNTAINS, - HIGH_MOUNTAINS, - CAVES, - LABYRINTH, - UNDERGROUND_LABYRINTH, - FOREST_LABYRINTH, + JUNGLE, + TROPICAL_JUNGLE, + PLAINS, + GRAVES, + CASTLE, + ABANDONED_CASTLE, + FIELD, + ICE_FOREST, + FOREST, + VOLCANO, + MOUNTAINS, + HIGH_MOUNTAINS, + CAVES, + LABYRINTH, + UNDERGROUND_LABYRINTH, + FOREST_LABYRINTH } diff --git a/src/main/java/me/unurled/raxen/components/dungeons/types/MonsterType.java b/src/main/java/me/unurled/raxen/components/dungeons/types/MonsterType.java index 5815f35..0e373ba 100644 --- a/src/main/java/me/unurled/raxen/components/dungeons/types/MonsterType.java +++ b/src/main/java/me/unurled/raxen/components/dungeons/types/MonsterType.java @@ -16,93 +16,93 @@ import org.jetbrains.annotations.Nullable; public class MonsterType { - public enum type { - ; + public enum type { + ; - private Double rate; - public String ID; - public Class clazz; + private Double rate; + public String ID; + public Class clazz; - type(Double rate, String ID, Class clazz) { - this.rate = rate; - this.ID = ID; - this.clazz = clazz; - } - - public static @Nullable type getTypeById(String ID) { - for (type type : type.values()) { - if (type.ID.equals(ID)) { - return type; + type(Double rate, String ID, Class clazz) { + this.rate = rate; + this.ID = ID; + this.clazz = clazz; } - } - return null; - } - public Double getRate() { - return rate; - } - - public void setRate(Double rate) { - this.rate = rate; - } - - public String getID() { - return ID; - } - - public void setID(String ID) { - this.ID = ID; - } - - public Class getClazz() { - return clazz; - } - - public void getClazz(Class clazz) { - this.clazz = clazz; - } - } - - public void genMonster(World world, Rank rank) { - Double x = 0.0; - Double y = 100.0; - Double z = 0.0; - for (type type : type.values()) { - type.name(); - Random r = new Random(); - int per = r.nextInt(100); - if (per >= type.rate) { - // spawn entity - debug("Spawning Entity " + type.ID); - Entity e = world.spawnEntity( - new Location(world, x, y, z), - EntityType.ARROW - ); - // e = ((RaxenEntity) type.getClazz()).createEntity(); - e.setInvulnerable(true); - BukkitTask task = new BukkitRunnable() { - @Override - public void run() { - Location loc = new Location( - e.getWorld(), - e.getLocation().getX(), - e.getLocation().getY() - 1, - e.getLocation().getZ() - ); - if (loc.getBlock().getType() != Material.AIR) { - e.setInvulnerable(false); - this.cancel(); + public static @Nullable type getTypeById(String ID) { + for (type type : type.values()) { + if (type.ID.equals(ID)) { + return type; + } } - } + return null; + } + + public Double getRate() { + return rate; + } + + public void setRate(Double rate) { + this.rate = rate; + } + + public String getID() { + return ID; + } + + public void setID(String ID) { + this.ID = ID; + } + + public Class getClazz() { + return clazz; + } + + public void getClazz(Class clazz) { + this.clazz = clazz; + } + } + + public void genMonster(World world, Rank rank) { + Double x = 0.0; + Double y = 100.0; + Double z = 0.0; + for (type type : type.values()) { + type.name(); + Random r = new Random(); + int per = r.nextInt(100); + if (per >= type.rate) { + // spawn entity + debug("Spawning Entity " + type.ID); + Entity e = world.spawnEntity( + new Location(world, x, y, z), + EntityType.ARROW + ); + // e = ((RaxenEntity) type.getClazz()).createEntity(); + e.setInvulnerable(true); + BukkitTask task = new BukkitRunnable() { + @Override + public void run() { + Location loc = new Location( + e.getWorld(), + e.getLocation().getX(), + e.getLocation().getY() - 1, + e.getLocation().getZ() + ); + if (loc.getBlock().getType() != Material.AIR) { + e.setInvulnerable(false); + this.cancel(); + } + } + } + .runTaskTimerAsynchronously( + Bukkit.getPluginManager().getPlugin("Raxen"), + 0L, + 20L + ); + } + x = 5.0 + (50.0 - 5.0) * r.nextDouble(); + z = 5.0 + (50.0 - 5.0) * r.nextDouble(); } - .runTaskTimerAsynchronously( - Bukkit.getPluginManager().getPlugin("Raxen"), - 0L, - 20L - ); - } - x = 5.0 + (50.0 - 5.0) * r.nextDouble(); - z = 5.0 + (50.0 - 5.0) * r.nextDouble(); } - } } diff --git a/src/main/java/me/unurled/raxen/components/dungeons/types/forest/ForestDungeon.java b/src/main/java/me/unurled/raxen/components/dungeons/types/forest/ForestDungeon.java index 1d13444..305fd1a 100644 --- a/src/main/java/me/unurled/raxen/components/dungeons/types/forest/ForestDungeon.java +++ b/src/main/java/me/unurled/raxen/components/dungeons/types/forest/ForestDungeon.java @@ -7,11 +7,16 @@ import me.unurled.raxen.components.dungeons.types.MonsterType; public class ForestDungeon extends Dungeon { - public ForestDungeon(String name, Rank rank, Types types, MonsterType mType) { - super(name, rank, types, mType); - } + public ForestDungeon( + String name, + Rank rank, + Types types, + MonsterType mType + ) { + super(name, rank, types, mType); + } - public ForestDungeon() { - super("Forest", Rank.E, Types.FOREST, new ForestMonster()); - } + public ForestDungeon() { + super("Forest", Rank.E, Types.FOREST, new ForestMonster()); + } } diff --git a/src/main/java/me/unurled/raxen/components/dungeons/types/forest/ForestMonster.java b/src/main/java/me/unurled/raxen/components/dungeons/types/forest/ForestMonster.java index ee312bf..5cc6dbd 100644 --- a/src/main/java/me/unurled/raxen/components/dungeons/types/forest/ForestMonster.java +++ b/src/main/java/me/unurled/raxen/components/dungeons/types/forest/ForestMonster.java @@ -7,19 +7,19 @@ import me.unurled.raxen.components.entity.other.custom.dungeon.forest.Wolf; public class ForestMonster extends MonsterType { - @Getter - enum type { - ELF(50.0, "ELF", Elf.class), - WOLF(50.0, "WOLF", Wolf.class); + @Getter + enum type { + ELF(50.0, "ELF", Elf.class), + WOLF(50.0, "WOLF", Wolf.class); - private Double rate; - public String ID; - public Class clazz; + private Double rate; + public String ID; + public Class clazz; - type(Double rate, String ID, Class clazz) { - this.rate = rate; - this.ID = ID; - this.clazz = clazz; + type(Double rate, String ID, Class clazz) { + this.rate = rate; + this.ID = ID; + this.clazz = clazz; + } } - } } diff --git a/src/main/java/me/unurled/raxen/components/effect/EffectBuilder.java b/src/main/java/me/unurled/raxen/components/effect/EffectBuilder.java new file mode 100644 index 0000000..4c3e578 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/effect/EffectBuilder.java @@ -0,0 +1,5 @@ +package me.unurled.raxen.components.effect; + +public class EffectBuilder { + +} diff --git a/src/main/java/me/unurled/raxen/components/enchantments/EnchantmentWarpper.java b/src/main/java/me/unurled/raxen/components/enchantments/EnchantmentWarpper.java index fa529b8..0eead91 100644 --- a/src/main/java/me/unurled/raxen/components/enchantments/EnchantmentWarpper.java +++ b/src/main/java/me/unurled/raxen/components/enchantments/EnchantmentWarpper.java @@ -14,94 +14,94 @@ import org.jetbrains.annotations.NotNull; public class EnchantmentWarpper extends Enchantment { - private final int maxLevel; + private final int maxLevel; - public EnchantmentWarpper(String nameSpace, String name, int lvl) { - super(NamespacedKey.minecraft(nameSpace)); - this.maxLevel = lvl; - } + public EnchantmentWarpper(String nameSpace, String name, int lvl) { + super(NamespacedKey.minecraft(nameSpace)); + this.maxLevel = lvl; + } - @Override - @Deprecated - public @NotNull String getName() { - return null; - } + @Override + @Deprecated + public @NotNull String getName() { + return null; + } - @Override - public int getMaxLevel() { - return maxLevel; - } + @Override + public int getMaxLevel() { + return maxLevel; + } - @Override - public int getStartLevel() { - return 0; - } + @Override + public int getStartLevel() { + return 0; + } - @Override - public @NotNull EnchantmentTarget getItemTarget() { - return null; - } + @Override + public @NotNull EnchantmentTarget getItemTarget() { + return null; + } - @Override - public boolean isTreasure() { - return false; - } + @Override + public boolean isTreasure() { + return false; + } - @Override - public boolean isCursed() { - return false; - } + @Override + public boolean isCursed() { + return false; + } - @Override - public boolean conflictsWith(@NotNull Enchantment other) { - return false; - } + @Override + public boolean conflictsWith(@NotNull Enchantment other) { + return false; + } - @Override - public boolean canEnchantItem(@NotNull ItemStack item) { - return false; - } + @Override + public boolean canEnchantItem(@NotNull ItemStack item) { + return false; + } - @Override - public @NotNull Component displayName(int level) { - return null; - } + @Override + public @NotNull Component displayName(int level) { + return null; + } - @Override - public boolean isTradeable() { - return false; - } + @Override + public boolean isTradeable() { + return false; + } - @Override - public boolean isDiscoverable() { - return false; - } + @Override + public boolean isDiscoverable() { + return false; + } - @Override - public @NotNull EnchantmentRarity getRarity() { - return null; - } + @Override + public @NotNull EnchantmentRarity getRarity() { + return null; + } - @Override - public float getDamageIncrease( - int level, - @NotNull EntityCategory entityCategory - ) { - return 0; - } + @Override + public float getDamageIncrease( + int level, + @NotNull EntityCategory entityCategory + ) { + return 0; + } - @Override - public @NotNull Set getActiveSlots() { - return null; - } + @Override + public @NotNull Set getActiveSlots() { + return null; + } - @Override - public @NotNull String translationKey() { - return null; - } + @Override + public @NotNull String translationKey() { + return null; + } - @Override - public @NotNull Key key() { - return super.key(); - } + @Override + public @NotNull Key key() { + return super.key(); + } } diff --git a/src/main/java/me/unurled/raxen/components/enchantments/player/Telekinesis.java b/src/main/java/me/unurled/raxen/components/enchantments/player/Telekinesis.java index 904ae8b..10da2d1 100644 --- a/src/main/java/me/unurled/raxen/components/enchantments/player/Telekinesis.java +++ b/src/main/java/me/unurled/raxen/components/enchantments/player/Telekinesis.java @@ -6,9 +6,9 @@ import org.bukkit.event.Listener; public class Telekinesis implements Listener { - public static final Enchantment TELEKINESIS = new EnchantmentWarpper( - "telekinesis", - "telekinesis", - 1 - ); + public static final Enchantment TELEKINESIS = new EnchantmentWarpper( + "telekinesis", + "telekinesis", + 1 + ); } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/Attribute.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/Attribute.java index ceb9671..d2ad599 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/Attribute.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/Attribute.java @@ -1,6 +1,7 @@ package me.unurled.raxen.components.entity.Attributes; import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.log; import de.tr7zw.nbtapi.NBTItem; import org.bukkit.Material; @@ -14,158 +15,161 @@ import org.jetbrains.annotations.NotNull; public class Attribute { - /** - * The NamespaceKey register for the PersistentDataContainer. - * static NamespacedKey namespacekey = namespacedKey.TYPE; - */ - public NamespacedKey namespacekey; + /** + * The NamespaceKey register for the PersistentDataContainer. + * static NamespacedKey namespacekey = namespacedKey.TYPE; + */ + public NamespacedKey namespacekey; - /** - * The name of the attribute - * static String name = "null"; - */ - public String name; + /** + * The name of the attribute + * static String name = "null"; + */ + public String name; - public Attribute(NamespacedKey namespacekey, String name) { - this.namespacekey = namespacekey; - this.name = name; - } + public Attribute(NamespacedKey namespacekey, String name) { + this.namespacekey = namespacekey; + this.name = name; + } - /** - * gives the name uppercased - * @return the name in uppercase - */ - public String nameUppercase() { - return name.toUpperCase(); - } + /** + * gives the name uppercased + * @return the name in uppercase + */ + public String nameUppercase() { + return name.toUpperCase(); + } - /** - * get how many the Entity has Attributed - * @param entity a living entity - * @return the amount of attribute - */ - public Integer get(@NotNull Entity entity) { - if ( - entity - .getPersistentDataContainer() - .has(namespacekey, PersistentDataType.INTEGER) - ) { - debug( - " attribute gett" + + /** + * get how many the Entity has Attributed + * @param entity a living entity + * @return the amount of attribute + */ + public Integer get(@NotNull Entity entity) { + if ( + entity + .getPersistentDataContainer() + .has(namespacekey, PersistentDataType.INTEGER) + ) { + debug( + " attribute gett" + + entity + .getPersistentDataContainer() + .get(namespacekey, PersistentDataType.INTEGER) + ); + return entity + .getPersistentDataContainer() + .get(namespacekey, PersistentDataType.INTEGER); + } + debug( + name + + " not found in Entity: " + + entity.getType().toString() + + " " + + entity.getName() + + " " + + entity.getUniqueId().toString() + ); + set(entity, 0); + return 0; + } + + /** + * get how many the Entity has Attributed + * @param it an ItemStack + * @return the amount of attribute + */ + public Integer get(@NotNull ItemStack it) { + NBTItem nbti = new NBTItem(it); + if (nbti.hasTag(name)) { + return nbti.getInteger(name); + } + return 0; + } + + /** + * Get the amount of attribute on the item + * @param e a LivingEntity + * @return an amount of attribute on the item + */ + public Integer getItem(@NotNull LivingEntity e) { + EntityEquipment equi = e.getEquipment(); + Integer attribute = 0; + if (equi != null) { + if ( + equi.getItemInMainHand().getType() != Material.AIR && + equi.getHelmet() != null + ) { + ItemStack item = equi.getItemInMainHand(); + attribute = attribute + get(item); + } + if ( + equi.getHelmet().getType() != Material.AIR && + equi.getHelmet() != null + ) { + ItemStack item = equi.getHelmet(); + attribute = attribute + get(item); + } + if ( + equi.getChestplate().getType() != Material.AIR && + equi.getChestplate() != null + ) { + ItemStack item = equi.getChestplate(); + attribute = attribute + get(item); + } + if ( + equi.getChestplate().getType() != Material.AIR && + equi.getChestplate() != null + ) { + ItemStack item = equi.getChestplate(); + attribute = attribute + get(item); + } + if ( + equi.getLeggings().getType() != Material.AIR && + equi.getLeggings() != null + ) { + ItemStack item = equi.getLeggings(); + attribute = attribute + get(item); + } + if ( + equi.getBoots().getType() != Material.AIR && + equi.getBoots() != null + ) { + ItemStack item = equi.getBoots(); + attribute = attribute + get(item); + } + } + return attribute; + } + + /** + * set amount to the entity's attribute + * @param entity a living entity + * @param amount the amount you want to set + */ + public void set(@NotNull Entity entity, @NotNull Integer amount) { entity - .getPersistentDataContainer() - .get(namespacekey, PersistentDataType.INTEGER) - ); - return entity - .getPersistentDataContainer() - .get(namespacekey, PersistentDataType.INTEGER); + .getPersistentDataContainer() + .set(namespacekey, PersistentDataType.INTEGER, amount); + debug("set " + name + " " + amount); } - debug( - name + - " not found in Entity: " + - entity.getType().toString() + - " " + - entity.getName() + - " " + - entity.getUniqueId().toString() - ); - set(entity, 0); - return 0; - } - /** - * get how many the Entity has Attributed - * @param it an ItemStack - * @return the amount of attribute - */ - public Integer get(@NotNull ItemStack it) { - NBTItem nbti = new NBTItem(it); - if (nbti.hasTag(name)) { - return nbti.getInteger(name); + /** + * add amount to the entity's attribute + * @param entity a living entity + * @param amount the amount you want to set + */ + public void add(@NotNull Entity entity, @NotNull Integer amount) { + log(get(entity) + " " + amount); + set(entity, get(entity) + amount); } - return 0; - } - /** - * Get the amount of attribute on the item - * @param e a LivingEntity - * @return an amount of attribute on the item - */ - public Integer getItem(@NotNull LivingEntity e) { - EntityEquipment equi = e.getEquipment(); - Integer attribute = 0; - if (equi != null) { - if ( - equi.getItemInMainHand().getType() != Material.AIR && - equi.getHelmet() != null - ) { - ItemStack item = equi.getItemInMainHand(); - attribute = attribute + get(item); - } - if ( - equi.getHelmet().getType() != Material.AIR && equi.getHelmet() != null - ) { - ItemStack item = equi.getHelmet(); - attribute = attribute + get(item); - } - if ( - equi.getChestplate().getType() != Material.AIR && - equi.getChestplate() != null - ) { - ItemStack item = equi.getChestplate(); - attribute = attribute + get(item); - } - if ( - equi.getChestplate().getType() != Material.AIR && - equi.getChestplate() != null - ) { - ItemStack item = equi.getChestplate(); - attribute = attribute + get(item); - } - if ( - equi.getLeggings().getType() != Material.AIR && - equi.getLeggings() != null - ) { - ItemStack item = equi.getLeggings(); - attribute = attribute + get(item); - } - if ( - equi.getBoots().getType() != Material.AIR && equi.getBoots() != null - ) { - ItemStack item = equi.getBoots(); - attribute = attribute + get(item); - } + /** + * remove amount to the entity's attribute + * @param entity a living entity + * @param amount the amount you want to set + */ + public void remove(@NotNull Entity entity, @NotNull Integer amount) { + set(entity, get(entity) - amount); } - return attribute; - } - - /** - * set amount to the entity's attribute - * @param entity a living entity - * @param amount the amount you want to set - */ - public void set(@NotNull Entity entity, @NotNull Integer amount) { - entity - .getPersistentDataContainer() - .set(namespacekey, PersistentDataType.INTEGER, amount); - debug("set " + name + " " + amount); - } - - /** - * add amount to the entity's attribute - * @param entity a living entity - * @param amount the amount you want to set - */ - public void add(@NotNull Entity entity, @NotNull Integer amount) { - set(entity, get(entity) + amount); - } - - /** - * remove amount to the entity's attribute - * @param entity a living entity - * @param amount the amount you want to set - */ - public void remove(@NotNull Entity entity, @NotNull Integer amount) { - set(entity, get(entity) - amount); - } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/Defense.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/Defense.java index fb701bf..2fc6412 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/Defense.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/Defense.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class Defense extends Attribute { - public Defense(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public Defense(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/Health.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/Health.java index b5d847c..ea9ec47 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/Health.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/Health.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class Health extends Attribute { - public Health(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public Health(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemDefense.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemDefense.java index a48dc67..2d9cdaa 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemDefense.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemDefense.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class ItemDefense extends Attribute { - public ItemDefense(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public ItemDefense(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemHealth.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemHealth.java index a9127a2..342842a 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemHealth.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemHealth.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class ItemHealth extends Attribute { - public ItemHealth(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public ItemHealth(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemLuck.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemLuck.java index f4d5067..206e0d6 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemLuck.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemLuck.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class ItemLuck extends Attribute { - public ItemLuck(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public ItemLuck(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemMana.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemMana.java index 78a22f3..93c8b2b 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemMana.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemMana.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class ItemMana extends Attribute { - public ItemMana(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public ItemMana(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemSpeed.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemSpeed.java index 4dde9f2..cfbc3b6 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemSpeed.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemSpeed.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class ItemSpeed extends Attribute { - public ItemSpeed(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public ItemSpeed(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemStrength.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemStrength.java index 78e97c3..ee11e62 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemStrength.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/ItemStrength.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class ItemStrength extends Attribute { - public ItemStrength(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public ItemStrength(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/Luck.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/Luck.java index 7ca34b5..116a56b 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/Luck.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/Luck.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class Luck extends Attribute { - public Luck(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public Luck(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/Mana.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/Mana.java index 01f5ea5..c43e8ff 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/Mana.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/Mana.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class Mana extends Attribute { - public Mana(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public Mana(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxHealth.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxHealth.java index 2206ab4..b76886e 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxHealth.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxHealth.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class MaxHealth extends Attribute { - public MaxHealth(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public MaxHealth(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxMana.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxMana.java index 8a4688f..58467e6 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxMana.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxMana.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class MaxMana extends Attribute { - public MaxMana(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public MaxMana(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxManaBuilder.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxManaBuilder.java index b54bc7c..40a5e5c 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxManaBuilder.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/MaxManaBuilder.java @@ -4,20 +4,20 @@ import org.bukkit.NamespacedKey; public class MaxManaBuilder { - private NamespacedKey namespacekey; - private String name; + private NamespacedKey namespacekey; + private String name; - public MaxManaBuilder setNamespacekey(NamespacedKey namespacekey) { - this.namespacekey = namespacekey; - return this; - } + public MaxManaBuilder setNamespacekey(NamespacedKey namespacekey) { + this.namespacekey = namespacekey; + return this; + } - public MaxManaBuilder setName(String name) { - this.name = name; - return this; - } + public MaxManaBuilder setName(String name) { + this.name = name; + return this; + } - public MaxMana createMaxMana() { - return new MaxMana(namespacekey, name); - } + public MaxMana createMaxMana() { + return new MaxMana(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/Speed.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/Speed.java index c0586a1..0264d2f 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/Speed.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/Speed.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class Speed extends Attribute { - public Speed(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public Speed(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/Attributes/Strength.java b/src/main/java/me/unurled/raxen/components/entity/Attributes/Strength.java index 05ed16e..109a5f1 100644 --- a/src/main/java/me/unurled/raxen/components/entity/Attributes/Strength.java +++ b/src/main/java/me/unurled/raxen/components/entity/Attributes/Strength.java @@ -4,7 +4,7 @@ import org.bukkit.NamespacedKey; public class Strength extends Attribute { - public Strength(NamespacedKey namespacekey, String name) { - super(namespacekey, name); - } + public Strength(NamespacedKey namespacekey, String name) { + super(namespacekey, name); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/DamageType.java b/src/main/java/me/unurled/raxen/components/entity/DamageType.java new file mode 100644 index 0000000..5680d78 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/entity/DamageType.java @@ -0,0 +1,10 @@ +package me.unurled.raxen.components.entity; + +public enum DamageType { + NORMAL, + NORMAL_SPELL, + ENVIRONMENTAL_LAVA, + ENVIRONMENTAL_DROWNING, + ENVIRONMENTAL_FALL, + ENVIRONMENTAL_INSTANT; +} diff --git a/src/main/java/me/unurled/raxen/components/entity/other/EntityNamespacedKey.java b/src/main/java/me/unurled/raxen/components/entity/other/EntityNamespacedKey.java index 4e29387..68d003d 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/EntityNamespacedKey.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/EntityNamespacedKey.java @@ -5,43 +5,43 @@ import org.bukkit.NamespacedKey; public class EntityNamespacedKey { - public EntityNamespacedKey(Raxen main) { - name = new NamespacedKey(main, "NAME"); - level = new NamespacedKey(main, "LEVEL"); - maxHealth = new NamespacedKey(main, "MAX_HEALTH"); - health = new NamespacedKey(main, "HEALTH"); - itemHealth = new NamespacedKey(main, "ITEM_HEALTH"); - speed = new NamespacedKey(main, "SPEED"); - itemSpeed = new NamespacedKey(main, "ITEM_SPEED"); - defense = new NamespacedKey(main, "DEFENSE"); - itemDefense = new NamespacedKey(main, "ITEM_DEFENSE"); - strength = new NamespacedKey(main, "STRENGTH"); - itemStrength = new NamespacedKey(main, "ITEM_STRENGTH"); - maxMana = new NamespacedKey(main, "MAX_MANA"); - mana = new NamespacedKey(main, "MANA"); - itemMana = new NamespacedKey(main, "ITEM_MANA"); - luck = new NamespacedKey(main, "LUCK"); - itemLuck = new NamespacedKey(main, "ITEM_LUCK"); - inventory = new NamespacedKey(main, "INVENTORY"); - storage = new NamespacedKey(main, "STORAGE"); - } + public EntityNamespacedKey(Raxen main) { + name = new NamespacedKey(main, "NAME"); + level = new NamespacedKey(main, "LEVEL"); + maxHealth = new NamespacedKey(main, "MAX_HEALTH"); + health = new NamespacedKey(main, "HEALTH"); + itemHealth = new NamespacedKey(main, "ITEM_HEALTH"); + speed = new NamespacedKey(main, "SPEED"); + itemSpeed = new NamespacedKey(main, "ITEM_SPEED"); + defense = new NamespacedKey(main, "DEFENSE"); + itemDefense = new NamespacedKey(main, "ITEM_DEFENSE"); + strength = new NamespacedKey(main, "STRENGTH"); + itemStrength = new NamespacedKey(main, "ITEM_STRENGTH"); + maxMana = new NamespacedKey(main, "MAX_MANA"); + mana = new NamespacedKey(main, "MANA"); + itemMana = new NamespacedKey(main, "ITEM_MANA"); + luck = new NamespacedKey(main, "LUCK"); + itemLuck = new NamespacedKey(main, "ITEM_LUCK"); + inventory = new NamespacedKey(main, "INVENTORY"); + storage = new NamespacedKey(main, "STORAGE"); + } - public final NamespacedKey name; - public final NamespacedKey level; - public final NamespacedKey maxHealth; - public final NamespacedKey health; - public final NamespacedKey itemHealth; - public final NamespacedKey speed; - public final NamespacedKey itemSpeed; - public final NamespacedKey defense; - public final NamespacedKey itemDefense; - public final NamespacedKey strength; - public final NamespacedKey itemStrength; - public final NamespacedKey maxMana; - public final NamespacedKey mana; - public final NamespacedKey itemMana; - public final NamespacedKey luck; - public final NamespacedKey itemLuck; - public final NamespacedKey inventory; - public final NamespacedKey storage; + public final NamespacedKey name; + public final NamespacedKey level; + public final NamespacedKey maxHealth; + public final NamespacedKey health; + public final NamespacedKey itemHealth; + public final NamespacedKey speed; + public final NamespacedKey itemSpeed; + public final NamespacedKey defense; + public final NamespacedKey itemDefense; + public final NamespacedKey strength; + public final NamespacedKey itemStrength; + public final NamespacedKey maxMana; + public final NamespacedKey mana; + public final NamespacedKey itemMana; + public final NamespacedKey luck; + public final NamespacedKey itemLuck; + public final NamespacedKey inventory; + public final NamespacedKey storage; } diff --git a/src/main/java/me/unurled/raxen/components/entity/other/EntityUtils.java b/src/main/java/me/unurled/raxen/components/entity/other/EntityUtils.java index 24286a7..c13acce 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/EntityUtils.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/EntityUtils.java @@ -12,94 +12,114 @@ import org.jetbrains.annotations.NotNull; public class EntityUtils { - private static Raxen main; - private static EntityNamespacedKey namespacedKey; + private Raxen main; + private EntityNamespacedKey namespacedKey; - public EntityUtils(Raxen main) { - this.main = main; - namespacedKey = new EntityNamespacedKey(main); - } - - public static void setNameSpacedKeys( - org.bukkit.entity.@NotNull Entity e, - String name, - Integer level, - int health, - int itemHealth, - int defense, - int itemDefense, - int speed, - int itemSpeed, - int strength, - int itemDmg - ) { - PersistentDataContainer data = e.getPersistentDataContainer(); - data.set(namespacedKey.health, PersistentDataType.INTEGER, health); - data.set(namespacedKey.itemHealth, PersistentDataType.INTEGER, itemHealth); - data.set(namespacedKey.speed, PersistentDataType.INTEGER, speed); - data.set(namespacedKey.itemSpeed, PersistentDataType.INTEGER, itemSpeed); - data.set(namespacedKey.defense, PersistentDataType.INTEGER, defense); - data.set( - namespacedKey.itemDefense, - PersistentDataType.INTEGER, - itemDefense - ); - data.set(namespacedKey.strength, PersistentDataType.INTEGER, strength); - data.set(namespacedKey.itemStrength, PersistentDataType.INTEGER, itemDmg); - data.set(namespacedKey.name, PersistentDataType.STRING, name); - data.set(namespacedKey.level, PersistentDataType.INTEGER, level); - } - - public static void updateSkills(@NotNull LivingEntity livingEntity) { - PlayerManager pm = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; - defense = pm.getDefense().get(livingEntity); - maxMana = pm.getMaxMana().get(livingEntity); - itemDefense = pm.getItemDefense().get(livingEntity); - health = pm.getHealth().get(livingEntity); - itemHealth = pm.getItemHealth().get(livingEntity); - mana = pm.getMana().get(livingEntity); - speed = pm.getSpeed().get(livingEntity); - itemLuck = pm.getItemLuck().get(livingEntity); - strength = pm.getStrength().get(livingEntity); - luck = pm.getLuck().get(livingEntity); - maxHealth = pm.getMaxHealth().get(livingEntity); - itemStrength = pm.getItemStrength().get(livingEntity); - itemSpeed = pm.getItemSpeed().get(livingEntity); - itemMana = pm.getItemMana().get(livingEntity); - if ( - livingEntity.getAttribute( - org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED - ) != - null - ) { - livingEntity - .getAttribute(org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED) - .setBaseValue((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); + public EntityUtils(Raxen main) { + this.main = main; + namespacedKey = new EntityNamespacedKey(main); } - if ( - livingEntity.getAttribute( - org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED - ) != - null + + public void setNameSpacedKeys( + org.bukkit.entity.@NotNull Entity e, + String name, + Integer level, + int health, + int itemHealth, + int defense, + int itemDefense, + int speed, + int itemSpeed, + int strength, + int itemDmg ) { - livingEntity - .getAttribute(org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED) - .setBaseValue((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); + PersistentDataContainer data = e.getPersistentDataContainer(); + data.set(namespacedKey.health, PersistentDataType.INTEGER, health); + data.set( + namespacedKey.itemHealth, + PersistentDataType.INTEGER, + itemHealth + ); + data.set(namespacedKey.speed, PersistentDataType.INTEGER, speed); + data.set( + namespacedKey.itemSpeed, + PersistentDataType.INTEGER, + itemSpeed + ); + data.set(namespacedKey.defense, PersistentDataType.INTEGER, defense); + data.set( + namespacedKey.itemDefense, + PersistentDataType.INTEGER, + itemDefense + ); + data.set(namespacedKey.strength, PersistentDataType.INTEGER, strength); + data.set( + namespacedKey.itemStrength, + PersistentDataType.INTEGER, + itemDmg + ); + data.set(namespacedKey.name, PersistentDataType.STRING, name); + data.set(namespacedKey.level, PersistentDataType.INTEGER, level); + } + + public void updateSkills(@NotNull LivingEntity livingEntity) { + PlayerManager pm = + ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() + .getPlayerManager(); + int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; + defense = pm.getDefense().get(livingEntity); + maxMana = pm.getMaxMana().get(livingEntity); + itemDefense = pm.getItemDefense().get(livingEntity); + health = pm.getHealth().get(livingEntity); + itemHealth = pm.getItemHealth().get(livingEntity); + mana = pm.getMana().get(livingEntity); + speed = pm.getSpeed().get(livingEntity); + itemLuck = pm.getItemLuck().get(livingEntity); + strength = pm.getStrength().get(livingEntity); + luck = pm.getLuck().get(livingEntity); + maxHealth = pm.getMaxHealth().get(livingEntity); + itemStrength = pm.getItemStrength().get(livingEntity); + itemSpeed = pm.getItemSpeed().get(livingEntity); + itemMana = pm.getItemMana().get(livingEntity); + if ( + livingEntity.getAttribute( + org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED + ) != + null + ) { + livingEntity + .getAttribute( + org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED + ) + .setBaseValue( + (float) (0.0 + ((speed + itemSpeed) / 100) * 0.2) + ); + } + if ( + livingEntity.getAttribute( + org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED + ) != + null + ) { + livingEntity + .getAttribute( + org.bukkit.attribute.Attribute.GENERIC_MOVEMENT_SPEED + ) + .setBaseValue( + (float) (0.0 + ((speed + itemSpeed) / 100) * 0.2) + ); + } + livingEntity + .getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH) + .setBaseValue(20D + (health + itemHealth) / 100); + debug( + "Entity " + livingEntity.getType().name(), + "Speed " + (speed + itemSpeed), + "Health " + (health + itemHealth) + " Max Health " + maxHealth, + "Defense " + (defense + itemDefense), + "Strength " + (strength + itemStrength), + "Luck " + (luck + itemLuck), + "Mana " + (mana + itemMana) + " Max Mana " + maxMana + ); } - livingEntity - .getAttribute(org.bukkit.attribute.Attribute.GENERIC_MAX_HEALTH) - .setBaseValue(20D + (health + itemHealth) / 100); - debug( - "Entity " + livingEntity.getType().name(), - "Speed " + (speed + itemSpeed), - "Health " + (health + itemHealth) + " Max Health " + maxHealth, - "Defense " + (defense + itemDefense), - "Strength " + (strength + itemStrength), - "Luck " + (luck + itemLuck), - "Mana " + (mana + itemMana) + " Max Mana " + maxMana - ); - } } diff --git a/src/main/java/me/unurled/raxen/components/entity/other/MobData.java b/src/main/java/me/unurled/raxen/components/entity/other/MobData.java new file mode 100644 index 0000000..727d3aa --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/entity/other/MobData.java @@ -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 lastAttackedByTimes; + public HashMap 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 attributes; + + // TODO: mob ai + + // TODO: mob spawn + + public MobData() { + lastAttackedByTimes = new HashMap<>(); + damageDealt = new HashMap<>(); + } + + public void mount(Class 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("+" + 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 raxenPlayers = new ArrayList<>(); + double damageSum = 0; + RaxenPlayer rx = null; + for (Entry 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 entry : damageDealt.entrySet()) { + Player p = Bukkit.getPlayer(entry.getKey()); + if (p == null) { + continue; + } + if (me.unurled.raxen.utils.Math.flatDistance(p.getLocation(), deathLoc) < 50) { + if (entry.getValue() >= mostDealt) { + if (entry.getValue() == mostDealt && Math.random() > 0.5) { + continue; + } + if (main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey()) + == null) { + continue; + } + mostDealt = entry.getValue(); + priority = entry.getKey(); + topDamage = main.getManager().getPlayerManager().getRaxenPlayer(priority); + } + } + } + EntityManager manager = main.getManager().getEntityManager(); + if (drop || manager.getHealth().get(entity) < manager.getMaxMana().get(entity)) { + // TODO: mobdrop + } + + // TODO: respawn + } + + public void despawn() { + if (despawned) { + return; + } + // TODO: respawn + despawned = true; + dead = true; + EntityManager manager = main.getManager().getEntityManager(); + if (entity == null) { + manager.getSpawnedMob().remove(entity.getUniqueId()); + manager.getSpawnedMobsOnlyMain().remove(entity.getUniqueId()); + entity.remove(); + } + entity = null; + if (mount != null) { + manager.getSpawnedMob().remove(mount.getUniqueId()); + manager.getSpawnedMobsOnlyMain().remove(mount.getUniqueId()); + mount.remove(); + } + mount = null; + // TODO: ai + if (damageDealt != null) { + damageDealt = null; + } + attributes = null; + lastAttackedByTimes = null; + } + + public boolean attack(RaxenPlayer rx) { + return attack(rx, 0.5, -1, false); + } + + public boolean attack(RaxenPlayer pd, int rpgDamage) { + return attack(pd, 0.5, rpgDamage, false); + } + + public boolean attack(RaxenPlayer pd, int rpgDamage, boolean projectile) { + return attack(pd, 0.5, rpgDamage, projectile); + } + + public int getDamage() { + return main.getManager().getEntityManager().getStrength() + .get(entity); // TODO: get damage properly + } + + public boolean attack(RaxenPlayer pd, double knockback, int rpgDamage, boolean projectile) { + if (System.currentTimeMillis() < invuln) { + return false; + } + boolean success = false; + success = pd.damage(rpgDamage > -1 ? rpgDamage : getDamage(), entity, + DamageType.NORMAL); + if (success && !projectile) { + pd.knockback(entity, knockback); + } + return success; + } + + public void knockback(LivingEntity attacker, double knockBackMultiplier) { + return; + } + + + public boolean damage(int damageAmount, org.bukkit.entity.Entity damager, + DamageType damageType) { + return damage(damageAmount, damager, damageType, false); + } + + public boolean damage(int damageAmount, org.bukkit.entity.Entity damager, DamageType damageType, + boolean crit) { + if (System.currentTimeMillis() < invuln) { + return false; + } + if (dead) { + return false; + } + if (damager != null && damager instanceof Player player) { + if (!player.isOnline() + || main.getManager().getPlayerManager().getRaxenPlayer(player) == null) { + return false; + } + } + Health health = main.getManager().getEntityManager().getHealth(); + if (damageAmount > health.get(entity)) { + damageAmount = health.get(entity); + } + if (damager != null && damager instanceof Player player) { + if (damageDealt.containsKey(damager.getUniqueId())) { + damageDealt.put(damager.getUniqueId(), + damageDealt.get(damager.getUniqueId()) + damageAmount); + } else { + damageDealt.put(damager.getUniqueId(), (long) damageAmount); + } + // TODO: AI stuff + } + if (damager != null) { + lastAttackedByTimes.put(damager.getUniqueId(), System.currentTimeMillis()); + } + if (damageAmount < 1) { + damageAmount = 1; + } + health.set(entity, + health.get(entity) - damageAmount); + if (health.get(entity) <= 0) { + health.set(entity, 0); + } + if (damager != null && damager instanceof Player player) { + RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(player); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f); + } + if (health.get(entity) < 1) { + die(); + } else { + entity.playEffect(EntityEffect.HURT); + if (mount != null) { + mount.playEffect(EntityEffect.HURT); + } + displayCurrentHP(); + } + lastDamaged = System.currentTimeMillis(); + return true; + } + + public void displayCurrentHP() { + entity.customName(getHPDisplay()); + Bukkit.getScheduler().scheduleSyncDelayedTask(main, lastScheduledRevertHP = new Runnable() { + public void run() { + if (!dead && entity != null && entity.isValid() && !entity.isDead()) { + if (lastScheduledRevertHP == this) { + entity.customName(Utils.colorComp(fullName)); + } + } + } + }, 60L); + } + + public Component getHPDisplay() { + EntityManager manager = main.getManager().getEntityManager(); + int health = manager.getHealth().get(entity); + int maxHealth = manager.getMaxHealth().get(entity); + double percent = ((double) health) / ((double) maxHealth); + int green = (int) Math.floor(percent / 0.05); + if (green > 20) { + green = 20; + } else if (green < 1) { + green = 1; + } + StringBuilder sb = new StringBuilder(); + sb.append(""); + sb.append('['); + int firstHalf = green - 10; + if (firstHalf < 0) { + firstHalf = 0; + } + + sb.append(""); + for (int i = 0; i < 10 - firstHalf; i++) { + sb.append('|'); + } + sb.append(""); + for (int i = 0; i < firstHalf; i++) { + sb.append('|'); + } + sb.append(""); // TODO: tier color + sb.append(' '); + sb.append(health); + sb.append(' '); + int secondHalf = green - firstHalf; + + sb.append(""); + for (int i = 0; i < 10 - secondHalf; i++) { + sb.append('|'); + } + sb.append(""); + for (int i = 0; i < secondHalf; i++) { + sb.append('|'); + } + + sb.append(""); + sb.append(']'); + return Utils.colorComp(sb.toString()); + } +} diff --git a/src/main/java/me/unurled/raxen/components/entity/other/MobType.java b/src/main/java/me/unurled/raxen/components/entity/other/MobType.java new file mode 100644 index 0000000..22645b6 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/entity/other/MobType.java @@ -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 entityClass; + public int level; + public ArrayList prefixes; + public ArrayList suffix; + public long xp; + public ArrayList equips; + // TODO: public ArrayList 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; + } + } + +} diff --git a/src/main/java/me/unurled/raxen/components/entity/other/RaxenEntity.java b/src/main/java/me/unurled/raxen/components/entity/other/RaxenEntity.java index af12ecc..9c5cf8b 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/RaxenEntity.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/RaxenEntity.java @@ -1,70 +1,276 @@ package me.unurled.raxen.components.entity.other; +import static me.unurled.raxen.utils.Utils.colorString; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.UUID; import lombok.Getter; import lombok.Setter; 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 org.bukkit.Location; import org.bukkit.NamespacedKey; +import org.bukkit.Sound; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; public abstract class RaxenEntity { - private final Raxen main; + private final Raxen main; - @Getter - private final String name; + @Getter + private final String name; - @Getter - private Integer level; + @Getter + private final String ID; - @Getter - @Setter - private Double health; + public Component fullName; - @Getter - @Setter - private Double strength; + @Getter + private Integer level; - @Getter - @Setter - Boolean isAlive = false; + @Getter + @Setter + private Double health; - public RaxenEntity( - Raxen main, - String name, - Integer level, - Double health, - Double strength - ) { - this.main = main; - this.name = name; - this.level = level; - this.health = health; - this.strength = strength; - } + @Getter + @Setter + private Double strength; - public Entity createEntity(EntityType types, String name, Location location) { - Entity e = location.getWorld().spawnEntity(location, types); - e.setCustomNameVisible(true); - e.customName(Component.text(name)); + @Getter + @Setter + Boolean isAlive = false; - return e; - } + boolean despawned = false; - public void register(Entity e) { - PersistentDataContainer data = e.getPersistentDataContainer(); - data.set(new NamespacedKey(main, "NAME"), PersistentDataType.STRING, name); - } + me.unurled.raxen.components.entity.other.custom.Entity entity; + public HashMap lastAttackedByTimes; + public java.util.HashMap damageDealt; - public Double getMaxHealth(Entity e) { - PersistentDataContainer data = e.getPersistentDataContainer(); - EntityNamespacedKey key = new EntityNamespacedKey(main); - return data.get(key.maxHealth, PersistentDataType.DOUBLE); - } + @Getter + @Setter + Boolean isHostile; - public abstract Entity createEntity(Location location); + public RaxenEntity( + Raxen main, + String name, + String id, + Integer level, + Double health, + Double strength + ) { + this.main = main; + this.name = name; + ID = id; + this.level = level; + this.health = health; + this.strength = strength; + isHostile = true; + } + + /*public Entity createEntity( + me.unurled.raxen.components.entity.other.custom.Entity ent, + String name, + Location location + ) { + me.unurled.raxen.components.entity.other.custom.Entity e = (me.unurled.raxen.components.entity.other.custom.Entity) location.getWorld() +// .spawnEntity(location, ent); + e.setCustomNameVisible(true); + e.customName(Component.text(name)); + entity = e; + return e; + }*/ + + public void register(Entity e) { + PersistentDataContainer data = e.getPersistentDataContainer(); + data.set( + new NamespacedKey(main, "NAME"), + PersistentDataType.STRING, + name + ); + } + + public Double getMaxHealth(Entity e) { + PersistentDataContainer data = e.getPersistentDataContainer(); + EntityNamespacedKey key = new EntityNamespacedKey(main); + return data.get(key.maxHealth, PersistentDataType.DOUBLE); + } + + public abstract Entity createEntity(Location location); + + public void die() { + die(true); + } + + public void die(boolean drop) { + if (!isAlive) { + return; + } + isAlive = false; + // set mob ai false + Location deathLoc = entity.getLocation(); + entity.customName(fullName); + Tags.makeFloatingText("+ 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 players = new ArrayList<>(); + double damageSum = 0; + RaxenPlayer player = null; + for (Entry entry : damageDealt.entrySet()) { + if ((player = main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey())) + != null) { + damageSum += entry.getValue(); + totalLevel += player.getLevel(); + pdCount++; + players.add(main.getManager().getPlayerManager().getRaxenPlayer(entry.getKey())); + } + } + if (pdCount < 1) { + totalLevel = 1; + pdCount = 1; + } + double avgLv = totalLevel / (double) pdCount; + for (RaxenPlayer pd : players) { + if (damageDealt.containsKey(pd.getPlayer().getUniqueId())) { + pd.incrementMobCounter(ID); + double percentage = + damageDealt.get(pd.getPlayer().getUniqueId()) / (double) damageSum; + if (percentage >= 0.10) { + pd.addMobKills(); + // IDEA: is boss add to counter + } + long amt = (long) Math.ceil(entity.getXp() * percentage); + if (!(level >= 80 && pd.getLevel() >= 80) + && Math.abs(pd.getLevel() - level) >= 10) { + double penalty = 0.70; + penalty -= (Math.abs(pd.getLevel() - level) - 10) * 0.06; + if (penalty < 0.10) { + penalty = 0.10; + } + pd.gainXp((long) Math.ceil(amt * penalty), true); + } else { + pd.gainXp(amt); + } + } + } + } + + public void despawn() { + if (despawned) { + return; + } + despawned = true; + if (entity != null) { + entity.remove(); + } + entity = null; + // TODO: bosses, respawn etc + } + + + public boolean attack(RaxenPlayer pd) { + return attack(pd, 0.5, -1, false); + } + + public boolean attack(RaxenPlayer pd, int rpgDamage) { + return attack(pd, 0.5, rpgDamage, false); + } + + public boolean attack(RaxenPlayer pd, int rpgDamage, boolean projectile) { + return attack(pd, 0.5, rpgDamage, projectile); + } + + public boolean attack(RaxenPlayer pd, double knockback, int rDamage, boolean projectile) { + boolean sucess = false; + sucess = pd.damage(rDamage > -1 ? rDamage : (int) entity.getDamage(), entity, + DamageType.NORMAL); + if (sucess && !projectile) { +// pd.knockback(entity, knockback); + // TODO: knockback + } + return sucess; + } + + public boolean damage(int damageAmount, Entity damager, DamageType damageType) { + return damage(damageAmount, damager, damageType, false); + } + + public boolean damage(int damage, Entity damager, DamageType damageType, boolean crit) { + if (!isAlive) { + return false; + } + if (damager != null && damager instanceof Player player) { + if (!player.isOnline() + || main.getManager().getPlayerManager().getRaxenPlayer(player) == null) { + return false; + } + } + if (damage > entity.getHealth()) { + damage = entity.getHealth().intValue(); + } + if (damager != null && damager instanceof Player player) { + RaxenPlayer pd = main.getManager().getPlayerManager().getRaxenPlayer(player); + if (damageDealt.containsKey(damager.getUniqueId())) { + damageDealt.put(damager.getUniqueId(), + damageDealt.get(damager.getUniqueId()) + damage); + } else { + damageDealt.put(damager.getUniqueId(), (long) damage); + } + } + if (damager != null) { + lastAttackedByTimes.put(damager.getUniqueId(), System.currentTimeMillis()); + } + if (damage < 1) { + damage = 1; + } + health -= damage; + if (health < 0) { + health = 0.0; + } + if (damager != null && damager instanceof Player player) { + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f); + } + if (health <= 0) { + die(); + } else { + + } + return true; + } + + public String getFullName() { + if (isHostile) { + return colorString( + getLevel() + + "⚔️" + + getName() + + "" + + health + + "/" + + getMaxHealth(entity) + ); + } else { + return colorString( + getLevel() + + "❤️" + + getName() + + "" + + health + + "/" + + getMaxHealth(entity) + ); + } + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/other/custom/Entity.java b/src/main/java/me/unurled/raxen/components/entity/other/custom/Entity.java index f3c8c30..41415bc 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/custom/Entity.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/custom/Entity.java @@ -7,97 +7,108 @@ import lombok.Getter; import lombok.Setter; import me.unurled.raxen.Raxen; -public class Entity { +public abstract class Entity implements org.bukkit.entity.Entity { - private java.util.UUID uuid; + private java.util.UUID uuid; - private final String name; + private final String name; - @Getter - private Integer level; + @Getter + private Integer level; - @Setter - private Double health; + @Setter + private Double health; - @Getter - @Setter - private Double strength; + @Getter + @Setter + private Double strength; - @Getter - @Setter - private Double defense; + @Getter + @Setter + private Double defense; - @Getter - @Setter - private Double speed; + @Getter + @Setter + private Double speed; - @Getter - @Setter - private Double maxHealth; + @Getter + @Setter + private Double maxHealth; - @Getter - @Setter - private boolean isHostile; + @Getter + @Setter + private boolean isHostile; - public Entity( - String name, - Integer level, - Double maxHealth, - Double strength, - Double defense, - Double speed, - boolean isHostile - ) { - this.name = name; - this.level = level; - this.health = maxHealth; - this.strength = strength; - this.defense = defense; - this.speed = speed; - this.maxHealth = maxHealth; - this.isHostile = isHostile; - this.uuid = UUID.randomUUID(); - } + @Getter + @Setter + private double xp; - public void register(Raxen main) { - main.getManager().getEntityManager().entities.put(name, this); - } - - public String getName() { - return "" + name; - } - - public String getFullName(Entity e) { - if (isHostile) { - return colorString( - getColorLevel() + - "⚔️" + - getName() + - "" + - health + - "/" + - maxHealth - ); - } else { - return colorString( - getColorLevel() + - "❤️" + - getName() + - "" + - health + - "/" + - maxHealth - ); + public Entity( + String name, + Integer level, + Double maxHealth, + Double strength, + Double defense, + Double speed, + boolean isHostile, + double xp + ) { + this.name = name; + this.level = level; + this.health = maxHealth; + this.strength = strength; + this.defense = defense; + this.speed = speed; + this.maxHealth = maxHealth; + this.isHostile = isHostile; + this.uuid = UUID.randomUUID(); + this.xp = xp; } - } - public String getColorLevel() { - return level.toString(); - } + public void register(Raxen main) { +// main.getManager().getEntityManager().entities.put(name, this); + } - public Double getHealth() { - Double health = 0.0; + public String getName() { + return "" + name; + } - return health; - } + public String getFullName(Entity e) { + if (isHostile) { + return colorString( + getColorLevel() + + "⚔️" + + getName() + + "" + + health + + "/" + + maxHealth + ); + } else { + return colorString( + getColorLevel() + + "❤️" + + getName() + + "" + + health + + "/" + + maxHealth + ); + } + } + + public String getColorLevel() { + return level.toString(); + } + + public Double getHealth() { + Double health = 0.0; + + return health; + } + + public double getDamage() { + // TODO: calculate properly the damage + return strength; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/other/custom/Humanoid.java b/src/main/java/me/unurled/raxen/components/entity/other/custom/Humanoid.java index 512e352..d7414f1 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/custom/Humanoid.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/custom/Humanoid.java @@ -1,25 +1,674 @@ 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 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 { - 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 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... - public Humanoid( - String name, - Integer level, - Double maxHealth, - Double strength, - Double defense, - Double speed, - boolean isHostile, - String skin, - UUID skinUuid - ) { - super(name, level, maxHealth, strength, defense, speed, isHostile); - this.skin = skin; - this.skinUuid = skinUuid; - } + public Humanoid(String name, Integer level, Double maxHealth, Double strength, Double defense, + Double speed, boolean isHostile, double xp) { + super(name, level, maxHealth, strength, defense, speed, isHostile, xp); + } + + @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 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 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 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 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 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 getEffectivePermissions() { + return null; + } + + @Override + public boolean isOp() { + return false; + } + + @Override + public void setOp(boolean value) { + + } + + @Override + public @NotNull PersistentDataContainer getPersistentDataContainer() { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/other/custom/dungeon/forest/Elf.java b/src/main/java/me/unurled/raxen/components/entity/other/custom/dungeon/forest/Elf.java index 761cd2c..3aba9d5 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/custom/dungeon/forest/Elf.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/custom/dungeon/forest/Elf.java @@ -5,36 +5,37 @@ import me.unurled.raxen.Raxen; import me.unurled.raxen.components.entity.other.RaxenEntity; import org.bukkit.Location; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; public class Elf extends RaxenEntity { - @Getter - private final String name; + @Getter + private final String name; + private final String id = "elf"; - public Elf( - Raxen main, - String name, - Integer level, - Double health, - Double strength - ) { - super(main, name, level, health, strength); - this.name = name; - } + public Elf( + Raxen main, + String name, + Integer level, + Double health, + Double strength + ) { + super(main, name, "elf", level, health, strength); + this.name = name; + } - @Override - public Entity createEntity(Location location) { - return super.createEntity(EntityType.PLAYER, name, location); - } + /** + * 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; + } - /** - * 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; - } + @Override + public Entity createEntity(Location location) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/other/custom/dungeon/forest/Wolf.java b/src/main/java/me/unurled/raxen/components/entity/other/custom/dungeon/forest/Wolf.java index 421478d..e5db194 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/custom/dungeon/forest/Wolf.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/custom/dungeon/forest/Wolf.java @@ -5,31 +5,30 @@ import me.unurled.raxen.Raxen; import me.unurled.raxen.components.entity.other.RaxenEntity; import org.bukkit.Location; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; public class Wolf extends RaxenEntity { - @Getter - private final String name; + @Getter + private final String name; - public Wolf( - Raxen main, - String name, - Integer level, - Double health, - Double strength - ) { - super(main, name, level, health, strength); - this.name = name; - } + public Wolf( + Raxen main, + String name, + Integer level, + Double health, + Double strength + ) { + super(main, name, "elf", level, health, strength); + this.name = name; + } - public Wolf(Raxen main) { - super(main, "Wolf", 5, 100.0, 20.0); - this.name = "Wolf"; - } + public Wolf(Raxen main) { + super(main, "Wolf", "elf", 5, 100.0, 20.0); + this.name = "Wolf"; + } - @Override - public Entity createEntity(Location location) { - return super.createEntity(EntityType.WOLF, name, location); - } + @Override + public Entity createEntity(Location location) { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/other/custom/hostile/low/Goblin.java b/src/main/java/me/unurled/raxen/components/entity/other/custom/hostile/low/Goblin.java index b760dac..a17c5e0 100644 --- a/src/main/java/me/unurled/raxen/components/entity/other/custom/hostile/low/Goblin.java +++ b/src/main/java/me/unurled/raxen/components/entity/other/custom/hostile/low/Goblin.java @@ -1,39 +1,705 @@ 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.components.entity.other.RaxenEntity; 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.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 Goblin extends Entity { - RaxenEntity goblin; + RaxenEntity goblin; - public Goblin(Raxen main) { - super("Goblin", 1, 100.0, 10.0, 0.0, 50.0, true); - this.goblin = - new RaxenEntity(main, "Goblin", 1, 100.0, 10.0) { - @Override - public org.bukkit.entity.Entity createEntity(Location location) { - return super.createEntity(EntityType.PLAYER, "Goblin", location); - } - }; - register(main); - } + public Goblin(Raxen main) { + super("Goblin", 1, 100.0, 10.0, 0.0, 50.0, true, 100); + this.goblin = + new RaxenEntity(main, "Goblin", "goblin", 1, 100.0, 10.0) { + @Override + public org.bukkit.entity.Entity createEntity( + Location location + ) { + return null; + /* return super.createEntity( + EntityType.PLAYER, + "Goblin", + location + );*/ + } + }; + register(main); + } - public String getName() { - return "" + goblin.getName(); - } + public String getName() { + return "" + goblin.getName(); + } - public String getFullName(Entity e) { - return ( - "⚔️" + - getName() + - "" + - getHealth() + - "/" + - getMaxHealth() - ); - } + public String getFullName(Entity e) { + return ( + "⚔️" + + getName() + + "" + + getHealth() + + "/" + + 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 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 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 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 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 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 getEffectivePermissions() { + return null; + } + + @Override + public boolean isOp() { + return false; + } + + @Override + public void setOp(boolean value) { + + } + + @Override + public @NotNull PersistentDataContainer getPersistentDataContainer() { + return null; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/Inventories.java b/src/main/java/me/unurled/raxen/components/entity/player/Inventories.java index 5bf971c..f75987a 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/Inventories.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/Inventories.java @@ -4,17 +4,17 @@ import me.unurled.raxen.components.entity.player.storages.Inventory; public class Inventories { - private Inventory inv; + private Inventory inv; - public Inventories(Inventory inv) { - this.inv = inv; - } + public Inventories(Inventory inv) { + this.inv = inv; + } - public Inventory getInv() { - return inv; - } + public Inventory getInv() { + return inv; + } - public void setInv(Inventory inv) { - this.inv = inv; - } + public void setInv(Inventory inv) { + this.inv = inv; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/PlayerStatistics.java b/src/main/java/me/unurled/raxen/components/entity/player/PlayerStatistics.java new file mode 100644 index 0000000..e97b26d --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/entity/player/PlayerStatistics.java @@ -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}, + }; +} diff --git a/src/main/java/me/unurled/raxen/components/entity/player/PlayerUtils.java b/src/main/java/me/unurled/raxen/components/entity/player/PlayerUtils.java index 2c9ddc4..7796fad 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/PlayerUtils.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/PlayerUtils.java @@ -1,47 +1,99 @@ package me.unurled.raxen.components.entity.player; +import static me.unurled.raxen.utils.Utils.colorComp; import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.log; import me.unurled.raxen.Raxen; import me.unurled.raxen.manager.entity.PlayerManager; -import org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; public class PlayerUtils { - public static void updateSkills(Raxen main, Player player) { - PlayerManager pm = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; - defense = pm.getDefense().get(player); - maxMana = pm.getMaxMana().get(player); - itemDefense = pm.getItemDefense().get(player); - health = pm.getHealth().get(player); - itemHealth = pm.getItemHealth().get(player); - mana = pm.getMana().get(player); - speed = pm.getSpeed().get(player); - itemLuck = pm.getItemLuck().get(player); - strength = pm.getStrength().get(player); - luck = pm.getLuck().get(player); - maxHealth = pm.getMaxHealth().get(player); - itemStrength = pm.getItemStrength().get(player); - itemSpeed = pm.getItemSpeed().get(player); - itemMana = pm.getItemMana().get(player); - player - .getAttribute(Attribute.GENERIC_MAX_HEALTH) - .setBaseValue(20D + (health + itemHealth) / 100); - player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); - player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); - debug( - "Player " + player.getName(), - "Speed " + (speed + itemSpeed), - "Health " + (health + itemHealth) + " Max Health " + maxHealth, - "Defense " + (defense + itemDefense), - "Strength " + (strength + itemStrength), - "Luck " + (luck + itemLuck), - "Mana " + (mana + itemMana) + " Max Mana " + maxMana - ); - } + public static void updateSkills(Raxen main, Player player) { + PlayerManager pm = main.getManager().getPlayerManager(); + int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; + defense = pm.getDefense().get(player); + maxMana = pm.getMaxMana().get(player); + itemDefense = pm.getItemDefense().get(player); + health = pm.getHealth().get(player); + itemHealth = pm.getItemHealth().get(player); + mana = pm.getMana().get(player); + speed = pm.getSpeed().get(player); + itemLuck = pm.getItemLuck().get(player); + strength = pm.getStrength().get(player); + luck = pm.getLuck().get(player); + maxHealth = pm.getMaxHealth().get(player); + itemStrength = pm.getItemStrength().get(player); + itemSpeed = pm.getItemSpeed().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 + .getAttribute(Attribute.GENERIC_MAX_HEALTH) + .setBaseValue(heart * 2); + player.setWalkSpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); + player.setFlySpeed((float) (0.0 + ((speed + itemSpeed) / 100) * 0.2)); + debug( + "Player " + player.getName(), + "Speed " + (speed + itemSpeed), + "Health " + (health + itemHealth) + " Max Health " + maxHealth, + "Defense " + (defense + itemDefense), + "Strength " + (strength + itemStrength), + "Luck " + (luck + itemLuck), + "Mana " + (mana + itemMana) + " Max Mana " + maxMana + ); + pm.updateActionBar(player); + } + + public static BukkitTask actionBarPlayer( + Raxen main, + PlayerManager pm, + Player player + ) { + return new BukkitRunnable() { + @Override + public void run() { + player.sendActionBar( + colorComp( + "" + + pm.getHealth().get(player) + + "/" + + pm.getMaxHealth().get(player) + + "❤ " + + pm.getMana().get(player) + + "/" + + pm.getMaxMana().get(player) + + "" + ) + ); + } + } + .runTaskTimerAsynchronously(main, 10, 20); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/RaxenPlayer.java b/src/main/java/me/unurled/raxen/components/entity/player/RaxenPlayer.java index 2a26726..e9d5441 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/RaxenPlayer.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/RaxenPlayer.java @@ -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.Utils.debug; +import static me.unurled.raxen.utils.Utils.log; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import lombok.Getter; +import lombok.Setter; 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.MobData; 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.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.Items; +import me.unurled.raxen.utils.Math; +import me.unurled.raxen.utils.Utils; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; +import org.bukkit.EntityEffect; 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.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; @@ -24,151 +42,562 @@ import org.bukkit.persistence.PersistentDataType; public class RaxenPlayer { - private final Raxen main; - private final Player player; - private final EntityNamespacedKey namespacedKey; + private final Raxen main; + @Getter + private final Player player; + private final EntityNamespacedKey namespacedKey; - private Boolean isRaxenPlayer; + double crit_chance = 0.05; + public double critDamage = 1.50; + public boolean dead = false; - private Attribute attribute; + private DamageType lastDamageCause = DamageType.NORMAL; - private Storage storages; - private Inventories inventory; + private long lastEnvironmentalDamaged = 0; + private long lastDamagedNonEnvironmental = 0; + private long lastDamaged = 0; - public RaxenPlayer(Raxen main, Player player) { - this.main = main; - this.player = player; - this.namespacedKey = new EntityNamespacedKey(main); - this.isRaxenPlayer = true; - } + private Boolean isRaxenPlayer; - public Attribute createNewAttribute() { - debug(main, "Created new Attribute"); - EntityAttributes.setAttributes( - player, - 100, - 100, - 0, - 50, - 0, - 100, - 0, - 100, - 0, - 100, - 100, - 0, - 10, - 0 - ); - return new Attribute( - 100, - 100, - 0, - 50, - 0, - 100, - 0, - 100, - 0, - 100, - 100, - 0, - 10, - 0 - ); - } + private Attribute attribute; - public void setStorages( - org.bukkit.inventory.Inventory inv, - org.bukkit.inventory.Inventory ec - ) { - setStorage(ec); - setInventory(inv); - } + private Storage storages; + private Inventories inventory; - public Storage getStorage() { - PersistentDataContainer data = player.getPersistentDataContainer(); - String store = data.get(namespacedKey.storage, PersistentDataType.STRING); - org.bukkit.inventory.Inventory ec = Bukkit.createInventory( - null, - 54, - Component.text("Ender Chest") - ); - ec = setItemsToInventory(Items.mapItemStackDeserialize(store), ec); - EnderChest ecc = new EnderChest(ec); - Storage storage = new Storage(ecc); - return storage; - } + private boolean inTutorial; - public Inventories getInventory() { - PersistentDataContainer data = player.getPersistentDataContainer(); - String inv = data.get(namespacedKey.inventory, PersistentDataType.STRING); - org.bukkit.inventory.Inventory invv = Bukkit.createInventory( - player, - InventoryType.PLAYER - ); - invv = - setItemsToInventory( - Items.listItemStackDeserialize(inv), - (PlayerInventory) invv - ); - Inventory invvv = new Inventory(invv); - Inventories invvvv = new Inventories(invvv); - return invvvv; - } + private HashMap> mobCounter = new HashMap>(); - public void setInventory(org.bukkit.inventory.Inventory inv) { - PersistentDataContainer data = player.getPersistentDataContainer(); - List listInv = new ArrayList(); - Integer reverse = 0; - for (ItemStack it : inv) { - reverse = reverse + 1; - if (it != null && it.getType() != Material.AIR) { - String s = Items.itemStackSerialize(it, reverse); - listInv.add(s); - } + 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) { + this.main = main; + this.player = player; + this.namespacedKey = new EntityNamespacedKey(main); + this.isRaxenPlayer = true; } - String invv = Items.listItemStackSerialize(listInv); - this.inventory = new Inventories(new Inventory(inv)); - data.set(namespacedKey.inventory, PersistentDataType.STRING, invv); - } - public void setStorage(org.bukkit.inventory.Inventory ec) { - PersistentDataContainer data = player.getPersistentDataContainer(); - List list = new ArrayList(); - int reverse = 0; - for (ItemStack it : ec) { - if (it != null) { - String s = Items.itemStackSerialize(it, reverse); - list.add(s); - } - reverse += 1; + public Attribute createNewAttribute() { + debug(main, "Created new Attribute"); + EntityAttributes.setAttributes( + player, + 100, + 100, + 0, + 50, + 0, + 100, + 0, + 100, + 0, + 100, + 100, + 0, + 10, + 0 + ); + return new Attribute( + 100, + 100, + 0, + 50, + 0, + 100, + 0, + 100, + 0, + 100, + 100, + 0, + 10, + 0 + ); } - String store = Items.listItemStackSerialize(list); - this.storages = new Storage(new EnderChest(ec)); - data.set(namespacedKey.storage, PersistentDataType.STRING, store); - } - public Storage createStorage() { - setStorage(Bukkit.createInventory(null, 54, Component.text("Ender Chest"))); - return getStorage(); - } + public void setStorages( + org.bukkit.inventory.Inventory inv, + org.bukkit.inventory.Inventory ec + ) { + setStorage(ec); + setInventory(inv); + } - public Inventories createInventory() { - setInventory(Bukkit.createInventory(null, InventoryType.PLAYER)); - return getInventory(); - } + public Storage getStorage() { + PersistentDataContainer data = player.getPersistentDataContainer(); + String store = data.get( + namespacedKey.storage, + PersistentDataType.STRING + ); + org.bukkit.inventory.Inventory ec = Bukkit.createInventory( + null, + 54, + Component.text("Ender Chest") + ); + ec = setItemsToInventory(Items.mapItemStackDeserialize(store), ec); + EnderChest ecc = new EnderChest(ec); + Storage storage = new Storage(ecc); + return storage; + } - public Boolean isRaxenPlayer() { - return isRaxenPlayer; - } + public Inventories getInventory() { + PersistentDataContainer data = player.getPersistentDataContainer(); + String inv = data.get( + namespacedKey.inventory, + PersistentDataType.STRING + ); + org.bukkit.inventory.Inventory invv = Bukkit.createInventory( + player, + InventoryType.PLAYER + ); + invv = + setItemsToInventory( + Items.listItemStackDeserialize(inv), + (PlayerInventory) invv + ); + Inventory invvv = new Inventory(invv); + Inventories invvvv = new Inventories(invvv); + return invvvv; + } - public void isRaxenPlayer(boolean player) { - isRaxenPlayer = player; - } + public void setInventory(org.bukkit.inventory.Inventory inv) { + PersistentDataContainer data = player.getPersistentDataContainer(); + List listInv = new ArrayList(); + int reverse = 0; + for (ItemStack it : inv) { + reverse = reverse + 1; + if (it != null && it.getType() != Material.AIR) { + String s = Items.itemStackSerialize(it, reverse); + listInv.add(s); + } + } + String invv = Items.listItemStackSerialize(listInv); + this.inventory = new Inventories(new Inventory(inv)); + data.set(namespacedKey.inventory, PersistentDataType.STRING, invv); + } - public Attribute getAttribute() { - return attribute; - } + public void setStorage(org.bukkit.inventory.Inventory ec) { + PersistentDataContainer data = player.getPersistentDataContainer(); + List list = new ArrayList(); + int reverse = 0; + for (ItemStack it : ec) { + if (it != null) { + String s = Items.itemStackSerialize(it, reverse); + list.add(s); + } + reverse += 1; + } + String store = Items.listItemStackSerialize(list); + this.storages = new Storage(new EnderChest(ec)); + data.set(namespacedKey.storage, PersistentDataType.STRING, store); + } + + public Storage createStorage() { + setStorage( + Bukkit.createInventory(null, 54, Component.text("Ender Chest")) + ); + return getStorage(); + } + + public Inventories createInventory() { + org.bukkit.inventory.Inventory inv = Bukkit.createInventory(null, InventoryType.PLAYER); + setInventory(inv); + return new Inventories(new Inventory(inv)); + } + + public Boolean isRaxenPlayer() { + return isRaxenPlayer; + } + + public void isRaxenPlayer(boolean player) { + isRaxenPlayer = player; + } + + public Attribute getAttribute() { + return attribute; + } + + public boolean isInTutorial() { + return inTutorial; + } + + public void setInTutorial(boolean inTutorial) { + this.inTutorial = inTutorial; + } + + public int getDamage() { + return 0; + } + + public boolean attackPlayer(RaxenPlayer player) { + return attackPlayer(player, -1, false, 0.5); + } + + public boolean attackPlayer(RaxenPlayer player, int damage) { + return attackPlayer(player, damage, false, 0.5); + } + + public boolean attackPlayer(RaxenPlayer player, int damage, boolean projectile) { + return attackPlayer(player, damage, projectile, 0.5); + } + + public boolean attackPlayer(RaxenPlayer player, int damage, boolean projectile, + double knockback) { + if (player == null) { + return false; + } + if (player == null) { + return false; + } + int eDamage; + if (damage > 0) { + eDamage = damage; + } else { + eDamage = getDamage(); + } + boolean crit = false; + if (java.lang.Math.random() < crit_chance) { + crit = true; + eDamage = (int) (eDamage * 1.5); + } + boolean sucess = false; + // TODO: calculate with classes... later + sucess = player.damage(eDamage, this.player, DamageType.NORMAL, crit); + return sucess; + } + + public boolean attackMob(MobData other) { + return attackMob(other, 0.5, -1, false); + } + + public boolean attackMob(MobData other, int rpgDamage) { + return attackMob(other, 0.5, rpgDamage, false); + } + + public boolean attackMob(MobData other, int rpgDamage, boolean projectile) { + return attackMob(other, 0.5, rpgDamage, projectile); + } + + public boolean attackMob(MobData other, double knockback, int rpgDamage, + boolean projectil) { + Player p = getPlayer(); + if (p == null || other == null) { + return false; + } + int damage; + if (rpgDamage > 0) { + damage = rpgDamage; + } else { + damage = getDamage(); + } + boolean crit = false; + double critChanceTemp = crit_chance; + if (java.lang.Math.random() < critChanceTemp) { + crit = true; + damage *= critDamage; + } + boolean sucess = false; + sucess = other.damage(damage, p, DamageType.NORMAL, crit); + if (sucess && !projectil) { + // TODO: other.knockback(p, knockback); + } + return sucess; + } + + public boolean damage(int damage, Entity damager, DamageType damageType) { + return damage(damage, damager, damageType, false); + } + + public boolean damage(int damage, Entity damager, DamageType damageType, boolean crit) { + if (dead) { + return false; + } + if (System.currentTimeMillis() - lastEnvironmentalDamaged < 600 && ( + damageType == DamageType.ENVIRONMENTAL_LAVA + || damageType == DamageType.ENVIRONMENTAL_DROWNING + || damageType == DamageType.ENVIRONMENTAL_FALL)) { + return false; + } + if (player == null) { + return false; + } + if (damager != null) { + if (damager instanceof Player) { + RaxenPlayer damagerRX = main.getManager().getPlayerManager() + .getRaxenPlayer((Player) damager); + if (!((Player) damager).isOnline() || damagerRX == null) { + return false; + } + // TODO: check if same party later not now + + } + } + switch (lastDamageCause = damageType) { + case NORMAL: + case NORMAL_SPELL: + damage -= Math.randInt(0, getAttribute().getDefense()); + lastDamagedNonEnvironmental = System.currentTimeMillis(); + break; + case ENVIRONMENTAL_FALL: + if (damage >= getAttribute().getHealth()) { + damage = getAttribute().getHealth() - 1; + } + break; + } + if (damageType == DamageType.ENVIRONMENTAL_LAVA + || damageType == DamageType.ENVIRONMENTAL_DROWNING + || damageType == DamageType.ENVIRONMENTAL_FALL) { + lastEnvironmentalDamaged = System.currentTimeMillis(); + } else if (damageType == DamageType.NORMAL) { + lastDamaged = System.currentTimeMillis(); + } + if (damager != null && damager != player && damager instanceof Player) { + damage *= 0.8; // pvp nerf + } + if (damage < 1) { + damage = 1; + } + if (damageType == DamageType.NORMAL_SPELL || damageType == DamageType.NORMAL) { + if (damage > getAttribute().getHealth() * 0.5) { + player.leaveVehicle(); + } + } + getAttribute().setHealth(getAttribute().getHealth() - damage); + if (getAttribute().getHealth() < 0) { + getAttribute().setHealth(0); + } + if (damager != null && damager != player) { + if (damager instanceof Player) { + RaxenPlayer damagerRX = main.getManager().getPlayerManager() + .getRaxenPlayer((Player) damager); + if (damagerRX != null) { + Player p2 = damagerRX.getPlayer(); + if (p2 != null && p2.isValid()) { + p2.playSound(p2.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f); + } + } + } + } + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.85f, 0.85f); + if (System.currentTimeMillis() - lastDamaged < 1000) { + player.playEffect(EntityEffect.HURT); + } + if (getAttribute().getHealth() <= 0) { + die(); + } else { + // TODO: update health display on action bar + } + return true; + } + + public void die() { + log("player " + player.displayName() + " died"); + } + + public void incrementMobCounter(String mob) { + if (mobCounter.containsKey(mob)) { + mobCounter.get(mob).replaceAll((k, v) -> v + 1); + // TODO: mob quest tracker ? + } + } + + public int getMobKills() { + return mobKills; + } + + public int getPlayerKills() { + return playerKills; + } + + public int getDeaths() { + return deaths; + } + + public int getBossKills() { + return bossKills; + } + + public void setMobKills(int mobKills) { + this.mobKills = mobKills; + } + + public void setPlayerKills(int playerKills) { + this.playerKills = playerKills; + } + + public void setDeaths(int deaths) { + this.deaths = deaths; + } + + public void setBossKills(int bossKills) { + this.bossKills = bossKills; + } + + public void addMobKills(int mobKills) { + this.mobKills += mobKills; + } + + public void addMobKills() { + this.mobKills += 1; + } + + public void addPlayerKills(int playerKills) { + this.playerKills += playerKills; + } + + public void addPlayerKills() { + this.playerKills += 1; + } + + public void addDeaths(int deaths) { + this.deaths += deaths; + } + + public void addDeaths() { + this.deaths += 1; + } + + public void addBossKills(int bossKills) { + this.bossKills += bossKills; + } + + public void addBossKills() { + this.bossKills += 1; + } + + public void gainXp(long amt) { + gainXp(amt, false); + } + + public void gainXp(long amt, boolean penalty) { + xp += amt; + Player p = getPlayer(); + if (p == null || !p.isValid()) { + return; + } + int bonus = 0; + // IDEA: per class xp bonus + // IDEA: party xp multiplier + long tXp = amt; + if (bonus > 0) { + tXp += bonus; + xp += bonus; + } + if (xp >= getXpForNextLevel()) { + long extra = xp - getXpForNextLevel(); + xp = 0; + level++; + xp = extra < getXpForNextLevel() ? extra : getXpForNextLevel() - 1; + // TODO: take care of stats level up + // TODO: update health and mana display; + } + } + + private int lastLevel = -1; + private long cachedXp = -1; + + public long getXpForNextLevel() { + long ret = 1; + if (lastLevel == level && cachedXp > 0) { + return cachedXp; + } + ret = PlayerStatistics.getEXPForNextLevel(level); + if (ret < 0) { + ret = Long.MAX_VALUE; + } + lastLevel = level; + cachedXp = ret; + return ret; + } + + public void knockback(LivingEntity attacker, double knockBackMultiplier) { + return; + } + + public void updateHealthManaDisplay() { + Player p = getPlayer(); + PlayerManager manager = main.getManager().getPlayerManager(); + if (p != null) { + int health = manager.getHealth().get(p); + int maxHealth = manager.getMaxHealth().get(p); + int mana = manager.getMana().get(p); + int maxMana = manager.getMaxMana().get(p); + if (health > maxHealth) { + manager.getHealth().set(p, maxHealth); + health = manager.getHealth().get(p); + } + if (health < 0) { + manager.getHealth().set(p, 0); + health = manager.getHealth().get(p); + } + if (mana > maxMana) { + manager.getMana().set(p, maxMana); + mana = manager.getMana().get(p); + } + if (dead) { + return; + } + double percent = ((double) health) / ((double) maxHealth); + StringBuilder sb = new StringBuilder(); + BarColor color = BarColor.GREEN; + if (percent > 0.5) { + sb.append(""); + sb.append(health); + sb.append(" HP"); + } else if (percent > 0.20) { + sb.append(""); + sb.append(health); + sb.append(" HP"); + color = BarColor.YELLOW; + } else { + sb.append("DANGER - "); + sb.append(health); + sb.append(" - DANGER"); + color = BarColor.RED; + } + sb.append(""); + // 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(" "); + sb2.append(cs.toString()); + p.sendActionBar(Utils.colorComp(sb2.toString())); + } + } + +// p.setFoodLevel(mana * 2); + p.setLevel(level); + p.setExp((float) (((double) xp) / ((double) getXpForNextLevel()))); + } + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/Scoreboard.java b/src/main/java/me/unurled/raxen/components/entity/player/Scoreboard.java index 4f9e644..7bb4dd3 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/Scoreboard.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/Scoreboard.java @@ -1,75 +1,86 @@ package me.unurled.raxen.components.entity.player; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.textCompToString; import me.unurled.raxen.Raxen; import me.unurled.raxen.utils.libs.Vault; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.scoreboard.*; +import org.bukkit.scoreboard.Criteria; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Score; +import org.bukkit.scoreboard.ScoreboardManager; public class Scoreboard { - private Raxen main; - private Vault vault; + private Raxen main; + private Vault vault; - public Scoreboard(Raxen main) { - this.main = main; - this.vault = main.getManager().getLibsManager().getVault(); - } - - public void createScorebord(Player player) { - ScoreboardManager manager = Bukkit.getScoreboardManager(); - org.bukkit.scoreboard.Scoreboard board = manager.getNewScoreboard(); - Objective obj = board.registerNewObjective( - "Raxen", - Criteria.DUMMY, - colorTextComp("Elixium") - ); - obj.setDisplaySlot(DisplaySlot.SIDEBAR); - Score score = obj.getScore( - textCompToString(colorTextComp("-------------")) - ); - score.setScore(4); - Score score1 = obj.getScore( - textCompToString(colorTextComp("Name:" + player.getName())) - ); - score1.setScore(3); - Score score2 = obj.getScore( - textCompToString(colorTextComp("Location")) - ); - score2.setScore(2); - Score score3 = obj.getScore( - textCompToString( - colorTextComp("Coins: " + vault.getBalanceString(player)) - ) - ); - score3.setScore(1); - Score score4 = obj.getScore( - textCompToString(colorTextComp("unurled.me")) - ); - score4.setScore(0); - player.setScoreboard(board); - } - - public void updateScoreboardTransaction(Player player) { - if (player != null) { - Objective objective = player - .getScoreboard() - .getObjective(DisplaySlot.SIDEBAR); - player.getScoreboard().getObjective(DisplaySlot.SIDEBAR); - debug(main, String.valueOf(player.getScoreboard().getEntries())); - for (String str : player.getScoreboard().getEntries()) { - if (str.contains(player.getName())) {} - } - player.getScoreboard().resetScores("Coins"); - assert objective != null; - Score score = objective.getScore( - textCompToString( - colorTextComp("Coins: " + vault.getBalanceString(player)) - ) - ); - score.setScore(1); + public Scoreboard(Raxen main) { + this.main = main; + this.vault = main.getManager().getLibsManager().getVault(); + } + + public void createScorebord(Player player) { + ScoreboardManager manager = Bukkit.getScoreboardManager(); + org.bukkit.scoreboard.Scoreboard board = manager.getNewScoreboard(); + Objective obj = board.registerNewObjective( + "Raxen", + Criteria.DUMMY, + colorTextComp("Elixium") + ); + obj.setDisplaySlot(DisplaySlot.SIDEBAR); + Score score = obj.getScore( + textCompToString(colorTextComp("-------------")) + ); + score.setScore(4); + Score score1 = obj.getScore( + textCompToString(colorTextComp("Name:" + player.getName())) + ); + score1.setScore(3); + Score score2 = obj.getScore( + textCompToString(colorTextComp("Location")) + ); + score2.setScore(2); + Score score3 = obj.getScore( + textCompToString( + colorTextComp( + "Coins: " + vault.getBalanceString(player) + ) + ) + ); + score3.setScore(1); + Score score4 = obj.getScore( + textCompToString(colorTextComp("unurled.me")) + ); + score4.setScore(0); + player.setScoreboard(board); + } + + public void updateScoreboardTransaction(Player player) { + if (player != null) { + Objective objective = player + .getScoreboard() + .getObjective(DisplaySlot.SIDEBAR); + player.getScoreboard().getObjective(DisplaySlot.SIDEBAR); + debug(main, String.valueOf(player.getScoreboard().getEntries())); + for (String str : player.getScoreboard().getEntries()) { + if (str.contains(player.getName())) { + } + } + player.getScoreboard().resetScores("Coins"); + assert objective != null; + Score score = objective.getScore( + textCompToString( + colorTextComp( + "Coins: " + vault.getBalanceString(player) + ) + ) + ); + score.setScore(1); + } } - } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/Storage.java b/src/main/java/me/unurled/raxen/components/entity/player/Storage.java index 3caff10..f1da721 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/Storage.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/Storage.java @@ -4,17 +4,17 @@ import me.unurled.raxen.components.entity.player.storages.EnderChest; public class Storage { - private EnderChest ec; + private EnderChest ec; - public Storage(EnderChest ec) { - this.ec = ec; - } + public Storage(EnderChest ec) { + this.ec = ec; + } - public EnderChest getEc() { - return ec; - } + public EnderChest getEc() { + return ec; + } - public void setEc(EnderChest ec) { - this.ec = ec; - } + public void setEc(EnderChest ec) { + this.ec = ec; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attribute.java b/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attribute.java index c19242a..9edb508 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attribute.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attribute.java @@ -5,39 +5,39 @@ import lombok.Setter; public class Attribute { - @Getter - @Setter - private int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; + @Getter + @Setter + private int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; - public Attribute( - int maxHealth, - int health, - int itemHealth, - int defense, - int itemDefense, - int speed, - int itemSpeed, - int strength, - int itemStrength, - int maxMana, - int mana, - int itemMana, - int luck, - int itemLuck - ) { - this.maxHealth = maxHealth; - this.health = health; - this.itemHealth = itemHealth; - this.defense = defense; - this.itemDefense = itemDefense; - this.speed = speed; - this.itemSpeed = itemSpeed; - this.strength = strength; - this.itemStrength = itemStrength; - this.maxHealth = maxMana; - this.mana = mana; - this.itemMana = itemMana; - this.luck = luck; - this.itemLuck = itemLuck; - } + public Attribute( + int maxHealth, + int health, + int itemHealth, + int defense, + int itemDefense, + int speed, + int itemSpeed, + int strength, + int itemStrength, + int maxMana, + int mana, + int itemMana, + int luck, + int itemLuck + ) { + this.maxHealth = maxHealth; + this.health = health; + this.itemHealth = itemHealth; + this.defense = defense; + this.itemDefense = itemDefense; + this.speed = speed; + this.itemSpeed = itemSpeed; + this.strength = strength; + this.itemStrength = itemStrength; + this.maxHealth = maxMana; + this.mana = mana; + this.itemMana = itemMana; + this.luck = luck; + this.itemLuck = itemLuck; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attributes.java b/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attributes.java index f4049f8..232d43b 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attributes.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/attributes/Attributes.java @@ -11,96 +11,96 @@ import org.jetbrains.annotations.NotNull; public class Attributes { - private static EntityNamespacedKey namespacedKey; + private static EntityNamespacedKey namespacedKey; - public Attributes(Raxen main) { - namespacedKey = new EntityNamespacedKey(main); - } + public Attributes(Raxen main) { + namespacedKey = new EntityNamespacedKey(main); + } - @Contract("_ -> new") - public static @NotNull Attribute getAttribute(Player player) { - int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; - PlayerManager pm = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - Entity e = player; - defense = pm.getDefense().get(e); - maxMana = pm.getMaxMana().get(e); - itemDefense = pm.getItemDefense().get(e); - health = pm.getHealth().get(e); - itemHealth = pm.getItemHealth().get(e); - mana = pm.getMana().get(e); - speed = pm.getSpeed().get(e); - itemLuck = pm.getItemLuck().get(e); - strength = pm.getStrength().get(e); - luck = pm.getLuck().get(e); - maxHealth = pm.getMaxHealth().get(e); - itemStrength = pm.getItemStrength().get(e); - itemSpeed = pm.getItemSpeed().get(e); - itemMana = pm.getItemMana().get(e); - return new Attribute( - maxHealth, - health, - itemHealth, - defense, - itemDefense, - speed, - itemSpeed, - strength, - itemStrength, - maxMana, - mana, - itemMana, - luck, - itemLuck - ); - } + @Contract("_ -> new") + public static @NotNull Attribute getAttribute(Player player) { + int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; + PlayerManager pm = + ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() + .getPlayerManager(); + Entity e = player; + defense = pm.getDefense().get(e); + maxMana = pm.getMaxMana().get(e); + itemDefense = pm.getItemDefense().get(e); + health = pm.getHealth().get(e); + itemHealth = pm.getItemHealth().get(e); + mana = pm.getMana().get(e); + speed = pm.getSpeed().get(e); + itemLuck = pm.getItemLuck().get(e); + strength = pm.getStrength().get(e); + luck = pm.getLuck().get(e); + maxHealth = pm.getMaxHealth().get(e); + itemStrength = pm.getItemStrength().get(e); + itemSpeed = pm.getItemSpeed().get(e); + itemMana = pm.getItemMana().get(e); + return new Attribute( + maxHealth, + health, + itemHealth, + defense, + itemDefense, + speed, + itemSpeed, + strength, + itemStrength, + maxMana, + mana, + itemMana, + luck, + itemLuck + ); + } - public static void setAttributes( - Player player, - int maxHealth, - int health, - int itemHealth, - int defense, - int itemDefense, - int speed, - int itemSpeed, - int strength, - int itemStrength, - int maxMana, - int mana, - int itemMana, - int luck, - int itemLuck - ) { - PlayerManager pm = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - Entity e = player; - pm.getDefense().set(e, defense); - pm.getMaxMana().set(e, maxMana); - pm.getItemDefense().set(e, itemDefense); - pm.getHealth().set(e, health); - pm.getItemHealth().set(e, itemHealth); - pm.getMana().set(e, mana); - pm.getSpeed().set(e, speed); - pm.getItemLuck().set(e, itemLuck); - pm.getStrength().set(e, strength); - pm.getLuck().set(e, luck); - pm.getMaxHealth().set(e, maxHealth); - pm.getItemStrength().set(e, itemStrength); - pm.getItemSpeed().set(e, itemSpeed); - pm.getItemMana().set(e, itemMana); - } + public static void setAttributes( + Player player, + int maxHealth, + int health, + int itemHealth, + int defense, + int itemDefense, + int speed, + int itemSpeed, + int strength, + int itemStrength, + int maxMana, + int mana, + int itemMana, + int luck, + int itemLuck + ) { + PlayerManager pm = + ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() + .getPlayerManager(); + Entity e = player; + pm.getDefense().set(e, defense); + pm.getMaxMana().set(e, maxMana); + pm.getItemDefense().set(e, itemDefense); + pm.getHealth().set(e, health); + pm.getItemHealth().set(e, itemHealth); + pm.getMana().set(e, mana); + pm.getSpeed().set(e, speed); + pm.getItemLuck().set(e, itemLuck); + pm.getStrength().set(e, strength); + pm.getLuck().set(e, luck); + pm.getMaxHealth().set(e, maxHealth); + pm.getItemStrength().set(e, itemStrength); + pm.getItemSpeed().set(e, itemSpeed); + pm.getItemMana().set(e, itemMana); + } - public static String[] getNameList() { - return new String[] { - "Defense", - "Health", - "Luck", - "Mana", - "Speed", - "Strength", - }; - } + public static String[] getNameList() { + return new String[] { + "Defense", + "Health", + "Luck", + "Mana", + "Speed", + "Strength" + }; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/classes/Class.java b/src/main/java/me/unurled/raxen/components/entity/player/classes/Class.java index 9ccc4b6..8aa3c89 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/classes/Class.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/classes/Class.java @@ -8,46 +8,46 @@ import org.bukkit.inventory.ItemStack; public class Class { - @Getter - String name; + @Getter + String name; - @Getter - String colorName; + @Getter + String colorName; - @Getter - String ID; + @Getter + String ID; - @Getter - ItemStack placeHolder; + @Getter + ItemStack placeHolder; - @Getter - Integer max_level; + @Getter + Integer max_level; - public Class( - String name, - String colorName, - String ID, - String itemPlaceHolder, - Integer max_level - ) { - this.name = name; - this.ID = ID; - this.placeHolder = new ItemStack(Material.getMaterial(itemPlaceHolder)); - this.placeHolder.getItemMeta().displayName(colorTextComp(colorName)); - this.max_level = max_level; - } + public Class( + String name, + String colorName, + String ID, + String itemPlaceHolder, + Integer max_level + ) { + this.name = name; + this.ID = ID; + this.placeHolder = new ItemStack(Material.getMaterial(itemPlaceHolder)); + this.placeHolder.getItemMeta().displayName(colorTextComp(colorName)); + this.max_level = max_level; + } - public Class( - String name, - String colorName, - String ID, - ItemStack itemPlaceHolder, - Integer max_level - ) { - this.name = name; - this.ID = ID; - this.placeHolder = itemPlaceHolder; - this.placeHolder.getItemMeta().displayName(colorTextComp(colorName)); - this.max_level = max_level; - } + public Class( + String name, + String colorName, + String ID, + ItemStack itemPlaceHolder, + Integer max_level + ) { + this.name = name; + this.ID = ID; + this.placeHolder = itemPlaceHolder; + this.placeHolder.getItemMeta().displayName(colorTextComp(colorName)); + this.max_level = max_level; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/classes/Classes.java b/src/main/java/me/unurled/raxen/components/entity/player/classes/Classes.java index 5c8848e..adbd6dc 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/classes/Classes.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/classes/Classes.java @@ -9,35 +9,35 @@ import me.unurled.raxen.components.entity.player.classes.list.Assassin; public class Classes { - private final Raxen main; + private final Raxen main; - public Classes(Raxen main) { - this.main = main; - register(); - } - - public void register() { - registerClass(new Assassin()); - } - - public class resultClass { - - @Getter - @Setter - public Class clas; - - @Getter - @Setter - public String id; - - public resultClass(Class clas, String id) { - this.clas = clas; - this.id = id; + public Classes(Raxen main) { + this.main = main; + register(); } - } - public void registerClass(Class clas) { - debug(clas.getID()); - main.getManager().getPlayerManager().addClasses(clas, clas.getID()); - } + public void register() { + registerClass(new Assassin()); + } + + public class resultClass { + + @Getter + @Setter + public Class clas; + + @Getter + @Setter + public String id; + + public resultClass(Class clas, String id) { + this.clas = clas; + this.id = id; + } + } + + public void registerClass(Class clas) { + debug(clas.getID()); + main.getManager().getPlayerManager().addClasses(clas, clas.getID()); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/classes/list/Assassin.java b/src/main/java/me/unurled/raxen/components/entity/player/classes/list/Assassin.java index 8548324..264e9c2 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/classes/list/Assassin.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/classes/list/Assassin.java @@ -7,33 +7,33 @@ import org.bukkit.inventory.ItemStack; public class Assassin extends Class { - String ID = "ASSASSIN"; - String name = "Assassin"; - String colorName = "Assassin"; - Integer max_level = 100; + String ID = "ASSASSIN"; + String name = "Assassin"; + String colorName = "Assassin"; + Integer max_level = 100; - ItemStack placeHolder; + ItemStack placeHolder; - public Assassin() { - super( - "Assassin", - "Assassin", - "ASSASSIN", - new ItemStack(Material.AIR), - 100 - ); - Dagger dagger = new Dagger(); - dagger.buildItem(); - placeHolder = dagger.getItem(); - } + public Assassin() { + super( + "Assassin", + "Assassin", + "ASSASSIN", + new ItemStack(Material.AIR), + 100 + ); + Dagger dagger = new Dagger(); + dagger.buildItem(); + placeHolder = dagger.getItem(); + } - public Assassin( - String name, - String colorName, - String ID, - String itemPlaceHolder, - Integer max_level - ) { - super(name, colorName, ID, itemPlaceHolder, max_level); - } + public Assassin( + String name, + String colorName, + String ID, + String itemPlaceHolder, + Integer max_level + ) { + super(name, colorName, ID, itemPlaceHolder, max_level); + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/storages/EnderChest.java b/src/main/java/me/unurled/raxen/components/entity/player/storages/EnderChest.java index bcd9e8d..990cf2a 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/storages/EnderChest.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/storages/EnderChest.java @@ -8,15 +8,15 @@ import org.bukkit.inventory.Inventory; public class EnderChest { - @Getter - @Setter - public Inventory ec = Bukkit.createInventory( - null, - 54, - Component.text("Ender Chest") - ); + @Getter + @Setter + public Inventory ec = Bukkit.createInventory( + null, + 54, + Component.text("Ender Chest") + ); - public EnderChest(Inventory ec) { - this.ec = ec; - } + public EnderChest(Inventory ec) { + this.ec = ec; + } } diff --git a/src/main/java/me/unurled/raxen/components/entity/player/storages/Inventory.java b/src/main/java/me/unurled/raxen/components/entity/player/storages/Inventory.java index 22cf211..5a2c791 100644 --- a/src/main/java/me/unurled/raxen/components/entity/player/storages/Inventory.java +++ b/src/main/java/me/unurled/raxen/components/entity/player/storages/Inventory.java @@ -7,14 +7,14 @@ import org.bukkit.event.inventory.InventoryType; public class Inventory { - @Getter - @Setter - public org.bukkit.inventory.Inventory inv = Bukkit.createInventory( - null, - InventoryType.PLAYER - ); + @Getter + @Setter + public org.bukkit.inventory.Inventory inv = Bukkit.createInventory( + null, + InventoryType.PLAYER + ); - public Inventory(org.bukkit.inventory.Inventory inv) { - this.inv = inv; - } + public Inventory(org.bukkit.inventory.Inventory inv) { + this.inv = inv; + } } diff --git a/src/main/java/me/unurled/raxen/components/glyph/Glyph.java b/src/main/java/me/unurled/raxen/components/glyph/Glyph.java new file mode 100644 index 0000000..6a89d5d --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/glyph/Glyph.java @@ -0,0 +1,5 @@ +package me.unurled.raxen.components.glyph; + +public class Glyph { + +} diff --git a/src/main/java/me/unurled/raxen/components/glyph/GlyphBuilder.java b/src/main/java/me/unurled/raxen/components/glyph/GlyphBuilder.java new file mode 100644 index 0000000..feafba0 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/glyph/GlyphBuilder.java @@ -0,0 +1,25 @@ +package me.unurled.raxen.components.glyph; + +public class GlyphBuilder { + + String chars; + String model; + String texture; + String placeholder; + + public GlyphBuilder(String chars) { + this.chars = chars; + } + + public void model(String s) { + model = s; + } + + public void texture(String s) { + texture = s; + } + + public void placeholder(String s) { + placeholder = s; + } +} diff --git a/src/main/java/me/unurled/raxen/components/glyph/GlyphParser.java b/src/main/java/me/unurled/raxen/components/glyph/GlyphParser.java new file mode 100644 index 0000000..37596fb --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/glyph/GlyphParser.java @@ -0,0 +1,44 @@ +package me.unurled.raxen.components.glyph; + +import org.bukkit.configuration.ConfigurationSection; + +public class GlyphParser { + + private final ConfigurationSection section; + + public GlyphParser(ConfigurationSection section) { + this.section = section; + if (section.isConfigurationSection("Pack")) { + ConfigurationSection packSection = section.getConfigurationSection("Pack"); + applyConfig(buildGlyph()); + } + } + + public GlyphBuilder buildGlyph() { + return buildGlyph(section.contains("char") ? section.getString("char") : null); + } + + public GlyphBuilder buildGlyph(String car) { + GlyphBuilder glyph = null; + if (car != null) { + glyph = new GlyphBuilder(car); + } + return glyph; + } + + private GlyphBuilder applyConfig(GlyphBuilder glyph) { + if (section.contains("Pack")) { + ConfigurationSection s = section.getConfigurationSection("Pack"); + if (s.contains("model")) { + glyph.model(s.getString("model")); + } + if (s.contains("texture")) { + glyph.texture(s.getString("texture")); + } + if (s.contains("placeholder")) { + glyph.placeholder(s.getString("placeholder")); + } + } + return glyph; + } +} diff --git a/src/main/java/me/unurled/raxen/components/gui/ItemListGui.java b/src/main/java/me/unurled/raxen/components/gui/ItemListGui.java index 40802e3..bcb807d 100644 --- a/src/main/java/me/unurled/raxen/components/gui/ItemListGui.java +++ b/src/main/java/me/unurled/raxen/components/gui/ItemListGui.java @@ -1,21 +1,15 @@ package me.unurled.raxen.components.gui; -import static me.unurled.raxen.utils.Items.*; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.fillGreyPane; -import java.util.ArrayList; import java.util.HashMap; -import java.util.Map; import lombok.Getter; import me.unurled.raxen.Raxen; 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.TextComponent; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -25,293 +19,61 @@ import org.bukkit.inventory.ItemStack; public class ItemListGui implements Listener { - private Raxen main; + private Raxen main; - @Getter - private Inventory inv = Bukkit.createInventory( - null, - 54, - Component.text("Item List") - ); + @Getter + private Inventory inv = Bukkit.createInventory( + null, + 54, + 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 itlist; - private HashMap itlist; - - public ItemListGui(Raxen main) { - this.main = main; - this.itlist = this.main.getManager().getItemManager().getList(); - this.inv = getInventories(); - } - - private ItemStack PREVIOUS = createItem( - Material.ARROW, - 1, - true, - false, - "Previous page" - ); - private ItemStack NEXT = createItem( - Material.ARROW, - 1, - true, - false, - "Next page" - ); - private ItemStack PAGE = createItem(Material.PAPER, 1, true, false, "Page"); - private ItemStack CLOSE = closeItem(); - private ItemStack GREY_PANE = greyPane(); - - public Inventory getInventories() { - Integer page = 1; - Integer item = -1; - for (Map.Entry entry : itlist.entrySet()) { - ItemStack it = entry.getValue(); - item++; - if (item > 44 && item < 91) { - inv2.addItem(it); - inv2.setItem(48, PREVIOUS); - inv2.setItem( - 49, - editItem(PAGE, "page" + page, 1, new ArrayList()) - ); - 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()) - ); - 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()) - ); - 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()) - ); - 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()) - ); - 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()) - ); - 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()) - ); - 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()) - ); - inv9.setItem(53, CLOSE); - inv9 = fillGreyPane(inv9); - } - if (item > 405) { - log("Too many item to render."); - } else { - inv.addItem(it); - inv.setItem(49, PAGE); - inv.setItem(50, NEXT); - } - if (item > 44) { - inv.setItem(50, NEXT); - if (item > 90) { - inv2.setItem(50, NEXT); - if (item > 135) { - inv3.setItem(50, NEXT); - if (item > 180) { - inv4.setItem(50, NEXT); - if (item > 225) { - inv5.setItem(50, NEXT); - if (item > 270) { - inv6.setItem(50, NEXT); - if (item > 315) { - inv7.setItem(50, NEXT); - if (item > 360) { - inv8.setItem(50, NEXT); - } - } - } - } - } - } - } - } - page++; - inv.setItem(53, CLOSE); - inv = fillGreyPane(inv); + public ItemListGui(Raxen main) { + this.main = main; + this.itlist = this.main.getManager().getItemManager().getList(); } - return inv; - } - @EventHandler - public void clickInventory(InventoryClickEvent e) { - Player player = (Player) e.getWhoClicked(); - Inventory einv = e.getClickedInventory(); - if ( - einv == inv || - einv == inv2 || - einv == inv3 || - einv == inv4 || - einv == inv5 || - einv == inv6 || - einv == inv7 || - einv == inv8 || - einv == inv9 - ) { - if ( - e.getCurrentItem() != null && - e.getCurrentItem().getType() != Material.AIR - ) { - Integer slot = e.getSlot(); - ItemStack clicked; - if (slot == 48) { - //previous - if (e.getCurrentItem() != GREY_PANE) { - ItemStack pagee = einv.getItem(49); - String name = textCompToString(pagee.displayName()); - int page = Integer.parseInt(name.replace("page", "")); - switch (page) { - case 2: - player.openInventory(inv); - case 3: - player.openInventory(inv2); - case 4: - player.openInventory(inv3); - case 5: - player.openInventory(inv4); - case 6: - player.openInventory(inv5); - case 7: - player.openInventory(inv6); - case 8: - player.openInventory(inv7); - case 9: - player.openInventory(inv8); + public Inventory getInventories(int page) { + int item = -1; + int number = 54 * (page - 1); + int number_final = number + 54; + + for (ItemStack it : itlist.values()) { + item++; + if (item >= number && item < number_final) { + inv.setItem(item - number, it); } - } - } else if (slot == 49) { - //page - return; - } else if (slot == 50) { - //next - ItemStack pagee = einv.getItem(49); - if (pagee != null) { - String name = textCompToString(pagee.displayName()); - name = name.replace("[", ""); - name = name.replace("]", ""); - log(name); - int page = Integer.parseInt(name.replace("page", "")); - switch (page) { - case 1: - player.openInventory(inv2); - case 2: - player.openInventory(inv3); - case 3: - player.openInventory(inv4); - case 4: - player.openInventory(inv5); - case 5: - player.openInventory(inv6); - case 6: - player.openInventory(inv7); - case 7: - player.openInventory(inv8); - case 8: - player.openInventory(inv9); - } - } - } else if (slot == 53) { - //close - player.closeInventory(); - } else { - //if (player.getInventory().firstEmpty() == -1) { - //add to stash - //} - player.getInventory().addItem(e.getCurrentItem()); - PlayerUtils.updateSkills(main, player); } - } + fillGreyPane(inv); + return inv; + } + + @EventHandler + public void clickInventory(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory einv = e.getClickedInventory(); + if (einv == inv) { + if ( + e.getCurrentItem() != null && + e.getCurrentItem().getType() != Material.AIR + ) { + Integer slot = e.getSlot(); + ItemStack clicked; + //if (player.getInventory().firstEmpty() == -1) { + //add to stash + //} + player.getInventory().addItem(e.getCurrentItem()); + player.closeInventory(); + player.playSound(player, Sound.UI_BUTTON_CLICK, 1, 0); + PlayerUtils.updateSkills(main, player); + } + } + } + + public void openInventory(Player player, int page) { + inv = getInventories(page); + player.openInventory(inv); } - } } diff --git a/src/main/java/me/unurled/raxen/components/gui/MainGui.java b/src/main/java/me/unurled/raxen/components/gui/MainGui.java index 24d2c87..ef3bfa5 100644 --- a/src/main/java/me/unurled/raxen/components/gui/MainGui.java +++ b/src/main/java/me/unurled/raxen/components/gui/MainGui.java @@ -14,66 +14,66 @@ import org.bukkit.inventory.meta.SkullMeta; public class MainGui { - public static Inventory build(Player p) { - Inventory inv = Bukkit.createInventory( - null, - 54, - colorComp("Raxen") - ); - String gui = - "0,7,0,0,0,8,9,0,10," + - "0,0,0,0,0,0,0,0,0," + - "0,0,0,0,0,0,0,0,0," + - "0,2,3,0,0,0,0,4,0," + - "0,0,0,0,1,0,0,0,0," + - "0,0,0,0,0,0,0,0,0"; - // 1 player Head - ItemStack head = new ItemStack(Material.PLAYER_HEAD); - SkullMeta headm = (SkullMeta) head.getItemMeta(); - headm.setOwningPlayer(p.getPlayer()); - headm.displayName(colorComp("")); - // 2 bank - ItemStack bank = new ItemStack(Material.GOLD_INGOT); - // 3 ah - ItemStack ah = new ItemStack(Material.GOLD_INGOT); - // 4 skill tree - ItemStack sk_tree = new ItemStack(Material.OAK_SAPLING); - // 7 teleport - ItemStack tp = new ItemStack(Material.ENDER_PEARL); - // 8 select character - ItemStack sel_char = new ItemStack(Material.SNOWBALL); - // 9 Settings - ItemStack sett = new ItemStack(Material.MAGMA_CREAM); - // 10 barrier block close + public static Inventory build(Player p) { + Inventory inv = Bukkit.createInventory( + null, + 54, + colorComp("Raxen") + ); + String gui = + "0,7,0,0,0,8,9,0,10," + + "0,0,0,0,0,0,0,0,0," + + "0,0,0,0,0,0,0,0,0," + + "0,2,3,0,0,0,0,4,0," + + "0,0,0,0,1,0,0,0,0," + + "0,0,0,0,0,0,0,0,0"; + // 1 player Head + ItemStack head = new ItemStack(Material.PLAYER_HEAD); + SkullMeta headm = (SkullMeta) head.getItemMeta(); + headm.setOwningPlayer(p.getPlayer()); + headm.displayName(colorComp("")); + // 2 bank + ItemStack bank = new ItemStack(Material.GOLD_INGOT); + // 3 ah + ItemStack ah = new ItemStack(Material.GOLD_INGOT); + // 4 skill tree + ItemStack sk_tree = new ItemStack(Material.OAK_SAPLING); + // 7 teleport + ItemStack tp = new ItemStack(Material.ENDER_PEARL); + // 8 select character + ItemStack sel_char = new ItemStack(Material.SNOWBALL); + // 9 Settings + ItemStack sett = new ItemStack(Material.MAGMA_CREAM); + // 10 barrier block close - HashMap list = new HashMap<>(); - list.put("1", head); - list.put("2", bank); - list.put("3", ah); - list.put("4", sk_tree); - list.put("7", tp); - list.put("8", sel_char); - list.put("9", sett); - list.put("10", Items.closeItem()); - Inventory inventory = stringToGui(inv, gui, list); - inventory = fillGreyPane(inventory); - return inventory; - } + HashMap list = new HashMap<>(); + list.put("1", head); + list.put("2", bank); + list.put("3", ah); + list.put("4", sk_tree); + list.put("7", tp); + list.put("8", sel_char); + list.put("9", sett); + list.put("10", Items.closeItem()); + Inventory inventory = stringToGui(inv, gui, list); + inventory = fillGreyPane(inventory); + return inventory; + } - public static Inventory stringToGui( - Inventory inv, - String stt, - HashMap it - ) { - String[] s = stt.split(","); - if (s.length != inv.getContents().length) { - return inv; + public static Inventory stringToGui( + Inventory inv, + String stt, + HashMap it + ) { + String[] s = stt.split(","); + if (s.length != inv.getContents().length) { + return inv; + } + Integer i = 0; + for (String st : s) { + inv.setItem(i, it.get(st)); + i++; + } + return inv; } - Integer i = 0; - for (String st : s) { - inv.setItem(i, it.get(st)); - i++; - } - return inv; - } } diff --git a/src/main/java/me/unurled/raxen/components/items/Attributes.java b/src/main/java/me/unurled/raxen/components/items/Attributes.java index 6344538..ceebac4 100644 --- a/src/main/java/me/unurled/raxen/components/items/Attributes.java +++ b/src/main/java/me/unurled/raxen/components/items/Attributes.java @@ -4,20 +4,20 @@ import lombok.Getter; public class Attributes { - @Getter - Integer health, speed, defense, strength; + @Getter + Integer health, speed, defense, strength; - public Attributes( - Integer health, - Integer defense, - Integer speed, - Integer strength, - Integer mana, - Integer luck - ) { - this.health = health; - this.defense = defense; - this.speed = speed; - this.strength = strength; - } + public Attributes( + Integer health, + Integer defense, + Integer speed, + Integer strength, + Integer mana, + Integer luck + ) { + this.health = health; + this.defense = defense; + this.speed = speed; + this.strength = strength; + } } diff --git a/src/main/java/me/unurled/raxen/components/items/ItemBuilder.java b/src/main/java/me/unurled/raxen/components/items/ItemBuilder.java new file mode 100644 index 0000000..121581f --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/ItemBuilder.java @@ -0,0 +1,122 @@ +package me.unurled.raxen.components.items; + +import com.google.common.collect.Multimap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import me.unurled.raxen.utils.Utils; +import net.kyori.adventure.text.Component; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.FireworkEffectMeta; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.MapMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionEffect; +import org.jetbrains.annotations.NotNull; + +public class ItemBuilder { + + private final PersistentDataContainer persistentDataContainer; + private ItemStack it; + private Material type; + private Component displayName; + private int amount; + private int customModelData; + private String customModelDataPath; + private boolean hasCustomModelData; + private Color color; + private @NotNull PotionData potionData; + + private List potionEffects; + private Set itemFlags; + private boolean hasAttributeModifiers; + private Multimap attributeModifiers; + private List lore; + private final Map 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 lore) { + this.lore = lore; + } + + public void color(Color color) { + this.color = color; + } + + public void modelData(String path, int data) { + this.customModelData = data; + this.customModelDataPath = path; + } +} diff --git a/src/main/java/me/unurled/raxen/components/items/ItemParser.java b/src/main/java/me/unurled/raxen/components/items/ItemParser.java new file mode 100644 index 0000000..e29aaed --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/ItemParser.java @@ -0,0 +1,52 @@ +package me.unurled.raxen.components.items; + +import java.util.List; +import me.unurled.raxen.utils.Utils; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; + +public class ItemParser { + + private final ConfigurationSection section; + private Material type; + + public ItemParser(ConfigurationSection section) { + this.section = section; + type = Material.getMaterial(section.getString("material", "PAPER")); + if (section.isConfigurationSection("Pack")) { + ConfigurationSection packSection = section.getConfigurationSection("Pack"); + // TODO: Parse pack section +// item.modelData(section.getString("Pack.model", null), section.getInt("Pack.custom_model_data", 0)); + + } + } + + public ItemBuilder buildItem() { + return buildItem(section.contains("name") ? section.getString("name") : null); + } + + public ItemBuilder buildItem(String name) { + ItemBuilder item; + item = new ItemBuilder(type); + if (name != null) { + item.displayName(name); + } + return item; + } + + private ItemBuilder applyConfig(ItemBuilder item) { + if (section.contains("lore")) { + List lore = section.getStringList("lore"); + item.lore(lore); + } + + if (section.contains("color")) { + item.color(Utils.color(section.getString("color", "FFFFFF"))); + } + + if (section.contains("Pack")) { + item.modelData(section.getString("Pack.model", null), section.getInt("Pack.custom_model_data", 0)); + } + return item; + } +} diff --git a/src/main/java/me/unurled/raxen/components/items/NBT.java b/src/main/java/me/unurled/raxen/components/items/NBT.java deleted file mode 100644 index 043624c..0000000 --- a/src/main/java/me/unurled/raxen/components/items/NBT.java +++ /dev/null @@ -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"; -} diff --git a/src/main/java/me/unurled/raxen/components/items/NBTNames.java b/src/main/java/me/unurled/raxen/components/items/NBTNames.java new file mode 100644 index 0000000..6bb4685 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/NBTNames.java @@ -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"; +} diff --git a/src/main/java/me/unurled/raxen/components/items/abilities/weapon/ThrowingDagger.java b/src/main/java/me/unurled/raxen/components/items/abilities/weapon/ThrowingDagger.java index a68257a..eed4ddb 100644 --- a/src/main/java/me/unurled/raxen/components/items/abilities/weapon/ThrowingDagger.java +++ b/src/main/java/me/unurled/raxen/components/items/abilities/weapon/ThrowingDagger.java @@ -12,40 +12,40 @@ import org.bukkit.util.Vector; public class ThrowingDagger { - Player player; - ItemStack item; - Location start; + Player player; + ItemStack item; + Location start; - public ThrowingDagger(Player p) { - this.player = p; - this.item = p.getActiveItem(); - this.start = p.getLocation(); - } - - public void throwDagger() { - // ability throw a dagger in the direction the player is looking, max 20 blocks - RayTrace rayTrace = new RayTrace( - player.getEyeLocation().toVector(), - player.getEyeLocation().getDirection() - ); - ArrayList positions = rayTrace.traverse(10, 0.01); - for (int i = 0; i < positions.size(); i++) { - Location position = positions.get(i).toLocation(player.getWorld()); - Block block = player.getWorld().getBlockAt(position); - - if ( - block != null && - block.getType() != Material.AIR && - rayTrace.intersects(BoundingBox.of(block), 10, 0.01) - ) { - player.sendMessage(block.getType().toString()); - break; - } + public ThrowingDagger(Player p) { + this.player = p; + this.item = p.getActiveItem(); + this.start = p.getLocation(); } - /*for (int i = 0 ; i < 20 ; i++) { + + public void throwDagger() { + // ability throw a dagger in the direction the player is looking, max 20 blocks + RayTrace rayTrace = new RayTrace( + player.getEyeLocation().toVector(), + player.getEyeLocation().getDirection() + ); + ArrayList positions = rayTrace.traverse(10, 0.01); + for (int i = 0; i < positions.size(); i++) { + Location position = positions.get(i).toLocation(player.getWorld()); + Block block = player.getWorld().getBlockAt(position); + + if ( + block != null && + block.getType() != Material.AIR && + rayTrace.intersects(BoundingBox.of(block), 10, 0.01) + ) { + player.sendMessage(block.getType().toString()); + break; + } + } + /*for (int i = 0 ; i < 20 ; i++) { // spawn an item in air // dispawn the last one // repeat }*/ - } + } } diff --git a/src/main/java/me/unurled/raxen/components/items/custom/Item.java b/src/main/java/me/unurled/raxen/components/items/custom/Item.java index 5cb563a..f5cfdfb 100644 --- a/src/main/java/me/unurled/raxen/components/items/custom/Item.java +++ b/src/main/java/me/unurled/raxen/components/items/custom/Item.java @@ -7,25 +7,26 @@ import org.jetbrains.annotations.NotNull; public abstract class Item { - @Getter - ItemStack item; + @Getter + ItemStack item; - String NAME; - String ID; + String NAME; + String ID; - ItemClass ITEM_CLASS; - ItemTypes ITEM_TYPES; + ItemClass ITEM_CLASS; + ItemTypes ITEM_TYPES; - protected Item() { - this.item = buildItem(); - } + protected Item() { + this.item = buildItem(); + } - public abstract ItemStack buildItem(); + public abstract ItemStack buildItem(); - /** - * need item to be set before calling this method. - */ - public void registerItem(@NotNull Raxen main) { - main.getManager().getItemManager().registerItem(item); - } + /** + * need item to be set before calling this method. + */ + public void registerItem(@NotNull Raxen main) { + item = buildItem(); + main.getManager().getItemManager().registerItem(item); + } } diff --git a/src/main/java/me/unurled/raxen/components/items/custom/ItemClass.java b/src/main/java/me/unurled/raxen/components/items/custom/ItemClass.java index 53f6073..a1e12cc 100644 --- a/src/main/java/me/unurled/raxen/components/items/custom/ItemClass.java +++ b/src/main/java/me/unurled/raxen/components/items/custom/ItemClass.java @@ -1,16 +1,16 @@ package me.unurled.raxen.components.items.custom; public enum ItemClass { - F, - E, - D, - C, - B, - A, - S, - SS, - SSS, - MYTHIC, - UNIC, - GOD, + F, + E, + D, + C, + B, + A, + S, + SS, + SSS, + MYTHIC, + UNIC, + GOD } diff --git a/src/main/java/me/unurled/raxen/components/items/custom/ItemTypes.java b/src/main/java/me/unurled/raxen/components/items/custom/ItemTypes.java index 8368b37..348754c 100644 --- a/src/main/java/me/unurled/raxen/components/items/custom/ItemTypes.java +++ b/src/main/java/me/unurled/raxen/components/items/custom/ItemTypes.java @@ -1,11 +1,11 @@ package me.unurled.raxen.components.items.custom; public enum ItemTypes { - WEAPON, - BOW, - TOOLS, - MEDICINE, - ARMOR, - BLOCKS, - MISCELLANEOUS, + WEAPON, + BOW, + TOOLS, + MEDICINE, + ARMOR, + BLOCKS, + MISCELLANEOUS } diff --git a/src/main/java/me/unurled/raxen/components/items/custom/List.java b/src/main/java/me/unurled/raxen/components/items/custom/List.java index ce33161..887ed1b 100644 --- a/src/main/java/me/unurled/raxen/components/items/custom/List.java +++ b/src/main/java/me/unurled/raxen/components/items/custom/List.java @@ -3,23 +3,25 @@ package me.unurled.raxen.components.items.custom; import java.util.ArrayList; import lombok.Getter; import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.items.custom.weapon.CombatKnife; import me.unurled.raxen.components.items.custom.weapon.Dagger; public class List { - private static Raxen main; + private static Raxen main; - @Getter - private java.util.List items; + @Getter + private java.util.List items; - public List(Raxen main) { - this.main = main; - this.items = new ArrayList<>(); - build(); - } + public List(Raxen main) { + this.main = main; + this.items = new ArrayList<>(); + build(); + } - public void build() { - // weapons - items.add(new Dagger()); - } + public void build() { + // weapons + items.add(new Dagger()); + items.add(new CombatKnife()); + } } diff --git a/src/main/java/me/unurled/raxen/components/items/custom/weapon/CombatKnife.java b/src/main/java/me/unurled/raxen/components/items/custom/weapon/CombatKnife.java new file mode 100644 index 0000000..2fd8fa9 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/custom/weapon/CombatKnife.java @@ -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("" + NAME)); + itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + itm.setUnbreakable(true); + List lore = new ArrayList<>(); + lore.add( + colorTextComp( + "A simple combat knife with a serrated edge." + ) + ); + 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; + } +} diff --git a/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dagger.java b/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dagger.java index 318abcb..09448d9 100644 --- a/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dagger.java +++ b/src/main/java/me/unurled/raxen/components/items/custom/weapon/Dagger.java @@ -6,7 +6,7 @@ import de.tr7zw.nbtapi.NBTItem; import java.util.ArrayList; import java.util.List; 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.ItemClass; import me.unurled.raxen.components.items.custom.ItemTypes; @@ -19,33 +19,33 @@ import org.bukkit.inventory.meta.ItemMeta; public class Dagger extends Item { - @Getter - ItemStack item; + @Getter + ItemStack item; - String NAME = "Dager"; - String ID = "DAGER"; + static final String NAME = "Dager"; + static final String ID = "DAGER"; - ItemClass ITEM_CLASS = ItemClass.F; - ItemTypes ITEM_TYPES = ItemTypes.WEAPON; + 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("" + this.NAME)); - itm.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1, false); - itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS); - itm.setUnbreakable(true); - List lore = new ArrayList<>(); - lore.add(Component.text("hallooo")); - itm.lore(lore); - item.setItemMeta(itm); - NBTItem nbti = new NBTItem(item); - nbti.setString(NBT.ID, ID); - nbti.setInteger(NBT.SPEED, 100); - nbti.setInteger(NBT.STRENGTH, 50); - nbti.setString(NBT.CUSTOM_ABILITY, "throwing_dager"); - nbti.setDouble(NBT.DROP_RATE, 50.0); - item = nbti.getItem(); - return item; - } + public ItemStack buildItem() { + item = new ItemStack(Material.IRON_SWORD); + ItemMeta itm = item.getItemMeta(); + itm.displayName(colorTextComp("" + NAME)); + itm.addEnchant(Enchantment.PROTECTION_ENVIRONMENTAL, 1, false); + itm.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS); + itm.setUnbreakable(true); + List lore = new ArrayList<>(); + lore.add(Component.text("hallooo")); + itm.lore(lore); + item.setItemMeta(itm); + NBTItem nbti = new NBTItem(item); + nbti.setString(NBTNames.ID, ID); + nbti.setInteger(NBTNames.SPEED, 100); + nbti.setInteger(NBTNames.STRENGTH, 50); + nbti.setString(NBTNames.CUSTOM_ABILITY, "throwing_dager"); + nbti.setDouble(NBTNames.DROP_RATE, 50.0); + item = nbti.getItem(); + return item; + } } diff --git a/src/main/java/me/unurled/raxen/components/lootchest/GUI.java b/src/main/java/me/unurled/raxen/components/lootchest/GUI.java index e995374..bdc7701 100644 --- a/src/main/java/me/unurled/raxen/components/lootchest/GUI.java +++ b/src/main/java/me/unurled/raxen/components/lootchest/GUI.java @@ -9,18 +9,18 @@ import org.bukkit.inventory.Inventory; public class GUI { - @Getter - private static Inventory inv = Bukkit.createInventory(null, 54); + @Getter + private static Inventory inv = Bukkit.createInventory(null, 54); - private static PlayerManager playerManager; + private static PlayerManager playerManager; - public GUI(Raxen main) { - this.playerManager = main.getManager().getPlayerManager(); - } + public GUI(Raxen main) { + this.playerManager = main.getManager().getPlayerManager(); + } - public static Inventory addItems(Player player) { - Integer luck = playerManager.getLuck().get(player); + public static Inventory addItems(Player player) { + Integer luck = playerManager.getLuck().get(player); - return inv; - } + return inv; + } } diff --git a/src/main/java/me/unurled/raxen/components/lootchest/loots/CustomLoot.java b/src/main/java/me/unurled/raxen/components/lootchest/loots/CustomLoot.java index c8897df..f3ef1a3 100644 --- a/src/main/java/me/unurled/raxen/components/lootchest/loots/CustomLoot.java +++ b/src/main/java/me/unurled/raxen/components/lootchest/loots/CustomLoot.java @@ -3,40 +3,43 @@ package me.unurled.raxen.components.lootchest.loots; import de.tr7zw.nbtapi.NBTItem; import java.util.HashMap; 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.inventory.ItemStack; public class CustomLoot { - private Raxen main; + private Raxen main; - public HashMap itlist; + public HashMap itlist; - public ItemStack item; - public Double drop_rate; - public LootItem lootItem; - public String ID; + public ItemStack item; + public Double drop_rate; + public LootItem lootItem; + public String ID; - public LootItem getLootItem() { - return new LootItem(registerItem(), drop_rate); - } - - public ItemStack registerItem() { - return itlist.get(ID); - } - - public Double getDrop_rate() { - NBTItem nbti = new NBTItem(item); - if (nbti.hasTag(NBT.DROP_RATE)) { - return nbti.getDouble(NBT.DROP_RATE); + public LootItem getLootItem() { + return new LootItem(registerItem(), drop_rate); } - return 0.0; - } - public void tryDropLoot(Location location) { - for (LootItem item : main.getManager().getLootManager().getLootTable()) { - item.tryDropItem(location); + public ItemStack registerItem() { + return itlist.get(ID); + } + + public Double getDrop_rate() { + NBTItem nbti = new NBTItem(item); + if (nbti.hasTag(NBTNames.DROP_RATE)) { + return nbti.getDouble(NBTNames.DROP_RATE); + } + return 0.0; + } + + public void tryDropLoot(Location location) { + for (LootItem item : main + .getManager() + .getLootManager() + .getLootTable()) { + item.tryDropItem(location); + } } - } } diff --git a/src/main/java/me/unurled/raxen/components/lootchest/loots/LootItem.java b/src/main/java/me/unurled/raxen/components/lootchest/loots/LootItem.java index 31a8536..fe5cf40 100644 --- a/src/main/java/me/unurled/raxen/components/lootchest/loots/LootItem.java +++ b/src/main/java/me/unurled/raxen/components/lootchest/loots/LootItem.java @@ -6,22 +6,22 @@ import org.bukkit.inventory.ItemStack; public class LootItem { - private ItemStack item; - private int min = 1, max = 1; - private double dropRate; - private static Random randomiser = new Random(); + private ItemStack item; + private int min = 1, max = 1; + private double dropRate; + private static Random randomiser = new Random(); - public LootItem(ItemStack item, double dropRate) { - this.item = item; - this.dropRate = dropRate; - } + public LootItem(ItemStack item, double dropRate) { + this.item = item; + this.dropRate = dropRate; + } - public void tryDropItem(Location loc) { - if (Math.random() * 101 > dropRate) return; - int amount = randomiser.nextInt(max - min + 1) + min; - if (amount == 0) return; - ItemStack item = this.item.clone(); - item.setAmount(amount); - loc.getWorld().dropItemNaturally(loc, item); - } + public void tryDropItem(Location loc) { + if (Math.random() * 101 > dropRate) return; + int amount = randomiser.nextInt(max - min + 1) + min; + if (amount == 0) return; + ItemStack item = this.item.clone(); + item.setAmount(amount); + loc.getWorld().dropItemNaturally(loc, item); + } } diff --git a/src/main/java/me/unurled/raxen/components/lootchest/loots/test/TestSword.java b/src/main/java/me/unurled/raxen/components/lootchest/loots/test/TestSword.java index 4cbf441..8fc0033 100644 --- a/src/main/java/me/unurled/raxen/components/lootchest/loots/test/TestSword.java +++ b/src/main/java/me/unurled/raxen/components/lootchest/loots/test/TestSword.java @@ -5,11 +5,11 @@ import me.unurled.raxen.components.lootchest.loots.CustomLoot; public class TestSword extends CustomLoot { - public TestSword(Raxen main) { - this.itlist = main.getManager().getItemManager().getList(); - this.ID = "BEST_NEW_ITEM"; - this.drop_rate = getDrop_rate(); - this.item = registerItem(); - this.lootItem = getLootItem(); - } + public TestSword(Raxen main) { + this.itlist = main.getManager().getItemManager().getList(); + this.ID = "BEST_NEW_ITEM"; + this.drop_rate = getDrop_rate(); + this.item = registerItem(); + this.lootItem = getLootItem(); + } } diff --git a/src/main/java/me/unurled/raxen/components/party/Party.java b/src/main/java/me/unurled/raxen/components/party/Party.java new file mode 100644 index 0000000..ce3f2fc --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/party/Party.java @@ -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 uuids = new ArrayList(); + private UUID leaderUUID; + private String leaderName; + + private ArrayList cachedPlayer = new ArrayList(); + + private long lastPlayerUpdate = 0L; + private Scoreboard board; + + private boolean lootShare = false; + private HashMap lastInv = new HashMap(); + + + 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 getPlayers() { + if (System.currentTimeMillis() - lastPlayerUpdate > 5000) { + lastPlayerUpdate = System.currentTimeMillis(); + cachedPlayer.clear(); + ArrayList toRemove = new ArrayList(); + 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() + ": ")).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); + } +} diff --git a/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java b/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java index ea8a612..fd1c40e 100644 --- a/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java +++ b/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java @@ -2,34 +2,47 @@ package me.unurled.raxen.components.resourcepack; import me.unurled.raxen.Raxen; import me.unurled.raxen.manager.server.ResourcePackManager; +import me.unurled.raxen.utils.Utils; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; public class ResourcePack { - private Raxen main; - private FileConfiguration config; - private ResourcePackManager resourcePackManager; + private Raxen main; + private FileConfiguration config; + private ResourcePackManager resourcePackManager; + + public ResourcePack(Raxen main, ResourcePackManager manager) { + this.main = main; + this.config = main.getConfig(); + this.resourcePackManager = manager; + } + + public void join(Player player) { + new BukkitRunnable() { + @Override + public void run() { + if (resourcePackManager.isUseRP()) { + player.setResourcePack( + resourcePackManager.getUrl(), + resourcePackManager.getSha1(), + true + ); + } + } + }.runTaskLater(main, 10L); + new BukkitRunnable() { + @Override + public void run() { + if (resourcePackManager.isUseRP()) { + if (!player.hasResourcePack()) { + player.kick(Utils.colorComp( + "Raxen| Please enable your resource pack!")); + } + } + } + }.runTaskLater(main, 600L); - public ResourcePack(Raxen main, ResourcePackManager manager) { - this.main = main; - this.config = main.getConfig(); - this.resourcePackManager = manager; - } - - public void join(Player player) { - new BukkitRunnable() { - @Override - public void run() { - if (resourcePackManager.isUseRP()) { - player.setResourcePack( - config.getString("ressource_pack_url"), - config.getString("resource_pack_sha1") - ); - } - } } - .runTaskLater(main, 2L); - } } diff --git a/src/main/java/me/unurled/raxen/components/resourcepack/hosting/Hosting.java b/src/main/java/me/unurled/raxen/components/resourcepack/hosting/Hosting.java new file mode 100644 index 0000000..c4693f6 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/resourcepack/hosting/Hosting.java @@ -0,0 +1,19 @@ +package me.unurled.raxen.components.resourcepack.hosting; + +import java.io.File; +import java.util.UUID; + +public interface Hosting { + + boolean upload(File resoucepack); + + UUID getUUID(); + + String getPackURL(); + + String getMinecraftPackURL(); + + byte[] getSHA1(); + + String getOriginalSHA1(); +} diff --git a/src/main/java/me/unurled/raxen/components/resourcepack/hosting/PackHoster.java b/src/main/java/me/unurled/raxen/components/resourcepack/hosting/PackHoster.java new file mode 100644 index 0000000..c156e7a --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/resourcepack/hosting/PackHoster.java @@ -0,0 +1,112 @@ +package me.unurled.raxen.components.resourcepack.hosting; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.UUID; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; + +public class PackHoster implements Hosting { + + private final String serverAddress; + private String packURL; + private String minecraftPackURL; + private String sha1; + private UUID uuid; + + public PackHoster(String serverAddress) { + this.serverAddress = "https://" + serverAddress + "/"; + } + + @Override + public boolean upload(File resoucepack) { + try { + HttpClient httpClient = HttpClientBuilder.create().build(); + + HttpPost httpPost = new HttpPost(serverAddress + "upload/" + uuid.toString()); + + HttpEntity entity = MultipartEntityBuilder.create() + .addBinaryBody("file", resoucepack, ContentType.DEFAULT_BINARY, + resoucepack.getName()) + .build(); + httpPost.setEntity(entity); + + // Execute the request + HttpResponse response = null; + response = httpClient.execute(httpPost); + String responseString = EntityUtils.toString(response.getEntity()); + JsonObject json; + try { + json = JsonParser.parseString(responseString).getAsJsonObject(); + } catch (JsonSyntaxException e) { + return false; + } + + if (json.has("url") && json.has("sha1")) { + packURL = json.get("url").getAsString(); + minecraftPackURL = packURL.replace("https://", "http://"); + sha1 = json.get("sha1").getAsString(); + return true; + } + + // Get the response code + int responseCode = response.getStatusLine().getStatusCode(); + System.out.println("Response Code: " + responseCode); + + // Read the response body + String responseBody = null; + + responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + System.out.println("Response Body: " + responseBody); + } catch (IOException e) { + return false; + } + + return true; + } + + @Override + public UUID getUUID() { + return uuid; + } + + public void setUUID(UUID uuid) { + this.uuid = uuid; + } + + @Override + public String getPackURL() { + return packURL; + } + + @Override + public String getMinecraftPackURL() { + return minecraftPackURL; + } + + @Override + public byte[] getSHA1() { + int len = sha1.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(sha1.charAt(i), 16) << 4) + + Character.digit(sha1.charAt(i + 1), 16)); + } + return data; + } + + @Override + public String getOriginalSHA1() { + return sha1; + } +} diff --git a/src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java b/src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java new file mode 100644 index 0000000..0d4aa75 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java @@ -0,0 +1,74 @@ +package me.unurled.raxen.components.tutorial; + +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.log; +import static me.unurled.raxen.utils.Utils.msgPlayer; + +import lombok.Getter; +import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.entity.player.RaxenPlayer; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffectType; + +public class Tutorial { + + @Getter + private double x; + @Getter + private double y; + @Getter + private double z; + + @Getter + private int step = 0; + + @Getter + private World world; + + public Tutorial() { + this.step = 0; + } + + public Tutorial(int step) { + this.step = step; + } + + public Tutorial(int step, double x, double y, double z, World world) { + this.x = x; + this.y = y; + this.z = z; + this.step = step; + this.world = world; + } + + public void startTutorial(Player player, Location loc) { + x = loc.getX(); + y = loc.getY(); + z = loc.getZ(); + world = loc.getWorld(); + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + RaxenPlayer rxPlayer = main.getManager().getPlayerManager().getRaxenPlayer(player); + rxPlayer.setInTutorial(true); + step = 1; + player.addPotionEffect(PotionEffectType.BLINDNESS.createEffect(100, 10)); + player.teleport( + new Location(world, 15.82, 74.00, 117.21, 899.21F, 0.90f)); + msgPlayer(player, colorTextComp("Welcome to the tutorial!")); + // Hologram holo = api.createHologram(new Location(world, 15.5, 76.00, 112.5, 179.21f, 0.90f)); + } + + public void stopTutorial() { + log("needs to be implemented"); + } + + public void nextStep() { + log("needs to be implemented"); + } + + public void previousStep() { + log("needs to be implemented"); + } +} diff --git a/src/main/java/me/unurled/raxen/config/Config.java b/src/main/java/me/unurled/raxen/config/Config.java index 632f671..dddfad8 100644 --- a/src/main/java/me/unurled/raxen/config/Config.java +++ b/src/main/java/me/unurled/raxen/config/Config.java @@ -12,38 +12,38 @@ import org.bukkit.configuration.file.YamlConfiguration; public class Config { - private Raxen main; + private Raxen main; - private File configFile; + private File configFile; - @Getter - private FileConfiguration config; + @Getter + private FileConfiguration config; - public Config(Raxen main) { - this.main = main; - this.config = main.getConfig(); - this.init(); - } - - /** - * init method, saves config and everything - */ - public void init() { - FileConfiguration config = main.getConfig(); - File configFile = new File(main.getDataFolder() + "/config.yml"); - if (!(configFile.exists())) { - main.saveDefaultConfig(); + public Config(Raxen main) { + this.main = main; + this.config = main.getConfig(); + this.init(); } - FileConfiguration conf = new YamlConfiguration(); - debug(main, config.getString("version")); - try { - conf.load(configFile); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); + + /** + * init method, saves config and everything + */ + public void init() { + FileConfiguration config = main.getConfig(); + File configFile = new File(main.getDataFolder() + "/config.yml"); + if (!(configFile.exists())) { + main.saveDefaultConfig(); + } + FileConfiguration conf = new YamlConfiguration(); + debug(main, config.getString("version")); + try { + conf.load(configFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + debug(main, conf.getString("version")); + if (!Raxen.getVersion().equals(config.getString("version"))) { + main.saveResource("config.yml", true); + } } - debug(main, conf.getString("version")); - if (!Raxen.getVersion().equals(config.getString("version"))) { - main.saveResource("config.yml", true); - } - } } diff --git a/src/main/java/me/unurled/raxen/config/GlyphConfig.java b/src/main/java/me/unurled/raxen/config/GlyphConfig.java new file mode 100644 index 0000000..b12ea26 --- /dev/null +++ b/src/main/java/me/unurled/raxen/config/GlyphConfig.java @@ -0,0 +1,74 @@ +package me.unurled.raxen.config; + +import java.io.File; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.glyph.GlyphBuilder; +import me.unurled.raxen.components.glyph.GlyphParser; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; + +public class GlyphConfig { + + private Raxen main; + private File glyphFolder; + + public GlyphConfig(Raxen main) { + this.main = main; + validatesConfig(); + } + + public void validatesConfig() { + glyphFolder = new File(main.getDataFolder(), "items"); + if (!glyphFolder.exists()) { + glyphFolder.mkdirs(); + } + } + + public Map> parseGlyphConfigs() { + Map> parseMap = new LinkedHashMap<>(); + List config = Arrays.stream(getGlyphFiles()) + .filter(file -> file.getName().endsWith(".yml")) + .toList(); + for (File file : config) { + parseMap.put(file, parseGlyphConfig(YamlConfiguration.loadConfiguration(file), file)); + } + return parseMap; + } + + public Map parseGlyphConfig(YamlConfiguration config, File file) { + Map parseMap = new LinkedHashMap<>(); + for (String glyphSelection : config.getKeys(false)) { + if (!config.isConfigurationSection(glyphSelection)) { + continue; + } + ConfigurationSection glyphSection = config.getConfigurationSection(glyphSelection); + parseMap.put(glyphSelection, new GlyphParser(glyphSection)); + } + boolean configUpdated = false; + Map map = new LinkedHashMap<>(); + for (Map.Entry entry : parseMap.entrySet()) { + GlyphParser parser = entry.getValue(); + try { + map.put(entry.getKey(), parser.buildGlyph()); + } catch (Exception e) { + e.printStackTrace(); + } + } + return map; + } + + private File[] getGlyphFiles() { + if (!glyphFolder.exists()) { + glyphFolder.mkdirs(); + return new File[0]; + } + File[] itemConfigs = Arrays.stream(glyphFolder.listFiles()).filter(File::isFile) + .toArray(File[]::new); + Arrays.sort(itemConfigs); + return itemConfigs; + } +} diff --git a/src/main/java/me/unurled/raxen/config/ItemConfig.java b/src/main/java/me/unurled/raxen/config/ItemConfig.java new file mode 100644 index 0000000..a86795c --- /dev/null +++ b/src/main/java/me/unurled/raxen/config/ItemConfig.java @@ -0,0 +1,77 @@ +package me.unurled.raxen.config; + +import java.io.File; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.items.ItemBuilder; +import me.unurled.raxen.components.items.ItemParser; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; + +public class ItemConfig { + + private File itemsFolder; + private Raxen main; + + public ItemConfig(Raxen main) { + this.main = main; + validatesConfig(); + } + + public void validatesConfig() { + itemsFolder = new File(main.getDataFolder(), "items"); + if (!itemsFolder.exists()) { + itemsFolder.mkdirs(); + } + } + + public Map> parseItemConfigs() { + Map> parseMap = new LinkedHashMap<>(); + List 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 parseItemConfig(YamlConfiguration config, File file) { + Map 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 map = new LinkedHashMap<>(); + for (Map.Entry entry : parseMap.entrySet()) { + ItemParser parser = entry.getValue(); + try { + map.put(entry.getKey(), parser.buildItem()); + } catch (Exception e) { + e.printStackTrace(); + } + } + return map; + } + + /*public Map> parseEffectConfig() { + // TODO: efffects + }*/ + + private File[] getItemsFiles() { + if (!itemsFolder.exists()) { + itemsFolder.mkdirs(); + return new File[0]; + } + File[] itemConfigs = Arrays.stream(itemsFolder.listFiles()).filter(File::isFile) + .toArray(File[]::new); + Arrays.sort(itemConfigs); + return itemConfigs; + } +} diff --git a/src/main/java/me/unurled/raxen/config/PlayerConfig.java b/src/main/java/me/unurled/raxen/config/PlayerConfig.java index 63bec28..040e29e 100644 --- a/src/main/java/me/unurled/raxen/config/PlayerConfig.java +++ b/src/main/java/me/unurled/raxen/config/PlayerConfig.java @@ -1,6 +1,8 @@ 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 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.attributes.Attributes; 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.StorageManager; import me.unurled.raxen.utils.Items; @@ -35,342 +38,371 @@ import org.jetbrains.annotations.NotNull; public class PlayerConfig { - private static Raxen main; - private MongoDB mongoDB; - private MongoCollection mongoCollection; - private static PlayerManager playerManager; - private static StorageManager sto; - private Attributes attributes; + private static Raxen main; + private MongoDB mongoDB; + private MongoCollection mongoCollection; + private static PlayerManager playerManager; + private static StorageManager sto; + private Attributes attributes; - public PlayerConfig(Raxen main) { - this.main = main; - sto = main.getManager().getStorageManager(); - this.mongoDB = main.getManager().getLibsManager().getMongoDB(); - this.mongoCollection = mongoDB.getMongoCollection(); - playerManager = main.getManager().getPlayerManager(); - this.attributes = new Attributes(main); - } - - /** - * closes mongo connection - */ - public void close() { - mongoDB.close(); - } - - /** - * save players stuff to mongo db - * @param player - * @param attributes - * @param invstr - * @param reverse - */ - public void saveUsingMongoDB( - @NotNull Player player, - Attributes attributes, - String invstr, - Integer reverse - ) { - debug(main, "Saving " + player.getName() + "'s data!"); - Document doc = new Document("uuid", player.getUniqueId().toString()) - .append("name", player.getName()) - .append("inv", invstr); - HashMap attribute = main - .getManager() - .getPlayerManager() - .getAttribute(); - for (String s : attribute.keySet()) { - debug("saving " + s); - doc.append(s, attribute.get(s).get(player)); + public PlayerConfig(Raxen main) { + this.main = main; + sto = main.getManager().getStorageManager(); + this.mongoDB = main.getManager().getLibsManager().getMongoDB(); + this.mongoCollection = mongoDB.getMongoCollection(); + playerManager = main.getManager().getPlayerManager(); + this.attributes = new Attributes(main); } - if (playerManager.getRaxenPlayer(player).getStorage() != null) { - if (playerManager.getRaxenPlayer(player).getStorage().getEc() != null) { - debug(main, "Saving " + player.getName() + "'s storage!"); - EnderChest ec = playerManager - .getRaxenPlayer(player) - .getStorage() - .getEc(); - List list = new ArrayList(); - reverse = 0; - for (ItemStack it : ec.getEc()) { - if (it != null && it.getType() != Material.AIR) { - String s = Items.itemStackSerialize(it, reverse); - list.add(s); - } - reverse += 1; + + /** + * closes mongo connection + */ + public void close() { + mongoDB.close(); + } + + /** + * save players stuff to mongo db + * + * @param player + * @param attributes + * @param invstr + * @param reverse + */ + public void saveUsingMongoDB( + @NotNull Player player, + Attributes attributes, + String invstr, + Integer reverse + ) { + debug(main, "Saving " + player.getName() + "'s data!"); + Document doc = new Document("uuid", player.getUniqueId().toString()) + .append("name", player.getName()) + .append("inv", invstr); + HashMap attribute = main + .getManager() + .getPlayerManager() + .getAttribute(); + for (String s : attribute.keySet()) { + debug("saving " + s); + doc.append(s, attribute.get(s).get(player)); } - String ecstr = Items.listItemStackSerialize(list); - doc.append("ec", ecstr); - } - } - Document playerDoc = mongoCollection - .find(Filters.eq("uuid", player.getUniqueId().toString())) - .first(); - if (playerDoc == null) { - mongoCollection.insertOne(doc); - debug(main, "insert one"); - } else { - mongoCollection.replaceOne( - Filters.eq("uuid", player.getUniqueId().toString()), - doc - ); - debug(main, "replace one"); - } - } - - /** - * save players stuff to yml - * @param player - * @param attributes - * @param invstr - * @param reverse - */ - public void saveUsingYml( - Player player, - Attributes attributes, - String invstr, - Integer reverse - ) { - FileConfiguration config = sto.createYml(player); - config.set("name", player.getName()); - HashMap attribute = main - .getManager() - .getPlayerManager() - .getAttribute(); - for (String s : attribute.keySet()) { - config.set(s, attribute.get(s).get(player)); - } - config.set("inv", invstr); - if (playerManager.getRaxenPlayer(player).getStorage() != null) { - if (playerManager.getRaxenPlayer(player).getStorage().getEc() != null) { - EnderChest ec = playerManager - .getRaxenPlayer(player) - .getStorage() - .getEc(); - List list = new ArrayList(); - reverse = 0; - for (ItemStack it : ec.getEc()) { - reverse += 1; - if (it != null) { - String s = Items.itemStackSerialize(it, reverse); - list.add(s); - } + if (playerManager.getRaxenPlayer(player).getStorage() != null) { + if ( + playerManager.getRaxenPlayer(player).getStorage().getEc() != + null + ) { + debug(main, "Saving " + player.getName() + "'s storage!"); + EnderChest ec = playerManager + .getRaxenPlayer(player) + .getStorage() + .getEc(); + List list = new ArrayList(); + reverse = 0; + for (ItemStack it : ec.getEc()) { + if (it != null && it.getType() != Material.AIR) { + String s = Items.itemStackSerialize(it, reverse); + list.add(s); + } + reverse += 1; + } + String ecstr = Items.listItemStackSerialize(list); + doc.append("ec", ecstr); + } } - String ecstr = Items.listItemStackSerialize(list); - config.set("ec", ecstr); - } - } - try { - config.save( - main.getDataFolder() + - "/playerInfo/" + - player.getUniqueId() + - "/" + - "playerInfo.yml" - ); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * load player stuff from mongo db - * @param player - */ - public void loadUsingMongoDB(@NotNull Player player) { - Document playerDoc = mongoCollection - .find(Filters.eq("uuid", player.getUniqueId().toString())) - .first(); - if (playerDoc == null) { - debug(main, "Intiatilising Data for Player: " + player.getName()); - playerManager.getRaxenPlayer(player).createNewAttribute(); - playerManager.getRaxenPlayer(player).createStorage(); - playerManager.getRaxenPlayer(player).createInventory(); - PlayerUtils.updateSkills(main, player); - return; - } - debug(main, "Loading " + player.getName() + "'s data!"); - attributes.setAttributes( - player, - playerDoc.getInteger("MAX_HEALTH"), - playerDoc.getInteger("HEALTH"), - playerDoc.getInteger("ITEM_HEALTH"), - playerDoc.getInteger("DEFENSE"), - playerDoc.getInteger("ITEM_DEFENSE"), - playerDoc.getInteger("SPEED"), - playerDoc.getInteger("ITEM_SPEED"), - playerDoc.getInteger("STRENGTH"), - playerDoc.getInteger("ITEM_STRENGTH"), - playerDoc.getInteger("MAX_MANA"), - playerDoc.getInteger("MANA"), - playerDoc.getInteger("ITEM_MANA"), - playerDoc.getInteger("LUCK"), - playerDoc.getInteger("ITEM_LUCK") - ); - Inventory ec = Bukkit.createInventory( - null, - 54, - Component.text("Ender Chest") - ); - if (playerDoc.getString("ec") != null) { - debug(main, "Loading " + player.getName() + "'s storage."); - ec = - setItemsToInventory( - mapItemStackDeserialize(playerDoc.getString("ec")), - ec - ); - } - playerManager.getRaxenPlayer(player).setStorage(ec); - PlayerInventory inv = player.getInventory(); - inv = - setItemsToInventory( - listItemStackDeserialize(playerDoc.getString("inv")), - inv - ); - player.getInventory().setContents(inv.getContents()); - player.updateInventory(); - me.unurled.raxen.components.entity.player.storages.Inventory invv = - new me.unurled.raxen.components.entity.player.storages.Inventory(inv); - Inventories invvv = new Inventories(invv); - playerManager.getRaxenPlayer(player).setInventory(inv); - PlayerUtils.updateSkills(main, player); - } - - /** - * load player stuff from yml - * @param player - * @throws IOException - */ - public void loadUsingYml(Player player) throws IOException { - FileConfiguration config = sto.createYml(player); - attributes.setAttributes( - player, - config.getInt("maxHealth"), - config.getInt("health"), - config.getInt("itemHealth"), - config.getInt("defense"), - config.getInt("itemDefense"), - config.getInt("speed"), - config.getInt("itemSpeed"), - config.getInt("strength"), - config.getInt("itemStrength"), - config.getInt("maxMana"), - config.getInt("mana"), - config.getInt("itemMana"), - config.getInt("luck"), - config.getInt("itemLuck") - ); - Inventory ec = Bukkit.createInventory( - null, - 54, - Component.text("Ender Chest") - ); - if ((String) config.get("ec") != null) { - ec = - setItemsToInventory( - mapItemStackDeserialize((String) config.get("ec")), - ec - ); - } - EnderChest ecc = new EnderChest(ec); - Storage storage = new Storage(ecc); - playerManager.getRaxenPlayer(player).setStorage(ec); - PlayerInventory inv = (PlayerInventory) Bukkit.createInventory( - player, - InventoryType.PLAYER - ); - inv = - setItemsToInventory( - listItemStackDeserialize((String) config.getString("inv")), - inv - ); - player.getInventory().setContents(inv.getContents()); - player.updateInventory(); - me.unurled.raxen.components.entity.player.storages.Inventory invv = - new me.unurled.raxen.components.entity.player.storages.Inventory(inv); - Inventories invvv = new Inventories(invv); - playerManager.getRaxenPlayer(player).setInventory(inv); - } - - /** - * saves player stuff - * @param player - */ - public void savePlayerConfig(@NotNull Player player) { - Attributes attributes = new Attributes(main); - PlayerInventory inv = player.getInventory(); - - List listInv = new ArrayList(); - Integer reverse = 0; - for (ItemStack it : inv) { - reverse = reverse + 1; - if (it != null && it.getType() != Material.AIR) { - String s = Items.itemStackSerialize(it, reverse); - listInv.add(s); - } - } - String invstr = Items.itemStackSer(inv); - debug(main, "saving..."); - String storage = sto.getConfig().getString("storage"); - Integer finalReverse = reverse; - String finalInvstr = invstr; - new BukkitRunnable() { - @Override - public void run() { - saveUsingMongoDB(player, attributes, finalInvstr, finalReverse); - } - } - .runTaskAsynchronously(main); - debug(main, "using mongo"); - if (storage == "MYSQL" || storage == "YML") { - String finalInvstr1 = invstr; - Integer finalReverse1 = reverse; - new BukkitRunnable() { - @Override - public void run() { - saveUsingYml(player, attributes, finalInvstr1, finalReverse1); + Document playerDoc = mongoCollection + .find(Filters.eq("uuid", player.getUniqueId().toString())) + .first(); + if (playerDoc == null) { + mongoCollection.insertOne(doc); + debug(main, "insert one"); + } else { + mongoCollection.replaceOne( + Filters.eq("uuid", player.getUniqueId().toString()), + doc + ); + debug(main, "replace one"); } - } - .runTaskAsynchronously(main); - debug(main, "using yml"); } - debug(main, "Player: " + player.getName() + " data successfully saved!"); - } - - /** - * load player stuff - * @param player - */ - public void loadPlayerConfig(Player player) { - String st = StorageManager.getConfig().getString("storage"); - String value = ""; - if (st.equals("MONGODB")) { - new BukkitRunnable() { - @Override - public void run() { - loadUsingMongoDB(player); + /** + * save players stuff to yml + * + * @param player + * @param attributes + * @param invstr + * @param reverse + */ + public void saveUsingYml( + Player player, + Attributes attributes, + String invstr, + Integer reverse + ) { + FileConfiguration config = sto.createYml(player); + config.set("name", player.getName()); + HashMap attribute = main + .getManager() + .getPlayerManager() + .getAttribute(); + for (String s : attribute.keySet()) { + config.set(s, attribute.get(s).get(player)); } - } - .runTaskAsynchronously(main); - value = "mongodb"; - } else { - value = "yml"; - new BukkitRunnable() { - @Override - public void run() { - try { - loadUsingYml(player); - } catch (IOException e) { + config.set("inv", invstr); + if (playerManager.getRaxenPlayer(player).getStorage() != null) { + if ( + playerManager.getRaxenPlayer(player).getStorage().getEc() != + null + ) { + EnderChest ec = playerManager + .getRaxenPlayer(player) + .getStorage() + .getEc(); + List list = new ArrayList(); + reverse = 0; + for (ItemStack it : ec.getEc()) { + reverse += 1; + if (it != null) { + String s = Items.itemStackSerialize(it, reverse); + list.add(s); + } + } + String ecstr = Items.listItemStackSerialize(list); + config.set("ec", ecstr); + } + } + try { + config.save( + main.getDataFolder() + + "/playerInfo/" + + player.getUniqueId() + + "/" + + "playerInfo.yml" + ); + } catch (IOException e) { e.printStackTrace(); - } } - } - .runTaskAsynchronously(main); } - debug( - main, - "Player: " + player.getName() + " data successfully loaded using " + value - ); - } + + /** + * load player stuff from mongo db + * + * @param player + */ + public void loadUsingMongoDB(@NotNull Player player) { + Document playerDoc = mongoCollection + .find(Filters.eq("uuid", player.getUniqueId().toString())) + .first(); + if (playerDoc == null) { + 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).createStorage(); + playerManager.getRaxenPlayer(player).createInventory(); + PlayerUtils.updateSkills(main, player); + return; + } + debug(main, "Loading " + player.getName() + "'s data!"); + attributes.setAttributes( + player, + playerDoc.getInteger("MAX_HEALTH"), + playerDoc.getInteger("HEALTH"), + playerDoc.getInteger("ITEM_HEALTH"), + playerDoc.getInteger("DEFENSE"), + playerDoc.getInteger("ITEM_DEFENSE"), + playerDoc.getInteger("SPEED"), + playerDoc.getInteger("ITEM_SPEED"), + playerDoc.getInteger("STRENGTH"), + playerDoc.getInteger("ITEM_STRENGTH"), + playerDoc.getInteger("MAX_MANA"), + playerDoc.getInteger("MANA"), + playerDoc.getInteger("ITEM_MANA"), + playerDoc.getInteger("LUCK"), + playerDoc.getInteger("ITEM_LUCK") + ); + Inventory ec = Bukkit.createInventory( + null, + 54, + Component.text("Ender Chest") + ); + if (playerDoc.getString("ec") != null) { + debug(main, "Loading " + player.getName() + "'s storage."); + ec = + setItemsToInventory( + mapItemStackDeserialize(playerDoc.getString("ec")), + ec + ); + } + playerManager.getRaxenPlayer(player).setStorage(ec); + PlayerInventory inv = player.getInventory(); + inv = + setItemsToInventory( + listItemStackDeserialize(playerDoc.getString("inv")), + inv + ); + player.getInventory().setContents(inv.getContents()); + player.updateInventory(); + me.unurled.raxen.components.entity.player.storages.Inventory invv = + new me.unurled.raxen.components.entity.player.storages.Inventory( + inv + ); + Inventories invvv = new Inventories(invv); + playerManager.getRaxenPlayer(player).setInventory(inv); + PlayerUtils.updateSkills(main, player); + } + + /** + * load player stuff from yml + * + * @param player + * @throws IOException + */ + public void loadUsingYml(Player player) throws IOException { + FileConfiguration config = sto.createYml(player); + attributes.setAttributes( + player, + config.getInt("maxHealth"), + config.getInt("health"), + config.getInt("itemHealth"), + config.getInt("defense"), + config.getInt("itemDefense"), + config.getInt("speed"), + config.getInt("itemSpeed"), + config.getInt("strength"), + config.getInt("itemStrength"), + config.getInt("maxMana"), + config.getInt("mana"), + config.getInt("itemMana"), + config.getInt("luck"), + config.getInt("itemLuck") + ); + Inventory ec = Bukkit.createInventory( + null, + 54, + Component.text("Ender Chest") + ); + if ((String) config.get("ec") != null) { + ec = + setItemsToInventory( + mapItemStackDeserialize((String) config.get("ec")), + ec + ); + } + EnderChest ecc = new EnderChest(ec); + Storage storage = new Storage(ecc); + playerManager.getRaxenPlayer(player).setStorage(ec); + PlayerInventory inv = (PlayerInventory) Bukkit.createInventory( + player, + InventoryType.PLAYER + ); + inv = + setItemsToInventory( + listItemStackDeserialize((String) config.getString("inv")), + inv + ); + player.getInventory().setContents(inv.getContents()); + player.updateInventory(); + me.unurled.raxen.components.entity.player.storages.Inventory invv = + new me.unurled.raxen.components.entity.player.storages.Inventory( + inv + ); + Inventories invvv = new Inventories(invv); + playerManager.getRaxenPlayer(player).setInventory(inv); + } + + /** + * saves player stuff + * + * @param player + */ + public void savePlayerConfig(@NotNull Player player) { + Attributes attributes = new Attributes(main); + PlayerInventory inv = player.getInventory(); + + List listInv = new ArrayList(); + Integer reverse = 0; + for (ItemStack it : inv) { + reverse = reverse + 1; + if (it != null && it.getType() != Material.AIR) { + String s = Items.itemStackSerialize(it, reverse); + listInv.add(s); + } + } + String invstr = Items.itemStackSer(inv); + debug(main, "saving..."); + String storage = sto.getConfig().getString("storage"); + Integer finalReverse = reverse; + String finalInvstr = invstr; + new BukkitRunnable() { + @Override + public void run() { + saveUsingMongoDB(player, attributes, finalInvstr, finalReverse); + } + } + .runTaskAsynchronously(main); + debug(main, "using mongo"); + if (storage == "MYSQL" || storage == "YML") { + String finalInvstr1 = invstr; + Integer finalReverse1 = reverse; + new BukkitRunnable() { + @Override + public void run() { + saveUsingYml( + player, + attributes, + finalInvstr1, + finalReverse1 + ); + } + } + .runTaskAsynchronously(main); + debug(main, "using yml"); + } + + debug( + main, + "Player: " + player.getName() + " data successfully saved!" + ); + } + + /** + * load player stuff + * + * @param player + */ + public void loadPlayerConfig(Player player) { + String st = StorageManager.getConfig().getString("storage"); + String value = ""; + if (st.equals("MONGODB")) { + new BukkitRunnable() { + @Override + public void run() { + loadUsingMongoDB(player); + } + } + .runTaskAsynchronously(main); + value = "mongodb"; + } else { + value = "yml"; + new BukkitRunnable() { + @Override + public void run() { + try { + loadUsingYml(player); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + .runTaskAsynchronously(main); + } + debug( + main, + "Player: " + + player.getName() + + " data successfully loaded using " + + value + ); + } } diff --git a/src/main/java/me/unurled/raxen/config/TutorialConfig.java b/src/main/java/me/unurled/raxen/config/TutorialConfig.java new file mode 100644 index 0000000..917e84a --- /dev/null +++ b/src/main/java/me/unurled/raxen/config/TutorialConfig.java @@ -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 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 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 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 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 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(); + } + +} diff --git a/src/main/java/me/unurled/raxen/listener/entity/DamageEntity.java b/src/main/java/me/unurled/raxen/listener/entity/DamageEntity.java index 4ee5186..4bbc077 100644 --- a/src/main/java/me/unurled/raxen/listener/entity/DamageEntity.java +++ b/src/main/java/me/unurled/raxen/listener/entity/DamageEntity.java @@ -5,167 +5,308 @@ import static me.unurled.raxen.utils.Utils.debug; import java.util.Objects; import me.unurled.raxen.Raxen; 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 org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByBlockEvent; 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.PersistentDataType; +import org.bukkit.projectiles.ProjectileSource; public class DamageEntity implements Listener { - private Raxen main; - private EntityNamespacedKey entityNamespacedKey; + private Raxen main; + private EntityNamespacedKey entityNamespacedKey; - public DamageEntity(Raxen main) { - this.main = main; - this.entityNamespacedKey = new EntityNamespacedKey(main); - } + public DamageEntity(Raxen main) { + this.main = main; + this.entityNamespacedKey = new EntityNamespacedKey(main); + } - /** - * fired when an entity is damaged by another entity - * calculates the damage and apply it to the entity - * @param e - */ - @EventHandler - public void entityDamageByEntity(EntityDamageByEntityEvent e) { - if ( - !(e.getEntity() instanceof LivingEntity) || - !(e.getDamager() instanceof LivingEntity) - ) { - debug("Not Living Entity, Some block falling shit or block entities"); - } else { - e.setDamage(0); - Integer damage = 1; - Integer strength = 0; - Integer itemStrength = 0; - Integer defense = 0; - Integer itemDefense = 0; - Integer health = 0; - Integer itemHealth = 0; - Integer initDamage = 0; - PlayerManager pm = - ( - (Raxen) Objects.requireNonNull( - Bukkit.getPluginManager().getPlugin("Raxen") - ) - ).getManager() - .getPlayerManager(); - debug( - main, - e.getEntity().getName(), - e.getEntity().getType().toString(), - e.getDamager().getType().toString(), - e.getDamager().getName() - ); - if (e.getDamager() instanceof Player playerDamager) { - strength = pm.getStrength().get(playerDamager); - itemStrength = pm.getItemStrength().get(playerDamager); - } else { - Entity entityDamager = e.getDamager(); - PersistentDataContainer data = - entityDamager.getPersistentDataContainer(); + /** + * fired when an entity is damaged by something TODO: calculate damage and apply it to the + * entity + * + * @param e event + */ + @EventHandler + public void entityDamage(EntityDamageEvent e) { + e.setCancelled(true); + e.setDamage(0); + e.getEntity().setFireTicks(0); + if (e instanceof EntityDamageByEntityEvent) { + EntityDamageByEntityEvent ev2 = (EntityDamageByEntityEvent) e; + ev2.setCancelled(true); + Entity attacker = ev2.getDamager(); + Entity defender = ev2.getEntity(); + if (attacker instanceof Player) { + PlayerManager pm = main.getManager().getPlayerManager(); + if (defender instanceof Player) { + // attack between players + RaxenPlayer rx = pm.getRaxenPlayer((Player) attacker); + RaxenPlayer rx2 = pm.getRaxenPlayer((Player) defender); + if (rx != null && rx2 != null) { + rx.attackPlayer(rx2); + } + } else { + // attack between player and mob + RaxenPlayer rx = pm.getRaxenPlayer((Player) attacker); + MobData re = main.getManager().getEntityManager().getSpawnedMob().get( + defender.getUniqueId()); + if (rx != null) { + rx.attackMob(re); + } + } + } else if (attacker instanceof Projectile) { + boolean projectile = true; + ProjectileSource source = ((Projectile) attacker).getShooter(); + double rpgKnockback = -1; + int rpgDamage = -1; + if (attacker != null) { + Metadatable sourceMeta = (Metadatable) attacker; + // TODO: check metadata + } + if (source == defender) { + attacker.remove(); + return; + } + if (source instanceof Player) { + RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer( + (Player) source); + if (defender instanceof Player) { + RaxenPlayer rx2 = main.getManager().getPlayerManager().getRaxenPlayer( + (Player) defender); + // range attack between players + if (rpgKnockback >= 0) { + rx.attackPlayer(rx2, rpgDamage, projectile, rpgKnockback); + } else { + rx.attackPlayer(rx2, rpgDamage, projectile); + } + } else { + MobData mb = main.getManager().getEntityManager().getSpawnedMob().get( + defender.getUniqueId()); + if (rx != null && mb != null) { + if (rpgKnockback >= 0) { + rx.attackMob(mb, rpgKnockback, rpgDamage, projectile); + } else { + rx.attackMob(mb, rpgDamage, projectile); + } + } + // range attack between player and mob + } + } else { + if (defender instanceof Player) { + MobData a = main.getManager().getEntityManager().getSpawnedMob().get( + attacker.getUniqueId()); + RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer( + (Player) defender); + if (a != null && d != null) { + a.attack(d, rpgDamage, projectile); + } + // range attack between mob and player + } else { + // range attack between mobs + } + } + attacker.remove(); + } else { + if (defender instanceof Player) { + MobData a = main.getManager().getEntityManager().getSpawnedMob().get( + attacker.getUniqueId()); + RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer( + (Player) defender); + if (a != null && d != null) { + a.attack(d); + } + // attack between mob and player + } else { + // attack between mobs + } + } + } + + } + + /** + * fired when an entity is damaged by another entity calculates the damage and apply it to the + * entity + * + * @param e + */ + @Deprecated + // @EventHandler + public void entityDamageByEntity(EntityDamageByEntityEvent e) { if ( - data.has(entityNamespacedKey.strength, PersistentDataType.INTEGER) + !(e.getEntity() instanceof LivingEntity) || + !(e.getDamager() instanceof LivingEntity) ) { - strength = - data.get(entityNamespacedKey.strength, PersistentDataType.INTEGER); - } - itemStrength = - pm.getItemStrength().getItem((LivingEntity) entityDamager); - } - if (e.getEntity() instanceof Player playerVictim) { - me.unurled.raxen.components.entity.player.attributes.Attributes attributes = - new me.unurled.raxen.components.entity.player.attributes.Attributes( - main - ); - defense = pm.getDefense().get(playerVictim); - health = pm.getHealth().get(playerVictim); - itemDefense = pm.getItemDefense().get(playerVictim); - itemHealth = pm.getItemHealth().get(playerVictim); - } else { - Entity entityVictim = e.getEntity(); - PersistentDataContainer data = - entityVictim.getPersistentDataContainer(); - if (data.has(entityNamespacedKey.defense, PersistentDataType.INTEGER)) { - defense = - data.get(entityNamespacedKey.defense, PersistentDataType.INTEGER); - } - if (data.has(entityNamespacedKey.health, PersistentDataType.INTEGER)) { - health = - data.get(entityNamespacedKey.health, PersistentDataType.INTEGER); - } - itemDefense = pm.getItemDefense().getItem((LivingEntity) entityVictim); - itemHealth = pm.getItemHealth().getItem((LivingEntity) entityVictim); - } - debug( - main, - initDamage.toString(), - itemDefense.toString(), - strength.toString() - ); - initDamage = (5 + itemStrength) * (1 + (strength / 100)); - damage = initDamage; - defense = defense + itemDefense; - debug(main, String.valueOf(damage)); - defense = defense / (defense + 100); - debug(main, String.valueOf(damage)); - debug(main, String.valueOf(defense)); - Integer health_with_defense = health * (1 + (defense / 100)); - debug(main, String.valueOf(damage)); - debug(main, String.valueOf(health)); - debug(main, String.valueOf(health_with_defense)); - if (damage >= health_with_defense) { - debug(main, "Killed entity normally."); - e.setDamage( - Objects - .requireNonNull( - e - .getEntity() - .getType() - .getDefaultAttributes() - .getAttribute(Attribute.GENERIC_MAX_HEALTH) - ) - .getDefaultValue() - ); - } else { - debug(main, "Applying damage to entity."); - if (defense == 0) { - health = health_with_defense - damage; - } else { - health = health_with_defense - health - damage; - } - if (e.getEntity() instanceof Player playerVictim) { - me.unurled.raxen.components.entity.player.attributes.Attributes attributes = - new me.unurled.raxen.components.entity.player.attributes.Attributes( - main + debug( + "Not Living Entity, Some block falling shit or block entities" ); - pm.getHealth().set(playerVictim, health); - playerVictim.setHealth(health.doubleValue() / 5); } else { - Entity entityVictim = e.getEntity(); - pm.getHealth().set(entityVictim, health); + e.setCancelled(true); + e.setDamage(0); + Integer damage = 1; + Integer strength = 0; + Integer itemStrength = 0; + Integer defense = 0; + Integer itemDefense = 0; + Integer health = 0; + Integer itemHealth = 0; + Integer initDamage = 0; + PlayerManager pm = + ( + (Raxen) Objects.requireNonNull( + Bukkit.getPluginManager().getPlugin("Raxen") + ) + ).getManager() + .getPlayerManager(); + debug( + main, + e.getEntity().getName(), + e.getEntity().getType().toString(), + e.getDamager().getType().toString(), + e.getDamager().getName() + ); + if (e.getDamager() instanceof Player playerDamager) { + strength = pm.getStrength().get(playerDamager); + itemStrength = pm.getItemStrength().get(playerDamager); + } else { + Entity entityDamager = e.getDamager(); + PersistentDataContainer data = + entityDamager.getPersistentDataContainer(); + if ( + data.has( + entityNamespacedKey.strength, + PersistentDataType.INTEGER + ) + ) { + strength = + data.get( + entityNamespacedKey.strength, + PersistentDataType.INTEGER + ); + } + itemStrength = + pm.getItemStrength().getItem((LivingEntity) entityDamager); + } + if (e.getEntity() instanceof Player playerVictim) { + me.unurled.raxen.components.entity.player.attributes.Attributes attributes = + new me.unurled.raxen.components.entity.player.attributes.Attributes( + main + ); + defense = pm.getDefense().get(playerVictim); + health = pm.getHealth().get(playerVictim); + itemDefense = pm.getItemDefense().get(playerVictim); + itemHealth = pm.getItemHealth().get(playerVictim); + } else { + Entity entityVictim = e.getEntity(); + PersistentDataContainer data = + entityVictim.getPersistentDataContainer(); + if ( + data.has( + entityNamespacedKey.defense, + PersistentDataType.INTEGER + ) + ) { + defense = + data.get( + entityNamespacedKey.defense, + PersistentDataType.INTEGER + ); + } + if ( + data.has( + entityNamespacedKey.health, + PersistentDataType.INTEGER + ) + ) { + health = + data.get( + entityNamespacedKey.health, + PersistentDataType.INTEGER + ); + } + itemDefense = + pm.getItemDefense().getItem((LivingEntity) entityVictim); + itemHealth = + pm.getItemHealth().getItem((LivingEntity) entityVictim); + } + debug( + main, + initDamage.toString(), + itemDefense.toString(), + strength.toString() + ); + initDamage = (5 + itemStrength) * (1 + (strength / 100)); + damage = initDamage; + defense = defense + itemDefense; + debug(main, String.valueOf(damage)); + defense = defense / (defense + 100); + debug(main, String.valueOf(damage)); + debug(main, String.valueOf(defense)); + Integer health_with_defense = health * (1 + (defense / 100)); + debug(main, String.valueOf(damage)); + debug(main, String.valueOf(health)); + debug(main, String.valueOf(health_with_defense)); + if (damage >= health_with_defense) { + debug(main, "Killed entity normally."); + e.setDamage( + Objects + .requireNonNull( + e + .getEntity() + .getType() + .getDefaultAttributes() + .getAttribute(Attribute.GENERIC_MAX_HEALTH) + ) + .getDefaultValue() + ); + } else { + debug(main, "Applying damage to entity."); + if (defense == 0) { + health = health_with_defense - damage; + } else { + health = health_with_defense - health - damage; + } + if (e.getEntity() instanceof Player playerVictim) { + me.unurled.raxen.components.entity.player.attributes.Attributes attributes = + new me.unurled.raxen.components.entity.player.attributes.Attributes( + main + ); + pm.getHealth().set(playerVictim, health); + playerVictim.setHealth(health.doubleValue() / 5); + } else { + Entity entityVictim = e.getEntity(); + pm.getHealth().set(entityVictim, health); + } + debug(main, health.toString()); + } } - debug(main, health.toString()); - } } - } - /** - * damage made by blocks on entity - * @param e - */ - @EventHandler - public void entityDamageByBlock(EntityDamageByBlockEvent e) { - e.setDamage(0); - if (e.getEntity() instanceof Player) { - Player player = (Player) e.getEntity(); + /** + * damage made by blocks on entity + * + * @param e + */ + @Deprecated + // @EventHandler + public void entityDamageByBlock(EntityDamageByBlockEvent e) { + e.setDamage(0); + if (e.getEntity() instanceof Player) { + Player player = (Player) e.getEntity(); + } } - } } diff --git a/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java b/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java index a2e9fbd..59582a3 100644 --- a/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java +++ b/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java @@ -5,6 +5,7 @@ import static me.unurled.raxen.utils.Utils.debug; import me.unurled.raxen.Raxen; import me.unurled.raxen.components.entity.other.EntityNamespacedKey; import me.unurled.raxen.components.entity.other.EntityUtils; +import org.bukkit.entity.Display; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -15,52 +16,61 @@ import org.bukkit.persistence.PersistentDataType; public class SpawnEvent implements Listener { - private Raxen main; - private EntityUtils entityUtils; - private EntityNamespacedKey namespacedKey; + private Raxen main; + private EntityUtils entityUtils; + private EntityNamespacedKey namespacedKey; - public SpawnEvent(Raxen main) { - this.main = main; - this.entityUtils = new EntityUtils(main); - this.namespacedKey = new EntityNamespacedKey(main); - } - - /** - * when a new entity spawns - * adds all persistent data container - * @param e - */ - @EventHandler - public void Spawn(EntitySpawnEvent e) { - if (e.getEntity() instanceof Player) { - //player stuff dont want to talk about it; already doing it in player join event - debug(main, "Player: " + ((Player) e.getEntity()).getName()); - } else if ( - e.getEntity().getType() != EntityType.DROPPED_ITEM && - e.getEntity().getType() != EntityType.FALLING_BLOCK - ) { - debug(main, e.getEntity().getName()); - if ( - !e - .getEntity() - .getPersistentDataContainer() - .has(namespacedKey.name, PersistentDataType.STRING) - ) { - entityUtils.setNameSpacedKeys( - e.getEntity(), - e.getEntityType().name(), - 1, - 10, - 0, - 50, - 0, - 100, - 0, - 100, - 0 - ); - } - entityUtils.updateSkills((LivingEntity) e.getEntity()); + public SpawnEvent(Raxen main) { + this.main = main; + this.entityUtils = new EntityUtils(main); + this.namespacedKey = new EntityNamespacedKey(main); + } + + /** + * when a new entity spawns adds all persistent data container + * + * @param e + */ + @EventHandler + public void Spawn(EntitySpawnEvent e) { + e.getEntity().getWorld().spawn(e.getLocation(), Display.class); + if (e.getEntity() instanceof Player) { + //player stuff dont want to talk about it; already doing it in player join event + debug(main, "Player: " + ((Player) e.getEntity()).getName()); + } else if ( + e.getEntity().getType() != EntityType.DROPPED_ITEM && + e.getEntity().getType() != EntityType.FALLING_BLOCK && + e.getEntity().getType() != EntityType.ARROW && + e.getEntity().getType() != EntityType.ITEM_DISPLAY && + e.getEntity().getType() != EntityType.BLOCK_DISPLAY && + e.getEntity().getType() != EntityType.TEXT_DISPLAY && + !(e.getEntity() instanceof Display) + ) { + debug(main, e.getEntity().getName()); + if ( + !e + .getEntity() + .getPersistentDataContainer() + .has(namespacedKey.name, PersistentDataType.STRING) + ) { + entityUtils.setNameSpacedKeys( + e.getEntity(), + e.getEntityType().name(), + 1, + 10, + 0, + 50, + 0, + 100, + 0, + 100, + 0 + ); + } + main.getManager().getEntityManager().registerEntity(e.getEntity()); + entityUtils.updateSkills((LivingEntity) e.getEntity()); + + // add nametag + } } - } } diff --git a/src/main/java/me/unurled/raxen/listener/player/ArmorEvent.java b/src/main/java/me/unurled/raxen/listener/player/ArmorEvent.java index e206c0b..5ed3d1c 100644 --- a/src/main/java/me/unurled/raxen/listener/player/ArmorEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/ArmorEvent.java @@ -16,56 +16,60 @@ import org.bukkit.inventory.ItemStack; public class ArmorEvent implements Listener { - private Raxen main; + private Raxen main; - public ArmorEvent(Raxen main) { - this.main = main; - } + public ArmorEvent(Raxen main) { + this.main = main; + } - /** - * when player changes armor, calculates new stats for player and setting it - * @param e - */ - @EventHandler - public void ArmorChangeEvent(PlayerArmorChangeEvent e) { - Player player = e.getPlayer(); - PlayerManager pm = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - Entity entity = player; - Attributes attributes = new Attributes(main); - if (e.getOldItem() != null && e.getOldItem().getType() != Material.AIR) { - ItemStack oldItem = e.getOldItem(); - NBTItem nbti = new NBTItem(oldItem); - if (nbti.hasTag("SPEED")) { - pm.getSpeed().remove(entity, nbti.getInteger("SPEED")); - } - if (nbti.hasTag("HEALTH")) { - pm.getHealth().remove(entity, nbti.getInteger("HEALTH")); - } - if (nbti.hasTag("DEFENSE")) { - pm.getDefense().remove(entity, nbti.getInteger("DEFENSE")); - } - if (nbti.hasTag("STRENGTH")) { - pm.getStrength().remove(entity, nbti.getInteger("STRENGTH")); - } + /** + * when player changes armor, calculates new stats for player and setting it + * @param e + */ + @EventHandler + public void ArmorChangeEvent(PlayerArmorChangeEvent e) { + Player player = e.getPlayer(); + PlayerManager pm = + ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() + .getPlayerManager(); + Entity entity = player; + Attributes attributes = new Attributes(main); + if ( + e.getOldItem() != null && e.getOldItem().getType() != Material.AIR + ) { + ItemStack oldItem = e.getOldItem(); + NBTItem nbti = new NBTItem(oldItem); + if (nbti.hasTag("SPEED")) { + pm.getSpeed().remove(entity, nbti.getInteger("SPEED")); + } + if (nbti.hasTag("HEALTH")) { + pm.getHealth().remove(entity, nbti.getInteger("HEALTH")); + } + if (nbti.hasTag("DEFENSE")) { + pm.getDefense().remove(entity, nbti.getInteger("DEFENSE")); + } + if (nbti.hasTag("STRENGTH")) { + pm.getStrength().remove(entity, nbti.getInteger("STRENGTH")); + } + } + if ( + e.getNewItem() != null && e.getNewItem().getType() != Material.AIR + ) { + ItemStack newItem = e.getNewItem(); + NBTItem nbti = new NBTItem(newItem); + if (nbti.hasTag("SPEED")) { + pm.getSpeed().add(entity, nbti.getInteger("SPEED")); + } + if (nbti.hasTag("HEALTH")) { + pm.getHealth().add(entity, nbti.getInteger("HEALTH")); + } + if (nbti.hasTag("DEFENSE")) { + pm.getDefense().add(entity, nbti.getInteger("DEFENSE")); + } + if (nbti.hasTag("STRENGTH")) { + pm.getStrength().add(entity, nbti.getInteger("STRENGTH")); + } + } + PlayerUtils.updateSkills(main, player); } - if (e.getNewItem() != null && e.getNewItem().getType() != Material.AIR) { - ItemStack newItem = e.getNewItem(); - NBTItem nbti = new NBTItem(newItem); - if (nbti.hasTag("SPEED")) { - pm.getSpeed().add(entity, nbti.getInteger("SPEED")); - } - if (nbti.hasTag("HEALTH")) { - pm.getHealth().add(entity, nbti.getInteger("HEALTH")); - } - if (nbti.hasTag("DEFENSE")) { - pm.getDefense().add(entity, nbti.getInteger("DEFENSE")); - } - if (nbti.hasTag("STRENGTH")) { - pm.getStrength().add(entity, nbti.getInteger("STRENGTH")); - } - } - PlayerUtils.updateSkills(main, player); - } } diff --git a/src/main/java/me/unurled/raxen/listener/player/ClickBlockEvent.java b/src/main/java/me/unurled/raxen/listener/player/ClickBlockEvent.java index e495502..f7b442c 100644 --- a/src/main/java/me/unurled/raxen/listener/player/ClickBlockEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/ClickBlockEvent.java @@ -13,31 +13,31 @@ import org.bukkit.inventory.Inventory; public class ClickBlockEvent implements Listener { - private Raxen main; - private GUI gui; + private Raxen main; + private GUI gui; - public ClickBlockEvent(Raxen main) { - this.main = main; - this.gui = new GUI(main); - } - - /** - * use with guis - * @param e - */ - @EventHandler - public void ClickEvent(PlayerInteractEvent e) { - Player player = e.getPlayer(); - Block block = e.getClickedBlock(); - Action action = e.getAction(); - if (action.isRightClick()) { - if (block != null) { - if (block.getType() == Material.CHEST) { - player.closeInventory(); - Inventory inv = gui.addItems(player); - player.openInventory(inv); - } - } + public ClickBlockEvent(Raxen main) { + this.main = main; + this.gui = new GUI(main); + } + + /** + * use with guis + * @param e + */ + @EventHandler + public void ClickEvent(PlayerInteractEvent e) { + Player player = e.getPlayer(); + Block block = e.getClickedBlock(); + Action action = e.getAction(); + if (action.isRightClick()) { + if (block != null) { + if (block.getType() == Material.CHEST) { + player.closeInventory(); + Inventory inv = gui.addItems(player); + player.openInventory(inv); + } + } + } } - } } diff --git a/src/main/java/me/unurled/raxen/listener/player/CloseInventoryEvent.java b/src/main/java/me/unurled/raxen/listener/player/CloseInventoryEvent.java index 8bb1e86..7c7692c 100644 --- a/src/main/java/me/unurled/raxen/listener/player/CloseInventoryEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/CloseInventoryEvent.java @@ -13,22 +13,24 @@ import org.bukkit.event.inventory.InventoryCloseEvent; public class CloseInventoryEvent implements Listener { - private PlayerManager playerManager; + private PlayerManager playerManager; - /** - * save enderchest/storage when player close - * @param e - */ - @EventHandler - public void InventoryCloseEvent(InventoryCloseEvent e) { - Player player = (Player) e.getPlayer(); - Component title = e.getView().title(); - if (title.toString().contains("Ender Chest")) { - playerManager = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - playerManager.getRaxenPlayer(player).setStorage(e.getInventory()); + /** + * save enderchest/storage when player close + * @param e + */ + @EventHandler + public void InventoryCloseEvent(InventoryCloseEvent e) { + Player player = (Player) e.getPlayer(); + Component title = e.getView().title(); + if (title.toString().contains("Ender Chest")) { + playerManager = + ( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen") + ).getManager() + .getPlayerManager(); + playerManager.getRaxenPlayer(player).setStorage(e.getInventory()); + } + log(player.getName() + " " + title.toString()); } - log(player.getName() + " " + title.toString()); - } } diff --git a/src/main/java/me/unurled/raxen/listener/player/FoodLevelEvent.java b/src/main/java/me/unurled/raxen/listener/player/FoodLevelEvent.java new file mode 100644 index 0000000..b8cd800 --- /dev/null +++ b/src/main/java/me/unurled/raxen/listener/player/FoodLevelEvent.java @@ -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); + } +} diff --git a/src/main/java/me/unurled/raxen/listener/player/InteractEvent.java b/src/main/java/me/unurled/raxen/listener/player/InteractEvent.java index bf0e025..e44ffbf 100644 --- a/src/main/java/me/unurled/raxen/listener/player/InteractEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/InteractEvent.java @@ -1,5 +1,6 @@ package me.unurled.raxen.listener.player; +import de.tr7zw.nbtapi.NBT; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -9,11 +10,18 @@ import org.bukkit.inventory.ItemStack; public class InteractEvent implements Listener { - @EventHandler - public void PlayerInteractEvent(PlayerInteractEvent e) { - // Player p = e.getPlayer(); - // if (e.hasItem()) { - // ItemStack i = e.getItem(); - // } - } + @EventHandler + public void PlayerInteractEvent(PlayerInteractEvent e) { + Player p = e.getPlayer(); + if (e.hasItem()) { + 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")) { + } + } + } + } + } } diff --git a/src/main/java/me/unurled/raxen/listener/player/ItemHandEvent.java b/src/main/java/me/unurled/raxen/listener/player/ItemHandEvent.java index 77e4b29..d3f42fb 100644 --- a/src/main/java/me/unurled/raxen/listener/player/ItemHandEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/ItemHandEvent.java @@ -20,50 +20,61 @@ import org.bukkit.inventory.ItemStack; public class ItemHandEvent implements Listener { - private Raxen main; + private Raxen main; - public ItemHandEvent(Raxen main) { - this.main = main; - } + public ItemHandEvent(Raxen main) { + this.main = main; + } - /** - * when player have something in hand, change and add new stats - * @param e - */ - @EventHandler - public void ItemHeldEvent(PlayerItemHeldEvent e) { - Player player = e.getPlayer(); - PlayerManager pm = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - Entity entity = player; - Attributes attributes = new Attributes(main); - ItemStack oldItem = player.getInventory().getItem(e.getPreviousSlot()); - ItemStack newItem = player.getInventory().getItem(e.getNewSlot()); - if (oldItem != null && oldItem.getType() != Material.AIR) { - NBTItem nbti = new NBTItem(oldItem); - for (String s : Attributes.getNameList()) { - if (nbti.hasTag(s.toUpperCase())) { - java.lang.reflect.Method method = null; - try { - method = pm.getClass().getMethod("getItem" + s); - } catch (SecurityException | NoSuchMethodException exception) {} - if (method != null) { - me.unurled.raxen.components.entity.Attributes.Attribute attribute = - null; - try { - attribute = (Attribute) method.invoke(pm, (Object) null); - } catch ( - InvocationTargetException | IllegalAccessException ignored - ) {} - if (attribute != null) { - attribute.remove(player, nbti.getInteger(s.toUpperCase())); - debug("removed " + s + " for player " + player.getName()); + /** + * when player have something in hand, change and add new stats + * @param e + */ + @EventHandler + public void ItemHeldEvent(PlayerItemHeldEvent e) { + Player player = e.getPlayer(); + PlayerManager pm = + ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() + .getPlayerManager(); + Entity entity = player; + Attributes attributes = new Attributes(main); + ItemStack oldItem = player.getInventory().getItem(e.getPreviousSlot()); + ItemStack newItem = player.getInventory().getItem(e.getNewSlot()); + if (oldItem != null && oldItem.getType() != Material.AIR) { + NBTItem nbti = new NBTItem(oldItem); + for (String s : Attributes.getNameList()) { + if (nbti.hasTag(s.toUpperCase())) { + java.lang.reflect.Method method = null; + try { + method = pm.getClass().getMethod("getItem" + s); + } catch ( + SecurityException | NoSuchMethodException exception + ) {} + if (method != null) { + me.unurled.raxen.components.entity.Attributes.Attribute attribute = + null; + try { + attribute = (Attribute) method.invoke(pm); + } catch ( + InvocationTargetException + | IllegalAccessException ignored + ) {} + if (attribute != null) { + attribute.remove( + player, + nbti.getInteger(s.toUpperCase()) + ); + debug( + "removed " + + s + + " for player " + + player.getName() + ); + } + } + } } - } - } - } - /*if(nbti.hasTag("SPEED")) { + /*if(nbti.hasTag("SPEED")) { pm.getItemSpeed().remove(player, nbti.getInteger("SPEED")); } if(nbti.hasTag("HEALTH")) { @@ -75,31 +86,39 @@ public class ItemHandEvent implements Listener { if(nbti.hasTag("STRENGTH")) { pm.getItemStrength().remove(player, nbti.getInteger("STRENGTH")); }*/ - } - if (newItem != null && newItem.getType() != Material.AIR) { - NBTItem nbti = new NBTItem(newItem); - for (String s : Attributes.getNameList()) { - if (nbti.hasTag(s.toUpperCase())) { - java.lang.reflect.Method method = null; - try { - method = pm.getClass().getMethod("getItem" + s); - } catch (SecurityException | NoSuchMethodException exception) {} - if (method != null) { - me.unurled.raxen.components.entity.Attributes.Attribute attribute = - null; - try { - attribute = (Attribute) method.invoke(pm, (Object) null); - } catch ( - InvocationTargetException | IllegalAccessException ignored - ) {} - if (attribute != null) { - attribute.add(player, nbti.getInteger(s.toUpperCase())); - debug("add " + s + " for player " + player.getName()); - } - } } - } - /* if(nbti.hasTag("SPEED")) { + if (newItem != null && newItem.getType() != Material.AIR) { + NBTItem nbti = new NBTItem(newItem); + for (String s : Attributes.getNameList()) { + if (nbti.hasTag(s.toUpperCase())) { + java.lang.reflect.Method method = null; + try { + method = pm.getClass().getMethod("getItem" + s); + } catch ( + SecurityException | NoSuchMethodException exception + ) {} + if (method != null) { + me.unurled.raxen.components.entity.Attributes.Attribute attribute = + null; + try { + attribute = (Attribute) method.invoke(pm); + } catch ( + InvocationTargetException + | IllegalAccessException ignored + ) {} + if (attribute != null) { + attribute.add( + player, + nbti.getInteger(s.toUpperCase()) + ); + debug( + "add " + s + " for player " + player.getName() + ); + } + } + } + } + /* if(nbti.hasTag("SPEED")) { pm.getItemSpeed().add(player, nbti.getInteger("SPEED")); } if(nbti.hasTag("HEALTH")) { @@ -113,7 +132,7 @@ public class ItemHandEvent implements Listener { if(nbti.hasTag("STRENGTH")) { pm.getItemStrength().add(player, nbti.getInteger("STRENGTH")); }*/ + } + PlayerUtils.updateSkills(main, player); } - PlayerUtils.updateSkills(main, player); - } } diff --git a/src/main/java/me/unurled/raxen/listener/player/JoinEvent.java b/src/main/java/me/unurled/raxen/listener/player/JoinEvent.java index 28ff198..e890371 100644 --- a/src/main/java/me/unurled/raxen/listener/player/JoinEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/JoinEvent.java @@ -10,36 +10,45 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scheduler.BukkitRunnable; public class JoinEvent implements Listener { - private Raxen main; - private PlayerConfig playerConfig; - private Scoreboard scoreboard; - private ResourcePack resourcePack; - private PlayerManager playerManager; + private Raxen main; + private PlayerConfig playerConfig; + private Scoreboard scoreboard; + private ResourcePack resourcePack; + private PlayerManager playerManager; - public JoinEvent(Raxen main) { - this.main = main; - this.playerConfig = main.getPlayerConfig(); - this.scoreboard = new Scoreboard(main); - this.resourcePack = - main.getManager().getResourcePackManager().getResourcePack(); - this.playerManager = main.getManager().getPlayerManager(); - } + public JoinEvent(Raxen main) { + this.main = main; + this.playerConfig = main.getPlayerConfig(); + this.scoreboard = new Scoreboard(main); + this.resourcePack = + main.getManager().getResourcePackManager().getResourcePack(); + this.playerManager = main.getManager().getPlayerManager(); + } - /** - * when player joins, load from config all stats - * @param e - */ - @EventHandler - public void PlayerJoinEvent(PlayerJoinEvent e) { - Player player = e.getPlayer(); - playerConfig.loadPlayerConfig(player); - scoreboard.createScorebord(player); - resourcePack.join(player); - playerManager.getRaxenPlayer(player).isRaxenPlayer(true); - playerManager.registerActionBar(player); - PlayerUtils.updateSkills(main, player); - } + /** + * when player joins, load from config all stats + * + * @param e + */ + @EventHandler + public void PlayerJoinEvent(PlayerJoinEvent e) { + Player player = e.getPlayer(); + playerConfig.loadPlayerConfig(player); + scoreboard.createScorebord(player); + resourcePack.join(player); + playerManager.getRaxenPlayer(player).isRaxenPlayer(true); + playerManager.registerActionBar(player); + new BukkitRunnable() { + @Override + public void run() { + main.getManager().getTutorialManager().startTutorial(player); + + } + }.runTaskLater(main, 40L); + PlayerUtils.updateSkills(main, player); + } } diff --git a/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java b/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java index ab1ec46..e2182c5 100644 --- a/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java @@ -2,7 +2,6 @@ package me.unurled.raxen.listener.player; import java.io.IOException; import me.unurled.raxen.Raxen; -import me.unurled.raxen.components.entity.player.PlayerUtils; import me.unurled.raxen.config.PlayerConfig; import me.unurled.raxen.manager.entity.PlayerManager; import org.bukkit.entity.Player; @@ -12,24 +11,25 @@ import org.bukkit.event.player.PlayerQuitEvent; public class LeaveEvent implements Listener { - private final PlayerConfig playerConfig; - private PlayerManager playerManager; + private final PlayerConfig playerConfig; + private PlayerManager playerManager; - public LeaveEvent(Raxen main) { - this.playerConfig = main.getPlayerConfig(); - this.playerManager = main.getManager().getPlayerManager(); - } + public LeaveEvent(Raxen main) { + this.playerConfig = main.getPlayerConfig(); + this.playerManager = main.getManager().getPlayerManager(); + } - /** - * when player leaves, saves everything - * @param e - * @throws IOException - */ - @EventHandler - public void PlayerLeaveEvent(PlayerQuitEvent e) throws IOException { - Player player = e.getPlayer(); - playerConfig.savePlayerConfig(player); - playerManager.getRaxenPlayer(player).isRaxenPlayer(false); - playerManager.unRegisterActionBar(player); - } + /** + * when player leaves, saves everything + * + * @param e + * @throws IOException + */ + @EventHandler + public void PlayerLeaveEvent(PlayerQuitEvent e) throws IOException { + Player player = e.getPlayer(); + playerConfig.savePlayerConfig(player); + playerManager.getRaxenPlayer(player).isRaxenPlayer(false); + playerManager.unRegisterActionBar(player); + } } diff --git a/src/main/java/me/unurled/raxen/listener/player/PortalEvent.java b/src/main/java/me/unurled/raxen/listener/player/PortalEvent.java index b58cd53..a5a12fe 100644 --- a/src/main/java/me/unurled/raxen/listener/player/PortalEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/PortalEvent.java @@ -12,16 +12,16 @@ import org.bukkit.event.entity.EntityPortalEnterEvent; public class PortalEvent implements Listener { - @EventHandler - public void PortalE(EntityPortalEnterEvent e) { - if (e.getEntity() instanceof Player) { - Player p = (Player) e.getEntity(); - Location loc = e.getLocation(); - // if loc is in range - if (isInRange(loc)) { - Gate g = whichIsInRange(loc); - //g.t - } + @EventHandler + public void PortalE(EntityPortalEnterEvent e) { + if (e.getEntity() instanceof Player) { + Player p = (Player) e.getEntity(); + Location loc = e.getLocation(); + // if loc is in range + if (isInRange(loc)) { + Gate g = whichIsInRange(loc); + //g.t + } + } } - } } diff --git a/src/main/java/me/unurled/raxen/listener/player/RespawnEvent.java b/src/main/java/me/unurled/raxen/listener/player/RespawnEvent.java index 0899488..3b193d8 100644 --- a/src/main/java/me/unurled/raxen/listener/player/RespawnEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/RespawnEvent.java @@ -12,16 +12,16 @@ import org.bukkit.event.player.PlayerRespawnEvent; public class RespawnEvent implements Listener { - @EventHandler - public void PlayerRespawnEvent(PlayerRespawnEvent e) { - Player p = e.getPlayer(); - PlayerManager pm = - ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() - .getPlayerManager(); - pm.getHealth().set(p, pm.getMaxHealth().get(p)); - msgPlayer( - p, - "You have been killed. You lost something deep in you..." - ); - } + @EventHandler + public void PlayerRespawnEvent(PlayerRespawnEvent e) { + Player p = e.getPlayer(); + PlayerManager pm = + ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() + .getPlayerManager(); + pm.getHealth().set(p, pm.getMaxHealth().get(p)); + msgPlayer( + p, + "You have been killed. You lost something deep in you..." + ); + } } diff --git a/src/main/java/me/unurled/raxen/listener/player/ServerPingEvent.java b/src/main/java/me/unurled/raxen/listener/player/ServerPingEvent.java index 46672c3..653d6c8 100644 --- a/src/main/java/me/unurled/raxen/listener/player/ServerPingEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/ServerPingEvent.java @@ -12,30 +12,30 @@ import org.bukkit.event.server.ServerListPingEvent; public class ServerPingEvent implements Listener { - private Raxen main; + private Raxen main; - @Getter - @Setter - private boolean loading = false; + @Getter + @Setter + private boolean loading = false; - public ServerPingEvent(Raxen main) { - this.main = main; - this.loading = true; - } - - /** - * set the motd - * @param e - */ - @EventHandler - public void ServerListPingEvent(ServerListPingEvent e) { - FileConfiguration config = this.main.getConfig(); - String motd = config.getString("motd"); - String motdReload = config.getString("motd-reload"); - if (loading) { - e.motd(colorTextComp(motdReload)); - } else { - e.motd(colorTextComp(motd)); + public ServerPingEvent(Raxen main) { + this.main = main; + this.loading = true; + } + + /** + * set the motd + * @param e + */ + @EventHandler + public void ServerListPingEvent(ServerListPingEvent e) { + FileConfiguration config = this.main.getConfig(); + String motd = config.getString("motd"); + String motdReload = config.getString("motd-reload"); + if (loading) { + e.motd(colorTextComp(motdReload)); + } else { + e.motd(colorTextComp(motd)); + } } - } } diff --git a/src/main/java/me/unurled/raxen/listener/player/SpellsEvent.java b/src/main/java/me/unurled/raxen/listener/player/SpellsEvent.java new file mode 100644 index 0000000..a9bc858 --- /dev/null +++ b/src/main/java/me/unurled/raxen/listener/player/SpellsEvent.java @@ -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) 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); + } + } + +} diff --git a/src/main/java/me/unurled/raxen/listener/player/TransactionEvent.java b/src/main/java/me/unurled/raxen/listener/player/TransactionEvent.java index 3081e41..f3bedac 100644 --- a/src/main/java/me/unurled/raxen/listener/player/TransactionEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/TransactionEvent.java @@ -10,25 +10,25 @@ import org.bukkit.event.Listener; public class TransactionEvent implements Listener { - private Raxen main; - private Scoreboard scoreboard; - private Vault vault; + private Raxen main; + private Scoreboard scoreboard; + private Vault vault; - public TransactionEvent(Raxen main) { - this.main = main; - this.scoreboard = new Scoreboard(main); - this.vault = main.getManager().getLibsManager().getVault(); - } + public TransactionEvent(Raxen main) { + this.main = main; + this.scoreboard = new Scoreboard(main); + this.vault = main.getManager().getLibsManager().getVault(); + } - /** - * set scoreboard when money changes - * @param e - */ - @EventHandler - public void transaction(net.essentialsx.api.v2.events.TransactionEvent e) { - Player player = Bukkit.getPlayer(e.getTarget().getName()); - Player source = e.getRequester().getPlayer(); - scoreboard.updateScoreboardTransaction(player); - scoreboard.updateScoreboardTransaction(source); - } + /** + * set scoreboard when money changes + * @param e + */ + @EventHandler + public void transaction(net.essentialsx.api.v2.events.TransactionEvent e) { + Player player = Bukkit.getPlayer(e.getTarget().getName()); + Player source = e.getRequester().getPlayer(); + scoreboard.updateScoreboardTransaction(player); + scoreboard.updateScoreboardTransaction(source); + } } diff --git a/src/main/java/me/unurled/raxen/manager/Manager.java b/src/main/java/me/unurled/raxen/manager/Manager.java index 32240c0..74e2942 100644 --- a/src/main/java/me/unurled/raxen/manager/Manager.java +++ b/src/main/java/me/unurled/raxen/manager/Manager.java @@ -2,70 +2,105 @@ package me.unurled.raxen.manager; import lombok.Getter; import me.unurled.raxen.Raxen; -import me.unurled.raxen.manager.entity.*; -import me.unurled.raxen.manager.server.*; +import me.unurled.raxen.manager.entity.EntityManager; +import me.unurled.raxen.manager.entity.ItemManager; +import me.unurled.raxen.manager.entity.LootManager; +import me.unurled.raxen.manager.entity.PartyManager; +import me.unurled.raxen.manager.entity.PlayerManager; +import me.unurled.raxen.manager.entity.SpellManager; +import me.unurled.raxen.manager.entity.StorageManager; +import me.unurled.raxen.manager.server.BuildManager; +import me.unurled.raxen.manager.server.CommandManager; +import me.unurled.raxen.manager.server.DungeonsManager; +import me.unurled.raxen.manager.server.GlyphManager; +import me.unurled.raxen.manager.server.LibsManager; +import me.unurled.raxen.manager.server.ListenerManager; +import me.unurled.raxen.manager.server.ResourcePackManager; +import me.unurled.raxen.manager.server.TutorialManager; +import me.unurled.raxen.manager.server.WorldManager; import me.unurled.raxen.utils.libs.Multiverse; /** - * Manager class, it enables all features of the plugin. - * From commands, to Item and worlds, it links all of them together. + * Manager class, it enables all features of the plugin. From commands, to Item and worlds, it links + * all of them together. */ public class Manager { - @Getter - private WorldManager worldManager; + @Getter + private WorldManager worldManager; - @Getter - private StorageManager storageManager; + @Getter + private StorageManager storageManager; - @Getter - private PlayerManager playerManager; + @Getter + private PlayerManager playerManager; - @Getter - private ListenerManager listenerManager; + @Getter + private ListenerManager listenerManager; - @Getter - private CommandManager commandManager; + @Getter + private CommandManager commandManager; - @Getter - private ItemManager itemManager; + @Getter + private ItemManager itemManager; - @Getter - private ResourcePackManager resourcePackManager; + @Getter + private ResourcePackManager resourcePackManager; - @Getter - private EntityManager entityManager; + @Getter + private EntityManager entityManager; - @Getter - private LootManager lootManager; + @Getter + private LootManager lootManager; - @Getter - private LibsManager libsManager; + @Getter + private LibsManager libsManager; - @Getter - private DungeonsManager dungeonsManager; + @Getter + private DungeonsManager dungeonsManager; - @Getter - private Multiverse multiverse; + @Getter + private Multiverse multiverse; - /** - * Create an instance of all managers. - * @param main Raxen - */ - public void set(Raxen main) { - libsManager = new LibsManager(main); - multiverse = new Multiverse(); + @Getter + private TutorialManager tutorialManager; - worldManager = new WorldManager(main); - storageManager = new StorageManager(main); + @Getter + private PartyManager partyManager; - itemManager = new ItemManager(main); - playerManager = new PlayerManager(main); - listenerManager = new ListenerManager(main); - commandManager = new CommandManager(main); - resourcePackManager = new ResourcePackManager(main); - entityManager = new EntityManager(main); - lootManager = new LootManager(main); - dungeonsManager = new DungeonsManager(main); - } + @Getter + private SpellManager spellManager; + + @Getter + private GlyphManager glyphManager; + + @Getter + private BuildManager buildManager; + + /** + * Create an instance of all managers. + * + * @param main Raxen + */ + public void set(Raxen main) { + libsManager = new LibsManager(main); + multiverse = new Multiverse(); + + worldManager = new WorldManager(main); + storageManager = new StorageManager(main); + + itemManager = new ItemManager(main); + playerManager = new PlayerManager(main); + listenerManager = new ListenerManager(main); + commandManager = new CommandManager(main); + resourcePackManager = new ResourcePackManager(main); + entityManager = new EntityManager(main); + lootManager = new LootManager(main); + dungeonsManager = new DungeonsManager(main); + tutorialManager = new TutorialManager(); + partyManager = new PartyManager(main); + spellManager = new SpellManager(main); + glyphManager = new GlyphManager(main); + buildManager = new BuildManager(main); + } } diff --git a/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java b/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java index cd36ac5..f667a75 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java @@ -2,46 +2,237 @@ package me.unurled.raxen.manager.entity; import static me.unurled.raxen.utils.Utils.debug; +import eu.decentsoftware.holograms.api.DHAPI; +import eu.decentsoftware.holograms.api.holograms.Hologram; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.UUID; import lombok.Getter; import lombok.Setter; import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.entity.Attributes.Defense; +import me.unurled.raxen.components.entity.Attributes.Health; +import me.unurled.raxen.components.entity.Attributes.ItemDefense; +import me.unurled.raxen.components.entity.Attributes.ItemHealth; +import me.unurled.raxen.components.entity.Attributes.ItemLuck; +import me.unurled.raxen.components.entity.Attributes.ItemMana; +import me.unurled.raxen.components.entity.Attributes.ItemSpeed; +import me.unurled.raxen.components.entity.Attributes.ItemStrength; +import me.unurled.raxen.components.entity.Attributes.Luck; +import me.unurled.raxen.components.entity.Attributes.Mana; +import me.unurled.raxen.components.entity.Attributes.MaxHealth; +import me.unurled.raxen.components.entity.Attributes.MaxMana; +import me.unurled.raxen.components.entity.Attributes.MaxManaBuilder; +import me.unurled.raxen.components.entity.Attributes.Speed; +import me.unurled.raxen.components.entity.Attributes.Strength; +import me.unurled.raxen.components.entity.other.EntityNamespacedKey; +import me.unurled.raxen.components.entity.other.MobData; +import me.unurled.raxen.components.entity.other.MobType; +import me.unurled.raxen.components.entity.other.RaxenEntity; +import me.unurled.raxen.utils.Tags; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; public class EntityManager { - private Raxen main; + private Raxen main; - @Getter - @Setter - public List list = new ArrayList<>(); + @Getter + @Setter + private List list = new ArrayList<>(); - public HashMap entities = - new HashMap<>(); + @Getter + private HashMap mobTypes; + @Getter + private final HashMap spawnedMob; + @Getter + private HashMap spawnedMobsOnlyMain; - public HashMap livingEntities = new HashMap<>(); + @Getter + private final HashMap attribute; - public EntityManager(Raxen main) { - this.main = main; - } + private final HashMap entities; - public void registerLivingEntities(World world) {} - /** - * used to register entities using fileconfigs but rapidly abandoned - * @param file - */ - @Deprecated - public void registerEntityFromConfig(FileConfiguration file) { - debug(file.getString("id")); - World world = Bukkit.getWorld(file.getString("world")); - String name = file.getString("name"); - } + private final HashMap livingEntities = new HashMap<>(); + private HashMap nameTags; + + public EntityManager(Raxen main) { + this.main = main; + entities = new HashMap<>(); + attribute = new HashMap<>(); + mobTypes = new HashMap<>(); + spawnedMob = new HashMap<>(); + spawnedMobsOnlyMain = new HashMap<>(); + nameTags = new HashMap<>(); + reload(); + registerAttributes(); + } + + public void reload() { + Collection collection = new ArrayList<>(); + collection.addAll(spawnedMob.values()); + for (MobData mobData : collection) { +// mobData.entity.die(false); + } + } + + public void registerLivingEntities(World world) { + } + + public void registerEntity(Entity entity) { + /* RaxenEntity raxenEntity = new RaxenEntity(); + raxenEntity.register(entity); + entities.put(entity.getUniqueId(), raxenEntity); */ + } + + public void setNameTag(Entity entity) { + Hologram holo = Tags.createNameTag(main, entity); + if (holo == null) { + return; + } + BukkitTask run = new BukkitRunnable() { + @Override + public void run() { + DHAPI.moveHologram(holo, entity.getLocation()); + } + }.runTaskAsynchronously(main); + nameTags.put(entity.getUniqueId(), run); + } + + /** + * used to register entities using fileconfigs but rapidly abandoned + * + * @param file + */ + @Deprecated + public void registerEntityFromConfig(FileConfiguration file) { + debug(file.getString("id")); + World world = Bukkit.getWorld(file.getString("world")); + String name = file.getString("name"); + } + + public RaxenEntity getEntity(UUID uuid) { + return null; + } + + public RaxenEntity getEntity(Entity entity) { + return entities.get(entity.getUniqueId()); + } + + /** + * register all Attributes in me.unurled.raxen.components.entity.Attributes; + */ + public void registerAttributes() { + EntityNamespacedKey key = new EntityNamespacedKey(main); + + // Attributes + Defense defense = new Defense(key.defense, "DEFENSE"); + attribute.put("DEFENSE", defense); + + Health health = new Health(key.health, "HEALTH"); + attribute.put("HEALTH", health); + + ItemDefense itemDefense = new ItemDefense(key.itemDefense, "ITEM_DEFENSE"); + attribute.put("ITEM_DEFENSE", itemDefense); + + ItemHealth itemHealth = new ItemHealth(key.itemHealth, "ITEM_HEALTH"); + attribute.put("ITEM_HEALTH", itemHealth); + + ItemLuck itemLuck = new ItemLuck(key.itemLuck, "ITEM_LUCK"); + attribute.put("ITEM_LUCK", itemLuck); + + ItemMana itemMana = new ItemMana(key.itemMana, "ITEM_MANA"); + attribute.put("ITEM_MANA", itemMana); + + ItemSpeed itemSpeed = new ItemSpeed(key.itemSpeed, "ITEM_SPEED"); + attribute.put("ITEM_SPEED", itemSpeed); + + ItemStrength itemStrength = new ItemStrength(key.itemStrength, "ITEM_STRENGTH"); + attribute.put("ITEM_STRENGTH", itemStrength); + + Luck luck = new Luck(key.luck, "LUCK"); + attribute.put("LUCK", luck); + + Mana mana = new Mana(key.mana, "MANA"); + attribute.put("MANA", mana); + + MaxMana maxMana = new MaxManaBuilder() + .setNamespacekey(key.maxMana) + .setName("MAX_MANA") + .createMaxMana(); + attribute.put("MAX_MANA", maxMana); + + MaxHealth maxHealth = new MaxHealth(key.maxHealth, "MAX_HEALTH"); + attribute.put("MAX_HEALTH", maxHealth); + + Speed speed = new Speed(key.speed, "SPEED"); + attribute.put("SPEED", speed); + + Strength strength = new Strength(key.strength, "STRENGTH"); + attribute.put("STRENGTH", strength); + } + + public Defense getDefense() { + return (Defense) attribute.get("DEFENSE"); + } + + public Health getHealth() { + return (Health) attribute.get("HEALTH"); + } + + public ItemDefense getItemDefense() { + return (ItemDefense) attribute.get("ITEM_DEFENSE"); + } + + public ItemHealth getItemHealth() { + return (ItemHealth) attribute.get("ITEM_HEALTH"); + } + + public ItemLuck getItemLuck() { + return (ItemLuck) attribute.get("ITEM_LUCK"); + } + + public ItemMana getItemMana() { + return (ItemMana) attribute.get("ITEM_MANA"); + } + + public ItemSpeed getItemSpeed() { + return (ItemSpeed) attribute.get("ITEM_SPEED"); + } + + public ItemStrength getItemStrength() { + return (ItemStrength) attribute.get("ITEM_STRENGTH"); + } + + public Luck getLuck() { + return (Luck) attribute.get("LUCK"); + } + + public Mana getMana() { + return (Mana) attribute.get("MANA"); + } + + public MaxMana getMaxMana() { + return (MaxMana) attribute.get("MAX_MANA"); + } + + public MaxHealth getMaxHealth() { + return (MaxHealth) attribute.get("MAX_HEALTH"); + } + + public Speed getSpeed() { + return (Speed) attribute.get("SPEED"); + } + + public Strength getStrength() { + return (Strength) attribute.get("STRENGTH"); + } } diff --git a/src/main/java/me/unurled/raxen/manager/entity/ItemManager.java b/src/main/java/me/unurled/raxen/manager/entity/ItemManager.java index 07eb1dd..674c6f9 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/ItemManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/ItemManager.java @@ -1,6 +1,8 @@ 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 java.io.File; @@ -8,13 +10,14 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; -import java.util.stream.Collectors; import lombok.Getter; 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.utils.Utils; +import me.unurled.raxen.config.ItemConfig; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import org.bukkit.Bukkit; @@ -28,120 +31,142 @@ import org.jetbrains.annotations.NotNull; public class ItemManager { - private final Raxen main; + private final Raxen main; - @Getter - private HashMap list = new HashMap<>(); + @Getter + private HashMap list = new HashMap<>(); - private NBT nbt = new NBT(); + private NBTNames nbt = new NBTNames(); + private ItemConfig itemConfig; + private String[] items; + private Map> map; - public ItemManager(Raxen main) { - this.main = main; - // register(); - registerItem(); - } - - /** - * register manually all item in Raxen - */ - private void registerItem() { - me.unurled.raxen.components.items.custom.List lisst = - new me.unurled.raxen.components.items.custom.List(main); - for (Item items : lisst.getItems()) { - registerItem(items.getItem()); + public ItemManager(Raxen main) { + this.main = main; + // register(); + registerItem(); } - } - /** - * Old system to register all items in the /items/ folder - */ - @Deprecated - private void register() { - File folder = new File(main.getDataFolder() + "/Items/"); - File[] listFile = folder.listFiles(); - - for (int i = 0; i < listFile.length; i++) { - if (listFile[i].isFile()) { - FileConfiguration customItem = new YamlConfiguration(); - try { - customItem.load(listFile[i]); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); + /** + * register manually all item in Raxen + */ + private void registerItem() { + itemConfig = new ItemConfig(main); + map = itemConfig.parseItemConfigs(); + final List itemsList = new ArrayList<>(); + for (final Map subMap : map.values()) { + itemsList.addAll(subMap.keySet()); } - registerItem(customItem); - } else if (listFile[i].isDirectory()) { - for (int a = 0; a < listFile[i].listFiles().length; a++) { - if (listFile[i].listFiles()[a].isFile()) { - FileConfiguration customItem = new YamlConfiguration(); - try { - customItem.load(listFile[i].listFiles()[a]); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); + items = itemsList.toArray(new String[0]); + me.unurled.raxen.components.items.custom.List lisst = + new me.unurled.raxen.components.items.custom.List(main); + for (Item items : lisst.getItems()) { + registerItem(items.getItem()); + } + } + + /** + * Old system to register all items in the /items/ folder + */ + @Deprecated + private void register() { + File folder = new File(main.getDataFolder() + "/Items/"); + File[] listFile = folder.listFiles(); + + for (int i = 0; i < listFile.length; i++) { + if (listFile[i].isFile()) { + FileConfiguration customItem = new YamlConfiguration(); + try { + customItem.load(listFile[i]); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + registerItem(customItem); + } else if (listFile[i].isDirectory()) { + for (int a = 0; a < listFile[i].listFiles().length; a++) { + if (listFile[i].listFiles()[a].isFile()) { + FileConfiguration customItem = new YamlConfiguration(); + try { + customItem.load(listFile[i].listFiles()[a]); + } catch ( + IOException | InvalidConfigurationException e + ) { + e.printStackTrace(); + } + registerItem(customItem); + } else if (listFile[i].listFiles()[a].isDirectory()) { + error( + (Raxen) Bukkit + .getPluginManager() + .getPlugin("Raxen"), + "Can't use more than 2 folder to get Items.yml" + ); + } + } } - registerItem(customItem); - } else if (listFile[i].listFiles()[a].isDirectory()) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "Can't use more than 2 folder to get Items.yml" - ); - } } - } } - } - /** - * Old system to register for a file config an item inside. - * @param file - */ - @Deprecated - private void registerItem(@NotNull FileConfiguration file) { - debug(main, file.getString("id")); - ItemStack it = new ItemStack( - Objects.requireNonNull( - Material.getMaterial((String) Objects.requireNonNull(file.get("id"))) - ) - ); - ItemMeta itm = it.getItemMeta(); - itm.displayName(colorTextComp((String) file.get("name"))); - Object lore_obj = file.get("lore"); - if (lore_obj instanceof List lore) { - List lores = new ArrayList<>(); - for (Object s : lore) { - if (s == null) continue; - if (s instanceof String) { - TextComponent textComponent = colorTextComp((String) s); - lores.add(textComponent); + /** + * Old system to register for a file config an item inside. + * + * @param file + */ + @Deprecated + private void registerItem(@NotNull FileConfiguration file) { + debug(main, file.getString("id")); + ItemStack it = new ItemStack( + Objects.requireNonNull( + Material.getMaterial( + (String) Objects.requireNonNull(file.get("id")) + ) + ) + ); + ItemMeta itm = it.getItemMeta(); + itm.displayName(colorTextComp((String) file.get("name"))); + Object lore_obj = file.get("lore"); + if (lore_obj instanceof List lore) { + List lores = new ArrayList<>(); + for (Object s : lore) { + if (s == null) { + continue; + } + if (s instanceof String) { + TextComponent textComponent = colorTextComp((String) s); + lores.add(textComponent); + } + } + itm.lore(lores); } - } - itm.lore(lores); + itm.setCustomModelData( + Objects + .requireNonNull(file.getConfigurationSection("Pack")) + .getInt("custom_model_data") + ); + it.setItemMeta(itm); + NBTItem nbti = new NBTItem(it); + nbti.setInteger(NBTNames.SPEED, file.getInt("speed")); + nbti.setInteger(NBTNames.HEALTH, file.getInt("health")); + nbti.setInteger(NBTNames.DEFENSE, file.getInt("defense")); + nbti.setInteger(NBTNames.STRENGTH, file.getInt("strength")); + nbti.setString(NBTNames.ID, file.getString("customId")); + nbti.setString( + NBTNames.CUSTOM_ABILITY, + file.getString("custom_ability") + ); + nbti.setDouble(NBTNames.DROP_RATE, file.getDouble("drop_rate")); + it = nbti.getItem(); + //it = setLoreFromNBT(it); deprecated + list.put(file.getString("customId"), it); } - itm.setCustomModelData( - Objects - .requireNonNull(file.getConfigurationSection("Pack")) - .getInt("custom_model_data") - ); - it.setItemMeta(itm); - NBTItem nbti = new NBTItem(it); - nbti.setInteger(NBT.SPEED, file.getInt("speed")); - nbti.setInteger(NBT.HEALTH, file.getInt("health")); - nbti.setInteger(NBT.DEFENSE, file.getInt("defense")); - nbti.setInteger(NBT.STRENGTH, file.getInt("strength")); - nbti.setString(NBT.ID, file.getString("customId")); - nbti.setString(NBT.CUSTOM_ABILITY, file.getString("custom_ability")); - nbti.setDouble(NBT.DROP_RATE, file.getDouble("drop_rate")); - it = nbti.getItem(); - //it = setLoreFromNBT(it); deprecated - list.put(file.getString("customId"), it); - } - /** - * register Item into the custom item list - * Need that the Itm is already set with custom nbt! - * @param itm an ItemStack with already set custom nbt using NBTapi - */ - public void registerItem(ItemStack itm) { - NBTItem it = new NBTItem(itm); - list.put(it.getString("ID"), itm); - } + /** + * register Item into the custom item list Need that the Itm is already set with custom nbt! + * + * @param itm an ItemStack with already set custom nbt using NBTapi + */ + public void registerItem(ItemStack itm) { + NBTItem it = new NBTItem(itm); + list.put(it.getString("ID"), itm); + } } diff --git a/src/main/java/me/unurled/raxen/manager/entity/LootManager.java b/src/main/java/me/unurled/raxen/manager/entity/LootManager.java index 919d573..2082a0e 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/LootManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/LootManager.java @@ -7,12 +7,12 @@ import me.unurled.raxen.components.lootchest.loots.LootItem; public class LootManager { - private Raxen main; + private Raxen main; - @Getter - private List lootTable; + @Getter + private List lootTable; - public LootManager(Raxen main) { - this.main = main; - } + public LootManager(Raxen main) { + this.main = main; + } } diff --git a/src/main/java/me/unurled/raxen/manager/entity/PartyManager.java b/src/main/java/me/unurled/raxen/manager/entity/PartyManager.java new file mode 100644 index 0000000..19aa904 --- /dev/null +++ b/src/main/java/me/unurled/raxen/manager/entity/PartyManager.java @@ -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("[Party] "); + public static final Component PREFIX_SYSTEM = Utils.colorComp( + "[Party] "); + + @Getter + private ArrayList parties; + + public PartyManager(Raxen main) { + this.main = main; + } + + public void initialize() { + parties = new ArrayList(); + 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( + "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( + "You have created a party!"))); + } + } +} diff --git a/src/main/java/me/unurled/raxen/manager/entity/PlayerManager.java b/src/main/java/me/unurled/raxen/manager/entity/PlayerManager.java index 126cd40..5e75365 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/PlayerManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/PlayerManager.java @@ -1,237 +1,275 @@ 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.UUID; import lombok.Getter; 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.player.RaxenPlayer; import me.unurled.raxen.components.entity.player.classes.Class; import me.unurled.raxen.components.entity.player.classes.Classes; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; public class PlayerManager { - private final Raxen main; - private final HashMap actionBar = new HashMap<>(); - // TODO: player classes - private final HashMap classes = new HashMap<>(); + private final Raxen main; + private final HashMap actionBar = new HashMap<>(); + // TODO: player classes + private final HashMap classes = new HashMap<>(); - @Getter - private final HashMap attribute = - new HashMap<>(); + @Getter + private final HashMap attribute = + new HashMap<>(); - private Classes classesRegister; + private HashMap raxenPlayer = 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; + private Classes classesRegister; - public PlayerManager(Raxen main) { - this.main = main; - registerAttributes(); - } + // 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 RaxenPlayer getRaxenPlayer(Player player) { - return new RaxenPlayer(main, player); - } - - /** - * add a task to the player action bar. - * @param player - */ - public void registerActionBar(Player player) { - PlayerManager pm = main.getManager().getPlayerManager(); - BukkitTask task = new BukkitRunnable() { - @Override - public void run() { - player.sendActionBar( - colorComp( - "" + - pm.getHealth().get(player) + - "/" + - pm.getMaxHealth().get(player) + - "❤ " + - pm.getMana().get(player) + - "/" + - pm.getMaxMana().get(player) + - "" - ) - ); - } + public PlayerManager(Raxen main) { + this.main = main; + registerAttributes(); } - .runTaskTimerAsynchronously(main, 10, 20); - if (actionBar.containsKey(player.getUniqueId())) { - actionBar.replace(player.getUniqueId(), task); - } else { - actionBar.put(player.getUniqueId(), task); + + public RaxenPlayer getRaxenPlayer(Player player) { + RaxenPlayer p = raxenPlayer.get(player.getUniqueId()); + return p != null ? p : addRaxenPlayer(player); } - } - /** - * removes the task of action bar to player - * @param player - */ - public void unRegisterActionBar(Player player) { - if (actionBar.containsKey(player.getUniqueId())) { - BukkitTask task = actionBar.get(player.getUniqueId()); - task.cancel(); - actionBar.remove(player.getUniqueId()); - } else { - debug( - colorTextComp( - "Player " + - player.getName() + - " didn't have any Action Bar" + - player.getUniqueId().toString() + - "" - ) - ); + public RaxenPlayer getRaxenPlayer(UUID uuid) { + RaxenPlayer p = raxenPlayer.get(uuid); + return p != null ? p : addRaxenPlayer(uuid); } - } - public void unRegisterRaxenPlayer(Player player) {} + public RaxenPlayer addRaxenPlayer(Player player) { + RaxenPlayer rp = new RaxenPlayer(main, player); + raxenPlayer.put(player.getUniqueId(), rp); + return rp; + } - /** - * getClasses - * @return the classes HashMap - */ - public HashMap getClasses() { - return classes; - } + public RaxenPlayer addRaxenPlayer(UUID uuid) { + RaxenPlayer rp = new RaxenPlayer(main, Bukkit.getPlayer(uuid)); + raxenPlayer.put(uuid, rp); + return rp; + } - /** - * add @param to hashmap of classes - * @param clas a class instance - * @param id the id of the class - */ - public void addClasses(Class clas, String id) { - classes.put(id, clas); - } + /** + * add a task to the player action bar. + * + * @param player + */ + public void registerActionBar(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); + } + } - /** - * register all Attributes in me.unurled.raxen.components.entity.Attributes; - */ - public void registerAttributes() { - EntityNamespacedKey key = new EntityNamespacedKey(main); + /** + * removes the task of action bar to player + * + * @param player + */ + public void unRegisterActionBar(Player player) { + if (actionBar.containsKey(player.getUniqueId())) { + BukkitTask task = actionBar.get(player.getUniqueId()); + task.cancel(); + actionBar.remove(player.getUniqueId()); + } else { + debug( + colorTextComp( + "Player " + + player.getName() + + " didn't have any Action Bar" + + player.getUniqueId().toString() + + "" + ) + ); + } + } - this.defense = new Defense(key.defense, "DEFENSE"); - attribute.put("DEFENSE", defense); + /** + * 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); + } + } - this.health = new Health(key.health, "HEALTH"); - attribute.put("HEALTH", health); + public void unRegisterRaxenPlayer(Player player) { + } - this.itemDefense = new ItemDefense(key.itemDefense, "ITEM_DEFENSE"); - attribute.put("ITEM_DEFENSE", itemDefense); + /** + * getClasses + * + * @return the classes HashMap + */ + public HashMap getClasses() { + return classes; + } - this.itemHealth = new ItemHealth(key.itemHealth, "ITEM_HEALTH"); - attribute.put("ITEM_HEALTH", itemHealth); + /** + * add @param to hashmap of classes + * + * @param clas a class instance + * @param id the id of the class + */ + public void addClasses(Class clas, String id) { + classes.put(id, clas); + } - this.itemLuck = new ItemLuck(key.itemLuck, "ITEM_LUCK"); - attribute.put("ITEM_LUCK", itemLuck); + /** + * register all Attributes in me.unurled.raxen.components.entity.Attributes; + */ + public void registerAttributes() { + EntityNamespacedKey key = new EntityNamespacedKey(main); - this.itemMana = new ItemMana(key.itemMana, "ITEM_MANA"); - attribute.put("ITEM_MANA", itemMana); + this.defense = new Defense(key.defense, "DEFENSE"); + attribute.put("DEFENSE", defense); - this.itemSpeed = new ItemSpeed(key.itemSpeed, "ITEM_SPEED"); - attribute.put("ITEM_SPEED", itemSpeed); + this.health = new Health(key.health, "HEALTH"); + attribute.put("HEALTH", health); - this.itemStrength = new ItemStrength(key.itemStrength, "ITEM_STRENGTH"); - attribute.put("ITEM_STRENGTH", itemStrength); + this.itemDefense = new ItemDefense(key.itemDefense, "ITEM_DEFENSE"); + attribute.put("ITEM_DEFENSE", itemDefense); - this.luck = new Luck(key.luck, "LUCK"); - attribute.put("LUCK", luck); + this.itemHealth = new ItemHealth(key.itemHealth, "ITEM_HEALTH"); + attribute.put("ITEM_HEALTH", itemHealth); - this.mana = new Mana(key.mana, "MANA"); - attribute.put("MANA", mana); + this.itemLuck = new ItemLuck(key.itemLuck, "ITEM_LUCK"); + attribute.put("ITEM_LUCK", itemLuck); - this.maxMana = - new MaxManaBuilder() - .setNamespacekey(key.maxMana) - .setName("MAX_MANA") - .createMaxMana(); - attribute.put("MAX_MANA", maxMana); + this.itemMana = new ItemMana(key.itemMana, "ITEM_MANA"); + attribute.put("ITEM_MANA", itemMana); - this.maxHealth = new MaxHealth(key.maxHealth, "MAX_HEALTH"); - attribute.put("MAX_HEALTH", maxHealth); + this.itemSpeed = new ItemSpeed(key.itemSpeed, "ITEM_SPEED"); + attribute.put("ITEM_SPEED", itemSpeed); - this.speed = new Speed(key.speed, "SPEED"); - attribute.put("SPEED", speed); + this.itemStrength = new ItemStrength(key.itemStrength, "ITEM_STRENGTH"); + attribute.put("ITEM_STRENGTH", itemStrength); - this.strength = new Strength(key.strength, "STRENGTH"); - attribute.put("STRENGTH", strength); - } + this.luck = new Luck(key.luck, "LUCK"); + attribute.put("LUCK", luck); - public Defense getDefense() { - return (Defense) attribute.get("DEFENSE"); - } + this.mana = new Mana(key.mana, "MANA"); + attribute.put("MANA", mana); - public Health getHealth() { - return (Health) attribute.get("HEALTH"); - } + this.maxMana = + new MaxManaBuilder() + .setNamespacekey(key.maxMana) + .setName("MAX_MANA") + .createMaxMana(); + attribute.put("MAX_MANA", maxMana); - public ItemDefense getItemDefense() { - return (ItemDefense) attribute.get("ITEM_DEFENSE"); - } + this.maxHealth = new MaxHealth(key.maxHealth, "MAX_HEALTH"); + attribute.put("MAX_HEALTH", maxHealth); - public ItemHealth getItemHealth() { - return (ItemHealth) attribute.get("ITEM_HEALTH"); - } + this.speed = new Speed(key.speed, "SPEED"); + attribute.put("SPEED", speed); - public ItemLuck getItemLuck() { - return (ItemLuck) attribute.get("ITEM_LUCK"); - } + this.strength = new Strength(key.strength, "STRENGTH"); + attribute.put("STRENGTH", strength); + } - public ItemMana getItemMana() { - return (ItemMana) attribute.get("ITEM_MANA"); - } + public Defense getDefense() { + return (Defense) attribute.get("DEFENSE"); + } - public ItemSpeed getItemSpeed() { - return (ItemSpeed) attribute.get("ITEM_SPEED"); - } + public Health getHealth() { + return (Health) attribute.get("HEALTH"); + } - public ItemStrength getItemStrength() { - return (ItemStrength) attribute.get("ITEM_STRENGTH"); - } + public ItemDefense getItemDefense() { + return (ItemDefense) attribute.get("ITEM_DEFENSE"); + } - public Luck getLuck() { - return (Luck) attribute.get("LUCK"); - } + public ItemHealth getItemHealth() { + return (ItemHealth) attribute.get("ITEM_HEALTH"); + } - public Mana getMana() { - return (Mana) attribute.get("MANA"); - } + public ItemLuck getItemLuck() { + return (ItemLuck) attribute.get("ITEM_LUCK"); + } - public MaxMana getMaxMana() { - return (MaxMana) attribute.get("MAX_MANA"); - } + public ItemMana getItemMana() { + return (ItemMana) attribute.get("ITEM_MANA"); + } - public MaxHealth getMaxHealth() { - return (MaxHealth) attribute.get("MAX_HEALTH"); - } + public ItemSpeed getItemSpeed() { + return (ItemSpeed) attribute.get("ITEM_SPEED"); + } - public Speed getSpeed() { - return (Speed) attribute.get("SPEED"); - } + public ItemStrength getItemStrength() { + return (ItemStrength) attribute.get("ITEM_STRENGTH"); + } - public Strength getStrength() { - return (Strength) attribute.get("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"); + } } diff --git a/src/main/java/me/unurled/raxen/manager/entity/SpellManager.java b/src/main/java/me/unurled/raxen/manager/entity/SpellManager.java new file mode 100644 index 0000000..0085bcd --- /dev/null +++ b/src/main/java/me/unurled/raxen/manager/entity/SpellManager.java @@ -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 casters = new HashMap<>(); + public HashMap 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) { + + } + } + } +} diff --git a/src/main/java/me/unurled/raxen/manager/entity/StorageManager.java b/src/main/java/me/unurled/raxen/manager/entity/StorageManager.java index 5a858e2..5e96a4a 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/StorageManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/StorageManager.java @@ -18,162 +18,162 @@ import org.jetbrains.annotations.NotNull; public class StorageManager { - private static Raxen main; + private static Raxen main; - @Getter - private static FileConfiguration config; + @Getter + private static FileConfiguration config; - @Getter - private static MongoDB mongodb; + @Getter + private static MongoDB mongodb; - @Getter - private static Mysql mysql; + @Getter + private static Mysql mysql; - public StorageManager(Raxen main) { - this.main = main; - this.config = main.getConfig(); - this.connect(); - } - - /** - * Connects to the storage system (MONGO, YML, MYSQL (not implemented)) - */ - public static void connect() { - String s = (String) config.get("storage"); - debug(main, s); - mongodb = main.getManager().getLibsManager().getMongoDB(); - if (s.equalsIgnoreCase("MONGODB")) { - mongodb.connect(); - debug(main, "'" + s + "'"); - } else if (s.equalsIgnoreCase("MYSQL")) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "Currently not implemented, switching to YML" - ); - debug(main, "'" + s + "'"); - } else { - debug(main, "'" + s + "'"); - } - } - - /** - * disconnect mysql db - */ - public static void disconnect() { - mysql.disconnect(); - } - - /** - * create a new yml for the player - * @param player - * @return the created yml - */ - public static @NotNull FileConfiguration createYml(@NotNull Player player) { - File customFile; - FileConfiguration customConfig; - customFile = - new File( - main.getDataFolder() + "/playerInfo/" + player.getUniqueId(), - "/playerInfo.yml" - ); - - if (!customFile.exists()) { - customFile.getParentFile().mkdirs(); - try { - customFile.createNewFile(); - } catch (IOException e) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "Error in Storage Manager saving new File." - ); - e.printStackTrace(); - } + public StorageManager(Raxen main) { + this.main = main; + this.config = main.getConfig(); + this.connect(); } - customConfig = new YamlConfiguration(); - try { - customConfig.load(customFile); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); + /** + * Connects to the storage system (MONGO, YML, MYSQL (not implemented)) + */ + public static void connect() { + String s = (String) config.get("storage"); + debug(main, s); + mongodb = main.getManager().getLibsManager().getMongoDB(); + if (s.equalsIgnoreCase("MONGODB")) { + mongodb.connect(); + debug(main, "'" + s + "'"); + } else if (s.equalsIgnoreCase("MYSQL")) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "Currently not implemented, switching to YML" + ); + debug(main, "'" + s + "'"); + } else { + debug(main, "'" + s + "'"); + } } - if (customConfig.get("uuid") == null) { - customConfig.set("uuid", player.getUniqueId().toString()); - customConfig.set("name", player.getName()); - customConfig.set("health", 100); - customConfig.set("itemHealth", 0); - customConfig.set("defense", 50); - customConfig.set("itemDefense", 0); - customConfig.set("speed", 100); - customConfig.set("itemSpeed", 0); - customConfig.set("strength", 100); - customConfig.set("itemDmg", 0); - customConfig.set("inv", ""); - customConfig.set("ec", ""); - try { - customConfig.save(customFile); - } catch (IOException e) { - e.printStackTrace(); - } - } - return customConfig; - } - /** - * create a config yaml with the file - * @param file - * @return a file configuration - */ - public static @NotNull FileConfiguration createYml(@NotNull File file) { - FileConfiguration customConfig; + /** + * disconnect mysql db + */ + public static void disconnect() { + mysql.disconnect(); + } - if (!file.exists()) { - file.getParentFile().mkdirs(); - try { - file.createNewFile(); - } catch (IOException e) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "Error in Storage Manager saving new File." - ); - e.printStackTrace(); - } - } - customConfig = new YamlConfiguration(); - try { - customConfig.load(file); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); - } - return customConfig; - } + /** + * create a new yml for the player + * @param player + * @return the created yml + */ + public static @NotNull FileConfiguration createYml(@NotNull Player player) { + File customFile; + FileConfiguration customConfig; + customFile = + new File( + main.getDataFolder() + "/playerInfo/" + player.getUniqueId(), + "/playerInfo.yml" + ); - /** - * create a config in the path provided - * @param path - * @return the created config file - */ - public static @NotNull FileConfiguration createYml(String path) { - File customFile; - FileConfiguration customConfig; - customFile = new File(path); - if (!customFile.exists()) { - customFile.getParentFile().mkdirs(); - try { - customFile.createNewFile(); - } catch (IOException e) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "Error in Storage Manager saving new File." - ); - e.printStackTrace(); - } + if (!customFile.exists()) { + customFile.getParentFile().mkdirs(); + try { + customFile.createNewFile(); + } catch (IOException e) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "Error in Storage Manager saving new File." + ); + e.printStackTrace(); + } + } + + customConfig = new YamlConfiguration(); + try { + customConfig.load(customFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + if (customConfig.get("uuid") == null) { + customConfig.set("uuid", player.getUniqueId().toString()); + customConfig.set("name", player.getName()); + customConfig.set("health", 100); + customConfig.set("itemHealth", 0); + customConfig.set("defense", 50); + customConfig.set("itemDefense", 0); + customConfig.set("speed", 100); + customConfig.set("itemSpeed", 0); + customConfig.set("strength", 100); + customConfig.set("itemDmg", 0); + customConfig.set("inv", ""); + customConfig.set("ec", ""); + try { + customConfig.save(customFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + return customConfig; } - customConfig = new YamlConfiguration(); - try { - customConfig.load(customFile); - } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); + + /** + * create a config yaml with the file + * @param file + * @return a file configuration + */ + public static @NotNull FileConfiguration createYml(@NotNull File file) { + FileConfiguration customConfig; + + if (!file.exists()) { + file.getParentFile().mkdirs(); + try { + file.createNewFile(); + } catch (IOException e) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "Error in Storage Manager saving new File." + ); + e.printStackTrace(); + } + } + customConfig = new YamlConfiguration(); + try { + customConfig.load(file); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + return customConfig; + } + + /** + * create a config in the path provided + * @param path + * @return the created config file + */ + public static @NotNull FileConfiguration createYml(String path) { + File customFile; + FileConfiguration customConfig; + customFile = new File(path); + if (!customFile.exists()) { + customFile.getParentFile().mkdirs(); + try { + customFile.createNewFile(); + } catch (IOException e) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "Error in Storage Manager saving new File." + ); + e.printStackTrace(); + } + } + customConfig = new YamlConfiguration(); + try { + customConfig.load(customFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + return customConfig; } - return customConfig; - } } diff --git a/src/main/java/me/unurled/raxen/manager/server/CommandManager.java b/src/main/java/me/unurled/raxen/manager/server/CommandManager.java index 8e0b46e..cf62de7 100644 --- a/src/main/java/me/unurled/raxen/manager/server/CommandManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/CommandManager.java @@ -3,84 +3,111 @@ package me.unurled.raxen.manager.server; import lombok.Getter; import me.unurled.raxen.Raxen; import me.unurled.raxen.commands.RaxenCommand; -import me.unurled.raxen.commands.admin.*; +import me.unurled.raxen.commands.admin.BuildCommand; +import me.unurled.raxen.commands.admin.CustomModelDataCommand; +import me.unurled.raxen.commands.admin.EntitiyCommand; +import me.unurled.raxen.commands.admin.ItemListCommand; +import me.unurled.raxen.commands.admin.ItemTo64Command; +import me.unurled.raxen.commands.admin.NbtCommand; +import me.unurled.raxen.commands.admin.ReloadCommand; +import me.unurled.raxen.commands.admin.SpawnEntity; +import me.unurled.raxen.commands.admin.TestGuiCommand; +import me.unurled.raxen.commands.admin.TutorialManagerCommand; import me.unurled.raxen.commands.player.ClassCommand; import me.unurled.raxen.commands.player.MainGuiCommand; +import me.unurled.raxen.commands.player.PartyCommand; import me.unurled.raxen.commands.player.SkillsCommand; import me.unurled.raxen.commands.player.StorageCommand; public class CommandManager { - private Raxen main; + private Raxen main; - @Getter - private ItemListCommand itemListCommand; + @Getter + private ItemListCommand itemListCommand; - private ReloadCommand reloadComand = new ReloadCommand(); - private NbtCommand nbtCommand; - private TestGuiCommand testGuiCommand = new TestGuiCommand(); - private StorageCommand storageCommand = new StorageCommand(); - private SkillsCommand skillsCommand; - private RaxenCommand raxenCommand; - private SpawnEntity entityspawn; - private EntitiyCommand entitiyCommand; - private ClassCommand classCommand; - private CustomModelDataCommand customModelDataCommand; - private MainGuiCommand mainGuiCommand; - private ItemTo64Command itemTo64Command; + private ReloadCommand reloadComand = new ReloadCommand(); + private NbtCommand nbtCommand; + private TestGuiCommand testGuiCommand = new TestGuiCommand(); + private StorageCommand storageCommand = new StorageCommand(); + private SkillsCommand skillsCommand; + private RaxenCommand raxenCommand; + private SpawnEntity entityspawn; + private EntitiyCommand entitiyCommand; + private ClassCommand classCommand; + private CustomModelDataCommand customModelDataCommand; + private MainGuiCommand mainGuiCommand; + private ItemTo64Command itemTo64Command; + private TutorialManagerCommand tutorialManagerCommand; + private PartyCommand partyCommand; + private BuildCommand buildCommand; - public CommandManager(Raxen main) { - this.main = main; - this.itemListCommand = new ItemListCommand(this.main); - this.nbtCommand = new NbtCommand(this.main); - this.entityspawn = new SpawnEntity(this.main); - this.entitiyCommand = new EntitiyCommand(); - this.classCommand = new ClassCommand(this.main); - this.skillsCommand = new SkillsCommand(this.main); - this.raxenCommand = new RaxenCommand(this.main); - this.customModelDataCommand = new CustomModelDataCommand(); - this.mainGuiCommand = new MainGuiCommand(this.main); - this.itemTo64Command = new ItemTo64Command(); - } + public CommandManager(Raxen main) { + this.main = main; + this.itemListCommand = new ItemListCommand(this.main); + this.nbtCommand = new NbtCommand(this.main); + this.entityspawn = new SpawnEntity(this.main); + this.entitiyCommand = new EntitiyCommand(); + this.classCommand = new ClassCommand(this.main); + this.skillsCommand = new SkillsCommand(this.main); + this.raxenCommand = new RaxenCommand(this.main); + this.customModelDataCommand = new CustomModelDataCommand(); + this.mainGuiCommand = new MainGuiCommand(this.main); + this.itemTo64Command = new ItemTo64Command(); + this.tutorialManagerCommand = new TutorialManagerCommand(main); + this.partyCommand = new PartyCommand(main); + this.buildCommand = new BuildCommand(main); + } - /** - * register/add all the plugin's command - */ - public void register() { - main.getCommand("reloadplugin").setExecutor(reloadComand); - main.getCommand("reloadplugin").setTabCompleter(reloadComand); + /** + * register/add all the plugin's command + */ + public void register() { + main.getCommand("reloadplugin").setExecutor(reloadComand); + main.getCommand("reloadplugin").setTabCompleter(reloadComand); - main.getCommand("nbt").setExecutor(nbtCommand); - main.getCommand("nbt").setTabCompleter(nbtCommand); + main.getCommand("nbt").setExecutor(nbtCommand); + main.getCommand("nbt").setTabCompleter(nbtCommand); - main.getCommand("testgui").setExecutor(testGuiCommand); - main.getCommand("testgui").setTabCompleter(testGuiCommand); + main.getCommand("testgui").setExecutor(testGuiCommand); + main.getCommand("testgui").setTabCompleter(testGuiCommand); - main.getCommand("storage").setExecutor(storageCommand); - main.getCommand("storage").setTabCompleter(storageCommand); + main.getCommand("storage").setExecutor(storageCommand); + main.getCommand("storage").setTabCompleter(storageCommand); - main.getCommand("skills").setTabCompleter(skillsCommand); - main.getCommand("skills").setExecutor(skillsCommand); + main.getCommand("skills").setTabCompleter(skillsCommand); + main.getCommand("skills").setExecutor(skillsCommand); - main.getCommand("raxen").setTabCompleter(raxenCommand); - main.getCommand("raxen").setExecutor(raxenCommand); + main.getCommand("raxen").setTabCompleter(raxenCommand); + main.getCommand("raxen").setExecutor(raxenCommand); - main.getCommand("itemlist").setExecutor(itemListCommand); - main.getCommand("itemlist").setTabCompleter(itemListCommand); + main.getCommand("itemlist").setExecutor(itemListCommand); + main.getCommand("itemlist").setTabCompleter(itemListCommand); - main.getCommand("entityspawn").setTabCompleter(entityspawn); - main.getCommand("entityspawn").setExecutor(entityspawn); + main.getCommand("entityspawn").setTabCompleter(entityspawn); + main.getCommand("entityspawn").setExecutor(entityspawn); - main.getCommand("class").setTabCompleter(classCommand); - main.getCommand("class").setExecutor(classCommand); + main.getCommand("class").setTabCompleter(classCommand); + main.getCommand("class").setExecutor(classCommand); - main.getCommand("custommodeldata").setTabCompleter(customModelDataCommand); - main.getCommand("custommodeldata").setExecutor(customModelDataCommand); + main + .getCommand("custommodeldata") + .setTabCompleter(customModelDataCommand); + main.getCommand("custommodeldata").setExecutor(customModelDataCommand); - main.getCommand("main_gui").setTabCompleter(mainGuiCommand); - main.getCommand("main_gui").setExecutor(mainGuiCommand); + main.getCommand("main_gui").setTabCompleter(mainGuiCommand); + main.getCommand("main_gui").setExecutor(mainGuiCommand); - main.getCommand("itemto64").setTabCompleter(itemTo64Command); - main.getCommand("itemto64").setExecutor(itemTo64Command); - } + main.getCommand("itemto64").setTabCompleter(itemTo64Command); + main.getCommand("itemto64").setExecutor(itemTo64Command); + + main.getCommand("tutorial").setExecutor(tutorialManagerCommand); + main.getCommand("tutorial").setTabCompleter(tutorialManagerCommand); + + main.getCommand("party").setExecutor(partyCommand); + main.getCommand("party").setTabCompleter(partyCommand); + + main.getCommand("build").setExecutor(buildCommand); + main.getCommand("build").setTabCompleter(buildCommand); + } } diff --git a/src/main/java/me/unurled/raxen/manager/server/DungeonsManager.java b/src/main/java/me/unurled/raxen/manager/server/DungeonsManager.java index 5149355..311e4be 100644 --- a/src/main/java/me/unurled/raxen/manager/server/DungeonsManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/DungeonsManager.java @@ -9,32 +9,32 @@ import org.bukkit.Location; public class DungeonsManager { - private Raxen main; + private Raxen main; - private HashMap gates = new HashMap<>(); + private HashMap gates = new HashMap<>(); - private HashMap dungeons = new HashMap<>(); + private HashMap dungeons = new HashMap<>(); - public DungeonsManager(Raxen main) { - this.main = main; - registerDungeons(); - } + public DungeonsManager(Raxen main) { + this.main = main; + registerDungeons(); + } - /** - * register/add all made dungeon to the available plugin list - */ - public void registerDungeons() { - ForestDungeon forestDungeon = new ForestDungeon(); - dungeons.put(forestDungeon.getGate(), forestDungeon); - gates.put(forestDungeon.getGate(), forestDungeon.getGate().getLoc()); - /* + /** + * register/add all made dungeon to the available plugin list + */ + public void registerDungeons() { + ForestDungeon forestDungeon = new ForestDungeon(); + dungeons.put(forestDungeon.getGate(), forestDungeon); + gates.put(forestDungeon.getGate(), forestDungeon.getGate().getLoc()); + /* for (String s : dungeons.keySet()) { main.getManager().getWorldManager().loadWorld(dungeons.get(s).getName()); } */ - } + } - public HashMap getGates() { - return gates; - } + public HashMap getGates() { + return gates; + } } diff --git a/src/main/java/me/unurled/raxen/manager/server/EnchantmentManager.java b/src/main/java/me/unurled/raxen/manager/server/EnchantmentManager.java index baf4631..97cb9cd 100644 --- a/src/main/java/me/unurled/raxen/manager/server/EnchantmentManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/EnchantmentManager.java @@ -5,16 +5,16 @@ import org.bukkit.enchantments.Enchantment; public class EnchantmentManager { - public static void registerEnchantment(Enchantment enchantment) { - boolean registered = true; - try { - Field f = Enchantment.class.getDeclaredField("acceptingNew"); - f.setAccessible(true); - f.set(null, true); - Enchantment.registerEnchantment(enchantment); - } catch (Exception e) { - registered = false; - e.printStackTrace(); + public static void registerEnchantment(Enchantment enchantment) { + boolean registered = true; + try { + Field f = Enchantment.class.getDeclaredField("acceptingNew"); + f.setAccessible(true); + f.set(null, true); + Enchantment.registerEnchantment(enchantment); + } catch (Exception e) { + registered = false; + e.printStackTrace(); + } } - } } diff --git a/src/main/java/me/unurled/raxen/manager/server/LibsManager.java b/src/main/java/me/unurled/raxen/manager/server/LibsManager.java index 206c0d7..be89eb4 100644 --- a/src/main/java/me/unurled/raxen/manager/server/LibsManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/LibsManager.java @@ -2,38 +2,38 @@ package me.unurled.raxen.manager.server; import lombok.Getter; import me.unurled.raxen.Raxen; -import me.unurled.raxen.utils.libs.*; +import me.unurled.raxen.utils.libs.CitizensApi; +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 { - @Getter - private final ProtocolManager protocolManager; + @Getter + private final ProtocolManager protocolManager; - @Getter - private final LuckPerm luckPerm; + @Getter + private final Vault vault; - @Getter - private final Vault vault; + @Getter + private final MongoDB mongoDB; - @Getter - private final MongoDB mongoDB; + @Getter + private static Mysql mysql; - @Getter - private static Mysql mysql; + @Getter + private PlaceHolderAPI placeHolderAPI; - @Getter - private PlaceHolderAPI placeHolderAPI; + @Getter + private CitizensApi citizens; - @Getter - private CitizensApi citizens; - public LibsManager(Raxen main) { - this.luckPerm = new LuckPerm(main); - this.luckPerm.register(); - this.vault = new Vault(main); - this.protocolManager = new ProtocolManager(main); - this.mongoDB = new MongoDB(); - this.placeHolderAPI = new PlaceHolderAPI(main); - this.citizens = new CitizensApi(main); - } + public LibsManager(Raxen main) { + this.vault = new Vault(main); + this.protocolManager = new ProtocolManager(main); + this.mongoDB = new MongoDB(); + this.placeHolderAPI = new PlaceHolderAPI(main); + this.citizens = new CitizensApi(main); + } } diff --git a/src/main/java/me/unurled/raxen/manager/server/ListenerManager.java b/src/main/java/me/unurled/raxen/manager/server/ListenerManager.java index 760dbc2..5005760 100644 --- a/src/main/java/me/unurled/raxen/manager/server/ListenerManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/ListenerManager.java @@ -4,46 +4,59 @@ import lombok.Getter; import me.unurled.raxen.Raxen; import me.unurled.raxen.listener.entity.DamageEntity; 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 org.bukkit.plugin.PluginManager; public class ListenerManager { - private final Raxen main; - private final PluginManager pm; + private final Raxen main; + private final PluginManager pm; - @Getter - private ServerPingEvent serverPingEvent; + @Getter + private ServerPingEvent serverPingEvent; - public ListenerManager(Raxen main) { - this.main = main; - this.pm = main.getPm(); - this.serverPingEvent = new ServerPingEvent(main); - } + public ListenerManager(Raxen main) { + this.main = main; + this.pm = main.getPm(); + this.serverPingEvent = new ServerPingEvent(main); + } - /** - * register/addd listener events - */ - public void register() { - this.pm.registerEvents(new JoinEvent(main), main); - this.pm.registerEvents(new LeaveEvent(main), main); - this.pm.registerEvents(new ArmorEvent(main), main); - this.pm.registerEvents(new ItemHandEvent(main), main); - this.pm.registerEvents(new Reload(), main); - this.pm.registerEvents(new TransactionEvent(main), main); - this.pm.registerEvents( - main - .getManager() - .getCommandManager() - .getItemListCommand() - .getItemListGui(), - main - ); - this.pm.registerEvents(new DamageEntity(main), main); - this.pm.registerEvents(new SpawnEvent(main), main); - this.pm.registerEvents(new ClickBlockEvent(main), main); - this.pm.registerEvents(serverPingEvent, main); - this.pm.registerEvents(new CloseInventoryEvent(), main); - } + /** + * register/addd listener events + */ + public void register() { + this.pm.registerEvents(new JoinEvent(main), main); + this.pm.registerEvents(new LeaveEvent(main), main); + this.pm.registerEvents(new ArmorEvent(main), main); + this.pm.registerEvents(new ItemHandEvent(main), main); + this.pm.registerEvents(new Reload(), main); + this.pm.registerEvents(new TransactionEvent(main), main); + this.pm.registerEvents( + main + .getManager() + .getCommandManager() + .getItemListCommand() + .getItemListGui(), + main + ); + this.pm.registerEvents(new DamageEntity(main), main); + this.pm.registerEvents(new SpawnEvent(main), main); + this.pm.registerEvents(new ClickBlockEvent(main), main); + this.pm.registerEvents(serverPingEvent, 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); + } } diff --git a/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java b/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java index 2113c98..8b44335 100644 --- a/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java @@ -1,37 +1,59 @@ package me.unurled.raxen.manager.server; import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.PacketType.Play.Server; import com.comphenix.protocol.events.ListenerPriority; import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.BlockPosition; import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.clientbuild.Builds; +import org.bukkit.Location; import org.bukkit.entity.Player; public class ProtocolManager { - private final Raxen main; - private com.comphenix.protocol.ProtocolManager manager; + private final Raxen main; + private com.comphenix.protocol.ProtocolManager manager; - public ProtocolManager(Raxen main) { - this.main = main; - this.manager = main.getProtocolManager(); - } + public ProtocolManager(Raxen main) { + this.main = main; + this.manager = main.getProtocolManager(); + } - public void listen() { - manager.addPacketListener( - new PacketAdapter( - main, - ListenerPriority.NORMAL, - PacketType.Play.Client.BLOCK_DIG - ) { - @Override - public void onPacketReceiving(PacketEvent event) { - Player player = event.getPlayer(); - PacketContainer packet = event.getPacket(); - // if(player.) - } - } - ); - } + public void listen() { + manager.addPacketListener( + new PacketAdapter( + main, + ListenerPriority.NORMAL, + PacketType.Play.Client.BLOCK_DIG + ) { + @Override + public void onPacketReceiving(PacketEvent event) { + Player player = event.getPlayer(); + PacketContainer packet = event.getPacket(); + // if(player.) + } + } + ); + manager.addPacketListener( + new PacketAdapter(main, ListenerPriority.NORMAL, Server.BLOCK_CHANGE) { + @Override + public void onPacketSending(PacketEvent event) { + PacketContainer packet = event.getPacket(); + BlockPosition pos = packet.getBlockPositionModifier().read(0); + Location loc; + if (main.getManager().getBuildManager().isABuild( + loc = new Location(event.getPlayer().getWorld(), pos.getX(), pos.getY(), + pos.getZ()))) { + Builds build = main.getManager().getBuildManager().getBuildsByLocation(loc); + if (!main.getManager().getBuildManager().isInPlayerList(build, event.getPlayer())) { + event.setCancelled(true); + } + } + super.onPacketSending(event); + } + }); + } } diff --git a/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java b/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java index 5dc901f..e8db62a 100644 --- a/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java @@ -1,61 +1,202 @@ package me.unurled.raxen.manager.server; import static me.unurled.raxen.utils.Utils.debug; -import static me.unurled.raxen.utils.Utils.error; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; import java.util.Objects; +import java.util.UUID; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import lombok.Getter; import me.unurled.raxen.Raxen; import me.unurled.raxen.components.resourcepack.ResourcePack; +import me.unurled.raxen.components.resourcepack.hosting.Hosting; +import me.unurled.raxen.components.resourcepack.hosting.PackHoster; import org.bukkit.configuration.file.FileConfiguration; public class ResourcePackManager { - private Raxen main; + private Raxen main; - @Getter - private ResourcePack resourcePack; + @Getter + private ResourcePack resourcePack; - private FileConfiguration config; + private FileConfiguration config; - @Getter - private boolean useRP; + private UUID uuid; + @Getter + private String url; + @Getter + private String sha1; + private File resourcePackFile; - public ResourcePackManager(Raxen main) { - this.main = main; - this.resourcePack = new ResourcePack(main, this); - this.config = main.getConfig(); - this.useRP = this.config.getBoolean("useResourcePack"); - enable(); - } + @Getter + private boolean useRP; - /** - * Method to enable the ressourcepack - */ - private void enable() { - if (useRP) { - if ( - config.getString("resource_pack_url") == null || - Objects.equals(config.getString("rssource_pack_url"), "") || - config.getString("resource_pack_sha1") == null || - Objects.equals(config.getString("resource_pack_sha1"), "") || - Objects.equals( - config.getString("resource_pack_url"), - "https://mc-packs.net/" - ) || - Objects.equals(config.getString("resource_pack_sha1"), "sha1hallo") - ) { - error( - main, - "You must specify an resource_pack_url and resource_pack_sha1!" - ); - debug(main, "Resource pack not enabled."); - useRP = false; - } else { - debug(main, "Ressource Pack enabled."); - } - } else { - debug(main, "Resource pack not enabled."); + public ResourcePackManager(Raxen main) { + this.main = main; + this.resourcePack = new ResourcePack(main, this); + this.config = main.getConfig(); + this.useRP = this.config.getBoolean("useResourcePack", false); + prepareFolder(); + resourcePackFile = packageRp(); + if (resourcePackFile != null) { + enable(); + } else { + useRP = false; + } + if (useRP) { + upload(); + } + } + + /** + * Create all folders for the resource pack + */ + private void prepareFolder() { + // Create main folder3 + File rp = new File(main.getDataFolder(), "resoucepack"); + rp.mkdirs(); + + File minecraft = new File(rp, "minecraft"); + minecraft.mkdirs(); + + // Create mcmeta file + String content = """ + { + "pack": { + "pack_format": 12, + "description": "§bRaxen - By §6unurled" + } + }"""; + try { + File file = new File(minecraft, "pack.mcmeta"); + + FileWriter fileWriter = new FileWriter(file); + + BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); + + bufferedWriter.write(content); + + bufferedWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + // Create texture folder + File texture = new File(minecraft, "textures"); + texture.mkdirs(); + new File(texture, "item").mkdirs(); + new File(texture, "block").mkdirs(); + + // Create model folder + File model = new File(minecraft, "models"); + model.mkdirs(); + new File(model, "item").mkdirs(); + new File(model, "block").mkdirs(); + + // Create font folder + File font = new File(minecraft, "font"); + font.mkdirs(); + + // Create sound folder + File sound = new File(minecraft, "sounds"); + sound.mkdirs(); + } + + private File packageRp() { + String zipFilePath = main.getDataFolder() + "/resourcepack.zip"; + String folderPath = main.getDataFolder() + "/resourcepack"; + try { + zipFolder(folderPath, zipFilePath); + return new File(zipFilePath); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * Method to enable the ressource pack + */ + private void enable() { + if (useRP) { + if (config.getString("resource_pack_url") == null || + Objects.equals(config.getString("resource_pack_url"), "")) { + debug(main, "Resource pack not enabled."); + useRP = false; + } else { + debug(main, "Ressource Pack enabled."); + if (config.contains("resource_pack_uuid") && + config.getString("resource_pack_uuid") != null && + !Objects.equals(config.getString("resource_pack_uuid"), + "00000000-0000-0000-0000-000000000000")) { + uuid = UUID.fromString(config.getString("resource_pack_uuid")); + } else { + uuid = UUID.randomUUID(); + config.set("resource_pack_uuid", uuid.toString()); + main.saveConfig(); + } + url = config.getString("resource_pack_url") + "/download/" + uuid.toString(); + } + } else { + debug(main, "Resource pack not enabled."); + } + } + + private static void zipFolder(String folderPath, String zipFilePath) throws IOException { + FileOutputStream fos = new FileOutputStream(zipFilePath); + ZipOutputStream zos = new ZipOutputStream(fos); + + File folder = new File(folderPath); + zipFiles(folder, folder.getName(), zos); + + zos.close(); + fos.close(); + } + + private static void zipFiles(File folder, String parentFolder, ZipOutputStream zos) + throws IOException { + byte[] buffer = new byte[1024]; + if (folder.listFiles() == null) { + return; + } + + for (File file : folder.listFiles()) { + if (file.isDirectory()) { + zipFiles(file, parentFolder + "/" + file.getName(), zos); + continue; + } + + FileInputStream fis = new FileInputStream(file); + + zos.putNextEntry(new ZipEntry(parentFolder + "/" + file.getName())); + + int length; + while ((length = fis.read(buffer)) > 0) { + zos.write(buffer, 0, length); + } + + zos.closeEntry(); + fis.close(); + } + } + + private void upload() { + resourcePackFile = packageRp(); + if (resourcePackFile != null) { + Hosting host = createHosting(); + host.upload(resourcePackFile); + sha1 = host.getOriginalSHA1(); + } + } + + private Hosting createHosting() { + return new PackHoster(url); } - } } diff --git a/src/main/java/me/unurled/raxen/manager/server/WorldManager.java b/src/main/java/me/unurled/raxen/manager/server/WorldManager.java index c42a3f9..1fef61b 100644 --- a/src/main/java/me/unurled/raxen/manager/server/WorldManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/WorldManager.java @@ -1,6 +1,10 @@ package me.unurled.raxen.manager.server; -import static me.unurled.raxen.utils.Utils.*; +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.copyDirectory; +import static me.unurled.raxen.utils.Utils.error; +import static me.unurled.raxen.utils.Utils.log; +import static me.unurled.raxen.utils.Utils.removeDirectory; import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MultiverseWorld; @@ -15,124 +19,127 @@ import org.bukkit.World; public class WorldManager { - private Raxen main; + private Raxen main; - MVWorldManager worldManager; + MVWorldManager worldManager; - /** - * String : name - * MultiverseWorld : a world that need to be registered - */ - private Map loadedWorlds = new HashMap<>(); + /** + * String : name MultiverseWorld : a world that need to be registered + */ + private Map loadedWorlds = new HashMap<>(); - private List worlds = new ArrayList<>(); + private List worlds = new ArrayList<>(); - private File pluginFolder; - private File worldFolder; + private File pluginFolder; + private File worldFolder; - public WorldManager(Raxen main) { - this.main = main; - this.pluginFolder = new File(main.getDataFolder() + "/worlds/"); - this.worldFolder = new File("worlds/"); - this.worldManager = main.getManager().getMultiverse().getWorldManager(); - worlds.add("Forest"); - } - - /** - * remove a world - * @param name - */ - public void removeWorld(String name) { - File world = new File(worldFolder + name + "/"); - if (!world.exists() || !world.isDirectory()) { - error("Saving world " + name + ". Folder don't exists."); - return; + public WorldManager(Raxen main) { + this.main = main; + this.pluginFolder = new File(main.getDataFolder() + "/worlds/"); + this.worldFolder = new File("worlds/"); + this.worldManager = main.getManager().getMultiverse().getWorldManager(); + worlds.add("Forest"); } - worldManager.unloadWorld(name); - try { - removeDirectory(world.toPath()); - } catch (IOException e) { - error("Error while Saving world " + name + " at coping data."); - e.printStackTrace(); - } - } - /** - * load all world in the worlds folder - */ - public void load() { - if (!pluginFolder.exists()) { - pluginFolder.mkdirs(); - error( - "Please put in the folder " + - pluginFolder.getAbsolutePath() + - " all the needed worlds :" - ); - for (String s : worlds) { - error(" - " + s + ","); - } - return; - } - for (String s : worlds) { - File world = new File(pluginFolder + s); - File worldd = new File(worldFolder + s); - if (worldd.exists()) { - if (worldd.isDirectory()) { - worldManager.loadWorld(s); + /** + * remove a world + * + * @param name + */ + public void removeWorld(String name) { + File world = new File(worldFolder + name + "/"); + if (!world.exists() || !world.isDirectory()) { + error("Saving world " + name + ". Folder don't exists."); + return; } - } else if (world.exists()) { - if (world.isDirectory()) { - loadWorld(s); - } else { - error("World " + s + " is not a world Folder!"); + worldManager.unloadWorld(name); + try { + removeDirectory(world.toPath()); + } catch (IOException e) { + error("Error while Saving world " + name + " at coping data."); + e.printStackTrace(); } - } else { - error("World " + s + " do not exist."); - } } - } - /** - * load world from the name of it - * @param name - */ - public void loadWorld(String name) { - File world = new File(pluginFolder + "/" + name + "/"); - if (!world.exists() || !world.isDirectory()) { - error( - "Loading world " + - name + - ". Folder " + - world.getAbsolutePath() + - " don't exists." - ); - return; + /** + * load all world in the worlds folder + */ + public void load() { + if (!pluginFolder.exists()) { + pluginFolder.mkdirs(); + error( + "Please put in the folder " + + pluginFolder.getAbsolutePath() + + " all the needed worlds :" + ); + for (String s : worlds) { + error(" - " + s + ","); + } + return; + } + for (String s : worlds) { + File world = new File(pluginFolder + s); + File worldd = new File(worldFolder + s); + if (worldd.exists()) { + if (worldd.isDirectory()) { + worldManager.loadWorld(s); + } + } else if (world.exists()) { + if (world.isDirectory()) { + loadWorld(s); + } else { + error("World " + s + " is not a world Folder!"); + } + } else { + error("World " + s + " do not exist."); + } + } } - File newWorld = new File(worldFolder + "/" + name); - try { - log( - colorTextComp("Copping world " + world.getName() + "."), - colorTextComp( - "From " + - world.getAbsolutePath() + - " to " + - newWorld.getAbsolutePath() + - "." - ) - ); - copyDirectory(world.getAbsolutePath(), newWorld.getAbsolutePath()); - } catch (IOException e) { - error("Error while Loading world " + name + " at coping data."); - e.printStackTrace(); + + /** + * load world from the name of it + * + * @param name + */ + public void loadWorld(String name) { + File world = new File(pluginFolder + "/" + name + "/"); + if (!world.exists() || !world.isDirectory()) { + error( + "Loading world " + + name + + ". Folder " + + world.getAbsolutePath() + + " don't exists." + ); + return; + } + File newWorld = new File(worldFolder + "/" + name); + try { + log( + colorTextComp( + "Copping world " + world.getName() + "." + ), + colorTextComp( + "From " + + world.getAbsolutePath() + + " to " + + newWorld.getAbsolutePath() + + "." + ) + ); + copyDirectory(world.getAbsolutePath(), newWorld.getAbsolutePath()); + } catch (IOException e) { + error("Error while Loading world " + name + " at coping data."); + e.printStackTrace(); + } + worldManager.loadWorld(name); + worldManager.addWorld( + world.getName(), + World.Environment.NORMAL, + null, + null, + false, + null + ); } - worldManager.loadWorld(name); - worldManager.addWorld( - world.getName(), - World.Environment.NORMAL, - null, - null, - false, - null - ); - } } diff --git a/src/main/java/me/unurled/raxen/utils/ComponentSpilt.java b/src/main/java/me/unurled/raxen/utils/ComponentSpilt.java new file mode 100644 index 0000000..6593b87 --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/ComponentSpilt.java @@ -0,0 +1,37 @@ +package me.unurled.raxen.utils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.Style; +import org.jetbrains.annotations.NotNull; + +final class ComponentSplit { + + private ComponentSplit() { + } + + static @NotNull List split(final @NotNull Component self, + final @NotNull Component separator) { + if (self.children().size() == 0) { + return Collections.singletonList(self); + } + + final List result = new ArrayList<>(); + final Component root = self.children(Collections.emptyList()); + TextComponent.Builder build = Component.text(); + build.append(root.style(Style.empty())); + for (final Component child : self.children()) { + if (child.equals(separator)) { + result.add(build.build().applyFallbackStyle(root.style())); + build = Component.text(); + } else { + build.append(child); + } + } + result.add(build.build().applyFallbackStyle(root.style())); + return result; + } +} diff --git a/src/main/java/me/unurled/raxen/utils/DungeonUtils.java b/src/main/java/me/unurled/raxen/utils/DungeonUtils.java index 07dba08..adc888d 100644 --- a/src/main/java/me/unurled/raxen/utils/DungeonUtils.java +++ b/src/main/java/me/unurled/raxen/utils/DungeonUtils.java @@ -12,103 +12,103 @@ import org.jetbrains.annotations.NotNull; public class DungeonUtils { - /** - * get the radius from the rank of a dungeon - */ - public static Integer getRadiusFromRank(@NotNull Rank rank) { - Integer radius = 1; - switch (rank) { - case F: - radius = 4; - case E: - radius = 5; - case D: - radius = 8; - case C: - radius = 10; - case B: - radius = 15; - case A: - radius = 20; - case S: - radius = 30; - case SS: - radius = 40; - case SSS: - radius = 50; - case WORLD: - radius = 100; - case UNBEATABLE: - radius = 200; - case NOT_DEFINED: - radius = 1000; - } - return radius; - } - - /** - * used to spawn monster based on random - */ - public static void fromTypeToMonster(Types types, Rank rank) { - Random r = new Random(); - r.nextInt(); - } - - /** - * if a gate is in range of the player - * @return boolean - */ - public static Boolean isInRange(Location loc) { - Raxen main = (Raxen) Bukkit - .getServer() - .getPluginManager() - .getPlugin("Raxen"); - HashMap gats = main - .getManager() - .getDungeonsManager() - .getGates(); - for (Gate g : gats.keySet()) { - Double x = g.getLoc().getX(); - Double y = g.getLoc().getY(); - Double z = g.getLoc().getZ(); - Double radius = Double.valueOf(g.getPortalRadius()); - if (loc.getX() < x + radius && loc.getX() > x - radius) { - if (loc.getY() < y + radius && loc.getY() > y - radius) { - if (loc.getZ() < z + radius && loc.getZ() > z - radius) { - return true; - } + /** + * get the radius from the rank of a dungeon + */ + public static Integer getRadiusFromRank(@NotNull Rank rank) { + Integer radius = 1; + switch (rank) { + case F: + radius = 4; + case E: + radius = 5; + case D: + radius = 8; + case C: + radius = 10; + case B: + radius = 15; + case A: + radius = 20; + case S: + radius = 30; + case SS: + radius = 40; + case SSS: + radius = 50; + case WORLD: + radius = 100; + case UNBEATABLE: + radius = 200; + case NOT_DEFINED: + radius = 1000; } - } + return radius; } - return false; - } - /** - * if a gate is in range of the player - * @return the gates which is in range - */ - public static Gate whichIsInRange(Location loc) { - Raxen main = (Raxen) Bukkit - .getServer() - .getPluginManager() - .getPlugin("Raxen"); - HashMap gats = main - .getManager() - .getDungeonsManager() - .getGates(); - for (Gate g : gats.keySet()) { - Double x = g.getLoc().getX(); - Double y = g.getLoc().getY(); - Double z = g.getLoc().getZ(); - Double radius = Double.valueOf(g.getPortalRadius()); - if (loc.getX() < x + radius && loc.getX() > x - radius) { - if (loc.getY() < y + radius && loc.getY() > y - radius) { - if (loc.getZ() < z + radius && loc.getZ() > z - radius) { - return g; - } - } - } + /** + * used to spawn monster based on random + */ + public static void fromTypeToMonster(Types types, Rank rank) { + Random r = new Random(); + r.nextInt(); + } + + /** + * if a gate is in range of the player + * @return boolean + */ + public static Boolean isInRange(Location loc) { + Raxen main = (Raxen) Bukkit + .getServer() + .getPluginManager() + .getPlugin("Raxen"); + HashMap gats = main + .getManager() + .getDungeonsManager() + .getGates(); + for (Gate g : gats.keySet()) { + Double x = g.getLoc().getX(); + Double y = g.getLoc().getY(); + Double z = g.getLoc().getZ(); + Double radius = Double.valueOf(g.getPortalRadius()); + if (loc.getX() < x + radius && loc.getX() > x - radius) { + if (loc.getY() < y + radius && loc.getY() > y - radius) { + if (loc.getZ() < z + radius && loc.getZ() > z - radius) { + return true; + } + } + } + } + return false; + } + + /** + * if a gate is in range of the player + * @return the gates which is in range + */ + public static Gate whichIsInRange(Location loc) { + Raxen main = (Raxen) Bukkit + .getServer() + .getPluginManager() + .getPlugin("Raxen"); + HashMap gats = main + .getManager() + .getDungeonsManager() + .getGates(); + for (Gate g : gats.keySet()) { + Double x = g.getLoc().getX(); + Double y = g.getLoc().getY(); + Double z = g.getLoc().getZ(); + Double radius = Double.valueOf(g.getPortalRadius()); + if (loc.getX() < x + radius && loc.getX() > x - radius) { + if (loc.getY() < y + radius && loc.getY() > y - radius) { + if (loc.getZ() < z + radius && loc.getZ() > z - radius) { + return g; + } + } + } + } + return null; } - return null; - } } diff --git a/src/main/java/me/unurled/raxen/utils/EntityAttributes.java b/src/main/java/me/unurled/raxen/utils/EntityAttributes.java index 93c1589..52b07b3 100644 --- a/src/main/java/me/unurled/raxen/utils/EntityAttributes.java +++ b/src/main/java/me/unurled/raxen/utils/EntityAttributes.java @@ -11,96 +11,96 @@ import org.bukkit.entity.Entity; public class EntityAttributes { - /** - * get every attribute of an entity - * @param e an entity - * @return an instance of attribute - */ - public static Attribute getAttribute(Entity e) { - int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; - PlayerManager pm = - ( - (Raxen) Objects.requireNonNull( - Bukkit.getPluginManager().getPlugin("Raxen") - ) - ).getManager() - .getPlayerManager(); - defense = pm.getDefense().get(e); - maxMana = pm.getMaxMana().get(e); - itemDefense = pm.getItemDefense().get(e); - health = pm.getHealth().get(e); - itemHealth = pm.getItemHealth().get(e); - mana = pm.getMana().get(e); - speed = pm.getSpeed().get(e); - itemLuck = pm.getItemLuck().get(e); - strength = pm.getStrength().get(e); - luck = pm.getLuck().get(e); - maxHealth = pm.getMaxHealth().get(e); - itemStrength = pm.getItemStrength().get(e); - itemSpeed = pm.getItemSpeed().get(e); - itemMana = pm.getItemMana().get(e); - return new Attribute( - maxHealth, - health, - itemHealth, - defense, - itemDefense, - speed, - itemSpeed, - strength, - itemStrength, - maxMana, - mana, - itemMana, - luck, - itemLuck - ); - } - - /** - * set each attribute - */ - public static void setAttributes( - Entity e, - int maxHealth, - int health, - int itemHealth, - int defense, - int itemDefense, - int speed, - int itemSpeed, - int strength, - int itemStrength, - int maxMana, - int mana, - int itemMana, - int luck, - int itemLuck - ) { - PlayerManager pm = - ( - (Raxen) Objects.requireNonNull( - Bukkit.getPluginManager().getPlugin("Raxen") - ) - ).getManager() - .getPlayerManager(); - pm.getDefense().set(e, defense); - pm.getMaxMana().set(e, maxMana); - pm.getItemDefense().set(e, itemDefense); - pm.getHealth().set(e, health); - pm.getItemHealth().set(e, itemHealth); - pm.getMana().set(e, mana); - pm.getSpeed().set(e, speed); - pm.getItemLuck().set(e, itemLuck); - pm.getStrength().set(e, strength); - pm.getLuck().set(e, luck); - pm.getMaxHealth().set(e, maxHealth); - pm.getItemStrength().set(e, itemStrength); - pm.getItemSpeed().set(e, itemSpeed); - pm.getItemMana().set(e, itemMana); - debug("Speedometer " + speed); - for (String s : pm.getAttribute().keySet()) { - debug(s + " " + pm.getAttribute().get(s).get(e).toString()); + /** + * get every attribute of an entity + * @param e an entity + * @return an instance of attribute + */ + public static Attribute getAttribute(Entity e) { + int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; + PlayerManager pm = + ( + (Raxen) Objects.requireNonNull( + Bukkit.getPluginManager().getPlugin("Raxen") + ) + ).getManager() + .getPlayerManager(); + defense = pm.getDefense().get(e); + maxMana = pm.getMaxMana().get(e); + itemDefense = pm.getItemDefense().get(e); + health = pm.getHealth().get(e); + itemHealth = pm.getItemHealth().get(e); + mana = pm.getMana().get(e); + speed = pm.getSpeed().get(e); + itemLuck = pm.getItemLuck().get(e); + strength = pm.getStrength().get(e); + luck = pm.getLuck().get(e); + maxHealth = pm.getMaxHealth().get(e); + itemStrength = pm.getItemStrength().get(e); + itemSpeed = pm.getItemSpeed().get(e); + itemMana = pm.getItemMana().get(e); + return new Attribute( + maxHealth, + health, + itemHealth, + defense, + itemDefense, + speed, + itemSpeed, + strength, + itemStrength, + maxMana, + mana, + itemMana, + luck, + itemLuck + ); + } + + /** + * set each attribute + */ + public static void setAttributes( + Entity e, + int maxHealth, + int health, + int itemHealth, + int defense, + int itemDefense, + int speed, + int itemSpeed, + int strength, + int itemStrength, + int maxMana, + int mana, + int itemMana, + int luck, + int itemLuck + ) { + PlayerManager pm = + ( + (Raxen) Objects.requireNonNull( + Bukkit.getPluginManager().getPlugin("Raxen") + ) + ).getManager() + .getPlayerManager(); + pm.getDefense().set(e, defense); + pm.getMaxMana().set(e, maxMana); + pm.getItemDefense().set(e, itemDefense); + pm.getHealth().set(e, health); + pm.getItemHealth().set(e, itemHealth); + pm.getMana().set(e, mana); + pm.getSpeed().set(e, speed); + pm.getItemLuck().set(e, itemLuck); + pm.getStrength().set(e, strength); + pm.getLuck().set(e, luck); + pm.getMaxHealth().set(e, maxHealth); + pm.getItemStrength().set(e, itemStrength); + pm.getItemSpeed().set(e, itemSpeed); + pm.getItemMana().set(e, itemMana); + debug("Speedometer " + speed); + for (String s : pm.getAttribute().keySet()) { + debug(s + " " + pm.getAttribute().get(s).get(e).toString()); + } } - } } diff --git a/src/main/java/me/unurled/raxen/utils/EntityUtils.java b/src/main/java/me/unurled/raxen/utils/EntityUtils.java index 57d00b5..2cab28e 100644 --- a/src/main/java/me/unurled/raxen/utils/EntityUtils.java +++ b/src/main/java/me/unurled/raxen/utils/EntityUtils.java @@ -1,14 +1,35 @@ package me.unurled.raxen.utils; -import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_19_R3.CraftRegionAccessor; import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; public class EntityUtils { - public void setSkin(Entity e) { - if (e instanceof Player) {} - // Bukkit.getWorld("aa").spawn(new Location(Bukkit.getWorld("aa"), 0, 0, 0), new CraftPlayer()) - } + public void setSkin(Entity e) { + if (e instanceof Player) { + } + // Bukkit.getWorld("aa").spawn(new Location(Bukkit.getWorld("aa"), 0, 0, 0), new CraftPlayer()) + } + + public static LivingEntity createLivingEntity( + Class 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; + } } diff --git a/src/main/java/me/unurled/raxen/utils/Items.java b/src/main/java/me/unurled/raxen/utils/Items.java index 2153013..9e7e7cb 100644 --- a/src/main/java/me/unurled/raxen/utils/Items.java +++ b/src/main/java/me/unurled/raxen/utils/Items.java @@ -1,15 +1,21 @@ 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 de.tr7zw.nbtapi.NBTItem; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; 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.components.items.NBT; +import me.unurled.raxen.components.items.NBTNames; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -26,628 +32,662 @@ import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; public class Items { - /** - * create an item with @param - * @param material the item material - * @param amount the amount of the itemstack - * @param glow if the item glows or not - * @param unb if the item is unbreakable - * @param name the name of the item - * @param lore the lore of the item - * @return the created itemstack - */ - public static @NotNull ItemStack createItem( - Material material, - int amount, - boolean glow, - boolean unb, - String name, - String... lore - ) { - ItemStack item = new ItemStack(material, amount); - ItemMeta itemMeta = item.getItemMeta(); - if (name != null) { - itemMeta.displayName(colorComp(name)); - } - if (lore != null) { - List list = new ArrayList<>(); - for (String string : lore) { - list.add(colorComp(string)); - } - itemMeta.lore(list); - } - if (glow) { - itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - itemMeta.addEnchant(Enchantment.DURABILITY, 1, true); - } - if (unb) { - itemMeta.setUnbreakable(true); - } - item.setItemMeta(itemMeta); - return item; - } - - /** - * edit an item with provided @param - * @param item the item to modify - * @param name the new name of the item - * @param amount the new amount - * @param lore the new lore - * @return the modified itemstack - */ - public static @NotNull ItemStack editItem( - ItemStack item, - String name, - int amount, - List lore - ) { - if (amount == 0) { - amount = 1; - } - item.setAmount(amount); - ItemMeta itemMeta = item.getItemMeta(); - if (name != null) { - itemMeta.displayName(Component.text(name)); - } - itemMeta.lore(lore); - item.setItemMeta(itemMeta); - return item; - } - - /** - * the basic close gui button - * @return a barrier block itemstack named close - */ - public static @NotNull ItemStack closeItem() { - ItemStack close = createItem( - Material.BARRIER, - 1, - false, - false, - colorString("CLOSE") - ); - ItemMeta clo = close.getItemMeta(); - clo.setCustomModelData(1); - close.setItemMeta(clo); - return close; - } - - /** - * fill item in chest and guis - * @return a grey glass pane named nothing - */ - public static @NotNull ItemStack greyPane() { - return createItem(Material.GRAY_STAINED_GLASS_PANE, 1, false, true, ""); - } - - /** - * serialize item - * @param it an itemstack - * @param slot the slot it was in the inventory - * @return the serialized string - */ - public static @NotNull String itemStackSerialize( - ItemStack it, - @NotNull Integer slot - ) { - String str = ""; - str = itemTo64(it); - str = str + "@#SLOT#" + (slot - 1); - return str; - } - - /** - * Serelize the PlayerInventory - * @param inv a player inventory - * @return return a serelized string - */ - public static @NotNull String itemStackSer(PlayerInventory inv) { - List list = new ArrayList<>(); - Integer i = 0; - for (ItemStack it : inv.getContents()) { - String str = ""; - str = itemTo64(it); - if (it != null) { - if (isContained(it, inv.getArmorContents())) { - str = str + "@#SLOT#" + getWhichArmor(it.getType()); - } else { - i++; - str = str + "@#SLOT#" + (i - 1); - } - } - list.add(str); - } - return listItemStackSerialize(list); - } - - /** - * if item is in its - * @param item an Itemstack - * @param its an Itemstack[] - * @return return if item is in its - */ - public static boolean isContained(ItemStack item, ItemStack[] its) { - for (ItemStack it : its) { - if (it == item) { - return true; - } - } - return false; - } - - /** - * Get which armor the type is - * @param type a material type - * @return the armor type or null - */ - public static String getWhichArmor(Material type) { - String name = type.name(); - if (name.contains("HELMET") || name.contains("helmet")) { - return "HELMET"; - } else if (name.contains("CHESTPLATE") || name.contains("chestplate")) { - return "CHESTPLATE"; - } else if (name.contains("LEGGINGS") || name.contains("leggins")) { - return "LEGGINGS"; - } else if (name.contains("BOOTS") || name.contains("boots")) { - return "BOOTS"; - } - return null; - } - - /** - * a class that represent the itemstack deserialized. - */ - public static class itemStackDeserializeResult { - - int slot; - ItemStack it; - String armor; - /** - * custructor - * @param slot an int of the slot of the item - * @param it the item which is deserialized. + * create an item with @param + * + * @param material the item material + * @param amount the amount of the itemstack + * @param glow if the item glows or not + * @param unb if the item is unbreakable + * @param name the name of the item + * @param lore the lore of the item + * @return the created itemstack */ - public itemStackDeserializeResult(Integer slot, ItemStack it) { - this.slot = slot; - this.it = it; - } - - public itemStackDeserializeResult( - Integer slot, - ItemStack it, - String armor + public static @NotNull ItemStack createItem( + Material material, + int amount, + boolean glow, + boolean unb, + String name, + String... lore ) { - this.slot = slot; - this.it = it; - this.armor = armor; + ItemStack item = new ItemStack(material, amount); + ItemMeta itemMeta = item.getItemMeta(); + if (name != null) { + itemMeta.displayName(colorComp(name)); + } + if (lore != null) { + List list = new ArrayList<>(); + for (String string : lore) { + list.add(colorComp(string)); + } + itemMeta.lore(list); + } + if (glow) { + itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + itemMeta.addEnchant(Enchantment.DURABILITY, 1, true); + } + if (unb) { + itemMeta.setUnbreakable(true); + } + item.setItemMeta(itemMeta); + return item; } - } - - /** - * a class that represent a list of itemstack deserialized. - */ - public static class itemStackListDeserilize { - - HashMap inv; /** - * constructor - * @param inv a list of itemstack with their slot. + * edit an item with provided @param + * + * @param item the item to modify + * @param name the new name of the item + * @param amount the new amount + * @param lore the new lore + * @return the modified itemstack */ - public itemStackListDeserilize(HashMap inv) { - this.inv = inv; + public static @NotNull ItemStack editItem( + ItemStack item, + String name, + int amount, + List lore + ) { + if (amount == 0) { + amount = 1; + } + item.setAmount(amount); + ItemMeta itemMeta = item.getItemMeta(); + if (name != null) { + itemMeta.displayName(Component.text(name)); + } + itemMeta.lore(lore); + item.setItemMeta(itemMeta); + return item; } - } - /** - * deserilize items - * @param str the serilized item - * @return a deserialized item instance - */ - public static @NotNull Items.itemStackDeserializeResult itemStackDeserilize( - @NotNull String str - ) { - List mapp = Arrays.asList(str.split("@#SLOT#")); - Gson gson = new Gson(); - ItemStack it = new ItemStack(Material.AIR); - Integer slot = 0; - String armor = null; - debug("full item " + str); - for (String s : mapp) { - if (s != null) { - try { - it = itemFrom64(s); - } catch (Exception e) { - if (!s.equals("")) { - debug("slot " + s); - try { - slot = Integer.parseInt(s); - } catch (NumberFormatException nfe) { - armor = s; + /** + * the basic close gui button + * + * @return a barrier block itemstack named close + */ + public static @NotNull ItemStack closeItem() { + ItemStack close = createItem( + Material.BARRIER, + 1, + false, + false, + "CLOSE" + ); + ItemMeta clo = close.getItemMeta(); + clo.setCustomModelData(1); + close.setItemMeta(clo); + return close; + } + + /** + * fill item in chest and guis + * + * @return a grey glass pane named nothing + */ + public static @NotNull ItemStack greyPane() { + return createItem(Material.GRAY_STAINED_GLASS_PANE, 1, false, true, ""); + } + + /** + * serialize item + * + * @param it an itemstack + * @param slot the slot it was in the inventory + * @return the serialized string + */ + public static @NotNull String itemStackSerialize( + ItemStack it, + @NotNull Integer slot + ) { + String str = ""; + str = itemTo64(it); + str = str + "@#SLOT#" + (slot - 1); + return str; + } + + /** + * Serelize the PlayerInventory + * + * @param inv a player inventory + * @return return a serelized string + */ + public static @NotNull String itemStackSer(PlayerInventory inv) { + List list = new ArrayList<>(); + Integer i = 0; + for (ItemStack it : inv.getContents()) { + String str = ""; + str = itemTo64(it); + if (it != null) { + if (isContained(it, inv.getArmorContents())) { + str = str + "@#SLOT#" + getWhichArmor(it.getType()); + } else { + i++; + str = str + "@#SLOT#" + (i - 1); + } } - } + list.add(str); } - } + return listItemStackSerialize(list); } - itemStackDeserializeResult itt; - if (armor != null) { - itt = new itemStackDeserializeResult(slot, it, armor); - } else { - itt = new itemStackDeserializeResult(slot, it); - } - return itt; - } - /** - * a list of serialized item in one string - * @param list the list of all serialized item - * @return a string - */ - public static String listItemStackSerialize(@NotNull List list) { - Gson gson = new Gson(); - String str = ""; - for (String a : list) { - str = str + "@#NEW_ITEM#" + a; - } - return str; - } - - /** - * deserialize item - * @param str a list of all serialized item - * @return a list of itemstack with their slot - */ - public static @NotNull HashMap mapItemStackDeserialize( - @NotNull String str - ) { - Gson gson = new Gson(); - List map = Arrays.asList(str.split("@#NEW_ITEM#")); - HashMap inv = new HashMap<>(); - ArrayList items = new ArrayList(); - for (String s : map) { - ItemStack itt; - Integer slot; - if (s != null) { - itemStackDeserializeResult itm = itemStackDeserilize(s); - itt = itm.it; - if (itt != null && itt.getType() != Material.AIR) { - items.add(itt); + /** + * if item is in its + * + * @param item an Itemstack + * @param its an Itemstack[] + * @return return if item is in its + */ + public static boolean isContained(ItemStack item, ItemStack[] its) { + for (ItemStack it : its) { + if (it == item) { + return true; + } } - slot = itm.slot; - inv.put(slot, itt); - } + return false; } - ItemStack[] it = items.toArray(new ItemStack[0]); - return inv; - } - /** - * deserialize item - * @param str a list of all serialized item - * @return a list of itemstack with their slot - */ - public static @NotNull List listItemStackDeserialize( - @NotNull String str - ) { - Gson gson = new Gson(); - List map = Arrays.asList(str.split("@#NEW_ITEM#")); - List inv = new ArrayList<>(); - ArrayList items = new ArrayList(); - for (String s : map) { - ItemStack itt; - Integer slot; - if (s != null) { - itemStackDeserializeResult itm = itemStackDeserilize(s); - itt = itm.it; - if (itt != null && itt.getType() != Material.AIR) { - items.add(itt); + /** + * Get which armor the type is + * + * @param type a material type + * @return the armor type or null + */ + public static String getWhichArmor(Material type) { + String name = type.name(); + if (name.contains("HELMET") || name.contains("helmet")) { + return "HELMET"; + } else if (name.contains("CHESTPLATE") || name.contains("chestplate")) { + return "CHESTPLATE"; + } else if (name.contains("LEGGINGS") || name.contains("leggins")) { + return "LEGGINGS"; + } else if (name.contains("BOOTS") || name.contains("boots")) { + return "BOOTS"; } - } + return null; } - return inv; - } - /** - * set all item in the list to their slot in inv - * @param list a list of item with their slot - * @param inv the destined inventory - * @return the inv - */ - public static Inventory setItemsToInventory( - @NotNull HashMap list, - Inventory inv - ) { - for (Map.Entry entry : list.entrySet()) { - inv.setItem(entry.getKey(), entry.getValue()); - } - return inv; - } + /** + * a class that represent the itemstack deserialized. + */ + public static class itemStackDeserializeResult { - /** - * set all item in the list to their slot in inv - * @param list a list of item with their slot - * @param inv the destined inventory - * @return the inv - */ - public static PlayerInventory setItemsToInventory( - @NotNull List list, - PlayerInventory inv - ) { - Inventory invv = Bukkit.createInventory(null, 54); - for (itemStackDeserializeResult itm : list) { - if (itm.armor != null) { - setArmorItem(inv, itm.it); - } else { - inv.setItem(itm.slot, itm.it); - } - } - return inv; - } + int slot; + ItemStack it; + String armor; - public static void setArmorItem(PlayerInventory inv, ItemStack item) { - String name = item.getType().name(); - if (name.contains("HELMET")) { - inv.setHelmet(item); - } else if (name.contains("CHESTPLATE")) { - inv.setChestplate(item); - } else if (name.contains("LEGGINGS")) { - inv.setLeggings(item); - } else if (name.contains("BOOTS")) { - inv.setBoots(item); - } - } + /** + * custructor + * + * @param slot an int of the slot of the item + * @param it the item which is deserialized. + */ + public itemStackDeserializeResult(Integer slot, ItemStack it) { + this.slot = slot; + this.it = it; + } - /** - * set all item in the list to their slot in inv - * @param list a list of item with their slot - * @param inv the player inventory - * @return the inv - */ - public static PlayerInventory setItemsToInventory( - @NotNull HashMap list, - PlayerInventory inv - ) { - for (Map.Entry entry : list.entrySet()) { - if (entry.getKey() == 40) { - inv.setHelmet(entry.getValue()); - } else if (entry.getKey() == 39) { - inv.setChestplate(entry.getValue()); - } else if (entry.getKey() == 38) { - inv.setLeggings(entry.getValue()); - } else if (entry.getKey() == 37) { - inv.setBoots(entry.getValue()); - } else if (entry.getKey() == 41) { - inv.setItemInOffHand(entry.getValue()); - } else { - inv.setItem(entry.getKey(), entry.getValue()); - } + public itemStackDeserializeResult( + Integer slot, + ItemStack it, + String armor + ) { + this.slot = slot; + this.it = it; + this.armor = armor; + } } - return inv; - } - /** - * serialize an item - * @param stack the item - * @return a string - * @throws IllegalStateException stream errors - */ - public static @NotNull String itemTo64(ItemStack stack) - throws IllegalStateException { - try { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream( - outputStream - ); - dataOutput.writeObject(stack); + /** + * a class that represent a list of itemstack deserialized. + */ + public static class itemStackListDeserilize { - // Serialize that array - dataOutput.close(); - return Base64Coder.encodeLines(outputStream.toByteArray()); - } catch (Exception e) { - throw new IllegalStateException("Unable to save item stack.", e); - } - } + HashMap inv; - /** - * deserialize item for string to itemstack - * @param data string - * @return itemstack - * @throws IOException stream error - */ - public static ItemStack itemFrom64(String data) throws IOException { - if (data != null) { - return new ItemStack(Material.AIR); + /** + * constructor + * + * @param inv a list of itemstack with their slot. + */ + public itemStackListDeserilize(HashMap inv) { + this.inv = inv; + } } - try { - ByteArrayInputStream inputStream = new ByteArrayInputStream( - Base64Coder.decodeLines(data) - ); - BukkitObjectInputStream dataInput = new BukkitObjectInputStream( - inputStream - ); - try { - return (ItemStack) dataInput.readObject(); - } finally { - dataInput.close(); - } - } catch (ClassNotFoundException e) { - throw new IOException("Unable to decode class types.", e); - } - } - /** - * return in correct naming each attributes, - * @param str the nbt attribute - * @return the good name - */ - @Deprecated - public static @NotNull String attributes(@NotNull String str) { - String stt = ""; - if (str.contains("SPEED")) { - stt = "Speed"; - return stt; + /** + * deserilize items + * + * @param str the serilized item + * @return a deserialized item instance + */ + public static @NotNull Items.itemStackDeserializeResult itemStackDeserialize( + @NotNull String str + ) { + List mapp = Arrays.asList(str.split("@#SLOT#")); + Gson gson = new Gson(); + ItemStack it = new ItemStack(Material.AIR); + Integer slot = 0; + String armor = null; + debug("full item " + str); + for (String s : mapp) { + if (s != null) { + try { + it = itemFrom64(s); + } catch (Exception e) { + if (!s.equals("")) { + debug("slot " + s); + try { + slot = Integer.parseInt(s); + } catch (NumberFormatException nfe) { + armor = s; + } + } + } + } + } + itemStackDeserializeResult itt; + if (armor != null) { + itt = new itemStackDeserializeResult(slot, it, armor); + } else { + itt = new itemStackDeserializeResult(slot, it); + } + return itt; } - if (str.contains("STRENGTH")) { - stt = "Strength"; - return stt; - } - if (str.contains("HEALTH")) { - stt = "Health"; - return stt; - } - if (str.contains("DEFENSE")) { - stt = "Defense"; - return stt; - } else { - stt = "None"; - return stt; - } - } - /** - * set the attribute of an item - * @param main a main instance - * @param str the attribute - * @param nb how many of the attribute - * @param nbti the item - * @return an item - */ - @Deprecated - public static NBTItem setAttributes( - Raxen main, - @NotNull String str, - Integer nb, - NBTItem nbti - ) { - switch (str) { - case "SPEED": - nbti.setInteger(NBT.SPEED, nb); - case "STRENGTH": - nbti.setInteger(NBT.STRENGTH, nb); - case "HEALTH": - nbti.setInteger(NBT.HEALTH, nb); - case "DEFENSE": - nbti.setInteger(NBT.DEFENSE, nb); - case "LUCK": - nbti.setInteger(NBT.LUCK, nb); - case "MANA": - nbti.setInteger(NBT.MANA, nb); - default: - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "Cant set Attributes with an unknown attribute." - ); + /** + * a list of serialized item in one string + * + * @param list the list of all serialized item + * @return a string + */ + public static String listItemStackSerialize(@NotNull List list) { + Gson gson = new Gson(); + String str = ""; + for (String a : list) { + str = str + "@#NEW_ITEM#" + a; + } + return str; } - return nbti; - } - /** - * set the lore from the nbt - * @param it an itemstack - * @return the modified item - */ - @Deprecated - public static @NotNull ItemStack setLoreFromNBT(@NotNull ItemStack it) { - ItemMeta itm = it.getItemMeta(); - List lore = new ArrayList<>(); - for (Component cp : itm.lore()) { - lore.add(cp); + /** + * deserialize item + * + * @param str a list of all serialized item + * @return a list of itemstack with their slot + */ + public static @NotNull HashMap mapItemStackDeserialize( + @NotNull String str + ) { + Gson gson = new Gson(); + List map = Arrays.asList(str.split("@#NEW_ITEM#")); + HashMap inv = new HashMap<>(); + ArrayList items = new ArrayList(); + for (String s : map) { + ItemStack itt; + Integer slot; + if (s != null) { + itemStackDeserializeResult itm = itemStackDeserialize(s); + itt = itm.it; + if (itt != null && itt.getType() != Material.AIR) { + items.add(itt); + } + slot = itm.slot; + inv.put(slot, itt); + } + } + ItemStack[] it = items.toArray(new ItemStack[0]); + return inv; } - NBTItem nbti = new NBTItem(it); - if (nbti.hasTag(NBT.SPEED)) { - if (lore.size() > 2) { - lore.add( - 2, - colorComp(attributes("SPEED")) - .append(Component.text(nbti.getInteger(NBT.SPEED))) - ); - } else { - lore.add( - colorComp(attributes("SPEED")) - .append(Component.text(nbti.getInteger(NBT.SPEED))) - ); - } - } - if (nbti.hasTag(NBT.HEALTH)) { - if (lore.size() > 1) { - lore.add( - 1, - colorComp(attributes("HEALTH")) - .append(Component.text(nbti.getInteger(NBT.HEALTH))) - ); - } else { - lore.add( - colorComp(attributes("HEALTH")) - .append(Component.text(nbti.getInteger(NBT.HEALTH))) - ); - } - } - if (nbti.hasTag(NBT.DEFENSE)) { - if (lore.size() > 3) { - lore.add( - 3, - colorComp(attributes("DEFENSE")) - .append(Component.text(nbti.getInteger(NBT.DEFENSE))) - ); - } else { - lore.add( - colorComp(attributes("DEFENSE")) - .append(Component.text(nbti.getInteger(NBT.DEFENSE))) - ); - } - } - if (nbti.hasTag(NBT.STRENGTH)) { - if (lore.size() > 3) { - lore.add( - 3, - colorComp(attributes("STRENGTH")) - .append(Component.text(nbti.getInteger(NBT.STRENGTH))) - ); - } else { - lore.add( - colorComp(attributes("STRENGTH")) - .append(Component.text(nbti.getInteger(NBT.STRENGTH))) - ); - } - } - if (nbti.hasTag(NBT.MANA)) { - if (lore.size() > 3) { - lore.add( - 3, - colorComp(attributes("MANA")) - .append(Component.text(nbti.getInteger(NBT.MANA))) - ); - } else { - lore.add( - colorComp(attributes("MANA")) - .append(Component.text(nbti.getInteger(NBT.MANA))) - ); - } - } - if (nbti.hasTag(NBT.LUCK)) { - if (lore.size() > 3) { - lore.add( - 3, - colorComp(attributes("LUCK")) - .append(Component.text(nbti.getInteger(NBT.LUCK))) - ); - } else { - lore.add( - colorComp(attributes("LUCK")) - .append(Component.text(nbti.getInteger(NBT.LUCK))) - ); - } - } - itm.lore(lore); - it.setItemMeta(itm); - return it; - } - public static ItemStack customModelData(ItemStack it, Integer in) { - ItemMeta itm = it.getItemMeta(); - itm.setCustomModelData(in); - it.setItemMeta(itm); - return it; - } + /** + * deserialize item + * + * @param str a list of all serialized item + * @return a list of itemstack with their slot + */ + public static @NotNull List listItemStackDeserialize( + @NotNull String str + ) { + Gson gson = new Gson(); + List map = Arrays.asList(str.split("@#NEW_ITEM#")); + List inv = new ArrayList<>(); + ArrayList items = new ArrayList(); + for (String s : map) { + ItemStack itt; + Integer slot; + if (s != null) { + itemStackDeserializeResult itm = itemStackDeserialize(s); + itt = itm.it; + if (itt != null && itt.getType() != Material.AIR) { + items.add(itt); + } + } + } + return inv; + } + + /** + * set all item in the list to their slot in inv + * + * @param list a list of item with their slot + * @param inv the destined inventory + * @return the inv + */ + public static Inventory setItemsToInventory( + @NotNull HashMap list, + Inventory inv + ) { + for (Map.Entry entry : list.entrySet()) { + inv.setItem(entry.getKey(), entry.getValue()); + } + return inv; + } + + /** + * set all item in the list to their slot in inv + * + * @param list a list of item with their slot + * @param inv the destined inventory + * @return the inv + */ + public static PlayerInventory setItemsToInventory( + @NotNull List list, + PlayerInventory inv + ) { + Inventory invv = Bukkit.createInventory(null, 54); + for (itemStackDeserializeResult itm : list) { + if (itm.armor != null) { + setArmorItem(inv, itm.it); + } else { + inv.setItem(itm.slot, itm.it); + } + } + return inv; + } + + public static void setArmorItem(PlayerInventory inv, ItemStack item) { + String name = item.getType().name(); + if (name.contains("HELMET")) { + inv.setHelmet(item); + } else if (name.contains("CHESTPLATE")) { + inv.setChestplate(item); + } else if (name.contains("LEGGINGS")) { + inv.setLeggings(item); + } else if (name.contains("BOOTS")) { + inv.setBoots(item); + } + } + + /** + * set all item in the list to their slot in inv + * + * @param list a list of item with their slot + * @param inv the player inventory + * @return the inv + */ + public static PlayerInventory setItemsToInventory( + @NotNull HashMap list, + PlayerInventory inv + ) { + for (Map.Entry entry : list.entrySet()) { + if (entry.getKey() == 40) { + inv.setHelmet(entry.getValue()); + } else if (entry.getKey() == 39) { + inv.setChestplate(entry.getValue()); + } else if (entry.getKey() == 38) { + inv.setLeggings(entry.getValue()); + } else if (entry.getKey() == 37) { + inv.setBoots(entry.getValue()); + } else if (entry.getKey() == 41) { + inv.setItemInOffHand(entry.getValue()); + } else { + inv.setItem(entry.getKey(), entry.getValue()); + } + } + return inv; + } + + /** + * serialize an item + * + * @param stack the item + * @return a string + * @throws IllegalStateException stream errors + */ + public static @NotNull String itemTo64(ItemStack stack) + throws IllegalStateException { + try { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream( + outputStream + ); + dataOutput.writeObject(stack); + + // Serialize that array + dataOutput.close(); + return Base64Coder.encodeLines(outputStream.toByteArray()); + } catch (Exception e) { + throw new IllegalStateException("Unable to save item stack.", e); + } + } + + /** + * deserialize item for string to itemstack + * + * @param data string + * @return itemstack + * @throws IOException stream error + */ + public static ItemStack itemFrom64(String data) throws IOException { + if (data != null) { + return new ItemStack(Material.AIR); + } + try { + ByteArrayInputStream inputStream = new ByteArrayInputStream( + Base64Coder.decodeLines(data) + ); + BukkitObjectInputStream dataInput = new BukkitObjectInputStream( + inputStream + ); + try { + return (ItemStack) dataInput.readObject(); + } finally { + dataInput.close(); + } + } catch (ClassNotFoundException e) { + throw new IOException("Unable to decode class types.", e); + } + } + + /** + * return in correct naming each attributes, + * + * @param str the nbt attribute + * @return the good name + */ + @Deprecated + public static @NotNull String attributes(@NotNull String str) { + String stt = ""; + if (str.contains("SPEED")) { + stt = "Speed"; + return stt; + } + if (str.contains("STRENGTH")) { + stt = "Strength"; + return stt; + } + if (str.contains("HEALTH")) { + stt = "Health"; + return stt; + } + if (str.contains("DEFENSE")) { + stt = "Defense"; + return stt; + } else { + stt = "None"; + return stt; + } + } + + /** + * set the attribute of an item + * + * @param main a main instance + * @param str the attribute + * @param nb how many of the attribute + * @param nbti the item + * @return an item + */ + @Deprecated + public static NBTItem setAttributes( + Raxen main, + @NotNull String str, + Integer nb, + NBTItem nbti + ) { + switch (str) { + case "SPEED": + nbti.setInteger(NBTNames.SPEED, nb); + case "STRENGTH": + nbti.setInteger(NBTNames.STRENGTH, nb); + case "HEALTH": + nbti.setInteger(NBTNames.HEALTH, nb); + case "DEFENSE": + nbti.setInteger(NBTNames.DEFENSE, nb); + case "LUCK": + nbti.setInteger(NBTNames.LUCK, nb); + case "MANA": + nbti.setInteger(NBTNames.MANA, nb); + default: + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "Cant set Attributes with an unknown attribute." + ); + } + return nbti; + } + + /** + * set the lore from the nbt + * + * @param it an itemstack + * @return the modified item + */ + @Deprecated + public static @NotNull ItemStack setLoreFromNBT(@NotNull ItemStack it) { + ItemMeta itm = it.getItemMeta(); + List lore = new ArrayList<>(); + for (Component cp : itm.lore()) { + lore.add(cp); + } + NBTItem nbti = new NBTItem(it); + if (nbti.hasTag(NBTNames.SPEED)) { + if (lore.size() > 2) { + lore.add( + 2, + colorComp(attributes("SPEED")) + .append(Component.text(nbti.getInteger(NBTNames.SPEED))) + ); + } else { + lore.add( + colorComp(attributes("SPEED")) + .append(Component.text(nbti.getInteger(NBTNames.SPEED))) + ); + } + } + if (nbti.hasTag(NBTNames.HEALTH)) { + if (lore.size() > 1) { + lore.add( + 1, + colorComp(attributes("HEALTH")) + .append( + Component.text(nbti.getInteger(NBTNames.HEALTH)) + ) + ); + } else { + lore.add( + colorComp(attributes("HEALTH")) + .append( + Component.text(nbti.getInteger(NBTNames.HEALTH)) + ) + ); + } + } + if (nbti.hasTag(NBTNames.DEFENSE)) { + if (lore.size() > 3) { + lore.add( + 3, + colorComp(attributes("DEFENSE")) + .append( + Component.text(nbti.getInteger(NBTNames.DEFENSE)) + ) + ); + } else { + lore.add( + colorComp(attributes("DEFENSE")) + .append( + Component.text(nbti.getInteger(NBTNames.DEFENSE)) + ) + ); + } + } + if (nbti.hasTag(NBTNames.STRENGTH)) { + if (lore.size() > 3) { + lore.add( + 3, + colorComp(attributes("STRENGTH")) + .append( + Component.text(nbti.getInteger(NBTNames.STRENGTH)) + ) + ); + } else { + lore.add( + colorComp(attributes("STRENGTH")) + .append( + Component.text(nbti.getInteger(NBTNames.STRENGTH)) + ) + ); + } + } + if (nbti.hasTag(NBTNames.MANA)) { + if (lore.size() > 3) { + lore.add( + 3, + colorComp(attributes("MANA")) + .append(Component.text(nbti.getInteger(NBTNames.MANA))) + ); + } else { + lore.add( + colorComp(attributes("MANA")) + .append(Component.text(nbti.getInteger(NBTNames.MANA))) + ); + } + } + if (nbti.hasTag(NBTNames.LUCK)) { + if (lore.size() > 3) { + lore.add( + 3, + colorComp(attributes("LUCK")) + .append(Component.text(nbti.getInteger(NBTNames.LUCK))) + ); + } else { + lore.add( + colorComp(attributes("LUCK")) + .append(Component.text(nbti.getInteger(NBTNames.LUCK))) + ); + } + } + itm.lore(lore); + it.setItemMeta(itm); + return it; + } + + public static ItemStack customModelData(ItemStack it, Integer in) { + ItemMeta itm = it.getItemMeta(); + itm.setCustomModelData(in); + it.setItemMeta(itm); + return it; + } } diff --git a/src/main/java/me/unurled/raxen/utils/Math.java b/src/main/java/me/unurled/raxen/utils/Math.java new file mode 100644 index 0000000..26fb175 --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/Math.java @@ -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; + } + +} diff --git a/src/main/java/me/unurled/raxen/utils/RayTrace.java b/src/main/java/me/unurled/raxen/utils/RayTrace.java index de7a22e..4d8aed5 100644 --- a/src/main/java/me/unurled/raxen/utils/RayTrace.java +++ b/src/main/java/me/unurled/raxen/utils/RayTrace.java @@ -8,119 +8,127 @@ import org.bukkit.util.Vector; public class RayTrace { - //origin = start position - //direction = direction in which the raytrace will go - Vector origin, direction; + //origin = start position + //direction = direction in which the raytrace will go + Vector origin, direction; - public RayTrace(Vector origin, Vector direction) { - this.origin = origin; - this.direction = direction; - } + public RayTrace(Vector origin, Vector direction) { + this.origin = origin; + this.direction = direction; + } - //get a point on the raytrace at X blocks away - public Vector getPostion(double blocksAway) { - return origin.clone().add(direction.clone().multiply(blocksAway)); - } + //get a point on the raytrace at X blocks away + public Vector getPostion(double blocksAway) { + return origin.clone().add(direction.clone().multiply(blocksAway)); + } - //checks if a position is on contained within the position - public boolean isOnLine(Vector position) { - double t = (position.getX() - origin.getX()) / direction.getX(); - if ( - position.getBlockY() == origin.getY() + (t * direction.getY()) && - position.getBlockZ() == origin.getZ() + (t * direction.getZ()) + //checks if a position is on contained within the position + public boolean isOnLine(Vector position) { + double t = (position.getX() - origin.getX()) / direction.getX(); + if ( + position.getBlockY() == origin.getY() + (t * direction.getY()) && + position.getBlockZ() == origin.getZ() + (t * direction.getZ()) + ) { + return true; + } + return false; + } + + //get all postions on a raytrace + public ArrayList traverse(double blocksAway, double accuracy) { + ArrayList positions = new ArrayList<>(); + for (double d = 0; d <= blocksAway; d += accuracy) { + positions.add(getPostion(d)); + } + return positions; + } + + //intersection detection for current raytrace with return + public Vector positionOfIntersection( + Vector min, + Vector max, + double blocksAway, + double accuracy ) { - return true; + ArrayList positions = traverse(blocksAway, accuracy); + for (Vector position : positions) { + if (intersects(position, min, max)) { + return position; + } + } + return null; } - return false; - } - //get all postions on a raytrace - public ArrayList traverse(double blocksAway, double accuracy) { - ArrayList positions = new ArrayList<>(); - for (double d = 0; d <= blocksAway; d += accuracy) { - positions.add(getPostion(d)); + //intersection detection for current raytrace + public boolean intersects( + Vector min, + Vector max, + double blocksAway, + double accuracy + ) { + ArrayList positions = traverse(blocksAway, accuracy); + for (Vector position : positions) { + if (intersects(position, min, max)) { + return true; + } + } + return false; } - return positions; - } - //intersection detection for current raytrace with return - public Vector positionOfIntersection( - Vector min, - Vector max, - double blocksAway, - double accuracy - ) { - ArrayList positions = traverse(blocksAway, accuracy); - for (Vector position : positions) { - if (intersects(position, min, max)) { - return position; - } + //bounding box instead of vector + public Vector positionOfIntersection( + BoundingBox boundingBox, + double blocksAway, + double accuracy + ) { + ArrayList positions = traverse(blocksAway, accuracy); + for (Vector position : positions) { + if ( + intersects(position, boundingBox.getMin(), boundingBox.getMax()) + ) { + return position; + } + } + return null; } - return null; - } - //intersection detection for current raytrace - public boolean intersects( - Vector min, - Vector max, - double blocksAway, - double accuracy - ) { - ArrayList positions = traverse(blocksAway, accuracy); - for (Vector position : positions) { - if (intersects(position, min, max)) { + //bounding box instead of vector + public boolean intersects( + BoundingBox boundingBox, + double blocksAway, + double accuracy + ) { + ArrayList positions = traverse(blocksAway, accuracy); + for (Vector position : positions) { + if ( + intersects(position, boundingBox.getMin(), boundingBox.getMax()) + ) { + return true; + } + } + return false; + } + + //general intersection detection + public static boolean intersects(Vector position, Vector min, Vector max) { + if (position.getX() < min.getX() || position.getX() > max.getX()) { + return false; + } else if ( + position.getY() < min.getY() || position.getY() > max.getY() + ) { + return false; + } else if ( + position.getZ() < min.getZ() || position.getZ() > max.getZ() + ) { + return false; + } return true; - } } - return false; - } - //bounding box instead of vector - public Vector positionOfIntersection( - BoundingBox boundingBox, - double blocksAway, - double accuracy - ) { - ArrayList positions = traverse(blocksAway, accuracy); - for (Vector position : positions) { - if (intersects(position, boundingBox.getMin(), boundingBox.getMax())) { - return position; - } + //debug / effects + public void highlight(World world, double blocksAway, double accuracy) { + for (Vector position : traverse(blocksAway, accuracy)) { + world.playEffect(position.toLocation(world), Effect.BOW_FIRE, 0); + } } - return null; - } - - //bounding box instead of vector - public boolean intersects( - BoundingBox boundingBox, - double blocksAway, - double accuracy - ) { - ArrayList positions = traverse(blocksAway, accuracy); - for (Vector position : positions) { - if (intersects(position, boundingBox.getMin(), boundingBox.getMax())) { - return true; - } - } - return false; - } - - //general intersection detection - public static boolean intersects(Vector position, Vector min, Vector max) { - if (position.getX() < min.getX() || position.getX() > max.getX()) { - return false; - } else if (position.getY() < min.getY() || position.getY() > max.getY()) { - return false; - } else if (position.getZ() < min.getZ() || position.getZ() > max.getZ()) { - return false; - } - return true; - } - - //debug / effects - public void highlight(World world, double blocksAway, double accuracy) { - for (Vector position : traverse(blocksAway, accuracy)) { - world.playEffect(position.toLocation(world), Effect.BOW_FIRE, 0); - } - } } diff --git a/src/main/java/me/unurled/raxen/utils/Reload.java b/src/main/java/me/unurled/raxen/utils/Reload.java index b44b310..d1308f6 100644 --- a/src/main/java/me/unurled/raxen/utils/Reload.java +++ b/src/main/java/me/unurled/raxen/utils/Reload.java @@ -20,65 +20,65 @@ import org.bukkit.event.server.ServerListPingEvent; public class Reload implements Listener { - private static FileConfiguration config = Objects - .requireNonNull(Bukkit.getPluginManager().getPlugin("Raxen")) - .getConfig(); - private static boolean serverReloading = true; + private static FileConfiguration config = Objects + .requireNonNull(Bukkit.getPluginManager().getPlugin("Raxen")) + .getConfig(); + private static boolean serverReloading = true; - /** - * kick all online players - */ - public static void kickAll() { - for (Player player : Bukkit.getOnlinePlayers()) { - player.kick( - colorTextComp( - Raxen.getPrefix() + - "\nServer is Restarting\n Please Wait a few Minutes to reconnect." - ) - ); - } - } - - /** - * change the server ping list - * @param e the server ping list event - */ - @EventHandler - public static void pingList(ServerListPingEvent e) { - try { - setPingList(e); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - - /** - * update ping list - * @param e the ping event - * @throws IOException file writing - */ - public static void setPingList(ServerListPingEvent e) throws IOException { - if (serverReloading) { - List newLines = new ArrayList<>(); - for (String line : Files.readAllLines( - Paths.get("server.properties"), - StandardCharsets.UTF_8 - )) { - if (line.contains("motd=")) { - newLines.add("motd=" + config.get("motd-reload")); - } else { - newLines.add(line); + /** + * kick all online players + */ + public static void kickAll() { + for (Player player : Bukkit.getOnlinePlayers()) { + player.kick( + colorTextComp( + Raxen.getPrefix() + + "\nServer is Restarting\n Please Wait a few Minutes to reconnect." + ) + ); + } + } + + /** + * change the server ping list + * @param e the server ping list event + */ + @EventHandler + public static void pingList(ServerListPingEvent e) { + try { + setPingList(e); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + /** + * update ping list + * @param e the ping event + * @throws IOException file writing + */ + public static void setPingList(ServerListPingEvent e) throws IOException { + if (serverReloading) { + List newLines = new ArrayList<>(); + for (String line : Files.readAllLines( + Paths.get("server.properties"), + StandardCharsets.UTF_8 + )) { + if (line.contains("motd=")) { + newLines.add("motd=" + config.get("motd-reload")); + } else { + newLines.add(line); + } + } + Files.write( + Paths.get("server.properties"), + newLines, + StandardCharsets.UTF_8 + ); + + e.motd(Component.text((String) config.get("motd-reload"))); + } else { + e.motd(Component.text((String) config.get("motd"))); } - } - Files.write( - Paths.get("server.properties"), - newLines, - StandardCharsets.UTF_8 - ); - - e.motd(Component.text((String) config.get("motd-reload"))); - } else { - e.motd(Component.text((String) config.get("motd"))); } - } } diff --git a/src/main/java/me/unurled/raxen/utils/TabApi.java b/src/main/java/me/unurled/raxen/utils/TabApi.java index 8314f00..a2763f1 100644 --- a/src/main/java/me/unurled/raxen/utils/TabApi.java +++ b/src/main/java/me/unurled/raxen/utils/TabApi.java @@ -8,28 +8,28 @@ import me.unurled.raxen.Raxen; public class TabApi { - private ProtocolManager protocolManager; - private Raxen main; + private ProtocolManager protocolManager; + private Raxen main; - /** - * instance of tabapi - * @param main running instance of main - */ - public TabApi(Raxen main) { - this.main = main; - this.protocolManager = main.getProtocolManager(); - } + /** + * instance of tabapi + * @param main running instance of main + */ + public TabApi(Raxen main) { + this.main = main; + this.protocolManager = main.getProtocolManager(); + } - /** - * stuff for protocolmanager, used to add player and infos to the ping list - */ - public void packetListener() { - protocolManager.addPacketListener( - new PacketAdapter( - main, - ListenerPriority.NORMAL, - PacketType.Play.Server.PLAYER_INFO - ) {} - ); - } + /** + * stuff for protocolmanager, used to add player and infos to the ping list + */ + public void packetListener() { + protocolManager.addPacketListener( + new PacketAdapter( + main, + ListenerPriority.NORMAL, + PacketType.Play.Server.PLAYER_INFO + ) {} + ); + } } diff --git a/src/main/java/me/unurled/raxen/utils/Tags.java b/src/main/java/me/unurled/raxen/utils/Tags.java new file mode 100644 index 0000000..bb4fbfe --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/Tags.java @@ -0,0 +1,128 @@ +package me.unurled.raxen.utils; + +import eu.decentsoftware.holograms.api.DHAPI; +import eu.decentsoftware.holograms.api.holograms.Hologram; +import eu.decentsoftware.holograms.api.holograms.HologramLine; +import eu.decentsoftware.holograms.api.holograms.HologramPage; +import eu.decentsoftware.holograms.api.utils.Common; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.entity.other.RaxenEntity; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import org.apache.commons.lang.Validate; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +public class Tags { + + public static final double STEP = 0.5; + + 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))); + DHAPI.createHologram(name, loc, List.of(name)); + new BukkitRunnable() { + @Override + public void run() { + DHAPI.removeHologram(name); + } + }.runTaskLater(((Raxen) Objects.requireNonNull( + Bukkit.getPluginManager() + .getPlugin("Raxen"))).getPlugin(), (long) (durationSec * 20)); + } + + public static void makeFloatingTextStylishWhenHit(Location damager, Location victim, + String name, String... text) { + ArrayList loc = getParabolicCurve(victim, damager); + Hologram holo = DHAPI.createHologram(name, victim, Arrays.stream(text).toList()); + for (Location location : loc) { + DHAPI.moveHologram(holo, location); + if (loc.indexOf(location) == loc.size() - 1) { + new BukkitRunnable() { + @Override + public void run() { + DHAPI.removeHologram(name); + } + }.runTaskLater(((Raxen) Objects.requireNonNull( + Bukkit.getPluginManager() + .getPlugin("Raxen"))).getPlugin(), 20); + } + } + } + + public static ArrayList getParabolicCurve(Location start, Location end) { + ArrayList results = new ArrayList<>(); + + Vector line = end.clone().subtract(start).toVector(); + line.setY(start.getY()); + double length = line.length(); + line.normalize(); + + for (double x = 0; x < length; x += STEP) { + double a = -1.0 / x; + double y = a * java.lang.Math.pow(x, 2) + x; + Location point = start.clone(); + point.add(line.multiply(x)).setY(point.getY() + y); + results.add(point); + line.multiply(1 / x); + } + + return results; + } + + public static Hologram createNameTag(Raxen main, Entity entity) { + RaxenEntity e = main.getManager().getEntityManager().getEntity(entity); + + // TODO: implement this... + + if (e != null) { + TextComponent txt = Utils.colorTextComp(e.getFullName()); + return createHologram(e.getName() + UUID.randomUUID(), entity.getLocation(), + false, txt); + } else { + // register entity... + } + return null; + } + + public static Hologram createHologram(String name, Location location, boolean saveToFile, + TextComponent lines) throws IllegalArgumentException { + Validate.notNull(name); + Validate.notNull(location); + + if (!name.matches(Common.NAME_REGEX)) { + throw new IllegalArgumentException(String.format( + "Hologram name can only contain alphanumeric characters, underscores and dashes! (%s)", + name)); + } + + if (Hologram.getCachedHologramNames().contains(name)) { + throw new IllegalArgumentException( + String.format("Hologram with that name already exists! (%s)", name)); + } + + Hologram hologram = new Hologram(name, location, saveToFile); + HologramPage page = hologram.getPage(0); + if (lines != null) { + for (Component line : ComponentSplit.split(lines, Component.newline())) { + HologramLine hologramLine = new HologramLine(page, page.getNextLineLocation(), + Utils.textCompToString(line)); + page.addLine(hologramLine); + } + } + hologram.showAll(); + hologram.save(); + return hologram; + } + +} diff --git a/src/main/java/me/unurled/raxen/utils/Utils.java b/src/main/java/me/unurled/raxen/utils/Utils.java index 6f3e936..31f7181 100644 --- a/src/main/java/me/unurled/raxen/utils/Utils.java +++ b/src/main/java/me/unurled/raxen/utils/Utils.java @@ -1,7 +1,11 @@ package me.unurled.raxen.utils; 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 net.kyori.adventure.text.Component; 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.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; +import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; @@ -22,456 +26,518 @@ import org.jetbrains.annotations.NotNull; public class Utils { - /** - * convert a string with mini-message formatting to a colored Component - * @param stringToComponent a string - * @return a component - */ - public static @NotNull Component colorComp(String stringToComponent) { - MiniMessage minimessage = MiniMessage - .builder() - .tags( - TagResolver - .builder() - .resolver(StandardTags.color()) - .resolver(StandardTags.decorations()) - .resolver(StandardTags.reset()) - .build() - ) - .build(); - return minimessage.deserialize(stringToComponent); - } - - /** - * convert a string with mini-message formatting to a colored TextComponent - * @param stringToComponent a string - * @return a component - */ - public static @NotNull TextComponent colorTextComp(String stringToComponent) { - MiniMessage minimessage = MiniMessage - .builder() - .tags( - TagResolver - .builder() - .resolver(StandardTags.color()) - .resolver(StandardTags.decorations()) - .resolver(StandardTags.reset()) - .build() - ) - .build(); - return (TextComponent) minimessage.deserialize(stringToComponent); - } - - /** - * change the mini-message colorized format to the legacy format, with § - * @param string a string - * @return a colored string - */ - public static @NotNull String colorString(String string) { - MiniMessage minimessage = MiniMessage - .builder() - .tags( - TagResolver - .builder() - .resolver(StandardTags.color()) - .resolver(StandardTags.decorations()) - .resolver(StandardTags.reset()) - .build() - ) - .build(); - return LegacyComponentSerializer - .legacyAmpersand() - .serialize(minimessage.deserialize(string)); - } - - /** - * change the mini-message colorized format to the legacy format, with § - * @param string a string - * @return a String - */ - public static String coloredString(String string) { - return LegacyComponentSerializer - .legacyAmpersand() - .serialize(colorComp(string)); - } - - /** - * transform a text-component to a string - * @param comp a string - * @return a String - */ - public static String textCompToString(TextComponent comp) { - return LegacyComponentSerializer.legacyAmpersand().serialize(comp); - } - - /** - * transform a text-component to a string - * @param comp a string - * @return a String - */ - public static String textCompToString(Component comp) { - return LegacyComponentSerializer.legacyAmpersand().serialize(comp); - } - - public static void comp(Component comp) { - LegacyComponentSerializer.legacyAmpersand().serialize(comp); - } - - /** - * Strips all color from a string. - * @param string the string that wants to be decolored. - * @return a decolored string - */ - public static String decolor(String string) { - return MiniMessage.miniMessage().stripTags(string); - } - - /** - * transform a new line to a component - * @param string - * @return - */ - public static Component stringToComp(String string) { - return Component.text(string); - } - - /** - * debug output to console if debug is set to true in config - * @param main Raxen instance - * @param strings output to console - */ - public static void debug(Raxen main, String... strings) { - FileConfiguration config = main.getConfig(); - if (config.getBoolean("debug")) { - for (String string : strings) { - main.getLogger().info(string); - } + /** + * convert a string with mini-message formatting to a colored Component + * + * @param stringToComponent a string + * @return a component + */ + public static @NotNull Component colorComp(String stringToComponent) { + MiniMessage minimessage = MiniMessage + .builder() + .tags( + TagResolver + .builder() + .resolver(StandardTags.color()) + .resolver(StandardTags.decorations()) + .resolver(StandardTags.reset()) + .build() + ) + .build(); + return minimessage.deserialize(stringToComponent); } - } - /** - * debug output to console if debug is set to true in config - * @param strings output to console - */ - public static void debug(String... strings) { - Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); - assert main != null; - FileConfiguration config = main.getConfig(); - if (config.getBoolean("debug")) { - for (String string : strings) { - main.getLogger().info(string); - } + /** + * convert a string with mini-message formatting to a colored TextComponent + * + * @param stringToComponent a string + * @return a component + */ + public static @NotNull TextComponent colorTextComp( + String stringToComponent + ) { + MiniMessage minimessage = MiniMessage + .builder() + .tags( + TagResolver + .builder() + .resolver(StandardTags.color()) + .resolver(StandardTags.decorations()) + .resolver(StandardTags.reset()) + .build() + ) + .build(); + return (TextComponent) minimessage.deserialize(stringToComponent); } - } - /** - * debug output to console if debug is set to true in config - * @param config main file config - * @param strings ouput to console - */ - public static void debug(FileConfiguration config, String... strings) { - Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); - assert main != null; - if (config.getBoolean("debug")) { - for (String string : strings) { - main.getLogger().info(string); - } + /** + * change the mini-message colorized format to the legacy format, with § + * + * @param string a string + * @return a colored string + */ + public static @NotNull String colorString(String string) { + MiniMessage minimessage = MiniMessage + .builder() + .tags( + TagResolver + .builder() + .resolver(StandardTags.color()) + .resolver(StandardTags.decorations()) + .resolver(StandardTags.reset()) + .build() + ) + .build(); + return LegacyComponentSerializer + .legacyAmpersand() + .serialize(minimessage.deserialize(string)); } - } - /** - * debug output to console if debug is set to true in config - * @param comps output to console - */ - public static void debug(TextComponent... comps) { - Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); - assert main != null; - FileConfiguration config = main.getConfig(); - if (config.getBoolean("debug")) { - for (TextComponent comp : comps) { - main.getLogger().info(textCompToString(comp)); - } + /** + * change the mini-message colorized format to the legacy format, with § + * + * @param string a string + * @return a String + */ + public static String coloredString(String string) { + return LegacyComponentSerializer + .legacyAmpersand() + .serialize(colorComp(string)); } - } - /** - * Log the strings to the console - * @param main a main instance running - * @param strings string that want to be outputted. - */ - public static void log(Raxen main, String... strings) { - for (String string : strings) { - main.getLogger().info(string); + /** + * transform a text-component to a string + * + * @param comp a string + * @return a String + */ + public static String textCompToString(TextComponent comp) { + return LegacyComponentSerializer.legacyAmpersand().serialize(comp); } - } - /** - * Log the strings to the console - * @param strings string that want to be outputted. - */ - public static void log(String... strings) { - Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); - assert main != null; - for (String string : strings) { - main.getLogger().info(string); + /** + * transform a text-component to a string + * + * @param comp a string + * @return a String + */ + public static String textCompToString(Component comp) { + return LegacyComponentSerializer.legacyAmpersand().serialize(comp); } - } - /** - * Log the TextComponent to the console - * @param comp TextComponent that want to be outputted. - */ - public static void log(TextComponent... comp) { - Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); - assert main != null; - for (TextComponent string : comp) { - main.getServer().sendMessage(string); + public static String comptToPlainText(Component comp) { + return PlainTextComponentSerializer.plainText().serialize(comp); } - } - /** - * Warns strings to the console using the logger - * @param strings to warn message - */ - public static void warn(String... strings) { - Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); - assert main != null; - for (String string : strings) { - main.getLogger().warning(string); + public static void comp(Component comp) { + LegacyComponentSerializer.legacyAmpersand().serialize(comp); } - } - /** - * Warns strings to the console using the logger - * @param strings to warn message - * @param main a running instance - */ - public static void warn(Raxen main, String... strings) { - for (String string : strings) { - main.getLogger().warning(string); + /** + * Strips all color from a string. + * + * @param string the string that wants to be decolored. + * @return a decolored string + */ + public static String decolor(String string) { + return MiniMessage.miniMessage().stripTags(string); } - } - /** - * Error strings to the console using the logger - * @param strings to error message - */ - public static void error(String... strings) { - Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); - assert main != null; - for (String string : strings) { - main.getLogger().severe(string); + /** + * transform a new line to a component + * + * @param string + * @return + */ + public static Component stringToComp(String string) { + return Component.text(string); } - } - /** - * Error strings to the console using the logger - * @param strings to error message - * @param main a main instance running - */ - public static void error(Raxen main, String... strings) { - for (String string : strings) { - main.getLogger().severe(string); + /** + * debug output to console if debug is set to true in config + * + * @param main Raxen instance + * @param strings output to console + */ + public static void debug(Raxen main, String... strings) { + FileConfiguration config = main.getConfig(); + if (config.getBoolean("debug")) { + for (String string : strings) { + main.getLogger().info(string); + } + } } - } - /** - * message strings to player. - * @param player an online player - * @param strings strings that will be sent. - */ - public static void msgPlayer(Player player, String... strings) { - for (String string : strings) { - player.sendMessage(colorComp(string)); + /** + * debug output to console if debug is set to true in config + * + * @param strings output to console + */ + public static void debug(String... strings) { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + assert main != null; + FileConfiguration config = main.getConfig(); + if (config.getBoolean("debug")) { + for (String string : strings) { + main.getLogger().info(string); + } + } } - } - /** - * message textComponent to player. - * @param player an online player - * @param comp textComponent that will be sent. - */ - public static void msgPlayer(Player player, TextComponent comp) { - player.sendMessage( - colorComp(PlainTextComponentSerializer.plainText().serialize(comp)) - ); - } - - /** - * message the command sender with textComponent. - * @param player the command sender - * @param textComponent message - */ - public static void msgSender( - CommandSender player, - TextComponent textComponent - ) { - player.sendMessage( - colorComp( - PlainTextComponentSerializer.plainText().serialize(textComponent) - ) - ); - } - - /** - * message the command sender with strings. - * @param player the command sender - * @param strings message - */ - public static void msgSender(CommandSender player, String... strings) { - for (String string : strings) { - player.sendMessage(colorComp(string)); + /** + * debug output to console if debug is set to true in config + * + * @param config main file config + * @param strings ouput to console + */ + public static void debug(FileConfiguration config, String... strings) { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + assert main != null; + if (config.getBoolean("debug")) { + for (String string : strings) { + main.getLogger().info(string); + } + } } - } - /** - * fill an inventory with grey glass pane. - * @param inv an inventory - * @return the inventory filled - */ - public static Inventory fillGreyPane(Inventory inv) { - int in = -1; - for (ItemStack it : inv) { - in++; - if (it == null || it.getType() == Material.AIR) { - inv.setItem(in, Items.greyPane()); - } + /** + * debug output to console if debug is set to true in config + * + * @param comps output to console + */ + public static void debug(TextComponent... comps) { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + assert main != null; + FileConfiguration config = main.getConfig(); + if (config.getBoolean("debug")) { + for (TextComponent comp : comps) { + main.getLogger().info(textCompToString(comp)); + } + } } - return inv; - } - /** - * output message when player have no perms - * @return a component - */ - public static Component noPerms() { - return colorComp("You don't have the permission to use this feature."); - } + /** + * Log the strings to the console + * + * @param main a main instance running + * @param strings string that want to be outputted. + */ + public static void log(Raxen main, String... strings) { + for (String string : strings) { + main.getLogger().info(string); + } + } - /** - * error message output to player - * @return a component - */ - public static Component error() { - return colorComp( - "An Error has occurred. Please retry or contact an Admin." - ); - } + /** + * Log the strings to the console + * + * @param strings string that want to be outputted. + */ + public static void log(String... strings) { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + assert main != null; + for (String string : strings) { + main.getLogger().info(string); + } + } - public static void errorConsoleSender(CommandSender sender) { - sender.sendMessage( - colorComp("Can't use this command as the console.") - ); - } + /** + * Log the TextComponent to the console + * + * @param comp TextComponent that want to be outputted. + */ + public static void log(TextComponent... comp) { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + assert main != null; + for (TextComponent string : comp) { + main.getServer().sendMessage(string); + } + } - /** - * Copy folder from sourceDirectoryLocation to destinationDirectoryLocation - * @param sourceDirectoryLocation the source directory - * @param destinationDirectoryLocation the copy location - * @throws IOException exception with coping data - */ - public static void copyDirectory( - String sourceDirectoryLocation, - String destinationDirectoryLocation - ) throws IOException { - Files - .walk(Paths.get(sourceDirectoryLocation)) - .forEach(source -> { - Path destination = Paths.get( - destinationDirectoryLocation, - source.toString().substring(sourceDirectoryLocation.length()) + /** + * Warns strings to the console using the logger + * + * @param strings to warn message + */ + public static void warn(String... strings) { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + assert main != null; + for (String string : strings) { + main.getLogger().warning(string); + } + } + + /** + * Warns strings to the console using the logger + * + * @param strings to warn message + * @param main a running instance + */ + public static void warn(Raxen main, String... strings) { + for (String string : strings) { + main.getLogger().warning(string); + } + } + + /** + * Error strings to the console using the logger + * + * @param strings to error message + */ + public static void error(String... strings) { + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + assert main != null; + for (String string : strings) { + main.getLogger().severe(string); + } + } + + /** + * Error strings to the console using the logger + * + * @param strings to error message + * @param main a main instance running + */ + public static void error(Raxen main, String... strings) { + for (String string : strings) { + main.getLogger().severe(string); + } + } + + /** + * message strings to player. + * + * @param player an online player + * @param strings strings that will be sent. + */ + public static void msgPlayer(Player player, String... strings) { + for (String string : strings) { + player.sendMessage(colorComp(string)); + } + } + + /** + * message textComponent to player. + * + * @param player an online player + * @param comp textComponent that will be sent. + */ + public static void msgPlayer(Player player, TextComponent comp) { + player.sendMessage( + colorComp(PlainTextComponentSerializer.plainText().serialize(comp)) ); + } + + /** + * message the command sender with textComponent. + * + * @param player the command sender + * @param textComponent message + */ + public static void msgSender( + CommandSender player, + TextComponent textComponent + ) { + player.sendMessage( + colorComp( + PlainTextComponentSerializer + .plainText() + .serialize(textComponent) + ) + ); + } + + /** + * message the command sender with strings. + * + * @param player the command sender + * @param strings message + */ + public static void msgSender(CommandSender player, String... strings) { + for (String string : strings) { + player.sendMessage(colorComp(string)); + } + } + + /** + * fill an inventory with grey glass pane. + * + * @param inv an inventory + * @return the inventory filled + */ + public static Inventory fillGreyPane(Inventory inv) { + int in = -1; + for (ItemStack it : inv) { + in++; + if (it == null || it.getType() == Material.AIR) { + inv.setItem(in, Items.greyPane()); + } + } + return inv; + } + + /** + * output message when player have no perms + * + * @return a component + */ + public static Component noPerms() { + return colorComp( + "You don't have the permission to use this feature." + ); + } + + /** + * error message output to player + * + * @return a component + */ + public static Component error() { + return colorComp( + "An Error has occurred. Please retry or contact an Admin." + ); + } + + public static void errorConsoleSender(CommandSender sender) { + sender.sendMessage( + colorComp("Can't use this command as the console.") + ); + } + + /** + * Copy folder from sourceDirectoryLocation to destinationDirectoryLocation + * + * @param sourceDirectoryLocation the source directory + * @param destinationDirectoryLocation the copy location + * @throws IOException exception with coping data + */ + public static void copyDirectory( + String sourceDirectoryLocation, + String destinationDirectoryLocation + ) throws IOException { + Files + .walk(Paths.get(sourceDirectoryLocation)) + .forEach(source -> { + Path destination = Paths.get( + destinationDirectoryLocation, + source + .toString() + .substring(sourceDirectoryLocation.length()) + ); + try { + Files.copy(source, destination); + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + + /** + * remove path directory + * + * @param path removed folder + * @throws IOException error with handling data + */ + public static void removeDirectory(Path path) throws IOException { + if (Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) { + try ( + DirectoryStream entries = Files.newDirectoryStream(path) + ) { + for (Path entry : entries) { + removeDirectory(entry); + } + } + } + Files.delete(path); + } + + public static boolean isInt(String strNum) { + if (strNum == null) { + return false; + } try { - Files.copy(source, destination); - } catch (IOException e) { - e.printStackTrace(); + double d = Integer.parseInt(strNum); + } catch (NumberFormatException nfe) { + return false; } - }); - } + return true; + } - /** - * remove path directory - * @param path removed folder - * @throws IOException error with handling data - */ - public static void removeDirectory(Path path) throws IOException { - if (Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) { - try (DirectoryStream entries = Files.newDirectoryStream(path)) { - for (Path entry : entries) { - removeDirectory(entry); + /** + * get a string from args which contains "" + * + * @param args a string list + * @return a string + */ + public static String getStringFromArg(String[] args) { + String result = ""; + boolean getFColon = false; + boolean getLColon = false; + for (String arg : args) { + if (arg.contains("\"")) { + if (!getFColon) { + getFColon = true; + } else if (getFColon && !getLColon) { + result += arg.replace("\"", ""); + return result; + } else if (getFColon) { + result += arg.replace("\"", ""); + } + } } - } + return result; } - Files.delete(path); - } - public static boolean isInt(String strNum) { - if (strNum == null) { - return false; - } - try { - double d = Integer.parseInt(strNum); - } catch (NumberFormatException nfe) { - return false; - } - return true; - } - - /** - * get a string from args which contains "" - * @param args a string list - * @return a string - */ - public static String getStringFromArg(String[] args) { - String result = ""; - boolean getFColon = false; - boolean getLColon = false; - for (String arg : args) { - if (arg.contains("\"")) { - if (!getFColon) { - getFColon = true; - } else if (getFColon && !getLColon) { - result += arg.replace("\"", ""); - return result; - } else if (getFColon) { - result += arg.replace("\"", ""); + /** + * search if there is an args that is null or do not exist + * + * @param args a list of string + * @param n a number of entries a list should have + * @return a boolean if true or not + */ + public static Boolean validateArgs(String[] args, Integer n) { + for (int i = 0; i < n; i++) { + if (args.length < n - 1) { + return false; + } else if (args[i] == null) { + return false; + } } - } + return true; } - return result; - } - /** - * search if there is an args that is null or do not exist - * @param args a list of string - * @param n a number of entries a list should have - * @return a boolean if true or not - */ - public static Boolean validateArgs(String[] args, Integer n) { - for (int i = 0; i < n; i++) { - if (args.length < n - 1) { - return false; - } else if (args[i] == null) { - return false; - } + /** + * changes every "null" in list to the object null + * + * @param args a list of strings + * @return return a new list + */ + public static String[] setNullInArgs(String[] args) { + String[] newList = new String[args.length]; + for (int i = 0; i < args.length; i++) { + if (args[i].equalsIgnoreCase("null")) { + newList[i] = null; + } else { + newList[i] = args[i]; + } + } + return newList; } - return true; - } - /** - * changes every "null" in list to the object null - * @param args a list of strings - * @return return a new list - */ - public static String[] setNullInArgs(String[] args) { - String[] newList = new String[args.length]; - for (int i = 0; i < args.length; i++) { - if (args[i].equalsIgnoreCase("null")) { - newList[i] = null; - } else { - newList[i] = args[i]; - } + 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; } - return newList; - } } diff --git a/src/main/java/me/unurled/raxen/utils/libs/CitizensApi.java b/src/main/java/me/unurled/raxen/utils/libs/CitizensApi.java index 1ad87c6..035232a 100644 --- a/src/main/java/me/unurled/raxen/utils/libs/CitizensApi.java +++ b/src/main/java/me/unurled/raxen/utils/libs/CitizensApi.java @@ -5,16 +5,16 @@ import org.bukkit.entity.Entity; public class CitizensApi { - private Raxen main; + private Raxen main; - public CitizensApi(Raxen main) { - this.main = main; - } + public CitizensApi(Raxen main) { + this.main = main; + } - public boolean isNPC(Entity e) { - return e.hasMetadata("NPC"); - } - /* + public boolean isNPC(Entity e) { + return e.hasMetadata("NPC"); + } + /* public void createNPC(EntityType type) { NPC npc = CitizensAPI.getNPCRegistry().createNPC(type); } diff --git a/src/main/java/me/unurled/raxen/utils/libs/LuckPerm.java b/src/main/java/me/unurled/raxen/utils/libs/LuckPerm.java deleted file mode 100644 index 62ef532..0000000 --- a/src/main/java/me/unurled/raxen/utils/libs/LuckPerm.java +++ /dev/null @@ -1,25 +0,0 @@ -package me.unurled.raxen.utils.libs; - -import lombok.Getter; -import me.unurled.raxen.Raxen; -import net.luckperms.api.LuckPerms; -import org.bukkit.Bukkit; -import org.bukkit.plugin.RegisteredServiceProvider; - -public class LuckPerm { - - private static RegisteredServiceProvider provider; - - @Getter - private static LuckPerms api; - - public LuckPerm(Raxen main) { - provider = Bukkit.getServicesManager().getRegistration(LuckPerms.class); - } - - public static void register() { - if (provider != null) { - api = provider.getProvider(); - } - } -} diff --git a/src/main/java/me/unurled/raxen/utils/libs/MongoDB.java b/src/main/java/me/unurled/raxen/utils/libs/MongoDB.java index ef4e9f7..213cf98 100644 --- a/src/main/java/me/unurled/raxen/utils/libs/MongoDB.java +++ b/src/main/java/me/unurled/raxen/utils/libs/MongoDB.java @@ -1,6 +1,7 @@ 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.client.MongoClient; @@ -8,8 +9,6 @@ import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import java.util.Objects; -import java.util.logging.Level; -import java.util.logging.Logger; import lombok.Getter; import org.bson.Document; import org.bukkit.Bukkit; @@ -17,41 +16,41 @@ import org.bukkit.configuration.file.FileConfiguration; public class MongoDB { - @Getter - private MongoClient mongoClient; + @Getter + private MongoClient mongoClient; - @Getter - private MongoDatabase mongoDatabase; + @Getter + private MongoDatabase mongoDatabase; - @Getter - private MongoCollection mongoCollection; + @Getter + private MongoCollection mongoCollection; - @Getter - private MongoCollection mongoConfigs; + @Getter + private MongoCollection mongoConfigs; - public void connect() { - FileConfiguration config = Objects - .requireNonNull(Bukkit.getPluginManager().getPlugin("Raxen")) - .getConfig(); - String uri = (String) config.get("url"); - assert uri != null; - debug("URI " + uri); - ConnectionString connectionString = new ConnectionString(uri); - mongoClient = MongoClients.create(connectionString); - mongoDatabase = mongoClient.getDatabase("Raxen"); - mongoCollection = mongoDatabase.getCollection("player"); - mongoConfigs = mongoDatabase.getCollection("config"); + public void connect() { + FileConfiguration config = Objects + .requireNonNull(Bukkit.getPluginManager().getPlugin("Raxen")) + .getConfig(); + String uri = (String) config.get("url"); + assert uri != null; + debug("URI " + uri); + ConnectionString connectionString = new ConnectionString(uri); + mongoClient = MongoClients.create(connectionString); + mongoDatabase = mongoClient.getDatabase("Raxen"); + mongoCollection = mongoDatabase.getCollection("player"); + mongoConfigs = mongoDatabase.getCollection("config"); - Bukkit - .getConsoleSender() - .sendMessage(colorComp("MongoDB connected!")); - } + Bukkit + .getConsoleSender() + .sendMessage(colorComp("MongoDB connected!")); + } - public void close() { - mongoClient.close(); + public void close() { + mongoClient.close(); - Bukkit - .getConsoleSender() - .sendMessage(colorComp("MongoDB disconnected!")); - } + Bukkit + .getConsoleSender() + .sendMessage(colorComp("MongoDB disconnected!")); + } } diff --git a/src/main/java/me/unurled/raxen/utils/libs/Multiverse.java b/src/main/java/me/unurled/raxen/utils/libs/Multiverse.java index f036518..b7eaf93 100644 --- a/src/main/java/me/unurled/raxen/utils/libs/Multiverse.java +++ b/src/main/java/me/unurled/raxen/utils/libs/Multiverse.java @@ -6,23 +6,23 @@ import org.bukkit.Bukkit; public class Multiverse { - private MultiverseCore core; - private MVWorldManager worldManager; + private MultiverseCore core; + private MVWorldManager worldManager; - public Multiverse() { - this.core = - (MultiverseCore) Bukkit - .getServer() - .getPluginManager() - .getPlugin("Multiverse-Core"); - this.worldManager = core.getMVWorldManager(); - } + public Multiverse() { + this.core = + (MultiverseCore) Bukkit + .getServer() + .getPluginManager() + .getPlugin("Multiverse-Core"); + this.worldManager = core.getMVWorldManager(); + } - public MVWorldManager getWorldManager() { - return worldManager; - } + public MVWorldManager getWorldManager() { + return worldManager; + } - public MultiverseCore getMultiverseCore() { - return core; - } + public MultiverseCore getMultiverseCore() { + return core; + } } diff --git a/src/main/java/me/unurled/raxen/utils/libs/Mysql.java b/src/main/java/me/unurled/raxen/utils/libs/Mysql.java index 4606463..2147f8b 100644 --- a/src/main/java/me/unurled/raxen/utils/libs/Mysql.java +++ b/src/main/java/me/unurled/raxen/utils/libs/Mysql.java @@ -8,30 +8,30 @@ import org.bukkit.entity.Player; public class Mysql { - private static String username; - private static String password; - private static String url; + private static String username; + private static String password; + private static String url; - private Raxen main; - private StorageManager sto; - private Config config; + private Raxen main; + private StorageManager sto; + private Config config; - public Mysql(Raxen main) { - this.main = main; - this.sto = main.getManager().getStorageManager(); - this.config = main.getConf(); - this.username = (String) config.getConfig().get("username"); - this.url = (String) config.getConfig().get("url"); - this.password = (String) config.getConfig().get("password"); - } + public Mysql(Raxen main) { + this.main = main; + this.sto = main.getManager().getStorageManager(); + this.config = main.getConf(); + this.username = (String) config.getConfig().get("username"); + this.url = (String) config.getConfig().get("url"); + this.password = (String) config.getConfig().get("password"); + } - public static void init() {} + public static void init() {} - public static String get(Player player, String str) throws SQLException { - return "False"; - } + public static String get(Player player, String str) throws SQLException { + return "False"; + } - public static void connect() {} + public static void connect() {} - public static void disconnect() {} + public static void disconnect() {} } diff --git a/src/main/java/me/unurled/raxen/utils/libs/PlaceHolderAPI.java b/src/main/java/me/unurled/raxen/utils/libs/PlaceHolderAPI.java index 4c2e5bb..0209405 100644 --- a/src/main/java/me/unurled/raxen/utils/libs/PlaceHolderAPI.java +++ b/src/main/java/me/unurled/raxen/utils/libs/PlaceHolderAPI.java @@ -4,12 +4,12 @@ import me.unurled.raxen.Raxen; public class PlaceHolderAPI { - private Raxen main; + private Raxen main; - public PlaceHolderAPI(Raxen main) { - this.main = main; - } - /* + public PlaceHolderAPI(Raxen main) { + this.main = main; + } + /* public static setPlaceholders() { } diff --git a/src/main/java/me/unurled/raxen/utils/libs/Redis.java b/src/main/java/me/unurled/raxen/utils/libs/Redis.java new file mode 100644 index 0000000..0a1547a --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/libs/Redis.java @@ -0,0 +1,12 @@ +package me.unurled.raxen.utils.libs; + +import redis.clients.jedis.JedisPooled; + +public class Redis { + + JedisPooled jedis; + + public Redis() { + jedis = new JedisPooled("localhost"); + } +} diff --git a/src/main/java/me/unurled/raxen/utils/libs/Vault.java b/src/main/java/me/unurled/raxen/utils/libs/Vault.java index 7bfe477..669e5d0 100644 --- a/src/main/java/me/unurled/raxen/utils/libs/Vault.java +++ b/src/main/java/me/unurled/raxen/utils/libs/Vault.java @@ -12,46 +12,46 @@ import org.bukkit.plugin.RegisteredServiceProvider; public class Vault { - @Getter - private Economy econ = null; + @Getter + private Economy econ = null; - //econ.depositPlayer(player,amount) - //econ.withdrawPlayer(player,amount) - //econ.getBalance(player); + //econ.depositPlayer(player,amount) + //econ.withdrawPlayer(player,amount) + //econ.getBalance(player); - private static Raxen main; + private static Raxen main; - public Vault(Raxen main) { - this.main = main; - setupEconomy(); - } - - private void setupEconomy() { - if (main.getServer().getPluginManager().getPlugin("Vault") == null) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "Need to install plugin Vault. (https://github.com/milkbowl/Vault)" - ); - return; + public Vault(Raxen main) { + this.main = main; + setupEconomy(); } - RegisteredServiceProvider rsp = main - .getServer() - .getServicesManager() - .getRegistration(Economy.class); - if (rsp == null) { - error( - (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), - "Some bug happend in the initialisation of Vault and Raxen." - ); - return; - } - econ = rsp.getProvider(); - return; - } - public String getBalanceString(Player player) { - double bal = econ.getBalance(player); - DecimalFormat format = new DecimalFormat("#,###.00"); - return format.format(bal); - } + private void setupEconomy() { + if (main.getServer().getPluginManager().getPlugin("Vault") == null) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "Need to install plugin Vault. (https://github.com/milkbowl/Vault)" + ); + return; + } + RegisteredServiceProvider rsp = main + .getServer() + .getServicesManager() + .getRegistration(Economy.class); + if (rsp == null) { + error( + (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"), + "Some bug happend in the initialisation of Vault and Raxen." + ); + return; + } + econ = rsp.getProvider(); + return; + } + + public String getBalanceString(Player player) { + double bal = econ.getBalance(player); + DecimalFormat format = new DecimalFormat("#,###.00"); + return format.format(bal); + } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b81a1bd..be3be31 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,15 +1,15 @@ - version: "${version}" - motd: "YAY, Super server!" - motd-reload: "Server reloading!" +version: "${version}" +motd: "YAY, Super server!" +motd-reload: "Server reloading!" - storage: "MONGODB" # switch between "MONGODB", "MYSQL"(not implemented), "YML"(currently making it) - # if MYSQL or MongoDB - username: "no_usr" # if mysql if you are on mongodb, add username in the url - password: "no_pass" # if mysql if you are on mongodb, add password in the url - url: "mongodb://localhost:27017" +storage: "MONGODB" # switch between "MONGODB", "MYSQL"(not implemented), "YML"(currently making it) +# if MYSQL or MongoDB +username: "no_usr" # if mysql if you are on mongodb, add username in the url +password: "no_pass" # if mysql if you are on mongodb, add password in the url +url: "mongodb://localhost:27017" - useResourcePack: false - resource_pack_url: "https://mc-packs.net/" # recommend to use https://mc-packs.net/ => free resource pack hoster (will eventually develop one myself but not atm) - resource_pack_sha1: "sha1hallo" # sha1 hash +useResourcePack: false +resource_pack_url: "https://pack.unurled.me" # do not change if you want it to work with the intended server +resource_pack_uuid: "00000000-0000-0000-0000-000000000000" # do not change it will auto update with the plugin - debug: false \ No newline at end of file +debug: false \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a53200c..a6a31ec 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,8 +3,8 @@ version: '${version}' main: me.unurled.raxen.Raxen author: unurled api-version: 1.19 -depend: [ProtocolLib, PlaceholderAPI, 'Multiverse-Core', Citizens] -softdepend: [LuckPerms, Essentials, HolographicDisplays] +depend: [ ProtocolLib, PlaceholderAPI, 'Multiverse-Core', Citizens ] +softdepend: [ Essentials ] commands: reloadplugin: @@ -42,6 +42,12 @@ commands: description: not very much used, more with right click on device itemto64: description: transform an item to it's 64encoded byte + tutorial: + description: tutorial command + party: + description: party command + build: + description: build command permissions: raxen.reload.cmd: @@ -67,4 +73,10 @@ permissions: raxen.itemto64.cmd: description: item to 64 command permission raxen.testholo.cmd: - description: testholo command permission \ No newline at end of file + description: testholo command permission + raxen.tutorial.cmd: + description: tutorial command permission + raxen.party.cmd: + description: party command permission + raxen.build.cmd: + description: build command permission \ No newline at end of file diff --git a/src/main/resources/schematics/template_tuto.schem b/src/main/resources/schematics/template_tuto.schem new file mode 100644 index 0000000..1d2ac38 Binary files /dev/null and b/src/main/resources/schematics/template_tuto.schem differ