ModernTabs

ModernTabs

一个独立、跨平台的库,使创造模式标签页更加可定制化


什么是 ModernTabs?


这是一个库模组,为自定义任意创造模式标签页提供了一个跨平台的解决方案,比目前在 NeoForge 和 Fabric 上可能实现的功能更进一步。
ModernTabs 使得为每个标签页添加带有指定横幅的独立分区、更改滚动条贴图以及修改创造模式标签图标的背景贴图成为可能。此外,你可以使用任何贴图作为创造模式标签图标,而无需将其注册为游戏内的物品。 
ModernTabs 还允许仅通过定义你想要的颜色来更改背景、图标背景和滚动条纹理,无需任何纹理贴图。

创造模式标签横幅的想法来自 Create Aeronautics/Simulated 模组,因此包含了其部分代码。

 


示例创造模式标签页


此示例创造模式标签页仅在开发环境中启用,因此仅用于展示。
这意味着它不会出现在常规整合包中。

 


面向开发者


如何在你的模组中使用 ModernTabs(设置):

你需要在你的 build.gradle 文件中定义以下内容:

repositories {
maven {
name = "Jitpack"
url 'https://jitpack.io'
}
}

dependencies {
// 仅在多加载器设置中需要(在你的模组的公共部分使用此配置)
// 包含公共模块
modImplementation("com.github.Roboter007.ModernTabs:ModernTabs-common:${rootProject.moderntabs_version}")

// Fabric 需要
// 包含 Fabric 特定模块以及公共模块
modImplementation("com.github.Roboter007.ModernTabs:ModernTabs-fabric:${rootProject.moderntabs_version}")

// NeoForge 需要
// 包含 NeoForge 特定模块以及公共模块
 modImplementation("com.github.Roboter007.ModernTabs:ModernTabs-neoforge:${rootProject.moderntabs_version}")
}

然后你可以在你的 gradle.properties 文件中定义:

// 最新版本:
moderntabs_version=v1.4.0

 

为了在模组中正确实现创造模式标签横幅,你需要做的事情:

// TabIconBackground 类结合了标签图标背景的所有可能状态
// 如果在指定位置找不到贴图,它会使用默认的原版贴图
// 图标背景的贴图必须位于 textures/gui/sprites/creative_inventory/ 下
// 图标背景的贴图文件命名取决于:tab_tabIdentifer_row_column_selectionState.png
// 文件名示例:tab_example_top_left_selected.png
TabIconBackground exampleTabBackgrounds = new TabIconBackground(ExampleMod.MOD_ID, "example"); // example 是标签标识符

// 在此示例中,第一个参数代表文字背景颜色
// 第二个参数定义贴图文件的位置,第三个和第四个定义 example_titel.png 的渲染宽度和高度
// 贴图文件必须位于 sprites 文件夹中(在此示例中位于:textures/gui/sprites/creative_inventory/example_titel.png)
SpriteTabTitel spriteTabTitel = new SpriteTabTitel(new ModernColor("#36454F").lighten(0.5f), ModernTabs.path("container/creative_inventory/example_titel"), 64, 10);

// 只是一个示例颜色
ModernColor exampleColor = new ModernColor("#36454F");

// 使用你已注册的创造模式标签页(在此示例中:EXAMPLE_TAB)
ModernTabs.builder(EXAMPLE_TAB)
// 使定义的创造模式标签页能够使用自定义分区
.withEnabledSections(true)
// 更改任何给定状态下的标签图标背景贴图
.withCustomTabIconBackground(exampleTabBackgrounds)
       // 显示一个常规 Minecraft 物品的 sprite 实例。
// 自定义图标的 sprite 必须位于 textures/gui/sprites/ 下
.withCustomTabIcon(ResourceLocation.fromNamespaceAndPath(ExampleMod.MOD_ID, "example_icon"))
// 更改滚动条的 sprite
       // 自定义图标的滚动条必须位于 textures/gui/sprites/ 下
.withCustomScroller(ResourceLocation.fromNamespaceAndPath(ExampleMod.MOD_ID, "example_scroller"))
// 修改你的创造模式标签页标题
// 选项:1) 光晕文字样式(等同于创造模式标签横幅的文字)
// 2) sprite(使用 sprite 作为你的创造模式标签页标题)
// 3) 自定义(使用默认原版样式文字渲染,但具有更多配置选项,如文字颜色)
.withCustomTitelRendering(spriteTabTitel)
// 仅设置创造模式标签页的背景纹理颜色和滚动条纹理颜色
.withCustomBackgroundColor(exampleColor)
// 此方法与 withCustomBackgroundColor 方法功能相同,但同时也会更改标签图标背景颜色
.withCustomColor(exampleColor);

// 这定义了哪些物品包含在哪个分区中
// 要创建分区,你需要在你的 assets 文件夹中定义一个 json 文件(向下滚动一点,了解如何创建分区)
SectionedItems.addItem(ExampleItems.EXAMPLE_ITEM, ResourceLocation.fromNamespaceAndPath(ExampleMod.MOD_ID, "example_section"));

// 从网格中隐藏一个调试物品,但保持其可搜索
TabItemTransforms.setVisibility(MyItems.DEBUG_STICK, TabItemTransforms.VisibilityType.SEARCH_ONLY);

 

为了使创造模式标签分区正常工作,你需要为你想要的每个创造模式标签分区创建一个 JSON 文件。
这些 json 文件必须位于:assets/mymod/moderntabs/sections/example_section.json,并且你在代码中定义的分区必须与此位置的一个 json 文件匹配。

JSON 文件示例:

{
  "priority": 0,
  "title": {
  "text": { "translate": "itemGroup.example_mod.basics" },
    "color": "#FFFFFF",
    "background": "#AA000000"
  },
"sprite": "example_mod:basics_banner",
  "only_animate_on_hover": false
}
字段 类型 默认值 备注
priority 正整数 0 数值越低越先绘制(在标签页中位置越高)。
title.text 组件 必填 任何普通文本/可翻译组件。
title.color "#RRGGBB" / "#AARRGGBB" #FFFFFFFF 主要文本填充颜色。
title.secondary_color "#RRGGBB" / "#AARRGGBB" 比 title.color 深 20% 轮廓/“光晕”颜色。
title.background "#RRGGBB" / "#AARRGGBB" #AA000000 文本后面药丸形状的背景颜色。
sprite GUI sprite ID moderntabs:default_banner 位于 textures/gui/sprites/ 下的纹理,每个动画帧为 162×18 像素。
only_animate_on_hover 布尔值 false 如果 sprite 是动画,它将暂停,直到鼠标悬停在横幅上。

 


常见问题


为什么又有一个添加创造模式标签横幅的模组?

➔ 我创建这个库是为了在我即将推出的一些模组中使用它,因此我需要同时支持 NeoForge 和 Fabric 的版本。
此外,它已经包含了许多其他功能,旨在让创造模式标签页更易于配置。

会支持 Minecraft 的 x 版本吗?

➔ 我不会进行向后移植。如果有人计划这样做,欢迎自由进行,如果你愿意,可以在 GitHub 上创建拉取请求。我将来可能会将其更新到更新版本(但我不保证)。

 


错误与功能请求


请在关联的 GitHub 上报告你遇到的任何错误或功能请求。

 


致谢