This commit is contained in:
Paul Reilly 2023-06-09 21:11:36 -05:00
parent f459842eaf
commit bacf6e8818
58 changed files with 565 additions and 668 deletions

View File

@ -156,13 +156,12 @@ public class FreedomGroup implements Group
}
/**
* 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.
* <p>
* 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.

View File

@ -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
{

View File

@ -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
* <p>
* <code>{@link Location#distanceSquared(Location)} * {@link Math#pow(double, double)}</code>
* <p>

View File

@ -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
@ -71,8 +70,7 @@ public class MySQL implements SQL
statement.setObject(i + 1, args[i]);
}
return statement;
}
catch (SQLException ex)
} catch (SQLException ex)
{
throw new CompletionException("Failed to prepare statement: "
+ query + "\n", ex);
@ -89,8 +87,7 @@ 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);
@ -109,8 +106,7 @@ public class MySQL implements SQL
try
{
return statement.executeQuery();
}
catch (SQLException ex)
} catch (SQLException ex)
{
throw new CompletionException(
"Failed to retrieve a result set from query: "
@ -130,8 +126,7 @@ public class MySQL implements SQL
try
{
return statement.executeUpdate();
}
catch (SQLException ex)
} catch (SQLException ex)
{
throw new CompletionException("Failed to execute update: "
+ query + "\n", ex);
@ -150,8 +145,7 @@ public class MySQL implements SQL
try
{
return statement.execute();
}
catch (SQLException ex)
} catch (SQLException ex)
{
throw new CompletionException("Failed to execute statement: "
+ query + "\n", ex);
@ -192,8 +186,7 @@ public class MySQL implements SQL
{
return resultSet.getObject(column, type);
}
}
catch (SQLException ex)
} catch (SQLException ex)
{
throw new CompletionException(
"Failed to retrieve column: " + column + " from table: " + table + " " +

View File

@ -7,18 +7,16 @@ import me.totalfreedom.economy.EconomicEntityData;
* Represents the server's economy holder.
* <br>
* <br>
* 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.
* <br>
* <br>
* 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.
* <br>
* <br>
* 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.

View File

@ -94,8 +94,7 @@ public class SimpleUserData implements UserData
return new SimpleUserData(u, username, user, group, playtime,
canInteract, balance, transactionsFrozen);
}
}
catch (SQLException ex)
} catch (SQLException ex)
{
final String sb = "An error occurred while trying to retrieve user data for" +
" UUID " +

View File

@ -32,7 +32,8 @@ public class PadHolder implements Listener
*/
public PadHolder()
{
Bukkit.getPluginManager().registerEvents(this, CommonsBase
Bukkit.getPluginManager()
.registerEvents(this, CommonsBase
.getInstance()
.getRegistrations()
.getModuleRegistry()
@ -41,8 +42,8 @@ public class PadHolder implements Listener
}
/**
* 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.
*/
@ -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);
}
/**

View File

@ -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,
/**

View File

@ -38,18 +38,21 @@ public final class CopyCatReaction extends Reaction
@Override
public void display(final Audience audience)
{
final BossBar bossBar = BossBarDisplay.builder().setName(getRandomCharacterString())
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())));
}

View File

@ -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 <T> The type of object to serialize
*/
public interface Serializable<T>
{
/**
* 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<T>
/**
* Deserialize an object from a Serialized string..
*
* @param serializedObject The serialized object
* @return The deserialized object
*/

View File

@ -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
*/

View File

@ -10,9 +10,9 @@ import me.totalfreedom.data.UserRegistry;
/**
* This class is a holder for each registry in the data package.
* <br>
* 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
{

View File

@ -25,8 +25,8 @@ import java.util.Set;
/**
* This class is acts as a delegate between our custom command implementation and the Bukkit API.
* <br>
* 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.
* <span color=#ff0000>
* <br>
* This class is not thread-safe.

View File

@ -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
{

View File

@ -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

View File

@ -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.
*/

View File

@ -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}.
* <br>
* 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

View File

@ -17,6 +17,7 @@ public class ConfigRegistry
/**
* Registers a configuration.
*
* @param name The name of the configuration.
* @param configuration The 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.
*/

View File

@ -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.
* @return The event provider.
* @param <T> The event type.
* @return The event provider.
*/
public <T extends FEvent> EventProvider<T> getEvent(final Class<T> clazz)
{

View File

@ -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.
*/

View File

@ -21,9 +21,8 @@ import java.util.List;
* <br>
* <br>
* <b>Tasks</b> 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)}.
* <br>
* <br>
* <b>ServiceSubscriptions</b> and <b>TaskSubscriptions</b> can both be easily obtained using the
@ -59,16 +58,14 @@ public class ServiceTaskRegistry
/**
* Starts all services registered with the registry.
* <br>
* This method should be <i>avoided</i>, due to the fact that <b><i>modules may have registered their services
* after this method
* has already been called.</i></b> In this case, it is preferred to start
* each service using {@link #startService(Class)}.
* This method should be <i>avoided</i>, due to the fact that <b><i>modules may have registered their services after
* this method has already been called.</i></b> In this case, it is preferred to start each service using
* {@link #startService(Class)}.
* <br>
* However, <i><b>Patchwork calls this method when the server is starting up</b></i>, 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 <b>AND</b> starting them <b>POST WORLD</b>, 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 <b>AND</b> starting them <b>POST WORLD</b>, 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.
* <br>
* This method should be <i>avoided</i>, due to the fact that <b><i>modules may have registered their tasks after
* this method
* has already been called.</i></b> In this case, it is preferred to start
* each task
* using {@link #startTask(Class)}.
* this method has already been called.</i></b> In this case, it is preferred to start each task using
* {@link #startTask(Class)}.
* <br>
* However, <i><b>Patchwork calls this method when the server is starting up</b></i>, 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 <b>AND</b> starting them <b>POST WORLD</b>, 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 <b>AND</b> starting them <b>POST WORLD</b>, 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.
* <br>
* This method should be <i>avoided</i>, due to the fact that <b><i>modules should be handling their own
* registrations</i></b>.
* It is preferred to use {@link #stopService(Class)} for each service you would like to stop.
* registrations</i></b>. It is preferred to use {@link #stopService(Class)} for each service you would like to
* stop.
* <br>
* However, <b><i>Patchwork calls this method when the server is shutting down</i></b>, or when Patchwork is being
* disabled, as Patchwork is the central resource manager for registered tasks and services.
* Unless you are <b>modifying service states while the server is running</b>, 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
* <b>modifying service states while the server is running</b>, 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.
* <br>
* This method should be <i>avoided</i>, due to the fact that <b><i>modules should be handling their own
* registrations</i></b>.
* It is preferred to use {@link #stopTask(Class)} for each task you would like to stop.
* registrations</i></b>. It is preferred to use {@link #stopTask(Class)} for each task you would like to stop.
* <br>
* However, <b><i>Patchwork calls this method when the server is shutting down</i></b>, or when Patchwork is being
* disabled, as Patchwork is the central resource manager for registered tasks and services.
* Unless you are <b>modifying task states while the server is running</b>, 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
* <b>modifying task states while the server is running</b>, you do not need to worry about disabling or
* unregistering your tasks.
*/
public void stopAllTasks()
{

View File

@ -71,6 +71,7 @@ public class UserRegistry
/**
* Registers the given {@link User} and {@link UserData} objects.
*
* @param user The {@link User} to register.
* @param userData The {@link UserData} to register.
*/
@ -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<User, UserData> getUserDataMap()

View File

@ -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()

View File

@ -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);

View File

@ -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:
* <ul>
* <li>Empty main title</li>
* <li>Empty subtitle</li>
@ -108,6 +111,7 @@ public class TitleDisplay
* <li>Default fade out time</li>
* <li>Default display duration</li>
* </ul>
*
* @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,6 +137,7 @@ public class TitleDisplay
/**
* Sets 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,6 +174,7 @@ public class TitleDisplay
/**
* Sets 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,6 +235,7 @@ public class TitleDisplay
/**
* Builds the {@link Title} with the given parameters.
*
* @return The built {@link Title}.
*/
public Title build()

View File

@ -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}
*/

View File

@ -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);
}

View File

@ -3,7 +3,8 @@ package me.totalfreedom.economy;
/**
* A transaction that can be changed.
* <p>
* 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
{

View File

@ -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;

View File

@ -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.
* <p>
* For example, the note G is represented as 1/24, or 0.042. The note C is represented as 6/24, or 0.25.
* <p>
* 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();
}
}

View File

@ -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.
* <p>
* For example, the note G is represented as 1/24, or 0.042. The note C is represented as 6/24, or 0.25.
* <p>
* 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);
}
}

View File

@ -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.
* <br>
* 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.
* <br>
* 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.
* <br>
* However, this method will also be null if the particle type is not colorable.
*

View File

@ -1,6 +1,5 @@
package me.totalfreedom.particle;
import org.bukkit.Note;
import org.bukkit.Particle;
public enum TrailType

View File

@ -36,23 +36,20 @@ public class ContextProvider
private @Nullable Boolean toBoolean(final String string)
{
try
{
return Boolean.parseBoolean(string);
}
catch (Exception ignored)
{
// 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)
{
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;
}

View File

@ -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.
*/

View File

@ -52,8 +52,8 @@ 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 delay How long the task should wait before executing.
@ -64,22 +64,22 @@ 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 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.
@ -87,13 +87,13 @@ public abstract class Task extends BukkitRunnable
*/
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.
@ -101,7 +101,7 @@ public abstract class Task extends BukkitRunnable
*/
protected Task(final String name, final long delay, final Duration interval)
{
this(name, delay, DurationTools.getTickedSeconds(interval));
this(name, delay, DurationTools.getTicks(interval));
}
/**

View File

@ -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 <T> The type of task.
*/

View File

@ -10,11 +10,13 @@ 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()
@ -27,8 +29,10 @@ public class ReactionTask extends Task implements Listener {
}
@Override
public void run() {
if (isCancelled()) {
public void run()
{
if (isCancelled())
{
}
final BossBarTimer timer = new BossBarTimer(bossBarDisplay, reaction.getReactionDuration());
@ -36,9 +40,11 @@ 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()

View File

@ -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;
}

View File

@ -1,12 +1,12 @@
package me.totalfreedom.utils.container;
public final class Tuple<A, B, C>
public final class Trio<A, B, C>
{
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;

View File

@ -1,12 +1,12 @@
package me.totalfreedom.utils.container;
public class UnaryTuple<T>
public class UnaryTrio<T>
{
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;

View File

@ -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

View File

@ -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.
* <br>
* 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.
* <br>
* 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.
* <br>
* 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.
* <br>
* 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.
* <br>
* 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.

View File

@ -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)
{