From bacf6e881843b22fe2ee82b8ca2498738ac1ef78 Mon Sep 17 00:00:00 2001 From: Paul Reilly Date: Fri, 9 Jun 2023 21:11:36 -0500 Subject: [PATCH] Beans --- .../totalfreedom/datura/cmd/CageCommand.java | 4 +- .../datura/cmd/LockerCommand.java | 2 +- .../datura/perms/DefaultNodes.java | 48 ++--- .../datura/perms/FreedomGroup.java | 63 +++--- .../datura/perms/FreedomUser.java | 10 +- .../datura/perms/PermissionNode.java | 10 +- .../totalfreedom/datura/punishment/Cager.java | 10 +- .../datura/punishment/Locker.java | 6 +- .../me/totalfreedom/datura/sql/MySQL.java | 183 +++++++++--------- .../datura/user/ServerEconomyHolder.java | 30 ++- .../datura/user/SimpleUserData.java | 103 +++++----- .../java/me/totalfreedom/fossil/Fossil.java | 2 +- .../fossil/bouncypads/PadHolder.java | 36 ++-- .../fossil/bouncypads/PadType.java | 4 +- .../totalfreedom/fossil/cmd/CakeCommand.java | 4 +- .../economy/SimpleTransactionResult.java | 10 +- .../fossil/reactions/CopyCatReaction.java | 13 +- .../fossil/trail/types/FlameTrail.java | 2 +- .../me/totalfreedom/api/Serializable.java | 9 +- .../me/totalfreedom/base/CommonsBase.java | 4 +- .../me/totalfreedom/base/Registration.java | 6 +- .../totalfreedom/command/BukkitDelegate.java | 4 +- .../totalfreedom/command/CommandHandler.java | 4 +- .../totalfreedom/command/annotation/Base.java | 4 +- .../totalfreedom/command/annotation/Info.java | 5 +- .../command/annotation/Subcommand.java | 9 +- .../me/totalfreedom/data/ConfigRegistry.java | 5 +- .../me/totalfreedom/data/EventRegistry.java | 4 +- .../me/totalfreedom/data/GroupRegistry.java | 3 + .../data/ServiceTaskRegistry.java | 51 +++-- .../me/totalfreedom/data/UserRegistry.java | 5 +- .../totalfreedom/display/BossBarDisplay.java | 9 + .../me/totalfreedom/display/ClickAction.java | 4 +- .../me/totalfreedom/display/TitleDisplay.java | 28 ++- .../totalfreedom/economy/EconomicEntity.java | 3 +- .../economy/EconomicEntityData.java | 13 +- .../economy/MutableTransaction.java | 3 +- .../logging/InteractionFormatter.java | 5 +- .../totalfreedom/particle/NoteColorUtil.java | 50 +++++ .../me/totalfreedom/particle/NoteWrapper.java | 157 --------------- .../java/me/totalfreedom/particle/Trail.java | 19 +- .../me/totalfreedom/particle/TrailType.java | 1 - .../provider/ContextProvider.java | 46 ++--- .../totalfreedom/service/FreedomExecutor.java | 8 +- .../java/me/totalfreedom/service/Task.java | 40 ++-- .../service/TaskSubscription.java | 8 +- .../me/totalfreedom/shop/ReactionTask.java | 32 +-- .../me/totalfreedom/sql/SQLProperties.java | 20 +- .../me/totalfreedom/utils/DurationTools.java | 2 +- .../utils/InterpolationUtils.java | 20 +- .../me/totalfreedom/utils/ShapeUtils.java | 2 +- .../utils/container/{Tuple.java => Trio.java} | 4 +- .../{UnaryTuple.java => UnaryTrio.java} | 4 +- .../utils/kyori/FreedomAdventure.java | 2 +- .../utils/kyori/FreedomMiniMessage.java | 21 +- .../utils/kyori/KyoriConstants.java | 24 ++- .../utils/logging/FreedomLogger.java | 51 +++-- README.md | 4 +- 58 files changed, 565 insertions(+), 668 deletions(-) create mode 100644 Patchwork/src/main/java/me/totalfreedom/particle/NoteColorUtil.java delete mode 100644 Patchwork/src/main/java/me/totalfreedom/particle/NoteWrapper.java rename Patchwork/src/main/java/me/totalfreedom/utils/container/{Tuple.java => Trio.java} (81%) rename Patchwork/src/main/java/me/totalfreedom/utils/container/{UnaryTuple.java => UnaryTrio.java} (81%) diff --git a/Datura/src/main/java/me/totalfreedom/datura/cmd/CageCommand.java b/Datura/src/main/java/me/totalfreedom/datura/cmd/CageCommand.java index e8ad5c1..38b2050 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/cmd/CageCommand.java +++ b/Datura/src/main/java/me/totalfreedom/datura/cmd/CageCommand.java @@ -34,7 +34,7 @@ import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; @Info(name = "cage", description = "Cage a player.", - usage = "/cage [material]") + usage = "/cage [material]") @Permissive(perm = "datura.cage") public class CageCommand extends Commander { @@ -68,7 +68,7 @@ public class CageCommand extends Commander @Completion(args = {"[material]"}, index = 2) @Subcommand(permission = "datura.cage.custom", args = {Player.class, String.class, Material.class}) public void cagePlayer(final CommandSender sender, final Player player, final String string, - final Material material) + final Material material) { switch (string.toLowerCase()) { diff --git a/Datura/src/main/java/me/totalfreedom/datura/cmd/LockerCommand.java b/Datura/src/main/java/me/totalfreedom/datura/cmd/LockerCommand.java index f346e83..38f9f2c 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/cmd/LockerCommand.java +++ b/Datura/src/main/java/me/totalfreedom/datura/cmd/LockerCommand.java @@ -11,7 +11,7 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @Info(name = "locker", description = "Lock a player, preventing them from interacting with their game client.", - usage = "/locker ", aliases = {"lock", "lockup"}) + usage = "/locker ", aliases = {"lock", "lockup"}) @Permissive(perm = "datura.locker") public final class LockerCommand extends Commander { diff --git a/Datura/src/main/java/me/totalfreedom/datura/perms/DefaultNodes.java b/Datura/src/main/java/me/totalfreedom/datura/perms/DefaultNodes.java index 5119871..6357cdc 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/perms/DefaultNodes.java +++ b/Datura/src/main/java/me/totalfreedom/datura/perms/DefaultNodes.java @@ -6,33 +6,33 @@ import me.totalfreedom.security.NodeType; public class DefaultNodes { public static final Node OP = new PermissionNodeBuilder() - .key("freedom.master_key") - .value(true) - .type(NodeType.PERMISSION) - .negated(false) - .wildcard(true) - .build(); + .key("freedom.master_key") + .value(true) + .type(NodeType.PERMISSION) + .negated(false) + .wildcard(true) + .build(); public static final Node NON_OP = new PermissionNodeBuilder() - .key("freedom.default") - .value(true) - .type(NodeType.PERMISSION) - .negated(false) - .wildcard(false) - .build(); + .key("freedom.default") + .value(true) + .type(NodeType.PERMISSION) + .negated(false) + .wildcard(false) + .build(); public static final Node ALL = new PermissionNodeBuilder() - .key("*") - .value(true) - .type(NodeType.PERMISSION) - .negated(false) - .wildcard(true) - .build(); + .key("*") + .value(true) + .type(NodeType.PERMISSION) + .negated(false) + .wildcard(true) + .build(); public static final Node NONE = new PermissionNodeBuilder() - .key("freedom.none") - .value(true) - .type(NodeType.PERMISSION) - .negated(false) - .wildcard(false) - .build(); + .key("freedom.none") + .value(true) + .type(NodeType.PERMISSION) + .negated(false) + .wildcard(false) + .build(); private DefaultNodes() { diff --git a/Datura/src/main/java/me/totalfreedom/datura/perms/FreedomGroup.java b/Datura/src/main/java/me/totalfreedom/datura/perms/FreedomGroup.java index 6e9a6d6..a2ccc5d 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/perms/FreedomGroup.java +++ b/Datura/src/main/java/me/totalfreedom/datura/perms/FreedomGroup.java @@ -28,11 +28,11 @@ public class FreedomGroup implements Group private final PermissionAttachment attachment; public FreedomGroup(final Component name, - final Component prefix, - final Component abbreviation, - final int weight, - final boolean isDefault, - final boolean isHidden) + final Component prefix, + final Component abbreviation, + final int weight, + final boolean isDefault, + final boolean isHidden) { this.name = name; this.prefix = prefix; @@ -121,11 +121,11 @@ public class FreedomGroup implements Group public boolean isPermissionSet(@NotNull final Permission perm) { final Node node = permissions() - .stream() - .filter(n -> n.bukkit() - .equals(perm)) - .findFirst() - .orElse(null); + .stream() + .filter(n -> n.bukkit() + .equals(perm)) + .findFirst() + .orElse(null); return node != null && node.value(); } @@ -146,30 +146,29 @@ public class FreedomGroup implements Group public boolean hasPermission(@NotNull final Permission perm) { final Node node = permissions() - .stream() - .filter(n -> n.bukkit() - .equals(perm)) - .findFirst() - .orElse(null); + .stream() + .filter(n -> n.bukkit() + .equals(perm)) + .findFirst() + .orElse(null); return node != null && node.value(); } /** - * Adds a permission to the relative PermissionAttachment for this group. - * This method is not thread-safe and should not be called asynchronously. + * Adds a permission to the relative PermissionAttachment for this group. This method is not thread-safe and should + * not be called asynchronously. *

* This method is only here for compatibility with the Bukkit API. * - * @param plugin The plugin responsible for this attachment. May not be null - * or disabled. + * @param plugin The plugin responsible for this attachment. May not be null or disabled. * @param name Name of the permission to attach * @param value Value of the permission * @return This group's PermissionAttachment. */ @Override public @NotNull PermissionAttachment addAttachment(@NotNull final Plugin plugin, @NotNull final String name, - final boolean value) + final boolean value) { attachment.setPermission(name, value); return attachment; @@ -183,7 +182,7 @@ public class FreedomGroup implements Group @Override public @Nullable PermissionAttachment addAttachment(@NotNull final Plugin plugin, @NotNull final String name, - final boolean value, final int ticks) + final boolean value, final int ticks) { attachment.setPermission(name, value); return attachment; @@ -211,23 +210,23 @@ public class FreedomGroup implements Group public @NotNull Set getEffectivePermissions() { return permissions() - .stream() - .map(n -> new PermissionAttachmentInfo( - this, - n.key(), - attachment, - n.value())) - .collect(Collectors.toSet()); + .stream() + .map(n -> new PermissionAttachmentInfo( + this, + n.key(), + attachment, + n.value())) + .collect(Collectors.toSet()); } @Override public boolean isOp() { final Node node = permissions() - .stream() - .filter(n -> n.equals(DefaultNodes.OP)) - .findFirst() - .orElse(null); + .stream() + .filter(n -> n.equals(DefaultNodes.OP)) + .findFirst() + .orElse(null); return node != null && node.value(); } diff --git a/Datura/src/main/java/me/totalfreedom/datura/perms/FreedomUser.java b/Datura/src/main/java/me/totalfreedom/datura/perms/FreedomUser.java index 50a716b..3f1510f 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/perms/FreedomUser.java +++ b/Datura/src/main/java/me/totalfreedom/datura/perms/FreedomUser.java @@ -23,9 +23,9 @@ import java.util.Set; import java.util.UUID; /** - * The superinterface User extends PermissionHolder, - * which is an extension of {@link org.bukkit.permissions.Permissible}. - * This means that our permission data can be interchanged with other permission plugins. + * The superinterface User extends PermissionHolder, which is an extension of + * {@link org.bukkit.permissions.Permissible}. This means that our permission data can be interchanged with other + * permission plugins. */ public class FreedomUser implements User { @@ -139,7 +139,7 @@ public class FreedomUser implements User @Override public @NotNull PermissionAttachment addAttachment(@NotNull final Plugin plugin, @NotNull final String name, - final boolean value) + final boolean value) { final Player player = Bukkit.getPlayer(uuid); if (player != null) @@ -164,7 +164,7 @@ public class FreedomUser implements User @Override public @Nullable PermissionAttachment addAttachment(@NotNull final Plugin plugin, @NotNull final String name, - final boolean value, final int ticks) + final boolean value, final int ticks) { final Player player = Bukkit.getPlayer(uuid); if (player != null) diff --git a/Datura/src/main/java/me/totalfreedom/datura/perms/PermissionNode.java b/Datura/src/main/java/me/totalfreedom/datura/perms/PermissionNode.java index 2a88f40..48870b9 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/perms/PermissionNode.java +++ b/Datura/src/main/java/me/totalfreedom/datura/perms/PermissionNode.java @@ -16,9 +16,9 @@ record PermissionNode(String key, public Permission bukkit() { return new Permission(key(), - value() - ? PermissionDefault.TRUE - : PermissionDefault.FALSE); + value() + ? PermissionDefault.TRUE + : PermissionDefault.FALSE); } @Override @@ -26,8 +26,8 @@ record PermissionNode(String key, { return node.key() .equalsIgnoreCase(key()) - && node.value() == value() - && node.type() == type(); + && node.value() == value() + && node.type() == type(); } @Override diff --git a/Datura/src/main/java/me/totalfreedom/datura/punishment/Cager.java b/Datura/src/main/java/me/totalfreedom/datura/punishment/Cager.java index ffe12f8..52920aa 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/punishment/Cager.java +++ b/Datura/src/main/java/me/totalfreedom/datura/punishment/Cager.java @@ -51,10 +51,9 @@ public class Cager extends Service } /** - * This method generates a cube centered around the passed location, - * made of the provided material. This method returns the passed location object. - * We use the {@link ShapeUtils} class to generate the cube, which allows us to define - * custom shapes using {@link DoubleUnaryOperator}s. + * This method generates a cube centered around the passed location, made of the provided material. This method + * returns the passed location object. We use the {@link ShapeUtils} class to generate the cube, which allows us to + * define custom shapes using {@link DoubleUnaryOperator}s. * * @param location The location to center the cube around. * @param material The material to use for the cube. @@ -108,8 +107,7 @@ public class Cager extends Service } /** - * This method will check to make sure each caged player remains within their cage. - * We use + * This method will check to make sure each caged player remains within their cage. We use *

* {@link Location#distanceSquared(Location)} * {@link Math#pow(double, double)} *

diff --git a/Datura/src/main/java/me/totalfreedom/datura/punishment/Locker.java b/Datura/src/main/java/me/totalfreedom/datura/punishment/Locker.java index 4aa2eca..9e1e027 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/punishment/Locker.java +++ b/Datura/src/main/java/me/totalfreedom/datura/punishment/Locker.java @@ -81,9 +81,9 @@ public class Locker extends Service final SplittableRandom random = new SplittableRandom(); player.getEyeLocation() .add(new Vector( - random.nextDouble(-1.0, 1.0), - random.nextDouble(-1.0, 1.0), - random.nextDouble(-1.0, 1.0) + random.nextDouble(-1.0, 1.0), + random.nextDouble(-1.0, 1.0), + random.nextDouble(-1.0, 1.0) )); } } diff --git a/Datura/src/main/java/me/totalfreedom/datura/sql/MySQL.java b/Datura/src/main/java/me/totalfreedom/datura/sql/MySQL.java index 9097fb3..9446e08 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/sql/MySQL.java +++ b/Datura/src/main/java/me/totalfreedom/datura/sql/MySQL.java @@ -29,8 +29,7 @@ public class MySQL implements SQL } /** - * Adds credentials to the MySQL URL. - * If the URL already contains credentials, they will be overwritten. + * Adds credentials to the MySQL URL. If the URL already contains credentials, they will be overwritten. * * @param username The username to add * @param password The password to add @@ -61,25 +60,24 @@ public class MySQL implements SQL public CompletableFuture prepareStatement(final String query, final Object... args) { return getConnection() - .thenApplyAsync(connection -> - { - try - { - final PreparedStatement statement = connection.prepareStatement(query); - for (int i = 0; i < args.length; i++) - { - statement.setObject(i + 1, args[i]); - } - return statement; - } - catch (SQLException ex) - { - throw new CompletionException("Failed to prepare statement: " - + query + "\n", ex); - } - }, CommonsBase.getInstance() - .getExecutor() - .getAsync()); + .thenApplyAsync(connection -> + { + try + { + final PreparedStatement statement = connection.prepareStatement(query); + for (int i = 0; i < args.length; i++) + { + statement.setObject(i + 1, args[i]); + } + return statement; + } catch (SQLException ex) + { + throw new CompletionException("Failed to prepare statement: " + + query + "\n", ex); + } + }, CommonsBase.getInstance() + .getExecutor() + .getAsync()); } private CompletableFuture getConnection() @@ -89,11 +87,10 @@ public class MySQL implements SQL try { return DriverManager.getConnection(url.toString()); - } - catch (SQLException ex) + } catch (SQLException ex) { throw new CompletionException("Failed to connect to the database: " - + url.toString() + "\n", ex); + + url.toString() + "\n", ex); } }, CommonsBase.getInstance() .getExecutor() @@ -104,61 +101,58 @@ public class MySQL implements SQL public CompletableFuture executeQuery(final String query, final Object... args) { return prepareStatement(query, args) - .thenApplyAsync(statement -> - { - try - { - return statement.executeQuery(); - } - catch (SQLException ex) - { - throw new CompletionException( - "Failed to retrieve a result set from query: " - + query + "\n", ex); - } - }, CommonsBase.getInstance() - .getExecutor() - .getAsync()); + .thenApplyAsync(statement -> + { + try + { + return statement.executeQuery(); + } catch (SQLException ex) + { + throw new CompletionException( + "Failed to retrieve a result set from query: " + + query + "\n", ex); + } + }, CommonsBase.getInstance() + .getExecutor() + .getAsync()); } @Override public CompletableFuture executeUpdate(final String query, final Object... args) { return prepareStatement(query, args) - .thenApplyAsync(statement -> - { - try - { - return statement.executeUpdate(); - } - catch (SQLException ex) - { - throw new CompletionException("Failed to execute update: " - + query + "\n", ex); - } - }, CommonsBase.getInstance() - .getExecutor() - .getAsync()); + .thenApplyAsync(statement -> + { + try + { + return statement.executeUpdate(); + } catch (SQLException ex) + { + throw new CompletionException("Failed to execute update: " + + query + "\n", ex); + } + }, CommonsBase.getInstance() + .getExecutor() + .getAsync()); } @Override public CompletableFuture execute(final String query, final Object... args) { return prepareStatement(query, args) - .thenApplyAsync(statement -> - { - try - { - return statement.execute(); - } - catch (SQLException ex) - { - throw new CompletionException("Failed to execute statement: " - + query + "\n", ex); - } - }, CommonsBase.getInstance() - .getExecutor() - .getAsync()); + .thenApplyAsync(statement -> + { + try + { + return statement.execute(); + } catch (SQLException ex) + { + throw new CompletionException("Failed to execute statement: " + + query + "\n", ex); + } + }, CommonsBase.getInstance() + .getExecutor() + .getAsync()); } @Override @@ -181,46 +175,45 @@ public class MySQL implements SQL } public CompletableFuture getColumn(final String table, final String column, final String key, - final Identity identity, final Class type) + final Identity identity, final Class type) { return executeQuery("SELECT ? FROM ? WHERE ? = ?", column, table, key, identity.getId()) - .thenApplyAsync(resultSet -> - { - try - { - if (resultSet.next()) - { - return resultSet.getObject(column, type); - } - } - catch (SQLException ex) - { - throw new CompletionException( - "Failed to retrieve column: " + column + " from table: " + table + " " + - "where primary key: " + key + " is equal to: " + identity.getId() + "\n", - ex); - } - return null; - }, CommonsBase.getInstance() - .getExecutor() - .getAsync()); + .thenApplyAsync(resultSet -> + { + try + { + if (resultSet.next()) + { + return resultSet.getObject(column, type); + } + } catch (SQLException ex) + { + throw new CompletionException( + "Failed to retrieve column: " + column + " from table: " + table + " " + + "where primary key: " + key + " is equal to: " + identity.getId() + "\n", + ex); + } + return null; + }, CommonsBase.getInstance() + .getExecutor() + .getAsync()); } public CompletableFuture updateColumn(final String table, final String column, final Object value, - final String key, final Identity identity) + final String key, final Identity identity) { return executeUpdate("UPDATE ? SET ? = ? WHERE ? = ?", table, column, value, key, identity.getId()) - .thenApplyAsync(result -> result > 0, CommonsBase.getInstance() - .getExecutor() - .getAsync()); + .thenApplyAsync(result -> result > 0, CommonsBase.getInstance() + .getExecutor() + .getAsync()); } public CompletableFuture deleteRow(final String table, final String key, final Identity identity) { return executeUpdate("DELETE FROM ? WHERE ? = ?", table, key, identity.getId()) - .thenApplyAsync(result -> result > 0, CommonsBase.getInstance() - .getExecutor() - .getAsync()); + .thenApplyAsync(result -> result > 0, CommonsBase.getInstance() + .getExecutor() + .getAsync()); } public CompletableFuture insertRow(final String table, final Object... values) diff --git a/Datura/src/main/java/me/totalfreedom/datura/user/ServerEconomyHolder.java b/Datura/src/main/java/me/totalfreedom/datura/user/ServerEconomyHolder.java index e9771f3..768ac91 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/user/ServerEconomyHolder.java +++ b/Datura/src/main/java/me/totalfreedom/datura/user/ServerEconomyHolder.java @@ -7,18 +7,16 @@ import me.totalfreedom.economy.EconomicEntityData; * Represents the server's economy holder. *
*
- * This is effectively a Bank object which is meant to represent the server itself, - * which can store a balance and perform transactions with other EconomicEntity objects. + * This is effectively a Bank object which is meant to represent the server itself, which can store a balance and + * perform transactions with other EconomicEntity objects. *
*
- * The server is initially given a maximum balance of {@link Long#MAX_VALUE}, though this can be changed - * using the constructor {@link #ServerEconomyHolder(String, long)}. The value that this - * bank object holds is persistent, which means that the total economic resources available - * are of limited supply. + * The server is initially given a maximum balance of {@link Long#MAX_VALUE}, though this can be changed using the + * constructor {@link #ServerEconomyHolder(String, long)}. The value that this bank object holds is persistent, which + * means that the total economic resources available are of limited supply. *
*
- * Please be aware, if the server's economy falls below 0, - * it will have drastic consequences. + * Please be aware, if the server's economy falls below 0, it will have drastic consequences. */ public class ServerEconomyHolder implements EconomicEntity, EconomicEntityData { @@ -49,9 +47,9 @@ public class ServerEconomyHolder implements EconomicEntity, EconomicEntityData } /** - * This method will return this object, as it is both the EconomicEntity and the EconomicEntityData. - * This is due to the fact that the server should only ever have one singular concrete representation - * of it's economic entity and the respective data. + * This method will return this object, as it is both the EconomicEntity and the EconomicEntityData. This is due to + * the fact that the server should only ever have one singular concrete representation of it's economic entity and + * the respective data. * * @return this object. */ @@ -71,8 +69,7 @@ public class ServerEconomyHolder implements EconomicEntity, EconomicEntityData } /** - * This method will always return false, as the server should not ever be - * prevented from performing transactions. + * This method will always return false, as the server should not ever be prevented from performing transactions. * * @return false */ @@ -103,8 +100,7 @@ public class ServerEconomyHolder implements EconomicEntity, EconomicEntityData } /** - * Adds the specified amount to the server's balance. - * This method mutates the balance and returns the new balance. + * Adds the specified amount to the server's balance. This method mutates the balance and returns the new balance. * * @param amount The amount to add. * @return The new balance. @@ -117,8 +113,8 @@ public class ServerEconomyHolder implements EconomicEntity, EconomicEntityData } /** - * Removes the specified amount from the server's balance. - * This method mutates the balance and returns the new balance. + * Removes the specified amount from the server's balance. This method mutates the balance and returns the new + * balance. * * @param amount The amount to remove. * @return The new balance. diff --git a/Datura/src/main/java/me/totalfreedom/datura/user/SimpleUserData.java b/Datura/src/main/java/me/totalfreedom/datura/user/SimpleUserData.java index 1b6f9ef..014876c 100644 --- a/Datura/src/main/java/me/totalfreedom/datura/user/SimpleUserData.java +++ b/Datura/src/main/java/me/totalfreedom/datura/user/SimpleUserData.java @@ -42,14 +42,14 @@ public class SimpleUserData implements UserData } private SimpleUserData( - final UUID uuid, - final String username, - final User user, - final Group group, - final long playtime, - final boolean canInteract, - final long balance, - final boolean transactionsFrozen) + final UUID uuid, + final String username, + final User user, + final Group group, + final long playtime, + final boolean canInteract, + final long balance, + final boolean transactionsFrozen) { this.uuid = uuid; this.username = username; @@ -66,57 +66,56 @@ public class SimpleUserData implements UserData return sql.executeQuery("SELECT * FROM users WHERE UUID = ?", uuid) .thenApplyAsync(result -> { - try - { - if (result.next()) - { - final String g = result.getString("group"); + try + { + if (result.next()) + { + final String g = result.getString("group"); - final UUID u = UUID.fromString(uuid); - final String username = result.getString("username"); + final UUID u = UUID.fromString(uuid); + final String username = result.getString("username"); - final Player player = Bukkit.getPlayer(u); + final Player player = Bukkit.getPlayer(u); - if (player == null) - throw new IllegalStateException("Player should be online but they are not!"); + if (player == null) + throw new IllegalStateException("Player should be online but they are not!"); - final User user = new FreedomUser(player); - final Group group = CommonsBase.getInstance() - .getRegistrations() - .getGroupRegistry() - .getGroup(g); + final User user = new FreedomUser(player); + final Group group = CommonsBase.getInstance() + .getRegistrations() + .getGroupRegistry() + .getGroup(g); - final long playtime = result.getLong("playtime"); - final boolean canInteract = result.getBoolean("canInteract"); - final long balance = result.getLong("balance"); - final boolean transactionsFrozen = result.getBoolean("transactionsFrozen"); - - return new SimpleUserData(u, username, user, group, playtime, - canInteract, balance, transactionsFrozen); - } - } - catch (SQLException ex) - { - final String sb = "An error occurred while trying to retrieve user data for" + - " UUID " + - uuid + - " from the database." + - "\nCaused by: " + - ExceptionUtils.getRootCauseMessage(ex) + - "\nStack trace: " + - ExceptionUtils.getStackTrace(ex); + final long playtime = result.getLong("playtime"); + final boolean canInteract = result.getBoolean("canInteract"); + final long balance = result.getLong("balance"); + final boolean transactionsFrozen = result.getBoolean("transactionsFrozen"); - FreedomLogger.getLogger("Datura") - .error(sb); - } + return new SimpleUserData(u, username, user, group, playtime, + canInteract, balance, transactionsFrozen); + } + } catch (SQLException ex) + { + final String sb = "An error occurred while trying to retrieve user data for" + + " UUID " + + uuid + + " from the database." + + "\nCaused by: " + + ExceptionUtils.getRootCauseMessage(ex) + + "\nStack trace: " + + ExceptionUtils.getStackTrace(ex); - final Player player = Bukkit.getPlayer(UUID.fromString(uuid)); - if (player == null) throw new IllegalStateException("Player should be online but they are not!"); - - return new SimpleUserData(player); - }, CommonsBase.getInstance() - .getExecutor() - .getAsync()) + FreedomLogger.getLogger("Datura") + .error(sb); + } + + final Player player = Bukkit.getPlayer(UUID.fromString(uuid)); + if (player == null) throw new IllegalStateException("Player should be online but they are not!"); + + return new SimpleUserData(player); + }, CommonsBase.getInstance() + .getExecutor() + .getAsync()) .join(); } diff --git a/Fossil/src/main/java/me/totalfreedom/fossil/Fossil.java b/Fossil/src/main/java/me/totalfreedom/fossil/Fossil.java index 8d789f8..18dc7fb 100644 --- a/Fossil/src/main/java/me/totalfreedom/fossil/Fossil.java +++ b/Fossil/src/main/java/me/totalfreedom/fossil/Fossil.java @@ -20,6 +20,6 @@ public class Fossil extends JavaPlugin registration.getServiceTaskRegistry() .registerService( - SubscriptionProvider.syncService(this, trailer)); + SubscriptionProvider.syncService(this, trailer)); } } diff --git a/Fossil/src/main/java/me/totalfreedom/fossil/bouncypads/PadHolder.java b/Fossil/src/main/java/me/totalfreedom/fossil/bouncypads/PadHolder.java index 829739d..cd4842e 100644 --- a/Fossil/src/main/java/me/totalfreedom/fossil/bouncypads/PadHolder.java +++ b/Fossil/src/main/java/me/totalfreedom/fossil/bouncypads/PadHolder.java @@ -32,17 +32,18 @@ public class PadHolder implements Listener */ public PadHolder() { - Bukkit.getPluginManager().registerEvents(this, CommonsBase - .getInstance() - .getRegistrations() - .getModuleRegistry() - .getProvider(Fossil.class) - .getModule()); + Bukkit.getPluginManager() + .registerEvents(this, CommonsBase + .getInstance() + .getRegistrations() + .getModuleRegistry() + .getProvider(Fossil.class) + .getModule()); } /** - * Adds a pad for the given player. If the player already has a pad stored in the map, - * it will be overwritten with the new pad. + * Adds a pad for the given player. If the player already has a pad stored in the map, it will be overwritten with + * the new pad. * * @param player The player to add the pad for. * @param pad The pad to add. @@ -63,8 +64,8 @@ public class PadHolder implements Listener } /** - * Gets the pad for the given player, if the player has one. - * If the player has no active pad, this will return null. + * Gets the pad for the given player, if the player has one. If the player has no active pad, this will return + * null. * * @param player The player to get the pad for. * @return The pad for the given player. @@ -98,8 +99,8 @@ public class PadHolder implements Listener /** * Handles player pad interaction. This will check the relative block for each acceptible direction, and pass the - * resulting block face (if any) to the bounce pad. See {@link BouncyPad#bouncePad(Player, org.bukkit.block.BlockFace)} - * for how the resulting block face is processed. + * resulting block face (if any) to the bounce pad. See + * {@link BouncyPad#bouncePad(Player, org.bukkit.block.BlockFace)} for how the resulting block face is processed. * * @param event The event which gets called when a player moves. */ @@ -122,10 +123,10 @@ public class PadHolder implements Listener final Block yNeg1 = getRelative(location, 0, -1, 0); Stream.of(xNeg1, xPos1, zNeg1, zPos1, yNeg1) - .filter(this::isWool) - .map(block -> block.getFace(location.getBlock())) - .findFirst() - .ifPresent(face -> pad.bouncePad(player, face)); + .filter(this::isWool) + .map(block -> block.getFace(location.getBlock())) + .findFirst() + .ifPresent(face -> pad.bouncePad(player, face)); } /** @@ -139,7 +140,8 @@ public class PadHolder implements Listener */ private Block getRelative(final Location location, final int x, final int y, final int z) { - return location.getBlock().getRelative(x, y, z); + return location.getBlock() + .getRelative(x, y, z); } /** diff --git a/Fossil/src/main/java/me/totalfreedom/fossil/bouncypads/PadType.java b/Fossil/src/main/java/me/totalfreedom/fossil/bouncypads/PadType.java index 1cc0f66..2c58591 100644 --- a/Fossil/src/main/java/me/totalfreedom/fossil/bouncypads/PadType.java +++ b/Fossil/src/main/java/me/totalfreedom/fossil/bouncypads/PadType.java @@ -12,8 +12,8 @@ public enum PadType */ NORMAL, /** - * A pad which will bounce the player on {@link BlockFace#NORTH}, {@link BlockFace#SOUTH}, {@link BlockFace#EAST} - * or {@link BlockFace#WEST}. + * A pad which will bounce the player on {@link BlockFace#NORTH}, {@link BlockFace#SOUTH}, {@link BlockFace#EAST} or + * {@link BlockFace#WEST}. */ SIDES, /** diff --git a/Fossil/src/main/java/me/totalfreedom/fossil/cmd/CakeCommand.java b/Fossil/src/main/java/me/totalfreedom/fossil/cmd/CakeCommand.java index 304cc4c..7a5c7b0 100644 --- a/Fossil/src/main/java/me/totalfreedom/fossil/cmd/CakeCommand.java +++ b/Fossil/src/main/java/me/totalfreedom/fossil/cmd/CakeCommand.java @@ -47,8 +47,8 @@ public class CakeCommand extends Commander public void broadcastCake(final CommandSender sender) { Bukkit.broadcast(FreedomMiniMessage.deserialize(true, - "But there's no sense crying over every mistake. You just keep on trying till you run out of " + - "cake.")); + "But there's no sense crying over every mistake. You just keep on trying till you run out of " + + "cake.")); final ItemStack stack = new ItemStack(Material.CAKE, 1); final ItemMeta meta = stack.getItemMeta(); diff --git a/Fossil/src/main/java/me/totalfreedom/fossil/economy/SimpleTransactionResult.java b/Fossil/src/main/java/me/totalfreedom/fossil/economy/SimpleTransactionResult.java index eeb629c..e0ee389 100644 --- a/Fossil/src/main/java/me/totalfreedom/fossil/economy/SimpleTransactionResult.java +++ b/Fossil/src/main/java/me/totalfreedom/fossil/economy/SimpleTransactionResult.java @@ -8,11 +8,11 @@ public class SimpleTransactionResult implements TransactionResult { public static final TransactionResult SUCCESSFUL = new SimpleTransactionResult("Successful transaction.", true); public static final TransactionResult UNAUTHORIZED = new SimpleTransactionResult("Unauthorized transaction.", - false); + false); public static final TransactionResult AMOUNT_TOO_SMALL = new SimpleTransactionResult( - "Transaction balance too small.", false); + "Transaction balance too small.", false); public static final TransactionResult INSUFFICIENT_FUNDS = new SimpleTransactionResult( - "The source has an insufficient balance to carry out this transaction.", false); + "The source has an insufficient balance to carry out this transaction.", false); private final String message; private final Component component; private final boolean successful; @@ -20,8 +20,8 @@ public class SimpleTransactionResult implements TransactionResult public SimpleTransactionResult(final String message, final boolean successful) { this(message, Component.text(message, successful - ? NamedTextColor.GREEN - : NamedTextColor.RED), successful); + ? NamedTextColor.GREEN + : NamedTextColor.RED), successful); } public SimpleTransactionResult(final String message, final Component component, final boolean successful) diff --git a/Fossil/src/main/java/me/totalfreedom/fossil/reactions/CopyCatReaction.java b/Fossil/src/main/java/me/totalfreedom/fossil/reactions/CopyCatReaction.java index 983e5b4..52460e8 100644 --- a/Fossil/src/main/java/me/totalfreedom/fossil/reactions/CopyCatReaction.java +++ b/Fossil/src/main/java/me/totalfreedom/fossil/reactions/CopyCatReaction.java @@ -38,18 +38,21 @@ public final class CopyCatReaction extends Reaction @Override public void display(final Audience audience) { - final BossBar bossBar = BossBarDisplay.builder().setName(getRandomCharacterString()) - .setProgress(0.0F) - .build(); + final BossBar bossBar = BossBarDisplay.builder() + .setName(getRandomCharacterString()) + .setProgress(0.0F) + .build(); } - public String getRandomCharacterString() { + public String getRandomCharacterString() + { final SplittableRandom random = new SplittableRandom(); final StringBuilder sb = new StringBuilder(10); final String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - for (int i = 0; i < 10; i++) { + for (int i = 0; i < 10; i++) + { sb.append(chars.charAt(random.nextInt(chars.length()))); } diff --git a/Fossil/src/main/java/me/totalfreedom/fossil/trail/types/FlameTrail.java b/Fossil/src/main/java/me/totalfreedom/fossil/trail/types/FlameTrail.java index d8e7ba9..2fe823e 100644 --- a/Fossil/src/main/java/me/totalfreedom/fossil/trail/types/FlameTrail.java +++ b/Fossil/src/main/java/me/totalfreedom/fossil/trail/types/FlameTrail.java @@ -24,6 +24,6 @@ public final class FlameTrail extends SimpleTrail final Vector direction = location.getDirection(); location.getWorld() .spawnParticle(getTrailType().getType(), location, 0, direction.getX(), direction.getY(), - direction.getZ(), 0.1); + direction.getZ(), 0.1); } } diff --git a/Patchwork/src/main/java/me/totalfreedom/api/Serializable.java b/Patchwork/src/main/java/me/totalfreedom/api/Serializable.java index 41ab562..3dc62a6 100644 --- a/Patchwork/src/main/java/me/totalfreedom/api/Serializable.java +++ b/Patchwork/src/main/java/me/totalfreedom/api/Serializable.java @@ -1,17 +1,15 @@ package me.totalfreedom.api; /** - * This interface represents a Serializable object. - * Objects which require custom serialization and cannot simply override or call - * the default {@link Object#toString()} method should implement this interface. + * This interface represents a Serializable object. Objects which require custom serialization and cannot simply + * override or call the default {@link Object#toString()} method should implement this interface. * * @param The type of object to serialize */ public interface Serializable { /** - * Serialize an object to a string. - * Ideally, this should serialize to an SQL query for easy data transfer. + * Serialize an object to a string. Ideally, this should serialize to an SQL query for easy data transfer. * * @param object The object to serialize * @return The serialized object @@ -20,6 +18,7 @@ public interface Serializable /** * Deserialize an object from a Serialized string.. + * * @param serializedObject The serialized object * @return The deserialized object */ diff --git a/Patchwork/src/main/java/me/totalfreedom/base/CommonsBase.java b/Patchwork/src/main/java/me/totalfreedom/base/CommonsBase.java index 911086e..69bade0 100644 --- a/Patchwork/src/main/java/me/totalfreedom/base/CommonsBase.java +++ b/Patchwork/src/main/java/me/totalfreedom/base/CommonsBase.java @@ -25,8 +25,8 @@ public class CommonsBase extends JavaPlugin private final FreedomExecutor executor = new FreedomExecutor(); /** - * Provides this plugin instance through a safe static method. - * This is effectively the same thing as using {@link JavaPlugin#getPlugin(Class)} + * Provides this plugin instance through a safe static method. This is effectively the same thing as using + * {@link JavaPlugin#getPlugin(Class)} * * @return the plugin instance */ diff --git a/Patchwork/src/main/java/me/totalfreedom/base/Registration.java b/Patchwork/src/main/java/me/totalfreedom/base/Registration.java index 1f5cf6c..e697fe9 100644 --- a/Patchwork/src/main/java/me/totalfreedom/base/Registration.java +++ b/Patchwork/src/main/java/me/totalfreedom/base/Registration.java @@ -10,9 +10,9 @@ import me.totalfreedom.data.UserRegistry; /** * This class is a holder for each registry in the data package. *
- * Registries such as {@link ModuleRegistry} and {@link ServiceTaskRegistry} - * can be found as final objects in this class. These registries should only ever be accessed through - * the single Registration object in CommonsBase using {@link CommonsBase#getRegistrations()} + * Registries such as {@link ModuleRegistry} and {@link ServiceTaskRegistry} can be found as final objects in this + * class. These registries should only ever be accessed through the single Registration object in CommonsBase using + * {@link CommonsBase#getRegistrations()} */ public class Registration { diff --git a/Patchwork/src/main/java/me/totalfreedom/command/BukkitDelegate.java b/Patchwork/src/main/java/me/totalfreedom/command/BukkitDelegate.java index 99c7464..0a740d6 100644 --- a/Patchwork/src/main/java/me/totalfreedom/command/BukkitDelegate.java +++ b/Patchwork/src/main/java/me/totalfreedom/command/BukkitDelegate.java @@ -25,8 +25,8 @@ import java.util.Set; /** * This class is acts as a delegate between our custom command implementation and the Bukkit API. *
- * This class is not meant to be used directly, and is only public to allow for the Bukkit API to access it. - * As a result, this file will remain undocumented. + * This class is not meant to be used directly, and is only public to allow for the Bukkit API to access it. As a + * result, this file will remain undocumented. * *
* This class is not thread-safe. diff --git a/Patchwork/src/main/java/me/totalfreedom/command/CommandHandler.java b/Patchwork/src/main/java/me/totalfreedom/command/CommandHandler.java index 34c754d..cfcdd90 100644 --- a/Patchwork/src/main/java/me/totalfreedom/command/CommandHandler.java +++ b/Patchwork/src/main/java/me/totalfreedom/command/CommandHandler.java @@ -5,8 +5,8 @@ import org.bukkit.command.CommandMap; import org.bukkit.plugin.java.JavaPlugin; /** - * Handles the registration of commands. - * The plugin which initializes this class should be the plugin that is registering the commands. + * Handles the registration of commands. The plugin which initializes this class should be the plugin that is + * registering the commands. */ public class CommandHandler { diff --git a/Patchwork/src/main/java/me/totalfreedom/command/annotation/Base.java b/Patchwork/src/main/java/me/totalfreedom/command/annotation/Base.java index cd76252..c230186 100644 --- a/Patchwork/src/main/java/me/totalfreedom/command/annotation/Base.java +++ b/Patchwork/src/main/java/me/totalfreedom/command/annotation/Base.java @@ -4,8 +4,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** - * This annotation is used to mark a method as the command's default method. - * This is the method that will be run to execute the command when a user inputs /{command} + * This annotation is used to mark a method as the command's default method. This is the method that will be run to + * execute the command when a user inputs /{command} */ @Retention(RetentionPolicy.RUNTIME) public @interface Base diff --git a/Patchwork/src/main/java/me/totalfreedom/command/annotation/Info.java b/Patchwork/src/main/java/me/totalfreedom/command/annotation/Info.java index fd90d82..5ab0bbc 100644 --- a/Patchwork/src/main/java/me/totalfreedom/command/annotation/Info.java +++ b/Patchwork/src/main/java/me/totalfreedom/command/annotation/Info.java @@ -11,9 +11,8 @@ import java.lang.annotation.RetentionPolicy; public @interface Info { /** - * Technically, this is the only required value you must supply yourself. - * However, it is HIGHLY recommended you supply the other optional values as well, - * for better customization of your command. + * Technically, this is the only required value you must supply yourself. However, it is HIGHLY recommended you + * supply the other optional values as well, for better customization of your command. * * @return The command's name. */ diff --git a/Patchwork/src/main/java/me/totalfreedom/command/annotation/Subcommand.java b/Patchwork/src/main/java/me/totalfreedom/command/annotation/Subcommand.java index 9a3b8c7..b203761 100644 --- a/Patchwork/src/main/java/me/totalfreedom/command/annotation/Subcommand.java +++ b/Patchwork/src/main/java/me/totalfreedom/command/annotation/Subcommand.java @@ -9,11 +9,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * This annotation should be used to mark methods as subcommand methods. - * Subcommand methods can have custom arguments (current supported arguments can be found in the {@link ContextProvider}), - * and can also have a custom permission. These subcommands can also be annotated with {@link Completions} to provide - * tab completions for the subcommand. The subcommand method must be public, and must be in a class that is registered - * with the {@link CommandHandler}. + * This annotation should be used to mark methods as subcommand methods. Subcommand methods can have custom arguments + * (current supported arguments can be found in the {@link ContextProvider}), and can also have a custom permission. + * These subcommands can also be annotated with {@link Completions} to provide tab completions for the subcommand. The + * subcommand method must be public, and must be in a class that is registered with the {@link CommandHandler}. *
* Tab completions with the {@link Completions} annotation are only supported for subcommands. When registering * completions, you only need to define the completion arguments a single time. If there are other methods which diff --git a/Patchwork/src/main/java/me/totalfreedom/data/ConfigRegistry.java b/Patchwork/src/main/java/me/totalfreedom/data/ConfigRegistry.java index 8f6b9e9..7db90f2 100644 --- a/Patchwork/src/main/java/me/totalfreedom/data/ConfigRegistry.java +++ b/Patchwork/src/main/java/me/totalfreedom/data/ConfigRegistry.java @@ -17,7 +17,8 @@ public class ConfigRegistry /** * Registers a configuration. - * @param name The name of the configuration. + * + * @param name The name of the configuration. * @param configuration The configuration. */ public void register(final String name, final Configuration configuration) @@ -27,6 +28,7 @@ public class ConfigRegistry /** * Unregisters a configuration. + * * @param name The name of the configuration. */ public void unregister(final String name) @@ -36,6 +38,7 @@ public class ConfigRegistry /** * Gets a configuration. + * * @param name The name of the configuration. * @return The configuration. */ diff --git a/Patchwork/src/main/java/me/totalfreedom/data/EventRegistry.java b/Patchwork/src/main/java/me/totalfreedom/data/EventRegistry.java index 99f7271..c5fb292 100644 --- a/Patchwork/src/main/java/me/totalfreedom/data/EventRegistry.java +++ b/Patchwork/src/main/java/me/totalfreedom/data/EventRegistry.java @@ -26,6 +26,7 @@ public class EventRegistry /** * Registers an event. + * * @param event The event to register. */ public void register(final FEvent event) @@ -35,6 +36,7 @@ public class EventRegistry /** * Unregisters an event. + * * @param event The event to unregister. */ public void unregister(final FEvent event) @@ -46,8 +48,8 @@ public class EventRegistry * Gets an {@link EventProvider} for the specified event class which contains the actual {@link FEvent} instance. * * @param clazz The event class. + * @param The event type. * @return The event provider. - * @param The event type. */ public EventProvider getEvent(final Class clazz) { diff --git a/Patchwork/src/main/java/me/totalfreedom/data/GroupRegistry.java b/Patchwork/src/main/java/me/totalfreedom/data/GroupRegistry.java index 96ae921..aec9b76 100644 --- a/Patchwork/src/main/java/me/totalfreedom/data/GroupRegistry.java +++ b/Patchwork/src/main/java/me/totalfreedom/data/GroupRegistry.java @@ -26,6 +26,7 @@ public class GroupRegistry /** * Registers a group. + * * @param group The group to register. * @return {@code true} if the group was registered, {@code false} otherwise. */ @@ -36,6 +37,7 @@ public class GroupRegistry /** * Unregisters a group. + * * @param group The group to unregister. * @return {@code true} if the group was unregistered, {@code false} otherwise. */ @@ -46,6 +48,7 @@ public class GroupRegistry /** * Gets a group by name. + * * @param name The name of the group. * @return The group, or {@code null} if no group was found. */ diff --git a/Patchwork/src/main/java/me/totalfreedom/data/ServiceTaskRegistry.java b/Patchwork/src/main/java/me/totalfreedom/data/ServiceTaskRegistry.java index 4a1b191..2cf3e8d 100644 --- a/Patchwork/src/main/java/me/totalfreedom/data/ServiceTaskRegistry.java +++ b/Patchwork/src/main/java/me/totalfreedom/data/ServiceTaskRegistry.java @@ -21,9 +21,8 @@ import java.util.List; *
*
* Tasks are runnable tasks which execute at the provided times in the {@link Task} and - * {@link TaskSubscription} classes. These define whether the Task is repeating, delayed, or just a one-time task. - * Tasks are registered using {@link #registerTask(TaskSubscription)} and can be started using - * {@link #startTask(Class)}. + * {@link TaskSubscription} classes. These define whether the Task is repeating, delayed, or just a one-time task. Tasks + * are registered using {@link #registerTask(TaskSubscription)} and can be started using {@link #startTask(Class)}. *
*
* ServiceSubscriptions and TaskSubscriptions can both be easily obtained using the @@ -59,16 +58,14 @@ public class ServiceTaskRegistry /** * Starts all services registered with the registry. *
- * This method should be avoided, due to the fact that modules may have registered their services - * after this method - * has already been called. In this case, it is preferred to start - * each service using {@link #startService(Class)}. + * This method should be avoided, due to the fact that modules may have registered their services after + * this method has already been called. In this case, it is preferred to start each service using + * {@link #startService(Class)}. *
* However, Patchwork calls this method when the server is starting up, as Patchwork is the central - * resource - * manager for registered tasks and services. Patchwork will call this method on the first server tick, so unless - * you are registering services AND starting them POST WORLD, you do not need to worry about starting - * your services. + * resource manager for registered tasks and services. Patchwork will call this method on the first server tick, so + * unless you are registering services AND starting them POST WORLD, you do not need to worry about + * starting your services. */ public void startAllServices() { @@ -82,16 +79,13 @@ public class ServiceTaskRegistry * Starts all tasks registered with the registry. *
* This method should be avoided, due to the fact that modules may have registered their tasks after - * this method - * has already been called. In this case, it is preferred to start - * each task - * using {@link #startTask(Class)}. + * this method has already been called. In this case, it is preferred to start each task using + * {@link #startTask(Class)}. *
* However, Patchwork calls this method when the server is starting up, as Patchwork is the central - * resource - * manager for registered tasks and services. Patchwork will call this method on the first server tick, so unless - * you are registering tasks AND starting them POST WORLD, you do not need to worry about starting - * your tasks. + * resource manager for registered tasks and services. Patchwork will call this method on the first server tick, so + * unless you are registering tasks AND starting them POST WORLD, you do not need to worry about + * starting your tasks. */ public void startAllTasks() { @@ -105,13 +99,13 @@ public class ServiceTaskRegistry * Stops all services registered with the registry. *
* This method should be avoided, due to the fact that modules should be handling their own - * registrations. - * It is preferred to use {@link #stopService(Class)} for each service you would like to stop. + * registrations. It is preferred to use {@link #stopService(Class)} for each service you would like to + * stop. *
* However, Patchwork calls this method when the server is shutting down, or when Patchwork is being - * disabled, as Patchwork is the central resource manager for registered tasks and services. - * Unless you are modifying service states while the server is running, you do not need to worry about - * disabling or unregistering your services. + * disabled, as Patchwork is the central resource manager for registered tasks and services. Unless you are + * modifying service states while the server is running, you do not need to worry about disabling or + * unregistering your services. */ public void stopAllServices() { @@ -125,13 +119,12 @@ public class ServiceTaskRegistry * Stops all tasks registered with the registry. *
* This method should be avoided, due to the fact that modules should be handling their own - * registrations. - * It is preferred to use {@link #stopTask(Class)} for each task you would like to stop. + * registrations. It is preferred to use {@link #stopTask(Class)} for each task you would like to stop. *
* However, Patchwork calls this method when the server is shutting down, or when Patchwork is being - * disabled, as Patchwork is the central resource manager for registered tasks and services. - * Unless you are modifying task states while the server is running, you do not need to worry about - * disabling or unregistering your tasks. + * disabled, as Patchwork is the central resource manager for registered tasks and services. Unless you are + * modifying task states while the server is running, you do not need to worry about disabling or + * unregistering your tasks. */ public void stopAllTasks() { diff --git a/Patchwork/src/main/java/me/totalfreedom/data/UserRegistry.java b/Patchwork/src/main/java/me/totalfreedom/data/UserRegistry.java index 184e140..64bf824 100644 --- a/Patchwork/src/main/java/me/totalfreedom/data/UserRegistry.java +++ b/Patchwork/src/main/java/me/totalfreedom/data/UserRegistry.java @@ -71,7 +71,8 @@ public class UserRegistry /** * Registers the given {@link User} and {@link UserData} objects. - * @param user The {@link User} to register. + * + * @param user The {@link User} to register. * @param userData The {@link UserData} to register. */ public void registerUserData(final User user, final UserData userData) @@ -81,6 +82,7 @@ public class UserRegistry /** * Unregisters the given {@link User} and {@link UserData} objects. + * * @param user The {@link User} to unregister. */ public void unregisterUserData(final User user) @@ -90,6 +92,7 @@ public class UserRegistry /** * Gets the map of {@link User} objects to {@link UserData} objects. + * * @return The map of {@link User} objects to {@link UserData} objects. */ public Map getUserDataMap() diff --git a/Patchwork/src/main/java/me/totalfreedom/display/BossBarDisplay.java b/Patchwork/src/main/java/me/totalfreedom/display/BossBarDisplay.java index 6ef8948..2239b4b 100644 --- a/Patchwork/src/main/java/me/totalfreedom/display/BossBarDisplay.java +++ b/Patchwork/src/main/java/me/totalfreedom/display/BossBarDisplay.java @@ -275,6 +275,7 @@ public class BossBarDisplay /** * Adds a flag to the boss bar. + * * @param flag The flag to add. * @return The builder. */ @@ -286,6 +287,7 @@ public class BossBarDisplay /** * Adds multiple flags to the boss bar. + * * @param flags The flags to add. * @return The builder. */ @@ -297,6 +299,7 @@ public class BossBarDisplay /** * Removes a flag from the boss bar. + * * @param flag The flag to remove. * @return The builder. */ @@ -308,6 +311,7 @@ public class BossBarDisplay /** * Removes multiple flags from the boss bar. + * * @param flags The flags to remove. * @return The builder. */ @@ -319,6 +323,7 @@ public class BossBarDisplay /** * Clears all flags from the boss bar. + * * @return The builder. */ public BossBarBuilder clearFlags() @@ -329,6 +334,7 @@ public class BossBarDisplay /** * Sets the color of the boss bar. + * * @param color The color of the boss bar. * @return The builder. */ @@ -340,6 +346,7 @@ public class BossBarDisplay /** * Sets the overlay of the boss bar. + * * @param overlay The overlay of the boss bar. * @return The builder. */ @@ -351,6 +358,7 @@ public class BossBarDisplay /** * Sets the progress of the boss bar. This must satisfy {@code 0 <= progress <= 100}. + * * @param progress The progress of the boss bar. * @return The builder. */ @@ -362,6 +370,7 @@ public class BossBarDisplay /** * Builds the boss bar. + * * @return The {@link BossBar}. */ public BossBar build() diff --git a/Patchwork/src/main/java/me/totalfreedom/display/ClickAction.java b/Patchwork/src/main/java/me/totalfreedom/display/ClickAction.java index a7816c7..70aa1ad 100644 --- a/Patchwork/src/main/java/me/totalfreedom/display/ClickAction.java +++ b/Patchwork/src/main/java/me/totalfreedom/display/ClickAction.java @@ -3,13 +3,15 @@ package me.totalfreedom.display; import org.bukkit.entity.Player; /** - * Represents an action to be performed when a player clicks on an inventory slot in the respective {@link AbstractMenu}. + * Represents an action to be performed when a player clicks on an inventory slot in the respective + * {@link AbstractMenu}. */ @FunctionalInterface public interface ClickAction { /** * Called when a player clicks on an inventory slot in the respective {@link AbstractMenu}. + * * @param player The player who clicked. */ void onClick(final Player player); diff --git a/Patchwork/src/main/java/me/totalfreedom/display/TitleDisplay.java b/Patchwork/src/main/java/me/totalfreedom/display/TitleDisplay.java index a5110bd..b6bf7cc 100644 --- a/Patchwork/src/main/java/me/totalfreedom/display/TitleDisplay.java +++ b/Patchwork/src/main/java/me/totalfreedom/display/TitleDisplay.java @@ -20,6 +20,7 @@ public class TitleDisplay /** * Creates a new {@link TitleDisplay} with the given {@link Title}. + * * @param title The {@link Title} to display. */ public TitleDisplay(final Title title) @@ -37,6 +38,7 @@ public class TitleDisplay /** * Displays the {@link Title} to the given {@link Audience}. + * * @param audience The {@link Audience} to display the {@link Title} to. */ public void displayTo(final Audience audience) @@ -55,6 +57,7 @@ public class TitleDisplay /** * Sets the {@link Title} to display. + * * @param title The {@link Title} to display. */ public void setTitle(final Title title) @@ -64,6 +67,7 @@ public class TitleDisplay /** * Displays the {@link Title} to the given {@link ForwardingAudience}. + * * @param forwardingAudience The {@link ForwardingAudience} to display the {@link Title} to. */ public void displayForwarded(final ForwardingAudience forwardingAudience) @@ -99,8 +103,7 @@ public class TitleDisplay private Duration displayDuration; /** - * Creates a new {@link TitleBuilder} with default values. - * The default values are: + * Creates a new {@link TitleBuilder} with default values. The default values are: *

    *
  • Empty main title
  • *
  • Empty subtitle
  • @@ -108,6 +111,7 @@ public class TitleDisplay *
  • Default fade out time
  • *
  • Default display duration
  • *
+ * * @see Title#DEFAULT_TIMES */ public TitleBuilder() @@ -121,6 +125,7 @@ public class TitleDisplay /** * Sets the main title of the {@link Title}. + * * @param title The main title of the {@link Title}. * @return The {@link TitleBuilder} instance. */ @@ -132,7 +137,8 @@ public class TitleDisplay /** * Sets the main title of the {@link Title}. - * @param title The main title of the {@link Title}. + * + * @param title The main title of the {@link Title}. * @param titleColor The color of the main title. * @return The {@link TitleBuilder} instance. */ @@ -144,6 +150,7 @@ public class TitleDisplay /** * Sets the main title of the {@link Title}. + * * @param mainTitle The main title of the {@link Title}. * @return The {@link TitleBuilder} instance. */ @@ -155,6 +162,7 @@ public class TitleDisplay /** * Sets the subtitle of the {@link Title}. + * * @param title The subtitle of the {@link Title}. * @return The {@link TitleBuilder} instance. */ @@ -166,7 +174,8 @@ public class TitleDisplay /** * Sets the subtitle of the {@link Title}. - * @param title The subtitle of the {@link Title}. + * + * @param title The subtitle of the {@link Title}. * @param titleColor The color of the subtitle. * @return The {@link TitleBuilder} instance. */ @@ -178,6 +187,7 @@ public class TitleDisplay /** * Sets the subtitle of the {@link Title}. + * * @param subTitle The subtitle of the {@link Title}. * @return The {@link TitleBuilder} instance. */ @@ -189,6 +199,7 @@ public class TitleDisplay /** * Sets the fade in time of the {@link Title}. + * * @param duration The fade in time of the {@link Title}. * @return The {@link TitleBuilder} instance. */ @@ -200,6 +211,7 @@ public class TitleDisplay /** * Sets the fade out time of the {@link Title}. + * * @param duration The fade out time of the {@link Title}. * @return The {@link TitleBuilder} instance. */ @@ -211,6 +223,7 @@ public class TitleDisplay /** * Sets the display duration of the {@link Title}. + * * @param duration The display duration of the {@link Title}. * @return The {@link TitleBuilder} instance. */ @@ -222,14 +235,15 @@ public class TitleDisplay /** * Builds the {@link Title} with the given parameters. + * * @return The built {@link Title}. */ public Title build() { return Title.title( - this.mainTitle, - this.subTitle, - Title.Times.times(this.fadeIn, this.displayDuration, this.fadeOut) + this.mainTitle, + this.subTitle, + Title.Times.times(this.fadeIn, this.displayDuration, this.fadeOut) ); } } diff --git a/Patchwork/src/main/java/me/totalfreedom/economy/EconomicEntity.java b/Patchwork/src/main/java/me/totalfreedom/economy/EconomicEntity.java index 59b11c2..f2b2c69 100644 --- a/Patchwork/src/main/java/me/totalfreedom/economy/EconomicEntity.java +++ b/Patchwork/src/main/java/me/totalfreedom/economy/EconomicEntity.java @@ -6,7 +6,8 @@ package me.totalfreedom.economy; public interface EconomicEntity { /** - * Gets the {@link EconomicEntityData} (which contains various common metadata about this {@link EconomicEntity}) associated with this class + * Gets the {@link EconomicEntityData} (which contains various common metadata about this {@link EconomicEntity}) + * associated with this class * * @return the {@link EconomicEntityData} */ diff --git a/Patchwork/src/main/java/me/totalfreedom/economy/EconomicEntityData.java b/Patchwork/src/main/java/me/totalfreedom/economy/EconomicEntityData.java index 7e1f5aa..ac3d372 100644 --- a/Patchwork/src/main/java/me/totalfreedom/economy/EconomicEntityData.java +++ b/Patchwork/src/main/java/me/totalfreedom/economy/EconomicEntityData.java @@ -15,6 +15,12 @@ public interface EconomicEntityData */ long getBalance(); + /** + * Sets the balance of the associated instance + * + * @param newBalance the new balance + */ + void setBalance(final long newBalance); /** * Adds the provided amount to the associated instance's balance @@ -31,11 +37,4 @@ public interface EconomicEntityData * @return the new balance */ long removeFromBalance(final long amount); - - /** - * Sets the balance of the associated instance - * - * @param newBalance the new balance - */ - void setBalance(final long newBalance); } diff --git a/Patchwork/src/main/java/me/totalfreedom/economy/MutableTransaction.java b/Patchwork/src/main/java/me/totalfreedom/economy/MutableTransaction.java index 0deebc8..89a14a4 100644 --- a/Patchwork/src/main/java/me/totalfreedom/economy/MutableTransaction.java +++ b/Patchwork/src/main/java/me/totalfreedom/economy/MutableTransaction.java @@ -3,7 +3,8 @@ package me.totalfreedom.economy; /** * A transaction that can be changed. *

- * IMPORTANT NOTE: Please ensure that all modifications of {@link MutableTransaction} happen BEFORE it is passed to a {@link Transactor} implementation + * IMPORTANT NOTE: Please ensure that all modifications of {@link MutableTransaction} happen BEFORE it is passed to a + * {@link Transactor} implementation */ public interface MutableTransaction extends Transaction { diff --git a/Patchwork/src/main/java/me/totalfreedom/logging/InteractionFormatter.java b/Patchwork/src/main/java/me/totalfreedom/logging/InteractionFormatter.java index c34bf1a..19a5f01 100644 --- a/Patchwork/src/main/java/me/totalfreedom/logging/InteractionFormatter.java +++ b/Patchwork/src/main/java/me/totalfreedom/logging/InteractionFormatter.java @@ -1,6 +1,5 @@ package me.totalfreedom.logging; -import me.totalfreedom.sql.SQL; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; @@ -120,8 +119,8 @@ public final class InteractionFormatter final int dotIndex = trimmed.indexOf('.'); return (dotIndex != -1) - ? trimmed.substring(0, dotIndex) - : trimmed; + ? trimmed.substring(0, dotIndex) + : trimmed; } // Format: , diff --git a/Patchwork/src/main/java/me/totalfreedom/particle/NoteColorUtil.java b/Patchwork/src/main/java/me/totalfreedom/particle/NoteColorUtil.java new file mode 100644 index 0000000..a415118 --- /dev/null +++ b/Patchwork/src/main/java/me/totalfreedom/particle/NoteColorUtil.java @@ -0,0 +1,50 @@ +package me.totalfreedom.particle; + +import org.bukkit.Particle; +import org.bukkit.World; + +/** + * A utility class for the 24 different note colors available in Minecraft. Each note is represented as a double value + * between 0 and 1. Furthermore, each note is a multiple of 1/24 within that range of 0 to 1. + *

+ * For example, the note G is represented as 1/24, or 0.042. The note C is represented as 6/24, or 0.25. + *

+ * When spawning particles, the count must be set to 0 and the extra value set between 0 and 1. The extra value is the + * size of the note particle. To add a color, use one of the provided methods in this class for the xOffset value in + * {@link World#spawnParticle(Particle, double, double, double, int, double, double, double, double)}. The xOffset value + * is the note color, with the yOffset and zOffset values set to 0. + */ +public final class NoteColorUtil +{ + public static final double CYAN_NOTE_F_SHARP_LOW = 0; + public static final double CYAN_NOTE_G = 0.042; + public static final double GRAY_NOTE_G_SHARP = 0.083; + public static final double GRAY_NOTE_A = 0.125; + public static final double GRAY_NOTE_A_SHARP = 0.167; + public static final double MAGENTA_NOTE_B = 0.208; + public static final double RED_NOTE_C = 0.25; + public static final double YELLOW_NOTE_C_SHARP = 0.292; + public static final double YELLOW_NOTE_D = 0.333; + public static final double YELLOW_NOTE_D_SHARP_LOW = 0.375; + public static final double GRAY_NOTE_E = 0.417; + public static final double GRAY_NOTE_F = 0.458; + public static final double GRAY_NOTE_F_SHARP = 0.5; + public static final double LIGHT_BLUE_NOTE_G = 0.542; + public static final double BLUE_NOTE_G_SHARP = 0.583; + public static final double PURPLE_NOTE_A = 0.625; + public static final double PURPLE_NOTE_A_SHARP = 0.667; + public static final double PURPLE_NOTE_B = 0.708; + public static final double GRAY_NOTE_C = 0.75; + public static final double GRAY_NOTE_C_SHARP = 0.792; + public static final double GRAY_NOTE_D = 0.833; + public static final double YELLOW_NOTE_D_SHARP_HIGH = 0.875; + public static final double YELLOW_NOTE_E = 0.917; + public static final double YELLOW_NOTE_F = 0.958; + public static final double CYAN_NOTE_F_SHARP_HIGH = 1; + public static final double BLACK_NOTE_NA = 32768; + + private NoteColorUtil() + { + throw new AssertionError(); + } +} diff --git a/Patchwork/src/main/java/me/totalfreedom/particle/NoteWrapper.java b/Patchwork/src/main/java/me/totalfreedom/particle/NoteWrapper.java deleted file mode 100644 index ef656ce..0000000 --- a/Patchwork/src/main/java/me/totalfreedom/particle/NoteWrapper.java +++ /dev/null @@ -1,157 +0,0 @@ -package me.totalfreedom.particle; - -import org.bukkit.Particle; -import org.bukkit.World; - -import java.math.RoundingMode; -import java.text.DecimalFormat; - -/** - * A utility class for the 24 different note colors available in Minecraft. Each note is represented as a double value - * between 0 and 1. Furthermore, each note is a multiple of 1/24 within that range of 0 to 1. - *

- * For example, the note G is represented as 1/24, or 0.042. The note C is represented as 6/24, or 0.25. - *

- * When spawning particles, the count must be set to 0 and the extra value set between 0 and 1. The extra value is the - * size of the note particle. To add a color, use one of the provided methods in this class for the xOffset value in - * {@link World#spawnParticle(Particle, double, double, double, int, double, double, double, double)}. The xOffset value - * is the note color, with the yOffset and zOffset values set to 0. - */ -public final class NoteWrapper -{ - public static final double CYAN_NOTE_F_SHARP_LOW = 0; - public static final double CYAN_NOTE_F_SHARP_HIGH = 1; - - private static final DecimalFormat FORMAT; - - static - { - FORMAT = new DecimalFormat("#.###"); - FORMAT.setRoundingMode(RoundingMode.HALF_UP); - } - - private NoteWrapper() - { - throw new AssertionError(); - } - - private static double round(final double value) - { - return Double.parseDouble(FORMAT.format(value)); - } - - public static double cyanNoteG() - { - return round(1 / 24D); - } - - public static double grayNoteGSharp() - { - return round(2 / 24D); - } - - public static double grayNoteA() - { - return round(3 / 24D); - } - - public static double grayNoteASharp() - { - return round(4 / 24D); - } - - public static double magentaNoteB() - { - return round(5 / 24D); - } - - public static double redNoteC() - { - return round(6 / 24D); - } - - public static double yellowNoteCSharp() - { - return round(7 / 24D); - } - - public static double yellowNoteD() - { - return round(8 / 24D); - } - - public static double yellowNoteDSharpLow() - { - return round(9 / 24D); - } - - public static double grayNoteE() - { - return round(10 / 24D); - } - - public static double grayNoteF() - { - return round(11 / 24D); - } - - public static double grayNoteFSharp() - { - return round(12 / 24D); - } - - public static double lightBlueNoteG() - { - return round(13 / 24D); - } - - public static double blueNoteGSharp() - { - return round(14 / 24D); - } - - public static double purpleNoteA() - { - return round(15 / 24D); - } - - public static double purpleNoteASharp() - { - return round(16 / 24D); - } - - public static double purpleNoteB() - { - return round(17 / 24D); - } - - public static double grayNoteC() - { - return round(18 / 24D); - } - - public static double grayNoteCSharp() - { - return round(19 / 24D); - } - - public static double grayNoteD() - { - return round(20 / 24D); - } - - public static double yellowNoteDSharpHigh() - { - return round(21 / 24D); - } - - public static double greenNoteE() - { - return round(22 / 24D); - } - - public static double lightBlueNoteF() - { - return round(23 / 24D); - } -} diff --git a/Patchwork/src/main/java/me/totalfreedom/particle/Trail.java b/Patchwork/src/main/java/me/totalfreedom/particle/Trail.java index dc3c517..b6ef17f 100644 --- a/Patchwork/src/main/java/me/totalfreedom/particle/Trail.java +++ b/Patchwork/src/main/java/me/totalfreedom/particle/Trail.java @@ -17,9 +17,8 @@ import java.util.UUID; public interface Trail { /** - * Returns the UUID of the player associated with the trail. This is for usage with our persistant storage - * container so that we can safely send and retrieve the trails without having to directly reference a player - * object. + * Returns the UUID of the player associated with the trail. This is for usage with our persistant storage container + * so that we can safely send and retrieve the trails without having to directly reference a player object. *
* TL;DR Memory optimization! * @@ -30,9 +29,9 @@ public interface Trail /** * Returns the player associated with this trail. Trails are user specific, and should be persistent across all - * usages. This is also used when displaying the particles, as they will be relative to the player's back, which - * is an inverse offset of the player's eye location. We use OfflinePlayer as we can make a simple check and cast - * to determine if the player is online when spawning trails. + * usages. This is also used when displaying the particles, as they will be relative to the player's back, which is + * an inverse offset of the player's eye location. We use OfflinePlayer as we can make a simple check and cast to + * determine if the player is online when spawning trails. * * @return The player associated with this Trail. */ @@ -50,8 +49,8 @@ public interface Trail TrailType getTrailType(); /** - * This method is nullable because if the value of {@link #isGradient()} is true, then - * {@link #getColors()} should be used instead, as that will contain the color data for our trail. + * This method is nullable because if the value of {@link #isGradient()} is true, then {@link #getColors()} should + * be used instead, as that will contain the color data for our trail. *
* However, this method will also be null if the particle type is not colorable. * @@ -71,8 +70,8 @@ public interface Trail void setColor(@NotNull Color color); /** - * This method is nullable because if the value of {@link #isGradient()} is false, then - * {@link #getColor()} should be used instead, as our trail is a single static color. + * This method is nullable because if the value of {@link #isGradient()} is false, then {@link #getColor()} should + * be used instead, as our trail is a single static color. *
* However, this method will also be null if the particle type is not colorable. * diff --git a/Patchwork/src/main/java/me/totalfreedom/particle/TrailType.java b/Patchwork/src/main/java/me/totalfreedom/particle/TrailType.java index c0a5001..e7afbe2 100644 --- a/Patchwork/src/main/java/me/totalfreedom/particle/TrailType.java +++ b/Patchwork/src/main/java/me/totalfreedom/particle/TrailType.java @@ -1,6 +1,5 @@ package me.totalfreedom.particle; -import org.bukkit.Note; import org.bukkit.Particle; public enum TrailType diff --git a/Patchwork/src/main/java/me/totalfreedom/provider/ContextProvider.java b/Patchwork/src/main/java/me/totalfreedom/provider/ContextProvider.java index aa61ac0..b878c85 100644 --- a/Patchwork/src/main/java/me/totalfreedom/provider/ContextProvider.java +++ b/Patchwork/src/main/java/me/totalfreedom/provider/ContextProvider.java @@ -18,16 +18,16 @@ public class ContextProvider public T fromString(final String string, final Class clazz) { return Stream.of(toBoolean(string), - toDouble(string), - toInt(string), - toLong(string), - toFloat(string), - toMaterial(string), - toPlayer(string), - toWorld(string), - toLocation(string), - toCommandSender(string), - toComponent(string)) + toDouble(string), + toInt(string), + toLong(string), + toFloat(string), + toMaterial(string), + toPlayer(string), + toWorld(string), + toLocation(string), + toCommandSender(string), + toComponent(string)) .filter(Objects::nonNull) .findFirst() .map(clazz::cast) @@ -36,14 +36,12 @@ public class ContextProvider private @Nullable Boolean toBoolean(final String string) { - try - { - return Boolean.parseBoolean(string); - } - catch (Exception ignored) - { - return null; - } + // Previoulsy we used Boolean#parseBoolean, but that will always return a value and does not throw + // an exception. This means that if the string is not "true" or "false", it will return false. + if (string.equalsIgnoreCase("true")) return true; + if (string.equalsIgnoreCase("false")) return false; + + return null; } private @Nullable Double toDouble(final String string) @@ -51,8 +49,7 @@ public class ContextProvider try { return Double.parseDouble(string); - } - catch (Exception ignored) + } catch (NumberFormatException ignored) { return null; } @@ -63,8 +60,7 @@ public class ContextProvider try { return Integer.parseInt(string); - } - catch (Exception ignored) + } catch (NumberFormatException ignored) { return null; } @@ -75,8 +71,7 @@ public class ContextProvider try { return Long.parseLong(string); - } - catch (Exception ignored) + } catch (NumberFormatException ignored) { return null; } @@ -87,8 +82,7 @@ public class ContextProvider try { return Float.parseFloat(string); - } - catch (Exception ignored) + } catch (NumberFormatException ignored) { return null; } diff --git a/Patchwork/src/main/java/me/totalfreedom/service/FreedomExecutor.java b/Patchwork/src/main/java/me/totalfreedom/service/FreedomExecutor.java index 5724f09..f090314 100644 --- a/Patchwork/src/main/java/me/totalfreedom/service/FreedomExecutor.java +++ b/Patchwork/src/main/java/me/totalfreedom/service/FreedomExecutor.java @@ -119,8 +119,8 @@ public class FreedomExecutor } /** - * Gets the synchronous executor instance. This is a convenience for {@link CompletableFuture} invocations, - * when defining a custom executor for the {@link CompletableFuture}. + * Gets the synchronous executor instance. This is a convenience for {@link CompletableFuture} invocations, when + * defining a custom executor for the {@link CompletableFuture}. * * @return The synchronous executor instance. */ @@ -130,8 +130,8 @@ public class FreedomExecutor } /** - * Gets the asynchronous executor instance. This is a convenience for {@link CompletableFuture} invocations, - * when defining a custom executor for the {@link CompletableFuture}. + * Gets the asynchronous executor instance. This is a convenience for {@link CompletableFuture} invocations, when + * defining a custom executor for the {@link CompletableFuture}. * * @return The asynchronous executor instance. */ diff --git a/Patchwork/src/main/java/me/totalfreedom/service/Task.java b/Patchwork/src/main/java/me/totalfreedom/service/Task.java index cea71a6..3275705 100644 --- a/Patchwork/src/main/java/me/totalfreedom/service/Task.java +++ b/Patchwork/src/main/java/me/totalfreedom/service/Task.java @@ -52,10 +52,10 @@ public abstract class Task extends BukkitRunnable } /** - * Creates a new task with the given name and delay. This will intialize a single execute task with an - * initial delay before execution. + * Creates a new task with the given name and delay. This will intialize a single execute task with an initial delay + * before execution. * - * @param name The name of the task. + * @param name The name of the task. * @param delay How long the task should wait before executing. */ protected Task(final String name, final long delay) @@ -64,44 +64,44 @@ public abstract class Task extends BukkitRunnable } /** - * Creates a new task with the given name and delay. - * This is the same as longs, except that here, we naturally support durations which are automatically converted to - * ticks for you. This means that using {@link Duration#ofSeconds(long)} will work as expected. + * Creates a new task with the given name and delay. This is the same as longs, except that here, we naturally + * support durations which are automatically converted to ticks for you. This means that using + * {@link Duration#ofSeconds(long)} will work as expected. * - * @param name The name of the task. + * @param name The name of the task. * @param delay How long the task should wait before executing. */ protected Task(final String name, final Duration delay) { - this(name, DurationTools.getTickedSeconds(delay), -1L); + this(name, DurationTools.getTicks(delay), -1L); } /** - * Creates a new task with the given name, delay, and interval. - * This is the same as longs, except that here, we naturally support durations which are automatically converted to - * ticks for you. This means that using {@link Duration#ofSeconds(long)} will work as expected. + * Creates a new task with the given name, delay, and interval. This is the same as longs, except that here, we + * naturally support durations which are automatically converted to ticks for you. This means that using + * {@link Duration#ofSeconds(long)} will work as expected. * - * @param name The name of the task. - * @param delay How long the task should wait before executing. + * @param name The name of the task. + * @param delay How long the task should wait before executing. * @param interval How long the task should wait between executions. */ protected Task(final String name, final Duration delay, final Duration interval) { - this(name, DurationTools.getTickedSeconds(delay), DurationTools.getTickedSeconds(interval)); + this(name, DurationTools.getTicks(delay), DurationTools.getTicks(interval)); } /** - * Creates a new task with the given name, delay, and interval. - * This method is a convenience method to use a {@link Duration} for the interval, while also being able to - * specify the delay as -1L so the task does not have an initial delay before execution. + * Creates a new task with the given name, delay, and interval. This method is a convenience method to use a + * {@link Duration} for the interval, while also being able to specify the delay as -1L so the task does not have an + * initial delay before execution. * - * @param name The name of the task. - * @param delay The delay of the task. + * @param name The name of the task. + * @param delay The delay of the task. * @param interval The interval of the task. */ protected Task(final String name, final long delay, final Duration interval) { - this(name, delay, DurationTools.getTickedSeconds(interval)); + this(name, delay, DurationTools.getTicks(interval)); } /** diff --git a/Patchwork/src/main/java/me/totalfreedom/service/TaskSubscription.java b/Patchwork/src/main/java/me/totalfreedom/service/TaskSubscription.java index f7b7c0b..9e5c3e1 100644 --- a/Patchwork/src/main/java/me/totalfreedom/service/TaskSubscription.java +++ b/Patchwork/src/main/java/me/totalfreedom/service/TaskSubscription.java @@ -9,10 +9,10 @@ import org.bukkit.scheduler.BukkitTask; import java.util.concurrent.Executor; /** - * Represents a subscription to a task. Task subscriptions offer a nice wrapper for managing tasks, which are - * inevitably just bukkit runnables with a bit more lenience in terms of instantiation modification and execution. - * It also offers a more intuitive way to manage our tasks; rather than having to keep track of task ids for each - * {@link BukkitTask} object that gets returned by the {@link BukkitScheduler}. + * Represents a subscription to a task. Task subscriptions offer a nice wrapper for managing tasks, which are inevitably + * just bukkit runnables with a bit more lenience in terms of instantiation modification and execution. It also offers a + * more intuitive way to manage our tasks; rather than having to keep track of task ids for each {@link BukkitTask} + * object that gets returned by the {@link BukkitScheduler}. * * @param The type of task. */ diff --git a/Patchwork/src/main/java/me/totalfreedom/shop/ReactionTask.java b/Patchwork/src/main/java/me/totalfreedom/shop/ReactionTask.java index 4af9233..cceb27e 100644 --- a/Patchwork/src/main/java/me/totalfreedom/shop/ReactionTask.java +++ b/Patchwork/src/main/java/me/totalfreedom/shop/ReactionTask.java @@ -10,25 +10,29 @@ import net.kyori.adventure.bossbar.BossBar; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -public class ReactionTask extends Task implements Listener { +public class ReactionTask extends Task implements Listener +{ private final Reaction reaction; private final BossBarDisplay bossBarDisplay; - public ReactionTask(final String name, final Reaction reaction) { + public ReactionTask(final String name, final Reaction reaction) + { super(name, -1L, -1); this.reaction = reaction; final BossBar bossBar = BossBarDisplay.builder() - .setName(reaction.getReactionMessage()) - .setColor(BossBar.Color.GREEN) - .setProgress(0.0F) - .build(); + .setName(reaction.getReactionMessage()) + .setColor(BossBar.Color.GREEN) + .setProgress(0.0F) + .build(); this.bossBarDisplay = new BossBarDisplay(bossBar); } @Override - public void run() { - if (isCancelled()) { + public void run() + { + if (isCancelled()) + { } final BossBarTimer timer = new BossBarTimer(bossBarDisplay, reaction.getReactionDuration()); @@ -36,13 +40,15 @@ public class ReactionTask extends Task implements Listener { } @EventHandler - public void onPlayerChat(final AsyncChatEvent event) { + public void onPlayerChat(final AsyncChatEvent event) + { if (event.message() - .equals(reaction.getReactionMessage())) { + .equals(reaction.getReactionMessage())) + { final EconomicEntity entity = CommonsBase.getInstance() - .getRegistrations() - .getUserRegistry() - .getUser(event.getPlayer()); + .getRegistrations() + .getUserRegistry() + .getUser(event.getPlayer()); reaction.onReact(entity); } diff --git a/Patchwork/src/main/java/me/totalfreedom/sql/SQLProperties.java b/Patchwork/src/main/java/me/totalfreedom/sql/SQLProperties.java index 2127b1d..5a0566b 100644 --- a/Patchwork/src/main/java/me/totalfreedom/sql/SQLProperties.java +++ b/Patchwork/src/main/java/me/totalfreedom/sql/SQLProperties.java @@ -22,10 +22,10 @@ public interface SQLProperties default String toURLPlain() { return String.format("jdbc:%s://%s:%s/%s", - this.getDriver(), - this.getHost(), - this.getPort(), - this.getDatabase()); + this.getDriver(), + this.getHost(), + this.getPort(), + this.getDatabase()); } String getDriver(); @@ -39,12 +39,12 @@ public interface SQLProperties default String toURLWithLogin() { return String.format("jdbc:%s://%s:%s/%s?user=%s&password=%s", - this.getDriver(), - this.getHost(), - this.getPort(), - this.getDatabase(), - this.getUsername(), - this.getPassword()); + this.getDriver(), + this.getHost(), + this.getPort(), + this.getDatabase(), + this.getUsername(), + this.getPassword()); } String getUsername(); diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/DurationTools.java b/Patchwork/src/main/java/me/totalfreedom/utils/DurationTools.java index 1f833bc..b629f09 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/DurationTools.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/DurationTools.java @@ -16,7 +16,7 @@ public final class DurationTools throw new AssertionError(); } - public static final long getTickedSeconds(final Duration duration) + public static final long getTicks(final Duration duration) { return duration.toMillis() / 50L; } diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/InterpolationUtils.java b/Patchwork/src/main/java/me/totalfreedom/utils/InterpolationUtils.java index 2e282cb..7be41c0 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/InterpolationUtils.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/InterpolationUtils.java @@ -34,7 +34,7 @@ public final class InterpolationUtils } private static Set hsvGradient(final int length, final Color from, final Color to, - final Interpolator interpolator) + final Interpolator interpolator) { // returns a float-array where hsv[0] = hue, hsv[1] = saturation, hsv[2] = value/brightness final float[] hsvFrom = java.awt.Color.RGBtoHSB(from.getRed(), from.getGreen(), from.getBlue(), null); @@ -69,18 +69,18 @@ public final class InterpolationUtils { final LinkedHashSet base = new LinkedHashSet<>(); final Set redToOrange = componentRGBGradient(length, NamedTextColor.RED, - NamedTextColor.GOLD, InterpolationUtils::linear); + NamedTextColor.GOLD, InterpolationUtils::linear); final Set orangeToYellow = componentRGBGradient(length, NamedTextColor.GOLD, - NamedTextColor.YELLOW, InterpolationUtils::linear); + NamedTextColor.YELLOW, InterpolationUtils::linear); final Set yellowToGreen = componentRGBGradient(length, NamedTextColor.YELLOW, - NamedTextColor.GREEN, InterpolationUtils::linear); + NamedTextColor.GREEN, InterpolationUtils::linear); final Set greenToBlue = componentRGBGradient(length, NamedTextColor.GREEN, - NamedTextColor.BLUE, InterpolationUtils::linear); + NamedTextColor.BLUE, InterpolationUtils::linear); final Set blueToPurple = componentRGBGradient(length, NamedTextColor.BLUE, - NamedTextColor.LIGHT_PURPLE, - InterpolationUtils::linear); + NamedTextColor.LIGHT_PURPLE, + InterpolationUtils::linear); final Set purpleToRed = componentRGBGradient(length, TextColor.color(75, 0, 130), - TextColor.color(255, 0, 0), InterpolationUtils::linear); + TextColor.color(255, 0, 0), InterpolationUtils::linear); base.addAll(redToOrange); base.addAll(orangeToYellow); base.addAll(yellowToGreen); @@ -91,7 +91,7 @@ public final class InterpolationUtils } private static Set componentRGBGradient(final int length, final TextColor from, final TextColor to, - final Interpolator interpolator) + final Interpolator interpolator) { final double[] r = interpolator.interpolate(from.red(), to.red(), length); final double[] g = interpolator.interpolate(from.green(), to.green(), length); @@ -113,7 +113,7 @@ public final class InterpolationUtils } private static Set rgbGradient(final int length, final Color from, final Color to, - final Interpolator interpolator) + final Interpolator interpolator) { final double[] r = interpolator.interpolate(from.getRed(), to.getRed(), length); final double[] g = interpolator.interpolate(from.getGreen(), to.getGreen(), length); diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/ShapeUtils.java b/Patchwork/src/main/java/me/totalfreedom/utils/ShapeUtils.java index 5a142a0..e4b533c 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/ShapeUtils.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/ShapeUtils.java @@ -21,7 +21,7 @@ public class ShapeUtils } public List generate(final int count, final DoubleUnaryOperator x, final DoubleUnaryOperator y, - final DoubleUnaryOperator z) + final DoubleUnaryOperator z) { final double step = (start - end) / (count - 1); final LinkedList lset = new LinkedList<>(); diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/container/Tuple.java b/Patchwork/src/main/java/me/totalfreedom/utils/container/Trio.java similarity index 81% rename from Patchwork/src/main/java/me/totalfreedom/utils/container/Tuple.java rename to Patchwork/src/main/java/me/totalfreedom/utils/container/Trio.java index 794637d..90bf673 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/container/Tuple.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/container/Trio.java @@ -1,12 +1,12 @@ package me.totalfreedom.utils.container; -public final class Tuple +public final class Trio { private final A a; private final B b; private final C c; - public Tuple(final A a, final B b, final C c) + public Trio(final A a, final B b, final C c) { this.a = a; this.b = b; diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/container/UnaryTuple.java b/Patchwork/src/main/java/me/totalfreedom/utils/container/UnaryTrio.java similarity index 81% rename from Patchwork/src/main/java/me/totalfreedom/utils/container/UnaryTuple.java rename to Patchwork/src/main/java/me/totalfreedom/utils/container/UnaryTrio.java index 85bdee3..cf2e27f 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/container/UnaryTuple.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/container/UnaryTrio.java @@ -1,12 +1,12 @@ package me.totalfreedom.utils.container; -public class UnaryTuple +public class UnaryTrio { private final T primary; private final T secondary; private final T tertiary; - public UnaryTuple(final T primary, final T secondary, final T tertiary) + public UnaryTrio(final T primary, final T secondary, final T tertiary) { this.primary = primary; this.secondary = secondary; diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/kyori/FreedomAdventure.java b/Patchwork/src/main/java/me/totalfreedom/utils/kyori/FreedomAdventure.java index f24cbc7..3dc548a 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/kyori/FreedomAdventure.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/kyori/FreedomAdventure.java @@ -12,7 +12,7 @@ import java.util.function.Supplier; public class FreedomAdventure { private static final PlainTextComponentSerializer PLAIN_TEXT_COMPONENT_SERIALIZER = - PlainTextComponentSerializer.plainText(); + PlainTextComponentSerializer.plainText(); private FreedomAdventure() { diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/kyori/FreedomMiniMessage.java b/Patchwork/src/main/java/me/totalfreedom/utils/kyori/FreedomMiniMessage.java index e39552c..3db5cdc 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/kyori/FreedomMiniMessage.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/kyori/FreedomMiniMessage.java @@ -35,14 +35,14 @@ public class FreedomMiniMessage private static final MiniMessage unsafe = MiniMessage.miniMessage(); private static final MiniMessage safe = MiniMessage.builder() .tags(TagResolver.resolver( - StandardTags.color(), - StandardTags.rainbow(), - StandardTags.gradient(), - StandardTags.newline(), - StandardTags.decorations(TextDecoration.ITALIC), - StandardTags.decorations(TextDecoration.BOLD), - StandardTags.decorations(TextDecoration.STRIKETHROUGH), - StandardTags.decorations(TextDecoration.UNDERLINED) + StandardTags.color(), + StandardTags.rainbow(), + StandardTags.gradient(), + StandardTags.newline(), + StandardTags.decorations(TextDecoration.ITALIC), + StandardTags.decorations(TextDecoration.BOLD), + StandardTags.decorations(TextDecoration.STRIKETHROUGH), + StandardTags.decorations(TextDecoration.UNDERLINED) )) .build(); @@ -52,9 +52,8 @@ public class FreedomMiniMessage } /** - * Deserializes an input string using an instance of MiniMessage that is either safe (resolves only a specific - * set of tags) - * or unsafe (resolves all tags). + * Deserializes an input string using an instance of MiniMessage that is either safe (resolves only a specific set + * of tags) or unsafe (resolves all tags). * * @param safe Whether to use a safe instance of MiniMessage * @param input An input string formatted with MiniMessage's input diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/kyori/KyoriConstants.java b/Patchwork/src/main/java/me/totalfreedom/utils/kyori/KyoriConstants.java index 5ba62d5..0ffbe29 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/kyori/KyoriConstants.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/kyori/KyoriConstants.java @@ -9,12 +9,11 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; /** - * This class contains different methods to provide {@link ChatType.Bound} instances for sending messages to players - * in game. - * This is now a requirement for all message requests to players due to the new chat signature system. + * This class contains different methods to provide {@link ChatType.Bound} instances for sending messages to players in + * game. This is now a requirement for all message requests to players due to the new chat signature system. *
- * Even though Scissors has this feature disabled, upstream (Paper) and Kyori Adventure - * have made the appropriate API changes to accomodate chat signatures. + * Even though Scissors has this feature disabled, upstream (Paper) and Kyori Adventure have made the appropriate API + * changes to accomodate chat signatures. *
* As a result, we need to conform to those specifications even if we do not use this feature. */ @@ -34,8 +33,8 @@ public final class KyoriConstants /** * Represents a Chat Bound for a plugin. *
- * This is a convenience method so you are not required to dependency inject - * your plugin instance any time that you need a Bound. + * This is a convenience method so you are not required to dependency inject your plugin instance any time that you + * need a Bound. * * @param pluginClass The plugin class to get the plugin instance from. * @return A ChatType.Bound instance for the plugin. @@ -55,11 +54,10 @@ public final class KyoriConstants } /** - * Represents a Chat Bound for a player. - * Chat bounds are required for sending messages to players. + * Represents a Chat Bound for a player. Chat bounds are required for sending messages to players. *
- * The chat bound is a representation of a validated chat signature, - * which is tied directly to the user's account name. In our case, this is the player's name. + * The chat bound is a representation of a validated chat signature, which is tied directly to the user's account + * name. In our case, this is the player's name. * * @param player The player to get the bound for. * @return A ChatType.Bound instance for the player. @@ -72,8 +70,8 @@ public final class KyoriConstants /** * Represents a Chat Bound for the console. *
- * The chat bound is a representation of a validated chat signature, - * which is tied directly to the user's account name. In our case, this is the player's name. + * The chat bound is a representation of a validated chat signature, which is tied directly to the user's account + * name. In our case, this is the player's name. * * @param sender The console to get the bound for. * @return A ChatType.Bound instance for the console. diff --git a/Patchwork/src/main/java/me/totalfreedom/utils/logging/FreedomLogger.java b/Patchwork/src/main/java/me/totalfreedom/utils/logging/FreedomLogger.java index 2a093c4..97cec23 100644 --- a/Patchwork/src/main/java/me/totalfreedom/utils/logging/FreedomLogger.java +++ b/Patchwork/src/main/java/me/totalfreedom/utils/logging/FreedomLogger.java @@ -33,8 +33,7 @@ public class FreedomLogger implements Audience } /** - * This method allows you to log a message to the console, - * while also returning a Component that could be used to + * This method allows you to log a message to the console, while also returning a Component that could be used to * message a player. * * @param message The message to send. @@ -47,8 +46,7 @@ public class FreedomLogger implements Audience } /** - * This method allows you to log a component to the console, - * while also returning a String representation of the + * This method allows you to log a component to the console, while also returning a String representation of the * component * * @param component The component to send. @@ -71,7 +69,9 @@ public class FreedomLogger implements Audience logger.info(plainText); return plainText; - } /** + } + + /** * This method allows you to log a message to the console. * * @param message The message to send. @@ -104,9 +104,8 @@ public class FreedomLogger implements Audience } /** - * This method logs an error message to the console. - * It is highly recommended to deconstruct the stack trace and pass it - * in a more readable format to this method. + * This method logs an error message to the console. It is highly recommended to deconstruct the stack trace and + * pass it in a more readable format to this method. * * @param message The message to send. */ @@ -126,11 +125,9 @@ public class FreedomLogger implements Audience } /** - * This method allows you to log an error message to the console, - * while also returning a Component that could be used to - * message a player. It is highly recommended that you deconstruct and limit - * the stack trace before passing it to this method, if you are intending to - * use it for player communication. + * This method allows you to log an error message to the console, while also returning a Component that could be + * used to message a player. It is highly recommended that you deconstruct and limit the stack trace before passing + * it to this method, if you are intending to use it for player communication. * * @param message The message to send. * @return A component representation of the message. @@ -142,9 +139,8 @@ public class FreedomLogger implements Audience } /** - * This method allows you to log an error component to the console, - * while also returning a String representation of the error - * component. + * This method allows you to log an error component to the console, while also returning a String representation of + * the error component. * * @param component The component to send. * @return A String representation of the component. @@ -169,10 +165,9 @@ public class FreedomLogger implements Audience } /** - * This method allows you to log a debug message to the console, - * while also returning a Component that could be used to - * message a player. This method will only log if debug mode is enabled. - * If debug mode is not enabled, this method will return an empty component. + * This method allows you to log a debug message to the console, while also returning a Component that could be used + * to message a player. This method will only log if debug mode is enabled. If debug mode is not enabled, this + * method will return an empty component. * * @param message The message to send. * @return A component representation of the message. @@ -188,8 +183,8 @@ public class FreedomLogger implements Audience } /** - * This method allows you to log a debug component to the console, - * while also returning a String representation of the debug component. + * This method allows you to log a debug component to the console, while also returning a String representation of + * the debug component. * * @param component The component to send. * @return A String representation of the message. @@ -204,8 +199,8 @@ public class FreedomLogger implements Audience } /** - * This method allows you to log a debug component to the console. - * This method will only log if debug mode is enabled. + * This method allows you to log a debug component to the console. This method will only log if debug mode is + * enabled. * * @param component The component to send. */ @@ -219,8 +214,8 @@ public class FreedomLogger implements Audience } /** - * This method allows you to log a debug message to the console. - * This method will only log if debug mode is enabled. + * This method allows you to log a debug message to the console. This method will only log if debug mode is + * enabled. * * @param message The message to send. */ @@ -231,8 +226,6 @@ public class FreedomLogger implements Audience } - - @Override public void sendMessage(@NotNull final ComponentLike message) { @@ -269,7 +262,7 @@ public class FreedomLogger implements Audience public void sendMessage(@NotNull final SignedMessage signedMessage, final ChatType.@NotNull Bound boundChatType) { this.info( - signedMessage.message()); // TODO: We might want to investigate whether this logs the ENTIRE message, + signedMessage.message()); // TODO: We might want to investigate whether this logs the ENTIRE message, // including unsigned & signed content, or only the signed part. This method was written in the assumption // that it provided all content. } diff --git a/README.md b/README.md index 1007c96..2b2bbba 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ Datura: - [ ] Permission Handling *(In Progress...)* - [ ] Permission Registration & Assignment *(In Progress...)* - [ ] SQL Data Handling *(In Progress...)* -- [ ] Configuration Implementations +- [ ] Configuration Implementations - [ ] User Data Implementations *(In Progress...)* - [x] Punishment Systems (e.x. Locker, Halter, Cager) @@ -101,7 +101,7 @@ Fossil: - [ ] Particle Implementation / Trails *(In Progress...)* - [ ] Command Implementations *(In Progress...)* - [ ] Implement a shop for the economy *(In Progress...)* -- [ ] Chat reaction / game system +- [ ] Chat reaction / game system - [ ] Jumppads Corvo: