Перейти к содержимому

Molecules [NeoForge]

Этот клиентский мод добавляет управляемые данными рисунки молекул для химикатов GregTech. Переписан для NeoForge.

NeoForge
Загрузчики
NeoForge
Скачиваний на Modrinth
433
Подписчиков на Modrinth
5
версия
1
Обновлён
18 июля 202618 июл.
Опубликован
в 2026
Polybenzimidazole color Material — Polybenzimidazole with settings color Material · свайп

Коротко о моде

Работает на NeoForge
Для Minecraft 1.21.1–1.21.11
Ставится только в игру; на сервер ставить не нужно
Последняя версия — 0.0.1-ALPHA от 18 июля 2026
Нужен GregTech CEu Modern и KubeJS
Лицензия LGPL-3.0-or-later — бесплатно
Где нужен
В игреобязателенНа серверене нужен

Ставится только в игру; на сервер ставить не нужно

Версии игры1.21.1–1.21.11
Описание переведено автоматическиПоказать оригинал (EN)

Molecules

Этот клиентский мод добавляет в подсказки рисунки молекул органических соединений из GregTech CEu, его аддонов и модпаков. Это форк оригинала, переписанный под NeoForge 1.21.1.

Примеры

ЦветПолиэтиленПолибензимидазолХлороформ
Нетpolyethylene tooltip screenshotpolybenzimidazole tooltip screenshotchloroform tooltip screenshot
CPKpolyethylene tooltip screenshotpolybenzimidazole tooltip screenshotchloroform tooltip screenshot
Материалpolyethylene tooltip screenshotpolybenzimidazole tooltip screenshotchloroform tooltip screenshot

Сплавы

РежимHSS-E
По массеhss-e tooltip screenshot
Без рекурсииhss-e tooltip screenshot
По количествуhss-e tooltip screenshot

Поддержка дополнительного контента

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] на сервере?

Ставится только в игру; на сервер ставить не нужно

Лицензия и источник
GNU Lesser General Public License v3.0 or laterможно использовать и распространять; изменённые версии — под той же лицензией и с исходным кодом
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее