1.12/1.14/1.15: Languages updated. JEI plugin init errors fixed. Code cleanups.

This commit is contained in:
stfwi 2020-01-05 09:30:03 +01:00
parent 163153c99c
commit 11e985b8db
24 changed files with 291 additions and 147 deletions

View file

@ -4,4 +4,4 @@ org.gradle.jvmargs=-Xmx8G
version_minecraft=1.12.2
version_forge=14.23.5.2768
version_jei=4.10.0.198
version_engineersdecor=1.0.17
version_engineersdecor=1.0.18-b1

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.12.2": {
"1.0.18-b1": "[M] Lang ru_ru updated (Smollet777).",
"1.0.17": "[R] Release based on v1.0.17-b3. Release-to-release changes: * Milking machine added. * Reverse recipes for slab slices added. * Texture and model improvements. * Lang file updates. * Minor bug fixes. * Config options added.\n[M] Updated zh_cn lang file (scikirbypoke).\n[A] Added opt-out config for the Small Tree Cutter.",
"1.0.17-b3": "[F] Fixed Small Block Breaker facings to the horizontal range (issue #70, thx JimMiningWorm).",
"1.0.17-b2": "[A] Reverse recipes for slabs and slab slices added.\n[M] Inset Floor Edge Light slightly thinner, looks better.",
@ -74,6 +75,6 @@
},
"promos": {
"1.12.2-recommended": "1.0.17",
"1.12.2-latest": "1.0.17"
"1.12.2-latest": "1.0.18-b1"
}
}

View file

@ -10,6 +10,8 @@ Mod sources for Minecraft version 1.12.2.
----
## Version history
- v1.0.18-b1 [M] Lang ru_ru updated (Smollet777).
-------------------------------------------------------------------
- v1.0.17 [R] Release based on v1.0.17-b3. Release-to-release changes:
* Milking machine added.

View file

@ -103,7 +103,7 @@ tile.engineersdecor.steel_floor_grating.help=§6Декоративное ста
tile.engineersdecor.treated_wood_stool.name=Табурет из обработанного дерева
tile.engineersdecor.treated_wood_stool.help=§6Крепкий деревянный табурет.§r Для использования в помещении и на улице.
tile.engineersdecor.treated_wood_crafting_table.name=Верстак из обработанного дерева
tile.engineersdecor.treated_wood_crafting_table.help=§6Прочный и устойчивый к погодным условиям. Восемь слотов для хранения. Хранит инвентарь.
tile.engineersdecor.treated_wood_crafting_table.help=§6Прочный и устойчивый к погодным условиям. Восемь слотов для хранения. Хранит инвентарь. \
Нажимайте кнопки со стрелками вверх/вниз для выбора из истории, выходной слот для размещения предметов, X-кнопка \
  очистить сетку крафта и историю. Shift-клик по стеку: передача стека от игрока в хранилище при создании \
если сетка пуста, в противном случае перенос от игрока в сетку. Автоматически распределяет кликаемый стек.

View file

@ -19,12 +19,6 @@ version = "${version_engineersdecor}"
group = "wile.engineersdecor"
archivesBaseName = "engineersdecor-${version_minecraft}"
def signingData = { ->
def sp = new Properties()
if(file("signing.properties").exists()) file("signing.properties").withInputStream { sp.load(it) }
return sp
}()
repositories {
maven { name = "Progwml6 maven"; url = "https://dvs1.progwml6.com/files/maven/" } // JEI files
maven { name = "ModMaven"; url = "modmaven.k-4u.nl" } // JEI files, fallback

View file

@ -5,4 +5,4 @@ version_minecraft=1.14.4
version_forge_minecraft=1.14.4-28.1.109
version_fml_mappings=20190719-1.14.3
version_jei=1.14.4:6.0.0.10
version_engineersdecor=1.0.18-b1
version_engineersdecor=1.0.18-b2

View file

@ -1,6 +1,7 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.14.4": {
"1.0.18-b2": "[F] Fixed JEI integration warning if nothing is opt'ed out (thx @SDUBZ for reporting).\n[M] Lang ru_ru updated (Smollet777).",
"1.0.18-b1": "[U] Updated to Forge 1.14.4-28.1.109/20190719-1.14.3.\n[A] Added opt-out config for the Small Tree Cutter.",
"1.0.17-b3": "[F] Double newline escapes in lang files fixed (\"\\n\" in a tooltip).\n[M] Updated zh_cn lang file (scikirbypoke).",
"1.0.17-b2": "[A] Reverse recipes for slabs and slab slices added.\n[M] Inset Floor Edge Light slightly thinner, looks better.",
@ -41,6 +42,6 @@
},
"promos": {
"1.14.4-recommended": "",
"1.14.4-latest": "1.0.18-b1"
"1.14.4-latest": "1.0.18-b2"
}
}

View file

@ -11,6 +11,9 @@ Mod sources for Minecraft version 1.14.4.
## Version history
- v1.0.18-b2 [F] Fixed JEI integration warning if nothing is opt'ed out (thx @SDUBZ for reporting).
[M] Lang ru_ru updated (Smollet777).
- v1.0.18-b1 [U] Updated to Forge 1.14.4-28.1.109/20190719-1.14.3.
[A] Added opt-out config for the Small Tree Cutter.

View file

@ -1,5 +1,6 @@
package wile.engineersdecor;
import wile.engineersdecor.detail.ModAuxiliaries;
import wile.engineersdecor.detail.ModConfig;
import wile.engineersdecor.detail.Networking;
import wile.engineersdecor.blocks.*;
@ -38,12 +39,14 @@ import javax.annotation.Nullable;
public class ModEngineersDecor
{
public static final String MODID = "engineersdecor";
public static final String MODNAME = "Engineer's Decor";
public static final int VERSION_DATAFIXER = 0;
private static final Logger LOGGER = LogManager.getLogger();
private static boolean config_loaded = false;
public ModEngineersDecor()
{
ModAuxiliaries.logGitVersion(MODNAME);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSetup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSendImc);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onRecvImc);

View file

@ -28,14 +28,48 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.lwjgl.glfw.GLFW;
import javax.annotation.Nullable;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class ModAuxiliaries
{
public static final String MODID = ModEngineersDecor.MODID;
// -------------------------------------------------------------------------------------------------------------------
// Sideness, system/environment, tagging interfaces
// -------------------------------------------------------------------------------------------------------------------
public interface IExperimentalFeature {}
public static final boolean isModLoaded(final String registry_name)
{ return ModList.get().isLoaded(registry_name); }
public static final boolean isDevelopmentMode()
{ return SharedConstants.developmentMode; }
// -------------------------------------------------------------------------------------------------------------------
// Logging
// -------------------------------------------------------------------------------------------------------------------
public static final void logInfo(final String msg)
{ ModEngineersDecor.logger().info(msg); }
public static final void logWarn(final String msg)
{ ModEngineersDecor.logger().warn(msg); }
public static final void logError(final String msg)
{ ModEngineersDecor.logger().error(msg); }
// -------------------------------------------------------------------------------------------------------------------
// Localization, text formatting
// -------------------------------------------------------------------------------------------------------------------
/**
* Text localisation wrapper, implicitly prepends `ModEngineersDecor.MODID` to the
* translation keys. Forces formatting argument, nullable if no special formatting shall be applied..
@ -160,6 +194,10 @@ public class ModAuxiliaries
{ return addInformation(stack.getTranslationKey(), stack.getTranslationKey(), tooltip, flag, addAdvancedTooltipHints); }
}
// -------------------------------------------------------------------------------------------------------------------
// Block handling
// -------------------------------------------------------------------------------------------------------------------
public static final AxisAlignedBB getPixeledAABB(double x0, double y0, double z0, double x1, double y1, double z1)
{ return new AxisAlignedBB(x0/16.0, y0/16.0, z0/16.0, x1/16.0, y1/16.0, z1/16.0); }
@ -187,18 +225,6 @@ public class ModAuxiliaries
return bb;
}
public static final boolean isModLoaded(final String registry_name)
{ return ModList.get().isLoaded(registry_name); }
public static final void logInfo(final String msg)
{ ModEngineersDecor.logger().info(msg); }
public static final void logWarn(final String msg)
{ ModEngineersDecor.logger().warn(msg); }
public static final void logError(final String msg)
{ ModEngineersDecor.logger().error(msg); }
@SuppressWarnings("unused")
public static void playerChatMessage(final PlayerEntity player, final String message)
{
@ -206,10 +232,30 @@ public class ModAuxiliaries
if(!s.isEmpty()) player.sendMessage(new TranslationTextComponent(s));
}
public static final boolean isDevelopmentMode()
{ return SharedConstants.developmentMode; }
// -------------------------------------------------------------------------------------------------------------------
// JAR resource related
// -------------------------------------------------------------------------------------------------------------------
public static String loadResourceText(String path)
{
try {
InputStream is = ModAuxiliaries.class.getResourceAsStream(path);
if(is==null) return "";
BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
return br.lines().collect(Collectors.joining("\n"));
} catch(Throwable e) {
return "";
}
}
public interface IExperimentalFeature {}
public static void logGitVersion(String mod_name)
{
try {
// Done during construction to have an exact version in case of a crash while registering.
String version = ModAuxiliaries.loadResourceText("/.gitversion").trim();
logInfo(mod_name+((version.isEmpty())?(" (dev build)"):(" GIT id #"+version)) + ".");
} catch(Throwable e) {
// (void)e; well, then not. Priority is not to get unneeded crashes because of version logging.
}
}
}

View file

@ -54,10 +54,12 @@ public class JEIPlugin implements mezz.jei.api.IModPlugin
blacklisted.add(new ItemStack(e.asItem()));
}
}
try {
jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(VanillaTypes.ITEM, blacklisted);
} catch(Exception e) {
ModEngineersDecor.logger().warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI optout processing.");
if(!blacklisted.isEmpty()) {
try {
jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(VanillaTypes.ITEM, blacklisted);
} catch(Exception e) {
ModEngineersDecor.logger().warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI optout processing.");
}
}
}
}

View file

@ -7,10 +7,10 @@
"engineersdecor.tooltip.hint.extended": "§6[§9SHIFT§r Больше информации§6]§r",
"engineersdecor.tooltip.hint.help": "§6[§9CTRL-SHIFT§r Помощь§6]§r",
"engineersdecor.tooltip.slabpickup.help": "§rБыстрое поднятие щелчком ЛКМ, смотря вверх/вниз с этой плитой в руках.",
"engineersdecor.tooltip.requires_rf_power": "Requires RF power.",
"engineersdecor.tooltip.massive_speed_boost_with_rf_power": "Apply RF power to magnificently increase the speed.",
"engineersdecor.config.pattern_excludes": "Pattern excludes",
"engineersdecor.config.pattern_includes": "Pattern includes",
"engineersdecor.tooltip.requires_rf_power": "Требуется RF энергия.",
"engineersdecor.tooltip.massive_speed_boost_with_rf_power": "Подайте RF энергию, чтобы значительно увеличить скорость.",
"engineersdecor.config.pattern_excludes": "Шаблон исключает",
"engineersdecor.config.pattern_includes": "Шаблон включает",
"engineersdecor.config.without_clinker_bricks": "Без клинкерных кирпичей",
"engineersdecor.config.without_slag_bricks": "Без шлаковых кирпичей",
"engineersdecor.config.without_rebar_concrete": "Без железобетона",
@ -59,7 +59,8 @@
"block.engineersdecor.slag_brick_block.help": "§6Серо-коричневый кирпичный блок с зависимыми от положения вариациями текстуры.",
"block.engineersdecor.rebar_concrete": "Железобетон",
"block.engineersdecor.rebar_concrete.help": "§6Стальной железобетонный блок.§r Дорогой, но взрывоустойчивый, как обсидиан.",
"block.engineersdecor.gas_concrete": "Gas Concrete Block",
"block.engineersdecor.gas_concrete": "Газобетон",
"block.engineersdecor.gas_concrete.help": "§6Низкая твердость, высокая производительность бетона.§r Легко ломающийся декоративный бетонный блок.",
"block.engineersdecor.panzerglass_block": "Бронированное стекло",
"block.engineersdecor.panzerglass_block.help": "§6Усиленный стеклоблок.§r Дорогой, взрывоустойчивый. Имеет тёмно-серый оттенок, слегка видны структурные линии, мультитекстура для бесшовного отображения.",
"block.engineersdecor.rebar_concrete_tile": "Железобетонная плита",
@ -74,15 +75,18 @@
"block.engineersdecor.rebar_concrete_slab.help": "§6Бетонная плита, усиленная сталью.§r Дорогая, но взрывоустойчивая, как обсидиан.",
"block.engineersdecor.rebar_concrete_tile_slab": "Железобетонная плитка",
"block.engineersdecor.rebar_concrete_tile_slab.help": "§6Бетонная плитка, усиленная сталью.§r Дорогая, но взрывоустойчивая, как обсидиан.",
"block.engineersdecor.gas_concrete_slab": "Gas Concrete Slab",
"block.engineersdecor.gas_concrete_slab": "Газобетонная плита",
"block.engineersdecor.gas_concrete_slab.help": "§6Низкая твердость, высокая производительность бетона.§r Легко ломающийся декоративный бетонный блок.",
"block.engineersdecor.panzerglass_slab": "Плита из бронированного стекла",
"block.engineersdecor.panzerglass_slab.help": "§6Усиленная стеклянная плита.§r Дорогая, взрывоустойчивая. Имеет тёмно-серый оттенок, слегка видны структурные линии.",
"block.engineersdecor.treated_wood_floor": "Treated Wood Floor",
"block.engineersdecor.treated_wood_floor": "Пол из обработанного дерева",
"block.engineersdecor.treated_wood_floor.help": "§6Декоративная напольная плитка с текстурными вариациями.§r",
"block.engineersdecor.rebar_concrete_wall": "Железобетонная стена",
"block.engineersdecor.rebar_concrete_wall.help": "§6Стальная железобетонная стена.§r Дорогая, но взрывоустойчивая, как обсидиан.",
"block.engineersdecor.concrete_wall": "Бетонная стена",
"block.engineersdecor.concrete_wall.help": "§6Стена из твёрдого бетона.",
"block.engineersdecor.gas_concrete_wall": "Gas Concrete Wall",
"block.engineersdecor.gas_concrete_wall": "Газобетонная стена",
"block.engineersdecor.gas_concrete_wall.help": "§6Бетонная стена низкой твердости.§r Легко ломающийся декоративный бетон.",
"block.engineersdecor.clinker_brick_wall": "Клинкерная кирпичная стена",
"block.engineersdecor.clinker_brick_wall.help": "§6Обыкновенная клинкерная кирпичная стена.",
"block.engineersdecor.slag_brick_wall": "Кирпичная стена из шлакоблока",
@ -103,7 +107,8 @@
"block.engineersdecor.rebar_concrete_stairs.help": "§6Железобетонные ступеньки.§r Дорогие, но взрывоустойчивые, как обсидиан.",
"block.engineersdecor.rebar_concrete_tile_stairs": "Ступеньки из железобетонной плитки",
"block.engineersdecor.rebar_concrete_tile_stairs.help": "§6Ступеньки из железобетонной плитки.§r Дорогие, но взрывоустойчивые, как обсидиан.",
"block.engineersdecor.gas_concrete_stairs": "Gas Concrete Stairs",
"block.engineersdecor.gas_concrete_stairs": "Газобетонные ступеньки",
"block.engineersdecor.gas_concrete_stairs.help": "§6Бетонные ступеньки низкой твёрдости.§r Легко ломающийся декоративный бетон.",
"block.engineersdecor.treated_wood_pole": "Прямой обработанный деревянный столб",
"block.engineersdecor.treated_wood_pole.help": "§6Надёжный столб с диаметром, схожим с реле.§r\n Может быть полезен в качестве альтернативы столбам для проводов, если требуется особая специальная длина, или как опора для конструкций.",
"block.engineersdecor.treated_wood_pole_head": "Прямой обработанный деревянный столб (верхняя часть/основание)",
@ -129,44 +134,55 @@
"block.engineersdecor.treated_wood_stool": "Табурет из обработанного дерева",
"block.engineersdecor.treated_wood_stool.help": "§6Крепкий деревянный табурет.§r Для использования в помещении и на улице.",
"block.engineersdecor.treated_wood_crafting_table": "Верстак из обработанного дерева",
"block.engineersdecor.treated_wood_crafting_table.help": "§6Прочный и устойчивый к погодным условиям. Восемь слотов для хранения. Хранит инвентарь.",
"block.engineersdecor.treated_wood_side_table": "Treated Wood Side Table",
"block.engineersdecor.treated_wood_side_table.help": "§6Needed after the work's done.",
"block.engineersdecor.treated_wood_crafting_table.help": "§6Прочный и устойчивый к погодным условиям. Восемь слотов для хранения. Хранит инвентарь. Нажимайте кнопки со стрелками вверх/вниз для выбора из истории, выходной слот для размещения предметов, X-кнопка очистить сетку крафта и историю. Shift-клик по стеку: передача стека от игрока в хранилище при создании если сетка пуста, в противном случае перенос от игрока в сетку. Автоматически распределяет кликаемый стек.",
"block.engineersdecor.treated_wood_side_table": "Столик из обработанного дерева",
"block.engineersdecor.treated_wood_side_table.help": "§6Нужен после того, как работа выполнена.",
"block.engineersdecor.iron_inset_light": "Встраиваемый осветитель",
"block.engineersdecor.iron_inset_light.help": "§6Маленький источник света, интегрируемый в стены, пол или потолок.§r\n Полезно для освещения мест, где проблематичны электрические осветительные установки. Уровень света - как факел.",
"block.engineersdecor.iron_floor_edge_light": "Inset Floor Edge Light",
"block.engineersdecor.iron_inset_light.help": "§6Маленький источник света, интегрируемый в стены, пол или потолок.§r\n Полезно для освещения мест, где проблематичны электрические осветительные установки.",
"block.engineersdecor.iron_floor_edge_light": "Встраиваемый снизу осветитель",
"block.engineersdecor.iron_floor_edge_light.help": "§6Маленький источник света, интегрируемый в нижнюю грань блока.§r\n Полезно для освещения мест, где проблематичны электрические осветительные установки.",
"block.engineersdecor.treated_wood_window": "Обработанное деревянное окно",
"block.engineersdecor.treated_wood_window.help": "§6Деревянный каркас окна с тройным остеклением. Ну и шумоизоляция.",
"block.engineersdecor.treated_wood_windowsill": "Обработанный деревянный подоконник",
"block.engineersdecor.treated_wood_windowsill.help": "§6Простое оформление окон.",
"block.engineersdecor.treated_wood_broad_windowsill": "Broad Treated Wood Window Sill",
"block.engineersdecor.treated_wood_broad_windowsill": "Широкий обработанный деревянный подоконник",
"block.engineersdecor.treated_wood_broad_windowsill.help": "§6Простое оформление окон.",
"block.engineersdecor.steel_framed_window": "Окно со стальной рамой",
"block.engineersdecor.steel_framed_window.help": "§6Стальной каркас окна с тройным остеклением. Хорошо изолирует. §r Не подключается к смежным блокам, таким как стеклянные панели.",
"block.engineersdecor.steel_mesh_fence": "Steel Mesh Fence",
"block.engineersdecor.steel_mesh_fence": "Забор из стальной сетки",
"block.engineersdecor.steel_mesh_fence.help": "§6Забор в индустриальном стиле.§r\nНе стыкуется с обычными заборами.",
"block.engineersdecor.small_lab_furnace": "Компактная лабораторная печь",
"block.engineersdecor.small_lab_furnace.help": "§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива сверху. Немного горячее, чем каменная, поэтому быстрее. Два внутренних слота для ввода, выхода и топлива.",
"block.engineersdecor.small_lab_furnace.help": "§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива сверху. Немного горячее и изолированней каменной, поэтому быстрее. Два вспомогательных слота, например для хранения. Два слота-воронки для ввода, вывода, и топлива. Поместите внешний нагреватель в слот AUX и подключите питание для электрического повышения скорости обработки.",
"block.engineersdecor.small_electrical_furnace": "Компактная конвейерная электрическая печь",
"block.engineersdecor.small_electrical_furnace.help": "§6Компактная конвейерная печь в металлическом корпусе.§r Автоматически принимает предметы со стороны ввода и складывает в инвентарь со стороны вывода. Предметы можно помещать/забирать со всех сторон с помощью воронок. Без проблем пропускает элементы, которые нельзя выплавить или приготовить. Чуть более энергоэффективная и быстрая, чем утеплённая булыжная печь. Транспортировка работает стеками. Механизм требует мало энергии.",
"block.engineersdecor.small_waste_incinerator": "Компактный сжигатель отходов",
"block.engineersdecor.small_waste_incinerator.help": "§6Отходы с слотами для очереди.§r Предметы могут помещаться с любой стороны, и храниться до тех пор, пока в очереди не останется свободного места. После этого самый старый стек будет сожжен. Подключите электричество (RF/FE) для увеличения скорости обработки. Сохраняет инвентарь при перемещении.",
"block.engineersdecor.straight_pipe_valve": "Одноканальный жидкостный клапан",
"block.engineersdecor.straight_pipe_valve.help": "§6Фрагмент прямой трубы.§r Проводит жидкость только в одном направлении. Не соединяется по бокам. Уменьшает пропускную способность. SHIFT для размещения в противоположном направлении.",
"block.engineersdecor.straight_pipe_valve.help": "§6Фрагмент прямой трубы.§r Проводит жидкость только в одном направлении. Не соединяется по бокам. Уменьшает пропускную способность. SHIFT для размещения в обратном направлении.",
"block.engineersdecor.straight_pipe_valve_redstone": "Краснокаменно-контролируемый жидкостный клапан",
"block.engineersdecor.straight_pipe_valve_redstone.help": "§6Фрагмент прямой трубы.§r Проводит жидкости только в одном направлении. Не соединяется по бокам. SHIFT для размещения в обратном направлении. Блокирует поток, если присутствует сигнал красного камня.",
"block.engineersdecor.straight_pipe_valve_redstone_analog": "Краснокаменно-аналоговый жидкостный клапан",
"block.engineersdecor.straight_pipe_valve_redstone_analog.help": "§6Фрагмент прямой трубы.§r Проводит жидкости только в одном направлении. Не соединяется по бокам. SHIFT для размещения в обратном направлении. Не пропускает при отсутствии сигнала красного камня, уменьшает расход линейно с мощности 1 до 14, открывается максимально-возможно при уровне сигнала красного камня 15.",
"block.engineersdecor.passive_fluid_accumulator": "Пассивный жидкостный накопитель",
"block.engineersdecor.passive_fluid_accumulator.help": "§6Вакуумный всасывающий жидкостный коллектор.§r Имеет один выход, все остальные стороны входные. Сливает жидкости из соседних резервуаров при выкачивании жидкости из выходного порта.",
"block.engineersdecor.small_fluid_funnel": "Small Fluid Collection Funnel",
"block.engineersdecor.small_fluid_funnel": "Малая воронка для сбора жидкости",
"block.engineersdecor.small_fluid_funnel.help": "§6Собирает жидкости над ним.§r Имеет внутренний бак на три ведра. Прослеживает текучие жидкости к соседним блокам источника. Жидкость может быть получена с помощью систем передачи жидкости или ведра. Заполняет только резервуары ниже (сила гравитации). Совместим с ванильным источником бесконечной воды.",
"block.engineersdecor.factory_dropper": "Фабричный выбрасыватель",
"block.engineersdecor.factory_dropper.help": "§6Выбрасыватель подходит для продвинутой автоматизации производства.§r Имеет 12 выборочных слотов. Сила броска, угол, размер стопки и задержка настраиваются в GUI. 3 слота сравнения стека с логическим И или ИЛИ могут использоваться в качестве внутреннего источника запуска. Внутренний триггер может быть И или ИЛИ с внешним триггерным сигналом красного камня. Триггерные кнопки симуляции для тестирования. Предварительно открывает дверцу затвора, когда выполняются условия внутреннего запуска. Сбрасывает все соответствующие стеки одновременно. Нажмите на все элементы в GUI, чтобы увидеть, как это работает.",
"block.engineersdecor.factory_hopper": "Factory Hopper",
"block.engineersdecor.factory_placer": "Factory Block Placer",
"block.engineersdecor.small_block_breaker": "Factory Block Breaker",
"block.engineersdecor.small_mineral_smelter": "Small Mineral Melting Furnace",
"block.engineersdecor.small_solar_panel": "Small Solar Panel",
"block.engineersdecor.small_tree_cutter": "Small Tree Cutter",
"block.engineersdecor.small_milking_machine": "Small Milking Machine",
"block.engineersdecor.factory_hopper": "Фабричная воронка",
"block.engineersdecor.factory_hopper.help": "§6Воронка для продвинутой автоматизации производства.§r Может передавать полустеки, максимальный диапазон сбора 9x9.\n GUI ползунки: Диапазон сбора (0 до 4), задержка помещения(0.5сек до 10сек), размер стека помещения (1 до 32).\n GUI редстоун: Не инвертирован / инвертирован (по умолчанию), пульс режим / постоянный режим (по умолчанию).",
"block.engineersdecor.factory_placer": "Фабричный разместитель блоков",
"block.engineersdecor.factory_placer.help": "§6Позволяет размещать блоки и сажать урожай или деревья.§r\n GUI редстоун: Не инвертирован / инвертирован (по умолчанию), пульс режим / постоянный режим (по умолчанию).\n Also supports spike planing from underneath the soil. Выплевывает предметы, которые он не может поместить или посадить.",
"block.engineersdecor.small_block_breaker": "Фабричный разбиватель блоков",
"block.engineersdecor.small_block_breaker.help": "§6Разбивает блоки перед собой.§r\n Можно отключить, подав сигнал красного камня. Время, необходимое для разрушения блока, зависит от твердости этого блока. ${!block_breaker_requires_power?engineersdecor.tooltip.massive_speed_boost_with_rf_power} ${block_breaker_requires_power?engineersdecor.tooltip.requires_rf_power}",
"block.engineersdecor.small_mineral_smelter": "Малая плавильная печь минералов",
"block.engineersdecor.small_mineral_smelter.help": "§6Высокотемпературная электрическая каменная плавильная печь с высокой изоляцией.§r\n Нагревает минеральные блоки до магматических блоков и, наконец, до лавы. Нажмите с минеральным блоком (камень, булыжник, и т.п.) или используйте другие способы загрузки. Используйте ведро или жидкостные насосы для извлечения лавы. При охлаждении лавы, генерируется обсидиан. Отключите RF питание или подайте сигнал красного камня для отключения печи. Для автоматизации используйте редстоуновый компаратор, чтобы увидеть, в какой фазе плавления находится минерал.",
"block.engineersdecor.small_solar_panel": "Малая солнечная панель",
"block.engineersdecor.small_solar_panel.help": "§6Вырабатывает небольшое количество энергии при воздействии солнечного света.§r\n Полезно для зарядки низковольтных конденсаторов в удаленных системах с низким потреблением. Внутренний контур насоса накапливает и часто передает RF. Производство зависит от времени суток и погоды.",
"block.engineersdecor.small_tree_cutter": "Малый лесоруб",
"block.engineersdecor.small_tree_cutter.help": "§6Вырубает деревья перед ним.§r\n Не собирает срубленное. Выключается с помощью сигнала красного камня. ${!tree_cuttter_requires_power?engineersdecor.tooltip.massive_speed_boost_with_rf_power} ${tree_cuttter_requires_power?engineersdecor.tooltip.requires_rf_power}",
"block.engineersdecor.small_milking_machine": "Малый доильный аппарат",
"block.engineersdecor.small_milking_machine.help": "§6Изредка чистит и доит коров.§r\n Имеет внутренний бак для жидкости. Не кормит животных. Используйте ведра для извлечения молока. Извлекает/кладёт сосуды для молока из/в инвентарь сзади или снизу (предпочитает извлекать сзади и класть снизу, но может также класть заполненные сосуды обратно в тот же инвентарь). Поддерживает выход жидкости в резервуары или трубы снизу (только если молоко существует в виде жидкости). Позаботьтесь, чтобы в загоне не было тесно, добровольно прогуливаются только счастливые животные.",
"block.engineersdecor.sign_decor": "Табличка с надписью (Логотип Engineer's decor)",
"block.engineersdecor.sign_decor.help": "§Это не должно быть крафтовым или видимым в JEI. Используется для творческой вкладки и скриншотов.",
"block.engineersdecor.sign_hotwire": "Знак «Осторожно, под напряжением»",
@ -178,13 +194,15 @@
"block.engineersdecor.sign_defense": "Знак «Осторожно, впереди система обороны»",
"block.engineersdecor.sign_defense.help": "§6Предупреждающий знак для турелей, катушек Тесла и ловушек.",
"block.engineersdecor.sign_factoryarea": "Знак «Заводская зона»",
"block.engineersdecor.sign_factoryarea.help": "§6Там дверь, пожалуйста...",
"block.engineersdecor.sign_factoryarea.help": "§6Маркерный знак для зданий или областей, где расположены действительно большие машины.",
"block.engineersdecor.sign_exit": "Знак «Выход»",
"block.engineersdecor.sign_exit.help": "§6Там дверь, пожалуйста ...",
"block.engineersdecor.halfslab_rebar_concrete": "Арматура для бетона",
"block.engineersdecor.halfslab_rebar_concrete.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_concrete": "Бетонный срез",
"block.engineersdecor.halfslab_concrete.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_gas_concrete": "Gas Concrete Slice",
"block.engineersdecor.halfslab_gas_concrete": "Газобетонный срез",
"block.engineersdecor.halfslab_gas_concrete.help": "§6Вертикально наращиваемая часть.§r Правый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_treated_wood": "Часть обработанного дерева",
"block.engineersdecor.halfslab_treated_wood.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_sheetmetal_iron": "Часть железного листового металла",
@ -197,5 +215,6 @@
"block.engineersdecor.halfslab_sheetmetal_gold.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_sheetmetal_aluminum": "Часть алюминиевого листового металла",
"block.engineersdecor.halfslab_sheetmetal_aluminum.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.testblock": "ED Test Block (do NOT use)"
"block.engineersdecor.testblock": "ED тестовый блок (НЕ ИСПОЛЬЗОВАТЬ)",
"block.engineersdecor.testblock.help": "§6Несоздаваемый тестовый блок с изменениемизменяющейся экспериментальной функциональностью. НЕ ИСПОЛЬЗОВАТЬ, может даже крашнуть игру в худшем случае!!"
}

View file

@ -196,6 +196,7 @@
"block.engineersdecor.sign_factoryarea": "指示牌 \"工厂区域\"",
"block.engineersdecor.sign_factoryarea.help": "§6用于指示真的很大的机器所在的建筑和区域。",
"block.engineersdecor.sign_exit": "出口指示牌",
"block.engineersdecor.sign_exit.help": "§6There's the door, please ...",
"block.engineersdecor.halfslab_rebar_concrete": "强化混凝土切片",
"block.engineersdecor.halfslab_rebar_concrete.help": "§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。",
"block.engineersdecor.halfslab_concrete": "混凝土切片",

View file

@ -19,12 +19,6 @@ version = "${version_engineersdecor}"
group = "wile.engineersdecor"
archivesBaseName = "engineersdecor-${version_minecraft}"
def signingData = { ->
def sp = new Properties()
if(file("signing.properties").exists()) file("signing.properties").withInputStream { sp.load(it) }
return sp
}()
repositories {
maven { name = "Progwml6 maven"; url = "https://dvs1.progwml6.com/files/maven/" } // JEI files
maven { name = "ModMaven"; url = "modmaven.k-4u.nl" } // JEI files, fallback

View file

@ -5,4 +5,4 @@ version_minecraft=1.15.1
version_forge_minecraft=1.15.1-30.0.16
version_fml_mappings=20190719-1.14.3
version_jei=1.14.4:6.0.0.10
version_engineersdecor=1.0.18-b1
version_engineersdecor=1.0.18-b2

View file

@ -1,11 +1,12 @@
{
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"1.15.1": {
"1.0.18-b2": "[M] Lang ru_ru updated (Smollet777).",
"1.0.18-b1": "[U] Updated to Forge 1.15.1-30.0.16/20190719-1.14.3.\n[F] Client setup Dist annotation fixed (issue #73, thx hitsu420).\n[F] Double newline escapes in lang files fixed (\"\\n\" in a tooltip).\n[M] Updated zh_cn lang file (scikirbypoke).\n[A] Added opt-out config for the Small Tree Cutter",
"1.0.17-b2": "[A] Initial port."
},
"promos": {
"1.15.1-recommended": "",
"1.15.1-latest": "1.0.18-b1"
"1.15.1-latest": "1.0.18-b2"
}
}

View file

@ -11,6 +11,8 @@ Mod sources for Minecraft version 1.15.1.
## Version history
- v1.0.18-b2 [M] Lang ru_ru updated (Smollet777).
- v1.0.18-b1 [U] Updated to Forge 1.15.1-30.0.16/20190719-1.14.3.
[F] Client setup Dist annotation fixed (issue #73, thx hitsu420).
[F] Double newline escapes in lang files fixed ("\n" in a tooltip).

View file

@ -1,5 +1,6 @@
package wile.engineersdecor;
import wile.engineersdecor.detail.ModAuxiliaries;
import wile.engineersdecor.detail.ModConfig;
import wile.engineersdecor.detail.Networking;
import wile.engineersdecor.blocks.*;
@ -38,12 +39,14 @@ import javax.annotation.Nullable;
public class ModEngineersDecor
{
public static final String MODID = "engineersdecor";
public static final String MODNAME = "Engineer's Decor";
public static final int VERSION_DATAFIXER = 0;
private static final Logger LOGGER = LogManager.getLogger();
private static boolean config_loaded = false;
public ModEngineersDecor()
{
ModAuxiliaries.logGitVersion(MODNAME);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSetup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onSendImc);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onRecvImc);

View file

@ -26,14 +26,79 @@ import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.lwjgl.glfw.GLFW;
import javax.annotation.Nullable;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class ModAuxiliaries
{
public static final String MODID = ModEngineersDecor.MODID;
// -------------------------------------------------------------------------------------------------------------------
// Sideness, system/environment, tagging interfaces
// -------------------------------------------------------------------------------------------------------------------
public interface IExperimentalFeature {}
public static final boolean isModLoaded(final String registry_name)
{ return ModList.get().isLoaded(registry_name); }
public static final boolean isDevelopmentMode()
{ return SharedConstants.developmentMode; }
// -------------------------------------------------------------------------------------------------------------------
// Logging
// -------------------------------------------------------------------------------------------------------------------
public static final void logInfo(final String msg)
{ ModEngineersDecor.logger().info(msg); }
public static final void logWarn(final String msg)
{ ModEngineersDecor.logger().warn(msg); }
public static final void logError(final String msg)
{ ModEngineersDecor.logger().error(msg); }
// -------------------------------------------------------------------------------------------------------------------
// Block handling
// -------------------------------------------------------------------------------------------------------------------
public static final AxisAlignedBB getPixeledAABB(double x0, double y0, double z0, double x1, double y1, double z1)
{ return new AxisAlignedBB(x0/16.0, y0/16.0, z0/16.0, x1/16.0, y1/16.0, z1/16.0); }
public static final AxisAlignedBB getRotatedAABB(AxisAlignedBB bb, Direction new_facing, boolean horizontal_rotation)
{
if(!horizontal_rotation) {
switch(new_facing.getIndex()) {
case 0: return new AxisAlignedBB(1-bb.maxX, 1-bb.maxZ, 1-bb.maxY, 1-bb.minX, 1-bb.minZ, 1-bb.minY); // D
case 1: return new AxisAlignedBB(1-bb.maxX, bb.minZ, bb.minY, 1-bb.minX, bb.maxZ, bb.maxY); // U
case 2: return new AxisAlignedBB(1-bb.maxX, bb.minY, 1-bb.maxZ, 1-bb.minX, bb.maxY, 1-bb.minZ); // N
case 3: return new AxisAlignedBB( bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); // S --> bb
case 4: return new AxisAlignedBB(1-bb.maxZ, bb.minY, bb.minX, 1-bb.minZ, bb.maxY, bb.maxX); // W
case 5: return new AxisAlignedBB( bb.minZ, bb.minY, 1-bb.maxX, bb.maxZ, bb.maxY, 1-bb.minX); // E
}
} else {
switch(new_facing.getIndex()) {
case 0: return new AxisAlignedBB( bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); // D --> bb
case 1: return new AxisAlignedBB( bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); // U --> bb
case 2: return new AxisAlignedBB( bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); // N --> bb
case 3: return new AxisAlignedBB(1-bb.maxX, bb.minY, 1-bb.maxZ, 1-bb.minX, bb.maxY, 1-bb.minZ); // S
case 4: return new AxisAlignedBB( bb.minZ, bb.minY, 1-bb.maxX, bb.maxZ, bb.maxY, 1-bb.minX); // W
case 5: return new AxisAlignedBB(1-bb.maxZ, bb.minY, bb.minX, 1-bb.minZ, bb.maxY, bb.maxX); // E
}
}
return bb;
}
// -------------------------------------------------------------------------------------------------------------------
// Localization, text formatting
// -------------------------------------------------------------------------------------------------------------------
/**
* Text localisation wrapper, implicitly prepends `ModEngineersDecor.MODID` to the
* translation keys. Forces formatting argument, nullable if no special formatting shall be applied..
@ -158,45 +223,6 @@ public class ModAuxiliaries
{ return addInformation(stack.getTranslationKey(), stack.getTranslationKey(), tooltip, flag, addAdvancedTooltipHints); }
}
public static final AxisAlignedBB getPixeledAABB(double x0, double y0, double z0, double x1, double y1, double z1)
{ return new AxisAlignedBB(x0/16.0, y0/16.0, z0/16.0, x1/16.0, y1/16.0, z1/16.0); }
public static final AxisAlignedBB getRotatedAABB(AxisAlignedBB bb, Direction new_facing, boolean horizontal_rotation)
{
if(!horizontal_rotation) {
switch(new_facing.getIndex()) {
case 0: return new AxisAlignedBB(1-bb.maxX, 1-bb.maxZ, 1-bb.maxY, 1-bb.minX, 1-bb.minZ, 1-bb.minY); // D
case 1: return new AxisAlignedBB(1-bb.maxX, bb.minZ, bb.minY, 1-bb.minX, bb.maxZ, bb.maxY); // U
case 2: return new AxisAlignedBB(1-bb.maxX, bb.minY, 1-bb.maxZ, 1-bb.minX, bb.maxY, 1-bb.minZ); // N
case 3: return new AxisAlignedBB( bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); // S --> bb
case 4: return new AxisAlignedBB(1-bb.maxZ, bb.minY, bb.minX, 1-bb.minZ, bb.maxY, bb.maxX); // W
case 5: return new AxisAlignedBB( bb.minZ, bb.minY, 1-bb.maxX, bb.maxZ, bb.maxY, 1-bb.minX); // E
}
} else {
switch(new_facing.getIndex()) {
case 0: return new AxisAlignedBB( bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); // D --> bb
case 1: return new AxisAlignedBB( bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); // U --> bb
case 2: return new AxisAlignedBB( bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ); // N --> bb
case 3: return new AxisAlignedBB(1-bb.maxX, bb.minY, 1-bb.maxZ, 1-bb.minX, bb.maxY, 1-bb.minZ); // S
case 4: return new AxisAlignedBB( bb.minZ, bb.minY, 1-bb.maxX, bb.maxZ, bb.maxY, 1-bb.minX); // W
case 5: return new AxisAlignedBB(1-bb.maxZ, bb.minY, bb.minX, 1-bb.minZ, bb.maxY, bb.maxX); // E
}
}
return bb;
}
public static final boolean isModLoaded(final String registry_name)
{ return ModList.get().isLoaded(registry_name); }
public static final void logInfo(final String msg)
{ ModEngineersDecor.logger().info(msg); }
public static final void logWarn(final String msg)
{ ModEngineersDecor.logger().warn(msg); }
public static final void logError(final String msg)
{ ModEngineersDecor.logger().error(msg); }
@SuppressWarnings("unused")
public static void playerChatMessage(final PlayerEntity player, final String message)
{
@ -204,10 +230,31 @@ public class ModAuxiliaries
if(!s.isEmpty()) player.sendMessage(new TranslationTextComponent(s));
}
public static final boolean isDevelopmentMode()
{ return SharedConstants.developmentMode; }
// -------------------------------------------------------------------------------------------------------------------
// JAR resource related
// -------------------------------------------------------------------------------------------------------------------
public static String loadResourceText(String path)
{
try {
InputStream is = ModAuxiliaries.class.getResourceAsStream(path);
if(is==null) return "";
BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
return br.lines().collect(Collectors.joining("\n"));
} catch(Throwable e) {
return "";
}
}
public interface IExperimentalFeature {}
public static void logGitVersion(String mod_name)
{
try {
// Done during construction to have an exact version in case of a crash while registering.
String version = ModAuxiliaries.loadResourceText("/.gitversion").trim();
logInfo(mod_name+((version.isEmpty())?(" (dev build)"):(" GIT id #"+version)) + ".");
} catch(Throwable e) {
// (void)e; well, then not. Priority is not to get unneeded crashes because of version logging.
}
}
}

View file

@ -56,10 +56,12 @@ public class JEIPlugin implements mezz.jei.api.IModPlugin
blacklisted.add(new ItemStack(e.asItem()));
}
}
try {
jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(VanillaTypes.ITEM, blacklisted);
} catch(Exception e) {
ModEngineersDecor.logger().warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI optout processing.");
if(!blacklisted.isEmpty()) {
try {
jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(VanillaTypes.ITEM, blacklisted);
} catch(Exception e) {
ModEngineersDecor.logger().warn("Exception in JEI opt-out processing: '" + e.getMessage() + "', skipping further JEI optout processing.");
}
}
}
}

View file

@ -7,10 +7,10 @@
"engineersdecor.tooltip.hint.extended": "§6[§9SHIFT§r Больше информации§6]§r",
"engineersdecor.tooltip.hint.help": "§6[§9CTRL-SHIFT§r Помощь§6]§r",
"engineersdecor.tooltip.slabpickup.help": "§rБыстрое поднятие щелчком ЛКМ, смотря вверх/вниз с этой плитой в руках.",
"engineersdecor.tooltip.requires_rf_power": "Requires RF power.",
"engineersdecor.tooltip.massive_speed_boost_with_rf_power": "Apply RF power to magnificently increase the speed.",
"engineersdecor.config.pattern_excludes": "Pattern excludes",
"engineersdecor.config.pattern_includes": "Pattern includes",
"engineersdecor.tooltip.requires_rf_power": "Требуется RF энергия.",
"engineersdecor.tooltip.massive_speed_boost_with_rf_power": "Подайте RF энергию, чтобы значительно увеличить скорость.",
"engineersdecor.config.pattern_excludes": "Шаблон исключает",
"engineersdecor.config.pattern_includes": "Шаблон включает",
"engineersdecor.config.without_clinker_bricks": "Без клинкерных кирпичей",
"engineersdecor.config.without_slag_bricks": "Без шлаковых кирпичей",
"engineersdecor.config.without_rebar_concrete": "Без железобетона",
@ -59,7 +59,8 @@
"block.engineersdecor.slag_brick_block.help": "§6Серо-коричневый кирпичный блок с зависимыми от положения вариациями текстуры.",
"block.engineersdecor.rebar_concrete": "Железобетон",
"block.engineersdecor.rebar_concrete.help": "§6Стальной железобетонный блок.§r Дорогой, но взрывоустойчивый, как обсидиан.",
"block.engineersdecor.gas_concrete": "Gas Concrete Block",
"block.engineersdecor.gas_concrete": "Газобетон",
"block.engineersdecor.gas_concrete.help": "§6Низкая твердость, высокая производительность бетона.§r Легко ломающийся декоративный бетонный блок.",
"block.engineersdecor.panzerglass_block": "Бронированное стекло",
"block.engineersdecor.panzerglass_block.help": "§6Усиленный стеклоблок.§r Дорогой, взрывоустойчивый. Имеет тёмно-серый оттенок, слегка видны структурные линии, мультитекстура для бесшовного отображения.",
"block.engineersdecor.rebar_concrete_tile": "Железобетонная плита",
@ -74,15 +75,18 @@
"block.engineersdecor.rebar_concrete_slab.help": "§6Бетонная плита, усиленная сталью.§r Дорогая, но взрывоустойчивая, как обсидиан.",
"block.engineersdecor.rebar_concrete_tile_slab": "Железобетонная плитка",
"block.engineersdecor.rebar_concrete_tile_slab.help": "§6Бетонная плитка, усиленная сталью.§r Дорогая, но взрывоустойчивая, как обсидиан.",
"block.engineersdecor.gas_concrete_slab": "Gas Concrete Slab",
"block.engineersdecor.gas_concrete_slab": "Газобетонная плита",
"block.engineersdecor.gas_concrete_slab.help": "§6Низкая твердость, высокая производительность бетона.§r Легко ломающийся декоративный бетонный блок.",
"block.engineersdecor.panzerglass_slab": "Плита из бронированного стекла",
"block.engineersdecor.panzerglass_slab.help": "§6Усиленная стеклянная плита.§r Дорогая, взрывоустойчивая. Имеет тёмно-серый оттенок, слегка видны структурные линии.",
"block.engineersdecor.treated_wood_floor": "Treated Wood Floor",
"block.engineersdecor.treated_wood_floor": "Пол из обработанного дерева",
"block.engineersdecor.treated_wood_floor.help": "§6Декоративная напольная плитка с текстурными вариациями.§r",
"block.engineersdecor.rebar_concrete_wall": "Железобетонная стена",
"block.engineersdecor.rebar_concrete_wall.help": "§6Стальная железобетонная стена.§r Дорогая, но взрывоустойчивая, как обсидиан.",
"block.engineersdecor.concrete_wall": "Бетонная стена",
"block.engineersdecor.concrete_wall.help": "§6Стена из твёрдого бетона.",
"block.engineersdecor.gas_concrete_wall": "Gas Concrete Wall",
"block.engineersdecor.gas_concrete_wall": "Газобетонная стена",
"block.engineersdecor.gas_concrete_wall.help": "§6Бетонная стена низкой твердости.§r Легко ломающийся декоративный бетон.",
"block.engineersdecor.clinker_brick_wall": "Клинкерная кирпичная стена",
"block.engineersdecor.clinker_brick_wall.help": "§6Обыкновенная клинкерная кирпичная стена.",
"block.engineersdecor.slag_brick_wall": "Кирпичная стена из шлакоблока",
@ -103,7 +107,8 @@
"block.engineersdecor.rebar_concrete_stairs.help": "§6Железобетонные ступеньки.§r Дорогие, но взрывоустойчивые, как обсидиан.",
"block.engineersdecor.rebar_concrete_tile_stairs": "Ступеньки из железобетонной плитки",
"block.engineersdecor.rebar_concrete_tile_stairs.help": "§6Ступеньки из железобетонной плитки.§r Дорогие, но взрывоустойчивые, как обсидиан.",
"block.engineersdecor.gas_concrete_stairs": "Gas Concrete Stairs",
"block.engineersdecor.gas_concrete_stairs": "Газобетонные ступеньки",
"block.engineersdecor.gas_concrete_stairs.help": "§6Бетонные ступеньки низкой твёрдости.§r Легко ломающийся декоративный бетон.",
"block.engineersdecor.treated_wood_pole": "Прямой обработанный деревянный столб",
"block.engineersdecor.treated_wood_pole.help": "§6Надёжный столб с диаметром, схожим с реле.§r\n Может быть полезен в качестве альтернативы столбам для проводов, если требуется особая специальная длина, или как опора для конструкций.",
"block.engineersdecor.treated_wood_pole_head": "Прямой обработанный деревянный столб (верхняя часть/основание)",
@ -129,44 +134,55 @@
"block.engineersdecor.treated_wood_stool": "Табурет из обработанного дерева",
"block.engineersdecor.treated_wood_stool.help": "§6Крепкий деревянный табурет.§r Для использования в помещении и на улице.",
"block.engineersdecor.treated_wood_crafting_table": "Верстак из обработанного дерева",
"block.engineersdecor.treated_wood_crafting_table.help": "§6Прочный и устойчивый к погодным условиям. Восемь слотов для хранения. Хранит инвентарь.",
"block.engineersdecor.treated_wood_side_table": "Treated Wood Side Table",
"block.engineersdecor.treated_wood_side_table.help": "§6Needed after the work's done.",
"block.engineersdecor.treated_wood_crafting_table.help": "§6Прочный и устойчивый к погодным условиям. Восемь слотов для хранения. Хранит инвентарь. Нажимайте кнопки со стрелками вверх/вниз для выбора из истории, выходной слот для размещения предметов, X-кнопка очистить сетку крафта и историю. Shift-клик по стеку: передача стека от игрока в хранилище при создании если сетка пуста, в противном случае перенос от игрока в сетку. Автоматически распределяет кликаемый стек.",
"block.engineersdecor.treated_wood_side_table": "Столик из обработанного дерева",
"block.engineersdecor.treated_wood_side_table.help": "§6Нужен после того, как работа выполнена.",
"block.engineersdecor.iron_inset_light": "Встраиваемый осветитель",
"block.engineersdecor.iron_inset_light.help": "§6Маленький источник света, интегрируемый в стены, пол или потолок.§r\n Полезно для освещения мест, где проблематичны электрические осветительные установки. Уровень света - как факел.",
"block.engineersdecor.iron_floor_edge_light": "Inset Floor Edge Light",
"block.engineersdecor.iron_inset_light.help": "§6Маленький источник света, интегрируемый в стены, пол или потолок.§r\n Полезно для освещения мест, где проблематичны электрические осветительные установки.",
"block.engineersdecor.iron_floor_edge_light": "Встраиваемый снизу осветитель",
"block.engineersdecor.iron_floor_edge_light.help": "§6Маленький источник света, интегрируемый в нижнюю грань блока.§r\n Полезно для освещения мест, где проблематичны электрические осветительные установки.",
"block.engineersdecor.treated_wood_window": "Обработанное деревянное окно",
"block.engineersdecor.treated_wood_window.help": "§6Деревянный каркас окна с тройным остеклением. Ну и шумоизоляция.",
"block.engineersdecor.treated_wood_windowsill": "Обработанный деревянный подоконник",
"block.engineersdecor.treated_wood_windowsill.help": "§6Простое оформление окон.",
"block.engineersdecor.treated_wood_broad_windowsill": "Broad Treated Wood Window Sill",
"block.engineersdecor.treated_wood_broad_windowsill": "Широкий обработанный деревянный подоконник",
"block.engineersdecor.treated_wood_broad_windowsill.help": "§6Простое оформление окон.",
"block.engineersdecor.steel_framed_window": "Окно со стальной рамой",
"block.engineersdecor.steel_framed_window.help": "§6Стальной каркас окна с тройным остеклением. Хорошо изолирует. §r Не подключается к смежным блокам, таким как стеклянные панели.",
"block.engineersdecor.steel_mesh_fence": "Steel Mesh Fence",
"block.engineersdecor.steel_mesh_fence": "Забор из стальной сетки",
"block.engineersdecor.steel_mesh_fence.help": "§6Забор в индустриальном стиле.§r\nНе стыкуется с обычными заборами.",
"block.engineersdecor.small_lab_furnace": "Компактная лабораторная печь",
"block.engineersdecor.small_lab_furnace.help": "§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива сверху. Немного горячее, чем каменная, поэтому быстрее. Два внутренних слота для ввода, выхода и топлива.",
"block.engineersdecor.small_lab_furnace.help": "§6Лабораторная печь в металлическом корпусе.§r Подача твёрдого топлива сверху. Немного горячее и изолированней каменной, поэтому быстрее. Два вспомогательных слота, например для хранения. Два слота-воронки для ввода, вывода, и топлива. Поместите внешний нагреватель в слот AUX и подключите питание для электрического повышения скорости обработки.",
"block.engineersdecor.small_electrical_furnace": "Компактная конвейерная электрическая печь",
"block.engineersdecor.small_electrical_furnace.help": "§6Компактная конвейерная печь в металлическом корпусе.§r Автоматически принимает предметы со стороны ввода и складывает в инвентарь со стороны вывода. Предметы можно помещать/забирать со всех сторон с помощью воронок. Без проблем пропускает элементы, которые нельзя выплавить или приготовить. Чуть более энергоэффективная и быстрая, чем утеплённая булыжная печь. Транспортировка работает стеками. Механизм требует мало энергии.",
"block.engineersdecor.small_waste_incinerator": "Компактный сжигатель отходов",
"block.engineersdecor.small_waste_incinerator.help": "§6Отходы с слотами для очереди.§r Предметы могут помещаться с любой стороны, и храниться до тех пор, пока в очереди не останется свободного места. После этого самый старый стек будет сожжен. Подключите электричество (RF/FE) для увеличения скорости обработки. Сохраняет инвентарь при перемещении.",
"block.engineersdecor.straight_pipe_valve": "Одноканальный жидкостный клапан",
"block.engineersdecor.straight_pipe_valve.help": "§6Фрагмент прямой трубы.§r Проводит жидкость только в одном направлении. Не соединяется по бокам. Уменьшает пропускную способность. SHIFT для размещения в противоположном направлении.",
"block.engineersdecor.straight_pipe_valve.help": "§6Фрагмент прямой трубы.§r Проводит жидкость только в одном направлении. Не соединяется по бокам. Уменьшает пропускную способность. SHIFT для размещения в обратном направлении.",
"block.engineersdecor.straight_pipe_valve_redstone": "Краснокаменно-контролируемый жидкостный клапан",
"block.engineersdecor.straight_pipe_valve_redstone.help": "§6Фрагмент прямой трубы.§r Проводит жидкости только в одном направлении. Не соединяется по бокам. SHIFT для размещения в обратном направлении. Блокирует поток, если присутствует сигнал красного камня.",
"block.engineersdecor.straight_pipe_valve_redstone_analog": "Краснокаменно-аналоговый жидкостный клапан",
"block.engineersdecor.straight_pipe_valve_redstone_analog.help": "§6Фрагмент прямой трубы.§r Проводит жидкости только в одном направлении. Не соединяется по бокам. SHIFT для размещения в обратном направлении. Не пропускает при отсутствии сигнала красного камня, уменьшает расход линейно с мощности 1 до 14, открывается максимально-возможно при уровне сигнала красного камня 15.",
"block.engineersdecor.passive_fluid_accumulator": "Пассивный жидкостный накопитель",
"block.engineersdecor.passive_fluid_accumulator.help": "§6Вакуумный всасывающий жидкостный коллектор.§r Имеет один выход, все остальные стороны входные. Сливает жидкости из соседних резервуаров при выкачивании жидкости из выходного порта.",
"block.engineersdecor.small_fluid_funnel": "Small Fluid Collection Funnel",
"block.engineersdecor.small_fluid_funnel": "Малая воронка для сбора жидкости",
"block.engineersdecor.small_fluid_funnel.help": "§6Собирает жидкости над ним.§r Имеет внутренний бак на три ведра. Прослеживает текучие жидкости к соседним блокам источника. Жидкость может быть получена с помощью систем передачи жидкости или ведра. Заполняет только резервуары ниже (сила гравитации). Совместим с ванильным источником бесконечной воды.",
"block.engineersdecor.factory_dropper": "Фабричный выбрасыватель",
"block.engineersdecor.factory_dropper.help": "§6Выбрасыватель подходит для продвинутой автоматизации производства.§r Имеет 12 выборочных слотов. Сила броска, угол, размер стопки и задержка настраиваются в GUI. 3 слота сравнения стека с логическим И или ИЛИ могут использоваться в качестве внутреннего источника запуска. Внутренний триггер может быть И или ИЛИ с внешним триггерным сигналом красного камня. Триггерные кнопки симуляции для тестирования. Предварительно открывает дверцу затвора, когда выполняются условия внутреннего запуска. Сбрасывает все соответствующие стеки одновременно. Нажмите на все элементы в GUI, чтобы увидеть, как это работает.",
"block.engineersdecor.factory_hopper": "Factory Hopper",
"block.engineersdecor.factory_placer": "Factory Block Placer",
"block.engineersdecor.small_block_breaker": "Factory Block Breaker",
"block.engineersdecor.small_mineral_smelter": "Small Mineral Melting Furnace",
"block.engineersdecor.small_solar_panel": "Small Solar Panel",
"block.engineersdecor.small_tree_cutter": "Small Tree Cutter",
"block.engineersdecor.small_milking_machine": "Small Milking Machine",
"block.engineersdecor.factory_hopper": "Фабричная воронка",
"block.engineersdecor.factory_hopper.help": "§6Воронка для продвинутой автоматизации производства.§r Может передавать полустеки, максимальный диапазон сбора 9x9.\n GUI ползунки: Диапазон сбора (0 до 4), задержка помещения(0.5сек до 10сек), размер стека помещения (1 до 32).\n GUI редстоун: Не инвертирован / инвертирован (по умолчанию), пульс режим / постоянный режим (по умолчанию).",
"block.engineersdecor.factory_placer": "Фабричный разместитель блоков",
"block.engineersdecor.factory_placer.help": "§6Позволяет размещать блоки и сажать урожай или деревья.§r\n GUI редстоун: Не инвертирован / инвертирован (по умолчанию), пульс режим / постоянный режим (по умолчанию).\n Also supports spike planing from underneath the soil. Выплевывает предметы, которые он не может поместить или посадить.",
"block.engineersdecor.small_block_breaker": "Фабричный разбиватель блоков",
"block.engineersdecor.small_block_breaker.help": "§6Разбивает блоки перед собой.§r\n Можно отключить, подав сигнал красного камня. Время, необходимое для разрушения блока, зависит от твердости этого блока. ${!block_breaker_requires_power?engineersdecor.tooltip.massive_speed_boost_with_rf_power} ${block_breaker_requires_power?engineersdecor.tooltip.requires_rf_power}",
"block.engineersdecor.small_mineral_smelter": "Малая плавильная печь минералов",
"block.engineersdecor.small_mineral_smelter.help": "§6Высокотемпературная электрическая каменная плавильная печь с высокой изоляцией.§r\n Нагревает минеральные блоки до магматических блоков и, наконец, до лавы. Нажмите с минеральным блоком (камень, булыжник, и т.п.) или используйте другие способы загрузки. Используйте ведро или жидкостные насосы для извлечения лавы. При охлаждении лавы, генерируется обсидиан. Отключите RF питание или подайте сигнал красного камня для отключения печи. Для автоматизации используйте редстоуновый компаратор, чтобы увидеть, в какой фазе плавления находится минерал.",
"block.engineersdecor.small_solar_panel": "Малая солнечная панель",
"block.engineersdecor.small_solar_panel.help": "§6Вырабатывает небольшое количество энергии при воздействии солнечного света.§r\n Полезно для зарядки низковольтных конденсаторов в удаленных системах с низким потреблением. Внутренний контур насоса накапливает и часто передает RF. Производство зависит от времени суток и погоды.",
"block.engineersdecor.small_tree_cutter": "Малый лесоруб",
"block.engineersdecor.small_tree_cutter.help": "§6Вырубает деревья перед ним.§r\n Не собирает срубленное. Выключается с помощью сигнала красного камня. ${!tree_cuttter_requires_power?engineersdecor.tooltip.massive_speed_boost_with_rf_power} ${tree_cuttter_requires_power?engineersdecor.tooltip.requires_rf_power}",
"block.engineersdecor.small_milking_machine": "Малый доильный аппарат",
"block.engineersdecor.small_milking_machine.help": "§6Изредка чистит и доит коров.§r\n Имеет внутренний бак для жидкости. Не кормит животных. Используйте ведра для извлечения молока. Извлекает/кладёт сосуды для молока из/в инвентарь сзади или снизу (предпочитает извлекать сзади и класть снизу, но может также класть заполненные сосуды обратно в тот же инвентарь). Поддерживает выход жидкости в резервуары или трубы снизу (только если молоко существует в виде жидкости). Позаботьтесь, чтобы в загоне не было тесно, добровольно прогуливаются только счастливые животные.",
"block.engineersdecor.sign_decor": "Табличка с надписью (Логотип Engineer's decor)",
"block.engineersdecor.sign_decor.help": "§Это не должно быть крафтовым или видимым в JEI. Используется для творческой вкладки и скриншотов.",
"block.engineersdecor.sign_hotwire": "Знак «Осторожно, под напряжением»",
@ -178,13 +194,15 @@
"block.engineersdecor.sign_defense": "Знак «Осторожно, впереди система обороны»",
"block.engineersdecor.sign_defense.help": "§6Предупреждающий знак для турелей, катушек Тесла и ловушек.",
"block.engineersdecor.sign_factoryarea": "Знак «Заводская зона»",
"block.engineersdecor.sign_factoryarea.help": "§6Там дверь, пожалуйста...",
"block.engineersdecor.sign_factoryarea.help": "§6Маркерный знак для зданий или областей, где расположены действительно большие машины.",
"block.engineersdecor.sign_exit": "Знак «Выход»",
"block.engineersdecor.sign_exit.help": "§6Там дверь, пожалуйста ...",
"block.engineersdecor.halfslab_rebar_concrete": "Арматура для бетона",
"block.engineersdecor.halfslab_rebar_concrete.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_concrete": "Бетонный срез",
"block.engineersdecor.halfslab_concrete.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_gas_concrete": "Gas Concrete Slice",
"block.engineersdecor.halfslab_gas_concrete": "Газобетонный срез",
"block.engineersdecor.halfslab_gas_concrete.help": "§6Вертикально наращиваемая часть.§r Правый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_treated_wood": "Часть обработанного дерева",
"block.engineersdecor.halfslab_treated_wood.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_sheetmetal_iron": "Часть железного листового металла",
@ -197,5 +215,6 @@
"block.engineersdecor.halfslab_sheetmetal_gold.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.halfslab_sheetmetal_aluminum": "Часть алюминиевого листового металла",
"block.engineersdecor.halfslab_sheetmetal_aluminum.help": "§6Вертикально наращиваемая часть.§rПравый/левый щелчок со стеком частей на верхней или нижней поверхности для добавления/удаления частей.",
"block.engineersdecor.testblock": "ED Test Block (do NOT use)"
"block.engineersdecor.testblock": "ED тестовый блок (НЕ ИСПОЛЬЗОВАТЬ)",
"block.engineersdecor.testblock.help": "§6Несоздаваемый тестовый блок с изменениемизменяющейся экспериментальной функциональностью. НЕ ИСПОЛЬЗОВАТЬ, может даже крашнуть игру в худшем случае!!"
}

View file

@ -196,6 +196,7 @@
"block.engineersdecor.sign_factoryarea": "指示牌 \"工厂区域\"",
"block.engineersdecor.sign_factoryarea.help": "§6用于指示真的很大的机器所在的建筑和区域。",
"block.engineersdecor.sign_exit": "出口指示牌",
"block.engineersdecor.sign_exit.help": "§6There's the door, please ...",
"block.engineersdecor.halfslab_rebar_concrete": "强化混凝土切片",
"block.engineersdecor.halfslab_rebar_concrete.help": "§6可垂直堆叠的切片。§r手持切片右/左击切片堆叠的顶端或底部来添加/移除切片。",
"block.engineersdecor.halfslab_concrete": "混凝土切片",

View file

@ -49,7 +49,7 @@
for(var i in lines) {
if(!lines[i].length) continue;
const kv = lines[i].split("=", 2);
if(kv.length!=2) throw new Error("Invalid line in '"+file_path+"': '"+lines[i]+"'");
if(kv.length!=2) throw new Error("Invalid line " + i + " in '"+file_path+"': '"+lines[i]+"'");
const key = kv[0].trim();
const text = kv[1].trim();
text = text.replace("\\\\n", "\n").replace("\\n", "\n");

View file

@ -2,13 +2,14 @@
"homepage": "https://www.curseforge.com/minecraft/mc-mods/engineers-decor/",
"promos": {
"1.12.2-recommended": "1.0.17",
"1.12.2-latest": "1.0.17",
"1.12.2-latest": "1.0.18-b1",
"1.14.4-recommended": "",
"1.14.4-latest": "1.0.18-b1",
"1.14.4-latest": "1.0.18-b2",
"1.15.1-recommended": "",
"1.15.1-latest": "1.0.18-b1"
"1.15.1-latest": "1.0.18-b2"
},
"1.12.2": {
"1.0.18-b1": "[M] Lang ru_ru updated (Smollet777).",
"1.0.17": "[R] Release based on v1.0.17-b3. Release-to-release changes: * Milking machine added. * Reverse recipes for slab slices added. * Texture and model improvements. * Lang file updates. * Minor bug fixes. * Config options added.\n[M] Updated zh_cn lang file (scikirbypoke).\n[A] Added opt-out config for the Small Tree Cutter.",
"1.0.17-b3": "[F] Fixed Small Block Breaker facings to the horizontal range (issue #70, thx JimMiningWorm).",
"1.0.17-b2": "[A] Reverse recipes for slabs and slab slices added.\n[M] Inset Floor Edge Light slightly thinner, looks better.",
@ -81,6 +82,7 @@
"1.0.0-b1": "[A] Initial structure.\n[A] Added clinker bricks and clinker brick stairs.\n[A] Added slag bricks and slag brick stairs.\n[A] Added metal rung ladder.\n[A] Added staggered metal steps ladder.\n[A] Added treated wood ladder.\n[A] Added treated wood pole.\n[A] Added treated wood table."
},
"1.14.4": {
"1.0.18-b2": "[F] Fixed JEI integration warning if nothing is opt'ed out (thx @SDUBZ for reporting).\n[M] Lang ru_ru updated (Smollet777).",
"1.0.18-b1": "[U] Updated to Forge 1.14.4-28.1.109/20190719-1.14.3.\n[A] Added opt-out config for the Small Tree Cutter.",
"1.0.17-b3": "[F] Double newline escapes in lang files fixed (\"\\n\" in a tooltip).\n[M] Updated zh_cn lang file (scikirbypoke).",
"1.0.17-b2": "[A] Reverse recipes for slabs and slab slices added.\n[M] Inset Floor Edge Light slightly thinner, looks better.",
@ -120,6 +122,7 @@
"1.0.7-b3": "[A] Initial 1.14.2 port of decorative blocks."
},
"1.15.1": {
"1.0.18-b2": "[M] Lang ru_ru updated (Smollet777).",
"1.0.18-b1": "[U] Updated to Forge 1.15.1-30.0.16/20190719-1.14.3.\n[F] Client setup Dist annotation fixed (issue #73, thx hitsu420).\n[F] Double newline escapes in lang files fixed (\"\\n\" in a tooltip).\n[M] Updated zh_cn lang file (scikirbypoke).\n[A] Added opt-out config for the Small Tree Cutter",
"1.0.17-b2": "[A] Initial port."
}