Skip to content

@opys/java ​

npm

Java для opys. java() додає Java до збірки, щоб гравцям не треба було нічого встановлювати.

sh
npm install -D @opys/dev @opys/java @opys/minecraft-vanilla

Приклад ​

js
// opys.config.mjs
import { defineConfig } from '@opys/dev';
import { java } from '@opys/java';
import { minecraft } from '@opys/minecraft-vanilla';

export default defineConfig({
  output: 'game.opys',
  plugins: [minecraft({ version: '1.21.1' }), java({ version: '21' })],
  manifest: {
    command: '@minecraft.command',
    args: ['@minecraft.jvmArgs', '@minecraft.mainClass', '@minecraft.gameArgs'],
    workdir: '${game_directory}',
  },
});

Параметри ​

ПараметрЩо робить
versionМажорна ('21', її найновіший випуск) або точна збірка ('21.0.12.1+1', '8u312-b07').
vendor'temurin' (типово), 'zulu' або 'graalvm'.
jdktrue везе весь JDK. Без нього це JRE: усе, що потрібно грі, і вчетверо менше.
platformsЯкі платформи її отримують. Типово всі шість.
apiBaseДзеркало API постачальника.
tokenТокен GitHub, для ліміту частоти GraalVM.
systemtrue не везе JDK і вживає власну Java комп'ютера. Не поєднується з жодним іншим параметром.

Яка Java для якого Minecraft:

MinecraftJava
До 1.16.58
Від 1.17 до 1.20.417
Від 1.20.5 до 1.21.x21
26.x25
Cleanroom, lwjgl3ify25

opys не перевіряє цю пару.

Власна Java комп'ютера ​

java({ system: true }) не везе JDK. Гра працює на Java, яку вже встановлено.

js
plugins: [minecraft({ version: '1.21.1' }), java({ system: true })],

Нічого не завантажується. Плагін лише каже, де знаходиться java:

Прапорець custom_javajava_bin
вимкнено (типово)java, знаходиться в PATH.
увімкнено${java_home}/bin/java, зі змінної лаунчера.
jsonc
// у маніфесті
"vars": {
  "java_bin": [
    { "value": "java" },
    { "value": "javaw", "rules": ["allow.os.windows", "disallow.features.java_console"] },
    { "value": "${java_home}/bin/java", "rules": "allow.features.custom_java" },
    { "value": "${java_home}/bin/javaw.exe", "rules": ["allow.os.windows", "allow.features.custom_java", "disallow.features.java_console"] },
    { "value": "${java_home}/bin/java.exe", "rules": ["allow.os.windows", "allow.features.custom_java", "allow.features.java_console"] }
  ]
},
"launch": {
  "envs": { "JAVA_HOME": [{ "value": "${java_home}", "rules": "allow.features.custom_java" }] }
}

Дайте гравцю вибрати свою Java двома налаштуваннями:

js
options: options().feature('custom_java', {
  title: 'Use my own Java',
  options: options().directory('java_home', { title: 'Java folder' }),
}),
  • java_home це тека JDK, та, що тримає bin. На macOS це …/Contents/Home.
  • У нього є лише '@java.bin'. Немає '@java.home', бо збірка не знає, де знаходиться JDK.
  • Жоден інший параметр не поєднується з system. java({ system: true, version: '21' }) відхиляється: opys не може обіцяти, яка Java є на комп'ютері.
  • Версія ніяк не перевіряється. Неправильна Java показує себе тим, що гра не стартує.

Що він додає ​

opys build перетворює плагін на ці частини маніфесту.

Файли · один JRE на платформу ​

Шість архівів. rules означають, що гравець завантажує рівно один.

jsonc
// у маніфесті
{
  "path": "${java_runtime_dir}/OpenJDK21U-jre_x64_linux_hotspot_21.0.12.1_1.tar.gz",
  "source": { "url": "https://github.com/adoptium/temurin21-binaries/releases/download/…_x64_linux_….tar.gz" },
  "size": 52059408,
  "rules": ["allow.os.linux", "allow.arch.x86_64"],
  "integrity": { "sha256": "2413149700df0f7d440500a84a8f764c535f21e5a5e87d38328b64eec2c5b500" },
  "extract": { "matches": "*", "into": "${java_runtime_dir}/jre-21", "strip": ["*/"] }
}

Запуск ​

Дві частини. Команда command завантажувача вже розгортається в bin. home для того, що стартує Java за вас.

Ви пишетеУ маніфесті
'@java.bin'"${java_bin}"
'@java.home'"${java_home}"

Змінні ​

Де знаходиться JDK, для кожної ОС.

jsonc
// у маніфесті
"vars": {
  "java_runtime_dir": "${root}/runtimes",
  "java_home": [
    { "value": "${java_runtime_dir}/jre-21", "rules": "allow.os.linux" },
    { "value": "${java_runtime_dir}/jre-21/Contents/Home", "rules": "allow.os.osx" },
    { "value": "${java_runtime_dir}/jre-21", "rules": "allow.os.windows" }
  ],
  "java_bin": [
    { "value": "${java_home}/bin/java", "rules": "allow.os.linux" },
    { "value": "${java_home}/bin/java", "rules": "allow.os.osx" },
    { "value": "${java_home}/bin/javaw.exe", "rules": ["allow.os.windows", "disallow.features.java_console"] },
    { "value": "${java_home}/bin/java.exe", "rules": ["allow.os.windows", "allow.features.java_console"] }
  ]
}

Середовище ​

Встановлюється для процесу гри.

jsonc
// у маніфесті
"envs": { "JAVA_HOME": "${java_home}" }

Кожен параметр ​

Кожен параметр, у кожному способі використання.

js
// найновіший випуск мажорної версії
java({ version: '21' });

// одна точна збірка: та сама в кожному збиранні збірки
java({ version: '21.0.12.1+1' });
java({ version: '8u312-b07' });

// інший постачальник
java({ version: '21', vendor: 'zulu' });
// GraalVM публікується лише як JDK, тож його так і просять
java({
  version: '21',
  vendor: 'graalvm',
  jdk: true,
  token: process.env.GITHUB_TOKEN,
});

// весь JDK, з компілятором та інструментами
java({ version: '21', jdk: true });

// лише деякі платформи, для збірки, що працює лише на Windows
java({
  version: '21',
  platforms: [
    { os: 'windows', arch: 'x86_64' },
    { os: 'windows', arch: 'aarch64' },
  ],
});

// дзеркало API постачальника
java({ version: '21', apiBase: 'https://mirror.example.com/adoptium/v3' });

// без JDK: власна Java комп'ютера
java({ system: true });
java({ system: true, version: '21' });
// збирання падає: java({ system: true }) не везе JDK, тому `version` немає до чого застосуватися

Документація ​

Частина opys. Також експортується з @opys/minecraft.