Skip to content

Commit 794f042

Browse files
committed
更新实体模板描述
1 parent 035869e commit 794f042

File tree

5 files changed

+74
-53
lines changed

5 files changed

+74
-53
lines changed

docs/.vitepress/config.mts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,7 @@ export default defineConfig({
2424
{ icon: 'github', link: 'https://github.com/MinecraftFunctionPlusPlus/MCFPP' }
2525
]
2626
},
27-
28-
vite: {
29-
build: {
30-
rollupOptions: {
31-
input: {
32-
main: 'index.html',
33-
dokka: '/mcfppdocs/index.html'
34-
}
35-
}
36-
}
37-
},
38-
27+
3928
locales: {
4029
root: {
4130
label: '简体中文',

docs/zh/quickstart/05class/01define-and-instantiate.md

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,65 +2,63 @@
22
lastUpdate: true
33
---
44

5-
# 类的定义和实例化
5+
# 实体模板
6+
7+
在MCF中,大部分的操作都基于实体完成。使用频率最高的命令可能就是`execute as`命令了。在MCFPP中,引入了实体模板(Entity Template)的概念,用于集中管理某一类实体,并对这一类实体声明字段和方法,实现数据的储存和操作。在过去的设计中,实体模板又被称为类(Class)。
68

79
```mcfpp
8-
class Person{
9-
string name;
10-
int age;
11-
string sex;
12-
13-
constructor(string name, int age){
14-
this.name = name;
15-
this.age = age;
16-
}
10+
@Base<"creeper">
11+
class SuperCreeper{
1712
18-
func setName(string name){
13+
text name;
14+
15+
constructor(text name){
1916
this.name = name;
2017
}
2118
22-
func toString() -> string{
23-
return "Name: " + this.name + ", Age: " + this.age;
19+
@Tick
20+
func tick(){
21+
effect(@a[distance=..5], Effects.Poison);
22+
title(@a[distance=..5], this.name);
2423
}
24+
2525
}
2626
```
2727

28-
## 类的定义
28+
## 实体模板的定义
2929

30-
作为一个面向对象的编程语言,MCFPP有完善的面向对象的语法和功能。它的语法和Java/C#的语法非常相似,所以,如果你有相关的基础的话,你应该可以很轻松地上手。
30+
实体模板曾经称为类,因此在设计的时候,它的语法和Java/C#中类的声明语法非常相似,所以,如果你有相关的基础的话,你应该可以很轻松地上手。
3131

32-
在MCFPP中,可以使用`class`关键字来声明一个类
32+
在MCFPP中,可以使用`class`关键字来声明一个实体模板
3333

3434
```mcfpp
3535
class ClassName{
36-
#类体
37-
#...
36+
# 类体
37+
# ...
3838
}
3939
```
4040

41-
其中,`ClassName`是类的名字。在MCFPP中,类的名字必须以大写字母开头。而紧随其后的花括号中的内容则是类体,包含了类的成员变量和成员函数,以及它的构造方法等等。是吧,和Java/C#是一样的
41+
其中,`ClassName`是实体模板的名字。在MCFPP中,实体模板的名字必须以大写字母开头。而紧随其后的花括号中的内容则是类体,包含了实体模板的成员变量和成员方法,以及它的构造函数等等
4242

43-
## 类的实例化
43+
## 实体模板的实例化
4444

45-
一般情况下,你可以使用`ClassName(参数列表)`来创建一个对象的实例。比如本篇开头的示例`Person`类可以用`Person p = Person("Alumopper",16)`来创建。在MCFPP中,你并不需要`new`关键字。它被省略掉了
45+
一般情况下,你可以使用`ClassName(参数列表)`来创建一个实体模板的实例。比如本篇开头的示例`SuperCreeper`实体模板可以用`SuperCreeper p = SuperCreeper("Super Creeper")`来创建。
4646

47-
## 类的初始化器
47+
## 实体模板的初始化器
4848

49-
在创建类的时候,你可以使用类初始化器来对类的某些成员变量初始化,例如对于上文中的`Person`,有:
49+
在创建实体模板的时候,你可以使用实体模板初始化器来对实体模板的某些成员变量初始化,例如对于上文中的`SuperCreeper`,有:
5050

5151
```mcfpp
52-
Person p = Person("Alumopper",16)[
53-
sex = ""
52+
SuperCreeper p = SuperCreeper("")[
53+
name = "Super Creeper"
5454
];
5555
```
5656

57-
这样,`p``sex`成员变量就被初始化为`"女"`了。
58-
5957
::: tip
6058

61-
### 不仅仅是类的初始化
59+
### 不仅仅是实体模板的初始化
6260

63-
事实上,类初始化器可以用在任何地方,而不只是在类的初始化的时候。比如
61+
事实上,实体模板初始化器可以用在任何地方,而不只是在实体模板的初始化的时候。比如
6462

6563
```mcfpp
6664
func main(){
@@ -70,5 +68,12 @@ func main(){
7068
}
7169
```
7270

73-
在这个例子中,类的初始化器实际上是域操作器。`t = t[a = 100]`将t中的a赋值为100。
71+
在这个例子中,实体模板的初始化器实际上是域操作器。`t = t[a = 100]`将t中的a赋值为100。
72+
:::
73+
74+
::: tip
75+
76+
### 实体模板与类
77+
78+
类是实体模板的特殊形式。有时候,你可能只是想要储存一些数据,而不是对一类实体进行某些操作,在这个情况下,我们更倾向于把实体模板称为类。因此,在之后的文档中,如果你看到了“类”这个词,你可以认为它是“实体模板”的同义词。
7479
:::

docs/zh/quickstart/05class/02member.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
lastUpdate: true
33
---
44

5-
# 类的成员
5+
# 实体模板的成员
66

7-
和Java类似,在MCFPP中,类的成员包括属性和方法。属性是类的数据成员,用来存储对象的数据;方法是类的函数成员,用来操作对象的数据。类的成员可以通过`.`操作符来访问。
7+
和Java类似,在MCFPP中,实体模板的成员包括属性和方法。属性是实体模板的数据成员,用来存储对象的数据;方法是实体模板的函数成员,用来操作对象的数据。实体模板的成员可以通过`.`操作符来访问。
88

99
## 属性
1010

11-
属性是类的数据成员,用来存储对象的数据。属性的定义语法如下:
11+
属性是实体模板的数据成员,用来存储对象的数据。属性的定义语法如下:
1212

1313
```mcfpp
1414
class A{
@@ -17,11 +17,11 @@ class A{
1717
}
1818
```
1919

20-
上述代码定义了一个类`A`,它有两个属性`a``b``a`是一个整数类型的属性,没有初始化;`b`是一个整数类型的属性,初始化为`5`
20+
上述代码定义了一个实体模板`A`,它有两个属性`a``b``a`是一个整数类型的属性,没有初始化;`b`是一个整数类型的属性,初始化为`5`
2121

2222
## 方法
2323

24-
方法是类的函数成员,用来操作对象的数据。方法的定义语法如下:
24+
方法是实体模板的函数成员,用来操作对象的数据。方法的定义语法如下:
2525

2626
```mcfpp
2727
class A{
@@ -44,11 +44,11 @@ class A{
4444

4545
## 访问控制
4646

47-
MCFPP中,类的成员可以使用`public``protected``private`关键字来控制访问权限。默认情况下,类的成员是`private`的。
47+
MCFPP中,实体模板的成员可以使用`public``protected``private`关键字来控制访问权限。默认情况下,实体模板的成员是`private`的。
4848

4949
- `public`:公有的,可以被外部访问。
50-
- `protected`:受保护的,可以被子类访问
51-
- `private`:私有的,只能在类的内部访问
50+
- `protected`:受保护的,可以被子实体模板访问
51+
- `private`:私有的,只能在实体模板的内部访问
5252

5353
```mcfpp
5454
class A{
@@ -66,7 +66,7 @@ class B: A{
6666
}
6767
6868
func test(){
69-
A obj = new A();
69+
A obj = A();
7070
obj.a = 1; #合法
7171
obj.b = 2; #编译错误
7272
obj.c = 3; #编译错误

docs/zh/quickstart/05class/03object.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ lastUpdate: true
66

77
## 定义
88

9-
使用`object class`声明一个单例的类对象。单例是一种特殊的类,只有一个实例。在其他方面,单例和普通类没有区别
9+
使用`object class`声明一个单例的实体模板对象。单例是一种特殊的实体模板,只有一个实例。在其他方面,单例和普通实体模板没有区别
1010

1111
```mcfpp
1212
object class Singleton {
@@ -25,7 +25,7 @@ Singleton.setValue(10)
2525

2626
## 伴随对象
2727

28-
如果声明了一个和类同名的单例,那么我们称这个单例为类的伴随对象
28+
如果声明了一个和实体模板同名的单例,那么我们称这个单例为实体模板的伴随对象
2929

3030
```mcfpp
3131
class Person {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
---
2+
lastUpdate: true
3+
---
4+
5+
# 杂项
6+
7+
## 基实体
8+
9+
在本章节开头的例子中你可能已经发现,我们使用了`@Base<"creeper">`这行代码。这行代码被称为**注解**,我们会在后续的章节中讲到它。在类定义的前一行使用`@Base<"creeper">`注解,可以指定这个实体模板以哪个实体为基础。这个实体就是基实体。
10+
11+
一般来说,大部分的实体都不能很好的直接储存自定义数据,所以当基实体不是`item_display`或者`marker`的时候,将会在这个实体上骑乘一个`marker`实体,用于储存实体模板的自定义字段。
12+
13+
基实体带有标签`<命名空间>_class_<类名>_pointer"`,而用于储存数据的实体则带有标签`<命名空间>_class_<类名>_pointer_data"`
14+
15+
## 实体模板的生命周期
16+
17+
实体模板的生命周期和基实体的生命周期是一致的。当基实体被移除时,实体模板也会被移除。这个过程由垃圾处理器(GC)自动完成。
18+
19+
当然,你可以可以手动释放内存,使用`delete`函数:
20+
21+
```mcfpp
22+
23+
SuperCreeper p = SuperCreeper("Super Creeper");
24+
25+
delete(p);
26+
27+
```

0 commit comments

Comments
 (0)