Compare commits

...
12 Commits
Author SHA1 Message Date
4drian3d 24a7591a0f fix: connect module inclusion 2022-04-19 18:00:42 +00:00
4drian3d 6a73aa3f46 1.1.0 Release 2022-04-19 17:42:50 +00:00
4drian3d 7832d96d50 docs: Improved annotations, added Contract annotation 2022-04-19 17:39:05 +00:00
4drian3d 900214dfad test: added Expansion equality test 2022-04-14 17:36:32 +00:00
4drian3d 9de6aceac3 perf: improved performance of some methods of MiniPlaceholders
- Improved getAudienceGlobalPlaceholders and getRelationalGlobalPlaceholders performance by not creations multiple TagResolver.Builder instances
2022-04-14 17:34:44 +00:00
4drian3d 4e2599abd3 fix!: deprecated exposed platform setter
- Added connect module to control the internal platform
2022-04-14 16:17:06 +00:00
4drian3d dc5d4c5cc9 docs: change NotNull to Nullable annotation in Expansion.Builder#filter(Predicate) 2022-04-13 20:13:25 +00:00
4drian3d 782bd02a33 feat(api): added some util methods to MiniPlaceholders
- Added #getAudienceGlobalPlaceholders and #getRelationalGlobalPlaceholders
- Removed Collection#isEmpty call from MiniPlaceholders methods, the expansion collection cannot be empty
- Set as final the TagResolver.Builder of the MiniPlaceholders methods
2022-04-13 20:05:06 +00:00
4drian3d 25a3ce024d Added missing nullability annotations 2022-04-12 18:01:40 +00:00
4drian3d ece1252a6e Added more Tag Utilities 2022-04-12 17:28:13 +00:00
4drian3d 4df9c296c9 Implement Expansion#globalPlaceholder(String, Tag) 2022-04-12 17:22:20 +00:00
4drian3d 68e2034dd3 Added static utils components
- Improved documentation
2022-04-11 18:05:07 +00:00
21 changed files with 351 additions and 68 deletions

No files matched your search

+1
View File
@@ -7,6 +7,7 @@ dependencies {
compileOnly("net.kyori:adventure-api:4.10.1")
compileOnly("net.kyori:adventure-text-minimessage:4.10.1")
compileOnly("net.kyori:adventure-text-serializer-legacy:4.10.1")
compileOnly(project(":miniplaceholders-connect"))
testImplementation(platform("org.junit:junit-bom:5.8.1"))
testImplementation("org.junit.jupiter:junit-jupiter")
testImplementation("net.kyori:adventure-api:4.10.1")
@@ -1,5 +1,6 @@
package me.dreamerzero.miniplaceholders.api;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -48,7 +49,8 @@ public interface Expansion {
* @return A TagResolver with variable placeholders of an Audience
* @since 1.0.0
*/
@NotNull TagResolver audiencePlaceholders(@NotNull final Audience audience);
@Contract("null -> fail; !null -> !null")
@NotNull TagResolver audiencePlaceholders(final @NotNull Audience audience);
/**
* Get the relational placeholders based on two audiences
@@ -61,7 +63,8 @@ public interface Expansion {
* @return A TagResolver with variable placeholders between 2 {@link Audience}s
* @since 1.0.0
*/
@NotNull TagResolver relationalPlaceholders(@NotNull final Audience audience, @NotNull final Audience otherAudience);
@Contract("_, null -> fail, null, _ -> fail; !null, !null -> !null")
@NotNull TagResolver relationalPlaceholders(final @NotNull Audience audience, final @NotNull Audience otherAudience);
/**
* Get global placeholders
@@ -82,7 +85,7 @@ public interface Expansion {
* @return a new expansion builder
* @since 1.0.0
*/
public static @NotNull Expansion.Builder builder(@NotNull final String name){
public static @NotNull Expansion.Builder builder(final @NotNull String name){
return new ExpansionImpl.Builder(name);
}
@@ -121,7 +124,8 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
@NotNull Builder audiencePlaceholder(@NotNull final String key, @NotNull final AudiencePlaceholder audiencePlaceholder);
@Contract("null, _ -> fail; _, null -> fail; !null, !null -> this")
@NotNull Builder audiencePlaceholder(final @NotNull String key, final @NotNull AudiencePlaceholder audiencePlaceholder);
/**
* Adds an Relational Placeholder based on two audiences
@@ -139,7 +143,8 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
@NotNull Builder relationalPlaceholder(@NotNull final String key, @NotNull final RelationalPlaceholder relationalPlaceholder);
@Contract("null, _ -> fail; _, null -> fail; !null, !null -> this")
@NotNull Builder relationalPlaceholder(final @NotNull String key, final @NotNull RelationalPlaceholder relationalPlaceholder);
/**
* Adds a global placeholder
@@ -151,7 +156,20 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
@NotNull Builder globalPlaceholder(@NotNull final String key, final BiFunction<ArgumentQueue, Context, Tag> function);
@Contract("null, _ -> fail; _, null -> fail; !null, !null -> this")
@NotNull Builder globalPlaceholder(final @NotNull String key, final @NotNull BiFunction<@NotNull ArgumentQueue, @NotNull Context, @Nullable Tag> function);
/**
* Adds a global placeholder
*
* <p>This placeholder is not cached and is inmutable</p>
* @param key the placeholder key, cannot be an empty or black string
* @param tag the tag of this placeholder
* @return the {@link Builder} itself
* @since 1.1.0
*/
@Contract("null, _ -> fail; _, null -> fail; !null, !null -> this")
@NotNull Builder globalPlaceholder(final @NotNull String key, final @NotNull Tag tag);
/**
* Filter the type of Audiences that this expansion can receive
@@ -166,7 +184,8 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
@NotNull Builder filter(@Nullable final Class<? extends Audience> clazz);
@Contract("_ -> this")
@NotNull Builder filter(final @Nullable Class<? extends Audience> clazz);
/**
* Filters the audiences that this expansion can receive through a Predicate
@@ -180,6 +199,7 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
@NotNull Builder filter(@NotNull final Predicate<Audience> predicate);
@Contract("_ -> this")
@NotNull Builder filter(final @Nullable Predicate<Audience> predicate);
}
}
@@ -152,6 +152,17 @@ final class ExpansionImpl implements Expansion {
return this;
}
@Override
public Builder globalPlaceholder(@NotNull final String key, @NotNull final Tag tag){
Conditions.nonNullOrEmptyString(key, () -> "placeholder key");
Objects.requireNonNull(tag, () -> "the tag cannot be null");
if(this.globalPlaceholders == null) this.globalPlaceholders = TagResolver.builder();
this.globalPlaceholders.tag(expansionName+key, tag);
return this;
}
@Override
public Builder filter(@Nullable final Class<? extends Audience> clazz) {
this.filterClass = clazz;
@@ -159,7 +170,7 @@ final class ExpansionImpl implements Expansion {
}
@Override
public Builder filter(@NotNull final Predicate<Audience> predicate){
public Builder filter(@Nullable final Predicate<Audience> predicate){
this.predicateFilter = predicate;
return this;
}
@@ -5,9 +5,11 @@ import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import me.dreamerzero.miniplaceholders.api.enums.Platform;
import me.dreamerzero.miniplaceholders.connect.InternalPlatform;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@@ -26,15 +28,16 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
public final class MiniPlaceholders {
private MiniPlaceholders(){}
static final Set<Expansion> expansions = Collections.synchronizedSet(new HashSet<>());
private static Platform placeholdersPlatform;
/**
* Get the platform
* @return the platform
* @since 1.0.0
*/
public static Platform getPlatform(){
return placeholdersPlatform;
public static @NotNull Platform getPlatform(){
return InternalPlatform.platform() == InternalPlatform.PAPER
? Platform.PAPER
: Platform.VELOCITY;
}
/**
@@ -48,9 +51,7 @@ public final class MiniPlaceholders {
* @since 1.0.0
*/
public static @NotNull TagResolver getGlobalPlaceholders() {
if(expansions.isEmpty()) return TagResolver.empty();
TagResolver.Builder resolvers = TagResolver.builder();
final TagResolver.Builder resolvers = TagResolver.builder();
expansions.forEach(exp -> resolvers.resolver(exp.globalPlaceholders()));
return resolvers.build();
@@ -66,12 +67,11 @@ public final class MiniPlaceholders {
* @return {@link TagResolver} with placeholders based on an audience
* @since 1.0.0
*/
public static @NotNull TagResolver getAudiencePlaceholders(@NotNull Audience audience) {
if(expansions.isEmpty()) return TagResolver.empty();
@Contract("null -> fail, !null -> !null")
public static @NotNull TagResolver getAudiencePlaceholders(final @NotNull Audience audience) {
Objects.requireNonNull(audience, () -> "audience cannot be null");
TagResolver.Builder resolvers = TagResolver.builder();
final TagResolver.Builder resolvers = TagResolver.builder();
expansions.forEach(exp -> resolvers.resolver(exp.audiencePlaceholders(audience)));
return resolvers.build();
@@ -88,18 +88,84 @@ public final class MiniPlaceholders {
* @return placeholders based on two audiences
* @since 1.0.0
*/
public static @NotNull TagResolver getRelationalPlaceholders(@NotNull Audience audience, @NotNull Audience otherAudience) {
if(expansions.isEmpty()) return TagResolver.empty();
@Contract("_, null -> fail; null, _ -> fail; !null, !null -> !null")
public static @NotNull TagResolver getRelationalPlaceholders(final @NotNull Audience audience, final @NotNull Audience otherAudience) {
Objects.requireNonNull(audience, () -> "audience cannot be null");
Objects.requireNonNull(otherAudience, () -> "otherAudience cannot be null");
TagResolver.Builder resolvers = TagResolver.builder();
final TagResolver.Builder resolvers = TagResolver.builder();
expansions.forEach(exp -> resolvers.resolver(exp.relationalPlaceholders(audience, otherAudience)));
return resolvers.build();
}
/**
* Get the TagResolver based on an Audience and the global placeholders
*
* <pre>
* TagResolver resolver = MiniPlaceholders.getAudienceGlobalPlaceholders({@link Audience});
* TagResolver resolver2 = TagResolver.resolver(
* MiniPlaceholders.getAudienceGlobalPlaceholders({@link Audience}),
* MiniPlaceholders.getGlobalPlaceholders()
* );
* // This two resolvers returns the same TagResolver
* assertEquals(resolver, resolver2);
* Component messageParsed = MiniMessage.miniMessage().deserialize({@link String}, resolver);
* </pre>
*
* @param audience the audience
* @return {@link TagResolver} with placeholders based on an audience and the global placeholders
* @since 1.1.0
*/
@Contract("_, null -> fail; null, _ -> fail; !null, !null -> !null")
public static @NotNull TagResolver getAudienceGlobalPlaceholders(final @NotNull Audience audience) {
Objects.requireNonNull(audience, () -> "audience cannot be null");
final TagResolver.Builder builder = TagResolver.builder();
for(final Expansion expansion : expansions) {
builder.resolver(expansion.audiencePlaceholders(audience));
builder.resolver(expansion.globalPlaceholders());
}
return builder.build();
}
/**
* Get the relationals placeholders based on two audiences, based on the first audience,
* and the global placeholders
*
* <pre>
* TagResolver resolver = MiniPlaceholders.getRelationalGlobalPlaceholders({@link Audience}, {@link Audience});
* TagResolver resolver2 = TagResolver.resolver(
* MiniPlaceholders.getRelationalPlaceholders(audience1, audience2),
* MiniPlaceholders.getAudiencePlaceholders(audience1),
* MiniPlaceholders.getGlobalPlaceholders()
* );
* // This methods should return the same TagResolver
* assertEquals(resolver, resolver2);
* Component messageParsed = MiniMessage.miniMessage().deserialize({@link String}, resolver);
* </pre>
*
* @param audience an audience
* @param otherAudience another audience
* @return the placeholders based on two audiences, placeholders based on the first audience and the global placeholders
* @since 1.1.0
*/
@Contract("_, null -> fail; null, _ -> fail; !null, !null -> !null")
public static @NotNull TagResolver getRelationalGlobalPlaceholders(final @NotNull Audience audience, final @NotNull Audience otherAudience) {
Objects.requireNonNull(audience, () -> "audience cannot be null");
Objects.requireNonNull(otherAudience, () -> "otherAudience cannot be null");
final TagResolver.Builder builder = TagResolver.builder();
for(final Expansion expansion : expansions) {
builder.resolver(expansion.audiencePlaceholders(audience));
builder.resolver(expansion.relationalPlaceholders(audience, otherAudience));
builder.resolver(expansion.globalPlaceholders());
}
return builder.build();
}
/**
* Get the ammount of expansion registered
* @return the ammount of expansions registered
@@ -115,10 +181,9 @@ public final class MiniPlaceholders {
* @deprecated dont use this, INTERNAL
* @since 1.0.0
*/
@Deprecated(forRemoval = false)
@Deprecated(forRemoval = true, since = "1.1.0")
@org.jetbrains.annotations.ApiStatus.Internal
public static void setPlatform(Platform platform){
if(placeholdersPlatform != null) throw new RuntimeException("Cannot set platform twice");
placeholdersPlatform = platform;
throw new UnsupportedOperationException("Cannot set platform twice");
}
}
@@ -1,5 +1,8 @@
package me.dreamerzero.miniplaceholders.api.placeholder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.minimessage.Context;
import net.kyori.adventure.text.minimessage.tag.Tag;
@@ -16,5 +19,9 @@ public interface AudiencePlaceholder {
* @return a Tag
* @since 1.0.0
*/
Tag tag(Audience audience, ArgumentQueue queue, Context ctx);
@Nullable Tag tag(
@NotNull final Audience audience,
@NotNull final ArgumentQueue queue,
@NotNull final Context ctx
);
}
@@ -1,5 +1,8 @@
package me.dreamerzero.miniplaceholders.api.placeholder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.minimessage.Context;
import net.kyori.adventure.text.minimessage.tag.Tag;
@@ -17,5 +20,10 @@ public interface RelationalPlaceholder {
* @return a tag
* @since 1.0.0
*/
Tag tag(Audience audience, Audience otherAudience, ArgumentQueue queue, Context ctx);
@Nullable Tag tag(
@NotNull final Audience audience,
@NotNull final Audience otherAudience,
@NotNull final ArgumentQueue queue,
@NotNull final Context ctx
);
}
@@ -0,0 +1,31 @@
package me.dreamerzero.miniplaceholders.api.utils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.NamedTextColor;
/**Common components used in expansions */
public final class Components {
private Components(){}
/**
* "True" Component
* @since 1.1.0
*/
public static final TextComponent TRUE_COMPONENT = Component.text("true", NamedTextColor.GREEN);
/**
* False Component
* @since 1.1.0
*/
public static final TextComponent FALSE_COMPONENT = Component.text("false", NamedTextColor.RED);
/**
* "Yes" Component
* @since 1.1.0
*/
public static final TextComponent YES_COMPONENT = Component.text("yes", NamedTextColor.GREEN);
/**
* "No" Component
* @since 1.1.0
*/
public static final TextComponent NO_COMPONENT = Component.text("no", NamedTextColor.RED);
}
@@ -4,15 +4,27 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import static net.kyori.adventure.text.minimessage.MiniMessage.miniMessage;
/**
* Legacy utils
*/
public final class LegacyUtils {
private LegacyUtils(){}
/**
* Legacy serializer with hex support
*
* Use this as the last available alternative,
* it is recommended to use MiniMessage instead of this serializer
*/
public static final LegacyComponentSerializer LEGACY_HEX_SERIALIZER = LegacyComponentSerializer.builder()
.character('&')
.hexColors()
.build();
/**
* Parse a string with possible legacy symbols
* @param string the string
@@ -22,18 +34,11 @@ public final class LegacyUtils {
public static @NotNull Component parsePossibleLegacy(@Nullable String string) {
if(string == null || string.isBlank()) return Component.empty();
if(string.indexOf('&') != 0){
return MiniMessage.miniMessage().deserialize(
MiniMessage.miniMessage()
.serialize(LegacyComponentSerializer.builder()
.character('&')
.hexColors()
.build()
.deserialize(string)
)
return miniMessage().deserialize(
miniMessage().serialize(LEGACY_HEX_SERIALIZER.deserialize(string))
);
} else {
return MiniMessage.miniMessage()
.deserialize(string);
return miniMessage().deserialize(string);
}
}
}
@@ -1,5 +1,9 @@
package me.dreamerzero.miniplaceholders.api.utils;
import org.jetbrains.annotations.NotNull;
import me.dreamerzero.miniplaceholders.api.placeholder.AudiencePlaceholder;
import me.dreamerzero.miniplaceholders.api.placeholder.RelationalPlaceholder;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
@@ -7,6 +11,48 @@ import net.kyori.adventure.text.minimessage.tag.Tag;
public final class TagsUtils {
private TagsUtils(){}
/**Empty Tag */
/**
* Empty Tag
* @since 1.0.0
*/
public static final Tag EMPTY_TAG = Tag.selfClosingInserting(Component.empty());
/**
* Null Tag
* @since 1.1.0
*/
public static final Tag NULL_TAG = null;
/**
* An Audience placeholder that returns a null Tag
* @since 1.1.0
*/
public static final AudiencePlaceholder NULL_AUDIENCE_PLACEHOLDER = (aud, queue, ctx) -> NULL_TAG;
/**
* A Relational placeholder that returns a null tag
* @since 1.1.0
*/
public static final RelationalPlaceholder NULL_RELATIONAL_PLACEHOLDER = (aud, otheraud, queue, ctx) -> NULL_TAG;
/**
* Creates a new Tag based on a String
* @param string the string
* @return a new basic self closing Tag of a string
* @since 1.1.0
*/
public static @NotNull Tag staticTag(@NotNull String string) {
return Tag.selfClosingInserting(Component.text(string));
}
/**
* Creates a new basic Tag based on a Component
* @param component the component
* @return a new basic self closing Tag of a component
* @since 1.1.0
*/
public static @NotNull Tag staticTag(@NotNull Component component) {
return Tag.selfClosingInserting(component);
}
}
@@ -0,0 +1,24 @@
package me.dreamerzero.miniplaceholders;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import me.dreamerzero.miniplaceholders.api.Expansion;
import me.dreamerzero.miniplaceholders.api.utils.TagsUtils;
public class ExpansionsTest {
@Test
@DisplayName("Expansion Equality")
void equalsExpansions(){
final Expansion firstExpansion = Expansion.builder("equals")
.audiencePlaceholder("test", TagsUtils.NULL_AUDIENCE_PLACEHOLDER)
.build();
final Expansion secondExpansion = Expansion.builder("equals")
.audiencePlaceholder("test", TagsUtils.NULL_AUDIENCE_PLACEHOLDER)
.build();
assertEquals(firstExpansion, secondExpansion);
}
}
@@ -0,0 +1,33 @@
package me.dreamerzero.miniplaceholders;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import me.dreamerzero.miniplaceholders.api.Expansion;
import me.dreamerzero.miniplaceholders.api.MiniPlaceholders;
import me.dreamerzero.miniplaceholders.api.utils.TagsUtils;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
public class MiniPlaceholdersTest {
@Test
@Disabled("The tagresolvers implemented classes does not implement the equals method")
void methodEquality(){
Expansion.builder("equality")
.audiencePlaceholder("audience", TagsUtils.NULL_AUDIENCE_PLACEHOLDER)
.globalPlaceholder("global", TagsUtils.EMPTY_TAG)
.build()
.register();
assertEquals(
MiniPlaceholders.getAudienceGlobalPlaceholders(Audience.empty()),
TagResolver.resolver(
MiniPlaceholders.getAudiencePlaceholders(Audience.empty()),
MiniPlaceholders.getGlobalPlaceholders()
)
);
}
}
@@ -98,7 +98,7 @@ public class PlaceholderTest {
}
private void assertContentEquals(Component first, Component second){
void assertContentEquals(Component first, Component second){
String firstSerialized = PlainTextComponentSerializer.plainText().serialize(first);
String secondSerialized = PlainTextComponentSerializer.plainText().serialize(second);
@@ -3,12 +3,17 @@ package me.dreamerzero.miniplaceholders;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.function.BiFunction;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import me.dreamerzero.miniplaceholders.api.Expansion;
import me.dreamerzero.miniplaceholders.api.MiniPlaceholders;
import me.dreamerzero.miniplaceholders.api.utils.TagsUtils;
import net.kyori.adventure.text.minimessage.Context;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue;
public class ThrowableTest {
@Test
@@ -19,7 +24,7 @@ public class ThrowableTest {
Expansion.Builder expansionTest = assertDoesNotThrow(() -> Expansion.builder("throwable"));
assertThrows(NullPointerException.class, () -> expansionTest.audiencePlaceholder(null, (aud, queue, ctx) -> TagsUtils.EMPTY_TAG));
assertThrows(NullPointerException.class, () -> expansionTest.globalPlaceholder("test", null));
assertThrows(NullPointerException.class, () -> expansionTest.globalPlaceholder("test", (BiFunction<ArgumentQueue, Context, Tag>)null));
Expansion.builder("testThrows")
.audiencePlaceholder("test", (aud, queue, ctx) -> TagsUtils.EMPTY_TAG)
+2 -1
View File
@@ -8,11 +8,12 @@ plugins {
allprojects {
apply(plugin = "java")
group = "me.dreamerzero.miniplaceholders"
version = "1.0.1"
version = "1.1.1"
description = "MiniPlaceholders"
}
dependencies {
shadow(project(":miniplaceholders-connect"))
shadow(project(":miniplaceholders-api"))
shadow(project(":miniplaceholders-common"))
shadow(project(":miniplaceholders-velocity"))
+7
View File
@@ -0,0 +1,7 @@
java.toolchain.languageVersion.set(JavaLanguageVersion.of(11))
tasks.compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(11)
}
@@ -0,0 +1,16 @@
package me.dreamerzero.miniplaceholders.connect;
public enum InternalPlatform {
PAPER, VELOCITY;
private static InternalPlatform actualPlatform;
public static void platform(final InternalPlatform platform){
InternalPlatform.actualPlatform = platform;
}
public static InternalPlatform platform(){
return InternalPlatform.actualPlatform;
}
}
+1
View File
@@ -7,6 +7,7 @@ plugins {
dependencies {
compileOnly(project(":miniplaceholders-common"))
compileOnly(project(":miniplaceholders-api"))
compileOnly(project(":miniplaceholders-connect"))
paperDevBundle("1.18.2-R0.1-SNAPSHOT")
}
@@ -11,10 +11,10 @@ import org.bukkit.plugin.java.JavaPlugin;
import io.papermc.paper.datapack.Datapack;
import me.dreamerzero.miniplaceholders.api.Expansion;
import me.dreamerzero.miniplaceholders.api.MiniPlaceholders;
import me.dreamerzero.miniplaceholders.api.enums.Platform;
import me.dreamerzero.miniplaceholders.api.utils.TagsUtils;
import me.dreamerzero.miniplaceholders.common.PlaceholdersCommand;
import me.dreamerzero.miniplaceholders.common.PlaceholdersPlugin;
import me.dreamerzero.miniplaceholders.connect.InternalPlatform;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.tag.Tag;
@@ -25,10 +25,9 @@ public final class PaperPlugin extends JavaPlugin implements PlaceholdersPlugin,
private final NumberFormat msptFormat = NumberFormat.getInstance();
@Override
@SuppressWarnings("deprecation")
public void onEnable(){
this.getSLF4JLogger().info("Starting MiniPlaceholders Paper");
MiniPlaceholders.setPlatform(Platform.PAPER);
InternalPlatform.platform(InternalPlatform.PAPER);
this.getServer().getPluginManager().registerEvents(this, this);
tpsFormat.setRoundingMode(RoundingMode.DOWN);
@@ -44,30 +43,30 @@ public final class PaperPlugin extends JavaPlugin implements PlaceholdersPlugin,
@Override
public void loadDefaultExpansions() {
Expansion.builder("server")
.globalPlaceholder("name", (queue, ctx) -> Tag.selfClosingInserting(Component.text(this.getServer().getName())))
.globalPlaceholder("online", (queue, ctx) -> Tag.selfClosingInserting(Component.text(this.getServer().getOnlinePlayers().size())))
.globalPlaceholder("version", (queue, ctx) -> Tag.selfClosingInserting(Component.text(this.getServer().getVersion())))
.globalPlaceholder("max_players", (queue, ctx) -> Tag.selfClosingInserting(Component.text(this.getServer().getMaxPlayers())))
.globalPlaceholder("unique_joins", (queue, ctx) -> Tag.selfClosingInserting(Component.text(this.getServer().getOfflinePlayers().length)))
.globalPlaceholder("tps_1", (queue, ctx) -> Tag.selfClosingInserting(Component.text(tpsFormat.format(this.getCraftServer().getHandle().getServer().recentTps[0]))))
.globalPlaceholder("tps_5", (queue, ctx) -> Tag.selfClosingInserting(Component.text(tpsFormat.format(this.getCraftServer().getHandle().getServer().recentTps[1]))))
.globalPlaceholder("tps_15", (queue, ctx) -> Tag.selfClosingInserting(Component.text(tpsFormat.format(this.getCraftServer().getHandle().getServer().recentTps[2]))))
.globalPlaceholder("has_whitelist", (queue, ctx) -> Tag.selfClosingInserting(Component.text(this.getServer().hasWhitelist())))
.globalPlaceholder("name", TagsUtils.staticTag(Component.text(this.getServer().getName())))
.globalPlaceholder("online", (queue, ctx) -> TagsUtils.staticTag(Component.text(this.getServer().getOnlinePlayers().size())))
.globalPlaceholder("version", TagsUtils.staticTag(this.getServer().getVersion()))
.globalPlaceholder("max_players", (queue, ctx) -> TagsUtils.staticTag(Component.text(this.getServer().getMaxPlayers())))
.globalPlaceholder("unique_joins", (queue, ctx) -> TagsUtils.staticTag(Component.text(this.getServer().getOfflinePlayers().length)))
.globalPlaceholder("tps_1", (queue, ctx) -> TagsUtils.staticTag(tpsFormat.format(this.getCraftServer().getHandle().getServer().recentTps[0])))
.globalPlaceholder("tps_5", (queue, ctx) -> TagsUtils.staticTag(tpsFormat.format(this.getCraftServer().getHandle().getServer().recentTps[1])))
.globalPlaceholder("tps_15", (queue, ctx) -> TagsUtils.staticTag(tpsFormat.format(this.getCraftServer().getHandle().getServer().recentTps[2])))
.globalPlaceholder("has_whitelist", (queue, ctx) -> TagsUtils.staticTag(Component.text(this.getServer().hasWhitelist())))
.globalPlaceholder("total_chunks", (queue, ctx) -> {
int chunkCount = 0;
for(World world : this.getServer().getWorlds()){
chunkCount += world.getLoadedChunks().length;
}
return Tag.selfClosingInserting(Component.text(chunkCount));
return TagsUtils.staticTag(Component.text(chunkCount));
})
.globalPlaceholder("total_entities", (queue, ctx) -> {
int entityCount = 0;
for(World world : this.getServer().getWorlds()){
entityCount += world.getEntityCount();
}
return Tag.selfClosingInserting(Component.text(entityCount));
return TagsUtils.staticTag(Component.text(entityCount));
})
.globalPlaceholder("mspt", (queue, ctx) -> Tag.selfClosingInserting(Component.text(msptFormat.format(this.getServer().getAverageTickTime()))))
.globalPlaceholder("mspt", (queue, ctx) -> TagsUtils.staticTag(msptFormat.format(this.getServer().getAverageTickTime())))
.globalPlaceholder("datapack_list", (queue, ctx) -> {
TextComponent.Builder builder = Component.text();
for(Datapack datapack : this.getServer().getDatapackManager().getEnabledPacks()){
+2
View File
@@ -7,11 +7,13 @@ pluginManagement {
rootProject.name = "miniplaceholders-parent"
include("miniplaceholders-connect")
include("miniplaceholders-api")
include("miniplaceholders-common")
include("miniplaceholders-paper")
include("miniplaceholders-velocity")
project(":miniplaceholders-connect").projectDir = file("connect")
project(":miniplaceholders-api").projectDir = file("api")
project(":miniplaceholders-common").projectDir = file("common")
project(":miniplaceholders-velocity").projectDir = file("velocity")
+1
View File
@@ -3,6 +3,7 @@ dependencies {
annotationProcessor("com.velocitypowered:velocity-api:3.1.2-SNAPSHOT")
compileOnly(project(":miniplaceholders-common"))
compileOnly(project(":miniplaceholders-api"))
compileOnly(project(":miniplaceholders-connect"))
}
java.toolchain.languageVersion.set(JavaLanguageVersion.of(17))
@@ -12,11 +12,12 @@ import com.velocitypowered.api.proxy.ProxyServer;
import org.slf4j.Logger;
import me.dreamerzero.miniplaceholders.api.Expansion;
import me.dreamerzero.miniplaceholders.api.MiniPlaceholders;
import me.dreamerzero.miniplaceholders.api.enums.Platform;
import me.dreamerzero.miniplaceholders.api.utils.Components;
import me.dreamerzero.miniplaceholders.api.utils.TagsUtils;
import me.dreamerzero.miniplaceholders.common.PlaceholdersCommand;
import me.dreamerzero.miniplaceholders.common.PlaceholdersPlugin;
import me.dreamerzero.miniplaceholders.common.PluginConstants;
import me.dreamerzero.miniplaceholders.connect.InternalPlatform;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
@@ -30,17 +31,16 @@ public final class VelocityPlugin implements PlaceholdersPlugin {
private final Logger logger;
private final ProxyServer proxy;
@Inject
public VelocityPlugin(Logger logger, ProxyServer proxy) {
public VelocityPlugin(final Logger logger, final ProxyServer proxy) {
this.logger = logger;
this.proxy = proxy;
}
@Subscribe
@SuppressWarnings("deprecation")
public void onProxyInitialize(ProxyInitializeEvent event) {
public void onProxyInitialize(final ProxyInitializeEvent event) {
logger.info("Starting MiniPlaceholders Velocity");
MiniPlaceholders.setPlatform(Platform.VELOCITY);
InternalPlatform.platform(InternalPlatform.VELOCITY);
this.loadDefaultExpansions();
this.registerPlatformCommand();
@@ -59,16 +59,16 @@ public final class VelocityPlugin implements PlaceholdersPlugin {
.globalPlaceholder("server_count", (queue, ctx) -> Tag.selfClosingInserting(Component.text(proxy.getAllServers().size())))
.globalPlaceholder("is_player_online", (queue, ctx) -> {
String playerName = queue.popOr(() -> "you need to introduce an argument").value();
return Tag.selfClosingInserting(Component.text(proxy.getPlayer(playerName).isPresent()));
return TagsUtils.staticTag(proxy.getPlayer(playerName).isPresent() ? Components.YES_COMPONENT : Components.NO_COMPONENT);
})
.globalPlaceholder("version", (queue, ctx) -> Tag.selfClosingInserting(Component.text(proxy.getVersion().getVersion())))
.globalPlaceholder("version", TagsUtils.staticTag(proxy.getVersion().getVersion()))
.build()
.register();
}
@Override
public void registerPlatformCommand() {
BrigadierCommand brigadierCMD = new BrigadierCommand(
final BrigadierCommand brigadierCMD = new BrigadierCommand(
new PlaceholdersCommand<CommandSource>(
() -> proxy.getAllPlayers().stream().map(Player::getUsername).toList(),
(String st) -> proxy.getPlayer(st).orElse(null))