mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
764 字
2 分钟
MCFPP设计稿——布尔值类型
2024-09-12
无标签

在其他语言中,布尔值是一个很简单的东西——一个比特位,足以表示真假。但是在mc中,布尔值的使用只会和execute if有关,而execute if又有繁杂的子命令,这就导致在mcfpp中,布尔值的设计变成了一个相当复杂的工作。需要在保证统一性的前提下,又不失精确性。也就是说,要把所有execute if所有子命令所用的条件类型都在mcfpp统一为一个bool类型的变量,当然在编译器中要区分开来。

基本API设计#

class BasicBool#

基本的布尔值变量。所有的布尔值类都继承于此类。此类定义了布尔值类型能够执行的所有操作,例如布尔计算,储存等

class ScoreBool#

计分板布尔类型,最简单的,也是最常用最灵活的布尔值类型。使用计分板储存布尔值,然后利用execute if scores进行判断。ScoreBool的行为和MCInt类似,或者说几乎完全一样,因为它的本质就是一个MCInt,只是可以使用布尔操作,并且只有0、1两个值。其他所有的布尔类型都要求能够被储存转换为计分板布尔类型。

class BiomeBool#

生物群系布尔类型。由内置函数checkBiome(Biome biome)Pos.checkBiome(Biome biome)来返回。前者直接使用上下文,后者使用指定的坐标上下文。

class BlockBool#

checkBlock(Block block)Pos.checkBlock(Block block)

class BlocksBool#

类似

class DataBool#

nbt类型的内置函数nbt.contains(string key)或者nbt.exsit()返回。

nbt test = {a: 1, list: [{key: apple, value: red},{key: banana, value: yellow}]};
//execute if data storage default:test {}.a
bool b1 = test.contains("a");
//execute if data storage default a.list[{key:"apple"}]
bool b2 = test.a.list[{key:"apple"}].exist();

class DimensionBool#

判断维度的谓词。类似前面的。

class EntityBool#

entity.exsit()返回

class FunctionBool#

函数返回类型,在MCFPP中仅次于计分板布尔类型,用于作为函数的返回值为布尔类型时候的返回值,有时候也作为复杂表达式的计算值。

class ItemBool#

类型ItemSlot的函数ItemSlot.check(ItemPredicate predicate)。这两种类型参见命令函数设计

class LoadedBool#

class PredicateBool#

另一种数据包中相当重要的布尔值类型。谓词这种json文件的具体设计尚未确定,但是基本可以确定这种类型由Predicate.check()返回。

布尔操作#

取反#

直接if和unless修改就好了,非常简单

#

execute天然支持多个条件子命令并列。

#

根据 ab=!(!a&&!b) 进行计算。但是这就意味着,表达式会返回一个函数布尔值类型

# 假设原来条件都是if,这里就要取反
execute unless unless unless run return 0
return 1

赋值与编译器跟踪#

作为成员的布尔值永远只能是计分板布尔值。

除了计分板类型以外,所有类型的布尔值类型编译器都未知。有一个例外,就是NBT的判断,这个编译器也是可以知道的。如果编译器知道确切的值,则默认返回的是一个计分板布尔类型,而不是原类型。

nbt test = {a: 1, list: [{key: apple, value: red},{key: banana, value: yellow}]};
bool b1 = test.contains("a"); //这里返回ScoreBool
test.toDynamic(); //停止跟踪test变量
bool b2 = test.contains("a"); //这里返回DataBool
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

MCFPP设计稿——布尔值类型
https://alumopper.top/posts/mcfpp设计稿-布尔值类型/
作者
Alumopper
发布于
2024-09-12
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时