Skip to content

Commit 203749f

Browse files
committed
实体类型
1 parent 17ec62d commit 203749f

21 files changed

+956
-647
lines changed

src/main/antlr/mcfppParser.g4

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ basicExpression
343343
//初级表达式
344344
primary
345345
: var
346+
| range
346347
| value
347348
| THIS
348349
| SUPER
@@ -519,7 +520,6 @@ value
519520
| boolValue
520521
| multiLineStringLiteral
521522
| nbtValue
522-
| range
523523
| type
524524
| TargetSelector
525525
;
@@ -557,9 +557,9 @@ classAnnotation
557557
;
558558

559559
range
560-
: num1=(IntegerConstant|FloatConstant) '..' num2=(IntegerConstant|FloatConstant)
561-
| num1=(IntegerConstant|FloatConstant) '..'
562-
| '..' num2=(IntegerConstant|FloatConstant)
560+
: num1=var '..' num2=var
561+
| num1=var '..'
562+
| '..' num2=var
563563
;
564564

565565
namespacePath

src/main/java/top/mcfpp/mni/SelectorConcreteData.java

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,41 @@
22

33
import kotlin.Pair;
44
import top.mcfpp.lang.*;
5+
import top.mcfpp.lib.OneIntConcreteRange;
56

67
public class SelectorConcreteData extends BaseMNIMethodContainer {
78

89
public static final NBTListConcreteData INSTANCE = new NBTListConcreteData();
910

1011
static {
11-
//selector.x<int x>
12+
//selector.x(int x)
1213
methods.put("x", (readOnlyVar, normalVar, caller, returnVar) -> {
1314
var x = (MCIntConcrete)readOnlyVar[0];
14-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
15+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
1516
qwq.getValue().setX(x.getValue());
1617
returnVar.setValue(qwq);
1718
return null;
1819
});
1920
//selector.y<int y>
2021
methods.put("y", (readOnlyVar, normalVar, caller, returnVar) -> {
2122
var y = (MCIntConcrete)readOnlyVar[0];
22-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
23+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
2324
qwq.getValue().setY(y.getValue());
2425
returnVar.setValue(qwq);
2526
return null;
2627
});
2728
//selector.z<int z>
2829
methods.put("z", (readOnlyVar, normalVar, caller, returnVar) -> {
2930
var z = (MCIntConcrete)readOnlyVar[0];
30-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
31+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
3132
qwq.getValue().setZ(z.getValue());
3233
returnVar.setValue(qwq);
3334
return null;
3435
});
3536
//selector.distance<int distance>
3637
methods.put("distance", (readOnlyVar, normalVar, caller, returnVar) -> {
3738
var distance = (MCIntConcrete)readOnlyVar[0];
38-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
39+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
3940
qwq.getValue().setDistance(new OneIntConcreteRange(distance.getValue()));
4041
returnVar.setValue(qwq);
4142
return null;
@@ -44,23 +45,23 @@ public class SelectorConcreteData extends BaseMNIMethodContainer {
4445
//dx
4546
methods.put("dx", (readOnlyVar, normalVar, caller, returnVar) -> {
4647
var dx = (MCIntConcrete)readOnlyVar[0];
47-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
48+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
4849
qwq.getValue().setDx(dx.getValue());
4950
returnVar.setValue(qwq);
5051
return null;
5152
});
5253
//dy
5354
methods.put("dy", (readOnlyVar, normalVar, caller, returnVar) -> {
5455
var dy = (MCIntConcrete)readOnlyVar[0];
55-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
56+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
5657
qwq.getValue().setDy(dy.getValue());
5758
returnVar.setValue(qwq);
5859
return null;
5960
});
6061
//dz
6162
methods.put("dz", (readOnlyVar, normalVar, caller, returnVar) -> {
6263
var dz = (MCIntConcrete)readOnlyVar[0];
63-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
64+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
6465
qwq.getValue().setDz(dz.getValue());
6566
returnVar.setValue(qwq);
6667
return null;
@@ -69,127 +70,127 @@ public class SelectorConcreteData extends BaseMNIMethodContainer {
6970
//tag
7071
methods.put("tag", (readOnlyVar, normalVar, caller, returnVar) -> {
7172
var tag = (MCStringConcrete)readOnlyVar[0];
72-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
73+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
7374
qwq.getValue().getTag().put(tag.getValue().getValue(), true);
7475
returnVar.setValue(qwq);
7576
return null;
7677
});
7778
//tag!
7879
methods.put("tagNot", (readOnlyVar, normalVar, caller, returnVar) -> {
7980
var tag = (MCStringConcrete)readOnlyVar[0];
80-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
81+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
8182
qwq.getValue().getTag().put(tag.getValue().getValue(), false);
8283
returnVar.setValue(qwq);
8384
return null;
8485
});
8586
//team
8687
methods.put("team", (readOnlyVar, normalVar, caller, returnVar) -> {
8788
var team = (MCStringConcrete)readOnlyVar[0];
88-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
89+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
8990
qwq.getValue().getTeam().put(team.getValue().getValue(), true);
9091
returnVar.setValue(qwq);
9192
return null;
9293
});
9394
//team!
9495
methods.put("teamNot", (readOnlyVar, normalVar, caller, returnVar) -> {
9596
var team = (MCStringConcrete)readOnlyVar[0];
96-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
97+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
9798
qwq.getValue().getTeam().put(team.getValue().getValue(), false);
9899
returnVar.setValue(qwq);
99100
return null;
100101
});
101102
//name
102103
methods.put("name", (readOnlyVar, normalVar, caller, returnVar) -> {
103104
var name = (MCStringConcrete)readOnlyVar[0];
104-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
105+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
105106
qwq.getValue().setName(new Pair<>(name.getValue().getValue(), true));
106107
returnVar.setValue(qwq);
107108
return null;
108109
});
109110
//name!
110111
methods.put("nameNot", (readOnlyVar, normalVar, caller, returnVar) -> {
111112
var name = (MCStringConcrete)readOnlyVar[0];
112-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
113+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
113114
qwq.getValue().setName(new Pair<>(name.getValue().getValue(), false));
114115
returnVar.setValue(qwq);
115116
return null;
116117
});
117118
//type
118119
methods.put("type", (readOnlyVar, normalVar, caller, returnVar) -> {
119120
var type = (MCStringConcrete)readOnlyVar[0];
120-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
121+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
121122
qwq.getValue().setType(new Pair<>(type.getValue().getValue(), false));
122123
returnVar.setValue(qwq);
123124
return null;
124125
});
125126
//type!
126127
methods.put("typeNot", (readOnlyVar, normalVar, caller, returnVar) -> {
127128
var type = (MCStringConcrete)readOnlyVar[0];
128-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
129+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
129130
qwq.getValue().setType(new Pair<>(type.getValue().getValue(), true));
130131
returnVar.setValue(qwq);
131132
return null;
132133
});
133134
//predicate
134135
methods.put("predicate", (readOnlyVar, normalVar, caller, returnVar) -> {
135136
var predicate = (MCStringConcrete)readOnlyVar[0];
136-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
137+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
137138
qwq.getValue().getPredicate().put(predicate.getValue().getValue(), true);
138139
returnVar.setValue(qwq);
139140
return null;
140141
});
141142
//tag!
142143
methods.put("predicateNot", (readOnlyVar, normalVar, caller, returnVar) -> {
143144
var predicate = (MCStringConcrete)readOnlyVar[0];
144-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
145+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
145146
qwq.getValue().getPredicate().put(predicate.getValue().getValue(), false);
146147
returnVar.setValue(qwq);
147148
return null;
148149
});
149150
//x_rotation
150151
methods.put("xRotation", (readOnlyVar, normalVar, caller, returnVar) -> {
151152
var xRotation = (MCIntConcrete)readOnlyVar[0];
152-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
153+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
153154
qwq.getValue().setX_rotation(new OneIntConcreteRange(xRotation.getValue()));
154155
returnVar.setValue(qwq);
155156
return null;
156157
});
157158
//y_rotation
158159
methods.put("yRotation", (readOnlyVar, normalVar, caller, returnVar) -> {
159160
var yRotation = (MCIntConcrete)readOnlyVar[0];
160-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
161+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
161162
qwq.getValue().setY_rotation(new OneIntConcreteRange(yRotation.getValue()));
162163
returnVar.setValue(qwq);
163164
return null;
164165
});
165166
//nbt
166167
methods.put("nbt", (readOnlyVar, normalVar, caller, returnVar) -> {
167168
var nbt = (NBTBasedDataConcrete)readOnlyVar[0];
168-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
169+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
169170
qwq.getValue().setNbt(nbt.getValue());
170171
returnVar.setValue(qwq);
171172
return null;
172173
});
173174
//level
174175
methods.put("level", (readOnlyVar, normalVar, caller, returnVar) -> {
175176
var level = (MCIntConcrete)readOnlyVar[0];
176-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
177+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
177178
qwq.getValue().setLevel(new OneIntConcreteRange(level.getValue()));
178179
returnVar.setValue(qwq);
179180
return null;
180181
});
181182
//gamemode
182183
methods.put("gamemode", (readOnlyVar, normalVar, caller, returnVar) -> {
183184
var gamemode = (MCStringConcrete)readOnlyVar[0];
184-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
185+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
185186
qwq.getValue().setGamemode(new Pair<>(gamemode.getValue().getValue(), true));
186187
returnVar.setValue(qwq);
187188
return null;
188189
});
189190
//gamemode!
190191
methods.put("gamemodeNot", (readOnlyVar, normalVar, caller, returnVar) -> {
191192
var gamemode = (MCStringConcrete)readOnlyVar[0];
192-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
193+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
193194
qwq.getValue().setGamemode(new Pair<>(gamemode.getValue().getValue(), false));
194195
returnVar.setValue(qwq);
195196
return null;
@@ -198,23 +199,23 @@ public class SelectorConcreteData extends BaseMNIMethodContainer {
198199
methods.put("advancements", (readOnlyVar, normalVar, caller, returnVar) -> {
199200
var advancements = (MCStringConcrete)readOnlyVar[0];
200201
var value = (MCBoolConcrete)readOnlyVar[1];
201-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
202+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
202203
qwq.getValue().getAdvancements().put(advancements.getValue().getValue(), value.getValue());
203204
returnVar.setValue(qwq);
204205
return null;
205206
});
206207
//limit
207208
methods.put("limit", (readOnlyVar, normalVar, caller, returnVar) -> {
208209
var limit = (MCIntConcrete)readOnlyVar[0];
209-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
210+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
210211
qwq.getValue().setLimit(limit.getValue());
211212
returnVar.setValue(qwq);
212213
return null;
213214
});
214215
//sort
215216
methods.put("sort", (readOnlyVar, normalVar, caller, returnVar) -> {
216217
var sort = (MCStringConcrete)readOnlyVar[0];
217-
SelectorConcrete qwq = (SelectorConcrete)((SelectorConcrete)caller).clone();
218+
SelectorVarConcrete qwq = (SelectorVarConcrete)((SelectorVarConcrete)caller).clone();
218219
qwq.getValue().setSort(sort.getValue().getValue());
219220
returnVar.setValue(qwq);
220221
return null;

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import top.mcfpp.util.NBTUtil;
99
import top.mcfpp.util.ValueWrapper;
1010

11-
import java.util.HashMap;
1211
import java.util.UUID;
1312

1413
public class System {
@@ -33,7 +32,7 @@ public static void print(@NotNull MCInt var) {
3332
//是确定的,直接输出数值
3433
Function.Companion.addCommand("tellraw @a " + varC.getValue());
3534
}else {
36-
Function.Companion.addCommand("tellraw @a " + new JsonTextNumber(var).toJson());
35+
Function.Companion.addCommand("tellraw @a " + new ScoreChatComponent(var).toJson());
3736
}
3837
}
3938

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

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,31 @@ class McfppExprVisitor(private var defaultGenericClassType : MCFPPGenericClassTy
465465
return visit(ctx.`var`())
466466
} else if (ctx.value() != null) {
467467
return visit(ctx.value())
468+
} else if (ctx.range() != null){
469+
//是范围
470+
val left = ctx.range().num1?.let { visit(it) }
471+
val right = ctx.range().num2?.let { visit(it) }
472+
if(left is MCNumber? && right is MCNumber?){
473+
if(left is MCFPPValue<*>? && right is MCFPPValue<*>?){
474+
val leftValue = left?.value.toString().toFloatOrNull()
475+
val rightValue = right?.value.toString().toFloatOrNull()
476+
return RangeVarConcrete(leftValue to rightValue)
477+
}else{
478+
val range = RangeVar()
479+
if(left is MCInt){
480+
range.left = MCFloat(range.identifier + "_left")
481+
}
482+
if(right is MCInt){
483+
range.right = MCFloat(range.identifier + "_right")
484+
}
485+
left?.let { range.left.assign(it) }
486+
right?.let { range.right.assign(it) }
487+
return range
488+
}
489+
}else{
490+
LogProcessor.error("Range sides should be a number: ${left?.type} and ${right?.type}")
491+
return UnknownVar("range_" + UUID.randomUUID())
492+
}
468493
} else {
469494
//this或者super
470495
val re: Var<*>? = Function.field.getVar(ctx.text)
@@ -646,15 +671,15 @@ class McfppExprVisitor(private var defaultGenericClassType : MCFPPGenericClassTy
646671
}
647672
return MCStringConcrete(StringTag(stringArray.joinToString("")) ) //没有解析值就变不了MCString了
648673
} else if (ctx.floatValue() != null){
649-
return MCFloatConcrete(ctx.floatValue()!!.text.toFloat())
674+
return MCFloatConcrete(value = ctx.floatValue()!!.text.toFloat())
650675
} else if (ctx.boolValue() != null){
651676
return MCBoolConcrete(ctx.boolValue()!!.text.toBoolean())
652677
} else if (ctx.nbtValue() != null){
653678
return NBTBasedDataConcrete(SNBTUtil.fromSNBT(ctx.nbtValue().text))
654679
} else if (ctx.type() != null){
655680
return MCFPPTypeVar(MCFPPType.parseFromIdentifier(ctx.type().text, Function.currFunction.field))
656681
} else if (ctx.TargetSelector() != null){
657-
return SelectorConcrete(SelectorValue(ctx.TargetSelector().text[1]))
682+
TODO()
658683
}
659684
throw IllegalArgumentException("value_" + ctx.text)
660685
}

src/main/kotlin/top/mcfpp/command/Commands.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ object Commands {
2525
return Command.build("function").build(function.namespaceID,function.namespaceID)
2626
}
2727

28-
2928
/**
3029
* scoreboard players get <target.name> <target.object>
3130
*
@@ -157,6 +156,5 @@ object Commands {
157156
operation()
158157
Function.currFunction = l
159158
return f.commands.toTypedArray()
160-
161159
}
162160
}

0 commit comments

Comments
 (0)