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}
+
+
+
+ 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
+
+
+
+
+ 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}
+
+
+
+ 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
-
-
+ 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();
-}