diff --git a/pom.xml b/pom.xml index f02a4e65..fb540d54 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ com.songoda SkyBlock 4.0.0 - 43 + 44 clean package diff --git a/src/main/java/me/goodandevil/skyblock/command/CommandManager.java b/src/main/java/me/goodandevil/skyblock/command/CommandManager.java index cf7c84eb..96a6f83a 100644 --- a/src/main/java/me/goodandevil/skyblock/command/CommandManager.java +++ b/src/main/java/me/goodandevil/skyblock/command/CommandManager.java @@ -56,9 +56,11 @@ import me.goodandevil.skyblock.command.commands.VisitCommand; import me.goodandevil.skyblock.command.commands.VisitorsCommand; import me.goodandevil.skyblock.command.commands.VoteCommand; import me.goodandevil.skyblock.command.commands.WeatherCommand; +import me.goodandevil.skyblock.command.commands.admin.AddUpgradeCommand; import me.goodandevil.skyblock.command.commands.admin.GeneratorCommand; import me.goodandevil.skyblock.command.commands.admin.ReloadCommand; import me.goodandevil.skyblock.command.commands.admin.RemoveHologramCommand; +import me.goodandevil.skyblock.command.commands.admin.RemoveUpgradeCommand; import me.goodandevil.skyblock.command.commands.admin.SetHologramCommand; import me.goodandevil.skyblock.command.commands.admin.SetSizeCommand; import me.goodandevil.skyblock.command.commands.admin.StructureCommand; @@ -107,6 +109,8 @@ public class CommandManager implements CommandExecutor, TabCompleter { configLoad.getString("Command.Island.Leaderboard.Info.Message")))); subCommands.add(new CreateCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Create.Info.Message")))); + // subCommands.add(new + // ResetCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&',configLoad.getString("Command.Island.Reset.Info.Message")))); subCommands.add(new DeleteCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Delete.Info.Message")))); subCommands.add(new TeleportCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', @@ -185,6 +189,10 @@ public class CommandManager implements CommandExecutor, TabCompleter { configLoad.getString("Command.Island.Admin.RemoveHologram.Info.Message")))); subCommands.add(new SetSizeCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Admin.SetSize.Info.Message")))); + subCommands.add(new AddUpgradeCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Command.Island.Admin.AddUpgrade.Info.Message")))); + subCommands.add(new RemoveUpgradeCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Info.Message")))); subCommands.add(new me.goodandevil.skyblock.command.commands.admin.CreateCommand(skyblock).setInfo(ChatColor .translateAlternateColorCodes('&', configLoad.getString("Command.Island.Admin.Create.Info.Message")))); subCommands.add(new me.goodandevil.skyblock.command.commands.admin.UpgradeCommand(skyblock).setInfo(ChatColor diff --git a/src/main/java/me/goodandevil/skyblock/command/commands/ConfirmCommand.java b/src/main/java/me/goodandevil/skyblock/command/commands/ConfirmCommand.java index 2fe44652..50c84dd6 100644 --- a/src/main/java/me/goodandevil/skyblock/command/commands/ConfirmCommand.java +++ b/src/main/java/me/goodandevil/skyblock/command/commands/ConfirmCommand.java @@ -61,7 +61,8 @@ public class ConfirmCommand extends SubCommand { me.goodandevil.skyblock.island.Island island = islandManager.getIsland(playerData.getOwner()); Confirmation confirmation = playerData.getConfirmation(); - if (confirmation == Confirmation.Ownership || confirmation == Confirmation.Deletion) { + if (confirmation == Confirmation.Ownership || confirmation == Confirmation.Reset + || confirmation == Confirmation.Deletion) { if (island.hasRole(IslandRole.Owner, player.getUniqueId())) { if (confirmation == Confirmation.Ownership) { UUID targetPlayerUUID = playerData.getOwnership(); @@ -107,6 +108,9 @@ public class ConfirmCommand extends SubCommand { .getString("Command.Island.Confirmation.Ownership.Member.Message")); soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); } + } else if (confirmation == Confirmation.Reset) { + playerData.setConfirmation(null); + playerData.setConfirmationTime(0); } else if (confirmation == Confirmation.Deletion) { playerData.setConfirmation(null); playerData.setConfirmationTime(0); @@ -188,6 +192,7 @@ public class ConfirmCommand extends SubCommand { soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); } } + } @Override diff --git a/src/main/java/me/goodandevil/skyblock/command/commands/ResetCommand.java b/src/main/java/me/goodandevil/skyblock/command/commands/ResetCommand.java new file mode 100644 index 00000000..f199e4e0 --- /dev/null +++ b/src/main/java/me/goodandevil/skyblock/command/commands/ResetCommand.java @@ -0,0 +1,122 @@ +package me.goodandevil.skyblock.command.commands; + +import java.io.File; + +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; + +import me.goodandevil.skyblock.SkyBlock; +import me.goodandevil.skyblock.command.CommandManager; +import me.goodandevil.skyblock.command.SubCommand; +import me.goodandevil.skyblock.command.CommandManager.Type; +import me.goodandevil.skyblock.config.FileManager; +import me.goodandevil.skyblock.config.FileManager.Config; +import me.goodandevil.skyblock.confirmation.Confirmation; +import me.goodandevil.skyblock.island.IslandManager; +import me.goodandevil.skyblock.island.IslandRole; +import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.playerdata.PlayerData; +import me.goodandevil.skyblock.sound.SoundManager; +import me.goodandevil.skyblock.utils.ChatComponent; +import me.goodandevil.skyblock.utils.version.Sounds; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; + +public class ResetCommand extends SubCommand { + + private final SkyBlock skyblock; + private String info; + + public ResetCommand(SkyBlock skyblock) { + this.skyblock = skyblock; + } + + @Override + public void onCommandByPlayer(Player player, String[] args) { + MessageManager messageManager = skyblock.getMessageManager(); + IslandManager islandManager = skyblock.getIslandManager(); + SoundManager soundManager = skyblock.getSoundManager(); + FileManager fileManager = skyblock.getFileManager(); + + PlayerData playerData = skyblock.getPlayerDataManager().getPlayerData(player); + + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + if (islandManager.hasIsland(player)) { + if (islandManager.getIsland(playerData.getOwner()).hasRole(IslandRole.Owner, player.getUniqueId())) { + if (playerData.getConfirmationTime() > 0) { + messageManager.sendMessage(player, + configLoad.getString("Command.Island.Reset.Confirmation.Pending.Message")); + soundManager.playSound(player, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F); + } else { + int confirmationTime = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getInt("Island.Confirmation.Timeout"); + + playerData.setConfirmation(Confirmation.Reset); + playerData.setConfirmationTime(confirmationTime); + + player.spigot().sendMessage(new ChatComponent( + configLoad.getString("Command.Island.Reset.Confirmation.Confirm.Message").replace("%time", + "" + confirmationTime) + " ", + false, null, null, null) + .addExtra(new ChatComponent(configLoad + .getString("Command.Island.Reset.Confirmation.Confirm.Word.Confirm") + .toUpperCase(), true, ChatColor.RED, + new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/island confirm"), + new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder( + ChatColor.translateAlternateColorCodes('&', configLoad.getString( + "Command.Island.Reset.Confirmation.Confirm.Word.Tutorial"))) + .create())))); + soundManager.playSound(player, Sounds.VILLAGER_YES.bukkitSound(), 1.0F, 1.0F); + } + } else { + messageManager.sendMessage(player, configLoad.getString("Command.Island.Reset.Permission.Message")); + soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); + } + } else { + messageManager.sendMessage(player, configLoad.getString("Command.Island.Reset.Owner.Message")); + soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); + } + } + + @Override + public void onCommandByConsole(ConsoleCommandSender sender, String[] args) { + sender.sendMessage("SkyBlock | Error: You must be a player to perform that command."); + } + + @Override + public String getName() { + return "reset"; + } + + @Override + public String getInfo() { + return info; + } + + @Override + public SubCommand setInfo(String info) { + this.info = info; + + return this; + } + + @Override + public String[] getAliases() { + return new String[0]; + } + + @Override + public String[] getArguments() { + return new String[0]; + } + + @Override + public Type getType() { + return CommandManager.Type.Default; + } +} diff --git a/src/main/java/me/goodandevil/skyblock/command/commands/admin/AddUpgradeCommand.java b/src/main/java/me/goodandevil/skyblock/command/commands/admin/AddUpgradeCommand.java new file mode 100644 index 00000000..396f1265 --- /dev/null +++ b/src/main/java/me/goodandevil/skyblock/command/commands/admin/AddUpgradeCommand.java @@ -0,0 +1,192 @@ +package me.goodandevil.skyblock.command.commands.admin; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import me.goodandevil.skyblock.SkyBlock; +import me.goodandevil.skyblock.command.CommandManager; +import me.goodandevil.skyblock.command.SubCommand; +import me.goodandevil.skyblock.command.CommandManager.Type; +import me.goodandevil.skyblock.config.FileManager; +import me.goodandevil.skyblock.config.FileManager.Config; +import me.goodandevil.skyblock.island.Island; +import me.goodandevil.skyblock.island.IslandManager; +import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.playerdata.PlayerDataManager; +import me.goodandevil.skyblock.sound.SoundManager; +import me.goodandevil.skyblock.upgrade.Upgrade; +import me.goodandevil.skyblock.utils.OfflinePlayer; +import me.goodandevil.skyblock.utils.version.Sounds; + +public class AddUpgradeCommand extends SubCommand { + + private final SkyBlock skyblock; + private String info; + + public AddUpgradeCommand(SkyBlock skyblock) { + this.skyblock = skyblock; + } + + @Override + public void onCommandByPlayer(Player player, String[] args) { + onCommand(player, args); + } + + @Override + public void onCommandByConsole(ConsoleCommandSender sender, String[] args) { + onCommand(sender, args); + } + + public void onCommand(CommandSender sender, String[] args) { + PlayerDataManager playerDataManager = skyblock.getPlayerDataManager(); + MessageManager messageManager = skyblock.getMessageManager(); + IslandManager islandManager = skyblock.getIslandManager(); + SoundManager soundManager = skyblock.getSoundManager(); + FileManager fileManager = skyblock.getFileManager(); + + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + Player player = null; + + if (sender instanceof Player) { + player = (Player) sender; + } + + if (player == null || player.hasPermission("skyblock.admin.addupgrade") + || player.hasPermission("skyblock.admin.*") || player.hasPermission("skyblock.*")) { + if (args.length == 2) { + Player targetPlayer = Bukkit.getServer().getPlayer(args[0]); + UUID islandOwnerUUID; + String targetPlayerName; + + if (targetPlayer == null) { + OfflinePlayer targetPlayerOffline = new OfflinePlayer(args[0]); + islandOwnerUUID = targetPlayerOffline.getOwner(); + targetPlayerName = targetPlayerOffline.getName(); + } else { + islandOwnerUUID = playerDataManager.getPlayerData(targetPlayer).getOwner(); + targetPlayerName = targetPlayer.getName(); + } + + Upgrade.Type upgrade = null; + + for (Upgrade.Type upgradeList : Upgrade.Type.values()) { + if (upgradeList != Upgrade.Type.Size) { + if (args[1].toUpperCase().equals(upgradeList.name().toUpperCase())) { + upgrade = upgradeList; + + break; + } + } + } + + if (islandOwnerUUID == null) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.AddUpgrade.Island.Owner.Message")); + soundManager.playSound(sender, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); + } else if (upgrade == null) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.AddUpgrade.Upgrade.Exist.Message")); + soundManager.playSound(sender, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); + } else { + if (islandManager.containsIsland(islandOwnerUUID)) { + Island island = islandManager.getIsland(islandOwnerUUID); + + if (island.hasUpgrade(upgrade)) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.AddUpgrade.Upgrade.Already.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + + return; + } + + island.setUpgrade(null, upgrade, true); + } else { + File islandDataFile = new File(skyblock.getDataFolder().toString() + "/island-data", + islandOwnerUUID.toString() + ".yml"); + + if (!fileManager.isFileExist(islandDataFile)) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.AddUpgrade.Island.Data.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + + return; + } + + FileConfiguration islandDataConfigLoad = YamlConfiguration.loadConfiguration(islandDataFile); + + if (islandDataConfigLoad.getString("Upgrade." + upgrade.name()) != null) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.AddUpgrade.Upgrade.Already.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + + return; + } + + islandDataConfigLoad.set("Upgrade." + upgrade.name(), true); + + try { + islandDataConfigLoad.save(islandDataFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.AddUpgrade.Added.Message") + .replace("%player", targetPlayerName).replace("%upgrade", upgrade.name())); + soundManager.playSound(sender, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F); + } + } else { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.AddUpgrade.Invalid.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + } + } else { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.AddUpgrade.Permission.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + } + } + + @Override + public String getName() { + return "addupgrade"; + } + + @Override + public String getInfo() { + return info; + } + + @Override + public SubCommand setInfo(String info) { + this.info = info; + + return this; + } + + @Override + public String[] getAliases() { + return new String[0]; + } + + @Override + public String[] getArguments() { + return new String[0]; + } + + @Override + public Type getType() { + return CommandManager.Type.Admin; + } +} diff --git a/src/main/java/me/goodandevil/skyblock/command/commands/admin/RemoveUpgradeCommand.java b/src/main/java/me/goodandevil/skyblock/command/commands/admin/RemoveUpgradeCommand.java new file mode 100644 index 00000000..a5b02a70 --- /dev/null +++ b/src/main/java/me/goodandevil/skyblock/command/commands/admin/RemoveUpgradeCommand.java @@ -0,0 +1,192 @@ +package me.goodandevil.skyblock.command.commands.admin; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import me.goodandevil.skyblock.SkyBlock; +import me.goodandevil.skyblock.command.CommandManager; +import me.goodandevil.skyblock.command.SubCommand; +import me.goodandevil.skyblock.command.CommandManager.Type; +import me.goodandevil.skyblock.config.FileManager; +import me.goodandevil.skyblock.config.FileManager.Config; +import me.goodandevil.skyblock.island.Island; +import me.goodandevil.skyblock.island.IslandManager; +import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.playerdata.PlayerDataManager; +import me.goodandevil.skyblock.sound.SoundManager; +import me.goodandevil.skyblock.upgrade.Upgrade; +import me.goodandevil.skyblock.utils.OfflinePlayer; +import me.goodandevil.skyblock.utils.version.Sounds; + +public class RemoveUpgradeCommand extends SubCommand { + + private final SkyBlock skyblock; + private String info; + + public RemoveUpgradeCommand(SkyBlock skyblock) { + this.skyblock = skyblock; + } + + @Override + public void onCommandByPlayer(Player player, String[] args) { + onCommand(player, args); + } + + @Override + public void onCommandByConsole(ConsoleCommandSender sender, String[] args) { + onCommand(sender, args); + } + + public void onCommand(CommandSender sender, String[] args) { + PlayerDataManager playerDataManager = skyblock.getPlayerDataManager(); + MessageManager messageManager = skyblock.getMessageManager(); + IslandManager islandManager = skyblock.getIslandManager(); + SoundManager soundManager = skyblock.getSoundManager(); + FileManager fileManager = skyblock.getFileManager(); + + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + Player player = null; + + if (sender instanceof Player) { + player = (Player) sender; + } + + if (player == null || player.hasPermission("skyblock.admin.removeupgrade") + || player.hasPermission("skyblock.admin.*") || player.hasPermission("skyblock.*")) { + if (args.length == 2) { + Player targetPlayer = Bukkit.getServer().getPlayer(args[0]); + UUID islandOwnerUUID; + String targetPlayerName; + + if (targetPlayer == null) { + OfflinePlayer targetPlayerOffline = new OfflinePlayer(args[0]); + islandOwnerUUID = targetPlayerOffline.getOwner(); + targetPlayerName = targetPlayerOffline.getName(); + } else { + islandOwnerUUID = playerDataManager.getPlayerData(targetPlayer).getOwner(); + targetPlayerName = targetPlayer.getName(); + } + + Upgrade.Type upgrade = null; + + for (Upgrade.Type upgradeList : Upgrade.Type.values()) { + if (upgradeList != Upgrade.Type.Size) { + if (args[1].toUpperCase().equals(upgradeList.name().toUpperCase())) { + upgrade = upgradeList; + + break; + } + } + } + + if (islandOwnerUUID == null) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Island.Owner.Message")); + soundManager.playSound(sender, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); + } else if (upgrade == null) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Upgrade.Exist.Message")); + soundManager.playSound(sender, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); + } else { + if (islandManager.containsIsland(islandOwnerUUID)) { + Island island = islandManager.getIsland(islandOwnerUUID); + + if (!island.hasUpgrade(upgrade)) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Upgrade.Missing.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + + return; + } + + island.removeUpgrade(upgrade); + } else { + File islandDataFile = new File(skyblock.getDataFolder().toString() + "/island-data", + islandOwnerUUID.toString() + ".yml"); + + if (!fileManager.isFileExist(islandDataFile)) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Island.Data.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + + return; + } + + FileConfiguration islandDataConfigLoad = YamlConfiguration.loadConfiguration(islandDataFile); + + if (islandDataConfigLoad.getString("Upgrade." + upgrade.name()) == null) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Upgrade.Missing.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + + return; + } + + islandDataConfigLoad.set("Upgrade." + upgrade.name(), null); + + try { + islandDataConfigLoad.save(islandDataFile); + } catch (IOException e) { + e.printStackTrace(); + } + } + + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Removed.Message") + .replace("%player", targetPlayerName).replace("%upgrade", upgrade.name())); + soundManager.playSound(sender, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F); + } + } else { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Invalid.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + } + } else { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.RemoveUpgrade.Permission.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + } + } + + @Override + public String getName() { + return "removeupgrade"; + } + + @Override + public String getInfo() { + return info; + } + + @Override + public SubCommand setInfo(String info) { + this.info = info; + + return this; + } + + @Override + public String[] getAliases() { + return new String[0]; + } + + @Override + public String[] getArguments() { + return new String[0]; + } + + @Override + public Type getType() { + return CommandManager.Type.Admin; + } +} diff --git a/src/main/java/me/goodandevil/skyblock/command/commands/admin/SetSizeCommand.java b/src/main/java/me/goodandevil/skyblock/command/commands/admin/SetSizeCommand.java index c35b191b..7749bf64 100644 --- a/src/main/java/me/goodandevil/skyblock/command/commands/admin/SetSizeCommand.java +++ b/src/main/java/me/goodandevil/skyblock/command/commands/admin/SetSizeCommand.java @@ -82,7 +82,7 @@ public class SetSizeCommand extends SubCommand { if (islandOwnerUUID == null) { messageManager.sendMessage(sender, - configLoad.getString("Command.Island.Admin.SetSize.Island.Message")); + configLoad.getString("Command.Island.Admin.SetSize.Island.Owner.Message")); soundManager.playSound(sender, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); } else if (size < 50) { messageManager.sendMessage(sender, @@ -103,13 +103,23 @@ public class SetSizeCommand extends SubCommand { islandManager.updateBorder(island); } } else { - File configFile = new File(skyblock.getDataFolder().toString() + "/island-data", + File islandDataFile = new File(skyblock.getDataFolder().toString() + "/island-data", islandOwnerUUID.toString() + ".yml"); - FileConfiguration islandConfigLoad = YamlConfiguration.loadConfiguration(configFile); - islandConfigLoad.set("Size", size); + + if (!fileManager.isFileExist(islandDataFile)) { + messageManager.sendMessage(sender, + configLoad.getString("Command.Island.Admin.SetSize.Island.Data.Message")); + soundManager.playSound(sender, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + + return; + } + + FileConfiguration islandDataConfigLoad = YamlConfiguration + .loadConfiguration(islandDataFile); + islandDataConfigLoad.set("Size", size); try { - islandConfigLoad.save(configFile); + islandDataConfigLoad.save(islandDataFile); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/me/goodandevil/skyblock/confirmation/Confirmation.java b/src/main/java/me/goodandevil/skyblock/confirmation/Confirmation.java index 58aaa178..f09cf82a 100644 --- a/src/main/java/me/goodandevil/skyblock/confirmation/Confirmation.java +++ b/src/main/java/me/goodandevil/skyblock/confirmation/Confirmation.java @@ -2,6 +2,6 @@ package me.goodandevil.skyblock.confirmation; public enum Confirmation { - Ownership, Deletion; + Ownership, Reset, Deletion; } diff --git a/src/main/java/me/goodandevil/skyblock/island/Island.java b/src/main/java/me/goodandevil/skyblock/island/Island.java index 999e0c7e..fbf9f6d3 100644 --- a/src/main/java/me/goodandevil/skyblock/island/Island.java +++ b/src/main/java/me/goodandevil/skyblock/island/Island.java @@ -597,6 +597,12 @@ public class Island { .callEvent(new IslandUpgradeEvent(getAPIWrapper(), player, APIUtil.fromImplementation(type))); } + public void removeUpgrade(Upgrade.Type type) { + skyblock.getFileManager().getConfig( + new File(new File(skyblock.getDataFolder().toString() + "/island-data"), uuid.toString() + ".yml")) + .getFileConfiguration().set("Upgrade." + type.name(), null); + } + public boolean hasUpgrade(Upgrade.Type type) { if (skyblock.getFileManager().getConfig( new File(new File(skyblock.getDataFolder().toString() + "/island-data"), uuid.toString() + ".yml")) @@ -695,6 +701,26 @@ public class Island { } } + public void setStructure(String structure) { + skyblock.getFileManager().getConfig( + new File(new File(skyblock.getDataFolder().toString() + "/island-data"), uuid.toString() + ".yml")) + .getFileConfiguration().set("Structure", structure); + } + + public boolean hasStructure() { + if (getStructure() != null) { + return true; + } + + return false; + } + + public String getStructure() { + return skyblock.getFileManager().getConfig( + new File(new File(skyblock.getDataFolder().toString() + "/island-data"), uuid.toString() + ".yml")) + .getFileConfiguration().getString("Structure"); + } + public Visit getVisit() { return skyblock.getVisitManager().getIsland(getOwnerUUID()); } diff --git a/src/main/java/me/goodandevil/skyblock/island/IslandManager.java b/src/main/java/me/goodandevil/skyblock/island/IslandManager.java index 13a75059..b79c31b1 100644 --- a/src/main/java/me/goodandevil/skyblock/island/IslandManager.java +++ b/src/main/java/me/goodandevil/skyblock/island/IslandManager.java @@ -294,8 +294,8 @@ public class IslandManager { if (containsIsland(islandOwnerUUID)) { Island island = getIsland(islandOwnerUUID); - island.setOwnerUUID(uuid); island.save(); + island.setOwnerUUID(uuid); Level level = island.getLevel(); level.save(); @@ -391,6 +391,7 @@ public class IslandManager { } else { PlayerData playerData = playerDataManager.getPlayerData(targetPlayer); playerData.setOwner(uuid); + playerData.setIsland(uuid); playerData.save(); } } @@ -446,6 +447,21 @@ public class IslandManager { islandStorage.remove(island.getOwnerUUID()); } + public void deleteIslandData(UUID uuid) { + FileManager fileManager = skyblock.getFileManager(); + fileManager + .deleteConfig(new File(skyblock.getDataFolder().toString() + "/island-data", uuid.toString() + ".yml")); + fileManager.deleteConfig(new File(skyblock.getDataFolder().toString() + "/ban-data", uuid.toString() + ".yml")); + fileManager + .deleteConfig(new File(skyblock.getDataFolder().toString() + "/coop-data", uuid.toString() + ".yml")); + fileManager + .deleteConfig(new File(skyblock.getDataFolder().toString() + "/level-data", uuid.toString() + ".yml")); + fileManager.deleteConfig( + new File(skyblock.getDataFolder().toString() + "/setting-data", uuid.toString() + ".yml")); + fileManager + .deleteConfig(new File(skyblock.getDataFolder().toString() + "/visit-data", uuid.toString() + ".yml")); + } + public void loadIsland(UUID uuid) { WorldManager worldManager = skyblock.getWorldManager(); FileManager fileManager = skyblock.getFileManager(); @@ -459,8 +475,8 @@ public class IslandManager { if (isIslandExist(uuid)) { if (configLoad.getString("Island.Owner") == null || !configLoad.getString("Island.Owner").equals(uuid.toString())) { - fileManager.deleteConfig( - new File(skyblock.getDataFolder().toString() + "/island-data", uuid.toString() + ".yml")); + deleteIslandData(uuid); + configLoad.set("Island.Owner", null); return; } @@ -476,6 +492,13 @@ public class IslandManager { config = fileManager.getConfig(new File(skyblock.getDataFolder().toString() + "/island-data", islandOwnerUUID.toString() + ".yml")); + if (config.getFileConfiguration().getString("Location") == null) { + deleteIslandData(islandOwnerUUID); + configLoad.set("Island.Owner", null); + + return; + } + org.bukkit.Location islandNormalLocation = fileManager.getLocation(config, "Location.Normal.Island", true); if (islandNormalLocation.getWorld() == null) { diff --git a/src/main/java/me/goodandevil/skyblock/scoreboard/Scoreboard.java b/src/main/java/me/goodandevil/skyblock/scoreboard/Scoreboard.java index 4c515c6a..fd26a92c 100644 --- a/src/main/java/me/goodandevil/skyblock/scoreboard/Scoreboard.java +++ b/src/main/java/me/goodandevil/skyblock/scoreboard/Scoreboard.java @@ -203,16 +203,18 @@ public class Scoreboard { islandRole = displayVariables.get("%member"); } - displayLine = displayLine.replace("%island_level", "" + NumberUtil.formatNumber(level.getLevel())) + displayLine = displayLine.replace("%island_points", "" + NumberUtil.formatNumber(level.getPoints())) + .replace("%island_level", "" + NumberUtil.formatNumber(level.getLevel())) .replace("%island_members", "" + islandMembers).replace("%island_role", islandRole) .replace("%island_visitors", "" + islandManager.getVisitorsAtIsland(island).size()) .replace("%island_size", "" + island.getSize()) .replace("%island_radius", "" + island.getRadius()); } } else { - displayLine = displayLine.replace("%island_level", ChatColor.RED + "0") - .replace("%island_members", ChatColor.RED + "0").replace("%island_role", ChatColor.RED + "null") - .replace("%island_size", ChatColor.RED + "0").replace("%island_radius", ChatColor.RED + "0"); + displayLine = displayLine.replace("%island_points", ChatColor.RED + "0") + .replace("%island_level", ChatColor.RED + "0").replace("%island_members", ChatColor.RED + "0") + .replace("%island_role", ChatColor.RED + "null").replace("%island_size", ChatColor.RED + "0") + .replace("%island_radius", ChatColor.RED + "0"); } PlaceholderManager placeholderManager = skyblock.getPlaceholderManager(); diff --git a/src/main/java/me/goodandevil/skyblock/utils/item/MaterialUtil.java b/src/main/java/me/goodandevil/skyblock/utils/item/MaterialUtil.java index 49713e67..7fa4a8b7 100644 --- a/src/main/java/me/goodandevil/skyblock/utils/item/MaterialUtil.java +++ b/src/main/java/me/goodandevil/skyblock/utils/item/MaterialUtil.java @@ -37,4 +37,24 @@ public class MaterialUtil { return material; } + + public static Material getMaterial(int NMSVersion, int blockVersion, String material, int data) { + if (NMSVersion > 12) { + if (blockVersion > 12) { + return Material.valueOf(material); + } else { + return Materials.requestMaterials(material, (byte) data).getPostMaterial(); + } + } else { + try { + if (blockVersion > 12) { + return Materials.fromString(material).parseMaterial(); + } else { + return Material.valueOf(material); + } + } catch (Exception e) { + return Material.STONE; + } + } + } } diff --git a/src/main/java/me/goodandevil/skyblock/utils/item/nInventoryUtil.java b/src/main/java/me/goodandevil/skyblock/utils/item/nInventoryUtil.java index 41c2c4d6..5c7d6bb8 100644 --- a/src/main/java/me/goodandevil/skyblock/utils/item/nInventoryUtil.java +++ b/src/main/java/me/goodandevil/skyblock/utils/item/nInventoryUtil.java @@ -95,6 +95,7 @@ public class nInventoryUtil { } }; + // TODO Check if listener is already registered Bukkit.getPluginManager().registerEvents(listener, SkyBlock.getInstance()); } } diff --git a/src/main/java/me/goodandevil/skyblock/utils/world/block/BlockUtil.java b/src/main/java/me/goodandevil/skyblock/utils/world/block/BlockUtil.java index 23e5984e..8b981622 100644 --- a/src/main/java/me/goodandevil/skyblock/utils/world/block/BlockUtil.java +++ b/src/main/java/me/goodandevil/skyblock/utils/world/block/BlockUtil.java @@ -253,7 +253,8 @@ public final class BlockUtil { if (NMSVersion > 12 && blockData.getVersion() > 12 && blockData.getBlockData() != null) { block.setBlockData(Bukkit.getServer().createBlockData(blockData.getBlockData())); } else { - material = getMaterial(NMSVersion, blockData.getVersion(), blockData.getMaterial(), block.getData()); + material = me.goodandevil.skyblock.utils.item.MaterialUtil.getMaterial(NMSVersion, blockData.getVersion(), + blockData.getMaterial(), block.getData()); setBlockFast(block.getWorld(), block.getX(), block.getY(), block.getZ(), material, blockData.getData()); } @@ -398,7 +399,8 @@ public final class BlockUtil { String[] flower = blockData.getFlower().split(":"); int materialData = Integer.parseInt(flower[1]); - material = getMaterial(NMSVersion, blockData.getVersion(), flower[0].toUpperCase(), materialData); + material = me.goodandevil.skyblock.utils.item.MaterialUtil.getMaterial(NMSVersion, + blockData.getVersion(), flower[0].toUpperCase(), materialData); if (material != null) { ItemStack is = new ItemStack(material, 1, (byte) materialData); @@ -519,24 +521,4 @@ public final class BlockUtil { e.printStackTrace(); } } - - private static Material getMaterial(int NMSVersion, int blockVersion, String material, int data) { - if (NMSVersion > 12) { - if (blockVersion > 12) { - return Material.valueOf(material); - } else { - return Materials.requestMaterials(material, (byte) data).getPostMaterial(); - } - } else { - try { - if (blockVersion > 12) { - return Materials.fromString(material).parseMaterial(); - } else { - return Material.valueOf(material); - } - } catch (Exception e) { - return Material.STONE; - } - } - } } diff --git a/src/main/java/me/goodandevil/skyblock/utils/world/entity/EntityData.java b/src/main/java/me/goodandevil/skyblock/utils/world/entity/EntityData.java index 8886c141..26bfdce2 100644 --- a/src/main/java/me/goodandevil/skyblock/utils/world/entity/EntityData.java +++ b/src/main/java/me/goodandevil/skyblock/utils/world/entity/EntityData.java @@ -85,6 +85,8 @@ public class EntityData { this.fireTicks = fireTicks; this.ticksLived = ticksLived; + + this.ai = true; } public String getEntityType() { diff --git a/src/main/java/me/goodandevil/skyblock/utils/world/entity/EntityUtil.java b/src/main/java/me/goodandevil/skyblock/utils/world/entity/EntityUtil.java index a643a772..c59f6474 100644 --- a/src/main/java/me/goodandevil/skyblock/utils/world/entity/EntityUtil.java +++ b/src/main/java/me/goodandevil/skyblock/utils/world/entity/EntityUtil.java @@ -20,6 +20,7 @@ import org.bukkit.material.MaterialData; import org.bukkit.util.EulerAngle; import me.goodandevil.skyblock.utils.item.ItemStackUtil; +import me.goodandevil.skyblock.utils.item.MaterialUtil; import me.goodandevil.skyblock.utils.version.NMSUtil; import me.goodandevil.skyblock.utils.world.block.BlockDegreesType; @@ -371,10 +372,16 @@ public final class EntityUtil { } else if (entity instanceof Creeper) { ((Creeper) entity).setPowered(entityData.isPowered()); } else if (entity instanceof Enderman) { - if (entityData.getCarryBlock().length() == 0) { - String[] material = entityData.getCarryBlock().split(":"); - ((Enderman) entity).setCarriedMaterial( - new MaterialData(Material.valueOf(material[0].toUpperCase()), Byte.parseByte(material[1]))); + if (entityData.getCarryBlock() != null && !entityData.getCarryBlock().isEmpty()) { + String[] materialData = entityData.getCarryBlock().split(":"); + + byte data = Byte.parseByte(materialData[1]); + Material material = MaterialUtil.getMaterial(NMSVersion, entityData.getVersion(), + materialData[0].toUpperCase(), data); + + if (material != null) { + ((Enderman) entity).setCarriedMaterial(new MaterialData(material, data)); + } } } else if (entity instanceof Horse) { Horse horse = ((Horse) entity); diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml index 08f87463..84c40d5f 100644 --- a/src/main/resources/language.yml +++ b/src/main/resources/language.yml @@ -49,6 +49,21 @@ Command: Message: "&f&oOpens the Island Creator menu." Owner: Message: "&bSkyBlock &8| &cError&8: &eYou are already an Island owner." + Reset: + Info: + Message: "&f&oResets your Island." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to reset your Island." + Confirmation: + Pending: + Message: "&bSkyBlock &8| &cError&8: &eYou currently have a pending confirmation. Please try again in a few seconds!" + Confirm: + Word: + Confirm: "confirm" + Tutorial: "&7Click to &f&oconfirm &r&7Island reset!" + Message: "&bSkyBlock &8| &aInfo&8: &eYou want to reset your Island. You have &c%time &eseconds to confirm." Delete: Info: Message: "&f&oDeletes your Island." @@ -730,7 +745,7 @@ Command: Permission: Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." Invalid: - Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin setsize " + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin setsize " Numerical: Message: "&bSkyBlock &8| &cError&8: &eYou must enter a numerical value." Size: @@ -739,9 +754,50 @@ Command: Less: Message: "&bSkyBlock &8| &cError&8: &eThe size of the Island must be less than 1000." Island: - Message: "&bSkyBlock &8| &cError&8: &eThat player is not a Member or owns an Island." + Owner: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a Member or owns an Island." + Data: + Message: "&bSkyBlock &8| &cError&8: &eThe island data for that players island does not exist." Set: Message: "&bSkyBlock &8| &aInfo&8: &eYou have set the player &d%player's &eIsland size to &d%size&e." + AddUpgrade: + Info: + Message: "&f&oAdd an upgrade to a players Island." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin addupgrade " + Island: + Owner: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a Member or owns an Island." + Data: + Message: "&bSkyBlock &8| &cError&8: &eThe island data for that players island does not exist." + Upgrade: + Exist: + Message: "&bSkyBlock &8| &cError&8: &eAn upgrade by that name does not exist." + Already: + Message: "&bSkyBlock &8| &cError&8: &eThat players island already has that upgrade." + Added: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have &a&lADDED the upgrade '&d%upgrade&e' to the player &d%player's &eIsland." + RemoveUpgrade: + Info: + Message: "&f&oRemove an upgrade to a players Island." + Permission: + Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command." + Invalid: + Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin removeupgrade " + Island: + Owner: + Message: "&bSkyBlock &8| &cError&8: &eThat player is not a Member or owns an Island." + Data: + Message: "&bSkyBlock &8| &cError&8: &eThe island data for that players island does not exist." + Upgrade: + Exist: + Message: "&bSkyBlock &8| &cError&8: &eAn upgrade by that name does not exist." + Missing: + Message: "&bSkyBlock &8| &cError&8: &eThat players island does not have that upgrade." + Removed: + Message: "&bSkyBlock &8| &aInfo&8: &eYou have &c&lREMOVED ðe upgrade '&d%upgrade&e' from the player &d%player's &eIsland." Delete: Info: Message: "&f&oDelete a players Island permanently." diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1c39d0bf..531aaf74 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: SkyBlock main: me.goodandevil.skyblock.SkyBlock -version: 43 +version: 44 api-version: 1.13 description: A unique SkyBlock plugin author: GoodAndEvil