diff --git a/src/main/java/com/iridium/iridiumskyblock/database/IslandBlocks.java b/src/main/java/com/iridium/iridiumskyblock/database/IslandBlocks.java index 8201ccda4..5f262c9bd 100644 --- a/src/main/java/com/iridium/iridiumskyblock/database/IslandBlocks.java +++ b/src/main/java/com/iridium/iridiumskyblock/database/IslandBlocks.java @@ -26,6 +26,9 @@ public final class IslandBlocks extends IslandData { @DatabaseField(columnName = "amount", canBeNull = false) private int amount; + @DatabaseField(columnName = "extra_amount", canBeNull = false) + private int extraAmount; + /** * The default constructor. * @@ -46,4 +49,9 @@ public void setAmount(int amount) { this.amount = amount; setChanged(true); } + + public void setExtraAmount(int extraAmount) { + this.extraAmount = extraAmount; + setChanged(true); + } } diff --git a/src/main/java/com/iridium/iridiumskyblock/database/IslandSpawners.java b/src/main/java/com/iridium/iridiumskyblock/database/IslandSpawners.java index 9f28f8313..c4234971d 100644 --- a/src/main/java/com/iridium/iridiumskyblock/database/IslandSpawners.java +++ b/src/main/java/com/iridium/iridiumskyblock/database/IslandSpawners.java @@ -21,6 +21,9 @@ public final class IslandSpawners extends IslandData { @DatabaseField(columnName = "amount", canBeNull = false) private int amount; + @DatabaseField(columnName = "extra_amount", canBeNull = false) + private int extraAmount; + /** * The default constructor. * @@ -41,4 +44,9 @@ public void setAmount(int amount) { this.amount = amount; setChanged(true); } + + public void setExtraAmount(int extraAmount) { + this.extraAmount = extraAmount; + setChanged(true); + } } diff --git a/src/main/java/com/iridium/iridiumskyblock/managers/DatabaseManager.java b/src/main/java/com/iridium/iridiumskyblock/managers/DatabaseManager.java index 091f15ef7..49f9dba02 100644 --- a/src/main/java/com/iridium/iridiumskyblock/managers/DatabaseManager.java +++ b/src/main/java/com/iridium/iridiumskyblock/managers/DatabaseManager.java @@ -32,7 +32,7 @@ @Getter public class DatabaseManager { - private final int version = 3; + private final int version = 4; private IslandTableManager islandTableManager; private UserTableManager userTableManager; private ForeignIslandTableManager islandBanTableManager; diff --git a/src/main/java/com/iridium/iridiumskyblock/managers/IslandManager.java b/src/main/java/com/iridium/iridiumskyblock/managers/IslandManager.java index e0016dcb9..42c059c11 100644 --- a/src/main/java/com/iridium/iridiumskyblock/managers/IslandManager.java +++ b/src/main/java/com/iridium/iridiumskyblock/managers/IslandManager.java @@ -818,11 +818,13 @@ public synchronized Map getDailyIslandMissions(@NotNull Island } public int getIslandBlockAmount(Island island, XMaterial material) { - return getIslandBlock(island, material).getAmount() + IridiumSkyblock.getInstance().getStackerSupport().getExtraBlocks(island, material); + int extraAmount = getPlayersOnIsland(island).size() == 0 ? getIslandBlock(island, material).getExtraAmount() : IridiumSkyblock.getInstance().getStackerSupport().getExtraBlocks(island, material); + return getIslandBlock(island, material).getAmount() + extraAmount; } public int getIslandSpawnerAmount(Island island, EntityType entityType) { - return getIslandSpawners(island, entityType).getAmount() + IridiumSkyblock.getInstance().getStackerSupport().getExtraSpawners(island, entityType); + int extraAmount = getPlayersOnIsland(island).size() == 0 ? getIslandSpawners(island, entityType).getExtraAmount() : IridiumSkyblock.getInstance().getStackerSupport().getExtraSpawners(island, entityType); + return getIslandSpawners(island, entityType).getAmount() + extraAmount; } /** diff --git a/src/main/java/com/iridium/iridiumskyblock/support/RoseStackerSupport.java b/src/main/java/com/iridium/iridiumskyblock/support/RoseStackerSupport.java index 337b505d7..b04cefe73 100644 --- a/src/main/java/com/iridium/iridiumskyblock/support/RoseStackerSupport.java +++ b/src/main/java/com/iridium/iridiumskyblock/support/RoseStackerSupport.java @@ -1,7 +1,10 @@ package com.iridium.iridiumskyblock.support; import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.iridium.iridiumskyblock.IridiumSkyblock; import com.iridium.iridiumskyblock.database.Island; +import com.iridium.iridiumskyblock.database.IslandBlocks; +import com.iridium.iridiumskyblock.database.IslandSpawners; import dev.rosewood.rosestacker.api.RoseStackerAPI; import dev.rosewood.rosestacker.stack.StackedBlock; import dev.rosewood.rosestacker.stack.StackedSpawner; @@ -11,23 +14,27 @@ public class RoseStackerSupport implements StackerSupport { @Override public int getExtraBlocks(Island island, XMaterial material) { + IslandBlocks islandBlocks = IridiumSkyblock.getInstance().getIslandManager().getIslandBlock(island, material); int stackedBlocks = 0; for (StackedBlock stackedBlock : RoseStackerAPI.getInstance().getStackedBlocks().values()) { if (!island.isInIsland(stackedBlock.getLocation())) continue; if (material != XMaterial.matchXMaterial(stackedBlock.getBlock().getType())) continue; stackedBlocks += (stackedBlock.getStackSize() - 1); } + islandBlocks.setExtraAmount(stackedBlocks); return stackedBlocks; } @Override public int getExtraSpawners(Island island, EntityType entityType) { + IslandSpawners islandSpawners = IridiumSkyblock.getInstance().getIslandManager().getIslandSpawners(island, entityType); int stackedSpawners = 0; for (StackedSpawner stackedSpawner : RoseStackerAPI.getInstance().getStackedSpawners().values()) { if (!island.isInIsland(stackedSpawner.getLocation())) continue; if (stackedSpawner.getSpawnerTile().getSpawnedType() != entityType) continue; stackedSpawners += (stackedSpawner.getStackSize() - 1); } + islandSpawners.setExtraAmount(stackedSpawners); return stackedSpawners; } } diff --git a/src/main/java/com/iridium/iridiumskyblock/support/WildStackerSupport.java b/src/main/java/com/iridium/iridiumskyblock/support/WildStackerSupport.java index 34b8babbe..5ef1e5ab7 100644 --- a/src/main/java/com/iridium/iridiumskyblock/support/WildStackerSupport.java +++ b/src/main/java/com/iridium/iridiumskyblock/support/WildStackerSupport.java @@ -4,13 +4,17 @@ import com.bgsoftware.wildstacker.api.objects.StackedBarrel; import com.bgsoftware.wildstacker.api.objects.StackedSpawner; import com.iridium.iridiumcore.dependencies.xseries.XMaterial; +import com.iridium.iridiumskyblock.IridiumSkyblock; import com.iridium.iridiumskyblock.database.Island; +import com.iridium.iridiumskyblock.database.IslandBlocks; +import com.iridium.iridiumskyblock.database.IslandSpawners; import org.bukkit.entity.EntityType; public class WildStackerSupport implements StackerSupport { @Override public int getExtraBlocks(Island island, XMaterial material) { + IslandBlocks islandBlocks = IridiumSkyblock.getInstance().getIslandManager().getIslandBlock(island, material); int stackedBlocks = 0; for (StackedBarrel stackedBarrel : WildStackerAPI.getWildStacker().getSystemManager().getStackedBarrels()) { if (!island.isInIsland(stackedBarrel.getLocation())) continue; @@ -22,17 +26,20 @@ public int getExtraBlocks(Island island, XMaterial material) { stackedBlocks += stackedBarrel.getStackAmount(); } } + islandBlocks.setExtraAmount(stackedBlocks); return stackedBlocks; } @Override public int getExtraSpawners(Island island, EntityType entityType) { + IslandSpawners islandSpawners = IridiumSkyblock.getInstance().getIslandManager().getIslandSpawners(island, entityType); int stackedSpawners = 0; for (StackedSpawner stackedSpawner : WildStackerAPI.getWildStacker().getSystemManager().getStackedSpawners()) { if (!island.isInIsland(stackedSpawner.getLocation())) continue; if (stackedSpawner.getSpawnedType() != entityType) continue; stackedSpawners += stackedSpawner.getStackAmount(); } + islandSpawners.setExtraAmount(stackedSpawners); return stackedSpawners; } } diff --git a/src/main/resources/patch_4.sql b/src/main/resources/patch_4.sql new file mode 100644 index 000000000..789c7b241 --- /dev/null +++ b/src/main/resources/patch_4.sql @@ -0,0 +1,2 @@ +ALTER TABLE island_blocks ADD COLUMN extra_amount INTEGER PRECISION DEFAULT 0.00; +ALTER TABLE island_spawners ADD COLUMN extra_amount INTEGER PRECISION DEFAULT 0.00; \ No newline at end of file