Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55fc6d762f | ||
|
|
b9c5eb2b4e | ||
|
|
393d0031c7 |
@@ -135,14 +135,6 @@ public interface Eco {
|
||||
@NotNull
|
||||
Logger createLogger(@NotNull EcoPlugin plugin);
|
||||
|
||||
/**
|
||||
* Get NOOP logger.
|
||||
*
|
||||
* @return The logger.
|
||||
*/
|
||||
@NotNull
|
||||
Logger getNOOPLogger();
|
||||
|
||||
/**
|
||||
* Create a PAPI integration.
|
||||
*
|
||||
@@ -178,7 +170,7 @@ public interface Eco {
|
||||
* @return The PluginCommandBase implementation
|
||||
*/
|
||||
@NotNull
|
||||
PluginCommandBase createPluginCommand(@NotNull PluginCommandBase parentDelegate,
|
||||
PluginCommandBase createPluginCommand(@NotNull CommandBase parentDelegate,
|
||||
@NotNull EcoPlugin plugin,
|
||||
@NotNull String name,
|
||||
@NotNull String permission,
|
||||
|
||||
@@ -126,7 +126,7 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist
|
||||
/**
|
||||
* The logger for the plugin.
|
||||
*/
|
||||
private Logger logger;
|
||||
private final Logger logger;
|
||||
|
||||
/**
|
||||
* If the server is running an outdated version of the plugin.
|
||||
@@ -425,18 +425,7 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist
|
||||
|
||||
this.loadPluginCommands().forEach(PluginCommand::register);
|
||||
|
||||
// Run preliminary reload to resolve load order issues
|
||||
this.getScheduler().runLater(() -> {
|
||||
Logger before = this.getLogger();
|
||||
// Temporary silence logger.
|
||||
this.logger = Eco.get().getNOOPLogger();
|
||||
|
||||
this.reload(false);
|
||||
|
||||
this.logger = before;
|
||||
}, 1);
|
||||
|
||||
this.getScheduler().runLater(this::afterLoad, 2);
|
||||
this.getScheduler().runLater(this::afterLoad, 1);
|
||||
|
||||
if (this.isSupportingExtensions()) {
|
||||
this.getExtensionLoader().loadExtensions();
|
||||
@@ -612,21 +601,9 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist
|
||||
* Reload the plugin.
|
||||
*/
|
||||
public final void reload() {
|
||||
this.reload(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reload the plugin.
|
||||
*
|
||||
* @param cancelTasks If tasks should be cancelled.
|
||||
*/
|
||||
public final void reload(final boolean cancelTasks) {
|
||||
this.getConfigHandler().updateConfigs();
|
||||
|
||||
if (cancelTasks) {
|
||||
this.getScheduler().cancelAll();
|
||||
}
|
||||
|
||||
this.getScheduler().cancelAll();
|
||||
this.getConfigHandler().callUpdate();
|
||||
this.getConfigHandler().callUpdate(); // Call twice to fix issues
|
||||
|
||||
@@ -1173,16 +1150,6 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike, Regist
|
||||
return this.getMetadataValueFactory().create(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get if all {@link com.willfp.eco.core.data.keys.PersistentDataKey}'s for this
|
||||
* plugin should be saved locally (via data.yml.) even if eco is using a database.
|
||||
*
|
||||
* @return If using local storage.
|
||||
*/
|
||||
public boolean isUsingLocalStorage() {
|
||||
return this.configYml.isUsingLocalStorage();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public final String getID() {
|
||||
|
||||
@@ -26,7 +26,7 @@ public class Prerequisite {
|
||||
*/
|
||||
public static final Prerequisite HAS_PAPER = new Prerequisite(
|
||||
() -> ClassUtils.exists("com.destroystokyo.paper.event.block.BeaconEffectEvent"),
|
||||
"Requires server to be running paper (or a fork)"
|
||||
"Requires server to be running paper"
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -69,7 +69,7 @@ public class Prerequisite {
|
||||
@Deprecated(since = "6.49.0", forRemoval = true)
|
||||
public static final Prerequisite HAS_BUNGEECORD = new Prerequisite(
|
||||
() -> ClassUtils.exists("net.md_5.bungee.api.event.ServerConnectedEvent"),
|
||||
"Requires server to be running BungeeCord (or a fork)"
|
||||
"Requires server to be running BungeeCord"
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -80,7 +80,15 @@ public class Prerequisite {
|
||||
@Deprecated(since = "6.49.0", forRemoval = true)
|
||||
public static final Prerequisite HAS_VELOCITY = new Prerequisite(
|
||||
() -> ClassUtils.exists("com.velocitypowered.api.event.player.ServerConnectedEvent"),
|
||||
"Requires server to be running Velocity (or a fork)"
|
||||
"Requires server to be running Velocity"
|
||||
);
|
||||
|
||||
/**
|
||||
* Requires the server to be running an implementation of Folia.
|
||||
*/
|
||||
public static final Prerequisite HAS_FOLIA = new Prerequisite(
|
||||
() -> ClassUtils.exists("io.papermc.paper.threadedregions.scheduler.RegionisedScheduler"),
|
||||
"Requires server to be running Folia!"
|
||||
);
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,11 +9,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
* Default plugin config.yml.
|
||||
*/
|
||||
public class ConfigYml extends BaseConfig {
|
||||
/**
|
||||
* The use local storage key.
|
||||
*/
|
||||
public static final String KEY_USES_LOCAL_STORAGE = "use-local-storage";
|
||||
|
||||
/**
|
||||
* Config.yml.
|
||||
*
|
||||
@@ -57,13 +52,4 @@ public class ConfigYml extends BaseConfig {
|
||||
final boolean removeUnused) {
|
||||
super(name, plugin, removeUnused, ConfigType.YAML);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get if the plugin is using local storage.
|
||||
*
|
||||
* @return The prefix.
|
||||
*/
|
||||
public boolean isUsingLocalStorage() {
|
||||
return this.getBool(KEY_USES_LOCAL_STORAGE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import com.willfp.eco.core.config.interfaces.Config;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@@ -50,11 +49,6 @@ public final class PersistentDataKeyType<T> {
|
||||
*/
|
||||
public static final PersistentDataKeyType<Config> CONFIG = new PersistentDataKeyType<>("CONFIG");
|
||||
|
||||
/**
|
||||
* Big Decimal.
|
||||
*/
|
||||
public static final PersistentDataKeyType<BigDecimal> BIG_DECIMAL = new PersistentDataKeyType<>("BIG_DECIMAL");
|
||||
|
||||
/**
|
||||
* The name of the key type.
|
||||
*/
|
||||
|
||||
@@ -142,26 +142,6 @@ public interface MenuBuilder extends PageBuilder {
|
||||
return this.onRender((player, menu) -> menu.setState(player, Page.MAX_PAGE_KEY, pages.apply(player)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the default page.
|
||||
*
|
||||
* @param page The page.
|
||||
* @return The builder.
|
||||
*/
|
||||
default MenuBuilder defaultPage(final int page) {
|
||||
return this.maxPages(player -> page);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the default page dynamically for a player.
|
||||
*
|
||||
* @param page The default page.
|
||||
* @return The builder.
|
||||
*/
|
||||
default MenuBuilder defaultPage(@NotNull final Function<Player, Integer> page) {
|
||||
return this.onOpen((player, menu) -> menu.setState(player, Page.PAGE_KEY, page.apply(player)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a menu close handler.
|
||||
*
|
||||
|
||||
@@ -76,15 +76,6 @@ public abstract class CustomSlot implements Slot {
|
||||
return delegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRenderOnClick() {
|
||||
if (delegate == null) {
|
||||
throw new IllegalStateException("Custom Slot was not initialized!");
|
||||
}
|
||||
|
||||
return delegate.shouldRenderOnClick();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int getRows() {
|
||||
return Slot.super.getRows();
|
||||
|
||||
@@ -92,15 +92,6 @@ public interface Slot extends GUIComponent {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the slot should re-render the menu if clicked.
|
||||
*
|
||||
* @return If the slot should re-render.
|
||||
*/
|
||||
default boolean shouldRenderOnClick() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
default int getRows() {
|
||||
return 1;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.willfp.eco.core.items;
|
||||
|
||||
import com.willfp.eco.core.Eco;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -54,7 +55,7 @@ public class CustomItem implements TestableItem {
|
||||
*/
|
||||
Eco.get().getEcoPlugin().getScheduler().runLater(() -> {
|
||||
if (!matches(getItem())) {
|
||||
Eco.get().getEcoPlugin().getLogger().severe("Item with key " + key + " is invalid!");
|
||||
Bukkit.getLogger().severe("Item with key " + key + " is invalid!");
|
||||
}
|
||||
}, 1);
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ public class DefaultMap<K, V> implements Map<K, V> {
|
||||
*/
|
||||
@NotNull
|
||||
public static <K, K1, V> DefaultMap<K, Map<K1, V>> createNestedMap() {
|
||||
return new DefaultMap<>(HashMap::new);
|
||||
return new DefaultMap<>(new HashMap<>());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -163,6 +163,6 @@ public class DefaultMap<K, V> implements Map<K, V> {
|
||||
*/
|
||||
@NotNull
|
||||
public static <K, K1, V> DefaultMap<K, ListMap<K1, V>> createNestedListMap() {
|
||||
return new DefaultMap<>(ListMap::new);
|
||||
return new DefaultMap<>(new ListMap<>());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.willfp.eco.core.items.Items;
|
||||
import com.willfp.eco.core.recipe.recipes.CraftingRecipe;
|
||||
import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe;
|
||||
import com.willfp.eco.util.NamespacedKeyUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -126,8 +127,8 @@ public final class Recipes {
|
||||
}
|
||||
|
||||
if (builder.isAir()) {
|
||||
plugin.getLogger().warning("Crafting recipe " + plugin.getID() + ":" + key + " consists only");
|
||||
plugin.getLogger().warning("of air or invalid items! It will not be registered.");
|
||||
Bukkit.getLogger().warning("Crafting recipe " + plugin.getID() + ":" + key + " consists only");
|
||||
Bukkit.getLogger().warning("of air or invalid items! It will not be registered.");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -149,10 +149,6 @@ public class Registry<T extends Registrable> implements Iterable<T> {
|
||||
* @param locker The locker.
|
||||
*/
|
||||
public void lock(@Nullable final Object locker) {
|
||||
if (this.isLocked && this.locker != locker) {
|
||||
throw new IllegalArgumentException("Registry is already locked with a different locker!");
|
||||
}
|
||||
|
||||
this.locker = locker;
|
||||
isLocked = true;
|
||||
}
|
||||
@@ -166,8 +162,6 @@ public class Registry<T extends Registrable> implements Iterable<T> {
|
||||
if (this.locker != locker) {
|
||||
throw new IllegalArgumentException("Cannot unlock registry!");
|
||||
}
|
||||
|
||||
this.locker = null;
|
||||
isLocked = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.willfp.eco.core.scheduling;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -14,9 +16,13 @@ public interface Scheduler {
|
||||
* @param runnable The lambda to run.
|
||||
* @param ticksLater The amount of ticks to wait before execution.
|
||||
* @return The created {@link BukkitTask}.
|
||||
* @deprecated Does not work with Folia.
|
||||
*/
|
||||
BukkitTask runLater(@NotNull Runnable runnable,
|
||||
long ticksLater);
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default BukkitTask runLater(@NotNull Runnable runnable,
|
||||
long ticksLater) {
|
||||
return runLater(new Location(Bukkit.getWorlds().get(0), 0, 0, 0), (int) ticksLater, runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the task after a specified tick delay.
|
||||
@@ -26,10 +32,12 @@ public interface Scheduler {
|
||||
* @param runnable The lambda to run.
|
||||
* @param ticksLater The amount of ticks to wait before execution.
|
||||
* @return The created {@link BukkitTask}.
|
||||
* @deprecated Does not work with Folia.
|
||||
*/
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default BukkitTask runLater(long ticksLater,
|
||||
@NotNull Runnable runnable) {
|
||||
return runLater(runnable, ticksLater);
|
||||
return runLater(new Location(Bukkit.getWorlds().get(0), 0, 0, 0), (int) ticksLater, runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -39,10 +47,14 @@ public interface Scheduler {
|
||||
* @param delay The amount of ticks to wait before the first execution.
|
||||
* @param repeat The amount of ticks to wait between executions.
|
||||
* @return The created {@link BukkitTask}.
|
||||
* @deprecated Does not work with Folia.
|
||||
*/
|
||||
BukkitTask runTimer(@NotNull Runnable runnable,
|
||||
long delay,
|
||||
long repeat);
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default BukkitTask runTimer(@NotNull Runnable runnable,
|
||||
long delay,
|
||||
long repeat) {
|
||||
return runTimer(new Location(Bukkit.getWorlds().get(0), 0, 0, 0), (int) delay, (int) repeat, runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the task repeatedly on a timer.
|
||||
@@ -53,11 +65,13 @@ public interface Scheduler {
|
||||
* @param delay The amount of ticks to wait before the first execution.
|
||||
* @param repeat The amount of ticks to wait between executions.
|
||||
* @return The created {@link BukkitTask}.
|
||||
* @deprecated Does not work with Folia.
|
||||
*/
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default BukkitTask runTimer(long delay,
|
||||
long repeat,
|
||||
@NotNull Runnable runnable) {
|
||||
return runTimer(runnable, delay, repeat);
|
||||
return runTimer(new Location(Bukkit.getWorlds().get(0), 0, 0, 0), (int) delay, (int) repeat, runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -67,10 +81,14 @@ public interface Scheduler {
|
||||
* @param delay The amount of ticks to wait before the first execution.
|
||||
* @param repeat The amount of ticks to wait between executions.
|
||||
* @return The created {@link BukkitTask}.
|
||||
* @deprecated Does not work with Folia.
|
||||
*/
|
||||
BukkitTask runAsyncTimer(@NotNull Runnable runnable,
|
||||
long delay,
|
||||
long repeat);
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default BukkitTask runAsyncTimer(@NotNull Runnable runnable,
|
||||
long delay,
|
||||
long repeat) {
|
||||
return runTimerAsync((int) delay, (int) repeat, runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the task repeatedly and asynchronously on a timer.
|
||||
@@ -81,11 +99,13 @@ public interface Scheduler {
|
||||
* @param delay The amount of ticks to wait before the first execution.
|
||||
* @param repeat The amount of ticks to wait between executions.
|
||||
* @return The created {@link BukkitTask}.
|
||||
* @deprecated Does not work with Folia.
|
||||
*/
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default BukkitTask runAsyncTimer(long delay,
|
||||
long repeat,
|
||||
@NotNull Runnable runnable) {
|
||||
return runAsyncTimer(runnable, delay, repeat);
|
||||
return runTimerAsync((int) delay, (int) repeat, runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -93,28 +113,28 @@ public interface Scheduler {
|
||||
*
|
||||
* @param runnable The lambda to run.
|
||||
* @return The created {@link BukkitTask}.
|
||||
* @deprecated Does not work with Folia.
|
||||
*/
|
||||
BukkitTask run(@NotNull Runnable runnable);
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default BukkitTask run(@NotNull Runnable runnable) {
|
||||
return run(new Location(Bukkit.getWorlds().get(0), 0, 0, 0), runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the task asynchronously.
|
||||
*
|
||||
* @param runnable The lambda to run.
|
||||
* @return The created {@link BukkitTask}.
|
||||
*/
|
||||
BukkitTask runAsync(@NotNull Runnable runnable);
|
||||
|
||||
/**
|
||||
* Schedule the task to be ran repeatedly on a timer.
|
||||
* Schedule the task to be run repeatedly on a timer.
|
||||
*
|
||||
* @param runnable The lambda to run.
|
||||
* @param delay The amount of ticks to wait before the first execution.
|
||||
* @param repeat The amount of ticks to wait between executions.
|
||||
* @return The id of the task.
|
||||
* @deprecated Not needed.
|
||||
*/
|
||||
int syncRepeating(@NotNull Runnable runnable,
|
||||
long delay,
|
||||
long repeat);
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default int syncRepeating(@NotNull Runnable runnable,
|
||||
long delay,
|
||||
long repeat) {
|
||||
return runTimer(runnable, delay, repeat).getTaskId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedule the task to be ran repeatedly on a timer.
|
||||
@@ -125,15 +145,73 @@ public interface Scheduler {
|
||||
* @param delay The amount of ticks to wait before the first execution.
|
||||
* @param repeat The amount of ticks to wait between executions.
|
||||
* @return The id of the task.
|
||||
* @deprecated Not needed.
|
||||
*/
|
||||
@Deprecated(since = "6.53.0", forRemoval = true)
|
||||
default int syncRepeating(long delay,
|
||||
long repeat,
|
||||
@NotNull Runnable runnable) {
|
||||
return syncRepeating(runnable, delay, repeat);
|
||||
return runTimer(runnable, delay, repeat).getTaskId();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel all running tasks from the linked {@link EcoPlugin}.
|
||||
*/
|
||||
void cancelAll();
|
||||
|
||||
/**
|
||||
* Run a task asynchronously.
|
||||
*
|
||||
* @param task The lambda to run.
|
||||
* @return The created {@link BukkitTask}.
|
||||
*/
|
||||
BukkitTask runAsync(@NotNull Runnable task);
|
||||
|
||||
/**
|
||||
* Run a task.
|
||||
*
|
||||
* @param location The location.
|
||||
* @param task The task.
|
||||
* @return The created {@link BukkitTask}.
|
||||
*/
|
||||
BukkitTask run(@NotNull Location location,
|
||||
@NotNull Runnable task);
|
||||
|
||||
/**
|
||||
* Run a task after a delay.
|
||||
*
|
||||
* @param location The location.
|
||||
* @param ticksLater The delay.
|
||||
* @param task The task.
|
||||
* @return The created {@link BukkitTask}.
|
||||
*/
|
||||
BukkitTask runLater(@NotNull Location location,
|
||||
int ticksLater,
|
||||
@NotNull Runnable task);
|
||||
|
||||
/**
|
||||
* Run a task on a timer.
|
||||
*
|
||||
* @param location The location.
|
||||
* @param delay The delay.
|
||||
* @param repeat The repeat delay.
|
||||
* @param task The task.
|
||||
* @return The created {@link BukkitTask}.
|
||||
*/
|
||||
BukkitTask runTimer(@NotNull Location location,
|
||||
int delay,
|
||||
int repeat,
|
||||
@NotNull Runnable task);
|
||||
|
||||
/**
|
||||
* Run a task asynchronously on a timer.
|
||||
*
|
||||
* @param delay The delay.
|
||||
* @param repeat The repeat delay.
|
||||
* @param task The task.
|
||||
* @return The created {@link BukkitTask}.
|
||||
*/
|
||||
BukkitTask runTimerAsync(int delay,
|
||||
int repeat,
|
||||
@NotNull Runnable task);
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@ public final class NumberUtils {
|
||||
* @deprecated Use {@link #evaluateExpression(String, PlaceholderContext)} instead.
|
||||
*/
|
||||
@Deprecated(since = "6.56.0", forRemoval = true)
|
||||
@SuppressWarnings({"removal", "DeprecatedIsStillUsed"})
|
||||
@SuppressWarnings("removal")
|
||||
public static double evaluateExpression(@NotNull final String expression,
|
||||
@NotNull final com.willfp.eco.core.math.MathContext context) {
|
||||
return evaluateExpression(expression, context.toPlaceholderContext());
|
||||
|
||||
@@ -10,8 +10,6 @@ import com.willfp.eco.core.Eco;
|
||||
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager;
|
||||
import com.willfp.eco.core.placeholder.context.PlaceholderContext;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.JoinConfiguration;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
@@ -786,127 +784,6 @@ public final class StringUtils {
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Line wrap a list of strings while preserving formatting.
|
||||
*
|
||||
* @param input The input list.
|
||||
* @param lineLength The length of each line.
|
||||
* @return The wrapped list.
|
||||
*/
|
||||
@NotNull
|
||||
public static List<String> lineWrap(@NotNull final List<String> input,
|
||||
final int lineLength) {
|
||||
return lineWrap(input, lineLength, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Line wrap a list of strings while preserving formatting.
|
||||
*
|
||||
* @param input The input list.
|
||||
* @param lineLength The length of each line.
|
||||
* @param preserveMargin If the string has a margin, add it to the next line.
|
||||
* @return The wrapped list.
|
||||
*/
|
||||
@NotNull
|
||||
public static List<String> lineWrap(@NotNull final List<String> input,
|
||||
final int lineLength,
|
||||
final boolean preserveMargin) {
|
||||
return input.stream()
|
||||
.flatMap(line -> lineWrap(line, lineLength, preserveMargin).stream())
|
||||
.toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Line wrap a string while preserving formatting.
|
||||
*
|
||||
* @param input The input list.
|
||||
* @param lineLength The length of each line.
|
||||
* @return The wrapped list.
|
||||
*/
|
||||
@NotNull
|
||||
public static List<String> lineWrap(@NotNull final String input,
|
||||
final int lineLength) {
|
||||
return lineWrap(input, lineLength, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Line wrap a string while preserving formatting.
|
||||
*
|
||||
* @param input The input string.
|
||||
* @param lineLength The length of each line.
|
||||
* @param preserveMargin If the string has a margin, add it to the start of each line.
|
||||
* @return The wrapped string.
|
||||
*/
|
||||
@NotNull
|
||||
public static List<String> lineWrap(@NotNull final String input,
|
||||
final int lineLength,
|
||||
final boolean preserveMargin) {
|
||||
int margin = preserveMargin ? getMargin(input) : 0;
|
||||
TextComponent space = Component.text(" ");
|
||||
|
||||
Component asComponent = toComponent(input);
|
||||
|
||||
// The component contains the text as its children, so the child components
|
||||
// are accessed like this:
|
||||
List<TextComponent> children = new ArrayList<>();
|
||||
|
||||
if (asComponent instanceof TextComponent) {
|
||||
children.add((TextComponent) asComponent);
|
||||
}
|
||||
|
||||
for (Component child : asComponent.children()) {
|
||||
children.add((TextComponent) child);
|
||||
}
|
||||
|
||||
// Start by splitting the component into individual characters.
|
||||
List<TextComponent> letters = new ArrayList<>();
|
||||
for (TextComponent child : children) {
|
||||
for (char c : child.content().toCharArray()) {
|
||||
letters.add(Component.text(c).mergeStyle(child));
|
||||
}
|
||||
}
|
||||
|
||||
List<Component> lines = new ArrayList<>();
|
||||
List<TextComponent> currentLine = new ArrayList<>();
|
||||
boolean isFirstLine = true;
|
||||
|
||||
for (TextComponent letter : letters) {
|
||||
if (currentLine.size() > lineLength && letter.content().isBlank()) {
|
||||
lines.add(Component.join(JoinConfiguration.noSeparators(), currentLine));
|
||||
currentLine.clear();
|
||||
isFirstLine = false;
|
||||
} else {
|
||||
// Add margin if starting a new line.
|
||||
if (currentLine.isEmpty() && !isFirstLine) {
|
||||
if (preserveMargin) {
|
||||
for (int i = 0; i < margin; i++) {
|
||||
currentLine.add(space);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
currentLine.add(letter);
|
||||
}
|
||||
}
|
||||
|
||||
// Push last line.
|
||||
lines.add(Component.join(JoinConfiguration.noSeparators(), currentLine));
|
||||
|
||||
// Convert back to legacy strings.
|
||||
return lines.stream().map(StringUtils::toLegacy)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a string's margin.
|
||||
*
|
||||
* @param input The input string.
|
||||
* @return The margin.
|
||||
*/
|
||||
public static int getMargin(@NotNull final String input) {
|
||||
return input.indexOf(input.trim());
|
||||
}
|
||||
|
||||
/**
|
||||
* Options for formatting.
|
||||
*/
|
||||
|
||||
@@ -29,12 +29,6 @@ class MutableListMap<K : Any, V : Any> : ListMap<K, V>() {
|
||||
fun <K : Any, V : Any> defaultMap(defaultValue: V) =
|
||||
DefaultMap<K, V>(defaultValue)
|
||||
|
||||
/**
|
||||
* @see DefaultMap
|
||||
*/
|
||||
fun <K : Any, V : Any> defaultMap(defaultValue: () -> V) =
|
||||
DefaultMap<K, V>(defaultValue())
|
||||
|
||||
/**
|
||||
* @see ListMap
|
||||
*/
|
||||
@@ -51,6 +45,4 @@ fun <K : Any, K1 : Any, V : Any> nestedMap() =
|
||||
* @see DefaultMap.createNestedListMap
|
||||
*/
|
||||
fun <K : Any, K1 : Any, V : Any> nestedListMap() =
|
||||
DefaultMap<K, MutableListMap<K1, V>>() {
|
||||
MutableListMap()
|
||||
}
|
||||
DefaultMap<K, MutableListMap<K1, V>>(MutableListMap())
|
||||
|
||||
@@ -15,5 +15,5 @@ fun <T> create2DList(rows: Int, columns: Int): MutableList<MutableList<T>> =
|
||||
ListUtils.create2DList(rows, columns)
|
||||
|
||||
/** @see ListUtils.toSingletonList */
|
||||
fun <T> T?.toSingletonList(): List<T> =
|
||||
fun <T> T.toSingletonList(): List<T> =
|
||||
ListUtils.toSingletonList(this)
|
||||
|
||||
@@ -2,32 +2,6 @@
|
||||
|
||||
package com.willfp.eco.util
|
||||
|
||||
import com.willfp.eco.core.placeholder.context.PlaceholderContext
|
||||
|
||||
/** @see NumberUtils.toNumeral */
|
||||
fun Number.toNumeral(): String =
|
||||
NumberUtils.toNumeral(this.toInt())
|
||||
|
||||
/** @see NumberUtils.fromNumeral */
|
||||
fun String.parseNumeral(): Int =
|
||||
NumberUtils.fromNumeral(this)
|
||||
|
||||
/** @see NumberUtils.randInt */
|
||||
fun randInt(min: Int, max: Int) =
|
||||
NumberUtils.randInt(min, max)
|
||||
|
||||
/** @see NumberUtils.randFloat */
|
||||
fun randDouble(min: Double, max: Double) =
|
||||
NumberUtils.randFloat(min, max)
|
||||
|
||||
/** @see NumberUtils.randFloat */
|
||||
fun randFloat(min: Float, max: Float) =
|
||||
NumberUtils.randFloat(min.toDouble(), max.toDouble()).toFloat()
|
||||
|
||||
/** @see NumberUtils.evaluateExpression */
|
||||
fun evaluateExpression(expression: String) =
|
||||
NumberUtils.evaluateExpression(expression)
|
||||
|
||||
/** @see NumberUtils.evaluateExpression */
|
||||
fun evaluateExpression(expression: String, context: PlaceholderContext) =
|
||||
NumberUtils.evaluateExpression(expression, context)
|
||||
|
||||
@@ -69,15 +69,3 @@ fun Any?.toNiceString(): String =
|
||||
/** @see StringUtils.replaceQuickly */
|
||||
fun String.replaceQuickly(target: String, replacement: String): String =
|
||||
StringUtils.replaceQuickly(this, target, replacement)
|
||||
|
||||
/** @see StringUtils.lineWrap */
|
||||
fun String.lineWrap(width: Int, preserveMargin: Boolean = true): List<String> =
|
||||
StringUtils.lineWrap(this, width, preserveMargin)
|
||||
|
||||
/** @see StringUtils.lineWrap */
|
||||
fun List<String>.lineWrap(width: Int, preserveMargin: Boolean = true): List<String> =
|
||||
StringUtils.lineWrap(this, width, preserveMargin)
|
||||
|
||||
/** @see StringUtils.getMargin */
|
||||
val String.margin: Int
|
||||
get() = StringUtils.getMargin(this)
|
||||
|
||||
@@ -7,7 +7,7 @@ import com.willfp.eco.core.command.PluginCommandBase
|
||||
import org.bukkit.Bukkit
|
||||
|
||||
class EcoPluginCommand(
|
||||
private val parentDelegate: PluginCommandBase,
|
||||
parentDelegate: CommandBase,
|
||||
plugin: EcoPlugin,
|
||||
name: String,
|
||||
permission: String,
|
||||
@@ -39,9 +39,6 @@ class EcoPluginCommand(
|
||||
|
||||
Eco.get().syncCommands()
|
||||
}
|
||||
|
||||
override fun getAliases(): List<String> = parentDelegate.aliases
|
||||
override fun getDescription(): String? = parentDelegate.description
|
||||
}
|
||||
|
||||
class EcoSubcommand(
|
||||
|
||||
@@ -14,4 +14,4 @@ class EcoRunnableFactory(private val plugin: EcoPlugin) : RunnableFactory {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,4 @@ open class EcoSlot(
|
||||
}
|
||||
|
||||
override fun getActionableSlot(player: Player, menu: Menu): EcoSlot = this
|
||||
|
||||
override fun shouldRenderOnClick() = handlers.values.any { it.isNotEmpty() }
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.willfp.eco.core.gui.slot.functional.CaptiveFilter
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotHandler
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotProvider
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotUpdater
|
||||
import com.willfp.eco.core.map.listMap
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.inventory.ClickType
|
||||
import java.util.function.Predicate
|
||||
@@ -16,14 +15,14 @@ class EcoSlotBuilder(private val provider: SlotProvider) : SlotBuilder {
|
||||
private var captiveFromEmpty = false
|
||||
private var updater: SlotUpdater = SlotUpdater { player, menu, _ -> provider.provide(player, menu) }
|
||||
|
||||
private val handlers = listMap<ClickType, SlotHandler>()
|
||||
private val handlers = mutableMapOf<ClickType, MutableList<SlotHandler>>()
|
||||
|
||||
private var captiveFilter =
|
||||
CaptiveFilter { _, _, _ -> true }
|
||||
private var notCaptiveFor: (Player) -> Boolean = { _ -> false}
|
||||
|
||||
override fun onClick(type: ClickType, action: SlotHandler): SlotBuilder {
|
||||
handlers[type] += action
|
||||
handlers.computeIfAbsent(type) { mutableListOf() } += action
|
||||
return this
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
package com.willfp.eco.internal.logging
|
||||
|
||||
import java.util.logging.LogRecord
|
||||
import java.util.logging.Logger
|
||||
|
||||
object NOOPLogger : Logger("eco_noop", null as String?) {
|
||||
override fun log(record: LogRecord?) {
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
package com.willfp.eco.internal.scheduling
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.scheduling.Scheduler
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.scheduler.BukkitTask
|
||||
|
||||
class EcoScheduler(private val plugin: EcoPlugin) : Scheduler {
|
||||
override fun runLater(
|
||||
runnable: Runnable,
|
||||
ticksLater: Long
|
||||
): BukkitTask {
|
||||
return Bukkit.getScheduler().runTaskLater(plugin, runnable, ticksLater)
|
||||
}
|
||||
|
||||
override fun runTimer(
|
||||
runnable: Runnable,
|
||||
delay: Long,
|
||||
repeat: Long
|
||||
): BukkitTask {
|
||||
return Bukkit.getScheduler().runTaskTimer(plugin, runnable, delay, repeat)
|
||||
}
|
||||
|
||||
override fun runAsyncTimer(
|
||||
runnable: Runnable,
|
||||
delay: Long,
|
||||
repeat: Long
|
||||
): BukkitTask {
|
||||
return Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, runnable, delay, repeat)
|
||||
}
|
||||
|
||||
override fun run(runnable: Runnable): BukkitTask {
|
||||
return Bukkit.getScheduler().runTask(plugin, runnable)
|
||||
}
|
||||
|
||||
override fun runAsync(runnable: Runnable): BukkitTask {
|
||||
return Bukkit.getScheduler().runTaskAsynchronously(plugin, runnable)
|
||||
}
|
||||
|
||||
override fun syncRepeating(
|
||||
runnable: Runnable,
|
||||
delay: Long,
|
||||
repeat: Long
|
||||
): Int {
|
||||
return Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, runnable, delay, repeat)
|
||||
}
|
||||
|
||||
override fun cancelAll() {
|
||||
Bukkit.getScheduler().cancelTasks(plugin)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.willfp.eco.internal.scheduling
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.scheduling.Scheduler
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Location
|
||||
import org.bukkit.scheduler.BukkitTask
|
||||
|
||||
class EcoSchedulerSpigot(private val plugin: EcoPlugin) : Scheduler {
|
||||
override fun runLater(location: Location, ticksLater: Int, task: Runnable): BukkitTask {
|
||||
return Bukkit.getScheduler().runTaskLater(plugin, task, ticksLater.toLong())
|
||||
}
|
||||
|
||||
override fun runTimer(location: Location, delay: Int, repeat: Int, task: Runnable): BukkitTask {
|
||||
return Bukkit.getScheduler().runTaskTimer(plugin, task, delay.toLong(), repeat.toLong())
|
||||
}
|
||||
|
||||
override fun run(location: Location, task: Runnable): BukkitTask {
|
||||
return Bukkit.getScheduler().runTask(plugin, task)
|
||||
}
|
||||
|
||||
override fun runAsync(task: Runnable): BukkitTask {
|
||||
return Bukkit.getScheduler().runTaskAsynchronously(plugin, task)
|
||||
}
|
||||
|
||||
override fun runTimerAsync(delay: Int, repeat: Int, task: Runnable): BukkitTask {
|
||||
return Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, task, delay.toLong(), repeat.toLong())
|
||||
}
|
||||
|
||||
override fun cancelAll() {
|
||||
Bukkit.getScheduler().cancelTasks(plugin)
|
||||
}
|
||||
}
|
||||
6
eco-core/core-folia/build.gradle.kts
Normal file
6
eco-core/core-folia/build.gradle.kts
Normal file
@@ -0,0 +1,6 @@
|
||||
group = "com.willfp"
|
||||
version = rootProject.version
|
||||
|
||||
dependencies {
|
||||
compileOnly("dev.folia:folia-api:1.19.4-R0.1-SNAPSHOT")
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.willfp.eco.internal.scheduling
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.scheduling.Scheduler
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Location
|
||||
import org.bukkit.scheduler.BukkitTask
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class EcoSchedulerFolia(private val plugin: EcoPlugin) : Scheduler {
|
||||
override fun runLater(runnable: Runnable, ticksLater: Long): BukkitTask {
|
||||
Bukkit.getGlobalRegionScheduler().runDelayed(plugin, { runnable.run() }, ticksLater)
|
||||
}
|
||||
|
||||
override fun runLater(location: Location, ticksLater: Int, task: Runnable): BukkitTask {
|
||||
Bukkit.getRegionScheduler().runDelayed(plugin, location, { task.run() }, ticksLater.toLong())
|
||||
}
|
||||
|
||||
override fun runTimer(delay: Long, repeat: Long, runnable: Runnable): BukkitTask {
|
||||
Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin, { runnable.run() }, delay, repeat)
|
||||
}
|
||||
|
||||
override fun runTimer(location: Location, delay: Int, repeat: Int, task: Runnable): BukkitTask {
|
||||
Bukkit.getRegionScheduler().runAtFixedRate(plugin, location, { task.run() }, delay.toLong(), repeat.toLong())
|
||||
}
|
||||
|
||||
override fun run(runnable: Runnable): BukkitTask {
|
||||
Bukkit.getGlobalRegionScheduler().run(plugin) { runnable.run() }
|
||||
}
|
||||
|
||||
override fun run(location: Location, task: Runnable): BukkitTask {
|
||||
Bukkit.getRegionScheduler().run(plugin, location) { task.run() }
|
||||
}
|
||||
|
||||
override fun runAsync(task: Runnable): BukkitTask {
|
||||
Bukkit.getAsyncScheduler().runNow(plugin) { task.run() }
|
||||
}
|
||||
|
||||
override fun runTimerAsync(delay: Int, repeat: Int, task: Runnable): BukkitTask {
|
||||
Bukkit.getAsyncScheduler()
|
||||
.runAtFixedRate(plugin, { task.run() }, delay * 50L, repeat * 50L, TimeUnit.MILLISECONDS)
|
||||
}
|
||||
|
||||
override fun cancelAll() {
|
||||
Bukkit.getScheduler().cancelTasks(plugin)
|
||||
Bukkit.getAsyncScheduler().cancelTasks(plugin)
|
||||
Bukkit.getGlobalRegionScheduler().cancelTasks(plugin)
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.willfp.eco.core.Eco
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.PluginLike
|
||||
import com.willfp.eco.core.PluginProps
|
||||
import com.willfp.eco.core.Prerequisite
|
||||
import com.willfp.eco.core.command.CommandBase
|
||||
import com.willfp.eco.core.command.PluginCommandBase
|
||||
import com.willfp.eco.core.config.ConfigType
|
||||
@@ -37,10 +38,10 @@ import com.willfp.eco.internal.gui.menu.renderedInventory
|
||||
import com.willfp.eco.internal.gui.slot.EcoSlotBuilder
|
||||
import com.willfp.eco.internal.integrations.PAPIExpansion
|
||||
import com.willfp.eco.internal.logging.EcoLogger
|
||||
import com.willfp.eco.internal.logging.NOOPLogger
|
||||
import com.willfp.eco.internal.placeholder.PlaceholderParser
|
||||
import com.willfp.eco.internal.proxy.EcoProxyFactory
|
||||
import com.willfp.eco.internal.scheduling.EcoScheduler
|
||||
import com.willfp.eco.internal.scheduling.EcoSchedulerFolia
|
||||
import com.willfp.eco.internal.scheduling.EcoSchedulerSpigot
|
||||
import com.willfp.eco.internal.spigot.data.DataYml
|
||||
import com.willfp.eco.internal.spigot.data.KeyRegistry
|
||||
import com.willfp.eco.internal.spigot.data.ProfileHandler
|
||||
@@ -102,7 +103,7 @@ class EcoImpl : EcoSpigotPlugin(), Eco {
|
||||
)
|
||||
|
||||
override fun createScheduler(plugin: EcoPlugin) =
|
||||
EcoScheduler(plugin)
|
||||
if (Prerequisite.HAS_FOLIA.isMet) EcoSchedulerFolia(plugin) else EcoSchedulerSpigot(plugin)
|
||||
|
||||
override fun createEventManager(plugin: EcoPlugin) =
|
||||
EcoEventManager(plugin)
|
||||
@@ -126,9 +127,6 @@ class EcoImpl : EcoSpigotPlugin(), Eco {
|
||||
override fun createLogger(plugin: EcoPlugin) =
|
||||
EcoLogger(plugin)
|
||||
|
||||
override fun getNOOPLogger() =
|
||||
NOOPLogger
|
||||
|
||||
override fun createPAPIIntegration(plugin: EcoPlugin) {
|
||||
PAPIExpansion(plugin)
|
||||
}
|
||||
@@ -188,7 +186,7 @@ class EcoImpl : EcoSpigotPlugin(), Eco {
|
||||
}
|
||||
|
||||
override fun createPluginCommand(
|
||||
parentDelegate: PluginCommandBase,
|
||||
parentDelegate: CommandBase,
|
||||
plugin: EcoPlugin,
|
||||
name: String,
|
||||
permission: String,
|
||||
@@ -262,7 +260,6 @@ class EcoImpl : EcoSpigotPlugin(), Eco {
|
||||
|
||||
override fun addNewPlugin(plugin: EcoPlugin) {
|
||||
loadedEcoPlugins[plugin.name.lowercase()] = plugin
|
||||
loadedEcoPlugins[plugin.id] = plugin
|
||||
}
|
||||
|
||||
override fun getLoadedPlugins(): List<String> =
|
||||
|
||||
@@ -258,8 +258,7 @@ abstract class EcoSpigotPlugin : EcoPlugin() {
|
||||
profileHandler.migrateIfNeeded()
|
||||
}
|
||||
|
||||
ProfileSaver(this, profileHandler).startTicking()
|
||||
|
||||
ProfileSaver(this, profileHandler)
|
||||
this.scheduler.runTimer(
|
||||
{ getProxy(PacketHandlerProxy::class.java).clearDisplayFrames() },
|
||||
this.configYml.getInt("display-frame-ttl").toLong(),
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.willfp.eco.internal.spigot.data
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.data.PlayerProfile
|
||||
import com.willfp.eco.core.data.Profile
|
||||
import com.willfp.eco.core.data.ServerProfile
|
||||
@@ -12,8 +11,7 @@ import java.util.concurrent.ConcurrentHashMap
|
||||
abstract class EcoProfile(
|
||||
val data: MutableMap<PersistentDataKey<*>, Any>,
|
||||
val uuid: UUID,
|
||||
private val handler: DataHandler,
|
||||
private val localHandler: DataHandler
|
||||
private val handler: DataHandler
|
||||
) : Profile {
|
||||
override fun <T : Any> write(key: PersistentDataKey<T>, value: T) {
|
||||
this.data[key] = value
|
||||
@@ -27,12 +25,7 @@ abstract class EcoProfile(
|
||||
return this.data[key] as T
|
||||
}
|
||||
|
||||
this.data[key] = if (key.isLocal) {
|
||||
localHandler.read(uuid, key)
|
||||
} else {
|
||||
handler.read(uuid, key)
|
||||
} ?: key.defaultValue
|
||||
|
||||
this.data[key] = handler.read(uuid, key) ?: key.defaultValue
|
||||
return read(key)
|
||||
}
|
||||
|
||||
@@ -56,9 +49,8 @@ abstract class EcoProfile(
|
||||
class EcoPlayerProfile(
|
||||
data: MutableMap<PersistentDataKey<*>, Any>,
|
||||
uuid: UUID,
|
||||
handler: DataHandler,
|
||||
localHandler: DataHandler
|
||||
) : EcoProfile(data, uuid, handler, localHandler), PlayerProfile {
|
||||
handler: DataHandler
|
||||
) : EcoProfile(data, uuid, handler), PlayerProfile {
|
||||
override fun toString(): String {
|
||||
return "EcoPlayerProfile{uuid=$uuid}"
|
||||
}
|
||||
@@ -66,13 +58,9 @@ class EcoPlayerProfile(
|
||||
|
||||
class EcoServerProfile(
|
||||
data: MutableMap<PersistentDataKey<*>, Any>,
|
||||
handler: DataHandler,
|
||||
localHandler: DataHandler
|
||||
) : EcoProfile(data, serverProfileUUID, handler, localHandler), ServerProfile {
|
||||
handler: DataHandler
|
||||
) : EcoProfile(data, serverProfileUUID, handler), ServerProfile {
|
||||
override fun toString(): String {
|
||||
return "EcoServerProfile"
|
||||
}
|
||||
}
|
||||
|
||||
private val PersistentDataKey<*>.isLocal: Boolean
|
||||
get() = EcoPlugin.getPlugin(this.key.namespace)?.isUsingLocalStorage == true
|
||||
|
||||
@@ -23,10 +23,8 @@ class ProfileHandler(
|
||||
) {
|
||||
private val loaded = mutableMapOf<UUID, EcoProfile>()
|
||||
|
||||
private val localHandler = YamlDataHandler(plugin, this)
|
||||
|
||||
val handler: DataHandler = when (type) {
|
||||
HandlerType.YAML -> localHandler
|
||||
HandlerType.YAML -> YamlDataHandler(plugin, this)
|
||||
HandlerType.MYSQL -> MySQLDataHandler(plugin, this)
|
||||
HandlerType.MONGO -> MongoDataHandler(plugin, this)
|
||||
}
|
||||
@@ -43,7 +41,7 @@ class ProfileHandler(
|
||||
val data = mutableMapOf<PersistentDataKey<*>, Any>()
|
||||
|
||||
val profile = if (uuid == serverProfileUUID)
|
||||
EcoServerProfile(data, handler, localHandler) else EcoPlayerProfile(data, uuid, handler, localHandler)
|
||||
EcoServerProfile(data, handler) else EcoPlayerProfile(data, uuid, handler)
|
||||
|
||||
loaded[uuid] = profile
|
||||
return profile
|
||||
@@ -59,11 +57,6 @@ class ProfileHandler(
|
||||
|
||||
fun saveKeysFor(uuid: UUID, keys: Set<PersistentDataKey<*>>) {
|
||||
handler.saveKeysFor(uuid, keys)
|
||||
|
||||
// Don't save to local handler if it's the same handler.
|
||||
if (localHandler != handler) {
|
||||
localHandler.saveKeysFor(uuid, keys)
|
||||
}
|
||||
}
|
||||
|
||||
fun unloadPlayer(uuid: UUID) {
|
||||
@@ -72,10 +65,6 @@ class ProfileHandler(
|
||||
|
||||
fun save() {
|
||||
handler.save()
|
||||
|
||||
if (localHandler != handler) {
|
||||
localHandler.save()
|
||||
}
|
||||
}
|
||||
|
||||
fun migrateIfNeeded() {
|
||||
@@ -158,8 +147,5 @@ class ProfileHandler(
|
||||
|
||||
fun initialize() {
|
||||
handler.initialize()
|
||||
if (localHandler != handler) {
|
||||
localHandler.initialize()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,18 +100,6 @@ class MongoDataHandler(
|
||||
profile
|
||||
}
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
|
||||
return other is MongoDataHandler
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return type.hashCode()
|
||||
}
|
||||
}
|
||||
|
||||
private data class UUIDProfile(
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.jetbrains.exposed.sql.insert
|
||||
import org.jetbrains.exposed.sql.select
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import org.jetbrains.exposed.sql.update
|
||||
import java.math.BigDecimal
|
||||
import java.util.UUID
|
||||
import java.util.concurrent.Executors
|
||||
import java.util.concurrent.TimeUnit
|
||||
@@ -85,9 +84,6 @@ class MySQLDataHandler(
|
||||
PersistentDataKeyType.BOOLEAN -> data.getBoolOrNull(key.key.toString())
|
||||
PersistentDataKeyType.STRING_LIST -> data.getStringsOrNull(key.key.toString())
|
||||
PersistentDataKeyType.CONFIG -> data.getSubsectionOrNull(key.key.toString())
|
||||
PersistentDataKeyType.BIG_DECIMAL -> if (data.has(key.key.toString()))
|
||||
BigDecimal(data.getString(key.key.toString())) else null
|
||||
|
||||
else -> null
|
||||
}
|
||||
|
||||
@@ -153,16 +149,4 @@ class MySQLDataHandler(
|
||||
SchemaUtils.createMissingTablesAndColumns(table, withLogs = false)
|
||||
}
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
|
||||
return other is MySQLDataHandler
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return type.hashCode()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,10 +5,10 @@ import com.willfp.eco.internal.spigot.data.EcoProfile
|
||||
import com.willfp.eco.internal.spigot.data.ProfileHandler
|
||||
|
||||
class ProfileSaver(
|
||||
private val plugin: EcoPlugin,
|
||||
private val handler: ProfileHandler
|
||||
plugin: EcoPlugin,
|
||||
handler: ProfileHandler
|
||||
) {
|
||||
fun startTicking() {
|
||||
init {
|
||||
val interval = plugin.configYml.getInt("save-interval").toLong()
|
||||
|
||||
plugin.scheduler.runTimer(20, interval) {
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.willfp.eco.core.data.keys.PersistentDataKeyType
|
||||
import com.willfp.eco.internal.spigot.EcoSpigotPlugin
|
||||
import com.willfp.eco.internal.spigot.data.ProfileHandler
|
||||
import org.bukkit.NamespacedKey
|
||||
import java.math.BigDecimal
|
||||
import java.util.UUID
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
@@ -28,9 +27,6 @@ class YamlDataHandler(
|
||||
PersistentDataKeyType.BOOLEAN -> dataYml.getBoolOrNull("player.$uuid.${key.key}") as T?
|
||||
PersistentDataKeyType.STRING_LIST -> dataYml.getStringsOrNull("player.$uuid.${key.key}") as T?
|
||||
PersistentDataKeyType.CONFIG -> dataYml.getSubsectionOrNull("player.$uuid.${key.key}") as T?
|
||||
PersistentDataKeyType.BIG_DECIMAL -> (if (dataYml.has(key.key.toString()))
|
||||
BigDecimal(dataYml.getString(key.key.toString())) else null) as T?
|
||||
|
||||
else -> null
|
||||
}
|
||||
|
||||
@@ -52,16 +48,4 @@ class YamlDataHandler(
|
||||
private fun doWrite(uuid: UUID, key: NamespacedKey, value: Any) {
|
||||
dataYml.set("player.$uuid.$key", value)
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) {
|
||||
return true
|
||||
}
|
||||
|
||||
return other is YamlDataHandler
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return type.hashCode()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,10 +44,6 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
|
||||
|
||||
if (delegate is EcoSlot) {
|
||||
delegate.handleInventoryClick(event, menu)
|
||||
|
||||
if (delegate.shouldRenderOnClick()) {
|
||||
player.renderActiveMenu()
|
||||
}
|
||||
} else if (delegate === this) {
|
||||
return
|
||||
} else {
|
||||
@@ -55,6 +51,14 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(
|
||||
priority = EventPriority.HIGHEST
|
||||
)
|
||||
fun handleRender(event: InventoryClickEvent) {
|
||||
val player = event.whoClicked as? Player ?: return
|
||||
player.renderActiveMenu()
|
||||
}
|
||||
|
||||
@EventHandler(
|
||||
priority = EventPriority.HIGH
|
||||
)
|
||||
@@ -90,8 +94,6 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
|
||||
if (slot.isCaptive(player, menu)) {
|
||||
if (!slot.isAllowedCaptive(player, menu, event.oldCursor)) {
|
||||
event.isCancelled = true
|
||||
} else {
|
||||
player.renderActiveMenu()
|
||||
}
|
||||
} else {
|
||||
event.isCancelled = true
|
||||
@@ -124,8 +126,6 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
|
||||
if (slot.isCaptive(player, menu)) {
|
||||
if (!slot.isAllowedCaptive(player, menu, event.currentItem)) {
|
||||
event.isCancelled = true
|
||||
} else {
|
||||
player.renderActiveMenu()
|
||||
}
|
||||
} else {
|
||||
event.isCancelled = true
|
||||
@@ -141,6 +141,18 @@ class GUIListener(private val plugin: EcoPlugin) : Listener {
|
||||
plugin.scheduler.run { MenuHandler.unregisterInventory(event.inventory) }
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun forceRender(event: InventoryClickEvent) {
|
||||
val player = event.whoClicked as? Player ?: return
|
||||
player.renderActiveMenu()
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun forceRender(event: InventoryDragEvent) {
|
||||
val player = event.whoClicked as? Player ?: return
|
||||
player.renderActiveMenu()
|
||||
}
|
||||
|
||||
@EventHandler(
|
||||
priority = EventPriority.HIGHEST
|
||||
)
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version = 6.59.0
|
||||
version = 6.57.2
|
||||
plugin-name = eco
|
||||
kotlin.code.style = official
|
||||
@@ -20,4 +20,5 @@ include(":eco-core:core-nms:v1_19_R2")
|
||||
include(":eco-core:core-nms:v1_19_R3")
|
||||
include(":eco-core:core-proxy")
|
||||
include(":eco-core:core-plugin")
|
||||
include(":eco-core:core-backend")
|
||||
include(":eco-core:core-backend")
|
||||
include(":eco-core:core-folia")
|
||||
|
||||
Reference in New Issue
Block a user