Upstream Paper
This commit is contained in:
630
src/main/java/net/minecraft/server/ArgumentParserSelector.java
Normal file
630
src/main/java/net/minecraft/server/ArgumentParserSelector.java
Normal file
@@ -0,0 +1,630 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
import com.google.common.primitives.Doubles;
|
||||
import com.mojang.brigadier.StringReader;
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
|
||||
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
|
||||
import com.mojang.brigadier.suggestion.Suggestions;
|
||||
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.ToDoubleFunction;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class ArgumentParserSelector {
|
||||
|
||||
public static final SimpleCommandExceptionType a = new SimpleCommandExceptionType(new ChatMessage("argument.entity.invalid", new Object[0]));
|
||||
public static final DynamicCommandExceptionType b = new DynamicCommandExceptionType((object) -> {
|
||||
return new ChatMessage("argument.entity.selector.unknown", new Object[] { object});
|
||||
});
|
||||
public static final SimpleCommandExceptionType c = new SimpleCommandExceptionType(new ChatMessage("argument.entity.selector.not_allowed", new Object[0]));
|
||||
public static final SimpleCommandExceptionType d = new SimpleCommandExceptionType(new ChatMessage("argument.entity.selector.missing", new Object[0]));
|
||||
public static final SimpleCommandExceptionType e = new SimpleCommandExceptionType(new ChatMessage("argument.entity.options.unterminated", new Object[0]));
|
||||
public static final DynamicCommandExceptionType f = new DynamicCommandExceptionType((object) -> {
|
||||
return new ChatMessage("argument.entity.options.valueless", new Object[] { object});
|
||||
});
|
||||
public static final BiConsumer<Vec3D, List<? extends Entity>> g = (vec3d, list) -> {
|
||||
};
|
||||
public static final BiConsumer<Vec3D, List<? extends Entity>> h = (vec3d, list) -> {
|
||||
list.sort((entity, entity1) -> {
|
||||
return Doubles.compare(entity.a(vec3d), entity1.a(vec3d));
|
||||
});
|
||||
};
|
||||
public static final BiConsumer<Vec3D, List<? extends Entity>> i = (vec3d, list) -> {
|
||||
list.sort((entity, entity1) -> {
|
||||
return Doubles.compare(entity1.a(vec3d), entity.a(vec3d));
|
||||
});
|
||||
};
|
||||
public static final BiConsumer<Vec3D, List<? extends Entity>> j = (vec3d, list) -> {
|
||||
Collections.shuffle(list);
|
||||
};
|
||||
public static final BiFunction<SuggestionsBuilder, Consumer<SuggestionsBuilder>, CompletableFuture<Suggestions>> k = (suggestionsbuilder, consumer) -> {
|
||||
return suggestionsbuilder.buildFuture();
|
||||
};
|
||||
private final StringReader l;
|
||||
private final boolean m;
|
||||
private int n;
|
||||
private boolean o;
|
||||
private boolean p;
|
||||
private CriterionConditionValue.c q;
|
||||
private CriterionConditionValue.d r;
|
||||
@Nullable
|
||||
private Double s;
|
||||
@Nullable
|
||||
private Double t;
|
||||
@Nullable
|
||||
private Double u;
|
||||
@Nullable
|
||||
private Double v;
|
||||
@Nullable
|
||||
private Double w;
|
||||
@Nullable
|
||||
private Double x;
|
||||
private CriterionConditionRange y;
|
||||
private CriterionConditionRange z;
|
||||
private Predicate<Entity> A;
|
||||
private BiConsumer<Vec3D, List<? extends Entity>> B;
|
||||
private boolean C;
|
||||
@Nullable
|
||||
private String D;
|
||||
private int E;
|
||||
@Nullable
|
||||
private UUID F;
|
||||
private BiFunction<SuggestionsBuilder, Consumer<SuggestionsBuilder>, CompletableFuture<Suggestions>> G;
|
||||
private boolean H;
|
||||
private boolean I;
|
||||
private boolean J;
|
||||
private boolean K;
|
||||
private boolean L;
|
||||
private boolean M;
|
||||
private boolean N;
|
||||
private boolean O;
|
||||
private Class<? extends Entity> P;
|
||||
private boolean Q;
|
||||
private boolean R;
|
||||
private boolean S;
|
||||
private boolean T;
|
||||
|
||||
public ArgumentParserSelector(StringReader stringreader) {
|
||||
this(stringreader, true);
|
||||
}
|
||||
|
||||
// CraftBukkit start - decompile error
|
||||
private static final CriterionConditionValue.c DEFAULT_q;
|
||||
private static final CriterionConditionValue.d DEFAULT_r;
|
||||
|
||||
static {
|
||||
try {
|
||||
DEFAULT_q = (CriterionConditionValue.c) Class.forName("net.minecraft.server.CriterionConditionValue$c").getDeclaredField("e").get(null);
|
||||
DEFAULT_r = (CriterionConditionValue.d) Class.forName("net.minecraft.server.CriterionConditionValue$d").getDeclaredField("e").get(null);
|
||||
} catch (Exception ex) {
|
||||
throw new AssertionError(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public ArgumentParserSelector(StringReader stringreader, boolean flag) {
|
||||
this.q = DEFAULT_q;
|
||||
this.r = DEFAULT_r;
|
||||
// CraftBukkit end
|
||||
this.y = CriterionConditionRange.a;
|
||||
this.z = CriterionConditionRange.a;
|
||||
this.A = (entity) -> {
|
||||
return true;
|
||||
};
|
||||
this.B = ArgumentParserSelector.g;
|
||||
this.G = ArgumentParserSelector.k;
|
||||
this.l = stringreader;
|
||||
this.m = flag;
|
||||
}
|
||||
|
||||
public EntitySelector a() {
|
||||
AxisAlignedBB axisalignedbb;
|
||||
|
||||
if (this.v == null && this.w == null && this.x == null) {
|
||||
if (this.q.b() != null) {
|
||||
float f = (Float) this.q.b();
|
||||
|
||||
axisalignedbb = new AxisAlignedBB((double) (-f), (double) (-f), (double) (-f), (double) (f + 1.0F), (double) (f + 1.0F), (double) (f + 1.0F));
|
||||
} else {
|
||||
axisalignedbb = null;
|
||||
}
|
||||
} else {
|
||||
axisalignedbb = this.a(this.v == null ? 0.0D : this.v, this.w == null ? 0.0D : this.w, this.x == null ? 0.0D : this.x);
|
||||
}
|
||||
|
||||
Function<Vec3D, Vec3D> function; // CraftBukkit - decompile error
|
||||
|
||||
if (this.s == null && this.t == null && this.u == null) {
|
||||
function = (vec3d) -> {
|
||||
return vec3d;
|
||||
};
|
||||
} else {
|
||||
function = (vec3d) -> {
|
||||
return new Vec3D(this.s == null ? vec3d.x : this.s, this.t == null ? vec3d.y : this.t, this.u == null ? vec3d.z : this.u);
|
||||
};
|
||||
}
|
||||
|
||||
return new EntitySelector(this.n, this.o, this.p, this.A, this.q, function, axisalignedbb, this.B, this.C, this.D, this.F, this.P == null ? Entity.class : this.P, this.T);
|
||||
}
|
||||
|
||||
private AxisAlignedBB a(double d0, double d1, double d2) {
|
||||
boolean flag = d0 < 0.0D;
|
||||
boolean flag1 = d1 < 0.0D;
|
||||
boolean flag2 = d2 < 0.0D;
|
||||
double d3 = flag ? d0 : 0.0D;
|
||||
double d4 = flag1 ? d1 : 0.0D;
|
||||
double d5 = flag2 ? d2 : 0.0D;
|
||||
double d6 = (flag ? 0.0D : d0) + 1.0D;
|
||||
double d7 = (flag1 ? 0.0D : d1) + 1.0D;
|
||||
double d8 = (flag2 ? 0.0D : d2) + 1.0D;
|
||||
|
||||
return new AxisAlignedBB(d3, d4, d5, d6, d7, d8);
|
||||
}
|
||||
|
||||
private void I() {
|
||||
if (this.y != CriterionConditionRange.a) {
|
||||
this.A = this.A.and(this.a(this.y, (entity) -> {
|
||||
return (double) entity.pitch;
|
||||
}));
|
||||
}
|
||||
|
||||
if (this.z != CriterionConditionRange.a) {
|
||||
this.A = this.A.and(this.a(this.z, (entity) -> {
|
||||
return (double) entity.yaw;
|
||||
}));
|
||||
}
|
||||
|
||||
if (!this.r.c()) {
|
||||
this.A = this.A.and((entity) -> {
|
||||
return !(entity instanceof EntityPlayer) ? false : this.r.d(((EntityPlayer) entity).expLevel);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private Predicate<Entity> a(CriterionConditionRange criterionconditionrange, ToDoubleFunction<Entity> todoublefunction) {
|
||||
double d0 = (double) MathHelper.g(criterionconditionrange.a() == null ? 0.0F : criterionconditionrange.a());
|
||||
double d1 = (double) MathHelper.g(criterionconditionrange.b() == null ? 359.0F : criterionconditionrange.b());
|
||||
|
||||
return (entity) -> {
|
||||
double d2 = MathHelper.g(todoublefunction.applyAsDouble(entity));
|
||||
|
||||
return d0 > d1 ? d2 >= d0 || d2 <= d1 : d2 >= d0 && d2 <= d1;
|
||||
};
|
||||
}
|
||||
|
||||
// CraftBukkit start
|
||||
protected void b(boolean overridePermissions) throws CommandSyntaxException {
|
||||
this.T = !overridePermissions;
|
||||
// CraftBukkit end
|
||||
this.G = this::d;
|
||||
if (!this.l.canRead()) {
|
||||
throw ArgumentParserSelector.d.createWithContext(this.l);
|
||||
} else {
|
||||
int i = this.l.getCursor();
|
||||
char c0 = this.l.read();
|
||||
|
||||
if (c0 == 'p') {
|
||||
this.n = 1;
|
||||
this.o = false;
|
||||
this.B = ArgumentParserSelector.h;
|
||||
this.a(EntityPlayer.class);
|
||||
} else if (c0 == 'a') {
|
||||
this.n = Integer.MAX_VALUE;
|
||||
this.o = false;
|
||||
this.B = ArgumentParserSelector.g;
|
||||
this.a(EntityPlayer.class);
|
||||
} else if (c0 == 'r') {
|
||||
this.n = 1;
|
||||
this.o = false;
|
||||
this.B = ArgumentParserSelector.j;
|
||||
this.a(EntityPlayer.class);
|
||||
} else if (c0 == 's') {
|
||||
this.n = 1;
|
||||
this.o = true;
|
||||
this.C = true;
|
||||
} else {
|
||||
if (c0 != 'e') {
|
||||
this.l.setCursor(i);
|
||||
throw ArgumentParserSelector.b.createWithContext(this.l, '@' + String.valueOf(c0));
|
||||
}
|
||||
|
||||
this.n = Integer.MAX_VALUE;
|
||||
this.o = true;
|
||||
this.B = ArgumentParserSelector.g;
|
||||
this.A = Entity::isAlive;
|
||||
}
|
||||
|
||||
this.G = this::e;
|
||||
if (this.l.canRead() && this.l.peek() == '[') {
|
||||
this.l.skip();
|
||||
this.G = this::f;
|
||||
this.d();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected void c() throws CommandSyntaxException {
|
||||
if (this.l.canRead()) {
|
||||
this.G = this::c;
|
||||
}
|
||||
|
||||
int i = this.l.getCursor();
|
||||
String s = this.l.readString();
|
||||
|
||||
try {
|
||||
this.F = UUID.fromString(s);
|
||||
this.o = true;
|
||||
} catch (IllegalArgumentException illegalargumentexception) {
|
||||
if (s.isEmpty() || s.length() > 16) {
|
||||
this.l.setCursor(i);
|
||||
throw ArgumentParserSelector.a.createWithContext(this.l);
|
||||
}
|
||||
|
||||
this.o = false;
|
||||
this.D = s;
|
||||
}
|
||||
|
||||
this.n = 1;
|
||||
}
|
||||
|
||||
protected void d() throws CommandSyntaxException {
|
||||
this.G = this::g;
|
||||
this.l.skipWhitespace();
|
||||
|
||||
while (true) {
|
||||
if (this.l.canRead() && this.l.peek() != ']') {
|
||||
this.l.skipWhitespace();
|
||||
int i = this.l.getCursor();
|
||||
String s = this.l.readString();
|
||||
PlayerSelector.a playerselector_a = PlayerSelector.a(this, s, i);
|
||||
|
||||
this.l.skipWhitespace();
|
||||
if (!this.l.canRead() || this.l.peek() != '=') {
|
||||
this.l.setCursor(i);
|
||||
throw ArgumentParserSelector.f.createWithContext(this.l, s);
|
||||
}
|
||||
|
||||
this.l.skip();
|
||||
this.l.skipWhitespace();
|
||||
this.G = ArgumentParserSelector.k;
|
||||
playerselector_a.handle(this);
|
||||
this.l.skipWhitespace();
|
||||
this.G = this::h;
|
||||
if (!this.l.canRead()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (this.l.peek() == ',') {
|
||||
this.l.skip();
|
||||
this.G = this::g;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (this.l.peek() != ']') {
|
||||
throw ArgumentParserSelector.e.createWithContext(this.l);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.l.canRead()) {
|
||||
this.l.skip();
|
||||
this.G = ArgumentParserSelector.k;
|
||||
return;
|
||||
}
|
||||
|
||||
throw ArgumentParserSelector.e.createWithContext(this.l);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean e() {
|
||||
this.l.skipWhitespace();
|
||||
if (this.l.canRead() && this.l.peek() == '!') {
|
||||
this.l.skip();
|
||||
this.l.skipWhitespace();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public StringReader f() {
|
||||
return this.l;
|
||||
}
|
||||
|
||||
public void a(Predicate<Entity> predicate) {
|
||||
this.A = this.A.and(predicate);
|
||||
}
|
||||
|
||||
public void g() {
|
||||
this.p = true;
|
||||
}
|
||||
|
||||
public CriterionConditionValue.c h() {
|
||||
return this.q;
|
||||
}
|
||||
|
||||
public void a(CriterionConditionValue.c criterionconditionvalue_c) {
|
||||
this.q = criterionconditionvalue_c;
|
||||
}
|
||||
|
||||
public CriterionConditionValue.d i() {
|
||||
return this.r;
|
||||
}
|
||||
|
||||
public void a(CriterionConditionValue.d criterionconditionvalue_d) {
|
||||
this.r = criterionconditionvalue_d;
|
||||
}
|
||||
|
||||
public CriterionConditionRange j() {
|
||||
return this.y;
|
||||
}
|
||||
|
||||
public void a(CriterionConditionRange criterionconditionrange) {
|
||||
this.y = criterionconditionrange;
|
||||
}
|
||||
|
||||
public CriterionConditionRange k() {
|
||||
return this.z;
|
||||
}
|
||||
|
||||
public void b(CriterionConditionRange criterionconditionrange) {
|
||||
this.z = criterionconditionrange;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double l() {
|
||||
return this.s;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double m() {
|
||||
return this.t;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double n() {
|
||||
return this.u;
|
||||
}
|
||||
|
||||
public void a(double d0) {
|
||||
this.s = d0;
|
||||
}
|
||||
|
||||
public void b(double d0) {
|
||||
this.t = d0;
|
||||
}
|
||||
|
||||
public void c(double d0) {
|
||||
this.u = d0;
|
||||
}
|
||||
|
||||
public void d(double d0) {
|
||||
this.v = d0;
|
||||
}
|
||||
|
||||
public void e(double d0) {
|
||||
this.w = d0;
|
||||
}
|
||||
|
||||
public void f(double d0) {
|
||||
this.x = d0;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double o() {
|
||||
return this.v;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double p() {
|
||||
return this.w;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Double q() {
|
||||
return this.x;
|
||||
}
|
||||
|
||||
public void a(int i) {
|
||||
this.n = i;
|
||||
}
|
||||
|
||||
public void a(boolean flag) {
|
||||
this.o = flag;
|
||||
}
|
||||
|
||||
public void a(BiConsumer<Vec3D, List<? extends Entity>> biconsumer) {
|
||||
this.B = biconsumer;
|
||||
}
|
||||
|
||||
public EntitySelector s() throws CommandSyntaxException {
|
||||
// CraftBukkit start
|
||||
return s(false);
|
||||
}
|
||||
|
||||
public EntitySelector s(boolean overridePermissions) throws CommandSyntaxException {
|
||||
// CraftBukkit end
|
||||
this.E = this.l.getCursor();
|
||||
this.G = this::b;
|
||||
if (this.l.canRead() && this.l.peek() == '@') {
|
||||
if (!this.m) {
|
||||
throw ArgumentParserSelector.c.createWithContext(this.l);
|
||||
}
|
||||
|
||||
this.l.skip();
|
||||
this.b(overridePermissions); // CraftBukkit
|
||||
} else {
|
||||
this.c();
|
||||
}
|
||||
|
||||
this.I();
|
||||
return this.a();
|
||||
}
|
||||
|
||||
private static void a(SuggestionsBuilder suggestionsbuilder) {
|
||||
suggestionsbuilder.suggest("@p", new ChatMessage("argument.entity.selector.nearestPlayer", new Object[0]));
|
||||
suggestionsbuilder.suggest("@a", new ChatMessage("argument.entity.selector.allPlayers", new Object[0]));
|
||||
suggestionsbuilder.suggest("@r", new ChatMessage("argument.entity.selector.randomPlayer", new Object[0]));
|
||||
suggestionsbuilder.suggest("@s", new ChatMessage("argument.entity.selector.self", new Object[0]));
|
||||
suggestionsbuilder.suggest("@e", new ChatMessage("argument.entity.selector.allEntities", new Object[0]));
|
||||
}
|
||||
|
||||
private CompletableFuture<Suggestions> b(SuggestionsBuilder suggestionsbuilder, Consumer<SuggestionsBuilder> consumer) {
|
||||
consumer.accept(suggestionsbuilder);
|
||||
if (this.m) {
|
||||
a(suggestionsbuilder);
|
||||
}
|
||||
|
||||
return suggestionsbuilder.buildFuture();
|
||||
}
|
||||
|
||||
private CompletableFuture<Suggestions> c(SuggestionsBuilder suggestionsbuilder, Consumer<SuggestionsBuilder> consumer) {
|
||||
SuggestionsBuilder suggestionsbuilder1 = suggestionsbuilder.createOffset(this.E);
|
||||
|
||||
consumer.accept(suggestionsbuilder1);
|
||||
return suggestionsbuilder.add(suggestionsbuilder1).buildFuture();
|
||||
}
|
||||
|
||||
private CompletableFuture<Suggestions> d(SuggestionsBuilder suggestionsbuilder, Consumer<SuggestionsBuilder> consumer) {
|
||||
SuggestionsBuilder suggestionsbuilder1 = suggestionsbuilder.createOffset(suggestionsbuilder.getStart() - 1);
|
||||
|
||||
a(suggestionsbuilder1);
|
||||
suggestionsbuilder.add(suggestionsbuilder1);
|
||||
return suggestionsbuilder.buildFuture();
|
||||
}
|
||||
|
||||
private CompletableFuture<Suggestions> e(SuggestionsBuilder suggestionsbuilder, Consumer<SuggestionsBuilder> consumer) {
|
||||
suggestionsbuilder.suggest(String.valueOf('['));
|
||||
return suggestionsbuilder.buildFuture();
|
||||
}
|
||||
|
||||
private CompletableFuture<Suggestions> f(SuggestionsBuilder suggestionsbuilder, Consumer<SuggestionsBuilder> consumer) {
|
||||
suggestionsbuilder.suggest(String.valueOf(']'));
|
||||
PlayerSelector.a(this, suggestionsbuilder);
|
||||
return suggestionsbuilder.buildFuture();
|
||||
}
|
||||
|
||||
private CompletableFuture<Suggestions> g(SuggestionsBuilder suggestionsbuilder, Consumer<SuggestionsBuilder> consumer) {
|
||||
PlayerSelector.a(this, suggestionsbuilder);
|
||||
return suggestionsbuilder.buildFuture();
|
||||
}
|
||||
|
||||
private CompletableFuture<Suggestions> h(SuggestionsBuilder suggestionsbuilder, Consumer<SuggestionsBuilder> consumer) {
|
||||
suggestionsbuilder.suggest(String.valueOf(','));
|
||||
suggestionsbuilder.suggest(String.valueOf(']'));
|
||||
return suggestionsbuilder.buildFuture();
|
||||
}
|
||||
|
||||
public boolean t() {
|
||||
return this.C;
|
||||
}
|
||||
|
||||
public void a(BiFunction<SuggestionsBuilder, Consumer<SuggestionsBuilder>, CompletableFuture<Suggestions>> bifunction) {
|
||||
this.G = bifunction;
|
||||
}
|
||||
|
||||
public CompletableFuture<Suggestions> a(SuggestionsBuilder suggestionsbuilder, Consumer<SuggestionsBuilder> consumer) {
|
||||
return (CompletableFuture) this.G.apply(suggestionsbuilder.createOffset(this.l.getCursor()), consumer);
|
||||
}
|
||||
|
||||
public boolean u() {
|
||||
return this.H;
|
||||
}
|
||||
|
||||
public void c(boolean flag) {
|
||||
this.H = flag;
|
||||
}
|
||||
|
||||
public boolean v() {
|
||||
return this.I;
|
||||
}
|
||||
|
||||
public void d(boolean flag) {
|
||||
this.I = flag;
|
||||
}
|
||||
|
||||
public boolean w() {
|
||||
return this.J;
|
||||
}
|
||||
|
||||
public void e(boolean flag) {
|
||||
this.J = flag;
|
||||
}
|
||||
|
||||
public boolean x() {
|
||||
return this.K;
|
||||
}
|
||||
|
||||
public void f(boolean flag) {
|
||||
this.K = flag;
|
||||
}
|
||||
|
||||
public boolean y() {
|
||||
return this.L;
|
||||
}
|
||||
|
||||
public void g(boolean flag) {
|
||||
this.L = flag;
|
||||
}
|
||||
|
||||
public boolean z() {
|
||||
return this.M;
|
||||
}
|
||||
|
||||
public void h(boolean flag) {
|
||||
this.M = flag;
|
||||
}
|
||||
|
||||
public boolean A() {
|
||||
return this.N;
|
||||
}
|
||||
|
||||
public void i(boolean flag) {
|
||||
this.N = flag;
|
||||
}
|
||||
|
||||
public void j(boolean flag) {
|
||||
this.O = flag;
|
||||
}
|
||||
|
||||
public void a(Class<? extends Entity> oclass) {
|
||||
this.P = oclass;
|
||||
}
|
||||
|
||||
public void C() {
|
||||
this.Q = true;
|
||||
}
|
||||
|
||||
public boolean E() {
|
||||
return this.P != null;
|
||||
}
|
||||
|
||||
public boolean F() {
|
||||
return this.Q;
|
||||
}
|
||||
|
||||
public boolean G() {
|
||||
return this.R;
|
||||
}
|
||||
|
||||
public void k(boolean flag) {
|
||||
this.R = flag;
|
||||
}
|
||||
|
||||
public boolean H() {
|
||||
return this.S;
|
||||
}
|
||||
|
||||
public void l(boolean flag) {
|
||||
this.S = flag;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user