我的世界开发者中文指南(必看)

关于基岩版的Mod问题:基岩版MC里有Mod吗?_bilibili

现在MCreator功能还不错(用这个不用写代码)自定义生物、维度甚至是粒子效果都有了。如果模组主要是往游戏里加东西,不怎么改原版游戏机制,且体量不大,是可以考虑的。但真正想要做好还得要老老实实写代码。

Java版(除MCreator)开发学习路线

0. 如果有这些会更轻松

  • 具有基本的英语能力(如词汇3k+)
  • 了解基础的数学知识(中学水平够用)
  • 具有一定的编程思维或理科思维,不然有可能学不太明白Java

1. Java基础

初学者可看《Java从入门到精通》、菜鸟教程

  • 基本语法:变量和数据类型、运算符、条件、循环、函数等
  • 类和面向对象(精髓)(封装、继承、多态、抽象类和接口、枚举类等)
  • Number和Math类、String和StringBuffer、Stream&File&IO、各种容器
  • 泛型、注解、Java8新特性、异常、线程等
Java不算难,如果学过任何一门编程语言会更轻松,尤其是C/C++/C#
特别注意 Java8新特性、泛型,不少初学者搞不太懂,影响开发
推荐Java8新特性通俗详解专栏

2. API

学完基础之后,可以做模组了。建议先跟着教学视频一步步走,等会做一些基本的东西之后,再看官方文档

想进阶必须要看官方文档、游戏和其他模组作者的代码

初学者不好理解/忽略的点:

服务端和客户端的概念

MC游戏端分为两个端:服务端(Server)和客户端(Client)

这样做主要是为了多人游戏考虑

  • 服务端主要负责游戏逻辑处理
  • 客户端主要负责画面和音效

两个端之间需要通信,通过S2C(Server To Client)和C2S(Client To Server)

即使是单人本地游戏,两个端都会运作

Mixin

用于修改游戏代码

Fabric Mixin参考:Mixin Examples [Fabric Wiki]

初学者容易弄不明白,可以看这篇文章搞定

常用注解
@Shadow:影射原来的类的成员,用于引用原类的变量或方法
@Unique:表示该成员不是原来类的,而是自己写的(如果Mixin类的成员未加任何注解,则会覆盖原类的成员)
@Inject:向代码注入内容
CallbackInfo  cancel()无返回值取消  get/setReturnValue获取和更改返回值
@Redirect:重定向(替换)方法调用
@ModifyArg:修改调用某方法的参数

AccessWidener

不知道(Neo)Forge是否有

用于拓宽类内私有/保护成员的访问权限

本人Fabric开发经验分享

IDE

搭建 / 配置开发环境

Forge搭建可直接下载@耗子的离线包(百度搜)

Fabric看这篇,注意事项:

1. 强烈推荐IntelliJ IDEA

2. 重中之重:一定要安装Java17(+) JDK!!,否则环境搭建失败

3. fabric-example-mod

- build.properties

- 选择稳定版下载

- 有主类路径,不要填错,否则main找不到游戏报错

- 修改LICENSE、README.md

Could not execute entrypoint stage 'main' due to errors 修改fabric.mod.json / 注册物品问题——详见错误日志

项目文件夹

  • fabric-example-mod的license要改
  • 如果intellij 卡在Scanning files to index... Scanning library 'Gradle: commons-io' 那就多次重启软件

重新加载资源和依赖项

——发现Minecraft Client / Server冒“×”的解决方法

或右上角Minecraft Client - Edit - Build and run第一行 (依赖项存在的情况下,可以通过Gradle - Tasks - Fabric - runClient是否能成功运行来检验)

导出Mod

Gradle(右上角大象图标) - Tasks - build - build

API

Mixin

@Unique注解

org.spongepowered.asm.mixin.Unique This annotation, when applied to a member method or field in a mixin, indicates that the member  should never overwrite a matching member in the target class. This indicates that the member differs from the normal "overlay-like" behaviour of mixins in general, and should only ever be added to the target. For public fields, the annotation has no effect.

AccessWidener

用于直接访问反编译源码中的非 public对象
  1. fabric.mod.json添加 ... "accessWidener": "your_mod_id_here.accesswidener ", ...
  2. build.gradle手动添加

  1. xxx has protected/private access in xxx 选择Copy AW entry,则可快速生成access widener表达式
  2. 如果显示另一个程序正在使用或文件占用
  3. 在运行ValidateAccessWidener重启IntelliJ IDEA,如果无效再重启电脑
  4. 可能是access widener语法错误,而不是显示的问题本身,如方法名和参数类型之间不要忘了隔开
  5. field descriptors参考
Descriptor Primitive Description
B byte signed byte
C char Unicode character code point in the Basic Multilingual Plane, encoded with UTF-16
D double double-precision floating-point value
F float single-precision floating-point value
I int signed integer
J long signed long integer
L_ClassName_; reference an instance of ClassName
S short signed short
Z boolean true or false
[ reference one array dimension

修改构造函数

构造函数:注意不能mixin到super前面,否则报错退出

@Inject(method = "<init>", at = @At("TAIL"))

资源包

改变色调

图像 - 调整 - 可选颜色

获取音效+处理

语言

教程 制作自定义语言包:从入门到入完门 (转载备份)
indexes文件选一个,如json

这六个翻译神器可真猛,秒杀一众翻译软件,好用到犯规!
百度和谷歌垃圾,推荐DeepL,带AI,中翻英依然强(但目前2023韩语、捷克语不太好用?)

有没有推荐的繁简体转换器? 在线智能简繁转换

JsonBuddy Desktop与BabelEdit翻译language.json语言文件简要教程
暂时用不上

查找语言简称:使用必应搜索 颜文字和转义换行符翻译容易出问题

联机

Connection refused: no further information

将端口开放为25565

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐