这里注明不同模块有啥子用, 可以按照需求使用需要的模块, 不需要的请直接删掉data/s3_def/functions下对应的(文件夹/文件)

如果需要了解结构，注意不要忽视了函数标签和进度的作用


> ticks
  提供不同顺序不同执行者触发的函数标签, 它们是正常游戏时每个gametick内始终触发的
  每种触发都包含3个人为定义的触发顺序(init, def, run)
    > tick
      一般的tick
        > entity
          as @e, 执行位置为tick(run)
        > player
          as @a, 执行位置为tick(run), 且在tick/entity后
    > advance
      进度, 执行者为每个玩家
    > schedule
      计划, 无指定的执行者
    > rcb
      不存在的, 这个执行顺序又不稳定, 而且放rcb也是个问题

> state_def < 前置: triggers(使用到了计分板s3.flag)
  定义一些状态对应的计分板
    > world
    > player
        > find
          玩家存在检测(#s3.player.find s3.flag)
        > hand
            > clock
              玩家手上拿着钟时计分板(#s3.player.hand.clock s3.flag)的值为1
        > xp
          计算玩家的经验值点数
    > entity
        > find
          实体存在检测(#s3.entity.find s3.flag)
        > predicates
          一些断言检测

> triggers < 前置: ticks
  提供各种条件下触发的函数标签
  每种触发都包含3个人为定义的触发顺序(init, def, run)
    > world
        > load
          一般的load
        > loaded
          第一次检测到玩家后触发, 检测和触发位置为tick/player(init)
    > player
        > join
          玩家每一次进入时触发, 包括第一次, 检测为计分板判据检测, 触发位置为tick/player(init), 且在loaded后
        > start
          玩家第一次进入时触发, 检测为进度检测, 触发位置为tick/player(init), 且在join后

> scb < 前置: triggers(load)
  提供基本的计分板

> time < 前置: triggers(load)
  关于时间的玩意
    > refresh
      在tick(init)刷新时间到计分板上
    > get
        > num
          获取gametick, 以数字形式存到storage, 没有触发, 需要主动调用
        > str < 前置: data
          获取gametick, 以字符串形式存到storage, 没有触发, 需要主动调用
    > check
      查看时间的东西, 没有触发, 需要主动调用
    > fix_to_gametime
      修正时间到gametime, 没有触发, 需要主动调用

> uid < 前置: scb
    给每个实体提供临时的uid, 在tick(init)刷新, 在tick/entity(init)获取

> info_show < 前置: scb(s3.int), state_def(玩家存在检测), time(显示gametime)
  显示一些信息
    > load_cost
      tick(run)的时候计时
      loaded(run)时tellraw玩家从load开始到玩家出现所经历的时间
    > loaded
      loaded(run)时tellraw玩家
    > join
      join(run)时tellraw玩家
    > start
      start(run)时tellraw玩家

> clock_time < 前置: time, state_def
  玩家手上拿着钟能显示时间, 检测在tick/player(def), 运行在tick/player(run)

> dimensions < 前置: triggers
    > check
      发现新维度时设立marker, 进度触发和loaded(run)触发, 在tick/player(run)重设进度

> data < 前置: scb
  创建一个新维度用于存储和处理信息
    > get_name
      取得执行者的名字, 输出在storage data data.get_name
    > set_pointer
      重置指针, load触发, 或者主动触发
    
> player_data < 前置: data
  关于玩家uid分配和nbt存储的内容
    > check_uuid
      检查当前位置的存储是否存在uuid, 以及是否与自身uuid相等
      返回(#data.check_uuid s3.flag), uuid不存在(0), uuid存在但不相等(-1), uuid存在且相等(1)
    > get_uid
      取得执行者uid的json文本形式, 输出在storage data data.get_uid
    > lock
      根据自身的uid将指针移动到对应位置
      返回(#data.lock), uid不存在或小于1(0), 否则(1)
    > set_box
      当前位置放置潜影盒并设立存储, 原来有则会被覆盖
      返回(#data.set_box), 放置后检测不到潜影盒(0), 已存在潜影盒(-1), 放置成功(1)
    > set_data
      当前位置的容器内设立存储, 并存下uuid之类的信息, 若原来有, 则会被覆盖
    > set_uid
      检查uid对应的位置是否存在存储, 否则递归寻找存储并重置uid, 找不到则创建存储并重置uid
      start(init)触发
    > set_uid_from_x
      根据当前的x轴坐标设立自身的uid
      返回(#data.check_box s3.flag), 潜影盒不存在(0), 潜影盒存在(1)
    > def
      把玩家的uid转化到假名上, 触发在tick/player(def)

> temp_clear < 前置: ticks
    > entity
      清除标记为temp的实体, 触发在advance(run)

> custom_func < 前置: triggers
  自定义函数, 主要是便于玩家使用多参数函数而设立的
    > read
      把特定实体存储复制到storage内, 触发在tick(init)
    > refresh
      检测data内的输入,并运行, 触发在tick(init), 且在read后
    > clear
      收尾, 触发在tick/entity(entity)
      
> locations < 前置: dimensions
  提供位置的保存和读取, 支持所有实体(大概), 支持自定义维度
    > save
      将位置信息保存到(storage temp locations.save), 需要主动触发
    > load
      将实体传送到(storage temp locations.load)所指的位置, 需要主动触发

> inventories
  提供玩家物品栏的保存和读取
  修改了minecraft下的潜影盒战利品表
    > save
        > only
          仅保存指定格的物品
        > range
          保存slot从x开始到y的物品
        > all
          保存全部物品
        > gamemode
          保存游戏模式
    > save
        > only
          仅读取指定格的物品
        > range
          读取slot从x开始到y的物品
        > all
          读取全部物品
        > gamemode
          读取游戏模式