![1:将现有的 Minecraft 离线(可能是 1.16.5 左右,谁知道呢?)](https://linux22.com/image/1174458/1%EF%BC%9A%E5%B0%86%E7%8E%B0%E6%9C%89%E7%9A%84%20Minecraft%20%E7%A6%BB%E7%BA%BF%EF%BC%88%E5%8F%AF%E8%83%BD%E6%98%AF%201.16.5%20%E5%B7%A6%E5%8F%B3%EF%BC%8C%E8%B0%81%E7%9F%A5%E9%81%93%E5%91%A2%EF%BC%9F%EF%BC%89.png)
我正在尝试在 Ubuntu 20.04 上为我的儿子安装一些 Minecraft Mods,但我被困在 Forge 上。
我已经尝试使用 Minecraft snap 和 deb 版本、来自 OpenJDK(8、11)和 Oracle(14)的一系列版本的 JRE、无头和非无头的 JRE,以及来自此存储库的大量 Forge(1.12.2)子版本: https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.12.2.html
使用从上面链接下载的 jar 安装 Forge 客户端后,我收到此错误:
[22:02:06] [main/ERROR] [LaunchWrapper]: Unable to launch java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_242] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_242] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] Caused by: java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper at java.awt.Toolkit.loadAssistiveTechnologies(Toolkit.java:807) ~[?:1.8.0_242] at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:886) ~[?:1.8.0_242] at org.lwjgl.LinuxSysImplementation.(LinuxSysImplementation.java:50) ~[lwjgl-2.9.4-nightly-20150209.jar:?] at org.lwjgl.Sys.createImplementation(Sys.java:131) ~[lwjgl-2.9.4-nightly-20150209.jar:?] at org.lwjgl.Sys.(Sys.java:116) ~[lwjgl-2.9.4-nightly-20150209.jar:?] at net.minecraft.client.Minecraft.func_71386_F(Minecraft.java:2984) ~[bib.class:?] at net.minecraft.client.main.Main.main(SourceFile:38) ~[Main.class:?] ... 6 more [22:02:06] [main/INFO] [STDERR]: [java.lang.ThreadGroup:uncaughtException:1052]: net.minecraftforge.fml.relauncher.FMLSecurityManager$ExitTrappedException [22:02:06] [main/INFO] [STDERR]: [java.lang.ThreadGroup:uncaughtException:1052]: at net.minecraftforge.fml.relauncher.FMLSecurityManager.checkPermission(FMLSecurityManager.java:49) [22:02:06] [main/INFO] [STDERR]: [java.lang.ThreadGroup:uncaughtException:1052]: at java.lang.SecurityManager.checkExit(SecurityManager.java:761) [22:02:06] [main/INFO] [STDERR]: [java.lang.ThreadGroup:uncaughtException:1052]: at java.lang.Runtime.exit(Runtime.java:108) [22:02:06] [main/INFO] [STDERR]: [java.lang.ThreadGroup:uncaughtException:1052]: at java.lang.System.exit(System.java:973) [22:02:06] [main/INFO] [STDERR]: [java.lang.ThreadGroup:uncaughtException:1052]: at net.minecraft.launchwrapper.Launch.launch(Launch.java:138) [22:02:06] [main/INFO] [STDERR]: [java.lang.ThreadGroup:uncaughtException:1052]: at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
因此我搜索了这个错误“导致原因:java.awt.AWTError:未找到辅助技术:org.GNOME.Accessibility.AtkWrapper”,并找到了这篇 Ask Ubuntu 文章:
尝试了该文章中引用的所有选项,其中指示放置下面的 java 选项使我稍微进步了一点:
-Djavax.accessibility.assistive_technologies=" "
但是现在我收到了 Minecraft 崩溃报告:
---- Minecraft Crash Report ---- // Oops.
Time: 6/28/20 9:56 PM Description: Initializing game
java.lang.ExceptionInInitializerError at net.minecraft.client.Minecraft.func_175594_ao(Minecraft.java:680) at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:456) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:378) at net.minecraft.client.main.Main.main(SourceFile:123) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) Caused by: java.lang.ArrayIndexOutOfBoundsException: 0 at org.lwjgl.opengl.LinuxDisplay.getAvailableDisplayModes(LinuxDisplay.java:951) at org.lwjgl.opengl.LinuxDisplay.init(LinuxDisplay.java:738) at org.lwjgl.opengl.Display.(Display.java:138) ... 10 more
如果有人认为这有帮助,我可以提供完整的日志和崩溃报告。
一个有趣的评论是,实际上所有高于 1.12.2 的 Forge 版本(如 1.16.1)都可以在 Ubuntu 20.04 上正常工作。不幸的是,对我来说,使用这些版本不是一个选择,因为我儿子尝试使用的某些 Mod 在高于 1.12.2 的 Forge 版本上不起作用,例如“Ancient Warfare”、“Animania”和“Chisel”。
如果你能帮助我,我将非常感激。
答案1
您是否尝试过将系统默认 Java 设置为 Java 8?我最近尝试使用 Forge 1.12.2,当您尝试从启动器启动它时,它会立即崩溃。尝试运行sudo update-alternatives --config java
并输入要设置为默认值的 Java 8 编号,然后尝试再次启动 Forge。这为我解决了问题,因为 Forge 版本 1.12.2 仅与 Java 8 兼容。
答案2
有一些出色的 Minecraft Java 版模组,例如 Serene Seasons 和 Dynamic Trees,它们为运行 Minecraft Java 版 1.12.2 提供了动力。Minecraft Bedrock 用户会发现购买一套新的 Minecraft Java 版许可证非常值得,这样才能体验 Ice and Fire 等出色的模组以及多种选择。
对于那些不知道的人来说,这仅适用于Minecraft Java 版. Minecraft Bedrock 不可修改,而要修改 Minecraft Java 版,则需要使用伟大的 Minecraft锻造也是必要的。如果您只有 Minecraft Bedrock,现在是时候重新购买所有 Java 版许可证了。这是值得的。
虽然我不确定特定错误楼主报告说,我在尝试安装 Minecraft Java 版 1.12.2 时遇到了几个类似的 Java 错误。我发现从头开始使用 Java 8 执行所有步骤都适用于 Mac OSX Minecraft 服务器和 Ubuntu 20.04 和 Windows 10 客户端。
对于 Minecraft Forge 1.12.2,在安装 Minecraft 服务器、Minecraft 客户端和 Forge 时,Java 8 需要成为系统默认 Java。可以可靠且同时运行多个 Java 版本。同时运行多个版本可能比卸载现有(可能稍后)Java 更容易,因为卸载现有 Java 可能会破坏某些东西。
此外,Minecraft Java 版需要首先安装, 和至少运行一次在尝试安装 Forge 之前,服务器和客户端. 锻造厂安装程序需要使用jar,而不是“通用”jar。
以下说明详细说明如何查找、安装和选择 Java 8 作为默认值,以及如何为 Linux、Mac OSX 和 Windows 安装 Minecraft Java Edition 1.12.2 和 Forge 1.12.2。
您需要能够遵循 CLI bash 命令,在必要时使用 sudo,并了解有关用户主目录和操作系统的 Minecraft 安装目录的一些基础知识。如果您需要搜索这些方面,网上有很多支持。完成一些步骤后重新启动机器可能会有所帮助;如果进程似乎被阻止,请尝试一下。
- 有关安装 Minecraft 服务器的基础知识,请参阅https://minecraft.fandom.com/wiki/Tutorials/Setting_up_a_server
- 对于 MacOS,这些说明使用 HomeBrew,因此需要安装:https://www.dev2qa.com/how-to-install-homebrew-on-mac-os
1:将现有的 Minecraft 离线(可能是 1.16.5 左右,谁知道呢?)
要保存现有的安装世界以便稍后恢复,请将 Minecraft 安装文件夹移动到某个中立位置,例如用户主目录或文档等。所使用的文件夹可能是~/.minecraft
,/Library/Application Support/...
或者位于“漫游目录”中,用于其他地方。使用拖放或执行类似 的操作mv ~/.minecraft ~/Documents/minecraft-1.16.5
。
2:在 Linux 上安装 Java 8
提供了有关查找和安装 Java 的全面说明:https://petewan.com/blog-post/install-and-manage-multiple-java-jdk-and-jre-versions-on-ubuntu-20-04/
检查已安装的 Java 版本,例如:
java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
安装 Open JDK Java 8:
sudo apt update
sudo apt install openjdk-8-jdk
我没有使用 Oracle Java,但我想我会在这里引用它以防其他人需要它:
# sudo add-apt-repository ppa:webupd8team/java
# sudo apt install oracle-java8-installer
# sudo apt install oracle-java8-set-default
2:在 Mac OSX 上安装 Java 8
提供了有关查找和安装 Java 的全面说明:https://www.dev2qa.com/how-to-install-uninstall-multiple-java-versions-in-mac-os-by-home-brew-or-manually/
确保 HomeBrew 已安装 cask:
brew tap homebrew/cask-versions
使用 HomeBrew 搜索来发现可供安装的 Java 版本的名称:
brew search java
brew search jdk
这些命令将列出可用的 HomeBrew 安装的有用名称,例如adoptopenjdk8
。
- 该
brew search
命令将列出“Formulae”和“Casks”。 - Java 8 可能仅在 Casks 中可用。
- 从列表中找出包含“java”或“jdk”且后跟“8”的名称。
该brew cask
命令不再可用,但是brew install --cask
,请使用从列表中选择的名称来使用该命令brew search
:
brew install --cask adoptopenjdk8
此命令可能会引发错误,但有望列出其他“位置”:
Error: Cask adoptopenjdk8 exists in multiple taps:
homebrew/cask-versions/adoptopenjdk8
caskroom/versions/adoptopenjdk8
因此,请使用列出的完整路径重新尝试安装,该路径应类似于以下之一:
brew install --cask adoptopenjdk8/openjdk/adoptopenjdk8
brew install --cask homebrew/cask-versions/adoptopenjdk8
2:在 Windows 上安装 Java 8
如果使用 Windows 客户端,尽管 Java 现在是版本 16,但我发现 Java 8 仍然是 Windows 10 上使用的 Java。无需安装!Windows 太简单了 ;)
3:在 Linux 上将 Java 8 设置为系统默认设置
安装 Java 8 后,以前的 Java 可能仍是默认版本。检查系统上可用的替代方案。Java 8 列为“1.8”:
update-java-alternatives --list
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64
使用update-alternatives
选择 Java 8 作为新的默认 Java。系统将提示您按数字键选择新的默认 Java:
sudo update-alternatives --config java
sudo update-alternatives --config javac
如果更新替代方案不可用,update-java-alternatives --set
则可能会有用。
这可能足以将 Java 8 设置为默认值。在新的 shell 中检查当前 Java 版本:
java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
如果在达到 Java 8 时仍存在问题,设置JAVA_HOME
环境变量可能会有所帮助。可以使用 确定当前 Java 的规范路径readlink
。以前它可能返回如下内容:
readlink -f /usr/bin/java
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
安装 Java 8 后它看起来应该更像这样:
readlink -f /usr/bin/java
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
截断/jre/bin/java
或/bin/java
段以确定 Java 主目录。将该路径设置为JAVA_HOME
将运行 Minecraft 的用户的 shell 配置文件中的环境变量:
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")
也就是说(这两个应该是一样的,但是这个比较好):
export JAVA_HOME='/usr/lib/jvm/java-8-openjdk-amd64'
与一些指南相反,JAVA_HOME
变量确实不是引用bin
目录。但bin
目录应该在变量中引用PATH
,如果问题仍然存在,也可以添加变量:
export PATH="$PATH:$JAVA_HOME/bin"
不需要使用/jre/bin/
后缀,因为也/jre/bin
应该符号链接。/bin
希望java -version
现在能够按要求返回 Java 8。
3:在 Mac OSX 上将 Java 8 设置为系统默认
安装 Java 8 后,除非之前没有安装其他 Java,否则它可能仍不是系统默认版本。要检查正在使用的版本,请在新的终端中使用版本选项调用 Java:
java -version
它可能会列出类似 Java 11 的内容。Java 8 列出为“1.8”。
为了使 Java 8 成为系统默认设置,需要配置环境以报告正确的JAVA_HOME
变量PATH
。
Java 8 现在应该列在已知的 Java 版本中,运行后会显示如下结果/usr/libexec/java_home
:
/usr/libexec/java_home -V
Matching Java Virtual Machines (4):
15.0.2, x86_64: "AdoptOpenJDK 15" /Library/Java/JavaVirtualMachines/adoptopenjdk-15.jdk/Contents/Home
1.8.0_292, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
现在JAVA_HOME
需要将环境变量设置为 Java 8(Java 1.8)列出的路径。在运行服务器的用户的 bashrc / bash_profile / profile 或 Zsh 配置文件中指定此变量,以便每次用户登录/启动时都会设置它。以下命令java_home
可以帮助完成此操作:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_292)
或者仅指定主要版本:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
完成后,运行一个新的终端应该会导致变量中出现 Java 主目录的路径JAVA_HOME
:
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
然后PATH
还需要设置变量以包含特定的JAVA_HOME
bin 目录。同样,在 shell 配置文件中,设置
PATH="$PATH:$JAVA_HOME/bin"
echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin
在新的终端中单独运行 Java 时,当前使用的 Java 版本应该显示为 Java 8 (1.8):
java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
3:在 Windows 上将 Java 8 设置为系统默认值
与以前一样,这不是必需的,因为 Windows 仍在使用 Java 8。
4:下载、安装并运行 Minecraft 服务器
1.12.2 版的官方 Minecraft 服务器 JAR 可在此处获取:https://www.minecraft.net/en-us/article/minecraft-1122-released
从该页面上的链接下载应该会提供minecraft_server.1.12.2.jar
。使用新安装的 Java 8 运行 JAR 文件进行安装:
java -jar minecraft_server.1.12.2.jar
此操作对于 Linux、Mac 甚至 Windows 应该相同。
请记住,需要运行 Minecraft JAR 两次。第一次会生成一些文件,然后会因为 EULA 未签名而退出。编辑eula.txt
阅读eula=true
,然后重新运行以确保 Minecraft Java 版服务器运行。
我读到过,当运行 Forge 作为服务器时,Minecraft 服务器不是必需的,因为 Forge 会处理所有事情。但是,这是我采用的路线,而且对我来说很有效。
5:下载并安装 Minecraft 启动器
运行 Minecraft 作为客户端需要两个可执行文件:启动器和游戏。这很重要,因为需要在安装 Forge 之前安装游戏,并且只有玩游戏才会触发从启动器下载并安装该版本的游戏。
官方的 Minecraft 启动器可以在这里找到:https://www.minecraft.net/en-us/download 该页面有 Mac DMG 安装程序和 Windows MSI 安装程序的链接。当然,也可以直接从 Linux 上的命令行下载:
wget -o ~/Minecraft.deb https://launcher.mojang.com/download/Minecraft.deb
在 Mac 和 Windows 上正常安装启动器。对于 Ubuntu Linux,这适用于安装 DEB 包:
sudo dpkg -i Minecraft.deb
并列出启动器安装的位置:
ls /var/lib/dpkg/info/minecraft-launcher.*
dpkg -L minecraft-launcher
/usr/bin/minecraft-launcher
/usr/share/applications/minecraft-launcher.desktop
/usr/share/icons/hicolor/symbolic/apps/minecraft-launcher.svg
...
sudo apt list --installed | grep craft
minecraft-launcher/now 928 amd64 [installed,local]
在启动器中下载游戏时请耐心等待。微软只是一家资源有限的小公司,从其服务器下载游戏可能需要一些时间,甚至需要重试一次或多次。之后可能还需要重新启动。
6:玩最新的 Minecraft!
首次安装 Minecraft Launcher 时,系统上没有可用的 Minecraft 游戏。我发现,玩最新的 Minecraft 单人游戏是解锁 Minecraft Launcher 安装中先前版本的必要步骤。所以玩 Minecraft 单人游戏吧!
启动器应该提供一个播放按钮,单击它将下载、安装并运行最新的 Minecraft Java 版游戏(现在在 Java 8 中)。这在 Linux、Mac 和 Windows 上应该是相同的。
7:安装并运行 Minecraft 1.12.2 客户端
同样,在 Linux、Mac 和 Windows 上应该可以实现相同的过程。从启动器玩最新的 Minecraft 后,除了安装最新的 Minecraft 客户端外,启动器现在还应提供以前版本的 Minecraft 游戏客户端。
(显然 Minecraft 服务器安装程序也可以从这里下载,但我没有尝试过。)
对于 Windows,可能需要Settings > General > Show historical versions of Minecraft Java Edition
在启动器中使用来解锁以前的版本。
- 运行 Minecraft Launcher,但不要玩游戏
- 切换到启动器中的“安装”选项卡
- 点击“新安装”,然后在版本菜单中选择 1.12.2
- 保存此新安装并选择它来玩 Minecraft 1.12.2
现在再次从启动器玩原版 Minecraft - 这次是版本 1.12.2。此操作将在客户端计算机上下载并安装 Minecraft 1.12.2。
此时,老式原版 Minecraft Java 版 1.12.2 可用作游戏客户端和服务器。我想值得通过尝试在服务器上运行 1.12.2 原版网络游戏来检查其是否有效。
8:安装并运行客户端和服务器的 Forge 1.12.2
现在到了 Forge 的时间了。
Forge 1.12.2 安装程序可在官方网站上找到。请确保单击“安装程序”图标。“通用”或类似的选项不起作用:https://files.minecraftforge.net/net/minecraftforge/forge/index_1.12.2.html
此操作并非完全简单。 重定向后避开所有链接,并等待“跳过”按钮出现在右上角。 我不会在这里详细说明点击说明,但它们可用:https://www.alphr.com/install-minecraft-forge-windows-mac/
- 对于每个客户端和服务器,将下载的 Forge 安装程序 JAR 放在 Minecraft 目录中(这可能不是必需的,但这就是我所做的)。
- 该
java -version
调用应该确认默认 Java 是 Java 8。 - 在 Linux 上,继续操作之前请先运行预防
sudo apt update
措施sudo apt upgrade
。 - 运行 Forge JAR 文件(在 Windows 上双击它就足够了):
java -jar forge-1.12.2-14.23.5.2855-installer.jar
- 当 GUI 弹出时,根据该机器的情况选择“安装客户端”或“安装服务器”。
安装后应该会有一个新的未命名为“installer”的 Forge JAR 文件:
forge-1.12.2-14.23.5.2855-installer.jar
forge-1.12.2-14.23.5.2855-installer.jar.log
forge-1.12.2-14.23.5.2855.jar
对于 Minecraft 服务器,现在应该可以运行新的 Forge JAR。这是我在 Mac OS 上启动我们家庭 Minecraft Forge 时使用的简短脚本,同时设置环境变量以防万一:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH="$PATH:$JAVA_HOME/bin"
cd /Users/family/Minecraft
exec java -Xms512M -Xmx2048M -XX:+UseG1GC -jar forge-1.12.2-14.23.5.2855.jar nogui
对于客户端,启动 Minecraft Launcher 后,再次使用“安装”选项卡。创建一个新安装,并在菜单中找到新的 Forge 1.12.2 条目以选择发布。
从此安装玩 Minecraft 现在足以找到并访问 Forge 1.12.2 服务器。
只需将相同的 mod JAR 文件放入服务器和客户端的“mods”目录中,即可将您从游戏中获得的价值增加四倍、五倍和十倍!