Bring develop up to date
This commit is contained in:
@@ -30,11 +30,13 @@ import com.willfp.eco.core.placeholder.context.PlaceholderContext;
|
||||
import com.willfp.eco.core.proxy.ProxyFactory;
|
||||
import com.willfp.eco.core.scheduling.Scheduler;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Mob;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@@ -587,6 +589,19 @@ public interface Eco {
|
||||
@NotNull String args,
|
||||
@NotNull PlaceholderContext context);
|
||||
|
||||
/**
|
||||
* Set a client-side entity display name.
|
||||
*
|
||||
* @param entity The entity.
|
||||
* @param player The player.
|
||||
* @param name The display name.
|
||||
* @param visible If the display name should be forcibly visible.
|
||||
*/
|
||||
void setClientsideDisplayName(@NotNull LivingEntity entity,
|
||||
@NotNull Player player,
|
||||
@NotNull Component name,
|
||||
boolean visible);
|
||||
|
||||
/**
|
||||
* Get the instance of eco; the bridge between the api frontend and the implementation backend.
|
||||
*
|
||||
|
||||
@@ -55,7 +55,7 @@ public final class PluginProps {
|
||||
private final Map<String, String> environment = new HashMap<>();
|
||||
|
||||
/**
|
||||
* If the plugin uses reflective reload (via {@link com.willfp.eco.core.config.updating.ConfigUpdater}).
|
||||
* If the plugin uses reflective reload.
|
||||
*/
|
||||
private boolean usesReflectiveReload = true;
|
||||
|
||||
|
||||
@@ -37,6 +37,14 @@ public class Prerequisite {
|
||||
"Requires server to have ProtocolLib"
|
||||
);
|
||||
|
||||
/**
|
||||
* Requires the server to be running 1.20.3.
|
||||
*/
|
||||
public static final Prerequisite HAS_1_20_3 = new Prerequisite(
|
||||
() -> ProxyConstants.NMS_VERSION.contains("20_R3"),
|
||||
"Requires server to be running 1.20.3+"
|
||||
);
|
||||
|
||||
/**
|
||||
* Requires the server to be running 1.20.
|
||||
*/
|
||||
|
||||
@@ -29,6 +29,22 @@ public interface LoadableConfig extends Config {
|
||||
*/
|
||||
void save() throws IOException;
|
||||
|
||||
/**
|
||||
* Save the config asynchronously.
|
||||
*/
|
||||
default void saveAsync() {
|
||||
// This default implementation exists purely for backwards compatibility
|
||||
// with legacy Config implementations that don't have saveAsync().
|
||||
// Default eco implementations of Config have saveAsync() implemented.
|
||||
new Thread(() -> {
|
||||
try {
|
||||
this.save();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the config file.
|
||||
*
|
||||
|
||||
@@ -38,12 +38,16 @@ import java.lang.annotation.Target;
|
||||
* <p>
|
||||
* By having a plugin as a parameter, you shouldn't really need getInstance()
|
||||
* calls in your code.
|
||||
*
|
||||
* <p>
|
||||
* While flexible, this can lead to long initialization times, so this feature
|
||||
* can be disabled in eco.yml with the uses-reflective-reload option.
|
||||
*
|
||||
* @deprecated This has been deprecated due to the poor control flow and long startup times.
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Documented
|
||||
@Deprecated(since = "6.67.0", forRemoval = true)
|
||||
@SuppressWarnings("DeprecatedIsStillUsed")
|
||||
public @interface ConfigUpdater {
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ public final class PersistentDataKey<T> {
|
||||
/**
|
||||
* If the key uses local storage.
|
||||
*/
|
||||
private final boolean local;
|
||||
private final boolean isLocal;
|
||||
|
||||
/**
|
||||
* Create a new Persistent Data Key.
|
||||
@@ -40,16 +40,16 @@ public final class PersistentDataKey<T> {
|
||||
* @param key The key.
|
||||
* @param type The data type.
|
||||
* @param defaultValue The default value.
|
||||
* @param local If the key uses local storage.
|
||||
* @param isLocal If the key uses local storage.
|
||||
*/
|
||||
public PersistentDataKey(@NotNull final NamespacedKey key,
|
||||
@NotNull final PersistentDataKeyType<T> type,
|
||||
@NotNull final T defaultValue,
|
||||
final boolean local) {
|
||||
final boolean isLocal) {
|
||||
this.key = key;
|
||||
this.defaultValue = defaultValue;
|
||||
this.type = type;
|
||||
this.local = local;
|
||||
this.isLocal = isLocal;
|
||||
|
||||
Eco.get().registerPersistentKey(this);
|
||||
}
|
||||
@@ -67,7 +67,7 @@ public final class PersistentDataKey<T> {
|
||||
this.key = key;
|
||||
this.defaultValue = defaultValue;
|
||||
this.type = type;
|
||||
this.local = false;
|
||||
this.isLocal = false;
|
||||
|
||||
Eco.get().registerPersistentKey(this);
|
||||
}
|
||||
@@ -108,7 +108,14 @@ public final class PersistentDataKey<T> {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public boolean isLocalStorage() { return this.local; }
|
||||
/**
|
||||
* Get if the key uses local storage.
|
||||
*
|
||||
* @return If the key uses local storage.
|
||||
*/
|
||||
public boolean isLocal() {
|
||||
return this.isLocal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all persistent data keys.
|
||||
|
||||
@@ -196,6 +196,7 @@ public interface SlotBuilder {
|
||||
* @deprecated Use {@link SlotBuilder#setUpdater(SlotUpdater)} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@SuppressWarnings("DeprecatedIsStillUsed")
|
||||
default SlotBuilder setModifier(@NotNull SlotModifier modifier) {
|
||||
return setUpdater((player, menu, previous) -> {
|
||||
modifier.modify(player, menu, previous);
|
||||
|
||||
@@ -150,6 +150,7 @@ public final class PlaceholderManager {
|
||||
*/
|
||||
@Deprecated(since = "6.56.0", forRemoval = true)
|
||||
@NotNull
|
||||
@SuppressWarnings("DeprecatedIsStillUsed")
|
||||
public static String translatePlaceholders(@NotNull final String text,
|
||||
@Nullable final Player player) {
|
||||
return translatePlaceholders(text, player, EMPTY_INJECTABLE);
|
||||
@@ -166,6 +167,7 @@ public final class PlaceholderManager {
|
||||
*/
|
||||
@Deprecated(since = "6.56.0", forRemoval = true)
|
||||
@NotNull
|
||||
@SuppressWarnings("DeprecatedIsStillUsed")
|
||||
public static String translatePlaceholders(@NotNull final String text,
|
||||
@Nullable final Player player,
|
||||
@NotNull final PlaceholderInjectable context) {
|
||||
@@ -192,6 +194,7 @@ public final class PlaceholderManager {
|
||||
*/
|
||||
@Deprecated(since = "6.56.0", forRemoval = true)
|
||||
@NotNull
|
||||
@SuppressWarnings("DeprecatedIsStillUsed")
|
||||
public static String translatePlaceholders(@NotNull final String text,
|
||||
@Nullable final Player player,
|
||||
@NotNull final PlaceholderInjectable context,
|
||||
|
||||
@@ -120,8 +120,12 @@ public final class ConfiguredPrice implements Price {
|
||||
*/
|
||||
public String getDisplay(@NotNull final Player player,
|
||||
final double multiplier) {
|
||||
double value = this.getPrice().getValue(player, multiplier);
|
||||
|
||||
return StringUtils.format(
|
||||
formatString.replace("%value%", NumberUtils.format(this.getPrice().getValue(player, multiplier))),
|
||||
formatString
|
||||
.replace("%value%", NumberUtils.format(value))
|
||||
.replace("%value_commas%", NumberUtils.formatWithCommas(value)),
|
||||
player,
|
||||
StringUtils.FormatOption.WITH_PLACEHOLDERS
|
||||
);
|
||||
|
||||
@@ -25,7 +25,8 @@ public final class ProxyConstants {
|
||||
"v1_19_R2",
|
||||
"v1_19_R3",
|
||||
"v1_20_R1",
|
||||
"v1_20_R2"
|
||||
"v1_20_R2",
|
||||
"v1_20_R3"
|
||||
);
|
||||
|
||||
private ProxyConstants() {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.willfp.eco.core.web;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import org.bukkit.util.Consumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.Scanner;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* Class to check for updates of a plugin on spigot.
|
||||
|
||||
31
eco-api/src/main/java/com/willfp/eco/util/EntityUtils.java
Normal file
31
eco-api/src/main/java/com/willfp/eco/util/EntityUtils.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package com.willfp.eco.util;
|
||||
|
||||
import com.willfp.eco.core.Eco;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Utilities / API methods for entities.
|
||||
*/
|
||||
public final class EntityUtils {
|
||||
/**
|
||||
* Set a client-side entity display name.
|
||||
*
|
||||
* @param entity The entity.
|
||||
* @param player The player.
|
||||
* @param name The display name.
|
||||
* @param visible If the display name should be forcibly visible.
|
||||
*/
|
||||
public static void setClientsideDisplayName(@NotNull final LivingEntity entity,
|
||||
@NotNull final Player player,
|
||||
@NotNull final Component name,
|
||||
final boolean visible) {
|
||||
Eco.get().setClientsideDisplayName(entity, player, name, visible);
|
||||
}
|
||||
|
||||
private EntityUtils() {
|
||||
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
||||
}
|
||||
}
|
||||
@@ -203,6 +203,20 @@ public final class NumberUtils {
|
||||
return formatted.endsWith("00") ? String.valueOf((int) toFormat) : formatted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format double to string with commas.
|
||||
*
|
||||
* @param toFormat The number to format.
|
||||
* @return Formatted.
|
||||
*/
|
||||
@NotNull
|
||||
public static String formatWithCommas(final double toFormat) {
|
||||
DecimalFormat df = new DecimalFormat("#,##0.00");
|
||||
String formatted = df.format(toFormat);
|
||||
|
||||
return formatted.endsWith(".00") ? formatted.substring(0, formatted.length() - 3) : formatted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluate an expression.
|
||||
*
|
||||
|
||||
@@ -15,7 +15,7 @@ public final class PatternUtils {
|
||||
* Cache of compiled literal patterns.
|
||||
*/
|
||||
private static final Cache<String, Pattern> LITERAL_PATTERN_CACHE = Caffeine.newBuilder()
|
||||
.expireAfterAccess(1, TimeUnit.MINUTES)
|
||||
.expireAfterAccess(15, TimeUnit.MINUTES)
|
||||
.build();
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,6 +13,7 @@ public final class PotionUtils {
|
||||
* @param data The data.
|
||||
* @return The duration.
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public static int getDuration(@NotNull final PotionData data) {
|
||||
if (data.isExtended()) {
|
||||
return switch (data.getType()) {
|
||||
|
||||
12
eco-api/src/main/kotlin/com/willfp/eco/util/EntityUtils.kt
Normal file
12
eco-api/src/main/kotlin/com/willfp/eco/util/EntityUtils.kt
Normal file
@@ -0,0 +1,12 @@
|
||||
@file:JvmName("EntityUtilsExtensions")
|
||||
|
||||
package com.willfp.eco.util
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import org.bukkit.entity.LivingEntity
|
||||
import org.bukkit.entity.Player
|
||||
|
||||
/** @see EntityUtils.setClientsideDisplayName */
|
||||
fun LivingEntity.setClientsideDisplayName(player: Player, displayName: Component, visible: Boolean) {
|
||||
EntityUtils.setClientsideDisplayName(this, player, displayName, visible)
|
||||
}
|
||||
@@ -8,6 +8,10 @@ import com.willfp.eco.core.placeholder.context.PlaceholderContext
|
||||
fun Number.toNumeral(): String =
|
||||
NumberUtils.toNumeral(this.toInt())
|
||||
|
||||
/** @see NumberUtils.formatWithCommas */
|
||||
fun Number.formatWithCommas(): String =
|
||||
NumberUtils.formatWithCommas(this.toDouble())
|
||||
|
||||
/** @see NumberUtils.fromNumeral */
|
||||
fun String.parseNumeral(): Int =
|
||||
NumberUtils.fromNumeral(this)
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
package com.willfp.eco.util
|
||||
|
||||
import org.bukkit.potion.PotionData
|
||||
|
||||
/** @see PotionData.duration */
|
||||
val PotionData.duration: Int
|
||||
/** @see PotionUtils.getDuration */
|
||||
@Suppress("DEPRECATION")
|
||||
val org.bukkit.potion.PotionData.duration: Int
|
||||
get() = PotionUtils.getDuration(this)
|
||||
|
||||
Reference in New Issue
Block a user