From 4b9f543b0a5ff3e02449e08bdc60877db27e8175 Mon Sep 17 00:00:00 2001 From: Fabrizio La Rosa Date: Tue, 16 Jun 2020 19:17:28 +0200 Subject: [PATCH] Initial work to add maxMembers upgrade --- .../com/songoda/skyblock/island/Island.java | 24 + .../songoda/skyblock/menus/Information.java | 6 +- .../com/songoda/skyblock/menus/Upgrade.java | 113 +++++ .../songoda/skyblock/menus/admin/Upgrade.java | 478 +++++++++++++++++- .../com/songoda/skyblock/upgrade/Upgrade.java | 2 +- .../skyblock/upgrade/UpgradeManager.java | 41 ++ src/main/resources/config.yml | 1 + src/main/resources/language.yml | 101 +++- src/main/resources/upgrades.yml | 10 + 9 files changed, 757 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/songoda/skyblock/island/Island.java b/src/main/java/com/songoda/skyblock/island/Island.java index bc72846e..2c112ae3 100644 --- a/src/main/java/com/songoda/skyblock/island/Island.java +++ b/src/main/java/com/songoda/skyblock/island/Island.java @@ -46,6 +46,7 @@ public class Island { private UUID ownerUUID; private IslandLevel level; private int size; + private int maxMembers; private boolean deleted = false; public Island(OfflinePlayer player) { @@ -57,6 +58,8 @@ public class Island { this.ownerUUID = player.getUniqueId(); this.size = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration() .getInt("Island.Size.Minimum"); + this.maxMembers = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration() + .getInt("Island.InitialMaxMembers", 3); if (this.size > 1000) { this.size = 50; @@ -99,6 +102,12 @@ public class Island { configLoad.set("UUID", islandUUID.toString()); } + if (configLoad.getString("MaxMembers") != null) { + maxMembers = configLoad.getInt("MaxMembers"); + } else { + configLoad.set("MaxMembers", maxMembers); + } + if (configLoad.getString("Size") != null) { size = configLoad.getInt("Size"); } @@ -256,6 +265,21 @@ public class Island { .getFileConfiguration().getString("Ownership.Original")); } + public int getMaxMembers() { + return maxMembers; + } + + public void setMaxMembers(int maxMembers) { + if (maxMembers > 100000 || maxMembers < 0) { + maxMembers = 2; + } + + this.maxMembers = maxMembers; + skyblock.getFileManager().getConfig( + new File(new File(skyblock.getDataFolder().toString() + "/island-data"), ownerUUID.toString() + ".yml")) + .getFileConfiguration().set("MaxMembers", maxMembers); + } + public int getSize() { return size; } diff --git a/src/main/java/com/songoda/skyblock/menus/Information.java b/src/main/java/com/songoda/skyblock/menus/Information.java index 50044f23..82a330f5 100644 --- a/src/main/java/com/songoda/skyblock/menus/Information.java +++ b/src/main/java/com/songoda/skyblock/menus/Information.java @@ -346,10 +346,8 @@ public class Information { new Placeholder[]{ new Placeholder("%island_members", "" + (islandMembers.size() + islandOperators.size() + 1)), - new Placeholder("%island_capacity", - "" + skyblock.getFileManager() - .getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getInt("Island.Member.Capacity")), + new Placeholder("%island_maxMembers", // %island_capacity + "" + island.getMaxMembers()), new Placeholder("%members", "" + islandMembers.size()), new Placeholder("%operators", "" + islandOperators.size())}, null, null), diff --git a/src/main/java/com/songoda/skyblock/menus/Upgrade.java b/src/main/java/com/songoda/skyblock/menus/Upgrade.java index 09ec20a2..ee097aa8 100644 --- a/src/main/java/com/songoda/skyblock/menus/Upgrade.java +++ b/src/main/java/com/songoda/skyblock/menus/Upgrade.java @@ -355,6 +355,59 @@ public class Upgrade { event.setWillDestroy(false); } } + } else if ((is.getType() == Material.BOOKSHELF) && (is.hasItemMeta())) { + List upgrades = upgradeManager + .getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Members); + + if (upgrades != null && upgrades.size() > 0) { + for (int i = 0; i < upgrades.size(); i++) { + com.songoda.skyblock.upgrade.Upgrade upgrade = upgrades.get(i); + int tier = i + 1; + + if (is.getItemMeta().getDisplayName() + .equals(ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Upgrade.Item.Members.Displayname") + .replace("%tier", "" + tier)))) { + if (upgrade.getValue() > island.getMaxMembers() + && upgrade.getValue() != island.getMaxMembers()) { + if (EconomyManager.hasBalance(player, upgrade.getCost())) { + messageManager.sendMessage(player, + configLoad.getString("Island.Upgrade.Bought.Message").replace( + "%upgrade", is.getItemMeta().getDisplayName())); + soundManager.playSound(player, CompatibleSound.ENTITY_PLAYER_LEVELUP.getSound(), 1.0F, + 1.0F); + + EconomyManager.withdrawBalance(player, upgrade.getCost()); + island.setMaxMembers(upgrade.getValue()); + + Bukkit.getServer().getPluginManager().callEvent(new IslandUpgradeEvent( + island.getAPIWrapper(), player, APIUtil.fromImplementation( + com.songoda.skyblock.upgrade.Upgrade.Type.Members))); + + Bukkit.getServer().getScheduler().runTaskLater(skyblock, + () -> open(player), 1L); + } else { + messageManager.sendMessage(player, + configLoad.getString("Island.Upgrade.Money.Message")); + soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + event.setWillClose(false); + event.setWillDestroy(false); + } + + return; + } + } + } + + messageManager.sendMessage(player, + configLoad.getString("Island.Upgrade.Claimed.Message")); + soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F); + + event.setWillClose(false); + event.setWillDestroy(false); + } } else if ((is.getType() == Material.BEACON) && (is.hasItemMeta())) { List upgrades = upgradeManager .getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Size); @@ -678,6 +731,66 @@ public class Upgrade { } } + upgrades = upgradeManager.getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Members); + + if (upgrades != null && upgrades.size() > 0) { + for (int i = 0; i < upgrades.size(); i++) { + com.songoda.skyblock.upgrade.Upgrade upgrade = upgrades.get(i); + int tier = i + 1; + + if (tier != upgrades.size()) { + if (upgrade.getValue() <= island.getMaxMembers()) { + continue; + } + } + + if (island.getMaxMembers() >= upgrade.getValue()) { + nInv.addItem(nInv.createItem(new ItemStack(Material.BOOKSHELF), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Upgrade.Item.Members.Displayname").replace("%tier", + "" + tier)), + configLoad.getStringList("Menu.Upgrade.Item.Members.Claimed.Lore"), + new Placeholder[]{ + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%tier", "" + tier), + new Placeholder("%maxMembers", "" + upgrade.getValue())}, + null, null), 6); + } else { + if (EconomyManager.hasBalance(player, upgrade.getCost())) { + nInv.addItem( + nInv.createItem(new ItemStack(Material.BOOKSHELF), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Upgrade.Item.Members.Displayname") + .replace("%tier", "" + tier)), + configLoad.getStringList("Menu.Upgrade.Item.Members.Claimable.Lore"), + new Placeholder[]{ + new Placeholder("%cost", + NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%tier", "" + tier), + new Placeholder("%maxMembers", "" + upgrade.getValue())}, + null, null), + 6); + } else { + nInv.addItem( + nInv.createItem(new ItemStack(Material.BOOKSHELF), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Upgrade.Item.Members.Displayname") + .replace("%tier", "" + tier)), + configLoad.getStringList("Menu.Upgrade.Item.Members.Unclaimable.Lore"), + new Placeholder[]{ + new Placeholder("%cost", + NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%tier", "" + tier), + new Placeholder("%maxMembers", "" + upgrade.getValue())}, + null, null), + 6); + } + } + + break; + } + } + upgrades = upgradeManager.getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Size); if (upgrades != null && upgrades.size() > 0) { diff --git a/src/main/java/com/songoda/skyblock/menus/admin/Upgrade.java b/src/main/java/com/songoda/skyblock/menus/admin/Upgrade.java index 327a21db..d0602168 100644 --- a/src/main/java/com/songoda/skyblock/menus/admin/Upgrade.java +++ b/src/main/java/com/songoda/skyblock/menus/admin/Upgrade.java @@ -118,6 +118,15 @@ public class Upgrade { soundManager.playSound(player, CompatibleSound.BLOCK_WOODEN_BUTTON_CLICK_ON.getSound(), 1.0F, 1.0F); + Bukkit.getServer().getScheduler().runTaskLater(skyblock, () -> open(player), 1L); + } else if ((is.getType() == Material.BOOKSHELF) && (is.hasItemMeta()) + && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Members.Displayname"))))) { + viewer.setType(Viewer.Type.Members); + viewer.setUpgrade(com.songoda.skyblock.upgrade.Upgrade.Type.Members); + + soundManager.playSound(player, CompatibleSound.BLOCK_WOODEN_BUTTON_CLICK_ON.getSound(), 1.0F, 1.0F); + Bukkit.getServer().getScheduler().runTaskLater(skyblock, () -> open(player), 1L); } else if ((is.getType() == CompatibleMaterial.SPAWNER.getMaterial()) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName() @@ -270,7 +279,7 @@ public class Upgrade { new Placeholder[]{ new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), new Placeholder("%status", getStatus(upgrade))}, - null, new ItemFlag[]{ItemFlag.HIDE_POTION_EFFECTS}), 1); + null, new ItemFlag[]{ItemFlag.HIDE_POTION_EFFECTS}), 0); if (NMSVersion > 12) { PotionMeta pm = (PotionMeta) jumpPotion.getItemMeta(); @@ -288,7 +297,7 @@ public class Upgrade { new Placeholder[]{ new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), new Placeholder("%status", getStatus(upgrade))}, - null, new ItemFlag[]{ItemFlag.HIDE_POTION_EFFECTS}), 2); + null, new ItemFlag[]{ItemFlag.HIDE_POTION_EFFECTS}), 1); upgrade = upgradeManager.getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Crop).get(0); nInv.addItem(nInv.createItem(CompatibleMaterial.WHEAT_SEEDS.getItem(), @@ -298,7 +307,7 @@ public class Upgrade { new Placeholder[]{ new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), new Placeholder("%status", getStatus(upgrade))}, - null, null), 3); + null, null), 2); upgrade = upgradeManager.getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Fly).get(0); nInv.addItem(nInv.createItem(new ItemStack(Material.FEATHER), @@ -308,7 +317,7 @@ public class Upgrade { new Placeholder[]{ new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), new Placeholder("%status", getStatus(upgrade))}, - null, null), 4); + null, null), 3); upgrade = upgradeManager.getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Drops).get(0); nInv.addItem(nInv.createItem(new ItemStack(Material.SPIDER_EYE), @@ -318,21 +327,37 @@ public class Upgrade { new Placeholder[]{ new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), new Placeholder("%status", getStatus(upgrade))}, - null, null), 5); + null, null), 4); - List upgrades = upgradeManager + // Size + List upgradesSize = upgradeManager .getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Size); - int upgradeTiers = 0; + int upgradeTiersSize = 0; - if (upgrades != null) { - upgradeTiers = upgrades.size(); + if (upgradesSize != null) { + upgradeTiersSize = upgradesSize.size(); } nInv.addItem(nInv.createItem(new ItemStack(Material.BEACON), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Size.Displayname")), configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Size.Lore"), - new Placeholder[]{new Placeholder("%tiers", "" + upgradeTiers)}, null, null), 6); + new Placeholder[]{new Placeholder("%tiers", "" + upgradeTiersSize)}, null, null), 5); + + // Members + List upgradesMembers = upgradeManager + .getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Members); + int upgradeTiersMembers = 0; + + if (upgradesMembers != null) { + upgradeTiersMembers = upgradesMembers.size(); + } + + nInv.addItem(nInv.createItem(CompatibleMaterial.BOOKSHELF.getItem(), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Members.Displayname")), + configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Members.Lore"), + new Placeholder[]{new Placeholder("%tiers", "" + upgradeTiersMembers)}, null, null), 4); upgrade = upgradeManager.getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Spawner).get(0); nInv.addItem(nInv.createItem(CompatibleMaterial.SPAWNER.getItem(), @@ -342,12 +367,12 @@ public class Upgrade { new Placeholder[]{ new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), new Placeholder("%status", getStatus(upgrade))}, - null, null), 7); + null, null), 6); nInv.addItem(nInv.createItem(CompatibleMaterial.OAK_FENCE_GATE.getItem(), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Exit.Displayname")), - null, null, null, null), 0, 8); + null, null, null, null), 8); nInv.setTitle(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Title"))); @@ -780,6 +805,433 @@ public class Upgrade { configLoad.getString("Menu.Admin.Upgrade.Size.Title"))); nInv.setRows(1); + Bukkit.getServer().getScheduler().runTask(skyblock, () -> nInv.open()); + } else if (viewer.getType() == Viewer.Type.Members) { + nInventoryUtil nInv = new nInventoryUtil(player, event -> { + if (!(player.hasPermission("fabledskyblock.admin.upgrade") || player.hasPermission("fabledskyblock.admin.*") + || player.hasPermission("fabledskyblock.*"))) { + messageManager.sendMessage(player, + configLoad.getString("Island.Admin.Upgrade.Permission.Message")); + soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F); + + return; + } + + if (playerDataManager.hasPlayerData(player)) { + PlayerData playerData = playerDataManager.getPlayerData(player); + ItemStack is = event.getItem(); + + if ((is.getType() == CompatibleMaterial.OAK_FENCE_GATE.getMaterial()) && (is.hasItemMeta()) + && (is.getItemMeta().getDisplayName() + .equals(ChatColor.translateAlternateColorCodes('&', configLoad + .getString("Menu.Admin.Upgrade.Members.Item.Return.Displayname"))))) { + playerData.setViewer(new Viewer(Viewer.Type.Upgrades, null)); + soundManager.playSound(player, CompatibleSound.ENTITY_ARROW_HIT.getSound(), 1.0F, 1.0F); + + Bukkit.getServer().getScheduler().runTaskLater(skyblock, () -> open(player), 1L); + } else if ((is.getType() == Material.PAINTING) && (is.hasItemMeta()) && (is.getItemMeta() + .getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad + .getString("Menu.Admin.Upgrade.Members.Item.Information.Displayname"))))) { + List upgrades = upgradeManager + .getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Members); + + if (upgrades != null && upgrades.size() >= 5) { + messageManager.sendMessage(player, + configLoad.getString("Island.Admin.Upgrade.Tier.Limit.Message")); + soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F); + + event.setWillClose(false); + event.setWillDestroy(false); + } else { + soundManager.playSound(player, CompatibleSound.BLOCK_WOODEN_BUTTON_CLICK_ON.getSound(), 1.0F, 1.0F); + + Bukkit.getServer().getScheduler().runTaskLater(skyblock, + () -> { + AbstractAnvilGUI gui = new AbstractAnvilGUI(player, event1 -> { + if (event1.getSlot() == AbstractAnvilGUI.AnvilSlot.OUTPUT) { + if (playerDataManager.hasPlayerData(player) + && playerDataManager + .getPlayerData(player) != null) { + if (!event1.getName().matches("[0-9]+")) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Numerical.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + event1.setWillClose(false); + event1.setWillDestroy(false); + + return; + } else { + List upgrades1 = upgradeManager + .getUpgrades( + com.songoda.skyblock.upgrade.Upgrade.Type.Members); + + if (upgrades1 != null && upgrades1.size() >= 5) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Tier.Limit.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + Bukkit.getServer().getScheduler() + .runTaskLater(skyblock, + () -> open(player), 1L); + + return; + } + } + + int size = Integer.valueOf(event1.getName()); + + if (size > 1000) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Tier.Members.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + event.setWillClose(false); + event.setWillDestroy(false); + + return; + } else if (upgradeManager.hasUpgrade( + com.songoda.skyblock.upgrade.Upgrade.Type.Members, + size)) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Tier.Exist.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + event1.setWillClose(false); + event1.setWillDestroy(false); + + return; + } + + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_USE.getSound(), 1.0F, 1.0F); + upgradeManager.addUpgrade( + com.songoda.skyblock.upgrade.Upgrade.Type.Members, + size); + + Bukkit.getServer().getScheduler() + .runTaskLater(skyblock, + () -> open(player), 1L); + } + + event1.setWillClose(true); + event1.setWillDestroy(true); + } else { + event1.setWillClose(false); + event1.setWillDestroy(false); + } + }); + + ItemStack is12 = new ItemStack(Material.NAME_TAG); + ItemMeta im = is12.getItemMeta(); + im.setDisplayName(configLoad + .getString("Menu.Admin.Upgrade.Members.Item.Word.Members.Enter")); + is12.setItemMeta(im); + + gui.setSlot(AbstractAnvilGUI.AnvilSlot.INPUT_LEFT, is12); + gui.open(); + }, 1L); + } + } else if ((is.getType() == CompatibleMaterial.BLACK_STAINED_GLASS_PANE.getMaterial()) + && (is.hasItemMeta()) + && (is.getItemMeta().getDisplayName() + .equals(ChatColor.translateAlternateColorCodes('&', configLoad + .getString("Menu.Admin.Upgrade.Members.Item.Barrier.Displayname"))))) { + soundManager.playSound(player, CompatibleSound.BLOCK_GLASS_BREAK.getSound(), 1.0F, 1.0F); + + event.setWillClose(false); + event.setWillDestroy(false); + } else if ((is.getType() == Material.PAPER) && (is.hasItemMeta())) { + int slot = event.getSlot(); + int tier = slot - 3; + + com.songoda.skyblock.upgrade.Upgrade upgrade = upgradeManager + .getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Members).get(tier); + + if (upgrade != null) { + if (event.getClick() == ClickType.LEFT) { + soundManager.playSound(player, CompatibleSound.BLOCK_WOODEN_BUTTON_CLICK_ON.getSound(), 1.0F, 1.0F); + + Bukkit.getServer().getScheduler().runTaskLater(skyblock, + () -> { + AbstractAnvilGUI gui = new AbstractAnvilGUI(player, event1 -> { + if (event1.getSlot() == AbstractAnvilGUI.AnvilSlot.OUTPUT) { + if (!(player.hasPermission("fabledskyblock.admin.upgrade") + || player.hasPermission("fabledskyblock.admin.*") + || player.hasPermission("fabledskyblock.*"))) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Permission.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + return; + } + + if (playerDataManager.hasPlayerData(player) + && playerDataManager + .getPlayerData(player) != null) { + if (!event1.getName().matches("[0-9]+")) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Numerical.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + event1.setWillClose(false); + event1.setWillDestroy(false); + + return; + } else if (upgradeManager.getUpgrades( + com.songoda.skyblock.upgrade.Upgrade.Type.Members) + .get(tier) == null) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Tier.Selected.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + Bukkit.getServer().getScheduler() + .runTaskLater(skyblock, + () -> open(player), 1L); + + return; + } + + int size = Integer.valueOf(event1.getName()); + + if (size > 1000) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Tier.Members.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + event.setWillClose(false); + event.setWillDestroy(false); + + return; + } else if (upgradeManager.hasUpgrade( + com.songoda.skyblock.upgrade.Upgrade.Type.Members, + size)) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Tier.Exist.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + event.setWillClose(false); + event.setWillDestroy(false); + + return; + } + + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_USE.getSound(), 1.0F, 1.0F); + upgradeManager.getUpgrades( + com.songoda.skyblock.upgrade.Upgrade.Type.Members) + .get(tier).setValue(size); + fileManager + .getConfig( + new File(skyblock.getDataFolder(), + "upgrades.yml")) + .getFileConfiguration() + .set("Upgrades.Members." + tier + ".Value", + size); + + Bukkit.getServer().getScheduler() + .runTaskLater(skyblock, + () -> open(player), 1L); + } + + event1.setWillClose(true); + event1.setWillDestroy(true); + } else { + event1.setWillClose(false); + event1.setWillDestroy(false); + } + }); + + ItemStack is13 = new ItemStack(Material.NAME_TAG); + ItemMeta im = is13.getItemMeta(); + im.setDisplayName(configLoad.getString( + "Menu.Admin.Upgrade.Members.Item.Word.Members.Enter")); + is13.setItemMeta(im); + + gui.setSlot(AbstractAnvilGUI.AnvilSlot.INPUT_LEFT, is13); + gui.open(); + }, 1L); + + return; + } else if (event.getClick() == ClickType.MIDDLE) { + soundManager.playSound(player, CompatibleSound.ENTITY_IRON_GOLEM_ATTACK.getSound(), 1.0F, 1.0F); + upgradeManager.removeUpgrade(com.songoda.skyblock.upgrade.Upgrade.Type.Members, + upgrade.getCost(), upgrade.getValue()); + } else if (event.getClick() == ClickType.RIGHT) { + soundManager.playSound(player, CompatibleSound.BLOCK_WOODEN_BUTTON_CLICK_ON.getSound(), 1.0F, 1.0F); + + Bukkit.getServer().getScheduler().runTaskLater(skyblock, + () -> { + AbstractAnvilGUI gui = new AbstractAnvilGUI(player, event1 -> { + if (event1.getSlot() == AbstractAnvilGUI.AnvilSlot.OUTPUT) { + if (!(player.hasPermission("fabledskyblock.admin.upgrade") + || player.hasPermission("fabledskyblock.admin.*") + || player.hasPermission("fabledskyblock.*"))) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Permission.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + return; + } + + if (playerDataManager.hasPlayerData(player) + && playerDataManager + .getPlayerData(player) != null) { + if (!(event1.getName().matches("[0-9]+") + || event1.getName().matches( + "([0-9]*)\\.([0-9]{2}$)"))) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Numerical.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + event1.setWillClose(false); + event1.setWillDestroy(false); + + return; + } else if (upgradeManager.getUpgrades( + com.songoda.skyblock.upgrade.Upgrade.Type.Members) + .get(tier) == null) { + messageManager.sendMessage(player, + configLoad.getString( + "Island.Admin.Upgrade.Tier.Selected.Message")); + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, + 1.0F); + + Bukkit.getServer().getScheduler() + .runTaskLater(skyblock, + () -> open(player), 1L); + + return; + } + + double cost = Double.valueOf(event1.getName()); + + soundManager.playSound(player, + CompatibleSound.BLOCK_ANVIL_USE.getSound(), 1.0F, 1.0F); + upgradeManager.getUpgrades( + com.songoda.skyblock.upgrade.Upgrade.Type.Members) + .get(tier).setCost(cost); + fileManager + .getConfig( + new File(skyblock.getDataFolder(), + "upgrades.yml")) + .getFileConfiguration() + .set("Upgrades.Members." + tier + ".Cost", + cost); + + Bukkit.getServer().getScheduler() + .runTaskLater(skyblock, + () -> open(player), 1L); + } + + event1.setWillClose(true); + event1.setWillDestroy(true); + } else { + event1.setWillClose(false); + event1.setWillDestroy(false); + } + }); + + ItemStack is14 = new ItemStack(Material.NAME_TAG); + ItemMeta im = is14.getItemMeta(); + im.setDisplayName(configLoad.getString( + "Menu.Admin.Upgrade.Members.Item.Word.Cost.Enter")); + is14.setItemMeta(im); + + gui.setSlot(AbstractAnvilGUI.AnvilSlot.INPUT_LEFT, is14); + gui.open(); + }, 1L); + + return; + } else { + event.setWillClose(false); + event.setWillDestroy(false); + + return; + } + } + + Bukkit.getServer().getScheduler().runTaskLater(skyblock, () -> open(player), 1L); + } + } + }); + + nInv.addItem(nInv.createItem(CompatibleMaterial.OAK_FENCE_GATE.getItem(), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Admin.Upgrade.Members.Item.Return.Displayname")), + null, null, null, null), 0); + nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Admin.Upgrade.Members.Item.Information.Displayname")), + configLoad.getStringList("Menu.Admin.Upgrade.Members.Item.Information.Lore"), null, null, null), + 1); + nInv.addItem(nInv.createItem(CompatibleMaterial.BLACK_STAINED_GLASS_PANE.getItem(), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Admin.Upgrade.Members.Item.Barrier.Displayname")), + null, null, null, null), 2); + + List upgrades = upgradeManager + .getUpgrades(com.songoda.skyblock.upgrade.Upgrade.Type.Members); + + if (upgrades != null) { + for (int i = 0; i < 5; i++) { + if (upgrades.size() >= i + 1) { + com.songoda.skyblock.upgrade.Upgrade upgrade = upgrades.get(i); + int tier = i + 1; + + if (upgrade != null) { + nInv.addItem(nInv.createItem(new ItemStack(Material.PAPER, tier), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Admin.Upgrade.Members.Item.Tier.Displayname") + .replace("%tier", "" + tier)), + configLoad.getStringList("Menu.Admin.Upgrade.Members.Item.Tier.Lore"), + new Placeholder[]{new Placeholder("%members", "" + upgrade.getValue()), + new Placeholder("%cost", + NumberUtil.formatNumberByDecimal(upgrade.getCost()))}, + null, null), i + 3); + } + } + } + } + + nInv.setTitle(ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Admin.Upgrade.Members.Title"))); + nInv.setRows(1); + Bukkit.getServer().getScheduler().runTask(skyblock, () -> nInv.open()); } } @@ -825,7 +1277,7 @@ public class Upgrade { public enum Type { - Upgrades, Size + Upgrades, Size, Members } } diff --git a/src/main/java/com/songoda/skyblock/upgrade/Upgrade.java b/src/main/java/com/songoda/skyblock/upgrade/Upgrade.java index 86053c92..8f951c07 100644 --- a/src/main/java/com/songoda/skyblock/upgrade/Upgrade.java +++ b/src/main/java/com/songoda/skyblock/upgrade/Upgrade.java @@ -41,7 +41,7 @@ public class Upgrade { public enum Type { - Crop, Spawner, Fly, Drops, Size, Speed, Jump + Crop, Spawner, Fly, Drops, Size, Speed, Jump, Members } } diff --git a/src/main/java/com/songoda/skyblock/upgrade/UpgradeManager.java b/src/main/java/com/songoda/skyblock/upgrade/UpgradeManager.java index c92b80db..88580882 100644 --- a/src/main/java/com/songoda/skyblock/upgrade/UpgradeManager.java +++ b/src/main/java/com/songoda/skyblock/upgrade/UpgradeManager.java @@ -54,6 +54,23 @@ public class UpgradeManager { upgradeStorage.put(Upgrade.Type.Size, upgrades); } + if (configLoad.getString("Upgrades.Members") != null) { + List upgrades = new ArrayList<>(); + + for (String tierList : configLoad.getConfigurationSection("Upgrades.Members").getKeys(false)) { + if (configLoad.getString("Upgrades.Members." + tierList + ".Value") != null) { + if (configLoad.getInt("Upgrades.Members." + tierList + ".Value") > 1000) { + continue; + } + } + + upgrades.add(new Upgrade(configLoad.getDouble("Upgrades.Members." + tierList + ".Cost"), + configLoad.getInt("Upgrades.Members." + tierList + ".Value"))); + } + + upgradeStorage.put(Upgrade.Type.Members, upgrades); + } + // Task for applying the speed & jump boost upgrades if the player is on an island that has them Bukkit.getScheduler().scheduleSyncRepeatingTask(SkyBlock.getInstance(), this::applyUpgrades, 5L, 20L); } @@ -85,6 +102,22 @@ public class UpgradeManager { configLoad.set("Upgrades.Size." + i + ".Cost", upgrade.getCost()); } + if (configLoad.getString("Upgrades.Members") != null) { + for (String tierList : configLoad.getConfigurationSection("Upgrades.Members").getKeys(false)) { + upgrades.add(new Upgrade(configLoad.getDouble("Upgrades.Members." + tierList + ".Cost"), + configLoad.getInt("Upgrades.Members." + tierList + ".Value"))); + } + } + + upgrades.add(new Upgrade(0, value)); + configLoad.set("Upgrades.Members", null); + + for (int i = 0; i < upgrades.size(); i++) { + Upgrade upgrade = upgrades.get(i); + configLoad.set("Upgrades.Members." + i + ".Value", upgrade.getValue()); + configLoad.set("Upgrades.Members." + i + ".Cost", upgrade.getCost()); + } + upgradeStorage.put(type, upgrades); try { @@ -111,6 +144,14 @@ public class UpgradeManager { configLoad.set("Upgrades.Size." + i + ".Cost", upgrade.getCost()); } + configLoad.set("Upgrades.Members", null); + + for (int i = 0; i < upgrades.size(); i++) { + Upgrade upgrade = upgrades.get(i); + configLoad.set("Upgrades.Members." + i + ".Value", upgrade.getValue()); + configLoad.set("Upgrades.Members." + i + ".Cost", upgrade.getCost()); + } + try { configLoad.save(config.getFile()); } catch (IOException e) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e68afb67..f87b8848 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,6 +9,7 @@ Sound: # When disabled all sounds will be disabled. Enable: true Island: + InitialMaxMembers: 3 Size: # [!] Do not go over 1000 for both of these options. # The size of an Island when created. diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml index d4f45456..65a15e3f 100644 --- a/src/main/resources/language.yml +++ b/src/main/resources/language.yml @@ -273,6 +273,25 @@ Command: Message: '&bSkyBlock &8| &cError&8: &eYou must enter a numerical value.' Invalid: Message: '&bSkyBlock &8| &cError&8: &eInvalid: /island admin setsize ' + SetMaxMembers: + Set: + Message: '&bSkyBlock &8| &aInfo&8: &eYou have set &d%player''s &eIsland max members amount to &d%maxMembers&e.' + Members: + Less: + Message: '&bSkyBlock &8| &cError&8: &eThe max members amount of the Island must be less than 100000.' + Greater: + Message: '&bSkyBlock &8| &cError&8: &eThe max members amount of the Island must be greater than 0.' + Info: + Message: '&f&oSets the max members amount of a player''s Island.' + Island: + Owner: + Message: '&bSkyBlock &8| &cError&8: &eThat player is not a Member of or does not own an Island.' + Data: + Message: '&bSkyBlock &8| &cError&8: &eThe Island data for that player''s Island does not exist.' + Numerical: + Message: '&bSkyBlock &8| &cError&8: &eYou must enter a numerical value.' + Invalid: + Message: '&bSkyBlock &8| &cError&8: &eInvalid: /island admin setmaxmembers ' SetAlwaysLoaded: IsOn: Message: '&bSkyBlock &8| &aInfo&8: &eThis island will not unload.' @@ -1708,6 +1727,15 @@ Menu: - '&7Tiers&8: &f%tiers' - '' - '&eClick to manage tiers!' + Members: + Displayname: '&aBorder Size' + Lore: + - '&7Increases the max amount' + - '&7of Island members.' + - '' + - '&7Tiers&8: &f%tiers' + - '' + - '&eClick to manage tiers!' Fly: Displayname: '&aFlight' Lore: @@ -1784,6 +1812,35 @@ Menu: - '&eRight-Click to set cost!' Displayname: '&bTier #%tier' Title: '&8Upgrade Editor - Size' + Members: + Item: + Information: + Displayname: '&aInformation' + Lore: + - '&7Create tiers, and decide the' + - '&7cost and what upgrade Islands' + - '&7receive from them.' + - '' + - '&eClick to create a tier!' + Return: + Displayname: '&cReturn to Upgrade Editor' + Word: + Size: + Enter: Enter Members + Cost: + Enter: Enter Cost + Barrier: + Displayname: '&cMax members Tiers' + Tier: + Lore: + - '&7Max members&8: &f%maxMembers' + - '&7Cost&8: &f$%cost' + - '' + - '&eLeft-Click to set size!' + - '&eMiddle-Click to remove!' + - '&eRight-Click to set cost!' + Displayname: '&bTier #%tier' + Title: '&8Upgrade Editor - Members' Generator: Generator: Item: @@ -2067,7 +2124,7 @@ Menu: Statistics: Lore: - '&bIsland Members:' - - '&e%island_members/%island_capacity' + - '&e%island_members/%island_maxMembers' - '' - '&bMembers:' - '&e%members' @@ -2806,6 +2863,41 @@ Menu: - '' - '&cYou don''t have enough money!' Displayname: '&bBorder Size [Tier #%tier]' + Members: + Claimable: + Lore: + - '&7Increases the max members' + - '&7amount of your Island.' + - '' + - '&7Max members&8: &f%maxMembers' + - '&7Cost&8: &f$%cost' + - '' + - '&7Status&8: &6&lCLAIMABLE' + - '' + - '&eClick to unlock this upgrade!' + Claimed: + Lore: + - '&7Increases the max members' + - '&7amount of your Island.' + - '' + - '&7Max members&8: &f%maxMembers' + - '&7Cost&8: &f$%cost' + - '' + - '&7Status&8: &a&lCLAIMED' + - '' + - '&cYou have unlocked this upgrade!' + Unclaimable: + Lore: + - '&7Increases the max members' + - '&7amount of your Island.' + - '' + - '&7Max members&8: &f%maxMembers' + - '&7Cost&8: &f$%cost' + - '' + - '&7Status&8: &c&lLOCKED' + - '' + - '&cYou don''t have enough money!' + Displayname: '&bMax Members [Tier #%tier]' Word: Enable: Enable Disable: Disable @@ -3241,6 +3333,11 @@ Placeholder: Message: '&c0' Non-empty: Message: '&f%placeholder' + fabledskyblock_island_maxmembers: + Empty: + Message: '&c0' + Non-empty: + Message: '&f%placeholder' fabledskyblock_island_time: Non-empty: Message: '&f%placeholder' @@ -3432,6 +3529,8 @@ Island: Tier: Size: Message: '&bSkyBlock &8| &cError&8: &eThe size of the tier must be less than 1000.' + Members: + Message: '&bSkyBlock &8| &cError&8: &eThe size of the tier must be less than 100000.' Limit: Message: '&bSkyBlock &8| &cError&8: &eYou have reached the limit of tiers for this upgrade.' Selected: diff --git a/src/main/resources/upgrades.yml b/src/main/resources/upgrades.yml index ce956a05..5dae9ba8 100644 --- a/src/main/resources/upgrades.yml +++ b/src/main/resources/upgrades.yml @@ -30,6 +30,16 @@ Upgrades: 4: Value: 350 Cost: 500000 + Members: + 0: + Value: 5 + Cost: 10000 + 1: + Value: 7 + Cost: 20000 + 2: + Value: 10 + Cost: 30000 Spawner: Enable: true Cost: 100000 \ No newline at end of file