From c2eb471cbca218546aff4e9e6994cd88c2fe5f8a Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 13:32:32 +0300 Subject: [PATCH 01/40] 1fix --- src/main/resources/assets/hbm/manual/pile/pile.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/pile/pile.json b/src/main/resources/assets/hbm/manual/pile/pile.json index 79fb21146..c29b020dc 100644 --- a/src/main/resources/assets/hbm/manual/pile/pile.json +++ b/src/main/resources/assets/hbm/manual/pile/pile.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "The Chicago Pile is a low-tech low-power reactor used for breeding nuclear material, mainly turning [[uranium|Uranium]] into [[plutonium-239|Plutonium-239]]. Due to its simplicity, operating it either requires manual intervention or some form of external operation with [[Redstone over Radio]].

The pile is constructed out of a box of Chicago Pile graphite bricks at least 5x5x5 blocks in size, and at most 15x15x15 blocks. The box does not need to be a perfect cube, so shapes like 5x7x9 are valid, so long as the box is filled. Using a hand drill, the pile is assembled, with the drilled block acting as the core.

To prepare the Chicago Pile for use, channels need to be drilled, again with a hand drill. The function of the channel depends on the orientation relative to the core. Using the hand drill again on the input side of an existing channel will close the channel again. Channels cannot intersect one another.

Fuel channels are channels that follow the core's orientation, i.e. either the input or output side is on the same face as the core's panel. Fuel channels can be loaded with Chicago Pile fuel rods using a [[fuel loader|Chicago Pile Fuel Loader]]. The amount of fuel that fits into any given channel depends on its length, with one block of channel being able to hold one fuel rod.

Ventilation channels are channels which are perpendicular to the core's orientation and therefore also to the fuel channels. Ventilation channels cool down fuel channels which touch (but not intersect) them if compressed air is supplied at a pressure of 1 PU via a [[vent|Chicago Pile Vent]]. Passive cooling in the Chicago Pile is quite low, so while technically optional, vents are basically mandatory for every Pile in practice.

Channels drilled from the top are for [[control rods|Chicago Pile Control Rod]]. Control rods are used to reduce the interactiion between fuel channels in larger Pile setups, although smaller setups are usually fine without control rods. Still, throttling the reactor can be useful when cycling fuel, since the window for extracting pure plutonium-239 is quite small.
<>br>If the Pile is disassembled, channels can be drilled again without having to remove all the attachments like fuel loaders and vents, simply shift-click the attachment with the hand drill and a channel will be drilled into the Pile behind it.

See also:
* [[Chicago Pile Operation]]", - "ru_RU": "Чикагская поленница — это низкотехнологичный реактор малой мощности, используемый для наработки ядерных материалов, в основном для превращения [[урана|Uranium]] в [[плутоний-239|Plutonium-239]]. Из-за своей простоты работа с ним требует либо ручного вмешательства, либо некоторой формы внешнего управления с помощью [[редстоун-по-радио|Redstone over Radio]].

Реактор собирается из блока графитовых кирпичей чикагской поленницы размером минимум 5x5x5 и максимум 15x15x15 блоков. Конструкция не обязательно должна быть идеальным кубом, поэтому формы вроде 5x7x9 вполне допустимы, главное — чтобы блок был полностью заполнен. Сборка реактора выполняется с помощью ручной дрели, при этом пробуренный блок становится ядром.

Чтобы подготовить чикагскую поленницу к работе, необходимо пробурить каналы, опять же с помощью ручной дрели. Функция канала зависит от его ориентации относительно ядра. Повторное использование ручной дрели на входной стороне существующего канала снова закроет его. Каналы не могут пересекаться друг с другом.

Топливные каналы — это каналы, которые следуют ориентации ядра, то есть их входная или выходная сторона находится на той же грани, что и панель ядра. В топливные каналы можно загружать топливные стержни чикагской поленницы с помощью [[топливного загрузчика|Chicago Pile Fuel Loader]]. Количество топлива, которое помещается в любой канал, зависит от его длины: один блок канала вмещает один топливный стержень.

Вентиляционные каналы — это каналы, расположенные перпендикулярно ориентации ядра, а следовательно, и топливным каналам. Вентиляционные каналы охлаждают касающиеся их (но не пересекающиеся) топливные каналы, если подаётся сжатый воздух под давлением 1 PU через [[вентель|Chicago Pile Vent]]. Пассивное охлаждение у чикагской поленницы довольно слабое, поэтому, хотя вентиляторы технически необязательны, на практике они фактически необходимы для любого реактора.

Каналы, просверленные сверху, предназначены для [[регулирующих стержней|Chicago Pile Control Rod]]. Регулирующие стержни используются для уменьшения взаимодействия между топливными каналами в крупных реакторах, хотя небольшие сборки обычно обходятся и без них. Тем не менее, дросселирование реактора может быть полезным при замене топлива, так как время для извлечения чистого плутония-239 достаточно мало.

Если реактор разобран, каналы можно пробурить заново, не снимая все навесные устройства вроде топливозагрузчиков и вентиляторов — достаточно зажать Shift и кликнуть по устройству ручной дрелью, чтобы за ним в реакторе пробурился канал.

См. также:
* [[Операции Чикагской поленницы|Chicago Pile Operation]]" + "ru_RU": "Чикагская поленница — это низкотехнологичный реактор малой мощности, используемый для наработки ядерных материалов, в основном для превращения [[урана|Uranium]] в [[плутоний-239|Plutonium-239]]. Из-за своей простоты работа с ним требует либо ручного вмешательства, либо некоторой формы внешнего управления с помощью [[редстоун-по-радио|Redstone over Radio]].

Реактор собирается из блока графитовых кирпичей чикагской поленницы размером минимум 5x5x5 и максимум 15x15x15 блоков. Конструкция не обязательно должна быть идеальным кубом, поэтому формы вроде 5x7x9 вполне допустимы, главное — чтобы конструкция была полностью заполнена. Сборка реактора выполняется с помощью ручной дрели, при этом пробуренный блок становится ядром.

Чтобы подготовить Чикагскую поленницу к работе, необходимо пробурить каналы, опять же с помощью ручной дрели. Функция канала зависит от его ориентации относительно ядра. Повторное использование ручной дрели на входной стороне существующего канала снова закроет его. Каналы не могут пересекаться друг с другом.

Топливные каналы — это каналы, которые следуют ориентации ядра, то есть их входная или выходная сторона находится на той же грани, что и панель ядра. В топливные каналы можно загружать топливные стержни Чикагской поленницы с помощью [[топливного загрузчика|Chicago Pile Fuel Loader]]. Количество топлива, которое помещается в любой канал, зависит от его длины: один блок канала вмещает один топливный стержень.

Вентиляционные каналы — это каналы, расположенные перпендикулярно ориентации ядра, а следовательно, и топливным каналам. Вентиляционные каналы охлаждают касающиеся их (но не пересекающиеся) топливные каналы, если подаётся сжатый воздух под давлением 1 PU через [[вентиль|Chicago Pile Vent]]. Пассивное охлаждение у Чикагской поленницы довольно слабое, поэтому, хотя вентиляторы технически необязательны, на практике они фактически необходимы для любого реактора.

Каналы, просверленные сверху, предназначены для [[регулирующих стержней|Chicago Pile Control Rod]]. Регулирующие стержни используются для уменьшения взаимодействия между топливными каналами в крупных реакторах, хотя небольшие сборки обычно обходятся и без них. Тем не менее, дросселирование реактора может быть полезным при замене топлива, так как время для извлечения чистого плутония-239 достаточно мало.

Если реактор разобран, каналы можно пробурить заново, не снимая все навесные устройства вроде топливных загрузчиков и вентилей — достаточно зажать Shift и кликнуть по устройству ручной дрелью, чтобы за ним в реакторе пробурился канал.

См. также:
* [[Управление Чикагской поленницы|Chicago Pile Operation]]" } } From a7ca1c3d19b13b9467ce0e74f5d968c5ee4e816b Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 13:33:56 +0300 Subject: [PATCH 02/40] 2fix --- src/main/resources/assets/hbm/manual/pile/pilecontrol.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/pile/pilecontrol.json b/src/main/resources/assets/hbm/manual/pile/pilecontrol.json index 2fb65ae3c..6238c9a83 100644 --- a/src/main/resources/assets/hbm/manual/pile/pilecontrol.json +++ b/src/main/resources/assets/hbm/manual/pile/pilecontrol.json @@ -8,7 +8,7 @@ }, "content": { "en_US": "Control rods can be placed on top of the vertically drilled channels of the [[Chicago Pile]]. Control rods, when inserted, will reduce the reactivity between fuel channels. The control rods can be controlled with a redstone signal, causing it to fully withdraw when a signal is supplied, or via [[RoR controller|Redstone-over-Radio Controller]], which allows more precise settings.

See also:
* [[Chicago Pile Fuel Loader]]
* [[Chicago Pile Vent]]", - "ru_RU": "Регулирующие стержни устанавливаются поверх вертикально просверленных каналов [[Чикагской поленницы|Chicago Pile]]. При погружении регулирующих стержней снижается реактивность между топливными каналами. Стержнями можно управлять с помощью редстоун-сигнала (при подаче сигнала стержень полностью извлекается) или через [[РпР контроллер|Redstone-over-Radio Controller]], что позволяет настраивать их более точно.

См. также:
* [[Загрузчик топлива Чикагской поленницы|Chicago Pile Fuel Loader]]
* [[Вентель Чикагской поленницы|Chicago Pile Vent]]" + "ru_RU": "Регулирующие стержни устанавливаются поверх вертикально просверленных каналов [[Чикагской поленницы|Chicago Pile]]. При погружении регулирующих стержней снижается реактивность между топливными каналами. Стержнями можно управлять с помощью редстоун-сигнала (при подаче сигнала стержень полностью извлекается) или через [[РпР контроллер|Redstone-over-Radio Controller]], что позволяет настраивать их более точно.

См. также:
* [[Загрузчик топлива Чикагской поленницы|Chicago Pile Fuel Loader]]
* [[Вентиль Чикагской поленницы|Chicago Pile Vent]]" } } From 327bca4981260c6926ed2df43396b728f93b0c60 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 13:35:54 +0300 Subject: [PATCH 03/40] Fix3 --- src/main/resources/assets/hbm/manual/pile/pileloader.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/pile/pileloader.json b/src/main/resources/assets/hbm/manual/pile/pileloader.json index f39dc7052..e8d69ee28 100644 --- a/src/main/resources/assets/hbm/manual/pile/pileloader.json +++ b/src/main/resources/assets/hbm/manual/pile/pileloader.json @@ -8,7 +8,7 @@ }, "content": { "en_US": "The fuel loader is required to load [[Chicago Pile]] fuel rods into the Pile's fuel channels. Right-clicking with a fuel rod will insert that rod into the loader, and right-clicking again will load it into the Pile manually. Fuel can also be supplied using hoppers or conveyors, and the loading action can be triggered by supplying a redstone signal to the loader's back side (where the light grey circle is).

Additionally, the loader can relay information about the connected channel to the [[RoR reader|Redstone-over-Radio Reader]], like the type (metadata) and depletion of the backmost loaded fuel rod or the channel's current temperature.

See also:
* [[Chicago Pile Vent]]
* [[Chicago Pile Control Rod]]", - "ru_RU": "Загрузчик топлива необходим для загрузки топливных стержней [[Чикагской поленницы|Chicago Pile]] в топливные каналы реактора. Клик правой кнопкой мыши с топливным стержнем в руке вставит его в загрузчик, а повторный клик ПКМ загрузит его в реактор вручную. Топливо также можно подавать с помощью воронок или конвейеров, а сам процесс загрузки можно активировать подачей редстоун-сигнала на заднюю сторону загрузчика (туда, где находится светло-серый круг).

Кроме того, загрузчик может передавать информацию о подключенном канале на [[РпР считыватель|Redstone-over-Radio Reader]] — например, тип (метаданные) и степень истощения самого крайнего загруженного стержня, а также текущую температуру канала.

См. также:
* [[Вентель Чикагской поленницы|Chicago Pile Vent]]
* [[Регулирующие стержни Чикагской поленницы|Chicago Pile Control Rod]]" + "ru_RU": "Загрузчик топлива необходим для загрузки топливных стержней [[Чикагской поленницы|Chicago Pile]] в топливные каналы реактора. Клик правой кнопкой мыши с топливным стержнем в руке вставит его в загрузчик, а повторный клик ПКМ загрузит его в реактор вручную. Топливо также можно подавать с помощью воронок или конвейеров, а сам процесс загрузки можно активировать подачей редстоун-сигнала на заднюю сторону загрузчика (туда, где находится светло-серый круг).

Кроме того, загрузчик может передавать информацию о подключенном канале на [[РпР считыватель|Redstone-over-Radio Reader]] — например, тип (метаданные) и степень истощения самого крайнего загруженного стержня, а также текущую температуру канала.

См. также:
* [[Вентиль Чикагской поленницы|Chicago Pile Vent]]
* [[Регулирующие стержни Чикагской поленницы|Chicago Pile Control Rod]]" } } From 194df42bcb1904b82204817fa23da5d28591c1c2 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 13:45:34 +0300 Subject: [PATCH 04/40] Jack, the sun is shining just as hot as Aunt Susan in bed. --- src/main/resources/assets/hbm/manual/pile/pile.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/pile/pile.json b/src/main/resources/assets/hbm/manual/pile/pile.json index c29b020dc..686597f9d 100644 --- a/src/main/resources/assets/hbm/manual/pile/pile.json +++ b/src/main/resources/assets/hbm/manual/pile/pile.json @@ -7,7 +7,7 @@ "ru_RU": "Чикагская поленница" }, "content": { - "en_US": "The Chicago Pile is a low-tech low-power reactor used for breeding nuclear material, mainly turning [[uranium|Uranium]] into [[plutonium-239|Plutonium-239]]. Due to its simplicity, operating it either requires manual intervention or some form of external operation with [[Redstone over Radio]].

The pile is constructed out of a box of Chicago Pile graphite bricks at least 5x5x5 blocks in size, and at most 15x15x15 blocks. The box does not need to be a perfect cube, so shapes like 5x7x9 are valid, so long as the box is filled. Using a hand drill, the pile is assembled, with the drilled block acting as the core.

To prepare the Chicago Pile for use, channels need to be drilled, again with a hand drill. The function of the channel depends on the orientation relative to the core. Using the hand drill again on the input side of an existing channel will close the channel again. Channels cannot intersect one another.

Fuel channels are channels that follow the core's orientation, i.e. either the input or output side is on the same face as the core's panel. Fuel channels can be loaded with Chicago Pile fuel rods using a [[fuel loader|Chicago Pile Fuel Loader]]. The amount of fuel that fits into any given channel depends on its length, with one block of channel being able to hold one fuel rod.

Ventilation channels are channels which are perpendicular to the core's orientation and therefore also to the fuel channels. Ventilation channels cool down fuel channels which touch (but not intersect) them if compressed air is supplied at a pressure of 1 PU via a [[vent|Chicago Pile Vent]]. Passive cooling in the Chicago Pile is quite low, so while technically optional, vents are basically mandatory for every Pile in practice.

Channels drilled from the top are for [[control rods|Chicago Pile Control Rod]]. Control rods are used to reduce the interactiion between fuel channels in larger Pile setups, although smaller setups are usually fine without control rods. Still, throttling the reactor can be useful when cycling fuel, since the window for extracting pure plutonium-239 is quite small.
<>br>If the Pile is disassembled, channels can be drilled again without having to remove all the attachments like fuel loaders and vents, simply shift-click the attachment with the hand drill and a channel will be drilled into the Pile behind it.

See also:
* [[Chicago Pile Operation]]", - "ru_RU": "Чикагская поленница — это низкотехнологичный реактор малой мощности, используемый для наработки ядерных материалов, в основном для превращения [[урана|Uranium]] в [[плутоний-239|Plutonium-239]]. Из-за своей простоты работа с ним требует либо ручного вмешательства, либо некоторой формы внешнего управления с помощью [[редстоун-по-радио|Redstone over Radio]].

Реактор собирается из блока графитовых кирпичей чикагской поленницы размером минимум 5x5x5 и максимум 15x15x15 блоков. Конструкция не обязательно должна быть идеальным кубом, поэтому формы вроде 5x7x9 вполне допустимы, главное — чтобы конструкция была полностью заполнена. Сборка реактора выполняется с помощью ручной дрели, при этом пробуренный блок становится ядром.

Чтобы подготовить Чикагскую поленницу к работе, необходимо пробурить каналы, опять же с помощью ручной дрели. Функция канала зависит от его ориентации относительно ядра. Повторное использование ручной дрели на входной стороне существующего канала снова закроет его. Каналы не могут пересекаться друг с другом.

Топливные каналы — это каналы, которые следуют ориентации ядра, то есть их входная или выходная сторона находится на той же грани, что и панель ядра. В топливные каналы можно загружать топливные стержни Чикагской поленницы с помощью [[топливного загрузчика|Chicago Pile Fuel Loader]]. Количество топлива, которое помещается в любой канал, зависит от его длины: один блок канала вмещает один топливный стержень.

Вентиляционные каналы — это каналы, расположенные перпендикулярно ориентации ядра, а следовательно, и топливным каналам. Вентиляционные каналы охлаждают касающиеся их (но не пересекающиеся) топливные каналы, если подаётся сжатый воздух под давлением 1 PU через [[вентиль|Chicago Pile Vent]]. Пассивное охлаждение у Чикагской поленницы довольно слабое, поэтому, хотя вентиляторы технически необязательны, на практике они фактически необходимы для любого реактора.

Каналы, просверленные сверху, предназначены для [[регулирующих стержней|Chicago Pile Control Rod]]. Регулирующие стержни используются для уменьшения взаимодействия между топливными каналами в крупных реакторах, хотя небольшие сборки обычно обходятся и без них. Тем не менее, дросселирование реактора может быть полезным при замене топлива, так как время для извлечения чистого плутония-239 достаточно мало.

Если реактор разобран, каналы можно пробурить заново, не снимая все навесные устройства вроде топливных загрузчиков и вентилей — достаточно зажать Shift и кликнуть по устройству ручной дрелью, чтобы за ним в реакторе пробурился канал.

См. также:
* [[Управление Чикагской поленницы|Chicago Pile Operation]]" + "en_US": "The Chicago Pile is a low-tech low-power reactor used for breeding nuclear material, mainly turning [[uranium|Uranium]] into [[plutonium-239|Plutonium-239]]. Due to its simplicity, operating it either requires manual intervention or some form of external operation with [[Redstone over Radio]].

The pile is constructed out of a box of Chicago Pile graphite bricks at least 5x5x5 blocks in size, and at most 15x15x15 blocks. The box does not need to be a perfect cube, so shapes like 5x7x9 are valid, so long as the box is filled. Using a hand drill, the pile is assembled, with the drilled block acting as the core.

To prepare the Chicago Pile for use, channels need to be drilled, again with a hand drill. The function of the channel depends on the orientation relative to the core. Using the hand drill again on the input side of an existing channel will close the channel again. Channels cannot intersect one another.

Fuel channels are channels that follow the core's orientation, i.e. either the input or output side is on the same face as the core's panel. Fuel channels can be loaded with Chicago Pile fuel rods using a [[fuel loader|Chicago Pile Fuel Loader]]. The amount of fuel that fits into any given channel depends on its length, with one block of channel being able to hold one fuel rod.

Ventilation channels are channels which are perpendicular to the core's orientation and therefore also to the fuel channels. Ventilation channels cool down fuel channels which touch (but not intersect) them if compressed air is supplied at a pressure of 1 PU via a [[vent|Chicago Pile Vent]]. Passive cooling in the Chicago Pile is quite low, so while technically optional, vents are basically mandatory for every Pile in practice.

Channels drilled from the top are for [[control rods|Chicago Pile Control Rod]]. Control rods are used to reduce the interactiion between fuel channels in larger Pile setups, although smaller setups are usually fine without control rods. Still, throttling the reactor can be useful when cycling fuel, Тем не менее, регулирование потока в реакторе может быть полезно при циклической смене топлива. since the window for extracting pure plutonium-239 is quite small.
<>br>If the Pile is disassembled, channels can be drilled again without having to remove all the attachments like fuel loaders and vents, simply shift-click the attachment with the hand drill and a channel will be drilled into the Pile behind it.

See also:
* [[Chicago Pile Operation]]", + "ru_RU": "Чикагская поленница — это низкотехнологичный реактор малой мощности, используемый для наработки ядерных материалов, в основном для превращения [[урана|Uranium]] в [[плутоний-239|Plutonium-239]]. Из-за своей простоты работа с ним требует либо ручного вмешательства, либо некоторой формы внешнего управления с помощью [[редстоун-по-радио|Redstone over Radio]].

Реактор собирается из блока графитовых кирпичей чикагской поленницы размером минимум 5x5x5 и максимум 15x15x15 блоков. Конструкция не обязательно должна быть идеальным кубом, поэтому формы вроде 5x7x9 вполне допустимы, главное — чтобы конструкция была полностью заполнена. Сборка реактора выполняется с помощью ручной дрели, при этом пробуренный блок становится ядром.

Чтобы подготовить Чикагскую поленницу к работе, необходимо пробурить каналы, опять же с помощью ручной дрели. Функция канала зависит от его ориентации относительно ядра. Повторное использование ручной дрели на входной стороне существующего канала снова закроет его. Каналы не могут пересекаться друг с другом.

Топливные каналы — это каналы, которые следуют ориентации ядра, то есть их входная или выходная сторона находится на той же грани, что и панель ядра. В топливные каналы можно загружать топливные стержни Чикагской поленницы с помощью [[топливного загрузчика|Chicago Pile Fuel Loader]]. Количество топлива, которое помещается в любой канал, зависит от его длины: один блок канала вмещает один топливный стержень.

Вентиляционные каналы — это каналы, расположенные перпендикулярно ориентации ядра, а следовательно, и топливным каналам. Вентиляционные каналы охлаждают касающиеся их (но не пересекающиеся) топливные каналы, если подаётся сжатый воздух под давлением 1 PU через [[вентиль|Chicago Pile Vent]]. Пассивное охлаждение у Чикагской поленницы довольно слабое, поэтому, хотя вентиляторы технически необязательны, на практике они фактически необходимы для любого реактора.

Каналы, просверленные сверху, предназначены для [[регулирующих стержней|Chicago Pile Control Rod]]. Регулирующие стержни используются для уменьшения взаимодействия между топливными каналами в крупных реакторах, хотя небольшие сборки обычно обходятся и без них. Тем не менее, регулирование потока в реакторе может быть полезно при циклической смене топлива, так как время для извлечения чистого плутония-239 достаточно мало.

Если реактор разобран, каналы можно пробурить заново, не снимая все навесные устройства вроде топливных загрузчиков и вентилей — достаточно зажать Shift и кликнуть по устройству ручной дрелью, чтобы за ним в реакторе пробурился канал.

См. также:
* [[Управление Чикагской поленницы|Chicago Pile Operation]]" } } From 61f1b29f296252720f9a0a9aa9f76c9f3fcf08d8 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 14:44:28 +0300 Subject: [PATCH 05/40] Fix4 --- src/main/resources/assets/hbm/manual/pile/pileop.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/pile/pileop.json b/src/main/resources/assets/hbm/manual/pile/pileop.json index a23e5d6df..a37794d3c 100644 --- a/src/main/resources/assets/hbm/manual/pile/pileop.json +++ b/src/main/resources/assets/hbm/manual/pile/pileop.json @@ -4,11 +4,11 @@ "trigger": [], "title": { "en_US": "Chicago Pile Operation", - "ru_RU": "Операции Чикагской поленницы" + "ru_RU": "Управление Чикагской поленницы" }, "content": { "en_US": "The [[Chicago Pile]] requires at least one fuel channel with some sort of neutron source, being radium-226-beryllium or polonium-210-beryllium rods. It's safest and easiest to simply have one fuel channel dedicated to the neutron sources, although mixing neutron sources in with the regular fuel is also an option. [[Ventilation|Chicago Pile Vent]] is also required before actually using fuel, the amount of compressed air used over time is static no matter how hot the reactor is, so doing a dry-run to see if the [[compressor|Compressor]] setup is sufficient is recommended.

Once ventilation and neutron sources are in place, fuel can be added, usually in the form of natural uranium which is bred into plutonium-239. The [[fuel loader|Chicago Pile Fuel Loader]] will only load one rod at a time, simply load as many rods as the channel can hold. Any extra rod loaded will cause the last rod in the channel to be pushed out the other end, where it can be collected with a hopper.

The supplied fuel will be bred as long as its in the reactor. Pu-239 can also be bred into RGP, which can be further bred into nuclear waste. Therefore, leaving fuel in the reactor for too long is undesirable. For this, the fuel loader can be read with an [[RoR reader|Redstone-over-Radio Reader]], which will report the fuel's lifetime and current type in the form of the numeric metadata of the item. For example, Plutonium-239 rods have a meta of 4. Using an [[RoR logic receiver|Redstone-over-Radio Logic Receiver]], this meta can be detected, causing a redstone signal to be sent to the fuel loader, pushing that fuel rod out.

It is not only desirable to eject the fuel in time due to the purity, but also because nuclear waste has a high heat output, which might destroy Piles not prepared for it. If no new fuel is available and the existing loaded fuel is intended to be ejected, rods made from zirconium are ideal, since they are cheap, inert, and transparent to neutrons, not adding any heat while not interfering with the Pile's reaction either.

In an emergency, should the Pile overheat, it will catch fire, explode, and eject many flaming graphite bricks which also explode into fire, setting the surroundings ablaze. It is recommended to keep the Pile in a small room, away from flammable material, and to keep a fire extinguisher nearby.

For people who want to make the most out of their fuel, using [[RoR controllers|Redstone-over-Radio Controller]] to adjust the control rod settings automatically may be desirable. Especially in larger setups, control rods are important to prevent the Pile from quickly overheating, and having an adaptive system controlled either by RoR logic receivers or an [[AUTOCAL]] unit can allow the Pile to run reasonably hot without exploding.", - "ru_RU": "Для работы [[чикагской поленницы|Chicago Pile]] требуется как минимум один топливный канал с каким-либо источником нейтронов — радий-226-бериллиевым или полоний-210-бериллиевым стержнем. Безопаснее и проще всего выделать под источники нейтронов один отдельный топливный канал, хотя смешивание источников нейтронов с обычным топливом также допустимо. Охлаждение через [[вентель|Chicago Pile Vent]] также необходимо еще до начала использования топлива. Объем потребляемого сжатого воздуха со временем остается статичным независимо от температуры реактора, поэтому рекомендуется провести «сухой прогон», чтобы проверить, достаточно ли мощности у [[компрессора|Compressor]].

Как только вентиляция и источники нейтронов установлены, можно загружать топливо — обычно в виде природного урана, который перерабатывается в плутоний-239. [[Топливный загручик|Chicago Pile Fuel Loader]] за один раз загружает только один стержень: просто заправьте столько стержней, сколько вмещает канал. Любой дополнительный загруженный стержень приведет к тому, что последний стержень в канале вытолкнется с противоположной стороны, где его можно подобрать воронкой.

Поданное топливо будет обогащаться до тех пор, пока находится в реакторе. Плутоний-239 также может превращаться в реакторный плутоний, который при дальнейшем облучении превращается в ядерные отходы. Поэтому оставлять топливо в реакторе слишком долго нежелательно. Чтобы отслеживать этот процесс, с загрузчика топлива можно считывать данные с помощью [[РпР считывателя|Redstone-over-Radio Reader]], который сообщает о сроке службы топлива и его текущем типе в виде числовых метаданных предмета. Например, стержни с плутонием-239 имеют мета-значение 4. Используя [[РпР логический приемник|Redstone-over-Radio Logic Receiver]], это мета-значение можно отследить и отправить редстоун-сигналом на загрузчик топлива, чтобы тот вытолкнул готовый топливный стержень.

Своевременное извлечение топлива важно не только из-за его чистоты, но и потому, что ядерные отходы выделяют очень много тепла, что может разрушить реакторы, не подготовленные к таким нагрузкам. Если нового топлива нет, а текущее необходимо извлечь, идеально подойдут стержни из циркония: они дешевые, инертные и прозрачные для нейтронов, поэтому не выделяют тепла и не мешают реакции внутри реактора.

В случае аварийного перегрева реактор загорится, взорвется и выбросит множество горящих графитовых кирпичей, которые также взрываются с огнем, поджигая всё вокруг. Рекомендуется размещать чикагскую поленницу в небольшом помещении вдали от горючих материалов и держать поблизости огнетушитель.

Тем, кто хочет извлечь максимум из своего топлива, может пригодиться [[РпР контроллер|Redstone-over-Radio Controller]] для автоматической регулировки стержней. Регулирующие стержни особенно важны в крупных сборках, так как они предотвращают быстрый перегрев реактора. Адаптивная система под управлением логических приемников РпР или блока [[AUTOCAL]] позволит реактору работать на достаточно высоких температурах без риска взрыва." + "ru_RU": "Для работы [[Чикагской поленницы|Chicago Pile]] требуется как минимум один топливный канал с каким-либо источником нейтронов — радий-226-бериллиевым или полоний-210-бериллиевым стержнем. Безопаснее и проще всего выделать под источники нейтронов один отдельный топливный канал, хотя смешивание источников нейтронов с обычным топливом также допустимо. Охлаждение через [[вентиль|Chicago Pile Vent]] также необходимо еще до начала использования топлива. Объем потребляемого сжатого воздуха со временем остается статичным независимо от температуры реактора, поэтому рекомендуется провести «сухой прогон», чтобы проверить, достаточно ли мощности у [[компрессора|Compressor]].

Как только вентиляция и источники нейтронов установлены, можно загружать топливо — обычно в виде природного урана, который перерабатывается в плутоний-239. [[Топливный загручик|Chicago Pile Fuel Loader]] за один раз загружает только один стержень: просто заправьте столько стержней, сколько вмещает канал. Любой дополнительный загруженный стержень приведет к тому, что последний стержень в канале вытолкнется с противоположной стороны, где его можно подобрать воронкой.

Поданное топливо будет обогащаться до тех пор, пока находится в реакторе. Плутоний-239 также может превращаться в реакторный плутоний, который при дальнейшем облучении превращается в ядерные отходы. Поэтому оставлять топливо в реакторе слишком долго нежелательно. Чтобы отслеживать этот процесс, с загрузчика топлива можно считывать данные с помощью [[РпР считывателя|Redstone-over-Radio Reader]], который сообщает о сроке службы топлива и его текущем типе в виде числовых метаданных предмета. Например, стержни с плутонием-239 имеют мета-значение 4. Используя [[РпР логический приемник|Redstone-over-Radio Logic Receiver]], это мета-значение можно отследить и отправить редстоун-сигналом на загрузчик топлива, чтобы тот вытолкнул готовый топливный стержень.

Своевременное извлечение топлива важно не только из-за его чистоты, но и потому, что ядерные отходы выделяют очень много тепла, что может разрушить реакторы, не подготовленные к таким нагрузкам. Если нового топлива нет, а текущее необходимо извлечь, идеально подойдут стержни из циркония: они дешевые, инертные и прозрачные для нейтронов, поэтому не выделяют тепла и не мешают реакции внутри реактора.

В случае аварийного перегрева реактор загорится, взорвется и выбросит множество горящих графитовых кирпичей, которые также взрываются с огнем, поджигая всё вокруг. Рекомендуется размещать Чикагскую поленницу в небольшом помещении вдали от горючих материалов и держать поблизости огнетушитель.

Тем, кто хочет извлечь максимум из своего топлива, может пригодиться [[РпР контроллер|Redstone-over-Radio Controller]] для автоматической регулировки стержней. Регулирующие стержни особенно важны в крупных сборках, так как они предотвращают быстрый перегрев реактора. Адаптивная система под управлением логических приемников РпР или блока [[AUTOCAL]] позволит реактору работать на достаточно высоких температурах без риска взрыва." } } From 7a54de389f2c809edf3587fb0808c5694acbc468 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 19:54:24 +0300 Subject: [PATCH 06/40] fix again --- src/main/resources/assets/hbm/lang/ru_RU.lang | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 910cbb349..416e0b4e2 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -4191,13 +4191,13 @@ item.sat_designator.name=Спутниковый лазерный целеука item.sat_gerald.name=Геральд Строительный Андроид item.sat_interface.name=Интерфейс спутникового управления item.satellite.death_ray.name=Орбитальный луч Смерти -item.satellite.miner_astro.name=Астероидный шахтёрный корабль -item.satellite.miner_lunar.name=Лунный шахтёрный корабль +item.satellite.miner_astro.name=Астероидный шахтёрский корабль +item.satellite.miner_lunar.name=Лунный шахтёрский корабль item.satellite.precision_laser.name=Орбитальный прецизионный лазер -item.satellite.radar.name=Спутник Радиолокационный -item.satellite.relay.name=Спутник Ретрансляционный +item.satellite.radar.name=Радиолокационный спутник +item.satellite.relay.name=Ретрансляционный спутник item.satellite.scanner.name=Спутник глубинного сканирования -item.satellite.spy.name=Спутник шпион +item.satellite.spy.name=Спутник-шпион item.satellite.xenium_resonator.name=Спутник с Зен-Резонатором item.sawblade.name=Лезвие пилорамы @@ -6383,4 +6383,4 @@ desc.gui.upgrade.overdrive= * §7Перегруз§r: Стакается до 3- desc.gui.upgrade.power= * §1Энергосбережение§r: Стакается до 3-х уровней desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х уровней -// Last updated 25.07.2026 by RayzerHan // \ No newline at end of file +// Last updated 25.07.2026 by RayzerHan // From 61f5cf63e9b6b8ff75f4ba3d78fd64249eb2f3fa Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 19:58:31 +0300 Subject: [PATCH 07/40] Ah --- src/main/resources/assets/hbm/manual/pile/pilevent.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/pile/pilevent.json b/src/main/resources/assets/hbm/manual/pile/pilevent.json index 746a005e1..eeeec43f1 100644 --- a/src/main/resources/assets/hbm/manual/pile/pilevent.json +++ b/src/main/resources/assets/hbm/manual/pile/pilevent.json @@ -4,11 +4,11 @@ "trigger": [["hbm:tile.pile_device", 1, 1]], "title": { "en_US": "Chicago Pile Vent", - "ru_RU": "Вентель Чикагской поленницы" + "ru_RU": "Вентиль Чикагской поленницы" }, "content": { "en_US": "The vent is needed to insert compressed air at 1 PU into the [[Chicago Pile's|Chicago Pile]] ventilation channels. Due to the pressure requirement, each Pile therefore needs at least one [[compressor|Compressor]]. Hot air will harmlessly exit the Pile at the output side of the ventilation channel.

The vent's cooling effect only applies to fuel channels that touch the ventilation channel, or rather, fuel channels exactly one block above and below that ventilation channel. Without sufficient cooling, the channel will surpass 800°C, causing the highly-flammable graphite bricks to ignite, forcefully disassembling the Pile.

See also:
* [[Chicago Pile Fuel Loader]]
* [[Chicago Pile Control Rod]]", - "ru_RU": "Вентель необходим для подачи сжатого воздуха под давлением 1 PU в вентиляционные каналы [[Чикагской поленницы|Chicago Pile]]. Из-за требования к давлению каждому реактору требуется как минимум один [[компрессор|Compressor]]. Горячий воздух безвредно выходит из реактора с выходной стороны вентиляционного канала.

Охлаждающий эффект вентилятора распространяется только на топливные каналы, которые касаются вентиляционного канала, а точнее — на топливные каналы ровно на один блок выше и ниже этого вентиляционного канала. Без достаточного охлаждения канал нагреется свыше 800°C, что приведет к воспламенению легковоспламеняющихся графитовых кирпичей и силовому разрушению реактора.

См. также:
* [[Топливный загрузчик Чикагской поленницы|Chicago Pile Fuel Loader]]
* [[Регулирующие стержни Чикагской поленницы|Chicago Pile Control Rod]]" + "ru_RU": "Вентиль необходим для подачи сжатого воздуха под давлением 1 PU в вентиляционные каналы [[Чикагской поленницы|Chicago Pile]]. Поскольку давление обязательно, каждому реактору требуется как минимум один [[компрессор|Compressor]]. Горячий воздух безвредно выходит из реактора с выходной стороны вентиляционного канала.

Охлаждающий эффект вентиля распространяется только на топливные каналы, которые касаются вентиляционного канала, а точнее — на топливные каналы ровно на один блок выше и ниже этого вентиляционного канала. Без достаточного охлаждения канал нагреется свыше 800°C, что приведет к возгоранию легковоспламеняющихся графитовых кирпичей и силовому разрушению реактора.

См. также:
* [[Топливный загрузчик Чикагской поленницы|Chicago Pile Fuel Loader]]
* [[Регулирующие стержни Чикагской поленницы|Chicago Pile Control Rod]]" } } From 832e4c0112857127614fb125c3678e0fb5e52b21 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 20:51:21 +0300 Subject: [PATCH 08/40] 1 --- src/main/resources/assets/hbm/lang/ru_RU.lang | 8 +------- .../resources/assets/hbm/manual/satellite/satlink.json | 6 ++++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 416e0b4e2..2af5958bc 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5591,7 +5591,7 @@ tile.machine_rtg_orange.name=Сильный RT генератор tile.machine_rtg_purple.name=Генератор аннигиляции антиматерии tile.machine_rtg_red.name=Фульминационный генератор tile.machine_rtg_yellow.name=Австралиевый супертопливный генератор -tile.machine_satlink.name=Наземная станция спутника +tile.machine_satlink.name=Спутниковая наземная станция tile.machine_satlinker.name=Менеджер ID спутников tile.machine_sawmill.name=Лесопилка на генераторе Стирлинга tile.machine_sawmill.desc=Требует внешний источник тепла.$Скорость теплопередачи: T*0.1 TU/t$Мин. потребление: 100 TU/t, Макс. потребление intake: 300 TU/t @@ -6032,12 +6032,6 @@ tile.sand_quartz.name=Кварцевый песок tile.sand_uranium.name=Урановый песок tile.sandbags.name=Мешки с песком tile.sat_dock.name=Станция посадки груза -tile.sat_foeq.name=ВСАП-МК.I зонд “FOEQ Duna” с экспериментальным ядерным двигателем (Декор) -tile.sat_laser.name=Орбитальный Луч Смерти (Декор) -tile.sat_mapper.name=Спутник для картографирования поверхности (Декор) -tile.sat_radar.name=Спутник с радиолокационным зондированием (Декор) -tile.sat_resonator.name=Спутник с Зен-Резонатором (Декор) -tile.sat_scanner.name=Спутник с модулем глубинно-ресурсного сканирования (Декор) tile.schrabidic_block.name=Шрабидиевая кислота tile.seal_controller.name=Открыватель люка пусковой шахты tile.seal_frame.name=Рама люка пусковой шахты diff --git a/src/main/resources/assets/hbm/manual/satellite/satlink.json b/src/main/resources/assets/hbm/manual/satellite/satlink.json index 88dd83963..e901b9323 100644 --- a/src/main/resources/assets/hbm/manual/satellite/satlink.json +++ b/src/main/resources/assets/hbm/manual/satellite/satlink.json @@ -3,9 +3,11 @@ "icon": ["hbm:tile.machine_satlink"], "trigger": [["hbm:tile.machine_satlink"]], "title": { - "en_US": "Satellite Ground Station" + "en_US": "Satellite Ground Station", + "ru_RU": "Спутниковая наземная станция" }, "content": { - "en_US": "The satellite ground station is an advanced [[Redstone over Radio]] component that allows indirect connection of traditional RoR components and [[satellites|Satellite]]. It doesn't send or receive RoR signals directly, instead, it needs an external [[receiver|Redstone-over-Radio Controller]] or [[transmitter|Redstone-over-Radio Reader]] to interface with RoR.

The ground station can only connect to one satellite at a time. The frequency can be set either by using a configured satellite ID chip on the ground station, or via RoR command.

The two most important RoR functions the ground station has are RX and TX.

RX is a readable value that is relayed from the satellite. The contents of that value depend on the satellite, and is usually set in response to a command. For example, on the [[orbital precision laser|Orbital Precision Laser]], the function 'canfire' will set the RX value to either 'TRUE' or 'FALSE' depending on whether the laser is ready to fire.

TX is a function that allows commands to be relayed from the ground station to the satellite to control it or to request data. For example, the RoR command 'tx!settarget 200 300' will relay the command 'settarget 200 300' to the connected satellite. Do note that satellite commands do not use parameter separators like RoR commands do, since the satellite command is technically just one big RoR parameter.

In conjunction with the [[AUTOCAL]], the ground station becomes incredibly powerful, as it allows for automated targeting of satellites, data processing and more. For example, a [[radar satellite|Radar Satellite]] could survey the airspace for airborne missiles, relay that data to the AUTOCAL which then sends a signal to a precision laser which intercepts the missile." + "en_US": "The satellite ground station is an advanced [[Redstone over Radio]] component that allows indirect connection of traditional RoR components and [[satellites|Satellite]]. It doesn't send or receive RoR signals directly, instead, it needs an external [[receiver|Redstone-over-Radio Controller]] or [[transmitter|Redstone-over-Radio Reader]] to interface with RoR.

The ground station can only connect to one satellite at a time. The frequency can be set either by using a configured satellite ID chip on the ground station, or via RoR command.

The two most important RoR functions the ground station has are RX and TX.

RX is a readable value that is relayed from the satellite. The contents of that value depend on the satellite, and is usually set in response to a command. For example, on the [[orbital precision laser|Orbital Precision Laser]], the function 'canfire' will set the RX value to either 'TRUE' or 'FALSE' depending on whether the laser is ready to fire.

TX is a function that allows commands to be relayed from the ground station to the satellite to control it or to request data. For example, the RoR command 'tx!settarget 200 300' will relay the command 'settarget 200 300' to the connected satellite. Do note that satellite commands do not use parameter separators like RoR commands do, since the satellite command is technically just one big RoR parameter.

In conjunction with the [[AUTOCAL]], the ground station becomes incredibly powerful, as it allows for automated targeting of satellites, data processing and more. For example, a [[radar satellite|Radar Satellite]] could survey the airspace for airborne missiles, relay that data to the AUTOCAL which then sends a signal to a precision laser which intercepts the missile.", + "ru_RU": "Спутниковая наземная станция — это продвинутый компонент [[Редстоун-по-Радио|Redstone over Radio]], обеспечивающий косвенное соединение классических компонентов РпР и [[спутников|Satellite]]. Она не передаёт и не принимает сигналы РпР напрямую — вместо этого для взаимодействия с РпР ей требуется внешний [[приёмник|Redstone-over-Radio Controller]] или [[передатчик|Redstone-over-Radio Reader]]. Наземная станция может связываться только с одним спутником за раз.

Частота задаётся либо с использованием настроенного чипа идентификатора спутника на наземной станции, либо через команду РпР.

Две самые важные функции РпР, которыми обладает наземная станция, — это RX (приём) и TX (передача).

RX — это считываемое значение, которое транслируется со спутника. Содержимое этого значения зависит от спутника и обычно задаётся в ответ на команду. Например, у [[орбитальный прецизионный лазер|Orbital Precision Laser]] функция «canfire» устанавливает значение RX в «TRUE» или «FALSE» в зависимости от того, готов ли лазер к стрельбе.

TX — это функция, которая позволяет транслировать команды с наземной станции на спутник для управления им или запроса данных. Например, команда РпР 'tx!settarget 200 300' передаст спутнику команду 'settarget 200 300'. Обратите внимание, что команды спутника не используют разделители параметров, как это делают обычные команды РпР, поскольку команда спутника технически является лишь одним большим параметром РпР.

В сочетании с [[AUTOCAL|AUTOCAL]] наземная станция становится невероятно мощной, так как позволяет автоматизировать наведение спутников, обработку данных и многое другое. Например, [[радиолокационный спутник|Radar Satellite]] может сканировать воздушное пространство на наличие ракет, передавать эти данные на AUTOCAL, который затем отправляет сигнал на точный лазер для перехвата ракеты." } } From 9f3f2d178ba45808bbd425e0289d0b57443b4ff7 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 20:52:41 +0300 Subject: [PATCH 09/40] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 2af5958bc..cb0af0669 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5998,10 +5998,10 @@ tile.red_connector_super.name=Мощный электрический конне tile.red_pylon.name=Малая опора ЛЭП (Деревянная) tile.red_pylon_steel.name=Малая опора ЛЭП (Стальная) tile.red_pylon_large.name=Большая опора ЛЭП -tile.red_pylon_medium_steel.name=Средния опора ЛЭП (Стальная) -tile.red_pylon_medium_steel_transformer.name=Средния опора ЛЭП с трансформатором (Стальная) -tile.red_pylon_medium_wood.name=Средния опора ЛЭП (Деревянная) -tile.red_pylon_medium_wood_transformer.name=Средния опора ЛЭП с трансформатором (Деревянная) +tile.red_pylon_medium_steel.name=Средняя опора ЛЭП (Стальная) +tile.red_pylon_medium_steel_transformer.nameСредняя опора ЛЭП с трансформатором (Стальная) +tile.red_pylon_medium_wood.name=Средняя опора ЛЭП (Деревянная) +tile.red_pylon_medium_wood_transformer.name=Средняя опора ЛЭП с трансформатором (Деревянная) tile.red_wire_coated.name=Медный кабель с покрытием tile.refueler.name=Заправочная станция tile.reinforced_brick.name=Усиленный бетон From 5a9eca66f3122019c06e8d8004ee1dbaf71e047f Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Mon, 27 Jul 2026 21:40:53 +0300 Subject: [PATCH 10/40] fish rim --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index cb0af0669..80ecd4599 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6323,7 +6323,7 @@ turret.on=ВКЛ turret.players=Целиться по игрокам: %s upgrade.acid=Требуется кислота %s -upgrade.burn=Сжигает %sмб/тик за %sHE +upgrade.burn=Сжигает %sмБ/тик за %sHE upgrade.consumption=Потребление %s upgrade.coolantConsumption=Потребление охладителя %s upgrade.delay=Время %s From 34b749a5f33a7f2ea80e65e3b133a90b76ded974 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Tue, 28 Jul 2026 14:20:01 +0300 Subject: [PATCH 11/40] FPV BOBOX --- src/main/resources/assets/hbm/lang/ru_RU.lang | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 80ecd4599..744558b91 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -969,7 +969,7 @@ desc.gui.rtgBFurnace.desc=Требует хотя бы 15 единиц тепл desc.gui.rtg.heat=§eТекущий уровень тепла: %s desc.gui.rtg.pellets=Принимаемые пеллеты: desc.gui.rtg.pelletHeat=%s (%s тепла) -desc.gui.rtg.pelletPower=%s (%s HE/тик) +desc.gui.rtg.pelletPower=%s (%s HE/t) desc.gui.template=§9Шаблоны§r$Шаблоны могут быть сделаны$в Папке шаблонов машин. desc.gui.turbinegas.automode=§2Автоматический режим турбины§r$Нажав кнопку "AUTO", турбина автоматически$отрегулирует позицию регулятора$в зависимости от требуемой мощности сети$и количества оставшегося топлива desc.gui.turbinegas.fuels=§6Принимаемое топливо: @@ -1062,8 +1062,8 @@ desc.item.ammo.pro_withering=+ Иссущающий desc.item.armorMod.display=чтобы показать установленные модификаторы брони desc.item.battery.charge=Заряд: %s / %sHE desc.item.battery.chargePerc=Заряд: %s%% -desc.item.battery.chargeRate=Скорость зарядки: %sHE/тик -desc.item.battery.dischargeRate=Скорость разрядки: %sHE/тик +desc.item.battery.chargeRate=Скорость зарядки: %sHE/t +desc.item.battery.dischargeRate=Скорость разрядки: %sHE/t desc.item.durability=Прочность: %s desc.item.grenade.fuse=Предохранитель: %s desc.item.grenade.fuseImpact=Столкновение @@ -4191,10 +4191,12 @@ item.sat_designator.name=Спутниковый лазерный целеука item.sat_gerald.name=Геральд Строительный Андроид item.sat_interface.name=Интерфейс спутникового управления item.satellite.death_ray.name=Орбитальный луч Смерти +item.satellite.detector.name=Спутник-детектор широкополосного радиоизлучения item.satellite.miner_astro.name=Астероидный шахтёрский корабль item.satellite.miner_lunar.name=Лунный шахтёрский корабль item.satellite.precision_laser.name=Орбитальный прецизионный лазер item.satellite.radar.name=Радиолокационный спутник +item.satellite.ray_scan.name=Спутник-сканер узкополосного радиоизлучения item.satellite.relay.name=Ретрансляционный спутник item.satellite.scanner.name=Спутник глубинного сканирования item.satellite.spy.name=Спутник-шпион @@ -5634,7 +5636,7 @@ tile.machine_vacuum_distill.name=Вакуумный нефтеперерабат tile.machine_waste_drum.name=Бочка с отработанным топливом tile.machine_weapon_table.name=Стол модификации оружия tile.machine_wood_burner.name=Генератор на дровах -tile.machine_wood_burner.desc=Генерирует 100HE/тик$Собирает золу$Может сжигать жидкости с 25%% эффективностью за 1мБ/с +tile.machine_wood_burner.desc=Генерирует 100HE/t$Собирает золу$Может сжигать жидкости с 25%% эффективностью за 1mB/t tile.machine_well.name=Нефтяная вышка tile.machine_zirnox.name=Ядерный реактор Цирнокс tile.marker_structure.name=Маркер для многоблочных структур @@ -5822,9 +5824,9 @@ tile.pribris_burning.name=Горящие обломки РБМК tile.pribris_digamma.name=Почерневшие обломки РБМК tile.pribris_radiating.name=Тлеющие обломки РБМК tile.pump_electric.name=Электрический насос для грунтовых вод -tile.pump_electric.desc=Использует электричество для выкачивания грунтовых вод$Выкачивает до 10,000мБ/тик$Должно быть размещено ниже Y:70 +tile.pump_electric.desc=Использует электричество для выкачивания грунтовых вод$Выкачивает до 10,000mB/t$Должно быть размещено ниже Y:70 tile.pump_steam.name=Паровой насос для грунтовых вод -tile.pump_steam.desc=Использует пар для выкачивания грунтовых вод$Выкачывает до 1000мБ/тик$Должно быть размещено ниже Y:70 +tile.pump_steam.desc=Использует пар для выкачивания грунтовых вод$Выкачывает до 1000mB/t$Должно быть размещено ниже Y:70 tile.pwr_block.name=Водо-водяной энергетический реактор (ВВЭР) tile.pwr_casing.name=Внешняя обшивка ВВЭР tile.pwr_casing.desc=Для формирования реактора необходимо покрыть все внутренние части$Размещение: Обшивка @@ -6323,7 +6325,7 @@ turret.on=ВКЛ turret.players=Целиться по игрокам: %s upgrade.acid=Требуется кислота %s -upgrade.burn=Сжигает %sмБ/тик за %sHE +upgrade.burn=Сжигает %smB/t за %sHE upgrade.consumption=Потребление %s upgrade.coolantConsumption=Потребление охладителя %s upgrade.delay=Время %s From cf913d372f00f02b800056af7fc86aa53e5ac5e4 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Wed, 29 Jul 2026 19:43:32 +0300 Subject: [PATCH 12/40] Arty --- src/main/resources/assets/hbm/lang/ru_RU.lang | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 744558b91..6d436792d 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1611,20 +1611,20 @@ item.ajro_boots.name=Ботинки силовой брони AJR item.ajro_helmet.name=Шлем силовой брони AJR item.ajro_legs.name=Поножи силовой брони AJR item.ajro_plate.name=Нагрудник силовой брони AJR -item.ammo_arty.name=16-дюймовый артиллерийский снаряд -item.ammo_arty_cargo.name=16-дюймовый артиллерийский снаряд для экспресс-доставки -item.ammo_arty_chlorine.name=Хлорный 16-дюймовый артиллерийский снаряд +item.ammo_arty.name=16-дюймовый артиллерийский снаряд (Стандартный) +item.ammo_arty_cargo.name=16-дюймовый артиллерийский снаряд (Экспресс-доставка) +item.ammo_arty_chlorine.name=16-дюймовый артиллерийский снаряд (Хлор) item.ammo_arty_classic.name=16-дюймовый артиллерийский снаряд (Прямо из Факторио) -item.ammo_arty_he.name=Фугасный 16-дюймовый артиллерийский снаряд -item.ammo_arty_mini_nuke.name=Мини-ядерный 16-дюймовый артиллерийский снаряд -item.ammo_arty_mini_nuke_multi.name=Мини-ядерный 16-дюймовый мульти-снаряд -item.ammo_arty_mustard_gas.name=16-дюймовый артиллерийский снаряд с ипритом -item.ammo_arty_nuke.name=Ядерный 16-дюймовый артиллерийский снаряд -item.ammo_arty_phosgene.name=Фосгеновый 16-дюймовый артиллерийский снаряд -item.ammo_arty_phosphorus.name=Фосфорный 16-дюймовый артиллерийский снаряд +item.ammo_arty_he.name=16-дюймовый артиллерийский снаряд (Фугасный) +item.ammo_arty_mini_nuke.name=16-дюймовый артиллерийский снаряд (Мини-ядерный) +item.ammo_arty_mini_nuke_multi.name=16-дюймовый артиллерийский мульти-снаряд (Мини-ядерный) +item.ammo_arty_mustard_gas.name=16-дюймовый артиллерийский снаряд (Иприт) +item.ammo_arty_nuke.name=16-дюймовый артиллерийский снаряд (Ядерный) +item.ammo_arty_phosgene.name=16-дюймовый артиллерийский снаряд (Фосгеновый) +item.ammo_arty_phosphorus.name=16-дюймовый артиллерийский снаряд (Фосфорный) +item.ammo_arty_phosphorus_multi.name=16-дюймовый артиллерийский мульти-снаряд (Фосфорный) item.ammo_bag.name=Сумка для боеприпасов item.ammo_bag_infinite.name=Бесконечная сумка для боеприпасов -item.ammo_arty_phosphorus_multi.name=Фосфорный 16-дюймовый мульти-снаряд item.ammo_container.name=Контейнер с боеприпасами item.ammo_container.desc=Выдаёт патроны не более чем для трёх оружий с хотбара. item.ammo_container.1.desc=Выдаёт патроны не более чем для трёх оружий с хотбара.$Это не распространяется на мини-ядерные заряды и прочие высокоуровневые боеприпасы. @@ -1637,14 +1637,14 @@ item.ammo_fuel_gas.name=Бак с газом item.ammo_fuel_napalm.name=Бак с напалмом item.ammo_fuel_phosphorus.name=Бак с белым фосфором item.ammo_fuel_vaporizer.name=Бак испарителя -item.ammo_himars_standard.name=227-мм управляемый артиллерийский ракетный снаряд -item.ammo_himars_standard_he.name=227-мм управляемый артиллерийский ракетный снаряд (Фугасный) -item.ammo_himars_standard_lava.name=227-мм управляемый артиллерийский ракетный снаряд (Лава) -item.ammo_himars_standard_mini_nuke.name=227-мм управляемый артиллерийский ракетный снаряд (Мини-ядерный) -item.ammo_himars_standard_tb.name=227-мм управляемый артиллерийский ракетный снаряд (Термобарический) -item.ammo_himars_standard_wp.name=227-мм управляемый артиллерийский ракетный снаряд (БФ) -item.ammo_himars_single.name=610-мм управляемый артиллерийский ракетный снаряд -item.ammo_himars_single_tb.name=610-мм управляемый артиллерийский ракетный снаряд (Термобарический) +item.ammo_himars_standard.name=Контейнер управляемых ракет 227-мм (Стандартный) +item.ammo_himars_standard_he.name=Контейнер управляемых ракет 227-мм (Фугасный) +item.ammo_himars_standard_lava.name=Контейнер управляемых ракет 227-мм (Лавовый) +item.ammo_himars_standard_mini_nuke.name=Контейнер управляемых ракет 227-мм (Мини-ядерный) +item.ammo_himars_standard_tb.name=Контейнер управляемых ракет 227-мм (Термобарический) +item.ammo_himars_standard_wp.name=Контейнер управляемых ракет 227-мм (Фосфорный) +item.ammo_himars_single.name=Контейнер управляемой ракеты 610-мм (Стандартный) +item.ammo_himars_single_tb.name=Контейнер управляемой ракеты 610-мм (Термобарический) item.ammo_shell.name=240мм Снаряд item.ammo_shell_apfsds_du.name=240мм APFSTS-DU item.ammo_shell_apfsds_t.name=240мм APFSTS-T @@ -1653,7 +1653,7 @@ item.ammo_shell_w9.name=240мм Ядерный снаряд W9 item.ammo_secret.bmg50_equestrian.name=Патрон .50 BMG (Разрушитель) item.ammo_secret.folly_nuke.name=Серебряная пуля (Ядерная) item.ammo_secret.folly_sm.name=Серебряная пуля -item.ammo_secret.g12_equestrian.name=Патрон 12 калибра (Картечь железнодорожный гвоздь) +item.ammo_secret.g12_equestrian.name=Патрон 12 калибра (Железнодорожный гвоздь) item.ammo_secret.m44_equestrian.name=Патрон .44 магнум (Разрыватель голов) item.ammo_secret.p35_800.name=Патрон .35-800 V9 item.ammo_secret.p35_800_bl.name=Патрон .35-800 V9 (Чёрная Молния) From edbc66224b94099e0b3911328f835b9d8faf602a Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Wed, 29 Jul 2026 20:16:25 +0300 Subject: [PATCH 13/40] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 54 +++++-------------- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 6d436792d..9b641b2c6 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1798,7 +1798,6 @@ item.arc_electrode_burnt.desh.name=Расплавленный деш-элект item.arc_electrode_burnt.graphite.name=Расплавленный графитовый электрод item.arc_electrode_burnt.lanthanium.name=Расплавленный лантановый электрод item.arc_electrode_burnt.saturnite.name=Расплавленный сатурнитовый электрод -item.arc_electrode_desh.name=Электрод из деш item.armor_battery.name=Аккумуляторный блок для силовой брони item.armor_battery_mk2.name=Аккумуляторный блок для силовой брони Mk2 item.armor_battery_mk3.name=Аккумуляторный блок для силовой брони Mk3 @@ -2287,17 +2286,11 @@ item.circuit_star_piece.mem_16k_c.name=ЗД - Слот для карты Пам item.circuit_star_piece.mem_16k_d.name=ЗД - Слот для карты Памяти 16k D item.circuit_tantalium.name=Конденсаторная плата item.circuit_tantalium_raw.name=Сборка конденсаторной платы -item.circuit_targeting_tier1.name=Печатная плата военного класса (Уровень 1) -item.circuit_targeting_tier2.name=Печатная плата военного класса (Уровень 2) -item.circuit_targeting_tier3.name=Печатная плата военного класса (Уровень 3) -item.circuit_targeting_tier4.name=Печатная плата военного класса (Уровень 4) -item.circuit_targeting_tier5.name=Печатная плата военного класса (Уровень 5) -item.circuit_targeting_tier6.name=Печатная плата военного класса (Уровень 6) -item.cladding_desh.name=Обшивка из деш -item.cladding_ghiorsium.name=Прокладка из гиорсия +item.cladding_desh.name=Деш-обшивка +item.cladding_ghiorsium.name=Гиорсиум-обшивка item.cladding_iron.name=Железная обшивка item.cladding_lead.name=Свинцовая обшивка -item.cladding_obsidian.name=Прокладка из обсидиана +item.cladding_obsidian.name=Обсидиановая обшивка item.cladding_paint.name=Свинцовая краска item.cladding_rubber.name=Резиновая обшивка item.clay_tablet.name=Глиняная табличка @@ -2536,15 +2529,6 @@ item.dust.desc=Ненавижу пыль! item.dust.desc.P11=Ещё один падает в пыль! item.dust_tiny.name=Кучка пыли item.dwarven_pickaxe.name=Дварфийская кирка -item.dynosphere_base.name=Шаблон Диносферы -item.dynosphere_desh.name=Диносфера из деш -item.dynosphere_desh_charged.name=Диносфера из деш (Заряженная) -item.dynosphere_dineutronium.name=Динейтрониевая диносфера -item.dynosphere_dineutronium_charged.name=Динейтрониевая диносфера (Заряженная) -item.dynosphere_euphemium.name=Эвфемиевая диносфера -item.dynosphere_euphemium_charged.name=Эвфемиевая диносфера (Заряженная) -item.dynosphere_schrabidium.name=Шрабидиевая диносфера -item.dynosphere_schrabidium_charged.name=Шрабидиевая диносфера (Заряженная) item.dysfunctional_reactor.name=Нерабочий ядерный реактор item.early_explosive_lenses.name=Набор взрывных линз первого поколения item.early_explosive_lenses.desc=Сборка из 8 осколочно-фугасных линз с алюминиевым$толкателем, дюралюминиевой оболочкой и проволочными детонаторами. @@ -2644,10 +2628,6 @@ item.fuel_tank_small.name=Малый топливный бак item.fuse.name=Предохранитель item.fusion_core.name=Ядерный блок item.fusion_core_infinite.name=Бесконечный ядерный блок -item.fusion_shield_chlorophyte.name=Хлорофитовый защитный слой термоядерного реактора -item.fusion_shield_desh.name=Деш-Защитный слой термоядерного реактора -item.fusion_shield_tungsten.name=Вольфрамовый защитный слой термоядерного реактора -item.fusion_shield_vaporwave.name=Вапорвейвный защитный слой термоядерного реактора item.gadget_core.name=Плутониевое ядро item.gadget_explosive.name=Взрывные линзы первого поколения item.gadget_kit.name=Комплект Гаджета @@ -2797,7 +2777,7 @@ item.gun_uzi_richter.name=Пистолет-пулемёт "Richter" item.gun_uzi_akimbo.name=Пистолеты-пулемёты "UZIs" item.gun_uzi_saturnite.name=Пистолет-пулемёт "UZI сатурнитовый" item.hand_drill.name=Ручная дрель -item.hand_drill_desh.name=Ручная дрель из деша +item.hand_drill_desh.name=Ручная деш-дрель item.hazmat_boots.name=Защитные ботинки item.hazmat_boots_grey.name=Высокоэффективные защитные ботинки item.hazmat_boots_red.name=Улучшенные защитные ботинки @@ -2849,7 +2829,6 @@ item.industrial_magnet.name=Промышленный магнит item.inf_water.name=Бесконечный резервуар воды item.inf_water_mk2.name=Усиленный бесконечный резервуар воды item.ingot_actinium.name=Слиток актиния-227 -item.ingot_advanced_alloy.name=Слиток продвинутого сплава item.ingot_aluminium.name=Алюминиевый слиток item.ingot_am_mix.name=Слиток америция реакторного качества item.ingot_am241.name=Слиток америция-241 @@ -2861,7 +2840,7 @@ item.ingot_asbestos.name=Асбестовый лист item.ingot_asbestos.desc=§o"Наполненный жизнью, неуверенностью в себе и асбестом. Это приходит вместе с воздухом."§r item.ingot_au198.name=Слиток золота-198 item.ingot_australium.name=Австралиевый слиток -item.ingot_bakelite.name=Бакелит +item.ingot_bakelite.name=Брусок бакелита item.ingot_beryllium.name=Бериллиевый слиток item.ingot_biorubber.name=Брусок латекса item.ingot_bismuth.name=Слиток висмута @@ -2879,15 +2858,14 @@ item.ingot_cobalt.name=Кобальтовый слиток item.ingot_combine_steel.name=Слиток стали Альянса item.ingot_combine_steel.desc=*вставьте референс на Гражданскую Оборону* item.ingot_copper.name=Слиток промышленной меди -item.ingot_daffergon.name=Даффергоновый слиток -item.ingot_desh.name=Слиток деш +item.ingot_desh.name=Деш-слиток item.ingot_dineutronium.name=Динейтрониевый слиток item.ingot_dura_steel.name=Слиток быстрорежущей стали item.ingot_electronium.name=Электрониевый слиток item.ingot_euphemium.name=Эвфемиевый слиток item.ingot_euphemium.desc=Совершенно особый и в то же время странный элемент. item.ingot_ferrouranium.name=Ферроурановый слиток -item.ingot_fiberglass.name=Стекловолокно +item.ingot_fiberglass.name=Брусок стекловолокна item.ingot_fiberglass.desc=С высоким содержанием волокна, с высоким содержанием стекла. Всё, что необходимо организму. item.ingot_firebrick.name=Шамотный кирпич item.ingot_gh336.name=Слиток гиорсия-336 @@ -2921,33 +2899,32 @@ item.ingot_neptunium_fuel.name=Слиток нептуниевого топли item.ingot_niobium.name=Ниобиевый слиток item.ingot_osmiridium.name=Осмиридиевый слиток item.ingot_pb209.name=Слиток свинца-209 -item.ingot_pc.name=Твёрдый пластиковый брусок +item.ingot_pc.name=Брусок твёрдого пластика item.ingot_pet.name=Металлизированный алюминием брусок ПЭТ item.ingot_phosphorus.name=Брусок белого фосфора item.ingot_plutonium.name=Плутониевый слиток item.ingot_plutonium_fuel.name=Слиток плутониевого топлива item.ingot_polonium.name=Слиток полония-210 -item.ingot_polymer.name=Полимер +item.ingot_polymer.name=Брусок полимера item.ingot_pu_mix.name=Слиток плутония реакторного качества item.ingot_pu238.name=Слиток плутония-238 item.ingot_pu239.name=Слиток плутония-239 item.ingot_pu240.name=Слиток плутония-240 item.ingot_pu241.name=Слиток плутония-241 -item.ingot_pvc.name=ПВХ +item.ingot_pvc.name=Брусок ПВХ item.ingot_ra226.name=Слиток радия-226 item.ingot_raw.name=Слиток (%s) item.ingot_red_copper.name=Слиток красной меди -item.ingot_reiium.name=Реиевый слиток -item.ingot_rubber.name=Резина +item.ingot_rubber.name=Брусок резины item.ingot_saturnite.name=Сатурнитовый слиток item.ingot_schrabidate.name=Слиток шрабидата железа item.ingot_schrabidium.name=Шрабидиевый слиток item.ingot_schrabidium_fuel.name=Слиток шрабидиевого топлива item.ingot_schraranium.name=Шрараниевый слиток item.ingot_schraranium.desc=Делается из урана в шрабидиевом трансмутаторе -item.ingot_semtex.name=Семтекс +item.ingot_semtex.name=Брусок семтекс item.ingot_semtex.desc=Пластиковая взрывчатка Семтекс H$Эффективное взрывчатое вещество для многих применений.$Съедобно -item.ingot_silicon.name=Кремниевый брусок +item.ingot_silicon.name=Брусок кремния item.ingot_smore.name=Слиток с'мора item.ingot_solinium.name=Солиниевый слиток item.ingot_sr90.name=Слиток стронция-90 @@ -2968,12 +2945,9 @@ item.ingot_u233.name=Слиток урана-233 item.ingot_u235.name=Слиток урана-235 item.ingot_u238.name=Слиток урана-238 item.ingot_u238m2.name=Полустабильный слиток урана-238-2 -item.ingot_unobtainium.name=Недостатиевый слиток item.ingot_uranium.name=Урановый слиток item.ingot_uranium_fuel.name=Слиток уранового топлива -item.ingot_verticium.name=Вертициевый слиток item.ingot_weaponsteel.name=Слиток оружейной стали -item.ingot_weidanium.name=Вейданиевый слиток item.ingot_zirconium.name=Циркониевый куб item.injector_5htp.name=Автоинъектор 5-гидрокситриптофана item.injector_knife.name=Автоинъектор 8 дюймового лезвия @@ -5580,8 +5554,6 @@ tile.machine_radar.name=Радар tile.machine_radar_large.name=Большой радар tile.machine_radgen.name=Радиационный двигатель tile.machine_radiolysis.name=Радиоизотопный термоэлектрический генератор и камера радиолиза -tile.machine_reactor.name=Реактор-размножитель -tile.machine_reactor_small.name=Исследовательский реактор tile.machine_refinery.name=Нефтеперерабатывающий завод tile.machine_reix_mainframe.name=Мэйнфрейм Rei-X (WIP) tile.machine_rotary_furnace.name=Роторная печь From 855ea1f24ae89740293ee829b7838cf8e3b90828 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Wed, 29 Jul 2026 23:17:38 +0300 Subject: [PATCH 14/40] Oh --- src/main/resources/assets/hbm/lang/ru_RU.lang | 8 ++++---- .../assets/hbm/manual/satellite/asteroidminer.json | 6 ++++-- .../resources/assets/hbm/manual/satellite/detector.json | 6 ++++-- .../resources/assets/hbm/manual/satellite/lunarminer.json | 6 ++++-- .../assets/hbm/manual/satellite/orbitaldeathray.json | 3 ++- .../assets/hbm/manual/satellite/orbitallaser.json | 6 ++++-- .../resources/assets/hbm/manual/satellite/radarsat.json | 6 ++++-- .../resources/assets/hbm/manual/satellite/rayscanner.json | 6 ++++-- .../resources/assets/hbm/manual/satellite/satellite.json | 6 ++++-- .../resources/assets/hbm/manual/satellite/scansat.json | 7 ++++--- .../resources/assets/hbm/manual/satellite/spysat.json | 6 ++++-- .../resources/assets/hbm/manual/satellite/xenrelay.json | 6 ++++-- 12 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 9b641b2c6..10cfaa558 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -4170,11 +4170,11 @@ item.satellite.miner_astro.name=Астероидный шахтёрский ко item.satellite.miner_lunar.name=Лунный шахтёрский корабль item.satellite.precision_laser.name=Орбитальный прецизионный лазер item.satellite.radar.name=Радиолокационный спутник -item.satellite.ray_scan.name=Спутник-сканер узкополосного радиоизлучения -item.satellite.relay.name=Ретрансляционный спутник +item.satellite.ray_scan.name=Спутник-сканер узкополосного излучения +item.satellite.relay.name=Спутник-ретранслятор item.satellite.scanner.name=Спутник глубинного сканирования item.satellite.spy.name=Спутник-шпион -item.satellite.xenium_resonator.name=Спутник с Зен-Резонатором +item.satellite.xenium_resonator.name=Спутник с Зен-резонатором item.sawblade.name=Лезвие пилорамы item.schnitzel_vegan.name=Вегетарианский шницель @@ -5973,7 +5973,7 @@ tile.red_pylon.name=Малая опора ЛЭП (Деревянная) tile.red_pylon_steel.name=Малая опора ЛЭП (Стальная) tile.red_pylon_large.name=Большая опора ЛЭП tile.red_pylon_medium_steel.name=Средняя опора ЛЭП (Стальная) -tile.red_pylon_medium_steel_transformer.nameСредняя опора ЛЭП с трансформатором (Стальная) +tile.red_pylon_medium_steel_transformer.name=Средняя опора ЛЭП с трансформатором (Стальная) tile.red_pylon_medium_wood.name=Средняя опора ЛЭП (Деревянная) tile.red_pylon_medium_wood_transformer.name=Средняя опора ЛЭП с трансформатором (Деревянная) tile.red_wire_coated.name=Медный кабель с покрытием diff --git a/src/main/resources/assets/hbm/manual/satellite/asteroidminer.json b/src/main/resources/assets/hbm/manual/satellite/asteroidminer.json index 26d9d1384..5da5d3d26 100644 --- a/src/main/resources/assets/hbm/manual/satellite/asteroidminer.json +++ b/src/main/resources/assets/hbm/manual/satellite/asteroidminer.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite", 1, 3], "trigger": [["hbm:item.satellite", 1, 3]], "title": { - "en_US": "Asteroid Mining Ship" + "en_US": "Asteroid Mining Ship", + "ru_RU": "Астероидный шахтёрский корабль" }, "content": { - "en_US": "The asteroid mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined in space. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The asteroid mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined in space. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Астероидный шахтёрский корабль, если он связан с ID-чипом спутника, вставленным в грузовую посадочную площадку, будет регулярно приземляться для доставки ресурсов, добытых в космосе. Обратите внимание, что один добывающий корабль может снабжать только одну посадочную площадку. Также держите посадочную площадку свободной от препятствий, так как корабль может взорваться при столкновении с другими блоками.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/detector.json b/src/main/resources/assets/hbm/manual/satellite/detector.json index 6f632c35e..76f2ded9c 100644 --- a/src/main/resources/assets/hbm/manual/satellite/detector.json +++ b/src/main/resources/assets/hbm/manual/satellite/detector.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite", 1, 9], "trigger": [["hbm:item.satellite", 1, 9]], "title": { - "en_US": "Wideband Radio Emission Detector Satellite" + "en_US": "Wideband Radio Emission Detector Satellite", + "ru_RU": "Спутник-детектор широкополосного радиоизлучения" }, "content": { - "en_US": "The wideband radio emission detector is a type of [[satellite|Satellite]] that can detect certain types of high-energy events from the entire map, albeit with low accuracy. The detector can only give a very rough idea of where such an event is taking place, for more accurate results, the area needs to be scanned wither with a [[spy satellite|Spy Satellite]] or [[narrowband scanner|Narrowband Emission Scanning Satellite]].

The types of events this satellite can pick up are as follows:
* Mini nuke explosions (low intensity, accuracy <10,000m)
* Radar (medium intensity, accuracy <2,500m)
* Particle accelerator operations (medium intensity, accuracy <2,500m)
Nuclear explosions (high intensity, accuracy <500m)

Events are timed, medium intense ones are the shortest lived as they only show up for half a second, while other events can show up for multiple seconds or even up to a minute. It is therefore important to scan any given area multiple times in rapid succession to get an accurate result.

* '§esurvey§r' will report any recent events that have not timed out yet. The detector's field of view covers the entire map, so there is no range limitations. All detected results are saved to an internal list.
* '§ecount§r' will write the amount of detected events to RX.
* '§egettype §eindex§r' will write the type (LOW/MEDIUM/HIGH) of the specified event to RX.
* '§egetposition §eindex§r' will write the estimated X/Z position of the specified event to RX. The coordinated are separated by semicolon.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The wideband radio emission detector is a type of [[satellite|Satellite]] that can detect certain types of high-energy events from the entire map, albeit with low accuracy. The detector can only give a very rough idea of where such an event is taking place, for more accurate results, the area needs to be scanned wither with a [[spy satellite|Spy Satellite]] or [[narrowband scanner|Narrowband Emission Scanning Satellite]].

The types of events this satellite can pick up are as follows:
* Mini nuke explosions (low intensity, accuracy <10,000m)
* Radar (medium intensity, accuracy <2,500m)
* Particle accelerator operations (medium intensity, accuracy <2,500m)
Nuclear explosions (high intensity, accuracy <500m)

Events are timed, medium intense ones are the shortest lived as they only show up for half a second, while other events can show up for multiple seconds or even up to a minute. It is therefore important to scan any given area multiple times in rapid succession to get an accurate result.

* '§esurvey§r' will report any recent events that have not timed out yet. The detector's field of view covers the entire map, so there is no range limitations. All detected results are saved to an internal list.
* '§ecount§r' will write the amount of detected events to RX.
* '§egettype §eindex§r' will write the type (LOW/MEDIUM/HIGH) of the specified event to RX.
* '§egetposition §eindex§r' will write the estimated X/Z position of the specified event to RX. The coordinated are separated by semicolon.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Детектор широкополосного радиоизлучения — это тип [[спутника|Satellite]], который может обнаруживать определённые типы высокоэнергетических событий по всей карте, хотя и с низкой точностью. Детектор даёт лишь очень приблизительное представление о том, где именно происходит событие, поэтому для более точных результатов область необходимо отсканировать с помощью [[спутника-шпиона|Spy Satellite]] или [[узкополосного сканер|Narrowband Emission Scanning Satellite]].

Типы событий, которые может засечь этот спутник:
* Взрывы мини-ядерок (низкая интенсивность, точность <10 000м)
* Радар (средняя интенсивность, точность <2 500м)
* Работа ускорителей частиц (средняя интенсивность, точность <2 500м)
Ядерные взрывы (высокая интенсивность, точность <500м)

События ограничены по времени: события средней интенсивности являются самыми короткоживущими и отображаются всего полсекунды, в то время как другие могут висеть от нескольких секунд до минуты. Поэтому важно сканировать область несколько раз подряд с коротким интервалом, чтобы получить точный результат.

* '§esurvey§r' сообщит обо всех недавних событиях, время которых ещё не истекло. Зона обзора детектора покрывает всю карту, поэтому ограничений по дальности нет. Все обнаруженные результаты сохраняются во внутренний список.
* '§ecount§r' запишет количество обнаруженных событий в RX.
* '§egettype §eindex§r' запишет тип (LOW/MEDIUM/HIGH) указанного события в RX.
* '§egetposition §eindex§r' запишет примерные X/Z координаты указанного события в RX. Координаты разделяются точкой с запятой.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/lunarminer.json b/src/main/resources/assets/hbm/manual/satellite/lunarminer.json index 972a57927..bfe6d45e5 100644 --- a/src/main/resources/assets/hbm/manual/satellite/lunarminer.json +++ b/src/main/resources/assets/hbm/manual/satellite/lunarminer.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite", 1, 4], "trigger": [["hbm:item.satellite", 1, 4]], "title": { - "en_US": "Lunar Mining Ship" + "en_US": "Lunar Mining Ship", + "ru_RU": "Лунный шахтёрский корабль" }, "content": { - "en_US": "The lunar mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined on the moon. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.

Unlike the [[asteroid mining ship|Asteroid Mining Ship]], the selection of items it can harvest is much smaller, however, the large quantities of moon turf it can produce are important for [[helium-3|Helium-3]], a powerful fuel for the [[fusion reactor|Fusion Reactor]].

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The lunar mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined on the moon. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.

Unlike the [[asteroid mining ship|Asteroid Mining Ship]], the selection of items it can harvest is much smaller, however, the large quantities of moon turf it can produce are important for [[helium-3|Helium-3]], a powerful fuel for the [[fusion reactor|Fusion Reactor]].

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Лунный шахтёрский корабль, если он связан с ID-чипом спутника, вставленным в грузовую посадочную площадку, будет регулярно приземляться для доставки ресурсов, добытых на Луне. Обратите внимание, что один добывающий корабль может снабжать только одну посадочную площадку. Также держите посадочную площадку свободной от препятствий, так как корабль может взорваться при столкновении с другими блоками.

В отличие от [[|астероидного шахтёрского корабля|Asteroid Mining Ship]], выбор добываемых им предметов гораздо меньше, однако большие объемы лунного грунта, которые он может добывать, важны для [[гелия-3|Helium-3]] — мощного топлива для [[|термоядерного реакторра|Fusion Reactor]].

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/orbitaldeathray.json b/src/main/resources/assets/hbm/manual/satellite/orbitaldeathray.json index 11ed06953..0269a0d21 100644 --- a/src/main/resources/assets/hbm/manual/satellite/orbitaldeathray.json +++ b/src/main/resources/assets/hbm/manual/satellite/orbitaldeathray.json @@ -6,6 +6,7 @@ "en_US": "Orbital Death Ray" }, "content": { - "en_US": "The orbital death ray is a powerful nuclear-powered orbital weapon firing a laser that deals as much damage as a high-yield mini nuke, but without the radiation. Despite the powerful energy source, the ray takes five minutes to fully charge. Unlike the [[precision laser|Orbital Precision Laser]], it lacks the entity targeting option that would let it shoot down missiles or hit fast-moving targets.

* '§efire§r' will fire the laser at the current target position, assuming the ray has finished charging.
* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the death ray is ready to fire.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The orbital death ray is a powerful nuclear-powered orbital weapon firing a laser that deals as much damage as a high-yield mini nuke, but without the radiation. Despite the powerful energy source, the ray takes five minutes to fully charge. Unlike the [[precision laser|Orbital Precision Laser]], it lacks the entity targeting option that would let it shoot down missiles or hit fast-moving targets.

* '§efire§r' will fire the laser at the current target position, assuming the ray has finished charging.
* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the death ray is ready to fire.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Орбитальный луч Смерти — это мощное орбитальное оружие на ядерной энергии, стреляющее лазером, который наносит столько же урона, сколько ядерная мини-бомба высокой мощности, но без радиации. Несмотря на мощный источник энергии, лучу требуется пять минут для полной зарядки. В отличие от [[прецизионного лазера|Orbital Precision Laser]], у него нет функции наведения на сущности, которая позволяла бы сбивать ракеты или поражать быстродвижущиеся цели.

* «§efire§r» выстрелит лазером по текущей целевой позиции, если луч завершил зарядку.
* «§ecanfire§r» запишет «TRUE» или «FALSE» в RX в зависимости от того, истекла ли перезарядка и готов ли луч смерти к выстрелу.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/orbitallaser.json b/src/main/resources/assets/hbm/manual/satellite/orbitallaser.json index a06149353..ae2fa6c18 100644 --- a/src/main/resources/assets/hbm/manual/satellite/orbitallaser.json +++ b/src/main/resources/assets/hbm/manual/satellite/orbitallaser.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite", 1, 5], "trigger": [["hbm:item.satellite", 1, 5]], "title": { - "en_US": "Orbital Precision Laser" + "en_US": "Orbital Precision Laser", + "ru_RU": "Орбитальный прецизионный лазер" }, "content": { - "en_US": "The orbital precision laser is a low-power weapon that harvests sunlight to charge up a small laser beam. The beam only takes five seconds to charge up, and deals marginally more block damage than TNT. The direct hit damage for struck entities is however much higher. When combined with the targeting data of a [[radar satellite|Radar Satellite]], it can potentially also shoot down missiles.

* '§efire§r' will fire the laser at the current target position, assuming the laser has finished charging. If the satellite has been supplied with entity target data, it will use the position of that entitiy instead, assuming it its within 1,000 blocks of the target position. After one shot, the entity targeting data is used up and the satellite's target position will be used again.
* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the laser is ready to fire.
* '§esetentitytarget §eid§r' supplies an entity ID for precise targeting, which is used up after one shot. The ID can be obtained from a radar satellite.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The orbital precision laser is a low-power weapon that harvests sunlight to charge up a small laser beam. The beam only takes five seconds to charge up, and deals marginally more block damage than TNT. The direct hit damage for struck entities is however much higher. When combined with the targeting data of a [[radar satellite|Radar Satellite]], it can potentially also shoot down missiles.

* '§efire§r' will fire the laser at the current target position, assuming the laser has finished charging. If the satellite has been supplied with entity target data, it will use the position of that entitiy instead, assuming it its within 1,000 blocks of the target position. After one shot, the entity targeting data is used up and the satellite's target position will be used again.
* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the laser is ready to fire.
* '§esetentitytarget §eid§r' supplies an entity ID for precise targeting, which is used up after one shot. The ID can be obtained from a radar satellite.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Орбитальный прецизионный лазер — это оружие малой мощности, которое собирает солнечный свет для зарядки небольшого лазерного луча. Лучу требуется всего пять секунд для зарядки, и он наносит лишь немного больше урона блокам, чем ТНТ. Однако урон при прямом попадании по сущностям значительно выше. В сочетании с данными целеуказания от [[радиолокационного спутника|Radar Satellite]] он также потенциально может сбивать ракеты.

* «§efire§r» выстрелит лазером по текущей целевой позиции, если лазер завершил зарядку. Если на спутник были переданы данные цели сущности, он будет использовать позицию этой сущности, если она находится в пределах 1000 блоков от целевой позиции. После одного выстрела данные целеуказания сущности расходуются, и снова используется целевая позиция спутника.
* «§ecanfire§r» запишет «TRUE» или «FALSE» в RX в зависимости от того, истекла ли перезарядка и готов ли лазер к выстрелу.
* «§esetentitytarget §eid§r» передает ID сущности для точного наведения, который расходуется после одного выстрела. ID можно получить с радиолокационного спутника.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/radarsat.json b/src/main/resources/assets/hbm/manual/satellite/radarsat.json index 4a1664e97..599371897 100644 --- a/src/main/resources/assets/hbm/manual/satellite/radarsat.json +++ b/src/main/resources/assets/hbm/manual/satellite/radarsat.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite", 1, 2], "trigger": [["hbm:item.satellite", 1, 2]], "title": { - "en_US": "Radar Satellite" + "en_US": "Radar Satellite", + "ru_RU": "Радиолокационный спутник" }, "content": { - "en_US": "The radar satellite can detect all radar-detectable entities like players and missiles in a 1,000 block radius around its target position. It can compile, filter, and provide a list of detected objects, along with their type and exact position.

* '§esurvey§r' scans the area and saves the results to a base list and a filtered list. These two lists are now the same, and stored within the satellite.
* '§efilter §ename§r' will overwrite the filtered list with a new list, containing only entries from the original list that match that name filter. Since the original list is retained, the filter operation can be run multiple times for multiple types without needing a survey operation.
* '§ecount§r' writes the amount of entries on the filterd list to RX.
* '§egettargetid §eindex§r' retrieves the unique entity ID from that entry on the list. This ID can be used for precise entity targeting by other satellites.
* '§egetposition §eindex§r' retrieves the exact x/y/z position of the specified entry. The coordinates are separated by semicolons.
* '§egetname §eindex§r' retrieves the class name of that entry, this name is what's used for filtering.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The radar satellite can detect all radar-detectable entities like players and missiles in a 1,000 block radius around its target position. It can compile, filter, and provide a list of detected objects, along with their type and exact position.

* '§esurvey§r' scans the area and saves the results to a base list and a filtered list. These two lists are now the same, and stored within the satellite.
* '§efilter §ename§r' will overwrite the filtered list with a new list, containing only entries from the original list that match that name filter. Since the original list is retained, the filter operation can be run multiple times for multiple types without needing a survey operation.
* '§ecount§r' writes the amount of entries on the filterd list to RX.
* '§egettargetid §eindex§r' retrieves the unique entity ID from that entry on the list. This ID can be used for precise entity targeting by other satellites.
* '§egetposition §eindex§r' retrieves the exact x/y/z position of the specified entry. The coordinates are separated by semicolons.
* '§egetname §eindex§r' retrieves the class name of that entry, this name is what's used for filtering.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Радиолокационный спутник может обнаруживать все видимые для радара сущности, такие как игроки и ракеты, в радиусе 1000 блоков вокруг своей цели. Он может составлять, фильтровать и предоставлять список обнаруженных объектов вместе с их типом и точными координатами.

* '§esurvey§r' сканирует область и сохраняет результаты в базовый и отфильтрованный списки. На данный момент оба списка одинаковы и хранятся внутри спутника.
* '§efilter §ename§r' перезаписывает отфильтрованный список новым, содержащим только те записи из оригинального списка, которые соответствуют указанному фильтру имён. Поскольку оригинальный список сохраняется, операцию фильтрации можно выполнять несколько раз для разных типов без необходимости повторного сканирования.
* '§ecount§r' записывает количество записей в отфильтрованном списке в RX.
* '§egettargetid §eindex§r' получает уникальный ID сущности из указанной записи списка. Этот ID может использоваться другими спутниками для точного наведения на цель.
* '§egetposition §eindex§r' получает точные X/Y/Z координаты указанной записи. Координаты разделяются точкой с запятой.
* '§egetname §eindex§r' получает имя класса этой записи — именно это имя используется для фильтрации.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/rayscanner.json b/src/main/resources/assets/hbm/manual/satellite/rayscanner.json index 2e2b9face..0c8830c07 100644 --- a/src/main/resources/assets/hbm/manual/satellite/rayscanner.json +++ b/src/main/resources/assets/hbm/manual/satellite/rayscanner.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite", 1, 10], "trigger": [["hbm:item.satellite", 1, 10]], "title": { - "en_US": "Narrowband Emission Scanning Satellite" + "en_US": "Narrowband Emission Scanning Satellite", + "ru_RU": "Спутник-сканер узкополосного излучения" }, "content": { - "en_US": "The narrowband scanner can detect certain high-energy events with high precision in a small area. While the [[wideband detector|Wideband Radio Emission Detector Satellite]] can only give a rough estimation of where a small number of things are happening, the narrowband scanner can detect more types of emission and pinpint their location.

Types of emissions that can be detected include:
* '§6NEUTRON_EMISSION§r' from nuclear reactors
* '§6HIGH_ENERGY_PARTICLES§r' from fusion reacotrs and particle accelerators
* '§6RADAR_WAVES§r' from terrestrial radar
* '§6RADIO_WAVES§r' from satellite ground stations with active TX

Like with the wideband detector, these emissions are timed, certain events only happen once or in a time interval, so for best results, repeated scans over a timespan are recommended.

* '§esurvey§r' will perform a scan with a radius of 250m around the target location. The results are saved in an internal list.
* '§ecount§r' will write the amount of scan results to RX.
* '§egetinfo §eindex§r' will write the specified entry's emission type to RX.
* '§egetposition §eindex§r' will write the X/Z position of the specified event to RX. The coordinated are separated by semicolon.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The narrowband scanner can detect certain high-energy events with high precision in a small area. While the [[wideband detector|Wideband Radio Emission Detector Satellite]] can only give a rough estimation of where a small number of things are happening, the narrowband scanner can detect more types of emission and pinpint their location.

Types of emissions that can be detected include:
* '§6NEUTRON_EMISSION§r' from nuclear reactors
* '§6HIGH_ENERGY_PARTICLES§r' from fusion reacotrs and particle accelerators
* '§6RADAR_WAVES§r' from terrestrial radar
* '§6RADIO_WAVES§r' from satellite ground stations with active TX

Like with the wideband detector, these emissions are timed, certain events only happen once or in a time interval, so for best results, repeated scans over a timespan are recommended.

* '§esurvey§r' will perform a scan with a radius of 250m around the target location. The results are saved in an internal list.
* '§ecount§r' will write the amount of scan results to RX.
* '§egetinfo §eindex§r' will write the specified entry's emission type to RX.
* '§egetposition §eindex§r' will write the X/Z position of the specified event to RX. The coordinated are separated by semicolon.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Спутник-сканер узкополосного излучения может с высокой точностью обнаруживать определённые высокоэнергетические события на небольшой площади. В то время как [[широкополосный детектор|Wideband Radio Emission Detector Satellite]] даёт лишь приблизительную оценку происходящего, узкополосный сканер видит больше типов излучения и точно определяет их местоположение.

Типы излучений, которые могут быть обнаружены:
* '§6NEUTRON_EMISSION§r' от ядерных реакторов
* '§6HIGH_ENERGY_PARTICLES§r' от термоядерных реакторов и ускорителей частиц
* '§6RADAR_WAVES§r' от наземных радаров
* '§6RADIO_WAVES§r' от спутниковых наземных станций с активным TX

Как и с широкополосным детектором, эти излучения привязаны ко времени: некоторые события происходят лишь единожды или с определённым интервалом, поэтому для лучших результатов рекомендуется проводить повторные сканирования в течение некоторого времени.

'§esurvey§r' выполняет сканирование в радиусе 250м вокруг целевой точки. Результаты сохраняются во внутренний список.
* '§ecount§r' запишет количество результатов сканирования в RX.
'§egetinfo §eindex§r' запишет тип излучения указанной записи в RX.
* '§egetposition §eindex§r' запишет X/Z координаты указанного события в RX. Координаты разделяются точкой с запятой.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/satellite.json b/src/main/resources/assets/hbm/manual/satellite/satellite.json index d52d9f81e..cb21df143 100644 --- a/src/main/resources/assets/hbm/manual/satellite/satellite.json +++ b/src/main/resources/assets/hbm/manual/satellite/satellite.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite"], "trigger": [], "title": { - "en_US": "Satellite" + "en_US": "Satellite", + "ru_RU": "Спутник" }, "content": { - "en_US": "Satellites can be launched into earth orbit using a [[Soyuz]] rocket. Satellites communicate with items and blocks on earth using frequencies, so in order to actually use one, it's necessary to set a random frequency in the satellite ID manager, and then copying that ID to another item, for example a satellite chip.

Some satellites can perform minor tasks when linked with certain items, like the [[depth scanning satellite|Depth Scanning Satellite]] enabling the neutrino lens, or the [[xenium resonator satellite|Xenium Resonator Satellite]] connected to a satellite laser designator allowing for short range line of sight teleportation. Satellites however are the most powerful when paired with [[Redstone over Radio]] by linking them to a [[ground station|Satellite Ground Station]].

By using a [[RoR reader|Redstone-over-Radio Reader]], ground stations can receive the RX value, which is received from the connected satellite. Each satellite can only provide one RX value at a time, and the value persists until it changes. The contents of RX depend on what function the satellite has performed prior.

By using a ground station's TX command, commands can be relayed to the connected satellite. Most commands vary between satellite types, however all satellites have a ground target, i.e. the spot on the surface they are aiming at.

The common target commands are as follows:
* '§esettarget §ex §ez§r' (Example RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Example RoR: '§6tx!gettarget§r'), writes the current target X and Z separated by semicolon to the ground station's RX
* '§egettargetx§r'
* '§egettargetz§r'

See also:
* [[Spy Satellite]]
* [[Depth Scanning Satellite]]
* [[Radar Satellite]]
* [[Asteroid Mining Ship]]
* [[Lunar Mining Ship]]
* [[Orbital Precision Laser]]
* [[Orbital Death Ray]]
* [[Xenium Resonator Satellite]]
* [[Relay Satellite]]
* [[Wideband Radio Emission Detector Satellite]]" + "en_US": "Satellites can be launched into earth orbit using a [[Soyuz]] rocket. Satellites communicate with items and blocks on earth using frequencies, so in order to actually use one, it's necessary to set a random frequency in the satellite ID manager, and then copying that ID to another item, for example a satellite chip.

Some satellites can perform minor tasks when linked with certain items, like the [[depth scanning satellite|Depth Scanning Satellite]] enabling the neutrino lens, or the [[xenium resonator satellite|Xenium Resonator Satellite]] connected to a satellite laser designator allowing for short range line of sight teleportation. Satellites however are the most powerful when paired with [[Redstone over Radio]] by linking them to a [[ground station|Satellite Ground Station]].

By using a [[RoR reader|Redstone-over-Radio Reader]], ground stations can receive the RX value, which is received from the connected satellite. Each satellite can only provide one RX value at a time, and the value persists until it changes. The contents of RX depend on what function the satellite has performed prior.

By using a ground station's TX command, commands can be relayed to the connected satellite. Most commands vary between satellite types, however all satellites have a ground target, i.e. the spot on the surface they are aiming at.

The common target commands are as follows:
* '§esettarget §ex §ez§r' (Example RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Example RoR: '§6tx!gettarget§r'), writes the current target X and Z separated by semicolon to the ground station's RX
* '§egettargetx§r'
* '§egettargetz§r'

See also:
* [[Spy Satellite]]
* [[Depth Scanning Satellite]]
* [[Radar Satellite]]
* [[Asteroid Mining Ship]]
* [[Lunar Mining Ship]]
* [[Orbital Precision Laser]]
* [[Orbital Death Ray]]
* [[Xenium Resonator Satellite]]
* [[Relay Satellite]]
* [[Wideband Radio Emission Detector Satellite]]", + "ru_RU": "Спутники можно запускать на околоземную орбиту с помощью ракеты [[Союз|Soyuz]]. Спутники связываются с предметами и блоками на Земле с помощью частот, поэтому для использования спутника необходимо установить случайную частоту в менеджере ID спутников, а затем скопировать этот ID на другой предмет, например, на спутниковый чип.

Некоторые спутники могут выполнять небольшие задачи при связывании с определёнными предметами — например, [[спутник глубинного сканирования|Depth Scanning Satellite]]] активирует нейтринную линзу, а [[спутник с Зен-резонатором|Xenium Resonator Satellite]], подключённый к спутниковому лазерному целеуказателю, позволяет телепортироваться в пределах прямой видимости на небольшие расстояния. Однако спутники наиболее эффективны в связке с системой [[Редстоун-по-Радио|Redstone over Radio]], если подключить их к [[наземной станции|Satellite Ground Station]].

С помощью [[РпР считыватель|Redstone-over-Radio Reader]] наземные станции могут получать значение RX, поступающее с подключённого спутника. Каждый спутник может передавать только одно значение RX за раз, и оно сохраняется до тех пор, пока не изменится. Содержимое RX зависит от того, какую функцию спутник выполнил перед этим.

Используя команду TX на наземной станции, можно передавать команды подключённому спутнику. Большинство команд различаются в зависимости от типа спутника, однако у всех спутников есть наземная цель — то есть точка на поверхности, на которую они наведены.

Основные команды для управления целью:
* '§esettarget §ex §ez§r' (Пример RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Пример РпР: '§6tx!gettarget§r') — записывает текущие X и Z цели через точку с запятой в RX наземной станции
* '§egettargetx§r'
* '§egettargetz§r'

См. также:
* [[Спутник-шпион|Spy Satellite]]
* [[Спутник глубинного сканирования|Depth Scanning Satellite]]
* [[Радиолокационный спутник|Radar Satellite]]
* [[Астероидный шахтёрский корабль|Asteroid Mining Ship]]
* [[Лунный шахтёрский корабль|Lunar Mining Ship]]
* [[Орбитальный прецизионный лазер|Orbital Precision Laser]]
* [[Орбитальный луч Смерти|Orbital Death Ray]]
* [[Cпутник с Зен-резонатором|Xenium Resonator Satellite]]
* [[Спутник-ретранслятор|Relay Satellite]]
* [[Спутник-детектор широкополосного радиоизлучения|Wideband Radio Emission Detector Satellite]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/scansat.json b/src/main/resources/assets/hbm/manual/satellite/scansat.json index b1b83b58d..a24ce8508 100644 --- a/src/main/resources/assets/hbm/manual/satellite/scansat.json +++ b/src/main/resources/assets/hbm/manual/satellite/scansat.json @@ -3,9 +3,10 @@ "icon": ["hbm:item.satellite", 1, 1], "trigger": [["hbm:item.satellite", 1, 1]], "title": { - "en_US": "Depth Scanning Satellite" + "en_US": "Depth Scanning Satellite", + "ru_RU": "Спутник глубинного сканирования" }, "content": { - "en_US": "The depth scanning satellite is required for the neutrino lens to work. It does not yet have any special interactions with the ground station.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" - } + "en_US": "The depth scanning satellite is required for the neutrino lens to work. It does not yet have any special interactions with the ground station.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Спутник глубинного сканирования необходим для работы нейтринной линзы. На данный момент он не имеет никаких особых взаимодействий с наземной станцией.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } diff --git a/src/main/resources/assets/hbm/manual/satellite/spysat.json b/src/main/resources/assets/hbm/manual/satellite/spysat.json index 10284f232..296829deb 100644 --- a/src/main/resources/assets/hbm/manual/satellite/spysat.json +++ b/src/main/resources/assets/hbm/manual/satellite/spysat.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite", 1, 0], "trigger": [["hbm:item.satellite", 1, 0]], "title": { - "en_US": "Spy Satellite" + "en_US": "Spy Satellite", + "ru_RU": "Спутник-шпион" }, "content": { - "en_US": "The spy satellite allows remote viewing of earth's surface. Due to RoR pixel displays not existing as of now, surface mapping functionality does not yet work. However, they can be used in detecting loaded chunks and spotting players in a small radius.

* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.
* '$egetsmog$r' writes the numeric value (rounded up) of the current target position's soot pollution to RX.
* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The spy satellite allows remote viewing of earth's surface. Due to RoR pixel displays not existing as of now, surface mapping functionality does not yet work. However, they can be used in detecting loaded chunks and spotting players in a small radius.

* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.
* '$egetsmog$r' writes the numeric value (rounded up) of the current target position's soot pollution to RX.
* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Спутник-шпион позволяет удаленно вести наблюдение за поверхностью Земли. Из-за отсутствия на данный момент пиксельных дисплеев РпР функция картографирования поверхности пока не работает. Однако их можно использовать для обнаружения прогруженных чанков и выслеживания игроков в небольшом радиусе.

* «§etargetloaded§r» записывает «TRUE» или «FALSE» в RX в зависимости от того, прогружен ли чанк, на который наведен спутник.
* «$egetsmog$r» записывает числовое значение (округленное в большую сторону) загрязнения сажей в текущей целевой позиции в RX.
* «§espotplayers§r» обнаруживает игроков на поверхности в радиусе 250 блоков и записывает все имена через точку с запятой в RX.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/xenrelay.json b/src/main/resources/assets/hbm/manual/satellite/xenrelay.json index 624506f12..57766b12e 100644 --- a/src/main/resources/assets/hbm/manual/satellite/xenrelay.json +++ b/src/main/resources/assets/hbm/manual/satellite/xenrelay.json @@ -3,9 +3,11 @@ "icon": ["hbm:item.satellite", 1, 7], "trigger": [["hbm:item.satellite", 1, 7]], "title": { - "en_US": "Xenium Resonator Satellite" + "en_US": "Xenium Resonator Satellite", + "ru_RU": "Спутник с Зен-резонатором" }, "content": { - "en_US": "The xenium resonator allows teleportation within the same dimension. It can be controlled either with a satellite designator or the satellite laser designator. When using the satellite designator, the Y value can be omitted, which will default it to surface level.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]" + "en_US": "The xenium resonator allows teleportation within the same dimension. It can be controlled either with a satellite designator or the satellite laser designator. When using the satellite designator, the Y value can be omitted, which will default it to surface level.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Спутник с Зен-резонатором позволяет телепортироваться в пределах одного и того же измерения. Им можно управлять как с помощью спутникового целеуказателя, так и с помощью спутникового лазерного целеуказателя. При использовании спутникового целеуказателя значение Y можно опустить, по умолчанию оно будет установлено на уровень поверхности.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } From a93b5cba52340f79c93ef72a59ac55f4727307e1 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Thu, 30 Jul 2026 00:21:16 +0300 Subject: [PATCH 15/40] 1 --- src/main/resources/assets/hbm/manual/satellite/detector.json | 2 +- src/main/resources/assets/hbm/manual/satellite/rayscanner.json | 2 +- src/main/resources/assets/hbm/manual/satellite/satellite.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/satellite/detector.json b/src/main/resources/assets/hbm/manual/satellite/detector.json index 76f2ded9c..4ec418e8a 100644 --- a/src/main/resources/assets/hbm/manual/satellite/detector.json +++ b/src/main/resources/assets/hbm/manual/satellite/detector.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "The wideband radio emission detector is a type of [[satellite|Satellite]] that can detect certain types of high-energy events from the entire map, albeit with low accuracy. The detector can only give a very rough idea of where such an event is taking place, for more accurate results, the area needs to be scanned wither with a [[spy satellite|Spy Satellite]] or [[narrowband scanner|Narrowband Emission Scanning Satellite]].

The types of events this satellite can pick up are as follows:
* Mini nuke explosions (low intensity, accuracy <10,000m)
* Radar (medium intensity, accuracy <2,500m)
* Particle accelerator operations (medium intensity, accuracy <2,500m)
Nuclear explosions (high intensity, accuracy <500m)

Events are timed, medium intense ones are the shortest lived as they only show up for half a second, while other events can show up for multiple seconds or even up to a minute. It is therefore important to scan any given area multiple times in rapid succession to get an accurate result.

* '§esurvey§r' will report any recent events that have not timed out yet. The detector's field of view covers the entire map, so there is no range limitations. All detected results are saved to an internal list.
* '§ecount§r' will write the amount of detected events to RX.
* '§egettype §eindex§r' will write the type (LOW/MEDIUM/HIGH) of the specified event to RX.
* '§egetposition §eindex§r' will write the estimated X/Z position of the specified event to RX. The coordinated are separated by semicolon.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", - "ru_RU": "Детектор широкополосного радиоизлучения — это тип [[спутника|Satellite]], который может обнаруживать определённые типы высокоэнергетических событий по всей карте, хотя и с низкой точностью. Детектор даёт лишь очень приблизительное представление о том, где именно происходит событие, поэтому для более точных результатов область необходимо отсканировать с помощью [[спутника-шпиона|Spy Satellite]] или [[узкополосного сканер|Narrowband Emission Scanning Satellite]].

Типы событий, которые может засечь этот спутник:
* Взрывы мини-ядерок (низкая интенсивность, точность <10 000м)
* Радар (средняя интенсивность, точность <2 500м)
* Работа ускорителей частиц (средняя интенсивность, точность <2 500м)
Ядерные взрывы (высокая интенсивность, точность <500м)

События ограничены по времени: события средней интенсивности являются самыми короткоживущими и отображаются всего полсекунды, в то время как другие могут висеть от нескольких секунд до минуты. Поэтому важно сканировать область несколько раз подряд с коротким интервалом, чтобы получить точный результат.

* '§esurvey§r' сообщит обо всех недавних событиях, время которых ещё не истекло. Зона обзора детектора покрывает всю карту, поэтому ограничений по дальности нет. Все обнаруженные результаты сохраняются во внутренний список.
* '§ecount§r' запишет количество обнаруженных событий в RX.
* '§egettype §eindex§r' запишет тип (LOW/MEDIUM/HIGH) указанного события в RX.
* '§egetposition §eindex§r' запишет примерные X/Z координаты указанного события в RX. Координаты разделяются точкой с запятой.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" + "ru_RU": "Детектор широкополосного радиоизлучения — это тип [[спутника|Satellite]], который может обнаруживать определённые типы высокоэнергетических событий по всей карте, хотя и с низкой точностью. Детектор даёт лишь очень приблизительное представление о том, где именно происходит событие, поэтому для более точных результатов область необходимо отсканировать с помощью [[спутника-шпиона|Spy Satellite]] или [[узкополосного сканера|Narrowband Emission Scanning Satellite]].

Типы событий, которые может засечь этот спутник:
* Взрывы мини-ядерок (низкая интенсивность, точность <10 000м)
* Радар (средняя интенсивность, точность <2 500м)
* Работа ускорителей частиц (средняя интенсивность, точность <2 500м)
Ядерные взрывы (высокая интенсивность, точность <500м)

События ограничены по времени: события средней интенсивности являются самыми короткоживущими и отображаются всего полсекунды, в то время как другие могут висеть от нескольких секунд до минуты. Поэтому важно сканировать область несколько раз подряд с коротким интервалом, чтобы получить точный результат.

* '§esurvey§r' сообщит обо всех недавних событиях, время которых ещё не истекло. Зона обзора детектора покрывает всю карту, поэтому ограничений по дальности нет. Все обнаруженные результаты сохраняются во внутренний список.
* '§ecount§r' запишет количество обнаруженных событий в RX.
* '§egettype §eindex§r' запишет тип (LOW/MEDIUM/HIGH) указанного события в RX.
* '§egetposition §eindex§r' запишет примерные X/Z координаты указанного события в RX. Координаты разделяются точкой с запятой.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/rayscanner.json b/src/main/resources/assets/hbm/manual/satellite/rayscanner.json index 0c8830c07..1887cdfdb 100644 --- a/src/main/resources/assets/hbm/manual/satellite/rayscanner.json +++ b/src/main/resources/assets/hbm/manual/satellite/rayscanner.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "The narrowband scanner can detect certain high-energy events with high precision in a small area. While the [[wideband detector|Wideband Radio Emission Detector Satellite]] can only give a rough estimation of where a small number of things are happening, the narrowband scanner can detect more types of emission and pinpint their location.

Types of emissions that can be detected include:
* '§6NEUTRON_EMISSION§r' from nuclear reactors
* '§6HIGH_ENERGY_PARTICLES§r' from fusion reacotrs and particle accelerators
* '§6RADAR_WAVES§r' from terrestrial radar
* '§6RADIO_WAVES§r' from satellite ground stations with active TX

Like with the wideband detector, these emissions are timed, certain events only happen once or in a time interval, so for best results, repeated scans over a timespan are recommended.

* '§esurvey§r' will perform a scan with a radius of 250m around the target location. The results are saved in an internal list.
* '§ecount§r' will write the amount of scan results to RX.
* '§egetinfo §eindex§r' will write the specified entry's emission type to RX.
* '§egetposition §eindex§r' will write the X/Z position of the specified event to RX. The coordinated are separated by semicolon.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", - "ru_RU": "Спутник-сканер узкополосного излучения может с высокой точностью обнаруживать определённые высокоэнергетические события на небольшой площади. В то время как [[широкополосный детектор|Wideband Radio Emission Detector Satellite]] даёт лишь приблизительную оценку происходящего, узкополосный сканер видит больше типов излучения и точно определяет их местоположение.

Типы излучений, которые могут быть обнаружены:
* '§6NEUTRON_EMISSION§r' от ядерных реакторов
* '§6HIGH_ENERGY_PARTICLES§r' от термоядерных реакторов и ускорителей частиц
* '§6RADAR_WAVES§r' от наземных радаров
* '§6RADIO_WAVES§r' от спутниковых наземных станций с активным TX

Как и с широкополосным детектором, эти излучения привязаны ко времени: некоторые события происходят лишь единожды или с определённым интервалом, поэтому для лучших результатов рекомендуется проводить повторные сканирования в течение некоторого времени.

'§esurvey§r' выполняет сканирование в радиусе 250м вокруг целевой точки. Результаты сохраняются во внутренний список.
* '§ecount§r' запишет количество результатов сканирования в RX.
'§egetinfo §eindex§r' запишет тип излучения указанной записи в RX.
* '§egetposition §eindex§r' запишет X/Z координаты указанного события в RX. Координаты разделяются точкой с запятой.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" + "ru_RU": "Спутник-сканер узкополосного излучения может с высокой точностью обнаруживать определённые высокоэнергетические события на небольшой площади. В то время как [[широкополосный детектор|Wideband Radio Emission Detector Satellite]] даёт лишь приблизительную оценку происходящего, узкополосный сканер видит больше типов излучения и точно определяет их местоположение.

Типы излучений, которые могут быть обнаружены:
* '§6NEUTRON_EMISSION§r' от ядерных реакторов
* '§6HIGH_ENERGY_PARTICLES§r' от термоядерных реакторов и ускорителей частиц
* '§6RADAR_WAVES§r' от наземных радаров
* '§6RADIO_WAVES§r' от спутниковых наземных станций с активным TX

Как в случае с широкополосным детектором, эти излучения привязаны ко времени: некоторые события происходят лишь единожды или с определённым интервалом, поэтому для лучших результатов рекомендуется проводить повторные сканирования в течение некоторого времени.

'§esurvey§r' выполняет сканирование в радиусе 250м вокруг целевой точки. Результаты сохраняются во внутренний список.
* '§ecount§r' запишет количество результатов сканирования в RX.
'§egetinfo §eindex§r' запишет тип излучения указанной записи в RX.
* '§egetposition §eindex§r' запишет X/Z координаты указанного события в RX. Координаты разделяются точкой с запятой.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } diff --git a/src/main/resources/assets/hbm/manual/satellite/satellite.json b/src/main/resources/assets/hbm/manual/satellite/satellite.json index cb21df143..086c7e622 100644 --- a/src/main/resources/assets/hbm/manual/satellite/satellite.json +++ b/src/main/resources/assets/hbm/manual/satellite/satellite.json @@ -8,6 +8,6 @@ }, "content": { "en_US": "Satellites can be launched into earth orbit using a [[Soyuz]] rocket. Satellites communicate with items and blocks on earth using frequencies, so in order to actually use one, it's necessary to set a random frequency in the satellite ID manager, and then copying that ID to another item, for example a satellite chip.

Some satellites can perform minor tasks when linked with certain items, like the [[depth scanning satellite|Depth Scanning Satellite]] enabling the neutrino lens, or the [[xenium resonator satellite|Xenium Resonator Satellite]] connected to a satellite laser designator allowing for short range line of sight teleportation. Satellites however are the most powerful when paired with [[Redstone over Radio]] by linking them to a [[ground station|Satellite Ground Station]].

By using a [[RoR reader|Redstone-over-Radio Reader]], ground stations can receive the RX value, which is received from the connected satellite. Each satellite can only provide one RX value at a time, and the value persists until it changes. The contents of RX depend on what function the satellite has performed prior.

By using a ground station's TX command, commands can be relayed to the connected satellite. Most commands vary between satellite types, however all satellites have a ground target, i.e. the spot on the surface they are aiming at.

The common target commands are as follows:
* '§esettarget §ex §ez§r' (Example RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Example RoR: '§6tx!gettarget§r'), writes the current target X and Z separated by semicolon to the ground station's RX
* '§egettargetx§r'
* '§egettargetz§r'

See also:
* [[Spy Satellite]]
* [[Depth Scanning Satellite]]
* [[Radar Satellite]]
* [[Asteroid Mining Ship]]
* [[Lunar Mining Ship]]
* [[Orbital Precision Laser]]
* [[Orbital Death Ray]]
* [[Xenium Resonator Satellite]]
* [[Relay Satellite]]
* [[Wideband Radio Emission Detector Satellite]]", - "ru_RU": "Спутники можно запускать на околоземную орбиту с помощью ракеты [[Союз|Soyuz]]. Спутники связываются с предметами и блоками на Земле с помощью частот, поэтому для использования спутника необходимо установить случайную частоту в менеджере ID спутников, а затем скопировать этот ID на другой предмет, например, на спутниковый чип.

Некоторые спутники могут выполнять небольшие задачи при связывании с определёнными предметами — например, [[спутник глубинного сканирования|Depth Scanning Satellite]]] активирует нейтринную линзу, а [[спутник с Зен-резонатором|Xenium Resonator Satellite]], подключённый к спутниковому лазерному целеуказателю, позволяет телепортироваться в пределах прямой видимости на небольшие расстояния. Однако спутники наиболее эффективны в связке с системой [[Редстоун-по-Радио|Redstone over Radio]], если подключить их к [[наземной станции|Satellite Ground Station]].

С помощью [[РпР считыватель|Redstone-over-Radio Reader]] наземные станции могут получать значение RX, поступающее с подключённого спутника. Каждый спутник может передавать только одно значение RX за раз, и оно сохраняется до тех пор, пока не изменится. Содержимое RX зависит от того, какую функцию спутник выполнил перед этим.

Используя команду TX на наземной станции, можно передавать команды подключённому спутнику. Большинство команд различаются в зависимости от типа спутника, однако у всех спутников есть наземная цель — то есть точка на поверхности, на которую они наведены.

Основные команды для управления целью:
* '§esettarget §ex §ez§r' (Пример RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Пример РпР: '§6tx!gettarget§r') — записывает текущие X и Z цели через точку с запятой в RX наземной станции
* '§egettargetx§r'
* '§egettargetz§r'

См. также:
* [[Спутник-шпион|Spy Satellite]]
* [[Спутник глубинного сканирования|Depth Scanning Satellite]]
* [[Радиолокационный спутник|Radar Satellite]]
* [[Астероидный шахтёрский корабль|Asteroid Mining Ship]]
* [[Лунный шахтёрский корабль|Lunar Mining Ship]]
* [[Орбитальный прецизионный лазер|Orbital Precision Laser]]
* [[Орбитальный луч Смерти|Orbital Death Ray]]
* [[Cпутник с Зен-резонатором|Xenium Resonator Satellite]]
* [[Спутник-ретранслятор|Relay Satellite]]
* [[Спутник-детектор широкополосного радиоизлучения|Wideband Radio Emission Detector Satellite]]" + "ru_RU": "Спутники можно запускать на околоземную орбиту с помощью ракеты [[Союз|Soyuz]]. Спутники связываются с предметами и блоками на Земле с помощью частот, поэтому для использования спутника необходимо установить случайную частоту в менеджере ID спутников, а затем скопировать этот ID на другой предмет, например, на спутниковый чип.

Некоторые спутники могут выполнять небольшие задачи при связывании с определёнными предметами — например, [[спутник глубинного сканирования|Depth Scanning Satellite]]] активирует нейтринную линзу, а [[спутник с Зен-резонатором|Xenium Resonator Satellite]], подключённый к спутниковому лазерному целеуказателю, позволяет телепортироваться в пределах прямой видимости на небольшие расстояния. Однако спутники наиболее эффективны в связке с системой [[Редстоун-по-Радио|Redstone over Radio]], если подключить их к [[наземной станции|Satellite Ground Station]].

С помощью [[РпР считывателя|Redstone-over-Radio Reader]] наземные станции могут получать значение RX, поступающее с подключённого спутника. Каждый спутник может передавать только одно значение RX за раз, и оно сохраняется до тех пор, пока не изменится. Содержимое RX зависит от того, какую функцию спутник выполнил перед этим.

Используя команду TX на наземной станции, можно передавать команды подключённому спутнику. Большинство команд различаются в зависимости от типа спутника, однако у всех спутников есть наземная цель — то есть точка на поверхности, на которую они наведены.

Основные команды для управления целью:
* '§esettarget §ex §ez§r' (Пример RoR: '§6tx!settarget §6200 §6300§r')
* '§egettarget§r' (Пример РпР: '§6tx!gettarget§r') — записывает текущие X и Z цели через точку с запятой в RX наземной станции
* '§egettargetx§r'
* '§egettargetz§r'

См. также:
* [[Спутник-шпион|Spy Satellite]]
* [[Спутник глубинного сканирования|Depth Scanning Satellite]]
* [[Радиолокационный спутник|Radar Satellite]]
* [[Астероидный шахтёрский корабль|Asteroid Mining Ship]]
* [[Лунный шахтёрский корабль|Lunar Mining Ship]]
* [[Орбитальный прецизионный лазер|Orbital Precision Laser]]
* [[Орбитальный луч Смерти|Orbital Death Ray]]
* [[Cпутник с Зен-резонатором|Xenium Resonator Satellite]]
* [[Спутник-ретранслятор|Relay Satellite]]
* [[Спутник-детектор широкополосного радиоизлучения|Wideband Radio Emission Detector Satellite]]" } } From 9a2eb731adb90863063ba24ca551c890226fec09 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 30 Jul 2026 14:50:48 +0200 Subject: [PATCH 16/40] they are eating my flesh --- changelog | 7 ++- gradle.properties | 2 +- .../java/com/hbm/blocks/BlockDummyable.java | 50 ++++------------- .../com/hbm/blocks/network/PylonRedWire.java | 3 +- .../com/hbm/handler/MultiblockHandlerXR.java | 53 ------------------- .../java/com/hbm/hazard/HazardRegistry.java | 9 ++++ .../java/com/hbm/items/tool/ItemWrench.java | 16 ++++-- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../saveddata/satellites/SatelliteBase.java | 1 - .../tileentity/network/TileEntityPylon.java | 11 ++++ .../com/hbm/world/gen/NTMWorldGenerator.java | 2 +- 11 files changed, 52 insertions(+), 104 deletions(-) diff --git a/changelog b/changelog index b16a63a42..8d625149d 100644 --- a/changelog +++ b/changelog @@ -12,6 +12,7 @@ * Spy satellites now have the `getsmog` command, checking for soot pollution on the current target coordinate * The research reactor and breeding reactor have been deprecated * The reactors and the plate fuel no longer have recipes, but existing ones will continue to function until they run out of fuel +* Removed orphaned multiblock dummies clearing themselves via random ticks, only block updates can do that now ## Fixed * Fixed pile fuel loader temperature reading not working @@ -23,4 +24,8 @@ * Fixed QMAW manual pages not being able to be overwritten by resource packs * This feature was a major pain in the ass to actually make, and it apparently never even worked until now * Fixed satellite groundstation losing its frequency on relog -* Added extra safeguarding preventing crashes caused by multiblock door tile entities not bound to the correct block \ No newline at end of file +* Added extra safeguarding preventing crashes caused by multiblock door tile entities not bound to the correct block +* Fixed new pile rods now having radiation values +* Potentially fixed a multiblock migration issue where standard electricity pylons would disappear due to changes in expected metadata +* Fixed the pipe wrench assuming anchor pos 0/0/0 when NBT data is initialized as well as clearing all NBT data if a pipe connection is created +* Fixed tower base structures spawning in sandy biomes \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 283f402c4..e0bb41b87 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5768 +mod_build_number=5771 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index 1cca3e365..01c039ade 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -40,7 +40,6 @@ import net.minecraft.client.renderer.Tessellator; import java.util.ArrayList; import java.util.List; -import java.util.Random; import java.util.Set; import org.lwjgl.opengl.GL11; @@ -49,7 +48,6 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl public BlockDummyable(Material mat) { super(mat); - this.setTickRandomly(true); } /// BLOCK METADATA /// @@ -81,26 +79,17 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl overrideTileMeta = 0; } + @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { - super.onNeighborBlockChange(world, x, y, z, block); - if(safeRem) - return; - - destroyIfOrphan(world, x, y, z); - } - - public void updateTick(World world, int x, int y, int z, Random rand) { - - super.updateTick(world, x, y, z, rand); + if(safeRem) return; destroyIfOrphan(world, x, y, z); } private void destroyIfOrphan(World world, int x, int y, int z) { - if(world.isRemote) - return; + if(world.isRemote) return; int metadata = world.getBlockMetadata(x, y, z); @@ -194,18 +183,10 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl ForgeDirection dir = ForgeDirection.NORTH; - if(i == 0) { - dir = ForgeDirection.getOrientation(2); - } - if(i == 1) { - dir = ForgeDirection.getOrientation(5); - } - if(i == 2) { - dir = ForgeDirection.getOrientation(3); - } - if(i == 3) { - dir = ForgeDirection.getOrientation(4); - } + if(i == 0) dir = ForgeDirection.getOrientation(2); + if(i == 1) dir = ForgeDirection.getOrientation(5); + if(i == 2) dir = ForgeDirection.getOrientation(3); + if(i == 3) dir = ForgeDirection.getOrientation(4); dir = getDirModified(dir); @@ -373,20 +354,9 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl super.breakBlock(world, x, y, z, b, i); } - @Override - public int getRenderType() { - return -1; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } + @Override public int getRenderType() { return -1; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } /** * @returns an int array with six fields, describing the amount of dummy blocks in each direction around the core. order is UP, DOWN, FORWARD, BACKWARD, LEFT, RIGHT diff --git a/src/main/java/com/hbm/blocks/network/PylonRedWire.java b/src/main/java/com/hbm/blocks/network/PylonRedWire.java index 7c14957c1..1ee3e7e0d 100644 --- a/src/main/java/com/hbm/blocks/network/PylonRedWire.java +++ b/src/main/java/com/hbm/blocks/network/PylonRedWire.java @@ -22,8 +22,7 @@ public class PylonRedWire extends BlockDummyable implements ITooltipProvider { @Override public TileEntity createNewTileEntity(World world, int meta) { - - if(meta >= 12) return new TileEntityPylon(); + if(meta == 0 || meta >= 12) return new TileEntityPylon(); return null; } diff --git a/src/main/java/com/hbm/handler/MultiblockHandlerXR.java b/src/main/java/com/hbm/handler/MultiblockHandlerXR.java index 7f054d8c7..12a3c689d 100644 --- a/src/main/java/com/hbm/handler/MultiblockHandlerXR.java +++ b/src/main/java/com/hbm/handler/MultiblockHandlerXR.java @@ -96,36 +96,6 @@ public class MultiblockHandlerXR { BlockDummyable.safeRem = false; } - @Deprecated - public static void emptySpace(World world, int x, int y, int z, int[] dim, Block block, ForgeDirection dir) { - - if(dim == null || dim.length != 6) - return; - - int count = 0; - - System.out.println("emptyspace is deprecated and shouldn't even be executed"); - - int[] rot = rotate(dim, dir); - - for(int a = x - rot[4]; a <= x + rot[5]; a++) { - for(int b = y - rot[1]; b <= y + rot[0]; b++) { - for(int c = z - rot[2]; c <= z + rot[3]; c++) { - - if(world.getBlock(a, b, c) == block) - world.setBlockToAir(a, b, c); - - count++; - - if(count > 2000) { - System.out.println("emptyspace: ded " + a + " " + b + " " + c); - return; - } - } - } - } - } - public static int[] rotate(int[] dim, ForgeDirection dir) { if(dim == null) return null; @@ -148,27 +118,4 @@ public class MultiblockHandlerXR { return dim; } - - public static double[] rotateDouble(double[] dim, ForgeDirection dir) { - - if(dim == null) return null; - if(dir == ForgeDirection.SOUTH) return dim; - - if(dir == ForgeDirection.NORTH) { - // U D N S W E - return new double[] { dim[0], dim[1], dim[3], dim[2], dim[5], dim[4] }; - } - - if(dir == ForgeDirection.EAST) { - // U D N S W E - return new double[] { dim[0], dim[1], dim[5], dim[4], dim[2], dim[3] }; - } - - if(dir == ForgeDirection.WEST) { - // U D N S W E - return new double[] { dim[0], dim[1], dim[4], dim[5], dim[3], dim[2] }; - } - - return dim; - } } diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index 4347c21fb..e663fc284 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -14,6 +14,7 @@ import com.hbm.inventory.material.MaterialShapes; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; +import com.hbm.items.machine.ItemPileRodMK2.EnumPileRod; import com.hbm.items.machine.ItemRTGPelletDepleted.DepletedRTGMaterial; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType; @@ -344,6 +345,14 @@ public class HazardRegistry { registerRTGPellet(pellet_rtg_gold, au198 * rtg, 0, 5F); registerRTGPellet(pellet_rtg_americium, am241 * rtg, 0); HazardSystem.register(new ItemStack(pellet_rtg_depleted, 1, DepletedRTGMaterial.NEPTUNIUM.ordinal()), makeData(RADIATION, np237 * rtg)); + + + HazardSystem.register(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.RA226BE.ordinal()), makeData(RADIATION, rabe * billet * 3)); + HazardSystem.register(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PO210BE.ordinal()), makeData(RADIATION, pobe * billet * 3)); + HazardSystem.register(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.NU.ordinal()), makeData(RADIATION, u * billet * 3)); + HazardSystem.register(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.PU239.ordinal()), makeData(RADIATION, pu239 * billet * 3)); + HazardSystem.register(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.RGP.ordinal()), makeData(RADIATION, purg * billet * 3)); + HazardSystem.register(new ItemStack(ModItems.pile_rod, 1, EnumPileRod.WASTE.ordinal()), makeData(RADIATION, wst * billet * 3)); HazardSystem.register(pile_rod_uranium, makeData(RADIATION, u * billet * 3)); HazardSystem.register(pile_rod_pu239, makeData(RADIATION, !GeneralConfig.enable528 ? purg * billet + pu239 * billet + u * billet : purg * billet + pu239 * billet + wst * billet)); diff --git a/src/main/java/com/hbm/items/tool/ItemWrench.java b/src/main/java/com/hbm/items/tool/ItemWrench.java index c7dbe6f5c..871d58cae 100644 --- a/src/main/java/com/hbm/items/tool/ItemWrench.java +++ b/src/main/java/com/hbm/items/tool/ItemWrench.java @@ -44,8 +44,11 @@ public class ItemWrench extends ItemSword { TileEntity te = world.getTileEntity(x, y, z); if(te != null && te instanceof TileEntityPipelineBase) { + + if(stack.stackTagCompound == null) + stack.stackTagCompound = new NBTTagCompound(); - if(stack.stackTagCompound == null) { + if(!stack.stackTagCompound.hasKey("x")) { stack.stackTagCompound = new NBTTagCompound(); stack.stackTagCompound.setInteger("x", x); @@ -77,13 +80,18 @@ public class ItemWrench extends ItemSword { case 3: player.addChatMessage(new ChatComponentText("Pipe error - Pipe anchor is too far away")); break; case 4: player.addChatMessage(new ChatComponentText("Pipe error - Pipe anchor fluid types do not match")); break; } - - stack.stackTagCompound = null; + + stack.stackTagCompound.removeTag("x"); + stack.stackTagCompound.removeTag("y"); + stack.stackTagCompound.removeTag("z"); } else { + stack.stackTagCompound.removeTag("x"); + stack.stackTagCompound.removeTag("y"); + stack.stackTagCompound.removeTag("z"); + player.addChatMessage(new ChatComponentText("Pipe error")); - stack.stackTagCompound = null; } } diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 626bc5a1b..79b50041b 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5768)"; + public static final String VERSION = "1.0.27 BETA (5771)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/saveddata/satellites/SatelliteBase.java b/src/main/java/com/hbm/saveddata/satellites/SatelliteBase.java index 8dc201a85..15a7fb2d8 100644 --- a/src/main/java/com/hbm/saveddata/satellites/SatelliteBase.java +++ b/src/main/java/com/hbm/saveddata/satellites/SatelliteBase.java @@ -17,7 +17,6 @@ public abstract class SatelliteBase { public static final String CMD_GETTARGETX = "gettargetx"; public static final String CMD_GETTARGETZ = "gettargetz"; - public int range = 1_000; public int targetX; public int targetZ; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java b/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java index 99f185e8b..25fdcf046 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPylon.java @@ -11,6 +11,17 @@ import net.minecraftforge.common.util.ForgeDirection; public class TileEntityPylon extends TileEntityPylonBase { + @Override + public void updateEntity() { + + // migration + if(!worldObj.isRemote && this.getBlockMetadata() == 0) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, 12, 3); + } + + super.updateEntity(); + } + @Override public ConnectionType getConnectionType() { return ConnectionType.SINGLE; diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index 94d6737f9..13c19938f 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -254,7 +254,7 @@ public class NTMWorldGenerator implements IWorldGenerator { spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsJSpawnWeight : 0; }}); NBTStructure.registerStructure(0, new SpawnCondition("tower_base") {{ - canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome); + canSpawn = biome -> biome.heightVariation <= 0.3F && !isWaterBiome(biome) && !BiomeDictionary.isBiomeOfType(biome, Type.SANDY); structure = new JigsawPiece("tower_base", StructureManager.tower_base, -6); spawnWeight = StructureConfig.towerBaseSpawnWeight; }}); From 647715ed10d061454e6892390b2c4c25984fc509 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Thu, 30 Jul 2026 16:02:39 +0300 Subject: [PATCH 17/40] fix --- src/main/resources/assets/hbm/manual/machine/heatsource.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/machine/heatsource.json b/src/main/resources/assets/hbm/manual/machine/heatsource.json index 2c695f1f3..16352ed53 100644 --- a/src/main/resources/assets/hbm/manual/machine/heatsource.json +++ b/src/main/resources/assets/hbm/manual/machine/heatsource.json @@ -10,6 +10,6 @@ "content": { "en_US": "Many machines require TU - thermal units - to function. TU is transfered via copper contacts on the undersides of machines, they cannot be connected with pipes or cables.

Machines that can provide heat are:
[[Firebox]]
[[Heating Oven]]
[[Fluid Burner]]
[[Electric Heater]]
[[Heat Exchanging Heater]]

Machines that use TU include, but are not limited to:
[[Stirling Engine]]
[[Combination Oven]]
[[Boiler]]
[[Steel Furnace]]
[[Crucible]]", "zh_CN": "很多机器需要TU——“热量单位”才能工作。TU通过机器底部的铜触点进行传输, 而不能用线缆或管道等传输。

可提供热量的机器包括但不限于:
[[燃烧室|Firebox]]
[[加热炉|Heating Oven]]
[[流体燃烧器|Fluid Burner]]
[[电加热器|Electric Heater]]
[[换热加热器|Heat Exchanging Heater]]

使用TU的机器包括但不限于:
[[斯特林发电机|Stirling Engine]]
[[复式炼焦炉|Combination Oven]]
[[锅炉|Boiler]]
[[钢炉|Steel Furnace]]
[[坩埚|Crucible]]", - "ru_RU": "Для работы многих машин требуются TU — тепловые единицы. Машины передают TU через медные контакты, они не могут быть соединены трубами или проводами.

К устройствам, которые могут подавать тепло, относятся:
[[Топка|Firebox]]
[[Нагревательная печь|Heating Oven]]
[[Жидкостная горелка|Fluid Burner]]
[[Электрический нагреватель|Electric Heater]]
[[Теплообменный нагреватель|Heat Exchanging Heater]]

Вот некоторые примеры машин, использующих TU:
[[Генератор Стирлинга|[Stirling Engine]]
[[Коксовая печь|Combination Oven]]
[[Бойлер|Boiler]]
[[Стальная печь|[Steel Furnace]]
[[Литейный тигель|Crucible]]" + "ru_RU": "Для работы многих машин требуются TU — тепловые единицы. Машины передают TU через медные контакты, они не могут быть соединены трубами или проводами.

К устройствам, которые могут подавать тепло, относятся:
[[Топка|Firebox]]
[[Нагревательная печь|Heating Oven]]
[[Жидкостный нагреватель|Fluid Burner]]
[[Электрический нагреватель|Electric Heater]]
[[Теплообменный нагреватель|Heat Exchanging Heater]]

Вот некоторые примеры машин, использующих TU:
[[Генератор Стирлинга|[Stirling Engine]]
[[Коксовая печь|Combination Oven]]
[[Бойлер|Boiler]]
[[Стальная печь|[Steel Furnace]]
[[Литейный тигель|Crucible]]" } } From 78ac75b6d79449c302ac01606f84e4b39e5c322e Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Thu, 30 Jul 2026 16:39:21 +0300 Subject: [PATCH 18/40] =?UTF-8?q?=D0=94=D0=B5=D0=BC=D0=BE=D0=BA=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 10cfaa558..6ec950c2d 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1637,14 +1637,14 @@ item.ammo_fuel_gas.name=Бак с газом item.ammo_fuel_napalm.name=Бак с напалмом item.ammo_fuel_phosphorus.name=Бак с белым фосфором item.ammo_fuel_vaporizer.name=Бак испарителя -item.ammo_himars_standard.name=Контейнер управляемых ракет 227-мм (Стандартный) -item.ammo_himars_standard_he.name=Контейнер управляемых ракет 227-мм (Фугасный) -item.ammo_himars_standard_lava.name=Контейнер управляемых ракет 227-мм (Лавовый) -item.ammo_himars_standard_mini_nuke.name=Контейнер управляемых ракет 227-мм (Мини-ядерный) -item.ammo_himars_standard_tb.name=Контейнер управляемых ракет 227-мм (Термобарический) -item.ammo_himars_standard_wp.name=Контейнер управляемых ракет 227-мм (Фосфорный) -item.ammo_himars_single.name=Контейнер управляемой ракеты 610-мм (Стандартный) -item.ammo_himars_single_tb.name=Контейнер управляемой ракеты 610-мм (Термобарический) +item.ammo_himars_standard.name=Контейнер 227-мм управляемых ракет (Стандартный) +item.ammo_himars_standard_he.name=Контейнер 227-мм управляемых ракет (Фугасный) +item.ammo_himars_standard_lava.name=Контейнер 227-мм управляемых ракет (Лавовый) +item.ammo_himars_standard_mini_nuke.name=Контейнер 227-мм управляемых ракет (Мини-ядерный) +item.ammo_himars_standard_tb.name=Контейнер 227-мм управляемых ракет (Термобарический) +item.ammo_himars_standard_wp.name=Контейнер 227-мм управляемых ракет (Фосфорный) +item.ammo_himars_single.name=Контейнер 610-мм управляемой ракеты (Стандартный) +item.ammo_himars_single_tb.name=Контейнер 610-мм управляемой ракеты (Термобарический) item.ammo_shell.name=240мм Снаряд item.ammo_shell_apfsds_du.name=240мм APFSTS-DU item.ammo_shell_apfsds_t.name=240мм APFSTS-T From 57b0972b2c1e74f74c72f7ae613cfdd6b132d298 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Thu, 30 Jul 2026 21:57:16 +0300 Subject: [PATCH 19/40] 12 --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- src/main/resources/assets/hbm/manual/pile/pileop.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 6ec950c2d..0c0d2ee04 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -4162,7 +4162,7 @@ item.safety_fuse.name=Фитиль item.sat_chip.name=Спутниковый ID-чип item.sat_coord.name=Спутниковый целеуказатель item.sat_designator.name=Спутниковый лазерный целеуказатель -item.sat_gerald.name=Геральд Строительный Андроид +item.sat_gerald.name=Строительный андроид Геральд item.sat_interface.name=Интерфейс спутникового управления item.satellite.death_ray.name=Орбитальный луч Смерти item.satellite.detector.name=Спутник-детектор широкополосного радиоизлучения diff --git a/src/main/resources/assets/hbm/manual/pile/pileop.json b/src/main/resources/assets/hbm/manual/pile/pileop.json index a37794d3c..425dadb3d 100644 --- a/src/main/resources/assets/hbm/manual/pile/pileop.json +++ b/src/main/resources/assets/hbm/manual/pile/pileop.json @@ -4,7 +4,7 @@ "trigger": [], "title": { "en_US": "Chicago Pile Operation", - "ru_RU": "Управление Чикагской поленницы" + "ru_RU": "Управление Чикагской поленницей" }, "content": { "en_US": "The [[Chicago Pile]] requires at least one fuel channel with some sort of neutron source, being radium-226-beryllium or polonium-210-beryllium rods. It's safest and easiest to simply have one fuel channel dedicated to the neutron sources, although mixing neutron sources in with the regular fuel is also an option. [[Ventilation|Chicago Pile Vent]] is also required before actually using fuel, the amount of compressed air used over time is static no matter how hot the reactor is, so doing a dry-run to see if the [[compressor|Compressor]] setup is sufficient is recommended.

Once ventilation and neutron sources are in place, fuel can be added, usually in the form of natural uranium which is bred into plutonium-239. The [[fuel loader|Chicago Pile Fuel Loader]] will only load one rod at a time, simply load as many rods as the channel can hold. Any extra rod loaded will cause the last rod in the channel to be pushed out the other end, where it can be collected with a hopper.

The supplied fuel will be bred as long as its in the reactor. Pu-239 can also be bred into RGP, which can be further bred into nuclear waste. Therefore, leaving fuel in the reactor for too long is undesirable. For this, the fuel loader can be read with an [[RoR reader|Redstone-over-Radio Reader]], which will report the fuel's lifetime and current type in the form of the numeric metadata of the item. For example, Plutonium-239 rods have a meta of 4. Using an [[RoR logic receiver|Redstone-over-Radio Logic Receiver]], this meta can be detected, causing a redstone signal to be sent to the fuel loader, pushing that fuel rod out.

It is not only desirable to eject the fuel in time due to the purity, but also because nuclear waste has a high heat output, which might destroy Piles not prepared for it. If no new fuel is available and the existing loaded fuel is intended to be ejected, rods made from zirconium are ideal, since they are cheap, inert, and transparent to neutrons, not adding any heat while not interfering with the Pile's reaction either.

In an emergency, should the Pile overheat, it will catch fire, explode, and eject many flaming graphite bricks which also explode into fire, setting the surroundings ablaze. It is recommended to keep the Pile in a small room, away from flammable material, and to keep a fire extinguisher nearby.

For people who want to make the most out of their fuel, using [[RoR controllers|Redstone-over-Radio Controller]] to adjust the control rod settings automatically may be desirable. Especially in larger setups, control rods are important to prevent the Pile from quickly overheating, and having an adaptive system controlled either by RoR logic receivers or an [[AUTOCAL]] unit can allow the Pile to run reasonably hot without exploding.", From 7f6224045dc9f0fef1640a085b19584d21373023 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Thu, 30 Jul 2026 23:26:54 +0300 Subject: [PATCH 20/40] 1 --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 0c0d2ee04..8b4b439ce 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2287,7 +2287,7 @@ item.circuit_star_piece.mem_16k_d.name=ЗД - Слот для карты Пам item.circuit_tantalium.name=Конденсаторная плата item.circuit_tantalium_raw.name=Сборка конденсаторной платы item.cladding_desh.name=Деш-обшивка -item.cladding_ghiorsium.name=Гиорсиум-обшивка +item.cladding_ghiorsium.name=Гиорсиевая обшивка item.cladding_iron.name=Железная обшивка item.cladding_lead.name=Свинцовая обшивка item.cladding_obsidian.name=Обсидиановая обшивка @@ -2922,7 +2922,7 @@ item.ingot_schrabidium.name=Шрабидиевый слиток item.ingot_schrabidium_fuel.name=Слиток шрабидиевого топлива item.ingot_schraranium.name=Шрараниевый слиток item.ingot_schraranium.desc=Делается из урана в шрабидиевом трансмутаторе -item.ingot_semtex.name=Брусок семтекс +item.ingot_semtex.name=Брусок семтекса item.ingot_semtex.desc=Пластиковая взрывчатка Семтекс H$Эффективное взрывчатое вещество для многих применений.$Съедобно item.ingot_silicon.name=Брусок кремния item.ingot_smore.name=Слиток с'мора From 7c2b6a0201be1ff075ee245f5d6123dc2ffa34ef Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 31 Jul 2026 11:40:09 +0200 Subject: [PATCH 21/40] intermission --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../hbm/blocks/machine/MachineRockMill.java | 44 + .../handler/nei/RockMillRecipeHandler.java | 13 + .../inventory/recipes/RockMillRecipes.java | 22 + src/main/java/com/hbm/main/ClientProxy.java | 1 + src/main/java/com/hbm/main/NEIRegistry.java | 1 + .../java/com/hbm/main/ResourceManager.java | 14 +- .../module/machine/ModuleMachineRockMill.java | 39 + .../hbm/render/tileentity/RenderRockMill.java | 69 + .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityMachineRockMill.java | 33 + .../assets/hbm/models/machines/rockmill.obj | 2536 +++++++++++++++++ .../textures/gui/processing/gui_rockmill.png | Bin 0 -> 2754 bytes .../hbm/textures/models/machines/rockmill.png | Bin 0 -> 3255 bytes 14 files changed, 2768 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineRockMill.java create mode 100644 src/main/java/com/hbm/handler/nei/RockMillRecipeHandler.java create mode 100644 src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java create mode 100644 src/main/java/com/hbm/module/machine/ModuleMachineRockMill.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderRockMill.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java create mode 100644 src/main/resources/assets/hbm/models/machines/rockmill.obj create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_rockmill.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/rockmill.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index aa7328075..69ba71890 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -972,6 +972,7 @@ public class ModBlocks { public static Block machine_autosaw; public static Block machine_thresher; + public static Block machine_rockmill; public static Block machine_mining_laser; public static Block barricade; // a sand bag that drops nothing, for automated walling purposes @@ -2192,6 +2193,7 @@ public class ModBlocks { machine_excavator = new MachineExcavator().setBlockName("machine_excavator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_ore_slopper = new MachineOreSlopper().setBlockName("machine_ore_slopper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_annihilator = new MachineAnnihilator().setBlockName("machine_annihilator").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_rockmill = new MachineRockMill(Material.iron).setBlockName("machine_rockmill").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_mining_laser = new MachineMiningLaser(Material.iron).setBlockName("machine_mining_laser").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_mining_laser"); barricade = new BlockNoDrop(Material.sand).setBlockName("barricade").setHardness(1.0F).setResistance(2.5F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":barricade"); machine_assembly_machine = new MachineAssemblyMachine(Material.iron).setBlockName("machine_assembly_machine").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3234,6 +3236,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_electric_furnace_off, machine_electric_furnace_off.getUnlocalizedName()); GameRegistry.registerBlock(machine_electric_furnace_on, machine_electric_furnace_on.getUnlocalizedName()); GameRegistry.registerBlock(machine_microwave, machine_microwave.getUnlocalizedName()); + register(machine_rockmill); register(machine_assembly_machine); register(machine_assembly_factory); register(machine_precass); diff --git a/src/main/java/com/hbm/blocks/machine/MachineRockMill.java b/src/main/java/com/hbm/blocks/machine/MachineRockMill.java new file mode 100644 index 000000000..0368211d0 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineRockMill.java @@ -0,0 +1,44 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityMachineRockMill; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineRockMill extends BlockDummyable { + + public MachineRockMill(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachineRockMill(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); + return null; + } + + @Override public int[] getDimensions() { return new int[] {2, 0, 2, 2, 2, 2}; } + @Override public int getOffset() { return 2; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + this.makeExtra(world, x + 2, y, z + 1); + this.makeExtra(world, x - 2, y, z + 1); + this.makeExtra(world, x + 2, y, z - 1); + this.makeExtra(world, x - 2, y, z - 1); + this.makeExtra(world, x + 1, y, z + 2); + this.makeExtra(world, x + 1, y, z - 2); + this.makeExtra(world, x - 1, y, z + 2); + this.makeExtra(world, x - 1, y, z - 2); + } +} diff --git a/src/main/java/com/hbm/handler/nei/RockMillRecipeHandler.java b/src/main/java/com/hbm/handler/nei/RockMillRecipeHandler.java new file mode 100644 index 000000000..2ed3b0ae9 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/RockMillRecipeHandler.java @@ -0,0 +1,13 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.RockMillRecipes; + +public class RockMillRecipeHandler extends NEIGenericRecipeHandler { + + public RockMillRecipeHandler() { + super(ModBlocks.machine_rockmill.getLocalizedName(), RockMillRecipes.INSTANCE, ModBlocks.machine_rockmill); + } + + @Override public String getRecipeID() { return "ntmRockMill"; } +} diff --git a/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java b/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java new file mode 100644 index 000000000..5a04a0365 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java @@ -0,0 +1,22 @@ +package com.hbm.inventory.recipes; + +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; + +public class RockMillRecipes extends GenericRecipes { + + public static final RockMillRecipes INSTANCE = new RockMillRecipes(); + + @Override public int inputItemLimit() { return 3; } + @Override public int inputFluidLimit() { return 1; } + @Override public int outputItemLimit() { return 3; } + @Override public int outputFluidLimit() { return 1; } + + @Override public String getFileName() { return "hbmRockMill.json"; } + @Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); } + + @Override + public void registerDefaults() { + // TBI + } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index bf7ee5ae8..746ba9f50 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -275,6 +275,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityChimneyIndustrial.class, new RenderChimneyIndustrial()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineMiningLaser.class, new RenderLaserMiner()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAnnihilator.class, new RenderAnnihilator()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRockMill.class, new RenderRockMill()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemblyMachine.class, new RenderAssemblyMachine()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemblyFactory.class, new RenderAssemblyFactory()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePrecAss.class, new RenderPrecAss()); diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index a7f260e83..ce4274c70 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -80,6 +80,7 @@ public class NEIRegistry { handlers.add(new CompressorHandler()); handlers.add(new ParticleAcceleratorHandler()); handlers.add(new DeuteriumHandler()); + handlers.add(new RockMillRecipeHandler()); //this shit comes last handlers.add(new FluidRecipeHandler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 5fc7aa957..1da620d9c 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -139,6 +139,9 @@ public class ResourceManager { //Annihilator public static final IModelCustom annihilator = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/annihilator.obj")).asVBO(); + + //Rock Mill + public static final IModelCustom rock_mill = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/rockmill.obj")).asVBO(); //Assembler public static final IModelCustom assembly_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_machine.obj")).asVBO(); @@ -593,12 +596,11 @@ public class ResourceManager { //Annihilator public static final ResourceLocation annihilator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/annihilator.png"); public static final ResourceLocation annihilator_belt_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/annihilator_belt.png"); + + //Rock Mill + public static final ResourceLocation rock_mill_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rockmill.png"); //Assembler - public static final ResourceLocation assembler_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_base_new.png"); - public static final ResourceLocation assembler_cog_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_cog_new.png"); - public static final ResourceLocation assembler_slider_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_slider_new.png"); - public static final ResourceLocation assembler_arm_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_arm_new.png"); public static final ResourceLocation assembly_machine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_machine.png"); public static final ResourceLocation assemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assemfac.png"); public static final ResourceLocation assembly_factory_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_factory.png"); @@ -606,10 +608,6 @@ public class ResourceManager { public static final ResourceLocation precass_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/precass.png"); //Chemplant - public static final ResourceLocation chemplant_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_base_new.png"); - public static final ResourceLocation chemplant_spinner_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_spinner_new.png"); - public static final ResourceLocation chemplant_piston_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_piston_new.png"); - public static final ResourceLocation chemplant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/lavabase_small.png"); public static final ResourceLocation chemical_plant_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant.png"); public static final ResourceLocation chemical_plant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant_fluid.png"); public static final ResourceLocation chemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemfac.png"); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineRockMill.java b/src/main/java/com/hbm/module/machine/ModuleMachineRockMill.java new file mode 100644 index 000000000..d9af15244 --- /dev/null +++ b/src/main/java/com/hbm/module/machine/ModuleMachineRockMill.java @@ -0,0 +1,39 @@ +package com.hbm.module.machine; + +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.recipes.RockMillRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.util.BobMathUtil; + +import api.hbm.energymk2.IEnergyHandlerMK2; +import net.minecraft.item.ItemStack; + +public class ModuleMachineRockMill extends ModuleMachineBase { + + public ModuleMachineRockMill(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) { + super(index, battery, slots); + this.inputSlots = new int[3]; + this.outputSlots = new int[3]; + this.inputTanks = new FluidTank[1]; + this.outputTanks = new FluidTank[1]; + } + + @Override + public GenericRecipes getRecipeSet() { + return RockMillRecipes.INSTANCE; + } + + @Override + public void setupTanks(GenericRecipe recipe) { + super.setupTanks(recipe); + if(recipe == null) return; + for(int i = 0; i < inputTanks.length; i++) if(recipe.inputFluid != null && recipe.inputFluid.length > i) inputTanks[i].changeTankSize(BobMathUtil.max(inputTanks[i].getFill(), recipe.inputFluid[i].fill * 2, 4_000)); + for(int i = 0; i < outputTanks.length; i++) if(recipe.outputFluid != null && recipe.outputFluid.length > i) outputTanks[i].changeTankSize(BobMathUtil.max(outputTanks[i].getFill(), recipe.outputFluid[i].fill * 2, 4_000)); + } + + public ModuleMachineRockMill itemInput(int from) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = from + i; return this; } + public ModuleMachineRockMill itemOutput(int from) { for(int i = 0; i < outputSlots.length; i++) outputSlots[i] = from + i; return this; } + public ModuleMachineRockMill fluidInput(FluidTank a) { inputTanks[0] = a; return this; } + public ModuleMachineRockMill fluidOutput(FluidTank a) { outputTanks[0] = a; return this; } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderRockMill.java b/src/main/java/com/hbm/render/tileentity/RenderRockMill.java new file mode 100644 index 000000000..ecd8d8cd2 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderRockMill.java @@ -0,0 +1,69 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineRockMill; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderRockMill extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glRotated(90, 0, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + + switch(tile.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + TileEntityMachineRockMill mill = (TileEntityMachineRockMill) tile; + + bindTexture(ResourceManager.rock_mill_tex); + ResourceManager.rock_mill.renderPart("Base"); + if(mill.frame) ResourceManager.rock_mill.renderPart("Frame"); + + float rot = mill.prevRotation + (mill.rotation - mill.prevRotation) * interp; + GL11.glRotatef(rot, 0, -1, 0); + ResourceManager.rock_mill.renderPart("Wheel"); + + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_rockmill); + } + + @Override + public IItemRenderer getRenderer() { + + return new ItemRenderBase() { + + public void renderInventory() { + GL11.glTranslated(0, -1.5, 0); + GL11.glScaled(3, 3, 3); + } + public void renderCommonWithStack(ItemStack item) { + GL11.glScaled(0.75, 0.75, 0.75); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.rock_mill_tex); + ResourceManager.rock_mill.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 560761911..92a7874e1 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -354,6 +354,7 @@ public class TileMappings { put(TileEntityMachineCombustionEngine.class, "tileentity_combustion_engine"); + put(TileEntityMachineRockMill.class, "tileentity_rock_mill"); put(TileEntityMachineAssemblyMachine.class, "tileentity_assemblymachine"); put(TileEntityMachineAssemblyFactory.class, "tileentity_assemblyfactory"); put(TileEntityMachinePrecAss.class, "tileentity_precass"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java new file mode 100644 index 000000000..1623c57ba --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java @@ -0,0 +1,33 @@ +package com.hbm.tileentity.machine; + +import com.hbm.tileentity.TileEntityMachineBase; + +public class TileEntityMachineRockMill extends TileEntityMachineBase { + + public float rotation; + public float prevRotation; + + public boolean frame = false; + + public TileEntityMachineRockMill() { + super(0); + } + + @Override + public String getName() { + return "container.machineRockMill"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + } else { + + if(worldObj.getTotalWorldTime() % 20 == 0) { + frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); + } + } + } +} diff --git a/src/main/resources/assets/hbm/models/machines/rockmill.obj b/src/main/resources/assets/hbm/models/machines/rockmill.obj new file mode 100644 index 000000000..d8b06d4ab --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/rockmill.obj @@ -0,0 +1,2536 @@ +# Blender v2.79 (sub 0) OBJ File: 'rockmill.blend' +# www.blender.org +o Wheel +v -1.000000 1.937500 -0.062500 +v -1.000000 1.812500 -0.062500 +v 1.000000 1.937500 -0.062500 +v 1.000000 1.812500 -0.062500 +v -1.000000 1.937500 0.062500 +v -1.000000 1.812500 0.062500 +v 1.000000 1.937500 0.062500 +v 1.000000 1.812500 0.062500 +v 0.062500 1.937500 -1.000000 +v 0.062500 1.812500 -1.000000 +v 0.062500 1.937500 1.000000 +v 0.062500 1.812500 1.000000 +v -0.062500 1.937500 -1.000000 +v -0.062500 1.812500 -1.000000 +v -0.062500 1.937500 1.000000 +v -0.062500 1.812500 1.000000 +v 0.176777 2.250000 -0.176777 +v 0.250000 2.250000 0.000000 +v 0.176777 2.250000 0.176777 +v -0.000000 2.250000 0.250000 +v -0.176777 2.250000 0.176777 +v -0.250000 2.250000 0.000000 +v -0.000000 2.250000 -0.250000 +v -0.176777 2.250000 -0.176777 +v 0.176777 1.500000 -0.176777 +v 0.250000 1.500000 0.000000 +v 0.176777 1.500000 0.176777 +v -0.000000 1.500000 0.250000 +v -0.176777 1.500000 0.176777 +v -0.250000 1.500000 0.000000 +v -0.176777 1.500000 -0.176777 +v -0.000000 1.500000 -0.250000 +v 0.382683 2.250000 -0.923880 +v 0.707106 2.250000 -0.707107 +v 0.923879 2.250000 -0.382684 +v 1.000000 2.250000 0.000000 +v 0.923879 2.250000 0.382684 +v 0.707106 2.250000 0.707107 +v 0.382683 2.250000 0.923880 +v -0.000000 2.250000 1.000000 +v -0.382684 2.250000 0.923880 +v -0.707107 2.250000 0.707107 +v -0.923880 2.250000 0.382683 +v -1.000000 2.250000 0.000000 +v -0.923880 2.250000 -0.382683 +v -0.707107 2.250000 -0.707107 +v -0.000000 2.250000 -1.000000 +v -0.382684 2.250000 -0.923880 +v 0.956707 2.250000 -2.309699 +v 1.767766 2.250000 -1.767768 +v 2.309699 2.250000 -0.956709 +v 2.500000 2.250000 0.000000 +v 2.309699 2.250000 0.956709 +v 1.767766 2.250000 1.767768 +v 0.956708 2.250000 2.309699 +v -0.000000 2.250000 2.500000 +v -0.956709 2.250000 2.309699 +v -1.767767 2.250000 1.767767 +v -2.309699 2.250000 0.956709 +v -2.500000 2.250000 0.000000 +v -2.309699 2.250000 -0.956709 +v -1.767767 2.250000 -1.767767 +v -0.000000 2.250000 -2.500000 +v -0.956709 2.250000 -2.309699 +v 0.382683 1.500000 -0.923880 +v 0.707106 1.500000 -0.707107 +v 0.923879 1.500000 -0.382684 +v 1.000000 1.500000 0.000000 +v 0.923879 1.500000 0.382684 +v 0.707106 1.500000 0.707107 +v 0.382683 1.500000 0.923880 +v -0.000000 1.500000 1.000000 +v -0.382684 1.500000 0.923880 +v -0.707107 1.500000 0.707107 +v -0.923880 1.500000 0.382683 +v -1.000000 1.500000 0.000000 +v -0.923880 1.500000 -0.382683 +v -0.707107 1.500000 -0.707107 +v -0.382684 1.500000 -0.923880 +v -0.000000 1.500000 -1.000000 +v 0.956707 1.500000 -2.309699 +v 1.767766 1.500000 -1.767768 +v 2.309699 1.500000 -0.956709 +v 2.500000 1.500000 0.000000 +v 2.309699 1.500000 0.956709 +v 1.767766 1.500000 1.767768 +v 0.956708 1.500000 2.309699 +v -0.000000 1.500000 2.500000 +v -0.956709 1.500000 2.309699 +v -1.767767 1.500000 1.767767 +v -2.309699 1.500000 0.956709 +v -2.500000 1.500000 0.000000 +v -2.309699 1.500000 -0.956708 +v -1.767767 1.500000 -1.767767 +v -0.956709 1.500000 -2.309699 +v 0.000000 1.500000 -2.500000 +v 0.662912 1.812500 0.751301 +v 0.662912 1.937500 0.751301 +v -0.751301 1.812500 -0.662912 +v -0.751301 1.937500 -0.662912 +v 0.751301 1.812500 0.662912 +v 0.751301 1.937500 0.662912 +v -0.662913 1.812500 -0.751301 +v -0.662913 1.937500 -0.751301 +v 0.751301 1.812500 -0.662913 +v 0.751301 1.937500 -0.662912 +v -0.662913 1.812500 0.751301 +v -0.662913 1.937500 0.751301 +v 0.662912 1.812500 -0.751301 +v 0.662912 1.937500 -0.751301 +v -0.751301 1.812500 0.662912 +v -0.751301 1.937500 0.662912 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 0.921569 0.375000 +vt 0.975490 0.625000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 0.975490 0.625000 +vt 0.946078 0.625000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 0.921569 0.375000 +vt 0.975490 0.625000 +vt 0.946078 0.625000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.921569 0.250000 +vt 0.975490 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.975490 0.000000 +vt 1.000000 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.921569 0.250000 +vt 0.975490 0.000000 +vt 1.000000 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.921569 0.250000 +vt 0.975490 -0.000000 +vt 1.000000 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.960810 0.791667 +vt 0.980392 0.750055 +vt 0.999974 0.791666 +vt 0.921595 0.791667 +vt 0.941176 0.750055 +vt 0.960758 0.791666 +vt 0.539216 0.833333 +vt 0.549020 0.500000 +vt 0.549020 0.833333 +vt 0.539216 0.833333 +vt 0.549020 0.500000 +vt 0.549020 0.833333 +vt 0.529412 0.500000 +vt 0.519608 0.833333 +vt 0.519608 0.500000 +vt 0.529412 0.500000 +vt 0.519608 0.833333 +vt 0.519608 0.500000 +vt 0.509804 0.833333 +vt 0.509804 0.500000 +vt 0.539216 0.500000 +vt 0.529412 0.833333 +vt 0.509804 0.833333 +vt 0.509804 0.500000 +vt 0.539216 0.500000 +vt 0.529412 0.833333 +vt 0.539216 0.833333 +vt 0.549020 0.500000 +vt 0.549020 0.833333 +vt 0.529412 0.500000 +vt 0.519608 0.833333 +vt 0.519608 0.500000 +vt 0.519608 0.500000 +vt 0.529412 0.833333 +vt 0.519608 0.833333 +vt 0.549020 0.833333 +vt 0.539216 0.500000 +vt 0.549020 0.500000 +vt 0.509804 0.500000 +vt 0.509804 0.833333 +vt 0.539216 0.500000 +vt 0.529412 0.500000 +vt 0.509804 0.833333 +vt 0.539216 0.833333 +vt 0.975490 0.625000 +vt 1.000000 0.375000 +vt 1.000000 0.375000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 1.000000 0.375000 +vt 0.975490 0.625000 +vt 0.975490 -0.000000 +vt 0.946078 -0.000000 +vt 0.946078 0.000000 +vt 0.975490 -0.000000 +vt 0.975490 0.000000 +vt 0.975490 -0.000000 +vt 0.975490 -0.000000 +vt 0.975490 -0.000000 +vt 0.975490 -0.000000 +vt 0.975490 -0.000000 +vt 0.946078 0.000000 +vt 0.975490 -0.000000 +vt 0.975490 0.000000 +vt 0.975490 -0.000000 +vt 0.946078 -0.000000 +vt 0.975490 -0.000000 +vt 0.980392 0.833278 +vt 0.966546 0.821090 +vt 0.966546 0.762243 +vt 0.994239 0.762243 +vt 0.994239 0.821090 +vt 0.955023 0.821090 +vt 0.941176 0.833278 +vt 0.927330 0.821090 +vt 0.927330 0.762243 +vt 0.955023 0.762243 +vt 0.529412 0.833333 +vt 0.509804 0.500000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.950980 0.875000 +vt 0.936275 1.000000 +vt 0.936275 0.875000 +vt 0.921569 0.875000 +vt 0.906863 1.000000 +vt 0.906863 0.875000 +vt 0.892157 0.875000 +vt 0.877451 1.000000 +vt 0.877451 0.875000 +vt 0.980392 0.875000 +vt 0.965686 1.000000 +vt 0.965686 0.875000 +vt 0.921569 1.000000 +vt 0.892157 1.000000 +vt 0.862745 1.000000 +vt 0.862745 0.875000 +vt 0.950980 1.000000 +vt 0.980392 1.000000 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 -0.0000 -0.7071 +vn -0.3827 -0.0000 0.9239 +vn -0.9239 -0.0000 0.3827 +vn 0.3827 -0.0000 0.9239 +vn -0.9239 -0.0000 -0.3827 +vn 0.3827 0.0000 -0.9239 +vn -0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.9239 -0.0000 0.3827 +s off +f 55/1/1 40/2/1 56/3/1 +f 55/4/1 38/5/1 39/6/1 +f 54/7/1 37/8/1 38/9/1 +f 52/10/1 37/11/1 53/12/1 +f 51/13/1 36/14/1 52/15/1 +f 50/16/1 35/17/1 51/18/1 +f 49/19/1 34/20/1 50/21/1 +f 63/22/1 33/23/1 49/24/1 +f 64/25/1 47/26/1 63/27/1 +f 62/28/1 48/29/1 64/30/1 +f 61/31/1 46/32/1 62/33/1 +f 60/34/1 45/35/1 61/36/1 +f 59/37/1 44/38/1 60/39/1 +f 58/40/1 43/41/1 59/42/1 +f 58/43/1 41/44/1 42/45/1 +f 56/46/1 41/47/1 57/48/1 +f 72/49/2 87/50/2 88/51/2 +f 87/52/2 70/53/2 86/54/2 +f 86/55/2 69/56/2 85/57/2 +f 69/58/2 84/59/2 85/60/2 +f 68/61/2 83/62/2 84/63/2 +f 67/64/2 82/65/2 83/66/2 +f 66/67/2 81/68/2 82/69/2 +f 65/70/2 96/71/2 81/72/2 +f 80/73/2 95/74/2 96/75/2 +f 79/76/2 94/77/2 95/78/2 +f 94/79/2 77/80/2 93/81/2 +f 77/82/2 92/83/2 93/84/2 +f 76/85/2 91/86/2 92/87/2 +f 75/88/2 90/89/2 91/90/2 +f 90/91/2 73/92/2 89/93/2 +f 73/94/2 88/95/2 89/96/2 +f 32/97/2 26/98/2 28/99/2 +f 20/100/1 18/101/1 23/102/1 +f 15/103/3 14/104/3 16/105/3 +f 7/106/4 6/107/4 8/108/4 +f 9/109/5 12/110/5 10/111/5 +f 1/112/6 4/113/6 2/114/6 +f 10/111/2 16/115/2 14/116/2 +f 13/117/1 11/118/1 9/109/1 +f 2/114/2 8/119/2 6/120/2 +f 5/121/1 3/122/1 1/112/1 +f 98/123/7 99/124/7 97/125/7 +f 106/126/8 107/127/8 105/128/8 +f 103/129/9 102/130/9 101/131/9 +f 111/132/10 110/133/10 109/134/10 +f 99/135/2 101/131/2 97/136/2 +f 100/137/1 102/130/1 104/138/1 +f 111/139/2 105/128/2 107/127/2 +f 112/140/1 106/126/1 110/133/1 +f 55/1/1 39/141/1 40/2/1 +f 55/4/1 54/142/1 38/5/1 +f 54/7/1 53/143/1 37/8/1 +f 52/10/1 36/144/1 37/11/1 +f 51/13/1 35/145/1 36/14/1 +f 50/16/1 34/146/1 35/17/1 +f 49/19/1 33/147/1 34/20/1 +f 63/22/1 47/148/1 33/23/1 +f 64/25/1 48/149/1 47/26/1 +f 62/28/1 46/150/1 48/29/1 +f 61/31/1 45/151/1 46/32/1 +f 60/34/1 44/152/1 45/35/1 +f 59/37/1 43/153/1 44/38/1 +f 58/40/1 42/154/1 43/41/1 +f 58/43/1 57/155/1 41/44/1 +f 56/46/1 40/156/1 41/47/1 +f 72/49/2 71/157/2 87/50/2 +f 87/52/2 71/158/2 70/53/2 +f 86/55/2 70/159/2 69/56/2 +f 69/58/2 68/160/2 84/59/2 +f 68/61/2 67/161/2 83/62/2 +f 67/64/2 66/162/2 82/65/2 +f 66/67/2 65/163/2 81/68/2 +f 65/70/2 80/164/2 96/71/2 +f 80/73/2 79/165/2 95/74/2 +f 79/76/2 78/166/2 94/77/2 +f 94/79/2 78/167/2 77/80/2 +f 77/82/2 76/168/2 92/83/2 +f 76/85/2 75/169/2 91/86/2 +f 75/88/2 74/170/2 90/89/2 +f 90/91/2 74/171/2 73/92/2 +f 73/94/2 72/172/2 88/95/2 +f 30/173/2 31/174/2 32/97/2 +f 32/97/2 25/175/2 26/98/2 +f 26/98/2 27/176/2 28/99/2 +f 28/99/2 29/177/2 30/173/2 +f 30/173/2 32/97/2 28/99/2 +f 23/102/1 24/178/1 22/179/1 +f 22/179/1 21/180/1 20/100/1 +f 20/100/1 19/181/1 18/101/1 +f 18/101/1 17/182/1 23/102/1 +f 23/102/1 22/179/1 20/100/1 +f 15/103/3 13/117/3 14/104/3 +f 7/106/4 5/121/4 6/107/4 +f 9/109/5 11/118/5 12/110/5 +f 1/112/6 3/122/6 4/113/6 +f 10/111/2 12/110/2 16/115/2 +f 13/117/1 15/103/1 11/118/1 +f 2/114/2 4/113/2 8/119/2 +f 5/121/1 7/106/1 3/122/1 +f 98/123/7 100/137/7 99/124/7 +f 106/126/8 108/183/8 107/127/8 +f 103/129/9 104/138/9 102/130/9 +f 111/132/10 112/140/10 110/133/10 +f 99/135/2 103/129/2 101/131/2 +f 100/137/1 98/123/1 102/130/1 +f 111/139/2 109/184/2 105/128/2 +f 112/140/1 108/183/1 106/126/1 +s 1 +f 65/185/11 47/148/4 80/186/4 +f 91/86/12 60/39/3 92/87/3 +f 79/187/13 46/150/8 78/188/8 +f 66/189/7 33/147/11 65/190/11 +f 93/84/14 60/34/3 61/36/14 +f 80/191/4 48/149/13 79/192/13 +f 67/193/12 34/146/7 66/194/7 +f 94/79/10 61/31/14 62/33/10 +f 96/71/6 49/24/15 81/72/15 +f 68/195/3 35/145/12 67/196/12 +f 94/77/10 64/30/16 95/78/16 +f 82/69/9 49/19/15 50/21/9 +f 69/197/14 36/144/3 68/198/3 +f 95/74/16 63/27/6 96/75/6 +f 82/65/9 51/18/17 83/66/17 +f 70/199/10 37/8/14 69/200/14 +f 83/62/17 52/15/5 84/63/5 +f 71/201/16 38/5/10 70/202/10 +f 84/59/5 53/12/18 85/60/18 +f 72/203/6 39/141/16 71/204/16 +f 85/57/18 54/7/8 86/55/8 +f 73/205/15 40/156/6 72/206/6 +f 86/54/8 55/4/13 87/52/13 +f 74/207/9 41/44/15 73/208/15 +f 78/209/8 45/151/18 77/210/18 +f 90/89/7 59/42/12 91/90/12 +f 77/211/18 44/152/5 76/212/5 +f 89/93/11 58/43/7 90/91/7 +f 76/213/5 43/153/17 75/214/17 +f 88/95/4 57/48/11 89/96/11 +f 75/215/17 42/154/9 74/216/9 +f 87/50/13 56/3/4 88/51/4 +f 32/217/6 17/218/9 25/219/9 +f 26/220/5 19/221/8 27/222/8 +f 28/223/4 21/224/7 29/225/7 +f 30/226/3 24/227/10 31/228/10 +f 25/219/9 18/229/5 26/220/5 +f 27/222/8 20/230/4 28/223/4 +f 29/225/7 22/231/3 30/232/3 +f 31/228/10 23/233/6 32/217/6 +f 65/185/11 33/23/11 47/148/4 +f 91/86/12 59/37/12 60/39/3 +f 79/187/13 48/29/13 46/150/8 +f 66/189/7 34/20/7 33/147/11 +f 93/84/14 92/83/3 60/34/3 +f 80/191/4 47/26/4 48/149/13 +f 67/193/12 35/17/12 34/146/7 +f 94/79/10 93/81/14 61/31/14 +f 96/71/6 63/22/6 49/24/15 +f 68/195/3 36/14/3 35/145/12 +f 94/77/10 62/28/10 64/30/16 +f 82/69/9 81/68/15 49/19/15 +f 69/197/14 37/11/14 36/144/3 +f 95/74/16 64/25/16 63/27/6 +f 82/65/9 50/16/9 51/18/17 +f 70/199/10 38/9/10 37/8/14 +f 83/62/17 51/13/17 52/15/5 +f 71/201/16 39/6/16 38/5/10 +f 84/59/5 52/10/5 53/12/18 +f 72/203/6 40/2/6 39/141/16 +f 85/57/18 53/143/18 54/7/8 +f 73/205/15 41/47/15 40/156/6 +f 86/54/8 54/142/8 55/4/13 +f 74/207/9 42/45/9 41/44/15 +f 78/209/8 46/32/8 45/151/18 +f 90/89/7 58/40/7 59/42/12 +f 77/211/18 45/35/18 44/152/5 +f 89/93/11 57/155/11 58/43/7 +f 76/213/5 44/38/5 43/153/17 +f 88/95/4 56/46/4 57/48/11 +f 75/215/17 43/41/17 42/154/9 +f 87/50/13 55/1/13 56/3/4 +f 32/217/6 23/233/6 17/218/9 +f 26/220/5 18/229/5 19/221/8 +f 28/223/4 20/230/4 21/224/7 +f 30/226/3 22/234/3 24/227/10 +f 25/219/9 17/218/9 18/229/5 +f 27/222/8 19/221/8 20/230/4 +f 29/225/7 21/224/7 22/231/3 +f 31/228/10 24/227/10 23/233/6 +o Frame +v -2.250000 3.000000 2.500000 +v 2.250000 3.000000 2.375000 +v 2.250000 3.000000 2.500000 +v 2.250000 2.875000 2.375000 +v -2.250000 3.000000 2.375000 +v -2.250000 2.875000 2.500000 +v 2.250000 2.875000 2.500000 +v -2.250000 2.875000 2.375000 +v 2.250000 3.000000 -2.500000 +v -2.250000 3.000000 -2.375000 +v -2.250000 3.000000 -2.500000 +v -2.250000 2.875000 -2.375000 +v 2.250000 3.000000 -2.375000 +v 2.250000 2.875000 -2.500000 +v -2.250000 2.875000 -2.500000 +v 2.250000 2.875000 -2.375000 +v -2.500000 3.000000 -2.250000 +v -2.375000 3.000000 2.250000 +v -2.500000 3.000000 2.250000 +v -2.375000 2.875000 2.250000 +v -2.375000 3.000000 -2.250000 +v -2.500000 2.875000 -2.250000 +v -2.500000 2.875000 2.250000 +v -2.375000 2.875000 -2.250000 +v 2.500000 3.000000 2.250000 +v 2.375000 3.000000 -2.250000 +v 2.500000 3.000000 -2.250000 +v 2.375000 2.875000 -2.250000 +v 2.375000 3.000000 2.250000 +v 2.500000 2.875000 2.250000 +v 2.500000 2.875000 -2.250000 +v 2.375000 2.875000 2.250000 +v -2.500000 3.000000 -2.500000 +v -2.500000 2.750000 -2.500000 +v -2.250000 3.000000 -2.250000 +v -2.500000 3.000000 -2.250000 +v -2.250000 3.000000 -2.500000 +v -2.250000 2.750000 -2.250000 +v -2.250000 2.750000 -2.500000 +v -2.500000 2.750000 -2.250000 +v -2.500000 3.000000 2.250000 +v -2.500000 2.750000 2.250000 +v -2.250000 3.000000 2.500000 +v -2.500000 3.000000 2.500000 +v -2.250000 3.000000 2.250000 +v -2.250000 2.750000 2.500000 +v -2.250000 2.750000 2.250000 +v -2.500000 2.750000 2.500000 +v 2.250000 3.000000 -2.500000 +v 2.250000 2.750000 -2.500000 +v 2.500000 3.000000 -2.250000 +v 2.250000 3.000000 -2.250000 +v 2.500000 3.000000 -2.500000 +v 2.500000 2.750000 -2.250000 +v 2.500000 2.750000 -2.500000 +v 2.250000 2.750000 -2.250000 +v 2.250000 3.000000 2.250000 +v 2.250000 2.750000 2.250000 +v 2.500000 3.000000 2.500000 +v 2.250000 3.000000 2.500000 +v 2.500000 3.000000 2.250000 +v 2.500000 2.750000 2.500000 +v 2.500000 2.750000 2.250000 +v 2.250000 2.750000 2.500000 +v 2.500000 0.250000 2.500000 +v 2.500000 2.750000 2.500000 +v 2.500000 0.250000 2.375000 +v 2.500000 2.750000 2.375000 +v 2.375000 0.250000 2.500000 +v 2.375000 2.750000 2.500000 +v 2.375000 0.250000 2.375000 +v 2.375000 2.750000 2.375000 +v 2.500000 0.250000 -2.375000 +v 2.500000 2.750000 -2.375000 +v 2.500000 0.250000 -2.500000 +v 2.500000 2.750000 -2.500000 +v 2.375000 0.250000 -2.375000 +v 2.375000 2.750000 -2.375000 +v 2.375000 0.250000 -2.500000 +v 2.375000 2.750000 -2.500000 +v -2.375000 0.250000 2.500000 +v -2.375000 2.750000 2.500000 +v -2.375000 0.250000 2.375000 +v -2.375000 2.750000 2.375000 +v -2.500000 0.250000 2.500000 +v -2.500000 2.750000 2.500000 +v -2.500000 0.250000 2.375000 +v -2.500000 2.750000 2.375000 +v -2.375000 0.250000 -2.375000 +v -2.375000 2.750000 -2.375000 +v -2.375000 0.250000 -2.500000 +v -2.375000 2.750000 -2.500000 +v -2.500000 0.250000 -2.375000 +v -2.500000 2.750000 -2.375000 +v -2.500000 0.250000 -2.500000 +v -2.500000 2.750000 -2.500000 +vt 0.862745 0.916667 +vt 0.509804 0.937500 +vt 0.509804 0.916667 +vt 0.862745 0.979167 +vt 0.509804 1.000000 +vt 0.509804 0.979167 +vt 0.862745 0.958333 +vt 0.509804 0.958333 +vt 0.862745 0.937500 +vt 0.862745 0.958333 +vt 0.862745 0.916667 +vt 0.509804 0.937500 +vt 0.509804 0.916667 +vt 0.509804 0.979167 +vt 0.862745 0.958333 +vt 0.862745 0.979167 +vt 0.509804 0.979167 +vt 0.862745 0.958333 +vt 0.862745 0.979167 +vt 0.862745 0.979167 +vt 0.509804 1.000000 +vt 0.509804 0.979167 +vt 0.509804 0.958333 +vt 0.862745 0.937500 +vt 0.509804 0.958333 +vt 0.862745 0.937500 +vt 0.862745 0.916667 +vt 0.509804 0.937500 +vt 0.509804 0.916667 +vt 0.509804 0.958333 +vt 0.862745 0.937500 +vt 0.509804 1.000000 +vt 0.509804 1.000000 +vt 0.862745 0.916667 +vt 0.509804 0.937500 +vt 0.509804 0.916667 +vt 0.254902 0.583333 +vt 0.235294 0.541667 +vt 0.254902 0.541667 +vt 0.254902 0.458333 +vt 0.235294 0.500000 +vt 0.235294 0.458333 +vt 0.313726 0.541667 +vt 0.294118 0.500000 +vt 0.313726 0.500000 +vt 0.274510 0.541667 +vt 0.254902 0.500000 +vt 0.274510 0.500000 +vt 0.274510 0.541667 +vt 0.254902 0.500000 +vt 0.274510 0.500000 +vt 0.254902 0.541667 +vt 0.254902 0.500000 +vt 0.254902 0.458333 +vt 0.235294 0.500000 +vt 0.235294 0.458333 +vt 0.313726 0.541667 +vt 0.294118 0.500000 +vt 0.313726 0.500000 +vt 0.254902 0.458333 +vt 0.235294 0.500000 +vt 0.235294 0.458333 +vt 0.274510 0.541667 +vt 0.254902 0.500000 +vt 0.274510 0.500000 +vt 0.254902 0.458333 +vt 0.235294 0.500000 +vt 0.235294 0.458333 +vt 0.274510 0.541667 +vt 0.274510 0.500000 +vt 0.254902 0.583333 +vt 0.235294 0.541667 +vt 0.254902 0.583333 +vt 0.235294 0.541667 +vt 0.254902 0.541667 +vt 0.294118 0.541667 +vt 0.294118 0.541667 +vt 0.294118 0.500000 +vt 0.294118 0.541667 +vt 0.294118 0.500000 +vt 0.254902 0.583333 +vt 0.235294 0.541667 +vt 0.254902 0.541667 +vt 0.294118 0.541667 +vt 0.313726 0.541667 +vt 0.313726 0.500000 +vt 0.313726 0.541667 +vt 0.313726 0.500000 +vt 0.235294 0.708333 +vt 0.039216 0.729167 +vt 0.039216 0.708333 +vt 0.235294 0.729167 +vt 0.039216 0.750000 +vt 0.235294 0.687500 +vt 0.039216 0.666667 +vt 0.039216 0.687500 +vt 0.235294 0.687500 +vt 0.039216 0.708333 +vt 0.039216 0.687500 +vt 0.235294 0.708333 +vt 0.039216 0.729167 +vt 0.235294 0.666667 +vt 0.235294 0.750000 +vt 0.039216 0.750000 +vt 0.235294 0.729167 +vt 0.039216 0.750000 +vt 0.039216 0.729167 +vt 0.235294 0.666667 +vt 0.039216 0.687500 +vt 0.039216 0.666667 +vt 0.235294 0.708333 +vt 0.039216 0.708333 +vt 0.235294 0.666667 +vt 0.039216 0.687500 +vt 0.039216 0.666667 +vt 0.235294 0.687500 +vt 0.039216 0.708333 +vt 0.039216 0.750000 +vt 0.235294 0.729167 +vt 0.235294 0.750000 +vt 0.039216 0.729167 +vt 0.862745 1.000000 +vt 0.862745 1.000000 +vt 0.862745 1.000000 +vt 0.862745 1.000000 +vt 0.235294 0.583333 +vt 0.235294 0.583333 +vt 0.235294 0.583333 +vt 0.235294 0.583333 +vt 0.235294 0.750000 +vt 0.235294 0.666667 +vt 0.235294 0.729167 +vt 0.039216 0.666667 +vt 0.235294 0.750000 +vt 0.235294 0.687500 +vt 0.235294 0.708333 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +s off +f 140/235/19 142/236/19 144/237/19 +f 130/238/20 136/239/20 133/240/20 +f 133/240/21 131/241/21 130/238/21 +f 137/242/20 143/243/20 139/244/20 +f 116/245/19 118/246/19 120/247/19 +f 117/248/21 115/249/21 114/250/21 +f 125/251/21 123/252/21 122/253/21 +f 138/254/22 144/255/22 141/256/22 +f 121/257/23 127/258/23 123/252/23 +f 113/259/24 119/260/24 115/249/24 +f 124/261/19 126/262/19 128/263/19 +f 129/264/22 135/265/22 131/241/22 +f 122/253/24 128/266/24 125/251/24 +f 114/250/23 120/267/23 117/248/23 +f 141/256/21 139/244/21 138/254/21 +f 132/268/19 134/269/19 136/270/19 +f 161/271/21 163/272/21 165/273/21 +f 146/274/19 150/275/19 152/276/19 +f 147/277/24 152/278/24 150/279/24 +f 161/280/23 167/281/23 162/282/23 +f 153/283/23 159/284/23 154/285/23 +f 149/286/20 150/275/20 151/287/20 +f 170/288/19 174/289/19 176/290/19 +f 163/291/24 168/292/24 166/293/24 +f 154/294/19 158/295/19 160/296/19 +f 169/297/23 175/298/23 170/299/23 +f 162/300/19 166/301/19 168/302/19 +f 145/303/23 151/287/23 146/304/23 +f 145/305/21 147/306/21 149/286/21 +f 169/307/21 171/308/21 173/309/21 +f 164/310/22 162/282/22 168/292/22 +f 172/311/22 170/299/22 176/312/22 +f 156/313/22 154/285/22 160/314/22 +f 153/315/21 155/316/21 157/317/21 +f 148/318/22 146/304/22 152/278/22 +f 171/319/24 176/312/24 174/320/24 +f 155/321/24 160/314/24 158/322/24 +f 173/309/20 174/289/20 175/298/20 +f 157/317/20 158/295/20 159/284/20 +f 165/273/20 166/301/20 167/281/20 +f 177/323/20 180/324/20 178/325/20 +f 179/326/23 184/327/23 180/324/23 +f 178/325/24 181/328/24 177/323/24 +f 184/329/22 181/328/22 182/330/22 +f 185/331/20 188/332/20 186/333/20 +f 187/334/23 192/335/23 188/332/23 +f 186/333/24 189/336/24 185/331/24 +f 192/335/22 189/337/22 190/338/22 +f 193/339/20 196/340/20 194/341/20 +f 195/342/23 200/343/23 196/344/23 +f 194/341/24 197/345/24 193/339/24 +f 200/343/22 197/345/22 198/346/22 +f 201/347/20 204/348/20 202/349/20 +f 203/350/23 208/351/23 204/348/23 +f 202/352/24 205/353/24 201/354/24 +f 208/351/22 205/353/22 206/355/22 +f 140/235/19 143/243/19 142/236/19 +f 130/238/20 132/356/20 136/239/20 +f 133/240/21 129/264/21 131/241/21 +f 137/242/20 142/236/20 143/243/20 +f 116/245/19 119/260/19 118/246/19 +f 117/248/21 113/259/21 115/249/21 +f 125/251/21 121/257/21 123/252/21 +f 138/254/22 140/357/22 144/255/22 +f 121/257/23 126/262/23 127/258/23 +f 113/259/24 118/246/24 119/260/24 +f 124/261/19 127/258/19 126/262/19 +f 129/264/22 134/269/22 135/265/22 +f 122/253/24 124/358/24 128/266/24 +f 114/250/23 116/359/23 120/267/23 +f 141/256/21 137/242/21 139/244/21 +f 132/268/19 135/265/19 134/269/19 +f 161/271/21 164/360/21 163/272/21 +f 146/274/19 151/287/19 150/275/19 +f 147/277/24 148/318/24 152/278/24 +f 161/280/23 165/273/23 167/281/23 +f 153/283/23 157/317/23 159/284/23 +f 149/286/20 147/306/20 150/275/20 +f 170/288/19 175/298/19 174/289/19 +f 163/291/24 164/310/24 168/292/24 +f 154/294/19 159/284/19 158/295/19 +f 169/297/23 173/309/23 175/298/23 +f 162/300/19 167/281/19 166/301/19 +f 145/303/23 149/286/23 151/287/23 +f 145/305/21 148/361/21 147/306/21 +f 169/307/21 172/362/21 171/308/21 +f 164/310/22 161/280/22 162/282/22 +f 172/311/22 169/297/22 170/299/22 +f 156/313/22 153/283/22 154/285/22 +f 153/315/21 156/363/21 155/316/21 +f 148/318/22 145/303/22 146/304/22 +f 171/319/24 172/311/24 176/312/24 +f 155/321/24 156/313/24 160/314/24 +f 173/309/20 171/308/20 174/289/20 +f 157/317/20 155/316/20 158/295/20 +f 165/273/20 163/272/20 166/301/20 +f 177/323/20 179/326/20 180/324/20 +f 179/326/23 183/364/23 184/327/23 +f 178/325/24 182/330/24 181/328/24 +f 184/329/22 183/365/22 181/328/22 +f 185/331/20 187/334/20 188/332/20 +f 187/334/23 191/366/23 192/335/23 +f 186/333/24 190/367/24 189/336/24 +f 192/335/22 191/366/22 189/337/22 +f 193/339/20 195/368/20 196/340/20 +f 195/342/23 199/369/23 200/343/23 +f 194/341/24 198/346/24 197/345/24 +f 200/343/22 199/369/22 197/345/22 +f 201/347/20 203/350/20 204/348/20 +f 203/350/23 207/370/23 208/351/23 +f 202/352/24 206/355/24 205/353/24 +f 208/351/22 207/370/22 205/353/22 +o Base +v 2.250000 -0.000000 2.500000 +v 2.500000 -0.000000 2.250000 +v 2.500000 -0.000000 2.500000 +v 2.500000 0.250000 2.250000 +v 2.250000 0.250000 2.500000 +v 2.500000 0.250000 2.500000 +v 2.250000 -0.000000 2.250000 +v 2.250000 0.250000 2.250000 +v 2.250000 0.000000 -2.250000 +v 2.500000 0.000000 -2.500000 +v 2.500000 0.000000 -2.250000 +v 2.500000 0.250000 -2.500000 +v 2.250000 0.250000 -2.250000 +v 2.500000 0.250000 -2.250000 +v 2.250000 0.000000 -2.500000 +v 2.250000 0.250000 -2.500000 +v -2.500000 -0.000000 2.500000 +v -2.250000 -0.000000 2.250000 +v -2.250000 -0.000000 2.500000 +v -2.250000 0.250000 2.250000 +v -2.500000 0.250000 2.500000 +v -2.250000 0.250000 2.500000 +v -2.500000 -0.000000 2.250000 +v -2.500000 0.250000 2.250000 +v -2.500000 0.000000 -2.250000 +v -2.250000 0.000000 -2.500000 +v -2.250000 0.000000 -2.250000 +v -2.250000 0.250000 -2.500000 +v -2.500000 0.250000 -2.250000 +v -2.250000 0.250000 -2.250000 +v -2.500000 0.000000 -2.500000 +v -2.500000 0.250000 -2.500000 +v 2.375000 -0.000000 2.250000 +v 2.500000 0.000000 -2.250000 +v 2.500000 -0.000000 2.250000 +v 2.375000 0.125000 2.250000 +v 2.375000 0.000000 -2.250000 +v 2.500000 0.125000 -2.250000 +v 2.375000 0.125000 -2.250000 +v 2.500000 0.125000 2.250000 +v -2.375000 0.000000 -2.250000 +v -2.500000 -0.000000 2.250000 +v -2.500000 0.000000 -2.250000 +v -2.375000 0.125000 -2.250000 +v -2.375000 -0.000000 2.250000 +v -2.500000 0.125000 2.250000 +v -2.375000 0.125000 2.250000 +v -2.500000 0.125000 -2.250000 +v 2.250000 0.000000 -2.375000 +v -2.250000 0.000000 -2.500000 +v 2.250000 0.000000 -2.500000 +v 2.250000 0.125000 -2.375000 +v -2.250000 0.000000 -2.375000 +v -2.250000 0.125000 -2.500000 +v -2.250000 0.125000 -2.375000 +v 2.250000 0.125000 -2.500000 +v -2.250000 -0.000000 2.375000 +v 2.250000 -0.000000 2.500000 +v -2.250000 -0.000000 2.500000 +v -2.250000 0.125000 2.375000 +v 2.250000 -0.000000 2.375000 +v 2.250000 0.125000 2.500000 +v 2.250000 0.125000 2.375000 +v -2.250000 0.125000 2.500000 +v 1.875000 0.125000 -2.500000 +v 2.125000 0.125000 2.500000 +v 1.875000 0.125000 2.500000 +v 2.125000 0.250000 2.500000 +v 1.875000 0.250000 -2.500000 +v 1.875000 0.250000 2.500000 +v 2.125000 0.250000 -2.500000 +v 2.125000 0.125000 -2.500000 +v -2.250000 0.250000 -0.250000 +v 0.250000 0.250000 2.250000 +v -2.250000 0.250000 2.250000 +v 0.250000 0.750000 2.250000 +v -2.250000 0.750000 -0.250000 +v -2.250000 0.750000 2.250000 +v 0.250000 0.250000 -0.250000 +v 0.250000 0.750000 -0.250000 +v 0.750000 0.750000 2.250000 +v 0.750000 0.250000 -0.250000 +v 0.750000 0.250000 2.250000 +v 2.250000 0.250000 -0.250000 +v 2.250000 0.750000 2.250000 +v 2.250000 0.250000 2.250000 +v 2.250000 0.750000 -0.250000 +v 0.750000 0.750000 -0.250000 +v 2.250000 0.250000 -0.750000 +v -2.250000 0.750000 -0.750000 +v -2.250000 0.250000 -0.750000 +v -2.250000 0.750000 -2.250000 +v 2.250000 0.250000 -2.250000 +v -2.250000 0.250000 -2.250000 +v 2.250000 0.750000 -2.250000 +v 2.250000 0.750000 -0.750000 +v 0.875000 0.125000 -2.500000 +v 1.125000 0.125000 2.500000 +v 0.875000 0.125000 2.500000 +v 1.125000 0.250000 2.500000 +v 0.875000 0.250000 -2.500000 +v 0.875000 0.250000 2.500000 +v 1.125000 0.250000 -2.500000 +v 1.125000 0.125000 -2.500000 +v -0.125000 0.125000 -2.500000 +v 0.125000 0.125000 2.500000 +v -0.125000 0.125000 2.500000 +v 0.125000 0.250000 2.500000 +v -0.125000 0.250000 -2.500000 +v -0.125000 0.250000 2.500000 +v 0.125000 0.250000 -2.500000 +v 0.125000 0.125000 -2.500000 +v -1.125000 0.125000 -2.500000 +v -0.875000 0.125000 2.500000 +v -1.125000 0.125000 2.500000 +v -0.875000 0.250000 2.500000 +v -1.125000 0.250000 -2.500000 +v -1.125000 0.250000 2.500000 +v -0.875000 0.250000 -2.500000 +v -0.875000 0.125000 -2.500000 +v -2.125000 0.125000 -2.500000 +v -1.875000 0.125000 2.500000 +v -2.125000 0.125000 2.500000 +v -1.875000 0.250000 2.500000 +v -2.125000 0.250000 -2.500000 +v -2.125000 0.250000 2.500000 +v -1.875000 0.250000 -2.500000 +v -1.875000 0.125000 -2.500000 +v 2.500000 0.312500 -0.812500 +v 2.500000 0.687500 -1.187500 +v 2.500000 0.687500 -0.812500 +v 2.375000 0.375000 -0.875000 +v 2.250000 0.375000 -1.125000 +v 2.375000 0.375000 -1.125000 +v 2.500000 0.312500 -1.187500 +v 2.375000 0.687500 -1.187500 +v 2.375000 0.312500 -0.812500 +v 2.375000 0.312500 -1.187500 +v 2.375000 0.687500 -0.812500 +v 2.375000 0.625000 -0.875000 +v 2.375000 0.625000 -1.125000 +v 2.250000 0.625000 -0.875000 +v 2.250000 0.625000 -1.125000 +v 2.250000 0.375000 -0.875000 +v 2.500000 0.312500 1.187500 +v 2.500000 0.687500 0.812500 +v 2.500000 0.687500 1.187500 +v 2.375000 0.375000 1.125000 +v 2.250000 0.375000 0.875000 +v 2.375000 0.375000 0.875000 +v 2.500000 0.312500 0.812500 +v 2.375000 0.687500 0.812500 +v 2.375000 0.312500 1.187500 +v 2.375000 0.312500 0.812500 +v 2.375000 0.687500 1.187500 +v 2.375000 0.625000 1.125000 +v 2.375000 0.625000 0.875000 +v 2.250000 0.625000 1.125000 +v 2.250000 0.625000 0.875000 +v 2.250000 0.375000 1.125000 +v -2.500000 0.312500 0.812500 +v -2.500000 0.687500 1.187500 +v -2.500000 0.687500 0.812500 +v -2.375000 0.375000 0.875000 +v -2.250000 0.375000 1.125000 +v -2.375000 0.375000 1.125000 +v -2.500000 0.312500 1.187500 +v -2.375000 0.687500 1.187500 +v -2.375000 0.312500 0.812500 +v -2.375000 0.312500 1.187500 +v -2.375000 0.687500 0.812500 +v -2.375000 0.625000 0.875000 +v -2.375000 0.625000 1.125000 +v -2.250000 0.625000 0.875000 +v -2.250000 0.625000 1.125000 +v -2.250000 0.375000 0.875000 +v -2.500000 0.312500 -1.187500 +v -2.500000 0.687500 -0.812500 +v -2.500000 0.687500 -1.187500 +v -2.375000 0.375000 -1.125000 +v -2.250000 0.375000 -0.875000 +v -2.375000 0.375000 -0.875000 +v -2.500000 0.312500 -0.812500 +v -2.375000 0.687500 -0.812500 +v -2.375000 0.312500 -1.187500 +v -2.375000 0.312500 -0.812500 +v -2.375000 0.687500 -1.187500 +v -2.375000 0.625000 -1.125000 +v -2.375000 0.625000 -0.875000 +v -2.250000 0.625000 -1.125000 +v -2.250000 0.625000 -0.875000 +v -2.250000 0.375000 -1.125000 +v -0.812500 0.312500 -2.500000 +v -1.187500 0.687500 -2.500000 +v -0.812500 0.687500 -2.500000 +v -0.875000 0.375000 -2.375000 +v -1.125000 0.375000 -2.250000 +v -1.125000 0.375000 -2.375000 +v -1.187500 0.312500 -2.500000 +v -1.187500 0.687500 -2.375000 +v -0.812500 0.312500 -2.375000 +v -1.187500 0.312500 -2.375000 +v -0.812500 0.687500 -2.375000 +v -0.875000 0.625000 -2.375000 +v -1.125000 0.625000 -2.375000 +v -0.875000 0.625000 -2.250000 +v -1.125000 0.625000 -2.250000 +v -0.875000 0.375000 -2.250000 +v 1.187500 0.312500 -2.500000 +v 0.812500 0.687500 -2.500000 +v 1.187500 0.687500 -2.500000 +v 1.125000 0.375000 -2.375000 +v 0.875000 0.375000 -2.250000 +v 0.875000 0.375000 -2.375000 +v 0.812500 0.312500 -2.500000 +v 0.812500 0.687500 -2.375000 +v 1.187500 0.312500 -2.375000 +v 0.812500 0.312500 -2.375000 +v 1.187500 0.687500 -2.375000 +v 1.125000 0.625000 -2.375000 +v 0.875000 0.625000 -2.375000 +v 1.125000 0.625000 -2.250000 +v 0.875000 0.625000 -2.250000 +v 1.125000 0.375000 -2.250000 +v 0.812500 0.312500 2.500000 +v 1.187500 0.687500 2.500000 +v 0.812500 0.687500 2.500000 +v 0.875000 0.375000 2.375000 +v 1.125000 0.375000 2.250000 +v 1.125000 0.375000 2.375000 +v 1.187500 0.312500 2.500000 +v 1.187500 0.687500 2.375000 +v 0.812500 0.312500 2.375000 +v 1.187500 0.312500 2.375000 +v 0.812500 0.687500 2.375000 +v 0.875000 0.625000 2.375000 +v 1.125000 0.625000 2.375000 +v 0.875000 0.625000 2.250000 +v 1.125000 0.625000 2.250000 +v 0.875000 0.375000 2.250000 +v -1.187500 0.312500 2.500000 +v -0.812500 0.687500 2.500000 +v -1.187500 0.687500 2.500000 +v -1.125000 0.375000 2.375000 +v -0.875000 0.375000 2.250000 +v -0.875000 0.375000 2.375000 +v -0.812500 0.312500 2.500000 +v -0.812500 0.687500 2.375000 +v -1.187500 0.312500 2.375000 +v -0.812500 0.312500 2.375000 +v -1.187500 0.687500 2.375000 +v -1.125000 0.625000 2.375000 +v -0.875000 0.625000 2.375000 +v -1.125000 0.625000 2.250000 +v -0.875000 0.625000 2.250000 +v -1.125000 0.375000 2.250000 +v 0.000000 0.750000 -2.500000 +v -0.956709 0.750000 -2.309699 +v -1.767767 0.750000 -1.767767 +v -2.309699 0.750000 -0.956708 +v -2.500000 0.750000 0.000000 +v -2.309699 0.750000 0.956709 +v -1.767767 0.750000 1.767767 +v -0.956709 0.750000 2.309699 +v -0.000000 0.750000 2.500000 +v 0.956708 0.750000 2.309699 +v 1.767766 0.750000 1.767767 +v 2.309699 0.750000 0.956709 +v 2.500000 0.750000 0.000000 +v 2.309699 0.750000 -0.956709 +v 1.767766 0.750000 -1.767768 +v 0.956707 0.750000 -2.309699 +v -0.000000 0.750000 -1.000000 +v -0.382684 0.750000 -0.923880 +v -0.707107 0.750000 -0.707107 +v -0.923880 0.750000 -0.382683 +v -1.000000 0.750000 0.000000 +v -0.923880 0.750000 0.382683 +v -0.707107 0.750000 0.707107 +v -0.382684 0.750000 0.923880 +v -0.000000 0.750000 1.000000 +v 0.382683 0.750000 0.923880 +v 0.707106 0.750000 0.707107 +v 0.923879 0.750000 0.382684 +v 1.000000 0.750000 0.000000 +v 0.923879 0.750000 -0.382684 +v 0.707106 0.750000 -0.707107 +v 0.382683 0.750000 -0.923880 +v -0.956709 1.500000 -2.309699 +v -0.000000 1.500000 -2.500000 +v -1.767767 1.500000 -1.767767 +v -2.309699 1.500000 -0.956709 +v -2.500000 1.500000 0.000000 +v -2.309699 1.500000 0.956709 +v -1.767767 1.500000 1.767767 +v -0.956709 1.500000 2.309699 +v -0.000000 1.500000 2.500000 +v 0.956708 1.500000 2.309699 +v 1.767766 1.500000 1.767768 +v 2.309699 1.500000 0.956709 +v 2.500000 1.500000 0.000000 +v 2.309699 1.500000 -0.956709 +v 1.767766 1.500000 -1.767768 +v 0.956707 1.500000 -2.309699 +v -0.382684 1.500000 -0.923880 +v -0.000000 1.500000 -1.000000 +v -0.707107 1.500000 -0.707107 +v -0.923880 1.500000 -0.382683 +v -1.000000 1.500000 0.000000 +v -0.923880 1.500000 0.382683 +v -0.707107 1.500000 0.707107 +v -0.382684 1.500000 0.923880 +v -0.000000 1.500000 1.000000 +v 0.382683 1.500000 0.923880 +v 0.707106 1.500000 0.707107 +v 0.923879 1.500000 0.382684 +v 1.000000 1.500000 0.000000 +v 0.923879 1.500000 -0.382684 +v 0.707106 1.500000 -0.707107 +v 0.382683 1.500000 -0.923880 +v -0.000000 0.750000 -0.250000 +v -0.176777 0.750000 -0.176777 +v -0.250000 0.750000 0.000000 +v -0.176777 0.750000 0.176777 +v -0.000000 0.750000 0.250000 +v 0.176777 0.750000 0.176777 +v 0.250000 0.750000 0.000000 +v 0.176777 0.750000 -0.176777 +v -0.176777 1.500000 -0.176777 +v -0.000000 1.500000 -0.250000 +v -0.250000 1.500000 0.000000 +v -0.176777 1.500000 0.176777 +v -0.000000 1.500000 0.250000 +v 0.176777 1.500000 0.176777 +v 0.250000 1.500000 0.000000 +v 0.176777 1.500000 -0.176777 +v -0.062500 1.062500 1.000000 +v -0.062500 1.187500 1.000000 +v -0.062500 1.062500 -1.000000 +v -0.062500 1.187500 -1.000000 +v 0.062500 1.062500 1.000000 +v 0.062500 1.187500 1.000000 +v 0.062500 1.062500 -1.000000 +v 0.062500 1.187500 -1.000000 +v 1.000000 1.062500 0.062500 +v 1.000000 1.187500 0.062500 +v -1.000000 1.062500 0.062500 +v -1.000000 1.187500 0.062500 +v 1.000000 1.062500 -0.062500 +v 1.000000 1.187500 -0.062500 +v -1.000000 1.062500 -0.062500 +v -1.000000 1.187500 -0.062500 +v 0.662912 1.062500 0.751301 +v 0.662912 1.187500 0.751301 +v -0.751301 1.062500 -0.662912 +v -0.751301 1.187500 -0.662912 +v 0.751301 1.062500 0.662912 +v 0.751301 1.187500 0.662912 +v -0.662913 1.062500 -0.751301 +v -0.662913 1.187500 -0.751301 +v 0.751301 1.062500 -0.662913 +v 0.751301 1.187500 -0.662912 +v -0.662913 1.062500 0.751301 +v -0.662913 1.187500 0.751301 +v 0.662912 1.062500 -0.751301 +v 0.662912 1.187500 -0.751301 +v -0.751301 1.062500 0.662912 +v -0.751301 1.187500 0.662912 +vt 0.250000 0.656250 +vt 0.259804 0.593750 +vt 0.259804 0.656250 +vt 0.264706 0.541667 +vt 0.284314 0.562500 +vt 0.264706 0.562500 +vt 0.299020 0.593750 +vt 0.289216 0.656250 +vt 0.289216 0.593750 +vt 0.289216 0.677083 +vt 0.259804 0.656250 +vt 0.289216 0.656250 +vt 0.862745 0.937500 +vt 0.509804 0.958333 +vt 0.509804 0.937500 +vt 0.254902 0.541667 +vt 0.235294 0.500000 +vt 0.254902 0.500000 +vt 0.254902 0.541667 +vt 0.235294 0.500000 +vt 0.254902 0.500000 +vt 0.254902 0.541667 +vt 0.235294 0.500000 +vt 0.254902 0.500000 +vt 0.235294 0.645833 +vt 0.245098 0.604167 +vt 0.245098 0.645833 +vt 0.313726 0.604167 +vt 0.303922 0.645833 +vt 0.303922 0.604167 +vt 0.289216 0.593750 +vt 0.284314 0.708333 +vt 0.264706 0.687500 +vt 0.284314 0.687500 +vt 0.892157 0.020833 +vt 0.911765 0.854167 +vt 0.892157 0.854167 +vt 0.509804 1.000000 +vt 0.862745 0.979167 +vt 0.862745 1.000000 +vt 0.299020 0.593750 +vt 0.289216 0.593750 +vt 0.313726 0.541667 +vt 0.294118 0.500000 +vt 0.313726 0.500000 +vt 0.284314 0.708333 +vt 0.264706 0.687500 +vt 0.284314 0.687500 +vt 0.313726 0.541667 +vt 0.294118 0.500000 +vt 0.313726 0.500000 +vt 0.294118 0.541667 +vt 0.274510 0.500000 +vt 0.294118 0.500000 +vt 0.882353 0.020833 +vt 0.862745 0.854167 +vt 0.862745 0.020833 +vt 0.264706 0.541667 +vt 0.284314 0.562500 +vt 0.264706 0.562500 +vt 0.862745 0.916667 +vt 0.509804 0.937500 +vt 0.509804 0.916667 +vt 0.892157 0.020833 +vt 0.882353 0.854167 +vt 0.882353 0.020833 +vt 0.299020 0.593750 +vt 0.289216 0.656250 +vt 0.289216 0.593750 +vt 0.264706 0.541667 +vt 0.284314 0.562500 +vt 0.264706 0.562500 +vt 0.259804 0.572917 +vt 0.289216 0.677083 +vt 0.259804 0.656250 +vt 0.289216 0.656250 +vt 0.254902 0.583333 +vt 0.235294 0.541667 +vt 0.235294 0.083333 +vt 0.274510 0.333333 +vt 0.235294 0.333333 +vt 0.250000 0.656250 +vt 0.259804 0.593750 +vt 0.259804 0.656250 +vt 0.509804 1.000000 +vt 0.313726 0.583333 +vt 0.509804 0.583333 +vt 0.509804 0.500000 +vt 0.549020 0.083333 +vt 0.549020 0.500000 +vt 0.862745 0.916667 +vt 0.509804 0.937500 +vt 0.509804 0.916667 +vt 0.294118 0.541667 +vt 0.274510 0.500000 +vt 0.509804 0.979167 +vt 0.862745 0.958333 +vt 0.862745 0.979167 +vt 0.294118 0.541667 +vt 0.274510 0.500000 +vt 0.862745 0.937500 +vt 0.509804 0.958333 +vt 0.294118 0.541667 +vt 0.274510 0.500000 +vt 0.294118 0.500000 +vt 0.588235 0.083333 +vt 0.549020 0.833333 +vt 0.549020 0.083333 +vt 0.882353 0.020833 +vt 0.862745 0.854167 +vt 0.862745 0.020833 +vt 0.299020 0.593750 +vt 0.289216 0.593750 +vt 0.235294 0.666667 +vt 0.039216 0.416667 +vt 0.235294 0.416667 +vt 0.289216 0.677083 +vt 0.259804 0.656250 +vt 0.289216 0.656250 +vt 0.313726 0.604167 +vt 0.303922 0.645833 +vt 0.303922 0.604167 +vt 0.921569 0.020833 +vt 0.921569 0.854167 +vt 0.313726 0.500000 +vt 0.254902 0.583333 +vt 0.235294 0.541667 +vt 0.313726 0.604167 +vt 0.303922 0.645833 +vt 0.303922 0.604167 +vt 0.254902 0.583333 +vt 0.235294 0.541667 +vt 0.254902 0.541667 +vt 0.892157 0.020833 +vt 0.882353 0.854167 +vt 0.264706 0.687500 +vt 0.289216 0.677083 +vt 0.284314 0.687500 +vt 0.245098 0.604167 +vt 0.250000 0.656250 +vt 0.245098 0.645833 +vt 0.284314 0.562500 +vt 0.259804 0.572917 +vt 0.264706 0.562500 +vt 0.303922 0.645833 +vt 0.299020 0.593750 +vt 0.303922 0.604167 +vt 0.892157 0.020833 +vt 0.882353 0.854167 +vt 0.882353 0.020833 +vt 0.911765 0.875000 +vt 0.892157 0.875000 +vt 0.911765 0.020833 +vt 0.892157 -0.000000 +vt 0.911765 -0.000000 +vt 0.259804 0.572917 +vt 0.259804 0.593750 +vt 0.911765 0.854167 +vt 0.892157 0.854167 +vt 0.862745 0.854167 +vt 0.862745 0.020833 +vt 0.862745 0.854167 +vt 0.862745 0.020833 +vt 0.264706 0.687500 +vt 0.289216 0.677083 +vt 0.284314 0.687500 +vt 0.245098 0.604167 +vt 0.250000 0.656250 +vt 0.245098 0.645833 +vt 0.259804 0.572917 +vt 0.303922 0.645833 +vt 0.303922 0.604167 +vt 0.509804 0.979167 +vt 0.862745 0.958333 +vt 0.862745 0.979167 +vt 0.264706 0.687500 +vt 0.289216 0.677083 +vt 0.284314 0.687500 +vt 0.245098 0.604167 +vt 0.250000 0.656250 +vt 0.245098 0.645833 +vt 0.284314 0.562500 +vt 0.259804 0.572917 +vt 0.264706 0.562500 +vt 0.299020 0.593750 +vt 0.313726 0.604167 +vt 0.892157 0.854167 +vt 0.911765 0.875000 +vt 0.892157 0.875000 +vt 0.235294 0.645833 +vt 0.245098 0.604167 +vt 0.245098 0.645833 +vt 0.509804 0.979167 +vt 0.862745 0.958333 +vt 0.862745 0.979167 +vt 0.039216 0.333333 +vt 0.313726 0.604167 +vt 0.289216 0.677083 +vt 0.245098 0.604167 +vt 0.245098 0.645833 +vt 0.259804 0.572917 +vt 0.862745 0.916667 +vt 0.509804 0.937500 +vt 0.509804 0.916667 +vt 0.264706 0.687500 +vt 0.284314 0.687500 +vt 0.250000 0.656250 +vt 0.303922 0.645833 +vt 0.303922 0.604167 +vt 0.284314 0.708333 +vt 0.264706 0.687500 +vt 0.284314 0.687500 +vt 0.274510 0.541667 +vt 0.254902 0.500000 +vt 0.289216 0.656250 +vt 0.289216 0.593750 +vt 0.509804 1.000000 +vt 0.862745 1.000000 +vt 0.259804 0.656250 +vt 0.259804 0.593750 +vt 0.000000 0.083333 +vt 0.000000 0.333333 +vt 0.289216 0.677083 +vt 0.284314 0.562500 +vt 0.264706 0.562500 +vt 0.303922 0.645833 +vt 0.299020 0.593750 +vt 0.303922 0.604167 +vt 0.911765 0.875000 +vt 0.892157 0.875000 +vt 0.235294 0.645833 +vt 0.245098 0.604167 +vt 0.245098 0.645833 +vt 0.250000 0.656250 +vt 0.284314 0.562500 +vt 0.259804 0.572917 +vt 0.264706 0.562500 +vt 0.911765 0.020833 +vt 0.892157 -0.000000 +vt 0.911765 -0.000000 +vt 0.313726 0.604167 +vt 0.303922 0.645833 +vt 0.303922 0.604167 +vt 0.254902 0.458333 +vt 0.235294 0.458333 +vt 0.259804 0.656250 +vt 0.259804 0.593750 +vt 0.264706 0.687500 +vt 0.284314 0.687500 +vt 0.245098 0.604167 +vt 0.250000 0.656250 +vt 0.245098 0.645833 +vt 0.284314 0.562500 +vt 0.259804 0.572917 +vt 0.264706 0.562500 +vt 0.299020 0.593750 +vt 0.289216 0.656250 +vt 0.289216 0.593750 +vt 0.039216 -0.000000 +vt 0.235294 -0.000000 +vt 0.259804 0.677083 +vt 0.250000 0.593750 +vt 0.289216 0.572917 +vt 0.299020 0.656250 +vt 0.259804 0.677083 +vt 0.250000 0.593750 +vt 0.289216 0.572917 +vt 0.299020 0.656250 +vt 0.259804 0.677083 +vt 0.250000 0.593750 +vt 0.289216 0.572917 +vt 0.299020 0.656250 +vt 0.259804 0.677083 +vt 0.250000 0.593750 +vt 0.289216 0.572917 +vt 0.299020 0.656250 +vt 0.259804 0.677083 +vt 0.250000 0.593750 +vt 0.289216 0.572917 +vt 0.299020 0.656250 +vt 0.259804 0.677083 +vt 0.250000 0.593750 +vt 0.289216 0.572917 +vt 0.299020 0.656250 +vt 0.259804 0.677083 +vt 0.250000 0.593750 +vt 0.289216 0.572917 +vt 0.299020 0.656250 +vt 0.259804 0.677083 +vt 0.250000 0.593750 +vt 0.289216 0.572917 +vt 0.299020 0.656250 +vt 0.911765 0.854167 +vt 0.892157 0.854167 +vt 0.264706 0.541667 +vt 0.235294 0.645833 +vt 0.235294 0.645833 +vt 0.274510 0.541667 +vt 0.911765 0.854167 +vt 0.921569 0.020833 +vt 0.921569 0.854167 +vt 0.254902 0.458333 +vt 0.235294 0.458333 +vt 0.235294 0.645833 +vt 0.313726 0.604167 +vt 0.284314 0.708333 +vt 0.264706 0.541667 +vt 0.313726 0.541667 +vt 0.313726 0.500000 +vt 0.235294 0.645833 +vt 0.313726 0.604167 +vt 0.289216 0.656250 +vt 0.313726 0.083333 +vt 0.274510 0.500000 +vt 0.274510 0.083333 +vt 0.509804 1.000000 +vt 0.862745 1.000000 +vt 0.705882 -0.000000 +vt 0.588235 -0.000000 +vt 0.289216 0.593750 +vt 0.259804 0.593750 +vt 0.254902 0.458333 +vt 0.235294 0.458333 +vt 0.911765 0.854167 +vt 0.921569 0.020833 +vt 0.921569 0.854167 +vt 0.705882 0.083333 +vt 0.745098 0.833333 +vt 0.705882 0.833333 +vt 0.509804 0.083333 +vt 0.313726 -0.000000 +vt 0.509804 -0.000000 +vt 0.921569 0.020833 +vt 0.921569 0.854167 +vt 0.588235 0.916667 +vt 0.588235 0.833333 +vt 0.862745 0.937500 +vt 0.509804 0.958333 +vt 0.509804 0.979167 +vt 0.862745 0.958333 +vt 0.259804 0.656250 +vt 0.284314 0.708333 +vt 0.259804 0.593750 +vt 0.235294 0.500000 +vt 0.509804 1.000000 +vt 0.862745 1.000000 +vt 0.259804 0.593750 +vt 0.274510 0.541667 +vt 0.264706 0.541667 +vt 0.284314 0.708333 +vt 0.921569 0.020833 +vt 0.921569 0.854167 +vt 0.911765 0.020833 +vt 0.892157 -0.000000 +vt 0.911765 -0.000000 +vt 0.274510 0.541667 +vt 0.892157 0.020833 +vt 0.882353 0.854167 +vt 0.039216 0.083333 +vt 0.892157 0.854167 +vt 0.284314 0.708333 +vt 0.911765 0.020833 +vt 0.892157 -0.000000 +vt 0.911765 -0.000000 +vt 0.264706 0.541667 +vt 0.313726 0.541667 +vt 0.313726 0.500000 +vt 0.882353 0.020833 +vt 0.862745 0.854167 +vt 0.862745 0.020833 +vt 0.284314 0.708333 +vt 0.862745 0.916667 +vt 0.509804 0.916667 +vt 0.862745 0.083333 +vt 0.862745 0.833333 +vt 0.264706 0.541667 +vt 0.235294 0.645833 +vt 0.911765 0.875000 +vt 0.892157 0.875000 +vt 0.862745 0.937500 +vt 0.509804 0.958333 +vt 0.254902 0.458333 +vt 0.235294 0.458333 +vt 0.254902 0.583333 +vt 0.235294 0.541667 +vt 0.911765 0.020833 +vt 0.892157 -0.000000 +vt 0.911765 -0.000000 +vt 0.911765 0.875000 +vt 0.892157 0.875000 +vt 0.882353 0.854167 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.921569 0.250000 +vt 0.975490 -0.000000 +vt 1.000000 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.946078 0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.921569 0.250000 +vt 0.975490 -0.000000 +vt 1.000000 0.250000 +vt 0.921569 0.250000 +vt 0.975490 -0.000000 +vt 1.000000 0.250000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 0.921569 0.375000 +vt 0.975490 0.625000 +vt 0.946078 0.625000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 0.921569 0.375000 +vt 0.975490 0.625000 +vt 0.946078 0.625000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 1.000000 0.375000 +vt 0.946078 0.625000 +vt 0.921569 0.375000 +vt 0.980392 0.750055 +vt 0.999974 0.791666 +vt 0.980392 0.833278 +vt 0.921595 0.791667 +vt 0.941176 0.750055 +vt 0.960758 0.791666 +vt 0.539216 0.833333 +vt 0.549020 0.500000 +vt 0.549020 0.833333 +vt 0.539216 0.833333 +vt 0.549020 0.500000 +vt 0.549020 0.833333 +vt 0.529412 0.500000 +vt 0.519608 0.833333 +vt 0.519608 0.500000 +vt 0.529412 0.500000 +vt 0.519608 0.833333 +vt 0.519608 0.500000 +vt 0.509804 0.833333 +vt 0.509804 0.500000 +vt 0.539216 0.500000 +vt 0.529412 0.833333 +vt 0.509804 0.833333 +vt 0.509804 0.500000 +vt 0.539216 0.500000 +vt 0.529412 0.833333 +vt 0.539216 0.833333 +vt 0.549020 0.500000 +vt 0.549020 0.833333 +vt 0.529412 0.500000 +vt 0.519608 0.833333 +vt 0.519608 0.500000 +vt 0.529412 0.500000 +vt 0.519608 0.833333 +vt 0.519608 0.500000 +vt 0.539216 0.833333 +vt 0.549020 0.500000 +vt 0.549020 0.833333 +vt 0.509804 0.500000 +vt 0.509804 0.833333 +vt 0.539216 0.500000 +vt 0.529412 0.833333 +vt 0.509804 0.833333 +vt 0.539216 0.500000 +vt 0.284314 0.541667 +vt 0.235294 0.604167 +vt 0.313726 0.645833 +vt 0.264706 0.708333 +vt 0.264706 0.708333 +vt 0.284314 0.541667 +vt 0.284314 0.541667 +vt 0.235294 0.583333 +vt 0.274510 0.083333 +vt 0.313726 1.000000 +vt 0.039216 0.666667 +vt 0.313726 0.645833 +vt 0.235294 0.583333 +vt 0.313726 0.645833 +vt 0.235294 0.583333 +vt 0.313726 0.645833 +vt 0.235294 0.604167 +vt 0.313726 0.645833 +vt 0.264706 0.708333 +vt 0.235294 0.604167 +vt 0.313726 0.645833 +vt 0.284314 0.541667 +vt 0.235294 0.604167 +vt 0.235294 0.604167 +vt 0.235294 0.604167 +vt 0.313726 0.645833 +vt 0.264706 0.708333 +vt 0.284314 0.541667 +vt 0.235294 0.604167 +vt 0.313726 0.645833 +vt 0.745098 0.083333 +vt 0.705882 0.916667 +vt 0.264706 0.708333 +vt 0.284314 0.541667 +vt 0.264706 0.708333 +vt 0.264706 0.708333 +vt 0.284314 0.541667 +vt 0.264706 0.708333 +vt 0.284314 0.541667 +vt 0.235294 0.604167 +vt 0.235294 0.583333 +vt 0.975490 -0.000000 +vt 0.946078 -0.000000 +vt 0.975490 -0.000000 +vt 0.975490 0.000000 +vt 0.975490 -0.000000 +vt 0.975490 0.000000 +vt 0.975490 -0.000000 +vt 0.975490 -0.000000 +vt 0.975490 -0.000000 +vt 0.975490 -0.000000 +vt 0.975490 -0.000000 +vt 0.975490 0.000000 +vt 0.975490 -0.000000 +vt 0.975490 0.000000 +vt 0.946078 -0.000000 +vt 0.946078 -0.000000 +vt 0.975490 0.625000 +vt 1.000000 0.375000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 1.000000 0.375000 +vt 0.975490 0.625000 +vt 0.975490 0.625000 +vt 0.966546 0.821090 +vt 0.960810 0.791667 +vt 0.966546 0.762243 +vt 0.994239 0.762243 +vt 0.994239 0.821090 +vt 0.955023 0.821090 +vt 0.941176 0.833278 +vt 0.927330 0.821090 +vt 0.927330 0.762243 +vt 0.955023 0.762243 +vt 0.529412 0.833333 +vt 0.509804 0.500000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.946078 0.750000 +vt 0.975490 0.750000 +vt 0.950980 0.875000 +vt 0.936275 1.000000 +vt 0.936275 0.875000 +vt 0.921569 0.875000 +vt 0.906863 1.000000 +vt 0.906863 0.875000 +vt 0.892157 0.875000 +vt 0.877451 1.000000 +vt 0.877451 0.875000 +vt 0.980392 0.875000 +vt 0.965686 1.000000 +vt 0.965686 0.875000 +vt 0.921569 1.000000 +vt 0.892157 1.000000 +vt 0.862745 1.000000 +vt 0.862745 0.875000 +vt 0.950980 1.000000 +vt 0.980392 1.000000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 -0.0000 0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.3827 0.0000 -0.9239 +vn 0.3827 -0.0000 0.9239 +vn 0.9239 -0.0000 0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn -0.9239 -0.0000 -0.3827 +vn -0.9239 -0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +s off +f 427/371/25 417/372/25 419/373/25 +f 400/374/26 390/375/26 388/376/26 +f 394/377/27 386/378/27 391/379/27 +f 440/380/28 435/381/28 434/382/28 +f 253/383/26 251/384/26 249/385/26 +f 220/386/25 219/387/25 218/388/25 +f 228/389/25 227/390/25 226/391/25 +f 212/392/25 211/393/25 210/394/25 +f 430/395/25 420/396/25 428/397/25 +f 437/398/25 445/399/25 438/400/25 +f 423/401/29 419/373/29 417/372/29 +f 447/402/28 444/403/28 445/404/28 +f 319/405/28 318/406/28 316/407/28 +f 244/408/28 246/409/28 247/410/28 +f 442/411/25 434/382/25 439/412/25 +f 230/413/27 225/414/27 227/415/27 +f 399/416/28 396/417/28 397/418/28 +f 214/419/27 209/420/27 211/421/27 +f 237/422/30 239/423/30 233/424/30 +f 320/425/26 315/426/26 313/427/26 +f 416/428/26 406/429/26 404/430/26 +f 271/431/29 265/432/29 268/433/29 +f 327/434/25 322/435/25 328/436/25 +f 362/437/29 354/438/29 359/439/29 +f 368/440/26 358/441/26 356/442/26 +f 425/443/26 423/401/26 417/372/26 +f 408/444/28 403/445/28 402/446/28 +f 232/447/28 230/448/28 228/389/28 +f 295/449/29 290/450/29 296/451/29 +f 395/452/29 385/453/29 387/454/29 +f 287/455/26 283/456/26 281/457/26 +f 285/458/29 287/459/29 281/460/29 +f 263/461/27 257/462/27 260/463/27 +f 229/464/30 231/465/30 225/414/30 +f 256/466/30 250/467/30 254/468/30 +f 213/469/30 215/470/30 209/420/30 +f 261/471/26 259/472/26 257/462/26 +f 221/473/30 223/474/30 217/475/30 +f 304/476/27 299/477/27 297/478/27 +f 336/479/26 331/480/26 329/481/26 +f 410/482/30 402/446/30 407/483/30 +f 292/484/26 291/485/26 290/486/26 +f 456/487/28 451/488/28 450/489/28 +f 389/490/27 397/491/27 390/492/27 +f 318/406/30 313/493/30 315/494/30 +f 286/495/30 281/457/30 283/456/30 +f 216/496/28 214/497/28 212/392/28 +f 373/498/27 381/499/27 374/500/27 +f 240/501/28 238/502/28 236/503/28 +f 335/504/25 330/505/25 336/479/25 +f 348/506/30 344/507/30 349/508/30 +f 340/509/30 347/510/30 348/511/30 +f 342/512/30 345/513/30 340/514/30 +f 349/515/30 346/516/30 342/517/30 +f 311/518/25 306/519/25 312/520/25 +f 316/407/27 315/521/27 314/522/27 +f 317/523/29 320/524/29 313/525/29 +f 409/526/26 407/483/26 401/527/26 +f 311/518/28 310/528/28 308/529/28 +f 312/520/26 307/530/26 305/531/26 +f 328/436/26 323/532/26 321/533/26 +f 364/534/30 360/535/30 365/536/30 +f 356/537/30 363/538/30 364/539/30 +f 358/441/30 361/540/30 356/442/30 +f 365/541/30 362/437/30 358/542/30 +f 272/543/27 266/544/27 270/545/27 +f 380/546/25 376/547/25 381/548/25 +f 372/549/25 379/550/25 380/551/25 +f 374/552/25 377/553/25 372/554/25 +f 381/499/25 378/555/25 374/500/25 +f 341/556/29 349/515/29 342/517/29 +f 276/557/27 275/558/27 274/559/27 +f 414/560/25 404/561/25 412/562/25 +f 264/563/29 258/564/29 262/565/29 +f 296/451/30 291/485/30 289/566/30 +f 357/567/29 365/541/29 358/542/29 +f 396/417/25 392/568/25 397/418/25 +f 388/569/25 395/452/25 396/570/25 +f 390/375/25 393/571/25 388/376/25 +f 397/491/25 394/377/25 390/492/25 +f 247/572/30 241/573/30 244/574/30 +f 412/575/27 408/444/27 413/576/27 +f 404/561/27 411/577/27 412/562/27 +f 406/429/27 409/526/27 404/430/27 +f 413/578/27 410/482/27 406/579/27 +f 431/580/28 428/581/28 429/582/28 +f 240/583/29 234/584/29 239/423/29 +f 378/555/27 370/585/27 375/586/27 +f 260/587/28 262/565/28 263/588/28 +f 375/586/30 371/589/30 369/590/30 +f 294/591/27 289/566/27 291/592/27 +f 428/581/27 424/593/27 429/582/27 +f 420/396/27 427/371/27 428/397/27 +f 422/594/27 425/443/27 420/595/27 +f 429/596/27 426/597/27 422/598/27 +f 308/529/27 307/599/27 306/600/27 +f 446/601/30 436/602/30 444/603/30 +f 444/403/29 440/380/29 445/404/29 +f 436/602/29 443/604/29 444/603/29 +f 438/605/29 441/606/29 436/607/29 +f 445/399/29 442/411/29 438/400/29 +f 277/608/29 280/609/29 273/610/29 +f 453/611/25 461/612/25 454/613/25 +f 223/614/26 219/387/26 217/615/26 +f 359/439/25 355/616/25 353/617/25 +f 393/571/26 391/379/26 385/453/26 +f 460/618/29 456/487/29 461/619/29 +f 452/620/29 459/621/29 460/622/29 +f 454/623/29 457/624/29 452/625/29 +f 461/612/29 458/626/29 454/613/29 +f 346/516/29 338/627/29 343/628/29 +f 295/449/25 294/629/25 292/630/25 +f 376/547/28 371/589/28 370/585/28 +f 348/506/30 347/631/30 344/507/30 +f 340/509/30 345/632/30 347/510/30 +f 342/512/30 346/633/30 345/513/30 +f 349/515/30 344/634/30 346/516/30 +f 364/534/30 363/635/30 360/535/30 +f 356/537/30 361/636/30 363/538/30 +f 358/441/30 362/637/30 361/540/30 +f 365/541/30 360/638/30 362/437/30 +f 380/546/25 379/639/25 376/547/25 +f 372/549/25 377/640/25 379/550/25 +f 374/552/25 378/641/25 377/553/25 +f 381/499/25 376/642/25 378/555/25 +f 396/417/25 395/643/25 392/568/25 +f 388/569/25 393/644/25 395/452/25 +f 390/375/25 394/645/25 393/571/25 +f 397/491/25 392/646/25 394/377/25 +f 412/575/27 411/647/27 408/444/27 +f 404/561/27 409/648/27 411/577/27 +f 406/429/27 410/649/27 409/526/27 +f 413/578/27 408/650/27 410/482/27 +f 428/581/27 427/651/27 424/593/27 +f 420/396/27 425/652/27 427/371/27 +f 422/594/27 426/653/27 425/443/27 +f 429/596/27 424/654/27 426/597/27 +f 444/403/29 443/655/29 440/380/29 +f 436/602/29 441/656/29 443/604/29 +f 438/605/29 442/657/29 441/606/29 +f 445/399/29 440/658/29 442/411/29 +f 460/618/29 459/659/29 456/487/29 +f 452/620/29 457/660/29 459/621/29 +f 454/623/29 458/661/29 457/624/29 +f 461/612/29 456/662/29 458/626/29 +f 327/434/28 326/663/28 324/664/28 +f 352/665/26 342/512/26 340/514/26 +f 350/666/27 340/509/27 348/511/27 +f 379/550/29 369/590/29 371/589/29 +f 366/667/27 356/537/27 364/539/27 +f 216/668/29 210/394/29 215/470/29 +f 363/538/27 353/617/27 355/616/27 +f 334/669/30 329/670/30 331/671/30 +f 231/672/26 227/390/26 225/673/26 +f 398/674/29 388/569/29 396/570/29 +f 421/675/30 429/596/30 422/598/30 +f 351/676/28 348/506/28 349/508/28 +f 384/677/26 374/552/26 372/554/26 +f 222/678/27 217/475/27 219/679/27 +f 462/680/30 452/620/30 460/622/30 +f 405/681/30 413/578/30 406/579/30 +f 361/540/26 359/439/26 353/617/26 +f 426/597/30 418/682/30 423/401/30 +f 411/577/25 401/527/25 403/445/25 +f 407/483/29 403/445/29 401/527/29 +f 284/683/27 283/684/27 282/685/27 +f 268/686/28 270/545/28 271/687/28 +f 301/688/25 304/476/25 297/689/25 +f 457/624/26 455/690/26 449/691/26 +f 215/692/26 211/393/26 209/693/26 +f 278/694/30 273/695/30 275/696/30 +f 303/697/29 302/698/29 300/699/29 +f 288/700/25 282/701/25 287/702/25 +f 310/528/30 305/703/30 307/704/30 +f 300/699/30 299/705/30 298/706/30 +f 269/707/26 267/708/26 265/432/26 +f 248/709/25 242/710/25 246/409/25 +f 344/507/28 339/711/28 338/627/28 +f 463/712/28 460/618/28 461/619/28 +f 343/628/25 339/711/25 337/713/25 +f 236/503/25 235/714/25 234/584/25 +f 252/715/28 254/468/28 255/716/28 +f 443/604/30 433/717/30 435/381/30 +f 232/718/29 226/391/29 231/465/29 +f 448/719/26 438/605/26 436/607/26 +f 383/720/28 380/546/28 381/548/28 +f 326/663/30 321/721/30 323/722/30 +f 309/723/29 312/724/29 305/725/29 +f 224/726/29 218/388/29 223/474/29 +f 279/727/28 278/694/28 276/557/28 +f 347/510/27 337/713/27 339/711/27 +f 319/405/25 314/728/25 320/425/25 +f 293/729/28 296/451/28 289/566/28 +f 345/513/26 343/628/26 337/713/26 +f 335/504/28 334/669/28 332/730/28 +f 367/731/28 364/534/28 365/536/28 +f 424/593/28 419/373/28 418/682/28 +f 439/412/27 435/381/27 433/717/27 +f 288/700/28 286/495/28 284/683/28 +f 325/732/29 328/733/29 321/734/29 +f 464/735/26 454/623/26 452/625/26 +f 238/736/27 233/424/27 235/737/27 +f 280/738/26 275/739/26 273/740/26 +f 391/379/30 387/454/30 385/453/30 +f 377/553/26 375/586/26 369/590/26 +f 415/741/28 412/575/28 413/576/28 +f 255/742/25 249/385/25 252/743/25 +f 302/698/26 297/744/26 299/745/26 +f 300/699/28 304/476/28 303/697/28 +f 432/746/26 422/594/26 420/595/26 +f 459/621/30 449/691/30 451/488/30 +f 382/747/29 372/549/29 380/551/29 +f 324/664/27 323/748/27 322/749/27 +f 245/750/26 243/751/26 241/573/26 +f 458/626/25 450/489/25 455/690/25 +f 455/690/27 451/488/27 449/691/27 +f 239/752/26 235/714/26 233/753/26 +f 441/606/26 439/412/26 433/717/26 +f 224/754/28 222/755/28 220/386/28 +f 333/756/29 336/757/29 329/758/29 +f 392/568/28 387/454/28 386/378/28 +f 332/730/27 331/759/27 330/760/27 +f 279/727/25 274/761/25 280/738/25 +f 360/535/28 355/616/28 354/438/28 +f 488/762/26 473/763/26 472/764/26 +f 471/765/26 488/766/26 472/767/26 +f 486/768/26 471/769/26 470/770/26 +f 485/771/26 470/772/26 469/773/26 +f 484/774/26 469/775/26 468/776/26 +f 483/777/26 468/778/26 467/779/26 +f 482/780/26 467/781/26 466/782/26 +f 481/783/26 466/784/26 465/785/26 +f 496/786/26 465/787/26 480/788/26 +f 495/789/26 480/790/26 479/791/26 +f 494/792/26 479/793/26 478/794/26 +f 493/795/26 478/796/26 477/797/26 +f 492/798/26 477/799/26 476/800/26 +f 491/801/26 476/802/26 475/803/26 +f 474/804/26 491/805/26 475/806/26 +f 473/807/26 490/808/26 474/809/26 +f 505/810/28 520/811/28 504/812/28 +f 503/813/28 520/814/28 519/815/28 +f 503/816/28 518/817/28 502/818/28 +f 502/819/28 517/820/28 501/821/28 +f 501/822/28 516/823/28 500/824/28 +f 500/825/28 515/826/28 499/827/28 +f 499/828/28 513/829/28 497/830/28 +f 497/831/28 514/832/28 498/833/28 +f 498/834/28 528/835/28 512/836/28 +f 512/837/28 527/838/28 511/839/28 +f 511/840/28 526/841/28 510/842/28 +f 510/843/28 525/844/28 509/845/28 +f 509/846/28 524/847/28 508/848/28 +f 507/849/28 524/850/28 523/851/28 +f 507/852/28 522/853/28 506/854/28 +f 506/855/28 521/856/28 505/857/28 +f 535/858/26 533/859/26 531/860/26 +f 541/861/28 543/862/28 538/863/28 +f 546/864/30 547/865/30 545/866/30 +f 554/867/27 555/868/27 553/869/27 +f 552/870/25 549/871/25 551/872/25 +f 560/873/29 557/874/29 559/875/29 +f 551/872/26 545/876/26 547/877/26 +f 548/878/28 550/879/28 552/870/28 +f 559/875/26 553/880/26 555/881/26 +f 556/882/28 558/883/28 560/873/28 +f 562/884/31 563/885/31 561/886/31 +f 570/887/32 571/888/32 569/889/32 +f 568/890/33 565/891/33 567/892/33 +f 576/893/34 573/894/34 575/895/34 +f 563/896/26 565/891/26 561/897/26 +f 564/898/28 566/899/28 568/890/28 +f 575/900/26 569/889/26 571/888/26 +f 576/893/28 570/887/28 574/901/28 +f 427/371/25 425/652/25 417/372/25 +f 400/374/26 389/902/26 390/375/26 +f 394/377/27 392/646/27 386/378/27 +f 440/380/28 443/655/28 435/381/28 +f 253/383/26 250/467/26 251/384/26 +f 220/386/25 222/755/25 219/387/25 +f 228/389/25 230/448/25 227/390/25 +f 212/392/25 214/497/25 211/393/25 +f 430/395/25 432/903/25 420/396/25 +f 437/398/25 447/904/25 445/399/25 +f 423/401/29 418/682/29 419/373/29 +f 447/402/28 446/905/28 444/403/28 +f 319/405/28 317/523/28 318/406/28 +f 244/408/28 248/709/28 246/409/28 +f 442/411/25 440/658/25 434/382/25 +f 230/413/27 229/464/27 225/414/27 +f 399/416/28 398/906/28 396/417/28 +f 214/419/27 213/469/27 209/420/27 +f 237/422/30 240/583/30 239/423/30 +f 320/425/26 314/728/26 315/426/26 +f 416/428/26 405/907/26 406/429/26 +f 271/431/29 269/707/29 265/432/29 +f 327/434/25 324/664/25 322/435/25 +f 362/437/29 360/638/29 354/438/29 +f 368/440/26 357/908/26 358/441/26 +f 425/443/26 426/653/26 423/401/26 +f 408/444/28 411/647/28 403/445/28 +f 232/447/28 229/909/28 230/448/28 +f 295/449/29 292/910/29 290/450/29 +f 395/452/29 393/644/29 385/453/29 +f 287/455/26 282/911/26 283/456/26 +f 285/458/29 288/700/29 287/459/29 +f 263/461/27 261/471/27 257/462/27 +f 229/464/30 232/718/30 231/465/30 +f 256/466/30 251/384/30 250/467/30 +f 213/469/30 216/668/30 215/470/30 +f 261/471/26 258/564/26 259/472/26 +f 221/473/30 224/726/30 223/474/30 +f 304/476/27 298/706/27 299/477/27 +f 336/479/26 330/505/26 331/480/26 +f 410/482/30 408/650/30 402/446/30 +f 292/484/26 294/912/26 291/485/26 +f 456/487/28 459/659/28 451/488/28 +f 389/490/27 399/913/27 397/491/27 +f 318/406/30 317/523/30 313/493/30 +f 286/495/30 285/458/30 281/457/30 +f 216/496/28 213/914/28 214/497/28 +f 373/498/27 383/915/27 381/499/27 +f 240/501/28 237/916/28 238/502/28 +f 335/504/25 332/730/25 330/505/25 +f 311/518/25 308/529/25 306/519/25 +f 316/407/27 318/406/27 315/521/27 +f 317/523/29 319/405/29 320/524/29 +f 409/526/26 410/649/26 407/483/26 +f 311/518/28 309/723/28 310/528/28 +f 312/520/26 306/519/26 307/530/26 +f 328/436/26 322/435/26 323/532/26 +f 272/543/27 267/708/27 266/544/27 +f 341/556/29 351/917/29 349/515/29 +f 276/557/27 278/694/27 275/558/27 +f 414/560/25 416/918/25 404/561/25 +f 264/563/29 259/472/29 258/564/29 +f 296/451/30 290/486/30 291/485/30 +f 357/567/29 367/919/29 365/541/29 +f 247/572/30 245/750/30 241/573/30 +f 431/580/28 430/920/28 428/581/28 +f 240/583/29 236/503/29 234/584/29 +f 378/555/27 376/642/27 370/585/27 +f 260/587/28 264/563/28 262/565/28 +f 375/586/30 370/585/30 371/589/30 +f 294/591/27 293/729/27 289/566/27 +f 308/529/27 310/528/27 307/599/27 +f 446/601/30 448/921/30 436/602/30 +f 277/608/29 279/727/29 280/609/29 +f 453/611/25 463/922/25 461/612/25 +f 223/614/26 218/388/26 219/387/26 +f 359/439/25 354/438/25 355/616/25 +f 393/571/26 394/645/26 391/379/26 +f 346/516/29 344/634/29 338/627/29 +f 295/449/25 293/729/25 294/629/25 +f 376/547/28 379/639/28 371/589/28 +f 327/434/28 325/732/28 326/663/28 +f 352/665/26 341/923/26 342/512/26 +f 350/666/27 352/924/27 340/509/27 +f 379/550/29 377/640/29 369/590/29 +f 366/667/27 368/925/27 356/537/27 +f 216/668/29 212/392/29 210/394/29 +f 363/538/27 361/636/27 353/617/27 +f 334/669/30 333/756/30 329/670/30 +f 231/672/26 226/391/26 227/390/26 +f 398/674/29 400/926/29 388/569/29 +f 421/675/30 431/927/30 429/596/30 +f 351/676/28 350/928/28 348/506/28 +f 384/677/26 373/929/26 374/552/26 +f 222/678/27 221/473/27 217/475/27 +f 462/680/30 464/930/30 452/620/30 +f 405/681/30 415/931/30 413/578/30 +f 361/540/26 362/637/26 359/439/26 +f 426/597/30 424/654/30 418/682/30 +f 411/577/25 409/648/25 401/527/25 +f 407/483/29 402/446/29 403/445/29 +f 284/683/27 286/495/27 283/684/27 +f 268/686/28 272/543/28 270/545/28 +f 301/688/25 303/697/25 304/476/25 +f 457/624/26 458/661/26 455/690/26 +f 215/692/26 210/394/26 211/393/26 +f 278/694/30 277/608/30 273/695/30 +f 303/697/29 301/932/29 302/698/29 +f 288/700/25 284/683/25 282/701/25 +f 310/528/30 309/723/30 305/703/30 +f 300/699/30 302/933/30 299/705/30 +f 269/707/26 266/544/26 267/708/26 +f 248/709/25 243/751/25 242/710/25 +f 344/507/28 347/631/28 339/711/28 +f 463/712/28 462/934/28 460/618/28 +f 343/628/25 338/627/25 339/711/25 +f 236/503/25 238/502/25 235/714/25 +f 252/715/28 256/466/28 254/468/28 +f 443/604/30 441/656/30 433/717/30 +f 232/718/29 228/389/29 226/391/29 +f 448/719/26 437/935/26 438/605/26 +f 383/720/28 382/936/28 380/546/28 +f 326/663/30 325/732/30 321/721/30 +f 309/723/29 311/518/29 312/724/29 +f 224/726/29 220/386/29 218/388/29 +f 279/727/28 277/608/28 278/694/28 +f 347/510/27 345/632/27 337/713/27 +f 319/405/25 316/407/25 314/728/25 +f 293/729/28 295/449/28 296/451/28 +f 345/513/26 346/633/26 343/628/26 +f 335/504/28 333/756/28 334/669/28 +f 367/731/28 366/937/28 364/534/28 +f 424/593/28 427/651/28 419/373/28 +f 439/412/27 434/382/27 435/381/27 +f 288/700/28 285/458/28 286/495/28 +f 325/732/29 327/434/29 328/733/29 +f 464/735/26 453/938/26 454/623/26 +f 238/736/27 237/422/27 233/424/27 +f 280/738/26 274/761/26 275/739/26 +f 391/379/30 386/378/30 387/454/30 +f 377/553/26 378/641/26 375/586/26 +f 415/741/28 414/939/28 412/575/28 +f 255/742/25 253/383/25 249/385/25 +f 302/698/26 301/932/26 297/744/26 +f 300/699/28 298/706/28 304/476/28 +f 432/746/26 421/940/26 422/594/26 +f 459/621/30 457/660/30 449/691/30 +f 382/747/29 384/941/29 372/549/29 +f 324/664/27 326/663/27 323/748/27 +f 245/750/26 242/710/26 243/751/26 +f 458/626/25 456/662/25 450/489/25 +f 455/690/27 450/489/27 451/488/27 +f 239/752/26 234/584/26 235/714/26 +f 441/606/26 442/657/26 439/412/26 +f 224/754/28 221/942/28 222/755/28 +f 333/756/29 335/504/29 336/757/29 +f 392/568/28 395/643/28 387/454/28 +f 332/730/27 334/669/27 331/759/27 +f 279/727/25 276/557/25 274/761/25 +f 360/535/28 363/635/28 355/616/28 +f 488/762/26 489/943/26 473/763/26 +f 471/765/26 487/944/26 488/766/26 +f 486/768/26 487/945/26 471/769/26 +f 485/771/26 486/946/26 470/772/26 +f 484/774/26 485/947/26 469/775/26 +f 483/777/26 484/948/26 468/778/26 +f 482/780/26 483/949/26 467/781/26 +f 481/783/26 482/950/26 466/784/26 +f 496/786/26 481/951/26 465/787/26 +f 495/789/26 496/952/26 480/790/26 +f 494/792/26 495/953/26 479/793/26 +f 493/795/26 494/954/26 478/796/26 +f 492/798/26 493/955/26 477/799/26 +f 491/801/26 492/956/26 476/802/26 +f 474/804/26 490/957/26 491/805/26 +f 473/807/26 489/958/26 490/808/26 +f 505/810/28 521/959/28 520/811/28 +f 503/813/28 504/960/28 520/814/28 +f 503/816/28 519/961/28 518/817/28 +f 502/819/28 518/962/28 517/820/28 +f 501/822/28 517/963/28 516/823/28 +f 500/825/28 516/964/28 515/826/28 +f 499/828/28 515/965/28 513/829/28 +f 497/831/28 513/966/28 514/832/28 +f 498/834/28 514/967/28 528/835/28 +f 512/837/28 528/968/28 527/838/28 +f 511/840/28 527/969/28 526/841/28 +f 510/843/28 526/970/28 525/844/28 +f 509/846/28 525/971/28 524/847/28 +f 507/849/28 508/972/28 524/850/28 +f 507/852/28 523/973/28 522/853/28 +f 506/855/28 522/974/28 521/856/28 +f 531/860/26 530/975/26 529/976/26 +f 529/976/26 536/977/26 535/858/26 +f 535/858/26 534/978/26 533/859/26 +f 533/859/26 532/979/26 531/860/26 +f 531/860/26 529/976/26 535/858/26 +f 538/863/28 537/980/28 539/981/28 +f 539/981/28 540/982/28 541/861/28 +f 541/861/28 542/983/28 543/862/28 +f 543/862/28 544/984/28 538/863/28 +f 538/863/28 539/981/28 541/861/28 +f 546/864/30 548/878/30 547/865/30 +f 554/867/27 556/882/27 555/868/27 +f 552/870/25 550/879/25 549/871/25 +f 560/873/29 558/883/29 557/874/29 +f 551/872/26 549/871/26 545/876/26 +f 548/878/28 546/864/28 550/879/28 +f 559/875/26 557/874/26 553/880/26 +f 556/882/28 554/867/28 558/883/28 +f 562/884/31 564/898/31 563/885/31 +f 570/887/32 572/985/32 571/888/32 +f 568/890/33 566/899/33 565/891/33 +f 576/893/34 574/901/34 573/894/34 +f 563/896/26 567/892/26 565/891/26 +f 564/898/28 562/884/28 566/899/28 +f 575/900/26 573/986/26 569/889/26 +f 576/893/28 572/985/28 570/887/28 +s 1 +f 487/987/33 520/814/35 488/988/35 +f 474/804/36 507/852/32 506/854/36 +f 488/989/35 521/959/29 489/990/29 +f 476/802/37 507/849/32 475/803/32 +f 489/991/29 522/974/38 490/992/38 +f 477/799/25 508/848/37 476/800/37 +f 490/993/38 523/973/34 491/994/34 +f 478/796/39 509/845/25 477/797/25 +f 491/995/34 524/850/40 492/996/40 +f 479/793/33 510/842/39 478/794/39 +f 466/784/38 498/833/29 465/785/29 +f 492/997/40 525/971/30 493/998/30 +f 479/791/33 512/837/35 511/839/33 +f 467/781/34 497/830/38 466/782/38 +f 493/999/30 526/970/41 494/1000/41 +f 465/787/29 512/836/35 480/788/35 +f 467/779/34 500/825/40 499/827/34 +f 494/1001/41 527/969/31 495/1002/31 +f 481/1003/27 513/966/36 482/1004/36 +f 468/776/40 501/822/30 500/824/40 +f 495/1005/31 528/968/42 496/1006/42 +f 482/1007/36 515/965/32 483/1008/32 +f 470/772/41 501/821/30 469/773/30 +f 496/1009/42 514/967/27 481/1010/27 +f 483/1011/32 516/964/37 484/1012/37 +f 471/769/31 502/818/41 470/770/41 +f 484/1013/37 517/963/25 485/1014/25 +f 472/767/42 503/813/31 471/765/31 +f 485/1015/25 518/962/39 486/1016/39 +f 473/763/27 504/812/42 472/764/42 +f 486/1017/39 519/961/33 487/1018/33 +f 474/809/36 505/857/27 473/807/27 +f 529/1019/29 544/1020/33 536/1021/33 +f 535/1022/25 542/1023/32 534/1024/32 +f 533/1025/27 540/1026/31 532/1027/31 +f 531/1028/30 537/1029/34 530/1030/34 +f 536/1021/33 543/1031/25 535/1022/25 +f 534/1024/32 541/1032/27 533/1025/27 +f 532/1027/31 539/1033/30 531/1034/30 +f 530/1030/34 538/1035/29 529/1019/29 +f 487/987/33 519/815/33 520/814/35 +f 474/804/36 475/806/32 507/852/32 +f 488/989/35 520/811/35 521/959/29 +f 476/802/37 508/972/37 507/849/32 +f 489/991/29 521/856/29 522/974/38 +f 477/799/25 509/846/25 508/848/37 +f 490/993/38 522/853/38 523/973/34 +f 478/796/39 510/843/39 509/845/25 +f 491/995/34 523/851/34 524/850/40 +f 479/793/33 511/840/33 510/842/39 +f 466/784/38 497/831/38 498/833/29 +f 492/997/40 524/847/40 525/971/30 +f 479/791/33 480/790/35 512/837/35 +f 467/781/34 499/828/34 497/830/38 +f 493/999/30 525/844/30 526/970/41 +f 465/787/29 498/834/29 512/836/35 +f 467/779/34 468/778/40 500/825/40 +f 494/1001/41 526/841/41 527/969/31 +f 481/1003/27 514/832/27 513/966/36 +f 468/776/40 469/775/30 501/822/30 +f 495/1005/31 527/838/31 528/968/42 +f 482/1007/36 513/829/36 515/965/32 +f 470/772/41 502/819/41 501/821/30 +f 496/1009/42 528/835/42 514/967/27 +f 483/1011/32 515/826/32 516/964/37 +f 471/769/31 503/816/31 502/818/41 +f 484/1013/37 516/823/37 517/963/25 +f 472/767/42 504/960/42 503/813/31 +f 485/1015/25 517/820/25 518/962/39 +f 473/763/27 505/810/27 504/812/42 +f 486/1017/39 518/817/39 519/961/33 +f 474/809/36 506/855/36 505/857/27 +f 529/1019/29 538/1035/29 544/1020/33 +f 535/1022/25 543/1031/25 542/1023/32 +f 533/1025/27 541/1032/27 540/1026/31 +f 531/1028/30 539/1036/30 537/1029/34 +f 536/1021/33 544/1020/33 543/1031/25 +f 534/1024/32 542/1023/32 541/1032/27 +f 532/1027/31 540/1026/31 539/1033/30 +f 530/1030/34 537/1029/34 538/1035/29 diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_rockmill.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_rockmill.png new file mode 100644 index 0000000000000000000000000000000000000000..114c824ac91ce9e5fab6bc7b7c180daef3ae6789 GIT binary patch literal 2754 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/rockmill.png b/src/main/resources/assets/hbm/textures/models/machines/rockmill.png new file mode 100644 index 0000000000000000000000000000000000000000..f519aca4f321149f1a05a32432d61143be7cfd52 GIT binary patch literal 3255 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 Date: Fri, 31 Jul 2026 14:27:22 +0300 Subject: [PATCH 22/40] fix --- src/main/resources/assets/hbm/manual/satellite/spysat.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/manual/satellite/spysat.json b/src/main/resources/assets/hbm/manual/satellite/spysat.json index 296829deb..7e6d48a3c 100644 --- a/src/main/resources/assets/hbm/manual/satellite/spysat.json +++ b/src/main/resources/assets/hbm/manual/satellite/spysat.json @@ -7,7 +7,7 @@ "ru_RU": "Спутник-шпион" }, "content": { - "en_US": "The spy satellite allows remote viewing of earth's surface. Due to RoR pixel displays not existing as of now, surface mapping functionality does not yet work. However, they can be used in detecting loaded chunks and spotting players in a small radius.

* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.
* '$egetsmog$r' writes the numeric value (rounded up) of the current target position's soot pollution to RX.
* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", - "ru_RU": "Спутник-шпион позволяет удаленно вести наблюдение за поверхностью Земли. Из-за отсутствия на данный момент пиксельных дисплеев РпР функция картографирования поверхности пока не работает. Однако их можно использовать для обнаружения прогруженных чанков и выслеживания игроков в небольшом радиусе.

* «§etargetloaded§r» записывает «TRUE» или «FALSE» в RX в зависимости от того, прогружен ли чанк, на который наведен спутник.
* «$egetsmog$r» записывает числовое значение (округленное в большую сторону) загрязнения сажей в текущей целевой позиции в RX.
* «§espotplayers§r» обнаруживает игроков на поверхности в радиусе 250 блоков и записывает все имена через точку с запятой в RX.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" + "en_US": "The spy satellite allows remote viewing of earth's surface. Due to RoR pixel displays not existing as of now, surface mapping functionality does not yet work. However, they can be used in detecting loaded chunks and spotting players in a small radius.

* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.
* '§egetsmog$r' writes the numeric value (rounded up) of the current target position's soot pollution to RX.
* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.

See also:
* [[Satellite]]
* [[Satellite Ground Station]]", + "ru_RU": "Спутник-шпион позволяет удаленно вести наблюдение за поверхностью Земли. Из-за отсутствия на данный момент пиксельных дисплеев РпР функция картографирования поверхности пока не работает. Однако их можно использовать для обнаружения прогруженных чанков и выслеживания игроков в небольшом радиусе.

* «§etargetloaded§r» записывает «TRUE» или «FALSE» в RX в зависимости от того, прогружен ли чанк, на который наведен спутник.
* «§egetsmog$r» записывает числовое значение (округленное в большую сторону) загрязнения сажей в текущей целевой позиции в RX.
* «§espotplayers§r» обнаруживает игроков на поверхности в радиусе 250 блоков и записывает все имена через точку с запятой в RX.

См. также:
* [[Спутник|Satellite]]
* [[Спутниковая наземная станция|Satellite Ground Station]]" } } From c382c92350f61e7dcfaf14fc452b4cdc761bd9e9 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sat, 1 Aug 2026 19:27:34 +0200 Subject: [PATCH 23/40] *neko ark noises* --- .../hbm/blocks/machine/MachineRockMill.java | 6 + .../com/hbm/inventory/OreDictManager.java | 2 +- .../container/ContainerMachineRockMill.java | 69 ++++++ .../hbm/inventory/gui/GUIMachineRockMill.java | 124 +++++++++++ .../inventory/recipes/RockMillRecipes.java | 44 +++- .../recipes/loader/SerializableRecipe.java | 1 + .../machine/TileEntityMachineRockMill.java | 205 +++++++++++++++++- 7 files changed, 447 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineRockMill.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineRockMill.java diff --git a/src/main/java/com/hbm/blocks/machine/MachineRockMill.java b/src/main/java/com/hbm/blocks/machine/MachineRockMill.java index 0368211d0..f8403c76e 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineRockMill.java +++ b/src/main/java/com/hbm/blocks/machine/MachineRockMill.java @@ -5,6 +5,7 @@ import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineRockMill; import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -21,6 +22,11 @@ public class MachineRockMill extends BlockDummyable { if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); return null; } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } @Override public int[] getDimensions() { return new int[] {2, 0, 2, 2, 2, 2}; } @Override public int getOffset() { return 2; } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 32fa4d16c..7276abf96 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -440,7 +440,7 @@ public class OreDictManager { HEMATITE .ore(fromOne(stone_resource, EnumStoneType.HEMATITE)); MALACHITE .ingot(DictFrame.fromOne(chunk_ore, EnumChunkType.MALACHITE)) .ore(fromOne(stone_resource, EnumStoneType.MALACHITE)); LIMESTONE .dust(powder_limestone) .ore(fromOne(stone_resource, EnumStoneType.LIMESTONE)); - BAUXITE .gem(fromOne(stone_resource, EnumStoneType.BAUXITE)); + BAUXITE .ore(fromOne(stone_resource, EnumStoneType.BAUXITE)); CRYOLITE .crystal(fromOne(chunk_ore, EnumChunkType.CRYOLITE)); SLAG .block(block_slag); diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineRockMill.java b/src/main/java/com/hbm/inventory/container/ContainerMachineRockMill.java new file mode 100644 index 000000000..afe318e03 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineRockMill.java @@ -0,0 +1,69 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.util.InventoryUtil; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineRockMill extends ContainerBase { + + public ContainerMachineRockMill(InventoryPlayer invPlayer, IInventory rockMill) { + super(invPlayer, rockMill); + + // Battery + this.addSlotToContainer(new SlotNonRetarded(rockMill, 0, 152, 91)); + // Schematic + this.addSlotToContainer(new SlotNonRetarded(rockMill, 1, 35, 90)); + // Solid Input + this.addSlots(rockMill, 2, 8, 27, 1, 3); + // Solid Output + this.addOutputSlots(invPlayer.player, rockMill, 5, 80, 27, 1, 3); + + this.playerInv(invPlayer, 8, 138); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack slotOriginal = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack slotStack = slot.getStack(); + slotOriginal = slotStack.copy(); + + if(index <= tile.getSizeInventory() - 1) { + SlotCraftingOutput.checkAchievements(player, slotStack); + if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(slotStack, 0, 1, false)) return null; + } else if(slotOriginal.getItem() instanceof ItemBlueprints) { + if(!this.mergeItemStack(slotStack, 1, 2, false)) return null; + } else { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 2, 5, false)) return null; + } + } + + if(slotStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, slotStack); + } + + return slotOriginal; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineRockMill.java b/src/main/java/com/hbm/inventory/gui/GUIMachineRockMill.java new file mode 100644 index 000000000..377e88faf --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineRockMill.java @@ -0,0 +1,124 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineRockMill; +import com.hbm.inventory.gui.element.GUIElements; +import com.hbm.inventory.recipes.RockMillRecipes; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.machine.ItemBlueprints; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineRockMill; +import com.hbm.util.i18n.I18nUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineRockMill extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_rockmill.png"); + private TileEntityMachineRockMill rockMill; + + public GUIMachineRockMill(InventoryPlayer invPlayer, TileEntityMachineRockMill tedf) { + super(new ContainerMachineRockMill(invPlayer, tedf)); + rockMill = tedf; + + this.xSize = 176; + this.ySize = 220; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + rockMill.inputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 63, 52, 16); + rockMill.outputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 63, 52, 16); + + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 71, rockMill.power, rockMill.maxPower); + + if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 89 < mouseY && guiTop + 89 + 18 >= mouseY) { + if(this.rockMill.rockMillModule.getRecipe() != null) { + GenericRecipe recipe = this.rockMill.rockMillModule.getRecipe(); + GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height); + } else { + this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); + } + } + } + + @Override + protected void mouseClicked(int x, int y, int button) { + super.mouseClicked(x, y, button); + + if(this.checkClick(x, y, 7, 89, 18, 18)) GUIScreenRecipeSelector.openSelector(RockMillRecipes.INSTANCE, rockMill, rockMill.rockMillModule.getRecipeName(), 0, ItemBlueprints.grabPool(rockMill.slots[1]), this); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.rockMill.hasCustomInventoryName() ? this.rockMill.getInventoryName() : I18n.format(this.rockMill.getInventoryName()); + + this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int p = (int) (rockMill.power * 71 / rockMill.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 89 - p, 176, 71 - p, 16, p); + + if(rockMill.rockMillModule.progress > 0) { + int j = (int) Math.ceil(70 * rockMill.rockMillModule.progress); + drawTexturedModalRect(guiLeft + 62, guiTop + 90, 176, 71, j, 16); + } + + GenericRecipe recipe = rockMill.rockMillModule.getRecipe(); + + /// LEFT LED + if(rockMill.didProcess) { + drawTexturedModalRect(guiLeft + 51, guiTop + 85, 195, 0, 3, 6); + } else if(recipe != null) { + drawTexturedModalRect(guiLeft + 51, guiTop + 85, 192, 0, 3, 6); + } + + /// RIGHT LED + if(rockMill.didProcess) { + drawTexturedModalRect(guiLeft + 56, guiTop + 85, 195, 0, 3, 6); + } else if(recipe != null && rockMill.power >= recipe.power) { + drawTexturedModalRect(guiLeft + 56, guiTop + 85, 192, 0, 3, 6); + } + + this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 90); + + if(recipe != null && recipe.inputItem != null) { + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(rockMill.rockMillModule.inputSlots[i]); + if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F); + } + + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1F, 1F, 1F, 0.5F); + GL11.glEnable(GL11.GL_BLEND); + this.zLevel = 300F; + for(int i = 0; i < recipe.inputItem.length; i++) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(rockMill.rockMillModule.inputSlots[i]); + if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16); + } + this.zLevel = 0F; + GL11.glColor4f(1F, 1F, 1F, 1F); + GL11.glDisable(GL11.GL_BLEND); + } + + rockMill.inputTanks[0].renderTank(guiLeft + 8, guiTop + 79, this.zLevel, 52, 16, 1); + rockMill.outputTanks[0].renderTank(guiLeft + 80, guiTop + 79, this.zLevel, 52, 16, 1); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java b/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java index 5a04a0365..dc09a6330 100644 --- a/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java @@ -1,7 +1,19 @@ package com.hbm.inventory.recipes; +import static com.hbm.inventory.OreDictManager.*; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.inventory.recipes.loader.GenericRecipes; +import com.hbm.items.ModItems; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; public class RockMillRecipes extends GenericRecipes { @@ -17,6 +29,36 @@ public class RockMillRecipes extends GenericRecipes { @Override public void registerDefaults() { - // TBI + + int consumption = 25; + int duraShort = 100; + int duraLong = 200; + + this.register(new GenericRecipe("rock.cobble").setupNamed(duraShort, consumption).setNameWrapper("rock.crushing") + .inputItems(new OreDictStack(KEY_COBBLESTONE)) + .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputItems(new ChanceOutputMulti( + new ChanceOutput(new ItemStack(Blocks.gravel), 95), + new ChanceOutput(new ItemStack(ModItems.powder_quartz), 5) + )).setIconToFirstIngredient()); + + this.register(new GenericRecipe("rock.gravel").setupNamed(duraShort, consumption).setNameWrapper("rock.crushing") + .inputItems(new ComparableStack(Blocks.gravel)) + .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputItems(new ChanceOutputMulti( + new ChanceOutput(new ItemStack(Blocks.sand), 75), + new ChanceOutput(new ItemStack(Items.flint), 20), + new ChanceOutput(new ItemStack(ModItems.powder_boron), 5) + )).setIconToFirstIngredient()); + + this.register(new GenericRecipe("rock.bauxite").setupNamed(duraLong, consumption).setNameWrapper("rock.crushing") + .inputItems(new OreDictStack(BAUXITE.ore())) + .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputItems(new ChanceOutputMulti( + new ChanceOutput(new ItemStack(Blocks.gravel), 25), + new ChanceOutput(new ItemStack(Items.clay_ball), 25), + new ChanceOutput(new ItemStack(ModBlocks.stone_resource, 1, 2), 25), + new ChanceOutput(new ItemStack(ModBlocks.ore_titanium, 1, 2), 25) + )).setIconToFirstIngredient()); } } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 0bc568b9f..a6a44145a 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -96,6 +96,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(PrecAssRecipes.INSTANCE); recipeHandlers.add(PlasmaForgeRecipes.INSTANCE); recipeHandlers.add(BlastFurnaceRecipesNT.INSTANCE); + recipeHandlers.add(RockMillRecipes.INSTANCE); recipeHandlers.add(new MatDistribution()); recipeHandlers.add(new CustomMachineRecipes()); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java index 1623c57ba..bdb6c735b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java @@ -1,16 +1,65 @@ package com.hbm.tileentity.machine; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.container.ContainerMachineRockMill; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineRockMill; +import com.hbm.inventory.recipes.loader.GenericRecipe; +import com.hbm.items.ModItems; +import com.hbm.lib.Library; +import com.hbm.module.machine.ModuleMachineRockMill; +import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; +import com.hbm.util.fauxpointtwelve.DirPos; -public class TileEntityMachineRockMill extends TileEntityMachineBase { +import api.hbm.energymk2.IBatteryItem; +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class TileEntityMachineRockMill extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IControlReceiver, IGUIProvider { + + public FluidTank[] inputTanks; + public FluidTank[] outputTanks; + + public long power; + public long maxPower = 2_500; + public boolean didProcess = false; public float rotation; public float prevRotation; + public float rotationSpeed = 0F; + public static final float ACCELERATION = 0.1F; + public static final float MAX_SPEED = 15F; + public boolean frame = false; + public ModuleMachineRockMill rockMillModule; + public TileEntityMachineRockMill() { - super(0); + super(8); + + this.inputTanks = new FluidTank[1]; + this.outputTanks = new FluidTank[1]; + + this.inputTanks[0] = new FluidTank(Fluids.NONE, 4_000); + this.outputTanks[0] = new FluidTank(Fluids.NONE, 4_000); + + this.rockMillModule = new ModuleMachineRockMill(0, this, slots) + .itemInput(2).itemOutput(5) + .fluidInput(inputTanks[0]).fluidOutput(outputTanks[0]); } @Override @@ -21,13 +70,165 @@ public class TileEntityMachineRockMill extends TileEntityMachineBase { @Override public void updateEntity() { + if(maxPower <= 0) this.maxPower = 2_500; + if(!worldObj.isRemote) { + GenericRecipe recipe = rockMillModule.getRecipe(); + if(recipe != null) { + this.maxPower = recipe.power * 100; + } + + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 1_000_000); + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos); + for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos); + for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos); + } + + this.rockMillModule.update(1D, 1D, true, slots[1]); + this.didProcess = this.rockMillModule.didProcess; + if(this.rockMillModule.markDirty) this.markDirty(); + + this.networkPackNT(100); + } else { + + this.prevRotation = this.rotation; + + this.rotationSpeed += this.ACCELERATION * (this.didProcess ? 1 : -1); + this.rotationSpeed = MathHelper.clamp_float(this.rotationSpeed, 0F, MAX_SPEED); + + this.rotation += this.rotationSpeed; + + if(this.rotation >= 360F) { + this.prevRotation -= 360F; + this.rotation -= 360F; + } if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); } } } + + public DirPos[] getConPos() { + return new DirPos[] { + + new DirPos(xCoord + 3, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord - 3, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord + 1, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 3, Library.NEG_Z), + }; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + for(FluidTank tank : inputTanks) tank.serialize(buf); + for(FluidTank tank : outputTanks) tank.serialize(buf); + buf.writeLong(power); + buf.writeLong(maxPower); + buf.writeBoolean(didProcess); + this.rockMillModule.serialize(buf); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + for(FluidTank tank : inputTanks) tank.deserialize(buf); + for(FluidTank tank : outputTanks) tank.deserialize(buf); + this.power = buf.readLong(); + this.maxPower = buf.readLong(); + this.didProcess = buf.readBoolean(); + this.rockMillModule.deserialize(buf); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.inputTanks[0].readFromNBT(nbt, "i" + 0); + this.outputTanks[0].readFromNBT(nbt, "o" + 0); + + this.power = nbt.getLong("power"); + this.maxPower = nbt.getLong("maxPower"); + this.rockMillModule.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + this.inputTanks[0].writeToNBT(nbt, "i" + 0); + this.outputTanks[0].writeToNBT(nbt, "o" + 0); + + nbt.setLong("power", power); + nbt.setLong("maxPower", maxPower); + this.rockMillModule.writeToNBT(nbt); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot == 0) return stack.getItem() instanceof IBatteryItem; // battery + if(slot == 1 && stack.getItem() == ModItems.blueprints) return true; + if(this.rockMillModule.isItemValid(slot, stack)) return true; // recipe input crap + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return (i >= 5 && i <= 7) || this.rockMillModule.isSlotClogged(i); + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] {2, 3, 4, 5, 6, 7}; + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getReceivingTanks() { return inputTanks; } + @Override public FluidTank[] getSendingTanks() { return outputTanks; } + @Override public FluidTank[] getAllTanks() { return new FluidTank[] {inputTanks[0], outputTanks[0]}; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineRockMill(player.inventory, this); } + @Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRockMill(player.inventory, this); } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("index") && data.hasKey("selection")) { + int index = data.getInteger("index"); + String selection = data.getString("selection"); + if(index == 0) { + this.rockMillModule.setRecipe(selection, false); + this.markChanged(); + } + } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 2, yCoord, zCoord - 2, xCoord + 3, yCoord + 3, zCoord + 3); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } } From 5e2c183ccbc931735ac03eac193f89ee27cad63f Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sat, 1 Aug 2026 22:06:38 +0300 Subject: [PATCH 24/40] fix --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 8b4b439ce..dc0f212af 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5873,7 +5873,7 @@ tile.rbmk_indicator.desc=Можно настроить с помощью отв tile.rbmk_key_pad.name=Редстоун-по-радио клавиатура tile.rbmk_key_pad.desc=Можно настроить с помощью отвёртки.$Позволяет установить до четырех различных кнопок, которые$отправляют сигналы РпР при нажатии. tile.rbmk_lever.name=Редстоун-по-радио рычаг -tile.rbmk_lever.desc=Можно настроить с помощью отвёртки.$Позволяет установить до двух рычагов,которые отправляют$РпР сигналы в любом положение. +tile.rbmk_lever.desc=Можно настроить с помощью отвёртки.$Позволяет установить до двух рычагов, которые отправляют$РпР сигналы в любом положении. tile.rbmk_gauge.name=Редстоун-по-радио измеритель tile.rbmk_gauge.desc=Можно настроить с помощью отвёртки.$Отображает до четырех измерителей значений из различных$источников сигналов РпР. tile.rbmk_graph.name=Редстоун-по-радио график From c6db46a6481ddb6e67dd954be5106fe41a8083fb Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sat, 1 Aug 2026 22:08:48 +0300 Subject: [PATCH 25/40] fix2 --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index dc0f212af..df7afe870 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5895,7 +5895,7 @@ tile.rbmk_steam_outlet.name=Порт вывода пара РБМК РеаСим tile.rbmk_steam_outlet.desc=Извлекает перегретый пар из колонн РБМК, если включены ReaSim бойлеры$Подключается к колоннам РБМК сбоку tile.rbmk_storage.name=Колонна-хранилище РБМК tile.rbmk_terminal.name=Редстоун-по-радио терминал -tile.rbmk_terminal.desc=Позволяет команде РпР отправлять вручную. +tile.rbmk_terminal.desc=Позволяет отправлять команды РпР вручную. tile.rbmk.dodd.heat=Температура колонны tile.rbmk.dodd.reasimWater=Вода РеаСим tile.rbmk.dodd.reasimSteam=Пар РеаСим From d7ea21a1015c5b6ced5b51259bf33887853822d7 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sun, 2 Aug 2026 16:14:03 +0300 Subject: [PATCH 26/40] Oks --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index df7afe870..de2617a4e 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2670,13 +2670,13 @@ item.grenade_extra.proxy_fuze.name=Модификация гранаты: Рад item.grenade_extra.triplex.name=Модификация гранаты: Растроение item.grenade_filling.cluster.name=Кассетный гранатный заряд item.grenade_filling.cluster_heavy.name=Тяжёлый кассетный гранатный заряд -item.grenade_filling.demo.name=Разрушающий гранатный заряд +item.grenade_filling.demo.name=Штурмовой гранатный заряд item.grenade_filling.emp.name=ЭМИ гранатный заряд item.grenade_filling.he.name=Фугасный гранатный заряд item.grenade_filling.inc.name=Зажигательный гранатный заряд item.grenade_filling.laser.name=Лазерный гранатный заряд item.grenade_filling.nuclear.name=Ядерный гранатный заряд -item.grenade_filling.nuclear_demo.name=Ядерный разрушающий гранатный заряд +item.grenade_filling.nuclear_demo.name=Ядерный штурмовой гранатный заряд item.grenade_filling.plasma.name=Плазменный гранатный заряд item.grenade_filling.powder.name=Пороховой гранатный заряд item.grenade_filling.schrab.name=Шрабидиевый гранатный заряд From d30054d712cea21904ff6dbe216cfd21023ba6f4 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sun, 2 Aug 2026 18:39:48 +0300 Subject: [PATCH 27/40] =?UTF-8?q?=D0=9C=D0=BE=D0=B6=D0=B5=D1=82=20=D1=8D?= =?UTF-8?q?=D1=82=D0=BE=20=D0=B8=20=D0=BA=20=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BC=D1=83...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index de2617a4e..09f0ec518 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -4556,17 +4556,17 @@ item.weapon_mod_special.bayonet.name=Штык item.weapon_mod_special.nickel.name=Два пятака item.weapon_mod_special.doubloons.name=Два золотых дублона item.weapon_mod_special.choke.name=Чок -item.weapon_mod_special.drill_hss.name=Головка для силового бура из быстрорежущей стали -item.weapon_mod_special.drill_saturnite.name=Головка для силового бура из сатурнита -item.weapon_mod_special.drill_tcalloy.name=Головка для силового бура из технециевой стали -item.weapon_mod_special.drill_weaponsteel.name=Головка для силового бура из оружейной стали -item.weapon_mod_special.engine_aviation.name=Авиационный двигатель для силового бура -item.weapon_mod_special.engine_diesel.name=Дизельный двигатель для силового бура -item.weapon_mod_special.engine_electric.name=Электрический двигатель для силового бура -item.weapon_mod_special.engine_turbo.name=Двигатель с турбонаддувом для силового бура -item.weapon_mod_special.sifter.name=Решето для силового бура -item.weapon_mod_special.magnet.name=Электромагнит для силового бура -item.weapon_mod_special.canisters.name=Внешние баки для силового бура +item.weapon_mod_special.drill_hss.name=Головка из быстрорежущей стали (Силовой бур) +item.weapon_mod_special.drill_saturnite.name=Головка из сатурнита (Силовой бур) +item.weapon_mod_special.drill_tcalloy.name=Головка из технециевой стали (Силовой бур) +item.weapon_mod_special.drill_weaponsteel.name=Головка из оружейной стали (Силовой бур) +item.weapon_mod_special.engine_aviation.name=Авиационный двигатель (Силовой бур) +item.weapon_mod_special.engine_diesel.name=Дизельный двигатель (Силовой бур) +item.weapon_mod_special.engine_electric.name=Электрический двигатель (Силовой бур) +item.weapon_mod_special.engine_turbo.name=Турбированный двигатель (Силовой бур) +item.weapon_mod_special.sifter.name=Решето (Силовой бур) +item.weapon_mod_special.magnet.name=Электромагнит (Силовой бур) +item.weapon_mod_special.canisters.name=Дополнительные баки (Силовой бур) item.weapon_mod_special.furniture_black.name=Полимерная оснастка (Чёрный) item.weapon_mod_special.furniture_green.name=Полимерная оснастка (Зелёный) item.weapon_mod_special.greasegun.name=Набор модернизации для Маслёнки From 13b8efef4a8096b4e861cfa732f136f77027bf4e Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sun, 2 Aug 2026 17:56:57 +0200 Subject: [PATCH 28/40] what the fuck is an ex nihilo --- changelog | 37 ++-------- .../com/hbm/inventory/OreDictManager.java | 1 + .../inventory/recipes/RockMillRecipes.java | 73 +++++++++++++++++-- .../inventory/recipes/anvil/AnvilRecipes.java | 8 ++ src/main/java/com/hbm/items/ModItems.java | 14 ++-- src/main/resources/assets/hbm/lang/de_DE.lang | 6 +- src/main/resources/assets/hbm/lang/en_US.lang | 6 +- 7 files changed, 99 insertions(+), 46 deletions(-) diff --git a/changelog b/changelog index 8d625149d..ce18603a4 100644 --- a/changelog +++ b/changelog @@ -1,31 +1,8 @@ ## Added -* Wideband Radio Emission Detector Satellite - * Detects high-energy events like nuclear explosions, particle accelerator operations and radar from the entire map - * Not terribly accurate, positioning may be off by hundreds or thousands of blocks depending on the emission intensity -* Narrowband Emission Scanning Satellite - * Detects high-energy events like radar, particle accelerator operations, nuclear or fusion reactors - * Can pinpoint exact locations, but is limited in its field of view - -## Changed -* Updated russian and chinese localization -* AUTOCAL's `first` and `last` instructions now support variable substitution -* Spy satellites now have the `getsmog` command, checking for soot pollution on the current target coordinate -* The research reactor and breeding reactor have been deprecated - * The reactors and the plate fuel no longer have recipes, but existing ones will continue to function until they run out of fuel -* Removed orphaned multiblock dummies clearing themselves via random ticks, only block updates can do that now - -## Fixed -* Fixed pile fuel loader temperature reading not working -* Fixed mining satellite NEI handling -* Fixed crash caused by non-miner satellite ID chips in the cargo landing pad -* Potentially fixed ID-shift affecting satellites launched pre-update -* Fixed xenium resonator item mapping being incorrect, creating a relay satellite instead -* Fixed a potential crash caused by accessing out-of-range data on the radar satellite -* Fixed QMAW manual pages not being able to be overwritten by resource packs - * This feature was a major pain in the ass to actually make, and it apparently never even worked until now -* Fixed satellite groundstation losing its frequency on relog -* Added extra safeguarding preventing crashes caused by multiblock door tile entities not bound to the correct block -* Fixed new pile rods now having radiation values -* Potentially fixed a multiblock migration issue where standard electricity pylons would disappear due to changes in expected metadata -* Fixed the pipe wrench assuming anchor pos 0/0/0 when NBT data is initialized as well as clearing all NBT data if a pipe connection is created -* Fixed tower base structures spawning in sandy biomes \ No newline at end of file +* Rock mill + * Earlygame post-steel crusher type machine + * Can grind down various stones, gravel and sand into finer items while yielding byproduct + * Mainly intended to serve as an easy way to automate/bulk craft certain elements in earlygame before BOP + * While the byproduct chances are rather low and the recipe times are slow, the mills are easily scalable due to their low cost + * Comes with convenient stacking frame + * Ideal for skyblock/seablock type challenge runs, as it can be configured to serve as an Ex Nihilo substitute \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 7276abf96..062d51d5d 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -68,6 +68,7 @@ public class OreDictManager { public static final String KEY_LEAVES = "treeLeaves"; public static final String KEY_SAPLING = "treeSapling"; public static final String KEY_SAND = "sand"; + public static final String KEY_STONE = "stone"; public static final String KEY_COBBLESTONE = "cobblestone"; public static final String KEY_BLACK = "dyeBlack"; diff --git a/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java b/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java index dc09a6330..73c0e8e3d 100644 --- a/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java @@ -34,31 +34,90 @@ public class RockMillRecipes extends GenericRecipes { int duraShort = 100; int duraLong = 200; - this.register(new GenericRecipe("rock.cobble").setupNamed(duraShort, consumption).setNameWrapper("rock.crushing") + String groupCrush = "autoswitch.crushing"; + + this.register(new GenericRecipe("rock.cobble").setup(duraShort, consumption).setNameWrapper("rock.crushing") .inputItems(new OreDictStack(KEY_COBBLESTONE)) .inputFluids(new FluidStack(Fluids.WATER, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.gravel), 95), new ChanceOutput(new ItemStack(ModItems.powder_quartz), 5) - )).setIconToFirstIngredient()); + )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); - this.register(new GenericRecipe("rock.gravel").setupNamed(duraShort, consumption).setNameWrapper("rock.crushing") + this.register(new GenericRecipe("rock.gravel").setup(duraShort, consumption).setNameWrapper("rock.crushing") .inputItems(new ComparableStack(Blocks.gravel)) .inputFluids(new FluidStack(Fluids.WATER, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.sand), 75), new ChanceOutput(new ItemStack(Items.flint), 20), new ChanceOutput(new ItemStack(ModItems.powder_boron), 5) - )).setIconToFirstIngredient()); + )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); - this.register(new GenericRecipe("rock.bauxite").setupNamed(duraLong, consumption).setNameWrapper("rock.crushing") + this.register(new GenericRecipe("rock.sand").setup(duraShort, consumption).setNameWrapper("rock.crushing") + .inputItems(new OreDictStack(KEY_SAND)) + .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputItems(new ChanceOutputMulti( + new ChanceOutput(new ItemStack(ModItems.dust), 90), + new ChanceOutput(new ItemStack(ModItems.powder_calcium), 5), + new ChanceOutput(new ItemStack(ModItems.fluorite), 5) + )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); + + this.register(new GenericRecipe("rock.netherrack").setup(duraShort, consumption).setNameWrapper("rock.crushing") + .inputItems(new ComparableStack(Blocks.netherrack)) + .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputItems(new ChanceOutputMulti( + new ChanceOutput(new ItemStack(Blocks.gravel), 50), + new ChanceOutput(new ItemStack(Blocks.soul_sand), 25), + new ChanceOutput(new ItemStack(Items.glowstone_dust), 15), + new ChanceOutput(new ItemStack(ModItems.powder_quartz), 10) + )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); + + this.register(new GenericRecipe("rock.soulsand").setup(duraShort, consumption).setNameWrapper("rock.crushing") + .inputItems(new ComparableStack(Blocks.soul_sand)) + .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputItems(new ChanceOutputMulti( + new ChanceOutput(new ItemStack(Blocks.sand), 50), + new ChanceOutput(new ItemStack(ModItems.powder_fire), 25), + new ChanceOutput(new ItemStack(ModItems.powder_uranium), 15), + new ChanceOutput(new ItemStack(Items.blaze_powder), 5), + new ChanceOutput(new ItemStack(Items.nether_wart), 5) + )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); + + this.register(new GenericRecipe("rock.schist").setup(duraLong, consumption).setNameWrapper("rock.crushing") + .inputItems(new ComparableStack(ModBlocks.stone_gneiss)) + .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputItems(new ChanceOutputMulti( + new ChanceOutput(new ItemStack(Blocks.gravel), 50), + new ChanceOutput(new ItemStack(Blocks.sand), 10), + new ChanceOutput(new ItemStack(ModItems.powder_lithium), 25), + new ChanceOutput(new ItemStack(ModItems.powder_niobium), 5), + new ChanceOutput(new ItemStack(ModItems.powder_uranium), 5), + new ChanceOutput(new ItemStack(ModItems.powder_gold), 5) + )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); + + this.register(new GenericRecipe("rock.hematite").setup(duraLong, consumption).setNameWrapper("rock.crushing") + .inputItems(new OreDictStack(HEMATITE.ore())) + .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputItems(new ChanceOutputMulti( + new ChanceOutput(new ItemStack(Blocks.gravel), 65), + new ChanceOutput(new ItemStack(ModItems.powder_iron), 25), + new ChanceOutput(new ItemStack(ModItems.powder_titanium), 10) + )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); + + this.register(new GenericRecipe("rock.bauxite").setup(duraLong, consumption).setNameWrapper("rock.crushing") .inputItems(new OreDictStack(BAUXITE.ore())) .inputFluids(new FluidStack(Fluids.WATER, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.gravel), 25), new ChanceOutput(new ItemStack(Items.clay_ball), 25), new ChanceOutput(new ItemStack(ModBlocks.stone_resource, 1, 2), 25), - new ChanceOutput(new ItemStack(ModBlocks.ore_titanium, 1, 2), 25) - )).setIconToFirstIngredient()); + new ChanceOutput(new ItemStack(ModBlocks.ore_titanium), 25) + )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); + + this.register(new GenericRecipe("rock.clay").setup(duraLong, consumption) + .inputItems(new OreDictStack(KEY_SAND), + new ComparableStack(ModItems.dust)) + .inputFluids(new FluidStack(Fluids.WATER, 1_000)) + .outputItems(new ItemStack(Items.clay_ball, 4))); } } diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index 6fc588db3..44de9e24d 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -226,6 +226,14 @@ public class AnvilRecipes extends SerializableRecipe { boolean exp = GeneralConfig.enableExpensiveMode; + constructionRecipes.add(new AnvilConstructionRecipe( + new AStack[] { + new OreDictStack(KEY_STONE, 16), + new OreDictStack(STEEL.plate(), 4), + new OreDictStack(CU.pipe(), 1), + new ComparableStack(ModItems.motor, 1) + }, new AnvilOutput(new ItemStack(ModBlocks.machine_rockmill))).setTier(2)); + constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] { new OreDictStack(STEEL.ingot(), 8), diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 3fb3c1433..c09355033 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2980,13 +2980,13 @@ public class ModItems { waste_schrabidium = new ItemDepletedFuel().setUnlocalizedName("waste_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_schrabidium"); waste_zfb_mox = new ItemDepletedFuel().setUnlocalizedName("waste_zfb_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_zfb_mox"); - waste_plate_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); - waste_plate_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); - waste_plate_mox = new ItemDepletedFuel().setUnlocalizedName("waste_plate_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox"); - waste_plate_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox"); - waste_plate_sa326 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_sa326").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_sa326"); - waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_ra226be"); - waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_pu238be"); + waste_plate_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u233").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); + waste_plate_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); + waste_plate_mox = new ItemDepletedFuel().setUnlocalizedName("waste_plate_mox").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_mox"); + waste_plate_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_mox"); + waste_plate_sa326 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_sa326").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_sa326"); + waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_ra226be"); + waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_pu238be"); pile_rod_uranium = new ItemPileRod().setUnlocalizedName("pile_rod_uranium").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_uranium"); pile_rod_pu239 = new ItemPileRod().setUnlocalizedName("pile_rod_pu239").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_pu239"); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 4afb5b568..6149f2db1 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -135,6 +135,7 @@ ass.factorioChip=Minimalisten-Schaltkreise ass.nitra=Nitra zu Munition autoswitch=Teil der Rezeptgruppe "%s"$Rezept ändert sich basierend auf das erste Item +autoswitch.crushing=Fels-Zerkleinerung autoswitch.cyclotron=Zyklotron-Pulverkisten autoswitch.pile=Wiederaufbereitung Chicago-Pile-Brennstoff autoswitch.pilerod=Chicago-Pile-Brennstoff @@ -323,6 +324,7 @@ container.machinePrecAss=Präzisions-Montagemaschine container.machinePUREX=PUREX container.machinePyroOven=Pyrolyseofen container.machineRefinery=Ölraffinerie +container.machineRockMill=Steinmühle container.machineRotaryFurnace=Rotationshochofen container.machineSelenium=Hochleistungs-Sternmotor container.machineShredder=Brecher @@ -3765,6 +3767,8 @@ rbmk.rod.xenon=Xenonvergiftung: %s rbmk.rod.coreTemp=Kerntemperatur: %s rbmk.rod.skinTemp=Außentemperatur: %s / %s +rock.crushing=Zerkleinern von %s + shape.barrelHeavy=Schwerer Lauf shape.barrelLight=Leichter Lauf shape.billet=Billet @@ -4537,7 +4541,7 @@ tile.machine_radgen.name=Strahlenbetriebener Generator tile.machine_reactor.name=Brutreaktor (LEGACY) tile.machine_reactor_small.name=Atomreaktor (LEGACY) tile.machine_refinery.name=Ölraffinerie -tile.machine_reix_mainframe.name=Rei-X Hauptrechner (WIP) +tile.machine_rockmill.name=Steinmühle tile.machine_rotary_furnace.name=Rotationshochofen tile.machine_rtg_blue.name=Konvektionsgenerator tile.machine_rtg_cyan.name=Schrabidium-Zerfallsenergie-Generator (WIP) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d14837744..39e53a26f 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -190,6 +190,7 @@ ass.factorioChip=Minimalist Circuits ass.nitra=Nitra to Ammunition autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient +autoswitch.crushing=Rock Crushing autoswitch.cyclotron=Cyclotron Powder Boxes autoswitch.pile=Reprocessing Chicago Pile Rods autoswitch.pilerod=Chicago Pile Rods @@ -724,6 +725,7 @@ container.machinePrecAss=Precision Assembly Machine container.machinePUREX=PUREX container.machinePyroOven=Pyrolysis Oven container.machineRefinery=Oil Refinery +container.machineRockMill=Rock Mill container.machineRotaryFurnace=Rotary Furnace container.machineSelenium=Radial Performance Engine container.machineShredder=Shredder @@ -4964,6 +4966,8 @@ rbmk.screen.rod=Control: %s rbmk.screen.temp=Temp: %s rbmk.screen.xenon=Xenon: %s +rock.crushing=Crushing of %s + satchip.frequency=Satellite frequency satchip.foeq=Gives you an achievement. That's it. satchip.gerald.desc=Single use.$Requires orbital module.$Melter of CPUs, bane of every server owner. @@ -5824,7 +5828,7 @@ tile.machine_radiolysis.name=Radioisotope Thermoelectric Generator and Radiolysi tile.machine_reactor.name=Breeding Reactor (LEGACY) tile.machine_reactor_small.name=Research Reactor (LEGACY) tile.machine_refinery.name=Oil Refinery -tile.machine_reix_mainframe.name=Rei-X Mainframe (WIP) +tile.machine_rockmill.name=Rock Mill tile.machine_rotary_furnace.name=Rotary Furnace tile.machine_rtg_blue.name=Convection Generator tile.machine_rtg_cyan.name=Schrabidium Decay Generator (WIP) From 0bda6ca4c08999eb5391f68d35915521f3548989 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sun, 2 Aug 2026 19:01:34 +0300 Subject: [PATCH 29/40] OPS --- src/main/resources/assets/hbm/lang/ru_RU.lang | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 09f0ec518..0fb5830d0 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -190,6 +190,7 @@ ass.factorioChip=Минималистичная схема ass.nitra=Амуниция из нитры autoswitch=Часть группы автоматического переключения "%s"$Рецепта изменяется в зависимости от первого ингредиента +autoswitch.crushing=Дробление камня autoswitch.cyclotron=Коробки пыли Циклотрон autoswitch.pile=Переработка стержней Чикагской поленницы autoswitch.pilerod=Стержни Чикагской поленницы @@ -721,6 +722,7 @@ container.machinePlasmaForge=Плазменная кузница container.machinePrecAss=Прецизионный сборщик container.machinePyroOven=Пиролизная печь container.machineRefinery=Нефтеперерабатывающий завод +container.machineRockMill=Каменная жёрнов container.machineRotaryFurnace=Роторная печь container.machineSelenium=Радиальный двигатель container.machineShredder=Измельчитель @@ -4728,6 +4730,8 @@ rbmk.screen.rod=Управ: %s rbmk.screen.temp=Темп: %s rbmk.screen.xenon=Ксенон: %s +rock.crushing=Дробление %s + satchip.frequency=Частота спутника satchip.foeq=Даёт тебе достижение. Это всё. satchip.gerald.desc=Одноразовый.$Требует орбитальный модуль.$Плавитель процессоров, проклятие администраторов серверов. @@ -5555,7 +5559,7 @@ tile.machine_radar_large.name=Большой радар tile.machine_radgen.name=Радиационный двигатель tile.machine_radiolysis.name=Радиоизотопный термоэлектрический генератор и камера радиолиза tile.machine_refinery.name=Нефтеперерабатывающий завод -tile.machine_reix_mainframe.name=Мэйнфрейм Rei-X (WIP) +tile.machine_rockmill.name=Каменный жёрнов tile.machine_rotary_furnace.name=Роторная печь tile.machine_rtg_blue.name=Конвекционный генератор tile.machine_rtg_cyan.name=Генератор Шрабидиевого распада (WIP) From d6b24f645d1b5bf1e59ce9b48bb908ac4fdd6b58 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sun, 2 Aug 2026 19:02:41 +0300 Subject: [PATCH 30/40] =?UTF-8?q?=D0=B1=D0=BB=D1=8F=D0=B4=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 0fb5830d0..d910b7841 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -722,7 +722,7 @@ container.machinePlasmaForge=Плазменная кузница container.machinePrecAss=Прецизионный сборщик container.machinePyroOven=Пиролизная печь container.machineRefinery=Нефтеперерабатывающий завод -container.machineRockMill=Каменная жёрнов +container.machineRockMill=Каменный жёрнов container.machineRotaryFurnace=Роторная печь container.machineSelenium=Радиальный двигатель container.machineShredder=Измельчитель From cef3c75d9873084a7dfe901dd4989689c6843999 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sun, 2 Aug 2026 19:05:10 +0300 Subject: [PATCH 31/40] mlyaaa --- src/main/resources/assets/hbm/lang/ru_RU.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index d910b7841..835ad61bc 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -722,7 +722,7 @@ container.machinePlasmaForge=Плазменная кузница container.machinePrecAss=Прецизионный сборщик container.machinePyroOven=Пиролизная печь container.machineRefinery=Нефтеперерабатывающий завод -container.machineRockMill=Каменный жёрнов +container.machineRockMill=Жерновая мельница container.machineRotaryFurnace=Роторная печь container.machineSelenium=Радиальный двигатель container.machineShredder=Измельчитель @@ -5559,7 +5559,7 @@ tile.machine_radar_large.name=Большой радар tile.machine_radgen.name=Радиационный двигатель tile.machine_radiolysis.name=Радиоизотопный термоэлектрический генератор и камера радиолиза tile.machine_refinery.name=Нефтеперерабатывающий завод -tile.machine_rockmill.name=Каменный жёрнов +tile.machine_rockmill.name=Жерновая мельница tile.machine_rotary_furnace.name=Роторная печь tile.machine_rtg_blue.name=Конвекционный генератор tile.machine_rtg_cyan.name=Генератор Шрабидиевого распада (WIP) From 205fb0a83616eff16fae13f9e149ab0617efd8db Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sun, 2 Aug 2026 20:53:43 +0300 Subject: [PATCH 32/40] =?UTF-8?q?=D0=BC=D0=B4=D1=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 835ad61bc..1104e918e 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -2166,7 +2166,7 @@ item.casing.small.name=Маленькая гильза из пушечной б item.casing.small_steel.name=Маленькая гильза из оружейной стали item.casing.large.name=Большая гильза из пушечной бронзы item.casing.large_steel.name=Большая гильза из оружейной стали -item.casing.shotshell.name=Гильза дробового патрона для чёрного пороха +item.casing.shotshell.name=Гильза дробового патрона для дымного пороха item.casing.buckshot.name=Пластиковая гильза дробового патрона item.casing.buckshot_advanced.name=Продвинутая гильза дробового патрона item.catalyst_clay.name=Глинистый катализатор From b19d54ae08b2959e347cce2cf7291585c34b1a20 Mon Sep 17 00:00:00 2001 From: APie357 Date: Sun, 2 Aug 2026 22:41:20 -0700 Subject: [PATCH 33/40] add ror support for cargo elevator --- .../machine/TileEntityCargoElevator.java | 81 +++++++++++-------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCargoElevator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCargoElevator.java index 5c9182c70..6c2a28513 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCargoElevator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCargoElevator.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine; import java.util.List; +import api.hbm.redstoneoverradio.IRORInteractive; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.tileentity.TileEntityLoadedBase; @@ -16,26 +17,26 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; -public class TileEntityCargoElevator extends TileEntityLoadedBase { +public class TileEntityCargoElevator extends TileEntityLoadedBase implements IRORInteractive { public int height = 0; - + + public int targetExtension; public double extension; public double prevExtension; public double syncExtension; private int sync; - - public boolean isExtending; + public static final double speed = 2D / 20D; // 2 blocks per second public boolean renderPlatform = false; - + @Override public void updateEntity() { this.prevExtension = this.extension; - + if(!worldObj.isRemote) { - + // connect to lower elevator if(worldObj.getBlock(xCoord, yCoord - 1, zCoord) == ModBlocks.cargo_elevator) { int[] pos = ((BlockDummyable) ModBlocks.cargo_elevator).findCore(worldObj, xCoord, yCoord - 1, zCoord); @@ -48,20 +49,21 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase { return; } } - - if(this.isExtending && this.extension < this.height) { - this.extension += this.speed; + + if (this.extension < targetExtension) { // go up + this.extension += speed; + this.extension = MathHelper.clamp_double(this.extension, 0, targetExtension); + } else if (this.extension > targetExtension) { // go down + this.extension -= speed; + this.extension = MathHelper.clamp_double(this.extension, targetExtension, this.height); } - - if(!this.isExtending && this.extension > 0) { - this.extension -= this.speed; - } - + + this.extension = MathHelper.clamp_double(this.extension, 0, this.height); - + // exist for at least one tick before the main portion gets rendered, fixes the short flickering platform that instantly despawns renderPlatform = true; - + this.networkPackNT(300); } else { @@ -72,12 +74,12 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase { this.extension = this.syncExtension; } } - + if(this.extension != this.prevExtension) { double liftUpper = this.yCoord + 1 + Math.max(this.extension, this.prevExtension); double liftLower = this.yCoord + 1 + Math.min(this.extension, this.prevExtension); List toLift = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(xCoord - 0.99, liftLower, zCoord - 0.99, xCoord + 1.99, liftUpper, zCoord + 1.99)); - + for(Entity e : toLift) { if(e instanceof EntityPlayer && !worldObj.isRemote) continue; if(e.boundingBox.minY >= liftLower && e.boundingBox.minY <= liftUpper) { @@ -89,15 +91,12 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase { } } } - + public void toggleElevator() { - - if(this.extension >= this.height) { - this.isExtending = false; - } - - if(this.extension <= 0) { - this.isExtending = true; + if (targetExtension == 0) { + targetExtension = this.height; + } else { + targetExtension = 0; } } @@ -126,7 +125,7 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase { super.readFromNBT(nbt); this.extension = nbt.getDouble("extension"); - this.isExtending = nbt.getBoolean("isExtending"); + this.targetExtension = nbt.getInteger("targetExtension"); this.height = nbt.getInteger("height"); } @@ -135,10 +134,10 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase { super.writeToNBT(nbt); nbt.setDouble("extension", extension); - nbt.setBoolean("isExtending", isExtending); + nbt.setInteger("targetExtension", this.targetExtension); nbt.setInteger("height", height); } - + AxisAlignedBB bb = null; @Override @@ -146,7 +145,7 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase { // workaround for angelica, extend AABB to build height by default instead of dynamically scaling int h = Compat.isModLoaded(Compat.MOD_ANG) ? 256 - yCoord : 1 + this.height; - + if(bb == null || bb.maxY - bb.minY < h) { bb = AxisAlignedBB.getBoundingBox( xCoord - 1, @@ -160,10 +159,28 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase { return bb; } - + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public String runRORFunction(String name, String[] params) { + if ((PREFIX_FUNCTION + "setextension").equals(name) && params.length > 0) { + targetExtension = IRORInteractive.parseInt(params[0], 0, height); + return null; + } + + return null; + } + + @Override + public String[] getFunctionInfo() { + return new String[]{ + PREFIX_VALUE + "extension", + PREFIX_FUNCTION + "setextension" + }; + } } From 7118a3807721102233c44a779e1da7930dea5c2c Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Tue, 4 Aug 2026 23:18:53 +0300 Subject: [PATCH 34/40] Update ru_RU.lang --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 1104e918e..916e7d24e 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -3618,7 +3618,7 @@ item.pile_rod.rgp.name=Топливный стержень Чикагской п item.pile_rod.rgp.desc=Стержень реакторного плутония. Состоит преимущественно из плутония-239 с примесями плутония-240. item.pile_rod.waste.name=Топливный стержень Чикагской поленницы (Ядерные отходы) item.pile_rod.waste.desc=Опасный конечный продукт, получаемый при сильном передерживании стержня в активной зоне. -item.pile_rod.zr.name=Технологический стержень Чикагской поленницы (Цирконий) +item.pile_rod.zr.name=Стержень Чикагской поленницы (Цирконий) item.pile_rod.zr.desc=Инертный циркониевый стержень, пропускающий нейтроны. Применяется для безопасного выталкивания других стержней. item.pill_iodine.name=Таблетка йода item.pill_iodine.desc=Убирает негативные эффекты From 3fb25f2e60947e537df2a397ffc0ef2d1da9404f Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Thu, 6 Aug 2026 07:03:10 +0300 Subject: [PATCH 35/40] fix --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 916e7d24e..9e784531b 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6200,7 +6200,7 @@ hbmfluid.trait.liquid=Жидкое hbmfluid.trait.modifiedPheromones=Модифицированные феромоны hbmfluid.trait.perBucket=за ведро hbmfluid.trait.perDamage=Урон в секунду -hbmfluid.trait.perMB=за мБ +hbmfluid.trait.perMB=каждый mB hbmfluid.trait.perTU=TU на hbmfluid.trait.polluting=Загрязняющее hbmfluid.trait.provides=Вырабатывает From 6f76f8e546c8ead810eed3734ecd3b51f00b7b67 Mon Sep 17 00:00:00 2001 From: Wolf Date: Fri, 7 Aug 2026 03:31:19 -0400 Subject: [PATCH 36/40] Idk I just thought of this today --- .../gui/reactors/gui_fusion_klystron.png | Bin 3638 -> 3587 bytes .../gui/reactors/gui_fusion_torus.png | Bin 5379 -> 5060 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_fusion_klystron.png index b1da9e7743de676befbd8b0a0a92b7976f1d7d06..597158a8d27d2eec87323cce42fac4bdd96cfaea 100644 GIT binary patch literal 3587 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 s_!ly~U=xP4w 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 Jnyq5(_g@MUDD?mU literal 5379 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 Date: Fri, 7 Aug 2026 18:36:02 +0500 Subject: [PATCH 37/40] I18N CALL SERVERSIDE - GREAT JOB: heavy metal --- .../hbm/items/tool/ItemPollutionDetector.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java b/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java index c05f62632..c35e5ab44 100644 --- a/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java +++ b/src/main/java/com/hbm/items/tool/ItemPollutionDetector.java @@ -19,9 +19,9 @@ public class ItemPollutionDetector extends Item { @Override public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean bool) { - + if(!(entity instanceof EntityPlayerMP) || world.getTotalWorldTime() % 10 != 0) return; - + PollutionData data = PollutionHandler.getPollutionData(world, (int) Math.floor(entity.posX), (int) Math.floor(entity.posY), (int) Math.floor(entity.posZ)); if(data == null) data = new PollutionData(); @@ -34,10 +34,32 @@ public class ItemPollutionDetector extends Item { poison = ((int) (poison * 100)) / 100F; heavymetal = ((int) (heavymetal * 100)) / 100F; //fallout = ((int) (fallout * 100)) / 100F; - - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.soot") + ": " + soot).color(EnumChatFormatting.YELLOW).flush(), 100, 4000), (EntityPlayerMP) entity); - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.poison") + ": " + poison).color(EnumChatFormatting.YELLOW).flush(), 101, 4000), (EntityPlayerMP) entity); - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.heavymetal") + ": " + heavymetal).color(EnumChatFormatting.YELLOW).flush(), 102, 4000), (EntityPlayerMP) entity); + + PacketDispatcher.wrapper.sendTo( + new PlayerInformPacket( + ChatBuilder.startTranslation("pollution.soot") + .color(EnumChatFormatting.YELLOW) + .next(": " + soot) + .color(EnumChatFormatting.YELLOW) + .flush(), 100, 4000), + (EntityPlayerMP) entity); + PacketDispatcher.wrapper.sendTo( + new PlayerInformPacket( + ChatBuilder.startTranslation("pollution.poison") + .color(EnumChatFormatting.YELLOW) + .next(": " + poison) + .color(EnumChatFormatting.YELLOW) + .flush(), 101, 4000), + (EntityPlayerMP) entity); + PacketDispatcher.wrapper.sendTo( + new PlayerInformPacket( + ChatBuilder.startTranslation("pollution.heavymetal") + .color(EnumChatFormatting.YELLOW) + .next(": " + heavymetal) + .color(EnumChatFormatting.YELLOW) + .flush(), 102, 4000), + (EntityPlayerMP) entity); + //PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Fallout: " + fallout).color(EnumChatFormatting.YELLOW).flush(), 103, 4000), (EntityPlayerMP) entity); } } From 546f23f63cb82101c66e4b5b545290e259fb343a Mon Sep 17 00:00:00 2001 From: Wolf Date: Sat, 8 Aug 2026 02:09:13 -0400 Subject: [PATCH 38/40] yo this shit tastes good --- .../assets/hbm/manual/fluids/engine_lubricant.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/resources/assets/hbm/manual/fluids/engine_lubricant.json diff --git a/src/main/resources/assets/hbm/manual/fluids/engine_lubricant.json b/src/main/resources/assets/hbm/manual/fluids/engine_lubricant.json new file mode 100644 index 000000000..c7aeb19db --- /dev/null +++ b/src/main/resources/assets/hbm/manual/fluids/engine_lubricant.json @@ -0,0 +1,11 @@ +{ + "name": "Engine Lubricant", + "icon": ["hbm:item.fluid_icon", 1, 18], + "trigger": [["hbm:item.fluid_icon", 1, 18]], + "title": { + "en_US": "Engine Lubricant" + }, + "content": { + "en_US": "Engine lubricant is primarily obtained from [[fractioning|Fractioning Tower]] [[industrial oil|Industrial Oil]]. It can be used to produce [[parrafin wax|Parrafin Wax]] which allows for early production of [[high-performance solvent|High-Performance Solvent]] or the production of [[petroil|Petroil]].

See also:
[[Basic Oil Processing]]" + } +} \ No newline at end of file From 908773de82e020662a948a1f65f676cc96b2874e Mon Sep 17 00:00:00 2001 From: Wolf Date: Sat, 8 Aug 2026 02:17:57 -0400 Subject: [PATCH 39/40] r --- .../resources/assets/hbm/manual/fluids/engine_lubricant.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/manual/fluids/engine_lubricant.json b/src/main/resources/assets/hbm/manual/fluids/engine_lubricant.json index c7aeb19db..421aa79be 100644 --- a/src/main/resources/assets/hbm/manual/fluids/engine_lubricant.json +++ b/src/main/resources/assets/hbm/manual/fluids/engine_lubricant.json @@ -6,6 +6,6 @@ "en_US": "Engine Lubricant" }, "content": { - "en_US": "Engine lubricant is primarily obtained from [[fractioning|Fractioning Tower]] [[industrial oil|Industrial Oil]]. It can be used to produce [[parrafin wax|Parrafin Wax]] which allows for early production of [[high-performance solvent|High-Performance Solvent]] or the production of [[petroil|Petroil]].

See also:
[[Basic Oil Processing]]" + "en_US": "Engine lubricant is primarily obtained from [[fractioning|Fractioning Tower]] [[industrial oil|Industrial Oil]]. It can be used to produce [[parrafin wax|Parrafin Wax]] which allows for early production of [[high-performance solvent|High-Performance Solvent]] or the production of [[petroil|Petroil]]. It is also required to lubricate the [[combined cycle gas turbine|Combined Cycle Gas Turbine]].

See also:
[[Basic Oil Processing]]" } } \ No newline at end of file From f23fdda79489309b68380bd4c0ca0d08bd9b387c Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sun, 9 Aug 2026 18:11:38 +0200 Subject: [PATCH 40/40] uh oh, the ZUNpet is kicking in --- changelog | 18 ++++++- .../java/com/hbm/config/ServerConfig.java | 4 ++ .../item/EntityMovingConveyorObject.java | 7 ++- .../inventory/recipes/RockMillRecipes.java | 13 +++-- src/main/java/com/hbm/main/ClientProxy.java | 4 +- .../satellites/SatelliteDetector.java | 5 +- .../machine/TileEntityMachineRockMill.java | 50 +++++++++++++++++- .../hbm/textures/models/weapons/pepperbox.png | Bin 2729 -> 5003 bytes 8 files changed, 91 insertions(+), 10 deletions(-) diff --git a/changelog b/changelog index ce18603a4..c594e4738 100644 --- a/changelog +++ b/changelog @@ -5,4 +5,20 @@ * Mainly intended to serve as an easy way to automate/bulk craft certain elements in earlygame before BOP * While the byproduct chances are rather low and the recipe times are slow, the mills are easily scalable due to their low cost * Comes with convenient stacking frame - * Ideal for skyblock/seablock type challenge runs, as it can be configured to serve as an Ex Nihilo substitute \ No newline at end of file + * Ideal for skyblock/seablock type challenge runs, as it can be configured to serve as an Ex Nihilo substitute + * Can also perform the sand and colloid to clay recipe of the acidizer, but at a lower efficiency + +## Changed +* Updated russian localization +* The cargo elevator can now be controlled using RoR, allowing the platform to stop at certain heights +* Updated the pepperbox textures + * The wood now looks more like wood and less like plastic + * The bronze parts now have more depth +* Conveyor items being deleted due to cramming can now be configured with the server config `CONVEYOR_CRAM_MAX`, the default still being 25 +* Conveyor belts being destroyed due to item cramming can now be configured with the server config `CONVEYOR_CRAM_EXPLODE`, it is still on by default +* Conveyor items will no longer break any belts, even with the config enabled, if the conveyor item entities have existed for less than one cram check cycle + * This means that items that have piled up due to chunk loading should now safely self-destruct without breaking conveyor lines + +## Fixed +* Fixed pollution detector localization not working, showing only error messages instead of the pollution type names +* Fixed un-clamped gaussian random use on the wideband detector satellite, causing uncommon detections with inaccuracy exceeding the intended amount \ No newline at end of file diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index 90d5b94c7..c82e09763 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -23,6 +23,8 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper ENABLE_MKU = new ConfigWrapper(true); public static ConfigWrapper STRUCTURE_DEBUG = new ConfigWrapper(false); public static ConfigWrapper AUTOCAL_MAX_CLOCK = new ConfigWrapper(20); + public static ConfigWrapper CONVEYOR_CRAM_MAX = new ConfigWrapper(25); + public static ConfigWrapper CONVEYOR_CRAM_EXPLODE = new ConfigWrapper(true); private static void initDefaults() { configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE); @@ -38,6 +40,8 @@ public class ServerConfig extends RunningConfig { configMap.put("ENABLE_MKU", ENABLE_MKU); configMap.put("STRUCTURE_DEBUG", STRUCTURE_DEBUG); configMap.put("AUTOCAL_MAX_CLOCK", AUTOCAL_MAX_CLOCK); + configMap.put("CONVEYOR_CRAM_MAX", CONVEYOR_CRAM_MAX); + configMap.put("CONVEYOR_CRAM_EXPLODE", CONVEYOR_CRAM_EXPLODE); } /** Initializes defaults, then reads the config file if it exists, then writes the config file. */ diff --git a/src/main/java/com/hbm/entity/item/EntityMovingConveyorObject.java b/src/main/java/com/hbm/entity/item/EntityMovingConveyorObject.java index a2175a581..1afd6f9aa 100644 --- a/src/main/java/com/hbm/entity/item/EntityMovingConveyorObject.java +++ b/src/main/java/com/hbm/entity/item/EntityMovingConveyorObject.java @@ -2,6 +2,7 @@ package com.hbm.entity.item; import java.util.List; +import com.hbm.config.ServerConfig; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.standard.ExplosionEffectTiny; import com.hbm.lib.Library; @@ -84,7 +85,7 @@ public abstract class EntityMovingConveyorObject extends Entity { // cram check every 20s if((ticksExisted + this.getEntityId()) % 400 == 0) { List objs = worldObj.getEntitiesWithinAABB(EntityMovingConveyorObject.class, this.boundingBox.expand(0.125, 0.125, 0.125)); - if(objs.size() >= 25) { + if(objs.size() >= ServerConfig.CONVEYOR_CRAM_MAX.get()) { for(EntityMovingConveyorObject obj : objs) obj.setDead(); ExplosionVNT vnt = new ExplosionVNT(worldObj, posX, posY + 0.125, posZ, 1, this); vnt.setSFX(new ExplosionEffectTiny()); @@ -92,7 +93,9 @@ public abstract class EntityMovingConveyorObject extends Entity { int x = (int) Math.floor(posX); int y = (int) Math.floor(posY); int z = (int) Math.floor(posZ); - if(worldObj.getBlock(x, y, z) instanceof IConveyorBelt) worldObj.func_147480_a(x, y, z, false); + + if(worldObj.getBlock(x, y, z) instanceof IConveyorBelt && this.ticksExisted > 400 && ServerConfig.CONVEYOR_CRAM_EXPLODE.get()) + worldObj.func_147480_a(x, y, z, false); } } diff --git a/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java b/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java index 73c0e8e3d..5d7c5edfc 100644 --- a/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RockMillRecipes.java @@ -39,6 +39,7 @@ public class RockMillRecipes extends GenericRecipes { this.register(new GenericRecipe("rock.cobble").setup(duraShort, consumption).setNameWrapper("rock.crushing") .inputItems(new OreDictStack(KEY_COBBLESTONE)) .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputFluids(new FluidStack(Fluids.COLLOID, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.gravel), 95), new ChanceOutput(new ItemStack(ModItems.powder_quartz), 5) @@ -47,6 +48,7 @@ public class RockMillRecipes extends GenericRecipes { this.register(new GenericRecipe("rock.gravel").setup(duraShort, consumption).setNameWrapper("rock.crushing") .inputItems(new ComparableStack(Blocks.gravel)) .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputFluids(new FluidStack(Fluids.COLLOID, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.sand), 75), new ChanceOutput(new ItemStack(Items.flint), 20), @@ -56,6 +58,7 @@ public class RockMillRecipes extends GenericRecipes { this.register(new GenericRecipe("rock.sand").setup(duraShort, consumption).setNameWrapper("rock.crushing") .inputItems(new OreDictStack(KEY_SAND)) .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputFluids(new FluidStack(Fluids.COLLOID, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(ModItems.dust), 90), new ChanceOutput(new ItemStack(ModItems.powder_calcium), 5), @@ -65,6 +68,7 @@ public class RockMillRecipes extends GenericRecipes { this.register(new GenericRecipe("rock.netherrack").setup(duraShort, consumption).setNameWrapper("rock.crushing") .inputItems(new ComparableStack(Blocks.netherrack)) .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputFluids(new FluidStack(Fluids.LAVA, 100)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.gravel), 50), new ChanceOutput(new ItemStack(Blocks.soul_sand), 25), @@ -75,6 +79,7 @@ public class RockMillRecipes extends GenericRecipes { this.register(new GenericRecipe("rock.soulsand").setup(duraShort, consumption).setNameWrapper("rock.crushing") .inputItems(new ComparableStack(Blocks.soul_sand)) .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputFluids(new FluidStack(Fluids.LAVA, 100)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.sand), 50), new ChanceOutput(new ItemStack(ModItems.powder_fire), 25), @@ -86,6 +91,7 @@ public class RockMillRecipes extends GenericRecipes { this.register(new GenericRecipe("rock.schist").setup(duraLong, consumption).setNameWrapper("rock.crushing") .inputItems(new ComparableStack(ModBlocks.stone_gneiss)) .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputFluids(new FluidStack(Fluids.COLLOID, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.gravel), 50), new ChanceOutput(new ItemStack(Blocks.sand), 10), @@ -98,6 +104,7 @@ public class RockMillRecipes extends GenericRecipes { this.register(new GenericRecipe("rock.hematite").setup(duraLong, consumption).setNameWrapper("rock.crushing") .inputItems(new OreDictStack(HEMATITE.ore())) .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputFluids(new FluidStack(Fluids.COLLOID, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.gravel), 65), new ChanceOutput(new ItemStack(ModItems.powder_iron), 25), @@ -107,6 +114,7 @@ public class RockMillRecipes extends GenericRecipes { this.register(new GenericRecipe("rock.bauxite").setup(duraLong, consumption).setNameWrapper("rock.crushing") .inputItems(new OreDictStack(BAUXITE.ore())) .inputFluids(new FluidStack(Fluids.WATER, 250)) + .outputFluids(new FluidStack(Fluids.COLLOID, 250)) .outputItems(new ChanceOutputMulti( new ChanceOutput(new ItemStack(Blocks.gravel), 25), new ChanceOutput(new ItemStack(Items.clay_ball), 25), @@ -115,9 +123,8 @@ public class RockMillRecipes extends GenericRecipes { )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE)); this.register(new GenericRecipe("rock.clay").setup(duraLong, consumption) - .inputItems(new OreDictStack(KEY_SAND), - new ComparableStack(ModItems.dust)) - .inputFluids(new FluidStack(Fluids.WATER, 1_000)) + .inputItems(new OreDictStack(KEY_SAND, 2)) + .inputFluids(new FluidStack(Fluids.COLLOID, 2_500)) .outputItems(new ItemStack(Items.clay_ball, 4))); } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 746ba9f50..7b7aea644 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1257,8 +1257,10 @@ public class ClientProxy extends ServerProxy { if("blockdust".equals(data.getString("mode"))) { Block b = Block.getBlockById(data.getInteger("block")); - fx = new net.minecraft.client.particle.EntityBlockDustFX(world, x, y, z, mX, mY + 0.2, mZ, b, 0); + byte meta = data.getByte("meta"); + fx = new net.minecraft.client.particle.EntityBlockDustFX(world, x, y, z, mX, mY + 0.2, mZ, b, meta); ReflectionHelper.setPrivateValue(EntityFX.class, fx, 10 + rand.nextInt(20), "particleMaxAge", "field_70547_e"); + fx.setRBGColorF(0.8F, 0.8F, 0.8F); } if("colordust".equals(data.getString("mode"))) { diff --git a/src/main/java/com/hbm/saveddata/satellites/SatelliteDetector.java b/src/main/java/com/hbm/saveddata/satellites/SatelliteDetector.java index f2e08578a..3c90de4d6 100644 --- a/src/main/java/com/hbm/saveddata/satellites/SatelliteDetector.java +++ b/src/main/java/com/hbm/saveddata/satellites/SatelliteDetector.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import api.hbm.redstoneoverradio.IRORInteractive; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class SatelliteDetector extends SatelliteBase { @@ -98,8 +99,8 @@ public class SatelliteDetector extends SatelliteBase { intensity == BurstIntensity.MEDIUM ? INACCURACY_MEDIUM : INARRCURACY_HIGH; - this.x += world.rand.nextGaussian() * inaccuracy; - this.z += world.rand.nextGaussian() * inaccuracy; + this.x += MathHelper.clamp_double(world.rand.nextGaussian(), -1, 1) * inaccuracy; + this.z += MathHelper.clamp_double(world.rand.nextGaussian(), -1, 1) * inaccuracy; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java index bdb6c735b..161b08762 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRockMill.java @@ -8,10 +8,13 @@ import com.hbm.inventory.gui.GUIMachineRockMill; import com.hbm.inventory.recipes.loader.GenericRecipe; import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; import com.hbm.module.machine.ModuleMachineRockMill; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.BobMathUtil; +import com.hbm.util.Vec3NT; +import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IBatteryItem; @@ -20,8 +23,11 @@ import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; +import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; @@ -79,7 +85,7 @@ public class TileEntityMachineRockMill extends TileEntityMachineBase implements this.maxPower = recipe.power * 100; } - this.maxPower = BobMathUtil.max(this.power, this.maxPower, 1_000_000); + this.maxPower = BobMathUtil.max(this.power, this.maxPower, 2_500); this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); @@ -92,6 +98,16 @@ public class TileEntityMachineRockMill extends TileEntityMachineBase implements this.rockMillModule.update(1D, 1D, true, slots[1]); this.didProcess = this.rockMillModule.didProcess; if(this.rockMillModule.markDirty) this.markDirty(); + + if(this.didProcess && (worldObj.getTotalWorldTime() + BlockPos.getIdentity(xCoord, yCoord, zCoord)) % 3 == 0) { + String sound = Blocks.stone.stepSound.getStepResourcePath(); + + if(recipe != null && recipe.getIcon().getItem() instanceof ItemBlock && ((ItemBlock) recipe.getIcon().getItem()).field_150939_a != null) { + sound = ((ItemBlock) recipe.getIcon().getItem()).field_150939_a.stepSound.getStepResourcePath(); + } + + worldObj.playSoundEffect(xCoord + 0.5, yCoord + 1.5, zCoord + 0.5, sound, this.getVolume(1.0F), 0.75F); + } this.networkPackNT(100); @@ -112,6 +128,38 @@ public class TileEntityMachineRockMill extends TileEntityMachineBase implements if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); } + + if(this.didProcess && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 1.5, zCoord + 0.5) < 35 * 35) { + + GenericRecipe recipe = rockMillModule.getRecipe(); + Block block = Blocks.gravel; + int meta = 0; + + if(recipe != null) { + if(recipe.getIcon().getItem() instanceof ItemBlock) { + block = Block.getBlockFromItem(recipe.getIcon().getItem()); + meta = recipe.getIcon().getItemDamage(); + } + } + + Vec3NT vec = new Vec3NT(1, 0, 0); + vec.rotateAroundYDeg(worldObj.rand.nextDouble() * 360); + + double speed = 0.125D; + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "vanillaExt"); + data.setString("mode", "blockdust"); + data.setInteger("block", Block.getIdFromBlock(block)); + data.setByte("meta", (byte) meta); + data.setDouble("mX", vec.xCoord * speed); + data.setDouble("mY", vec.yCoord * speed - 0.1D); + data.setDouble("mZ", vec.zCoord * speed); + data.setDouble("posX", xCoord + 0.5 + vec.xCoord * 2.25); + data.setDouble("posY", yCoord + 1.5); + data.setDouble("posZ", zCoord + 0.5 + vec.zCoord * 2.25); + MainRegistry.proxy.effectNT(data); + } } } diff --git a/src/main/resources/assets/hbm/textures/models/weapons/pepperbox.png b/src/main/resources/assets/hbm/textures/models/weapons/pepperbox.png index 2334c4e2c5c9b02fc42b09198f2ecac10a995566..5dc23b12f1ec4cb4d10294ac3b3fc9761d709434 100644 GIT binary patch delta 4997 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 P00000NkvXXu0mjf+{16( delta 2706 zcmV;D3T^d^C#e;XGk*$TNkleTW=q9ml`VGqZcyw|WhCr$s^Q+cin^(rVmr zZJHBf>PsquFZhxm6e6Kj31YxfFhmiBf&}!BVk}h?YtR;hRcOOWlZx9rQj5J9lh}s- zRgKvrIkV1fa+!G^|G1mI+1ZzQc4ua1X7~4jVR!b~nR#Y+=YPB3-|zR#3mU&cdej{t;)%vvANztc2tnE~h>&0qP2r5U zZUYBrEe#0K$ByaKfJQlt zfrJDj;k2t}bbre6=~)J}&tKT>l*90k1Zp251DMLZ^YMVA{a}-MujRYxbNgQg5qmVw z1DjUX$vh|S;X(*+7{J^Iu5-RwyPJcq_JbWR-zoaeojc|5@Gt;ietsVIbN75uZAXtD zjr}jJSS-pyp#T7=R4SO6neo+UDaWKeUcpJZWZ;`m-G70U&XLm9&ED@`nyvN6D}3mb zJv$~mt%JomG#oDM*>-D?@A%jjl#FDN95kkN@8euVSbe{2ne zB^ugOsrFyb7w`K(;76^BbKvAK0>jGzxE%-3`k=Sn#Q|3+qPn~a`ta~DMn*qOE8+!-$|zS*ON0G|FKFf_?C|I+)$GhCpL?h^MUo@L{zuqo?p|X58H2j?$I&_FRAAiGcBbFGQ$Tdvg|Lhr9LPA(pi{xZ* z3D3@__FtuxW3t&kwVHs=1%~K7`uzNSZN`2+H#b)|A7mS$&geuA-^HsqczhEyVIh@D z)!I~&lbxcPmuQ#6kaDc6evMA#P%arY(HJzhkrded4}3)~R4zx|k5I@K#_;^Jzv%df z*MF-ji3;VCf$#nPE)3~fO)!3T;w85CWA_Fw82QYQ()$({7jeV1@c47D*PX4p_FH4M z=YFu4Km6vtfelmRN-a3f7M8y3q>D$t?1vMLbMPi(B?3nwFR}8z=I`|@7Ql+zAmT?& zF#6>H>zDm-vQ(8=5sYu_+(xlJ5efQ2<$p2^<66}HAlkq=t4nx>QBEZY6?DV6hU!8k z>V6Pya92n)U5mI!#GpbWJrjVgap)R@t}Q!@uud&k&0!D&i=NBf5_KO!qo4O}km&bw zN|JT2U1k94MsIdPxn$JDf(CBI6Dq3`HH1)e7(&RF@3lq49va@MTOgr`H&j+t zpja&W%rd?aOh-bdnQLhEKFdQ~7`x1D(NJaV9)rXp=1^I+M+6#|hg8k@$sb>24}D^* zr#K2JArmQoxdGZX`%1 zCnx2lOP8=})hgJJn>TNkBpSVg%Bl&#v;;K9!I!VfB@{!4Zcxc%w98?H$;p!^ne8x! zhlj~wL;#gl6M(Zq0RTV#!zuQ#Lg>&9hfkE)gWI>XUAJ)bMFr{eL=4)9m^72`Z~5f~Al|g1Zjnuw2Gdr(R}X*m`$MMG!(j zhUjowQK?j*X&M+~$mjDt-#$TQ)mT$58TigK8ZD|Fuxo*asmLb zd-o2d_h&L0EG{l0pU>mUl`FotPjn8IRbxW4fnAS2y&h?efoob*H-8aT9z(!?4&%s? z6SaMQWaCl%;MHB8%Sb6PG&F>pH*dne=IWYt8)PP10Pvcx{t#;PeOYzu{B1Qv+2sE z5WWYG?cTiuk8C^&07~ux04`pO9uA+Y8)wTIicC5Q#d|7%N}Uq1pMO8W7uNx!kJ29FLFa-;g7yAtHv?$ zSuPp)`Y+#ylm;-y8>%0j5|+zwikN9yFf9wG&i*g4VnO(a%BuC(nhX8kr(81d(9hqq zBo^E|N1;Mkd4CLh__t|VFonRM|3P9g=ula;hm=bO_CEP;=$r*6769=4E9clpH;o6b z8kP_+Eeob4P&&UrVnOtOSv4+6&~nMZo+sV~odb-sz{7|z!jeVPglP#(U#R*Li;+is0tU*iPjLZWA2Zv)=X$zEawx0@h$;g5kV ztJ-1_Reu%bwp(u@HxUz@Aq$;z;?2O7Rh?B7J9pF1qUncw*4!?)j0;R(NdEm!r>3Tu zeNG9{Jp)lzb>dF)_ChSCFI2H*JOcosRZ6<8kN``4YSyo`u7fiR6L(}$I-eZTa0)}E zQmIvHDwRr|qp)8i)T!k#7Alt$FBX8>e%K<>OMhqa?2~hlQbGy=jWb_UGyJZz*?Kk3 zF_cPSNY}A-ZN94;EJuZx5Rg!G$H10VqX$^H zmVefvnZSqF7x2QFc#DQRd1;3z%`T?n76}?~)}Dbat47Ihe|iZ*VmUnF9Zzn82uGTQ zB%JZODV<7VNZ0X^4R1+QcmmYtHHhvR$g*l2IQICz@a2c!0V(}EjWEKIrS&$+Yot@q zOcOgc4dcY$;_WoLft*EqsMMs0yDZm9nSajDvV#tdjffYzilVx&k(gxs?2G%e>g3s8SIxYG?FC-4TLtLt+s>xQbZx(-)WIeMxfP-Kgvf{gK5FO1=@X zhLWD~f&uMo)b