diff --git a/SERVERLIST.md b/SERVERLIST.md index 58e717fb01..e4d2b6a284 100644 --- a/SERVERLIST.md +++ b/SERVERLIST.md @@ -8,7 +8,7 @@ You may want to add your server to this list. The steps for getting this done ar 1. **Ensure your server is properly moderated.** For the most part, this applies to survival servers, but PvP servers can be affected as well. You'll need to either hire some moderators, or make use of (currently non-existent) anti-grief and anti-curse plugins. *Consider enabling a rate limit:* `config messageRateLimit 2` will make it so that players can only send messages every 2 seconds, for example. -2. **Set an approppriate MOTD, name and description.** This is set with `config `. "Approppriate" means that: +2. **Set an appropriate MOTD, name and description.** This is set with `config `. "Appropriate" means that: - Your name or description must reflect the type of server you're hosting. Since new players may be exposed to the server list early on, put in a phrase like "Co-op survival" or "PvP" so players know what they're getting into. Yes, this is also displayed in the server mode info text, but having extra info in the name doesn't hurt. - Make sure players know where to refer to for server support. It should be fairly clear that the server owner is not me, but you. diff --git a/annotations/src/main/java/mindustry/annotations/impl/AssetsProcess.java b/annotations/src/main/java/mindustry/annotations/impl/AssetsProcess.java index 10e258959c..2f2234027c 100644 --- a/annotations/src/main/java/mindustry/annotations/impl/AssetsProcess.java +++ b/annotations/src/main/java/mindustry/annotations/impl/AssetsProcess.java @@ -122,11 +122,11 @@ public class AssetsProcess extends BaseProcessor{ dispose.addStatement("arc.Core.assets.unload(" + filename + ")"); dispose.addStatement(name + " = null"); - type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); + type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); }); if(classname.equals("Sounds")){ - type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); + type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), "none", Modifier.STATIC, Modifier.PUBLIC).initializer("new arc.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); } type.addMethod(loadBegin.build()); diff --git a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java index eb16e1ddf4..bf49845330 100644 --- a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java +++ b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java @@ -21,7 +21,7 @@ public class SerializeProcess extends BaseProcessor{ /** Target class name. */ private static final String className = "Serialization"; /** Name of the base package to put all the generated classes. */ - private static final String data = "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"; + private static final String data = "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"; @Override public void process(RoundEnvironment env) throws Exception{ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 77f6c736bc..070873fc32 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -39,7 +39,6 @@ be.check = Check for updates schematic = Schematic schematic.add = Save Schematic... schematics = Schematics -schematic.replace = A schematic by that name already exists. Replace it? schematic.import = Import Schematic... schematic.exportfile = Export File schematic.importfile = Import File @@ -65,7 +64,7 @@ stat.rank = Final Rank: [accent]{0} launcheditems = [accent]Launched Items launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue. map.delete = Are you sure you want to delete the map "[accent]{0}[]"? -level.highscore = High Score: [accent]{0} +level.highscore = High Score: [accent]{0}1 level.select = Level Select level.mode = Gamemode: showagain = Don't show again next session @@ -664,7 +663,7 @@ setting.borderlesswindow.name = Borderless Window[lightgray] (may require restar setting.fps.name = Show FPS & Ping setting.blockselectkeys.name = Show Block Select Keys setting.vsync.name = VSync -setting.pixelate.name = Pixelate[lightgray] (disables animations) +setting.pixelate.name = Pixelate setting.minimap.name = Show Minimap setting.position.name = Show Player Position setting.musicvol.name = Music Volume diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 602e48455c..adf50c6a94 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -59,6 +59,7 @@ stat.built = Estructuras Construidas:[accent] {0} stat.destroyed = Estructuras Destruidas:[accent] {0} stat.deconstructed = Estructuras Desconstruidas:[accent] {0} stat.delivered = Recursos Lanzados: +stat.playtime= Tiempo jugado:[accent] {0} stat.rank = Rango final: [accent]{0} launcheditems = [accent]Recursos Lanzados @@ -104,6 +105,7 @@ mods.none = [LIGHT_GRAY]No se encontraron Mods! mods.guide = Guia de Modding mods.report = Reportar Error mods.openfolder = Abrir carpeta de mods +mod. display = [greay] mod: [orange] {0} mod.enabled = [lightgray]Activado mod.disabled = [scarlet]Desactivado mod.disable = Desactivar @@ -170,6 +172,11 @@ hosts.discovering.any = Descubrir juegos server.refreshing = Actualizando servidor... hosts.none = [lightgray]¡No se han encontrado partidas LAN! host.invalid = [scarlet]No se ha podido conectar al anfitrión. + +servers.local = Servidores Locales +servers. remote = Servidores Remotos +servers.global = Global Servers + trace = Rastrear Jugador trace.playername = Nombre de jugador: [accent]{0} trace.ip = IP: [accent]{0} @@ -251,6 +258,7 @@ copylink = Copiar Enlace back = Atrás data.export = Exportar Datos data.import = Importar Datos +data.openfolder = Abrir Carpeta de Datos data.exported = Datos exportados. data.invalid = Esta data del juego no es valida. data.import.confirm = Importando los datos externos borrará[scarlet] todo[] tu progreso.\n[accent]Esto no se puede rehacer![]\n\nUna vez que los datos hayan sido importados, el juego saldrá automaticamente. @@ -261,7 +269,7 @@ quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe pu loading = [accent]Cargando... reloading = [accent]Recargando mods... saving = [accent]Guardando... -cancelbuilding = [accent][[{0}][] para impiar el plan +cancelbuilding = [accent][[{0}][] para limpiar el plan selectschematic = [accent][[{0}][] para seleccionar+copiar pausebuilding = [accent][[{0}][] para pausar la construcción resumebuilding = [scarlet][[{0}][] para resumir la construcción @@ -531,6 +539,8 @@ error.crashtitle = Un error ha ocurrido. blocks.input = Entrada blocks.output = Salida blocks.booster = Potenciador +block.tiles = Casillas Requeridas +block.affinities = Afinidades block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Capacidad de Energía blocks.powershot = Energía/Disparo @@ -665,9 +675,11 @@ setting.mutesound.name = Silenciar Sonido setting.crashreport.name = Enviar informes de fallos anónimos setting.savecreate.name = Crear puntos de guardado automáticamente setting.publichost.name = Visibilidad del juego público +setting.playerlimit.name = Limite de Jugadores setting.chatopacity.name = Opacidad del Chat setting.lasersopacity.name = Opacidad de los rayos láser -setting.playerchat.name = Mostrar el chat in-game +setting.bridgeopacity.name = Opacidad de Puentes +setting.playerchat.name = Mostrar el chat de burbuja public.confirm = ¿Quieres hacer público tu juego?\n[lightgray]Esto se puede cambiar más tarde en Configuración->Juego->Visibilidad pública del juego. public.beta = Recuerda que en las versiones beta del juego no puedes crear partidas públicas. uiscale.reset = La escala de la interfaz ha sido modificada con éxito.\nPulsa "OK" para conservar esta escala.\n[scarlet]Deshaciendo los cambios y saliendo al menu en [accent] {0}[]segundos... @@ -885,7 +897,7 @@ block.snow.name = Nieve block.craters.name = Cráteres block.sand-water.name = Agua con Arena block.darksand-water.name = Agua con Arena Oscura -block.char.name = Charbonizado +block.char.name = Carbonizado block.holostone.name = Piedra hologramatica block.ice-snow.name = Hielo Nieve block.rocks.name = Rocas @@ -926,7 +938,7 @@ block.door.name = Puerta block.door-large.name = Puerta Grande block.duo.name = Dúo block.scorch.name = Quemador -block.scatter.name = Scatter +block.scatter.name = Dispersor block.hail.name = Granizo block.lancer.name = Lancero block.conveyor.name = Cinta Transportadora @@ -942,6 +954,7 @@ block.message.name = Mensaje block.illuminator.name = Iluminador block.illuminator.description = Una fuente de luz pequeña, compacta y configurable. Requiere poder para funcionar. block.overflow-gate.name = Compuerta de Desborde +block.underflow-gate.name = Compuerta de Subdesbordamiento block.silicon-smelter.name = Horno para Silicona block.phase-weaver.name = Tejedor de Fase block.pulverizer.name = Pulverizador @@ -983,8 +996,8 @@ block.power-void.name = Vacío de energía block.power-source.name = Energía Infinita block.unloader.name = Descargador block.vault.name = Bóveda -block.wave.name = Horda -block.swarmer.name = Enjambredor +block.wave.name = Ola +block.swarmer.name = Enjambre block.salvo.name = Salva block.ripple.name = Onda block.phase-conveyor.name = Cinta Transportadora de Fase @@ -1057,7 +1070,7 @@ unit.revenant.name = Revenante unit.eruptor.name = Erupcionador unit.chaos-array.name = Matriz del caos unit.eradicator.name = Erradicador -unit.lich.name = Lich +unit.lich.name = Exánime unit.reaper.name = Segador tutorial.next = [lightgray] tutorial.intro = Has entrado en el[scarlet]Tutorial de Mindustry.[]\nComienza[accent]minando cobre[]. Toca en una veta de cobre cercana al núcleo para hacer esto.\n\n[accent]{0}/{1} cobre @@ -1172,6 +1185,7 @@ block.inverted-sorter.description = Procesa elementos como un clasificador está block.router.description = Acepta objetos de una dirección y deja objetos equitativamente en hasta 3 direcciones diferentes. Útil para dividir los materiales de una fuente de recursos a múltiples objetivos. block.distributor.description = Un enrutador avanzado que distribuye objetos equitativamente en hasta otras 7 direcciones. block.overflow-gate.description = Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena. +block.underflow-gate.description = El opuesto de la compuerda de desborde. Solo dispensa hacia el frente si los lados están bloqueados. block.mass-driver.description = El mejor bloque de transorte. Recoge varios objetos y los dispara a otro conductor de masa en un largo rango. block.mechanical-pump.description = Una bomba barata con extracción lenta, pero sin uso de energía. block.rotary-pump.description = Una bomba avanzada. Bombea más líquido, pero requiere energía. @@ -1199,13 +1213,13 @@ block.solar-panel.description = Proporciona una pequeña cantidad de energía pr block.solar-panel-large.description = Genera un mucho mejor suministro de energía que un panel solar estándar, pero también es mucho más caro de construir. block.thorium-reactor.description = Genera grandes cantidades de energía del torio altamente radioactivo. Necesita enfriamiento constante. Explotará violentamente si no se le aporta suficiente enfriamiento. block.impact-reactor.description = Un generador avanzado, capaz de crear cantidades masivas de energía a máxima eficiencia. Requiere una cantidad significante de energía para impulsar el comienzo del proceso. -block.mechanical-drill.description = Un taladro barato. Cuando es colocado en casillas apropiadas, extrae objetos lentamente de forma indefinida. -block.pneumatic-drill.description = Un taladro mejorado que es más rápido y puede obtener minerales más duros usando la presión. +block.mechanical-drill.description = Un taladro barato. Cuando es colocado en casillas apropiadas, extrae objetos lentamente de forma indefinida. Solo es capaz de minar recursos básicos. +block.pneumatic-drill.description = Un taladro mejorado, es capaz de minar titanio más rápido que un taladro mécanico. block.laser-drill.description = Permite obtener minerales incluso más rápido con la tecnología láser, pero requiere energía. Además, se puede obtener torio radioactivo con este taladro. block.blast-drill.description = El mejor taladro. Requiere grandes cantidades de energía. block.water-extractor.description = Extrae agua de la tierra. Úsalo cuando no haya lagos cercanos. -block.cultivator.description = Cultiva la tierra para obtener biomateria. -block.oil-extractor.description = Usa grandes cantidades de energía para extraer aceite de la arena. Úsalo cuando no hay fuentes directas de aceite cerca. +block.cultivator.description = Cultiva concentraciones de esporas en la atmosfera a vainas. +block.oil-extractor.description = Usa grandes cantidades de energía, arena y agua para obtener petróleo. Úsalo cuando no hay fuentes directas de petróleo cerca. block.core-shard.description = La primera iteración de la cápsula del núcleo. Una vez destruido, todo el contacto con la región es perdido. No permitas que esto ocurra. block.core-foundation.description = La segunda versión del núcleo. Mejor blindado. Almacena más recursos. block.core-nucleus.description = La tercera y última iteración de la cápsula del núcleo. Muy bien blindado. Almacena cantidades masivas dde recursos. @@ -1214,30 +1228,30 @@ block.container.description = Almacena una pequeña cantidad de objetos. Úsalo block.unloader.description = Descarga objetos de un contenedor, almacén o el núcleo a un transportador o directamente a un bloque adyacente. El tipo de objeto descargado puede ser cambiado tocando el descagador. block.launch-pad.description = Lanza paquetes de recursos sin necesitar lanzar con el núcleo. block.launch-pad-large.description = Una versión mejorada del pad de lanzamiento. Almacena más recursos y los lanza más frecuentemente. -block.duo.description = Una torre pequeña y barata. -block.scatter.description = Una torreta antiaérea de tamaño medio. Dispara fuego aéreo de plomo o chatarra a las unidades enemigas. +block.duo.description = Una torre pequeña y barata. Útil contra enemigos terrestres. +block.scatter.description = Una torreta escencial antiaérea de tamaño medio. Dispara fuego anti-aéreo de plomo o chatarra a las unidades enemigas. block.scorch.description = Quema a cualquier enemigo terrestre cercano a él. Altamente efectivo a corto alcance. -block.hail.description = Una torre de artillería pequeña. -block.wave.description = Una torre de tamaño mediano que dispara burbujas de líquido. -block.lancer.description = Una torre de tamaño mediano que dispara rayos cargados eléctricamente. -block.arc.description = Una torre pequeña que disapra electricidad en un arco aleatorio al enemigo. -block.swarmer.description = Una torre de tamaño mediano que dispara misiles en grupo. -block.salvo.description = Una torre de tramaño mediano que dispara balas en salvos. -block.fuse.description = Una torre grande que dispara rayos poderosos de corto alcance. -block.ripple.description = Una torre de artillería grande que dispara varios disparos simultáneamente. -block.cyclone.description = Una torre de disparo rápido grande. -block.spectre.description = Una torre grande que dispara dos balas poderosas de una vez. -block.meltdown.description = Una torre grande que dispara rayos poderosos de largo alcance. +block.hail.description = Una torre de artillería pequeña de largo alcance. +block.wave.description = Una torre de tamaño mediano. Dispara chorros de líquido a enemigos. Automaticamente apaga fuegos cuando recibe agua. +block.lancer.description = Una torre láser anti-terrestre de tamaño mediano. Dispara y carga poderosos rayos de energía. +block.arc.description = Una pequeña torre eléctrica de rango corto. Dispara arcos de electricidad a los enemigos. +block.swarmer.description = Una torre de tamaño mediano que dispara misiles. Ataca a aire y tierra. Dispara misiles teledirigidos. +block.salvo.description = Una versión más grande y avanzada dela torre dúo. Dispara salvas rápidas al enemigo +block.fuse.description = Una torre grande de energía de corto alcance. Dispara tres rayos perforantes a enemigos cercanos. +block.ripple.description = Una extramadamente poderosa torre. Dispara conjuntos de balas a los enemigos en grandes distancias. +block.cyclone.description = Una torre grande anti-aérea y anti-terrestre. Dispara conjuntos explosivos de Flak a enemigos cercanos. +block.spectre.description = Un cañon masivo de dos barriles. Dispara balas perforantes a objetivos de aire y tierra. +block.meltdown.description = Un cañon láser masivo. Carga y dispara un rayo láser constante a enemigos cercanos. Requiere enfriamiento para operar. block.command-center.description = Emite comandos de movimiento a las unidades aliadas en el mapa.\nHace que las unidades patrullen, ataquen un núcleo enemigo o se retiren al núcleo / fábrica. When no enemy core is present, units will default to patrolling under the attack command. -block.draug-factory.description = Producedrones mineros primitivos. -block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques. -block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu. +block.draug-factory.description = Produce drones mineros primitivos. +block.spirit-factory.description = Produce drones ligeros que reparan bloques. +block.phantom-factory.description = Produce drones avanzados de construcción. block.wraith-factory.description = Produce unidades aéreas rápidas e interceptoras. block.ghoul-factory.description = Produce unidades bombarderas pesadas. -block.revenant-factory.description = Produce unidades terrestres láser pesadas. +block.revenant-factory.description = Produce unidades aéreas lanzamisiles pesadas. block.dagger-factory.description = Produce unidades terrestres básicas. -block.crawler-factory.description = Produces fast self-destructing swarm units. -block.titan-factory.description = Produce unidades terrestres avanzadas. +block.crawler-factory.description = Produce unidades rápidas terrestres explosivas. +block.titan-factory.description = Produce unidades terrestres avanzadas con armadura. block.fortress-factory.description = Produce unidades terrestres de artillería pesada. block.repair-point.description = Repara la unidad dañada más cercana a su alrededor. block.dart-mech-pad.description = Proporciona transformación en un mecanoide de ataque básico.\nÚsalo tocándolo mientras estés en él. diff --git a/core/assets/bundles/bundle_pt_PT.properties b/core/assets/bundles/bundle_pt_PT.properties index f845f98200..fa2a0fcfd3 100644 --- a/core/assets/bundles/bundle_pt_PT.properties +++ b/core/assets/bundles/bundle_pt_PT.properties @@ -59,6 +59,7 @@ stat.built = Construções construídas:[accent] {0} stat.destroyed = Construções destruídas:[accent] {0} stat.deconstructed = Construções desconstruídas:[accent] {0} stat.delivered = Recursos lançados: +stat.playtime = Tempo jogado:[accent] {0} stat.rank = Rank Final: [accent]{0} launcheditems = [accent]Itens lançados @@ -103,7 +104,8 @@ mods = Mods mods.none = [LIGHT_GRAY]Mods não encontrados! mods.guide = Guia de mods mods.report = Reportar Bug -mods.openfolder = Open Mod Folder +mods.openfolder = Abrir pasta de Mods +mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Ativado mod.disabled = [scarlet]Desativado mod.disable = Desativar @@ -167,9 +169,14 @@ hosting = [accent]Abrindo servidor... hosts.refresh = Atualizar hosts.discovering = Descobrindo jogos em lan hosts.discovering.any = Descobrindo jogos -server.refreshing = Atualizando servidor +server.refreshing = A atualizar servidor hosts.none = [lightgray]Nenhum jogo lan encontrado! host.invalid = [scarlet]Não foi possivel Hospedar. + +servers.local = Servidores Locais +servers.remote = Servidores Remotos +servers.global = Servidores Globais + trace = Traçar jogador trace.playername = Nome do jogador: [accent]{0} trace.ip = IP: [accent]{0} @@ -251,6 +258,7 @@ copylink = Copiar ligação back = Voltar data.export = Exportar dados data.import = Importar dados +data.openfolder = Abrir pasta de dados data.exported = Dados exportados. data.invalid = Estes dados de jogo não são válidos. data.import.confirm = Importar dados externos irá deletar[scarlet] todos[] os seus dados atuais.\n[accent]Isso não pode ser desfeito![]\n\nQuando sua data é importada, seu jogo ira sair imediatamente. @@ -530,6 +538,8 @@ error.title = [crimson]Ocorreu um Erro. error.crashtitle = Ocorreu um Erro blocks.input = Entrada blocks.output = Saida +blocks.tiles = Telhas Requeridas +blocks.affinities = Afinidades blocks.booster = Booster block.unknown = [LIGHT_GRAY]??? blocks.powercapacity = Capacidade de Energia @@ -641,14 +651,14 @@ setting.difficulty.insane = Insano setting.difficulty.name = Dificuldade setting.screenshake.name = Balanço do Ecrã setting.effects.name = Efeitos -setting.destroyedblocks.name = Display Destroyed Blocks -setting.conveyorpathfinding.name = Conveyor Placement Pathfinding -setting.coreselect.name = Allow Schematic Cores +setting.destroyedblocks.name = Mostrar Blocos Destruidos +setting.conveyorpathfinding.name = Localização do caminho do transportador +setting.coreselect.name = Permitir cores esquemáticas setting.sensitivity.name = Sensibilidade do Controle setting.saveinterval.name = Intervalo de autogravamento setting.seconds = {0} Segundos -setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} milliseconds +setting.blockselecttimeout.name = Tempo limite de seleção do bloco +setting.milliseconds = {0} milissegundos setting.fullscreen.name = Ecrã inteiro setting.borderlesswindow.name = Janela sem borda[LIGHT_GRAY] (Pode precisar reiniciar) setting.fps.name = Mostrar FPS @@ -665,8 +675,10 @@ setting.mutesound.name = Desligar Som setting.crashreport.name = Enviar denuncias de crash anonimas setting.savecreate.name = Criar gravamentos automaticamente setting.publichost.name = Visibilidade do jogo público +setting.playerlimit.name = Limite de Jogadores setting.chatopacity.name = Opacidade do chat setting.lasersopacity.name = Opacidade do Power Laser +setting.bridgeopacity.name = Opacidade da Ponte setting.playerchat.name = Mostrar chat em jogo public.confirm = Queres que o teu jogo fique publico?\n[accent]Qualquer jogador vai conseguir juntar-se ao teu jogo.\n[lightgray]Isto pode ser alterado mais tarde in Settings->Game->Public Game Visibility. public.beta = Observe que as versões beta do jogo não podem criar lobbies públicos. @@ -942,6 +954,7 @@ block.message.name = Mensagem block.illuminator.name = Illuminator block.illuminator.description = A small, compact, configurable light source. Requires power to function. block.overflow-gate.name = Portão Sobrecarregado +block.underflow-gate.name = Portão Desobrecarregado block.silicon-smelter.name = Fundidora de silicio block.phase-weaver.name = Palheta de fase block.pulverizer.name = Pulverizador @@ -1130,7 +1143,7 @@ block.phase-weaver.description = Produz tecido de fase usando tório radioativo block.alloy-smelter.description = Combina titânio, chumbo, silicio e cobre para produzir liga de surto. block.cryofluidmixer.description = Mistura água e pó fino de titânio para produzir criofluido. Essencial para o uso do reator a tório. block.blast-mixer.description = Quebra e mistura aglomerados de esporos com piratita para produzir composto de explosão. -block.pyratite-mixer.description = Mistura carvão, cobre e areia em piratita altamente inflamável +block.pyratite-mixer.description = Mistura carvão, chumbo e areia em piratita altamente inflamável block.melter.description = Derrete sucata em escória para processamento posterior ou uso em torretas. block.separator.description = Separa escória em seus minerais componentes, oferece o resultado refriado. block.spore-press.description = Comprime cápsulas de esporos em petróleo. @@ -1172,6 +1185,7 @@ block.inverted-sorter.description = Processes items like a standard sorter, but block.router.description = Aceita itens de uma direção e os divide em 3 direções igualmente. Util para espalhar materiais da fonte para multiplos alvos. block.distributor.description = Um roteador avancada que espalhas os itens em 7 outras direções igualmente. block.overflow-gate.description = Uma combinação de roteador e divisor Que apenas manda para a esquerda e Direita se a frente estiver bloqueada. +block.underflow-gate.description = O oposto de um portão de transbordamento. Saídas para a frente se os caminhos esquerdo e direito estiverem bloqueados. block.mass-driver.description = Bloco de transporte de itens supremo. Coleta itens severos e atira eles em outro mass driver de uma longa distancia. block.mechanical-pump.description = Uma bomba barata com baixa saída de líquidos, mas sem consumo de energia. block.rotary-pump.description = Uma bomba avançada. Bombeia mais líquido, mas requer energia. @@ -1246,4 +1260,4 @@ block.tau-mech-pad.description = Deixe sua atual embarcação e mude para o meca block.omega-mech-pad.description = Deixe sua atual embarcação e mude para o volumoso e bem armadurado meca feito para ataques da primeira linha.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. block.javelin-ship-pad.description = Deixe sua atual embarcação e mude para um interceptador forte e rapido com armas de raio.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. block.trident-ship-pad.description = Deixe sua atual embarcação e mude para um bombardeiro resionavelmente bem armadurado.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. -block.glaive-ship-pad.description = Deixe sua atual embarcação e mude para grande, bem armadurada nave de combate.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. +block.glaive-ship-pad.description = Deixe sua atual embarcação e mude para grande, bem armadurada nave de combate.\nUse o pad clicando duas vezes em cima enquando fica em cima dele. \ No newline at end of file diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index f388a78ece..ecc89ae388 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -29,17 +29,17 @@ load.system = Sistem load.mod = Modlar load.scripts = Scripts -be.update = A new Bleeding Edge build is available: -be.update.confirm = Download it and restart now? -be.updating = Updating... -be.ignore = Ignore -be.noupdates = No updates found. -be.check = Check for updates +be.update = Yeni bir erken erişim sürümü var: +be.update.confirm = Yüklenip yeniden başlatılsın mı? +be.updating = Yeni sürüm yükleniyor... +be.ignore = Hayır +be.noupdates = Yeni güncelleme bulunamadı. +be.check = Güncellemeleri kontrol et schematic = Şema schematic.add = Şemayı Kaydet... schematics = Şemalar -schematic.replace = A schematic by that name already exists. Replace it? +schematic.replace = Aynı isimde bir şema zaten var. Üzerine yazılsın mı? schematic.import = Şema İçeri Aktar... schematic.exportfile = Dışa Aktar schematic.importfile = İçe Aktar @@ -49,8 +49,8 @@ schematic.copy.import = Panodan İçeri Aktar schematic.shareworkshop = Workshop'ta Kaydet schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Şemayı döndür schematic.saved = Şema Kaydedildi. -schematic.delete.confirm = Bu şema tamamen yokedilecek. -schematic.rename = Şemayı yeniden Adlandır +schematic.delete.confirm = Bu şema tamamen yok edilecek. +schematic.rename = Şemayı yeniden adlandır schematic.info = {0}x{1}, {2} blok stat.wave = Yenilen Dalgalar:[accent] {0} @@ -70,7 +70,7 @@ level.mode = Oyun Modu: showagain = Bir daha gösterme coreattack = < Merkez saldırı altında! > nearpoint = [[ [scarlet]İNİŞ PİSTİNDEN AYRIL[] ]\nimha tehlikesi -database = Ana Veritabanı +database = Çekirdek Veritabanı savegame = Oyunu Kaydet loadgame = Oyunu Yükle joingame = Oyuna Katıl @@ -95,7 +95,7 @@ uploadingcontent = İçerik Yükleniyor uploadingpreviewfile = Önizleme Dosyası Yükleniyor committingchanges = Değişiklikler Uygulanıyor done = Bitti -feature.unsupported = Your device does not support this feature. +feature.unsupported = Cihazınızda bu özellik desteklenmemektedir. mods.alphainfo = Modların alfa aşamasında olduğunu ve [scarlet]oldukça hatalı olabileceklerini[] unutmayın.\nBulduğunuz sorunları Mindustry GitHub'ı veya Discord'una bildirin. mods.alpha = [accent](Alpha) @@ -103,29 +103,29 @@ mods = Modlar mods.none = [LIGHT_GRAY]Hiç mod bulunamadı! mods.guide = Mod Rehberi mods.report = Hata bildir -mods.openfolder = Open Mod Folder +mods.openfolder = Mod klasörünü aç mod.enabled = [lightgray]Etkin mod.disabled = [scarlet]Devre Dışı mod.disable = Devre Dışı Bırak -mod.delete.error = Unable to delete mod. File may be in use. -mod.requiresversion = [scarlet]Requires min game version: [accent]{0} -mod.missingdependencies = [scarlet]Missing dependencies: {0} -mod.erroredcontent = [scarlet]Content Errors -mod.errors = Errors have occurred loading content. -mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. -mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled. +mod.delete.error = Mod silinemiyor. Dosya kullanımda olabilir. +mod.requiresversion = [scarlet]Gereken en düşük oun versiyonu: [accent]{0} +mod.missingdependencies = [scarlet]Bu modun çalışması için gereken modlar: {0} +mod.erroredcontent = [scarlet]İçerik hatası. +mod.errors = İçerik yüklenirken bir hata oluştu. +mod.noerrorplay = [scarlet]Hatalı modlarınız var.[] Oynamadan önce bu modları devre dışı bırakın veya dosyadaki hataları düzeltin. +mod.nowdisabled = [scarlet]'{0}' modunun çalışması için gerekli olan modlardan bazıları bulunamadı:[accent] {1}\n[lightgray]Önce bu modların indirilmesi gerekmektedir.\nBu mod otomatik olarak devre dışı bırakılacaktır. mod.enable = Etkinleştir mod.requiresrestart = Oyun mod değişikliklerini uygulamak için kapatılacak. mod.reloadrequired = [scarlet]Yeniden Yükleme Gerekli mod.import = Mod İçeri Aktar mod.import.github = GitHub Modu İçeri Aktar -mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. +mod.item.remove = Bu eşya[accent] '{0}'[] modunun bir parçası. Kaldırmak için modu silebilirsiniz. mod.remove.confirm = Bu mod silinecek. mod.author = [LIGHT_GRAY]Yayıncı:[] {0} mod.missing = Bu kayıt yakın zamanda güncellediğiniz ya da artık yüklü olmayan modlar içermekte. Kayıt bozulmaları yaşanabilir. Kaydı yüklemek istediğinizden emin misiniz?\n[lightgray]Modlar:\n{0} mod.preview.missing = Bu modu atölyede yayınlamadan önce bir resim önizlemesi eklemelisiniz.\nMod dosyasına [accent]preview.png[] adlı bir resim yerleştirin ve tekrar deneyin. mod.folder.missing = Atölyede sadece klasör halindeki modlar yayınlanabilir.Bir modu klasöre çevirmek için, sadece mod dosyalarını bir klasöre çıkarın ve eski sıkıştırılmış dosyayı silin, sonra da oyunu tekrar başlatın ya da modlarınızı tekrar yükleyin. -mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly. +mod.scripts.unsupported = Cihazınız bazı betik dosyalarını desteklemiyor. Bazı modlar düzgün çalışmayabilir. about.button = Hakkında name = İsim: @@ -155,7 +155,7 @@ server.kicked.nameEmpty = Seçtiğin isim geçersiz. server.kicked.idInUse = Zaten bu sunucudasın! İki hesapla bir sunucuya bağlanamazsın. server.kicked.customClient = Bu sunucu özel sürümleri kabul etmiyor. Resmi bir sürüm indir. server.kicked.gameover = Oyun bitti! -server.kicked.serverRestarting = The server is restarting. +server.kicked.serverRestarting = Sunucu yeniden başlatılıyor. server.versions = Kullandığın surum:[accent] {0}[]\nSunucunun sürümü:[accent] {1}[] host.info = [accent]host[], [scarlet]6567[] portunda bir sunucuya ev sahipliği yapıyor. \nAynı [lightgray]wifi veya yerel ağdaki[] herkes sunucu listelerinde senin sunucunu görebiliyor olmalı.\n\nEğer diğerlerinin herhangi bir yerden IP ile bağlanabilmesini istiyorsan [accent]port yönlendirmesi[] gerekli.\n\n[lightgray]Not: Eğer birisi senin yerel ağ oyununa katılmakta sorun yaşıyorsa güvenlik duvarı ayarlarında Mindustry'ye yerel ağ bağlantısı izni verdiğinden emin olun. Halka açık ağların zaman zaman sunucu aramaya engel olduğunu unutmayın. join.info = Burada, bağlanmak istediğin sunucunun [accent]IP[] adresini girebilir veya [accent]yerel ağ[] sunucularını görebilirsin..\nHem yerel ağ hem de geniş alan ağı çoklu oyuncu için destekleniyor.\n\n[lightgray]Not: Otomatik bir global sunucu listesi yok; eğer birisine IP adresi kullanarak bağlanmak istiyorsan IP adresini istemelisin. @@ -289,12 +289,12 @@ map.publish.confirm = Bu haritayı yayınlamak istediğinize emin misiniz?\n[lig workshop.menu = Select what you would like to do with this item. workshop.info = Nesne Açıklaması changelog = Değişim Listesi (isteğe bağlı): -eula = Steam EULA -missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. +eula = Steam Kullanıvı Sözleşmesi +missing = Bu eşya silinmiş veya taşınmış.\n[lightgray]Workshop listesinden kaldırıldı. publishing = [accent]Yayınlanıyor... -publish.confirm = Bunu yayınlamak istediğinize emin misiniz?\n[lightgray]önce Atölye EULA'sına uyduğunuza emin olun, yoksa yapıtlarınız gözükmeyecektir! +publish.confirm = Bunu yayınlamak istediğinize emin misiniz?\n[lightgray]önce Atölye Sözleşmesine uyduğunuza emin olun, yoksa yapıtlarınız gözükmeyecektir! publish.error = Nesneyi yayınlarken hata oluştu: {0} -steam.error = Failed to initialize Steam services.\nError: {0} +steam.error = Steam hatası.\nHata kodu: {0} editor.brush = Fırça editor.openin = Düzenleyici'de Aç @@ -530,7 +530,7 @@ error.title = [crimson]Bir hata oldu error.crashtitle = Bir hata oldu blocks.input = Giriş blocks.output = Çıkış -blocks.booster = Booster +blocks.booster = Güçlendirici block.unknown = [lightgray]??? blocks.powercapacity = Enerji Kapasitesi blocks.powershot = Enerji/Atış @@ -652,7 +652,7 @@ setting.milliseconds = {0} milliseconds setting.fullscreen.name = Tam Ekran setting.borderlesswindow.name = Kenarsız Pencere[lightgray] (yeniden açmak gerekebilir) setting.fps.name = FPS Göster -setting.blockselectkeys.name = Show Block Select Keys +setting.blockselectkeys.name = Blok seçim tüşlarını göster setting.vsync.name = VSync setting.pixelate.name = Pixelleştir[lightgray] (animasyonları kapatır) setting.minimap.name = Haritayı Göster @@ -681,7 +681,7 @@ category.multiplayer.name = Çok Oyunculu command.attack = Saldır command.rally = Toplan command.retreat = Geri Çekil -placement.blockselectkeys = \n[lightgray]Key: [{0}, +placement.blockselectkeys = \n[lightgray]Tuş: [{0}, keybind.clear_building.name = Binayı Temizle keybind.press = Bir tuşa basın... keybind.press.axis = Bir tuşa ya da yöne basın... @@ -695,22 +695,22 @@ keybind.schematic_select.name = Bölge Seç keybind.schematic_menu.name = Şema Menüsü keybind.schematic_flip_x.name = Şemayı X ekseninde Döndür keybind.schematic_flip_y.name = Şemayı Y Ekseninde Döndür -keybind.category_prev.name = Previous Category -keybind.category_next.name = Next Category -keybind.block_select_left.name = Block Select Left -keybind.block_select_right.name = Block Select Right -keybind.block_select_up.name = Block Select Up -keybind.block_select_down.name = Block Select Down -keybind.block_select_01.name = Category/Block Select 1 -keybind.block_select_02.name = Category/Block Select 2 -keybind.block_select_03.name = Category/Block Select 3 -keybind.block_select_04.name = Category/Block Select 4 -keybind.block_select_05.name = Category/Block Select 5 -keybind.block_select_06.name = Category/Block Select 6 -keybind.block_select_07.name = Category/Block Select 7 -keybind.block_select_08.name = Category/Block Select 8 -keybind.block_select_09.name = Category/Block Select 9 -keybind.block_select_10.name = Category/Block Select 10 +keybind.category_prev.name = Önceki Kategori +keybind.category_next.name = Sonraki Kategori +keybind.block_select_left.name = Sol Blok Seçimi +keybind.block_select_right.name = Sağ Blok Seçimi +keybind.block_select_up.name = Yukarı Blok Seçimi +keybind.block_select_down.name = Aşağı Blok Seçimi +keybind.block_select_01.name = Kategori 1 +keybind.block_select_02.name = Kategori 2 +keybind.block_select_03.name = Kategori 3 +keybind.block_select_04.name = Kategori 4 +keybind.block_select_05.name = Kategori 5 +keybind.block_select_06.name = Kategori 6 +keybind.block_select_07.name = Kategori 7 +keybind.block_select_08.name = Kategori 8 +keybind.block_select_09.name = Kategori 9 +keybind.block_select_10.name = Kategori 10 keybind.fullscreen.name = Tam Ekran keybind.select.name = Seç/Ateş Et keybind.diagonal_placement.name = Çapraz Yerleştirme @@ -718,7 +718,7 @@ keybind.pick.name = Blok Seç keybind.break_block.name = Blok Kır keybind.deselect.name = Seçimleri Kaldır keybind.shoot.name = Ateş Et -keybind.zoom.name = Zum +keybind.zoom.name = Yakınlaştırma/Uzaklaştırma keybind.menu.name = Menü keybind.pause.name = Durdur keybind.pause_building.name = İnşaatı Duraklat/İnşaata Devam Et @@ -732,8 +732,8 @@ keybind.toggle_menus.name = Menüleri Aç/Kapa keybind.chat_history_prev.name = Sohbet geçmişi önceki keybind.chat_history_next.name = Sohbet geçmişi sonraki keybind.chat_scroll.name = Sohbet Kaydırma -keybind.drop_unit.name = Drop Unit -keybind.zoom_minimap.name = Mini Haritada Zum +keybind.drop_unit.name = Birlik Düşürme +keybind.zoom_minimap.name = Mini Haritada Yakınlaştırma/Uzaklaştırma mode.help.title = Modların açıklamaları mode.survival.name = Hayatta Kalma mode.survival.description = Normal oyun oyun modu. Kaynak sınırlı ve dalgalar otomatik olarak gönderilir.\n[gray]Oynamak için haritada düşman doğma noktaları olması gerekir. @@ -747,7 +747,7 @@ mode.attack.description = Düşman üssünü yok et. Dalga yok.\n[gray]Oynamak i mode.custom = Özel Kurallar rules.infiniteresources = Sınırsız Kaynaklar -rules.reactorexplosions = Reactor Explosions +rules.reactorexplosions = Reaktör Patlamaları rules.wavetimer = Dalga Zamanlayıcısı rules.waves = Dalgalar rules.attack = Saldırı Modu @@ -755,7 +755,7 @@ rules.enemyCheat = Sonsuz AI (Kırmızı Takım) Kaynakları rules.unitdrops = Unit Drops rules.unitbuildspeedmultiplier = Birim Üretim Hızı Çarpanı rules.unithealthmultiplier = Birim Canı Çarpanı -rules.blockhealthmultiplier = Block Health Multiplier +rules.blockhealthmultiplier = Blok Canı Çarpanı rules.playerhealthmultiplier = Oyuncu Canı Çarpanı rules.playerdamagemultiplier = Oyuncu Hasarı Çarpanı rules.unitdamagemultiplier = Birim Hasarı Çapanı @@ -773,10 +773,10 @@ rules.title.respawns = Tekrar Canlanmalar rules.title.resourcesbuilding = Kaynaklar & İnşa rules.title.player = Oyuncular rules.title.enemy = Düşmanlar -rules.title.unit = Unitler -rules.title.experimental = Experimental -rules.lighting = Lighting -rules.ambientlight = Ambient Light +rules.title.unit = Birlikler +rules.title.experimental = Deneysel +rules.lighting = Işıklandırma +rules.ambientlight = Ortam Işığı content.item.name = Eşyalar content.liquid.name = Sıvılar @@ -824,7 +824,7 @@ mech.trident-ship.name = Trident mech.trident-ship.weapon = Bomba Bölmesi mech.glaive-ship.name = Glaive mech.glaive-ship.weapon = Alevli Makineli Tüfek -item.corestorable = [lightgray]Storable in Core: {0} +item.corestorable = [lightgray]Çekirdekte depolanabilir mi?: {0} item.explosiveness = [lightgray]Patlama: {0}% item.flammability = [lightgray]Yanıcılık: {0}% item.radioactivity = [lightgray]Radyoaktivite: {0}% diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index db38a26842..bb89ba513c 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -105,6 +105,7 @@ mods.none = [LIGHT_GRAY]没有找到模组! mods.guide = 模组教程 mods.report = 报告 Bug mods.openfolder = 打开模组文件夹 +mod.display = [gray]模组:[orange] {0} mod.enabled = [lightgray]已启用 mod.disabled = [scarlet]已禁用 mod.disable = 禁用 @@ -171,6 +172,11 @@ hosts.discovering.any = 正在搜索服务器 server.refreshing = 正在刷新服务器 hosts.none = [lightgray]未发现局域网游戏! host.invalid = [scarlet]无法连接服务器。 + +servers.local = 本地服务器 +servers.remote = 远程服务器 +servers.global = 全球服务器 + trace = 跟踪玩家 trace.playername = 玩家名称:[accent]{0} trace.ip = IP 地址:[accent]{0} @@ -252,6 +258,7 @@ copylink = 复制链接 back = 返回 data.export = 导出数据 data.import = 导入数据 +data.openfolder = 打开数据文件夹 data.exported = 数据已导出。 data.invalid = 非有效游戏数据。 data.import.confirm = 导入外部游戏数据将覆盖本地[scarlet]全部[]的游戏数据。\n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。 @@ -532,6 +539,8 @@ error.crashtitle = 发生了一个错误 blocks.input = 输入 blocks.output = 输出 blocks.booster = 增强物品/液体 +blocks.tiles = 所需地型 +blocks.affinities = 相关 block.unknown = [lightgray]??? blocks.powercapacity = 能量容量 blocks.powershot = 能量/发射 @@ -666,6 +675,7 @@ setting.mutesound.name = 无音效 setting.crashreport.name = 发送匿名的崩溃报告 setting.savecreate.name = 自动创建存档 setting.publichost.name = 游戏公开可见 +setting.playerlimit.name = 玩家限制 setting.chatopacity.name = 聊天界面不透明度 setting.lasersopacity.name = 能量激光不透明度 setting.bridgeopacity.name = 桥梁不透明度 diff --git a/core/assets/contributors b/core/assets/contributors index afe1bc3b45..76ffbb2736 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -85,3 +85,4 @@ Draco Quezler Alicila Daniel Dusek +DeltaNedas diff --git a/core/assets/fonts/font.ttf b/core/assets/fonts/font.ttf index 9d7390954d..915f1dfe54 100644 Binary files a/core/assets/fonts/font.ttf and b/core/assets/fonts/font.ttf differ diff --git a/core/assets/fonts/fontello.ttf b/core/assets/fonts/fontello.ttf deleted file mode 100644 index 7eaf076f22..0000000000 Binary files a/core/assets/fonts/fontello.ttf and /dev/null differ diff --git a/core/src/mindustry/ClientLauncher.java b/core/src/mindustry/ClientLauncher.java index d1819b3a8f..fd94c323aa 100644 --- a/core/src/mindustry/ClientLauncher.java +++ b/core/src/mindustry/ClientLauncher.java @@ -33,6 +33,8 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform @Override public void setup(){ + Events.fire(new ClientCreateEvent()); + Vars.loadLogger(); Vars.loadFileLogger(); Vars.platform = this; diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 0a15536cc4..c483e8cb26 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -102,6 +102,7 @@ public class NetClient implements ApplicationListener{ state.set(State.menu); logic.reset(); platform.updateRPC(); + player.name = Core.settings.getString("name"); if(quiet) return; diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index bf0e7bc5f6..79c7c4f9a3 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -270,7 +270,7 @@ public class Renderer implements ApplicationListener{ drawAllTeams(true); Draw.flush(); - if(bloom != null && !pixelator.enabled()){ + if(bloom != null){ bloom.capture(); } @@ -278,7 +278,7 @@ public class Renderer implements ApplicationListener{ effectGroup.draw(); Draw.flush(); - if(bloom != null && !pixelator.enabled()){ + if(bloom != null){ bloom.render(); } @@ -417,11 +417,6 @@ public class Renderer implements ApplicationListener{ return; } - boolean hadShields = Core.settings.getBool("animatedshields"); - boolean hadWater = Core.settings.getBool("animatedwater"); - Core.settings.put("animatedwater", false); - Core.settings.put("animatedshields", false); - FrameBuffer buffer = new FrameBuffer(w, h); float vpW = camera.width, vpH = camera.height, px = camera.position.x, py = camera.position.y; @@ -453,9 +448,6 @@ public class Renderer implements ApplicationListener{ ui.showInfoFade(Core.bundle.format("screenshot", file.toString())); buffer.dispose(); - - Core.settings.put("animatedwater", hadWater); - Core.settings.put("animatedshields", hadShields); } } diff --git a/core/src/mindustry/entities/traits/BuilderTrait.java b/core/src/mindustry/entities/traits/BuilderTrait.java index a05fc685ec..80176eac1a 100644 --- a/core/src/mindustry/entities/traits/BuilderTrait.java +++ b/core/src/mindustry/entities/traits/BuilderTrait.java @@ -1,14 +1,15 @@ package mindustry.entities.traits; import arc.*; -import arc.struct.Queue; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; +import arc.struct.Queue; import arc.util.ArcAnnotate.*; import arc.util.*; import mindustry.*; import mindustry.content.*; +import mindustry.entities.type.TileEntity; import mindustry.entities.type.*; import mindustry.game.EventType.*; import mindustry.gen.*; @@ -21,7 +22,7 @@ import java.io.*; import java.util.*; import static mindustry.Vars.*; -import static mindustry.entities.traits.BuilderTrait.BuildDataStatic.*; +import static mindustry.entities.traits.BuilderTrait.BuildDataStatic.tmptr; /** Interface for units that build things.*/ public interface BuilderTrait extends Entity, TeamTrait{ @@ -74,6 +75,9 @@ public interface BuilderTrait extends Entity, TeamTrait{ buildQueue().removeFirst(); return; } + }else if(tile.getTeam() != getTeam()){ + buildQueue().removeFirst(); + return; } if(tile.entity instanceof BuildEntity && !current.initialized){ diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index 365e8f2b7c..e82423f051 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -92,6 +92,10 @@ public class EventType{ } } + public static class ClientCreateEvent{ + + } + /** Called when the client game is first loaded. */ public static class ClientLoadEvent{ diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 62479c66ec..7a972779b7 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -98,6 +98,7 @@ public class Teams{ /** Do not modify. */ public Array getActive(){ + active.removeAll(t -> !t.active()); return active; } @@ -167,6 +168,14 @@ public class Teams{ public CoreEntity core(){ return cores.first(); } + + @Override + public String toString(){ + return "TeamData{" + + "cores=" + cores + + ", team=" + team + + '}'; + } } /** Represents a block made by this team that was destroyed somewhere on the map. diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index 41274e0349..a6455a03d6 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -168,7 +168,6 @@ public class BlockRenderer implements Disposable{ shadowEvents.clear(); Draw.proj(camera.projection()); - renderer.pixelator.rebind(); } float ww = world.width() * tilesize, wh = world.height() * tilesize; diff --git a/core/src/mindustry/graphics/Pixelator.java b/core/src/mindustry/graphics/Pixelator.java index f746ca69e3..8b8fce9786 100644 --- a/core/src/mindustry/graphics/Pixelator.java +++ b/core/src/mindustry/graphics/Pixelator.java @@ -28,10 +28,6 @@ public class Pixelator implements Disposable{ camera.width = (int)camera.width; camera.height = (int)camera.height; - boolean hadShields = Core.settings.getBool("animatedshields"); - boolean hadWater = Core.settings.getBool("animatedwater"); - Core.settings.put("animatedwater", false); - Core.settings.put("animatedshields", false); graphics.clear(0f, 0f, 0f, 1f); float px = Core.camera.position.x, py = Core.camera.position.y; @@ -58,17 +54,9 @@ public class Pixelator implements Disposable{ playerGroup.draw(p -> !p.isDead(), Player::drawName); Core.camera.position.set(px, py); - Core.settings.put("animatedwater", hadWater); - Core.settings.put("animatedshields", hadShields); renderer.setScale(pre); } - public void rebind(){ - if(enabled()){ - buffer.begin(); - } - } - public boolean enabled(){ return Core.settings.getBool("pixelate"); } diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index cd2f3d6d6b..611cec44b6 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -255,19 +255,10 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ if(lastSchematic == null) return; ui.showTextInput("$schematic.add", "$name", "", text -> { - Schematic replacement = schematics.all().find(s -> s.name().equals(text)); - if(replacement != null){ - ui.showConfirm("$confirm", "$schematic.replace", () -> { - schematics.overwrite(replacement, lastSchematic); - ui.showInfoFade("$schematic.saved"); - ui.schematics.showInfo(replacement); - }); - }else{ - lastSchematic.tags.put("name", text); - schematics.add(lastSchematic); - ui.showInfoFade("$schematic.saved"); - ui.schematics.showInfo(lastSchematic); - } + lastSchematic.tags.put("name", text); + schematics.add(lastSchematic); + ui.showInfoFade("$schematic.saved"); + ui.schematics.showInfo(lastSchematic); }); } diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index aa6048d833..65b68b3423 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -3,7 +3,7 @@ package mindustry.mod; import arc.*; import arc.assets.*; import arc.audio.*; -import arc.audio.mock.*; +import arc.mock.*; import arc.struct.Array; import arc.struct.*; import arc.files.*; diff --git a/core/src/mindustry/mod/ModLoadingSound.java b/core/src/mindustry/mod/ModLoadingSound.java index 558b29ce28..7bae2f5a6b 100644 --- a/core/src/mindustry/mod/ModLoadingSound.java +++ b/core/src/mindustry/mod/ModLoadingSound.java @@ -1,8 +1,8 @@ package mindustry.mod; import arc.audio.*; -import arc.audio.mock.*; import arc.math.geom.*; +import arc.mock.*; import arc.util.ArcAnnotate.*; public class ModLoadingSound implements Sound{ diff --git a/core/src/mindustry/ui/dialogs/JoinDialog.java b/core/src/mindustry/ui/dialogs/JoinDialog.java index 1e3452a24b..2e62161957 100644 --- a/core/src/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/mindustry/ui/dialogs/JoinDialog.java @@ -242,6 +242,9 @@ public class JoinDialog extends FloatingDialog{ } void setup(){ + local.clear(); + remote.clear(); + global.clear(); float w = targetWidth(); hosts.clear(); @@ -255,7 +258,6 @@ public class JoinDialog extends FloatingDialog{ pane.setScrollingDisabled(true, false); setupRemote(); - refreshRemote(); cont.clear(); cont.table(t -> { diff --git a/core/src/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/mindustry/ui/dialogs/SchematicsDialog.java index 86408921b9..fb29f9fa8e 100644 --- a/core/src/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/mindustry/ui/dialogs/SchematicsDialog.java @@ -1,7 +1,7 @@ package mindustry.ui.dialogs; import arc.*; -import arc.struct.*; +import arc.files.*; import arc.graphics.*; import arc.graphics.Texture.*; import arc.graphics.g2d.*; @@ -10,6 +10,7 @@ import arc.scene.ui.*; import arc.scene.ui.ImageButton.*; import arc.scene.ui.TextButton.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import mindustry.core.GameState.*; import mindustry.game.*; @@ -214,14 +215,27 @@ public class SchematicsDialog extends FloatingDialog{ Core.app.setClipboardText(schematics.writeBase64(s)); }).marginLeft(12f); t.row(); - t.addImageTextButton("$schematic.exportfile", Icon.export, style, () -> platform.showFileChooser(false, schematicExtension, file -> { - dialog.hide(); - try{ - Schematics.write(s, file); - }catch(Exception e){ - ui.showException(e); + t.addImageTextButton("$schematic.exportfile", Icon.export, style, () -> { + if(!ios){ + platform.showFileChooser(false, schematicExtension, file -> { + dialog.hide(); + try{ + Schematics.write(s, file); + }catch(Throwable e){ + ui.showException(e); + } + }); + }else{ + dialog.hide(); + try{ + Fi file = Core.files.local(s.name() + "." + schematicExtension); + Schematics.write(s, file); + platform.shareFile(file); + }catch(Throwable e){ + ui.showException(e); + } } - })).marginLeft(12f); + }).marginLeft(12f); }); }); diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 2b4e336d67..af4f6db807 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -330,7 +330,12 @@ public class SettingsMenuDialog extends SettingsDialog{ if(Shaders.shield != null){ graphics.checkPref("animatedshields", !mobile); } - graphics.checkPref("bloom", !mobile, val -> renderer.toggleBloom(val)); + if(!ios){ + graphics.checkPref("bloom", !mobile, val -> renderer.toggleBloom(val)); + }else{ + Core.settings.put("bloom", false); + } + graphics.checkPref("pixelate", false, val -> { if(val){ Events.fire(Trigger.enablePixelation); diff --git a/core/src/mindustry/world/blocks/ItemSelection.java b/core/src/mindustry/world/blocks/ItemSelection.java index 2f654d081b..cf4f5a0580 100644 --- a/core/src/mindustry/world/blocks/ItemSelection.java +++ b/core/src/mindustry/world/blocks/ItemSelection.java @@ -51,6 +51,7 @@ public class ItemSelection{ scrollPos = pane.getScrollY(); }); - table.add(pane).maxHeight(40 * 5); + pane.setOverscroll(false, false); + table.add(pane).maxHeight(Scl.scl(40 * 5)); } } diff --git a/core/src/mindustry/world/blocks/distribution/Conveyor.java b/core/src/mindustry/world/blocks/distribution/Conveyor.java index 55b643473b..56a4d7f2ad 100644 --- a/core/src/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/mindustry/world/blocks/distribution/Conveyor.java @@ -264,6 +264,7 @@ public class Conveyor extends Block implements Autotiler{ @Override public void handleStack(Item item, int amount, Tile tile, Unit source){ ConveyorEntity e = tile.ent(); + amount = Math.min(amount, itemCapacity - e.len); for(int i = amount - 1; i >= 0; i--){ e.add(0); diff --git a/core/src/mindustry/world/blocks/distribution/OverflowGate.java b/core/src/mindustry/world/blocks/distribution/OverflowGate.java index 407aad78a9..e73bb140a8 100644 --- a/core/src/mindustry/world/blocks/distribution/OverflowGate.java +++ b/core/src/mindustry/world/blocks/distribution/OverflowGate.java @@ -9,6 +9,8 @@ import mindustry.world.meta.BlockGroup; import java.io.*; +import static mindustry.Vars.world; + public class OverflowGate extends Block{ public float speed = 1f; public boolean invert = false; @@ -125,19 +127,24 @@ public class OverflowGate extends Block{ @Override public byte version(){ - return 2; + return 3; } @Override public void write(DataOutput stream) throws IOException{ super.write(stream); + stream.writeInt(lastInput == null ? Pos.invalid : lastInput.pos()); } @Override public void read(DataInput stream, byte revision) throws IOException{ super.read(stream, revision); + if(revision == 1){ new DirectionalItemBuffer(25, 50f).read(stream); + }else if(revision == 3){ + lastInput = world.tile(stream.readInt()); + lastItem = items.first(); } } } diff --git a/core/src/mindustry/world/blocks/distribution/Sorter.java b/core/src/mindustry/world/blocks/distribution/Sorter.java index 731300eccc..192c27a7db 100644 --- a/core/src/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/mindustry/world/blocks/distribution/Sorter.java @@ -14,7 +14,7 @@ import mindustry.world.meta.*; import java.io.*; -import static mindustry.Vars.content; +import static mindustry.Vars.*; public class Sorter extends Block{ private static Item lastItem; @@ -46,6 +46,9 @@ public class Sorter extends Block{ @Override public void configured(Tile tile, Player player, int value){ tile.ent().sortItem = content.item(value); + if(!headless){ + renderer.minimap.update(tile); + } } @Override diff --git a/core/src/mindustry/world/blocks/production/Separator.java b/core/src/mindustry/world/blocks/production/Separator.java index 7361b8f4bb..26d0ae8f46 100644 --- a/core/src/mindustry/world/blocks/production/Separator.java +++ b/core/src/mindustry/world/blocks/production/Separator.java @@ -107,6 +107,7 @@ public class Separator extends Block{ entity.cons.trigger(); if(item != null && entity.items.get(item) < itemCapacity){ + useContent(tile, item); offloadNear(tile, item); } } diff --git a/core/src/mindustry/world/blocks/production/SolidPump.java b/core/src/mindustry/world/blocks/production/SolidPump.java index 13db9f2e2c..d6db8ea3aa 100644 --- a/core/src/mindustry/world/blocks/production/SolidPump.java +++ b/core/src/mindustry/world/blocks/production/SolidPump.java @@ -111,6 +111,7 @@ public class SolidPump extends Pump{ tile.entity.liquids.add(result, maxPump); entity.lastPump = maxPump; entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, 0.02f); + if(tile.entity.timer.get(timerContentCheck, 10)) useContent(tile, result); if(Mathf.chance(entity.delta() * updateEffectChance)) Effects.effect(updateEffect, entity.x + Mathf.range(size * 2f), entity.y + Mathf.range(size * 2f)); }else{ diff --git a/core/src/mindustry/world/modules/ItemModule.java b/core/src/mindustry/world/modules/ItemModule.java index cd30730d2d..b08a419d0b 100644 --- a/core/src/mindustry/world/modules/ItemModule.java +++ b/core/src/mindustry/world/modules/ItemModule.java @@ -1,10 +1,9 @@ package mindustry.world.modules; -import mindustry.type.Item; -import mindustry.type.ItemStack; +import mindustry.type.*; import java.io.*; -import java.util.Arrays; +import java.util.*; import static mindustry.Vars.content; @@ -69,15 +68,24 @@ public class ItemModule extends BlockModule{ return total; } + public Item first(){ + for(int i = 0; i < items.length; i++){ + if(items[i] > 0){ + return content.item(i); + } + } + return null; + } + public Item take(){ for(int i = 0; i < items.length; i++){ int index = (i + takeRotation); - if(index >= items.length) index -= items.length; //conditional instead of mod + if(index >= items.length) index -= items.length; if(items[index] > 0){ items[index] --; total --; takeRotation = index + 1; - return content.item(index % items.length); + return content.item(index); } } return null; diff --git a/fastlane/metadata/android/en-US/changelogs/104.2.txt b/fastlane/metadata/android/en-US/changelogs/104.2.txt new file mode 100644 index 0000000000..6f3e27fb4d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/104.2.txt @@ -0,0 +1,6 @@ +- Optimized and cleaned up conveyors +- Made unloaders take items from blocks in equal amounts +- Added server categories (Partially contributed by @Quezler) +- Added require() function for scripts (Contributed by @DeltaNedas) +- Added color gradient for battery status (Contributed by @Arkanic (eventually)) +- Changed script loading: For mods with more than one script file, the main file must be named "main.js" and must require() other files to run them diff --git a/fastlane/metadata/android/en-US/changelogs/104.3.txt b/fastlane/metadata/android/en-US/changelogs/104.3.txt new file mode 100644 index 0000000000..6f3e27fb4d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/104.3.txt @@ -0,0 +1,6 @@ +- Optimized and cleaned up conveyors +- Made unloaders take items from blocks in equal amounts +- Added server categories (Partially contributed by @Quezler) +- Added require() function for scripts (Contributed by @DeltaNedas) +- Added color gradient for battery status (Contributed by @Arkanic (eventually)) +- Changed script loading: For mods with more than one script file, the main file must be named "main.js" and must require() other files to run them diff --git a/fastlane/metadata/android/en-US/changelogs/29612.txt b/fastlane/metadata/android/en-US/changelogs/29612.txt new file mode 100644 index 0000000000..6f3e27fb4d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29612.txt @@ -0,0 +1,6 @@ +- Optimized and cleaned up conveyors +- Made unloaders take items from blocks in equal amounts +- Added server categories (Partially contributed by @Quezler) +- Added require() function for scripts (Contributed by @DeltaNedas) +- Added color gradient for battery status (Contributed by @Arkanic (eventually)) +- Changed script loading: For mods with more than one script file, the main file must be named "main.js" and must require() other files to run them diff --git a/fastlane/metadata/android/en-US/changelogs/29616.txt b/fastlane/metadata/android/en-US/changelogs/29616.txt new file mode 100644 index 0000000000..6f3e27fb4d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/29616.txt @@ -0,0 +1,6 @@ +- Optimized and cleaned up conveyors +- Made unloaders take items from blocks in equal amounts +- Added server categories (Partially contributed by @Quezler) +- Added require() function for scripts (Contributed by @DeltaNedas) +- Added color gradient for battery status (Contributed by @Arkanic (eventually)) +- Changed script loading: For mods with more than one script file, the main file must be named "main.js" and must require() other files to run them diff --git a/gradle.properties b/gradle.properties index fc81933aea..9ff6821b16 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=a3edc4804b57ac9f8c59216cc470f05133f8c804 +archash=589c7e171a8b558f50b99d374e05942a5909ba4d diff --git a/ios/src/mindustry/ios/IOSLauncher.java b/ios/src/mindustry/ios/IOSLauncher.java index 5e0102db79..e4da9160d0 100644 --- a/ios/src/mindustry/ios/IOSLauncher.java +++ b/ios/src/mindustry/ios/IOSLauncher.java @@ -1,12 +1,13 @@ package mindustry.ios; import arc.*; -import com.badlogic.gdx.backends.iosrobovm.*; +import arc.Input.*; import arc.files.*; import arc.func.*; import arc.scene.ui.layout.*; import arc.util.*; import arc.util.io.*; +import com.badlogic.gdx.backends.iosrobovm.*; import mindustry.*; import mindustry.game.EventType.*; import mindustry.game.Saves.*; @@ -40,13 +41,32 @@ public class IOSLauncher extends IOSApplication.Delegate{ @Override public void showFileChooser(boolean open, String extension, Cons cons){ - UIDocumentBrowserViewController cont = new UIDocumentBrowserViewController((NSArray)null); + if(!open){ //when exporting, just share it. + //ask for export name + Core.input.getTextInput(new TextInput(){{ + title = Core.bundle.get("filename"); + accepted = name -> { + try{ + //write result + Fi result = tmpDirectory.child(name + "." + extension); + cons.get(result); + //import the document + shareFile(result); + }catch(Throwable t){ + ui.showException(t); + } + }; + }}); + return; + } + + UIDocumentBrowserViewController cont = new UIDocumentBrowserViewController((NSArray)null); NSArray arr = new NSArray<>(new UIBarButtonItem(Core.bundle.get("cancel"), UIBarButtonItemStyle.Plain, uiBarButtonItem -> cont.dismissViewController(true, () -> {}))); - cont.setAllowsDocumentCreation(!open); + cont.setAllowsDocumentCreation(false); cont.setAdditionalLeadingNavigationBarButtonItems(arr); class ChooserDelegate extends NSObject implements UIDocumentBrowserViewControllerDelegate{ @@ -97,7 +117,6 @@ public class IOSLauncher extends IOSApplication.Delegate{ @Override public void failedToImportDocument(UIDocumentBrowserViewController controller, NSURL documentURL, NSError error){ - } @Override diff --git a/servers.json b/servers.json index 892bda7168..62ce10e30b 100644 --- a/servers.json +++ b/servers.json @@ -2,6 +2,12 @@ { "address": "mindustry.us.to" }, + { + "address": "mindustry.indielm.com:1101" + }, + { + "address": "mindustry.indielm.com" + }, { "address": "mindustry.ecansol.com:6597" }, diff --git a/tests/src/test/java/ApplicationTests.java b/tests/src/test/java/ApplicationTests.java index 8bb1ba3206..b37ca45b06 100644 --- a/tests/src/test/java/ApplicationTests.java +++ b/tests/src/test/java/ApplicationTests.java @@ -214,6 +214,16 @@ public class ApplicationTests{ assertTrue(state.teams.playerCores().size > 0); } + @Test + void conveyorCrash(){ + world.loadMap(testMap); + state.set(State.playing); + + world.tile(0, 0).setBlock(Blocks.conveyor); + world.tile(0, 0).rotation(0); + Blocks.conveyor.acceptStack(Items.copper, 1000, world.tile(0, 0), null); + } + @Test void conveyorBench(){ int[] items = {0};