利用ArchitecturyAPI搭建MC跨平台模组开发环境

搭建跨平台模组开发环境

构建开发环境

类似于fabric, architectury plugin也提供了相对应的example-mod来方便我们搭建环境。

首先来到Architectury-Templates的Releases页面,选择合适的版本

目前Architectury仅支持1.16+的版本

Architectury提供下面这几种Templates可供选择

  • 1.18.2-forge.zip: 1.18.2 的基于Forge-LoomForge开发环境
  • 1.18.2-architectury.zip: 1.18.2 跨加载器的开发环境
  • 1.18.2-architectury-mixin.zip: 1.18.2 使用Mixin的跨加载器开发环境

相信阅读过初识Architectury章节的读者已经明白自己需要下载的版本了

这里我们不着重介绍Mixin, 感兴趣的读者可以阅读笔者先前的文章

本文基于Minecraft 1.18.2版本,并且我们不需要Mixin, 所以我们下载1.18.2-architectury.zip

将下载到的文件进行解压,直接使用Intellij IDEA来导入文件夹中的build.gradle文件

类似于Fabric和Forge的环境构建,这里Gradle会帮助我们下载必要的文件, 并且自动使用Loom进行反混淆,读者需要稍加等待

build.gradle中的一些常量现在移动到了gradle.properties

image.png

构建完成后, Gradle会自动为我们生成针对两个平台的运行配置

在Architectury项目创建完成后, 请尽量避免移动项目的位置或者给项目的目录改名. 可能会产生找不到architectury-transformer-agent.jar的问题

如果产生了这个问题, 可以自行修改启动配置中-javaagent的路径

恭喜你, 你已经构建好了一个完整的开发环境

简析目录结构

重新审视我们构建好的开发环境, 我们的目录结构类似这样

  • common
    • src/main/java/net.examplemod
      • ExampleMod.java
      • ExampleExpectPlatform.java
  • forge
    • src/main/java/net.examplemod.forge
      • ExampleModForge.java
      • ExampleExpectPlatformImpl.java
  • fabric
    • src/main/java/net.examplemod.fabric
      • ExampleModFabric.java
      • ExampleExpectPlatformImpl.java

经过简单的观察, 我们发现

  • 实例代码在主类ExampleMod中进行了物品的注册和一些基本操作
  • ExampleModForge中添加了@Mod注解, 并调用ExampleMod中的init
  • ExampleModFabric类实现了ModInitializer方法, 并调用ExampleMod中的init
  • 实例代码在ExampleExpectPlatform中写了一个**“没有方法体”**的方法 getConfigDirectory
  • common模块中的某些代码调用了getConfigDirectory
  • forge模块中的ExampleExpectPlatformImpl用forge独有的方式补全了方法体
  • fabric模块中的ExampleExpectPlatformImpl用fabric独有的方式补全了方法体

可以发现, 我们模组的共性部分在common模块中, 而非共性部分则分别在forge和fabric包中展现.

针对一个需要考虑兼容性的方法, 我们往往先定义"接口", 然后为接口写不同的实现(Impl), 这是Architechtury以及大部分跨平台程序设计中所共有的思想

实际上ExampleExpectPlatform在这里类似于接口.

开始旅程

实例代码已经为我们提供了一个清晰的思路, 现在我们已经可以删除掉他们, 开始我们自己的旅途了.

在common, forge, fabric三个模块中分别建立trou.arch(.forge/.fabric)包, 并创建对应的Arch, ArchForge, ArchFabric类.

位于common: trou/arch/Arch.java
public static final String MOD_ID = "arch";

public class Arch {
    public static void init() {
        System.out.println("Hello Architectury!");
    }
}
位于forge: trou/arch/forge/ArchForge.java
@Mod(Arch.MOD_ID)
public class ArchForge {
    public ArchForge() {
        Arch.init();
    }
}
位于fabric: trou/arch/fabric/ArchFabric.java
public class ArchFabric implements ModInitializer {
    @Override
    public void onInitialize() {
        Arch.init();
    }
}

根据读者以往开发Forge或Fabric的经验修改必要的文件名和参数变量, 分别启动游戏, 应该可以看到Hello Architectury!消息输出在控制台中

可能出现的问题

因为涉及到很多transform和黑科技, 对规范性的要求比较高, 读者可能会出现一些疏忽, 下面是一些可能出现的常见问题 (笔者搭建环境的时候出现的问题)

开发中出现错误, 其中有examplemod字样

检查是否有遗漏的examplemod没有修改, 请主要检查

  • fabric.mod.json
  • gradle.properties
  • mods.toml
  • (accesswidener)
  • (mixins.json)

Architectury Templates

运行Fabric调试, 模组没有加载

请检查自己是否修改了fabric.mod.json, 其中定义了Mod主类入口

打开fabric模块中的resources/fabric.mod.json, 修改entrypoints

"entrypoints": {
    "main": [
      "trou.arch.fabric.ArchFabric"
    ]
  },
运行Forge调试, 抛出Modules generated错误

请检查自己的Forge主类是否放在了forge模块的对应forge包

我们项目的ArchForge应位于forge\src\main\java\trou\arch**\forge\**ArchForge.java

实验性内容: 使用Parchment

此项内容读者可以选择性阅读. Architectury并未主动支持Parchment. 以下内容均出自笔者尝试, 不能保证是否出现问题, 如果读者想要使用, 出现了编译类问题, 请首先尝试移除Parchment

众所周知, 现在Forge和Fabric默认使用Mojang官方混淆表, 但官方混淆表并没有放出参数的混淆信息, 这导致高版本默认反编译的参数表是很难阅读的, Parchment解决了这一问题, Parchment提供了参数表的反混淆方式. 这里笔者不过多赘述Parchment本身, 国内也有相关的介绍和使用教程, 读者可以自行翻阅查看.

这里我们尝试在Architectury中引入Parchment

首先打开项目根目录的build.gradle, 在subprojects中按需添加如下内容

subprojects {
    repositories {
        maven { url = 'https://maven.parchmentmc.org' }
    }

    dependencies {
        minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
        mappings loom.layered() {
            officialMojangMappings()
            parchment("org.parchmentmc.data:parchment-1.18.2:2022.03.13@zip")
        }
        // mappings loom.officialMojangMappings()
    }
}

之后刷新Gradle项目, 等待Parchment下载并自动部署后, 再次查看参数表, 已经反混淆过了.

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值