From 7105ce1aee41a79b04f0ef79f9171f23e95dceb0 Mon Sep 17 00:00:00 2001 From: SlashRemix Date: Mon, 4 Oct 2021 00:49:44 +0300 Subject: [PATCH 1/5] Added ExtraValueCommand --- .../commands/ExtraValueCommand.java | 96 +++++++++++++++++++ .../iridiumskyblock/configs/Commands.java | 1 + .../iridiumskyblock/configs/Messages.java | 1 + .../iridiumskyblock/database/Island.java | 5 +- .../managers/tablemanagers/TableManager.java | 7 ++ 5 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/iridium/iridiumskyblock/commands/ExtraValueCommand.java diff --git a/src/main/java/com/iridium/iridiumskyblock/commands/ExtraValueCommand.java b/src/main/java/com/iridium/iridiumskyblock/commands/ExtraValueCommand.java new file mode 100644 index 000000000..18ccf9df4 --- /dev/null +++ b/src/main/java/com/iridium/iridiumskyblock/commands/ExtraValueCommand.java @@ -0,0 +1,96 @@ +package com.iridium.iridiumskyblock.commands; + +import com.iridium.iridiumcore.utils.StringUtils; +import com.iridium.iridiumskyblock.IridiumSkyblock; +import com.iridium.iridiumskyblock.database.Island; +import com.iridium.iridiumskyblock.database.User; +import com.iridium.iridiumskyblock.utils.PlayerUtils; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.time.Duration; +import java.util.*; + +public class ExtraValueCommand extends Command { + + /** + * The default constructor. + */ + public ExtraValueCommand() { + super(Collections.singletonList("extravalue"), "Set extra values of island", "%prefix% &7/is extravalue ", "iridiumskyblock.extravalue", false, Duration.ZERO); + } + + /** + * Executes the command for the specified {@link CommandSender} with the provided arguments. + * Not called when the command execution was invalid (no permission, no player or command disabled). + * Gives extra values to specific player's island + * + * @param sender The CommandSender which executes this command + * @param args The arguments used with this command. They contain the sub-command + */ + @Override + public boolean execute(CommandSender sender, String[] args) { + if (args.length < 4) { + sender.sendMessage(StringUtils.color(syntax.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix))); + return false; + } + + Player player = Bukkit.getPlayer(args[2]); + if (player != null) { + User user = IridiumSkyblock.getInstance().getUserManager().getUser(player); + Optional island = user.getIsland(); + if (island.isPresent()) { + try { + double amount = Double.parseDouble(args[3]); + switch (args[1].toUpperCase(Locale.ENGLISH)) { + case "ADD": + island.get().setExtraValue(island.get().getExtraValue() + amount); + break; + case "REMOVE": + island.get().setExtraValue(island.get().getExtraValue() - amount); + break; + case "SET": + island.get().setExtraValue(amount); + break; + default: + sender.sendMessage(StringUtils.color(syntax.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix))); + return false; + + } + sender.sendMessage(StringUtils.color(IridiumSkyblock.getInstance().getMessages().setExtraValue.replace("%player%", player.getName()).replace("%amount%", String.valueOf(island.get().getExtraValue())).replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix))); + return true; + } catch (NumberFormatException e) { + sender.sendMessage(StringUtils.color(IridiumSkyblock.getInstance().getMessages().notANumber.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix))); + } + } else { + sender.sendMessage(StringUtils.color(IridiumSkyblock.getInstance().getMessages().userNoIsland.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix))); + } + } else { + sender.sendMessage(StringUtils.color(IridiumSkyblock.getInstance().getMessages().notAPlayer.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix))); + } + return false; + } + + /** + * Handles tab-completion for this command. + * + * @param commandSender The CommandSender which tries to tab-complete + * @param command The command + * @param label The label of the command + * @param args The arguments already provided by the sender + * @return The list of tab completions for this command + */ + @Override + public List onTabComplete(CommandSender commandSender, org.bukkit.command.Command command, String label, String[] args) { + if (args.length == 3) { + return PlayerUtils.getOnlinePlayerNames(); + } + + if (args.length == 2) { + return Arrays.asList("add", "remove", "set"); + } + + return Collections.emptyList(); + } +} diff --git a/src/main/java/com/iridium/iridiumskyblock/configs/Commands.java b/src/main/java/com/iridium/iridiumskyblock/configs/Commands.java index ce4828fbf..cef44b605 100644 --- a/src/main/java/com/iridium/iridiumskyblock/configs/Commands.java +++ b/src/main/java/com/iridium/iridiumskyblock/configs/Commands.java @@ -29,6 +29,7 @@ public class Commands { public DepositCommand depositCommand = new DepositCommand(); public EditWarpCommand editWarpCommand = new EditWarpCommand(); public ExpelCommand expelCommand = new ExpelCommand(); + public ExtraValueCommand extraValueCommand = new ExtraValueCommand(); public FlyCommand flyCommand = new FlyCommand(); public HelpCommand helpCommand = new HelpCommand(); public HomeCommand homeCommand = new HomeCommand(); diff --git a/src/main/java/com/iridium/iridiumskyblock/configs/Messages.java b/src/main/java/com/iridium/iridiumskyblock/configs/Messages.java index 163a73245..27124210a 100644 --- a/src/main/java/com/iridium/iridiumskyblock/configs/Messages.java +++ b/src/main/java/com/iridium/iridiumskyblock/configs/Messages.java @@ -123,6 +123,7 @@ public class Messages { public String gaveBank = "%prefix% &7You gave %player% %amount% %item%."; public String setBank = "%prefix% &7You set %player%'s %amount% to %item%."; public String removedBank = "%prefix% &7You took %amount% %item%'s from %player%."; + public String setExtraValue = "%prefix% &7You have set %player%'s island extra value to %amount%."; public String invalidMissionType = "%prefix% &7That is not a valid mission type."; public String maxLevelReached = "%prefix% &7Maximum level reached."; public String cannotAfford = "%prefix% &7You cannot afford this."; diff --git a/src/main/java/com/iridium/iridiumskyblock/database/Island.java b/src/main/java/com/iridium/iridiumskyblock/database/Island.java index 87835bd80..16107a8cc 100644 --- a/src/main/java/com/iridium/iridiumskyblock/database/Island.java +++ b/src/main/java/com/iridium/iridiumskyblock/database/Island.java @@ -59,6 +59,9 @@ public final class Island { @DatabaseField(columnName = "experience") private int experience; + @DatabaseField(columnName = "extra_value") + private double extraValue; + @DatabaseField(columnName = "color", canBeNull = false) private @NotNull Color color; @@ -202,7 +205,7 @@ public LocalDateTime getCreateTime() { */ public double getValue() { return valueCache.getCache(() -> { - double value = 0; + double value = extraValue; List islandBlocks = IridiumSkyblock.getInstance().getDatabaseManager().getIslandBlocksTableManager().getEntries(this); List islandSpawners = IridiumSkyblock.getInstance().getDatabaseManager().getIslandSpawnersTableManager().getEntries(this); diff --git a/src/main/java/com/iridium/iridiumskyblock/managers/tablemanagers/TableManager.java b/src/main/java/com/iridium/iridiumskyblock/managers/tablemanagers/TableManager.java index 8eaf4b94d..1aa4089de 100644 --- a/src/main/java/com/iridium/iridiumskyblock/managers/tablemanagers/TableManager.java +++ b/src/main/java/com/iridium/iridiumskyblock/managers/tablemanagers/TableManager.java @@ -1,6 +1,7 @@ package com.iridium.iridiumskyblock.managers.tablemanagers; import com.iridium.iridiumcore.utils.SortedList; +import com.iridium.iridiumskyblock.database.Island; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.DaoManager; import com.j256.ormlite.support.ConnectionSource; @@ -30,6 +31,12 @@ public TableManager(ConnectionSource connectionSource, Class clazz, Comparato this.connectionSource = connectionSource; TableUtils.createTableIfNotExists(connectionSource, clazz); this.dao = DaoManager.createDao(connectionSource, clazz); + if (clazz.equals(Island.class)) { + try { + dao.executeRaw("ALTER TABLE `islands` ADD COLUMN `extra_value` DOUBLE PRECISION;"); + } catch (SQLException ignored) { //Ignored if the columns is already exist + } + } this.dao.setAutoCommit(getDatabaseConnection(), false); this.entries = new SortedList<>(comparator); this.entries.addAll(dao.queryForAll()); From f8b8ea70f44f3355f651f9c7b6dfd048f542964b Mon Sep 17 00:00:00 2001 From: Daniel Scherf Date: Sat, 13 Nov 2021 13:57:33 +0100 Subject: [PATCH 2/5] Implement database update properly --- gradle/wrapper/gradle-wrapper.properties | 2 +- .../iridium/iridiumskyblock/managers/DatabaseManager.java | 2 +- .../managers/tablemanagers/TableManager.java | 7 ------- src/main/resources/patch_3.sql | 1 + 4 files changed, 3 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/patch_3.sql diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a254..e750102e0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/iridium/iridiumskyblock/managers/DatabaseManager.java b/src/main/java/com/iridium/iridiumskyblock/managers/DatabaseManager.java index cee5fc8b5..f5d091cff 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 = 2; + private final int version = 3; private IslandTableManager islandTableManager; private UserTableManager userTableManager; private ForeignIslandTableManager islandBanTableManager; diff --git a/src/main/java/com/iridium/iridiumskyblock/managers/tablemanagers/TableManager.java b/src/main/java/com/iridium/iridiumskyblock/managers/tablemanagers/TableManager.java index 10dbb4c6a..0f702647e 100644 --- a/src/main/java/com/iridium/iridiumskyblock/managers/tablemanagers/TableManager.java +++ b/src/main/java/com/iridium/iridiumskyblock/managers/tablemanagers/TableManager.java @@ -1,7 +1,6 @@ package com.iridium.iridiumskyblock.managers.tablemanagers; import com.iridium.iridiumcore.utils.SortedList; -import com.iridium.iridiumskyblock.database.Island; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.DaoManager; import com.j256.ormlite.support.ConnectionSource; @@ -31,12 +30,6 @@ public TableManager(ConnectionSource connectionSource, Class clazz, Comparato this.connectionSource = connectionSource; TableUtils.createTableIfNotExists(connectionSource, clazz); this.dao = DaoManager.createDao(connectionSource, clazz); - if (clazz.equals(Island.class)) { - try { - dao.executeRaw("ALTER TABLE `islands` ADD COLUMN `extra_value` DOUBLE PRECISION;"); - } catch (SQLException ignored) { //Ignored if the columns is already exist - } - } this.dao.setAutoCommit(getDatabaseConnection(), false); this.entries = new SortedList<>(comparator); this.entries.addAll(dao.queryForAll()); diff --git a/src/main/resources/patch_3.sql b/src/main/resources/patch_3.sql new file mode 100644 index 000000000..22eabc4a8 --- /dev/null +++ b/src/main/resources/patch_3.sql @@ -0,0 +1 @@ +ALTER TABLE islands ADD COLUMN `extra_value` DOUBLE PRECISION; \ No newline at end of file From 95fccc9e2f61b7b7fae65a15b5b112ca9f3fb42b Mon Sep 17 00:00:00 2001 From: Daniel Scherf Date: Sat, 13 Nov 2021 13:58:26 +0100 Subject: [PATCH 3/5] Add newlines --- src/main/resources/patch_1.sql | 2 +- src/main/resources/patch_2_mysql.sql | 2 +- src/main/resources/patch_3.sql | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/patch_1.sql b/src/main/resources/patch_1.sql index 4a1c8e362..85c767f86 100644 --- a/src/main/resources/patch_1.sql +++ b/src/main/resources/patch_1.sql @@ -10,4 +10,4 @@ CREATE UNIQUE INDEX island_rewards_id_island_id_uindex ON island_rewards (id, is CREATE UNIQUE INDEX island_spawners_id_spawner_type_island_id_uindex ON island_spawners (id, spawner_type, island_id); CREATE UNIQUE INDEX island_trusted_id_user_island_id_uindex ON island_trusted (id, user, island_id); CREATE UNIQUE INDEX island_upgrade_id_upgrade_island_id_uindex ON island_upgrade (id, upgrade, island_id); -CREATE UNIQUE INDEX island_warps_id_name_island_id_uindex ON island_warps (id, name, island_id); \ No newline at end of file +CREATE UNIQUE INDEX island_warps_id_name_island_id_uindex ON island_warps (id, name, island_id); diff --git a/src/main/resources/patch_2_mysql.sql b/src/main/resources/patch_2_mysql.sql index ffa448878..7831463b9 100644 --- a/src/main/resources/patch_2_mysql.sql +++ b/src/main/resources/patch_2_mysql.sql @@ -1 +1 @@ -ALTER TABLE islands MODIFY name VARCHAR(512) NULL \ No newline at end of file +ALTER TABLE islands MODIFY name VARCHAR(512) NULL diff --git a/src/main/resources/patch_3.sql b/src/main/resources/patch_3.sql index 22eabc4a8..b786cd291 100644 --- a/src/main/resources/patch_3.sql +++ b/src/main/resources/patch_3.sql @@ -1 +1 @@ -ALTER TABLE islands ADD COLUMN `extra_value` DOUBLE PRECISION; \ No newline at end of file +ALTER TABLE islands ADD COLUMN `extra_value` DOUBLE PRECISION; From 0f65ef66cc9f17ace064a369ef517e2f4c32554f Mon Sep 17 00:00:00 2001 From: Daniel Scherf <35780068+dlsf@users.noreply.github.com> Date: Sat, 13 Nov 2021 14:00:16 +0100 Subject: [PATCH 4/5] Add newline --- .../com/iridium/iridiumskyblock/commands/ExtraValueCommand.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/iridium/iridiumskyblock/commands/ExtraValueCommand.java b/src/main/java/com/iridium/iridiumskyblock/commands/ExtraValueCommand.java index 18ccf9df4..25b7343b7 100644 --- a/src/main/java/com/iridium/iridiumskyblock/commands/ExtraValueCommand.java +++ b/src/main/java/com/iridium/iridiumskyblock/commands/ExtraValueCommand.java @@ -93,4 +93,5 @@ public List onTabComplete(CommandSender commandSender, org.bukkit.comman return Collections.emptyList(); } + } From e82b08364463def5912afc7303a677719382deae Mon Sep 17 00:00:00 2001 From: Daniel Scherf <35780068+dlsf@users.noreply.github.com> Date: Sat, 13 Nov 2021 21:05:42 +0000 Subject: [PATCH 5/5] Remove unnecessary characters --- src/main/resources/patch_3.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/patch_3.sql b/src/main/resources/patch_3.sql index b786cd291..d6796b29d 100644 --- a/src/main/resources/patch_3.sql +++ b/src/main/resources/patch_3.sql @@ -1 +1 @@ -ALTER TABLE islands ADD COLUMN `extra_value` DOUBLE PRECISION; +ALTER TABLE islands ADD COLUMN extra_value DOUBLE PRECISION;