Skip to content

Commit 2992200

Browse files
committed
目标选择器的链式调用
1 parent 8353e5a commit 2992200

File tree

13 files changed

+588
-67
lines changed

13 files changed

+588
-67
lines changed

.idea/encodings.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/antlr/mcfppParser.g4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,6 @@ primary
337337
| value
338338
| THIS
339339
| SUPER
340-
| TargetSelector
341340
;
342341

343342
varWithSelector
@@ -521,6 +520,7 @@ value
521520
| nbtValue
522521
| range
523522
| type
523+
| TargetSelector
524524
;
525525

526526
intValue
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package top.mcfpp.lang;
2+
3+
import kotlin.jvm.functions.Function4;
4+
import org.jetbrains.annotations.NotNull;
5+
import top.mcfpp.model.function.MNIMethodContainer;
6+
import top.mcfpp.util.ValueWrapper;
7+
8+
import java.util.HashMap;
9+
10+
public class BaseMNIMethodContainer extends MNIMethodContainer {
11+
static HashMap<String, Function4<Var<?>[], Var<?>[], CanSelectMember, ValueWrapper<Var<?>>, java.lang.Void>> methods = new HashMap<>();;
12+
13+
@NotNull
14+
@Override
15+
public Function4<Var<?>[], Var<?>[], CanSelectMember, ValueWrapper<Var<?>>, java.lang.Void> getMNIMethod(@NotNull String name) {
16+
return methods.get(name);
17+
}
18+
}

src/main/java/top/mcfpp/lang/NBTDictionaryData.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@
77

88
import java.util.HashMap;
99

10-
public class NBTDictionaryData extends MNIMethodContainer {
11-
static HashMap<String, Function4<Var<?>[], Var<?>[], CanSelectMember, ValueWrapper<Var<?>>, java.lang.Void>> methods;
10+
public class NBTDictionaryData extends BaseMNIMethodContainer {
1211

1312
static {
14-
methods = new HashMap<>();
1513
methods.put("containsKey", (vars, vars2, canSelectMember, varValueWrapper) -> {
1614
return null;
1715
});
@@ -24,10 +22,4 @@ public class NBTDictionaryData extends MNIMethodContainer {
2422
return null;
2523
});
2624
}
27-
28-
@NotNull
29-
@Override
30-
public Function4<Var<?>[], Var<?>[], CanSelectMember, ValueWrapper<Var<?>>, java.lang.Void> getMNIMethod(@NotNull String name) {
31-
return methods.get(name);
32-
}
3325
}

src/main/java/top/mcfpp/lang/NBTListConcreteData.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818
import java.util.HashMap;
1919
import java.util.Objects;
2020

21-
public class NBTListConcreteData extends MNIMethodContainer {
21+
public class NBTListConcreteData extends BaseMNIMethodContainer {
2222

23-
static HashMap<String, Function4<Var<?>[], Var<?>[], CanSelectMember, ValueWrapper<Var<?>>, java.lang.Void>> methods;
23+
public static final NBTListConcreteData INSTANCE = new NBTListConcreteData();
2424

2525
static {
26-
methods = new HashMap<>();
2726
//list<E>.add(E e)
2827
methods.put("add", (readOnlyArgs, normalArgs, caller, returnVar) -> {
2928
//由于类型检查,必然是可以通过的
@@ -201,10 +200,4 @@ public class NBTListConcreteData extends MNIMethodContainer {
201200
return null;
202201
});
203202
}
204-
205-
@NotNull
206-
@Override
207-
public Function4<Var<?>[], Var<?>[], CanSelectMember, ValueWrapper<Var<?>>, java.lang.Void> getMNIMethod(@NotNull String name) {
208-
return methods.get(name);
209-
}
210203
}

src/main/java/top/mcfpp/lang/Range.java

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
package top.mcfpp.lang;
2+
3+
import kotlin.Pair;
4+
import kotlin.jvm.functions.Function4;
5+
import net.querz.nbt.tag.Tag;
6+
import org.jetbrains.annotations.NotNull;
7+
import top.mcfpp.model.function.MNIMethodContainer;
8+
import top.mcfpp.util.ValueWrapper;
9+
10+
import java.util.HashMap;
11+
12+
public class SelectorConcreteData extends BaseMNIMethodContainer {
13+
14+
public static final NBTListConcreteData INSTANCE = new NBTListConcreteData();
15+
16+
static {
17+
//selector.x<int x>
18+
methods.put("x", (readOnlyVar, normalVar, caller, returnVar) -> {
19+
var x = (MCIntConcrete)readOnlyVar[0];
20+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
21+
qwq.getValue().setX(x.getValue());
22+
returnVar.setValue(qwq);
23+
return null;
24+
});
25+
//selector.y<int y>
26+
methods.put("y", (readOnlyVar, normalVar, caller, returnVar) -> {
27+
var y = (MCIntConcrete)readOnlyVar[0];
28+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
29+
qwq.getValue().setY(y.getValue());
30+
returnVar.setValue(qwq);
31+
return null;
32+
});
33+
//selector.z<int z>
34+
methods.put("z", (readOnlyVar, normalVar, caller, returnVar) -> {
35+
var z = (MCIntConcrete)readOnlyVar[0];
36+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
37+
qwq.getValue().setZ(z.getValue());
38+
returnVar.setValue(qwq);
39+
return null;
40+
});
41+
//selector.distance<int distance>
42+
methods.put("distance", (readOnlyVar, normalVar, caller, returnVar) -> {
43+
var distance = (MCIntConcrete)readOnlyVar[0];
44+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
45+
qwq.getValue().setDistance(new OneIntConcreteRange(distance.getValue()));
46+
returnVar.setValue(qwq);
47+
return null;
48+
});
49+
//TODO selector.distance<range distance>
50+
//dx
51+
methods.put("dx", (readOnlyVar, normalVar, caller, returnVar) -> {
52+
var dx = (MCIntConcrete)readOnlyVar[0];
53+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
54+
qwq.getValue().setDx(dx.getValue());
55+
returnVar.setValue(qwq);
56+
return null;
57+
});
58+
//dy
59+
methods.put("dy", (readOnlyVar, normalVar, caller, returnVar) -> {
60+
var dy = (MCIntConcrete)readOnlyVar[0];
61+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
62+
qwq.getValue().setDy(dy.getValue());
63+
returnVar.setValue(qwq);
64+
return null;
65+
});
66+
//dz
67+
methods.put("dz", (readOnlyVar, normalVar, caller, returnVar) -> {
68+
var dz = (MCIntConcrete)readOnlyVar[0];
69+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
70+
qwq.getValue().setDz(dz.getValue());
71+
returnVar.setValue(qwq);
72+
return null;
73+
});
74+
//TODO score
75+
//tag
76+
methods.put("tag", (readOnlyVar, normalVar, caller, returnVar) -> {
77+
var tag = (MCStringConcrete)readOnlyVar[0];
78+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
79+
qwq.getValue().getTag().put(tag.getValue().getValue(), true);
80+
returnVar.setValue(qwq);
81+
return null;
82+
});
83+
//tag!
84+
methods.put("tagNot", (readOnlyVar, normalVar, caller, returnVar) -> {
85+
var tag = (MCStringConcrete)readOnlyVar[0];
86+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
87+
qwq.getValue().getTag().put(tag.getValue().getValue(), false);
88+
returnVar.setValue(qwq);
89+
return null;
90+
});
91+
//team
92+
methods.put("team", (readOnlyVar, normalVar, caller, returnVar) -> {
93+
var team = (MCStringConcrete)readOnlyVar[0];
94+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
95+
qwq.getValue().getTeam().put(team.getValue().getValue(), true);
96+
returnVar.setValue(qwq);
97+
return null;
98+
});
99+
//team!
100+
methods.put("teamNot", (readOnlyVar, normalVar, caller, returnVar) -> {
101+
var team = (MCStringConcrete)readOnlyVar[0];
102+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
103+
qwq.getValue().getTeam().put(team.getValue().getValue(), false);
104+
returnVar.setValue(qwq);
105+
return null;
106+
});
107+
//name
108+
methods.put("name", (readOnlyVar, normalVar, caller, returnVar) -> {
109+
var name = (MCStringConcrete)readOnlyVar[0];
110+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
111+
qwq.getValue().setName(new Pair<>(name.getValue().getValue(), true));
112+
returnVar.setValue(qwq);
113+
return null;
114+
});
115+
//name!
116+
methods.put("nameNot", (readOnlyVar, normalVar, caller, returnVar) -> {
117+
var name = (MCStringConcrete)readOnlyVar[0];
118+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
119+
qwq.getValue().setName(new Pair<>(name.getValue().getValue(), false));
120+
returnVar.setValue(qwq);
121+
return null;
122+
});
123+
//type
124+
methods.put("type", (readOnlyVar, normalVar, caller, returnVar) -> {
125+
var type = (MCStringConcrete)readOnlyVar[0];
126+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
127+
qwq.getValue().setType(new Pair<>(type.getValue().getValue(), false));
128+
returnVar.setValue(qwq);
129+
return null;
130+
});
131+
//type!
132+
methods.put("typeNot", (readOnlyVar, normalVar, caller, returnVar) -> {
133+
var type = (MCStringConcrete)readOnlyVar[0];
134+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
135+
qwq.getValue().setType(new Pair<>(type.getValue().getValue(), true));
136+
returnVar.setValue(qwq);
137+
return null;
138+
});
139+
//predicate
140+
methods.put("predicate", (readOnlyVar, normalVar, caller, returnVar) -> {
141+
var predicate = (MCStringConcrete)readOnlyVar[0];
142+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
143+
qwq.getValue().getPredicate().put(predicate.getValue().getValue(), true);
144+
returnVar.setValue(qwq);
145+
return null;
146+
});
147+
//tag!
148+
methods.put("predicateNot", (readOnlyVar, normalVar, caller, returnVar) -> {
149+
var predicate = (MCStringConcrete)readOnlyVar[0];
150+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
151+
qwq.getValue().getPredicate().put(predicate.getValue().getValue(), false);
152+
returnVar.setValue(qwq);
153+
return null;
154+
});
155+
//x_rotation
156+
methods.put("xRotation", (readOnlyVar, normalVar, caller, returnVar) -> {
157+
var xRotation = (MCIntConcrete)readOnlyVar[0];
158+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
159+
qwq.getValue().setX_rotation(new OneIntConcreteRange(xRotation.getValue()));
160+
returnVar.setValue(qwq);
161+
return null;
162+
});
163+
//y_rotation
164+
methods.put("yRotation", (readOnlyVar, normalVar, caller, returnVar) -> {
165+
var yRotation = (MCIntConcrete)readOnlyVar[0];
166+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
167+
qwq.getValue().setY_rotation(new OneIntConcreteRange(yRotation.getValue()));
168+
returnVar.setValue(qwq);
169+
return null;
170+
});
171+
//nbt
172+
methods.put("nbt", (readOnlyVar, normalVar, caller, returnVar) -> {
173+
var nbt = (NBTBasedDataConcrete)readOnlyVar[0];
174+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
175+
qwq.getValue().setNbt(nbt.getValue());
176+
returnVar.setValue(qwq);
177+
return null;
178+
});
179+
//level
180+
methods.put("level", (readOnlyVar, normalVar, caller, returnVar) -> {
181+
var level = (MCIntConcrete)readOnlyVar[0];
182+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
183+
qwq.getValue().setLevel(new OneIntConcreteRange(level.getValue()));
184+
returnVar.setValue(qwq);
185+
return null;
186+
});
187+
//gamemode
188+
methods.put("gamemode", (readOnlyVar, normalVar, caller, returnVar) -> {
189+
var gamemode = (MCStringConcrete)readOnlyVar[0];
190+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
191+
qwq.getValue().setGamemode(new Pair<>(gamemode.getValue().getValue(), true));
192+
returnVar.setValue(qwq);
193+
return null;
194+
});
195+
//gamemode!
196+
methods.put("gamemodeNot", (readOnlyVar, normalVar, caller, returnVar) -> {
197+
var gamemode = (MCStringConcrete)readOnlyVar[0];
198+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
199+
qwq.getValue().setGamemode(new Pair<>(gamemode.getValue().getValue(), false));
200+
returnVar.setValue(qwq);
201+
return null;
202+
});
203+
//advancements(string advancements, bool value)
204+
methods.put("advancements", (readOnlyVar, normalVar, caller, returnVar) -> {
205+
var advancements = (MCStringConcrete)readOnlyVar[0];
206+
var value = (MCBoolConcrete)readOnlyVar[1];
207+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
208+
qwq.getValue().getAdvancements().put(advancements.getValue().getValue(), value.getValue());
209+
returnVar.setValue(qwq);
210+
return null;
211+
});
212+
//limit
213+
methods.put("limit", (readOnlyVar, normalVar, caller, returnVar) -> {
214+
var limit = (MCIntConcrete)readOnlyVar[0];
215+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
216+
qwq.getValue().setLimit(limit.getValue());
217+
returnVar.setValue(qwq);
218+
return null;
219+
});
220+
//sort
221+
methods.put("sort", (readOnlyVar, normalVar, caller, returnVar) -> {
222+
var sort = (MCStringConcrete)readOnlyVar[0];
223+
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
224+
qwq.getValue().setSort(sort.getValue().getValue());
225+
returnVar.setValue(qwq);
226+
return null;
227+
});
228+
}
229+
230+
}

src/main/java/top/mcfpp/lang/System.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,7 @@
1111
import java.util.HashMap;
1212
import java.util.UUID;
1313

14-
public class System extends MNIMethodContainer {
15-
16-
@NotNull
17-
@Override
18-
public Function4<Var<?>[], Var<?>[], CanSelectMember, ValueWrapper<Var<?>>, java.lang.Void> getMNIMethod(@NotNull String name) {
19-
return methods.get(name);
20-
}
21-
22-
static HashMap<String, Function4<Var<?>[], Var<?>[], CanSelectMember, ValueWrapper<Var<?>>, java.lang.Void>> methods;
14+
public class System extends BaseMNIMethodContainer {
2315

2416
static {
2517
methods = new HashMap<>();

src/main/kotlin/top/mcfpp/antlr/McfppExprVisitor.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,8 @@ class McfppExprVisitor(private var defaultGenericClassType : MCFPPGenericClassTy
650650
return NBTBasedDataConcrete(SNBTUtil.fromSNBT(ctx.nbtValue().text))
651651
} else if (ctx.type() != null){
652652
return MCFPPTypeVar(MCFPPType.parseFromIdentifier(ctx.type().text, Function.currFunction.field))
653+
} else if (ctx.TargetSelector() != null){
654+
return Selector(ctx.TargetSelector().text)
653655
}
654656
return null
655657
}

src/main/kotlin/top/mcfpp/lang/NBTList.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ class NBTListConcrete<E>: NBTList, MCFPPValue<ListTag<*>> {
308308

309309
init {
310310
data.parent.add(MCAny.data)
311-
data.field.addFunction(NativeFunction("add", NBTListConcreteData(),MCFPPBaseType.Void,"mcfpp")
311+
data.field.addFunction(NativeFunction("add", NBTListConcreteData.INSTANCE ,MCFPPBaseType.Void,"mcfpp")
312312
.appendNormalParam(MCFPPGenericType("E", emptyList()), "e"),false)
313313
}
314314

0 commit comments

Comments
 (0)