From 5a294cca880aeb5b0fb92edae7a81bc3b49097ae Mon Sep 17 00:00:00 2001 From: Pedro270707 Date: Sat, 23 Sep 2023 22:11:00 -0300 Subject: [PATCH] Added name option --- .../helpers/EntitySelectorOptions.java | 25 +++++++++++++++++++ .../content/helpers/EntitySelectorParser.java | 18 +++++++++++++ src/main/resources/lang/commander/en_US.lang | 1 + 3 files changed, 44 insertions(+) diff --git a/src/main/java/net/pedroricardo/commander/content/helpers/EntitySelectorOptions.java b/src/main/java/net/pedroricardo/commander/content/helpers/EntitySelectorOptions.java index f250ea2..c0f0609 100644 --- a/src/main/java/net/pedroricardo/commander/content/helpers/EntitySelectorOptions.java +++ b/src/main/java/net/pedroricardo/commander/content/helpers/EntitySelectorOptions.java @@ -7,6 +7,7 @@ import com.mojang.brigadier.suggestion.SuggestionsBuilder; import net.minecraft.core.entity.Entity; import net.minecraft.core.entity.EntityDispatcher; +import net.minecraft.core.entity.EntityLiving; import net.minecraft.core.entity.player.EntityPlayer; import net.minecraft.core.lang.I18n; import net.minecraft.core.lang.text.Text; @@ -43,6 +44,26 @@ public static void register(String key, Modifier modifier, Predicate { + int i = entitySelectorParser.getReader().getCursor(); + boolean bl = entitySelectorParser.shouldInvertValue(); + String string = entitySelectorParser.getReader().readString(); + if (entitySelectorParser.hasNameNotEquals() && !bl) { + entitySelectorParser.getReader().setCursor(i); + throw INAPPLICABLE_OPTION.createWithContext(entitySelectorParser.getReader(), "name"); + } + if (bl) { + entitySelectorParser.setHasNameNotEquals(true); + } else { + entitySelectorParser.setHasNameEquals(true); + } + entitySelectorParser.addPredicate(entity -> { + if (!(entity instanceof EntityLiving)) return bl; + else if (entity instanceof EntityPlayer) return ((EntityPlayer)entity).username.equals(string) != bl; + else if (!((EntityLiving)entity).getDisplayName().startsWith("ยง") || ((EntityLiving)entity).getDisplayName().length() < 2) return ((EntityLiving)entity).getDisplayName().equals(string) != bl; + return ((EntityLiving)entity).getDisplayName().substring(2).equals(string) != bl; + }); + }, entitySelectorParser -> !entitySelectorParser.hasNameEquals(), new TextTranslatable("argument_types.commander.entity.selector.options.name.description")); register("distance", (parser) -> { int cursor = parser.getReader().getCursor(); MinMaxBounds.Doubles bounds = MinMaxBounds.Doubles.fromReader(parser.getReader()); @@ -74,6 +95,10 @@ public static void register(String key, Modifier modifier, Predicate, CompletableF private boolean isSorted = false; private boolean hasLimit = false; private boolean hasType = false; + private boolean hasNameEquals = false; + private boolean hasNameNotEquals = false; public boolean hasGamemodeEquals() { return this.hasGamemodeEquals; @@ -313,6 +315,22 @@ public void setDistance(MinMaxBounds.Doubles distance) { this.distance = distance; } + public boolean hasNameEquals() { + return this.hasNameEquals; + } + + public void setHasNameEquals(boolean bl) { + this.hasNameEquals = bl; + } + + public boolean hasNameNotEquals() { + return this.hasNameNotEquals; + } + + public void setHasNameNotEquals(boolean bl) { + this.hasNameNotEquals = bl; + } + public void setMaxResults(int maxResults) { this.maxResults = maxResults; } diff --git a/src/main/resources/lang/commander/en_US.lang b/src/main/resources/lang/commander/en_US.lang index 2d37d44..42d2101 100644 --- a/src/main/resources/lang/commander/en_US.lang +++ b/src/main/resources/lang/commander/en_US.lang @@ -26,6 +26,7 @@ argument_types.commander.entity.selector.options.type.description=Entities of ty argument_types.commander.entity.selector.options.type.invalid=Invalid or unknown entity type '%s' argument_types.commander.entity.selector.options.distance.description=Distance to entity argument_types.commander.entity.selector.options.distance.invalid=Distance cannot be negative +argument_types.commander.entity.selector.options.name.description=Entity name argument_types.commander.range.empty=Expected value or range of values argument_types.commander.range.swapped=Min cannot be bigger than max commands.commander.achievement.grant.exception_already_has_achievement=Player already has achievement