• 欢迎来到Minecraft插件百科!
  • 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
  • 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289

GuillaumeVDN的插件文档/迁移

来自Minecraft插件百科
Qsefthuopq留言 | 贡献2020年11月20日 (五) 07:43的版本 →‎文件结构
跳转到导航 跳转到搜索
GuillaumeVDN的插件文档
页面

GuillaumeVDN的插件文档 · 迁移

所有插件都有的常见内容

配置 · 杂项 · 关联

QuestCreator

基础内容 · 示例 · 详细特性 · 高级内容 · 关联


迁移至GCore v8和QuestCreator v6

QuestCreator的v6版本需要v8版本的GCore作为前置。我彻底重制了这一版本的插件,新版本的插件可以实现之前所无法实现的功能。

最重要的是,它可以让插件维护更加高效。而且让我不会在面对几年前写的破代码时痛不欲生。之前版本的代码质量虽然可读性强,但到了要修复bug或更新时,我几乎不知所措。这是因为这些代码是我在几年前刚学编程时写的。现在我的编程技术已炉火纯青,几个月前我就有了重制插件这一想法。正是因此你才会看到这份文档和我重制的插件。

我很感谢所有在过去几个月里耐心等待修复漏洞和更新插件的人。虽然有些人只因为他们买了我的产品就似乎认为我属于他们,认为我就应该快点更新插件,但很多人都表示支持[和/或]耐心等待重制插件,即便在重制期间我很少更新插件和修复漏洞。虽然这听起来很傻,但Minecraft目前是我生活的重要组成部分,我非常感谢你们的支持。

我的其它插件

我专注于开发QuestCreator,因为我收到来自这款插件的询问最多。我计划重制我的全部插件,但这需要点时间。我计划在2020-2021年期间完成,只要我有时间,就会去做这件事。

目前只有QuestCreator v6兼容GCore v8。如果你同时使用QuestCreator和我的其它插件,那么你需要同时下载旧版的Gcore 。对此造成的不便我深感抱歉。

警告

这个版本的插件并不稳定,请在投入到正在运行的服务器之前进行充分测试。我会在Discord服务器上发布早期测试版来修复大多数重大漏洞。现在我所公开发布的版本是为了加速调试插件,也为 了不让你们等待太久。

请在Discord服务器汇报任何你遇到的重大问题,如果不是那么严重的问题,你可以在GitLab上汇报。

我会分批处理漏洞,频繁发布新的build,可能每3-4天发布一次。我也会在Discord上发布新的build,以避免无谓的等待时间(对已验证用户而言)。

备份你的服务器

为了避免必须手动调整所有的变更配置,GCore v8和QuestCreator v6内置了一个自动转换配置和数据文件的系统。我用一堆不同的文件测试过该系统。但是某些东西可能会出乎意料地被破坏。

我不管一些人怎样看待我的插件,但无论如何我是不会特意在我的插件中加入漏洞的 ^_^ 。我会尽我所能地修复它们,但我无法预料所有情况,这也是为何插件会存在漏洞。

因此为了避免数据丢失,我希望你在正常运行中的服务器上迁移之前,先做一个完整的备份。不仅仅是备份我的插件文件,还要备份整个服务器,包括地图、玩家数据状态以及其他插件的数据。虽然QuestCreator从不会直接改变这些数据,但你的任务中有可能存在指令/经济奖励、物品操作等,新的bug也可能会修改这些数据。

我不会对由于你没有备份而导致数据丢失负责。但不幸的是这样的事我听得太多了,所以请备份!

除了备份之外, 我对于迁移没有更多的特殊说明了。备份并替换旧的.jar文件,插件会自动开始迁移。

主要变更和新增内容

插件的大多数的结构仍然没有变化(任务、激活器等),但插件新增了一些特性、对配置进行了标准化,作出了一些微小的变更,还新增了这份全新的插件文档!

我必须承认我没有列出全部变更的内容,因为插件变更的内容实在是太多了。下面是我想到的重大变更内容列表。如果你对某些变化有任何疑问,我建议你查看这个文档的相关内容。我也只是建议你通读一遍,至少阅读通用和基础内容。

优化和数据

关于这次更新首先映入我脑海的就是优化。这并不是你真正看得见的东西,但代码变得更清晰、精简、一致了。这可以让我更好的维护我的插件。我还对许多库进行了标准化,这意味着像“你修复的bug还是出现了,修了和没修一样”这样的事情将不再发生。

通过适当的异步/回调管理,现在插件对数据板的处理更加一致。我不会在这里阐述这些内容,总之这意味着数据保存更加一致,你有时可能会随机遇到的一些问题(任务重复,数据文件未删除等),不会再发生了。

配置、物品和变体

我重写了一个YAML解析器,不再使用默认的bukkit解析器。对我而言,最主要的改进是在重写文件时保留注释和配置组织。详见该页面。

许多配置节在不同的地方不一致。我能想到的主要例子是物品:不同地方的设置并不总是相同的。有时你可以使用一些设置,但有时则无法使用;比如大多数情况下,在物品配置中的“exactmatch”或“removeafter_action”等设置并不是所有地方都能用。现在,一切都是一致的:物品有自己的部分,特定设置位于其配置之外。此处记录了大多数通用配置部分。

现在插件能更好地处理物品,并具有更一致的行为。您可以更清晰地配置大多数特定物品元数据,以及NBT标签(而不是不可读的base64编码文本)。

请在此处阅读有关变体(材料/声音/粒子)的更多详细信息。这些内容没有太大的改变,因为我大部分时间使用相同的旧名称,因为这可以让我更自由和清晰地使用(主要是对我而言,但你也可以自由编辑它,你总是有一个最新的材料/声音/粒子列表)。

文本

对我而言,文本是这次更新的白璧微瑕,对此我必须道歉:我找不到一种方法来平滑地转换现有的语言文件。由于许多原因(我新增、删除或修改了很多文本,导致一些文本的含义改变,占位符不一致,等等)。

对文本进行自动转换只会得到一个混乱、不连贯、不美观的结果,而且也会花费大量时间(何况今年夏天我没有多少时间了)。所以译者必须用自己的语言重新翻译文本。对此我向所有的译者表示抱歉,我知道翻译文本可能真的很无聊,而且需要很长时间。

好的一面是,现在每个插件的文本都有自己的文件夹,而不是只有一个塞满了各种语言的texts.yml文件。这样翻译就不那么麻烦了。

指令

每次大型更新我都会优化我的指令库。我猜你们看到这个主要变更时会很高兴:不再需要-参数:值格式。

比如之前的指令你需要输入 /qc start -q:farmquest -p:player,现在你只需输入 /qc start farmquest player

参数无需遵循特定顺序:/qc start farmquest GuillaumeVDN/qc start GuillaumeVDN farmquest有相同的效果。

我优化了参数检测,现在你无需输入整个参数,你可以使用优化过的自动补全系统。如果插件停止给出参数建议,这就意味着插件找到了唯一匹配的结果。比如输入“Guillaume”你会得到“GuillaumeVDN”的结果,或者在没有其它名字是G开头的玩家在线时只输入“g”你也会得到该结果。

因此这些指令都会有相同的效果:/qc start GuillaumeVDN farm_quest/qc start Guillaume farm/qc start g farm/qc start g fa。这可以让输入指令不再那么繁琐,但如果输入的内容太短的话可能会得到无关结果。

如果没有指定目标玩家参数,则大多数带有目标玩家参数的指令将以发送者为目标。

值得一提的是,现在reload|重载指令会彻底重载全部配置和数据。

文件结构

Gcore的文件结构没有多大变化,但QuestCreator就恰恰相反。

下面是对新的层次结构的总结。新的特性和变更将在下面进一步解释。

  • /plugins/QuestCreator/ :
    • data_v6/:玩家/服务器数据文件(即使你使用MySQL,也会有本地文件)

      (之前全部数据文件都集中存储在GCore里)
    • quest_models/(一如既往)
    • quest_models_functional/(新增)
    • quest_activators/(之前所有激活器都位于同一个配置文件内)
    • quest_groups/(之前所有任务组都位于同一个配置文件内)
    • quest_pools/(之前所有任务池都位于同一个配置文件内)
    • quest_states/(新增)
    • guis/(一如既往)
    • global_branches/(新增)
    • global_conditions/(之前所有全局条件都位于同一个配置文件内)
    • global_gui_items/(新增)
    • global_objects/(新增)
    • global_time_frames/(新增)
    • global_variables.yml
    • server_variables.yml(新增)
    • default_variables.yml(之前位于config.yml内)
    • points_categories.yml(之前位于config.yml内)
    • config.yml(一如既往)

GUI

我也重制并优化了GUI处理。 现在的处理会尽可能地避免导致卡顿,尤其是加载大型多页GUI时或是加载很多玩家皮肤的排列GUI时。

如果你安装了ProtocolLib,则插件会使用客户端数据包。这可以在你安装了很多与GUI交互的插件时,避免Spigot处理额外的事件并优化性能。

同时我也对一些配置进行了优化,让你们有很多的编辑空间,比如页面配置和点击覆盖。详见该页面。

激活器和注册

我删掉了一些没用的激活器,比如ENABLED和DISABLED。现在任务不再需要激活器。只要有权限,玩家也能通过GUI或指令开始无激活器的。一些类型的激活器也经过了调整或被删除。

注册文件也不复存在了。你不再需要注册任务模型来开始任务。你可以直接在任务模型文件中配置激活器。任务组内的任务可以在其独立文件内进行配置。

任务目标和条件

大多数任务目标和条件都有变化(对名称和设置进行术语标准化或被删除/替换)。我添加了一些有用的东西,比如特殊目标——CONDITIONSSWITCH|条件切换、LOGICSWITCH|逻辑切换和DIVERGE_GUI|GUI分支。详见任务目标列表。

多目标任务目标(方块/实体/物品)

长久以来用户要求的一个特性就是在同一任务目标内有多个对象。现在大多数方块、实体和物品都可以作为玩家的任务对象。

对于已存在的方块/物品/实体任务,目前只有一个可用的任务目标,插件会在多目标列表内创建一个子目标。该目标的id为a。比如:

# 旧版配置
my_object:
  type: PLAYER_BLOCK_BREAK
  block_type: [DIRT,GRASS_BLOCK]
  amount: 50

# 新版配置
my_object:
  type: PLAYER_BLOCKS_BREAK
  blocks:
    a:
      types: [DIRT,GRASS_BLOCK]
      goal: 50.0

将该id设置为a很重要。如果你更改了这个id,则进行该任务目标的玩家任务进度会被清空。

物品目标和关联条件

一些关联条件有其物品条件和目标,比如PLAYERQUANTUMRPGITEMPICKUP或MMOITEMSITEM。

由于新的简易NBT配置,这些目标已被移除(除了少部分十分具体的条件)。维护这些条件对我而言太痛苦了。更加一致的条件和目标更利于我进行维护。

对于那些具体的条件和目标,你可能需要再次导入。你需要进行一些测试,如果你遇到了问题,请联系我。

逻辑目标和条件

之前需要特定数字才能生效的大多数条件已被重构为逻辑字符串,比如“拥有X元”或“有一个变量的特定值”。这需要你拥有逻辑条件的基础知识,详见这里。

比如:

# 旧版配置
my_condition:
  type: HEROES_SKILL_LEVEL
  skill_name: my_skill
  operation: AT_LEAST
  value: 10
# 新版配置
my_condition:
  type: HEROES_SKILL_LEVEL
  skill: my_skill
  logic: '{skill_level} >= 10'

这同样作用于目标:之前影响特定值的目标也被重构为数学表达式字符串,比如“修改金钱”或“修改数值”。

比如:

# 旧版配置
my_object:
  type: SERVER_MONEY_CHANGE
  operation: 添加
  value: 100.0
# 新版配置
my_object:
  type: SERVER_LOGIC_MONEY
  value_formula: '{value} + 10'  # 货币+10
特例:CONDITIONS条件目标

CONDITIONS目标在新版中被移除了,现根据用法现已被分为了多个其它目标。

a) 如果拥有失败goto(用于连接两个目标):

# 旧版配置
my_object:
  type: CONDITIONS
  conditions:
    # ……此处省略条件设置
    goto_if_not_valid: QUEST_FAIL
  goto: OBJECT continue

# 新版配置
my_object:
  type: CONDITIONS_SWITCH
  cases:
    a:
      conditions:
        # ……此处省略条件设置
      goto: continue
    # 此处可有其它案例
  goto: QUEST_FAIL  # default goto

b) 如果没有失败goto(等待验证条件并继续):

# 旧版配置

my_object:
  type: CONDITIONS
  conditions:
    # ……此处省略条件设置
  goto: OBJECT continue


# 新版配置

my_object:
  type: NONE
  progress_conditions:
    # ……此处省略条件设置
  goto: continue

更多设置

我添加了许多设置,并对一些元素进行了标准化。对于大多数任务目标,我添加了很酷的东西,比如“itemsneeded”和“positionstay”。我为任务池增加了更多的控制选项,添加了一个更清晰的actor限制管理系统,以及针对每个元素添加了很多设置,详细信息请查阅相关页面。

全局元素

为了避免重复配置,我在之前的一堆更新里引入了 "全局变量 "和 "全局条件"的概念。我已经将这个原则扩展到任务目标、分支、GUI物品和时间范围。如果你花了很多时间把相同的配置部分从一个任务复制/粘贴到另一个任务中,那么这个功能很有用。更多信息请查看该页面。

还有更多内容!

我优化了很多配置,也新增了一些我未列出的新特性,这包括但不限于: