mirror of
https://github.com/SimplexDevelopment/FreedomNetworkSuite.git
synced 2024-11-22 08:54:59 +00:00
Merge branch 'Displayable-GUI-API' into videos-stupid-contributions
This commit is contained in:
commit
6edf320bf7
@ -34,7 +34,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@Info(name = "cage", description = "Cage a player.",
|
@Info(name = "cage", description = "Cage a player.",
|
||||||
usage = "/cage <player> <on|off> [material]")
|
usage = "/cage <player> <on|off> [material]")
|
||||||
@Permissive(perm = "datura.cage")
|
@Permissive(perm = "datura.cage")
|
||||||
public class CageCommand extends Commander
|
public class CageCommand extends Commander
|
||||||
{
|
{
|
||||||
@ -52,12 +52,14 @@ public class CageCommand extends Commander
|
|||||||
{
|
{
|
||||||
case "on" ->
|
case "on" ->
|
||||||
{
|
{
|
||||||
((Datura) getPlugin()).getCager().cagePlayer(player.getUniqueId());
|
((Datura) getPlugin()).getCager()
|
||||||
|
.cagePlayer(player.getUniqueId());
|
||||||
sender.sendPlainMessage("Caged " + player.getName() + ".");
|
sender.sendPlainMessage("Caged " + player.getName() + ".");
|
||||||
}
|
}
|
||||||
case "off" ->
|
case "off" ->
|
||||||
{
|
{
|
||||||
((Datura) getPlugin()).getCager().uncagePlayer(player.getUniqueId());
|
((Datura) getPlugin()).getCager()
|
||||||
|
.uncagePlayer(player.getUniqueId());
|
||||||
sender.sendPlainMessage("Liberated " + player.getName() + ".");
|
sender.sendPlainMessage("Liberated " + player.getName() + ".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -65,18 +67,21 @@ public class CageCommand extends Commander
|
|||||||
|
|
||||||
@Completion(args = {"[material]"}, index = 2)
|
@Completion(args = {"[material]"}, index = 2)
|
||||||
@Subcommand(permission = "datura.cage.custom", args = {Player.class, String.class, Material.class})
|
@Subcommand(permission = "datura.cage.custom", args = {Player.class, String.class, Material.class})
|
||||||
public void cagePlayer(final CommandSender sender, final Player player, final String string, final Material material)
|
public void cagePlayer(final CommandSender sender, final Player player, final String string,
|
||||||
|
final Material material)
|
||||||
{
|
{
|
||||||
switch (string.toLowerCase())
|
switch (string.toLowerCase())
|
||||||
{
|
{
|
||||||
case "on" ->
|
case "on" ->
|
||||||
{
|
{
|
||||||
((Datura) getPlugin()).getCager().cagePlayer(player.getUniqueId(), material);
|
((Datura) getPlugin()).getCager()
|
||||||
|
.cagePlayer(player.getUniqueId(), material);
|
||||||
sender.sendPlainMessage("Caged " + player.getName() + ".");
|
sender.sendPlainMessage("Caged " + player.getName() + ".");
|
||||||
}
|
}
|
||||||
case "off" ->
|
case "off" ->
|
||||||
{
|
{
|
||||||
((Datura) getPlugin()).getCager().uncagePlayer(player.getUniqueId());
|
((Datura) getPlugin()).getCager()
|
||||||
|
.uncagePlayer(player.getUniqueId());
|
||||||
sender.sendPlainMessage("Liberated " + player.getName() + ".");
|
sender.sendPlainMessage("Liberated " + player.getName() + ".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,8 +31,7 @@ public final class LockerCommand extends Commander
|
|||||||
.lock(player);
|
.lock(player);
|
||||||
|
|
||||||
sender.sendPlainMessage("Locked " + player.getName() + ".");
|
sender.sendPlainMessage("Locked " + player.getName() + ".");
|
||||||
}
|
} else if (string.equalsIgnoreCase("off"))
|
||||||
else if (string.equalsIgnoreCase("off"))
|
|
||||||
{
|
{
|
||||||
((Datura) getPlugin()).getLocker()
|
((Datura) getPlugin()).getLocker()
|
||||||
.unlock(player);
|
.unlock(player);
|
||||||
|
@ -16,9 +16,9 @@ record PermissionNode(String key,
|
|||||||
public Permission bukkit()
|
public Permission bukkit()
|
||||||
{
|
{
|
||||||
return new Permission(key(),
|
return new Permission(key(),
|
||||||
value()
|
value()
|
||||||
? PermissionDefault.TRUE
|
? PermissionDefault.TRUE
|
||||||
: PermissionDefault.FALSE);
|
: PermissionDefault.FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -62,42 +62,42 @@ public class MySQL implements SQL
|
|||||||
{
|
{
|
||||||
return getConnection()
|
return getConnection()
|
||||||
.thenApplyAsync(connection ->
|
.thenApplyAsync(connection ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final PreparedStatement statement = connection.prepareStatement(query);
|
final PreparedStatement statement = connection.prepareStatement(query);
|
||||||
for (int i = 0; i < args.length; i++)
|
for (int i = 0; i < args.length; i++)
|
||||||
{
|
{
|
||||||
statement.setObject(i + 1, args[i]);
|
statement.setObject(i + 1, args[i]);
|
||||||
}
|
}
|
||||||
return statement;
|
return statement;
|
||||||
}
|
}
|
||||||
catch (SQLException ex)
|
catch (SQLException ex)
|
||||||
{
|
{
|
||||||
throw new CompletionException("Failed to prepare statement: "
|
throw new CompletionException("Failed to prepare statement: "
|
||||||
+ query + "\n", ex);
|
+ query + "\n", ex);
|
||||||
}
|
}
|
||||||
}, CommonsBase.getInstance()
|
}, CommonsBase.getInstance()
|
||||||
.getExecutor()
|
.getExecutor()
|
||||||
.getAsync());
|
.getAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
private CompletableFuture<Connection> getConnection()
|
private CompletableFuture<Connection> getConnection()
|
||||||
{
|
{
|
||||||
return CompletableFuture.supplyAsync(() ->
|
return CompletableFuture.supplyAsync(() ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return DriverManager.getConnection(url.toString());
|
return DriverManager.getConnection(url.toString());
|
||||||
}
|
}
|
||||||
catch (SQLException ex)
|
catch (SQLException ex)
|
||||||
{
|
{
|
||||||
throw new CompletionException("Failed to connect to the database: "
|
throw new CompletionException("Failed to connect to the database: "
|
||||||
+ url.toString() + "\n", ex);
|
+ url.toString() + "\n", ex);
|
||||||
}
|
}
|
||||||
}, CommonsBase.getInstance()
|
}, CommonsBase.getInstance()
|
||||||
.getExecutor()
|
.getExecutor()
|
||||||
.getAsync());
|
.getAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -105,20 +105,20 @@ public class MySQL implements SQL
|
|||||||
{
|
{
|
||||||
return prepareStatement(query, args)
|
return prepareStatement(query, args)
|
||||||
.thenApplyAsync(statement ->
|
.thenApplyAsync(statement ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return statement.executeQuery();
|
return statement.executeQuery();
|
||||||
}
|
}
|
||||||
catch (SQLException ex)
|
catch (SQLException ex)
|
||||||
{
|
{
|
||||||
throw new CompletionException(
|
throw new CompletionException(
|
||||||
"Failed to retrieve a result set from query: "
|
"Failed to retrieve a result set from query: "
|
||||||
+ query + "\n", ex);
|
+ query + "\n", ex);
|
||||||
}
|
}
|
||||||
}, CommonsBase.getInstance()
|
}, CommonsBase.getInstance()
|
||||||
.getExecutor()
|
.getExecutor()
|
||||||
.getAsync());
|
.getAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -126,19 +126,19 @@ public class MySQL implements SQL
|
|||||||
{
|
{
|
||||||
return prepareStatement(query, args)
|
return prepareStatement(query, args)
|
||||||
.thenApplyAsync(statement ->
|
.thenApplyAsync(statement ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return statement.executeUpdate();
|
return statement.executeUpdate();
|
||||||
}
|
}
|
||||||
catch (SQLException ex)
|
catch (SQLException ex)
|
||||||
{
|
{
|
||||||
throw new CompletionException("Failed to execute update: "
|
throw new CompletionException("Failed to execute update: "
|
||||||
+ query + "\n", ex);
|
+ query + "\n", ex);
|
||||||
}
|
}
|
||||||
}, CommonsBase.getInstance()
|
}, CommonsBase.getInstance()
|
||||||
.getExecutor()
|
.getExecutor()
|
||||||
.getAsync());
|
.getAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -146,19 +146,19 @@ public class MySQL implements SQL
|
|||||||
{
|
{
|
||||||
return prepareStatement(query, args)
|
return prepareStatement(query, args)
|
||||||
.thenApplyAsync(statement ->
|
.thenApplyAsync(statement ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return statement.execute();
|
return statement.execute();
|
||||||
}
|
}
|
||||||
catch (SQLException ex)
|
catch (SQLException ex)
|
||||||
{
|
{
|
||||||
throw new CompletionException("Failed to execute statement: "
|
throw new CompletionException("Failed to execute statement: "
|
||||||
+ query + "\n", ex);
|
+ query + "\n", ex);
|
||||||
}
|
}
|
||||||
}, CommonsBase.getInstance()
|
}, CommonsBase.getInstance()
|
||||||
.getExecutor()
|
.getExecutor()
|
||||||
.getAsync());
|
.getAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -185,25 +185,25 @@ public class MySQL implements SQL
|
|||||||
{
|
{
|
||||||
return executeQuery("SELECT ? FROM ? WHERE ? = ?", column, table, key, identity.getId())
|
return executeQuery("SELECT ? FROM ? WHERE ? = ?", column, table, key, identity.getId())
|
||||||
.thenApplyAsync(resultSet ->
|
.thenApplyAsync(resultSet ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (resultSet.next())
|
if (resultSet.next())
|
||||||
{
|
{
|
||||||
return resultSet.getObject(column, type);
|
return resultSet.getObject(column, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (SQLException ex)
|
catch (SQLException ex)
|
||||||
{
|
{
|
||||||
throw new CompletionException(
|
throw new CompletionException(
|
||||||
"Failed to retrieve column: " + column + " from table: " + table + " " +
|
"Failed to retrieve column: " + column + " from table: " + table + " " +
|
||||||
"where primary key: " + key + " is equal to: " + identity.getId() + "\n",
|
"where primary key: " + key + " is equal to: " + identity.getId() + "\n",
|
||||||
ex);
|
ex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}, CommonsBase.getInstance()
|
}, CommonsBase.getInstance()
|
||||||
.getExecutor()
|
.getExecutor()
|
||||||
.getAsync());
|
.getAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompletableFuture<Boolean> updateColumn(final String table, final String column, final Object value,
|
public CompletableFuture<Boolean> updateColumn(final String table, final String column, final Object value,
|
||||||
|
@ -26,9 +26,7 @@ public class SimpleUserData implements UserData
|
|||||||
private final UserDataUpdateEvent event = new UserDataUpdateEvent(this);
|
private final UserDataUpdateEvent event = new UserDataUpdateEvent(this);
|
||||||
private Group group;
|
private Group group;
|
||||||
private long playtime;
|
private long playtime;
|
||||||
private boolean frozen;
|
|
||||||
private boolean canInteract;
|
private boolean canInteract;
|
||||||
private boolean caged;
|
|
||||||
private AtomicLong balance;
|
private AtomicLong balance;
|
||||||
private boolean transactionsFrozen;
|
private boolean transactionsFrozen;
|
||||||
|
|
||||||
@ -49,7 +47,6 @@ public class SimpleUserData implements UserData
|
|||||||
final User user,
|
final User user,
|
||||||
final Group group,
|
final Group group,
|
||||||
final long playtime,
|
final long playtime,
|
||||||
final boolean frozen,
|
|
||||||
final boolean canInteract,
|
final boolean canInteract,
|
||||||
final long balance,
|
final long balance,
|
||||||
final boolean transactionsFrozen)
|
final boolean transactionsFrozen)
|
||||||
@ -59,7 +56,6 @@ public class SimpleUserData implements UserData
|
|||||||
this.user = user;
|
this.user = user;
|
||||||
this.group = group;
|
this.group = group;
|
||||||
this.playtime = playtime;
|
this.playtime = playtime;
|
||||||
this.frozen = frozen;
|
|
||||||
this.canInteract = canInteract;
|
this.canInteract = canInteract;
|
||||||
this.balance = new AtomicLong(balance);
|
this.balance = new AtomicLong(balance);
|
||||||
this.transactionsFrozen = transactionsFrozen;
|
this.transactionsFrozen = transactionsFrozen;
|
||||||
@ -69,61 +65,58 @@ public class SimpleUserData implements UserData
|
|||||||
{
|
{
|
||||||
return sql.executeQuery("SELECT * FROM users WHERE UUID = ?", uuid)
|
return sql.executeQuery("SELECT * FROM users WHERE UUID = ?", uuid)
|
||||||
.thenApplyAsync(result ->
|
.thenApplyAsync(result ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (result.next())
|
if (result.next())
|
||||||
{
|
{
|
||||||
final String g = result.getString("group");
|
final String g = result.getString("group");
|
||||||
|
|
||||||
final UUID u = UUID.fromString(uuid);
|
final UUID u = UUID.fromString(uuid);
|
||||||
final String username = result.getString("username");
|
final String username = result.getString("username");
|
||||||
|
|
||||||
final Player player = Bukkit.getPlayer(u);
|
final Player player = Bukkit.getPlayer(u);
|
||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException("Player should be online but they are not!");
|
||||||
"Player should be online but they are not!");
|
|
||||||
|
|
||||||
final User user = new FreedomUser(player);
|
final User user = new FreedomUser(player);
|
||||||
final Group group = CommonsBase.getInstance()
|
final Group group = CommonsBase.getInstance()
|
||||||
.getRegistrations()
|
.getRegistrations()
|
||||||
.getGroupRegistry()
|
.getGroupRegistry()
|
||||||
.getGroup(g);
|
.getGroup(g);
|
||||||
|
|
||||||
final long playtime = result.getLong("playtime");
|
final long playtime = result.getLong("playtime");
|
||||||
final boolean frozen = result.getBoolean("frozen");
|
final boolean canInteract = result.getBoolean("canInteract");
|
||||||
final boolean canInteract = result.getBoolean("canInteract");
|
final long balance = result.getLong("balance");
|
||||||
final boolean caged = result.getBoolean("caged");
|
final boolean transactionsFrozen = result.getBoolean("transactionsFrozen");
|
||||||
final long balance = result.getLong("balance");
|
|
||||||
final boolean transactionsFrozen = result.getBoolean(
|
|
||||||
"transactionsFrozen");
|
|
||||||
return new SimpleUserData(u, username, user, group, playtime, frozen,
|
|
||||||
canInteract, balance, transactionsFrozen);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException ex)
|
|
||||||
{
|
|
||||||
final String sb = "An error occurred while trying to retrieve user data for" +
|
|
||||||
" UUID " +
|
|
||||||
uuid +
|
|
||||||
" from the database." +
|
|
||||||
"\nCaused by: " +
|
|
||||||
ExceptionUtils.getRootCauseMessage(ex) +
|
|
||||||
"\nStack trace: " +
|
|
||||||
ExceptionUtils.getStackTrace(ex);
|
|
||||||
|
|
||||||
FreedomLogger.getLogger("Datura")
|
return new SimpleUserData(u, username, user, group, playtime,
|
||||||
.error(sb);
|
canInteract, balance, transactionsFrozen);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException ex)
|
||||||
|
{
|
||||||
|
final String sb = "An error occurred while trying to retrieve user data for" +
|
||||||
|
" UUID " +
|
||||||
|
uuid +
|
||||||
|
" from the database." +
|
||||||
|
"\nCaused by: " +
|
||||||
|
ExceptionUtils.getRootCauseMessage(ex) +
|
||||||
|
"\nStack trace: " +
|
||||||
|
ExceptionUtils.getStackTrace(ex);
|
||||||
|
|
||||||
final Player player = Bukkit.getPlayer(UUID.fromString(uuid));
|
FreedomLogger.getLogger("Datura")
|
||||||
if (player == null) throw new IllegalStateException(
|
.error(sb);
|
||||||
"Player should be online but they are not!");
|
}
|
||||||
return new SimpleUserData(player);
|
|
||||||
}, CommonsBase.getInstance()
|
final Player player = Bukkit.getPlayer(UUID.fromString(uuid));
|
||||||
.getExecutor()
|
if (player == null) throw new IllegalStateException("Player should be online but they are not!");
|
||||||
.getAsync())
|
|
||||||
|
return new SimpleUserData(player);
|
||||||
|
}, CommonsBase.getInstance()
|
||||||
|
.getExecutor()
|
||||||
|
.getAsync())
|
||||||
.join();
|
.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,19 +178,6 @@ public class SimpleUserData implements UserData
|
|||||||
this.playtime = 0L;
|
this.playtime = 0L;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isFrozen()
|
|
||||||
{
|
|
||||||
return frozen;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setFrozen(final boolean frozen)
|
|
||||||
{
|
|
||||||
event.ping();
|
|
||||||
this.frozen = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canInteract()
|
public boolean canInteract()
|
||||||
{
|
{
|
||||||
|
@ -46,13 +46,17 @@ public class CakeCommand extends Commander
|
|||||||
@Base
|
@Base
|
||||||
public void broadcastCake(final CommandSender sender)
|
public void broadcastCake(final CommandSender sender)
|
||||||
{
|
{
|
||||||
Bukkit.broadcast(FreedomMiniMessage.deserialize(true, "<rainbow>But there's no sense crying over every mistake. You just keep on trying till you run out of cake.</rainbow>"));
|
Bukkit.broadcast(FreedomMiniMessage.deserialize(true,
|
||||||
|
"<rainbow>But there's no sense crying over every mistake. You just keep on trying till you run out of " +
|
||||||
|
"cake.</rainbow>"));
|
||||||
|
|
||||||
final ItemStack stack = new ItemStack(Material.CAKE, 1);
|
final ItemStack stack = new ItemStack(Material.CAKE, 1);
|
||||||
final ItemMeta meta = stack.getItemMeta();
|
final ItemMeta meta = stack.getItemMeta();
|
||||||
meta.displayName(FreedomMiniMessage.deserialize(true, "<dark_gray>The <white>Lie"));
|
meta.displayName(FreedomMiniMessage.deserialize(true, "<dark_gray>The <white>Lie"));
|
||||||
stack.setItemMeta(meta);
|
stack.setItemMeta(meta);
|
||||||
|
|
||||||
Bukkit.getOnlinePlayers().forEach(player -> player.getInventory().addItem(stack));
|
Bukkit.getOnlinePlayers()
|
||||||
|
.forEach(player -> player.getInventory()
|
||||||
|
.addItem(stack));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ public class SimpleTransactionResult implements TransactionResult
|
|||||||
{
|
{
|
||||||
public static final TransactionResult SUCCESSFUL = new SimpleTransactionResult("Successful transaction.", true);
|
public static final TransactionResult SUCCESSFUL = new SimpleTransactionResult("Successful transaction.", true);
|
||||||
public static final TransactionResult UNAUTHORIZED = new SimpleTransactionResult("Unauthorized transaction.",
|
public static final TransactionResult UNAUTHORIZED = new SimpleTransactionResult("Unauthorized transaction.",
|
||||||
false);
|
false);
|
||||||
public static final TransactionResult AMOUNT_TOO_SMALL = new SimpleTransactionResult(
|
public static final TransactionResult AMOUNT_TOO_SMALL = new SimpleTransactionResult(
|
||||||
"Transaction balance too small.", false);
|
"Transaction balance too small.", false);
|
||||||
public static final TransactionResult INSUFFICIENT_FUNDS = new SimpleTransactionResult(
|
public static final TransactionResult INSUFFICIENT_FUNDS = new SimpleTransactionResult(
|
||||||
|
@ -20,8 +20,10 @@ public final class ClownfishItem extends ShopItem
|
|||||||
{
|
{
|
||||||
if (target == null) return;
|
if (target == null) return;
|
||||||
|
|
||||||
final Location location = user.getEyeLocation().clone();
|
final Location location = user.getEyeLocation()
|
||||||
final Vector vector = location.getDirection().multiply(2);
|
.clone();
|
||||||
|
final Vector vector = location.getDirection()
|
||||||
|
.multiply(2);
|
||||||
|
|
||||||
target.setVelocity(vector);
|
target.setVelocity(vector);
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ public final class BasicTrail extends SimpleTrail
|
|||||||
final Location location = player.getLocation()
|
final Location location = player.getLocation()
|
||||||
.clone()
|
.clone()
|
||||||
.subtract(0, 1, 0);
|
.subtract(0, 1, 0);
|
||||||
location.getWorld().spawnParticle(particle, location, 1, 0.0, 0.5, 0.0, options);
|
location.getWorld()
|
||||||
|
.spawnParticle(particle, location, 1, 0.0, 0.5, 0.0, options);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,6 @@ public final class FlameTrail extends SimpleTrail
|
|||||||
final Vector direction = location.getDirection();
|
final Vector direction = location.getDirection();
|
||||||
location.getWorld()
|
location.getWorld()
|
||||||
.spawnParticle(getTrailType().getType(), location, 0, direction.getX(), direction.getY(),
|
.spawnParticle(getTrailType().getType(), location, 0, direction.getX(), direction.getY(),
|
||||||
direction.getZ(), 0.1);
|
direction.getZ(), 0.1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ public final class HeartTrail extends SimpleTrail
|
|||||||
final Location location = player.getLocation()
|
final Location location = player.getLocation()
|
||||||
.clone()
|
.clone()
|
||||||
.subtract(0, 1, 0);
|
.subtract(0, 1, 0);
|
||||||
location.getWorld().spawnParticle(getTrailType().getType(), location, 1, 0.0, 0.5, 0.0);
|
location.getWorld()
|
||||||
|
.spawnParticle(getTrailType().getType(), location, 1, 0.0, 0.5, 0.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,8 @@ public abstract class SimpleTrail implements Trail
|
|||||||
private Set<Color> gradientColor = null;
|
private Set<Color> gradientColor = null;
|
||||||
private boolean active = false;
|
private boolean active = false;
|
||||||
|
|
||||||
protected SimpleTrail(final Player player, final TrailType trailType) {
|
protected SimpleTrail(final Player player, final TrailType trailType)
|
||||||
|
{
|
||||||
this.associatedPlayerUUID = player.getUniqueId();
|
this.associatedPlayerUUID = player.getUniqueId();
|
||||||
this.trailType = trailType;
|
this.trailType = trailType;
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ public final class StrobeTrail extends SimpleTrail
|
|||||||
final Location location = player.getLocation()
|
final Location location = player.getLocation()
|
||||||
.clone()
|
.clone()
|
||||||
.subtract(0, 1, 0);
|
.subtract(0, 1, 0);
|
||||||
location.getWorld().spawnParticle(getTrailType().getType(), location, 1, 0.0, 0.5, 0.0, dustTransition);
|
location.getWorld()
|
||||||
|
.spawnParticle(getTrailType().getType(), location, 1, 0.0, 0.5, 0.0, dustTransition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,8 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
public final class TrailProvider
|
public final class TrailProvider
|
||||||
{
|
{
|
||||||
public BasicTrail basicTrail(final Player player) {
|
public BasicTrail basicTrail(final Player player)
|
||||||
|
{
|
||||||
return new BasicTrail(player);
|
return new BasicTrail(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,9 +20,10 @@ public class CommonsBase extends JavaPlugin
|
|||||||
@Override
|
@Override
|
||||||
public void onDisable()
|
public void onDisable()
|
||||||
{
|
{
|
||||||
Bukkit.getScheduler().runTaskLater(this, () -> getRegistrations()
|
Bukkit.getScheduler()
|
||||||
.getServiceRegistry()
|
.runTaskLater(this, () -> getRegistrations()
|
||||||
.stopAllServices(), 1L);
|
.getServiceRegistry()
|
||||||
|
.stopAllServices(), 1L);
|
||||||
|
|
||||||
getRegistrations().getServiceRegistry()
|
getRegistrations().getServiceRegistry()
|
||||||
.unregisterService(EventBus.class);
|
.unregisterService(EventBus.class);
|
||||||
|
@ -1,15 +1,11 @@
|
|||||||
package me.totalfreedom.config;
|
package me.totalfreedom.config;
|
||||||
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface Configuration
|
public interface Configuration
|
||||||
{
|
{
|
||||||
YamlConfiguration asYaml();
|
|
||||||
|
|
||||||
void save() throws IOException;
|
void save() throws IOException;
|
||||||
|
|
||||||
void load() throws IOException;
|
void load() throws IOException;
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
package me.totalfreedom.config;
|
||||||
|
|
||||||
|
public final class YamlWrapper
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -76,13 +76,13 @@ public abstract class AbstractMenu
|
|||||||
{
|
{
|
||||||
Bukkit.getOnlinePlayers()
|
Bukkit.getOnlinePlayers()
|
||||||
.forEach(player ->
|
.forEach(player ->
|
||||||
{
|
{
|
||||||
if (openInvs.get(player.getUniqueId())
|
if (openInvs.get(player.getUniqueId())
|
||||||
.equals(getDisplayableUUID()))
|
.equals(getDisplayableUUID()))
|
||||||
{
|
{
|
||||||
close(player);
|
close(player);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
invByUUID.remove(getDisplayableUUID());
|
invByUUID.remove(getDisplayableUUID());
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,9 @@ public final class Displayable implements Inventory, InventoryHolder
|
|||||||
|
|
||||||
// If the size is not a multiple of nine, find the difference to the next highest multiple of 9 and make up
|
// If the size is not a multiple of nine, find the difference to the next highest multiple of 9 and make up
|
||||||
// the difference.
|
// the difference.
|
||||||
this.size = (size % 9 == 0) ? size : size + (9 - size % 9);
|
this.size = (size % 9 == 0)
|
||||||
|
? size
|
||||||
|
: size + (9 - size % 9);
|
||||||
|
|
||||||
this.contents = new ItemStack[size];
|
this.contents = new ItemStack[size];
|
||||||
}
|
}
|
||||||
@ -152,7 +154,7 @@ public final class Displayable implements Inventory, InventoryHolder
|
|||||||
if (remainingAmount < item.getAmount())
|
if (remainingAmount < item.getAmount())
|
||||||
{
|
{
|
||||||
removedItems.put(removedItems.size(),
|
removedItems.put(removedItems.size(),
|
||||||
new ItemStack(item.getType(), item.getAmount() - remainingAmount));
|
new ItemStack(item.getType(), item.getAmount() - remainingAmount));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,14 +25,14 @@ class SubscriptionBox<T extends FEvent>
|
|||||||
public void tick()
|
public void tick()
|
||||||
{
|
{
|
||||||
subscriptions.forEach(s ->
|
subscriptions.forEach(s ->
|
||||||
{
|
{
|
||||||
if (!s.event()
|
if (!s.event()
|
||||||
.shouldCall()) return;
|
.shouldCall()) return;
|
||||||
|
|
||||||
s.callback()
|
s.callback()
|
||||||
.call(s.event());
|
.call(s.event());
|
||||||
s.event()
|
s.event()
|
||||||
.reset();
|
.reset();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,8 @@ package me.totalfreedom.particle;
|
|||||||
import me.totalfreedom.api.Interpolator;
|
import me.totalfreedom.api.Interpolator;
|
||||||
import me.totalfreedom.utils.InterpolationUtils;
|
import me.totalfreedom.utils.InterpolationUtils;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.Particle;
|
import org.bukkit.Particle;
|
||||||
import org.bukkit.World;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package me.totalfreedom.provider;
|
|||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -21,6 +22,7 @@ public class ContextProvider
|
|||||||
toInt(string),
|
toInt(string),
|
||||||
toLong(string),
|
toLong(string),
|
||||||
toFloat(string),
|
toFloat(string),
|
||||||
|
toMaterial(string),
|
||||||
toPlayer(string),
|
toPlayer(string),
|
||||||
toWorld(string),
|
toWorld(string),
|
||||||
toLocation(string),
|
toLocation(string),
|
||||||
@ -92,6 +94,11 @@ public class ContextProvider
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private @Nullable Material toMaterial(final String string)
|
||||||
|
{
|
||||||
|
return Material.matchMaterial(string);
|
||||||
|
}
|
||||||
|
|
||||||
private @Nullable Player toPlayer(final String string)
|
private @Nullable Player toPlayer(final String string)
|
||||||
{
|
{
|
||||||
return Bukkit.getPlayer(string);
|
return Bukkit.getPlayer(string);
|
||||||
|
@ -3,6 +3,7 @@ package me.totalfreedom.service;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
@ -15,7 +16,7 @@ public final class ServiceSubscription<T extends Service>
|
|||||||
|
|
||||||
private boolean isActive = false;
|
private boolean isActive = false;
|
||||||
|
|
||||||
ServiceSubscription(final JavaPlugin plugin, final T service, final boolean async)
|
ServiceSubscription(@NotNull final JavaPlugin plugin, @NotNull final T service, final boolean async)
|
||||||
{
|
{
|
||||||
this.service = service;
|
this.service = service;
|
||||||
this.async = async;
|
this.async = async;
|
||||||
@ -52,12 +53,8 @@ public final class ServiceSubscription<T extends Service>
|
|||||||
public void stop()
|
public void stop()
|
||||||
{
|
{
|
||||||
this.isActive = false;
|
this.isActive = false;
|
||||||
Bukkit.getScheduler().cancelTask(this.getServiceId());
|
Bukkit.getScheduler()
|
||||||
}
|
.cancelTask(this.getServiceId());
|
||||||
|
|
||||||
public T getService()
|
|
||||||
{
|
|
||||||
return service;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getServiceId()
|
public int getServiceId()
|
||||||
@ -65,6 +62,12 @@ public final class ServiceSubscription<T extends Service>
|
|||||||
return serviceId;
|
return serviceId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public T getService()
|
||||||
|
{
|
||||||
|
return service;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isAsync()
|
public boolean isAsync()
|
||||||
{
|
{
|
||||||
return async;
|
return async;
|
||||||
|
@ -22,10 +22,10 @@ public interface SQLProperties
|
|||||||
default String toURLPlain()
|
default String toURLPlain()
|
||||||
{
|
{
|
||||||
return String.format("jdbc:%s://%s:%s/%s",
|
return String.format("jdbc:%s://%s:%s/%s",
|
||||||
this.getDriver(),
|
this.getDriver(),
|
||||||
this.getHost(),
|
this.getHost(),
|
||||||
this.getPort(),
|
this.getPort(),
|
||||||
this.getDatabase());
|
this.getDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
String getDriver();
|
String getDriver();
|
||||||
@ -39,12 +39,12 @@ public interface SQLProperties
|
|||||||
default String toURLWithLogin()
|
default String toURLWithLogin()
|
||||||
{
|
{
|
||||||
return String.format("jdbc:%s://%s:%s/%s?user=%s&password=%s",
|
return String.format("jdbc:%s://%s:%s/%s?user=%s&password=%s",
|
||||||
this.getDriver(),
|
this.getDriver(),
|
||||||
this.getHost(),
|
this.getHost(),
|
||||||
this.getPort(),
|
this.getPort(),
|
||||||
this.getDatabase(),
|
this.getDatabase(),
|
||||||
this.getUsername(),
|
this.getUsername(),
|
||||||
this.getPassword());
|
this.getPassword());
|
||||||
}
|
}
|
||||||
|
|
||||||
String getUsername();
|
String getUsername();
|
||||||
|
@ -56,14 +56,6 @@ public class FreedomLogger implements Audience
|
|||||||
public String infoComponent(final Supplier<Component> component)
|
public String infoComponent(final Supplier<Component> component)
|
||||||
{
|
{
|
||||||
return this.infoComponent(component.get());
|
return this.infoComponent(component.get());
|
||||||
} /**
|
|
||||||
* This method allows you to log a message to the console.
|
|
||||||
*
|
|
||||||
* @param message The message to send.
|
|
||||||
*/
|
|
||||||
public void info(final String message)
|
|
||||||
{
|
|
||||||
logger.info(message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,6 +70,14 @@ public class FreedomLogger implements Audience
|
|||||||
|
|
||||||
logger.info(plainText);
|
logger.info(plainText);
|
||||||
return plainText;
|
return plainText;
|
||||||
|
} /**
|
||||||
|
* This method allows you to log a message to the console.
|
||||||
|
*
|
||||||
|
* @param message The message to send.
|
||||||
|
*/
|
||||||
|
public void info(final String message)
|
||||||
|
{
|
||||||
|
logger.info(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -32,46 +32,54 @@ import net.kyori.adventure.text.minimessage.tag.standard.StandardTags;
|
|||||||
*/
|
*/
|
||||||
public class FreedomMiniMessage
|
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)
|
||||||
|
))
|
||||||
|
.build();
|
||||||
|
|
||||||
private FreedomMiniMessage()
|
private FreedomMiniMessage()
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException("Instantiation of a static utility class is not supported.");
|
throw new UnsupportedOperationException("Instantiation of a static utility class is not supported.");
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|
||||||
)).build();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deserializes an input string using an instance of MiniMessage that is either safe (resolves only a specific set of tags)
|
* Deserializes an input string using an instance of MiniMessage that is either safe (resolves only a specific
|
||||||
* or unsafe (resolves all tags).
|
* set of tags)
|
||||||
* @param safe Whether to use a safe instance of MiniMessage
|
* or unsafe (resolves all tags).
|
||||||
* @param input An input string formatted with MiniMessage's input
|
*
|
||||||
* @param placeholders Custom placeholders to use when processing the input
|
* @param safe Whether to use a safe instance of MiniMessage
|
||||||
* @return A processed Component
|
* @param input An input string formatted with MiniMessage's input
|
||||||
|
* @param placeholders Custom placeholders to use when processing the input
|
||||||
|
* @return A processed Component
|
||||||
*/
|
*/
|
||||||
public static Component deserialize(boolean safe, String input, TagResolver... placeholders)
|
public static Component deserialize(boolean safe, String input, TagResolver... placeholders)
|
||||||
{
|
{
|
||||||
return (safe ? FreedomMiniMessage.safe : unsafe).deserialize(input, placeholders);
|
return (safe
|
||||||
|
? FreedomMiniMessage.safe
|
||||||
|
: unsafe).deserialize(input, placeholders);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializes an input component using an instance of MiniMessage that is either safe (resolves only a specific set
|
* Serializes an input component using an instance of MiniMessage that is either safe (resolves only a specific set
|
||||||
* of tags) or unsafe (resolves all tags).
|
* of tags) or unsafe (resolves all tags).
|
||||||
* @param safe Whether to use a safe instance of MiniMessage
|
*
|
||||||
* @param input An already processed component
|
* @param safe Whether to use a safe instance of MiniMessage
|
||||||
* @return A processed Component
|
* @param input An already processed component
|
||||||
|
* @return A processed Component
|
||||||
*/
|
*/
|
||||||
public static String serialize(boolean safe, Component input)
|
public static String serialize(boolean safe, Component input)
|
||||||
{
|
{
|
||||||
return (safe ? FreedomMiniMessage.safe : unsafe).serialize(input);
|
return (safe
|
||||||
|
? FreedomMiniMessage.safe
|
||||||
|
: unsafe).serialize(input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,18 +69,18 @@ public final class InterpolationUtils
|
|||||||
{
|
{
|
||||||
final LinkedHashSet<TextColor> base = new LinkedHashSet<>();
|
final LinkedHashSet<TextColor> base = new LinkedHashSet<>();
|
||||||
final Set<TextColor> redToOrange = componentRGBGradient(length, NamedTextColor.RED,
|
final Set<TextColor> redToOrange = componentRGBGradient(length, NamedTextColor.RED,
|
||||||
NamedTextColor.GOLD, InterpolationUtils::linear);
|
NamedTextColor.GOLD, InterpolationUtils::linear);
|
||||||
final Set<TextColor> orangeToYellow = componentRGBGradient(length, NamedTextColor.GOLD,
|
final Set<TextColor> orangeToYellow = componentRGBGradient(length, NamedTextColor.GOLD,
|
||||||
NamedTextColor.YELLOW, InterpolationUtils::linear);
|
NamedTextColor.YELLOW, InterpolationUtils::linear);
|
||||||
final Set<TextColor> yellowToGreen = componentRGBGradient(length, NamedTextColor.YELLOW,
|
final Set<TextColor> yellowToGreen = componentRGBGradient(length, NamedTextColor.YELLOW,
|
||||||
NamedTextColor.GREEN, InterpolationUtils::linear);
|
NamedTextColor.GREEN, InterpolationUtils::linear);
|
||||||
final Set<TextColor> greenToBlue = componentRGBGradient(length, NamedTextColor.GREEN,
|
final Set<TextColor> greenToBlue = componentRGBGradient(length, NamedTextColor.GREEN,
|
||||||
NamedTextColor.BLUE, InterpolationUtils::linear);
|
NamedTextColor.BLUE, InterpolationUtils::linear);
|
||||||
final Set<TextColor> blueToPurple = componentRGBGradient(length, NamedTextColor.BLUE,
|
final Set<TextColor> blueToPurple = componentRGBGradient(length, NamedTextColor.BLUE,
|
||||||
NamedTextColor.LIGHT_PURPLE,
|
NamedTextColor.LIGHT_PURPLE,
|
||||||
InterpolationUtils::linear);
|
InterpolationUtils::linear);
|
||||||
final Set<TextColor> purpleToRed = componentRGBGradient(length, TextColor.color(75, 0, 130),
|
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(redToOrange);
|
||||||
base.addAll(orangeToYellow);
|
base.addAll(orangeToYellow);
|
||||||
base.addAll(yellowToGreen);
|
base.addAll(yellowToGreen);
|
||||||
|
Loading…
Reference in New Issue
Block a user