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

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

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.
* @param <T> The event type.
* @return The event provider.
* @param <T> The event type.
*/
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,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<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,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)
);
}
}

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;
@ -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: <item>,<amount>

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

@ -18,16 +18,16 @@ public class ContextProvider
public <T> T fromString(final String string, final Class<T> 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;
}

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,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));
}
/**

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

View File

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

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

@ -34,7 +34,7 @@ public final class InterpolationUtils
}
private static Set<Color> 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<TextColor> base = new LinkedHashSet<>();
final Set<TextColor> redToOrange = componentRGBGradient(length, NamedTextColor.RED,
NamedTextColor.GOLD, InterpolationUtils::linear);
NamedTextColor.GOLD, InterpolationUtils::linear);
final Set<TextColor> orangeToYellow = componentRGBGradient(length, NamedTextColor.GOLD,
NamedTextColor.YELLOW, InterpolationUtils::linear);
NamedTextColor.YELLOW, InterpolationUtils::linear);
final Set<TextColor> yellowToGreen = componentRGBGradient(length, NamedTextColor.YELLOW,
NamedTextColor.GREEN, InterpolationUtils::linear);
NamedTextColor.GREEN, InterpolationUtils::linear);
final Set<TextColor> greenToBlue = componentRGBGradient(length, NamedTextColor.GREEN,
NamedTextColor.BLUE, InterpolationUtils::linear);
NamedTextColor.BLUE, InterpolationUtils::linear);
final Set<TextColor> blueToPurple = componentRGBGradient(length, NamedTextColor.BLUE,
NamedTextColor.LIGHT_PURPLE,
InterpolationUtils::linear);
NamedTextColor.LIGHT_PURPLE,
InterpolationUtils::linear);
final Set<TextColor> 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<TextColor> 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<Color> 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);

View File

@ -21,7 +21,7 @@ public class ShapeUtils
}
public List<Location> 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<Location> lset = new LinkedList<>();

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

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

View File

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

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