diff --git a/src/main/java/appeng/api/stacks/KeyCounter.java b/src/main/java/appeng/api/stacks/KeyCounter.java index 9f39ec67c59..2adaae6df73 100644 --- a/src/main/java/appeng/api/stacks/KeyCounter.java +++ b/src/main/java/appeng/api/stacks/KeyCounter.java @@ -65,6 +65,10 @@ public void removeZeros() { } } + public void removeEmptySubmaps() { + lists.values().removeIf(VariantCounter::isEmpty); + } + public void addAll(KeyCounter other) { for (var entry : other.lists.entrySet()) { var ourSubIndex = lists.get(entry.getKey()); diff --git a/src/main/java/appeng/block/orientation/SpinMapping.java b/src/main/java/appeng/block/orientation/SpinMapping.java index ed8252bb5f4..bee48023f1a 100644 --- a/src/main/java/appeng/block/orientation/SpinMapping.java +++ b/src/main/java/appeng/block/orientation/SpinMapping.java @@ -37,13 +37,7 @@ public static int getSpinFromUp(Direction facing, Direction up) { return 0; // Degenerated up direction just falls back to no spin } - public static int getUpFromSpin(Direction facing, Direction up) { - var spinDirs = SPIN_DIRECTIONS[facing.ordinal()]; - for (int i = 0; i < spinDirs.length; i++) { - if (spinDirs[i] == up) { - return i; - } - } - return 0; // Degenerated up direction just falls back to no spin + public static Direction getUpFromSpin(Direction facing, int spin) { + return SPIN_DIRECTIONS[facing.ordinal()][spin]; } } diff --git a/src/main/java/appeng/hooks/UnlitQuadHooks.java b/src/main/java/appeng/hooks/UnlitQuadHooks.java deleted file mode 100644 index 3235e4ee14a..00000000000 --- a/src/main/java/appeng/hooks/UnlitQuadHooks.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2021, TeamAppliedEnergistics, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.hooks; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import net.minecraft.client.renderer.block.model.BlockElementFace; -import net.minecraft.client.resources.model.ModelBakery; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.GsonHelper; -import net.neoforged.neoforge.client.model.ExtraFaceData; - -import appeng.core.AppEng; - -/** - * Implementation details of allowing quads to be defined as "unlit" in JSON models by specifying an "unlit" boolean - * property on the face. - */ -public class UnlitQuadHooks { - - /** - * Thread-Local flag to indicate that an enhanced Applied Energistics model is currently being deserialized. - */ - private static final ThreadLocal ENABLE_UNLIT_EXTENSIONS = new ThreadLocal<>(); - - /** - * Notify the unlit model system that a specific model is about to be deserialized by {@link ModelBakery}. - */ - public static void beginDeserializingModel(ResourceLocation location) { - String namespace = location.getNamespace(); - if (namespace.equals(AppEng.MOD_ID)) { - ENABLE_UNLIT_EXTENSIONS.set(true); - } - } - - /** - * Notify the unlit model system that deserialization of a model has ended. - */ - public static void endDeserializingModel() { - ENABLE_UNLIT_EXTENSIONS.set(false); - } - - public static boolean isUnlitExtensionEnabled() { - Boolean b = ENABLE_UNLIT_EXTENSIONS.get(); - return b != null && b; - } - - public static BlockElementFace enhanceModelElementFace(BlockElementFace modelElement, JsonElement jsonElement) { - JsonObject jsonObject = jsonElement.getAsJsonObject(); - if (GsonHelper.getAsBoolean(jsonObject, "unlit", false)) { - return new BlockElementFace(modelElement.cullForDirection(), modelElement.tintIndex(), - modelElement.texture(), modelElement.uv(), - new ExtraFaceData(0xFFFFFFFF, 15, 15, true), - new org.apache.commons.lang3.mutable.MutableObject<>()); - } - return modelElement; - } - -} diff --git a/src/main/java/appeng/me/service/StorageService.java b/src/main/java/appeng/me/service/StorageService.java index 612a4f98919..e838afc9035 100644 --- a/src/main/java/appeng/me/service/StorageService.java +++ b/src/main/java/appeng/me/service/StorageService.java @@ -76,8 +76,7 @@ public class StorageService implements IStorageService, IGridServiceProvider { /** * Publicly exposed cached available stacks. */ - private KeyCounter cachedAvailableStacks = new KeyCounter(); - private KeyCounter cachedAvailableStacksBackBuffer = new KeyCounter(); + private final KeyCounter cachedAvailableStacks = new KeyCounter(); /** * Private cached amounts, to ensure that we send correct change notifications even if * {@link #cachedAvailableStacks} is modified by mistake. @@ -113,17 +112,14 @@ private void updateCachedStacks() { try { cachedStacksNeedUpdate = false; - // Update cache - var previousStacks = cachedAvailableStacks; - var currentStacks = cachedAvailableStacksBackBuffer; - cachedAvailableStacks = currentStacks; - cachedAvailableStacksBackBuffer = previousStacks; - - currentStacks.clear(); - storage.getAvailableStacks(currentStacks); + cachedAvailableStacks.clear(); + storage.getAvailableStacks(cachedAvailableStacks); + // clear() only clears the inner maps, + // so ensure that the outer map gets cleaned up too + cachedAvailableStacks.removeEmptySubmaps(); // Post watcher update for currently available stacks - for (var entry : currentStacks) { + for (var entry : cachedAvailableStacks) { var what = entry.getKey(); var newAmount = entry.getLongValue(); if (newAmount != cachedAvailableAmounts.getLong(what)) { @@ -133,7 +129,7 @@ private void updateCachedStacks() { // Post watcher update for removed stacks for (var entry : cachedAvailableAmounts.object2LongEntrySet()) { var what = entry.getKey(); - var newAmount = currentStacks.get(what); + var newAmount = cachedAvailableStacks.get(what); if (newAmount == 0) { postWatcherUpdate(what, newAmount); } @@ -141,7 +137,7 @@ private void updateCachedStacks() { // Update private amounts cachedAvailableAmounts.clear(); - for (var entry : currentStacks) { + for (var entry : cachedAvailableStacks) { cachedAvailableAmounts.put(entry.getKey(), entry.getLongValue()); } } finally { diff --git a/src/main/java/appeng/mixins/unlitquad/BlockPartFaceDeserializerMixin.java b/src/main/java/appeng/mixins/unlitquad/BlockPartFaceDeserializerMixin.java deleted file mode 100644 index c84c094be3b..00000000000 --- a/src/main/java/appeng/mixins/unlitquad/BlockPartFaceDeserializerMixin.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2021, TeamAppliedEnergistics, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.mixins.unlitquad; - -import java.lang.reflect.Type; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonElement; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import net.minecraft.client.renderer.block.model.BlockElementFace; -import net.minecraft.client.renderer.block.model.BlockElementFace.Deserializer; - -import appeng.hooks.UnlitQuadHooks; - -/** - * This mixin will call the hook to deserialize the unlit property, but only if we are currently deserializing an AE2 - * model. - */ -@Mixin(Deserializer.class) -public class BlockPartFaceDeserializerMixin { - - @Inject(method = "deserialize", at = @At("RETURN"), cancellable = true, allow = 1, remap = false) - public void onDeserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext, - CallbackInfoReturnable cri) { - if (!UnlitQuadHooks.isUnlitExtensionEnabled()) { - return; // Not in a model that activated the deserializer - } - - BlockElementFace modelElement = cri.getReturnValue(); - cri.setReturnValue(UnlitQuadHooks.enhanceModelElementFace(modelElement, jsonElement)); - } - -} diff --git a/src/main/java/appeng/mixins/unlitquad/ModelManagerMixin.java b/src/main/java/appeng/mixins/unlitquad/ModelManagerMixin.java deleted file mode 100644 index 24f41c0b506..00000000000 --- a/src/main/java/appeng/mixins/unlitquad/ModelManagerMixin.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2021, TeamAppliedEnergistics, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.mixins.unlitquad; - -import java.util.Map; - -import com.mojang.datafixers.util.Pair; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import net.minecraft.client.resources.model.ModelManager; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.Resource; - -import appeng.hooks.UnlitQuadHooks; - -/** - * The only job of this mixin is to only enable the unlit extensions if the model is whitelisted for it, which is - * decided in {@link UnlitQuadHooks}. - */ -@Mixin(ModelManager.class) -public class ModelManagerMixin { - - @Inject(method = { "lambda$loadBlockModels$8", "m_246478_" }, at = @At("HEAD"), allow = 1) - private static void onBeginLoadModel(Map.Entry entry, - CallbackInfoReturnable> cri) { - UnlitQuadHooks.beginDeserializingModel(entry.getKey()); - } - - @Inject(method = { "lambda$loadBlockModels$8", "m_246478_" }, at = @At("RETURN")) - private static void onEndLoadModel(Map.Entry entry, - CallbackInfoReturnable> cri) { - UnlitQuadHooks.endDeserializingModel(); - } - -} diff --git a/src/main/java/appeng/util/ConfigInventory.java b/src/main/java/appeng/util/ConfigInventory.java index 6ab413ed927..d170af57a84 100644 --- a/src/main/java/appeng/util/ConfigInventory.java +++ b/src/main/java/appeng/util/ConfigInventory.java @@ -207,8 +207,15 @@ public void setStack(int slot, @Nullable GenericStack stack) { // force amount to 0 in types-only mode stack = new GenericStack(stack.what(), 0); } else if (!typesOnly && stack.amount() <= 0) { - // in stack mode, amounts of 0 or less clear the slot - stack = null; + if (mode == Mode.CONFIG_STACKS && getStack(slot) == null) { + // filter the slot to a minimum of 1 of that stack, if currently empty + // This allows setting a filter using empty containers that are limited to one resource, + // e.g. empty mana tablet. + stack = new GenericStack(stack.what(), 1); + } else { + // in stack mode, amounts of 0 or less clear the slot + stack = null; + } } } super.setStack(slot, stack); diff --git a/src/main/resources/ae2.mixins.json b/src/main/resources/ae2.mixins.json index 740db0916cd..e0ff763a0b0 100644 --- a/src/main/resources/ae2.mixins.json +++ b/src/main/resources/ae2.mixins.json @@ -15,8 +15,6 @@ "StructureTemplateMixin" ], "client": [ - "unlitquad.ModelManagerMixin", - "unlitquad.BlockPartFaceDeserializerMixin", "AbstractContainerScreenMixin", "GuiGraphicsMixin", "WrappedGenericStackTooltipModIdMixin", diff --git a/src/main/resources/assets/ae2/lang/en_gb.etag b/src/main/resources/assets/ae2/lang/en_gb.etag index 35d59b7e38a..cab023bd678 100644 --- a/src/main/resources/assets/ae2/lang/en_gb.etag +++ b/src/main/resources/assets/ae2/lang/en_gb.etag @@ -1 +1 @@ -5bbf17d620ce4de6e6bdcd55ad9f976f \ No newline at end of file +6204549afc4c41643ada63ca9fc090ac \ No newline at end of file diff --git a/src/main/resources/assets/ae2/lang/en_gb.json b/src/main/resources/assets/ae2/lang/en_gb.json index 106b981c745..b749f8501b2 100644 --- a/src/main/resources/assets/ae2/lang/en_gb.json +++ b/src/main/resources/assets/ae2/lang/en_gb.json @@ -6,6 +6,7 @@ "achievement.ae2.Compass": "Meteorite Hunter", "achievement.ae2.Compass.desc": "Craft a Meteorite Compass", "achievement.ae2.Controller": "Networking Switchboard", + "achievement.ae2.NetworkTool": "Network Diagnostics", "gui.ae2.Gray": "Grey", "gui.ae2.LightGray": "Light Grey", "gui.ae2.inWorldCraftingPresses": "Crafting Presses are obtained by breaking a Mysterious Cube. Mysterious Cubes are in the centre of meteorites which can be found in around the world. They can be located by using a meteorite compass.", diff --git a/src/main/resources/assets/ae2/lang/es_es.etag b/src/main/resources/assets/ae2/lang/es_es.etag index 35d59b7e38a..931236dc3bb 100644 --- a/src/main/resources/assets/ae2/lang/es_es.etag +++ b/src/main/resources/assets/ae2/lang/es_es.etag @@ -1 +1 @@ -5bbf17d620ce4de6e6bdcd55ad9f976f \ No newline at end of file +159822c1dd1382c489006c685431879d \ No newline at end of file diff --git a/src/main/resources/assets/ae2/lang/es_es.json b/src/main/resources/assets/ae2/lang/es_es.json index dc651fdc12b..1f564ab8aac 100644 --- a/src/main/resources/assets/ae2/lang/es_es.json +++ b/src/main/resources/assets/ae2/lang/es_es.json @@ -667,6 +667,7 @@ "gui.tooltips.ae2.SchedulingModeRoundRobin": "Exportar usando el modo robin redondo.", "gui.tooltips.ae2.SearchSettingsTooltip": "Mostrar Ajustes de Búsqueda", "gui.tooltips.ae2.Serial": "Serial: %d", + "gui.tooltips.ae2.SetAction": "%s: Establecer %s", "gui.tooltips.ae2.ShowAllProviders": "Mostrar todos los proveedores de patrones", "gui.tooltips.ae2.ShowNonFullProviders": "Mostrar Proveedores de Patrones visibles con ranuras vacías", "gui.tooltips.ae2.ShowVisibleProviders": "Mostrar proveedores de patrones visibles", diff --git a/src/main/resources/assets/ae2/lang/pt_br.etag b/src/main/resources/assets/ae2/lang/pt_br.etag index e41daa370bc..8e7268134db 100644 --- a/src/main/resources/assets/ae2/lang/pt_br.etag +++ b/src/main/resources/assets/ae2/lang/pt_br.etag @@ -1 +1 @@ -298e56808ad8f653183fab914fc81d85 \ No newline at end of file +61e5f6acb1403d6b63a3442b98805d54 \ No newline at end of file diff --git a/src/main/resources/assets/ae2/lang/pt_br.json b/src/main/resources/assets/ae2/lang/pt_br.json index 50f24f2b6d8..a8111924bd8 100644 --- a/src/main/resources/assets/ae2/lang/pt_br.json +++ b/src/main/resources/assets/ae2/lang/pt_br.json @@ -2,7 +2,7 @@ "achievement.ae2.ChargedQuartz": "Chocante", "achievement.ae2.ChargedQuartz.desc": "Energize Quartzo com um Carregador", "achievement.ae2.Charger": "Um momento chocante!", - "achievement.ae2.Charger.desc": "Faça um Carregador", + "achievement.ae2.Charger.desc": "Fabrique um Carregador", "achievement.ae2.Compass": "Caçador de Meteoritos", "achievement.ae2.Compass.desc": "Faça uma Bússola de Meteoritos", "achievement.ae2.Controller": "Quadro de Distribuição de Rede", @@ -30,7 +30,7 @@ "achievement.ae2.Networking3": "Administrador de Redes", "achievement.ae2.Networking3.desc": "Esgote 2048 canais usando dispositivos em uma mesma rede", "achievement.ae2.P2P": "Redes Ponto-a-Ponto", - "achievement.ae2.P2P.desc": "Faça um Túnel P2P", + "achievement.ae2.P2P.desc": "Faça um Tunel P2P", "achievement.ae2.PatternTerminal": "Maestro da Fabricação", "achievement.ae2.PatternTerminal.desc": "Faça um Terminal de Codificação de Padrões", "achievement.ae2.PortableCell": "Armazenamento Nômade", @@ -82,7 +82,7 @@ "ae2.rei_jei_integration.entropy_manipulator_heat": "Esquentar (%d AE)", "ae2.rei_jei_integration.explosion": "Explosão", "ae2.rei_jei_integration.flawless_budding_quartz_description": "A Drusa de Quartzo Certus Infalível nunca decai, mas só é encontrada em meteoritos.", - "ae2.rei_jei_integration.flowing_fluid_name": "%s (corrente)", + "ae2.rei_jei_integration.flowing_fluid_name": "%s (fluindo)", "ae2.rei_jei_integration.fortune_applies": "É afetado pelo encantamento de Fortuna", "ae2.rei_jei_integration.fully_grown_buds_drop_crystals": "Cristais de Quartzo dropam Quartzo se completamente crescidos.", "ae2.rei_jei_integration.has_encoded_ingredients": "Elementos destacados já foram codificados", @@ -107,11 +107,11 @@ "ae2.rei_jei_integration.transform_category": "Transformação no Mundo", "ae2.rei_jei_integration.will_craft": "Irá fabricar itens indisponíveis", "biome.ae2.spatial_storage": "Armazenamento Espacial", - "block.ae2.16k_crafting_storage": "Armazenamento de Fabricação de 16k", - "block.ae2.1k_crafting_storage": "Armazenamento de Fabricação de 1k", - "block.ae2.256k_crafting_storage": "Armazenamento de Fabricação de 256k", - "block.ae2.4k_crafting_storage": "Armazenamento de Fabricação de 4k", - "block.ae2.64k_crafting_storage": "Armazenamento de Fabricação de 64k", + "block.ae2.16k_crafting_storage": "Unidade de fabricação 16k", + "block.ae2.1k_crafting_storage": "Unidade de fabricação 1k", + "block.ae2.256k_crafting_storage": "Unidade de fabricação 256k", + "block.ae2.4k_crafting_storage": "Unidade de fabricação 4k", + "block.ae2.64k_crafting_storage": "Unidade de fabricação 64k", "block.ae2.cable_bus": "Pontos e/ou Cabos ME", "block.ae2.cell_workbench": "Bancada de Células", "block.ae2.charger": "Carregador", @@ -125,8 +125,8 @@ "block.ae2.controller": "Controlador ME", "block.ae2.crafting_accelerator": "Unidade de Co Processamento de Fabricação", "block.ae2.crafting_monitor": "Monitor de Fabricação", - "block.ae2.crafting_unit": "Unidade de Fabricação", - "block.ae2.crank": "Manivela de Madeira", + "block.ae2.crafting_unit": "Unidade de fabricação", + "block.ae2.crank": "Manivela de madeira", "block.ae2.creative_energy_cell": "Célula Criativa de Energia", "block.ae2.crystal_resonance_generator": "Gerador de Ressonância Cristalina", "block.ae2.cut_quartz_block": "Bloco de Quartzo Certus Lapidado", @@ -286,14 +286,14 @@ "death.attack.matter_cannon.item": "%1$s foi atingido por %2$s usando %3$s", "entity.ae2.tiny_tnt_primed": "TNT Minúscula acionada", "entity.minecraft.villager.ae2.fluix_researcher": "Pesquisador de Fluix", - "exported_setting.ae2.exported_config_inv": "filtro", + "exported_setting.ae2.exported_config_inv": "Filtro", "exported_setting.ae2.exported_custom_name": "Nome personalizado", "exported_setting.ae2.exported_level_emitter_value": "Valor do Emissor de Nível", "exported_setting.ae2.exported_p2p_frequency": "Frequência P2P", "exported_setting.ae2.exported_p2p_type": "Tipo de P2P", "exported_setting.ae2.exported_patterns": "Padrões", "exported_setting.ae2.exported_priority": "Prioridade", - "exported_setting.ae2.exported_push_direction": "Direção do push", + "exported_setting.ae2.exported_push_direction": "Direção para ejetar", "exported_setting.ae2.exported_settings": "Confirgurações", "exported_setting.ae2.exported_upgrades": "Melhorias", "gui.ae2.AdjacentToDifferentMachines": "Adjacente a máquinas diferentes", @@ -423,7 +423,7 @@ "gui.ae2.OfSecondOutput": "%1$d%% de Chance de Saída Secundária.", "gui.ae2.Or": "ou", "gui.ae2.Orange": "Laranja", - "gui.ae2.OutOfPower": "Fora de Energia", + "gui.ae2.OutOfPower": "Sem Energia", "gui.ae2.P2PAttunementEnergy": "Armazenamento Portátil de Energia (ex: Baterias)", "gui.ae2.P2PAttunementFluid": "Armazenamento Portátil de Fluidos (ex: Tanques, Baldes)", "gui.ae2.PartialPlan": "Plano parcial (Ingredientes faltando)", @@ -514,7 +514,7 @@ "gui.ae2.TankBucketCapacity": "Pode armazenar até %d baldes", "gui.ae2.TankCapacity": "Capacidade: %d", "gui.ae2.Terminal": "Terminal", - "gui.ae2.TerminalSettingsClearGridOnClose": "Limpar a grade do terminal ao fechar (se aplicável)", + "gui.ae2.TerminalSettingsClearGridOnClose": "Limpar a grade de fabricação ao fechar (se aplicável)", "gui.ae2.TerminalSettingsNotifyForFinishedJobs": "Notificar ao concluir fabricação (requer Terminal Sem Fio)", "gui.ae2.TerminalSettingsPinAutoCraftedItems": "Fixar itens fabricados por requisição no topo", "gui.ae2.TerminalSettingsTitle": "Configurações do Terminal", @@ -541,7 +541,7 @@ "gui.ae2.inWorldCraftingPresses": "Prensas de Processador são obtidas ao quebrar um Cubo Misterioso. Cubos Misteriosos ficam no centro de meteoritos que podem ser encontrados pelo mundo usando uma Bússola de Meteoritos.", "gui.ae2.inWorldSingularity": "Para criar jogue 1 Singularidade e 1 Pó do Fim e cause uma explosão no alcance dos itens.", "gui.ae2.units.appliedenergistics": "AE", - "gui.ae2.units.fe": "MEF", + "gui.ae2.units.fe": "FE", "gui.tooltips.ae2.ActiveOnPulse": "Ativar uma vez por pulso", "gui.tooltips.ae2.ActiveWithSignal": "Ativo com sinal", "gui.tooltips.ae2.ActiveWithoutSignal": "Ativo sem sinal", @@ -568,7 +568,7 @@ "gui.tooltips.ae2.CpuStatusCoProcessors": "%s Co-Processadores", "gui.tooltips.ae2.CpuStatusCraftedIn": "Fabricado %s em %s", "gui.tooltips.ae2.CpuStatusCrafting": "Fabricando %s", - "gui.tooltips.ae2.CpuStatusStorage": "%s Armazenamento", + "gui.tooltips.ae2.CpuStatusStorage": "Armazenamento de %s", "gui.tooltips.ae2.Craft": "Comportamento de Fabricação", "gui.tooltips.ae2.CraftEither": "Usa itens guardados ou fabrica novos itens para exportar.", "gui.tooltips.ae2.CraftOnly": "Não usa itens guardados, usa apenas novos itens fabricados para exportar.", @@ -834,9 +834,9 @@ "item.ae2.item_storage_cell_1k": "Célula de Armazenamento de 1k para Itens", "item.ae2.item_storage_cell_256k": "Célula de Armazenamento de 256k para Itens", "item.ae2.item_storage_cell_4k": "Célula de Armazenamento de 4k para Itens", - "item.ae2.item_storage_cell_64k": "Célula de Armazenamento de 64k para Itens", + "item.ae2.item_storage_cell_64k": "Célula de 64k de Armazenamento para Itens", "item.ae2.level_emitter": "Emissor de Nível", - "item.ae2.light_blue_covered_cable": "Cabo ME Coberto Azul Claro", + "item.ae2.light_blue_covered_cable": "Cabo Coberto Azul Claro", "item.ae2.light_blue_covered_dense_cable": "Cabo ME Denso Coberto Azul Claro", "item.ae2.light_blue_glass_cable": "Cabo ME Azul Claro", "item.ae2.light_blue_lumen_paint_ball": "Bola de Tinta Luminosa Azul Claro", @@ -941,9 +941,9 @@ "item.ae2.spatial_cell_component_128": "Componente Espacial de 128³", "item.ae2.spatial_cell_component_16": "Componente Espacial de 16³", "item.ae2.spatial_cell_component_2": "Componente Espacial de 2³", - "item.ae2.spatial_storage_cell_128": "Célula de Armazenamento Espacial de 128³", - "item.ae2.spatial_storage_cell_16": "Célula de Armazenamento Espacial de 16³", - "item.ae2.spatial_storage_cell_2": "Célula de Armazenamento Espacial de 2³", + "item.ae2.spatial_storage_cell_128": "Célula de Armazenamento Espacial 128³", + "item.ae2.spatial_storage_cell_16": "Célula de Armazenamento Espacial 16³", + "item.ae2.spatial_storage_cell_2": "Célula de Armazenamento Espacial 2³", "item.ae2.speed_card": "Cartão de Aceleração", "item.ae2.stonecutting_pattern": "Padrão de Alvenaria", "item.ae2.storage_bus": "Ponto de Armazenamento", @@ -959,7 +959,7 @@ "item.ae2.white_paint_ball": "Bola de Tinta Branca", "item.ae2.white_smart_cable": "Cabo ME Inteligente Branco", "item.ae2.white_smart_dense_cable": "Cabo ME Denso Inteligente Branco", - "item.ae2.wireless_booster": "Amplificador Sem Fio", + "item.ae2.wireless_booster": "Amplificador de Alcance Sem Fio", "item.ae2.wireless_crafting_terminal": "Terminal de Fabricação Sem Fio", "item.ae2.wireless_receiver": "Receptor Sem Fio", "item.ae2.wireless_terminal": "Terminal Sem Fio", @@ -973,7 +973,7 @@ "item.ae2.yellow_smart_dense_cable": "Cabo ME Denso Inteligente Amarelo", "key.ae2.category": "Applied Energistics 2", "key.ae2.guide": "Abrir Guia para Itens", - "key.ae2.mouse_wheel_item_modifier": "Modificador para Itens da Roda Mouse", + "key.ae2.mouse_wheel_item_modifier": "Modificador da Roda Mouse", "key.ae2.part_placement_opposite": "Coloque partes no lado oposto", "key.ae2.portable_fluid_cell": "Abrir Célula Portátil para Fluidos", "key.ae2.portable_item_cell": "Abrir Célula Portátil para Itens", diff --git a/src/main/resources/assets/ae2/lang/ru_ru.etag b/src/main/resources/assets/ae2/lang/ru_ru.etag index e41daa370bc..c6bb56ec9d4 100644 --- a/src/main/resources/assets/ae2/lang/ru_ru.etag +++ b/src/main/resources/assets/ae2/lang/ru_ru.etag @@ -1 +1 @@ -298e56808ad8f653183fab914fc81d85 \ No newline at end of file +81d92556318012fec60929bfd5ba70c6 \ No newline at end of file diff --git a/src/main/resources/assets/ae2/lang/ru_ru.json b/src/main/resources/assets/ae2/lang/ru_ru.json index 1694cd09edf..46a0c21409f 100644 --- a/src/main/resources/assets/ae2/lang/ru_ru.json +++ b/src/main/resources/assets/ae2/lang/ru_ru.json @@ -989,7 +989,7 @@ "theoneprobe.ae2.device_offline": "Устройство оффлайн", "theoneprobe.ae2.device_online": "Устройство онлайн", "theoneprobe.ae2.locked": "Заблокировано", - "theoneprobe.ae2.nested_p2p_tunnel": "Ошибка: Вложенный туннель из точки в точку", + "theoneprobe.ae2.nested_p2p_tunnel": "Ошибка: вложенный тоннель из точки в точку", "theoneprobe.ae2.p2p_frequency": "Частота: %1$s", "theoneprobe.ae2.p2p_input_many_outputs": "Сопряжённый (Сторона ввода) — %d Выводов", "theoneprobe.ae2.p2p_input_one_output": "Сопряжённый (Сторона ввода)", @@ -1012,7 +1012,7 @@ "waila.ae2.DeviceOnline": "Устройство онлайн", "waila.ae2.EnchantedWith": "Зачарования:", "waila.ae2.ErrorControllerConflict": "Ошибка: Конфликт контроллеров", - "waila.ae2.ErrorNestedP2PTunnel": "Ошибка: Вложенный туннель из точки в точку", + "waila.ae2.ErrorNestedP2PTunnel": "Ошибка: вложенный тоннель из точки в точку", "waila.ae2.ErrorTooManyChannels": "Ошибка: Слишком много каналов", "waila.ae2.Locked": "Заблокировано", "waila.ae2.NetworkBooting": "Загрузка сети", diff --git a/src/main/resources/assets/ae2/lang/uk_ua.etag b/src/main/resources/assets/ae2/lang/uk_ua.etag index e41daa370bc..52b9fd9d574 100644 --- a/src/main/resources/assets/ae2/lang/uk_ua.etag +++ b/src/main/resources/assets/ae2/lang/uk_ua.etag @@ -1 +1 @@ -298e56808ad8f653183fab914fc81d85 \ No newline at end of file +250249494e93d099ffe989b7e2fd4b6b \ No newline at end of file diff --git a/src/main/resources/assets/ae2/lang/uk_ua.json b/src/main/resources/assets/ae2/lang/uk_ua.json index 861bef56112..adef48379d2 100644 --- a/src/main/resources/assets/ae2/lang/uk_ua.json +++ b/src/main/resources/assets/ae2/lang/uk_ua.json @@ -68,13 +68,13 @@ "ae2.guidebook.ZoomOut": "Зменшити", "ae2.permission_denied": "У вас недостатньо прав для доступу до цього.", "ae2.rei_jei_integration.budding_quartz_creation_and_worldgen": "Бруньки кварцу можна знайти у метеоритах або відновити його, використовуючи заряджений кварц у воді.", - "ae2.rei_jei_integration.budding_quartz_decays_when_broken": "Родючий кварц розпадається на кристали на руйнуванні.", + "ae2.rei_jei_integration.budding_quartz_decays_when_broken": "Родючий істинний кварц занепадає при ламанні.", "ae2.rei_jei_integration.buds_drop_dust_when_not_fully_grown": "Брунька кварцу викидає пил коли він повністю виріс.", "ae2.rei_jei_integration.certus_quartz_growth": "Ріст істинного кварцу", "ae2.rei_jei_integration.charger_required_power": "%d поверніть ручку або використає %d", "ae2.rei_jei_integration.consumed": "Спожито", "ae2.rei_jei_integration.crank_description": "Приєднайте ручку до зарядного пристрою, щоб заживити його вручну.", - "ae2.rei_jei_integration.crystal_growth_accelerators_effect": "Заживлені прискорювачі росту кристалів прискорюють ріст кварцових бруньок поряд.", + "ae2.rei_jei_integration.crystal_growth_accelerators_effect": "Заживлені прискорювачі росту кристалів прискорюють ріст зародків істинного кварцу поряд.", "ae2.rei_jei_integration.ctrl_click_to_craft": "CTRL + натисніть, щоб створити недоступні предмети", "ae2.rei_jei_integration.decay_chance": "%d%% шанс", "ae2.rei_jei_integration.encode_pattern": "Кодувальний шаблон", @@ -96,14 +96,14 @@ "ae2.rei_jei_integration.p2p_api_attunement": "Налаштувати з будь-чим:", "ae2.rei_jei_integration.p2p_tag_attunement": "Налаштувати на будь-який видимий предмет", "ae2.rei_jei_integration.p2p_tunnel_attunement": "Налаштування P2P тунелю", - "ae2.rei_jei_integration.quartz_buds_grow_on_budding_quartz": "Кварцові бруньки ростуть на родючому кварці.", + "ae2.rei_jei_integration.quartz_buds_grow_on_budding_quartz": "Зародки істинного кварцу ростуть на родючому істинному кварці.", "ae2.rei_jei_integration.recipe_too_large": "Рецепт більший за 3х3", "ae2.rei_jei_integration.requires_processing_mode": "Потребує режиму обробки", "ae2.rei_jei_integration.right_click": "ПКМ", "ae2.rei_jei_integration.shift_right_click": "Shift+ПКМ", "ae2.rei_jei_integration.silk_touch_prevents_decay_for_imperfect": "Шовковий дотик запобігає занепаду недосконалого кварцу.", "ae2.rei_jei_integration.spatial_io_never_causes_any_decay": "Просторовий вхід\\вихід ніколи не викликає занепаду.", - "ae2.rei_jei_integration.submerge_in": "Зануритися в", + "ae2.rei_jei_integration.submerge_in": "Занурити в", "ae2.rei_jei_integration.transform_category": "Трансформація у світі", "ae2.rei_jei_integration.will_craft": "Може створити недоступні предмети", "biome.ae2.spatial_storage": "Просторове зберігання", @@ -148,7 +148,7 @@ "block.ae2.fluix_slab": "Флюїксова плита", "block.ae2.fluix_stairs": "Флюїксові сходи", "block.ae2.fluix_wall": "Флюїксова стіна", - "block.ae2.growth_accelerator": "Прискорювач росту", + "block.ae2.growth_accelerator": "Прискорювач росту кристалів", "block.ae2.inscriber": "Штампувальний прес", "block.ae2.interface": "ME Інтерфейс", "block.ae2.io_port": "ME-Порт вводу/виводу", @@ -158,7 +158,7 @@ "block.ae2.medium_quartz_bud": "Середня брунька істинного кварцу", "block.ae2.molecular_assembler": "Молекулярний збирач", "block.ae2.mysterious_cube": "Таємничий куб", - "block.ae2.not_so_mysterious_cube": "Не настільки таємничий куб", + "block.ae2.not_so_mysterious_cube": "Недуже таємничий куб", "block.ae2.paint": "Фарба", "block.ae2.pattern_provider": "ME Постачальник шаблонів", "block.ae2.quantum_link": "ME-Камера квантового зв'язку", @@ -187,13 +187,13 @@ "block.ae2.sky_stone_chest": "Скриня з небесного каменю", "block.ae2.sky_stone_slab": "Плита з небесного каменю", "block.ae2.sky_stone_small_brick": "Дрібна цегла з небесного каменю", - "block.ae2.sky_stone_small_brick_slab": "Плита з дрібної цегли небесного каменю", + "block.ae2.sky_stone_small_brick_slab": "Плита з дрібної небесно-кам'яної цегли", "block.ae2.sky_stone_small_brick_stairs": "Сходи з дрібної цегли з небесного каменю", "block.ae2.sky_stone_small_brick_wall": "Стіна з дрібної цегли з небесного каменю", "block.ae2.sky_stone_stairs": "Сходи з небесного каменю", "block.ae2.sky_stone_tank": "Цистерна з небесного каменю", "block.ae2.sky_stone_wall": "Стіна з небесного каменю", - "block.ae2.small_quartz_bud": "Маленька брунька істинного кварцу", + "block.ae2.small_quartz_bud": "Малий зародок істинного кварцу", "block.ae2.smooth_quartz_block": "Блок з гладкого істинного кварцу", "block.ae2.smooth_quartz_slab": "Плита з гладкого істинного кварцу", "block.ae2.smooth_quartz_stairs": "Сходи з гладкого істинного кварцу", @@ -213,13 +213,14 @@ "chat.ae2.ChannelModeCurrent": "Поточний режим каналу: %s", "chat.ae2.ChannelModeSet": "Режим каналу встановлений в: %s. Оновлено %d сіток.", "chat.ae2.ChestCannotReadStorageCell": "ME скриня не може прочитати комірку зберігання.", - "chat.ae2.ClickToShowDetails": "Клацніть, щоб подивитись деталі", - "chat.ae2.ClickToTeleport": "Клацніть, щоб телепортуватись на ділянку", + "chat.ae2.ClickToShowDetails": "Натисніть, щоб подивитись деталі", + "chat.ae2.ClickToTeleport": "Натисніть, щоб телепортуватись на ділянку", "chat.ae2.CommunicationError": "Помилка з'єднання з мережею.", "chat.ae2.CompassTestSection": "Секція [y=%d-%d] %d: %b", "chat.ae2.CraftingCpuBusy": "Цей процесор зайнятий для створення!", "chat.ae2.DeviceNotLinked": "Пристрій не прив'язано.", "chat.ae2.DeviceNotPowered": "Недостатньо енергії для пристрою.", + "chat.ae2.FacadePropertySelected": "Зараз циклічне переміщення властивості «%s».", "chat.ae2.FacadePropertyWrapped": "Загорнуті навколо першого значення%s'. Ви можете змінити властивості, натискаючи на фасад.", "chat.ae2.InvalidMachine": "Не вдалося завантажити налаштування з несумісного пристрою.", "chat.ae2.InvalidMachinePartiallyRestored": "Частково завантажено конфігурацію: %s.", @@ -257,7 +258,7 @@ "chat.ae2.SourceLink": "%s - %s до %s", "chat.ae2.SpecialThanks": "Особлива подяка %s", "chat.ae2.TestWorldNotInCreativeMode": "Команда може використовуватися тільки у творчому режимі.", - "chat.ae2.TestWorldNotInSuperflat": "Тестовий світ може бути встановлений лише як суперплаский світ!", + "chat.ae2.TestWorldNotInSuperflat": "Тестовий світ може бути встановлений лише як надплаский!", "chat.ae2.TestWorldSetupComplete": "Налаштування тестового світу завершиться через %s", "chat.ae2.TestWorldSetupFailed": "Налаштування тестового світу провалено: %s", "chat.ae2.Unknown": "Невідомо", @@ -272,10 +273,10 @@ "commands.ae2.permissions": "У вас немає достатніх прав для використання цієї команди.", "commands.ae2.usage": "Команди, надані Applied Energistics 2 - використовуйте список /ae2 list для списку і /ae2 help _____ для довідки з командою.", "config.jade.plugin_ae2.charger": "AE2 Зарядний пристрій", - "config.jade.plugin_ae2.crafting_monitor": "AE2 Монітор створення", - "config.jade.plugin_ae2.debug": "AE2 відладочна інформація", + "config.jade.plugin_ae2.crafting_monitor": "AE2 Монітор майстрування", + "config.jade.plugin_ae2.debug": "AE2 інформація налагодження", "config.jade.plugin_ae2.grid_node_state": "AE2 стан мережі", - "config.jade.plugin_ae2.part_icon": "AE2 частина іконки", + "config.jade.plugin_ae2.part_icon": "AE2 частина значка", "config.jade.plugin_ae2.part_mod_name": "AE2 ім'я модифікації", "config.jade.plugin_ae2.part_name": "AE2 частина імені", "config.jade.plugin_ae2.part_tooltip": "AE2 частина підказки", @@ -298,7 +299,7 @@ "gui.ae2.AdjacentToDifferentMachines": "Поряд з різними машинами", "gui.ae2.And": "та", "gui.ae2.AttachedTo": "Прикріплено: %s", - "gui.ae2.AutoCrafting": "Автокрафт", + "gui.ae2.AutoCrafting": "Автомайстрування", "gui.ae2.Automatic": "Автоматично", "gui.ae2.Black": "Чорний", "gui.ae2.Blank": "Пустий", @@ -330,8 +331,8 @@ "gui.ae2.CraftErrorCpuTooSmall": "Не вистачає пам'яті для процесора.", "gui.ae2.CraftErrorIncompletePlan": "Неповний план не може бути залученим.", "gui.ae2.CraftErrorMissingIngredient": "Деякі інгредієнти не вдалося витягнути з мережі.", - "gui.ae2.CraftErrorNoCpuFound": "У мережі немає процесорів створення.", - "gui.ae2.CraftErrorNoSuitableCpu": "Жоден з процесорів створення не підходить для цієї роботи.", + "gui.ae2.CraftErrorNoCpuFound": "У мережі немає процесорів майстрування.", + "gui.ae2.CraftErrorNoSuitableCpu": "Жоден з процесорів майстрування не підходить для цієї роботи.", "gui.ae2.CraftErrorNoSuitableCpuBusy": "%d Зайнятий", "gui.ae2.CraftErrorNoSuitableCpuExcluded": "%d Виключено", "gui.ae2.CraftErrorNoSuitableCpuOffline": "%d офлайн", @@ -343,7 +344,7 @@ "gui.ae2.CraftingInterface": "Постачальник шаблонів", "gui.ae2.CraftingLockIsLocked": "Створення заблоковане", "gui.ae2.CraftingLockIsUnlocked": "Створення розблоковано", - "gui.ae2.CraftingPattern": "Шаблони створення", + "gui.ae2.CraftingPattern": "Шаблони майстрування", "gui.ae2.CraftingPlan": "План створення - %s", "gui.ae2.CraftingStatus": "Статус створення", "gui.ae2.CraftingTerminal": "Термінал створення", @@ -403,7 +404,7 @@ "gui.ae2.Missing": "Відсутній: %s", "gui.ae2.MolecularAssembler": "Молекулярний збирач", "gui.ae2.MultipleOutputs": "%1$d%% вторинного, %2$d%% третинного виходу.", - "gui.ae2.MysteriousQuote": "\"Через інших ми стаємо собою.\"", + "gui.ae2.MysteriousQuote": "\"Через інших ми стаємо собою\"", "gui.ae2.NetworkDetails": "Деталі мережі (%d каналів)", "gui.ae2.NetworkTool": "Мережевий інструмент", "gui.ae2.Next": "Далі", @@ -459,10 +460,10 @@ "gui.ae2.QuartzTools": "Кварцові інструменти", "gui.ae2.Red": "Червоний", "gui.ae2.RequiredPower": "Необхідна сила: %s", - "gui.ae2.RestoredGenericSettingConfigInv": "конфігурація інвентарю", + "gui.ae2.RestoredGenericSettingConfigInv": "налаштування інвентарю", "gui.ae2.RestoredGenericSettingPriority": "пріоритет", "gui.ae2.RestoredGenericSettingSettings": "налаштування", - "gui.ae2.RestoredGenericSettingUpgrades": "покращення", + "gui.ae2.RestoredGenericSettingUpgrades": "модифікатори", "gui.ae2.ReturnInventory": "Інвентар повернення", "gui.ae2.SCSInvalid": "Розмір SCS - недійсний:", "gui.ae2.SCSSize": "Розмір SCS: %sx%sx%s", @@ -500,7 +501,7 @@ "gui.ae2.StonecuttingPattern": "Шаблон каменяра", "gui.ae2.StorageBus": "Шина зберігання", "gui.ae2.StorageBusFluids": "ME-Шина зберігання рідини", - "gui.ae2.StorageCellTooltipUpgrades": "Покращення:", + "gui.ae2.StorageCellTooltipUpgrades": "Модифікатори:", "gui.ae2.StorageCells": "МЕ-Комірка зберігання", "gui.ae2.Stored": "Зберігається", "gui.ae2.StoredEnergy": "Накопичена енергія", @@ -514,13 +515,13 @@ "gui.ae2.TankCapacity": "Ємність: %d", "gui.ae2.Terminal": "Термінал", "gui.ae2.TerminalSettingsClearGridOnClose": "Автоматично очищати сітку термінала після закриття (якщо є)", - "gui.ae2.TerminalSettingsNotifyForFinishedJobs": "Повідомляти про закінчення завдань створення (потрібен бездротовий термінал)", + "gui.ae2.TerminalSettingsNotifyForFinishedJobs": "Повідомляти про закінчення завдань майстрування (потрібен бездротовий термінал)", "gui.ae2.TerminalSettingsPinAutoCraftedItems": "Закріпити автоматично створені предмети до першого рядка", "gui.ae2.TerminalSettingsTitle": "Налаштування терміналу", "gui.ae2.TerminalViewCellsTooltip": "Перегляд комірок", "gui.ae2.ToCraft": "Створити: %s", "gui.ae2.ToastCraftingJobFinishedText": "%d %s", - "gui.ae2.ToastCraftingJobFinishedTitle": "Автоматичне створення завершено", + "gui.ae2.ToastCraftingJobFinishedTitle": "Автомайстрування завершено", "gui.ae2.TransparentFacades": "Прозорі фасади", "gui.ae2.TransparentFacadesHint": "Керує видимістю фасадів, коли мережевий інструмент знаходиться на панелі інструментів.", "gui.ae2.Types": "Типів", @@ -537,7 +538,7 @@ "gui.ae2.With": "з", "gui.ae2.Yellow": "Жовтий", "gui.ae2.Yes": "Так", - "gui.ae2.inWorldCraftingPresses": "Шаблони для креслення, отримані шляхом розбиття таємничі кубики. Таємничі кубики знаходяться в центрі метеоритів, які можна знайти в усьому світі. Вони можуть знаходитися за допомогою компаса метеориту.", + "gui.ae2.inWorldCraftingPresses": "Шаблони для штампувального преса, отримані шляхом розбиття таємничих кубів. Таємничі куби знаходяться в центрі метеоритів, які можна знайти в усьому світі. Вони можуть знаходитися за допомогою компаса метеориту.", "gui.ae2.inWorldSingularity": "Для того, щоб створити складіть 1 сингулярність і 1 пил ендеру та викликати вибух в межах діапазону предметів.", "gui.ae2.units.appliedenergistics": "AE", "gui.ae2.units.fe": "ПЛС", @@ -624,9 +625,9 @@ "gui.tooltips.ae2.LockCraftingMode": "Заблокувати створення", "gui.tooltips.ae2.LockCraftingModeNone": "Ніколи", "gui.tooltips.ae2.LockCraftingUntilRedstonePulse": "До отримання імпульсу червоного каменю", - "gui.tooltips.ae2.LockCraftingUntilResultReturned": "До отримання результату головного створення", - "gui.tooltips.ae2.LockCraftingWhileRedstoneHigh": "З сигналом червоного каменя", - "gui.tooltips.ae2.LockCraftingWhileRedstoneLow": "Без сигналу червоного каменя", + "gui.tooltips.ae2.LockCraftingUntilResultReturned": "До отримання результату головного майстрування", + "gui.tooltips.ae2.LockCraftingWhileRedstoneHigh": "З сигналом редстоуну", + "gui.tooltips.ae2.LockCraftingWhileRedstoneLow": "Без сигналу редстоуну", "gui.tooltips.ae2.MatterBalls": "Конденсувати в м'ячики матерії\n%s за предмет", "gui.tooltips.ae2.MiddleClick": "СКМ", "gui.tooltips.ae2.Mod": "Мод", @@ -944,7 +945,7 @@ "item.ae2.spatial_storage_cell_16": "16³ комірка зберігання простору", "item.ae2.spatial_storage_cell_2": "2³ комірка зберігання простору", "item.ae2.speed_card": "Картка прискорення", - "item.ae2.stonecutting_pattern": "Шаблон каменяра", + "item.ae2.stonecutting_pattern": "Шаблон каменерізу", "item.ae2.storage_bus": "МЕ шина зберігання", "item.ae2.storage_monitor": "ME Монітор зберігання", "item.ae2.terminal": "ME Термінал", @@ -1002,9 +1003,9 @@ "waila.ae2.Charged": "%d%% заряджено", "waila.ae2.Contains": "Містить: %s", "waila.ae2.Crafting": "Створення: %s", - "waila.ae2.CraftingLockedByLackOfRedstoneSignal": "Заблоковано через відсутність сигналу червоного каменю", - "waila.ae2.CraftingLockedByRedstoneSignal": "Заблоковано сигналом червоного каменя", - "waila.ae2.CraftingLockedUntilPulse": "Очікування імпульсу червоного каменю для розблокування", + "waila.ae2.CraftingLockedByLackOfRedstoneSignal": "Заблоковано через відсутність сигналу редстоуну", + "waila.ae2.CraftingLockedByRedstoneSignal": "Заблоковано сигналом редстоуну", + "waila.ae2.CraftingLockedUntilPulse": "Очікування імпульсу редстоуну для розблокування", "waila.ae2.CraftingLockedUntilResult": "Очікування %s (%d) для розблокування", "waila.ae2.DeviceMissingChannel": "Немає каналу для пристрою", "waila.ae2.DeviceOffline": "Пристрій не в мережі", diff --git a/src/main/resources/assets/ae2/lang/zh_cn.etag b/src/main/resources/assets/ae2/lang/zh_cn.etag index e41daa370bc..6ec9e682b43 100644 --- a/src/main/resources/assets/ae2/lang/zh_cn.etag +++ b/src/main/resources/assets/ae2/lang/zh_cn.etag @@ -1 +1 @@ -298e56808ad8f653183fab914fc81d85 \ No newline at end of file +b0a208fd4493fc61c5b0f0137d673a40 \ No newline at end of file diff --git a/src/main/resources/assets/ae2/lang/zh_cn.json b/src/main/resources/assets/ae2/lang/zh_cn.json index 3fa204a4491..647cac560ca 100644 --- a/src/main/resources/assets/ae2/lang/zh_cn.json +++ b/src/main/resources/assets/ae2/lang/zh_cn.json @@ -128,7 +128,7 @@ "block.ae2.crafting_unit": "合成单元", "block.ae2.crank": "木质曲柄", "block.ae2.creative_energy_cell": "创造能源元件", - "block.ae2.crystal_resonance_generator": "水晶共振生成器", + "block.ae2.crystal_resonance_generator": "水晶谐振发生器", "block.ae2.cut_quartz_block": "切制赛特斯石英块", "block.ae2.cut_quartz_slab": "切制赛特斯石英台阶", "block.ae2.cut_quartz_stairs": "切制赛特斯石英楼梯", @@ -220,8 +220,8 @@ "chat.ae2.CraftingCpuBusy": "CPU正忙!", "chat.ae2.DeviceNotLinked": "设备未链接", "chat.ae2.DeviceNotPowered": "设备供能不足", - "chat.ae2.FacadePropertySelected": "现在正在穿越属性 '%s。", - "chat.ae2.FacadePropertyWrapped": "包裹到 '%s的第一个值。您可以点击面来更改属性。", + "chat.ae2.FacadePropertySelected": "当前循环调整属性: \"%s\"", + "chat.ae2.FacadePropertyWrapped": "已回到属性\"%s\"的默认值。您可以左键点击伪装板更改属性", "chat.ae2.InvalidMachine": "无法从不兼容的设备加载配置。", "chat.ae2.InvalidMachinePartiallyRestored": "部分加载配置: %s", "chat.ae2.LastTransition": "最近一次移位:", @@ -258,6 +258,7 @@ "chat.ae2.SourceLink": "%s - %s 到 %s", "chat.ae2.SpecialThanks": "特别鸣谢:%s", "chat.ae2.TestWorldNotInCreativeMode": "指令仅能在创造模式下使用", + "chat.ae2.TestWorldNotInSuperflat": "测试世界仅在超平坦世界下启用", "chat.ae2.TestWorldSetupComplete": "测试世界创建完成,用时:%s", "chat.ae2.TestWorldSetupFailed": "创建测试世界失败:%s", "chat.ae2.Unknown": "未知", @@ -762,7 +763,7 @@ "item.ae2.crafting_card": "合成卡", "item.ae2.crafting_pattern": "合成样板", "item.ae2.crafting_terminal": "ME合成终端", - "item.ae2.creative_storage_cell": "创造性的 ME 存储单元", + "item.ae2.creative_storage_cell": "创造ME元件", "item.ae2.cyan_covered_cable": "青色ME包层线缆", "item.ae2.cyan_covered_dense_cable": "青色ME致密包层线缆", "item.ae2.cyan_glass_cable": "青色ME玻璃线缆", @@ -962,7 +963,7 @@ "item.ae2.wireless_crafting_terminal": "无线合成终端", "item.ae2.wireless_receiver": "无线接收器", "item.ae2.wireless_terminal": "无线终端", - "item.ae2.wrapped_generic_stack": "Wrapped Generic Stack", + "item.ae2.wrapped_generic_stack": "包裹通用堆栈", "item.ae2.yellow_covered_cable": "黄色ME包层线缆", "item.ae2.yellow_covered_dense_cable": "黄色ME致密包层线缆", "item.ae2.yellow_glass_cable": "黄色ME玻璃线缆", @@ -973,7 +974,7 @@ "key.ae2.category": "应用能源2", "key.ae2.guide": "打开物品介绍", "key.ae2.mouse_wheel_item_modifier": "鼠标滚轮物品修饰符", - "key.ae2.part_placement_opposite": "把零件放在相反边上", + "key.ae2.part_placement_opposite": "把零件放在对侧", "key.ae2.portable_fluid_cell": "打开便携流体元件", "key.ae2.portable_item_cell": "打开便携物品元件", "key.ae2.wireless_terminal": "打开无线终端", diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_block_lights.json b/src/main/resources/assets/ae2/models/block/controller/controller_block_lights.json index f700af39f6a..e0122821796 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_block_lights.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_block_lights.json @@ -10,32 +10,32 @@ "down": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "north": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } }, "from": [0, 0, 0], diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted.json index 9126ebebaa3..1bdfab52859 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_conflicted.json @@ -12,32 +12,32 @@ "down": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "north": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } }, "from": [0, 0, 0], diff --git a/src/main/resources/assets/ae2/models/block/controller/controller_column_online.json b/src/main/resources/assets/ae2/models/block/controller/controller_column_online.json index a3c66c7fd32..5ac9acebadb 100644 --- a/src/main/resources/assets/ae2/models/block/controller/controller_column_online.json +++ b/src/main/resources/assets/ae2/models/block/controller/controller_column_online.json @@ -12,32 +12,32 @@ "down": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "north": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#lights", "uv": [0, 0, 16, 16], - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } }, "from": [0, 0, 0], diff --git a/src/main/resources/assets/ae2/models/block/molecular_assembler_lights.json b/src/main/resources/assets/ae2/models/block/molecular_assembler_lights.json index 3c142d44299..c851d03059d 100644 --- a/src/main/resources/assets/ae2/models/block/molecular_assembler_lights.json +++ b/src/main/resources/assets/ae2/models/block/molecular_assembler_lights.json @@ -13,37 +13,37 @@ "texture": "#all", "uv": [2.6, 2.6, 13.4, 13.4], "cullface": "down", - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#all", "uv": [2.6, 2.6, 13.4, 13.4], "cullface": "up", - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "north": { "texture": "#all", "uv": [2.6, 2.6, 13.4, 13.4], "cullface": "north", - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "texture": "#all", "uv": [2.6, 2.6, 13.4, 13.4], "cullface": "south", - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#all", "uv": [2.6, 2.6, 13.4, 13.4], "cullface": "west", - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#all", "uv": [2.6, 2.6, 13.4, 13.4], "cullface": "east", - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/block/mysterious_cube.json b/src/main/resources/assets/ae2/models/block/mysterious_cube.json index 31573168b89..63b3ed9849e 100644 --- a/src/main/resources/assets/ae2/models/block/mysterious_cube.json +++ b/src/main/resources/assets/ae2/models/block/mysterious_cube.json @@ -25,12 +25,36 @@ "from": [0, 0, 0], "to": [16, 16, 16], "faces": { - "north": { "uv": [0, 0, 16, 16], "texture": "#side", "unlit": true }, - "east": { "uv": [0, 0, 16, 16], "texture": "#side", "unlit": true }, - "south": { "uv": [0, 0, 16, 16], "texture": "#side", "unlit": true }, - "west": { "uv": [0, 0, 16, 16], "texture": "#side", "unlit": true }, - "up": { "uv": [16, 0, 0, 16], "texture": "#top", "unlit": true }, - "down": { "uv": [16, 0, 0, 16], "texture": "#bottom", "unlit": true } + "north": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "neoforge_data": { "block_light": 15, "sky_light": 15 } + }, + "east": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "neoforge_data": { "block_light": 15, "sky_light": 15 } + }, + "south": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "neoforge_data": { "block_light": 15, "sky_light": 15 } + }, + "west": { + "uv": [0, 0, 16, 16], + "texture": "#side", + "neoforge_data": { "block_light": 15, "sky_light": 15 } + }, + "up": { + "uv": [16, 0, 0, 16], + "texture": "#top", + "neoforge_data": { "block_light": 15, "sky_light": 15 } + }, + "down": { + "uv": [16, 0, 0, 16], + "texture": "#bottom", + "neoforge_data": { "block_light": 15, "sky_light": 15 } + } } } ], diff --git a/src/main/resources/assets/ae2/models/part/conversion_monitor_locked_on.json b/src/main/resources/assets/ae2/models/part/conversion_monitor_locked_on.json index 304bb8eeee7..3a5876d561b 100644 --- a/src/main/resources/assets/ae2/models/part/conversion_monitor_locked_on.json +++ b/src/main/resources/assets/ae2/models/part/conversion_monitor_locked_on.json @@ -12,7 +12,7 @@ "north": { "texture": "#lightsBright", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -23,7 +23,7 @@ "north": { "texture": "#lightsMedium", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -34,7 +34,7 @@ "north": { "texture": "#lightsDark", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/conversion_monitor_on.json b/src/main/resources/assets/ae2/models/part/conversion_monitor_on.json index a43086b34f7..56c7f4e33b4 100644 --- a/src/main/resources/assets/ae2/models/part/conversion_monitor_on.json +++ b/src/main/resources/assets/ae2/models/part/conversion_monitor_on.json @@ -11,7 +11,7 @@ "north": { "texture": "#lightsBright", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -22,7 +22,7 @@ "north": { "texture": "#lightsMedium", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/crafting_terminal_on.json b/src/main/resources/assets/ae2/models/part/crafting_terminal_on.json index 605d973bf34..d9eaf1c697a 100644 --- a/src/main/resources/assets/ae2/models/part/crafting_terminal_on.json +++ b/src/main/resources/assets/ae2/models/part/crafting_terminal_on.json @@ -12,7 +12,7 @@ "north": { "texture": "#lightsBright", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -23,7 +23,7 @@ "north": { "texture": "#lightsMedium", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -34,7 +34,7 @@ "north": { "texture": "#lightsDark", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/display_status_has_channel.json b/src/main/resources/assets/ae2/models/part/display_status_has_channel.json index b7e286e8047..b46ac22abd4 100644 --- a/src/main/resources/assets/ae2/models/part/display_status_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/display_status_has_channel.json @@ -12,13 +12,13 @@ "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -30,13 +30,13 @@ "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "down": { "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -48,13 +48,13 @@ "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -66,13 +66,13 @@ "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/display_status_on.json b/src/main/resources/assets/ae2/models/part/display_status_on.json index 80b5a4dbf7a..9a04e7ed08e 100644 --- a/src/main/resources/assets/ae2/models/part/display_status_on.json +++ b/src/main/resources/assets/ae2/models/part/display_status_on.json @@ -12,13 +12,13 @@ "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -30,13 +30,13 @@ "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "down": { "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -48,13 +48,13 @@ "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -66,13 +66,13 @@ "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/export_bus_has_channel.json b/src/main/resources/assets/ae2/models/part/export_bus_has_channel.json index aa1baee006f..1a37d2f107a 100644 --- a/src/main/resources/assets/ae2/models/part/export_bus_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/export_bus_has_channel.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/export_bus_on.json b/src/main/resources/assets/ae2/models/part/export_bus_on.json index 29efc0b62e4..939c134ebd9 100644 --- a/src/main/resources/assets/ae2/models/part/export_bus_on.json +++ b/src/main/resources/assets/ae2/models/part/export_bus_on.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/import_bus_has_channel.json b/src/main/resources/assets/ae2/models/part/import_bus_has_channel.json index aa1baee006f..1a37d2f107a 100644 --- a/src/main/resources/assets/ae2/models/part/import_bus_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/import_bus_has_channel.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/import_bus_on.json b/src/main/resources/assets/ae2/models/part/import_bus_on.json index 29efc0b62e4..939c134ebd9 100644 --- a/src/main/resources/assets/ae2/models/part/import_bus_on.json +++ b/src/main/resources/assets/ae2/models/part/import_bus_on.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/interface_has_channel.json b/src/main/resources/assets/ae2/models/part/interface_has_channel.json index 93f99fed5dd..cce402cefc6 100644 --- a/src/main/resources/assets/ae2/models/part/interface_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/interface_has_channel.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/interface_on.json b/src/main/resources/assets/ae2/models/part/interface_on.json index 48227535b4c..c552df4ec78 100644 --- a/src/main/resources/assets/ae2/models/part/interface_on.json +++ b/src/main/resources/assets/ae2/models/part/interface_on.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/level_emitter_status_has_channel.json b/src/main/resources/assets/ae2/models/part/level_emitter_status_has_channel.json index 86d3f5e9dd7..897306a415e 100644 --- a/src/main/resources/assets/ae2/models/part/level_emitter_status_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/level_emitter_status_has_channel.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/level_emitter_status_on.json b/src/main/resources/assets/ae2/models/part/level_emitter_status_on.json index 40625b5ffe4..8a8ad424d99 100644 --- a/src/main/resources/assets/ae2/models/part/level_emitter_status_on.json +++ b/src/main/resources/assets/ae2/models/part/level_emitter_status_on.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/monitor_bright_on.json b/src/main/resources/assets/ae2/models/part/monitor_bright_on.json index 52d8697cde2..aea70c5e295 100644 --- a/src/main/resources/assets/ae2/models/part/monitor_bright_on.json +++ b/src/main/resources/assets/ae2/models/part/monitor_bright_on.json @@ -12,7 +12,7 @@ "north": { "texture": "#lights", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/monitor_dark_on.json b/src/main/resources/assets/ae2/models/part/monitor_dark_on.json index 122d96ddd27..10c4c3e3cf5 100644 --- a/src/main/resources/assets/ae2/models/part/monitor_dark_on.json +++ b/src/main/resources/assets/ae2/models/part/monitor_dark_on.json @@ -10,7 +10,7 @@ "north": { "texture": "#lights", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/monitor_medium_on.json b/src/main/resources/assets/ae2/models/part/monitor_medium_on.json index 9a3fd9d9e27..0489b70ae15 100644 --- a/src/main/resources/assets/ae2/models/part/monitor_medium_on.json +++ b/src/main/resources/assets/ae2/models/part/monitor_medium_on.json @@ -10,7 +10,7 @@ "north": { "texture": "#lights", "tintindex": 4, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/p2p/p2p_tunnel_status_has_channel.json b/src/main/resources/assets/ae2/models/part/p2p/p2p_tunnel_status_has_channel.json index f02cda56b68..2f4c55a0478 100644 --- a/src/main/resources/assets/ae2/models/part/p2p/p2p_tunnel_status_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/p2p/p2p_tunnel_status_has_channel.json @@ -12,13 +12,13 @@ "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -30,13 +30,13 @@ "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -48,13 +48,13 @@ "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -66,13 +66,13 @@ "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "down": { "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/p2p/p2p_tunnel_status_on.json b/src/main/resources/assets/ae2/models/part/p2p/p2p_tunnel_status_on.json index 3a853a8f0c4..908795233cd 100644 --- a/src/main/resources/assets/ae2/models/part/p2p/p2p_tunnel_status_on.json +++ b/src/main/resources/assets/ae2/models/part/p2p/p2p_tunnel_status_on.json @@ -12,13 +12,13 @@ "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -30,13 +30,13 @@ "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -48,13 +48,13 @@ "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -66,13 +66,13 @@ "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "down": { "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/pattern_access_terminal_on.json b/src/main/resources/assets/ae2/models/part/pattern_access_terminal_on.json index 6774eead5ae..e7488a8ab57 100644 --- a/src/main/resources/assets/ae2/models/part/pattern_access_terminal_on.json +++ b/src/main/resources/assets/ae2/models/part/pattern_access_terminal_on.json @@ -12,7 +12,7 @@ "north": { "texture": "#lightsBright", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -23,7 +23,7 @@ "north": { "texture": "#lightsMedium", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -34,7 +34,7 @@ "north": { "texture": "#lightsDark", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/pattern_encoding_terminal_on.json b/src/main/resources/assets/ae2/models/part/pattern_encoding_terminal_on.json index 175b7591774..73f028195b2 100644 --- a/src/main/resources/assets/ae2/models/part/pattern_encoding_terminal_on.json +++ b/src/main/resources/assets/ae2/models/part/pattern_encoding_terminal_on.json @@ -12,7 +12,7 @@ "north": { "texture": "#lightsBright", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -23,7 +23,7 @@ "north": { "texture": "#lightsMedium", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -34,7 +34,7 @@ "north": { "texture": "#lightsDark", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/storage_bus_has_channel.json b/src/main/resources/assets/ae2/models/part/storage_bus_has_channel.json index 93f99fed5dd..cce402cefc6 100644 --- a/src/main/resources/assets/ae2/models/part/storage_bus_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/storage_bus_has_channel.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/storage_bus_on.json b/src/main/resources/assets/ae2/models/part/storage_bus_on.json index 48227535b4c..c552df4ec78 100644 --- a/src/main/resources/assets/ae2/models/part/storage_bus_on.json +++ b/src/main/resources/assets/ae2/models/part/storage_bus_on.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/storage_monitor_locked_on.json b/src/main/resources/assets/ae2/models/part/storage_monitor_locked_on.json index e35650baa35..fd0488dc298 100644 --- a/src/main/resources/assets/ae2/models/part/storage_monitor_locked_on.json +++ b/src/main/resources/assets/ae2/models/part/storage_monitor_locked_on.json @@ -12,7 +12,7 @@ "north": { "texture": "#lightsBright", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -23,7 +23,7 @@ "north": { "texture": "#lightsMedium", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -34,7 +34,7 @@ "north": { "texture": "#lightsDark", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/storage_monitor_on.json b/src/main/resources/assets/ae2/models/part/storage_monitor_on.json index 63fa712f701..5a34e8b231d 100644 --- a/src/main/resources/assets/ae2/models/part/storage_monitor_on.json +++ b/src/main/resources/assets/ae2/models/part/storage_monitor_on.json @@ -11,7 +11,7 @@ "north": { "texture": "#lightsBright", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -22,7 +22,7 @@ "north": { "texture": "#lightsMedium", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/terminal_on.json b/src/main/resources/assets/ae2/models/part/terminal_on.json index c7309083aab..26c502c0d68 100644 --- a/src/main/resources/assets/ae2/models/part/terminal_on.json +++ b/src/main/resources/assets/ae2/models/part/terminal_on.json @@ -12,7 +12,7 @@ "north": { "texture": "#lightsBright", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -23,7 +23,7 @@ "north": { "texture": "#lightsMedium", "tintindex": 2, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -34,7 +34,7 @@ "north": { "texture": "#lightsDark", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/toggle_bus_status_has_channel.json b/src/main/resources/assets/ae2/models/part/toggle_bus_status_has_channel.json index 7d386c08be8..3ca8a5397f2 100644 --- a/src/main/resources/assets/ae2/models/part/toggle_bus_status_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/toggle_bus_status_has_channel.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/toggle_bus_status_on.json b/src/main/resources/assets/ae2/models/part/toggle_bus_status_on.json index 696ebae9620..76ecdb14974 100644 --- a/src/main/resources/assets/ae2/models/part/toggle_bus_status_on.json +++ b/src/main/resources/assets/ae2/models/part/toggle_bus_status_on.json @@ -10,22 +10,22 @@ "down": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "east": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/transition_plane_has_channel.json b/src/main/resources/assets/ae2/models/part/transition_plane_has_channel.json index 90e9a0be99f..8571a89d7cb 100644 --- a/src/main/resources/assets/ae2/models/part/transition_plane_has_channel.json +++ b/src/main/resources/assets/ae2/models/part/transition_plane_has_channel.json @@ -26,13 +26,13 @@ "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -44,13 +44,13 @@ "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -62,13 +62,13 @@ "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -80,13 +80,13 @@ "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "down": { "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 1, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/main/resources/assets/ae2/models/part/transition_plane_on.json b/src/main/resources/assets/ae2/models/part/transition_plane_on.json index 43caaf03c33..038a4192b86 100644 --- a/src/main/resources/assets/ae2/models/part/transition_plane_on.json +++ b/src/main/resources/assets/ae2/models/part/transition_plane_on.json @@ -26,13 +26,13 @@ "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "west": { "uv": [0, 7, 1, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -44,13 +44,13 @@ "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "south": { "uv": [15, 7, 16, 9], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -62,13 +62,13 @@ "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "up": { "uv": [7, 0, 9, 1], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } }, @@ -80,13 +80,13 @@ "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } }, "down": { "uv": [7, 15, 9, 16], "texture": "#indicator", "tintindex": 3, - "unlit": true + "neoforge_data": { "block_light": 15, "sky_light": 15 } } } } diff --git a/src/test/java/appeng/util/ConfigInventoryTest.java b/src/test/java/appeng/util/ConfigInventoryTest.java index b4dbc0c3bc6..d2020c2dded 100644 --- a/src/test/java/appeng/util/ConfigInventoryTest.java +++ b/src/test/java/appeng/util/ConfigInventoryTest.java @@ -77,13 +77,19 @@ class StacksMode { ConfigInventory inv = ConfigInventory.configStacks(1).supportedType(AEKeyType.items()).build(); @Test - void stacksWithAmountZeroAreDropped() { + void stacksWithAmountZeroFilterToOne() { + inv.setStack(0, ZERO_STICK); + assertEquals(ONE_STICK, inv.getStack(0)); + // Check that applying the same zero-filter to the same slot clears it inv.setStack(0, ZERO_STICK); assertNull(inv.getStack(0)); } @Test - void stacksWithNegativeAmountsAreDropped() { + void stacksWithNegativeAmountsFilterToOne() { + inv.setStack(0, new GenericStack(STICK_KEY, -1000)); + assertEquals(ONE_STICK, inv.getStack(0)); + // Check that applying the same zero-filter to the same slot clears it inv.setStack(0, new GenericStack(STICK_KEY, -1000)); assertNull(inv.getStack(0)); }