EntitySelectorParser.java
net.minecraft.commands.arguments.selector.EntitySelectorParser
信息
- 全限定名:net.minecraft.commands.arguments.selector.EntitySelectorParser
- 类型:public class
- 包:net.minecraft.commands.arguments.selector
- 源码路径:src/main/java/net/minecraft/commands/arguments/selector/EntitySelectorParser.java
- 起始行号:L34
- 职责:
TODO
字段/常量
-
SYNTAX_SELECTOR_START- 类型:
char - 修饰符:
public static final - 源码定位:
L35 - 说明:
TODO
- 类型:
-
SYNTAX_OPTIONS_START- 类型:
char - 修饰符:
private static final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
SYNTAX_OPTIONS_END- 类型:
char - 修饰符:
private static final - 源码定位:
L37 - 说明:
TODO
- 类型:
-
SYNTAX_OPTIONS_KEY_VALUE_SEPARATOR- 类型:
char - 修饰符:
public static final - 源码定位:
L38 - 说明:
TODO
- 类型:
-
SYNTAX_OPTIONS_SEPARATOR- 类型:
char - 修饰符:
private static final - 源码定位:
L39 - 说明:
TODO
- 类型:
-
SYNTAX_NOT- 类型:
char - 修饰符:
public static final - 源码定位:
L40 - 说明:
TODO
- 类型:
-
SYNTAX_TAG- 类型:
char - 修饰符:
public static final - 源码定位:
L41 - 说明:
TODO
- 类型:
-
SELECTOR_NEAREST_PLAYER- 类型:
char - 修饰符:
private static final - 源码定位:
L42 - 说明:
TODO
- 类型:
-
SELECTOR_ALL_PLAYERS- 类型:
char - 修饰符:
private static final - 源码定位:
L43 - 说明:
TODO
- 类型:
-
SELECTOR_RANDOM_PLAYERS- 类型:
char - 修饰符:
private static final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
SELECTOR_CURRENT_ENTITY- 类型:
char - 修饰符:
private static final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
SELECTOR_ALL_ENTITIES- 类型:
char - 修饰符:
private static final - 源码定位:
L46 - 说明:
TODO
- 类型:
-
SELECTOR_NEAREST_ENTITY- 类型:
char - 修饰符:
private static final - 源码定位:
L47 - 说明:
TODO
- 类型:
-
ERROR_INVALID_NAME_OR_UUID- 类型:
SimpleCommandExceptionType - 修饰符:
public static final - 源码定位:
L48 - 说明:
TODO
- 类型:
-
ERROR_UNKNOWN_SELECTOR_TYPE- 类型:
DynamicCommandExceptionType - 修饰符:
public static final - 源码定位:
L51 - 说明:
TODO
- 类型:
-
ERROR_SELECTORS_NOT_ALLOWED- 类型:
SimpleCommandExceptionType - 修饰符:
public static final - 源码定位:
L54 - 说明:
TODO
- 类型:
-
ERROR_MISSING_SELECTOR_TYPE- 类型:
SimpleCommandExceptionType - 修饰符:
public static final - 源码定位:
L57 - 说明:
TODO
- 类型:
-
ERROR_EXPECTED_END_OF_OPTIONS- 类型:
SimpleCommandExceptionType - 修饰符:
public static final - 源码定位:
L60 - 说明:
TODO
- 类型:
-
ERROR_EXPECTED_OPTION_VALUE- 类型:
DynamicCommandExceptionType - 修饰符:
public static final - 源码定位:
L63 - 说明:
TODO
- 类型:
-
ORDER_NEAREST- 类型:
BiConsumer<Vec3,List<?extends Entity>> - 修饰符:
public static final - 源码定位:
L66 - 说明:
TODO
- 类型:
-
ORDER_FURTHEST- 类型:
BiConsumer<Vec3,List<?extends Entity>> - 修饰符:
public static final - 源码定位:
L69 - 说明:
TODO
- 类型:
-
ORDER_RANDOM- 类型:
BiConsumer<Vec3,List<?extends Entity>> - 修饰符:
public static final - 源码定位:
L72 - 说明:
TODO
- 类型:
-
SUGGEST_NOTHING- 类型:
BiFunction<SuggestionsBuilder,Consumer<SuggestionsBuilder>,CompletableFuture<Suggestions>> - 修饰符:
public static final - 源码定位:
L73 - 说明:
TODO
- 类型:
-
reader- 类型:
StringReader - 修饰符:
private final - 源码定位:
L74 - 说明:
TODO
- 类型:
-
allowSelectors- 类型:
boolean - 修饰符:
private final - 源码定位:
L75 - 说明:
TODO
- 类型:
-
maxResults- 类型:
int - 修饰符:
private - 源码定位:
L76 - 说明:
TODO
- 类型:
-
includesEntities- 类型:
boolean - 修饰符:
private - 源码定位:
L77 - 说明:
TODO
- 类型:
-
worldLimited- 类型:
boolean - 修饰符:
private - 源码定位:
L78 - 说明:
TODO
- 类型:
-
distance- 类型:
MinMaxBounds.Doubles - 修饰符:
private - 源码定位:
L79 - 说明:
TODO
- 类型:
-
level- 类型:
MinMaxBounds.Ints - 修饰符:
private - 源码定位:
L80 - 说明:
TODO
- 类型:
-
x- 类型:
Double - 修饰符:
private - 源码定位:
L81 - 说明:
TODO
- 类型:
-
y- 类型:
Double - 修饰符:
private - 源码定位:
L82 - 说明:
TODO
- 类型:
-
z- 类型:
Double - 修饰符:
private - 源码定位:
L83 - 说明:
TODO
- 类型:
-
deltaX- 类型:
Double - 修饰符:
private - 源码定位:
L84 - 说明:
TODO
- 类型:
-
deltaY- 类型:
Double - 修饰符:
private - 源码定位:
L85 - 说明:
TODO
- 类型:
-
deltaZ- 类型:
Double - 修饰符:
private - 源码定位:
L86 - 说明:
TODO
- 类型:
-
rotX- 类型:
MinMaxBounds.FloatDegrees - 修饰符:
private - 源码定位:
L87 - 说明:
TODO
- 类型:
-
rotY- 类型:
MinMaxBounds.FloatDegrees - 修饰符:
private - 源码定位:
L88 - 说明:
TODO
- 类型:
-
predicates- 类型:
List<Predicate<Entity>> - 修饰符:
private final - 源码定位:
L89 - 说明:
TODO
- 类型:
-
order- 类型:
BiConsumer<Vec3,List<?extends Entity>> - 修饰符:
private - 源码定位:
L90 - 说明:
TODO
- 类型:
-
currentEntity- 类型:
boolean - 修饰符:
private - 源码定位:
L91 - 说明:
TODO
- 类型:
-
playerName- 类型:
String - 修饰符:
private - 源码定位:
L92 - 说明:
TODO
- 类型:
-
startPosition- 类型:
int - 修饰符:
private - 源码定位:
L93 - 说明:
TODO
- 类型:
-
entityUUID- 类型:
UUID - 修饰符:
private - 源码定位:
L94 - 说明:
TODO
- 类型:
-
suggestions- 类型:
BiFunction<SuggestionsBuilder,Consumer<SuggestionsBuilder>,CompletableFuture<Suggestions>> - 修饰符:
private - 源码定位:
L95 - 说明:
TODO
- 类型:
-
hasNameEquals- 类型:
boolean - 修饰符:
private - 源码定位:
L96 - 说明:
TODO
- 类型:
-
hasNameNotEquals- 类型:
boolean - 修饰符:
private - 源码定位:
L97 - 说明:
TODO
- 类型:
-
isLimited- 类型:
boolean - 修饰符:
private - 源码定位:
L98 - 说明:
TODO
- 类型:
-
isSorted- 类型:
boolean - 修饰符:
private - 源码定位:
L99 - 说明:
TODO
- 类型:
-
hasGamemodeEquals- 类型:
boolean - 修饰符:
private - 源码定位:
L100 - 说明:
TODO
- 类型:
-
hasGamemodeNotEquals- 类型:
boolean - 修饰符:
private - 源码定位:
L101 - 说明:
TODO
- 类型:
-
hasTeamEquals- 类型:
boolean - 修饰符:
private - 源码定位:
L102 - 说明:
TODO
- 类型:
-
hasTeamNotEquals- 类型:
boolean - 修饰符:
private - 源码定位:
L103 - 说明:
TODO
- 类型:
-
type- 类型:
EntityType<?> - 修饰符:
private - 源码定位:
L104 - 说明:
TODO
- 类型:
-
typeInverse- 类型:
boolean - 修饰符:
private - 源码定位:
L105 - 说明:
TODO
- 类型:
-
hasScores- 类型:
boolean - 修饰符:
private - 源码定位:
L106 - 说明:
TODO
- 类型:
-
hasAdvancements- 类型:
boolean - 修饰符:
private - 源码定位:
L107 - 说明:
TODO
- 类型:
-
usesSelectors- 类型:
boolean - 修饰符:
private - 源码定位:
L108 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public EntitySelectorParser(StringReader reader, boolean allowSelectors) @ L110
- 构造器名:EntitySelectorParser
- 源码定位:L110
- 修饰符:public
参数:
- reader: StringReader
- allowSelectors: boolean
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static <S> boolean allowSelectors(S source) @ L115
- 方法名:allowSelectors
- 源码定位:L115
- 返回类型:
boolean - 修饰符:public static
参数:
- source: S
说明:
TODO
public static boolean allowSelectors(PermissionSetSupplier source) @ L119
- 方法名:allowSelectors
- 源码定位:L119
- 返回类型:boolean
- 修饰符:public static
参数:
- source: PermissionSetSupplier
说明:
TODO
public EntitySelector getSelector() @ L124
- 方法名:getSelector
- 源码定位:L124
- 返回类型:EntitySelector
- 修饰符:public
参数:
- 无
说明:
TODO
private AABB createAabb(double x, double y, double z) @ L161
- 方法名:createAabb
- 源码定位:L161
- 返回类型:AABB
- 修饰符:private
参数:
- x: double
- y: double
- z: double
说明:
TODO
private void finalizePredicates() @ L174
- 方法名:finalizePredicates
- 源码定位:L174
- 返回类型:void
- 修饰符:private
参数:
- 无
说明:
TODO
private Predicate<Entity> createRotationPredicate(MinMaxBounds.FloatDegrees range, ToFloatFunction<Entity> function) @ L188
- 方法名:createRotationPredicate
- 源码定位:L188
- 返回类型:Predicate
- 修饰符:private
参数:
- range: MinMaxBounds.FloatDegrees
- function: ToFloatFunction
说明:
TODO
protected void parseSelector() @ L197
- 方法名:parseSelector
- 源码定位:L197
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void parseNameOrUUID() @ L263
- 方法名:parseNameOrUUID
- 源码定位:L263
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void parseOptions() @ L287
- 方法名:parseOptions
- 源码定位:L287
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
public boolean shouldInvertValue() @ L329
- 方法名:shouldInvertValue
- 源码定位:L329
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean isTag() @ L340
- 方法名:isTag
- 源码定位:L340
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public StringReader getReader() @ L351
- 方法名:getReader
- 源码定位:L351
- 返回类型:StringReader
- 修饰符:public
参数:
- 无
说明:
TODO
public void addPredicate(Predicate<Entity> predicate) @ L355
- 方法名:addPredicate
- 源码定位:L355
- 返回类型:void
- 修饰符:public
参数:
- predicate: Predicate
说明:
TODO
public void setWorldLimited() @ L359
- 方法名:setWorldLimited
- 源码定位:L359
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public MinMaxBounds.Doubles getDistance() @ L363
- 方法名:getDistance
- 源码定位:L363
- 返回类型:MinMaxBounds.Doubles
- 修饰符:public
参数:
- 无
说明:
TODO
public void setDistance(MinMaxBounds.Doubles distance) @ L367
- 方法名:setDistance
- 源码定位:L367
- 返回类型:void
- 修饰符:public
参数:
- distance: MinMaxBounds.Doubles
说明:
TODO
public MinMaxBounds.Ints getLevel() @ L371
- 方法名:getLevel
- 源码定位:L371
- 返回类型:MinMaxBounds.Ints
- 修饰符:public
参数:
- 无
说明:
TODO
public void setLevel(MinMaxBounds.Ints level) @ L375
- 方法名:setLevel
- 源码定位:L375
- 返回类型:void
- 修饰符:public
参数:
- level: MinMaxBounds.Ints
说明:
TODO
public MinMaxBounds.FloatDegrees getRotX() @ L379
- 方法名:getRotX
- 源码定位:L379
- 返回类型:MinMaxBounds.FloatDegrees
- 修饰符:public
参数:
- 无
说明:
TODO
public void setRotX(MinMaxBounds.FloatDegrees rotX) @ L383
- 方法名:setRotX
- 源码定位:L383
- 返回类型:void
- 修饰符:public
参数:
- rotX: MinMaxBounds.FloatDegrees
说明:
TODO
public MinMaxBounds.FloatDegrees getRotY() @ L387
- 方法名:getRotY
- 源码定位:L387
- 返回类型:MinMaxBounds.FloatDegrees
- 修饰符:public
参数:
- 无
说明:
TODO
public void setRotY(MinMaxBounds.FloatDegrees rotY) @ L391
- 方法名:setRotY
- 源码定位:L391
- 返回类型:void
- 修饰符:public
参数:
- rotY: MinMaxBounds.FloatDegrees
说明:
TODO
public Double getX() @ L395
- 方法名:getX
- 源码定位:L395
- 返回类型:Double
- 修饰符:public
参数:
- 无
说明:
TODO
public Double getY() @ L399
- 方法名:getY
- 源码定位:L399
- 返回类型:Double
- 修饰符:public
参数:
- 无
说明:
TODO
public Double getZ() @ L403
- 方法名:getZ
- 源码定位:L403
- 返回类型:Double
- 修饰符:public
参数:
- 无
说明:
TODO
public void setX(double x) @ L407
- 方法名:setX
- 源码定位:L407
- 返回类型:void
- 修饰符:public
参数:
- x: double
说明:
TODO
public void setY(double y) @ L411
- 方法名:setY
- 源码定位:L411
- 返回类型:void
- 修饰符:public
参数:
- y: double
说明:
TODO
public void setZ(double z) @ L415
- 方法名:setZ
- 源码定位:L415
- 返回类型:void
- 修饰符:public
参数:
- z: double
说明:
TODO
public void setDeltaX(double deltaX) @ L419
- 方法名:setDeltaX
- 源码定位:L419
- 返回类型:void
- 修饰符:public
参数:
- deltaX: double
说明:
TODO
public void setDeltaY(double deltaY) @ L423
- 方法名:setDeltaY
- 源码定位:L423
- 返回类型:void
- 修饰符:public
参数:
- deltaY: double
说明:
TODO
public void setDeltaZ(double deltaZ) @ L427
- 方法名:setDeltaZ
- 源码定位:L427
- 返回类型:void
- 修饰符:public
参数:
- deltaZ: double
说明:
TODO
public Double getDeltaX() @ L431
- 方法名:getDeltaX
- 源码定位:L431
- 返回类型:Double
- 修饰符:public
参数:
- 无
说明:
TODO
public Double getDeltaY() @ L435
- 方法名:getDeltaY
- 源码定位:L435
- 返回类型:Double
- 修饰符:public
参数:
- 无
说明:
TODO
public Double getDeltaZ() @ L439
- 方法名:getDeltaZ
- 源码定位:L439
- 返回类型:Double
- 修饰符:public
参数:
- 无
说明:
TODO
public void setMaxResults(int maxResults) @ L443
- 方法名:setMaxResults
- 源码定位:L443
- 返回类型:void
- 修饰符:public
参数:
- maxResults: int
说明:
TODO
public void setIncludesEntities(boolean includesEntities) @ L447
- 方法名:setIncludesEntities
- 源码定位:L447
- 返回类型:void
- 修饰符:public
参数:
- includesEntities: boolean
说明:
TODO
public BiConsumer<Vec3,List<?extends Entity>> getOrder() @ L451
- 方法名:getOrder
- 源码定位:L451
- 返回类型:BiConsumer<Vec3,List<?extends Entity>>
- 修饰符:public
参数:
- 无
说明:
TODO
public void setOrder(BiConsumer<Vec3,List<?extends Entity>> order) @ L455
- 方法名:setOrder
- 源码定位:L455
- 返回类型:void
- 修饰符:public
参数:
- order: BiConsumer<Vec3,List<?extends Entity>>
说明:
TODO
public EntitySelector parse() @ L459
- 方法名:parse
- 源码定位:L459
- 返回类型:EntitySelector
- 修饰符:public
参数:
- 无
说明:
TODO
private static void fillSelectorSuggestions(SuggestionsBuilder builder) @ L477
- 方法名:fillSelectorSuggestions
- 源码定位:L477
- 返回类型:void
- 修饰符:private static
参数:
- builder: SuggestionsBuilder
说明:
TODO
private CompletableFuture<Suggestions> suggestNameOrSelector(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L486
- 方法名:suggestNameOrSelector
- 源码定位:L486
- 返回类型:CompletableFuture
- 修饰符:private
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
private CompletableFuture<Suggestions> suggestName(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L495
- 方法名:suggestName
- 源码定位:L495
- 返回类型:CompletableFuture
- 修饰符:private
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
private CompletableFuture<Suggestions> suggestSelector(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L501
- 方法名:suggestSelector
- 源码定位:L501
- 返回类型:CompletableFuture
- 修饰符:private
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
private CompletableFuture<Suggestions> suggestOpenOptions(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L508
- 方法名:suggestOpenOptions
- 源码定位:L508
- 返回类型:CompletableFuture
- 修饰符:private
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
private CompletableFuture<Suggestions> suggestOptionsKeyOrClose(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L513
- 方法名:suggestOptionsKeyOrClose
- 源码定位:L513
- 返回类型:CompletableFuture
- 修饰符:private
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
private CompletableFuture<Suggestions> suggestOptionsKey(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L519
- 方法名:suggestOptionsKey
- 源码定位:L519
- 返回类型:CompletableFuture
- 修饰符:private
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
private CompletableFuture<Suggestions> suggestOptionsNextOrClose(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L524
- 方法名:suggestOptionsNextOrClose
- 源码定位:L524
- 返回类型:CompletableFuture
- 修饰符:private
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
private CompletableFuture<Suggestions> suggestEquals(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L530
- 方法名:suggestEquals
- 源码定位:L530
- 返回类型:CompletableFuture
- 修饰符:private
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
public boolean isCurrentEntity() @ L535
- 方法名:isCurrentEntity
- 源码定位:L535
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setSuggestions(BiFunction<SuggestionsBuilder,Consumer<SuggestionsBuilder>,CompletableFuture<Suggestions>> suggestions) @ L539
- 方法名:setSuggestions
- 源码定位:L539
- 返回类型:void
- 修饰符:public
参数:
- suggestions: BiFunction<SuggestionsBuilder,Consumer
,CompletableFuture >
说明:
TODO
public CompletableFuture<Suggestions> fillSuggestions(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) @ L543
- 方法名:fillSuggestions
- 源码定位:L543
- 返回类型:CompletableFuture
- 修饰符:public
参数:
- builder: SuggestionsBuilder
- names: Consumer
说明:
TODO
public boolean hasNameEquals() @ L547
- 方法名:hasNameEquals
- 源码定位:L547
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setHasNameEquals(boolean hasNameEquals) @ L551
- 方法名:setHasNameEquals
- 源码定位:L551
- 返回类型:void
- 修饰符:public
参数:
- hasNameEquals: boolean
说明:
TODO
public boolean hasNameNotEquals() @ L555
- 方法名:hasNameNotEquals
- 源码定位:L555
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setHasNameNotEquals(boolean hasNameNotEquals) @ L559
- 方法名:setHasNameNotEquals
- 源码定位:L559
- 返回类型:void
- 修饰符:public
参数:
- hasNameNotEquals: boolean
说明:
TODO
public boolean isLimited() @ L563
- 方法名:isLimited
- 源码定位:L563
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setLimited(boolean limited) @ L567
- 方法名:setLimited
- 源码定位:L567
- 返回类型:void
- 修饰符:public
参数:
- limited: boolean
说明:
TODO
public boolean isSorted() @ L571
- 方法名:isSorted
- 源码定位:L571
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setSorted(boolean sorted) @ L575
- 方法名:setSorted
- 源码定位:L575
- 返回类型:void
- 修饰符:public
参数:
- sorted: boolean
说明:
TODO
public boolean hasGamemodeEquals() @ L579
- 方法名:hasGamemodeEquals
- 源码定位:L579
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setHasGamemodeEquals(boolean hasGamemodeEquals) @ L583
- 方法名:setHasGamemodeEquals
- 源码定位:L583
- 返回类型:void
- 修饰符:public
参数:
- hasGamemodeEquals: boolean
说明:
TODO
public boolean hasGamemodeNotEquals() @ L587
- 方法名:hasGamemodeNotEquals
- 源码定位:L587
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setHasGamemodeNotEquals(boolean hasGamemodeNotEquals) @ L591
- 方法名:setHasGamemodeNotEquals
- 源码定位:L591
- 返回类型:void
- 修饰符:public
参数:
- hasGamemodeNotEquals: boolean
说明:
TODO
public boolean hasTeamEquals() @ L595
- 方法名:hasTeamEquals
- 源码定位:L595
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setHasTeamEquals(boolean hasTeamEquals) @ L599
- 方法名:setHasTeamEquals
- 源码定位:L599
- 返回类型:void
- 修饰符:public
参数:
- hasTeamEquals: boolean
说明:
TODO
public boolean hasTeamNotEquals() @ L603
- 方法名:hasTeamNotEquals
- 源码定位:L603
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setHasTeamNotEquals(boolean hasTeamNotEquals) @ L607
- 方法名:setHasTeamNotEquals
- 源码定位:L607
- 返回类型:void
- 修饰符:public
参数:
- hasTeamNotEquals: boolean
说明:
TODO
public void limitToType(EntityType<?> type) @ L611
- 方法名:limitToType
- 源码定位:L611
- 返回类型:void
- 修饰符:public
参数:
- type: EntityType<?>
说明:
TODO
public void setTypeLimitedInversely() @ L615
- 方法名:setTypeLimitedInversely
- 源码定位:L615
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean isTypeLimited() @ L619
- 方法名:isTypeLimited
- 源码定位:L619
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean isTypeLimitedInversely() @ L623
- 方法名:isTypeLimitedInversely
- 源码定位:L623
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public boolean hasScores() @ L627
- 方法名:hasScores
- 源码定位:L627
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setHasScores(boolean hasScores) @ L631
- 方法名:setHasScores
- 源码定位:L631
- 返回类型:void
- 修饰符:public
参数:
- hasScores: boolean
说明:
TODO
public boolean hasAdvancements() @ L635
- 方法名:hasAdvancements
- 源码定位:L635
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public void setHasAdvancements(boolean hasAdvancements) @ L639
- 方法名:setHasAdvancements
- 源码定位:L639
- 返回类型:void
- 修饰符:public
参数:
- hasAdvancements: boolean
说明:
TODO
代码
public class EntitySelectorParser {
public static final char SYNTAX_SELECTOR_START = '@';
private static final char SYNTAX_OPTIONS_START = '[';
private static final char SYNTAX_OPTIONS_END = ']';
public static final char SYNTAX_OPTIONS_KEY_VALUE_SEPARATOR = '=';
private static final char SYNTAX_OPTIONS_SEPARATOR = ',';
public static final char SYNTAX_NOT = '!';
public static final char SYNTAX_TAG = '#';
private static final char SELECTOR_NEAREST_PLAYER = 'p';
private static final char SELECTOR_ALL_PLAYERS = 'a';
private static final char SELECTOR_RANDOM_PLAYERS = 'r';
private static final char SELECTOR_CURRENT_ENTITY = 's';
private static final char SELECTOR_ALL_ENTITIES = 'e';
private static final char SELECTOR_NEAREST_ENTITY = 'n';
public static final SimpleCommandExceptionType ERROR_INVALID_NAME_OR_UUID = new SimpleCommandExceptionType(
Component.translatable("argument.entity.invalid")
);
public static final DynamicCommandExceptionType ERROR_UNKNOWN_SELECTOR_TYPE = new DynamicCommandExceptionType(
type -> Component.translatableEscape("argument.entity.selector.unknown", type)
);
public static final SimpleCommandExceptionType ERROR_SELECTORS_NOT_ALLOWED = new SimpleCommandExceptionType(
Component.translatable("argument.entity.selector.not_allowed")
);
public static final SimpleCommandExceptionType ERROR_MISSING_SELECTOR_TYPE = new SimpleCommandExceptionType(
Component.translatable("argument.entity.selector.missing")
);
public static final SimpleCommandExceptionType ERROR_EXPECTED_END_OF_OPTIONS = new SimpleCommandExceptionType(
Component.translatable("argument.entity.options.unterminated")
);
public static final DynamicCommandExceptionType ERROR_EXPECTED_OPTION_VALUE = new DynamicCommandExceptionType(
name -> Component.translatableEscape("argument.entity.options.valueless", name)
);
public static final BiConsumer<Vec3, List<? extends Entity>> ORDER_NEAREST = (p, c) -> c.sort(
(a, b) -> Doubles.compare(a.distanceToSqr(p), b.distanceToSqr(p))
);
public static final BiConsumer<Vec3, List<? extends Entity>> ORDER_FURTHEST = (p, c) -> c.sort(
(a, b) -> Doubles.compare(b.distanceToSqr(p), a.distanceToSqr(p))
);
public static final BiConsumer<Vec3, List<? extends Entity>> ORDER_RANDOM = (p, c) -> Collections.shuffle(c);
public static final BiFunction<SuggestionsBuilder, Consumer<SuggestionsBuilder>, CompletableFuture<Suggestions>> SUGGEST_NOTHING = (b, s) -> b.buildFuture();
private final StringReader reader;
private final boolean allowSelectors;
private int maxResults;
private boolean includesEntities;
private boolean worldLimited;
private MinMaxBounds.@Nullable Doubles distance;
private MinMaxBounds.@Nullable Ints level;
private @Nullable Double x;
private @Nullable Double y;
private @Nullable Double z;
private @Nullable Double deltaX;
private @Nullable Double deltaY;
private @Nullable Double deltaZ;
private MinMaxBounds.@Nullable FloatDegrees rotX;
private MinMaxBounds.@Nullable FloatDegrees rotY;
private final List<Predicate<Entity>> predicates = new ArrayList<>();
private BiConsumer<Vec3, List<? extends Entity>> order = EntitySelector.ORDER_ARBITRARY;
private boolean currentEntity;
private @Nullable String playerName;
private int startPosition;
private @Nullable UUID entityUUID;
private BiFunction<SuggestionsBuilder, Consumer<SuggestionsBuilder>, CompletableFuture<Suggestions>> suggestions = SUGGEST_NOTHING;
private boolean hasNameEquals;
private boolean hasNameNotEquals;
private boolean isLimited;
private boolean isSorted;
private boolean hasGamemodeEquals;
private boolean hasGamemodeNotEquals;
private boolean hasTeamEquals;
private boolean hasTeamNotEquals;
private @Nullable EntityType<?> type;
private boolean typeInverse;
private boolean hasScores;
private boolean hasAdvancements;
private boolean usesSelectors;
public EntitySelectorParser(StringReader reader, boolean allowSelectors) {
this.reader = reader;
this.allowSelectors = allowSelectors;
}
public static <S> boolean allowSelectors(S source) {
return source instanceof PermissionSetSupplier sender && sender.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS);
}
@Deprecated
public static boolean allowSelectors(PermissionSetSupplier source) {
return source.permissions().hasPermission(Permissions.COMMANDS_ENTITY_SELECTORS);
}
public EntitySelector getSelector() {
AABB aabb;
if (this.deltaX == null && this.deltaY == null && this.deltaZ == null) {
if (this.distance != null && this.distance.max().isPresent()) {
double maxRange = (Double)this.distance.max().get();
aabb = new AABB(-maxRange, -maxRange, -maxRange, maxRange + 1.0, maxRange + 1.0, maxRange + 1.0);
} else {
aabb = null;
}
} else {
aabb = this.createAabb(this.deltaX == null ? 0.0 : this.deltaX, this.deltaY == null ? 0.0 : this.deltaY, this.deltaZ == null ? 0.0 : this.deltaZ);
}
Function<Vec3, Vec3> position;
if (this.x == null && this.y == null && this.z == null) {
position = o -> o;
} else {
position = o -> new Vec3(this.x == null ? o.x : this.x, this.y == null ? o.y : this.y, this.z == null ? o.z : this.z);
}
return new EntitySelector(
this.maxResults,
this.includesEntities,
this.worldLimited,
List.copyOf(this.predicates),
this.distance,
position,
aabb,
this.order,
this.currentEntity,
this.playerName,
this.entityUUID,
this.type,
this.usesSelectors
);
}
private AABB createAabb(double x, double y, double z) {
boolean xNeg = x < 0.0;
boolean yNeg = y < 0.0;
boolean zNeg = z < 0.0;
double xMin = xNeg ? x : 0.0;
double yMin = yNeg ? y : 0.0;
double zMin = zNeg ? z : 0.0;
double xMax = (xNeg ? 0.0 : x) + 1.0;
double yMax = (yNeg ? 0.0 : y) + 1.0;
double zMax = (zNeg ? 0.0 : z) + 1.0;
return new AABB(xMin, yMin, zMin, xMax, yMax, zMax);
}
private void finalizePredicates() {
if (this.rotX != null) {
this.predicates.add(this.createRotationPredicate(this.rotX, Entity::getXRot));
}
if (this.rotY != null) {
this.predicates.add(this.createRotationPredicate(this.rotY, Entity::getYRot));
}
if (this.level != null) {
this.predicates.add(e -> e instanceof ServerPlayer serverPlayer && this.level.matches(serverPlayer.experienceLevel));
}
}
private Predicate<Entity> createRotationPredicate(MinMaxBounds.FloatDegrees range, ToFloatFunction<Entity> function) {
float min = Mth.wrapDegrees(range.min().orElse(0.0F));
float max = Mth.wrapDegrees(range.max().orElse(359.0F));
return e -> {
float rotation = Mth.wrapDegrees(function.applyAsFloat(e));
return min > max ? rotation >= min || rotation <= max : rotation >= min && rotation <= max;
};
}
protected void parseSelector() throws CommandSyntaxException {
this.usesSelectors = true;
this.suggestions = this::suggestSelector;
if (!this.reader.canRead()) {
throw ERROR_MISSING_SELECTOR_TYPE.createWithContext(this.reader);
} else {
int start = this.reader.getCursor();
char type = this.reader.read();
if (switch (type) {
case 'a' -> {
this.maxResults = Integer.MAX_VALUE;
this.includesEntities = false;
this.order = EntitySelector.ORDER_ARBITRARY;
this.limitToType(EntityType.PLAYER);
yield false;
}
default -> {
this.reader.setCursor(start);
throw ERROR_UNKNOWN_SELECTOR_TYPE.createWithContext(this.reader, "@" + type);
}
case 'e' -> {
this.maxResults = Integer.MAX_VALUE;
this.includesEntities = true;
this.order = EntitySelector.ORDER_ARBITRARY;
yield true;
}
case 'n' -> {
this.maxResults = 1;
this.includesEntities = true;
this.order = ORDER_NEAREST;
yield true;
}
case 'p' -> {
this.maxResults = 1;
this.includesEntities = false;
this.order = ORDER_NEAREST;
this.limitToType(EntityType.PLAYER);
yield false;
}
case 'r' -> {
this.maxResults = 1;
this.includesEntities = false;
this.order = ORDER_RANDOM;
this.limitToType(EntityType.PLAYER);
yield false;
}
case 's' -> {
this.maxResults = 1;
this.includesEntities = true;
this.currentEntity = true;
yield false;
}
}) {
this.predicates.add(Entity::isAlive);
}
this.suggestions = this::suggestOpenOptions;
if (this.reader.canRead() && this.reader.peek() == '[') {
this.reader.skip();
this.suggestions = this::suggestOptionsKeyOrClose;
this.parseOptions();
}
}
}
protected void parseNameOrUUID() throws CommandSyntaxException {
if (this.reader.canRead()) {
this.suggestions = this::suggestName;
}
int start = this.reader.getCursor();
String name = this.reader.readString();
try {
this.entityUUID = UUID.fromString(name);
this.includesEntities = true;
} catch (IllegalArgumentException var4) {
if (name.isEmpty() || name.length() > 16) {
this.reader.setCursor(start);
throw ERROR_INVALID_NAME_OR_UUID.createWithContext(this.reader);
}
this.includesEntities = false;
this.playerName = name;
}
this.maxResults = 1;
}
protected void parseOptions() throws CommandSyntaxException {
this.suggestions = this::suggestOptionsKey;
this.reader.skipWhitespace();
while (this.reader.canRead() && this.reader.peek() != ']') {
this.reader.skipWhitespace();
int start = this.reader.getCursor();
String key = this.reader.readString();
EntitySelectorOptions.Modifier modifier = EntitySelectorOptions.get(this, key, start);
this.reader.skipWhitespace();
if (!this.reader.canRead() || this.reader.peek() != '=') {
this.reader.setCursor(start);
throw ERROR_EXPECTED_OPTION_VALUE.createWithContext(this.reader, key);
}
this.reader.skip();
this.reader.skipWhitespace();
this.suggestions = SUGGEST_NOTHING;
modifier.handle(this);
this.reader.skipWhitespace();
this.suggestions = this::suggestOptionsNextOrClose;
if (this.reader.canRead()) {
if (this.reader.peek() != ',') {
if (this.reader.peek() != ']') {
throw ERROR_EXPECTED_END_OF_OPTIONS.createWithContext(this.reader);
}
break;
}
this.reader.skip();
this.suggestions = this::suggestOptionsKey;
}
}
if (this.reader.canRead()) {
this.reader.skip();
this.suggestions = SUGGEST_NOTHING;
} else {
throw ERROR_EXPECTED_END_OF_OPTIONS.createWithContext(this.reader);
}
}
public boolean shouldInvertValue() {
this.reader.skipWhitespace();
if (this.reader.canRead() && this.reader.peek() == '!') {
this.reader.skip();
this.reader.skipWhitespace();
return true;
} else {
return false;
}
}
public boolean isTag() {
this.reader.skipWhitespace();
if (this.reader.canRead() && this.reader.peek() == '#') {
this.reader.skip();
this.reader.skipWhitespace();
return true;
} else {
return false;
}
}
public StringReader getReader() {
return this.reader;
}
public void addPredicate(Predicate<Entity> predicate) {
this.predicates.add(predicate);
}
public void setWorldLimited() {
this.worldLimited = true;
}
public MinMaxBounds.@Nullable Doubles getDistance() {
return this.distance;
}
public void setDistance(MinMaxBounds.Doubles distance) {
this.distance = distance;
}
public MinMaxBounds.@Nullable Ints getLevel() {
return this.level;
}
public void setLevel(MinMaxBounds.Ints level) {
this.level = level;
}
public MinMaxBounds.@Nullable FloatDegrees getRotX() {
return this.rotX;
}
public void setRotX(MinMaxBounds.FloatDegrees rotX) {
this.rotX = rotX;
}
public MinMaxBounds.@Nullable FloatDegrees getRotY() {
return this.rotY;
}
public void setRotY(MinMaxBounds.FloatDegrees rotY) {
this.rotY = rotY;
}
public @Nullable Double getX() {
return this.x;
}
public @Nullable Double getY() {
return this.y;
}
public @Nullable Double getZ() {
return this.z;
}
public void setX(double x) {
this.x = x;
}
public void setY(double y) {
this.y = y;
}
public void setZ(double z) {
this.z = z;
}
public void setDeltaX(double deltaX) {
this.deltaX = deltaX;
}
public void setDeltaY(double deltaY) {
this.deltaY = deltaY;
}
public void setDeltaZ(double deltaZ) {
this.deltaZ = deltaZ;
}
public @Nullable Double getDeltaX() {
return this.deltaX;
}
public @Nullable Double getDeltaY() {
return this.deltaY;
}
public @Nullable Double getDeltaZ() {
return this.deltaZ;
}
public void setMaxResults(int maxResults) {
this.maxResults = maxResults;
}
public void setIncludesEntities(boolean includesEntities) {
this.includesEntities = includesEntities;
}
public BiConsumer<Vec3, List<? extends Entity>> getOrder() {
return this.order;
}
public void setOrder(BiConsumer<Vec3, List<? extends Entity>> order) {
this.order = order;
}
public EntitySelector parse() throws CommandSyntaxException {
this.startPosition = this.reader.getCursor();
this.suggestions = this::suggestNameOrSelector;
if (this.reader.canRead() && this.reader.peek() == '@') {
if (!this.allowSelectors) {
throw ERROR_SELECTORS_NOT_ALLOWED.createWithContext(this.reader);
}
this.reader.skip();
this.parseSelector();
} else {
this.parseNameOrUUID();
}
this.finalizePredicates();
return this.getSelector();
}
private static void fillSelectorSuggestions(SuggestionsBuilder builder) {
builder.suggest("@p", Component.translatable("argument.entity.selector.nearestPlayer"));
builder.suggest("@a", Component.translatable("argument.entity.selector.allPlayers"));
builder.suggest("@r", Component.translatable("argument.entity.selector.randomPlayer"));
builder.suggest("@s", Component.translatable("argument.entity.selector.self"));
builder.suggest("@e", Component.translatable("argument.entity.selector.allEntities"));
builder.suggest("@n", Component.translatable("argument.entity.selector.nearestEntity"));
}
private CompletableFuture<Suggestions> suggestNameOrSelector(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
names.accept(builder);
if (this.allowSelectors) {
fillSelectorSuggestions(builder);
}
return builder.buildFuture();
}
private CompletableFuture<Suggestions> suggestName(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
SuggestionsBuilder sub = builder.createOffset(this.startPosition);
names.accept(sub);
return builder.add(sub).buildFuture();
}
private CompletableFuture<Suggestions> suggestSelector(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
SuggestionsBuilder sub = builder.createOffset(builder.getStart() - 1);
fillSelectorSuggestions(sub);
builder.add(sub);
return builder.buildFuture();
}
private CompletableFuture<Suggestions> suggestOpenOptions(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
builder.suggest(String.valueOf('['));
return builder.buildFuture();
}
private CompletableFuture<Suggestions> suggestOptionsKeyOrClose(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
builder.suggest(String.valueOf(']'));
EntitySelectorOptions.suggestNames(this, builder);
return builder.buildFuture();
}
private CompletableFuture<Suggestions> suggestOptionsKey(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
EntitySelectorOptions.suggestNames(this, builder);
return builder.buildFuture();
}
private CompletableFuture<Suggestions> suggestOptionsNextOrClose(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
builder.suggest(String.valueOf(','));
builder.suggest(String.valueOf(']'));
return builder.buildFuture();
}
private CompletableFuture<Suggestions> suggestEquals(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
builder.suggest(String.valueOf('='));
return builder.buildFuture();
}
public boolean isCurrentEntity() {
return this.currentEntity;
}
public void setSuggestions(BiFunction<SuggestionsBuilder, Consumer<SuggestionsBuilder>, CompletableFuture<Suggestions>> suggestions) {
this.suggestions = suggestions;
}
public CompletableFuture<Suggestions> fillSuggestions(SuggestionsBuilder builder, Consumer<SuggestionsBuilder> names) {
return this.suggestions.apply(builder.createOffset(this.reader.getCursor()), names);
}
public boolean hasNameEquals() {
return this.hasNameEquals;
}
public void setHasNameEquals(boolean hasNameEquals) {
this.hasNameEquals = hasNameEquals;
}
public boolean hasNameNotEquals() {
return this.hasNameNotEquals;
}
public void setHasNameNotEquals(boolean hasNameNotEquals) {
this.hasNameNotEquals = hasNameNotEquals;
}
public boolean isLimited() {
return this.isLimited;
}
public void setLimited(boolean limited) {
this.isLimited = limited;
}
public boolean isSorted() {
return this.isSorted;
}
public void setSorted(boolean sorted) {
this.isSorted = sorted;
}
public boolean hasGamemodeEquals() {
return this.hasGamemodeEquals;
}
public void setHasGamemodeEquals(boolean hasGamemodeEquals) {
this.hasGamemodeEquals = hasGamemodeEquals;
}
public boolean hasGamemodeNotEquals() {
return this.hasGamemodeNotEquals;
}
public void setHasGamemodeNotEquals(boolean hasGamemodeNotEquals) {
this.hasGamemodeNotEquals = hasGamemodeNotEquals;
}
public boolean hasTeamEquals() {
return this.hasTeamEquals;
}
public void setHasTeamEquals(boolean hasTeamEquals) {
this.hasTeamEquals = hasTeamEquals;
}
public boolean hasTeamNotEquals() {
return this.hasTeamNotEquals;
}
public void setHasTeamNotEquals(boolean hasTeamNotEquals) {
this.hasTeamNotEquals = hasTeamNotEquals;
}
public void limitToType(EntityType<?> type) {
this.type = type;
}
public void setTypeLimitedInversely() {
this.typeInverse = true;
}
public boolean isTypeLimited() {
return this.type != null;
}
public boolean isTypeLimitedInversely() {
return this.typeInverse;
}
public boolean hasScores() {
return this.hasScores;
}
public void setHasScores(boolean hasScores) {
this.hasScores = hasScores;
}
public boolean hasAdvancements() {
return this.hasAdvancements;
}
public void setHasAdvancements(boolean hasAdvancements) {
this.hasAdvancements = hasAdvancements;
}
}引用的其他类
-
- 引用位置:
参数/字段/方法调用/返回值 - 关联成员:
Doubles.compare()
- 引用位置:
-
- 引用位置:
构造调用/返回值 - 关联成员:
EntitySelector()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EntitySelectorOptions.get(), EntitySelectorOptions.suggestNames()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Component.translatable(), Component.translatableEscape()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.wrapDegrees()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
构造调用/返回值 - 关联成员:
AABB()
- 引用位置:
-
- 引用位置:
参数/字段/构造调用/返回值 - 关联成员:
Vec3()
- 引用位置: