From cef0ce7d339d4ff9de5ffa4f7de462c60c555c84 Mon Sep 17 00:00:00 2001 From: ceze88 Date: Thu, 25 May 2023 19:20:03 +0200 Subject: [PATCH] Initial commit --- Bootstrap/pom.xml | 63 +++++++ .../src/main/java/com/craftaro/Main.java | 7 + UltimateStacker/.gitignore | 113 +++++++++++++ UltimateStacker/pom.xml | 155 ++++++++++++++++++ .../UltimateStacker.java | 132 ++++++++------- .../commands/CommandConvert.java | 4 +- .../commands/CommandGiveSpawner.java | 6 +- .../commands/CommandLootables.java | 4 +- .../commands/CommandReload.java | 4 +- .../commands/CommandRemoveAll.java | 11 +- .../commands/CommandSettings.java | 4 +- .../commands/CommandSpawn.java | 8 +- .../convert/Convert.java | 2 +- .../convert/StackMobConvert.java | 4 +- .../convert/WildStackerConvert.java | 9 +- .../database/DataManager.java | 24 +-- .../migrations/_1_InitialMigration.java | 4 +- .../database/migrations/_2_EntityStacks.java | 4 +- .../database/migrations/_3_BlockStacks.java | 4 +- .../_6_RemoveStackedEntityTable.java | 2 +- .../gui/GUIConvert.java | 6 +- .../gui/GUIConvertWhat.java | 4 +- .../hook/StackerHook.java | 4 +- .../hook/hooks/JobsHook.java | 7 +- .../listeners/BlockListeners.java | 28 ++-- .../listeners/BreedListeners.java | 4 +- .../listeners/ClearLagListeners.java | 6 +- .../listeners/DeathListeners.java | 13 +- .../listeners/InteractListeners.java | 12 +- .../listeners/ShearListeners.java | 15 +- .../listeners/SheepDyeListeners.java | 15 +- .../listeners/SpawnerListeners.java | 21 +-- .../listeners/TameListeners.java | 11 +- .../entity/EntityCurrentListener.java | 9 +- .../listeners/entity/EntityListeners.java | 22 +-- .../listeners/item/ItemCurrentListener.java | 8 +- .../listeners/item/ItemLegacyListener.java | 8 +- .../listeners/item/ItemListeners.java | 8 +- .../lootables/LootablesManager.java | 6 +- .../settings/Settings.java | 8 +- .../stackable/block/BlockStackImpl.java | 64 ++++---- .../block/BlockStackManagerImpl.java | 8 +- .../stackable/entity/Check.java | 2 +- .../stackable/entity/EntityStackImpl.java | 112 +++++++++---- .../entity/EntityStackManagerImpl.java | 93 +++++++++++ .../stackable/entity/Split.java | 2 +- .../stackable/entity/custom/CustomEntity.java | 2 +- .../entity/custom/CustomEntityManager.java | 8 +- .../entities/MythicMobsCustomEntity.java | 2 +- .../MythicMobsCustomEntityLegacy.java | 2 +- .../custom/entities/MythicMobsProvider.java | 4 +- .../stackable/item/ItemStackImpl.java | 35 ++++ .../stackable/item/ItemStackManagerImpl.java | 18 ++ .../stackable/spawner/SpawnerStackImpl.java | 41 +++-- .../spawner/SpawnerStackManagerImpl.java | 17 +- .../tasks/StackingTask.java | 29 ++-- .../utils/Async.java | 2 +- .../utils/CachedChunk.java | 2 +- .../utils/Methods.java | 8 +- .../src}/main/resources/en_US.lang | 0 .../src}/main/resources/plugin.yml | 0 UltimateStackerAPI/.gitignore | 113 +++++++++++++ UltimateStackerAPI/pom.xml | 78 +++++++++ .../api/UltimateStackerAPI.java | 59 +++++++ .../events/entity}/EntityStackKillEvent.java | 4 +- .../events/spawner}/SpawnerBreakEvent.java | 2 +- .../api/events/spawner}/SpawnerEvent.java | 2 +- .../events/spawner}/SpawnerPlaceEvent.java | 2 +- .../api/stack/block/BlockStack.java | 19 +++ .../api/stack/block/BlockStackManager.java | 29 ++++ .../api/stack/entity/EntityStack.java | 38 +++++ .../api/stack/entity/EntityStackManager.java | 67 ++++++++ .../api/stack/item/ItemStack.java | 7 + .../api/stack/item/ItemStackManager.java | 11 ++ .../api/stack/spawner/SpawnerStack.java | 48 ++++++ .../stack/spawner/SpawnerStackManager.java | 23 +++ .../api/utils}/Hologramable.java | 2 +- .../ultimatestacker/api/utils/Stackable.java | 15 ++ .../api/utils/StackableEntity.java | 14 ++ .../src/main/resources/plugin.yml | 4 + pom.xml | 147 ++--------------- .../stackable/entity/EntityStackManager.java | 134 --------------- .../stackable/entity/StackedEntity.java | 77 --------- .../ultimatestacker/utils/Stackable.java | 9 - 84 files changed, 1463 insertions(+), 671 deletions(-) create mode 100644 Bootstrap/pom.xml create mode 100644 Bootstrap/src/main/java/com/craftaro/Main.java create mode 100644 UltimateStacker/.gitignore create mode 100644 UltimateStacker/pom.xml rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/UltimateStacker.java (83%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/commands/CommandConvert.java (93%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/commands/CommandGiveSpawner.java (96%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/commands/CommandLootables.java (91%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/commands/CommandReload.java (91%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/commands/CommandRemoveAll.java (90%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/commands/CommandSettings.java (92%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/commands/CommandSpawn.java (92%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/convert/Convert.java (80%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/convert/StackMobConvert.java (89%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/convert/WildStackerConvert.java (79%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/database/DataManager.java (91%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/database/migrations/_1_InitialMigration.java (90%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/database/migrations/_2_EntityStacks.java (89%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/database/migrations/_3_BlockStacks.java (90%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/database/migrations/_6_RemoveStackedEntityTable.java (91%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/gui/GUIConvert.java (85%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/gui/GUIConvertWhat.java (96%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/hook/StackerHook.java (73%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/hook/hooks/JobsHook.java (76%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/BlockListeners.java (91%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/BreedListeners.java (90%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/ClearLagListeners.java (78%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/DeathListeners.java (94%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/InteractListeners.java (94%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/ShearListeners.java (88%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/SheepDyeListeners.java (61%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/SpawnerListeners.java (89%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/TameListeners.java (68%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/entity/EntityCurrentListener.java (77%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/entity/EntityListeners.java (87%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/item/ItemCurrentListener.java (87%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/item/ItemLegacyListener.java (85%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/listeners/item/ItemListeners.java (94%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/lootables/LootablesManager.java (99%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/settings/Settings.java (98%) rename src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java => UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/block/BlockStackImpl.java (75%) rename src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStackManager.java => UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/block/BlockStackManagerImpl.java (85%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/stackable/entity/Check.java (96%) rename src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStack.java => UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/EntityStackImpl.java (64%) create mode 100644 UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/EntityStackManagerImpl.java rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/stackable/entity/Split.java (65%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/stackable/entity/custom/CustomEntity.java (92%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/stackable/entity/custom/CustomEntityManager.java (87%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/stackable/entity/custom/entities/MythicMobsCustomEntity.java (96%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/stackable/entity/custom/entities/MythicMobsCustomEntityLegacy.java (98%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/stackable/entity/custom/entities/MythicMobsProvider.java (55%) create mode 100644 UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/item/ItemStackImpl.java create mode 100644 UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/item/ItemStackManagerImpl.java rename src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java => UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackImpl.java (70%) rename src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStackManager.java => UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackManagerImpl.java (79%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/tasks/StackingTask.java (96%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/utils/Async.java (90%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/utils/CachedChunk.java (97%) rename {src/main/java/com/songoda/ultimatestacker => UltimateStacker/src/main/java/com.craftaro.ultimatestacker}/utils/Methods.java (96%) rename {src => UltimateStacker/src}/main/resources/en_US.lang (100%) rename {src => UltimateStacker/src}/main/resources/plugin.yml (100%) create mode 100644 UltimateStackerAPI/.gitignore create mode 100644 UltimateStackerAPI/pom.xml create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/UltimateStackerAPI.java rename {src/main/java/com/songoda/ultimatestacker/events => UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/entity}/EntityStackKillEvent.java (93%) rename {src/main/java/com/songoda/ultimatestacker/events => UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner}/SpawnerBreakEvent.java (94%) rename {src/main/java/com/songoda/ultimatestacker/events => UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner}/SpawnerEvent.java (95%) rename {src/main/java/com/songoda/ultimatestacker/events => UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner}/SpawnerPlaceEvent.java (94%) create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/block/BlockStack.java create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/block/BlockStackManager.java create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/entity/EntityStack.java create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/entity/EntityStackManager.java create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/item/ItemStack.java create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/item/ItemStackManager.java create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/spawner/SpawnerStack.java create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/spawner/SpawnerStackManager.java rename {src/main/java/com/songoda/ultimatestacker/stackable => UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils}/Hologramable.java (81%) create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/Stackable.java create mode 100644 UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/StackableEntity.java create mode 100644 UltimateStackerAPI/src/main/resources/plugin.yml delete mode 100644 src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java delete mode 100644 src/main/java/com/songoda/ultimatestacker/stackable/entity/StackedEntity.java delete mode 100644 src/main/java/com/songoda/ultimatestacker/utils/Stackable.java diff --git a/Bootstrap/pom.xml b/Bootstrap/pom.xml new file mode 100644 index 0000000..889aea1 --- /dev/null +++ b/Bootstrap/pom.xml @@ -0,0 +1,63 @@ + + + 4.0.0 + + com.craftaro + UltimateStackerParent + ${revision} + + + Bootstrap + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + com.craftaro + UltimateStackerAPI + 1.0 + + + com.craftaro + UltimateStacker + ${revision} + + + + \ No newline at end of file diff --git a/Bootstrap/src/main/java/com/craftaro/Main.java b/Bootstrap/src/main/java/com/craftaro/Main.java new file mode 100644 index 0000000..8407e11 --- /dev/null +++ b/Bootstrap/src/main/java/com/craftaro/Main.java @@ -0,0 +1,7 @@ +package com.craftaro; + +public class Main { + public static void main(String[] args) { + System.out.println("Hello world!"); + } +} \ No newline at end of file diff --git a/UltimateStacker/.gitignore b/UltimateStacker/.gitignore new file mode 100644 index 0000000..4788b4b --- /dev/null +++ b/UltimateStacker/.gitignore @@ -0,0 +1,113 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +target/ + +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next + +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# Common working directory +run/ diff --git a/UltimateStacker/pom.xml b/UltimateStacker/pom.xml new file mode 100644 index 0000000..cfccb7d --- /dev/null +++ b/UltimateStacker/pom.xml @@ -0,0 +1,155 @@ + + + 4.0.0 + + com.craftaro + UltimateStackerParent + ${revision} + + UltimateStacker + + + clean install + UltimateStacker-${revision} + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + + 1.8 + 1.8 + + + + + com.google.code.maven-replacer-plugin + replacer + 1.5.3 + + + prepare-package + + replace + + + + + ${project.build.directory}/classes/plugin.yml + + + maven-version-number + ${project.version} + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.3.0 + + + shaded + package + + shade + + + false + false + true + + + com.songoda:SongodaCore + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + com.songoda.core + ${project.groupId}.ultimatestacker.core + + + + + + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + org.spigotmc + spigot-api + 1.18-R0.1-SNAPSHOT + provided + + + + com.songoda + SongodaCore + 2.6.21 + compile + + + + com.craftaro + UltimateStackerAPI + 1.0 + provided + + + + com.bgsoftware + WildStackerAPI + 3.8.1 + provided + + + + uk.antiperson + stackmob + 4-0-2 + provided + + + + me.minebuilders + Clearlag + 3.0.6 + provided + + + + io.lumine + Mythic-Dist + 5.2.0 + provided + + + diff --git a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/UltimateStacker.java similarity index 83% rename from src/main/java/com/songoda/ultimatestacker/UltimateStacker.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/UltimateStacker.java index 3e9e106..0960f20 100644 --- a/src/main/java/com/songoda/ultimatestacker/UltimateStacker.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/UltimateStacker.java @@ -1,5 +1,41 @@ -package com.songoda.ultimatestacker; +package com.craftaro.ultimatestacker; +import com.craftaro.ultimatestacker.api.UltimateStackerAPI; +import com.craftaro.ultimatestacker.api.stack.block.BlockStack; +import com.craftaro.ultimatestacker.api.stack.block.BlockStackManager; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; +import com.craftaro.ultimatestacker.api.stack.item.ItemStackManager; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStackManager; +import com.craftaro.ultimatestacker.commands.CommandConvert; +import com.craftaro.ultimatestacker.commands.CommandGiveSpawner; +import com.craftaro.ultimatestacker.commands.CommandLootables; +import com.craftaro.ultimatestacker.commands.CommandReload; +import com.craftaro.ultimatestacker.commands.CommandRemoveAll; +import com.craftaro.ultimatestacker.commands.CommandSettings; +import com.craftaro.ultimatestacker.commands.CommandSpawn; +import com.craftaro.ultimatestacker.database.DataManager; +import com.craftaro.ultimatestacker.database.migrations._1_InitialMigration; +import com.craftaro.ultimatestacker.database.migrations._2_EntityStacks; +import com.craftaro.ultimatestacker.database.migrations._3_BlockStacks; +import com.craftaro.ultimatestacker.database.migrations._6_RemoveStackedEntityTable; +import com.craftaro.ultimatestacker.hook.hooks.JobsHook; +import com.craftaro.ultimatestacker.listeners.ShearListeners; +import com.craftaro.ultimatestacker.listeners.SheepDyeListeners; +import com.craftaro.ultimatestacker.listeners.SpawnerListeners; +import com.craftaro.ultimatestacker.listeners.TameListeners; +import com.craftaro.ultimatestacker.listeners.item.ItemCurrentListener; +import com.craftaro.ultimatestacker.listeners.item.ItemLegacyListener; +import com.craftaro.ultimatestacker.listeners.item.ItemListeners; +import com.craftaro.ultimatestacker.lootables.LootablesManager; +import com.craftaro.ultimatestacker.stackable.block.BlockStackImpl; +import com.craftaro.ultimatestacker.stackable.entity.EntityStackManagerImpl; +import com.craftaro.ultimatestacker.stackable.entity.custom.CustomEntityManager; +import com.craftaro.ultimatestacker.stackable.item.ItemStackManagerImpl; +import com.craftaro.ultimatestacker.stackable.spawner.SpawnerStackImpl; +import com.craftaro.ultimatestacker.utils.Async; +import com.craftaro.ultimatestacker.utils.Methods; import com.songoda.core.SongodaCore; import com.songoda.core.SongodaPlugin; import com.songoda.core.commands.CommandManager; @@ -16,47 +52,19 @@ import com.songoda.core.hooks.HologramManager; import com.songoda.core.hooks.ProtectionManager; import com.songoda.core.hooks.WorldGuardHook; import com.songoda.core.utils.TextUtils; -import com.songoda.ultimatestacker.commands.CommandConvert; -import com.songoda.ultimatestacker.commands.CommandGiveSpawner; -import com.songoda.ultimatestacker.commands.CommandLootables; -import com.songoda.ultimatestacker.commands.CommandReload; -import com.songoda.ultimatestacker.commands.CommandRemoveAll; -import com.songoda.ultimatestacker.commands.CommandSettings; -import com.songoda.ultimatestacker.commands.CommandSpawn; -import com.songoda.ultimatestacker.database.DataManager; -import com.songoda.ultimatestacker.database.migrations._1_InitialMigration; -import com.songoda.ultimatestacker.database.migrations._2_EntityStacks; -import com.songoda.ultimatestacker.database.migrations._3_BlockStacks; -import com.songoda.ultimatestacker.database.migrations._6_RemoveStackedEntityTable; -import com.songoda.ultimatestacker.hook.StackerHook; -import com.songoda.ultimatestacker.hook.hooks.JobsHook; -import com.songoda.ultimatestacker.listeners.BlockListeners; -import com.songoda.ultimatestacker.listeners.BreedListeners; -import com.songoda.ultimatestacker.listeners.ClearLagListeners; -import com.songoda.ultimatestacker.listeners.DeathListeners; -import com.songoda.ultimatestacker.listeners.InteractListeners; -import com.songoda.ultimatestacker.listeners.ShearListeners; -import com.songoda.ultimatestacker.listeners.SheepDyeListeners; -import com.songoda.ultimatestacker.listeners.SpawnerListeners; -import com.songoda.ultimatestacker.listeners.TameListeners; -import com.songoda.ultimatestacker.listeners.entity.EntityCurrentListener; -import com.songoda.ultimatestacker.listeners.entity.EntityListeners; -import com.songoda.ultimatestacker.listeners.item.ItemCurrentListener; -import com.songoda.ultimatestacker.listeners.item.ItemLegacyListener; -import com.songoda.ultimatestacker.listeners.item.ItemListeners; -import com.songoda.ultimatestacker.lootables.LootablesManager; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.Hologramable; -import com.songoda.ultimatestacker.stackable.block.BlockStack; -import com.songoda.ultimatestacker.stackable.block.BlockStackManager; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; -import com.songoda.ultimatestacker.stackable.entity.custom.CustomEntityManager; -import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack; -import com.songoda.ultimatestacker.stackable.spawner.SpawnerStackManager; -import com.songoda.ultimatestacker.tasks.StackingTask; -import com.songoda.ultimatestacker.utils.Async; -import com.songoda.ultimatestacker.utils.Methods; +import com.craftaro.ultimatestacker.hook.StackerHook; +import com.craftaro.ultimatestacker.listeners.BlockListeners; +import com.craftaro.ultimatestacker.listeners.BreedListeners; +import com.craftaro.ultimatestacker.listeners.ClearLagListeners; +import com.craftaro.ultimatestacker.listeners.DeathListeners; +import com.craftaro.ultimatestacker.listeners.InteractListeners; +import com.craftaro.ultimatestacker.listeners.entity.EntityCurrentListener; +import com.craftaro.ultimatestacker.listeners.entity.EntityListeners; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.api.utils.Hologramable; +import com.craftaro.ultimatestacker.stackable.block.BlockStackManagerImpl; +import com.craftaro.ultimatestacker.stackable.spawner.SpawnerStackManagerImpl; +import com.craftaro.ultimatestacker.tasks.StackingTask; import org.apache.commons.lang.WordUtils; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -90,6 +98,7 @@ public class UltimateStacker extends SongodaPlugin { private EntityStackManager entityStackManager; private SpawnerStackManager spawnerStackManager; private BlockStackManager blockStackManager; + private ItemStackManager itemStackManager; private LootablesManager lootablesManager; private CommandManager commandManager; private CustomEntityManager customEntityManager; @@ -98,6 +107,7 @@ public class UltimateStacker extends SongodaPlugin { private DatabaseConnector databaseConnector; private DataMigrationManager dataMigrationManager; private DataManager dataManager; + private UltimateStackerAPI API; public static UltimateStacker getInstance() { return INSTANCE; @@ -182,9 +192,10 @@ public class UltimateStacker extends SongodaPlugin { ProtectionManager.load(Bukkit.getPluginManager().getPlugin("BentoBox")); } - this.spawnerStackManager = new SpawnerStackManager(); - this.entityStackManager = new EntityStackManager(this); - this.blockStackManager = new BlockStackManager(); + this.spawnerStackManager = new SpawnerStackManagerImpl(); + this.entityStackManager = new EntityStackManagerImpl(this); + this.blockStackManager = new BlockStackManagerImpl(); + this.itemStackManager = new ItemStackManagerImpl(); this.customEntityManager = new CustomEntityManager(); guiManager.init(); @@ -249,6 +260,8 @@ public class UltimateStacker extends SongodaPlugin { new _3_BlockStacks(), new _6_RemoveStackedEntityTable()); this.dataMigrationManager.runMigrations(); + + API = new UltimateStackerAPI(entityStackManager, itemStackManager, spawnerStackManager, blockStackManager); } @Override @@ -288,6 +301,10 @@ public class UltimateStacker extends SongodaPlugin { }); } + public UltimateStackerAPI getAPI() { + return API; + } + public void addExp(Player player, EntityStack stack) { for (StackerHook stackerHook : stackerHooks) { stackerHook.applyExperience(player, stack); @@ -331,14 +348,6 @@ public class UltimateStacker extends SongodaPlugin { return lootablesManager; } - public EntityStackManager getEntityStackManager() { - return entityStackManager; - } - - public SpawnerStackManager getSpawnerStackManager() { - return spawnerStackManager; - } - public StackingTask getStackingTask() { return stackingTask; } @@ -371,6 +380,18 @@ public class UltimateStacker extends SongodaPlugin { return blockStackManager; } + public EntityStackManager getEntityStackManager() { + return entityStackManager; + } + + public ItemStackManager getItemStackManager() { + return itemStackManager; + } + + public SpawnerStackManager getSpawnerStackManager() { + return spawnerStackManager; + } + public CustomEntityManager getCustomEntityManager() { return customEntityManager; } @@ -378,9 +399,9 @@ public class UltimateStacker extends SongodaPlugin { public void updateHologram(Hologramable stack) { // Is this stack invalid? if (!stack.isValid()) - if (stack instanceof BlockStack) + if (stack instanceof BlockStackImpl) blockStackManager.removeBlock(stack.getLocation()); - else if (stack instanceof SpawnerStack) + else if (stack instanceof SpawnerStackImpl) spawnerStackManager.removeSpawner(stack.getLocation()); // are holograms enabled? if (!stack.areHologramsEnabled() && !HologramManager.getManager().isEnabled()) return; @@ -565,5 +586,4 @@ public class UltimateStacker extends SongodaPlugin { return !whitelist.isEmpty() && !whitelist.contains(combined) || !blacklist.isEmpty() && blacklist.contains(combined); } - } diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandConvert.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandConvert.java similarity index 93% rename from src/main/java/com/songoda/ultimatestacker/commands/CommandConvert.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandConvert.java index e56f711..70c6e17 100644 --- a/src/main/java/com/songoda/ultimatestacker/commands/CommandConvert.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandConvert.java @@ -1,9 +1,9 @@ -package com.songoda.ultimatestacker.commands; +package com.craftaro.ultimatestacker.commands; +import com.craftaro.ultimatestacker.gui.GUIConvert; import com.songoda.core.commands.AbstractCommand; import com.songoda.core.gui.GuiManager; import com.songoda.core.utils.TextUtils; -import com.songoda.ultimatestacker.gui.GUIConvert; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandGiveSpawner.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandGiveSpawner.java similarity index 96% rename from src/main/java/com/songoda/ultimatestacker/commands/CommandGiveSpawner.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandGiveSpawner.java index a3f4998..8066ad4 100644 --- a/src/main/java/com/songoda/ultimatestacker/commands/CommandGiveSpawner.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandGiveSpawner.java @@ -1,9 +1,9 @@ -package com.songoda.ultimatestacker.commands; +package com.craftaro.ultimatestacker.commands; +import com.craftaro.ultimatestacker.utils.Methods; import com.songoda.core.commands.AbstractCommand; import com.songoda.core.utils.TextUtils; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.utils.Methods; +import com.craftaro.ultimatestacker.UltimateStacker; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.EntityType; diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandLootables.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandLootables.java similarity index 91% rename from src/main/java/com/songoda/ultimatestacker/commands/CommandLootables.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandLootables.java index 04d93a5..cea2fed 100644 --- a/src/main/java/com/songoda/ultimatestacker/commands/CommandLootables.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandLootables.java @@ -1,8 +1,8 @@ -package com.songoda.ultimatestacker.commands; +package com.craftaro.ultimatestacker.commands; import com.songoda.core.commands.AbstractCommand; import com.songoda.core.lootables.gui.GuiEditor; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandReload.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandReload.java similarity index 91% rename from src/main/java/com/songoda/ultimatestacker/commands/CommandReload.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandReload.java index 7f3b82a..f358631 100644 --- a/src/main/java/com/songoda/ultimatestacker/commands/CommandReload.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandReload.java @@ -1,7 +1,7 @@ -package com.songoda.ultimatestacker.commands; +package com.craftaro.ultimatestacker.commands; import com.songoda.core.commands.AbstractCommand; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import org.bukkit.command.CommandSender; import java.util.List; diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandRemoveAll.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandRemoveAll.java similarity index 90% rename from src/main/java/com/songoda/ultimatestacker/commands/CommandRemoveAll.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandRemoveAll.java index 87c5f01..3c11cf5 100644 --- a/src/main/java/com/songoda/ultimatestacker/commands/CommandRemoveAll.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandRemoveAll.java @@ -1,10 +1,11 @@ -package com.songoda.ultimatestacker.commands; +package com.craftaro.ultimatestacker.commands; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; import com.songoda.core.commands.AbstractCommand; import com.songoda.core.utils.TextUtils; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.stackable.entity.EntityStackManagerImpl; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; @@ -48,7 +49,7 @@ public class CommandRemoveAll extends AbstractCommand { if (entityO instanceof LivingEntity && (stackManager.isStackedEntity(entityO) || all) && type.equalsIgnoreCase("entities")) { - EntityStack stack = plugin.getEntityStackManager().getStack((LivingEntity) entityO); + EntityStack stack = plugin.getEntityStackManager().getStackedEntity((LivingEntity) entityO); if (stack == null) continue; stack.destroy(); amountRemoved++; diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandSettings.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandSettings.java similarity index 92% rename from src/main/java/com/songoda/ultimatestacker/commands/CommandSettings.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandSettings.java index 194bcce..ae9902a 100644 --- a/src/main/java/com/songoda/ultimatestacker/commands/CommandSettings.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandSettings.java @@ -1,9 +1,9 @@ -package com.songoda.ultimatestacker.commands; +package com.craftaro.ultimatestacker.commands; import com.songoda.core.commands.AbstractCommand; import com.songoda.core.configuration.editor.PluginConfigGui; import com.songoda.core.gui.GuiManager; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/com/songoda/ultimatestacker/commands/CommandSpawn.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandSpawn.java similarity index 92% rename from src/main/java/com/songoda/ultimatestacker/commands/CommandSpawn.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandSpawn.java index 58cb2de..6726647 100644 --- a/src/main/java/com/songoda/ultimatestacker/commands/CommandSpawn.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/commands/CommandSpawn.java @@ -1,9 +1,9 @@ -package com.songoda.ultimatestacker.commands; +package com.craftaro.ultimatestacker.commands; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; import com.songoda.core.commands.AbstractCommand; import com.songoda.core.utils.TextUtils; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; +import com.craftaro.ultimatestacker.UltimateStacker; import org.bukkit.command.CommandSender; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -52,7 +52,7 @@ public class CommandSpawn extends AbstractCommand { sender.sendMessage(TextUtils.formatText("&6" + list)); } else { LivingEntity entity = (LivingEntity)player.getWorld().spawnEntity(player.getLocation(), type); - EntityStack stack = plugin.getEntityStackManager().createStack(entity, Integer.parseInt(args[1])); + EntityStack stack = plugin.getEntityStackManager().createStackedEntity(entity, Integer.parseInt(args[1])); plugin.getStackingTask().attemptSplit(stack, entity); } diff --git a/src/main/java/com/songoda/ultimatestacker/convert/Convert.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/Convert.java similarity index 80% rename from src/main/java/com/songoda/ultimatestacker/convert/Convert.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/Convert.java index abf0e41..b88db52 100644 --- a/src/main/java/com/songoda/ultimatestacker/convert/Convert.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/Convert.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.convert; +package com.craftaro.ultimatestacker.convert; public interface Convert { diff --git a/src/main/java/com/songoda/ultimatestacker/convert/StackMobConvert.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/StackMobConvert.java similarity index 89% rename from src/main/java/com/songoda/ultimatestacker/convert/StackMobConvert.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/StackMobConvert.java index deb6438..7e129c1 100644 --- a/src/main/java/com/songoda/ultimatestacker/convert/StackMobConvert.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/StackMobConvert.java @@ -1,6 +1,6 @@ -package com.songoda.ultimatestacker.convert; +package com.craftaro.ultimatestacker.convert; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import org.bukkit.Bukkit; import uk.antiperson.stackmob.StackMob; diff --git a/src/main/java/com/songoda/ultimatestacker/convert/WildStackerConvert.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/WildStackerConvert.java similarity index 79% rename from src/main/java/com/songoda/ultimatestacker/convert/WildStackerConvert.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/WildStackerConvert.java index 52a40b5..d274f36 100644 --- a/src/main/java/com/songoda/ultimatestacker/convert/WildStackerConvert.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/convert/WildStackerConvert.java @@ -1,9 +1,10 @@ -package com.songoda.ultimatestacker.convert; +package com.craftaro.ultimatestacker.convert; import com.bgsoftware.wildstacker.api.WildStackerAPI; import com.bgsoftware.wildstacker.api.objects.StackedSpawner; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.UltimateStackerAPI; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack; import org.bukkit.Bukkit; import org.bukkit.block.CreatureSpawner; import org.bukkit.plugin.Plugin; @@ -41,7 +42,7 @@ public class WildStackerConvert implements Convert { @Override public void convertSpawners() { for (StackedSpawner spawner : WildStackerAPI.getWildStacker().getSystemManager().getStackedSpawners()) { - SpawnerStack stack = plugin.getSpawnerStackManager().getSpawner(spawner.getLocation()); + SpawnerStack stack = UltimateStackerAPI.getSpawnerStackManager().getSpawner(spawner.getLocation()); stack.setAmount(WildStackerAPI .getSpawnersAmount((CreatureSpawner) spawner.getLocation().getBlock().getState())); diff --git a/src/main/java/com/songoda/ultimatestacker/database/DataManager.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/DataManager.java similarity index 91% rename from src/main/java/com/songoda/ultimatestacker/database/DataManager.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/DataManager.java index aa73caa..fb021bf 100644 --- a/src/main/java/com/songoda/ultimatestacker/database/DataManager.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/DataManager.java @@ -1,11 +1,13 @@ -package com.songoda.ultimatestacker.database; +package com.craftaro.ultimatestacker.database; +import com.craftaro.ultimatestacker.api.stack.block.BlockStack; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack; +import com.craftaro.ultimatestacker.stackable.block.BlockStackImpl; +import com.craftaro.ultimatestacker.stackable.spawner.SpawnerStackImpl; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.database.DataManagerAbstract; import com.songoda.core.database.DatabaseConnector; import com.songoda.core.database.DatabaseType; -import com.songoda.ultimatestacker.stackable.block.BlockStack; -import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; @@ -102,13 +104,13 @@ public class DataManager extends DataManagerAbstract { statement.setInt(1, blockStack.getAmount()); statement.setString(2, blockStack.getMaterial().name()); - statement.setString(3, blockStack.getWorld().getName()); - statement.setInt(4, blockStack.getX()); - statement.setInt(5, blockStack.getY()); - statement.setInt(6, blockStack.getZ()); + statement.setString(3, blockStack.getLocation().getWorld().getName()); + statement.setInt(4, (int) blockStack.getLocation().getX()); + statement.setInt(5, (int) blockStack.getLocation().getY()); + statement.setInt(6, (int) blockStack.getLocation().getZ()); statement.executeUpdate(); int blockId = this.lastInsertedId(connection, "blocks"); - this.sync(() -> blockStack.setId(blockId)); + this.sync(() -> ((BlockStackImpl)blockStack).setId(blockId)); } catch (Exception ex) { ex.printStackTrace(); } @@ -128,7 +130,7 @@ public class DataManager extends DataManagerAbstract { }); } - public void deleteBlock(BlockStack blockStack) { + public void deleteBlock(BlockStackImpl blockStack) { this.runAsync(() -> { try (Connection connection = this.databaseConnector.getConnection()) { String deleteBlock = "DELETE FROM " + this.getTablePrefix() + "blocks WHERE id = ?"; @@ -165,7 +167,7 @@ public class DataManager extends DataManagerAbstract { int z = result.getInt("z"); Location location = new Location(world, x, y, z); - SpawnerStack spawnerStack = new SpawnerStack(location, amount); + SpawnerStack spawnerStack = new SpawnerStackImpl(location, amount); spawnerStack.setId(spawnerId); spawners.put(location, spawnerStack); } @@ -207,7 +209,7 @@ public class DataManager extends DataManagerAbstract { int z = result.getInt("z"); Location location = new Location(world, x, y, z); - BlockStack blockStack = new BlockStack(material, location, amount); + BlockStackImpl blockStack = new BlockStackImpl(material, location, amount); blockStack.setId(blockId); if (amount == 0) { //remove from database diff --git a/src/main/java/com/songoda/ultimatestacker/database/migrations/_1_InitialMigration.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_1_InitialMigration.java similarity index 90% rename from src/main/java/com/songoda/ultimatestacker/database/migrations/_1_InitialMigration.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_1_InitialMigration.java index 4eba4ad..3df7466 100644 --- a/src/main/java/com/songoda/ultimatestacker/database/migrations/_1_InitialMigration.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_1_InitialMigration.java @@ -1,8 +1,8 @@ -package com.songoda.ultimatestacker.database.migrations; +package com.craftaro.ultimatestacker.database.migrations; import com.songoda.core.database.DataMigration; import com.songoda.core.database.MySQLConnector; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import java.sql.Connection; import java.sql.SQLException; diff --git a/src/main/java/com/songoda/ultimatestacker/database/migrations/_2_EntityStacks.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_2_EntityStacks.java similarity index 89% rename from src/main/java/com/songoda/ultimatestacker/database/migrations/_2_EntityStacks.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_2_EntityStacks.java index 4ab17b0..862b292 100644 --- a/src/main/java/com/songoda/ultimatestacker/database/migrations/_2_EntityStacks.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_2_EntityStacks.java @@ -1,8 +1,8 @@ -package com.songoda.ultimatestacker.database.migrations; +package com.craftaro.ultimatestacker.database.migrations; import com.songoda.core.database.DataMigration; import com.songoda.core.database.MySQLConnector; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import java.sql.Connection; import java.sql.SQLException; diff --git a/src/main/java/com/songoda/ultimatestacker/database/migrations/_3_BlockStacks.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_3_BlockStacks.java similarity index 90% rename from src/main/java/com/songoda/ultimatestacker/database/migrations/_3_BlockStacks.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_3_BlockStacks.java index 1a15bcb..2ef4541 100644 --- a/src/main/java/com/songoda/ultimatestacker/database/migrations/_3_BlockStacks.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_3_BlockStacks.java @@ -1,8 +1,8 @@ -package com.songoda.ultimatestacker.database.migrations; +package com.craftaro.ultimatestacker.database.migrations; import com.songoda.core.database.DataMigration; import com.songoda.core.database.MySQLConnector; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import java.sql.Connection; import java.sql.SQLException; diff --git a/src/main/java/com/songoda/ultimatestacker/database/migrations/_6_RemoveStackedEntityTable.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_6_RemoveStackedEntityTable.java similarity index 91% rename from src/main/java/com/songoda/ultimatestacker/database/migrations/_6_RemoveStackedEntityTable.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_6_RemoveStackedEntityTable.java index ecf5bcc..6a44199 100644 --- a/src/main/java/com/songoda/ultimatestacker/database/migrations/_6_RemoveStackedEntityTable.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/database/migrations/_6_RemoveStackedEntityTable.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.database.migrations; +package com.craftaro.ultimatestacker.database.migrations; import com.songoda.core.database.DataMigration; diff --git a/src/main/java/com/songoda/ultimatestacker/gui/GUIConvert.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/gui/GUIConvert.java similarity index 85% rename from src/main/java/com/songoda/ultimatestacker/gui/GUIConvert.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/gui/GUIConvert.java index 80861c7..5a34286 100644 --- a/src/main/java/com/songoda/ultimatestacker/gui/GUIConvert.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/gui/GUIConvert.java @@ -1,10 +1,10 @@ -package com.songoda.ultimatestacker.gui; +package com.craftaro.ultimatestacker.gui; +import com.craftaro.ultimatestacker.convert.StackMobConvert; +import com.craftaro.ultimatestacker.convert.WildStackerConvert; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.gui.Gui; import com.songoda.core.gui.GuiUtils; -import com.songoda.ultimatestacker.convert.StackMobConvert; -import com.songoda.ultimatestacker.convert.WildStackerConvert; import org.bukkit.Bukkit; import org.bukkit.ChatColor; diff --git a/src/main/java/com/songoda/ultimatestacker/gui/GUIConvertWhat.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/gui/GUIConvertWhat.java similarity index 96% rename from src/main/java/com/songoda/ultimatestacker/gui/GUIConvertWhat.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/gui/GUIConvertWhat.java index a9b2c8a..bfb9b85 100644 --- a/src/main/java/com/songoda/ultimatestacker/gui/GUIConvertWhat.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/gui/GUIConvertWhat.java @@ -1,10 +1,10 @@ -package com.songoda.ultimatestacker.gui; +package com.craftaro.ultimatestacker.gui; +import com.craftaro.ultimatestacker.convert.Convert; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.gui.Gui; import com.songoda.core.gui.GuiUtils; import com.songoda.core.utils.TextUtils; -import com.songoda.ultimatestacker.convert.Convert; import org.bukkit.ChatColor; import org.bukkit.entity.Player; diff --git a/src/main/java/com/songoda/ultimatestacker/hook/StackerHook.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/hook/StackerHook.java similarity index 73% rename from src/main/java/com/songoda/ultimatestacker/hook/StackerHook.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/hook/StackerHook.java index e87b202..b649ac4 100644 --- a/src/main/java/com/songoda/ultimatestacker/hook/StackerHook.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/hook/StackerHook.java @@ -1,6 +1,6 @@ -package com.songoda.ultimatestacker.hook; +package com.craftaro.ultimatestacker.hook; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; import org.bukkit.entity.Player; public interface StackerHook { diff --git a/src/main/java/com/songoda/ultimatestacker/hook/hooks/JobsHook.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/hook/hooks/JobsHook.java similarity index 76% rename from src/main/java/com/songoda/ultimatestacker/hook/hooks/JobsHook.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/hook/hooks/JobsHook.java index e0f0400..552251e 100644 --- a/src/main/java/com/songoda/ultimatestacker/hook/hooks/JobsHook.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/hook/hooks/JobsHook.java @@ -1,8 +1,9 @@ -package com.songoda.ultimatestacker.hook.hooks; +package com.craftaro.ultimatestacker.hook.hooks; +import com.bgsoftware.wildstacker.api.objects.StackedEntity; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; import com.songoda.core.hooks.jobs.JobsPlayerHandler; -import com.songoda.ultimatestacker.hook.StackerHook; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; +import com.craftaro.ultimatestacker.hook.StackerHook; import org.bukkit.GameMode; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/BlockListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/BlockListeners.java similarity index 91% rename from src/main/java/com/songoda/ultimatestacker/listeners/BlockListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/BlockListeners.java index 7cf8cfe..a53780a 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/BlockListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/BlockListeners.java @@ -1,17 +1,19 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.UltimateStackerAPI; +import com.craftaro.ultimatestacker.api.stack.block.BlockStack; +import com.craftaro.ultimatestacker.api.stack.block.BlockStackManager; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack; +import com.craftaro.ultimatestacker.api.events.spawner.SpawnerBreakEvent; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.spawner.SpawnerStackImpl; +import com.craftaro.ultimatestacker.utils.Methods; import com.songoda.core.compatibility.CompatibleHand; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.hooks.ProtectionManager; import com.songoda.core.third_party.de.tr7zw.nbtapi.NBTItem; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.events.SpawnerBreakEvent; -import com.songoda.ultimatestacker.events.SpawnerPlaceEvent; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.block.BlockStack; -import com.songoda.ultimatestacker.stackable.block.BlockStackManager; -import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack; -import com.songoda.ultimatestacker.utils.Methods; +import com.craftaro.ultimatestacker.api.events.spawner.SpawnerPlaceEvent; import org.apache.commons.lang.math.NumberUtils; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -174,7 +176,7 @@ public class BlockListeners implements Listener { event.setCancelled(true); if (itemType == blockType) { - SpawnerStack stack = plugin.getSpawnerStackManager().getSpawner(block); + SpawnerStack stack = UltimateStackerAPI.getSpawnerStackManager().getSpawner(block); if (player.isSneaking()) return; if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (stack.getAmount() == maxStackSize) return; @@ -229,7 +231,7 @@ public class BlockListeners implements Listener { return; } - SpawnerStack stack = plugin.getSpawnerStackManager().addSpawner(new SpawnerStack(block.getLocation(), amount)); + SpawnerStack stack = UltimateStackerAPI.getSpawnerStackManager().addSpawner(new SpawnerStackImpl(block.getLocation(), amount)); plugin.getDataManager().createSpawner(stack); cs.setSpawnedType(cs2.getSpawnedType()); @@ -254,7 +256,7 @@ public class BlockListeners implements Listener { Player player = event.getPlayer(); ItemStack item = player.getInventory().getItemInHand(); - SpawnerStack stack = plugin.getSpawnerStackManager().getSpawner(block); + SpawnerStack stack = UltimateStackerAPI.getSpawnerStackManager().getSpawner(block); event.setCancelled(true); @@ -276,7 +278,7 @@ public class BlockListeners implements Listener { if (remove) { event.setCancelled(false); plugin.removeHologram(stack); - SpawnerStack spawnerStack = plugin.getSpawnerStackManager().removeSpawner(block.getLocation()); + SpawnerStack spawnerStack = UltimateStackerAPI.getSpawnerStackManager().removeSpawner(block.getLocation()); plugin.getDataManager().deleteSpawner(spawnerStack); } else { stack.setAmount(stack.getAmount() - 1); diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/BreedListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/BreedListeners.java similarity index 90% rename from src/main/java/com/songoda/ultimatestacker/listeners/BreedListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/BreedListeners.java index af9f2e5..5131dce 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/BreedListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/BreedListeners.java @@ -1,6 +1,6 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/ClearLagListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/ClearLagListeners.java similarity index 78% rename from src/main/java/com/songoda/ultimatestacker/listeners/ClearLagListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/ClearLagListeners.java index 360c43c..aea565e 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/ClearLagListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/ClearLagListeners.java @@ -1,6 +1,6 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; import me.minebuilders.clearlag.events.EntityRemoveEvent; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -19,7 +19,7 @@ public class ClearLagListeners implements Listener { public void onClearLaggTask(EntityRemoveEvent event) { for (Entity entity : event.getWorld().getEntities()) { if (entity instanceof LivingEntity && plugin.getEntityStackManager().isStackedEntity(entity)) { - plugin.getEntityStackManager().getStack((LivingEntity) entity).destroy(); + plugin.getEntityStackManager().getStackedEntity((LivingEntity) entity).destroy(); event.addEntity(entity); } } diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/DeathListeners.java similarity index 94% rename from src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/DeathListeners.java index eddcebd..dd0c1bf 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/DeathListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/DeathListeners.java @@ -1,12 +1,13 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.entity.EntityStackImpl; import com.songoda.core.compatibility.ServerProject; import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.lootables.loot.Drop; import com.songoda.core.lootables.loot.DropUtils; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.GameRule; @@ -88,7 +89,7 @@ public class DeathListeners implements Listener { runCommands(entity, drops); if (plugin.getEntityStackManager().isStackedEntity(event.getEntity())) { - plugin.getEntityStackManager().getStack(event.getEntity()).onDeath(entity, drops, custom, event.getDroppedExp(), event); + ((EntityStackImpl)plugin.getEntityStackManager().getStackedEntity(event.getEntity())).onDeath(entity, drops, custom, event.getDroppedExp(), event); } else { DropUtils.processStackedDrop(event.getEntity(), drops, event); } @@ -182,7 +183,7 @@ public class DeathListeners implements Listener { if (!(event.getEntity() instanceof LivingEntity)) return; LivingEntity entity = (LivingEntity) event.getEntity(); if (!plugin.getEntityStackManager().isStackedEntity(entity)) return; - EntityStack stack = plugin.getEntityStackManager().getStack(entity); + EntityStack stack = plugin.getEntityStackManager().getStackedEntity(entity); Player player = (Player) event.getDamager(); diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/InteractListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/InteractListeners.java similarity index 94% rename from src/main/java/com/songoda/ultimatestacker/listeners/InteractListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/InteractListeners.java index 96eb7c8..630838d 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/InteractListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/InteractListeners.java @@ -1,11 +1,11 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.entity.Split; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.ServerVersion; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.Split; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Ageable; @@ -41,7 +41,7 @@ public class InteractListeners implements Listener { if (item.getType() != Material.NAME_TAG && !correctFood(item, entity)) return; - EntityStack stack = plugin.getEntityStackManager().getStack(entity); + EntityStack stack = plugin.getEntityStackManager().getStackedEntity(entity); if (stack.getAmount() <= 1 || item.getType() == Material.NAME_TAG diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/ShearListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/ShearListeners.java similarity index 88% rename from src/main/java/com/songoda/ultimatestacker/listeners/ShearListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/ShearListeners.java index 3077b7a..ec07e9b 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/ShearListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/ShearListeners.java @@ -1,12 +1,13 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.ServerVersion; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; -import com.songoda.ultimatestacker.stackable.entity.Split; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.entity.EntityStackManagerImpl; +import com.craftaro.ultimatestacker.stackable.entity.Split; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.entity.Entity; @@ -48,7 +49,7 @@ public class ShearListeners implements Listener { return; - EntityStack stack = stackManager.getStack(entity); + EntityStack stack = stackManager.getStackedEntity(entity); if (Settings.SHEAR_IN_ONE_CLICK.getBoolean()) { World world = entity.getLocation().getWorld(); diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/SheepDyeListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/SheepDyeListeners.java similarity index 61% rename from src/main/java/com/songoda/ultimatestacker/listeners/SheepDyeListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/SheepDyeListeners.java index 914a835..1b6112f 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/SheepDyeListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/SheepDyeListeners.java @@ -1,10 +1,11 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; -import com.songoda.ultimatestacker.stackable.entity.Split; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.entity.EntityStackManagerImpl; +import com.craftaro.ultimatestacker.stackable.entity.Split; import org.bukkit.entity.LivingEntity; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -28,7 +29,7 @@ public class SheepDyeListeners implements Listener { if (Settings.SPLIT_CHECKS.getStringList().stream().noneMatch(line -> Split.valueOf(line) == Split.SHEEP_DYE)) return; - EntityStack stack = stackManager.getStack(entity); + EntityStack stack = stackManager.getStackedEntity(entity); if (stack == null) return; stack.releaseHost(); } diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/SpawnerListeners.java similarity index 89% rename from src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/SpawnerListeners.java index ed413c7..6f65cb4 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/SpawnerListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/SpawnerListeners.java @@ -1,14 +1,16 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; +import com.craftaro.ultimatestacker.api.UltimateStackerAPI; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStackManager; import com.songoda.core.compatibility.CompatibleHand; import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.nms.NmsManager; import com.songoda.core.third_party.de.tr7zw.nbtapi.NBTItem; import com.songoda.core.utils.EntityUtils; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack; -import com.songoda.ultimatestacker.stackable.spawner.SpawnerStackManager; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.spawner.SpawnerStackImpl; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -19,7 +21,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.SpawnerSpawnEvent; @@ -43,7 +44,7 @@ public class SpawnerListeners implements Listener { if (!plugin.spawnersEnabled() || plugin.getStackingTask().isWorldDisabled(event.getLocation().getWorld())) return; - SpawnerStackManager spawnerStackManager = plugin.getSpawnerStackManager(); + SpawnerStackManager spawnerStackManager = UltimateStackerAPI.getSpawnerStackManager(); if (!spawnerStackManager.isSpawner(event.getSpawner().getLocation())) return; Entity entity = event.getEntity(); @@ -77,7 +78,7 @@ public class SpawnerListeners implements Listener { entity.setMetadata("mcMMO: Spawned Entity", new FixedMetadataValue(plugin, true)); } - UltimateStacker.getInstance().getEntityStackManager().setStack(e, amountToSpawn); + UltimateStacker.getInstance().getEntityStackManager().createStackedEntity(e, amountToSpawn); return true; }, event.getEntityType()); } @@ -109,10 +110,10 @@ public class SpawnerListeners implements Listener { return; } - SpawnerStackManager manager = plugin.getSpawnerStackManager(); + SpawnerStackManager manager = UltimateStackerAPI.getSpawnerStackManager(); SpawnerStack spawner = manager.isSpawner(block.getLocation()) - ? manager.getSpawner(block) : manager.addSpawner(new SpawnerStack(block.getLocation(), 1)); + ? manager.getSpawner(block) : manager.addSpawner(new SpawnerStackImpl(block.getLocation(), 1)); int stackSize = spawner.getAmount(); int amt = player.getInventory().getItemInHand().getAmount(); diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/TameListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/TameListeners.java similarity index 68% rename from src/main/java/com/songoda/ultimatestacker/listeners/TameListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/TameListeners.java index 2335c64..19f606f 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/TameListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/TameListeners.java @@ -1,8 +1,9 @@ -package com.songoda.ultimatestacker.listeners; +package com.craftaro.ultimatestacker.listeners; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; +import com.craftaro.ultimatestacker.stackable.entity.EntityStackManagerImpl; import org.bukkit.entity.LivingEntity; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -23,7 +24,7 @@ public class TameListeners implements Listener { EntityStackManager stackManager = plugin.getEntityStackManager(); if (!stackManager.isStackedEntity(entity)) return; - EntityStack stack = plugin.getEntityStackManager().getStack(entity); + EntityStack stack = plugin.getEntityStackManager().getStackedEntity(entity); if (stack.getAmount() <= 1) return; diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/entity/EntityCurrentListener.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/entity/EntityCurrentListener.java similarity index 77% rename from src/main/java/com/songoda/ultimatestacker/listeners/entity/EntityCurrentListener.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/entity/EntityCurrentListener.java index a976c2a..4dbf63c 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/entity/EntityCurrentListener.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/entity/EntityCurrentListener.java @@ -1,8 +1,9 @@ -package com.songoda.ultimatestacker.listeners.entity; +package com.craftaro.ultimatestacker.listeners.entity; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; +import com.craftaro.ultimatestacker.stackable.entity.EntityStackManagerImpl; import org.bukkit.entity.LivingEntity; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/entity/EntityListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/entity/EntityListeners.java similarity index 87% rename from src/main/java/com/songoda/ultimatestacker/listeners/entity/EntityListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/entity/EntityListeners.java index 7a6284c..538e24d 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/entity/EntityListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/entity/EntityListeners.java @@ -1,12 +1,13 @@ -package com.songoda.ultimatestacker.listeners.entity; +package com.craftaro.ultimatestacker.listeners.entity; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.UltimateStackerAPI; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.utils.Methods; import com.songoda.core.compatibility.CompatibleMaterial; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; -import com.songoda.ultimatestacker.stackable.spawner.SpawnerStack; -import com.songoda.ultimatestacker.utils.Methods; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -20,7 +21,6 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -64,7 +64,7 @@ public class EntityListeners implements Listener { if (!stackManager.isStackedEntity(entity)) return; - EntityStack stack = stackManager.getStack(entity); + EntityStack stack = stackManager.getStackedEntity(entity); ItemStack item = event.getEntity().getItemStack(); int amount = (stack.getAmount() - 1) + item.getAmount(); @@ -114,7 +114,7 @@ public class EntityListeners implements Listener { Location spawnLocation = block.getLocation(); - SpawnerStack spawner = plugin.getSpawnerStackManager().getSpawner(block); + SpawnerStack spawner = UltimateStackerAPI.getSpawnerStackManager().getSpawner(block); if (Settings.SPAWNERS_DONT_EXPLODE.getBoolean()) toCancel.add(block); @@ -132,7 +132,7 @@ public class EntityListeners implements Listener { ItemStack item = Methods.getSpawnerItem(blockType, spawner.getAmount()); spawnLocation.getWorld().dropItemNaturally(spawnLocation.clone().add(.5, 0, .5), item); - SpawnerStack spawnerStack = plugin.getSpawnerStackManager().removeSpawner(spawnLocation); + SpawnerStack spawnerStack = UltimateStackerAPI.getSpawnerStackManager().removeSpawner(spawnLocation); plugin.getDataManager().deleteSpawner(spawnerStack); plugin.removeHologram(spawnerStack); } diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/item/ItemCurrentListener.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemCurrentListener.java similarity index 87% rename from src/main/java/com/songoda/ultimatestacker/listeners/item/ItemCurrentListener.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemCurrentListener.java index 9f8d66c..064eb1d 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/item/ItemCurrentListener.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemCurrentListener.java @@ -1,9 +1,9 @@ -package com.songoda.ultimatestacker.listeners.item; +package com.craftaro.ultimatestacker.listeners.item; import com.songoda.core.compatibility.CompatibleSound; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.utils.Methods; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.utils.Methods; import org.bukkit.entity.Arrow; import org.bukkit.entity.Item; import org.bukkit.entity.Player; diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/item/ItemLegacyListener.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemLegacyListener.java similarity index 85% rename from src/main/java/com/songoda/ultimatestacker/listeners/item/ItemLegacyListener.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemLegacyListener.java index 0454637..f10dcee 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/item/ItemLegacyListener.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemLegacyListener.java @@ -1,9 +1,9 @@ -package com.songoda.ultimatestacker.listeners.item; +package com.craftaro.ultimatestacker.listeners.item; import com.songoda.core.compatibility.CompatibleSound; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.utils.Methods; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.utils.Methods; import org.bukkit.entity.Arrow; import org.bukkit.entity.Item; import org.bukkit.event.EventHandler; diff --git a/src/main/java/com/songoda/ultimatestacker/listeners/item/ItemListeners.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemListeners.java similarity index 94% rename from src/main/java/com/songoda/ultimatestacker/listeners/item/ItemListeners.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemListeners.java index 06f53e1..fb91db7 100644 --- a/src/main/java/com/songoda/ultimatestacker/listeners/item/ItemListeners.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/listeners/item/ItemListeners.java @@ -1,9 +1,9 @@ -package com.songoda.ultimatestacker.listeners.item; +package com.craftaro.ultimatestacker.listeners.item; import com.songoda.core.nms.NmsManager; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.utils.Methods; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.utils.Methods; import org.apache.commons.lang.StringUtils; import org.bukkit.block.Block; import org.bukkit.block.BlockState; diff --git a/src/main/java/com/songoda/ultimatestacker/lootables/LootablesManager.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/lootables/LootablesManager.java similarity index 99% rename from src/main/java/com/songoda/ultimatestacker/lootables/LootablesManager.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/lootables/LootablesManager.java index c099c80..9984aba 100644 --- a/src/main/java/com/songoda/ultimatestacker/lootables/LootablesManager.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/lootables/LootablesManager.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.lootables; +package com.craftaro.ultimatestacker.lootables; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.ServerVersion; @@ -9,8 +9,8 @@ import com.songoda.core.lootables.loot.Loot; import com.songoda.core.lootables.loot.LootBuilder; import com.songoda.core.lootables.loot.LootManager; import com.songoda.core.lootables.loot.Lootable; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.settings.Settings; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Ageable; import org.bukkit.entity.Creeper; diff --git a/src/main/java/com/songoda/ultimatestacker/settings/Settings.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/settings/Settings.java similarity index 98% rename from src/main/java/com/songoda/ultimatestacker/settings/Settings.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/settings/Settings.java index 816789e..8b76955 100644 --- a/src/main/java/com/songoda/ultimatestacker/settings/Settings.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/settings/Settings.java @@ -1,10 +1,10 @@ -package com.songoda.ultimatestacker.settings; +package com.craftaro.ultimatestacker.settings; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.stackable.entity.Check; +import com.craftaro.ultimatestacker.stackable.entity.Split; import com.songoda.core.configuration.Config; import com.songoda.core.configuration.ConfigSetting; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.stackable.entity.Check; -import com.songoda.ultimatestacker.stackable.entity.Split; import java.util.Arrays; import java.util.Collections; diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/block/BlockStackImpl.java similarity index 75% rename from src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/block/BlockStackImpl.java index 3e7d383..30536ac 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStack.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/block/BlockStackImpl.java @@ -1,17 +1,15 @@ -package com.songoda.ultimatestacker.stackable.block; +package com.craftaro.ultimatestacker.stackable.block; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.block.BlockStack; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.utils.TextUtils; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.Hologramable; -import com.songoda.ultimatestacker.utils.Stackable; +import com.craftaro.ultimatestacker.settings.Settings; import org.bukkit.Location; -import org.bukkit.World; import java.util.UUID; -public class BlockStack implements Stackable, Hologramable { +public class BlockStackImpl implements BlockStack { // This is the unique identifier for this stack. // It is reset on every plugin load. @@ -25,51 +23,56 @@ public class BlockStack implements Stackable, Hologramable { private final CompatibleMaterial material; private final Location location; - public BlockStack(CompatibleMaterial material, Location location) { + public BlockStackImpl(CompatibleMaterial material, Location location) { this.material = material; this.location = location; } - public BlockStack(CompatibleMaterial material, Location location, int amount) { + public BlockStackImpl(CompatibleMaterial material, Location location, int amount) { this.amount = amount; this.material = material; this.location = location; } + @Override + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + @Override public int getAmount() { return amount; } + @Override + public void setAmount(int amount) { + if (amount < 1) { + destroy(); + return; + } + this.amount = amount; + } + @Override public boolean isValid() { return CompatibleMaterial.getMaterial(location.getBlock()) == material; } + @Override public void add(int amount) { this.amount = this.amount + amount; } + @Override public void take(int amount) { this.amount = this.amount - amount; } - public int getX() { - return location.getBlockX(); - } - - public int getY() { - return location.getBlockY(); - } - - public int getZ() { - return location.getBlockZ(); - } - - public World getWorld() { - return location.getWorld(); - } - + @Override public void destroy() { amount = 0; UltimateStacker plugin = UltimateStacker.getInstance(); @@ -83,6 +86,7 @@ public class BlockStack implements Stackable, Hologramable { return location; } + @Override public CompatibleMaterial getMaterial() { return material; } @@ -103,14 +107,6 @@ public class BlockStack implements Stackable, Hologramable { return Settings.BLOCK_HOLOGRAMS.getBoolean(); } - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - @Override public String getHologramId() { return "UltimateStacker-" + uniqueId; @@ -118,7 +114,7 @@ public class BlockStack implements Stackable, Hologramable { @Override public String toString() { - return "BlockStack{" + + return "BlockStackImpl{" + "id=" + id + ", amount=" + amount + ", material=" + material + diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStackManager.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/block/BlockStackManagerImpl.java similarity index 85% rename from src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStackManager.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/block/BlockStackManagerImpl.java index 8445acd..34d8228 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/block/BlockStackManager.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/block/BlockStackManagerImpl.java @@ -1,5 +1,7 @@ -package com.songoda.ultimatestacker.stackable.block; +package com.craftaro.ultimatestacker.stackable.block; +import com.craftaro.ultimatestacker.api.stack.block.BlockStack; +import com.craftaro.ultimatestacker.api.stack.block.BlockStackManager; import com.songoda.core.compatibility.CompatibleMaterial; import org.bukkit.Location; import org.bukkit.block.Block; @@ -9,7 +11,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -public class BlockStackManager { +public class BlockStackManagerImpl implements BlockStackManager { private final Map registeredBlocks = new HashMap<>(); @@ -35,7 +37,7 @@ public class BlockStackManager { } public BlockStack createBlock(Location location, CompatibleMaterial material) { - return this.registeredBlocks.computeIfAbsent(location, b -> new BlockStack(material, location)); + return this.registeredBlocks.computeIfAbsent(location, b -> new BlockStackImpl(material, location)); } public BlockStack createBlock(Block block) { diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/Check.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/Check.java similarity index 96% rename from src/main/java/com/songoda/ultimatestacker/stackable/entity/Check.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/Check.java index 45e7ac9..90fee5b 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/Check.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/Check.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.stackable.entity; +package com.craftaro.ultimatestacker.stackable.entity; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStack.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/EntityStackImpl.java similarity index 64% rename from src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStack.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/EntityStackImpl.java index db42374..795159a 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStack.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/EntityStackImpl.java @@ -1,58 +1,106 @@ -package com.songoda.ultimatestacker.stackable.entity; +package com.craftaro.ultimatestacker.stackable.entity; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.events.entity.EntityStackKillEvent; +import com.craftaro.ultimatestacker.utils.Async; +import com.craftaro.ultimatestacker.utils.Methods; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.settings.Settings; import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.lootables.loot.Drop; import com.songoda.core.lootables.loot.DropUtils; import com.songoda.core.utils.EntityUtils; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.events.EntityStackKillEvent; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.utils.Async; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.entity.EntityType; import org.bukkit.entity.ExperienceOrb; import org.bukkit.entity.LivingEntity; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.util.Vector; import java.util.List; import java.util.Objects; +import java.util.UUID; -public class EntityStack extends StackedEntity { +public class EntityStackImpl implements EntityStack { - private static final UltimateStacker plugin = UltimateStacker.getInstance(); + private final UltimateStacker plugin = UltimateStacker.getInstance(); + private int amount; + private LivingEntity hostEntity; - public EntityStack(LivingEntity hostEntity) { - super(hostEntity); + /** + * Gets an existing stack from an entity or creates a new one if it doesn't exist. + * @param entity The entity to get the stack from. + */ + public EntityStackImpl(LivingEntity entity) { + if (entity == null) return; + if (!UltimateStacker.getInstance().getEntityStackManager().isStackedEntity(entity)) { + entity.setMetadata("US_AMOUNT", new FixedMetadataValue(UltimateStacker.getInstance(), 1)); + this.amount = 1; + updateNameTag(); + } else { + //get the amount from the entity + this.amount = UltimateStacker.getInstance().getEntityStackManager().getStackedEntity(entity).getAmount(); + } + this.hostEntity = entity; } - public EntityStack(LivingEntity hostEntity, int amount) { - super(hostEntity, amount); + /** + * Creates a new stack or overrides an existing stack. + * @param entity The entity to create the stack for. + * @param amount The amount of entities in the stack. + */ + public EntityStackImpl(LivingEntity entity, int amount) { + if (entity == null) return; + this.hostEntity = entity; + this.amount = amount; + entity.setMetadata("US_AMOUNT", new FixedMetadataValue(UltimateStacker.getInstance(), amount)); + updateNameTag(); } - public synchronized EntityStack addEntityToStack(int amount) { - setAmount(getAmount() + amount); - return this; + @Override + public EntityType getType() { + return hostEntity.getType(); } - public synchronized EntityStack removeEntityFromStack(int amount) { - setAmount(getAmount() - amount); - return this; + @Override + public int getAmount() { + return amount; } + @Override + public void setAmount(int amount) { + this.amount = amount; + this.hostEntity.setMetadata("US_AMOUNT", new FixedMetadataValue(UltimateStacker.getInstance(), amount)); + updateNameTag(); + } + + @Override + public void add(int amount) { + this.amount += amount; + } + + @Override + public void take(int amount) { + this.amount -= amount; + } + + @Override + public UUID getUuid() { + return hostEntity.getUniqueId(); + } + + @Override public LivingEntity getHostEntity() { return hostEntity; } - protected synchronized void setHostEntity(LivingEntity hostEntity) { - this.hostEntity = hostEntity; - } - private void handleWholeStackDeath(LivingEntity killed, List drops, boolean custom, int droppedExp, EntityDeathEvent event) { - EntityStack stack = plugin.getEntityStackManager().getStack(killed); + EntityStack stack = plugin.getEntityStackManager().getStackedEntity(killed); // In versions 1.14 and below experience is not dropping. Because of this we are doing this ourselves. if (ServerVersion.isServerVersionAtOrBelow(ServerVersion.V1_14)) { Location killedLocation = killed.getLocation(); @@ -75,13 +123,12 @@ public class EntityStack extends StackedEntity { } event.getDrops().clear(); - stack.destroy(); + destroy(); if (killed.getKiller() == null) return; plugin.addExp(killed.getKiller(), this); } private void handleSingleStackDeath(LivingEntity killed, List drops, int droppedExp, EntityDeathEvent event) { - EntityStackManager stackManager = plugin.getEntityStackManager(); Bukkit.getPluginManager().callEvent(new EntityStackKillEvent(this, false)); Vector velocity = killed.getVelocity().clone(); @@ -102,7 +149,7 @@ public class EntityStack extends StackedEntity { } newEntity.setVelocity(velocity); - stackManager.updateStack(killed, newEntity); + plugin.getEntityStackManager().updateStack(killed, newEntity); } public void onDeath(LivingEntity killed, List drops, boolean custom, int droppedExp, EntityDeathEvent event) { @@ -130,6 +177,7 @@ public class EntityStack extends StackedEntity { } } + @Override public synchronized LivingEntity takeOneAndSpawnEntity(Location location) { if (amount <= 0) return null; LivingEntity entity = Objects.requireNonNull(location.getWorld()).spawn(location, hostEntity.getClass()); @@ -142,6 +190,7 @@ public class EntityStack extends StackedEntity { return entity; } + @Override public synchronized void releaseHost() { LivingEntity oldHost = hostEntity; LivingEntity entity = takeOneAndSpawnEntity(hostEntity.getLocation()); @@ -153,17 +202,18 @@ public class EntityStack extends StackedEntity { } } + @Override public synchronized void destroy() { if (hostEntity == null) return; Bukkit.getScheduler().runTask(plugin, hostEntity::remove); hostEntity = null; } - @Override - public String toString() { - return "EntityStack{" + - "hostEntity=" + hostEntity + - ", amount=" + amount + - '}'; + private void updateNameTag() { + if (hostEntity == null) { + return; + } + hostEntity.setCustomNameVisible(!Settings.HOLOGRAMS_ON_LOOK_ENTITY.getBoolean()); + hostEntity.setCustomName(Methods.compileEntityName(hostEntity, getAmount())); } } diff --git a/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/EntityStackManagerImpl.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/EntityStackManagerImpl.java new file mode 100644 index 0000000..8d8477c --- /dev/null +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/EntityStackManagerImpl.java @@ -0,0 +1,93 @@ +package com.craftaro.ultimatestacker.stackable.entity; + +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.metadata.FixedMetadataValue; + +import java.util.UUID; + +public class EntityStackManagerImpl implements EntityStackManager { + + private final UltimateStacker plugin; + + public EntityStackManagerImpl(UltimateStacker plugin) { + this.plugin = plugin; + } + + @Override + public EntityStack createStackedEntity(LivingEntity entity, int amount) { + return new EntityStackImpl(entity, amount); + } + + @Override + public boolean isStackedEntity(Entity entity) { + return entity.hasMetadata("US_AMOUNT"); + } + + @Override + public EntityStack getStackedEntity(UUID entityUUID) { + Entity entity = Bukkit.getEntity(entityUUID); + if (entity == null) return null; + if (!isStackedEntity(entity)) return null; + return new EntityStackImpl((LivingEntity) entity); + } + + @Override + public EntityStack getStackedEntity(LivingEntity entity) { + if (!isStackedEntity(entity)) return null; + return new EntityStackImpl(entity); + } + + @Deprecated() + public boolean isStackedAndLoaded(LivingEntity entity) { + return isStackedEntity(entity); + } + + public int getAmount(Entity entity) { + if (!isStackedEntity(entity)) return 1; + if (entity.getMetadata("US_AMOUNT").isEmpty()) return 1; + return entity.getMetadata("US_AMOUNT").get(0).asInt(); + } + + @Override + public String getLastPlayerDamage(Entity entity) { + if (!entity.hasMetadata("US_LAST_PLAYER_DAMAGE")) return null; + if (entity.getMetadata("US_LAST_PLAYER_DAMAGE").isEmpty()) return null; + return entity.getMetadata("US_LAST_PLAYER_DAMAGE").get(0).asString(); + } + + @Override + public void setLastPlayerDamage(Entity entity, Player player) { + if (player == null) return; + if (entity == null) return; + if (entity instanceof Player) return; + entity.setMetadata("US_LAST_PLAYER_DAMAGE", new FixedMetadataValue(plugin, player.getName())); + } + + @Override + public EntityStack transferStack(LivingEntity oldEntity, LivingEntity newEntity, boolean takeOne) { + EntityStack stack = getStackedEntity(oldEntity); + if (stack == null) return null; + EntityStack newStack = new EntityStackImpl(newEntity, takeOne ? stack.getAmount()-1 : stack.getAmount()); + stack.destroy(); + return newStack; + } + + @Override + public EntityStack updateStack(LivingEntity oldEntity, LivingEntity newEntity) { + EntityStack stack = getStackedEntity(oldEntity); + if (stack == null) return null; + int amount = stack.getAmount()-1; + stack.destroy(); + if (amount == 0 && newEntity != null) { + newEntity.remove(); + return null; + } + return createStackedEntity(newEntity, amount); + } +} diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/Split.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/Split.java similarity index 65% rename from src/main/java/com/songoda/ultimatestacker/stackable/entity/Split.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/Split.java index 9306a5a..47f70f2 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/Split.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/Split.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.stackable.entity; +package com.craftaro.ultimatestacker.stackable.entity; public enum Split { diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/CustomEntity.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/CustomEntity.java similarity index 92% rename from src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/CustomEntity.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/CustomEntity.java index 65bb26e..500b34f 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/CustomEntity.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/CustomEntity.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.stackable.entity.custom; +package com.craftaro.ultimatestacker.stackable.entity.custom; import org.bukkit.Location; import org.bukkit.entity.Entity; diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/CustomEntityManager.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/CustomEntityManager.java similarity index 87% rename from src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/CustomEntityManager.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/CustomEntityManager.java index 73fc0bd..1162142 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/CustomEntityManager.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/CustomEntityManager.java @@ -1,8 +1,8 @@ -package com.songoda.ultimatestacker.stackable.entity.custom; +package com.craftaro.ultimatestacker.stackable.entity.custom; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.entity.custom.entities.MythicMobsCustomEntity; -import com.songoda.ultimatestacker.stackable.entity.custom.entities.MythicMobsCustomEntityLegacy; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.entity.custom.entities.MythicMobsCustomEntity; +import com.craftaro.ultimatestacker.stackable.entity.custom.entities.MythicMobsCustomEntityLegacy; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.plugin.Plugin; diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntity.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntity.java similarity index 96% rename from src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntity.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntity.java index 714eb86..d4c00f1 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntity.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntity.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.stackable.entity.custom.entities; +package com.craftaro.ultimatestacker.stackable.entity.custom.entities; import io.lumine.mythic.api.mobs.MobManager; import io.lumine.mythic.bukkit.BukkitAdapter; diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntityLegacy.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntityLegacy.java similarity index 98% rename from src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntityLegacy.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntityLegacy.java index 252bec6..05acc14 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntityLegacy.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsCustomEntityLegacy.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.stackable.entity.custom.entities; +package com.craftaro.ultimatestacker.stackable.entity.custom.entities; import org.bukkit.Bukkit; import org.bukkit.Location; diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsProvider.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsProvider.java similarity index 55% rename from src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsProvider.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsProvider.java index 75fee23..97521e9 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/custom/entities/MythicMobsProvider.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/entity/custom/entities/MythicMobsProvider.java @@ -1,6 +1,6 @@ -package com.songoda.ultimatestacker.stackable.entity.custom.entities; +package com.craftaro.ultimatestacker.stackable.entity.custom.entities; -import com.songoda.ultimatestacker.stackable.entity.custom.CustomEntity; +import com.craftaro.ultimatestacker.stackable.entity.custom.CustomEntity; import org.bukkit.plugin.Plugin; public abstract class MythicMobsProvider extends CustomEntity { diff --git a/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/item/ItemStackImpl.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/item/ItemStackImpl.java new file mode 100644 index 0000000..704ee4e --- /dev/null +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/item/ItemStackImpl.java @@ -0,0 +1,35 @@ +package com.craftaro.ultimatestacker.stackable.item; + +import com.craftaro.ultimatestacker.api.stack.item.ItemStack; +import com.songoda.core.compatibility.CompatibleMaterial; +import org.bukkit.entity.Item; + +public class ItemStackImpl implements ItemStack { + + private CompatibleMaterial material; + private Item item; + private int amount; + + public ItemStackImpl() { + } + + @Override + public int getAmount() { + return 0; + } + + @Override + public void setAmount(int amount) { + + } + + @Override + public void add(int amount) { + + } + + @Override + public void take(int amount) { + + } +} diff --git a/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/item/ItemStackManagerImpl.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/item/ItemStackManagerImpl.java new file mode 100644 index 0000000..7374cc5 --- /dev/null +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/item/ItemStackManagerImpl.java @@ -0,0 +1,18 @@ +package com.craftaro.ultimatestacker.stackable.item; + +import com.craftaro.ultimatestacker.api.stack.item.ItemStack; +import com.craftaro.ultimatestacker.api.stack.item.ItemStackManager; +import org.bukkit.entity.Item; + +public class ItemStackManagerImpl implements ItemStackManager { + + @Override + public ItemStack getItem(Item item) { + return null; + } + + @Override + public ItemStack createStack(Item item, int amount) { + return null; + } +} diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackImpl.java similarity index 70% rename from src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackImpl.java index d83d067..7d17a11 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStack.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackImpl.java @@ -1,21 +1,23 @@ -package com.songoda.ultimatestacker.stackable.spawner; +package com.craftaro.ultimatestacker.stackable.spawner; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.UltimateStackerAPI; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack; +import com.craftaro.ultimatestacker.utils.Methods; import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.nms.world.SpawnedEntity; import com.songoda.core.world.SSpawner; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.Hologramable; -import com.songoda.ultimatestacker.utils.Methods; -import com.songoda.ultimatestacker.utils.Stackable; +import com.craftaro.ultimatestacker.settings.Settings; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.CreatureSpawner; import org.bukkit.entity.EntityType; import java.util.Random; +import java.util.Set; import java.util.UUID; -public class SpawnerStack extends SSpawner implements Stackable, Hologramable { +public class SpawnerStackImpl extends SSpawner implements SpawnerStack { // This is the unique identifier for this spawner. // It is reset on every plugin load. @@ -28,7 +30,7 @@ public class SpawnerStack extends SSpawner implements Stackable, Hologramable { private static final UltimateStacker plugin = UltimateStacker.getInstance(); - public SpawnerStack(Location location, int amount) { + public SpawnerStackImpl(Location location, int amount) { super(location); this.amount = amount; } @@ -43,11 +45,22 @@ public class SpawnerStack extends SSpawner implements Stackable, Hologramable { return CompatibleMaterial.getMaterial(location.getBlock()) == CompatibleMaterial.SPAWNER; } + @Override public void setAmount(int amount) { this.amount = amount; plugin.getDataManager().updateSpawner(this); } + @Override + public void add(int amount) { + this.amount += amount; + } + + @Override + public void take(int amount) { + this.amount -= amount; + } + public int calculateSpawnCount(EntityType type) { if (!UltimateStacker.getInstance().getMobFile().getBoolean("Mobs." + type.name() + ".Enabled")) { return 0; @@ -61,6 +74,14 @@ public class SpawnerStack extends SSpawner implements Stackable, Hologramable { return count; } + public int spawn(int amountToSpawn, EntityType... types) { + return super.spawn(amountToSpawn, types); + } + + public int spawn(int amountToSpawn, String particle, Set canSpawnOn, SpawnedEntity spawned, EntityType... types) { + return super.spawn(amountToSpawn, particle, canSpawnOn, spawned, types); + } + public int getId() { return this.id; } @@ -76,7 +97,7 @@ public class SpawnerStack extends SSpawner implements Stackable, Hologramable { @Override public String getHologramName() { if (!(location.getBlock().getState() instanceof CreatureSpawner)) { - plugin.getSpawnerStackManager().removeSpawner(location); + UltimateStackerAPI.getSpawnerStackManager().removeSpawner(location); return null; } CreatureSpawner creatureSpawner = (CreatureSpawner) location.getBlock().getState(); @@ -111,7 +132,7 @@ public class SpawnerStack extends SSpawner implements Stackable, Hologramable { @Override public String toString() { - return "SpawnerStack:{" + return "SpawnerStackImpl:{" + "Amount:\"" + amount + "\"," + "Location:{" + "World:\"" + location.getWorld().getName() + "\"," diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStackManager.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackManagerImpl.java similarity index 79% rename from src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStackManager.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackManagerImpl.java index 91214b1..9873489 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/spawner/SpawnerStackManager.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackManagerImpl.java @@ -1,6 +1,8 @@ -package com.songoda.ultimatestacker.stackable.spawner; +package com.craftaro.ultimatestacker.stackable.spawner; -import com.songoda.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStackManager; import org.bukkit.Location; import org.bukkit.block.Block; @@ -9,40 +11,47 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -public class SpawnerStackManager { +public class SpawnerStackManagerImpl implements SpawnerStackManager { private final Map registeredSpawners = new HashMap<>(); + @Override public void addSpawners(Map spawners) { this.registeredSpawners.putAll(spawners); } + @Override public SpawnerStack addSpawner(SpawnerStack spawnerStack) { this.registeredSpawners.put(roundLocation(spawnerStack.getLocation()), spawnerStack); return spawnerStack; } + @Override public SpawnerStack removeSpawner(Location location) { return registeredSpawners.remove(roundLocation(location)); } + @Override public SpawnerStack getSpawner(Location location) { if (!this.registeredSpawners.containsKey(roundLocation(location))) { - SpawnerStack spawnerStack = addSpawner(new SpawnerStack(roundLocation(location), 1)); + SpawnerStack spawnerStack = addSpawner(new SpawnerStackImpl(roundLocation(location), 1)); UltimateStacker.getInstance().getDataManager().createSpawner(spawnerStack); return spawnerStack; } return this.registeredSpawners.get(location); } + @Override public SpawnerStack getSpawner(Block block) { return this.getSpawner(block.getLocation()); } + @Override public boolean isSpawner(Location location) { return this.registeredSpawners.get(location) != null; } + @Override public Collection getStacks() { return Collections.unmodifiableCollection(this.registeredSpawners.values()); } diff --git a/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/tasks/StackingTask.java similarity index 96% rename from src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/tasks/StackingTask.java index ea2ec18..5134333 100644 --- a/src/main/java/com/songoda/ultimatestacker/tasks/StackingTask.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/tasks/StackingTask.java @@ -1,16 +1,17 @@ -package com.songoda.ultimatestacker.tasks; +package com.craftaro.ultimatestacker.tasks; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.entity.Check; +import com.craftaro.ultimatestacker.stackable.entity.EntityStackManagerImpl; +import com.craftaro.ultimatestacker.stackable.entity.custom.CustomEntity; +import com.craftaro.ultimatestacker.utils.CachedChunk; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.hooks.WorldGuardHook; import com.songoda.core.world.SWorld; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.entity.Check; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; -import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; -import com.songoda.ultimatestacker.stackable.entity.custom.CustomEntity; -import com.songoda.ultimatestacker.utils.CachedChunk; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -61,6 +62,8 @@ import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import static com.craftaro.ultimatestacker.stackable.entity.Check.*; + public class StackingTask extends TimerTask { private final UltimateStacker plugin; @@ -78,7 +81,7 @@ public class StackingTask extends TimerTask { maxPerTypeStacksPerChunk = Settings.MAX_PER_TYPE_STACKS_PER_CHUNK.getInt(); private final List disabledWorlds = Settings.DISABLED_WORLDS.getStringList(), stackReasons = Settings.STACK_REASONS.getStringList(); - private final List checks = Check.getChecks(Settings.STACK_CHECKS.getStringList()); + private final List checks = getChecks(Settings.STACK_CHECKS.getStringList()); private final boolean stackFlyingDown = Settings.ONLY_STACK_FLYING_DOWN.getBoolean(), stackWholeChunk = Settings.STACK_WHOLE_CHUNK.getBoolean(), weaponsArentEquipment = Settings.WEAPONS_ARENT_EQUIPMENT.getBoolean(), @@ -220,7 +223,7 @@ public class StackingTask extends TimerTask { // Get the stack from the entity. It should be noted that this value will // be null if our entity is not a stack. - EntityStack baseStack = plugin.getEntityStackManager().getStack(baseEntity); + EntityStack baseStack = plugin.getEntityStackManager().getStackedEntity(baseEntity); // Get the maximum stack size for this entity. int maxEntityStackSize = getEntityStackSize(baseEntity); @@ -265,7 +268,7 @@ public class StackingTask extends TimerTask { if (this.processed.contains(friendlyEntity.getUniqueId())) continue; // Get this entities friendStack. - EntityStack friendStack = stackManager.getStack(friendlyEntity); + EntityStack friendStack = stackManager.getStackedEntity(friendlyEntity); int amount = friendStack != null ? friendStack.getAmount() : 1; // Check to see if this friendlyEntity is stacked and friendStack plus @@ -275,7 +278,7 @@ public class StackingTask extends TimerTask { boolean overstack = (amount + amountToStack) > maxEntityStackSize; if (!overstack) { - stackManager.createStack(friendlyEntity, amount + amountToStack); + stackManager.createStackedEntity(friendlyEntity, amount + amountToStack); processed.add(baseEntity.getUniqueId()); Bukkit.getScheduler().runTask(plugin, () -> { @@ -303,7 +306,7 @@ public class StackingTask extends TimerTask { // Create a new stack, summon entity and add to stack. LivingEntity newEntity = (LivingEntity) livingEntity.getWorld().spawnEntity(livingEntity.getLocation(), livingEntity.getType()); int toAdd = Math.min(finalStackSize, maxEntityStackAmount); - EntityStack newStack = stackManager.createStack(newEntity, toAdd); + EntityStack newStack = stackManager.createStackedEntity(newEntity, toAdd); processed.add(newEntity.getUniqueId()); finalStackSize -= maxEntityStackAmount; } while (finalStackSize >= 0); diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Async.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/Async.java similarity index 90% rename from src/main/java/com/songoda/ultimatestacker/utils/Async.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/Async.java index 4cbaa2c..3f1e696 100644 --- a/src/main/java/com/songoda/ultimatestacker/utils/Async.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/Async.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.utils; +package com.craftaro.ultimatestacker.utils; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/src/main/java/com/songoda/ultimatestacker/utils/CachedChunk.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/CachedChunk.java similarity index 97% rename from src/main/java/com/songoda/ultimatestacker/utils/CachedChunk.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/CachedChunk.java index 74233f1..1473ca6 100644 --- a/src/main/java/com/songoda/ultimatestacker/utils/CachedChunk.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/CachedChunk.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.utils; +package com.craftaro.ultimatestacker.utils; import com.songoda.core.world.SWorld; import org.bukkit.Chunk; diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/Methods.java similarity index 96% rename from src/main/java/com/songoda/ultimatestacker/utils/Methods.java rename to UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/Methods.java index 8b2d52f..efe2c4f 100644 --- a/src/main/java/com/songoda/ultimatestacker/utils/Methods.java +++ b/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/utils/Methods.java @@ -1,11 +1,11 @@ -package com.songoda.ultimatestacker.utils; +package com.craftaro.ultimatestacker.utils; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.third_party.de.tr7zw.nbtapi.NBTItem; import com.songoda.core.utils.TextUtils; -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.stackable.entity.custom.CustomEntity; +import com.craftaro.ultimatestacker.UltimateStacker; +import com.craftaro.ultimatestacker.settings.Settings; +import com.craftaro.ultimatestacker.stackable.entity.custom.CustomEntity; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.CreatureSpawner; diff --git a/src/main/resources/en_US.lang b/UltimateStacker/src/main/resources/en_US.lang similarity index 100% rename from src/main/resources/en_US.lang rename to UltimateStacker/src/main/resources/en_US.lang diff --git a/src/main/resources/plugin.yml b/UltimateStacker/src/main/resources/plugin.yml similarity index 100% rename from src/main/resources/plugin.yml rename to UltimateStacker/src/main/resources/plugin.yml diff --git a/UltimateStackerAPI/.gitignore b/UltimateStackerAPI/.gitignore new file mode 100644 index 0000000..4788b4b --- /dev/null +++ b/UltimateStackerAPI/.gitignore @@ -0,0 +1,113 @@ +# User-specific stuff +.idea/ + +*.iml +*.ipr +*.iws + +# IntelliJ +out/ + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +target/ + +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next + +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +.mvn/wrapper/maven-wrapper.jar +.flattened-pom.xml + +# Common working directory +run/ diff --git a/UltimateStackerAPI/pom.xml b/UltimateStackerAPI/pom.xml new file mode 100644 index 0000000..eae0c8f --- /dev/null +++ b/UltimateStackerAPI/pom.xml @@ -0,0 +1,78 @@ + + + 4.0.0 + + com.craftaro + UltimateStackerParent + ${revision} + + + UltimateStackerAPI + 1.0 + jar + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + org.spigotmc + spigot-api + 1.18-R0.1-SNAPSHOT + provided + + + + com.songoda + SongodaCore + 2.6.22 + provided + + + diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/UltimateStackerAPI.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/UltimateStackerAPI.java new file mode 100644 index 0000000..b6a223a --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/UltimateStackerAPI.java @@ -0,0 +1,59 @@ +package com.craftaro.ultimatestacker.api; + +import com.craftaro.ultimatestacker.api.stack.block.BlockStackManager; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStackManager; +import com.craftaro.ultimatestacker.api.stack.item.ItemStackManager; +import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStackManager; + +public final class UltimateStackerAPI { + + private static EntityStackManager entityStackManager; + private static ItemStackManager itemStackManager; + private static SpawnerStackManager spawnerStackManager; + private static BlockStackManager blockStackManager; + private static UltimateStackerAPI instance; + + public UltimateStackerAPI(EntityStackManager entityStackManager, ItemStackManager itemStackManager, SpawnerStackManager spawnerStackManager, BlockStackManager blockStackManager) { + if (UltimateStackerAPI.entityStackManager != null || UltimateStackerAPI.itemStackManager != null || UltimateStackerAPI.spawnerStackManager != null || UltimateStackerAPI.blockStackManager != null) { + throw new IllegalStateException("UltimateStackerAPI has already been initialized!"); + } + UltimateStackerAPI.entityStackManager = entityStackManager; + UltimateStackerAPI.itemStackManager = itemStackManager; + UltimateStackerAPI.spawnerStackManager = spawnerStackManager; + UltimateStackerAPI.blockStackManager = blockStackManager; + instance = this; + } + + public static UltimateStackerAPI getInstance() { + return instance; + } + + /** + * Used to interact with EntityStacks + * @return The EntityStackManager + */ + public static EntityStackManager getEntityStackManager() { + return entityStackManager; + } + + /** + * Used to interact with ItemStacks + * @return The ItemStackManager + */ + public static ItemStackManager getItemStackManager() { + return itemStackManager; + } + + /** + * Used to interact with SpawnerStacks + * @return The SpawnerStackManager + */ + public static SpawnerStackManager getSpawnerStackManager() { + return spawnerStackManager; + } + + public static BlockStackManager getBlockStackManager() { + return blockStackManager; + } + +} diff --git a/src/main/java/com/songoda/ultimatestacker/events/EntityStackKillEvent.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/entity/EntityStackKillEvent.java similarity index 93% rename from src/main/java/com/songoda/ultimatestacker/events/EntityStackKillEvent.java rename to UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/entity/EntityStackKillEvent.java index c1297b2..78a6b78 100644 --- a/src/main/java/com/songoda/ultimatestacker/events/EntityStackKillEvent.java +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/entity/EntityStackKillEvent.java @@ -1,6 +1,6 @@ -package com.songoda.ultimatestacker.events; +package com.craftaro.ultimatestacker.api.events.entity; -import com.songoda.ultimatestacker.stackable.entity.EntityStack; +import com.craftaro.ultimatestacker.api.stack.entity.EntityStack; import org.bukkit.entity.LivingEntity; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; diff --git a/src/main/java/com/songoda/ultimatestacker/events/SpawnerBreakEvent.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerBreakEvent.java similarity index 94% rename from src/main/java/com/songoda/ultimatestacker/events/SpawnerBreakEvent.java rename to UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerBreakEvent.java index 50069a3..e016a15 100644 --- a/src/main/java/com/songoda/ultimatestacker/events/SpawnerBreakEvent.java +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerBreakEvent.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.events; +package com.craftaro.ultimatestacker.api.events.spawner; import org.bukkit.block.Block; import org.bukkit.entity.EntityType; diff --git a/src/main/java/com/songoda/ultimatestacker/events/SpawnerEvent.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerEvent.java similarity index 95% rename from src/main/java/com/songoda/ultimatestacker/events/SpawnerEvent.java rename to UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerEvent.java index 9d8ee41..dc5c9b8 100644 --- a/src/main/java/com/songoda/ultimatestacker/events/SpawnerEvent.java +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerEvent.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.events; +package com.craftaro.ultimatestacker.api.events.spawner; import org.bukkit.block.Block; import org.bukkit.entity.EntityType; diff --git a/src/main/java/com/songoda/ultimatestacker/events/SpawnerPlaceEvent.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerPlaceEvent.java similarity index 94% rename from src/main/java/com/songoda/ultimatestacker/events/SpawnerPlaceEvent.java rename to UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerPlaceEvent.java index 77dea4a..7ece19a 100644 --- a/src/main/java/com/songoda/ultimatestacker/events/SpawnerPlaceEvent.java +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/events/spawner/SpawnerPlaceEvent.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.events; +package com.craftaro.ultimatestacker.api.events.spawner; import org.bukkit.block.Block; import org.bukkit.entity.EntityType; diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/block/BlockStack.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/block/BlockStack.java new file mode 100644 index 0000000..40a1cd2 --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/block/BlockStack.java @@ -0,0 +1,19 @@ +package com.craftaro.ultimatestacker.api.stack.block; + +import com.craftaro.ultimatestacker.api.utils.Hologramable; +import com.craftaro.ultimatestacker.api.utils.Stackable; +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.hooks.stackers.UltimateStacker; +import com.songoda.core.utils.TextUtils; +import org.bukkit.Location; +import org.bukkit.World; + +public interface BlockStack extends Stackable, Hologramable { + + + int getId(); + + void destroy(); + + CompatibleMaterial getMaterial(); +} diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/block/BlockStackManager.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/block/BlockStackManager.java new file mode 100644 index 0000000..202fa44 --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/block/BlockStackManager.java @@ -0,0 +1,29 @@ +package com.craftaro.ultimatestacker.api.stack.block; + +import com.songoda.core.compatibility.CompatibleMaterial; +import org.bukkit.Location; +import org.bukkit.block.Block; + +import java.util.Collection; +import java.util.Map; + +public interface BlockStackManager { + + void addBlocks(Map blocks); + + BlockStack addBlock(BlockStack blockStack); + + BlockStack removeBlock(Location location); + + BlockStack getBlock(Location location); + + BlockStack getBlock(Block block, CompatibleMaterial material); + + BlockStack createBlock(Location location, CompatibleMaterial material); + + BlockStack createBlock(Block block); + + boolean isBlock(Location location); + + Collection getStacks(); +} diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/entity/EntityStack.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/entity/EntityStack.java new file mode 100644 index 0000000..b79ed7b --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/entity/EntityStack.java @@ -0,0 +1,38 @@ +package com.craftaro.ultimatestacker.api.stack.entity; + +import com.craftaro.ultimatestacker.api.events.entity.EntityStackKillEvent; +import com.craftaro.ultimatestacker.api.utils.StackableEntity; +import com.songoda.core.compatibility.ServerVersion; +import com.songoda.core.lootables.loot.Drop; +import com.songoda.core.lootables.loot.DropUtils; +import com.songoda.core.utils.EntityUtils; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.ExperienceOrb; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.Vector; + +import java.util.List; +import java.util.Objects; +import java.util.UUID; + +public interface EntityStack extends StackableEntity { + + + EntityType getType(); + + UUID getUuid(); + + LivingEntity getHostEntity(); + + LivingEntity takeOneAndSpawnEntity(Location location); + + void releaseHost(); + + void destroy(); +} diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/entity/EntityStackManager.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/entity/EntityStackManager.java new file mode 100644 index 0000000..54b3633 --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/entity/EntityStackManager.java @@ -0,0 +1,67 @@ +package com.craftaro.ultimatestacker.api.stack.entity; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.metadata.FixedMetadataValue; + +import java.util.UUID; + +public interface EntityStackManager { + + /** + * Creates a new stack with the given entity and amount. + * @param entity The entity to create the stack with. + * @param amount The amount to create the stack with. + * @return The EntityStack created. + */ + EntityStack createStackedEntity(LivingEntity entity, int amount); + + /** + * @return if the entity is a stacked entity. + */ + boolean isStackedEntity(Entity entity); + + /** + * Used to get the EntityStack of a stacked entity. + * @param entityUUID The UUID of the entity to get the stack of. + * @return The EntityStack of the entity or null if the entity is not stacked. + */ + EntityStack getStackedEntity(UUID entityUUID); + + /** + * Used to get the EntityStack of a stacked entity. + * @param entity The entity to get the stack of. + * @return The EntityStack of the entity or null if the entity is not stacked. + */ + EntityStack getStackedEntity(LivingEntity entity); + + /** + * Used to get the last player to damage the entity. + * @param entity The entity to get the last player to damage it. + * @return The player's name or null if no player has damaged the entity. + */ + String getLastPlayerDamage(Entity entity); + + /** + * Used to set the last player who damaged the entity. + * @param entity The entity to set the last player to damage it. + * @param player The player who damaged the entity. + */ + void setLastPlayerDamage(Entity entity, Player player); + + /** + * Transfers the stack from one entity to another. + * (e.g. slimes split) + * @param oldEntity The old entity to transfer the stack from. + * @param newEntity The new entity to transfer the stack to. + * @return The new stack. + */ + EntityStack transferStack(LivingEntity oldEntity, LivingEntity newEntity, boolean takeOne); + + /** + * TODO: Add javadoc + */ + EntityStack updateStack(LivingEntity oldEntity, LivingEntity newEntity); +} diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/item/ItemStack.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/item/ItemStack.java new file mode 100644 index 0000000..aae61e6 --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/item/ItemStack.java @@ -0,0 +1,7 @@ +package com.craftaro.ultimatestacker.api.stack.item; + +import com.craftaro.ultimatestacker.api.utils.StackableEntity; + +public interface ItemStack extends StackableEntity { + +} diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/item/ItemStackManager.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/item/ItemStackManager.java new file mode 100644 index 0000000..4beee00 --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/item/ItemStackManager.java @@ -0,0 +1,11 @@ +package com.craftaro.ultimatestacker.api.stack.item; + +import org.bukkit.entity.Item; + +public interface ItemStackManager { + + ItemStack getItem(Item item); + + ItemStack createStack(Item item, int amount); + +} diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/spawner/SpawnerStack.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/spawner/SpawnerStack.java new file mode 100644 index 0000000..94ed5bd --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/spawner/SpawnerStack.java @@ -0,0 +1,48 @@ +package com.craftaro.ultimatestacker.api.stack.spawner; + +import com.craftaro.ultimatestacker.api.utils.Hologramable; +import com.craftaro.ultimatestacker.api.utils.Stackable; +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.nms.world.SpawnedEntity; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; + +import java.util.Random; +import java.util.Set; + +public interface SpawnerStack extends Stackable, Hologramable { + + int getAmount(); + + boolean isValid(); + + void setAmount(int amount); + + int calculateSpawnCount(EntityType type); + + int getId(); + + void setId(int id); + + Location getLocation(); + + String getHologramName(); + + boolean areHologramsEnabled(); + + int getX(); + + int getY(); + + int getZ(); + + World getWorld(); + + String getHologramId(); + + int spawn(int amountToSpawn, EntityType... types); + + int spawn(int amountToSpawn, String particle, Set canSpawnOn, SpawnedEntity spawned, EntityType... types); +} diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/spawner/SpawnerStackManager.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/spawner/SpawnerStackManager.java new file mode 100644 index 0000000..df7ba60 --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/stack/spawner/SpawnerStackManager.java @@ -0,0 +1,23 @@ +package com.craftaro.ultimatestacker.api.stack.spawner; + +import org.bukkit.Location; +import org.bukkit.block.Block; + +import java.util.Collection; +import java.util.Map; + +public interface SpawnerStackManager { + void addSpawners(Map spawners); + + SpawnerStack addSpawner(SpawnerStack spawnerStack); + + SpawnerStack getSpawner(Block block); + + SpawnerStack getSpawner(Location location); + + boolean isSpawner(Location location); + + SpawnerStack removeSpawner(Location location); + + Collection getStacks(); +} diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/Hologramable.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/Hologramable.java similarity index 81% rename from src/main/java/com/songoda/ultimatestacker/stackable/Hologramable.java rename to UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/Hologramable.java index cfa3abb..d3bf542 100644 --- a/src/main/java/com/songoda/ultimatestacker/stackable/Hologramable.java +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/Hologramable.java @@ -1,4 +1,4 @@ -package com.songoda.ultimatestacker.stackable; +package com.craftaro.ultimatestacker.api.utils; import org.bukkit.Location; diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/Stackable.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/Stackable.java new file mode 100644 index 0000000..46d6a34 --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/Stackable.java @@ -0,0 +1,15 @@ +package com.craftaro.ultimatestacker.api.utils; + + +public interface Stackable { + + int getAmount(); + + void setAmount(int amount); + + void add(int amount); + + void take(int amount); + + boolean isValid(); +} diff --git a/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/StackableEntity.java b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/StackableEntity.java new file mode 100644 index 0000000..4dec32d --- /dev/null +++ b/UltimateStackerAPI/src/main/java/com/craftaro/ultimatestacker/api/utils/StackableEntity.java @@ -0,0 +1,14 @@ +package com.craftaro.ultimatestacker.api.utils; + +public interface StackableEntity { + + int getAmount(); + + void setAmount(int amount); + + void add(int amount); + + void take(int amount); + + //int getMaxStackSize(); +} diff --git a/UltimateStackerAPI/src/main/resources/plugin.yml b/UltimateStackerAPI/src/main/resources/plugin.yml new file mode 100644 index 0000000..4d90cda --- /dev/null +++ b/UltimateStackerAPI/src/main/resources/plugin.yml @@ -0,0 +1,4 @@ +name: UltimateStackerAPI +version: '${project.version}' +main: com.craftaro.ultimatestacker.api.UltimateStackerAPI +api-version: 1.18 diff --git a/pom.xml b/pom.xml index 0a03f26..1d206df 100644 --- a/pom.xml +++ b/pom.xml @@ -1,90 +1,28 @@ - com.songoda - UltimateStacker 4.0.0 - 2.4.3 - - clean install - UltimateStacker-${project.version} - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.0 + com.craftaro + UltimateStackerParent + ${revision} - - 1.8 - 1.8 - - + pom - - com.google.code.maven-replacer-plugin - replacer - 1.5.3 - - - prepare-package - - replace - - - - - ${project.build.directory}/classes/plugin.yml - - - maven-version-number - ${project.version} - - - - + + UltimateStackerAPI + UltimateStacker + Bootstrap + - - org.apache.maven.plugins - maven-shade-plugin - 3.3.0 - - - shaded - package - - shade - - - false - false - true - - - com.songoda:SongodaCore - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - com.songoda.core - ${project.groupId}.ultimatestacker.core - - - - - - - - + + 2.5.0-DEV + 1.8 + + + bg-repo + https://repo.bg-software.com/repository/api/ + + songoda-public https://repo.songoda.com/repository/public/ @@ -100,58 +38,9 @@ https://repo.codemc.org/repository/maven-public/ - - bg-repo - https://repo.bg-software.com/repository/api/ - - lumine-repo https://mvn.lumine.io/repository/maven-public/ - - - - org.spigotmc - spigot-api - 1.18-R0.1-SNAPSHOT - provided - - - - com.songoda - SongodaCore - 2.6.21 - compile - - - - com.bgsoftware - WildStackerAPI - 3.8.1 - provided - - - - uk.antiperson - stackmob - 4-0-2 - provided - - - - me.minebuilders - Clearlag - 3.0.6 - provided - - - - io.lumine - Mythic-Dist - 5.2.0 - provided - - diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java b/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java deleted file mode 100644 index c3a0c7b..0000000 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.songoda.ultimatestacker.stackable.entity; - -import com.songoda.ultimatestacker.UltimateStacker; -import org.bukkit.Bukkit; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.metadata.FixedMetadataValue; - -import java.util.UUID; - -public class EntityStackManager { - - private final UltimateStacker plugin; - - public EntityStackManager(UltimateStacker plugin) { - this.plugin = plugin; - } - - public EntityStack createStack(LivingEntity entity, int amount) { - return new EntityStack(entity, amount); - } - - public boolean isStackedEntity(Entity entity) { - return entity.hasMetadata("US_AMOUNT"); - } - - public int getAmount(Entity entity) { - if (!isStackedEntity(entity)) return 1; - if (entity.getMetadata("US_AMOUNT").isEmpty()) return 1; - return entity.getMetadata("US_AMOUNT").get(0).asInt(); - } - - public String getLastPlayerDamage(Entity entity) { - if (!entity.hasMetadata("US_LAST_PLAYER_DAMAGE")) return null; - if (entity.getMetadata("US_LAST_PLAYER_DAMAGE").isEmpty()) return null; - return entity.getMetadata("US_LAST_PLAYER_DAMAGE").get(0).asString(); - } - - public void setLastPlayerDamage(Entity entity, Player player) { - if (player == null) return; - if (entity == null) return; - if (entity instanceof Player) return; - entity.setMetadata("US_LAST_PLAYER_DAMAGE", new FixedMetadataValue(plugin, player.getName())); - } - - public EntityStack addStack(LivingEntity entity) { - return addStack(entity, getAmount(entity) == 1 ? 1 : getAmount(entity)); - } - - public EntityStack addStack(LivingEntity entity, int amount) { - if (entity == null) return null; - if (isStackedEntity(entity)) { - EntityStack stack = getStack(entity); - stack.addEntityToStack(amount); - return stack; - } - return null; - } - - public EntityStack getStack(UUID uuid) { - Entity entity = Bukkit.getEntity(uuid); - if (entity == null) return null; - if (isStackedEntity(entity)) { - if (entity instanceof LivingEntity) { - return new EntityStack((LivingEntity) entity); - } - } - return null; - } - - public EntityStack getStack(LivingEntity entity) { - if (!isStackedEntity(entity)) return null; - return new EntityStack(entity); - } - - public EntityStack decreaseStack(Entity entity) { - EntityStack stack = getStack((LivingEntity) entity); - if (stack == null) return null; - stack.removeEntityFromStack(1); - return stack; - } - - public EntityStack decreaseStack(Entity entity, int amount) { - EntityStack stack = getStack((LivingEntity) entity); - if (stack == null) return null; - stack.removeEntityFromStack(amount); - return stack; - } - - public EntityStack updateStack(LivingEntity entity) { - EntityStack stack = getStack(entity); - if (stack == null) return null; - stack.updateNameTag(); - return stack; - } - - /** - * Transfers the stack from one entity to another. - * (e.g. slimes split) - * @param oldEntity The old entity to transfer the stack from. - * @param newEntity The new entity to transfer the stack to. - * @return The new stack. - */ - public EntityStack transferStack(LivingEntity oldEntity, LivingEntity newEntity, boolean takeOne) { - EntityStack stack = getStack(oldEntity); - if (stack == null) return null; - EntityStack newStack = new EntityStack(newEntity, takeOne ? stack.getAmount()-1 : stack.getAmount()); - stack.destroy(); - return newStack; - } - - public EntityStack updateStack(LivingEntity oldEntity, LivingEntity newEntity) { - EntityStack stack = getStack(oldEntity); - if (stack == null) return null; - int amount = stack.getAmount()-1; - stack.destroy(); - if (amount == 0 && newEntity != null) { - newEntity.remove(); - return null; - } - return createStack(newEntity, amount); - } - - public void setStack(LivingEntity newEntity, int amount) { - if (amount <= 0) return; - if (isStackedEntity(newEntity)) { - EntityStack stack = getStack(newEntity); - stack.setAmount(amount); - } else { - createStack(newEntity, amount); - } - } -} diff --git a/src/main/java/com/songoda/ultimatestacker/stackable/entity/StackedEntity.java b/src/main/java/com/songoda/ultimatestacker/stackable/entity/StackedEntity.java deleted file mode 100644 index ad424d9..0000000 --- a/src/main/java/com/songoda/ultimatestacker/stackable/entity/StackedEntity.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.songoda.ultimatestacker.stackable.entity; - -import com.songoda.ultimatestacker.UltimateStacker; -import com.songoda.ultimatestacker.settings.Settings; -import com.songoda.ultimatestacker.utils.Methods; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.metadata.FixedMetadataValue; - -import java.util.UUID; - -public class StackedEntity { - - protected int amount; - protected LivingEntity hostEntity; - - /** - * Gets an existing stack from an entity or creates a new one if it doesn't exist. - * @param entity The entity to get the stack from. - */ - public StackedEntity(LivingEntity entity) { - if (entity == null) return; - if (!UltimateStacker.getInstance().getEntityStackManager().isStackedEntity(entity)) { - entity.setMetadata("US_AMOUNT", new FixedMetadataValue(UltimateStacker.getInstance(), 1)); - this.amount = 1; - updateNameTag(); - } else { - //get the amount from the entity - this.amount = UltimateStacker.getInstance().getEntityStackManager().getAmount(entity); - } - this.hostEntity = entity; - } - - /** - * Creates a new stack or overrides an existing stack. - * @param entity The entity to create the stack for. - * @param amount The amount of entities in the stack. - */ - public StackedEntity(LivingEntity entity, int amount) { - if (entity == null) return; - this.hostEntity = entity; - this.amount = amount; - entity.setMetadata("US_AMOUNT", new FixedMetadataValue(UltimateStacker.getInstance(), amount)); - updateNameTag(); - } - - - public EntityType getType() { - return hostEntity.getType(); - } - - public int getAmount() { - return amount; - } - - public void setAmount(int amount) { - this.amount = amount; - this.hostEntity.setMetadata("US_AMOUNT", new FixedMetadataValue(UltimateStacker.getInstance(), amount)); - updateNameTag(); - } - - public UUID getUuid() { - return hostEntity.getUniqueId(); - } - - public LivingEntity getHostEntity() { - return hostEntity; - } - - protected void updateNameTag() { - if (hostEntity == null) { - return; - } - hostEntity.setCustomNameVisible(!Settings.HOLOGRAMS_ON_LOOK_ENTITY.getBoolean()); - hostEntity.setCustomName(Methods.compileEntityName(hostEntity, getAmount())); - } -} diff --git a/src/main/java/com/songoda/ultimatestacker/utils/Stackable.java b/src/main/java/com/songoda/ultimatestacker/utils/Stackable.java deleted file mode 100644 index e0556e7..0000000 --- a/src/main/java/com/songoda/ultimatestacker/utils/Stackable.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.songoda.ultimatestacker.utils; - - -public interface Stackable { - - int getAmount(); - - boolean isValid(); -}