Compare commits

...
4 Commits
Author SHA1 Message Date
4drian3d 9a7f204308 1.0.1 Release 2022-04-11 17:17:14 +00:00
4drian3d 8ec1f13661 Performance Improvements
- Use Arrays instead of Set in Tags collections
- Improved Tags creation and method performance
2022-04-11 17:14:39 +00:00
4drian3d 2c96be8796 Fix MiniPlaceholders name in Paper 2022-04-11 16:08:58 +00:00
4drian3d 20a8c111f5 Some improvements to build script 2022-03-18 11:42:03 +00:00
9 changed files with 126 additions and 70 deletions

No files matched your search

+18 -4
View File
@@ -29,14 +29,12 @@ jmh {
fork.set(2)
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
withSourcesJar()
withJavadocJar()
}
val projectGroup = project.group as String
val projectVersion = project.version as String
val projectGroup: String = project.group as String
val projectVersion: String = project.version as String
publishing {
publications {
@@ -54,4 +52,20 @@ tasks.withType<Javadoc> {
"https://jd.adventure.kyori.net/api/4.10.1/",
"https://jd.adventure.kyori.net/text-minimessage/4.10.1/"
)
}
java.toolchain.languageVersion.set(JavaLanguageVersion.of(17))
tasks {
compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(11)
}
javadoc {
options.encoding = Charsets.UTF_8.name()
}
processResources {
filteringCharset = Charsets.UTF_8.name()
}
}
@@ -9,6 +9,7 @@ import java.util.function.Predicate;
import me.dreamerzero.miniplaceholders.api.placeholder.AudiencePlaceholder;
import me.dreamerzero.miniplaceholders.api.placeholder.RelationalPlaceholder;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.builder.AbstractBuilder;
import net.kyori.adventure.text.minimessage.Context;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue;
@@ -47,7 +48,7 @@ public interface Expansion {
* @return A TagResolver with variable placeholders of an Audience
* @since 1.0.0
*/
@NotNull TagResolver audiencePlaceholders(@NotNull Audience audience);
@NotNull TagResolver audiencePlaceholders(@NotNull final Audience audience);
/**
* Get the relational placeholders based on two audiences
@@ -60,7 +61,7 @@ public interface Expansion {
* @return A TagResolver with variable placeholders between 2 {@link Audience}s
* @since 1.0.0
*/
@NotNull TagResolver relationalPlaceholders(@NotNull Audience audience, @NotNull Audience otherAudience);
@NotNull TagResolver relationalPlaceholders(@NotNull final Audience audience, @NotNull final Audience otherAudience);
/**
* Get global placeholders
@@ -81,7 +82,7 @@ public interface Expansion {
* @return a new expansion builder
* @since 1.0.0
*/
public static @NotNull Expansion.Builder builder(@NotNull String name){
public static @NotNull Expansion.Builder builder(@NotNull final String name){
return new ExpansionImpl.Builder(name);
}
@@ -107,7 +108,7 @@ public interface Expansion {
*
* @since 1.0.0
*/
public static interface Builder {
public static interface Builder extends AbstractBuilder<Expansion> {
/**
* Adds an audience placeholder
*
@@ -120,7 +121,7 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
Builder audiencePlaceholder(@NotNull String key, @NotNull AudiencePlaceholder audiencePlaceholder);
@NotNull Builder audiencePlaceholder(@NotNull final String key, @NotNull final AudiencePlaceholder audiencePlaceholder);
/**
* Adds an Relational Placeholder based on two audiences
@@ -138,7 +139,7 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
Builder relationalPlaceholder(@NotNull String key, @NotNull RelationalPlaceholder relationalPlaceholder);
@NotNull Builder relationalPlaceholder(@NotNull final String key, @NotNull final RelationalPlaceholder relationalPlaceholder);
/**
* Adds a global placeholder
@@ -150,7 +151,7 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
Builder globalPlaceholder(@NotNull String key, BiFunction<ArgumentQueue, Context, Tag> function);
@NotNull Builder globalPlaceholder(@NotNull final String key, final BiFunction<ArgumentQueue, Context, Tag> function);
/**
* Filter the type of Audiences that this expansion can receive
@@ -165,7 +166,7 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
Builder filter(@Nullable Class<? extends Audience> clazz);
@NotNull Builder filter(@Nullable final Class<? extends Audience> clazz);
/**
* Filters the audiences that this expansion can receive through a Predicate
@@ -179,13 +180,6 @@ public interface Expansion {
* @return the {@link Builder} itself
* @since 1.0.0
*/
Builder filter(@NotNull Predicate<Audience> predicate);
/**
* Build the Expansion
* @return a new {@link Expansion}
* @since 1.0.0
*/
@NotNull Expansion build();
@NotNull Builder filter(@NotNull final Predicate<Audience> predicate);
}
}
@@ -1,5 +1,6 @@
package me.dreamerzero.miniplaceholders.api;
import java.util.Collection;
import java.util.HashSet;
import java.util.Locale;
import java.util.Objects;
@@ -22,23 +23,29 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
final class ExpansionImpl implements Expansion {
private final String name;
private final Set<Tags.Single> audiencePlaceholders;
private final Set<Tags.Relational> relationalPlaceholders;
private final Tags.Single[] audiencePlaceholders;
private final Tags.Relational[] relationalPlaceholders;
private final TagResolver globalPlaceholders;
private final Class<? extends Audience> filterClass;
private final Predicate<Audience> predicateFilter;
ExpansionImpl(
@NotNull String expansionName,
@Nullable Set<Tags.Single> audiencePlaceholders,
@Nullable Set<Tags.Relational> relationalPlaceholders,
@Nullable TagResolver globalPlaceholders,
@Nullable Class<? extends Audience> filterClass,
@Nullable Predicate<Audience> predicateFilter){
@NotNull final String expansionName,
@Nullable final Collection<Tags.Single> audiencePlaceholders,
@Nullable final Collection<Tags.Relational> relationalPlaceholders,
@Nullable final TagResolver globalPlaceholders,
@Nullable final Class<? extends Audience> filterClass,
@Nullable final Predicate<Audience> predicateFilter){
this.name = expansionName+"-";
this.audiencePlaceholders = audiencePlaceholders;
this.relationalPlaceholders = relationalPlaceholders;
this.globalPlaceholders = globalPlaceholders;
this.audiencePlaceholders = audiencePlaceholders != null
? audiencePlaceholders.toArray(Tags.Single[]::new)
: new Tags.Single[0];
this.relationalPlaceholders = relationalPlaceholders != null
? relationalPlaceholders.toArray(Tags.Relational[]::new)
: new Tags.Relational[0];
this.globalPlaceholders = globalPlaceholders == null
? TagResolver.empty()
: globalPlaceholders;
this.filterClass = filterClass;
this.predicateFilter = predicateFilter;
}
@@ -49,49 +56,49 @@ final class ExpansionImpl implements Expansion {
}
@Override
public @NotNull TagResolver audiencePlaceholders(@NotNull Audience audience){
if(audiencePlaceholders == null) return TagResolver.empty();
public @NotNull TagResolver audiencePlaceholders(@NotNull final Audience audience){
if(audiencePlaceholders.length == 0) return TagResolver.empty();
Objects.requireNonNull(audience, () -> "the audience cannot be null");
if(this.singleFilter(audience)) return TagResolver.empty();
TagResolver.Builder placeholders = TagResolver.builder();
for(Tags.Single pl : this.audiencePlaceholders){
final TagResolver.Builder placeholders = TagResolver.builder();
for(final Tags.Single pl : this.audiencePlaceholders){
placeholders.resolver(pl.of(audience));
}
return placeholders.build();
}
private boolean singleFilter(Audience audience){
private boolean singleFilter(final Audience audience){
return filterClass != null && !filterClass.isInstance(audience)
|| predicateFilter != null && predicateFilter.test(audience);
}
@Override
public @NotNull TagResolver relationalPlaceholders(@NotNull Audience audience, @NotNull Audience otherAudience){
if(relationalPlaceholders == null) return TagResolver.empty();
public @NotNull TagResolver relationalPlaceholders(@NotNull final Audience audience, @NotNull final Audience otherAudience){
if(relationalPlaceholders.length == 0) return TagResolver.empty();
Objects.requireNonNull(audience, () -> "the audience cannot be null");
Objects.requireNonNull(otherAudience, () -> "the other audience cannot be null");
if(this.relationalFilter(audience, otherAudience)) return TagResolver.empty();
TagResolver.Builder placeholders = TagResolver.builder();
for(Tags.Relational pl : this.relationalPlaceholders){
final TagResolver.Builder placeholders = TagResolver.builder();
for(final Tags.Relational pl : this.relationalPlaceholders){
placeholders.resolver(pl.of(audience, otherAudience));
}
return placeholders.build();
}
private boolean relationalFilter(Audience audience, Audience otherAudience){
private boolean relationalFilter(final Audience audience, final Audience otherAudience){
return filterClass != null && (!filterClass.isInstance(audience) || !filterClass.isInstance(otherAudience))
|| predicateFilter != null && (!predicateFilter.test(audience) || !predicateFilter.test(otherAudience));
}
@Override
public @NotNull TagResolver globalPlaceholders(){
return this.globalPlaceholders != null ? this.globalPlaceholders : TagResolver.empty();
return this.globalPlaceholders;
}
@Override
@@ -99,7 +106,7 @@ final class ExpansionImpl implements Expansion {
MiniPlaceholders.expansions.add(this);
}
static class Builder implements Expansion.Builder {
static final class Builder implements Expansion.Builder {
private final String expansionName;
private Set<Tags.Single> audiencePlaceholders;
private Set<Tags.Relational> relationalPlaceholders;
@@ -107,13 +114,13 @@ final class ExpansionImpl implements Expansion {
private Class<? extends Audience> filterClass;
private Predicate<Audience> predicateFilter;
Builder(@NotNull String name){
Builder(@NotNull final String name){
this.expansionName = Conditions.nonNullOrEmptyString(name, () -> "expansion name")
.toLowerCase(Locale.ROOT).concat("_");
}
@Override
public Builder audiencePlaceholder(@NotNull String key, @NotNull AudiencePlaceholder audiencePlaceholder){
public Builder audiencePlaceholder(@NotNull final String key, @NotNull final AudiencePlaceholder audiencePlaceholder){
Conditions.nonNullOrEmptyString(key, () -> "placeholder key");
Objects.requireNonNull(audiencePlaceholder, () -> "the audience placeholder cannot be null");
@@ -124,7 +131,7 @@ final class ExpansionImpl implements Expansion {
}
@Override
public Builder relationalPlaceholder(@NotNull String key, @NotNull RelationalPlaceholder relationalPlaceholder){
public Builder relationalPlaceholder(@NotNull final String key, @NotNull final RelationalPlaceholder relationalPlaceholder){
Conditions.nonNullOrEmptyString(key, () -> "placeholder key");
Objects.requireNonNull(relationalPlaceholder, () -> "the relational placeholder cannot be null");
@@ -135,8 +142,7 @@ final class ExpansionImpl implements Expansion {
}
@Override
public Builder globalPlaceholder(@NotNull String key,
BiFunction<ArgumentQueue, Context, Tag> function){
public Builder globalPlaceholder(@NotNull final String key, @NotNull final BiFunction<ArgumentQueue, Context, Tag> function){
Conditions.nonNullOrEmptyString(key, () -> "placeholder key");
Objects.requireNonNull(function, () -> "the global placeholder cannot be null");
@@ -147,13 +153,13 @@ final class ExpansionImpl implements Expansion {
}
@Override
public Builder filter(Class<? extends Audience> clazz) {
public Builder filter(@Nullable final Class<? extends Audience> clazz) {
this.filterClass = clazz;
return this;
}
@Override
public Builder filter(Predicate<Audience> predicate){
public Builder filter(@NotNull final Predicate<Audience> predicate){
this.predicateFilter = predicate;
return this;
}
@@ -1,5 +1,7 @@
package me.dreamerzero.miniplaceholders.api;
import java.util.Objects;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -15,11 +17,11 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
final class Tags {
private Tags(){}
static Relational relational(String name, RelationalPlaceholder relationalPlaceholder){
static Relational relational(@NotNull final String name, @NotNull final RelationalPlaceholder relationalPlaceholder){
return new Tags.Relational(name, relationalPlaceholder);
}
static Single single(String name, AudiencePlaceholder audiencePlaceholder){
static Single single(@NotNull final String name, @NotNull final AudiencePlaceholder audiencePlaceholder){
return new Single(name, audiencePlaceholder);
}
@@ -27,27 +29,39 @@ final class Tags {
private final RelationalPlaceholder relationalPlaceholder;
private final String key;
Relational(String key, RelationalPlaceholder relationalPlaceholder){
Relational(final String key, final RelationalPlaceholder relationalPlaceholder){
this.relationalPlaceholder = relationalPlaceholder;
this.key = key;
}
TagResolver of(Audience audience, Audience otherAudience){
return TagResolver.resolver(new TagResolver(){
TagResolver of(@NotNull final Audience audience, @NotNull final Audience otherAudience){
return new TagResolver(){
@Override
public @Nullable Tag resolve(@NotNull String name, @NotNull ArgumentQueue arguments,
@NotNull Context ctx) throws ParsingException {
if(this.has(name)){
return relationalPlaceholder.tag(audience, otherAudience, arguments, ctx);
}
return null;
return this.has(name)
? relationalPlaceholder.tag(audience, otherAudience, arguments, ctx)
: null;
}
@Override
public boolean has(@NotNull String name) {
return key.equalsIgnoreCase(name);
}
});
};
}
@Override
public boolean equals(Object o){
if(o == this) return true;
if(!(o instanceof Relational)) return false;
return ((Relational)o).key.equals(this.key);
}
@Override
public int hashCode(){
return Objects.hash(key);
}
}
@@ -55,25 +69,39 @@ final class Tags {
private final AudiencePlaceholder audiencePlaceholder;
private final String key;
private Single(String key, AudiencePlaceholder audiencePlaceholder){
private Single(@NotNull final String key, @NotNull final AudiencePlaceholder audiencePlaceholder){
this.key = key;
this.audiencePlaceholder = audiencePlaceholder;
}
public TagResolver of(Audience audience){
return TagResolver.resolver(new TagResolver() {
TagResolver of(@NotNull final Audience audience){
return new TagResolver() {
@Override
public @Nullable Tag resolve(@NotNull String name, @NotNull ArgumentQueue arguments,
@NotNull Context ctx) throws ParsingException {
return this.has(name) ? audiencePlaceholder.tag(audience, arguments, ctx) : null;
return this.has(name)
? audiencePlaceholder.tag(audience, arguments, ctx)
: null;
}
@Override
public boolean has(@NotNull String name) {
return key.equalsIgnoreCase(name);
}
});
};
}
@Override
public boolean equals(Object o){
if(o == this) return true;
if(!(o instanceof Single)) return false;
return ((Single)o).key.equals(this.key);
}
@Override
public int hashCode(){
return Objects.hash(key);
}
}
}
+1 -1
View File
@@ -8,7 +8,7 @@ plugins {
allprojects {
apply(plugin = "java")
group = "me.dreamerzero.miniplaceholders"
version = "1.0.0"
version = "1.0.1"
description = "MiniPlaceholders"
}
+8
View File
@@ -16,4 +16,12 @@ dependencies {
blossom{
replaceToken("{version}", version)
replaceTokenIn("src/main/java/me/dreamerzero/miniplaceholders/common/PluginConstants.java")
}
tasks {
compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(17)
}
}
+3 -2
View File
@@ -10,14 +10,15 @@ dependencies {
paperDevBundle("1.18.2-R0.1-SNAPSHOT")
}
val pluginVersion = version
val pluginVersion: String = version as String
bukkit {
name = "MiniPlaceholders"
main = "me.dreamerzero.miniplaceholders.paper.PaperPlugin"
apiVersion = "1.18"
website = "https://github.com/4drian3d/MiniPlaceholders"
authors = listOf("4drian3d")
version = pluginVersion as String
version = pluginVersion
}
java.toolchain.languageVersion.set(JavaLanguageVersion.of(17))
-1
View File
@@ -7,7 +7,6 @@ pluginManagement {
rootProject.name = "miniplaceholders-parent"
include("miniplaceholders-api")
include("miniplaceholders-common")
include("miniplaceholders-paper")
+7 -1
View File
@@ -5,4 +5,10 @@ dependencies {
compileOnly(project(":miniplaceholders-api"))
}
java.toolchain.languageVersion.set(JavaLanguageVersion.of(17))
java.toolchain.languageVersion.set(JavaLanguageVersion.of(17))
tasks.compileJava {
options.encoding = Charsets.UTF_8.name()
options.release.set(17)
}