diff --git a/EpicHoppers-API/pom.xml b/EpicHoppers-API/pom.xml
index 2821045..a76934a 100644
--- a/EpicHoppers-API/pom.xml
+++ b/EpicHoppers-API/pom.xml
@@ -58,10 +58,11 @@
provided
+
org.spigotmc
spigot-api
- 1.8-R0.1-SNAPSHOT
+ 1.18-R0.1-SNAPSHOT
provided
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/EpicHoppersApi.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/EpicHoppersApi.java
new file mode 100644
index 0000000..2891c82
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/EpicHoppersApi.java
@@ -0,0 +1,73 @@
+package com.songoda.epichoppers;
+
+import com.songoda.epichoppers.boost.BoostManager;
+import com.songoda.epichoppers.containers.ContainerManager;
+import com.songoda.epichoppers.database.DataManager;
+import com.songoda.epichoppers.hopper.levels.LevelManager;
+import com.songoda.epichoppers.hopper.teleport.TeleportHandler;
+import com.songoda.epichoppers.player.PlayerDataManager;
+import org.jetbrains.annotations.ApiStatus;
+
+public class EpicHoppersApi {
+ private static EpicHoppersApi instance;
+
+ private final LevelManager levelManager;
+ private final BoostManager boostManager;
+ private final ContainerManager containerManager;
+ private final TeleportHandler teleportHandler;
+ private final PlayerDataManager playerDataManager;
+ private final DataManager dataManager;
+
+ private EpicHoppersApi(LevelManager levelManager,
+ BoostManager boostManager,
+ ContainerManager containerManager,
+ TeleportHandler teleportHandler,
+ PlayerDataManager playerDataManager,
+ DataManager dataManager) {
+ this.levelManager = levelManager;
+ this.boostManager = boostManager;
+ this.containerManager = containerManager;
+ this.teleportHandler = teleportHandler;
+ this.playerDataManager = playerDataManager;
+ this.dataManager = dataManager;
+ }
+
+ public LevelManager getLevelManager() {
+ return this.levelManager;
+ }
+
+ public BoostManager getBoostManager() {
+ return this.boostManager;
+ }
+
+ public ContainerManager getContainerManager() {
+ return this.containerManager;
+ }
+
+ public TeleportHandler getTeleportHandler() {
+ return this.teleportHandler;
+ }
+
+ public PlayerDataManager getPlayerDataManager() {
+ return this.playerDataManager;
+ }
+
+ /**
+ * TODO: The DataManager probably shouldn't be exposed to the API.
+ */
+ @ApiStatus.Internal
+ public DataManager getDataManager() {
+ return this.dataManager;
+ }
+
+ public static EpicHoppersApi getApi() {
+ return instance;
+ }
+
+ static void initApi(LevelManager levelManager, BoostManager boostManager, ContainerManager containerManager, TeleportHandler teleportHandler, PlayerDataManager playerDataManager, DataManager dataManager) {
+ if (instance != null) {
+ throw new IllegalStateException(EpicHoppersApi.class.getSimpleName() + " already initialized");
+ }
+ instance = new EpicHoppersApi(levelManager, boostManager, containerManager, teleportHandler, playerDataManager, dataManager);
+ }
+}
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java
similarity index 100%
rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java
rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperBreakEvent.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperBreakEvent.java
similarity index 100%
rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperBreakEvent.java
rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperBreakEvent.java
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java
similarity index 99%
rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java
rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java
index 71ae5f9..f89f77d 100644
--- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java
@@ -24,5 +24,4 @@ public abstract class HopperEvent extends PlayerEvent {
public Hopper getHopper() {
return this.hopper;
}
-
}
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperPlaceEvent.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperPlaceEvent.java
similarity index 100%
rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/api/events/HopperPlaceEvent.java
rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/api/events/HopperPlaceEvent.java
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostData.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostData.java
similarity index 100%
rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/boost/BoostData.java
rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostData.java
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostManager.java
new file mode 100644
index 0000000..ca03950
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/boost/BoostManager.java
@@ -0,0 +1,17 @@
+package com.songoda.epichoppers.boost;
+
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+public interface BoostManager {
+ void addBoostToPlayer(BoostData data);
+
+ void removeBoostFromPlayer(BoostData data);
+
+ void addBoosts(List boosts);
+
+ Set getBoosts();
+
+ BoostData getBoost(UUID player);
+}
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java
new file mode 100644
index 0000000..f6401bd
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/ContainerManager.java
@@ -0,0 +1,15 @@
+package com.songoda.epichoppers.containers;
+
+import org.bukkit.block.Block;
+
+import java.util.Set;
+
+public interface ContainerManager {
+ Set getCustomContainerImplementations();
+
+ void registerCustomContainerImplementation(String requiredPlugin, IContainer container);
+
+ void registerCustomContainerImplementation(IContainer container);
+
+ CustomContainer getCustomContainer(Block block);
+}
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java
similarity index 72%
rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java
rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java
index 0c3aa34..bd37241 100644
--- a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/CustomContainer.java
@@ -1,15 +1,8 @@
package com.songoda.epichoppers.containers;
-import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
public abstract class CustomContainer {
- private final Block block;
-
- public CustomContainer(Block block) {
- this.block = block;
- }
-
public abstract boolean addToContainer(ItemStack itemToMove);
public abstract ItemStack[] getItems();
diff --git a/EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/IContainer.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/IContainer.java
similarity index 100%
rename from EpicHoppers-Plugin/src/main/java/com/songoda/epichoppers/containers/IContainer.java
rename to EpicHoppers-API/src/main/java/com/songoda/epichoppers/containers/IContainer.java
diff --git a/EpicHoppers-API/src/main/java/com/songoda/epichoppers/database/DataManager.java b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/database/DataManager.java
new file mode 100644
index 0000000..a9f5038
--- /dev/null
+++ b/EpicHoppers-API/src/main/java/com/songoda/epichoppers/database/DataManager.java
@@ -0,0 +1,38 @@
+package com.songoda.epichoppers.database;
+
+import com.songoda.epichoppers.boost.BoostData;
+import com.songoda.epichoppers.hopper.Hopper;
+import com.songoda.epichoppers.hopper.ItemType;
+import com.songoda.epichoppers.hopper.LinkType;
+import org.bukkit.Location;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+
+public interface DataManager {
+ void createBoost(BoostData boostData);
+
+ void getBoosts(Consumer> callback);
+
+ void deleteBoost(BoostData boostData);
+
+ void createLink(Hopper hopper, Location location, LinkType type);
+
+ void updateItems(Hopper hopper, ItemType type, List items);
+
+ void deleteLink(Hopper hopper, Location location);
+
+ void deleteLinks(Hopper hopper);
+
+ void createHoppers(List hoppers);
+
+ void createHopper(Hopper hopper);
+
+ void updateHopper(Hopper hopper);
+
+ void deleteHopper(Hopper hopper);
+
+ void getHoppers(Consumer