From 39de57bf690ff56a2d9b9d47fdacd72bd5fa0202 Mon Sep 17 00:00:00 2001 From: unurled Date: Tue, 25 Apr 2023 16:27:23 +0200 Subject: [PATCH 1/7] 0.5.8 refactor of all files, party, yml based system, damage listener --- .gitignore | 4 +- .idea/.gitignore | 92 ++ .idea/.name | 1 + .idea/codeStyles/Project.xml | 73 + .idea/jarRepositories.xml | 85 ++ .idea/misc.xml | 13 + .idea/modules.xml | 9 + .idea/vcs.xml | 6 + .prettierrc.yml | 10 + README.md | 14 +- build.gradle | 25 +- docs/FUTURE.md | 17 +- docs/TODO.md | 49 +- docs/examples/Effects.md | 17 + docs/examples/Items.md | 21 + docs/examples/Mobs.md | 32 + docs/examples/README.md | 7 + src/main/java/me/unurled/raxen/Raxen.java | 260 ++-- .../unurled/raxen/commands/RaxenCommand.java | 395 +++--- .../admin/CustomModelDataCommand.java | 195 +-- .../raxen/commands/admin/EntitiyCommand.java | 72 +- .../raxen/commands/admin/ItemListCommand.java | 93 +- .../raxen/commands/admin/ItemTo64Command.java | 80 +- .../raxen/commands/admin/NbtCommand.java | 227 +-- .../raxen/commands/admin/ReloadCommand.java | 72 +- .../raxen/commands/admin/SpawnEntity.java | 350 ++--- .../raxen/commands/admin/TestGuiCommand.java | 56 +- .../admin/TutorialManagerCommand.java | 149 ++ .../raxen/commands/player/ClassCommand.java | 108 +- .../raxen/commands/player/MainGuiCommand.java | 100 +- .../raxen/commands/player/PartyCommand.java | 224 +++ .../raxen/commands/player/SkillsCommand.java | 145 +- .../raxen/commands/player/StorageCommand.java | 123 +- .../raxen/components/dungeons/Dungeon.java | 106 +- .../raxen/components/dungeons/Gate.java | 78 +- .../raxen/components/dungeons/Rank.java | 24 +- .../raxen/components/dungeons/Type.java | 8 +- .../raxen/components/dungeons/Types.java | 32 +- .../dungeons/types/MonsterType.java | 164 +-- .../dungeons/types/forest/ForestDungeon.java | 17 +- .../dungeons/types/forest/ForestMonster.java | 24 +- .../components/effect/EffectBuilder.java | 5 + .../enchantments/EnchantmentWarpper.java | 146 +- .../enchantments/player/Telekinesis.java | 10 +- .../entity/Attributes/Attribute.java | 292 ++-- .../components/entity/Attributes/Defense.java | 6 +- .../components/entity/Attributes/Health.java | 6 +- .../entity/Attributes/ItemDefense.java | 6 +- .../entity/Attributes/ItemHealth.java | 6 +- .../entity/Attributes/ItemLuck.java | 6 +- .../entity/Attributes/ItemMana.java | 6 +- .../entity/Attributes/ItemSpeed.java | 6 +- .../entity/Attributes/ItemStrength.java | 6 +- .../components/entity/Attributes/Luck.java | 6 +- .../components/entity/Attributes/Mana.java | 6 +- .../entity/Attributes/MaxHealth.java | 6 +- .../components/entity/Attributes/MaxMana.java | 6 +- .../entity/Attributes/MaxManaBuilder.java | 26 +- .../components/entity/Attributes/Speed.java | 6 +- .../entity/Attributes/Strength.java | 6 +- .../raxen/components/entity/DamageType.java | 10 + .../entity/other/EntityNamespacedKey.java | 76 +- .../components/entity/other/EntityUtils.java | 192 +-- .../components/entity/other/MobData.java | 352 +++++ .../components/entity/other/MobType.java | 35 + .../components/entity/other/RaxenEntity.java | 263 +++- .../entity/other/custom/Entity.java | 167 +-- .../entity/other/custom/Humanoid.java | 683 ++++++++- .../other/custom/dungeon/forest/Elf.java | 53 +- .../other/custom/dungeon/forest/Wolf.java | 41 +- .../other/custom/hostile/low/Goblin.java | 716 +++++++++- .../components/entity/player/Inventories.java | 20 +- .../entity/player/PlayerStatistics.java | 224 +++ .../components/entity/player/PlayerUtils.java | 121 +- .../components/entity/player/RaxenPlayer.java | 689 +++++++-- .../components/entity/player/Scoreboard.java | 124 +- .../components/entity/player/Storage.java | 20 +- .../entity/player/attributes/Attribute.java | 68 +- .../entity/player/attributes/Attributes.java | 176 +-- .../entity/player/classes/Class.java | 72 +- .../entity/player/classes/Classes.java | 56 +- .../entity/player/classes/list/Assassin.java | 52 +- .../entity/player/storages/EnderChest.java | 20 +- .../entity/player/storages/Inventory.java | 18 +- .../raxen/components/gui/ItemListGui.java | 340 +---- .../unurled/raxen/components/gui/MainGui.java | 118 +- .../raxen/components/items/Attributes.java | 30 +- .../raxen/components/items/ItemBuilder.java | 116 ++ .../raxen/components/items/ItemParser.java | 46 + .../unurled/raxen/components/items/NBT.java | 14 - .../raxen/components/items/NBTNames.java | 16 + .../abilities/weapon/ThrowingDagger.java | 60 +- .../raxen/components/items/custom/Item.java | 33 +- .../components/items/custom/ItemClass.java | 24 +- .../components/items/custom/ItemTypes.java | 14 +- .../raxen/components/items/custom/List.java | 26 +- .../items/custom/weapon/CombatKnife.java | 56 + .../items/custom/weapon/Dagger.java | 54 +- .../raxen/components/lootchest/GUI.java | 20 +- .../lootchest/loots/CustomLoot.java | 53 +- .../components/lootchest/loots/LootItem.java | 32 +- .../lootchest/loots/test/TestSword.java | 14 +- .../unurled/raxen/components/party/Party.java | 233 ++++ .../components/resourcepack/ResourcePack.java | 44 +- .../raxen/components/tutorial/Tutorial.java | 79 ++ .../java/me/unurled/raxen/config/Config.java | 80 +- .../me/unurled/raxen/config/ItemConfig.java | 74 + .../me/unurled/raxen/config/PlayerConfig.java | 688 ++++----- .../unurled/raxen/config/TutorialConfig.java | 99 ++ .../raxen/listener/entity/DamageEntity.java | 417 ++++-- .../raxen/listener/entity/SpawnEvent.java | 93 +- .../raxen/listener/player/ArmorEvent.java | 102 +- .../listener/player/ClickBlockEvent.java | 50 +- .../listener/player/CloseInventoryEvent.java | 34 +- .../raxen/listener/player/FoodLevelEvent.java | 13 + .../raxen/listener/player/InteractEvent.java | 24 +- .../raxen/listener/player/ItemHandEvent.java | 153 +- .../raxen/listener/player/JoinEvent.java | 63 +- .../raxen/listener/player/LeaveEvent.java | 36 +- .../raxen/listener/player/PortalEvent.java | 22 +- .../raxen/listener/player/RespawnEvent.java | 24 +- .../listener/player/ServerPingEvent.java | 46 +- .../raxen/listener/player/SpellsEvent.java | 53 + .../listener/player/TransactionEvent.java | 38 +- .../me/unurled/raxen/manager/Manager.java | 117 +- .../raxen/manager/entity/EntityManager.java | 218 ++- .../raxen/manager/entity/ItemManager.java | 239 ++-- .../raxen/manager/entity/LootManager.java | 12 +- .../raxen/manager/entity/PartyManager.java | 65 + .../raxen/manager/entity/PlayerManager.java | 396 +++--- .../raxen/manager/entity/SpellManager.java | 152 ++ .../raxen/manager/entity/StorageManager.java | 292 ++-- .../raxen/manager/server/CommandManager.java | 137 +- .../raxen/manager/server/DungeonsManager.java | 38 +- .../manager/server/EnchantmentManager.java | 22 +- .../raxen/manager/server/LibsManager.java | 58 +- .../raxen/manager/server/ListenerManager.java | 81 +- .../raxen/manager/server/ProtocolManager.java | 44 +- .../manager/server/ResourcePackManager.java | 87 +- .../raxen/manager/server/WorldManager.java | 216 +-- .../me/unurled/raxen/utils/DungeonUtils.java | 190 +-- .../unurled/raxen/utils/EntityAttributes.java | 182 +-- .../me/unurled/raxen/utils/EntityUtils.java | 31 +- .../java/me/unurled/raxen/utils/Items.java | 1226 +++++++++-------- .../java/me/unurled/raxen/utils/Math.java | 34 + .../java/me/unurled/raxen/utils/RayTrace.java | 210 +-- .../java/me/unurled/raxen/utils/Reload.java | 116 +- .../java/me/unurled/raxen/utils/TabApi.java | 44 +- .../java/me/unurled/raxen/utils/Tags.java | 35 + .../java/me/unurled/raxen/utils/Utils.java | 886 ++++++------ .../unurled/raxen/utils/libs/CitizensApi.java | 16 +- .../raxen/utils/libs/HolographicDisplay.java | 32 + .../me/unurled/raxen/utils/libs/LuckPerm.java | 22 +- .../me/unurled/raxen/utils/libs/MongoDB.java | 65 +- .../unurled/raxen/utils/libs/Multiverse.java | 32 +- .../me/unurled/raxen/utils/libs/Mysql.java | 40 +- .../raxen/utils/libs/PlaceHolderAPI.java | 10 +- .../me/unurled/raxen/utils/libs/Vault.java | 74 +- src/main/resources/plugin.yml | 14 +- .../resources/schematics/template_tuto.schem | Bin 0 -> 56247 bytes 160 files changed, 11215 insertions(+), 6137 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .prettierrc.yml create mode 100644 docs/examples/Effects.md create mode 100644 docs/examples/Items.md create mode 100644 docs/examples/Mobs.md create mode 100644 docs/examples/README.md create mode 100644 src/main/java/me/unurled/raxen/commands/admin/TutorialManagerCommand.java create mode 100644 src/main/java/me/unurled/raxen/commands/player/PartyCommand.java create mode 100644 src/main/java/me/unurled/raxen/components/effect/EffectBuilder.java create mode 100644 src/main/java/me/unurled/raxen/components/entity/DamageType.java create mode 100644 src/main/java/me/unurled/raxen/components/entity/other/MobData.java create mode 100644 src/main/java/me/unurled/raxen/components/entity/other/MobType.java create mode 100644 src/main/java/me/unurled/raxen/components/entity/player/PlayerStatistics.java create mode 100644 src/main/java/me/unurled/raxen/components/items/ItemBuilder.java create mode 100644 src/main/java/me/unurled/raxen/components/items/ItemParser.java delete mode 100644 src/main/java/me/unurled/raxen/components/items/NBT.java create mode 100644 src/main/java/me/unurled/raxen/components/items/NBTNames.java create mode 100644 src/main/java/me/unurled/raxen/components/items/custom/weapon/CombatKnife.java create mode 100644 src/main/java/me/unurled/raxen/components/party/Party.java create mode 100644 src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java create mode 100644 src/main/java/me/unurled/raxen/config/ItemConfig.java create mode 100644 src/main/java/me/unurled/raxen/config/TutorialConfig.java create mode 100644 src/main/java/me/unurled/raxen/listener/player/FoodLevelEvent.java create mode 100644 src/main/java/me/unurled/raxen/listener/player/SpellsEvent.java create mode 100644 src/main/java/me/unurled/raxen/manager/entity/PartyManager.java create mode 100644 src/main/java/me/unurled/raxen/manager/entity/SpellManager.java create mode 100644 src/main/java/me/unurled/raxen/utils/Math.java create mode 100644 src/main/java/me/unurled/raxen/utils/Tags.java create mode 100644 src/main/java/me/unurled/raxen/utils/libs/HolographicDisplay.java create mode 100644 src/main/resources/schematics/template_tuto.schem 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..d3ace58 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,73 @@ + + + + \ 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/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..6f074e4 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,6 +49,10 @@ repositories { maven { url = "https://repo.onarandombox.com/content/groups/public/" } + maven { + name = "Worldedit" + url = 'https://maven.enginehub.org/repo/' + } mavenCentral() } @@ -69,20 +74,20 @@ dependencies { compileOnly 'net.luckperms:api:5.4' 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 'com.sk89q.worldedit:worldedit-core:7.2.14' + compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.2.14' compileOnly 'me.clip:placeholderapi:2.11.2' 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 'me.filoghost.holographicdisplays:holographicdisplays-api:3.0.2-SNAPSHOT' // compileOnly fileTree(dir: 'libs', include: '*.jar') paperweightDevelopmentBundle("io.papermc.paper:dev-bundle:1.19.4-R0.1-SNAPSHOT") } group = 'me.unurled' -version = '0.5.7' +version = '0.5.8' description = 'Raxen' java { @@ -103,7 +108,6 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' options.release = 17 options.compilerArgs += ["-Xlint:unchecked", "-Xlint:deprecation"] - } tasks { @@ -132,3 +136,14 @@ shadowJar { minimize() } +sourceSets { + main { + resources { + srcDirs = ['src/main/resources', 'src/main/resources/schematics'] + } + } +} + +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..9bc3e90 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -1,8 +1,41 @@ -- [x] refactor all abilities to make them compatible between entities and also making it easier to add them. -- [ ] 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 + +## 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/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..6d557ab --- /dev/null +++ b/docs/examples/README.md @@ -0,0 +1,7 @@ +# Exemples + +see all the exemples in this folder : + +- [Effects.md](/Elixium/raxen/src/branch/plugin/docs/examples/Effects.md) +- [Items.md](/Elixium/raxen/src/branch/plugin/docs/examples/Items.md) +- [Mobs.md](/Elixium/raxen/src/branch/plugin/docs/examples/Mobs.md) \ 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..224b694 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.5.8"; - 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..c62937a 100644 --- a/src/main/java/me/unurled/raxen/commands/RaxenCommand.java +++ b/src/main/java/me/unurled/raxen/commands/RaxenCommand.java @@ -16,207 +16,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/CustomModelDataCommand.java b/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java index c070758..fe8cff5 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/CustomModelDataCommand.java @@ -19,104 +19,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..6e0029a 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java +++ b/src/main/java/me/unurled/raxen/commands/admin/ItemTo64Command.java @@ -13,46 +13,46 @@ 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..fd28f2a 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java +++ b/src/main/java/me/unurled/raxen/commands/admin/NbtCommand.java @@ -17,123 +17,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..b46f6ea 100644 --- a/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java +++ b/src/main/java/me/unurled/raxen/commands/admin/SpawnEntity.java @@ -26,187 +26,187 @@ 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..0f88baa 100644 --- a/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java +++ b/src/main/java/me/unurled/raxen/commands/player/StorageCommand.java @@ -16,65 +16,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/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..0d0346b 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 static Raxen main; + private static 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 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 ) { - 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 static void updateSkills(@NotNull LivingEntity livingEntity) { + PlayerManager pm = + ((Raxen) Bukkit.getPluginManager().getPlugin("Raxen")).getManager() + .getPlayerManager(); + int maxHealth, health, itemHealth, defense, itemDefense, speed, itemSpeed, strength, itemStrength, maxMana, mana, itemMana, luck, itemLuck; + defense = pm.getDefense().get(livingEntity); + maxMana = pm.getMaxMana().get(livingEntity); + itemDefense = pm.getItemDefense().get(livingEntity); + health = pm.getHealth().get(livingEntity); + itemHealth = pm.getItemHealth().get(livingEntity); + mana = pm.getMana().get(livingEntity); + speed = pm.getSpeed().get(livingEntity); + itemLuck = pm.getItemLuck().get(livingEntity); + strength = pm.getStrength().get(livingEntity); + luck = pm.getLuck().get(livingEntity); + maxHealth = pm.getMaxHealth().get(livingEntity); + itemStrength = pm.getItemStrength().get(livingEntity); + itemSpeed = pm.getItemSpeed().get(livingEntity); + itemMana = pm.getItemMana().get(livingEntity); + if ( + livingEntity.getAttribute( + org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED + ) != + null + ) { + livingEntity + .getAttribute( + org.bukkit.attribute.Attribute.GENERIC_FLYING_SPEED + ) + .setBaseValue( + (float) (0.0 + ((speed + itemSpeed) / 100) * 0.2) + ); + } + if ( + livingEntity.getAttribute( + 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..144517f --- /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.spawnedMob.remove(entity.getUniqueId()); + manager.spawnedMobsOnlyMain.remove(entity.getUniqueId()); + entity.remove(); + } + entity = null; + if (mount != null) { + manager.spawnedMob.remove(mount.getUniqueId()); + manager.spawnedMobsOnlyMain.remove(mount.getUniqueId()); + mount.remove(); + } + mount = null; + // TODO: ai + if (damageDealt != null) { + damageDealt = null; + } + attributes = null; + lastAttackedByTimes = null; + } + + public boolean attack(RaxenPlayer rx) { + return attack(rx, 0.5, -1, false); + } + + public boolean attack(RaxenPlayer pd, int rpgDamage) { + return attack(pd, 0.5, rpgDamage, false); + } + + public boolean attack(RaxenPlayer pd, int rpgDamage, boolean projectile) { + return attack(pd, 0.5, rpgDamage, projectile); + } + + public int getDamage() { + return main.getManager().getEntityManager().getStrength() + .get(entity); // TODO: get damage properly + } + + public boolean attack(RaxenPlayer pd, double knockback, int rpgDamage, boolean projectile) { + if (System.currentTimeMillis() < invuln) { + return false; + } + boolean success = false; + success = pd.damage(rpgDamage > -1 ? rpgDamage : getDamage(), entity, + DamageType.NORMAL); + if (success && !projectile) { + pd.knockback(entity, knockback); + } + return success; + } + + public void knockback(LivingEntity attacker, double knockBackMultiplier) { + return; + } + + + public boolean damage(int damageAmount, org.bukkit.entity.Entity damager, + DamageType damageType) { + return damage(damageAmount, damager, damageType, false); + } + + public boolean damage(int damageAmount, org.bukkit.entity.Entity damager, DamageType damageType, + boolean crit) { + if (System.currentTimeMillis() < invuln) { + return false; + } + if (dead) { + return false; + } + if (damager != null && damager instanceof Player player) { + if (!player.isOnline() + || main.getManager().getPlayerManager().getRaxenPlayer(player) == null) { + return false; + } + } + Health health = main.getManager().getEntityManager().getHealth(); + if (damageAmount > health.get(entity)) { + damageAmount = health.get(entity); + } + if (damager != null && damager instanceof Player player) { + if (damageDealt.containsKey(damager.getUniqueId())) { + damageDealt.put(damager.getUniqueId(), + damageDealt.get(damager.getUniqueId()) + damageAmount); + } else { + damageDealt.put(damager.getUniqueId(), (long) damageAmount); + } + // TODO: AI stuff + } + if (damager != null) { + lastAttackedByTimes.put(damager.getUniqueId(), System.currentTimeMillis()); + } + if (damageAmount < 1) { + damageAmount = 1; + } + health.set(entity, + health.get(entity) - damageAmount); + if (health.get(entity) <= 0) { + health.set(entity, 0); + } + if (damager != null && damager instanceof Player player) { + RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer(player); + player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, 0.65f, 0.75f); + } + if (health.get(entity) < 1) { + die(); + } else { + entity.playEffect(EntityEffect.HURT); + if (mount != null) { + mount.playEffect(EntityEffect.HURT); + } + displayCurrentHP(); + } + lastDamaged = System.currentTimeMillis(); + return true; + } + + public void displayCurrentHP() { + entity.customName(getHPDisplay()); + Bukkit.getScheduler().scheduleSyncDelayedTask(main, lastScheduledRevertHP = new Runnable() { + public void run() { + if (!dead && entity != null && entity.isValid() && !entity.isDead()) { + if (lastScheduledRevertHP == this) { + entity.customName(Utils.colorComp(fullName)); + } + } + } + }, 60L); + } + + public Component getHPDisplay() { + EntityManager manager = main.getManager().getEntityManager(); + int health = manager.getHealth().get(entity); + int maxHealth = manager.getMaxHealth().get(entity); + double percent = ((double) health) / ((double) maxHealth); + int green = (int) Math.floor(percent / 0.05); + if (green > 20) { + green = 20; + } else if (green < 1) { + green = 1; + } + StringBuilder sb = new StringBuilder(); + sb.append(""); + 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..044dad7 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,245 @@ package me.unurled.raxen.components.entity.other; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.UUID; import lombok.Getter; import lombok.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); - } + 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; + } - public abstract Entity createEntity(Location location); + /*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; + } } 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..9bc889a 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..c0f0636 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,98 @@ package me.unurled.raxen.components.entity.player; -import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.*; import me.unurled.raxen.Raxen; import me.unurled.raxen.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..d73f8d8 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 @@ -10,66 +10,70 @@ import org.bukkit.scoreboard.*; 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/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..9832fd9 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/ItemBuilder.java @@ -0,0 +1,116 @@ +package me.unurled.raxen.components.items; + +import com.google.common.collect.Multimap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import me.unurled.raxen.utils.Utils; +import net.kyori.adventure.text.Component; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.FireworkEffectMeta; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.MapMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionEffect; +import org.jetbrains.annotations.NotNull; + +public class ItemBuilder { + + private final PersistentDataContainer persistentDataContainer; + private ItemStack it; + private Material type; + private Component displayName; + private int amount; + private int customModelData; + private boolean hasCustomModelData; + private Color color; + private @NotNull PotionData potionData; + + private List 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; + } +} 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..a228170 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/items/ItemParser.java @@ -0,0 +1,46 @@ +package me.unurled.raxen.components.items; + +import java.util.List; +import me.unurled.raxen.utils.Utils; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; + +public class ItemParser { + + private final ConfigurationSection section; + private Material type; + + public ItemParser(ConfigurationSection section) { + this.section = section; + type = Material.getMaterial(section.getString("material", "PAPER")); + if (section.isConfigurationSection("Pack")) { + ConfigurationSection packSection = section.getConfigurationSection("Pack"); + // TODO: Parse pack section + } + } + + public ItemBuilder buildItem() { + return buildItem(section.contains("name") ? section.getString("name") : null); + } + + public ItemBuilder buildItem(String name) { + ItemBuilder item; + item = new ItemBuilder(type); + if (name != null) { + item.displayName(name); + } + return item; + } + + private ItemBuilder applyConfig(ItemBuilder item) { + if (section.contains("lore")) { + List lore = section.getStringList("lore"); + item.lore(lore); + } + + if (section.contains("color")) { + item.color(Utils.color(section.getString("color", "FFFFFF"))); + } + 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..f323daa 100644 --- a/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java +++ b/src/main/java/me/unurled/raxen/components/resourcepack/ResourcePack.java @@ -8,28 +8,28 @@ 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( - config.getString("ressource_pack_url"), - config.getString("resource_pack_sha1") - ); - } - } + 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); } - .runTaskLater(main, 2L); - } } 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..9d59bc0 --- /dev/null +++ b/src/main/java/me/unurled/raxen/components/tutorial/Tutorial.java @@ -0,0 +1,79 @@ +package me.unurled.raxen.components.tutorial; + +import static me.unurled.raxen.utils.Utils.colorTextComp; +import static me.unurled.raxen.utils.Utils.log; +import static me.unurled.raxen.utils.Utils.msgPlayer; + +import lombok.Getter; +import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI; +import me.filoghost.holographicdisplays.api.hologram.Hologram; +import me.unurled.raxen.Raxen; +import me.unurled.raxen.components.entity.player.RaxenPlayer; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffectType; + +public class Tutorial { + + @Getter + private double x; + @Getter + private double y; + @Getter + private double z; + + @Getter + private int step = 0; + + @Getter + private World world; + + public Tutorial() { + this.step = 0; + } + + public Tutorial(int step) { + this.step = step; + } + + public Tutorial(int step, double x, double y, double z, World world) { + this.x = x; + this.y = y; + this.z = z; + this.step = step; + this.world = world; + } + + public void startTutorial(Player player, Location loc) { + x = loc.getX(); + y = loc.getY(); + z = loc.getZ(); + world = loc.getWorld(); + Raxen main = (Raxen) Bukkit.getPluginManager().getPlugin("Raxen"); + RaxenPlayer rxPlayer = main.getManager().getPlayerManager().getRaxenPlayer(player); + rxPlayer.setInTutorial(true); + step = 1; + player.addPotionEffect(PotionEffectType.BLINDNESS.createEffect(100, 10)); + player.teleport( + new Location(world, 15.82, 74.00, 117.21, 899.21F, 0.90f)); + msgPlayer(player, colorTextComp("Welcome to the tutorial!")); + HolographicDisplaysAPI api = main.getManager().getLibsManager().getHolographicDisplay() + .getApi(); + Hologram holo = api.createHologram(new Location(world, 15.5, 76.00, 112.5, 179.21f, 0.90f)); + holo.getLines().appendText("Welcome to the tutorial!"); + } + + public void stopTutorial() { + log("needs to be implemented"); + } + + public void nextStep() { + log("needs to be implemented"); + } + + public void previousStep() { + log("needs to be implemented"); + } +} diff --git a/src/main/java/me/unurled/raxen/config/Config.java b/src/main/java/me/unurled/raxen/config/Config.java index 632f671..30c1785 100644 --- a/src/main/java/me/unurled/raxen/config/Config.java +++ b/src/main/java/me/unurled/raxen/config/Config.java @@ -3,7 +3,12 @@ package me.unurled.raxen.config; import static me.unurled.raxen.utils.Utils.debug; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.FileChannel; +import java.nio.channels.ReadableByteChannel; import lombok.Getter; import me.unurled.raxen.Raxen; import org.bukkit.configuration.InvalidConfigurationException; @@ -12,38 +17,55 @@ 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); + } + if (new File(main.getDataFolder().toString() + "/schematics/").mkdir()) { + String url = "https://pb.unurled.me/file/otter-panda-cobra/template_tuto.schem"; + ReadableByteChannel readableByteChannel = null; + try { + readableByteChannel = Channels.newChannel(new URL(url).openStream()); + FileOutputStream fileOutputStream = new FileOutputStream( + main.getDataFolder() + "schematics/template_tuto.schem"); + FileChannel fileChannel = fileOutputStream.getChannel(); + fileOutputStream.getChannel() + .transferFrom(readableByteChannel, 0, Long.MAX_VALUE); + } catch (IOException e) { +// throw new RuntimeException(e); + } + +// main.saveResource("schematics/template_tuto.schem", false); + } + ; } - 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/ItemConfig.java b/src/main/java/me/unurled/raxen/config/ItemConfig.java new file mode 100644 index 0000000..ec6fea5 --- /dev/null +++ b/src/main/java/me/unurled/raxen/config/ItemConfig.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.effect.EffectBuilder; +import me.unurled.raxen.components.items.ItemBuilder; +import me.unurled.raxen.components.items.ItemParser; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.YamlConfiguration; + +public class ItemConfig { + + private File itemsFolder; + private Raxen main; + + public ItemConfig(Raxen main) { + this.main = main; + } + + public boolean validatesConfig() { + itemsFolder = new File(main.getDataFolder(), "items"); + if (!itemsFolder.exists()) { + itemsFolder.mkdirs(); + } + return true; + } + + public Map> 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() { + 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..9e5a41a 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().spawnedMob.get( + defender.getUniqueId()); + if (rx != null) { + rx.attackMob(re); + } + } + } else if (attacker instanceof Projectile) { + boolean projectile = true; + ProjectileSource source = ((Projectile) attacker).getShooter(); + double rpgKnockback = -1; + int rpgDamage = -1; + if (attacker != null) { + Metadatable sourceMeta = (Metadatable) attacker; + // TODO: check metadata + } + if (source == defender) { + attacker.remove(); + return; + } + if (source instanceof Player) { + RaxenPlayer rx = main.getManager().getPlayerManager().getRaxenPlayer( + (Player) source); + if (defender instanceof Player) { + RaxenPlayer rx2 = main.getManager().getPlayerManager().getRaxenPlayer( + (Player) defender); + // range attack between players + if (rpgKnockback >= 0) { + rx.attackPlayer(rx2, rpgDamage, projectile, rpgKnockback); + } else { + rx.attackPlayer(rx2, rpgDamage, projectile); + } + } else { + MobData mb = main.getManager().getEntityManager().spawnedMob.get( + defender.getUniqueId()); + if (rx != null && mb != null) { + if (rpgKnockback >= 0) { + rx.attackMob(mb, rpgKnockback, rpgDamage, projectile); + } else { + rx.attackMob(mb, rpgDamage, projectile); + } + } + // range attack between player and mob + } + } else { + if (defender instanceof Player) { + MobData a = main.getManager().getEntityManager().spawnedMob.get( + attacker.getUniqueId()); + RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer( + (Player) defender); + if (a != null && d != null) { + a.attack(d, rpgDamage, projectile); + } + // range attack between mob and player + } else { + // range attack between mobs + } + } + attacker.remove(); + } else { + if (defender instanceof Player) { + MobData a = main.getManager().getEntityManager().spawnedMob.get( + attacker.getUniqueId()); + RaxenPlayer d = main.getManager().getPlayerManager().getRaxenPlayer( + (Player) defender); + if (a != null && d != null) { + a.attack(d); + } + // attack between mob and player + } else { + // attack between mobs + } + } + } + + } + + /** + * fired when an entity is damaged by another entity calculates the damage and apply it to the + * entity + * + * @param e + */ + @Deprecated + // @EventHandler + public void entityDamageByEntity(EntityDamageByEntityEvent e) { 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..5c9328f 100644 --- a/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java +++ b/src/main/java/me/unurled/raxen/listener/entity/SpawnEvent.java @@ -15,52 +15,53 @@ 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) { + 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 + ) { + 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()); + } } - } } 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..da6655b 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,9 @@ package me.unurled.raxen.listener.player; +import static me.unurled.raxen.utils.Utils.debug; +import static me.unurled.raxen.utils.Utils.log; + +import de.tr7zw.nbtapi.NBT; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -9,11 +13,17 @@ 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..254971a 100644 --- a/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java +++ b/src/main/java/me/unurled/raxen/listener/player/LeaveEvent.java @@ -12,24 +12,24 @@ 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..efad6a0 100644 --- a/src/main/java/me/unurled/raxen/manager/Manager.java +++ b/src/main/java/me/unurled/raxen/manager/Manager.java @@ -2,70 +2,95 @@ 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.CommandManager; +import me.unurled.raxen.manager.server.DungeonsManager; +import me.unurled.raxen.manager.server.LibsManager; +import me.unurled.raxen.manager.server.ListenerManager; +import me.unurled.raxen.manager.server.ResourcePackManager; +import me.unurled.raxen.manager.server.TutorialManager; +import me.unurled.raxen.manager.server.WorldManager; import me.unurled.raxen.utils.libs.Multiverse; /** - * 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; + + /** + * 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); + } } 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..6a04805 100644 --- a/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java +++ b/src/main/java/me/unurled/raxen/manager/entity/EntityManager.java @@ -3,12 +3,32 @@ package me.unurled.raxen.manager.entity; import static me.unurled.raxen.utils.Utils.debug; 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 org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.configuration.file.FileConfiguration; @@ -17,31 +37,187 @@ import org.bukkit.entity.EntityType; public class EntityManager { - private Raxen main; + private Raxen main; - @Getter - @Setter - public List list = new ArrayList<>(); + @Getter + @Setter + public List list = new ArrayList<>(); - public HashMap entities = - new HashMap<>(); + public HashMap mobTypes; + public HashMap spawnedMob; + public HashMap spawnedMobsOnlyMain; - public HashMap livingEntities = new HashMap<>(); + @Getter + private final HashMap attribute = + new HashMap<>(); - public EntityManager(Raxen main) { - this.main = main; - } + public HashMap entities = + new HashMap<>(); - public void registerLivingEntities(World world) {} + public HashMap livingEntities = new HashMap<>(); - /** - * 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"); - } + // Attributes + private Defense defense; + private Health health; + private ItemDefense itemDefense; + private ItemHealth itemHealth; + private ItemLuck itemLuck; + private ItemMana itemMana; + private ItemSpeed itemSpeed; + private ItemStrength itemStrength; + private Luck luck; + private Mana mana; + private MaxHealth maxHealth; + private MaxMana maxMana; + private Speed speed; + private Strength strength; + + public EntityManager(Raxen main) { + this.main = main; + mobTypes = new HashMap<>(); + spawnedMob = new HashMap<>(); + spawnedMobsOnlyMain = new HashMap<>(); + reload(); + registerAttributes(); + } + + public static void reload() { + Collection collection = new ArrayList<>(); + collection.addAll(spawnedMob.values()); + for (MobData mobData : collection) { + mobData.entity.die(false); + } + } + + public void registerLivingEntities(World world) { + } + + /** + * used to register entities using fileconfigs but rapidly abandoned + * + * @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) { + entities.get(entity.getUniqueId()); + } + + /** + * register all Attributes in me.unurled.raxen.components.entity.Attributes; + */ + public void registerAttributes() { + EntityNamespacedKey key = new EntityNamespacedKey(main); + + this.defense = new Defense(key.defense, "DEFENSE"); + attribute.put("DEFENSE", defense); + + this.health = new Health(key.health, "HEALTH"); + attribute.put("HEALTH", health); + + this.itemDefense = new ItemDefense(key.itemDefense, "ITEM_DEFENSE"); + attribute.put("ITEM_DEFENSE", itemDefense); + + this.itemHealth = new ItemHealth(key.itemHealth, "ITEM_HEALTH"); + attribute.put("ITEM_HEALTH", itemHealth); + + this.itemLuck = new ItemLuck(key.itemLuck, "ITEM_LUCK"); + attribute.put("ITEM_LUCK", itemLuck); + + this.itemMana = new ItemMana(key.itemMana, "ITEM_MANA"); + attribute.put("ITEM_MANA", itemMana); + + this.itemSpeed = new ItemSpeed(key.itemSpeed, "ITEM_SPEED"); + attribute.put("ITEM_SPEED", itemSpeed); + + this.itemStrength = new ItemStrength(key.itemStrength, "ITEM_STRENGTH"); + attribute.put("ITEM_STRENGTH", itemStrength); + + this.luck = new Luck(key.luck, "LUCK"); + attribute.put("LUCK", luck); + + this.mana = new Mana(key.mana, "MANA"); + attribute.put("MANA", mana); + + this.maxMana = + new MaxManaBuilder() + .setNamespacekey(key.maxMana) + .setName("MAX_MANA") + .createMaxMana(); + attribute.put("MAX_MANA", maxMana); + + this.maxHealth = new MaxHealth(key.maxHealth, "MAX_HEALTH"); + attribute.put("MAX_HEALTH", maxHealth); + + this.speed = new Speed(key.speed, "SPEED"); + attribute.put("SPEED", speed); + + this.strength = new Strength(key.strength, "STRENGTH"); + attribute.put("STRENGTH", strength); + } + + public Defense getDefense() { + return (Defense) attribute.get("DEFENSE"); + } + + public Health getHealth() { + return (Health) attribute.get("HEALTH"); + } + + public ItemDefense getItemDefense() { + return (ItemDefense) attribute.get("ITEM_DEFENSE"); + } + + public ItemHealth getItemHealth() { + return (ItemHealth) attribute.get("ITEM_HEALTH"); + } + + public ItemLuck getItemLuck() { + return (ItemLuck) attribute.get("ITEM_LUCK"); + } + + public ItemMana getItemMana() { + return (ItemMana) attribute.get("ITEM_MANA"); + } + + public ItemSpeed getItemSpeed() { + return (ItemSpeed) attribute.get("ITEM_SPEED"); + } + + public ItemStrength getItemStrength() { + return (ItemStrength) attribute.get("ITEM_STRENGTH"); + } + + public Luck getLuck() { + return (Luck) attribute.get("LUCK"); + } + + public Mana getMana() { + return (Mana) attribute.get("MANA"); + } + + public MaxMana getMaxMana() { + return (MaxMana) attribute.get("MAX_MANA"); + } + + public MaxHealth getMaxHealth() { + return (MaxHealth) attribute.get("MAX_HEALTH"); + } + + public Speed getSpeed() { + return (Speed) attribute.get("SPEED"); + } + + public Strength getStrength() { + return (Strength) attribute.get("STRENGTH"); + } } 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..699296d 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,105 @@ 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.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; - 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); + } - /** - * 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); + } } 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..04388d7 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,48 @@ 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.HolographicDisplay; +import me.unurled.raxen.utils.libs.LuckPerm; +import me.unurled.raxen.utils.libs.MongoDB; +import me.unurled.raxen.utils.libs.Mysql; +import me.unurled.raxen.utils.libs.PlaceHolderAPI; +import me.unurled.raxen.utils.libs.Vault; public class LibsManager { - @Getter - private final ProtocolManager protocolManager; + @Getter + private final ProtocolManager protocolManager; - @Getter - private final LuckPerm luckPerm; + @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); - } + @Getter + private HolographicDisplay holographicDisplay; + + 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); + this.holographicDisplay = new HolographicDisplay(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..a4f6b22 100644 --- a/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/ProtocolManager.java @@ -10,28 +10,28 @@ 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.) + } + } + ); + } } 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..da8ec34 100644 --- a/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/ResourcePackManager.java @@ -11,51 +11,54 @@ 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; + @Getter + private boolean useRP; - public ResourcePackManager(Raxen main) { - this.main = main; - this.resourcePack = new ResourcePack(main, this); - this.config = main.getConfig(); - this.useRP = this.config.getBoolean("useResourcePack"); - enable(); - } - - /** - * 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"); + enable(); + } + + /** + * 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."); + } } - } } 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..7261bc6 100644 --- a/src/main/java/me/unurled/raxen/manager/server/WorldManager.java +++ b/src/main/java/me/unurled/raxen/manager/server/WorldManager.java @@ -15,124 +15,126 @@ 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/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..2ff156b --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/Tags.java @@ -0,0 +1,35 @@ +package me.unurled.raxen.utils; + +import static me.unurled.raxen.utils.Utils.coloredString; + +import java.util.Objects; +import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI; +import me.filoghost.holographicdisplays.api.hologram.Hologram; +import me.unurled.raxen.Raxen; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.scheduler.BukkitRunnable; + +public class Tags { + + public static void makeFloatingText(String name, Location loc, double xzOffset, double yMin, + double yMax, double durationSec) { + loc.add(-xzOffset / 2 + (java.lang.Math.random() * (xzOffset)), + (java.lang.Math.random() * (yMax - yMin)) + yMin, -xzOffset / 2 + ( + java.lang.Math.random() * (xzOffset))); + HolographicDisplaysAPI api = HolographicDisplaysAPI.get((Raxen) Objects.requireNonNull( + Bukkit.getPluginManager() + .getPlugin("Raxen"))); + Hologram hologram = api.createHologram(loc); + hologram.getLines().appendText(coloredString(name)); + new BukkitRunnable() { + @Override + public void run() { + hologram.delete(); + } + }.runTaskLater(((Raxen) Objects.requireNonNull( + Bukkit.getPluginManager() + .getPlugin("Raxen"))).getPlugin(), (long) (durationSec * 20)); + } + +} 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/HolographicDisplay.java b/src/main/java/me/unurled/raxen/utils/libs/HolographicDisplay.java new file mode 100644 index 0000000..cbc5940 --- /dev/null +++ b/src/main/java/me/unurled/raxen/utils/libs/HolographicDisplay.java @@ -0,0 +1,32 @@ +package me.unurled.raxen.utils.libs; + +import lombok.Getter; +import me.filoghost.holographicdisplays.api.HolographicDisplaysAPI; +import me.filoghost.holographicdisplays.api.hologram.Hologram; +import me.unurled.raxen.Raxen; +import org.bukkit.Location; + +public class HolographicDisplay { + + private Raxen main; + @Getter + private HolographicDisplaysAPI api; + + public HolographicDisplay(Raxen main) { + this.main = main; + api = HolographicDisplaysAPI.get(main); + } + + /** + * template to use + * + * @param loc + * @param text + */ + public void createHologram(Location loc, String... text) { + Hologram hologram = api.createHologram(loc); + for (String s : text) { + hologram.getLines().appendText(s); + } + } +} diff --git a/src/main/java/me/unurled/raxen/utils/libs/LuckPerm.java b/src/main/java/me/unurled/raxen/utils/libs/LuckPerm.java index 62ef532..92dd618 100644 --- a/src/main/java/me/unurled/raxen/utils/libs/LuckPerm.java +++ b/src/main/java/me/unurled/raxen/utils/libs/LuckPerm.java @@ -8,18 +8,18 @@ import org.bukkit.plugin.RegisteredServiceProvider; public class LuckPerm { - private static RegisteredServiceProvider provider; + private static RegisteredServiceProvider provider; - @Getter - private static LuckPerms api; + @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(); + 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/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/plugin.yml b/src/main/resources/plugin.yml index a53200c..14d8226 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, HolographicDisplays ] +softdepend: [ LuckPerms, Essentials ] commands: reloadplugin: @@ -42,6 +42,10 @@ 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 permissions: raxen.reload.cmd: @@ -67,4 +71,8 @@ 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 \ 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 0000000000000000000000000000000000000000..1d2ac383f5e2751039b8101ebd58c1677b8d598b GIT binary patch literal 56247 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 z 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 aK;i**)k@{0NvIA6(AJ-oF#gk0%zpv>Mne7o literal 0 HcmV?d00001 From ce3d1ac69711c4cfbed4291b17b0d1af22fe36bf Mon Sep 17 00:00:00 2001 From: unurled Date: Tue, 25 Apr 2023 19:49:51 +0200 Subject: [PATCH 2/7] woodpecker pull request --- .idea/codeStyles/Project.xml | 588 +++++++++++++++++++++-- .woodpecker.yml | 16 +- scripts/.gitignore | 3 + git_release.py => scripts/git_release.py | 4 +- scripts/main.ts | 56 +++ scripts/package.json | 20 + scripts/tsconfig.json | 8 + 7 files changed, 652 insertions(+), 43 deletions(-) create mode 100644 scripts/.gitignore rename git_release.py => scripts/git_release.py (93%) create mode 100644 scripts/main.ts create mode 100644 scripts/package.json create mode 100644 scripts/tsconfig.json diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index d3ace58..0c26b77 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,70 +1,578 @@ - +