Molecules [NeoForge]
Этот клиентский мод добавляет управляемые данными рисунки молекул для химикатов GregTech. Переписан для NeoForge.
- Загрузчики
- NeoForge
- Скачиваний на Modrinth
- 433
- Подписчиков на Modrinth
- 5
- версия
- 1
- Обновлён
- 18 июля 202618 июл.
- Опубликован
- в 2026
Коротко о моде
Ставится только в игру; на сервер ставить не нужно
Molecules
Этот клиентский мод добавляет в подсказки рисунки молекул органических соединений из GregTech CEu, его аддонов и модпаков. Это форк оригинала, переписанный под NeoForge 1.21.1.
Примеры
| Цвет | Полиэтилен | Полибензимидазол | Хлороформ |
|---|---|---|---|
| Нет | ![]() | ![]() | ![]() |
| CPK | ![]() | ![]() | ![]() |
| Материал | ![]() | ![]() | ![]() |
Сплавы
| Режим | HSS-E |
|---|---|
| По массе | ![]() |
| Без рекурсии | ![]() |
| По количеству | ![]() |
Поддержка дополнительного контента
MolDraw из коробки поддерживает не только большинство органических материалов и сплавов из базового GTCEu, но и кучу аддонов и модпаков. На данный момент поддерживаются следующие расширения:
- Monifactory
- Star Technology
- Cosmic Frontiers
- Phoenix Forge Technologies
- TerraFirmaGreg
- GT--
- GregTech Community Additions
- Gregicality Rocketry
Что люди говорят об этом моде
Наверное, самое крутое, что я вообще видел в тултипах.
Моё ежедневное напоминание, что практически вся органическая химия — это бензол с торчащими кусочками.
Единственное, что могу сказать — это топ.
Теперь я могу оценить, насколько сложны полимеры, которые я строю.
Это и так было очень круто, а цвета сделали ещё лучше!
Мне должны разрешить давать звёзды Мишлен аддонам для Gregtech, потому что Madeline готовит как надо.
Невероятно бесполезно и при этом невероятно круто!
ура, аро-репрезентация
Добавление своих молекул
Молекулы хранятся в ресурспаках по пути `assets//molecules/.jsonи соответствуют материалу GT с ID:`.
Молекулы следуют такой схеме:
// Цвет ARGB или RGB в виде hex-строки, который используется всегда, либо объект с тем же значением и указанием, можно ли отключить его в конфиге
type ElementColor = number | string | {
color: number | string;
optional: boolean;
};
// Просто символ, который можно использовать для обычных атомов, либо объект с символом, указанием, невидимый ли он, и цветом
type Element = string | {
symbol: string;
invisible?: boolean; // Новым невидимым элементам, которые должны иметь разные цвета, всё равно понадобится другой символ, отличный от пустой строки; в любом случае он не будет показан
color?: ElementColor;
material?: string; // ID материала GregTech, связанного с этим элементом, используется для настройки цвета по материалу.
};
// Количество атомов по умолчанию равно 1
type CountedElement = string | [string, number];
interface AtomCommon {
type: 'atom';
index: number; // Идентификатор, используемый для ссылок на этот атом
element?: CountedElement; // Основной элемент атома, отсутствует, если атом должен быть невидимым углеродом
above?: CountedElement; // Элемент, отображаемый над основным
right?: CountedElement; // и т.д.
below?: CountedElement;
left?: CountedElement;
spin_group?: number; // Атомы с одинаковой группой вращаются с одинаковой скоростью, если это допустимый индекс в свойстве spin молекулы
}
// Атом может задавать координаты X и Y...
interface AtomXY extends AtomCommon {
x: number;
y: number;
}
// либо координаты U и V, которые являются единичными векторами, наклонёнными на 30 градусов соответственно против часовой стрелки и по часовой стрелке от положительной полуоси X...
interface AtomUV extends AtomCommon {
u: number;
v: number;
}
// либо полные 3D-координаты X, Y и Z.
interface AtomXYZ extends AtomCommon {
x: number;
y: number;
z: number;
}
// Связи внутрь и наружу растут в размере по направлению ко второму атому.
type Line = 'solid' | 'dotted' | 'inward' | 'outward' | 'thick';
interface Bond {
type: 'bond';
a: number; // Первый атом связи
b: number; // Второй атом связи
centered?: boolean // True, если линии можно сместить на половину единицы для центрирования
lines: Line[];
}
// Скобки — это квадратные скобки вокруг определённых атомов, показывающие нижние и/или верхние индексы.
interface Parens {
type: 'parens';
sup?: string; // Текст верхнего индекса
sub?: string; // Текст нижнего индекса
atoms: number[]; // Список атомов, которые нужно окружить
}
// Круг, нарисованный внутри цикла атомов; автоматически центрируется по их центроиду.
interface CircleCommon {
type: 'circle';
atoms: number[];
}
// Круг, выровненный по осям и масштабированный по x и y.
interface CircleXY extends CircleCommon {
x: number;
y: number;
}
// Линейное преобразование, применённое к единичной окружности.
interface CircleMatrix extends CircleCommon {
a00: number;
a01: number;
a10: number;
a11: number;
}
// Бензольное кольцо
interface BenzeneCommon {
type: 'benzene';
start_index: number; // Индекс первого атома в кольце
clockwise?: boolean; // Идёт ли кольцо по часовой стрелке или против (по умолчанию по часовой)
spin_group?: number; // Группа вращения атомов в кольце
}
interface BenzeneXY extends BenzeneCommon {
x0: number; // Координата X первого атома
y0: number; // Координата Y первого атома
x1: number; // Координата X второго атома
y1: number; // Координата Y второго атома
}
interface BenzeneUV extends BenzeneCommon {
u0: number; // Координата U первого атома
v0: number; // Координата V первого атома
u1: number; // Координата U второго атома
v1: number; // Координата V второго атома
}
interface BenzeneXYZ extends BenzeneCommon {
x0: number; // Координата X первого атома
y0: number; // Координата Y первого атома
z0: number; // Координата Z первого атома
x1: number; // Координата X второго атома
y1: number; // Координата Y второго атома
z1: number; // Координата Z второго атома
}
type SpinSpec
= boolean // Включить вращение со скоростью по умолчанию
| number // Включить вращение и задать скорость
| number[]; // Задать скорости для нескольких групп
type MoleculeElement = AtomXY | AtomUV | AtomXYZ | Bond | Parens | CircleXY | CircleMatrix | BenzeneXY | BenzeneUV | BenzeneXYZ;
// JSON-файл молекулы имеет тип Molecule.
interface Molecule {
contents: MoleculeElement[];
spin?: SpinSpec;
}
Позицию атома можно хранить либо как пару координат `x` и `y`, либо как пару координат `u` и `v` — это единичные векторы, наклонённые на 30 градусов соответственно против часовой и по часовой стрелке от положительной горизонтальной полуоси. Чаще всего кодировать позиции через `u` и `v` проще, поскольку скелетные диаграммы органических соединений по возможности следуют гексагональной сетке.
Например, вот кодировка бензола, если бы он не использовал компонент `benzene`:
```json
{
"contents": [
{
"type": "atom",
"index": 0,
"u": 0.0,
"v": 0.0
},
{
"type": "atom",
"index": 1,
"u": -1.0,
"v": 1.0
},
{
"type": "atom",
"index": 2,
"u": -1.0,
"v": 2.0
},
{
"type": "atom",
"index": 3,
"u": 0.0,
"v": 2.0
},
{
"type": "atom",
"index": 4,
"u": 1.0,
"v": 1.0
},
{
"type": "atom",
"index": 5,
"u": 1.0,
"v": 0.0
},
{
"type": "bond",
"a": 0,
"b": 1
},
{
"type": "bond",
"a": 1,
"b": 2,
"lines": ["solid", "solid"]
},
{
"type": "bond",
"a": 2,
"b": 3
},
{
"type": "bond",
"a": 3,
"b": 4,
"lines": ["solid", "solid"]
},
{
"type": "bond",
"a": 4,
"b": 5
},
{
"type": "bond",
"a": 5,
"b": 0,
"lines": ["solid", "solid"]
}
]
}Добавление собственных сплавов
Точно так же сплавы хранятся в ресурспаках по пути `assets//alloys/.jsonи соответствуют материалу GT с ID:`.
В простейшем случае материал достаточно пометить как сплав, и тогда его состав можно вычислить автоматически через систему составов материалов GregTech. В этом случае просто положите следующий файл в нужное место:
{
"derive": true
}Если вы хотите указать компоненты вручную, например чтобы обозначить примеси, отсутствующие в составе материала, сплавы следуют такой простой схеме:
// ID материала и целое количество, по умолчанию равное 1
type Datum = string | [string, number];
// JSON-файл сплава имеет тип Alloy
interface Alloy {
components: Datum[];
}Частые вопросы
Как установить Molecules [NeoForge]?
Установите NeoForge под свою версию Minecraft, скачайте Molecules [NeoForge] под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Molecules [NeoForge]?
У Molecules [NeoForge] есть сборки для Minecraft 1.21.1–1.21.11.
Нужен ли Molecules [NeoForge] на сервере?
Ставится только в игру; на сервер ставить не нужно









