PR Datagen

This commit is contained in:
simibubi 2022-05-22 17:06:22 +02:00
parent 4a5eab831e
commit 5264885654
7 changed files with 1629 additions and 1562 deletions

View file

@ -532,20 +532,20 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
7880ce16e8b649e26d01cecee271648027f26651 assets/create/lang/en_ud.json
194fbc2c94d07a5fc1712c8b579973e92fafa5d8 assets/create/lang/en_us.json
a711143e849fdc488e43e8eb284248955bbf1ceb assets/create/lang/unfinished/de_de.json
048f1e93f548cc17c3656a7fc3421cb3374aae7a assets/create/lang/unfinished/de_de.json
f5218855767129457b3e10ae1d7c254b5af29f27 assets/create/lang/unfinished/es_cl.json
92882d65db2ee109a3e79d4156277f925f4a387c assets/create/lang/unfinished/es_es.json
c8094db50269e75fbd10991965867ce6127f7133 assets/create/lang/unfinished/es_es.json
02f3a6a3a281d59489cb0c02db249aaff7aaa433 assets/create/lang/unfinished/fr_fr.json
fd2eb2cc4987ae9ddadd6452fc853091b6a93982 assets/create/lang/unfinished/it_it.json
64d40f6fb9a873b8c107b82236f0b8fddc010c72 assets/create/lang/unfinished/ja_jp.json
7b680aca19dd1b015e72c1af91f388313eabcfac assets/create/lang/unfinished/ko_kr.json
bae90b8439e02d2f97f0eb65f2261e4e0d80aea5 assets/create/lang/unfinished/nl_nl.json
d640931ab5f23128910228880a4beccd45af3cce assets/create/lang/unfinished/pl_pl.json
44fd39ea905ef4f7c425c006bce24aa174186585 assets/create/lang/unfinished/pt_br.json
b85352b6822875337028f3d0a4e4131a5a812ef9 assets/create/lang/unfinished/pt_br.json
0baffa79e99e78a81d9933c44aeefe6282e634ea assets/create/lang/unfinished/pt_pt.json
319db22bc0bc5ed556d83dafcae5ac11b3034ae6 assets/create/lang/unfinished/ro_ro.json
c77ae5ebbbd4ead7a641b9a2bf8b17073e73ecb9 assets/create/lang/unfinished/ru_ru.json
9acc0e92774c0e4b6207f08d3a85a81b1a7a0734 assets/create/lang/unfinished/zh_cn.json
786a3a38691ea66d52b005b560c1937087f4f64e assets/create/lang/unfinished/zh_cn.json
60b348950274d79f267ae8e6283e5a23a6c65720 assets/create/lang/unfinished/zh_tw.json
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 7",
"_": "Missing Localizations: 0",
"_": "->------------------------] Game Elements [------------------------<-",
@ -567,7 +567,7 @@
"item.create.chromatic_compound": "Compuesto cromático",
"item.create.cinder_flour": "Harina del Nether",
"item.create.copper_backtank": "Depósito trasero de cobre",
"item.create.copper_backtank_placeable": "UNLOCALIZED: Copper Backtank Placeable",
"item.create.copper_backtank_placeable": "Depósito de cobre colocable",
"item.create.copper_nugget": "Pepita de cobre",
"item.create.copper_sheet": "Lámina de cobre",
"item.create.crafter_slot_cover": "Tapa de ranura del ensamblador mecánico",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1187",
"_": "Missing Localizations: 881",
"_": "->------------------------] Game Elements [------------------------<-",
@ -805,16 +805,16 @@
"death.attack.create.cuckoo_clock_explosion": "%1$s foi explodido por relógio cuco adulterado",
"death.attack.create.cuckoo_clock_explosion.player": "%1$s foi explodido por relógio cuco adulterado",
"create.block.deployer.damage_source_name": "UNLOCALIZED: a rogue Deployer",
"create.block.cart_assembler.invalid": "UNLOCALIZED: Place your Cart Assembler on a rail block",
"create.block.deployer.damage_source_name": "Implantador rebelde",
"create.block.cart_assembler.invalid": "Coloque o seu montador de carrinho de minas num trilho",
"create.menu.return": "UNLOCALIZED: Return to Menu",
"create.menu.configure": "UNLOCALIZED: Configure...",
"create.menu.ponder_index": "UNLOCALIZED: Ponder Index",
"create.menu.only_ingame": "UNLOCALIZED: Available in the Pause Menu",
"create.menu.project_page": "UNLOCALIZED: Project Page",
"create.menu.report_bugs": "UNLOCALIZED: Report Issues",
"create.menu.support": "UNLOCALIZED: Support Us",
"create.menu.return": "Retornar ao menu",
"create.menu.configure": "Configurar...",
"create.menu.ponder_index": "Tabela do ponderamento",
"create.menu.only_ingame": "Disponível no menu de pausa",
"create.menu.project_page": "Página do projeto",
"create.menu.report_bugs": "Informar um erro",
"create.menu.support": "Suporte nós",
"create.recipe.crushing": "Triturando",
"create.recipe.milling": "Moendo",
@ -830,7 +830,7 @@
"create.recipe.mixing": "Misturando",
"create.recipe.deploying": "Implantando",
"create.recipe.automatic_shapeless": "Fabricação sem forma automático",
"create.recipe.automatic_brewing": "UNLOCALIZED: Automated Brewing",
"create.recipe.automatic_brewing": "Produção de poções",
"create.recipe.packing": "Compactando",
"create.recipe.automatic_packing": "Compactamento automático",
"create.recipe.sawing": "Serrando",
@ -882,22 +882,22 @@
"create.action.discard": "Descartar",
"create.keyinfo.toolmenu": "Menu Focal da Ferramenta",
"create.keyinfo.toolbelt": "UNLOCALIZED: Access Nearby Toolboxes",
"create.keyinfo.scrollup": "UNLOCALIZED: Simulate Mousewheel Up (inworld)",
"create.keyinfo.scrolldown": "UNLOCALIZED: Simulate Mousewheel Down (inworld)",
"create.keyinfo.toolbelt": "Acessa caixas de ferramenta próximas",
"create.keyinfo.scrollup": "Simular a roda do mouse (para cima) (no mundo)",
"create.keyinfo.scrolldown": "Simular a roda do mouse (para baixo) (no mundo)",
"create.gui.scrollInput.defaultTitle": "Escolha uma Opção:",
"create.gui.scrollInput.scrollToModify": "Role o mouse para Modificar",
"create.gui.scrollInput.scrollToAdjustAmount": "Role o mouse para ajustar a quantidade",
"create.gui.scrollInput.scrollToSelect": "Role o mouse para Selecionar",
"create.gui.scrollInput.shiftScrollsFaster": "UNLOCALIZED: Shift to Scroll Faster",
"create.gui.scrollInput.shiftScrollsFaster": "Shift para rolar o mouse mais rapido",
"create.gui.toolmenu.focusKey": "Segure [%1$s] para Focar",
"create.gui.toolmenu.cycle": "[SCROLL] para Circular",
"create.toolbox.unequip": "Desequipar: %1$s",
"create.toolbox.outOfRange": "Caixa de ferramentas do item segurado fora de alcance",
"create.toolbox.detach": "Parar de rastrear e manter item",
"create.toolbox.depositAll": "Retornar itens para caixa de ferramenta próxima",
"create.toolbox.depositAll": "Retorna itens para caixa de ferramenta próxima",
"create.toolbox.depositBox": "Retornar itens para caixa de ferramenta",
"create.gui.symmetryWand.mirrorType": "Espelhar",
@ -945,90 +945,90 @@
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks",
"create.minecart_coupling.no_loops": "UNLOCALIZED: Couplings cannot form a loop",
"create.minecart_coupling.removed": "UNLOCALIZED: Removed all couplings from minecart",
"create.minecart_coupling.too_far": "UNLOCALIZED: Minecarts are too far apart",
"create.minecart_coupling.two_couplings_max": "Carrinhos de mina não podem ter mais de dois acoplamentos cada",
"create.minecart_coupling.unloaded": "Partes do seu trem aparentam estar em um chunk descarregado",
"create.minecart_coupling.no_loops": "Acoplamentos não podem formar um loop",
"create.minecart_coupling.removed": "Removeu todos os acoplamentos do carrinho de mina",
"create.minecart_coupling.too_far": "Carrinhos de mina estão muito distanciados",
"create.contraptions.movement_mode": "UNLOCALIZED: Movement Mode",
"create.contraptions.movement_mode.move_place": "UNLOCALIZED: Always Place when Stopped",
"create.contraptions.movement_mode.move_place_returned": "UNLOCALIZED: Place only in Starting Position",
"create.contraptions.movement_mode.move_never_place": "UNLOCALIZED: Place only when Anchor Destroyed",
"create.contraptions.movement_mode.rotate_place": "UNLOCALIZED: Always Place when Stopped",
"create.contraptions.movement_mode.rotate_place_returned": "UNLOCALIZED: Only Place near Initial Angle",
"create.contraptions.movement_mode.rotate_never_place": "UNLOCALIZED: Only Place when Anchor Destroyed",
"create.contraptions.cart_movement_mode": "UNLOCALIZED: Cart Movement Mode",
"create.contraptions.cart_movement_mode.rotate": "UNLOCALIZED: Always face toward motion",
"create.contraptions.cart_movement_mode.rotate_paused": "UNLOCALIZED: Pause actors while rotating",
"create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation",
"create.contraptions.windmill.rotation_direction": "UNLOCALIZED: Rotation Direction",
"create.contraptions.clockwork.clock_hands": "UNLOCALIZED: Clock Hands",
"create.contraptions.clockwork.hour_first": "UNLOCALIZED: Hour hand first",
"create.contraptions.clockwork.minute_first": "UNLOCALIZED: Minute hand first",
"create.contraptions.clockwork.hour_first_24": "UNLOCALIZED: 24-Hour hand first",
"create.contraptions.movement_mode": "Modo de movimento",
"create.contraptions.movement_mode.move_place": "Sempre colocar quando parado",
"create.contraptions.movement_mode.move_place_returned": "Colocar apenas na posição inicial",
"create.contraptions.movement_mode.move_never_place": "Colocar apenas caso a âncora seja destruída",
"create.contraptions.movement_mode.rotate_place": "Sempre colocar quando parado",
"create.contraptions.movement_mode.rotate_place_returned": "Apenas colocar perto do angulo inicial",
"create.contraptions.movement_mode.rotate_never_place": "Colocar apenas caso a âncora seja destruída",
"create.contraptions.cart_movement_mode": "Modo de movimento do carrinho",
"create.contraptions.cart_movement_mode.rotate": "Sempre apontar para a direção do movimento",
"create.contraptions.cart_movement_mode.rotate_paused": "Pausar atores quando girando",
"create.contraptions.cart_movement_mode.rotation_locked": "Travar a rotação",
"create.contraptions.windmill.rotation_direction": "Direção da rotação",
"create.contraptions.clockwork.clock_hands": "Ponteiros do relogio",
"create.contraptions.clockwork.hour_first": "Ponteiro da hora primeiro",
"create.contraptions.clockwork.minute_first": "Ponteiro do minuto primeiro",
"create.contraptions.clockwork.hour_first_24": "Ponteiro das 24 horas primeiro",
"create.logistics.filter": "UNLOCALIZED: Filter",
"create.logistics.recipe_filter": "UNLOCALIZED: Recipe Filter",
"create.logistics.fluid_filter": "UNLOCALIZED: Fluid Filter",
"create.logistics.firstFrequency": "UNLOCALIZED: Freq. #1",
"create.logistics.secondFrequency": "UNLOCALIZED: Freq. #2",
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
"create.logistics.filter": "Filtro",
"create.logistics.recipe_filter": "Filtro de receitas",
"create.logistics.fluid_filter": "Filtro de fluido",
"create.logistics.firstFrequency": "Freq. #1",
"create.logistics.secondFrequency": "Freq. #2",
"create.logistics.filter.apply": "Aplicou filtro para %1$s.",
"create.logistics.filter.apply_click_again": "Aplicou filtro para %1$s, Clique denovo para copiar quantidade.",
"create.logistics.filter.apply_count": "Aplicou quantidade de extração para o filtro.",
"create.gui.goggles.generator_stats": "Estatísticas do gerador:",
"create.gui.goggles.kinetic_stats": "Estatísticas cinéticas:",
"create.gui.goggles.at_current_speed": "Na velocidade atual",
"create.gui.goggles.pole_length": "Comprimento da vara:",
"create.gui.goggles.fluid_container": "UNLOCALIZED: Fluid Container Info:",
"create.gui.goggles.fluid_container.capacity": "UNLOCALIZED: Capacity: ",
"create.gui.assembly.exception": "UNLOCALIZED: This Contraption was unable to assemble:",
"create.gui.assembly.exception.unmovableBlock": "UNLOCALIZED: Unmovable Block (%4$s) at [%1$s,%2$s,%3$s]",
"create.gui.assembly.exception.chunkNotLoaded": "UNLOCALIZED: The Block at [%1$s,%2$s,%3$s] was not in a loaded chunk",
"create.gui.assembly.exception.structureTooLarge": "UNLOCALIZED: There are too many Blocks included in the contraption.\nThe configured maximum is: %1$s",
"create.gui.assembly.exception.tooManyPistonPoles": "UNLOCALIZED: There are too many extension Poles attached to this Piston.\nThe configured maximum is: %1$s",
"create.gui.assembly.exception.noPistonPoles": "UNLOCALIZED: The Piston is missing some extension Poles",
"create.gui.assembly.exception.not_enough_sails": "UNLOCALIZED: Attached structure does not include enough sail-like blocks: %1$s\nA minimum of %2$s are required",
"create.gui.gauge.info_header": "UNLOCALIZED: Gauge Information:",
"create.gui.speedometer.title": "UNLOCALIZED: Rotation Speed",
"create.gui.stressometer.title": "UNLOCALIZED: Network Stress",
"create.gui.stressometer.capacity": "UNLOCALIZED: Remaining Capacity",
"create.gui.stressometer.overstressed": "UNLOCALIZED: Overstressed",
"create.gui.stressometer.no_rotation": "UNLOCALIZED: No Rotation",
"create.gui.contraptions.not_fast_enough": "UNLOCALIZED: It appears that this %1$s is _not_ rotating with _enough_ _speed_.",
"create.gui.contraptions.network_overstressed": "UNLOCALIZED: It appears that this contraption is _overstressed_. Add more sources or _slow_ _down_ the components with a high _stress_ _impact_.",
"create.gui.goggles.fluid_container": "Informação do recipiente de fluido:",
"create.gui.goggles.fluid_container.capacity": "Capacidade: ",
"create.gui.assembly.exception": "Não foi possível montar essa engenhoca:",
"create.gui.assembly.exception.unmovableBlock": "Bloco imovel (%4$s) em [%1$s,%2$s,%3$s]",
"create.gui.assembly.exception.chunkNotLoaded": "O bloco em [%1$s,%2$s,%3$s] não estava em um chunk carregado",
"create.gui.assembly.exception.structureTooLarge": "Tem muitos blocos incluídos na engenhoca. O limite configurado é: %1$s",
"create.gui.assembly.exception.tooManyPistonPoles": "Tem muitas varetas de extensão colocadas nesse pistão. O limite configurado é: %1$s",
"create.gui.assembly.exception.noPistonPoles": "O pistão esta faltando algumas varetas de extensão",
"create.gui.assembly.exception.not_enough_sails": "A estrutura conectada não possui o número suficiente de blocos tipo vela: %1$s\nUm mínimo de %2$s são requeridos",
"create.gui.gauge.info_header": "Informação do medidor:",
"create.gui.speedometer.title": "Velocidade de rotação",
"create.gui.stressometer.title": "Estresse do sistema",
"create.gui.stressometer.capacity": "Capacidade restante",
"create.gui.stressometer.overstressed": "Sobre estressado",
"create.gui.stressometer.no_rotation": "Nenhuma rotação",
"create.gui.contraptions.not_fast_enough": "Aparenta que esse %1$s não _está_ girando com _a velocidade_ _necessária_.",
"create.gui.contraptions.network_overstressed": "Aparenta que essa engenhoca está _sobre estressada_. Adicione mais fontes ou _desacelere_ __ os componentes que tem um _impacto de_ _stress alto_.",
"create.gui.adjustable_crate.title": "UNLOCALIZED: Adjustable Crate",
"create.gui.adjustable_crate.storageSpace": "UNLOCALIZED: Storage Space",
"create.gui.stockpile_switch.title": "UNLOCALIZED: Stockpile Switch",
"create.gui.stockpile_switch.invert_signal": "UNLOCALIZED: Invert Signal",
"create.gui.stockpile_switch.move_to_lower_at": "UNLOCALIZED: Move to lower lane at %1$s%%",
"create.gui.stockpile_switch.move_to_upper_at": "UNLOCALIZED: Move to upper lane at %1$s%%",
"create.gui.sequenced_gearshift.title": "UNLOCALIZED: Sequenced Gearshift",
"create.gui.sequenced_gearshift.instruction": "UNLOCALIZED: Instruction",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "UNLOCALIZED: Turn by angle",
"create.gui.sequenced_gearshift.instruction.turn_angle": "UNLOCALIZED: Turn",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "UNLOCALIZED: Angle",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "UNLOCALIZED: Turn to move Piston/Pulley/Gantry",
"create.gui.sequenced_gearshift.instruction.turn_distance": "UNLOCALIZED: Piston",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "UNLOCALIZED: Distance",
"create.gui.sequenced_gearshift.instruction.delay.descriptive": "UNLOCALIZED: Timed Delay",
"create.gui.sequenced_gearshift.instruction.delay": "UNLOCALIZED: Delay",
"create.gui.sequenced_gearshift.instruction.delay.duration": "UNLOCALIZED: Duration",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.end": "UNLOCALIZED: End",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "UNLOCALIZED: Await new Redstone Pulse",
"create.gui.sequenced_gearshift.instruction.await": "UNLOCALIZED: Await",
"create.gui.sequenced_gearshift.speed": "UNLOCALIZED: Speed, Direction",
"create.gui.sequenced_gearshift.speed.forward": "UNLOCALIZED: Input speed, Forwards",
"create.gui.sequenced_gearshift.speed.forward_fast": "UNLOCALIZED: Double speed, Forwards",
"create.gui.sequenced_gearshift.speed.back": "UNLOCALIZED: Input speed, Reversed",
"create.gui.sequenced_gearshift.speed.back_fast": "UNLOCALIZED: Double speed, Reversed",
"create.gui.stockpile_switch.title": "Dijuntor de armazenamento",
"create.gui.stockpile_switch.invert_signal": "Inverter sinal",
"create.gui.stockpile_switch.move_to_lower_at": "Mover para a faixa mais baixa %1$s%%",
"create.gui.stockpile_switch.move_to_upper_at": "Mover para a faixa mais alta %1$s%%",
"create.gui.sequenced_gearshift.title": "Câmbio sequenciado",
"create.gui.sequenced_gearshift.instruction": "Instruções",
"create.gui.sequenced_gearshift.instruction.turn_angle.descriptive": "Rotacionar por angulo",
"create.gui.sequenced_gearshift.instruction.turn_angle": "Giro",
"create.gui.sequenced_gearshift.instruction.turn_angle.angle": "Angulo",
"create.gui.sequenced_gearshift.instruction.turn_distance.descriptive": "Rotacionar par mover Pistão/Polia/Portico",
"create.gui.sequenced_gearshift.instruction.turn_distance": "Pistão",
"create.gui.sequenced_gearshift.instruction.turn_distance.distance": "Distancia",
"create.gui.sequenced_gearshift.instruction.delay.descriptive": "Espera",
"create.gui.sequenced_gearshift.instruction.delay": "Esperar",
"create.gui.sequenced_gearshift.instruction.delay.duration": "Duração",
"create.gui.sequenced_gearshift.instruction.end.descriptive": "Terminar",
"create.gui.sequenced_gearshift.instruction.end": "Termino",
"create.gui.sequenced_gearshift.instruction.await.descriptive": "Esperar novo pulso de redstone",
"create.gui.sequenced_gearshift.instruction.await": "Espera",
"create.gui.sequenced_gearshift.speed": "Velocidade, Direção",
"create.gui.sequenced_gearshift.speed.forward": "Velocidade inicial, Para frente",
"create.gui.sequenced_gearshift.speed.forward_fast": "Dobro da velocidade, Para frente",
"create.gui.sequenced_gearshift.speed.back": "Velocidade inicial, Para trás",
"create.gui.sequenced_gearshift.speed.back_fast": "Dobro da velocidade, Para trás",
"create.schematicAndQuill.dimensions": "Tamanho Esquema: %1$sx%2$sx%3$s",
"create.schematicAndQuill.firstPos": "Primeira posição feita.",
"create.schematicAndQuill.secondPos": "Segunda posição feita.",
"create.schematicAndQuill.noTarget": "Seguro [Ctrl] para selecionar Blocos de Ar.",
"create.schematicAndQuill.noTarget": "Seguro [Ctrl] para seleccionar Blocos de Ar.",
"create.schematicAndQuill.abort": "Seleção removida.",
"create.schematicAndQuill.title": "Nome do esquema:",
"create.schematicAndQuill.convert": "Salvar e carregar arquivo imediatamente",
@ -1068,7 +1068,7 @@
"create.schematic.tool.rotate.description.1": "[CTRL]-Rolar para rolar 90 Graus",
"create.schematic.tool.rotate.description.2": "",
"create.schematic.tool.rotate.description.3": "",
"create.schematic.tool.print.description.0": "Coloca estrutura no mundo instantaneamente",
"create.schematic.tool.print.description.0": "Colocá estrutura no mundo instantaneamente",
"create.schematic.tool.print.description.1": "[Botão-Direito] para confirmar a posição atual.",
"create.schematic.tool.print.description.2": "Esta ferramenta é para o Modo Criativo apenas.",
"create.schematic.tool.print.description.3": "",
@ -1081,11 +1081,11 @@
"create.schematics.uploadTooLarge": "Seu esquema é muito grande",
"create.schematics.maxAllowedSize": "O tamanho máximo permitido para o esquema é:",
"create.gui.schematicTable.refresh": "UNLOCALIZED: Refresh Files",
"create.gui.schematicTable.open_folder": "UNLOCALIZED: Open Folder",
"create.gui.schematicTable.refresh": "atualizar arquivos",
"create.gui.schematicTable.open_folder": "Abrir pasta",
"create.gui.schematicTable.title": "Mesa de Desenho",
"create.gui.schematicTable.availableSchematics": "UNLOCALIZED: Available Schematics",
"create.gui.schematicTable.noSchematics": "UNLOCALIZED: No Schematics Saved",
"create.gui.schematicTable.availableSchematics": "Esquema disponíveis",
"create.gui.schematicTable.noSchematics": "Nenhum esquema salvo",
"create.gui.schematicTable.uploading": "Importando...",
"create.gui.schematicTable.finished": "Envio Concluído!",
"create.gui.schematicannon.title": "Canhão de esquema",
@ -1095,18 +1095,18 @@
"create.gui.schematicannon.shotsRemainingWithBackup": "Com backup: %1$s",
"create.gui.schematicannon.optionEnabled": "Habilitado Atualmente",
"create.gui.schematicannon.optionDisabled": "Desabilitado Atualmente",
"create.gui.schematicannon.showOptions": "UNLOCALIZED: Show Printer Settings",
"create.gui.schematicannon.showOptions": "Mostrar as configurações da impressora",
"create.gui.schematicannon.option.dontReplaceSolid": "Não Substituir Blocos Sólidos",
"create.gui.schematicannon.option.replaceWithSolid": "Substituir Blocos Sólidos",
"create.gui.schematicannon.option.replaceWithAny": "Substituir Sólidos com Qualquer",
"create.gui.schematicannon.option.replaceWithEmpty": "Substituir Sólidos com Vazio",
"create.gui.schematicannon.option.skipMissing": "Pulando Blocos faltantes",
"create.gui.schematicannon.option.skipTileEntities": "Proteger Entidades Entalhadas",
"create.gui.schematicannon.slot.gunpowder": "UNLOCALIZED: Add gunpowder to fuel the cannon",
"create.gui.schematicannon.slot.listPrinter": "UNLOCALIZED: Place books here to print a Checklist for your Schematic",
"create.gui.schematicannon.slot.schematic": "UNLOCALIZED: Add your Schematic here. Make sure it is deployed at a specific location.",
"create.gui.schematicannon.option.skipMissing.description": "Se o Canhão de esquema não encontrar o Bloco para colocar, ele irá continuar para a próx. Posição.",
"create.gui.schematicannon.option.skipTileEntities.description": "O Canhão de esquema vai evitar substituir blocos que contêm dados como Baus.",
"create.gui.schematicannon.option.skipTileEntities": "Proteger tile entities",
"create.gui.schematicannon.slot.gunpowder": "Adicionar pólvora para carregar o canhão",
"create.gui.schematicannon.slot.listPrinter": "Coloque livros aqui para imprimir uma lista para o seu esquema",
"create.gui.schematicannon.slot.schematic": "Adicione o seu esquema aqui. Tenha certeza que ele está colocado em um lugar especifico.",
"create.gui.schematicannon.option.skipMissing.description": "Se o Canhão de esquema não encontrar o Bloco para colocar, ele irá continuar para a próxima. Posição.",
"create.gui.schematicannon.option.skipTileEntities.description": "O Canhão de esquema vai evitar substituir blocos que contêm dados como Baús.",
"create.gui.schematicannon.option.dontReplaceSolid.description": "O Canhão de esquema nunca irá substituir Blocos sólidos na área em trabalho, apenas não-Sólidos e Ar.",
"create.gui.schematicannon.option.replaceWithSolid.description": "O Canhão de esquema irá apenas substituir Blocos sólidos na área de trabalho, se o Esquema conter um bloco Sólido naquela posição.",
"create.gui.schematicannon.option.replaceWithAny.description": "O Canhão de esquema irá substituir Blocos sólidos na área de trabalho, se o Esquema conter qualquer Bloco naquela posição.",
@ -1130,189 +1130,189 @@
"create.schematicannon.status.schematicNotPlaced": "Esquema não Colocado",
"create.schematicannon.status.schematicExpired": "Arquivo de Esquema Expirado",
"create.materialChecklist": "UNLOCALIZED: Material Checklist",
"create.materialChecklist": "Lista de materiais",
"create.materialChecklist.blocksNotLoaded": "UNLOCALIZED: * Disclaimer *\n\nMaterial List may be inaccurate due to relevant chunks not being loaded.",
"create.gui.filter.deny_list": "UNLOCALIZED: Deny-List",
"create.gui.filter.deny_list.description": "UNLOCALIZED: Items pass if they do NOT match any of the above. An empty Deny-List accepts everything.",
"create.gui.filter.allow_list": "UNLOCALIZED: Allow-List",
"create.gui.filter.allow_list.description": "UNLOCALIZED: Items pass if they match any of the above. An empty Allow-List rejects everything.",
"create.gui.filter.respect_data": "UNLOCALIZED: Respect Data",
"create.gui.filter.respect_data.description": "UNLOCALIZED: Items only match if their durability, enchantments, and other attributes match as well.",
"create.gui.filter.ignore_data": "UNLOCALIZED: Ignore Data",
"create.gui.filter.ignore_data.description": "UNLOCALIZED: Items match regardless of their attributes.",
"create.gui.filter.deny_list": "Lista de negação",
"create.gui.filter.deny_list.description": "Itens passam se eles não encaixam em nenhum dos acima. Uma lista de negação vazia aceita tudo.",
"create.gui.filter.allow_list": "Lista de permissão",
"create.gui.filter.allow_list.description": "Itens passam se eles se encaixam em algum dos acima. Uma lista de permissão vazia rejeita tudo.",
"create.gui.filter.respect_data": "Respeitar informação",
"create.gui.filter.respect_data.description": "Itens apenas se encaixam caso a durabilidade, encantamentos e outros atributos se encaixam também.",
"create.gui.filter.ignore_data": "Ignorar informação",
"create.gui.filter.ignore_data.description": "Itens se enquadram não importa os seus atributos.",
"create.item_attributes.placeable": "UNLOCALIZED: is placeable",
"create.item_attributes.placeable.inverted": "UNLOCALIZED: is not placeable",
"create.item_attributes.consumable": "UNLOCALIZED: can be eaten",
"create.item_attributes.consumable.inverted": "UNLOCALIZED: cannot be eaten",
"create.item_attributes.fluid_container": "UNLOCALIZED: can store fluids",
"create.item_attributes.fluid_container.inverted": "UNLOCALIZED: cannot store fluids",
"create.item_attributes.enchanted": "UNLOCALIZED: is enchanted",
"create.item_attributes.enchanted.inverted": "UNLOCALIZED: is unenchanted",
"create.item_attributes.max_enchanted": "UNLOCALIZED: is enchanted at max level",
"create.item_attributes.max_enchanted.inverted": "UNLOCALIZED: is not enchanted at max level",
"create.item_attributes.renamed": "UNLOCALIZED: has a custom name",
"create.item_attributes.renamed.inverted": "UNLOCALIZED: does not have a custom name",
"create.item_attributes.damaged": "UNLOCALIZED: is damaged",
"create.item_attributes.damaged.inverted": "UNLOCALIZED: is not damaged",
"create.item_attributes.badly_damaged": "UNLOCALIZED: is heavily damaged",
"create.item_attributes.badly_damaged.inverted": "UNLOCALIZED: is not heavily damaged",
"create.item_attributes.not_stackable": "UNLOCALIZED: cannot stack",
"create.item_attributes.not_stackable.inverted": "UNLOCALIZED: can be stacked",
"create.item_attributes.equipable": "UNLOCALIZED: can be equipped",
"create.item_attributes.equipable.inverted": "UNLOCALIZED: cannot be equipped",
"create.item_attributes.furnace_fuel": "UNLOCALIZED: is furnace fuel",
"create.item_attributes.furnace_fuel.inverted": "UNLOCALIZED: is not furnace fuel",
"create.item_attributes.washable": "UNLOCALIZED: can be Washed",
"create.item_attributes.washable.inverted": "UNLOCALIZED: cannot be Washed",
"create.item_attributes.hauntable": "UNLOCALIZED: can be Haunted",
"create.item_attributes.hauntable.inverted": "UNLOCALIZED: cannot be Haunted",
"create.item_attributes.crushable": "UNLOCALIZED: can be Crushed",
"create.item_attributes.crushable.inverted": "UNLOCALIZED: cannot be Crushed",
"create.item_attributes.smeltable": "UNLOCALIZED: can be Smelted",
"create.item_attributes.smeltable.inverted": "UNLOCALIZED: cannot be Smelted",
"create.item_attributes.smokable": "UNLOCALIZED: can be Smoked",
"create.item_attributes.smokable.inverted": "UNLOCALIZED: cannot be Smoked",
"create.item_attributes.blastable": "UNLOCALIZED: is smeltable in Blast Furnace",
"create.item_attributes.blastable.inverted": "UNLOCALIZED: is not smeltable in Blast Furnace",
"create.item_attributes.shulker_level": "UNLOCALIZED: is shulker %1$s",
"create.item_attributes.shulker_level.inverted": "UNLOCALIZED: is shulker not %1$s",
"create.item_attributes.shulker_level.full": "UNLOCALIZED: full",
"create.item_attributes.shulker_level.empty": "UNLOCALIZED: empty",
"create.item_attributes.shulker_level.partial": "UNLOCALIZED: partially filled",
"create.item_attributes.in_tag": "UNLOCALIZED: is tagged %1$s",
"create.item_attributes.in_tag.inverted": "UNLOCALIZED: is not tagged %1$s",
"create.item_attributes.in_item_group": "UNLOCALIZED: is in group '%1$s'",
"create.item_attributes.in_item_group.inverted": "UNLOCALIZED: is not in group '%1$s'",
"create.item_attributes.added_by": "UNLOCALIZED: was added by %1$s",
"create.item_attributes.added_by.inverted": "UNLOCALIZED: was not added by %1$s",
"create.item_attributes.has_enchant": "UNLOCALIZED: is enchanted with %1$s",
"create.item_attributes.has_enchant.inverted": "UNLOCALIZED: is not enchanted with %1$s",
"create.item_attributes.color": "UNLOCALIZED: is dyed %1$s",
"create.item_attributes.color.inverted": "UNLOCALIZED: is not dyed %1$s",
"create.item_attributes.has_fluid": "UNLOCALIZED: contains %1$s",
"create.item_attributes.has_fluid.inverted": "UNLOCALIZED: does not contain %1$s",
"create.item_attributes.has_name": "UNLOCALIZED: has the custom name %1$s",
"create.item_attributes.has_name.inverted": "UNLOCALIZED: does not have the custom name %1$s",
"create.item_attributes.book_author": "UNLOCALIZED: was authored by %1$s",
"create.item_attributes.book_author.inverted": "UNLOCALIZED: was not authored by %1$s",
"create.item_attributes.book_copy_original": "UNLOCALIZED: is an original",
"create.item_attributes.book_copy_original.inverted": "UNLOCALIZED: is not an original",
"create.item_attributes.book_copy_first": "UNLOCALIZED: is a first-generation copy",
"create.item_attributes.book_copy_first.inverted": "UNLOCALIZED: is not a first-generation copy",
"create.item_attributes.book_copy_second": "UNLOCALIZED: is a second-generation copy",
"create.item_attributes.book_copy_second.inverted": "UNLOCALIZED: is not a second-generation copy",
"create.item_attributes.book_copy_tattered": "UNLOCALIZED: is a tattered mess",
"create.item_attributes.book_copy_tattered.inverted": "UNLOCALIZED: is not a tattered mess",
"create.item_attributes.astralsorcery_amulet": "UNLOCALIZED: improves %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "UNLOCALIZED: does not improve %1$s",
"create.item_attributes.astralsorcery_constellation": "UNLOCALIZED: is attuned to %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "UNLOCALIZED: is not attuned to %1$s",
"create.item_attributes.astralsorcery_crystal": "UNLOCALIZED: has crystal attribute %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "UNLOCALIZED: does not have crystal attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem": "UNLOCALIZED: has perk attribute %1$s",
"create.item_attributes.astralsorcery_perk_gem.inverted": "UNLOCALIZED: does not have perk attribute %1$s",
"create.item_attributes.placeable": "É colocavel",
"create.item_attributes.placeable.inverted": "Não é colocavel",
"create.item_attributes.consumable": "É comestivel",
"create.item_attributes.consumable.inverted": "Não é comestivel",
"create.item_attributes.fluid_container": "Pode armazenar fluidos",
"create.item_attributes.fluid_container.inverted": "Não pode armazenar fluidos",
"create.item_attributes.enchanted": "Está encantado",
"create.item_attributes.enchanted.inverted": "Não está encantado",
"create.item_attributes.max_enchanted": "Está encantado no nível máximo",
"create.item_attributes.max_enchanted.inverted": "Não está encantado no nível maximo",
"create.item_attributes.renamed": "Tem nome customizado",
"create.item_attributes.renamed.inverted": "Não tem nome customizado",
"create.item_attributes.damaged": "Está danificado",
"create.item_attributes.damaged.inverted": "Não está danificado",
"create.item_attributes.badly_damaged": "Está severamente danificado",
"create.item_attributes.badly_damaged.inverted": "Não esta severamente danificado",
"create.item_attributes.not_stackable": "Não pode ser empilhado",
"create.item_attributes.not_stackable.inverted": "Pode ser empilhado",
"create.item_attributes.equipable": "Pode ser equipado",
"create.item_attributes.equipable.inverted": "Não pode ser equipado",
"create.item_attributes.furnace_fuel": "è combustivel",
"create.item_attributes.furnace_fuel.inverted": "Não é combustivel",
"create.item_attributes.washable": "Pode ser lavado",
"create.item_attributes.washable.inverted": "Não pode ser lavado",
"create.item_attributes.hauntable": "Pode ser amaldiçoado",
"create.item_attributes.hauntable.inverted": "Não pode ser amaldiçoado",
"create.item_attributes.crushable": "Pode ser triturado",
"create.item_attributes.crushable.inverted": "Não pode ser triturado",
"create.item_attributes.smeltable": "Pode ser fundido",
"create.item_attributes.smeltable.inverted": "Não pode ser fundido",
"create.item_attributes.smokable": "Pode ser defumado",
"create.item_attributes.smokable.inverted": "Não pode ser defumado",
"create.item_attributes.blastable": "È fundível no alto-forno",
"create.item_attributes.blastable.inverted": "Não é fundível no alto-forno",
"create.item_attributes.shulker_level": "O shulker é %1$s",
"create.item_attributes.shulker_level.inverted": "O shulker não é %1$s",
"create.item_attributes.shulker_level.full": "Cheio",
"create.item_attributes.shulker_level.empty": "Vazio",
"create.item_attributes.shulker_level.partial": "Parcialmente cheio",
"create.item_attributes.in_tag": "è marcado %1$s",
"create.item_attributes.in_tag.inverted": "Não é marcado %1$s",
"create.item_attributes.in_item_group": "Es no grupo '%1$s'",
"create.item_attributes.in_item_group.inverted": "Não esta no grupo '%1$s'",
"create.item_attributes.added_by": "Foi adicionado por %1$s",
"create.item_attributes.added_by.inverted": "Não foi adicionado por %1$s",
"create.item_attributes.has_enchant": "Está encantado com %1$s",
"create.item_attributes.has_enchant.inverted": "Não esta encantado com %1$s",
"create.item_attributes.color": "Esta tingido de %1$s",
"create.item_attributes.color.inverted": "Não está tingido de %1$s",
"create.item_attributes.has_fluid": "Contem %1$s",
"create.item_attributes.has_fluid.inverted": "Não contem %1$s",
"create.item_attributes.has_name": "Tem o nome %1$s",
"create.item_attributes.has_name.inverted": "Não tem o nome %1$s",
"create.item_attributes.book_author": "Tem a autoria de %1$s",
"create.item_attributes.book_author.inverted": "Não tem a autoria de %1$s",
"create.item_attributes.book_copy_original": "É original",
"create.item_attributes.book_copy_original.inverted": "Não é original",
"create.item_attributes.book_copy_first": "É uma cópia da primeira geração",
"create.item_attributes.book_copy_first.inverted": "Não é uma copia de primeira geração",
"create.item_attributes.book_copy_second": "É uma cópia de segunda geração",
"create.item_attributes.book_copy_second.inverted": "Não é uma copia de segunda geração",
"create.item_attributes.book_copy_tattered": "É uma bagunça esfarrapada",
"create.item_attributes.book_copy_tattered.inverted": "Não é uma bagunça esfarrapada",
"create.item_attributes.astralsorcery_amulet": "Melhora %1$s",
"create.item_attributes.astralsorcery_amulet.inverted": "Não melhora %1$s",
"create.item_attributes.astralsorcery_constellation": "Esta sintonizado a %1$s",
"create.item_attributes.astralsorcery_constellation.inverted": "Não esta sintonizado a %1$s",
"create.item_attributes.astralsorcery_crystal": "Tem atributos de cristais %1$s",
"create.item_attributes.astralsorcery_crystal.inverted": "Não tem atributos de cristais %1$s",
"create.item_attributes.astralsorcery_perk_gem": " %1$s Tem um atributo de benefio",
"create.item_attributes.astralsorcery_perk_gem.inverted": "%1$s Não tem um atributo de benefio",
"create.gui.attribute_filter.no_selected_attributes": "UNLOCALIZED: No attributes selected",
"create.gui.attribute_filter.selected_attributes": "UNLOCALIZED: Selected attributes:",
"create.gui.attribute_filter.add_attribute": "UNLOCALIZED: Add attribute to List",
"create.gui.attribute_filter.add_inverted_attribute": "UNLOCALIZED: Add opposite attribute to List",
"create.gui.attribute_filter.allow_list_disjunctive": "UNLOCALIZED: Allow-List (Any)",
"create.gui.attribute_filter.allow_list_disjunctive.description": "UNLOCALIZED: Items pass if they have any of the selected attributes.",
"create.gui.attribute_filter.allow_list_conjunctive": "UNLOCALIZED: Allow-List (All)",
"create.gui.attribute_filter.allow_list_conjunctive.description": "UNLOCALIZED: Items pass only if they have ALL of the selected attributes.",
"create.gui.attribute_filter.deny_list": "UNLOCALIZED: Deny-List",
"create.gui.attribute_filter.deny_list.description": "UNLOCALIZED: Items pass if they do NOT have any of the selected attributes.",
"create.gui.attribute_filter.add_reference_item": "UNLOCALIZED: Add Reference Item",
"create.gui.attribute_filter.no_selected_attributes": "Nenhum atributo selecionado",
"create.gui.attribute_filter.selected_attributes": "Atributos selecionados:",
"create.gui.attribute_filter.add_attribute": "Adicionar atributo a lista",
"create.gui.attribute_filter.add_inverted_attribute": "Adicionar atributo oposto a lista",
"create.gui.attribute_filter.allow_list_disjunctive": "Lista de permissão (Qualquer)",
"create.gui.attribute_filter.allow_list_disjunctive.description": "Itens passam se eles tiverem qualquer atributo selecionado.",
"create.gui.attribute_filter.allow_list_conjunctive": "Lista de permissão (Todos)",
"create.gui.attribute_filter.allow_list_conjunctive.description": "Itens passam se eles tiverem TODOS atributos selecionados.",
"create.gui.attribute_filter.deny_list": "lista de negação",
"create.gui.attribute_filter.deny_list.description": "Itens passam se eles NÃO tiverem qualquer atributo selecionado.",
"create.gui.attribute_filter.add_reference_item": "Adicionar item referência",
"create.tooltip.holdForDescription": "UNLOCALIZED: Hold [%1$s] for Summary",
"create.tooltip.holdForControls": "UNLOCALIZED: Hold [%1$s] for Controls",
"create.tooltip.keyShift": "UNLOCALIZED: Shift",
"create.tooltip.keyCtrl": "UNLOCALIZED: Ctrl",
"create.tooltip.speedRequirement": "UNLOCALIZED: Speed Requirement: %1$s",
"create.tooltip.speedRequirement.none": "UNLOCALIZED: None",
"create.tooltip.speedRequirement.slow": "UNLOCALIZED: Slow",
"create.tooltip.speedRequirement.medium": "UNLOCALIZED: Moderate",
"create.tooltip.speedRequirement.fast": "UNLOCALIZED: Fast",
"create.tooltip.stressImpact": "UNLOCALIZED: Kinetic Stress Impact: %1$s",
"create.tooltip.stressImpact.low": "UNLOCALIZED: Low",
"create.tooltip.stressImpact.medium": "UNLOCALIZED: Moderate",
"create.tooltip.stressImpact.high": "UNLOCALIZED: High",
"create.tooltip.stressImpact.overstressed": "UNLOCALIZED: Overstressed",
"create.tooltip.capacityProvided": "UNLOCALIZED: Kinetic Stress Capacity: %1$s",
"create.tooltip.capacityProvided.low": "UNLOCALIZED: Small",
"create.tooltip.capacityProvided.medium": "UNLOCALIZED: Medium",
"create.tooltip.capacityProvided.high": "UNLOCALIZED: Large",
"create.tooltip.generationSpeed": "UNLOCALIZED: Generates at %1$s %2$s",
"create.tooltip.analogStrength": "UNLOCALIZED: Analog Strength: %1$s/15",
"create.tooltip.holdForDescription": "Segure [%1$s] para o sumário",
"create.tooltip.holdForControls": "Segure [%1$s] para os controles",
"create.tooltip.keyShift": "Shift",
"create.tooltip.keyCtrl": "Ctrl",
"create.tooltip.speedRequirement": "Requerimento de velocidade: %1$s",
"create.tooltip.speedRequirement.none": "Nenhum",
"create.tooltip.speedRequirement.slow": "Devagar",
"create.tooltip.speedRequirement.medium": "Modereado",
"create.tooltip.speedRequirement.fast": "Rapido",
"create.tooltip.stressImpact": "Impacto de stress: %1$s",
"create.tooltip.stressImpact.low": " Baixo",
"create.tooltip.stressImpact.medium": " Moderado",
"create.tooltip.stressImpact.high": " Alto",
"create.tooltip.stressImpact.overstressed": ": Sobre estresse",
"create.tooltip.capacityProvided": "Capacidade de stress cinético: %1$s",
"create.tooltip.capacityProvided.low": " Pequeno",
"create.tooltip.capacityProvided.medium": " Médio",
"create.tooltip.capacityProvided.high": " Grande",
"create.tooltip.generationSpeed": " Gera em %1$s %2$s",
"create.tooltip.analogStrength": " Força analogica: %1$s/15",
"create.mechanical_arm.extract_from": "UNLOCALIZED: Take items from %1$s",
"create.mechanical_arm.deposit_to": "UNLOCALIZED: Deposit items to %1$s",
"create.mechanical_arm.summary": "UNLOCALIZED: Mechanical Arm has %1$s input(s) and %2$s output(s).",
"create.mechanical_arm.points_outside_range": "UNLOCALIZED: %1$s selected interaction point(s) removed due to range limitations.",
"create.mechanical_arm.extract_from": " Pegar itens de %1$s",
"create.mechanical_arm.deposit_to": " Depositar itens para %1$s",
"create.mechanical_arm.summary": "Braço mecânico tem %1$s entrada(s) e %2$s saida(s).",
"create.mechanical_arm.points_outside_range": "%1$s Ponto(s) de interação removidos pelas limitações de alcance.",
"create.weighted_ejector.target_set": "UNLOCALIZED: Target Selected",
"create.weighted_ejector.target_not_valid": "UNLOCALIZED: Ejecting to Adjacent block (Target was not Valid)",
"create.weighted_ejector.no_target": "UNLOCALIZED: Ejecting to Adjacent block (No Target was Selected)",
"create.weighted_ejector.targeting": "UNLOCALIZED: Ejecting to [%1$s,%2$s,%3$s]",
"create.weighted_ejector.stack_size": "UNLOCALIZED: Ejected Stack Size",
"create.weighted_ejector.target_set": "Alvo selecionado",
"create.weighted_ejector.target_not_valid": "Ejetando para o bloco adjacente (Alvo não foi valido)",
"create.weighted_ejector.no_target": "Ejetando para o bloco adjacente (Nenhum alvo foi selecionado)",
"create.weighted_ejector.targeting": "Ejetando para [%1$s,%2$s,%3$s]",
"create.weighted_ejector.stack_size": "Tamanho da pilha ejetada",
"create.logistics.when_multiple_outputs_available": "UNLOCALIZED: When Multiple Outputs Available",
"create.logistics.when_multiple_outputs_available": "Quando multiplas saidas selecionadas",
"create.mechanical_arm.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
"create.mechanical_arm.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin",
"create.mechanical_arm.selection_mode.prefer_first": "UNLOCALIZED: Prefer First Target",
"create.mechanical_arm.selection_mode.round_robin": "Rodízio",
"create.mechanical_arm.selection_mode.forced_round_robin": "Rodízio forçado",
"create.mechanical_arm.selection_mode.prefer_first": "Preferir primeiro alvo",
"create.tunnel.selection_mode.split": "UNLOCALIZED: Split",
"create.tunnel.selection_mode.forced_split": "UNLOCALIZED: Forced Split",
"create.tunnel.selection_mode.round_robin": "UNLOCALIZED: Round Robin",
"create.tunnel.selection_mode.forced_round_robin": "UNLOCALIZED: Forced Round Robin",
"create.tunnel.selection_mode.prefer_nearest": "UNLOCALIZED: Prefer Nearest",
"create.tunnel.selection_mode.randomize": "UNLOCALIZED: Randomize",
"create.tunnel.selection_mode.synchronize": "UNLOCALIZED: Synchronize Inputs",
"create.tunnel.selection_mode.split": "Dividir",
"create.tunnel.selection_mode.forced_split": "Divisão forçada",
"create.tunnel.selection_mode.round_robin": "Rodízio",
"create.tunnel.selection_mode.forced_round_robin": "Rodízio forçado",
"create.tunnel.selection_mode.prefer_nearest": "Preferir o mais perto",
"create.tunnel.selection_mode.randomize": "Aleatorizar",
"create.tunnel.selection_mode.synchronize": "Sincronizar as entradas",
"create.tooltip.chute.header": "UNLOCALIZED: Chute Information",
"create.tooltip.chute.items_move_down": "UNLOCALIZED: Items move Downward",
"create.tooltip.chute.items_move_up": "UNLOCALIZED: Items move Upward",
"create.tooltip.chute.no_fans_attached": "UNLOCALIZED: No attached fans",
"create.tooltip.chute.fans_push_up": "UNLOCALIZED: Fans push from Below",
"create.tooltip.chute.fans_push_down": "UNLOCALIZED: Fans push from Above",
"create.tooltip.chute.fans_pull_up": "UNLOCALIZED: Fans pull from Above",
"create.tooltip.chute.fans_pull_down": "UNLOCALIZED: Fans pull from Below",
"create.tooltip.chute.contains": "UNLOCALIZED: Contains: %1$s x%2$s",
"create.tooltip.brass_tunnel.contains": "UNLOCALIZED: Currently distributing:",
"create.tooltip.brass_tunnel.contains_entry": "UNLOCALIZED: > %1$s x%2$s",
"create.tooltip.brass_tunnel.retrieve": "UNLOCALIZED: Right-Click to retrieve",
"create.tooltip.chute.header": "Informação da calha",
"create.tooltip.chute.items_move_down": "Itens movimentam para baixo",
"create.tooltip.chute.items_move_up": "Itens movem para cima",
"create.tooltip.chute.no_fans_attached": "Não conectado com um ventilador",
"create.tooltip.chute.fans_push_up": "Ventiladores sopram de baixo",
"create.tooltip.chute.fans_push_down": "Ventiladores sopram de cima",
"create.tooltip.chute.fans_pull_up": "Ventiladores sugam de cima",
"create.tooltip.chute.fans_pull_down": "Ventiladores sugam de baixo",
"create.tooltip.chute.contains": "Contem: %1$s x%2$s",
"create.tooltip.brass_tunnel.contains": "Distribuindo:",
"create.tooltip.brass_tunnel.contains_entry": " > %1$s x%2$s",
"create.tooltip.brass_tunnel.retrieve": "Clique direito para recuperar item",
"create.linked_controller.bind_mode": "UNLOCALIZED: Bind mode active",
"create.linked_controller.press_keybind": "UNLOCALIZED: Press %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, to bind this frequency to the respective key",
"create.linked_controller.key_bound": "UNLOCALIZED: Frequency bound to %1$s",
"create.linked_controller.frequency_slot_1": "UNLOCALIZED: Keybind: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "UNLOCALIZED: Keybind: %1$s, Freq. #2",
"create.linked_controller.bind_mode": "Modo de vinculação",
"create.linked_controller.press_keybind": "Aperte %1$s, %2$s, %3$s, %4$s, %5$s or %6$s, para vincular essa frequencia para tecla respectiva",
"create.linked_controller.key_bound": "Frequência vinculada com %1$s",
"create.linked_controller.frequency_slot_1": "Tecla: %1$s, Freq. #1",
"create.linked_controller.frequency_slot_2": "Tecla: %1$s, Freq. #2",
"create.crafting_blueprint.crafting_slot": "UNLOCALIZED: Ingredient Slot",
"create.crafting_blueprint.filter_items_viable": "UNLOCALIZED: Advanced filter items are viable",
"create.crafting_blueprint.display_slot": "UNLOCALIZED: Display Slot",
"create.crafting_blueprint.inferred": "UNLOCALIZED: Inferred from recipe",
"create.crafting_blueprint.manually_assigned": "UNLOCALIZED: Manually assigned",
"create.crafting_blueprint.secondary_display_slot": "UNLOCALIZED: Secondary Display Slot",
"create.crafting_blueprint.optional": "UNLOCALIZED: Optional",
"create.crafting_blueprint.crafting_slot": "Slot de ingrediente",
"create.crafting_blueprint.filter_items_viable": "Filtros avançados são viaveis",
"create.crafting_blueprint.display_slot": "Slot de exibição",
"create.crafting_blueprint.inferred": "Deduzido pela receita",
"create.crafting_blueprint.manually_assigned": "Designado manualmente",
"create.crafting_blueprint.secondary_display_slot": "Slot de exibição secundario",
"create.crafting_blueprint.optional": "Opcional",
"create.potato_cannon.ammo.attack_damage": "UNLOCALIZED: %1$s Attack Damage",
"create.potato_cannon.ammo.reload_ticks": "UNLOCALIZED: %1$s Reload Ticks",
"create.potato_cannon.ammo.knockback": "UNLOCALIZED: %1$s Knockback",
"create.potato_cannon.ammo.attack_damage": " %1$s Dano de ataque",
"create.potato_cannon.ammo.reload_ticks": " %1$s Velocidade de recarregamento",
"create.potato_cannon.ammo.knockback": " %1$s Repulsão do projetil",
"create.hint.hose_pulley.title": "UNLOCALIZED: Bottomless Supply",
"create.hint.hose_pulley": "UNLOCALIZED: The targeted body of fluid is considered infinite.",
"create.hint.mechanical_arm_no_targets.title": "UNLOCALIZED: No Targets",
"create.hint.mechanical_arm_no_targets": "UNLOCALIZED: It appears this _Mechanical_ _Arm_ has not been assigned any _targets._ Select belts, depots, funnels and other blocks by _right-clicking_ them while _holding_ the _Mechanical_ _Arm_ in your _hand_.",
"create.hint.empty_bearing.title": "UNLOCALIZED: Update Bearing",
"create.hint.empty_bearing": "UNLOCALIZED: _Right-click_ the bearing with an _empty_ _hand_ to _attach_ the structure you just built in front of it.",
"create.hint.full_deployer.title": "UNLOCALIZED: Deployer Item Overflow",
"create.hint.full_deployer": "UNLOCALIZED: It appears this _Deployer_ contains _excess_ _items_ that need to be _extracted._ Use a _hopper,_ _funnel_ or other means to free it from its overflow.",
"create.hint.hose_pulley.title": "Abastecimento sem fundo",
"create.hint.hose_pulley": "O corpo de fluido selecionado é considerado infinito.",
"create.hint.mechanical_arm_no_targets.title": "Sem alvos",
"create.hint.mechanical_arm_no_targets": "Aparentemente esse _Braço_ _Mecânico_ não foi designado nenhum _alvo._ Selecione esteiras, depósitos, funis e outros blocos com o _botão direito do mouse_ enquanto _segurando_ o _Braço_ _Mecanico_ na sua _mão_.",
"create.hint.empty_bearing.title": "Atualizar o rolamento",
"create.hint.empty_bearing": " _clique com o botão direito_ o rolamento com a _mão_ _vazia_ para _conectar_ a estrutura que você construiu não frente disso.",
"create.hint.full_deployer.title": "Implantador transbordando de itens",
"create.hint.full_deployer": "Aparenta que esse _inplantador_ contém _itens_ em _excesso_ que precisam ser _extraídos._ Use um _funil,_ _funil de andesito/latão_ ou outros meios para extrair os itens excedentes.",
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
"create.gui.config.overlay1": "Oi :)",
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
"create.gui.config.overlay4": "UNLOCALIZED: to move this preview",
@ -1321,56 +1321,56 @@
"create.gui.config.overlay7": "UNLOCALIZED: Run /create overlay reset",
"create.gui.config.overlay8": "UNLOCALIZED: to reset to the default position",
"create.command.killTPSCommand": "UNLOCALIZED: killtps",
"create.command.killTPSCommand.status.slowed_by.0": "UNLOCALIZED: [Create]: Server tick is currently slowed by %s ms :o",
"create.command.killTPSCommand.status.slowed_by.1": "UNLOCALIZED: [Create]: Server tick is slowed by %s ms now >:)",
"create.command.killTPSCommand.status.slowed_by.2": "UNLOCALIZED: [Create]: Server tick is back to regular speed :D",
"create.command.killTPSCommand.status.usage.0": "UNLOCALIZED: [Create]: use /killtps stop to bring back server tick to regular speed",
"create.command.killTPSCommand.status.usage.1": "UNLOCALIZED: [Create]: use /killtps start <tickTime> to artificially slow down the server tick",
"create.command.killTPSCommand.argument.tickTime": "UNLOCALIZED: tickTime",
"create.command.killTPSCommand": " killtps",
"create.command.killTPSCommand.status.slowed_by.0": " [Create]: Server tick is currently slowed by %s ms :o",
"create.command.killTPSCommand.status.slowed_by.1": " [Create]: Server tick is slowed by %s ms now >:)",
"create.command.killTPSCommand.status.slowed_by.2": " [Create]: Server tick is back to regular speed :D",
"create.command.killTPSCommand.status.usage.0": " [Create]: use /killtps stop to bring back server tick to regular speed",
"create.command.killTPSCommand.status.usage.1": " [Create]: use /killtps start <tickTime> to artificially slow down the server tick",
"create.command.killTPSCommand.argument.tickTime": "tickTime",
"create.contraption.minecart_contraption_too_big": "UNLOCALIZED: This Cart Contraption seems too big to pick up",
"create.contraption.minecart_contraption_illegal_pickup": "UNLOCALIZED: A mystical force is binding this Cart Contraption to the world",
"create.contraption.minecart_contraption_too_big": "Essa engenhoca de carrinho aparenta ser muita grande para pegar",
"create.contraption.minecart_contraption_illegal_pickup": "Uma força mistica esta segurando esta engenhoca de carrinho",
"_": "->------------------------] Subtitles [------------------------<-",
"create.subtitle.contraption_disassemble": "UNLOCALIZED: Contraption stops",
"create.subtitle.peculiar_bell_use": "UNLOCALIZED: Peculiar Bell tolls",
"create.subtitle.mixing": "UNLOCALIZED: Mixing noises",
"create.subtitle.mechanical_press_activation_belt": "UNLOCALIZED: Mechanical Press bonks",
"create.subtitle.fwoomp": "UNLOCALIZED: Potato Launcher fwoomps",
"create.subtitle.worldshaper_place": "UNLOCALIZED: Worldshaper zaps",
"create.subtitle.sanding_long": "UNLOCALIZED: Sanding noises",
"create.subtitle.crushing_1": "UNLOCALIZED: Crushing noises",
"create.subtitle.depot_slide": "UNLOCALIZED: Item slides",
"create.subtitle.saw_activate_stone": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.blaze_munch": "UNLOCALIZED: Blaze Burner munches",
"create.subtitle.funnel_flap": "UNLOCALIZED: Funnel flaps",
"create.subtitle.schematicannon_finish": "UNLOCALIZED: Schematicannon dings",
"create.subtitle.haunted_bell_use": "UNLOCALIZED: Haunted Bell tolls",
"create.subtitle.scroll_value": "UNLOCALIZED: Scroll-input clicks",
"create.subtitle.crafter_craft": "UNLOCALIZED: Crafter crafts",
"create.subtitle.controller_put": "UNLOCALIZED: Controller thumps",
"create.subtitle.cranking": "UNLOCALIZED: Hand Crank turns",
"create.subtitle.wrench_remove": "UNLOCALIZED: Component breaks",
"create.subtitle.sanding_short": "UNLOCALIZED: Sanding noises",
"create.subtitle.cogs": "UNLOCALIZED: Cogwheels rumble",
"create.subtitle.slime_added": "UNLOCALIZED: Slime squishes",
"create.subtitle.wrench_rotate": "UNLOCALIZED: Wrench used",
"create.subtitle.potato_hit": "UNLOCALIZED: Vegetable impacts",
"create.subtitle.saw_activate_wood": "UNLOCALIZED: Mechanical Saw activates",
"create.subtitle.haunted_bell_convert": "UNLOCALIZED: Haunted Bell awakens",
"create.subtitle.deny": "UNLOCALIZED: Declining boop",
"create.subtitle.controller_click": "UNLOCALIZED: Controller clicks",
"create.subtitle.schematicannon_launch_block": "UNLOCALIZED: Schematicannon fires",
"create.subtitle.copper_armor_equip": "UNLOCALIZED: Diving equipment clinks",
"create.subtitle.controller_take": "UNLOCALIZED: Lectern empties",
"create.subtitle.mechanical_press_activation": "UNLOCALIZED: Mechanical Press clangs",
"create.subtitle.contraption_assemble": "UNLOCALIZED: Contraption moves",
"create.subtitle.crafter_click": "UNLOCALIZED: Crafter clicks",
"create.subtitle.depot_plop": "UNLOCALIZED: Item lands",
"create.subtitle.confirm": "UNLOCALIZED: Affirmative ding",
"create.subtitle.contraption_disassemble": "Engenhoca para",
"create.subtitle.peculiar_bell_use": "Sino peculiar toca",
"create.subtitle.mixing": "Sons de mistura",
"create.subtitle.mechanical_press_activation_belt": "Bonks da prensa mecanica",
"create.subtitle.fwoomp": "Fwoomps do canhão de batata",
"create.subtitle.worldshaper_place": "Zaps do terraformador",
"create.subtitle.sanding_long": "Sons de lixa",
"create.subtitle.crushing_1": "Sons de trituração",
"create.subtitle.depot_slide": "Item escorrega",
"create.subtitle.saw_activate_stone": "Serra mecânica ativa",
"create.subtitle.blaze_munch": "Queimador de blazer mastiga",
"create.subtitle.funnel_flap": "Abas do funil batendo",
"create.subtitle.schematicannon_finish": "Ding do canhão de esquema",
"create.subtitle.haunted_bell_use": "Sino assombrado toca",
"create.subtitle.scroll_value": "click do scroll",
"create.subtitle.crafter_craft": "Fabricador fábrica",
"create.subtitle.controller_put": "Thumps do controle",
"create.subtitle.cranking": "Manivela gira",
"create.subtitle.wrench_remove": "Componente quebra",
"create.subtitle.sanding_short": "Sons de lixa",
"create.subtitle.cogs": "tremer da rodas dentadas",
"create.subtitle.slime_added": "Slime sendo espremido",
"create.subtitle.wrench_rotate": "Chave inglesa usada",
"create.subtitle.potato_hit": "Impacto vegetal",
"create.subtitle.saw_activate_wood": "Serra mecânica ativa",
"create.subtitle.haunted_bell_convert": "Sino assombrado acorda",
"create.subtitle.deny": "Boop de negação",
"create.subtitle.controller_click": "Clicks do controle",
"create.subtitle.schematicannon_launch_block": "Canhão de esquema atira",
"create.subtitle.copper_armor_equip": "Tilintar dos equipamentos de mergulho",
"create.subtitle.controller_take": "Atril esvaziado",
"create.subtitle.mechanical_press_activation": "Clang da prensa mecânica",
"create.subtitle.contraption_assemble": "Engenhoca move",
"create.subtitle.crafter_click": "Clicks do fabricador",
"create.subtitle.depot_plop": "Item pousa",
"create.subtitle.confirm": "Ding afirmativo",
"_": "->------------------------] Item Descriptions [------------------------<-",

View file

@ -42,12 +42,15 @@ public class ConnectivityHandler {
formMulti(be.getType(), be.getLevel(), cache, frontier);
}
private static <T extends BlockEntity & IMultiTileContainer> void formMulti(BlockEntityType<?> type, BlockGetter level, SearchCache<T> cache, List<T> frontier) {
private static <T extends BlockEntity & IMultiTileContainer> void formMulti(BlockEntityType<?> type,
BlockGetter level, SearchCache<T> cache, List<T> frontier) {
PriorityQueue<Pair<Integer, T>> creationQueue = makeCreationQueue();
Set<BlockPos> visited = new HashSet<>();
Direction.Axis mainAxis = frontier.get(0).getMainConnectionAxis();
Direction.Axis mainAxis = frontier.get(0)
.getMainConnectionAxis();
// essentially, if it's a vertical multi then the search won't be restricted by Y
// essentially, if it's a vertical multi then the search won't be restricted by
// Y
// alternately, a horizontal multi search shouldn't be restricted by X or Z
int minX = (mainAxis == Direction.Axis.Y ? Integer.MAX_VALUE : Integer.MIN_VALUE);
int minY = (mainAxis != Direction.Axis.Y ? Integer.MAX_VALUE : Integer.MIN_VALUE);
@ -59,14 +62,21 @@ public class ConnectivityHandler {
minY = Math.min(pos.getY(), minY);
minZ = Math.min(pos.getZ(), minZ);
}
if (mainAxis == Direction.Axis.Y) minX -= frontier.get(0).getMaxWidth();
if (mainAxis != Direction.Axis.Y) minY -= frontier.get(0).getMaxWidth();
if (mainAxis == Direction.Axis.Y) minZ -= frontier.get(0).getMaxWidth();
if (mainAxis == Direction.Axis.Y)
minX -= frontier.get(0)
.getMaxWidth();
if (mainAxis != Direction.Axis.Y)
minY -= frontier.get(0)
.getMaxWidth();
if (mainAxis == Direction.Axis.Y)
minZ -= frontier.get(0)
.getMaxWidth();
while (!frontier.isEmpty()) {
T part = frontier.remove(0);
BlockPos partPos = part.getBlockPos();
if (visited.contains(partPos)) continue;
if (visited.contains(partPos))
continue;
visited.add(partPos);
@ -79,11 +89,15 @@ public class ConnectivityHandler {
Direction dir = Direction.get(Direction.AxisDirection.NEGATIVE, axis);
BlockPos next = partPos.relative(dir);
if (next.getX() <= minX || next.getY() <= minY || next.getZ() <= minZ) continue;
if (visited.contains(next)) continue;
if (next.getX() <= minX || next.getY() <= minY || next.getZ() <= minZ)
continue;
if (visited.contains(next))
continue;
T nextBe = partAt(type, level, next);
if (nextBe == null) continue;
if (nextBe.isRemoved()) continue;
if (nextBe == null)
continue;
if (nextBe.isRemoved())
continue;
frontier.add(nextBe);
}
}
@ -92,32 +106,38 @@ public class ConnectivityHandler {
while (!creationQueue.isEmpty()) {
Pair<Integer, T> next = creationQueue.poll();
T toCreate = next.getValue();
if (visited.contains(toCreate.getBlockPos())) continue;
if (visited.contains(toCreate.getBlockPos()))
continue;
visited.add(toCreate.getBlockPos());
tryToFormNewMulti(toCreate, cache, false);
}
}
private static <T extends BlockEntity & IMultiTileContainer> int tryToFormNewMulti(T be, SearchCache<T> cache, boolean simulate) {
int bestWidth = 1;
private static <T extends BlockEntity & IMultiTileContainer> int tryToFormNewMulti(T be, SearchCache<T> cache,
boolean simulate) {
int bestWidth = 1;
int bestAmount = -1;
if (!be.isController()) return 0;
if (!be.isController())
return 0;
int radius = be.getMaxWidth();
for (int w = 1; w <= radius; w++) {
int amount = tryToFormNewMultiOfWidth(be, w, cache, true);
if (amount < bestAmount) continue;
if (amount < bestAmount)
continue;
bestWidth = w;
bestAmount = amount;
}
if (!simulate) {
int beWidth = be.getWidth();
if (beWidth == bestWidth && beWidth*beWidth * be.getHeight() == bestAmount) return bestAmount;
if (beWidth == bestWidth && beWidth * beWidth * be.getHeight() == bestAmount)
return bestAmount;
splitMultiAndInvalidate(be, cache, false);
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) ifluid.setTankSize(0, bestAmount);
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank())
ifluid.setTankSize(0, bestAmount);
tryToFormNewMultiOfWidth(be, bestWidth, cache, false);
@ -129,12 +149,14 @@ public class ConnectivityHandler {
return bestAmount;
}
private static <T extends BlockEntity & IMultiTileContainer> int tryToFormNewMultiOfWidth(T be, int width, SearchCache<T> cache, boolean simulate) {
private static <T extends BlockEntity & IMultiTileContainer> int tryToFormNewMultiOfWidth(T be, int width,
SearchCache<T> cache, boolean simulate) {
int amount = 0;
int height = 0;
BlockEntityType<?> type = be.getType();
Level level = be.getLevel();
if (level == null) return 0;
if (level == null)
return 0;
BlockPos origin = be.getBlockPos();
// optional fluid handling
@ -142,49 +164,63 @@ public class ConnectivityHandler {
FluidStack fluid = FluidStack.EMPTY;
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) {
beTank = ifluid.getTank(0);
fluid = beTank.getFluid();
fluid = beTank.getFluid();
}
Direction.Axis axis = be.getMainConnectionAxis();
Search:
for (int yOffset = 0; yOffset < be.getMaxLength(axis, width); yOffset++) {
Search: for (int yOffset = 0; yOffset < be.getMaxLength(axis, width); yOffset++) {
for (int xOffset = 0; xOffset < width; xOffset++) {
for (int zOffset = 0; zOffset < width; zOffset++) {
BlockPos pos = switch (axis) {
case X -> origin.offset(yOffset, xOffset, zOffset);
case Y -> origin.offset(xOffset, yOffset, zOffset);
case Z -> origin.offset(xOffset, zOffset, yOffset);
case X -> origin.offset(yOffset, xOffset, zOffset);
case Y -> origin.offset(xOffset, yOffset, zOffset);
case Z -> origin.offset(xOffset, zOffset, yOffset);
};
Optional<T> part = cache.getOrCache(type, level, pos);
if (part.isEmpty()) break Search;
if (part.isEmpty())
break Search;
T controller = part.get();
int otherWidth = controller.getWidth();
if (otherWidth > width) break Search;
if (otherWidth == width && controller.getHeight() == be.getMaxLength(axis, width)) break Search;
if (otherWidth > width)
break Search;
if (otherWidth == width && controller.getHeight() == be.getMaxLength(axis, width))
break Search;
Direction.Axis conAxis = controller.getMainConnectionAxis();
if (axis != conAxis) break Search;
if (axis != conAxis)
break Search;
BlockPos conPos = controller.getBlockPos();
if (!conPos.equals(origin)) {
if (axis == Direction.Axis.Y) { // vertical multi, like a FluidTank
if (conPos.getX() < origin.getX()) break Search;
if (conPos.getZ() < origin.getZ()) break Search;
if (conPos.getX() + otherWidth > origin.getX() + width) break Search;
if (conPos.getZ() + otherWidth > origin.getZ() + width) break Search;
if (conPos.getX() < origin.getX())
break Search;
if (conPos.getZ() < origin.getZ())
break Search;
if (conPos.getX() + otherWidth > origin.getX() + width)
break Search;
if (conPos.getZ() + otherWidth > origin.getZ() + width)
break Search;
} else { // horizontal multi, like an ItemVault
if (axis == Direction.Axis.Z && conPos.getX() < origin.getX()) break Search;
if (conPos.getY() < origin.getY()) break Search;
if (axis == Direction.Axis.X && conPos.getZ() < origin.getZ()) break Search;
if (axis == Direction.Axis.Z && conPos.getX() + otherWidth > origin.getX() + width) break Search;
if (conPos.getY() + otherWidth > origin.getY() + width) break Search;
if (axis == Direction.Axis.X && conPos.getZ() + otherWidth > origin.getZ() + width) break Search;
if (axis == Direction.Axis.Z && conPos.getX() < origin.getX())
break Search;
if (conPos.getY() < origin.getY())
break Search;
if (axis == Direction.Axis.X && conPos.getZ() < origin.getZ())
break Search;
if (axis == Direction.Axis.Z && conPos.getX() + otherWidth > origin.getX() + width)
break Search;
if (conPos.getY() + otherWidth > origin.getY() + width)
break Search;
if (axis == Direction.Axis.X && conPos.getZ() + otherWidth > origin.getZ() + width)
break Search;
}
}
if (controller instanceof IMultiTileContainer.Fluid ifluidCon && ifluidCon.hasTank()) {
FluidStack otherFluid = ifluidCon.getFluid(0);
if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid)) break Search;
if (!fluid.isEmpty() && !otherFluid.isEmpty() && !fluid.isFluidEqual(otherFluid))
break Search;
}
}
}
@ -192,7 +228,8 @@ public class ConnectivityHandler {
height++;
}
if (simulate) return amount;
if (simulate)
return amount;
Object extraData = be.getExtraData();
@ -200,25 +237,30 @@ public class ConnectivityHandler {
for (int xOffset = 0; xOffset < width; xOffset++) {
for (int zOffset = 0; zOffset < width; zOffset++) {
BlockPos pos = switch (axis) {
case X -> origin.offset(yOffset, xOffset, zOffset);
case Y -> origin.offset(xOffset, yOffset, zOffset);
case Z -> origin.offset(xOffset, zOffset, yOffset);
case X -> origin.offset(yOffset, xOffset, zOffset);
case Y -> origin.offset(xOffset, yOffset, zOffset);
case Z -> origin.offset(xOffset, zOffset, yOffset);
};
T part = partAt(type, level, pos);
if (part == null) continue;
if (part == be) continue;
if (part == null)
continue;
if (part == be)
continue;
extraData = be.modifyExtraData(extraData);
if (part instanceof IMultiTileContainer.Fluid ifluidPart && ifluidPart.hasTank()) {
IFluidTank tankAt = ifluidPart.getTank(0);
IFluidTank tankAt = ifluidPart.getTank(0);
FluidStack fluidAt = tankAt.getFluid();
if (!fluidAt.isEmpty()) {
// making this generic would be a rather large mess, unfortunately
if (beTank != null && fluid.isEmpty() && beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) {
((CreativeFluidTankTileEntity.CreativeSmartFluidTank)beTank).setContainedFluid(fluidAt);
if (beTank != null && fluid.isEmpty()
&& beTank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank) {
((CreativeFluidTankTileEntity.CreativeSmartFluidTank) beTank)
.setContainedFluid(fluidAt);
}
if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank() && beTank != null) {
if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank()
&& beTank != null) {
beTank.fill(fluidAt, IFluidHandler.FluidAction.EXECUTE);
}
}
@ -245,18 +287,22 @@ public class ConnectivityHandler {
}
// tryReconnect helps whenever only a few tanks have been removed
private static <T extends BlockEntity & IMultiTileContainer> void splitMultiAndInvalidate(T be, @Nullable SearchCache<T> cache, boolean tryReconnect) {
private static <T extends BlockEntity & IMultiTileContainer> void splitMultiAndInvalidate(T be,
@Nullable SearchCache<T> cache, boolean tryReconnect) {
Level level = be.getLevel();
if (level == null) return;
if (level == null)
return;
be = be.getControllerTE();
if (be == null) return;
if (be == null)
return;
int height = be.getHeight();
int width = be.getWidth();
if (width == 1 && height == 1) return;
int width = be.getWidth();
if (width == 1 && height == 1)
return;
BlockPos origin = be.getBlockPos();
BlockPos origin = be.getBlockPos();
List<T> frontier = new ArrayList<>();
Direction.Axis axis = be.getMainConnectionAxis();
@ -265,8 +311,9 @@ public class ConnectivityHandler {
int maxCapacity = 0;
if (be instanceof IMultiTileContainer.Fluid ifluidBE && ifluidBE.hasTank()) {
toDistribute = ifluidBE.getFluid(0);
maxCapacity = ifluidBE.getTankSize(0);
if (!toDistribute.isEmpty() && !be.isRemoved()) toDistribute.shrink(maxCapacity);
maxCapacity = ifluidBE.getTankSize(0);
if (!toDistribute.isEmpty() && !be.isRemoved())
toDistribute.shrink(maxCapacity);
ifluidBE.setTankSize(0, 1);
}
@ -274,13 +321,16 @@ public class ConnectivityHandler {
for (int xOffset = 0; xOffset < width; xOffset++) {
for (int zOffset = 0; zOffset < width; zOffset++) {
BlockPos pos = switch (axis) {
case X -> origin.offset(yOffset, xOffset, zOffset);
case Y -> origin.offset(xOffset, yOffset, zOffset);
case Z -> origin.offset(xOffset, zOffset, yOffset);
case X -> origin.offset(yOffset, xOffset, zOffset);
case Y -> origin.offset(xOffset, yOffset, zOffset);
case Z -> origin.offset(xOffset, zOffset, yOffset);
};
T partAt = partAt(be.getType(), level, pos);
if (partAt == null) continue;
if (!partAt.getController().equals(origin)) continue;
if (partAt == null)
continue;
if (!partAt.getController()
.equals(origin))
continue;
T controllerBE = partAt.getControllerTE();
partAt.setExtraData((controllerBE == null ? null : controllerBE.getExtraData()));
@ -288,16 +338,18 @@ public class ConnectivityHandler {
if (!toDistribute.isEmpty() && partAt != be) {
FluidStack copy = toDistribute.copy();
IFluidTank tank = (partAt instanceof IMultiTileContainer.Fluid ifluidPart ? ifluidPart.getTank(0) : null);
IFluidTank tank =
(partAt instanceof IMultiTileContainer.Fluid ifluidPart ? ifluidPart.getTank(0) : null);
// making this generic would be a rather large mess, unfortunately
if (tank instanceof CreativeFluidTankTileEntity.CreativeSmartFluidTank creativeTank) {
if (creativeTank.isEmpty()) creativeTank.setContainedFluid(toDistribute);
}
else {
if (creativeTank.isEmpty())
creativeTank.setContainedFluid(toDistribute);
} else {
int split = Math.min(maxCapacity, toDistribute.getAmount());
copy.setAmount(split);
toDistribute.shrink(split);
if (tank != null) tank.fill(copy, IFluidHandler.FluidAction.EXECUTE);
if (tank != null)
tank.fill(copy, IFluidHandler.FluidAction.EXECUTE);
}
}
if (tryReconnect) {
@ -311,10 +363,12 @@ public class ConnectivityHandler {
}
}
if (be instanceof IMultiTileContainer.Inventory iinv && iinv.hasInventory()) {
be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY).invalidate();
be.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
.invalidate();
}
if (be instanceof IMultiTileContainer.Fluid ifluid && ifluid.hasTank()) {
be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY).invalidate();
be.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
.invalidate();
}
if (tryReconnect) {
formMulti(be.getType(), level, cache == null ? new SearchCache<>() : cache, frontier);
@ -326,40 +380,55 @@ public class ConnectivityHandler {
}
@Nullable
public static <T extends BlockEntity & IMultiTileContainer> T partAt(BlockEntityType<?> type, BlockGetter level, BlockPos pos) {
public static <T extends BlockEntity & IMultiTileContainer> T partAt(BlockEntityType<?> type, BlockGetter level,
BlockPos pos) {
BlockEntity be = level.getBlockEntity(pos);
if (be != null && be.getType() == type) return checked(be);
if (be != null && be.getType() == type)
return checked(be);
return null;
}
public static <T extends BlockEntity & IMultiTileContainer> boolean isConnected(BlockGetter level, BlockPos pos, BlockPos other) {
public static <T extends BlockEntity & IMultiTileContainer> boolean isConnected(BlockGetter level, BlockPos pos,
BlockPos other) {
T one = checked(level.getBlockEntity(pos));
T two = checked(level.getBlockEntity(other));
if (one == null || two == null) return false;
return one.getController().equals(two.getController());
if (one == null || two == null)
return false;
return one.getController()
.equals(two.getController());
}
@Nullable
@SuppressWarnings("unchecked")
private static <T extends BlockEntity & IMultiTileContainer> T checked(BlockEntity be) {
if (be instanceof IMultiTileContainer) return (T)be;
if (be instanceof IMultiTileContainer)
return (T) be;
return null;
}
private static class SearchCache<T extends BlockEntity & IMultiTileContainer> {
Map<BlockPos, Optional<T>> controllerMap;
public SearchCache() { controllerMap = new HashMap<>(); }
public SearchCache() {
controllerMap = new HashMap<>();
}
void put(BlockPos pos, T target) { controllerMap.put(pos, Optional.of(target)); }
void put(BlockPos pos, T target) {
controllerMap.put(pos, Optional.of(target));
}
void putEmpty(BlockPos pos) { controllerMap.put(pos, Optional.empty()); }
void putEmpty(BlockPos pos) {
controllerMap.put(pos, Optional.empty());
}
boolean hasVisited(BlockPos pos) { return controllerMap.containsKey(pos); }
boolean hasVisited(BlockPos pos) {
return controllerMap.containsKey(pos);
}
Optional<T> getOrCache(BlockEntityType<?> type, BlockGetter level, BlockPos pos) {
if (hasVisited(pos)) return controllerMap.get(pos);
if (hasVisited(pos))
return controllerMap.get(pos);
T partAt = partAt(type, level, pos);
if (partAt == null) {

View file

@ -28,10 +28,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pis
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock;
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock;
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankConnectivityHandler;
import com.simibubi.create.content.logistics.block.redstone.RedstoneLinkBlock;
import com.simibubi.create.content.logistics.block.vault.ItemVaultBlock;
import com.simibubi.create.content.logistics.block.vault.ItemVaultConnectivityHandler;
import com.simibubi.create.foundation.config.ContraptionMovementSetting;
import net.minecraft.core.BlockPos;
@ -331,9 +329,9 @@ public class BlockMovementChecks {
return direction.getAxis() != state.getValue(SailBlock.FACING)
.getAxis();
if (state.getBlock() instanceof FluidTankBlock)
return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); //FluidTankConnectivityHandler.isConnected(world, pos, pos.relative(direction));
return ConnectivityHandler.isConnected(world, pos, pos.relative(direction));
if (state.getBlock() instanceof ItemVaultBlock)
return ConnectivityHandler.isConnected(world, pos, pos.relative(direction)); //ItemVaultConnectivityHandler.isConnected(world, pos, pos.relative(direction));
return ConnectivityHandler.isConnected(world, pos, pos.relative(direction));
if (AllBlocks.STICKER.has(state) && state.getValue(StickerBlock.EXTENDED)) {
return direction == state.getValue(StickerBlock.FACING)
&& !isNotSupportive(world.getBlockState(pos.relative(direction)), direction.getOpposite());