Compare commits

...

711 Commits
v125 ... v127.2

Author SHA1 Message Date
RebornTrack970
4dcac119d8 Updated TR Bundle to the latest V7 prealpha (#5505)
* Updated TR Bundle to the latest V7 prealpha

* Update bundle_tr.properties
2021-06-30 13:24:52 -04:00
Anuken
f9dfd5b0b5 Commented out separator revision until 128 release 2021-06-30 13:08:19 -04:00
Patrick 'Quezler' Mounier
10dcd9cb2d outlaw separator desycning (#5516)
* Seed separators

* Sync separators

* Seed from tile position
2021-06-30 12:59:09 -04:00
Anuken
c80e800ac9 Merge remote-tracking branch 'origin/master' 2021-06-30 10:49:29 -04:00
Anuken
eafcbf0914 Minor unit balancing 2021-06-30 10:28:05 -04:00
ulwepo
4f561a3875 Update servers_v6.json (#5515)
Sakura is a Japanese server.
I add attack mode.
Thank you.
2021-06-30 08:34:18 -04:00
Thomas Widyantoko
5cc92506c9 [ID] Updates Indonesian V7 translation (#5513)
* Indonesian bundle update

lenum.controller description and Tar Fields map

* translation bundle sync

* Indonesian translation standardization

* healing status effect

* Indonesian translation for V7

bit confused on line 1611

* [ID] WIP polygonal core protection

* [ID] Updates Indonesian V7 translation

Logic wait & content look up instructions
2021-06-30 08:34:08 -04:00
Arik
2c8eb1e5b8 Conveyor Upgrade End Rotation (#5512) 2021-06-30 08:29:35 -04:00
Anuken
6c18634b0d Minor logic unit rotation fix / Core capture unit derelict tareting 2021-06-29 16:26:02 -04:00
Anuken
c7bd9dd0fa Merge remote-tracking branch 'origin/master' 2021-06-29 12:21:56 -04:00
Anuken
d8ec231a5e Fixed #5508 2021-06-29 12:21:42 -04:00
Arik
5c803594fb Fix WaveGraph Lineup (#5503) 2021-06-29 09:03:56 -04:00
Minxyzgo
cececa190a Update WaterMoveComp.java (#5504) 2021-06-29 08:54:10 -04:00
OSP
38a3f1839e Change ip XCore, and add new server (#5502) 2021-06-28 18:58:39 -04:00
Anuken
2eb57ab680 Minor repair turret nerf 2021-06-28 18:57:13 -04:00
Anuken
f6f1ddb826 Fixed non-existent fire being targeted 2021-06-28 13:30:54 -04:00
Anuken
fcdbd4b117 Fixed liquid turrets not targeting closest fire 2021-06-28 11:35:46 -04:00
Anuken
a5c44e7998 #5055 2021-06-28 10:50:04 -04:00
Anuken
8afea88023 Fixed #5500 2021-06-28 10:15:54 -04:00
Anuken
75443e4dfc Clear commanding units on sync 2021-06-28 09:56:49 -04:00
Anuken
fbfb491dca Merge remote-tracking branch 'origin/master' 2021-06-28 09:25:48 -04:00
Anuken
082c17da85 Fixed #5498 2021-06-28 09:25:38 -04:00
thedimas3007
88ebf4f9db Updated (#5497) 2021-06-28 09:12:25 -04:00
OSP
18825b1697 Change IP XCore (#5494)
the old hosting is broken.
2021-06-27 18:47:11 -04:00
BasedUser
551b11877d CRAPPY DDNS IS GONE 🦀🦀🦀 (#5495) 2021-06-27 18:47:01 -04:00
Anuken
0bd1b4eedc Skip loading team regions for teams without palettes 2021-06-27 12:28:40 -04:00
Anuken
d401d7838c Gradle 7.1 2021-06-27 11:10:07 -04:00
Anuken
8b2e273d41 Merge remote-tracking branch 'origin/master' 2021-06-27 09:34:59 -04:00
Anuken
bdff6f9560 Repair turret nerf 2021-06-27 09:34:54 -04:00
Fatonndev
bb500a53ef Add attack v7 server (#5490) 2021-06-27 09:13:22 -04:00
Volas171
7ff0811764 retire mindustry reborn from v6 (#5487) 2021-06-27 09:13:03 -04:00
Anuken
36b49b6d8b Fixed #5488 / Fixed #5489 2021-06-27 09:12:35 -04:00
Anuken
e8edfb1170 Merge remote-tracking branch 'origin/master' 2021-06-26 20:55:59 -04:00
Anuken
bc6fcbc86d Fixed more flaky tests 2021-06-26 20:55:52 -04:00
OSP
8853ca303e Add XCore server to the v7 global list (#5486)
My server, 1 mode - the siege.There will be more servers in the future.
2021-06-26 15:46:19 -04:00
L0615T1C5-216AC-9437
914a6fc89b Add Chaotic Neutral to the V7 Server List (#5484) 2021-06-26 14:07:02 -04:00
UnCaughT
028be85468 Add HexPvP to V7 (#5483) 2021-06-26 14:06:56 -04:00
Darkness6030
5ffc285e1c Add mindurka to V7 list (#5471)
* Add mindurka to V7 list

* Update servers_v7.json

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

* Update servers_v7.json

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
Co-authored-by: Anuken <arnukren@gmail.com>
2021-06-26 12:29:56 -04:00
Anuken
604e6f8c47 Catch NoClassDefFoundErrors on ClientLoad 2021-06-26 11:11:27 -04:00
Anuken
4ac4f10ea0 Log mismatch errors for net buffers 2021-06-26 11:08:45 -04:00
Anuken
4c07733857 Fixed #5481 2021-06-26 11:04:03 -04:00
Anuken
7dc0f4dbc5 Merge remote-tracking branch 'origin/master' 2021-06-26 10:12:04 -04:00
Anuken
22f64fa2a5 Revert naval balance changes for now 2021-06-26 10:11:59 -04:00
KotMilkMeoW
5b0f1b5c03 Server upgrade to v7 (#5480) 2021-06-26 09:54:18 -04:00
Anuken
c6e0292d03 Fixed clientside physics jitter 2021-06-26 09:52:03 -04:00
Anuken
17eee61a93 Fixed #5478 2021-06-26 09:34:25 -04:00
Anuken
3817b159cf Reduced jittery interpolation 2021-06-26 00:19:23 -04:00
Anuken
331cf2e269 arc 2021-06-25 22:58:30 -04:00
Anuken
96622848d9 Hide outdated lobbies on Steam 2021-06-25 19:49:53 -04:00
Anuken
bcdc8867e6 Merge remote-tracking branch 'origin/master' 2021-06-25 19:36:07 -04:00
Anuken
eaeb67b91f Fixed #5474 2021-06-25 19:35:34 -04:00
Catchears
ebd444cc5f final v7 german translation (#5473) 2021-06-25 16:57:20 -04:00
L0615T1C5-216AC-9437
ff1ab9dd42 Add Chaotic Neutral Survival to BE Server List (#5435)
Co-authored-by: Anuken <arnukren@gmail.com>
2021-06-25 16:22:11 -04:00
Ilya246
7e2c830f9c Add .pl to 7.0 serverlist (#5466)
* Add .pl to 7.0 serverlist

.pl will move to 7.0 once b127 is out
Somka currently can't make a PR by himself so i asked him whether i should and, after a positive answer, did it for him

* Update servers_v7.json
2021-06-25 16:01:38 -04:00
Volas171
0cc2214951 Add Mindustry Reborn to V7 Alpha list (#5470)
* v7

* be removal

* formatting

Co-authored-by: Anuken <arnukren@gmail.com>
2021-06-25 14:41:24 -04:00
Anuken
47443d5ae7 Merge remote-tracking branch 'origin/master' 2021-06-25 14:37:36 -04:00
Anuken
cd2c605036 Suppress certain mod errors on client load 2021-06-25 14:37:32 -04:00
RebornTrack970
847e46d270 Add Beta 2r2t to V7 (#5468)
* Add Beta 2r2t to V7

Other Omega Servers will likely get updated to V7 too, for now, only 2r2t has a Beta.

* Update servers_v7.json

* Update servers_v7.json

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

* Update servers_be.json

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
2021-06-25 14:26:54 -04:00
Anuken
3d6cfcafd0 Don't assign players to derelict 2021-06-25 14:11:36 -04:00
Patrick 'Quezler' Mounier
cb2ed1c549 Update filenames within the server json test (#5469) 2021-06-25 13:42:47 -04:00
Anuken
d86d2dbdb9 Delete servers.json 2021-06-25 13:35:15 -04:00
RebornTrack970
0546d6cf55 TR Bundle Change: Bug Fix (#5404)
* TR Bundle Change: Yakalandı -> Elegeçirldi

* Bug Fix
2021-06-25 13:30:08 -04:00
Jaekwon Park
9b3a8c201f Add to new Korea Server (#5397)
* Add to new Korea Server
2021-06-25 13:09:11 -04:00
彭瑞暄
1bf3345b2f Update bundle_zh_TW.properties (#5364)
translation for new block and naval unit names
2021-06-25 13:08:44 -04:00
Antsiferov Andrew
a8dd868df2 [Bundle][RU] Update (#5354)
* double newline fix

hint.guardian

* 13 changed lines

mod.enabled
mod.disabled
status.burning.name
status.freezing.name
status.wet.name
status.melting.name
status.sapped.name
status.spore-slowed.name
status.tarred.name
status.overclock.name
status.shocked.name
status.blasted.name
status.unmoving.name

* yon't

* x'nt

* Update bundle_ru.properties

* 1 new, 1 changed

New:
stat.healing

Changed:
bullet.healpercent

* Inverse trig logic functions

See 00ca247d0f

* new v7 stuff, long list

New:
schematic.tags
schematic.edittags
schematic.addtag
schematic.texttag
schematic.icontag
schematic.renametag
schematic.tagdelconfirm
schematic.tagexists
tps
guardian
sector.changeicon
status.electrified.name
unsupported.environment
stat.repairspeed
ability.energyfield
bar.strength
rules.corecapture
block.rhyolite.name
block.repair-turret.name
hint.blockInfo
lenum.config
laccess.progress
unit.retusa.name
unit.oxynoe.name
unit.cyerce.name
unit.aegires.name
unit.navanax.name
block.duct.name
block.duct-router.name
block.duct-bridge.name
block.payload-propulsion-tower.name
block.payload-void.name
block.payload-source.name
filter.option.rotate

Changed:
stat.repairtime
bullet.pierce
team.crux.name
team.sharded.name
item.titanium.description

Deleted:
quit.confirm.tutorial
boss.health
team.orange.name
lenum.configure

* Update bundle_ru.properties

* 1 line changed

unit.oxynoe.name

* роутер-marshrutizator

ibglish

* 2 lines changed

block.surge-wall.name
block.surge-wall-large.name

* 3 new, 2 changed

New:
stat.showinmap
block.metal-floor-4.name
block.metal-floor-5.name

Changed:
stat.affinities
stat.opposites

* undone the dumb

* 1 new line

filter.option.replacement

* 1 new, 1 changed

New:
rules.polygoncoreprotection

Changed:
hint.respawn

Co-authored-by: Vanguard <55051135+XEN0PHIL@users.noreply.github.com>
2021-06-25 13:00:44 -04:00
VizardAlpha
6dc6c2ebba Update full_description.txt for Android (#5399)
* Update full_description.txt for Android

Update full_description.txt for Android

* Update full_description.txt Android
2021-06-25 13:00:29 -04:00
Sharlotte
3b3abdf87e [KO] Update Latest Bleeding-Edge bundle (#5430)
* [KO] Update Latest Bleeding-Edge bundle

* Update bundle_ko.properties

* I wonder why sk didn't just edit file skself.

* typo

* ohno there is too many HIDDEN TYPO WHAT THE FUCK

* more typo

* new translated bundle. NOW IT'S DONE
2021-06-25 12:59:55 -04:00
YellOw139
e0e124ee57 [Bundle][RO] Update (#5431)
Changelog:

- New strings/changes up to commit 865ee952c9
- Typo fixes & various other improvements
2021-06-25 12:59:45 -04:00
Ngọc Lam
cfba83018e Update Vietnamese Translation for V7. (#5432)
* V7 translation update (Part 1)

* V7 translation update (Part 2)

* A lot of typo.
2021-06-25 12:59:36 -04:00
TRinny
79581edaa0 Update bundle_th.properties (#5319)
* Update bundle_th.properties

My first time here. someone requested in discord so I made this.
-overhaul the translation to V6
-fixed typos
-my mom complained me for staring at computer all day
-blocks and block descriptions unfinished; might make more commits

* Update bundle_th.properties

more fixes
replace tutorial with v6 hints (still unfinished)
more work than I thought, will make this a draft

* Update bundle_th.properties

Almost finish, missing only like... 100 lines

* Update bundle_th.properties

Finally finished! thank you, Anuke, for making this great game!

* Update bundle_th.properties

-Translation Clean-up
-Update the translation to . . . v7?
-If you don't mind I'll add myself to Translator list.

* Update contributors

Add myself to the translator list... If you (Anuke) don't mind.

* Update bundle_th.properties

More clean-up

* Update contributors

fixed conflicts

* Update contributor (again)

sorry, genNAowl

* Update bundle_th.properties

Another Clean-up

* Update bundle_th.properties

how many clean-up I have to add!? hope this is final.

* Update bundle_th.properties

13th commit. Minor clean-up

* Update bundle_th.properties

14th commit. Minor clean-up

* Update bundle_th.properties

Maybe final change.

* Update bundle_th.properties

The Perfect Edition.

* Update bundle_th.properties (maybe final)

Minor Tweaking #1. Final(?)
Imagine changing like 400+ lines in the first few commits, then changing only 10+ lines in the final commits.

* Update bundle_th.properties

imagine fixing 1 line of code.

* Update bundle_th.properties

Another 1-line fix. I'll fix like this until its complete for me or it got merged

* Update bundle_th.properties (to v7)

not really a clean-up, add more v7 things.

* Update bundle_th.properties

Clean-up a bit since naval support name is a bit weird.

* Update bundle_th.properties

simplified units/blocks descriptions. Also clean-up and tweaks.

* Update bundle_th.properties

Fixed description again, also make translation more natural and less like using google translate.

* Update contributors

Just don't wanna fix conflicts again and again when something got merge, may triggers someone (sorry...)

* Update bundle_th.properties

improved many things I missed in the test.
Add an experimental description, will be removed in the next commit (or added in if it success!)

* Update bundle_th.properties

Add scrap walls descriptions and fixed many things.

* Final. or not?

Fixed misspellings and updated description. Final (right? RIGHT?)

* Final

Add a details of mats. fixed thingies. Final, (right RIGHT?)

* Real Final. no further commit unless new lines.

1-line fix, now I'll wait for 'someone' to review my change. I'll NOT make any changes from here now unless major problem found or new updates from Anuke OR someone reviews (Please... review it)

* new lines

added new lines (and removed some too) also fixed some lines and added details to mats.

* new details to liquids

added details to liquids and also typical fixes.

* hotfix

ah yes, typo hotfix

* minor(?) fixes

minor(or major?) fixes to descriptions and make sense of things.

* add polygonal core protection

add polygonal core protection and fixes abilities to v7. also fixes moth => mod.

* minor fixes to descriptions

minor fixes to descriptions and also knowing what 'Bitwise' is.

* updated descriptions

change duplicated name and also change other description to make it better. also turned 'Low'gic to 'Lo'gic.

* Create bundle_th.properties

I missed these during tests.

* fix spacing

fix spacing and typos

* that sound bad

fixed some words

* fixes for v127

had a deep check to prepare for v127, also changed eclipse's name to something formidable

* Hotfix

now everything is perfect

* Hotfix

now everything is perfect
2021-06-25 12:59:07 -04:00
Thomas Widyantoko
0b7c9dc8b1 [ID] Indonesian translation for V7, Part 3 (#5426)
* Indonesian bundle update

lenum.controller description and Tar Fields map

* translation bundle sync

* Indonesian translation standardization

* healing status effect

* Indonesian translation for V7

bit confused on line 1611

* [ID] WIP polygonal core protection
2021-06-25 12:57:40 -04:00
VizardAlpha
665207b9b0 [FR] Updates bundle_fr.properties for V7 (#5345)
* Updates bundle_fr.properties

Additions of commits from May 28, 2021 to June 3, 2021.

Corrections and translations

* Update bundle_fr.properties

Commits on Jun 4, 2021 added

* Update bundle_fr.properties

Corrections translation.

* Update for V7

Update for V7

* Add new commit

* Add commits..

Experimental core-capture PvP map / Editor filter fixes

* Add commits.

Polygonal core (WIP)

* Minor Translation

Minor Translation
2021-06-25 12:57:31 -04:00
Patrick 'Quezler' Mounier
0cd4ef575d Enforce social distancing (#5465) 2021-06-25 12:49:50 -04:00
Anuken
91f50883b1 Update deployment.yml 2021-06-25 12:42:02 -04:00
Anuken
756c717a9b Possible flaky test fix 2021-06-25 12:39:46 -04:00
Anuken
2cea277320 RoboVM debugging 2021-06-25 12:29:49 -04:00
Anuken
dd36b71c7f Updated RoboVM plugin 2021-06-25 12:18:28 -04:00
Anuken
5e3e07f002 Updated RoboVM 2021-06-25 11:56:28 -04:00
Anuken
0ffe2ed51a Skip launch pad destination text for clients 2021-06-25 10:27:10 -04:00
Anuken
02e6257a66 Fixed #5462 2021-06-25 09:18:11 -04:00
Anuken
57fd72f476 arc 2021-06-24 19:34:21 -04:00
Anuken
d2d7596ef1 Fixed Android deployment script 2021-06-24 18:30:01 -04:00
Anuken
149c48a03e Merge remote-tracking branch 'origin/master' 2021-06-24 17:58:30 -04:00
Anuken
bdeba22561 Switched to v7 server list 2021-06-24 17:58:26 -04:00
Anuken
640c7851cf Update servers_be.json 2021-06-24 17:57:38 -04:00
Anuken
c0991a9baa Create servers_v7.json 2021-06-24 17:57:27 -04:00
Anuken
5af6e8c5de Preparations for 127 pre-alpha release 2021-06-24 17:25:08 -04:00
Anuken
2d4677aa27 Reduced unit item glow 2021-06-24 17:00:33 -04:00
Anuken
984b646103 Merge remote-tracking branch 'origin/master' 2021-06-24 15:38:26 -04:00
Anuken
0949852758 Logic wait & content look up instructions 2021-06-24 15:38:20 -04:00
MEEP of Faith
d4c409252b Allow shock mines to spawn bullets (#5454)
* Allow shock mines to spawn bullets

* Fix up some issues
2021-06-24 08:39:37 -04:00
Anuken
38a9ad9ec1 Fixed #5455 2021-06-23 16:22:00 -04:00
Anuken
c70be45a25 Merge remote-tracking branch 'origin/master' 2021-06-23 14:02:10 -04:00
Anuken
186e8f707e Fixed #5453 2021-06-23 14:02:06 -04:00
Anuken
e3351e0c23 Typo fix 2021-06-23 11:59:02 -04:00
Anuken
b08f198629 Merge remote-tracking branch 'origin/master' 2021-06-23 11:57:55 -04:00
Anuken
1b3e99fbb0 Remove linear filtering on iOS 2021-06-23 11:57:51 -04:00
buthed010203
f74c153a47 or (#5449) 2021-06-23 08:47:14 -04:00
Anuken
2613ff6796 Fixed #5448 2021-06-23 08:46:50 -04:00
Anuken
c404e7e1c6 Fixed #5447 2021-06-22 16:54:32 -04:00
Anuken
d468a4f328 Removed unnecessary TODOs 2021-06-22 16:07:19 -04:00
Anuken
4417a83424 Merge remote-tracking branch 'origin/master' 2021-06-22 14:22:58 -04:00
Anuken
45dc72faf6 Removed unnecessary themes 2021-06-22 14:22:54 -04:00
Patrick 'Quezler' Mounier
42c643f769 Fix ammo multiplier exception in itemturret (#5446) 2021-06-22 13:35:28 -04:00
Volas171
b7d5f9a7ab Add Mindustry Reborn to v7 and v6 ServerList (#5444)
* reborn v6

* v7 reborn lol

* yikes
2021-06-22 10:33:38 -04:00
Darkness6030
7e7d6120ad Update mindurka ip (again) (#5443)
Sry, anuke
2021-06-21 14:16:44 -04:00
Anuken
d6566830ac Ignore Discord RPC exceptions 2021-06-20 08:48:05 -04:00
Anuken
12dfd71345 Minor load markup fix 2021-06-18 15:44:35 -04:00
Anuken
60b6e93f7c arc 2021-06-18 15:25:40 -04:00
Anuken
128174faa4 NOTHING 2021-06-18 15:19:28 -04:00
Anuken
7ab0c86978 Stencil buffer fallback 2021-06-18 15:14:08 -04:00
Anuken
5f0ec79b0f Fixed crash logs sometimes not saving 2021-06-18 09:33:12 -04:00
Anuken
15affaad9b Cleaner impact reactor explosion 2021-06-16 16:53:09 -04:00
MEEP of Faith
a74bc0c077 block destroyEffect (#5427) 2021-06-16 15:55:08 -04:00
Anuken
9088d9eb39 Polygonal protection bugfixes 2021-06-16 15:07:14 -04:00
Anuken
f11f390c1f Polygonal protection for built-in PvP maps 2021-06-16 14:51:37 -04:00
Anuken
865ee952c9 WIP polygonal core protection 2021-06-16 13:26:18 -04:00
Anuken
efcae883fb Experimental core-capture PvP map / Editor filter fixes 2021-06-16 11:09:18 -04:00
Anuken
fe9ff212b2 Stateless simplex 2021-06-15 19:28:54 -04:00
Anuken
210fb349de Less editor filter state 2021-06-15 12:26:00 -04:00
Anuken
69d8af7874 Editor filter seed saving & cleanup 2021-06-15 11:58:26 -04:00
Anuken
183c922b6b Do not save MirrorFilter temporary vectors 2021-06-15 11:32:49 -04:00
Anuken
964104db65 Merge remote-tracking branch 'origin/master' 2021-06-15 09:39:27 -04:00
Anuken
2d8f7cb680 Fixed #5425 2021-06-15 09:39:23 -04:00
Volas171
aef92fd3b0 remove mindustrypvp.ml (#5423)
we are leaving the list for the following reasons : 
we are renewing domain
coming back later (having some stability issue in moderation)
2021-06-14 23:24:26 -04:00
Anuken
a0f80a8865 it is solved 2021-06-14 11:35:53 -04:00
Anuken
6b5a743583 confusion 3 2021-06-14 11:33:00 -04:00
Anuken
28252173b4 confusion 2 2021-06-14 11:32:46 -04:00
Anuken
2e733273a0 confusion 2021-06-14 11:28:28 -04:00
Anuken
39f4e90fff s t o p 2021-06-14 11:23:47 -04:00
Anuken
22d1700fb2 JITPack appears to be throwing a fit (2) 2021-06-14 11:22:56 -04:00
Anuken
31c39e0148 JITPack appears to be throwing a fit 2021-06-14 11:15:06 -04:00
Anuken
e5b80c37eb Renamed misleading github jobs 2021-06-14 11:05:37 -04:00
Anuken
2a451aa41f Disable preview features 2021-06-14 10:59:38 -04:00
Anuken
1a03151966 Enforce JDK 16 as a minimum 2021-06-14 10:55:28 -04:00
Anuken
51040f9f3d Hash fix 2021-06-14 10:42:24 -04:00
Anuken
3ad16ab8aa Upgraded to Gradle 7 & JDK 16 2021-06-14 10:41:19 -04:00
Anuken
b58e64ea16 Fixed #5422 2021-06-14 08:47:38 -04:00
Anuken
7fe9e7f9c2 Merge remote-tracking branch 'origin/master' 2021-06-13 19:27:34 -04:00
Anuken
2d9204d638 I guess everything is unsafe now 2021-06-13 19:27:28 -04:00
QmelZ
de9c82d1d2 Freedom for javascript mods (#5421)
* remove blacklist and class shutter

* no context factory
2021-06-13 19:22:33 -04:00
Anuken
a756dec379 Fixed #5419 2021-06-13 11:02:17 -04:00
Anuken
5601f97266 Fixed #5418 2021-06-13 10:12:50 -04:00
Anuken
347b38ba26 Added unit tests for Java, JavaScript and JSON mods 2021-06-12 20:59:28 -04:00
Anuken
d6016f1b04 Support for hidden weather 2021-06-12 16:59:18 -04:00
Anuken
7ec713ab66 No URLClassLoader super delegation 2021-06-12 14:26:47 -04:00
Anuken
446c2d2dcb more mod loader fixes 2021-06-12 11:00:56 -04:00
Anuken
c5261cf2e5 Fixed #5414 2021-06-12 08:44:16 -04:00
Anuken
cb0382a15b Clipping bugfixes 2021-06-11 10:15:19 -04:00
Anuken
3527acd33e Mod class loading bugfix 2021-06-11 09:18:59 -04:00
Anuken
83854169b7 Fixed #5412 2021-06-11 08:51:34 -04:00
Anuken
dfd2b22917 Planet method renaming 2021-06-10 18:51:29 -04:00
Anuken
c4803d29da Pulverizer texture cleanup 2021-06-10 16:14:53 -04:00
VozDuh
a0acf1a040 Melter & Pulverizer Fixed (#5098)
Co-authored-by: Anuken <arnukren@gmail.com>
2021-06-10 16:01:04 -04:00
Anuken
8d9d6385f9 Editor variant regions for wall blocks 2021-06-10 15:52:33 -04:00
MEEP of Faith
af2830602d Let any block have variants. (#5372) 2021-06-10 15:42:01 -04:00
Anuken
e4bd3fab7c Removed MetalFloor class 2021-06-10 15:39:43 -04:00
Anuken
e3ea1bdaae Merge remote-tracking branch 'origin/master' 2021-06-10 15:10:56 -04:00
Anuken
a180aae838 Blending cleanup / Misc bugfixes 2021-06-10 15:10:52 -04:00
ulwepo
abcea8dd39 Update servers_v6.json (#5407)
This is Japanese server.
Add a survival server and a sandbox server.
Thank you
2021-06-10 09:35:44 -04:00
Anuken
448604062d Merge remote-tracking branch 'origin/master' 2021-06-10 09:32:05 -04:00
Anuken
bcdbca7337 Fixed #5410 2021-06-10 09:32:01 -04:00
Anuken
dd500a747b Update deployment.yml 2021-06-10 09:06:05 -04:00
Anuken
32d8f59b5a Merge remote-tracking branch 'origin/master' 2021-06-10 09:04:06 -04:00
Anuken
86bf068ac3 Fixed #5406 2021-06-10 09:03:57 -04:00
Anuken
ec2c273c97 Add an automatic item produce requirement 2021-06-09 22:55:48 -04:00
Romanin
a587477fc0 Renamed the category and added it easyplay.su (#5405)
We decided to rename the category in order to add to it EasyPlay.Su (we have an agreement)
2021-06-09 17:09:54 -04:00
Anuken
e3da0f713e Modded techtree bugfixes 2021-06-09 16:15:17 -04:00
Anuken
6f609aa4ee ConsumeCoolant 2021-06-09 14:38:49 -04:00
Anuken
c9ff84d03b Test fix 2021-06-09 14:03:29 -04:00
Anuken
b04c04f69f New metal floor / Selective floor attribute stats 2021-06-09 13:26:01 -04:00
Anuken
adf6465029 Child-first mod class loading 2021-06-09 10:04:23 -04:00
Anuken
a8a163ebe2 Fixed Android builds 2021-06-09 08:57:56 -04:00
Anuken
7dcfd648f7 Minor bugfixes 2021-06-09 08:37:26 -04:00
Anuken
1895c7b8e0 Updated Rhino 2021-06-09 08:32:09 -04:00
Anuken
91c0235ff5 #5402 2021-06-08 22:07:45 -04:00
Anuken
25b2458a92 Merge remote-tracking branch 'origin/master' 2021-06-08 21:59:01 -04:00
Anuken
28203ca6e9 Fixed regression introduced in #5361 2021-06-08 21:58:56 -04:00
MEEP of Faith
93fd3c6e18 Allow weapons on Miner units to function. (#5398)
`target` shouldn't affect anything because it is unused in `updateMovement()`
2021-06-08 14:05:56 -04:00
Anuken
95da46bfa2 Duct bridge input display 2021-06-08 11:49:55 -04:00
Catchears
8c1702cff5 Initial german translation for v7 (#5394)
* initial v7 translations

* forgot unsupported.environment

* resolve the duct issues
2021-06-08 10:20:00 -04:00
Anuken
8962992ef9 Fixed invalid healing effects 2021-06-08 09:14:54 -04:00
Anuken
a7de30ba53 RidgedPerlin cleanup / More river noise options 2021-06-07 20:38:17 -04:00
Anuken
2651a30f79 Merge remote-tracking branch 'origin/master' 2021-06-07 18:07:41 -04:00
Anuken
1c9589eb26 Editor filter bugfixes 2021-06-07 18:07:37 -04:00
SaltyBeggarBR
850ebe8156 Brazillian Portuguese translation huge revamp (bundle_pt_BR.properties changes) (#5395)
I changed a few things that were either translated wrong, had typos or just sounded weird and also added a lot of stuff that didn't have translation yet, like the new blocks.

I tested the changed bundle as a mod by simply saving the edited bundle text on the test mod folder, but I believe it should also work when merged into the source code, and also because it's something that is pretty simple.

Not everything is translated yet, logic commands and its tips still have to be translated. I believe some other stuff also doesn't have a translation, since I didn't do a general revision of the game to see that, although I believe almost everything should be translated now.

(for Brazillians):
Eu mudei algumas coisas que estavam ou erradas, tinham erros de português ou simplesmente soavam estranhas e também adicionei um monte de coisa que ainda não estava traduzida.

o bundle modificado foi testado como um mod simplesmente salvando o arquivo de texto modificado na pasta do mod de teste, mas acredito que também vá funcionar certinho quando colocado no código fonte em si até porque é algo simples.

Não é tudo que foi traduzido ainda, lógica e suas dicas ainda tem que ser traduzidas. Acredito que outras coisas também, foi não fiz uma revisão geral no jogo em português para saber, mas acredito que a maioria deve de estar traduzido agora
2021-06-07 18:05:19 -04:00
YellOw139
8a51a4be32 [Bundle][RO] Update (v7 pre-alpha) (#5365)
* [Bundle][RO] Update (v7 pre-alpha)

Changelog:

- New strings/changes up to commit 00ca247d0f
- Typo fixes & various other improvements

* old typo

* coolant strength
2021-06-07 16:40:07 -04:00
Anuken
a452cd94c6 arc 2021-06-07 15:25:56 -04:00
Anuken
0966b49ff7 Merge remote-tracking branch 'origin/master' 2021-06-07 15:04:57 -04:00
Anuken
0582cfac2b Prefer Team#data() for team data 2021-06-07 15:04:45 -04:00
IchHabeKeineNamen
5deb8a879e Update BlockRenderer.java (#5259)
1. Ensure consistency of code.
1. Make the code straightforward.
2021-06-07 15:00:31 -04:00
Anuken
f4db208d75 Merge remote-tracking branch 'origin/master' 2021-06-07 14:55:18 -04:00
Anuken
f73c49b246 Moved effect calls back to correct class 2021-06-07 14:55:14 -04:00
shift
93a197e7d9 [RU] Fix interplanetary accelerator description (#5392)
* [RU] Fix interplanetary accelerator description

Made it same as it's name

* Make translate close to original
2021-06-07 14:51:05 -04:00
KotMilkMeoW
861ca2c6ae Add server to global list (#5385)
* Add server to global list

Server.
There are already 6 modes: attack, PVP, Sandbox, Crawler Arena, Tower Defense, Survival.

* Add server to global list

New ip (because of the technical chocolates, it was necessary to change them)
2021-06-07 14:50:50 -04:00
Anuken
1fffbf3a79 Merge remote-tracking branch 'origin/master' 2021-06-07 10:47:57 -04:00
Anuken
82742339a3 Implementation of #5280 2021-06-07 10:47:53 -04:00
Tegas Aziz
11d85621e2 7.0 indonesian translations part 2 (#5390)
* 7.0 indonesian translations part 2

but i missed schematic.tag bundle

* Update bundle_in_ID.properties

* Update bundle_in_ID.properties

* Update bundle_in_ID.properties

* Update bundle_in_ID.properties

team.orange.name is deprecated
2021-06-07 08:43:19 -04:00
Anuken
a64efce5a0 Possible client-side interpolation jitter fix 2021-06-06 22:17:53 -04:00
Anuken
9be4461b54 Merge remote-tracking branch 'origin/master' 2021-06-06 21:01:55 -04:00
Anuken
7f01959438 Liquid turret shoot FX fixes 2021-06-06 21:01:47 -04:00
MEEP of Faith
a09771b569 Custom Unit Death Explosion Effects (#5389) 2021-06-06 19:38:12 -04:00
NiChrosia
79695086c6 Add powerDynamic to Consumers (#5205)
* Add DynamicConsumePower, and powerDynamic to Consumers

* Add period to description of DynamicConsumePower

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

* Remove redundant Boolf

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
2021-06-06 19:37:20 -04:00
RebornTrack970
4a922e4c10 Translate Bug Fix (#5383)
* Translate Bug Fix

* more?
2021-06-06 19:36:34 -04:00
Anuken
bfc059769f Merge remote-tracking branch 'origin/master' 2021-06-06 19:33:22 -04:00
Anuken
b0ab33f125 Duct input consistency 2021-06-06 19:33:15 -04:00
buthed010203
faa8c68c20 remove space & extra backets (#5384)
* remove space

* remove extra brackets
2021-06-06 14:50:56 -04:00
buthed010203
45f5e2ae90 remove stray newline (#5386) 2021-06-06 14:25:17 -04:00
Darkness6030
0859f92fea Domain for mindurka (#5381) 2021-06-06 14:23:52 -04:00
Darkness6030
698e4bc740 Domain for mindurka (#5380) 2021-06-06 14:23:43 -04:00
Anuken
300e3f2320 Merge remote-tracking branch 'origin/master' 2021-06-06 13:01:26 -04:00
Anuken
d4f22c4838 Icon fix 2021-06-06 13:01:21 -04:00
RebornTrack970
758b3bcb24 Turkish Translation 2 (#5374)
* Turkish Translation 2

Added a few V7 things, not final.

* More Missed edits.

Fixed until line 122

* Fixed Until Line 162

* Fixed Until Line 225

* Fixed until 300

* Mini bug fix

* Fixed Until 400

* Translator , i will complete TR translation.

* Fixed till 543

* Until 598

* Maps

* Until 762

* 908

* 984

* 1337 Tutorial be like

* More patch

* More missed trasnations!!!

* More!

* 1562

* Units

* Logic 1

* Logic 2

* Math

* More Math 2

* Nearly done

* Nearly doneeee

* Final Touch
2021-06-06 11:25:18 -04:00
Anuken
782c7a9ff3 Fixed #5379 2021-06-06 11:05:36 -04:00
Anuken
8d12dbbe70 Minor duct preview optimizations 2021-06-06 10:06:33 -04:00
Anuken
75abe7661d Merge remote-tracking branch 'origin/master' 2021-06-06 09:55:37 -04:00
Anuken
c318d4fa70 Cleanup 2021-06-06 09:55:33 -04:00
Patrick 'Quezler' Mounier
7a3a39d3b1 Draw duct bridges in schematics (#5378) 2021-06-06 09:55:24 -04:00
Anuken
a4895fef8b Fixed #5373 / Fixed #5375 2021-06-06 09:40:32 -04:00
Anuken
685adeee9d Minor salvo buff 2021-06-05 22:54:37 -04:00
Anuken
c8d2b7a39e Merge remote-tracking branch 'origin/master' 2021-06-05 16:55:18 -04:00
Anuken
41082e9429 Fixed #5371 2021-06-05 16:55:15 -04:00
RebornTrack970
04b7aad1bf Updated TR Bundle (#5367) 2021-06-05 16:37:41 -04:00
Anuken
d0b70fd70d Fixed map view on left-padded iOS devices 2021-06-05 15:47:39 -04:00
Anuken
3c008e6bd8 Merge remote-tracking branch 'origin/master' 2021-06-05 15:10:41 -04:00
Anuken
ade313fc1b Fixed infinite fire / Command center logic control 2021-06-05 15:10:34 -04:00
Catchears
d96626e0c4 update link to jdk in README.md (#5370) 2021-06-05 13:39:01 -04:00
Anuken
d0da46e715 Merge remote-tracking branch 'origin/master' 2021-06-05 13:38:38 -04:00
Anuken
9144f57b16 Fixed #5369 2021-06-05 13:38:32 -04:00
Patrick 'Quezler' Mounier
4ab115d007 Get rid of potentially white period (#5368) 2021-06-05 12:03:44 -04:00
Anuken
b4dad32b2b Status effect particle color pass 2021-06-05 11:10:26 -04:00
Anuken
c80f2d6cf4 Heal *all* cores on game start 2021-06-05 10:01:15 -04:00
Anuken
f87054c667 Merge remote-tracking branch 'origin/master' 2021-06-05 09:49:04 -04:00
Anuken
2f2dc01c6b Heal player cores on start 2021-06-05 09:49:00 -04:00
genNAowl
9f087214a1 Just a Few Small Changes to Status Effect Stat Displays (#5361)
* Messing Around with Status Effect Stats

* Longer, but cleaner and less buggy

Co-authored-by: Leonwang4234 <leonwang4234@gmail.com>
2021-06-05 09:01:38 -04:00
Anuken
6e05319424 Merge remote-tracking branch 'origin/master' 2021-06-05 08:57:30 -04:00
Anuken
151c4f13df Fixed #5362 2021-06-05 08:57:25 -04:00
Sharlotte
c6242fe7f1 [KO] Bleeding-Edge Bundle Update (#5352)
* [KO] Bleeding-Edge Bundle Update

* Update bundle_ko.properties
2021-06-04 20:28:07 -04:00
Anuken
7243ae4e95 Merge remote-tracking branch 'origin/master' 2021-06-04 20:19:15 -04:00
Anuken
3e636cba6b Finalized packr update 2021-06-04 20:19:11 -04:00
Volas171
5f28e26176 Add Mindustrypvp.ml to 7.0 BE list (#5360)
* yeet

* lol almost forgot that
2021-06-04 19:17:53 -04:00
Tegas Aziz
0a7d5b20c7 7.0 Indonesian Bundle (#5349)
* 7.0 Indonesian Bundles

* Update bundle_in_ID.properties

* small additions
2021-06-04 18:18:40 -04:00
Anuken
f9c48d0a02 WIP packr update 2021-06-04 17:32:53 -04:00
Anuken
dd9ec950be Faster payload blocks & voids 2021-06-04 13:14:21 -04:00
Anuken
a1cae3bc29 No timers for driver payloads 2021-06-04 11:52:27 -04:00
Anuken
944b9ae2cf No payload source power 2021-06-04 11:35:01 -04:00
Anuken
8ec62e9dba Duct bridge polish 2021-06-04 11:08:53 -04:00
Anuken
af676ea030 Merge remote-tracking branch 'origin/master' 2021-06-04 10:57:18 -04:00
Anuken
89fdda0ef6 Various minor bugfixes 2021-06-04 10:57:15 -04:00
Humanoid-X
4283f9f8d7 Update TechTree.java (#5357) 2021-06-04 10:56:22 -04:00
Anuken
527856e1b0 Mod dialog layout fixes 2021-06-04 09:48:31 -04:00
Anuken
1bbb52877f Let bullets have speed = 0 2021-06-04 08:53:39 -04:00
Anuken
6ceb1d5058 Merge remote-tracking branch 'origin/master' 2021-06-04 08:36:31 -04:00
Anuken
de9371f0bb Possible dexing error fix 2021-06-04 08:36:27 -04:00
genNAowl
b8daa422ee I Like Stats (#5347)
Co-authored-by: Leonwang4234 <leonwang4234@gmail.com>
2021-06-04 08:31:33 -04:00
Anuken
677bad5c60 Fixed #5348 2021-06-04 08:30:16 -04:00
Anuken
fcf1bdd701 Shock mine team region 2021-06-03 21:49:58 -04:00
Anuken
8fc61215a5 Show ducts 2021-06-03 21:37:58 -04:00
Anuken
6b33064196 Merge remote-tracking branch 'origin/master' 2021-06-03 19:49:49 -04:00
Anuken
c29d75f5d1 Fixed RailBulletType not dealing damage 2021-06-03 19:49:42 -04:00
Sharlotte
9f7568552f typo (#5021)
* typpppppo

* Update bundle_ko.properties
2021-06-03 19:16:08 -04:00
Anuken
00ca247d0f Inverse trig logic functions 2021-06-03 19:12:33 -04:00
Anuken
a2a4302c8c Merge remote-tracking branch 'origin/master' 2021-06-03 19:04:17 -04:00
Anuken
86ae13ed95 Improved Cyerce trails 2021-06-03 19:04:13 -04:00
Parkurist
a264a1cd65 Fixed 1 untranslated line (#5140) 2021-06-03 18:25:41 -04:00
Anuken
4932d11d7b Misc cleanup 2021-06-03 18:24:54 -04:00
Anuken
3f27cebfb6 Fire light 2021-06-03 16:09:32 -04:00
Anuken
9cd482d389 Minor bugfix 2021-06-03 16:01:51 -04:00
Anuken
c674b5c256 Merge remote-tracking branch 'origin/master' 2021-06-03 15:59:39 -04:00
Anuken
1c4184db4b Less respawn rubberbanding 2021-06-03 15:59:22 -04:00
QmelZ
0247301272 Custom Mass Driver Bullets (#5300)
* custom mass driver bullets

* ohno

* should be fixed now
2021-06-03 14:41:08 -04:00
VozDuh
1cbd58820e Fix For Metal Environments (#5322) 2021-06-03 14:36:55 -04:00
TranquillyUnpleasant
eb7e65668c Rotate slider in the mirror filter. (#5228)
* Rotate

* ToggleOption
2021-06-03 14:35:31 -04:00
Ngọc Lam
f91cc2eace Update Vietnamese Translation. (#5238)
* Update translation, fix some typo

* About 150 lines to do left.

* Typos fix #_1

* Typos fix + add trans

* Update to lastest commit.

* Base logic translation.

* a lot of typo ...

* some update from main bundle.

* Add more logic hint.

* Tracking update from main bundle.

* Translate some position.

Co-authored-by: EzLam <winbam1357@gmail.com>
2021-06-03 14:34:40 -04:00
Vanguard
942204bff1 [Bundle][RU] Update (#5028)
* double newline fix

hint.guardian

* 13 changed lines

mod.enabled
mod.disabled
status.burning.name
status.freezing.name
status.wet.name
status.melting.name
status.sapped.name
status.spore-slowed.name
status.tarred.name
status.overclock.name
status.shocked.name
status.blasted.name
status.unmoving.name

* yon't

* x'nt

* Update bundle_ru.properties

* 1 new, 1 changed

New:
stat.healing

Changed:
bullet.healpercent

Co-authored-by: Antsiferov Andrew <summet.dev@gmail.com>
2021-06-03 14:34:27 -04:00
kituta
43e13038f4 Update bundle_ja.properties (#5338) 2021-06-03 14:34:00 -04:00
genNAowl
6d28098180 Fix Boat Trails Being Drawn on Land (#5340)
* update

* Revert "update"

This reverts commit 6ff3523276.

* Hacky Implementation

* Revert "Hacky Implementation"

This reverts commit 632121312d.

* Not so Hacky Implementation

Co-authored-by: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com>
Co-authored-by: Leonwang4234 <leonwang4234@gmail.com>
Co-authored-by: Anuken <arnukren@gmail.com>
2021-06-03 14:31:23 -04:00
Anuken
f1cf1efe32 Build retry 2021-06-03 14:23:16 -04:00
Anuken
c345ad37b9 Merge remote-tracking branch 'origin/master' 2021-06-03 13:59:00 -04:00
Anuken
ac20b17e0b Mod bugfixes 2021-06-03 13:58:56 -04:00
OSP
a06ee52fb5 Add MinDurka v7 BE server. (#5341) 2021-06-03 13:26:45 -04:00
Anuken
41ccda03a8 Merge remote-tracking branch 'origin/master' 2021-06-03 12:27:08 -04:00
Anuken
3f7edc9018 Use BE servers instead of v6 2021-06-03 12:27:04 -04:00
Ahsoka-501
8f390468dc moved thedimas to C.A.M.S. (#5325) 2021-06-03 12:11:52 -04:00
Anuken
c6b4db8a4e arc 2021-06-03 11:41:14 -04:00
Anuken
978a5a80e3 arc 2021-06-03 11:40:18 -04:00
Anuken
c964704fe1 Merge remote-tracking branch 'origin/master' 2021-06-03 11:37:40 -04:00
Anuken
1313ed2761 Sprite packing fix 2021-06-03 11:37:33 -04:00
Somka000
4c5f27037b Add 7.0 server to BE list (#5336)
Co-authored-by: Anuken <arnukren@gmail.com>
2021-06-03 10:57:21 -04:00
RebornTrack970
bf17788485 Added an experimental V7 server to BE list (#5333) 2021-06-03 10:55:36 -04:00
ulwepo
c0dce6ca41 Update servers_v6.json (#5339)
This is a PVP server for Japanese.
2021-06-03 10:55:03 -04:00
Anuken
17873d93cc I am so sick of JITPack dying 2021-06-03 10:52:44 -04:00
Anuken
48c1421afe Further pack testing 2021-06-03 10:46:45 -04:00
Anuken
5d88dbf3b9 jitpack. 2021-06-03 10:32:54 -04:00
Anuken
91f472d88f jitpack. 2021-06-03 10:32:31 -04:00
Anuken
5533721f3c Added missing bundle/tech entries / Pack debug 2021-06-03 10:21:43 -04:00
Anuken
0c85a6ee47 Pack testing 2021-06-03 10:15:34 -04:00
Anuken
8128542a1f Trigger BE builds before tests 2021-06-03 09:52:45 -04:00
Anuken
7a93c21d10 Test: Disable antialiasing 2021-06-03 09:49:41 -04:00
Anuken
e248f44099 More bugfixes 2021-06-02 18:28:07 -04:00
Anuken
f854d0b1e6 Higher payload conveyor clip size 2021-06-02 18:21:37 -04:00
Anuken
fbe45aba74 Misc bugfixes 2021-06-02 17:44:57 -04:00
Anuken
79e079671c Triggering BE build 2021-06-02 17:08:32 -04:00
Anuken
4cd411d5ee Duct consistency 2021-06-02 17:07:08 -04:00
Anuken
9aae443e72 More netcode updates 2021-06-02 17:04:31 -04:00
Anuken
462a64bf21 Netcode updates 2021-06-02 16:51:52 -04:00
Anuken
eba6514fb5 #5329 without the weird indent 2021-06-02 14:54:03 -04:00
Anuken
1eebf0d270 Merge remote-tracking branch 'origin/master' 2021-06-02 12:52:57 -04:00
Anuken
dd7542032c Unnecessary Time.mark() 2021-06-02 12:52:49 -04:00
Anuken
5b8c4c4f8e Update README.md 2021-06-02 12:50:03 -04:00
Anuken
bab8c20f3b Update README.md 2021-06-02 12:49:33 -04:00
Anuken
662473936c Remove unused shader 2021-06-02 12:41:19 -04:00
Anuken
c9a1de1148 arc 2021-06-02 11:47:42 -04:00
Anuken
e16ce5b651 Removed BuildConfig import 2021-06-02 11:34:41 -04:00
Anuken
fa99a9b335 It's not even pre-alpha yet 2021-06-02 11:30:13 -04:00
Anuken
28b235ef07 Partial 7.0 merge - API preview 2021-06-02 11:08:08 -04:00
Romanin
ea75a357ca Update servers_v6.json (#5328)
Change RCR IP
2021-06-02 09:07:02 -04:00
genNAowl
60ceb63731 I would like to join contributor gang (#5327) 2021-06-02 08:51:55 -04:00
buthed010203
f5c8965616 ignore colors (#5324)
why isnt this already a thing
2021-06-01 12:50:11 -04:00
RebornTrack970
f42b147b06 Temporary Omega Server Change (#5321)
* Temporary Omega Server Change

* Added Rush and Castle Wars too

* Alright???

* Update servers_v6.json
2021-06-01 10:03:29 -04:00
Anuken
22b27dc168 Revert server move 2021-06-01 09:00:57 -04:00
MEEP of Faith
551ebb6b31 Wow I worded that terribly (#5320) 2021-05-31 17:49:37 -04:00
MEEP of Faith
8b95d2db0d Knockback following bullet direction (#5313) 2021-05-31 14:28:35 -04:00
Lrakotobe
b7c185ca1b correction of spelling mistakes (#5127) 2021-05-31 14:26:00 -04:00
RebornTrack970
8b50590cc5 Added Rapid and Testing Server (#5315)
(Testing server is a brand new idea, might get removed later on)
Rapid by Intervection.
2021-05-30 11:00:40 -04:00
MEEP of Faith
1ea4567912 Display Mass Driver range and reload stats (#5307)
* Display range and reload stats

* Unneeded
2021-05-29 08:43:34 -04:00
MEEP of Faith
dadbaa1380 e.rotation, 360f in randlLenVectors unneeded, remove them. (#5242) 2021-05-28 16:18:38 -04:00
buthed010203
0bf25cdd01 fix potential crash (#5305)
I dont think this can even happen without some plugins or mods but its better to be safe than sorry.
2021-05-28 13:27:20 -04:00
Thomas Widyantoko
2f07a21d66 Indonesian translation standardization (#5296)
* Indonesian bundle update

lenum.controller description and Tar Fields map

* translation bundle sync

* Indonesian translation standardization
2021-05-28 10:48:52 -04:00
MrDuck557
39d725d5ff Healing Status Effect Stat (#5304)
* Up

* Ground

* Healing

Very tiny change
2021-05-27 23:23:53 -04:00
NiChrosia
dd0b5f791c Add spawn function with Position argument to UnitType (#5293) 2021-05-26 19:37:33 -04:00
GaviTSRA
e3fdc1d57c Updated TSR Hub ip (#5297)
* Update servers_v6.json

* Update servers_v6.json

Changed TSR Hub ip
2021-05-26 14:40:17 -04:00
buthed010203
e22af83ed1 Fix a random disconnect (#5292)
This almost never happens but since the flood uses this method extensively, everyone gets disconnected every hour or so so I fixed it myself.
2021-05-25 15:34:33 -04:00
Darkness6030
265f38dcc6 Update MinDurka IP (#5284)
The biggest update of mindustry server ever! We've added SO many useful features, commands, new servers and more!
2021-05-23 11:25:07 -04:00
Anuken
008b2c57c5 Update LogicBlock.java 2021-05-22 13:30:05 -04:00
Anuken
256482a486 Update gradle.properties 2021-05-22 13:28:43 -04:00
MEEP of Faith
e4c434e26e lightningType follow angle (#5282)
* lightningType follow angle

* this is more complicated than it should be

time to make it less stupid
2021-05-22 08:41:04 -04:00
buthed010203
be71664436 Lower surge tower schem priority (#5277)
The priority of surge towers is now -15 (default for power nodes is -10). Schems with surge towers will often see them automatically connected to random buildings only a couple tiles away which are already in range of other nodes, the hope here is that this fixes that.
2021-05-20 12:33:40 -04:00
MEEP of Faith
db897d037d Unit Command Radius (#5269)
* Unit Command Radius

* Make effect change with radius

* Fix command center effect

* Display true radius
2021-05-19 14:34:57 -04:00
RebornTrack970
86d50e9147 Closed Backup 2r2t, reopened original 2r2t (#5273) 2021-05-19 13:48:29 -04:00
MEEP of Faith
0764fcb476 More random unit effects (#5272)
* More random fall smoke effects

* Do the same with status effects.
2021-05-19 08:25:28 -04:00
andrew3737
9a225d96ef 4 new Application Tests added (#5207) 2021-05-18 14:44:30 -04:00
SAMBUYYA
5eb80ead93 Update bundle_in_ID.properties (#5247)
* Update bundle_in_ID.properties

Adding and change some words. Menambah dan mengubah beberapa kata.

* Update bundle_in_ID.properties

* Update bundle_in_ID.properties

Third change. Perubahan ketiga.
2021-05-18 09:04:28 -04:00
Leonid Skorospelov
760962c2b4 Make CoreItemsDisplay not show up if nothing to show (#5263) 2021-05-17 14:10:05 -04:00
Leonid Skorospelov
b11b087d53 Do not reset mineTile of units to null client-side (#5252) 2021-05-16 13:52:03 -04:00
OSP
2d8b3918d2 Closed... (#5239) 2021-05-14 08:52:31 -04:00
BenMan95
6398fed47b Fixed logic controller updating (#5240) 2021-05-13 13:07:30 -04:00
Tegas Aziz
1e1d7d2e92 Add @SAMBUYYA on contributors (#5231)
@SAMBUYYA just translate Indonesian on pull #5230
2021-05-10 19:07:48 -04:00
SAMBUYYA
716fed08c3 Update bundle_in_ID.properties (#5230)
Mengubah dan menambahkan beberapa kata.
2021-05-10 17:05:43 -04:00
MEEP of Faith
6fcdb9d505 Draw flame over cracks (#5222) 2021-05-08 08:48:50 -04:00
MEEP of Faith
8d1a34b652 Include distance in foreshadow targetting (#5221)
* Include distance in foreshadow targetting

* Divide by larger number
2021-05-07 18:35:58 -04:00
TranquillyUnpleasant
ac8c81a0d5 Allow banned blocks to still be placeable within map editor. (#5212)
This makes it so you don't have to pointlessly unban and then re ban blocks while making maps.
2021-05-07 08:45:43 -04:00
Darkness6030
5f7e2d97ef Fixed minigames (now they are working) (#5209)
Oh yes
I have fixed minigames server
And TowerDefense, Crawler Arena and Siege are working well.
2021-05-06 15:00:53 -04:00
RebornTrack970
927077c54c Replaced 2r2t with Backup 2r2t (#5204)
The original 2r2t server is broken at the moment, replaced with backup one.
2021-05-06 10:01:30 -04:00
thedimas3007
a861da1a67 Update thedimas hub ip (#5201)
Sry for doing this again, but server was migrated to new, more powerfull host
2021-05-05 14:52:51 -04:00
Antsiferov Andrew
c53e14dd31 Fix crash when there's no sectors on planet (#5202)
`sectors.size - 1` is `-1` when there's no sectors on planet.
relevant crash log:
```
[E] java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 16
	at arc.struct.Seq.get(Seq.java:451)
	at mindustry.type.Planet.getLastSector(Planet.java:114)
	at mindustry.ui.dialogs.PlanetDialog.show(PlanetDialog.java:185)
        ...
        at mindustry.desktop.DesktopLauncher.main(DesktopLauncher.java:36)
```
2021-05-05 14:51:35 -04:00
Tegas Aziz
622f735953 Update contributors (#5193) 2021-05-04 09:11:30 -04:00
MEEP of Faith
d820e7d31a Fix small linecast issue (#5192) 2021-05-03 22:10:36 -04:00
Thomas Widyantoko
0193d586d1 updated Indonesian translation (#4608)
* updated Indonesian translation

fixes and additions, structure descriptions are fixed and shortened

* Update bundle_in_ID.properties

logic tooltips and other fixes part 1

* Update bundle_in_ID.properties

logic tooltips and other fixes part 2

* Update: continue translating from me

* again and again

* Update bundle_in_ID.properties

logic tooltips and other fixes part 3

* Graphic Type Hint Translation 1

* Graphic Type Hint Translation 2

graphicstype.type translation

* Fix graphicstype.image typo

(Because no ones likes typo, isn't it?)

* Update bundle_in_ID.properties

logic tooltips and other fixes part 4

* Update bundle_in_ID.properties

logic tooltips and other fixes part 5 (last one)

Co-authored-by: Tegas Aziz <49786146+WilloIzCitron@users.noreply.github.com>
Co-authored-by: Anonymous Albert <44728043+TheMrAlbert@users.noreply.github.com>
2021-05-03 08:49:32 -04:00
Technisha Circuit
a56a0aa14f Currently not working due to technical difficulties (#5187) 2021-05-03 08:36:21 -04:00
Skat
7853767ee5 Fix plastanium conveyor linking (#5185) 2021-05-02 20:18:22 -04:00
Skat
9e519ab801 Add missed scarlet color (#5182) 2021-05-02 13:50:53 -04:00
Darkness6030
5995f0e215 Change MinDurka's ip address (#5180)
FINALLY WE HAVE EATEN DDOSERS, IT NOW WORKS!
2021-05-02 09:34:08 -04:00
Technisha Circuit
7f50969dbc Added jinxed.realms.us.to to the server list (#5177) 2021-04-30 14:10:26 -04:00
thedimas3007
76db20e410 Change thedimas hub IP (#5175)
@Anuken please merge it as soon as you can
2021-04-30 09:29:28 -04:00
MEEP of Faith
d9c5e5e08d No reason to hide ItemEntry (#5173) 2021-04-30 09:29:19 -04:00
Antsiferov Andrew
451568d5b2 Make Mod an abstract class (#5155) 2021-04-29 19:51:46 -04:00
MEEP of Faith
e8e23961f4 why toxopid cannon not in weapons folder (#5166) 2021-04-29 14:15:55 -04:00
Skat
0e1c4ccd6d Suggestions for unknown command response (#5165) 2021-04-29 13:11:51 -04:00
OSP
73f0593acf IP change MinDefence (#5164)
I hope the last change of the ip.
2021-04-29 10:18:36 -04:00
Darkness6030
b779ec3759 Add a domain name to MinDurka. (#5159) 2021-04-27 20:55:10 -04:00
Skat
41423d43bb Dont try load mod icons on server (#5160) 2021-04-27 10:24:30 -04:00
MEEP of Faith
7dc3dfd29e e.checkTarget is shorter (#5157) 2021-04-26 15:22:33 -04:00
Leonid Skorospelov
6eea8bebdf Actually sync ItemTurret's ammo (#5154) 2021-04-25 09:06:45 -04:00
Darkness6030
8cd7e1c307 Update MinDefense Ip address (#5147)
@osp54 forgot to update it, so i made it :-/
2021-04-24 17:24:25 -04:00
MEEP of Faith
3910d7769b Add space to bullet.lightning (#5136) 2021-04-22 11:11:08 -04:00
Anuken
f22f5a8ad9 ... 2021-04-20 21:07:46 -04:00
Anuken
f14d4d91b0 why does this work locally 2021-04-20 21:01:56 -04:00
Anuken
fc68a8af19 ???? 2021-04-20 20:58:04 -04:00
Anuken
0c3e110326 Update build.gradle 2021-04-20 20:50:10 -04:00
Anuken
434ee7de97 Create SStats.java 2021-04-20 08:28:09 -04:00
Anuken
6e1880f409 Update SStats.java 2021-04-20 08:28:00 -04:00
Anuken
e8fa899c40 Update SStats.java 2021-04-20 08:24:06 -04:00
Anuken
d9b2f4ae67 Update SStats.java 2021-04-20 08:20:02 -04:00
ThePythonGuy
137792131e Fix Tetrative Reconstructor's sprite odd 1-pixel error (#5119)
* Create e

* Delete e

* Add files via upload
2021-04-17 12:53:57 -04:00
MEEP of Faith
fbddc0abc9 Turn MiningRange into a UnitType variable. (#5112)
* Turn MiningRange into a UnitType variable.

Long range mining go brrrrr

* Anuke Approved
2021-04-16 20:57:40 -04:00
NiChrosia
d9b6ada0b3 Replace 'sattelite' with 'satellite' (#5110) 2021-04-15 17:00:35 -04:00
Drullkus
f005b83ed3 Make PathCost interface public (#5109) 2021-04-15 09:27:02 -04:00
OSP
d41362a71d Create Mindustry Defence category (#5095)
* Create Mindustry Defence category

End add new server Tower Defence PvP, it is not working now, but it will work soon

* Update servers_v6.json

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
Co-authored-by: Anuken <arnukren@gmail.com>
2021-04-12 22:29:58 -04:00
Slava0135
6cfb88a2e8 redundant field in DrillBuild (#5101) 2021-04-12 15:18:55 -04:00
BlueWolf
865d0082cc Sand water (#5100) 2021-04-12 14:02:00 -04:00
Darkness6030
24c8d6e040 Add Minigames HUB to global server list (#5097)
This is a hub of all MinDurka minigames
We have:
1) Castle Wars (by Xusk)
2) Tower Defense
3) MS:GO (by Xusk)
4) Zone Capture (by Misaka)
5) The Siege (by OSP, the gamemode belongs to Mindustry.defense)
Soon we'll add some gamemodes like Crawler Arena
2021-04-12 12:11:34 -04:00
Skat
a55039447a Add file name printing (#5093) 2021-04-11 09:26:47 -04:00
Drullkus
aef7709764 Added addUpgrade method to Reconstructor to avoid dealing with array creation in Rhino JS (#5094) 2021-04-10 21:28:28 -04:00
BasedUser
c99b79762a they have a n a m e (#5074) 2021-04-10 20:15:12 -04:00
MEEP of Faith
0d8f95354f Move damage and knockback to hitEntity (#5000)
* Move damge and knockback to `hitEntity`

* b.damage, not damage
2021-04-10 09:15:34 -04:00
MEEP of Faith
7e7e6b70e2 Randomly Rotated Particle Weather Particles (#5020) 2021-04-10 09:12:51 -04:00
MEEP of Faith
56b8986a0b Unit Sprite Heresyn't (#5084) 2021-04-08 15:56:22 -04:00
Qiyi Shan
3b8aa0484e Fixed a typo (#5081)
Fixed a typo that swaps description of drawFlush/printFlush
2021-04-08 11:29:56 -04:00
Elvys Soares
2b9d516922 Refactored duplicated tests into a parameterized one (#5077)
* Added test parameters to avoid code duplication

Signed-off-by: Elvys Soares <eas5@cin.ufpe.br>

* Added test parameters to avoid code duplication and updated JUnit to 5.7.1 version

Signed-off-by: Elvys Soares <eas5@cin.ufpe.br>
2021-04-08 10:25:48 -04:00
MEEP of Faith
bdf958ed17 Copy ItemStack functions over to LiquidStack (#5080) 2021-04-08 10:05:37 -04:00
Arik
5fc4e1f5a5 Black Bar Fix (#5079) 2021-04-07 21:07:08 -04:00
MEEP of Faith
24f0a17395 Crawlers do not explode from their center (#5078) 2021-04-07 18:48:34 -04:00
RebornTrack970
08d200e1fa Moved 2r2t (#5066)
Now 2r2t is a mindustry host instead of mc.
2021-04-06 18:08:06 -04:00
Somka000
782442f144 Add .pl server to public list (#5069)
Minigame server
2021-04-06 15:55:11 -04:00
buthed010203
7e6f3e3761 Update pr.yml (#5067) 2021-04-06 11:50:49 -04:00
Anuken
6f8d43bc78 typo fix 2021-04-04 12:36:19 -04:00
MEEP of Faith
ad46fa93a5 Ignore VSCode settings (#5054) 2021-04-03 20:39:56 -04:00
Anuken
4fec3bfcf9 PR typo fix 2021-04-03 11:42:47 -04:00
Anuken
ef49a16c9e Use core/src for kotlin source 2021-04-03 11:31:41 -04:00
Anuken
93f3d6039e Excluded comp** from final jar 2021-04-03 11:15:41 -04:00
Anuken
19778c743c Fewer methods 2021-04-03 01:28:19 -04:00
Anuken
28a2e7c697 Kotlin support fixes 2021-04-03 00:59:57 -04:00
Max Leibowitz
d538e63c4c :) 2021-04-02 17:26:58 -07:00
Max Leibowitz
31f8d6c830 Move to kapt for annotation processing (allows kotlin to be used in the core module) 2021-04-02 17:25:07 -07:00
GaviTSRA
02e68d27a3 Added TSR Hub to serverlist (#4965)
* Added TSR Hub to serverlist

* Update servers_v6.json

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

* Update servers_v6.json

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

* Updated hub ip

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
2021-04-02 10:37:58 -04:00
Anuken
0aa2d5f18c Merge remote-tracking branch 'origin/master' 2021-04-01 09:27:43 -04:00
Anuken
5a5854420e Long support for UI.formatAmount 2021-04-01 09:27:36 -04:00
TranquillyUnpleasant
6a8127e7cd un-escape \n for string configs. (#5042)
Currently it escapes them to a literal text, making multi line messages impossible.
2021-04-01 09:14:20 -04:00
Anuken
1bd4c96ee8 Power node placement fixes 2021-03-31 22:36:46 -04:00
Anuken
d66d7e09e3 Explosion damage tweaks 2021-03-31 13:28:08 -04:00
Anuken
e85e43c162 Disable blending when drawing displays 2021-03-31 11:18:17 -04:00
Anuken
dee020bd71 Merge remote-tracking branch 'origin/master' 2021-03-31 09:52:35 -04:00
Anuken
d548a11c60 Skip invalid lobbies 2021-03-31 09:52:31 -04:00
RebornTrack970
59bf2e3571 Updated Server Omega (#5031)
Moved Expansion and fixed immesureable ping.
2021-03-31 09:46:14 -04:00
Anuken
6ebabbb56a Fixed local games sometimes not being found on Steam 2021-03-31 09:42:44 -04:00
Anuken
179cedd6cc Merge remote-tracking branch 'origin/master' 2021-03-30 20:58:20 -04:00
Anuken
3b56f36bbd Fixed #5029 2021-03-30 20:58:13 -04:00
buthed010203
be0765f5ea Radar shouldn't sense derelict as enemies (#5027)
Turrets no longer shoot derelict units by default, they shouldn't be sensed as enemies if this is the case.
2021-03-30 11:58:53 -04:00
Anuken
1715741e37 arc 2021-03-30 11:06:39 -04:00
Anuken
aaa41fbf72 copyNatives before iOS copyAssets 2021-03-30 10:42:51 -04:00
Anuken
2096d006be Merge remote-tracking branch 'origin/master' 2021-03-30 10:24:57 -04:00
Anuken
e455f7d170 Fixed #5025 2021-03-30 10:24:53 -04:00
MEEP of Faith
7a0e772a05 Remove space between damage and /sec (#5024) 2021-03-30 10:22:08 -04:00
Anuken
7f3b8f7e56 jitpack is dead 2021-03-29 20:35:07 -04:00
Anuken
5a493ebf0e arc 2021-03-29 19:05:55 -04:00
Anuken
70bcb0a940 copyNatives task for iOS 2021-03-29 18:33:03 -04:00
Anuken
3105478328 Merge remote-tracking branch 'origin/master' 2021-03-29 15:06:21 -04:00
Anuken
ae8833e679 Fixed rare schematic crash 2021-03-29 15:06:06 -04:00
OSP
afbac48a45 Change ip hub (#5014)
transition to new hosting
2021-03-29 09:38:56 -04:00
Anuken
4a9eeeeac3 Merge branch 'master' of https://github.com/Anuken/Mindustry 2021-03-28 19:56:20 -04:00
liuxilu
e7d9cddbae update zh-CN for logic hints (#4655)
* add new logic hints to zh-CN

* logic hints for zh-CN completed

* more hints and fix

* draw operations

* update command hint

* 载荷

* up to d7f848f
2021-03-28 18:44:29 -04:00
YellOw139
a6fe1275c7 [Bundle][RO] Update (#4860)
* [Bundle][RO] Update

This PR ~~was~~ will soon be tested in-game ~~and is ready to merge at any time~~.

Changelog:

- New strings/changes up to commit b75a8d5260
- Typo fixes & various other improvements

* Status effects

* Minor change

* Improve, adapt

* After test bundles be like

* cleanup

* typo

* options, options...

* Added block_info keybind name
2021-03-28 18:42:50 -04:00
Prosta4okua
2f3fd9de3b [Bundle][uk_UA] Update Ukrainian (#4868)
* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

03.06.2021

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties
2021-03-28 18:42:41 -04:00
MEEP of Faith
8b2e78ab1e maxRange overriding on laser bulllets (#4873) 2021-03-28 18:42:26 -04:00
Catchears
d04eaa81e0 german translation (#4897)
* update german translation to b75a8d5260

* update german translation to 8e52d8a272

* foreshadow improvements

* block info keybind
2021-03-28 18:41:06 -04:00
cinnx
b71d5837e9 Update bundle_pl.properties (#4910)
Added missing part of the translation from the English bundle file, fixed a lot of typos.

Huge thanks to:
Somka#9325
count sudoku#9564
Zielony Trójkąt#9074
for pointing out those errors :D
2021-03-28 18:40:55 -04:00
MEEP of Faith
332b1ce100 collidesGround targetting in GroundAI (#4911) 2021-03-28 18:40:47 -04:00
Vanguard
c17040b1ab [Bundle][RU] Update (#4927)
* 21 new, 4 changed, 4 deleted

New:
status.burning.name
status.freezing.name
status.wet.name
status.muddy.name
status.melting.name
status.sapped.name
status.spore-slowed.name
status.tarred.name
status.overclock.name
status.shocked.name
status.blasted.name
status.unmoving.name
stat.opposites
stat.damagemultiplier
stat.healthmultiplier
stat.speedmultiplier
stat.reloadmultiplier
stat.buildspeedmultiplier
stat.reactive
bullet.lightning
content.status.name

Changed:
wavemode.health
boss.health
rules.blockhealthmultiplier
rules.unithealthmultiplier

Deleted:
bullet.sapping
bullet.shock
bullet.freezing
bullet.tarred

* 1 new line

keybind.block_info.name
2021-03-28 18:38:50 -04:00
Sharlotte
a3bd7ba3ad [KO]Update Bundle (#4935) 2021-03-28 18:38:44 -04:00
MEEP of Faith
2a7525cdf1 Allow for dynamic counting (#4988) 2021-03-28 18:38:16 -04:00
Anuken
de458f5c26 Cleanup 2021-03-28 10:57:06 -04:00
Anuken
db931bace2 Cleanup 2021-03-28 10:56:19 -04:00
AzCraft
43602caab2 Added Bulgarian translations. [bundle_bg.properties] (#5013) 2021-03-28 09:42:37 -04:00
RebornTrack970
793e957d0d OmegaHub Updated (#5011)
Moved Annexation and Rush from Minecraft hosting to Mindustry host and improved ping.
Added Castle Wars by Xusx.
2021-03-28 09:42:03 -04:00
Anuken
66594a2b32 Fixed #5012 2021-03-28 09:41:08 -04:00
Anuken
e81219dd3e Merge remote-tracking branch 'origin/master' 2021-03-27 22:12:54 -04:00
Anuken
d11a26c568 Pack effect icons in UI spritesheet 2021-03-27 22:12:47 -04:00
Skat
cf3543ec07 Change int parameters to long type (#5008) 2021-03-27 17:38:55 -04:00
Valeriy
886d8752b7 Update servers_v6.json (#4753) 2021-03-27 16:45:52 -04:00
fuzzbuck
496d6b139e Update servers_v6.json (#5003)
TLD change
2021-03-26 20:30:42 -04:00
Darkness6030
3ce064ca11 Update mindurka ip (#5002)
Mindurka.ru come back!)
[RU]Заспидранил восстановление сервера с нуля за один день!) Гений мысли...
2021-03-26 14:17:48 -04:00
Anuken
1be7f3b36c Merge remote-tracking branch 'origin/master' 2021-03-26 10:13:46 -04:00
Anuken
3fddd6eea7 .size 2021-03-26 10:13:42 -04:00
CxZxRainzz
339fc8113b Shutting down CxZx (#4996)
* Shutting down CxZx

I shutting down the servers because of family issues i hope to rejoin the community later

* Update servers_v6.json

Co-authored-by: Joshua Fan <joshuaptfan@gmail.com>

Co-authored-by: Joshua Fan <joshuaptfan@gmail.com>
2021-03-25 23:00:37 -04:00
Anuken
025bf5ffc3 Merge remote-tracking branch 'origin/master' 2021-03-25 22:42:01 -04:00
Anuken
1dc2906343 Fixed #4997 2021-03-25 22:41:55 -04:00
L0615T1C5-216AC-9437
eea276118f Add more ports for Chaotic Neutral (#4981) 2021-03-25 16:33:12 -04:00
Anuken
36aa9d5696 Fixed #4994 2021-03-25 13:51:13 -04:00
Anuken
1fc1efc410 Merge remote-tracking branch 'origin/master' 2021-03-25 12:51:31 -04:00
Anuken
7924d9b9ef Fixed #4993 2021-03-25 12:51:24 -04:00
Patrick 'Quezler' Mounier
3336e6cdde Exclude derelict targets from Units.bestEnemy (#4990) 2021-03-25 09:52:35 -04:00
MEEP of Faith
4ec81b0669 Make Repair Points affected by overdrive (#4985) 2021-03-24 19:09:20 -04:00
Anuken
d10123295c More pattern variables 2021-03-24 12:55:57 -04:00
Anuken
0929593efc Buildscript cleanup 2021-03-24 12:41:50 -04:00
way-zer
ace6eed653 Add assetsJar artifact for core (#4983)
* Add assetsJar artifact for core

* Add musicJar artifact for core
2021-03-24 12:38:02 -04:00
키에르
a40731624a Add uuid return to PlayerBanEvent (#4982)
* Update EventType.java

* Update Administration.java
2021-03-24 10:02:21 -04:00
VizardAlpha
268672adb8 Update bundle_fr.properties (#4973)
* Update bundle_fr.properties

Minor correction on the translation.
Addition of commits validated in the translation of Mar 10, 2021 ...

* Update bundle_fr.properties

* Update bundle_fr.properties

* Update bundle_fr.properties
2021-03-23 13:03:23 -04:00
Patrick 'Quezler' Mounier
af20db4cf7 Colorize the inner corners of other conduit sprites (#4978) 2021-03-23 09:44:09 -04:00
OSP
8a76e7ea25 Add Mindustry.Defense to global server list (#4960) 2021-03-23 09:23:12 -04:00
Anuken
d72db58b3f Minor ConstructBlock logic tweak 2021-03-22 17:02:09 -04:00
Anuken
975043d439 Use more ping threads 2021-03-22 12:47:02 -04:00
Anuken
40b5ee391d Merge remote-tracking branch 'origin/master' 2021-03-22 11:32:44 -04:00
Anuken
e87e678d0f Use AsyncExecutor for pings 2021-03-22 11:32:36 -04:00
Susideur-YT
d098a9ddc2 Just some change in frensh (#4862) 2021-03-22 10:20:30 -04:00
Joshua Fan
7145ffaf28 Add block info keybind (#4284)
* Add block info keybind

* Change block info keybind to backtick

* Change block info keybind to F1
2021-03-21 14:08:53 -04:00
彭瑞暄
d4afc3ecde Large Update & Sync (#4968) 2021-03-20 21:02:44 -04:00
MEEP of Faith
1ecc49f9b7 Use continuous damage (#4966) 2021-03-20 08:38:17 -04:00
Anuken
7ffd46aee9 #4964 2021-03-19 14:36:25 -04:00
Anuken
afd6570ced More floor render optimization 2021-03-18 22:18:21 -04:00
Anuken
49c099a03c Minor floor renderer optimization 2021-03-18 21:55:33 -04:00
Anuken
851fa09e0c More dispose() cleanup 2021-03-18 16:29:40 -04:00
Anuken
b0c8426d0f arc 2021-03-18 16:16:28 -04:00
Anuken
9384d661c1 Removed unnecessary dispose() 2021-03-18 16:14:53 -04:00
Anuken
a06e0a325b Kill Android app on exit (Arc) 2021-03-18 15:39:26 -04:00
Anuken
a8c31d838f Mesh attribute cleanup 2021-03-18 15:18:59 -04:00
Anuken
46cf48e012 Reverted IntelliJ's "cleanup" 2021-03-18 12:58:57 -04:00
Anuken
bfa9d65314 Ban player ID before IP 2021-03-18 12:57:27 -04:00
Anuken
aa7936100e Merge remote-tracking branch 'origin/master' 2021-03-17 20:53:09 -04:00
Anuken
b20ef104b9 Fixed #4952 2021-03-17 20:53:04 -04:00
Anuken
53b99a650c Update Damage.java 2021-03-17 19:32:32 -04:00
Anuken
2025d6ad2d Merge remote-tracking branch 'origin/master' 2021-03-17 17:40:14 -04:00
Anuken
c7cbe50876 More misc cleanup 2021-03-17 17:39:50 -04:00
Darkness6030
267d822771 Change mindurka's ip address (#4939)
I've changed ip address of Mindurka.ru
2021-03-17 09:16:30 -04:00
Anuken
786d638ad0 Misc cleanup 2021-03-16 21:51:12 -04:00
Anuken
89997ad8d4 Merge remote-tracking branch 'origin/master' 2021-03-16 21:29:22 -04:00
Anuken
036ab282e0 Update bug_report.md 2021-03-16 18:26:19 -04:00
Anuken
e9df213d0a Decreased sector damage check radius 2021-03-16 18:25:30 -04:00
Anuken
150aab3530 Server crash fix / Disabled logic config sync / Faster logic parsing 2021-03-15 17:13:27 -04:00
Anuken
96607ef753 Non-recursive door floodfill 2021-03-15 11:39:06 -04:00
Anuken
075ddf104b Merge remote-tracking branch 'origin/master' 2021-03-13 20:01:14 -05:00
Anuken
671ca5c94f Disabled logicUnitBuild on servers by default 2021-03-13 20:01:01 -05:00
CxZxRainzz
e7ed7c0765 Update servers_v6.json (#4933)
Remove 1 server and add another
2021-03-13 09:13:53 -05:00
Anuken
92db8349dc Don't log irrelevant payload errors 2021-03-12 18:31:41 -05:00
Anuken
ea3f6cf4a0 PowerNode link cleanup & bugfixes 2021-03-12 13:38:28 -05:00
Anuken
dd191493c0 Merge remote-tracking branch 'origin/master' 2021-03-12 13:16:39 -05:00
Anuken
2c08b82fef Fixed blocks linking through insulated walls 2021-03-12 13:16:35 -05:00
thedimas3007
f7c5315599 Update servers_v6.json (#4834)
* Update servers_v6.json

* missing `,`

Co-authored-by: Кусь Пчелов <srthmnt@gmail.com>
Co-authored-by: Anuken <arnukren@gmail.com>
2021-03-12 09:49:30 -05:00
Noah van der Aa
ad6e458636 Add mindustry.party server to server list. (#4926) 2021-03-12 09:48:03 -05:00
Anuken
f04e763667 Merge remote-tracking branch 'origin/master' 2021-03-12 09:35:37 -05:00
Anuken
d545dc0d02 Logic negative coordinate support 2021-03-12 09:35:32 -05:00
Sunny Kim
f895dfe341 dragMultiplier for status effects (#4870) 2021-03-11 18:41:03 -05:00
Anuken
c5bea40e7d Votekick cleanup 2021-03-11 16:55:00 -05:00
TranquillyUnpleasant
e08052d7d6 Votekick edit (#4924)
* Add "yes" and "no" compatibility to votekicks

* Lowercase
2021-03-11 16:54:10 -05:00
Anuken
78a7d15f3e Merge remote-tracking branch 'origin/master' 2021-03-11 10:53:01 -05:00
Anuken
b2e2cfb48d Log client commands before handling 2021-03-11 10:52:53 -05:00
BasedUser
f694e42c78 Add mindustry.ru to global server list (#4697) 2021-03-10 20:52:57 -05:00
Anuken
8e52d8a272 Stat reactivity cleanup 2021-03-10 17:34:39 -05:00
Anuken
1a6843ef2c Re-added unused corroded effect to ensure compatibility 2021-03-10 17:15:18 -05:00
Anuken
4b9fa9a79e Status effect display for bullets 2021-03-10 16:42:28 -05:00
Anuken
c15a8b52d2 Status sprites 2021-03-10 16:22:35 -05:00
Anuken
bd36ca821d Improvements of status effects in database 2021-03-10 16:22:07 -05:00
MEEP of Faith
d4e6817232 Boosting Rise Speed (#4918) 2021-03-10 13:48:33 -05:00
genNAowl
096b54305d Add Status Effect Stats to Core Database (#4883)
* Status Effect Stats

* import cleanup

* Add Sk7725's icons

Tinting still a WIP

Co-authored-by: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com>
2021-03-10 12:04:09 -05:00
RebornTrack970
8b52561a31 Added the Expansion gamemode to Omega Hub (#4913) 2021-03-10 09:38:56 -05:00
Anuken
b1e8001ae8 Minor cleanup 2021-03-09 19:04:29 -05:00
Anuken
8aba480148 Merge remote-tracking branch 'origin/master' 2021-03-09 15:52:29 -05:00
Anuken
429ff738f9 Error on unknown jump locations 2021-03-09 15:51:36 -05:00
Anuken
ae2736d393 New logic parser 2021-03-09 15:47:19 -05:00
Niels Horn
fc28fbc662 Translate the entire bundle into Danish. (#4900)
* Translate the entire bundle into Danish.

There were close to no existing translations of Mindustry in Danish, and the ones there were had concord issues, spelling issues or contained a mix of Danish and English.
This pull-request provides a thourough translation, covering all names - unit names have remained mostly the same, - as well as tutorials and descriptions.

A collaborative effort with @AsgerHB.

* Update contributors
2021-03-09 09:56:22 -05:00
Anuken
4f37f29ae8 progress 2021-03-09 09:51:37 -05:00
MEEP of Faith
c4da670a7c do not the multi charge (#4905) 2021-03-08 19:14:04 -05:00
Anuken
57dca33c2b Merge branch 'master' into new-logic-parser
# Conflicts:
#	gradle.properties
2021-03-08 18:03:00 -05:00
Anuken
4a1419af0e Merge remote-tracking branch 'origin/master' 2021-03-08 17:12:56 -05:00
Anuken
25c61590d1 Minor cleanup / Another slight vela buff 2021-03-08 17:12:53 -05:00
CxZxRainzz
f6925953ad Update servers_v6.json (#4901)
add PvP server for CxZx
2021-03-08 15:05:26 -05:00
Anuken
e1b0e07f3c Return 1 for sensing dead in null objects 2021-03-08 09:52:36 -05:00
Anuken
b2d16f69da Merge remote-tracking branch 'origin/master' 2021-03-07 17:54:47 -05:00
Anuken
a60772a81e Fixed #4891 2021-03-07 17:54:43 -05:00
buthed010203
6151ebf716 Fix button background (#4892)
This button had a black background which stuck out from everything else on the page, this fixes that.
2021-03-07 16:35:04 -05:00
Anuken
cccb8d6d19 Fixed #4890 2021-03-07 15:45:28 -05:00
Anuken
a2c7c38a3e Reduced Nova range 2021-03-07 09:32:52 -05:00
Anuken
b51d34e893 Fixed #4882 2021-03-06 17:25:03 -05:00
Anuken
79a62cd74c Merge remote-tracking branch 'origin/master' 2021-03-06 14:23:14 -05:00
Anuken
18c669ae3e Fixed #4879 / Fixed server speed validation check 2021-03-06 14:23:10 -05:00
buthed010203
8474c921ec Fix indentation (#4877)
Indents are 4 spaces not 3
2021-03-06 11:11:17 -05:00
Anuken
7c7c57c64e Various parsing bugfixes 2021-03-06 11:10:32 -05:00
Anuken
f7e8412b4b Fixed #4875 2021-03-06 10:41:31 -05:00
Anuken
0d3be917b2 Extra checks for crash fix 2021-03-06 00:05:15 -05:00
Anuken
5c85ba84db Actual JSON weather (?) 2021-03-05 23:20:19 -05:00
Anuken
07d11f02d8 Fixed #4869 2021-03-05 22:16:29 -05:00
Anuken
fce30e6ae5 Sync based on system time 2021-03-05 17:22:44 -05:00
Anuken
24195dac81 Added Voz-Duh's large launch pad sprite (#4861) 2021-03-05 14:27:15 -05:00
Joshua Fan
830fe03898 Add buildSpeedMultiplier status effect (#4816)
* Make disarmed status effect prevent building

* Revert disarmed changes, add buildSpeedMultiplier status

* Add buildSpeedMultiplier to StatusComp
2021-03-05 14:09:46 -05:00
Anuken
4690aae197 Fixed cores being replaceable 2021-03-05 14:00:53 -05:00
Anuken
b82dca89b3 Merge remote-tracking branch 'origin/master' 2021-03-05 12:06:44 -05:00
Anuken
dce79a621a Close connections immediately on kick 2021-03-05 12:06:40 -05:00
buthed010203
d6f00a5d2d Remove dead servers from v5 server list (#4858)
From what I can see, atnanner is the only network that still hosts any v5 servers, all the others are either on v6 or are offline.
2021-03-05 11:59:44 -05:00
Anuken
545b75a091 [Модификация] Доступен -> Доступна 2021-03-05 11:38:57 -05:00
Anuken
979daca221 Merge remote-tracking branch 'origin/master' 2021-03-05 11:36:15 -05:00
Anuken
fb2fed7c28 mod.multiplayer.compatible RU 2021-03-05 11:36:11 -05:00
YellOw139
0ec71750b7 [Bundle][RO] Update (#4750)
* [Bundle][RO] Update

This PR was tested in-game and is ready to merge at any time.

Changelog:

- New strings/changes up to commit f78719afc0
- Typo fixes & various other improvements

* WIP

* typo

* Speaking logically

* Update core/assets/bundles/bundle_ro.properties

Co-authored-by: MLGTASTICa <61350382+MLGTASTICa@users.noreply.github.com>

* Opted for a better term: controlor, not controller

* double-tap

* Times joined & kicked

Co-authored-by: MLGTASTICa <61350382+MLGTASTICa@users.noreply.github.com>
2021-03-05 11:30:55 -05:00
BlueTechno
51f7858b78 Added "armor" and "buildingdamage" stats (#4794)
Also fixed the description of the separator (so it matches the english description)
2021-03-05 11:30:45 -05:00
PolgarSasa
ab83b872a2 Update bundle_hu.properties (#4790) 2021-03-05 11:30:39 -05:00
Sharlotte
879adb7458 [KO] Update bundle_ko.properties (#4803)
* Update bundle_ko.properties

* translated recent changing

* https://github.com/Anuken/Mindustry/pull/4844

* Update bundle_ko.properties

* Add files via upload

* unofficial details
2021-03-05 11:29:26 -05:00
Catchears
39cbd607ef update german translation (#4826)
* update german translation to 781410ea04

* change from stuffyAI

* update german translation to ae838b9392
2021-03-05 11:29:18 -05:00
Antsiferov Andrew
7478cdf4a4 [Bundle][RU] actual L10n (#4748)
* 3 new, 1 deleted

New:
rules.unitcapvariable
rules.unitcap
laccess.color

Deleted:
lenum.color

* 1 line changed

rules.unitcap

* 2 new, 1 deleted

New:
mods.initfailed
setting.modcrashdisable.name

Deleted:
mods.alphainfo
-
Отключение модов после вылета на старте

* Fixed #4715

* Content parser class discovery improvements

* Use github build status (#4718)

Why does this still use travis? It was ditched months ago

* Make status colors the same (#4719)

It bothers me ok

* Better splash damage handling for small radii

* Fixed #4729

* Uncap content names in resolution

* Fixed UnitReq parsing

* Fixed #4732

* Allow JSON mod content types from other class loaders

* Better JSON null validation / Disable mods on startup crash

* Logic tooltips on mobile devices w/ long-press

* Add Survival and PvP servers (#4736)

* Update servers_v6.json (#4735)

add 1 more server for CxZx

* arc

* Balance tweaks

* Fixing remaining typos\errors in bundle_fr (#4397)

* Fixing remaining typos errors in bundle_fr

There are some errors that had managed to get through the verification. Imma chase them down!

* added logic hints and some typo fixes

* Fixing 2 typos in bundle.properties

L1548: Color statement affects every following draw operations.

* smolfixes

* Fixed "fix" in #4397

* [Bundle][RO] Update (#4725)

* [Bundle][RO] Update

This PR was tested in-game and is ready to merge at any time.

Changelog:

- New strings/changes up to commit 1ef7ae7079
- Typo fixes & various other improvements

* Reducing confusion

* Update bundle_ro.properties

* Fixing typos and descriptions [bundle_es.properties] (#4727)

* Fixing and descriptions [bundle_es.properties]

* Forgot something

* Update Logic Draw Hints (#4734)

Wrapped up some previous logic hints, too.

* german translation for build 125, full android translation (#4703)

* update german translation to 631e4d9eef

* update android translation to e816f6110d

with regard to 5ec5f1aa93

* improve translation with ideas from others

* update german steam discription to e86a3e9d09

* update german translation to 1ef7ae7079 (diff-5e346bcec4e8e1d545e035b1e438472bc51937398ac3e8e81308605ec82aea2c)

* changes from stuffyAI

* cross-platform as suggested by stuffyAI

* stuffyAI

genau, hast recht

Co-authored-by: stuffyAI <59014072+stuffyAI@users.noreply.github.com>

Co-authored-by: stuffyAI <59014072+stuffyAI@users.noreply.github.com>

* Update bundle_vi.properties (#4724)

* Fixed mod crash disable setting name

* Various fixes

* Steam icon changes

* arc

* Update Vietnamese Translation. (#4660)

* Update translation, fix some typo

* About 150 lines to do left.

* Typos fix #_1

* Typos fix + add trans

* Update to lastest commit.

* Base logic translation.

* a lot of typo ...

* some update from main bundle.

* Add more logic hint.

* translated recent update (#4742)

* Move update function of resupply point 5x1 spaces back (#4746)

* Remove stray spaces from accelerator (#4465)

* 10 new lines
graphicstype.clear
graphicstype.color
graphicstype.stroke
graphicstype.line
graphicstype.rect
graphicstype.linerect
graphicstype.poly
graphicstype.linepoly
graphicstype.triangle
graphicstype.image

* 1 line changed
lenum.stop (typo)

* 6 new lines

logic.nounitbuild
laccess.controller
laccess.dead
laccess.controlled
laccess.commanded
lenum.idle

* 1 new line

setting.doubletapmine.name

* 2 new, 2 changed

New:
trace.times.joined
trace.times.kicked

Changed:
unit.seconds
unit.minutes

* 1 line changed

trace.times.joined

* 1 new line

mod.multiplayercompatable
-
quick commit before potential merge, might fix it later

Co-authored-by: Vanguard <55051135+XEN0PHIL@users.noreply.github.com>
Co-authored-by: Anuken <arnukren@gmail.com>
Co-authored-by: buthed010203 <naguiar010203@gmail.com>
Co-authored-by: Fatonndev <56699208+Fatonndev@users.noreply.github.com>
Co-authored-by: CxZxRainzz <78591136+CxZxRainzz@users.noreply.github.com>
Co-authored-by: Phinner <62483793+Phinner@users.noreply.github.com>
Co-authored-by: YellOw139 <70975516+YellOw139@users.noreply.github.com>
Co-authored-by: BlueThecno <69437358+BlueThecno@users.noreply.github.com>
Co-authored-by: 彭瑞暄 <raymondpeng0725@gmail.com>
Co-authored-by: Catchears <57631841+Catchears@users.noreply.github.com>
Co-authored-by: stuffyAI <59014072+stuffyAI@users.noreply.github.com>
Co-authored-by: Arnyyx <74717260+Arnyyx@users.noreply.github.com>
Co-authored-by: Ngọc Lam <33188123+NgLamVN@users.noreply.github.com>
Co-authored-by: Sharlotte <60801210+Sharlottes@users.noreply.github.com>
Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
2021-03-05 11:28:28 -05:00
Patrick 'Quezler' Mounier
b75a8d5260 Fix typo to preserve sanity (#4857)
* compatable > compatible

* compatable > compatible
2021-03-05 11:27:51 -05:00
MEEP of Faith
120c694a42 Mention Foreshadow's special targeting in its description. (#4419)
* Mention Foreshadow special targetting.

* Better wording
2021-03-05 11:25:58 -05:00
MEEP of Faith
569293e577 Shadow with width/height (#4609) 2021-03-05 11:21:23 -05:00
Anuken
4f0f2499be mod.multiplayercompatable in gray 2021-03-05 11:19:55 -05:00
MEEP of Faith
d34dd0c603 Add message for mods that have hidden = true (#4717)
* Multiplayer compatability message

* Make more sense?
2021-03-05 11:17:55 -05:00
Anuken
b6c645b701 Better DefenderAI / Vela building / Anuken/Mindustry-Suggestions/issues/2074 2021-03-05 11:10:12 -05:00
MEEP of Faith
0c28bb7dcf DefenderAI that makes octs follow units (#4757) 2021-03-05 10:21:26 -05:00
Anuken
2bb303e709 Fixed #4856 2021-03-04 18:41:30 -05:00
Anuken
cc65feb392 Added ConnectionEvent 2021-03-04 18:39:47 -05:00
Anuken
c12b9ee3e3 Minor network packet handling tweaks 2021-03-04 17:58:28 -05:00
Anuken
d863c971c2 Gradle update / Mech animation fixes / Formation movement tweaks 2021-03-04 13:40:50 -05:00
MEEP of Faith
3ccdf45ed1 Is this what you wanted sk? (#4848) 2021-03-04 10:38:47 -05:00
Javier Domingo Cansino
efa5c5db7b Enable client to use a different data dir through env MINDUSTRY_DATA_DIR (#4851) 2021-03-04 10:34:23 -05:00
Anuken
d73cf9fcff Prevent early return in PowerNode config render 2021-03-03 14:42:41 -05:00
Anuken
93dafc82eb Fixed #4847 2021-03-03 12:44:56 -05:00
Anuken
87142b06c3 Merge branch 'master' of https://github.com/Anuken/Mindustry 2021-03-03 10:49:57 -05:00
Anuken
3075616b03 arc 2021-03-03 10:49:52 -05:00
buthed010203
019898dfc3 Turrets can properly replace eachother, cores can replace conveyors and minor cleanup. (#4841) 2021-03-03 09:15:50 -05:00
Patrick 'Quezler' Mounier
ae838b9392 Trace times joined & kicked (#4844)
* Trace times joined & kicked

* Make mindustry.* import obsolete
2021-03-03 09:09:05 -05:00
Anuken
4d9a30b7c7 Merge remote-tracking branch 'origin/master' 2021-03-02 18:45:22 -05:00
Anuken
ea82773157 Non-overdriveable core / Spurious mod warning fix 2021-03-02 18:45:18 -05:00
buthed010203
8289da1415 Nuclear reactor schem priority of -5 (#4840)
* Nuclear reactor schem priority of -5
2021-03-02 10:49:22 -05:00
Anuken
19eb6334b7 Merge remote-tracking branch 'origin/master' 2021-03-02 09:28:42 -05:00
Anuken
e992be1bfb Higher LogicBlock schem priority 2021-03-02 09:28:38 -05:00
MEEP of Faith
7e216d198e Remove duplicates and mild formatting. (#4837)
* Remove duplicate definitions in UnitTypes

* If Tsunami is indented, so should the others

It looks nicer as well.
2021-03-02 09:28:04 -05:00
MEEP of Faith
a89d50e74d Cursor should not change for other teams when hovering over doors and construction. (#4838)
* Cursor should not change for other teams.

* Use Built-in interaction check

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

* Building should use built-in check, same treatment for ConstructBlock

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
2021-03-02 09:25:15 -05:00
Anuken
05dc13c922 Fixed #4830 2021-03-01 13:06:47 -05:00
Patrick 'Quezler' Mounier
1de4dd1bfe Call super.drawPlace for menders & overdrives (#4831) 2021-03-01 13:02:27 -05:00
Anuken
72aa87128e Merge remote-tracking branch 'origin/master' 2021-03-01 11:58:59 -05:00
Anuken
8f91576f85 Fixed script loading for Turkish locale 2021-03-01 11:58:53 -05:00
Patrick 'Quezler' Mounier
4019c49fff Log who skipped the wave to the console (#4825) 2021-03-01 09:47:23 -05:00
Anuken
5f83c92829 Fixed #4824 / Fixed #4827 / Fixed #4829 2021-03-01 09:45:40 -05:00
Anuken
4c9cda7e40 Cleanup 2021-02-28 17:33:08 -05:00
Sunny Kim
01f7b1c9a6 New overdrive visuals for colorblind users (#4807) 2021-02-28 17:32:28 -05:00
Anuken
1a30edc55f Merge remote-tracking branch 'origin/master' 2021-02-28 17:17:08 -05:00
Anuken
49bccffd7c Link previews for power blocks near nodes 2021-02-28 17:17:03 -05:00
Patrick 'Quezler' Mounier
526157a514 Draw to-be affected blocks when placing projectors (#4818) 2021-02-28 13:58:06 -05:00
FiliusPatris
d025ba63e1 Display map names with underscores (#4819)
This makes it obvious how to specify map names with spaces. It also
allows for copy-pasting form the output of `maps`.
2021-02-28 13:27:47 -05:00
genNAowl
662515ce2e Make RepairPoints implement Ranged (#4813)
Co-authored-by: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com>
2021-02-28 09:19:35 -05:00
Joshua Fan
c55ff4ad5e Desktop double-click mining: fix click on mined tile to cancel (#4815) 2021-02-28 09:19:27 -05:00
Anuken
666c0f3582 Merge remote-tracking branch 'origin/master' 2021-02-27 15:10:39 -05:00
Anuken
0c00760ae0 Fixed result duplication in logic UI 2021-02-27 15:10:34 -05:00
Patrick 'Quezler' Mounier
2146b35e5a eacho ther (#4810)
* eacho ther

* Update Tile.java
2021-02-27 10:21:11 -05:00
Anuken
44d10a355e Improved power node link preview check 2021-02-27 10:16:54 -05:00
buthed010203
5037c4e00e Fix a few issues w/ double tap mining (#4798)
Currently, double tap mining consumes clicks so it prevents the player from configuring any block if they click twice within 500ms. The double tap mining was also using the `selected` var which could have been null causing a crash. This is a very messy solution but it does the job good enough
2021-02-27 10:12:00 -05:00
buthed010203
e4ecfc4ee7 Fixed #4791 since it is 100% a bug (#4801)
* Fixed #4719 since it is 100% a bug

This fix is somewhat janky as it checks if the rotation matches the exact original rotation but the likelihood of someone needing bridges along a belt rotated 1 or -1 times is super low. https://aethex.is-a.fail/t13ETd.webm

* unjank rotation

* fix potential crash, styling

* Use mathf.mod
2021-02-26 19:06:27 -05:00
Anuken
ae6be1db3b UnitSpawnAbility 'type' field JSON compat / Fixed health bar out of bounds 2021-02-26 18:51:14 -05:00
Anuken
d06eee99ba Merge remote-tracking branch 'origin/master' 2021-02-26 13:13:41 -05:00
Anuken
8349c8a5b8 Fixed #4802 2021-02-26 13:13:37 -05:00
Darkness6030
2df7484649 Add servers to global list (#4761)
* Add servers to global list
2021-02-26 11:13:51 -05:00
Anuken
1bb97cae39 Fixed #4792 2021-02-25 18:34:24 -05:00
Anuken
f5ac3ff7b0 null controller for dead units 2021-02-25 10:54:05 -05:00
Anuken
f6eba3edae Synchronized settings / Dead units sense as non-controlled 2021-02-25 09:12:17 -05:00
Joshua Fan
781410ea04 Double-tap to mine, tap anywhere to cancel (#4469)
* Double-tap to mine, tap anywhere to cancel

* Make comment consistent

* Remove desktop left-click mining cancel, prioritize mobile unit control over mining

* Mobile: double-tap doesn't configure blocks if unit was double-tapped; control unit detected in first tap of double-tap

* Add 'double-tap to mine' setting (default off)

* Desktop: cancel mining when mined tile is clicked

* Comment typo

* Prevent redundant condition check

* Cleanup

Co-authored-by: Anuken <arnukren@gmail.com>
2021-02-25 08:43:40 -05:00
Anuken
c0d9712beb Fixed #4784 2021-02-25 08:39:35 -05:00
Anuken
0672878920 Fixed #4781 2021-02-24 15:27:22 -05:00
Anuken
b0cdac59f0 Merge remote-tracking branch 'origin/master' 2021-02-24 15:01:48 -05:00
Anuken
4b6a83dd82 Improved auto-bridging with conveyors 2021-02-24 15:01:44 -05:00
Minxyzgo
25ae7b97aa schematic uses camera position (#4775)
* Update InputHandler.java

* Update InputHandler.java

* Update MobileInput.java

* Update InputHandler.java

* Update MobileInput.java
2021-02-24 12:25:38 -05:00
Anuken
afbde49fa2 Fixed #4776 / Fixed #4772 2021-02-24 09:52:53 -05:00
Anuken
befda9baaa Merge branch 'master' of https://github.com/Anuken/Mindustry 2021-02-23 17:07:45 -05:00
Anuken
502c7eb388 arc 2021-02-23 17:07:40 -05:00
Antsiferov Andrew
ad2a18f929 Fix player.locale to be default (#4768)
* fix player.locale == default

* Update NetClient.java
2021-02-23 14:53:23 -05:00
Anuken
830eb86a0f Better power node linking visualization 2021-02-23 12:53:43 -05:00
Anuken
e5413cebdc Fixed #4766 2021-02-23 11:29:51 -05:00
Anuken
1a75951840 Merge remote-tracking branch 'origin/master' 2021-02-23 10:47:58 -05:00
Anuken
08e36aca98 Crafter progress modulo / Segment buff 2021-02-23 10:47:54 -05:00
Patrick 'Quezler' Mounier
aabbfd624a Add disarmed status effect that disarms (#4762)
* Add disarmed status effect that disarms

* Update core/src/mindustry/entities/comp/StatusComp.java

Co-authored-by: Anuken <arnukren@gmail.com>

* Rename disarms -> disarm

Co-authored-by: Anuken <arnukren@gmail.com>
2021-02-23 09:51:43 -05:00
Anuken
2f836d779a Update servers_v6.json 2021-02-22 10:22:28 -05:00
Anuken
d7f848f8cd contXXXXX constants -> ctrl 2021-02-22 10:18:42 -05:00
Anuken
6f7f980563 Merge remote-tracking branch 'origin/master' 2021-02-22 10:15:43 -05:00
Anuken
e2515fc4bf Automatic conveyor/conduit bridging 2021-02-22 10:15:40 -05:00
UnCaughT
d06a7bb7a2 Update servers_v6.json (#4756)
The server now has a new domain.
2021-02-22 10:09:55 -05:00
Sharlotte
dbdfdac94b translated yesterday update (#4755)
* translated newest bundle updates
* ps. why did i forgot 1ef7ae7079 (diff-5e346bcec4e8e1d545e035b1e438472bc51937398ac3e8e81308605ec82aea2c) this commit previous translation update?
2021-02-22 09:19:46 -05:00
Anuken
3b2a0cfd66 Removed RCR due to lack of moderation 2021-02-22 09:05:27 -05:00
Anuken
5b652ae51f Added guidelines for inappropriate server content 2021-02-22 09:04:22 -05:00
Anuken
9e8a2b8296 Minor bridge linking fix 2021-02-21 20:07:20 -05:00
Anuken
e6787c5146 Controlled sensor improvements 2021-02-21 12:28:00 -05:00
Anuken
d8552915f7 Cleanup 2021-02-21 10:35:33 -05:00
Anuken
61d9dea487 Logic config replication / logicUnitBuild rule / Copy-able ConstructBlocks 2021-02-21 10:23:46 -05:00
Anuken
02d8f679b5 Merge remote-tracking branch 'origin/master' 2021-02-21 09:22:05 -05:00
Anuken
544828d9fb Logic controller & dead`` sensors 2021-02-21 09:22:02 -05:00
liuxilu
ca726d579e unit boosting sensor (#4738) 2021-02-21 09:20:36 -05:00
Anuken
8257fb5e11 Merge remote-tracking branch 'origin/master' 2021-02-21 08:54:10 -05:00
Anuken
0d287e6d59 Water Extractor: Use metaglass to be consistent with pumps 2021-02-21 08:53:47 -05:00
Patrick 'Quezler' Mounier
4d9dc66a96 Remove stray spaces from accelerator (#4465) 2021-02-20 12:52:56 -05:00
Patrick 'Quezler' Mounier
868d4e05f7 Move update function of resupply point 5x1 spaces back (#4746) 2021-02-20 12:51:12 -05:00
Anuken
a3bf39d86b Minor cleanup 2021-02-20 10:08:15 -05:00
Sharlotte
d76795e0ae translated recent update (#4742) 2021-02-20 10:07:29 -05:00
Ngọc Lam
a2e075ee54 Update Vietnamese Translation. (#4660)
* Update translation, fix some typo

* About 150 lines to do left.

* Typos fix #_1

* Typos fix + add trans

* Update to lastest commit.

* Base logic translation.

* a lot of typo ...

* some update from main bundle.

* Add more logic hint.
2021-02-20 10:07:19 -05:00
Anuken
2df2a0971a arc 2021-02-20 09:49:49 -05:00
Anuken
158e23bd5e Steam icon changes 2021-02-19 19:43:37 -05:00
Anuken
467402ef73 Various fixes 2021-02-19 19:20:04 -05:00
Anuken
f78719afc0 Fixed mod crash disable setting name 2021-02-19 19:10:27 -05:00
Antsiferov Andrew
e6513702d6 [Bundle][RU] actual L10n (#4726)
* 3 new, 1 deleted

New:
rules.unitcapvariable
rules.unitcap
laccess.color

Deleted:
lenum.color

* 1 line changed

rules.unitcap

Co-authored-by: Vanguard <55051135+XEN0PHIL@users.noreply.github.com>
2021-02-19 18:33:43 -05:00
Arnyyx
aeddf7014c Update bundle_vi.properties (#4724) 2021-02-19 18:32:52 -05:00
Catchears
1613f49c16 german translation for build 125, full android translation (#4703)
* update german translation to 631e4d9eef

* update android translation to e816f6110d

with regard to 5ec5f1aa93

* improve translation with ideas from others

* update german steam discription to e86a3e9d09

* update german translation to 1ef7ae7079 (diff-5e346bcec4e8e1d545e035b1e438472bc51937398ac3e8e81308605ec82aea2c)

* changes from stuffyAI

* cross-platform as suggested by stuffyAI

* stuffyAI

genau, hast recht

Co-authored-by: stuffyAI <59014072+stuffyAI@users.noreply.github.com>

Co-authored-by: stuffyAI <59014072+stuffyAI@users.noreply.github.com>
2021-02-19 18:32:44 -05:00
彭瑞暄
57a833c2fb Update Logic Draw Hints (#4734)
Wrapped up some previous logic hints, too.
2021-02-19 18:32:32 -05:00
BlueThecno
6de53343a4 Fixing typos and descriptions [bundle_es.properties] (#4727)
* Fixing and descriptions [bundle_es.properties]

* Forgot something
2021-02-19 18:32:17 -05:00
YellOw139
7bb4b09308 [Bundle][RO] Update (#4725)
* [Bundle][RO] Update

This PR was tested in-game and is ready to merge at any time.

Changelog:

- New strings/changes up to commit 1ef7ae7079
- Typo fixes & various other improvements

* Reducing confusion

* Update bundle_ro.properties
2021-02-19 18:32:07 -05:00
Anuken
68020fa7d4 Fixed "fix" in #4397 2021-02-19 18:31:34 -05:00
Phinner
b94aba0301 Fixing remaining typos\errors in bundle_fr (#4397)
* Fixing remaining typos errors in bundle_fr

There are some errors that had managed to get through the verification. Imma chase them down!

* added logic hints and some typo fixes

* Fixing 2 typos in bundle.properties

L1548: Color statement affects every following draw operations.

* smolfixes
2021-02-19 18:30:49 -05:00
Anuken
0316009a9c Balance tweaks 2021-02-19 18:28:51 -05:00
Anuken
820f7f0ef2 arc 2021-02-19 17:25:37 -05:00
Anuken
6d105ad3e7 Merge remote-tracking branch 'origin/master' 2021-02-19 17:18:23 -05:00
Anuken
f043a5f340 Logic tooltips on mobile devices w/ long-press 2021-02-19 17:18:17 -05:00
CxZxRainzz
73d6f95d2e Update servers_v6.json (#4735)
add 1 more server for CxZx
2021-02-19 17:11:51 -05:00
Fatonndev
fb48070388 Add Survival and PvP servers (#4736) 2021-02-19 17:04:48 -05:00
Anuken
fa7697fc40 Better JSON null validation / Disable mods on startup crash 2021-02-19 13:28:31 -05:00
Anuken
b46a5c0bda Allow JSON mod content types from other class loaders 2021-02-19 09:45:51 -05:00
Anuken
1072c310ad Fixed #4732 2021-02-19 09:04:13 -05:00
Anuken
d5448b59a2 Fixed UnitReq parsing 2021-02-18 21:07:48 -05:00
Anuken
78317e6126 Uncap content names in resolution 2021-02-18 20:15:46 -05:00
Anuken
5a58f9c71a Fixed #4729 2021-02-18 17:00:23 -05:00
Anuken
06b8dd61c7 Better splash damage handling for small radii 2021-02-18 15:02:09 -05:00
Anuken
a81b5778a0 Merge remote-tracking branch 'origin/master' 2021-02-18 13:11:37 -05:00
Anuken
a7188c4884 Content parser class discovery improvements 2021-02-18 13:11:20 -05:00
buthed010203
0bf0d48a02 Make status colors the same (#4719)
It bothers me ok
2021-02-18 10:24:52 -05:00
buthed010203
dc5cd196ed Use github build status (#4718)
Why does this still use travis? It was ditched months ago
2021-02-17 19:44:04 -05:00
Anuken
f8f9bf228b Merge remote-tracking branch 'origin/master' 2021-02-17 17:12:36 -05:00
Anuken
d0dc1ea132 Fixed #4715 2021-02-17 17:12:32 -05:00
RebornTrack970
ff9fad6a2c One last server for the Omega (#4714)
* One last server for the Omega

Added the Annexation server from the OmegaHub to the list as it is the final server people actualy play on.

* Update servers_v6.json

Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>

Co-authored-by: Anuken <arnukren@gmail.com>
Co-authored-by: Patrick 'Quezler' Mounier <Quezler@me.com>
2021-02-17 11:05:16 -05:00
Anuken
76dbdb59ce Draw cells for unit payloads 2021-02-17 11:02:49 -05:00
Anuken
0013402962 Merge remote-tracking branch 'origin/master' 2021-02-17 09:49:08 -05:00
Anuken
1ef7ae7079 Logic hints for draw operations 2021-02-17 09:49:01 -05:00
buthed010203
07a39d0da8 V6 servers arent BE last i checked (#4713)
This has been bothering me the last few days and i assumed someone else would fix it and i wouldnt have to make a pr for something so tiny but here i am
2021-02-17 09:36:31 -05:00
Anuken
b8bfb30c56 Merge remote-tracking branch 'origin/master' 2021-02-17 09:15:21 -05:00
Anuken
00342ddaae Misc cleanup 2021-02-17 09:15:17 -05:00
Sharlotte
fb40c0b9de cursed typo (#4705)
cursed typocursed typocursed typocursed typocursed typocursed typocursed typocursed typo
2021-02-17 09:12:49 -05:00
Patrick 'Quezler' Mounier
5d9506eb12 Reshuffle nydus servers (#4708) 2021-02-17 09:12:20 -05:00
Anuken
080fe8c3c4 Decreased impact reactor explosion radius 2021-02-16 15:54:20 -05:00
Anuken
48745d7380 Steam crash fix 2021-02-16 13:40:34 -05:00
Anuken
315cbaec47 progress 2021-01-05 11:17:20 -05:00
Anuken
68535bfcaa progress 2021-01-03 16:21:17 -05:00
727 changed files with 26386 additions and 12372 deletions

View File

@@ -17,7 +17,7 @@ assignees: ''
**Link(s) to mod(s) used**: *The mod repositories or zip files that are related to the issue, if applicable.*
**Save file**: *The (zipped) save file you were playing on when the bug happened. THIS IS REQUIRED FOR ANY ISSUE HAPPENING IN-GAME OR IN MULTIPLAYER, REGARDLESS OF WHETHER YOU THINK IT HAPPENS EVERYWHERE. DO NOT DELETE OR OMIT THIS LINE UNLESS YOU ARE SURE THAT THE ISSUE DOES NOT HAPPEN IN-GAME.*
**Save file**: *The (zipped) save file you were playing on when the bug happened. THIS IS REQUIRED FOR ANY ISSUE HAPPENING IN-GAME OR IN MULTIPLAYER, REGARDLESS OF WHETHER YOU THINK IT HAPPENS EVERYWHERE. DO NOT DELETE OR OMIT THIS LINE UNLESS YOU ARE SURE THAT THE ISSUE DOES NOT HAPPEN IN-GAME. IF YOU DO NOT HAVE A SAVE, DON'T WASTE TIME OPENING THIS ISSUE.*
If you remove the line above without reading it properly and understanding what it means, I will reap your soul. Even if you're playing on someone's server, you can still save the game to a slot.

View File

@@ -6,15 +6,15 @@ on:
- 'v*'
jobs:
buildJava14:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 14
- name: Set up JDK 16
uses: actions/setup-java@v1
with:
java-version: 14
java-version: 16
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Add Arc release
@@ -47,7 +47,7 @@ jobs:
git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds
cd ../MindustryBuilds
echo "Updating version to ${RELEASE_VERSION:1}"
echo versionName=6-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${RELEASE_VERSION:1} > version_fdroid.txt
echo versionName=7-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${GITHUB_RUN_NUMBER} > version_fdroid.txt
git add .
git commit -m "Updating to build ${RELEASE_VERSION:1}"
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds

View File

@@ -1,17 +1,17 @@
name: Pull Request Tests
on: [pull_request]
on: [pull_request, workflow_dispatch]
jobs:
buildJava14:
testPR:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 14
- name: Set up JDK 16
uses: actions/setup-java@v1
with:
java-version: 14
java-version: 16
- name: Run unit tests and build JAR
run: ./gradlew test desktop:dist
- name: Upload desktop JAR for testing

View File

@@ -3,17 +3,11 @@ name: Tests
on: [push, workflow_dispatch]
jobs:
buildJava14:
runPush:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 14
uses: actions/setup-java@v1
with:
java-version: 14
- name: Run unit tests
run: ./gradlew clean cleanTest test
- name: Trigger BE build
if: ${{ github.repository == 'Anuken/Mindustry' }}
run: |
@@ -23,3 +17,9 @@ jobs:
git tag ${BNUM}
git config --global user.name "Build Uploader"
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds ${BNUM}
- name: Set up JDK 16
uses: actions/setup-java@v1
with:
java-version: 16
- name: Run unit tests
run: ./gradlew clean cleanTest test

4
.gitignore vendored
View File

@@ -102,6 +102,10 @@ com_crashlytics_export_strings.xml
.externalToolBuilders/
*.launch
## VSCode
.vscode/
## NetBeans
/nbproject/private/

View File

@@ -26,7 +26,7 @@ This means:
- `camelCase`, **even for constants or enums**. Why? Because `SCREAMING_CASE` is ugly, annoying to type and does not achieve anything useful. Constants are *less* dangerous than variables, not more. Any reasonable IDE should highlight them for you anyway.
- No underscores for anything. (Yes, I know `Bindings` violates this principle, but that's for legacy reasons and really should be cleaned up some day)
- Do not use braceless `if/else` statements. `if(x) statement else statement2` should **never** be done. In very specific situations, having braceless if-statements on one line is allowed: `if(cond) return;` would be valid.
- Prefer single-line javadoc `/** @return for example */` instead of multiline javadoc whenver possible
- Prefer single-line javadoc `/** @return for example */` instead of multiline javadoc whenever possible
- Short method/variable names (multipleLongWords should be avoided if it's possible to do so reasonably, especially for variables)
- Use wildcard imports - `import some.package.*` - for everything. This makes incorrect class usage more obvious (*e.g. arc.util.Timer vs java.util.Timer*) and leads to cleaner-looking code.

View File

@@ -1,7 +1,7 @@
![Logo](core/assets-raw/sprites/ui/logo.png)
[![Build Status](https://travis-ci.org/Anuken/Mindustry.svg?branch=master)](https://travis-ci.org/Anuken/Mindustry)
[![Discord](https://img.shields.io/discord/391020510269669376.svg?logo=discord&logoColor=white&logoWidth=20&labelColor=7289DA&label=Discord)](https://discord.gg/mindustry)
[![Build Status](https://github.com/Anuken/Mindustry/workflows/Tests/badge.svg?event=push)](https://github.com/Anuken/Mindustry/actions)
[![Discord](https://img.shields.io/discord/391020510269669376.svg?logo=discord&logoColor=white&logoWidth=20&labelColor=7289DA&label=Discord&color=17cf48)](https://discord.gg/mindustry)
A sandbox tower defense game written in Java.
@@ -18,7 +18,7 @@ See [CONTRIBUTING](CONTRIBUTING.md).
Bleeding-edge builds are generated automatically for every commit. You can see them [here](https://github.com/Anuken/MindustryBuilds/releases).
If you'd rather compile on your own, follow these instructions.
First, make sure you have [JDK 14](https://adoptopenjdk.net/) installed. Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands:
First, make sure you have [JDK 16](https://adoptopenjdk.net/archive.html?variant=openjdk16&jvmVariant=hotspot) installed. **Other JDK versions will not work.** Open a terminal in the Mindustry directory and run the following commands:
### Windows

View File

@@ -8,14 +8,15 @@ 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 appropriate MOTD, name and description.** This is set with `config <name/desc/motd> <value>`. "Appropriate" means that:
2. Make sure that your server is able to handle inappropriate content - this includes NSFW display/sorter art and abusive messages. **Servers that allow such content will be removed immediately.** Consider banning display blocks if it is a problem for your server: `rules add bannedBlocks ["logic-display", "large-logic-display"]`.
3. **Set an appropriate MOTD, name and description.** This is set with `config <name/desc/motd> <value>`. "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.
- Try to be professional in your text; use common sense.
3. **Get some good maps.** *(optional, but highly recommended)*. Add some maps to your server and set the map rotation to custom-only. You can get maps from the Steam workshop by subscribing and exporting them; using the `#maps` channel on Discord is also an option.
4. **Check your server configuration.** *(optional)* I would recommend adding a message rate limit of 1 second (`config messageRateLimit 1`), and disabling connect/disconnect messages to reduce spam (`config showConnectMessages false`).
5. Finally, **submit a pull request** to add your server's IP to the list.
4. **Get some good maps.** *(optional, but highly recommended)*. Add some maps to your server and set the map rotation to custom-only. You can get maps from the Steam workshop by subscribing and exporting them; using the `#maps` channel on Discord is also an option.
5. **Check your server configuration.** *(optional)* I would recommend adding a message rate limit of 1 second (`config messageRateLimit 1`), and disabling connect/disconnect messages to reduce spam (`config showConnectMessages false`).
6. Finally, **submit a pull request** to add your server's IP to the list.
This should be fairly straightforward: Press the edit button on the [server file](https://github.com/Anuken/Mindustry/blob/master/servers_v6.json), then add a JSON object with a single key, indicating your server address.
For example, if your server address is `google.com`, you would add a comma after the last entry and insert:
```json

View File

@@ -17,7 +17,7 @@
android:usesCleartextTraffic="true"
android:appCategory="game"
android:label="@string/app_name"
android:theme="@style/ArcTheme" android:fullBackupContent="@xml/backup_rules">
android:fullBackupContent="@xml/backup_rules">
<meta-data android:name="android.max_aspect" android:value="2.1"/>
<activity
android:name="mindustry.android.AndroidLauncher"

View File

@@ -7,9 +7,7 @@ buildscript{
}
dependencies{
//IMPORTANT NOTICE: any version of the plugin after 3.4.1 will break builds
//it appears abstract methods don't get desugared properly (if at all)
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'com.android.tools.build:gradle:7.1.0-alpha02'
}
}
@@ -20,35 +18,20 @@ configurations{ natives }
repositories{
mavenCentral()
maven{ url "https://maven.google.com" }
jcenter() //remove later once google fixes the dependency
}
dependencies{
implementation project(":core")
implementation arcModule("backends:backend-android")
implementation 'com.jakewharton.android.repackaged:dalvik-dx:9.0.0_r3'
natives "com.github.Anuken.Arc:natives-android:${getArcHash()}"
natives "com.github.Anuken.Arc:natives-freetype-android:${getArcHash()}"
natives "com.github.Anuken.Arc:natives-box2d-android:${getArcHash()}"
//android dependencies magically disappear during compilation, thanks gradle!
def sdkFile = new File((String)findSdkDir(), "/platforms/android-29/android.jar")
if(sdkFile.exists()) compileOnly files(sdkFile.absolutePath)
jcenter() //remove later once google/JetBrains fixes the dependency
}
task deploy(type: Copy){
dependsOn "assembleRelease"
from "build/outputs/apk/release/android-release.apk"
from "build/outputs/apk/standard/release/android-standard-release.apk"
into "../deploy/"
rename("android-release.apk", "${generateDeployName('android')}.apk")
rename("android-standard-release.apk", "${generateDeployName('android')}.apk")
}
android{
buildToolsVersion '29.0.3'
compileSdkVersion 29
buildToolsVersion '30.0.2'
compileSdkVersion 30
sourceSets{
main{
manifest.srcFile 'AndroidManifest.xml'
@@ -59,9 +42,13 @@ android{
assets.srcDirs = ['assets', 'src/main/assets', '../core/assets/']
jniLibs.srcDirs = ['libs']
}
gp{
java.srcDirs = ['srcgp']
}
androidTest.setRoot('tests')
}
packagingOptions{
exclude 'META-INF/robovm/ios/robovm.xml'
}
@@ -73,7 +60,7 @@ android{
applicationId "io.anuke.mindustry"
minSdkVersion 14
targetSdkVersion 29
targetSdkVersion 30
versionName versionNameResult
versionCode = (System.getenv("TRAVIS_BUILD_ID") != null ? System.getenv("TRAVIS_BUILD_ID").toInteger() : vcode)
@@ -109,6 +96,14 @@ android{
}
}
buildTypes{
all{
minifyEnabled = true
shrinkResources = true
proguardFiles("proguard-rules.pro")
}
}
if(project.hasProperty("RELEASE_STORE_FILE") || System.getenv("CI") == "true"){
buildTypes{
release{
@@ -116,10 +111,37 @@ android{
}
}
}
// Specifies one flavor dimension.
flavorDimensions "version"
productFlavors{
standard{
}
gp{
applicationIdSuffix ".gp"
versionNameSuffix "-gp"
}
}
}
// called every time gradle gets executed, takes the native dependencies of
// the natives configuration, and extracts them to the proper libs/ folders
// so they get packed with the APK.
dependencies{
implementation project(":core")
implementation arcModule("backends:backend-android")
implementation 'com.jakewharton.android.repackaged:dalvik-dx:9.0.0_r3'
natives "com.github.Anuken.Arc:natives-android:${getArcHash()}"
natives "com.github.Anuken.Arc:natives-freetype-android:${getArcHash()}"
gpImplementation "com.google.android.gms:play-services-games:21.0.0"
gpImplementation "com.google.android.gms:play-services-auth:19.0.0"
//android dependencies magically disappear during compilation, thanks gradle!
def sdkFile = new File((String)findSdkDir(), "/platforms/android-29/android.jar")
if(sdkFile.exists()) compileOnly files(sdkFile.absolutePath)
}
task copyAndroidNatives(){
configurations.natives.files.each{ jar ->
copy{
@@ -131,29 +153,13 @@ task copyAndroidNatives(){
}
task run(type: Exec){
def path
def localProperties = project.file("../local.properties")
if(localProperties.exists()){
Properties properties = new Properties()
localProperties.withInputStream{ instr ->
properties.load(instr)
}
def sdkDir = properties.getProperty('sdk.dir')
if(sdkDir){
path = sdkDir
}else{
path = "$System.env.ANDROID_HOME"
}
}else{
path = "$System.env.ANDROID_HOME"
}
def adb = path + "/platform-tools/adb"
commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/mindustry.android.AndroidLauncher'
commandLine "${findSdkDir()}/platform-tools/adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/mindustry.android.AndroidLauncher'
}
if(!project.ext.hasSprites()){
println "Scheduling sprite pack."
run.dependsOn ":tools:pack"
deploy.dependsOn ":tools:pack"
tasks.whenTaskAdded{ task ->
if(task.name == 'assembleDebug' || task.name == 'assembleRelease'){
task.dependsOn ":tools:pack"
}
}
}

9
android/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,9 @@
-dontobfuscate
#these are essential packages that should not be "optimized" in any way
#the main purpose of d8 here is to shrink the absurdly-large google play games libraries
-keep class mindustry.** { *; }
-keep class arc.** { *; }
-keep class net.jpountz.** { *; }
-keep class rhino.** { *; }
-keep class com.android.dex.** { *; }

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ArcTheme" parent="android:Theme.Material.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>

View File

@@ -1,6 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mindustry</string>
</resources>

View File

@@ -1,12 +0,0 @@
<resources>
<style name="ArcTheme" parent="android:Theme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>

View File

@@ -33,6 +33,9 @@ public class AndroidLauncher extends AndroidApplication{
FileChooser chooser;
Runnable permCallback;
Object gpService;
Class<?> serviceClass;
@Override
protected void onCreate(Bundle savedInstanceState){
UncaughtExceptionHandler handler = Thread.getDefaultUncaughtExceptionHandler();
@@ -44,14 +47,13 @@ public class AndroidLauncher extends AndroidApplication{
if(handler != null){
handler.uncaughtException(thread, error);
}else{
error.printStackTrace();
Log.err(error);
System.exit(1);
}
});
super.onCreate(savedInstanceState);
if(doubleScaleTablets && isTablet(this.getContext())){
if(doubleScaleTablets && isTablet(this)){
Scl.setAddition(0.5f);
}
@@ -64,7 +66,7 @@ public class AndroidLauncher extends AndroidApplication{
@Override
public rhino.Context getScriptContext(){
return AndroidRhinoContext.enter(getContext().getCacheDir());
return AndroidRhinoContext.enter(getCacheDir());
}
@Override
@@ -72,9 +74,28 @@ public class AndroidLauncher extends AndroidApplication{
}
@Override
public Class<?> loadJar(Fi jar, String mainClass) throws Exception{
DexClassLoader loader = new DexClassLoader(jar.file().getPath(), getFilesDir().getPath(), null, getClassLoader());
return Class.forName(mainClass, true, loader);
public ClassLoader loadJar(Fi jar, ClassLoader parent) throws Exception{
return new DexClassLoader(jar.file().getPath(), getFilesDir().getPath(), null, parent){
@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException{
//check for loaded state
Class<?> loadedClass = findLoadedClass(name);
if(loadedClass == null){
try{
//try to load own class first
loadedClass = findClass(name);
}catch(ClassNotFoundException | NoClassDefFoundError e){
//use parent if not found
return parent.loadClass(name);
}
}
if(resolve){
resolveClass(loadedClass);
}
return loadedClass;
}
};
}
@Override
@@ -167,9 +188,20 @@ public class AndroidLauncher extends AndroidApplication{
try{
//new external folder
Fi data = Core.files.absolute(getContext().getExternalFilesDir(null).getAbsolutePath());
Fi data = Core.files.absolute(((Context)this).getExternalFilesDir(null).getAbsolutePath());
Core.settings.setDataDirectory(data);
//delete unused cache folder to free up space
try{
Fi cache = Core.settings.getDataDirectory().child("cache");
if(cache.exists()){
cache.deleteDirectory();
}
}catch(Throwable t){
Log.err("Failed to delete cached folder", t);
}
//move to internal storage if there's no file indicating that it moved
if(!Core.files.local("files_moved").exists()){
Log.info("Moving files to external storage...");
@@ -211,6 +243,24 @@ public class AndroidLauncher extends AndroidApplication{
}
}
@Override
public void onResume(){
super.onResume();
//TODO enable once GPGS is set up on the GP console
if(false && getPackageName().endsWith(".gp")){
try{
if(gpService == null){
serviceClass = Class.forName("mindustry.android.GPGameService");
gpService = serviceClass.getConstructor().newInstance();
}
serviceClass.getMethod("onResume", Context.class).invoke(gpService, this);
}catch(Exception e){
Log.err("Failed to update Google Play Services", e);
}
}
}
private void checkFiles(Intent intent){
try{
Uri uri = intent.getData();

View File

@@ -13,6 +13,7 @@ import com.android.dx.dex.cf.*;
import com.android.dx.dex.file.DexFile;
import com.android.dx.merge.*;
import dalvik.system.*;
import mindustry.mod.*;
import rhino.*;
import java.io.*;
@@ -30,23 +31,6 @@ public class AndroidRhinoContext{
* @return a context prepared for android
*/
public static Context enter(File cacheDirectory){
if(!SecurityController.hasGlobal())
SecurityController.initGlobal(new SecurityController(){
@Override
public GeneratedClassLoader createClassLoader(ClassLoader classLoader, Object o){
return Context.getCurrentContext().createClassLoader(classLoader);
}
@Override
public Object getDynamicSecurityDomain(Object o){
return null;
}
@Override
public Object callWithDomain(Object o, Context context, Callable callable, Scriptable scriptable, Scriptable scriptable1, Object[] objects){
return null;
}
});
AndroidContextFactory factory;
if(!ContextFactory.hasExplicitGlobal()){
@@ -175,7 +159,7 @@ public class AndroidRhinoContext{
}catch(IOException e){
e.printStackTrace();
}
android.content.Context context = ((AndroidApplication) Core.app).getContext();
android.content.Context context = (android.content.Context)((AndroidApplication)Core.app);
return new DexClassLoader(dexFile.getPath(), VERSION.SDK_INT >= 21 ? context.getCodeCacheDir().getPath() : context.getCacheDir().getAbsolutePath(), null, getParent()).loadClass(name);
}

View File

@@ -0,0 +1,40 @@
package mindustry.android;
import android.content.*;
import arc.util.*;
import com.google.android.gms.auth.api.signin.*;
import com.google.android.gms.games.*;
import mindustry.service.*;
public class GPGameService extends GameService{
private GoogleSignInAccount account;
public void onResume(Context context){
Log.info("[GooglePlayService] Resuming.");
GoogleSignInAccount current = GoogleSignIn.getLastSignedInAccount(context);
GoogleSignInOptions options =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
.requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
.build();
if(GoogleSignIn.hasPermissions(current, options.getScopeArray())){
this.account = current;
Log.info("Already signed in to Google Play Games.");
}else{
GoogleSignIn.getClient(context, options).silentSignIn().addOnCompleteListener(complete -> {
if(!complete.isSuccessful()){
if(complete.getException() != null){
Log.err("Failed to sign in to Google Play Games.", complete.getException());
}else{
Log.warn("Failed to sign in to Google Play Games.");
}
}else{
this.account = complete.getResult();
Log.info("Signed in to Google Play Games.");
}
});
}
}
}

View File

@@ -118,7 +118,7 @@ public class Annotations{
/**
* The region name to load. Variables can be used:
* "@" -> block name
* "$size" -> block size
* "@size" -> block size
* "#" "#1" "#2" -> index number, for arrays
* */
String value();
@@ -177,12 +177,12 @@ public class Annotations{
//region remote
public enum PacketPriority{
/** Does not get handled unless client is connected. */
low,
/** Gets put in a queue and processed if not connected. */
normal,
/** Gets handled immediately, regardless of connection status. */
high,
/** Does not get handled unless client is connected. */
low
}
/** A set of two booleans, one specifying server and one specifying client. */

View File

@@ -2,15 +2,10 @@ package mindustry.annotations;
import arc.files.*;
import arc.struct.*;
import arc.util.Log;
import arc.util.Log.*;
import arc.util.*;
import arc.util.Log.*;
import com.squareup.javapoet.*;
import com.sun.source.util.*;
import com.sun.tools.javac.model.*;
import com.sun.tools.javac.processing.*;
import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.util.*;
import mindustry.annotations.util.*;
import javax.annotation.processing.*;
@@ -22,7 +17,6 @@ import javax.tools.Diagnostic.*;
import javax.tools.*;
import java.io.*;
import java.lang.annotation.*;
import java.util.List;
import java.util.*;
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@@ -31,19 +25,16 @@ public abstract class BaseProcessor extends AbstractProcessor{
public static final String packageName = "mindustry.gen";
public static Types typeu;
public static JavacElements elementu;
public static Elements elementu;
public static Filer filer;
public static Messager messager;
public static Trees trees;
public static TreeMaker maker;
protected int round;
protected int rounds = 1;
protected RoundEnvironment env;
protected Fi rootDirectory;
protected Context context;
public static String getMethodName(Element element){
return ((TypeElement)element.getEnclosingElement()).getQualifiedName().toString() + "." + element.getSimpleName();
}
@@ -186,7 +177,7 @@ public abstract class BaseProcessor extends AbstractProcessor{
Log.err("[CODEGEN ERROR] " + message + ": " + elem);
}
public void err(String message, Selement elem){
public static void err(String message, Selement elem){
err(message, elem.e);
}
@@ -194,15 +185,11 @@ public abstract class BaseProcessor extends AbstractProcessor{
public synchronized void init(ProcessingEnvironment env){
super.init(env);
JavacProcessingEnvironment javacProcessingEnv = (JavacProcessingEnvironment)env;
trees = Trees.instance(env);
typeu = env.getTypeUtils();
elementu = javacProcessingEnv.getElementUtils();
elementu = env.getElementUtils();
filer = env.getFiler();
messager = env.getMessager();
context = ((JavacProcessingEnvironment)env).getContext();
maker = TreeMaker.instance(javacProcessingEnv.getContext());
Log.level = LogLevel.info;
@@ -219,7 +206,7 @@ public abstract class BaseProcessor extends AbstractProcessor{
String path = Fi.get(filer.getResource(StandardLocation.CLASS_OUTPUT, "no", "no")
.toUri().toURL().toString().substring(OS.isWindows ? 6 : "file:".length()))
.parent().parent().parent().parent().parent().parent().parent().toString().replace("%20", " ");
rootDirectory = Fi.get(path);
rootDirectory = Fi.get(path).parent();
}catch(IOException e){
throw new RuntimeException(e);
}

View File

@@ -143,6 +143,7 @@ public class EntityIO{
if(sl) cont("if(!islocal)");
if(sf){
//TODO adding + targetSuf to the assignment fixes units being interpolated incorrectly during physics, but makes interpolation snap instead.
st(field.name + lastSuf + " = this." + field.name);
}

View File

@@ -132,6 +132,7 @@ public class EntityProcess extends BaseProcessor{
.build())).addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT).build());
}
//generate interface getters and setters for all "standard" fields
for(Svar field : component.fields().select(e -> !e.is(Modifier.STATIC) && !e.is(Modifier.PRIVATE) && !e.has(Import.class))){
String cname = field.name();
@@ -273,7 +274,10 @@ public class EntityProcess extends BaseProcessor{
name += "Entity";
}
if(ann.legacy()){
boolean legacy = ann.legacy();
if(legacy){
baseClass = tname(packageName + "." + name);
name += "Legacy" + Strings.capitalize(type.name());
}
@@ -338,7 +342,8 @@ public class EntityProcess extends BaseProcessor{
boolean isVisible = !f.is(Modifier.STATIC) && !f.is(Modifier.PRIVATE) && !f.has(ReadOnly.class);
//add the field only if it isn't visible or it wasn't implemented by the base class
if(!isShadowed || !isVisible){
//legacy classes have no extra fields
if((!isShadowed || !isVisible) && !legacy){
builder.addField(spec);
}
@@ -348,7 +353,7 @@ public class EntityProcess extends BaseProcessor{
allFields.add(f);
//add extra sync fields
if(f.has(SyncField.class) && isSync){
if(f.has(SyncField.class) && isSync && !legacy){
if(!f.tname().toString().equals("float")) err("All SyncFields must be of type float", f);
syncedFields.add(f);
@@ -442,11 +447,14 @@ public class EntityProcess extends BaseProcessor{
}
}
boolean specialIO = false;
if(hasIO){
//SPECIAL CASE: I/O code
//note that serialization is generated even for non-serializing entities for manual usage
if((first.name().equals("read") || first.name().equals("write"))){
io.write(mbuilder, first.name().equals("write"));
specialIO = true;
}
//SPECIAL CASE: sync I/O code
@@ -525,8 +533,10 @@ public class EntityProcess extends BaseProcessor{
mbuilder.addStatement("mindustry.gen.Groups.queueFree(($T)this)", Poolable.class);
}
if(!legacy || specialIO){
builder.addMethod(mbuilder.build());
}
}
//add pool reset method and implement Poolable
if(ann.pooled()){
@@ -560,7 +570,7 @@ public class EntityProcess extends BaseProcessor{
.returns(tname(packageName + "." + name))
.addStatement(ann.pooled() ? "return Pools.obtain($L.class, " +name +"::new)" : "return new $L()", name).build());
definitions.add(new EntityDefinition(packageName + "." + name, builder, type, typeIsBase ? null : baseClass, components, groups, allFieldSpecs));
definitions.add(new EntityDefinition(packageName + "." + name, builder, type, typeIsBase ? null : baseClass, components, groups, allFieldSpecs, legacy));
}
//generate groups
@@ -665,11 +675,28 @@ public class EntityProcess extends BaseProcessor{
//build mapping class for sync IDs
TypeSpec.Builder idBuilder = TypeSpec.classBuilder("EntityMapping").addModifiers(Modifier.PUBLIC)
.addField(FieldSpec.builder(TypeName.get(Prov[].class), "idMap", Modifier.PUBLIC, Modifier.STATIC).initializer("new Prov[256]").build())
.addField(FieldSpec.builder(ParameterizedTypeName.get(ClassName.get(ObjectMap.class),
tname(String.class), tname(Prov.class)),
"nameMap", Modifier.PUBLIC, Modifier.STATIC).initializer("new ObjectMap<>()").build())
.addField(FieldSpec.builder(ParameterizedTypeName.get(ClassName.get(IntMap.class), tname(String.class)),
"customIdMap", Modifier.PUBLIC, Modifier.STATIC).initializer("new IntMap<>()").build())
.addMethod(MethodSpec.methodBuilder("register").addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(TypeName.get(int.class))
.addParameter(String.class, "name").addParameter(Prov.class, "constructor")
.addStatement("int next = arc.util.Structs.indexOf(idMap, v -> v == null)")
.addStatement("idMap[next] = constructor")
.addStatement("nameMap.put(name, constructor)")
.addStatement("customIdMap.put(next, name)")
.addStatement("return next")
.addJavadoc("Use this method for obtaining a classId for custom modded unit types. Only call this once for each type. Modded types should return this id in their overridden classId method.")
.build())
.addMethod(MethodSpec.methodBuilder("map").addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(TypeName.get(Prov.class)).addParameter(int.class, "id").addStatement("return idMap[id]").build())
.addMethod(MethodSpec.methodBuilder("map").addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(TypeName.get(Prov.class)).addParameter(String.class, "name").addStatement("return nameMap.get(name)").build());
@@ -698,11 +725,6 @@ public class EntityProcess extends BaseProcessor{
}else{
//round 3: generate actual classes and implement interfaces
//write base classes
for(TypeSpec.Builder b : baseClasses){
write(b, imports.asArray());
}
//implement each definition
for(EntityDefinition def : definitions){
@@ -725,6 +747,14 @@ public class EntityProcess extends BaseProcessor{
def.builder.addSuperinterface(inter.tname());
if(def.legacy) continue;
@Nullable TypeSpec.Builder superclass = null;
if(def.extend != null){
superclass = baseClasses.find(b -> (packageName + "." + Reflect.get(b, "name")).equals(def.extend.toString()));
}
//generate getter/setter for each method
for(Smethod method : inter.methods()){
String var = method.name();
@@ -732,14 +762,36 @@ public class EntityProcess extends BaseProcessor{
//make sure it's a real variable AND that the component doesn't already implement it somewhere with custom logic
if(field == null || methodNames.contains(method.simpleString())) continue;
MethodSpec result = null;
//getter
if(!method.isVoid()){
def.builder.addMethod(MethodSpec.overriding(method.e).addStatement("return " + var).build());
result = MethodSpec.overriding(method.e).addStatement("return " + var).build();
}
//setter
if(method.isVoid() && !Seq.with(field.annotations).contains(f -> f.type.toString().equals("@mindustry.annotations.Annotations.ReadOnly"))){
def.builder.addMethod(MethodSpec.overriding(method.e).addStatement("this." + var + " = " + var).build());
result = MethodSpec.overriding(method.e).addStatement("this." + var + " = " + var).build();
}
//add getter/setter to parent class, if possible. when this happens, skip adding getters setters *here* because they are defined in the superclass.
if(result != null && superclass != null){
FieldSpec superField = Seq.with(superclass.fieldSpecs).find(f -> f.name.equals(var));
//found the right field, try to check for the method already existing now
if(superField != null){
MethodSpec fr = result;
MethodSpec targetMethod = Seq.with(superclass.methodSpecs).find(m -> m.name.equals(var) && m.returnType.equals(fr.returnType));
//if the method isn't added yet, add it. in any case, skip.
if(targetMethod == null){
superclass.addMethod(result);
}
continue;
}
}
if(result != null){
def.builder.addMethod(result);
}
}
}
@@ -747,8 +799,16 @@ public class EntityProcess extends BaseProcessor{
write(def.builder, imports.asArray());
}
//write base classes last
for(TypeSpec.Builder b : baseClasses){
write(b, imports.asArray());
}
//TODO nulls were an awful idea
//store nulls
TypeSpec.Builder nullsBuilder = TypeSpec.classBuilder("Nulls").addModifiers(Modifier.PUBLIC).addModifiers(Modifier.FINAL);
//TODO should be dynamic
ObjectSet<String> nullList = ObjectSet.with("unit");
//create mock types of all components
for(Stype interf : allInterfaces){
@@ -767,6 +827,12 @@ public class EntityProcess extends BaseProcessor{
//create null builder
String baseName = interf.name().substring(0, interf.name().length() - 1);
//prevent Nulls bloat
if(!nullList.contains(Strings.camelize(baseName))){
continue;
}
String className = "Null" + baseName;
TypeSpec.Builder nullBuilder = TypeSpec.classBuilder(className)
.addModifiers(Modifier.FINAL);
@@ -900,7 +966,7 @@ public class EntityProcess extends BaseProcessor{
}
String createName(Selement<?> elem){
Seq<Stype> comps = types(elem.annotation(EntityDef.class), EntityDef::value).map(this::interfaceToComp);;
Seq<Stype> comps = types(elem.annotation(EntityDef.class), EntityDef::value).map(this::interfaceToComp);
comps.sortComparing(Selement::name);
return comps.toString("", s -> s.name().replace("Comp", ""));
}
@@ -944,9 +1010,10 @@ public class EntityProcess extends BaseProcessor{
final Selement naming;
final String name;
final @Nullable TypeName extend;
final boolean legacy;
int classID;
public EntityDefinition(String name, Builder builder, Selement naming, TypeName extend, Seq<Stype> components, Seq<GroupDefinition> groups, Seq<FieldSpec> fieldSpec){
public EntityDefinition(String name, Builder builder, Selement naming, TypeName extend, Seq<Stype> components, Seq<GroupDefinition> groups, Seq<FieldSpec> fieldSpec, boolean legacy){
this.builder = builder;
this.name = name;
this.naming = naming;
@@ -954,6 +1021,7 @@ public class EntityProcess extends BaseProcessor{
this.components = components;
this.extend = extend;
this.fieldSpecs = fieldSpec;
this.legacy = legacy;
}
@Override

View File

@@ -43,7 +43,7 @@ public class AssetsProcess extends BaseProcessor{
texIcons.each((key, val) -> {
String[] split = val.split("\\|");
String name = Strings.kebabToCamel(split[1]).replace("Medium", "").replace("Icon", "");
String name = Strings.kebabToCamel(split[1]).replace("Medium", "").replace("Icon", "").replace("Ui", "");
if(SourceVersion.isKeyword(name) || name.equals("char")) name += "i";
ichtype.addField(FieldSpec.builder(char.class, name, Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL).addJavadoc(String.format("\\u%04x", Integer.parseInt(key))).initializer("'" + ((char)Integer.parseInt(key)) + "'").build());
@@ -117,7 +117,6 @@ public class AssetsProcess extends BaseProcessor{
void processSounds(String classname, String path, String rtype) throws Exception{
TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC);
MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
MethodSpec.Builder loadBegin = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
HashSet<String> names = new HashSet<>();
@@ -137,8 +136,6 @@ public class AssetsProcess extends BaseProcessor{
String filename = "\"" + filepath + "\"";
loadBegin.addStatement("arc.Core.assets.load(" + filename + ", " + rtype + ".class).loaded = a -> " + name + " = (" + rtype + ")a", filepath, filepath.replace(".ogg", ".mp3"));
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." + rtype.substring(rtype.lastIndexOf(".") + 1) + "()").build());
});
@@ -147,7 +144,6 @@ public class AssetsProcess extends BaseProcessor{
}
type.addMethod(loadBegin.build());
type.addMethod(dispose.build());
JavaFile.builder(packageName, type.build()).build().writeTo(BaseProcessor.filer);
}

View File

@@ -1,154 +0,0 @@
package mindustry.annotations.impl;
import com.sun.source.tree.*;
import com.sun.source.util.*;
import com.sun.tools.javac.code.Scope;
import com.sun.tools.javac.code.*;
import com.sun.tools.javac.code.Symbol.*;
import com.sun.tools.javac.code.Type.*;
import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.tree.JCTree.*;
import mindustry.annotations.Annotations.*;
import javax.annotation.processing.*;
import javax.lang.model.*;
import javax.lang.model.element.*;
import javax.tools.Diagnostic.*;
import java.lang.annotation.*;
import java.util.*;
@SupportedAnnotationTypes({"java.lang.Override"})
public class CallSuperProcess extends AbstractProcessor{
private Trees trees;
@Override
public void init(ProcessingEnvironment pe){
super.init(pe);
trees = Trees.instance(pe);
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
for(Element e : roundEnv.getElementsAnnotatedWith(Override.class)){
if(e.getAnnotation(OverrideCallSuper.class) != null) return false;
CodeAnalyzerTreeScanner codeScanner = new CodeAnalyzerTreeScanner();
codeScanner.methodName = e.getSimpleName().toString();
TreePath tp = trees.getPath(e.getEnclosingElement());
codeScanner.scan(tp, trees);
if(codeScanner.callSuperUsed){
List list = codeScanner.method.getBody().getStatements();
if(!doesCallSuper(list, codeScanner.methodName)){
processingEnv.getMessager().printMessage(Kind.ERROR, "Overriding method '" + codeScanner.methodName + "' must explicitly call super method from its parent class.", e);
}
}
}
return false;
}
private boolean doesCallSuper(List list, String methodName){
for(Object object : list){
if(object instanceof JCTree.JCExpressionStatement){
JCTree.JCExpressionStatement expr = (JCExpressionStatement)object;
String exprString = expr.toString();
if(exprString.startsWith("super." + methodName) && exprString.endsWith(");")) return true;
}
}
return false;
}
@Override
public SourceVersion getSupportedSourceVersion(){
return SourceVersion.RELEASE_8;
}
static class CodeAnalyzerTreeScanner extends TreePathScanner<Object, Trees>{
String methodName;
MethodTree method;
boolean callSuperUsed;
@Override
public Object visitClass(ClassTree classTree, Trees trees){
Tree extendTree = classTree.getExtendsClause();
if(extendTree instanceof JCTypeApply){ //generic classes case
JCTypeApply generic = (JCTypeApply)extendTree;
extendTree = generic.clazz;
}
if(extendTree instanceof JCIdent){
JCIdent tree = (JCIdent)extendTree;
if(tree == null || tree.sym == null) return super.visitClass(classTree, trees);
com.sun.tools.javac.code.Scope members = tree.sym.members();
if(checkScope(members))
return super.visitClass(classTree, trees);
if(checkSuperTypes((ClassType)tree.type))
return super.visitClass(classTree, trees);
}
callSuperUsed = false;
return super.visitClass(classTree, trees);
}
public boolean checkSuperTypes(ClassType type){
if(type.supertype_field != null && type.supertype_field.tsym != null){
if(checkScope(type.supertype_field.tsym.members()))
return true;
else
return checkSuperTypes((ClassType)type.supertype_field);
}
return false;
}
@SuppressWarnings("unchecked")
public boolean checkScope(Scope members){
Iterable<Symbol> it;
try{
it = (Iterable<Symbol>)members.getClass().getMethod("getElements").invoke(members);
}catch(Throwable t){
try{
it = (Iterable<Symbol>)members.getClass().getMethod("getSymbols").invoke(members);
}catch(Exception e){
throw new RuntimeException(e);
}
}
for(Symbol s : it){
if(s instanceof MethodSymbol){
MethodSymbol ms = (MethodSymbol)s;
if(ms.getSimpleName().toString().equals(methodName)){
Annotation annotation = ms.getAnnotation(CallSuper.class);
if(annotation != null){
callSuperUsed = true;
return true;
}
}
}
}
return false;
}
@Override
public Object visitMethod(MethodTree methodTree, Trees trees){
if(methodTree.getName().toString().equals(methodName))
method = methodTree;
return super.visitMethod(methodTree, trees);
}
}
}

View File

@@ -18,6 +18,7 @@ public class LoadRegionProcessor extends BaseProcessor{
@Override
public void process(RoundEnvironment env) throws Exception{
TypeSpec.Builder regionClass = TypeSpec.classBuilder("ContentRegions")
.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"deprecation\"").build())
.addModifiers(Modifier.PUBLIC);
MethodSpec.Builder method = MethodSpec.methodBuilder("loadRegions")
.addParameter(tname("mindustry.ctype.MappableContent"), "content")
@@ -34,7 +35,7 @@ public class LoadRegionProcessor extends BaseProcessor{
}
for(Entry<Stype, Seq<Svar>> entry : fieldMap){
method.beginControlFlow("if(content instanceof $T)", entry.key.tname());
method.beginControlFlow("if(content instanceof $L)", entry.key.fullName());
for(Svar field : entry.value){
Load an = field.annotation(Load.class);
@@ -45,7 +46,7 @@ public class LoadRegionProcessor extends BaseProcessor{
//not an array
if(dims == 0){
method.addStatement("(($T)content).$L = $T.atlas.find($L$L)", entry.key.tname(), field.name(), Core.class, parse(an.value()), fallbackString);
method.addStatement("(($L)content).$L = $T.atlas.find($L$L)", entry.key.fullName(), field.name(), Core.class, parse(an.value()), fallbackString);
}else{
//is an array, create length string
int[] lengths = an.lengths();

View File

@@ -26,7 +26,8 @@ public class LogicStatementProcessor extends BaseProcessor{
MethodSpec.Builder reader = MethodSpec.methodBuilder("read")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(tname("mindustry.logic.LStatement"))
.addParameter(String[].class, "tokens");
.addParameter(String[].class, "tokens")
.addParameter(int.class, "length");
Seq<Stype> types = types(RegisterStatement.class);
@@ -76,7 +77,7 @@ public class LogicStatementProcessor extends BaseProcessor{
"");
//reading primitives, strings and enums is supported; nothing else is
reader.addStatement("if(tokens.length > $L) result.$L = $L(tokens[$L])",
reader.addStatement("if(length > $L) result.$L = $L(tokens[$L])",
index + 1,
field.name(),
field.mirror().toString().equals("java.lang.String") ?

View File

@@ -0,0 +1,380 @@
package mindustry.annotations.remote;
import arc.struct.*;
import arc.util.io.*;
import com.squareup.javapoet.*;
import mindustry.annotations.Annotations.*;
import mindustry.annotations.*;
import mindustry.annotations.util.*;
import mindustry.annotations.util.TypeIOResolver.*;
import javax.lang.model.element.*;
import java.io.*;
import static mindustry.annotations.BaseProcessor.*;
/** Generates code for writing remote invoke packets on the client and server. */
public class CallGenerator{
/** Generates all classes in this list. */
public static void generate(ClassSerializer serializer, Seq<MethodEntry> methods) throws IOException{
//create builder
TypeSpec.Builder callBuilder = TypeSpec.classBuilder(RemoteProcess.callLocation).addModifiers(Modifier.PUBLIC);
MethodSpec.Builder register = MethodSpec.methodBuilder("registerPackets")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC);
//go through each method entry in this class
for(MethodEntry ent : methods){
//builder for the packet type
TypeSpec.Builder packet = TypeSpec.classBuilder(ent.packetClassName)
.addModifiers(Modifier.PUBLIC);
//temporary data to deserialize later
packet.addField(FieldSpec.builder(byte[].class, "DATA", Modifier.PRIVATE).initializer("NODATA").build());
packet.superclass(tname("mindustry.net.Packet"));
//return the correct priority
if(ent.priority != PacketPriority.normal){
packet.addMethod(MethodSpec.methodBuilder("getPriority")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class).returns(int.class).addStatement("return $L", ent.priority.ordinal())
.build());
}
//implement read & write methods
makeWriter(packet, ent, serializer);
makeReader(packet, ent, serializer);
//generate handlers
if(ent.where.isClient){
packet.addMethod(writeHandleMethod(ent, false));
}
if(ent.where.isServer){
packet.addMethod(writeHandleMethod(ent, true));
}
//register packet
register.addStatement("mindustry.net.Net.registerPacket($L.$L::new)", packageName, ent.packetClassName);
//add fields to the type
for(Svar param : ent.element.params()){
packet.addField(param.tname(), param.name(), Modifier.PUBLIC);
}
//write the 'send event to all players' variant: always happens for clients, but only happens if 'all' is enabled on the server method
if(ent.where.isClient || ent.target.isAll){
writeCallMethod(callBuilder, ent, true, false);
}
//write the 'send event to one player' variant, which is only applicable on the server
if(ent.where.isServer && ent.target.isOne){
writeCallMethod(callBuilder, ent, false, false);
}
//write the forwarded method version
if(ent.where.isServer && ent.forward){
writeCallMethod(callBuilder, ent, true, true);
}
//write the completed packet class
JavaFile.builder(packageName, packet.build()).build().writeTo(BaseProcessor.filer);
}
callBuilder.addMethod(register.build());
//build and write resulting class
TypeSpec spec = callBuilder.build();
JavaFile.builder(packageName, spec).build().writeTo(BaseProcessor.filer);
}
private static void makeWriter(TypeSpec.Builder typespec, MethodEntry ent, ClassSerializer serializer){
MethodSpec.Builder builder = MethodSpec.methodBuilder("write")
.addParameter(Writes.class, "WRITE")
.addModifiers(Modifier.PUBLIC).addAnnotation(Override.class);
Seq<Svar> params = ent.element.params();
for(int i = 0; i < params.size; i++){
//first argument is skipped as it is always the player caller
if(!ent.where.isServer && i == 0){
continue;
}
Svar var = params.get(i);
//name of parameter
String varName = var.name();
//name of parameter type
String typeName = var.mirror().toString();
//special case: method can be called from anywhere to anywhere
//thus, only write the player when the SERVER is writing data, since the client is the only one who reads the player anyway
boolean writePlayerSkipCheck = ent.where == Loc.both && i == 0;
if(writePlayerSkipCheck){ //write begin check
builder.beginControlFlow("if(mindustry.Vars.net.server())");
}
if(BaseProcessor.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
builder.addStatement("WRITE.$L($L)", typeName.equals("boolean") ? "bool" : typeName.charAt(0) + "", varName);
}else{
//else, try and find a serializer
String ser = serializer.writers.get(typeName.replace("mindustry.gen.", ""), SerializerResolver.locate(ent.element.e, var.mirror(), true));
if(ser == null){ //make sure a serializer exists!
BaseProcessor.err("No method to write class type: '" + typeName + "'", var);
}
//add statement for writing it
builder.addStatement(ser + "(WRITE, " + varName + ")");
}
if(writePlayerSkipCheck){ //write end check
builder.endControlFlow();
}
}
typespec.addMethod(builder.build());
}
private static void makeReader(TypeSpec.Builder typespec, MethodEntry ent, ClassSerializer serializer){
MethodSpec.Builder readbuilder = MethodSpec.methodBuilder("read")
.addParameter(Reads.class, "READ")
.addParameter(int.class, "LENGTH")
.addModifiers(Modifier.PUBLIC).addAnnotation(Override.class);
//read only into temporary data buffer
readbuilder.addStatement("DATA = READ.b(LENGTH)");
typespec.addMethod(readbuilder.build());
MethodSpec.Builder builder = MethodSpec.methodBuilder("handled")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class);
//make sure data is present, begin reading it if so
builder.addStatement("BAIS.setBytes(DATA)");
Seq<Svar> params = ent.element.params();
//go through each parameter
for(int i = 0; i < params.size; i++){
Svar var = params.get(i);
//first argument is skipped as it is always the player caller
if(!ent.where.isServer && i == 0){
continue;
}
//special case: method can be called from anywhere to anywhere
//thus, only read the player when the CLIENT is receiving data, since the client is the only one who cares about the player anyway
boolean writePlayerSkipCheck = ent.where == Loc.both && i == 0;
if(writePlayerSkipCheck){ //write begin check
builder.beginControlFlow("if(mindustry.Vars.net.client())");
}
//full type name of parameter
String typeName = var.mirror().toString();
//name of parameter
String varName = var.name();
//capitalized version of type name for reading primitives
String pname = typeName.equals("boolean") ? "bool" : typeName.charAt(0) + "";
//write primitives automatically
if(BaseProcessor.isPrimitive(typeName)){
builder.addStatement("$L = READ.$L()", varName, pname);
}else{
//else, try and find a serializer
String ser = serializer.readers.get(typeName.replace("mindustry.gen.", ""), SerializerResolver.locate(ent.element.e, var.mirror(), false));
if(ser == null){ //make sure a serializer exists!
BaseProcessor.err("No read method to read class type '" + typeName + "' in method " + ent.targetMethod + "; " + serializer.readers, var);
}
//add statement for reading it
builder.addStatement("$L = $L(READ)", varName, ser);
}
if(writePlayerSkipCheck){ //write end check
builder.endControlFlow();
}
}
typespec.addMethod(builder.build());
}
/** Creates a specific variant for a method entry. */
private static void writeCallMethod(TypeSpec.Builder classBuilder, MethodEntry ent, boolean toAll, boolean forwarded){
Smethod elem = ent.element;
Seq<Svar> params = elem.params();
//create builder
MethodSpec.Builder method = MethodSpec.methodBuilder(elem.name() + (forwarded ? "__forward" : "")) //add except suffix when forwarding
.addModifiers(Modifier.STATIC)
.returns(void.class);
//forwarded methods aren't intended for use, and are not public
if(!forwarded){
method.addModifiers(Modifier.PUBLIC);
}
//validate client methods to make sure
if(ent.where.isClient){
if(params.isEmpty()){
BaseProcessor.err("Client invoke methods must have a first parameter of type Player", elem);
return;
}
if(!params.get(0).mirror().toString().contains("Player")){
BaseProcessor.err("Client invoke methods should have a first parameter of type Player", elem);
return;
}
}
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
if(!toAll){
method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "playerConnection");
}
//add sender to ignore
if(forwarded){
method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "exceptConnection");
}
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default
if(!forwarded && ent.local != Loc.none){
//add in local checks
if(ent.local != Loc.both){
method.beginControlFlow("if(" + getCheckString(ent.local) + " || !mindustry.Vars.net.active())");
}
//concatenate parameters
int index = 0;
StringBuilder results = new StringBuilder();
for(Svar var : params){
//special case: calling local-only methods uses the local player
if(index == 0 && ent.where == Loc.client){
results.append("mindustry.Vars.player");
}else{
results.append(var.name());
}
if(index != params.size - 1) results.append(", ");
index++;
}
//add the statement to call it
method.addStatement("$N." + elem.name() + "(" + results + ")",
((TypeElement)elem.up()).getQualifiedName().toString());
if(ent.local != Loc.both){
method.endControlFlow();
}
}
//start control flow to check if it's actually client/server so no netcode is called
method.beginControlFlow("if(" + getCheckString(ent.where) + ")");
//add statement to create packet from pool
method.addStatement("$1T packet = new $1T()", tname("mindustry.gen." + ent.packetClassName));
method.addTypeVariables(Seq.with(elem.e.getTypeParameters()).map(BaseProcessor::getTVN));
for(int i = 0; i < params.size; i++){
//first argument is skipped as it is always the player caller
if((!ent.where.isServer) && i == 0){
continue;
}
Svar var = params.get(i);
method.addParameter(var.tname(), var.name());
//name of parameter
String varName = var.name();
//special case: method can be called from anywhere to anywhere
//thus, only write the player when the SERVER is writing data, since the client is the only one who reads it
boolean writePlayerSkipCheck = ent.where == Loc.both && i == 0;
if(writePlayerSkipCheck){ //write begin check
method.beginControlFlow("if(mindustry.Vars.net.server())");
}
method.addStatement("packet.$L = $L", varName, varName);
if(writePlayerSkipCheck){ //write end check
method.endControlFlow();
}
}
String sendString;
if(forwarded){ //forward packet
if(!ent.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
sendString = "mindustry.Vars.net.send(";
}else{
sendString = "mindustry.Vars.net.sendExcept(exceptConnection, ";
}
}else if(toAll){ //send to all players / to server
sendString = "mindustry.Vars.net.send(";
}else{ //send to specific client from server
sendString = "playerConnection.send(";
}
//send the actual packet
method.addStatement(sendString + "packet, " + (!ent.unreliable) + ")");
//end check for server/client
method.endControlFlow();
//add method to class, finally
classBuilder.addMethod(method.build());
}
private static String getCheckString(Loc loc){
return
loc.isClient && loc.isServer ? "mindustry.Vars.net.server() || mindustry.Vars.net.client()" :
loc.isClient ? "mindustry.Vars.net.client()" :
loc.isServer ? "mindustry.Vars.net.server()" : "false";
}
/** Generates handleServer / handleClient methods. */
public static MethodSpec writeHandleMethod(MethodEntry ent, boolean isClient){
//create main method builder
MethodSpec.Builder builder = MethodSpec.methodBuilder(isClient ? "handleClient" : "handleServer")
.addModifiers(Modifier.PUBLIC)
.addAnnotation(Override.class)
.returns(void.class);
Smethod elem = ent.element;
Seq<Svar> params = elem.params();
if(!isClient){
//add player parameter
builder.addParameter(ClassName.get("mindustry.net", "NetConnection"), "con");
//skip if player is invalid
builder.beginControlFlow("if(con.player == null || con.kicked)");
builder.addStatement("return");
builder.endControlFlow();
//make sure to use the actual player who sent the packet
builder.addStatement("mindustry.gen.Player player = con.player");
}
//execute the relevant method before the forward
//if it throws a ValidateException, the method won't be forwarded
builder.addStatement("$N." + elem.name() + "(" + params.toString(", ", s -> s.name()) + ")", ((TypeElement)elem.up()).getQualifiedName().toString());
//call forwarded method, don't forward on the client reader
if(ent.forward && ent.where.isServer && !isClient){
//call forwarded method
builder.addStatement("$L.$L.$L__forward(con, $L)", packageName, ent.className, elem.name(), params.toString(", ", s -> s.name()));
}
return builder.build();
}
}

View File

@@ -1,15 +0,0 @@
package mindustry.annotations.remote;
import java.util.ArrayList;
/** Represents a class witha list method entries to include in it. */
public class ClassEntry{
/** All methods in this generated class. */
public final ArrayList<MethodEntry> methods = new ArrayList<>();
/** Simple class name. */
public final String name;
public ClassEntry(String name){
this.name = name;
}
}

View File

@@ -1,8 +1,7 @@
package mindustry.annotations.remote;
import mindustry.annotations.Annotations.*;
import javax.lang.model.element.ExecutableElement;
import mindustry.annotations.util.*;
/** Class that repesents a remote method to be constructed and put into a class. */
public class MethodEntry{
@@ -10,6 +9,8 @@ public class MethodEntry{
public final String className;
/** Fully qualified target method to call. */
public final String targetMethod;
/** Simple name of the generated packet class. */
public final String packetClassName;
/** Whether this method can be called on a client/server. */
public final Loc where;
/**
@@ -26,12 +27,13 @@ public class MethodEntry{
/** Unique method ID. */
public final int id;
/** The element method associated with this entry. */
public final ExecutableElement element;
public final Smethod element;
/** The assigned packet priority. Only used in clients. */
public final PacketPriority priority;
public MethodEntry(String className, String targetMethod, Loc where, Variant target,
Loc local, boolean unreliable, boolean forward, int id, ExecutableElement element, PacketPriority priority){
public MethodEntry(String className, String targetMethod, String packetClassName, Loc where, Variant target,
Loc local, boolean unreliable, boolean forward, int id, Smethod element, PacketPriority priority){
this.packetClassName = packetClassName;
this.className = className;
this.forward = forward;
this.targetMethod = targetMethod;

View File

@@ -1,7 +1,7 @@
package mindustry.annotations.remote;
import arc.struct.*;
import com.squareup.javapoet.*;
import arc.util.*;
import mindustry.annotations.Annotations.*;
import mindustry.annotations.*;
import mindustry.annotations.util.*;
@@ -9,7 +9,6 @@ import mindustry.annotations.util.TypeIOResolver.*;
import javax.annotation.processing.*;
import javax.lang.model.element.*;
import java.util.*;
/** The annotation processor for generating remote method call code. */
@@ -18,52 +17,24 @@ import java.util.*;
"mindustry.annotations.Annotations.TypeIOHandler"
})
public class RemoteProcess extends BaseProcessor{
/** Maximum size of each event packet. */
public static final int maxPacketSize = 8192;
/** Warning on top of each autogenerated file. */
public static final String autogenWarning = "Autogenerated file. Do not modify!\n";
/** Name of class that handles reading and invoking packets on the server. */
private static final String readServerName = "RemoteReadServer";
/** Name of class that handles reading and invoking packets on the client. */
private static final String readClientName = "RemoteReadClient";
/** Simple class name of generated class name. */
private static final String callLocation = "Call";
//class serializers
private ClassSerializer serializer;
//all elements with the Remote annotation
private Seq<Smethod> elements;
//map of all classes to generate by name
private HashMap<String, ClassEntry> classMap;
//list of all method entries
private Seq<MethodEntry> methods;
//list of all method entries
private Seq<ClassEntry> classes;
{
rounds = 2;
}
public static final String callLocation = "Call";
@Override
public void process(RoundEnvironment roundEnv) throws Exception{
//round 1: find all annotations, generate *writers*
if(round == 1){
//get serializers
serializer = TypeIOResolver.resolve(this);
//class serializers
ClassSerializer serializer = TypeIOResolver.resolve(this);
//last method ID used
int lastMethodID = 0;
//find all elements with the Remote annotation
elements = methods(Remote.class);
//map of all classes to generate by name
classMap = new HashMap<>();
//all elements with the Remote annotation
Seq<Smethod> elements = methods(Remote.class);
//list of all method entries
methods = new Seq<>();
//list of all method entries
classes = new Seq<>();
Seq<MethodEntry> methods = new Seq<>();
Seq<Smethod> orderedElements = elements.copy();
orderedElements.sortComparing(Object::toString);
orderedElements.sortComparing(Selement::toString);
//create methods
for(Smethod element : orderedElements){
@@ -71,53 +42,33 @@ public class RemoteProcess extends BaseProcessor{
//check for static
if(!element.is(Modifier.STATIC) || !element.is(Modifier.PUBLIC)){
err("All @Remote methods must be public and static: ", element);
err("All @Remote methods must be public and static", element);
}
//can't generate none methods
if(annotation.targets() == Loc.none){
err("A @Remote method's targets() cannot be equal to 'none':", element);
err("A @Remote method's targets() cannot be equal to 'none'", element);
}
//get and create class entry if needed
if(!classMap.containsKey(callLocation)){
ClassEntry clas = new ClassEntry(callLocation);
classMap.put(callLocation, clas);
classes.add(clas);
}
String packetName = Strings.capitalize(element.name()) + "CallPacket";
int[] index = {1};
ClassEntry entry = classMap.get(callLocation);
while(methods.contains(m -> m.packetClassName.equals(packetName + (index[0] == 1 ? "" : index[0])))){
index[0] ++;
}
//create and add entry
MethodEntry method = new MethodEntry(entry.name, BaseProcessor.getMethodName(element.e), annotation.targets(), annotation.variants(),
annotation.called(), annotation.unreliable(), annotation.forward(), lastMethodID++, element.e, annotation.priority());
MethodEntry method = new MethodEntry(
callLocation, BaseProcessor.getMethodName(element.e), packetName + (index[0] == 1 ? "" : index[0]),
annotation.targets(), annotation.variants(),
annotation.called(), annotation.unreliable(), annotation.forward(), lastMethodID++,
element, annotation.priority()
);
entry.methods.add(method);
methods.add(method);
}
//create read/write generators
RemoteWriteGenerator writegen = new RemoteWriteGenerator(serializer);
//generate the methods to invoke (write)
writegen.generateFor(classes, packageName);
}else if(round == 2){ //round 2: generate all *readers*
RemoteReadGenerator readgen = new RemoteReadGenerator(serializer);
//generate server readers
readgen.generateFor(methods.select(method -> method.where.isClient), readServerName, packageName, true);
//generate client readers
readgen.generateFor(methods.select(method -> method.where.isServer), readClientName, packageName, false);
//create class for storing unique method hash
TypeSpec.Builder hashBuilder = TypeSpec.classBuilder("MethodHash").addModifiers(Modifier.PUBLIC);
hashBuilder.addJavadoc(autogenWarning);
hashBuilder.addField(FieldSpec.builder(int.class, "HASH", Modifier.STATIC, Modifier.PUBLIC, Modifier.FINAL)
.initializer("$1L", Arrays.hashCode(methods.map(m -> m.element).toArray())).build());
//build and write resulting hash class
TypeSpec spec = hashBuilder.build();
JavaFile.builder(packageName, spec).build().writeTo(BaseProcessor.filer);
}
//generate the methods to invoke, as well as the packet classes
CallGenerator.generate(serializer, methods);
}
}

View File

@@ -1,129 +0,0 @@
package mindustry.annotations.remote;
import arc.struct.*;
import arc.util.io.*;
import com.squareup.javapoet.*;
import mindustry.annotations.*;
import mindustry.annotations.util.TypeIOResolver.*;
import javax.lang.model.element.*;
/** Generates code for reading remote invoke packets on the client and server. */
public class RemoteReadGenerator{
private final ClassSerializer serializers;
/** Creates a read generator that uses the supplied serializer setup. */
public RemoteReadGenerator(ClassSerializer serializers){
this.serializers = serializers;
}
/**
* Generates a class for reading remote invoke packets.
* @param entries List of methods to use.
* @param className Simple target class name.
* @param packageName Full target package name.
* @param needsPlayer Whether this read method requires a reference to the player sender.
*/
public void generateFor(Seq<MethodEntry> entries, String className, String packageName, boolean needsPlayer) throws Exception{
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
classBuilder.addJavadoc(RemoteProcess.autogenWarning);
//create main method builder
MethodSpec.Builder readMethod = MethodSpec.methodBuilder("readPacket")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(Reads.class, "read") //buffer to read form
.addParameter(int.class, "id") //ID of method type to read
.returns(void.class);
if(needsPlayer){
//add player parameter
readMethod.addParameter(ClassName.get(packageName, "Player"), "player");
}
CodeBlock.Builder readBlock = CodeBlock.builder(); //start building block of code inside read method
boolean started = false; //whether an if() statement has been written yet
for(MethodEntry entry : entries){
//write if check for this entry ID
if(!started){
started = true;
readBlock.beginControlFlow("if(id == " + entry.id + ")");
}else{
readBlock.nextControlFlow("else if(id == " + entry.id + ")");
}
readBlock.beginControlFlow("try");
//concatenated list of variable names for method invocation
StringBuilder varResult = new StringBuilder();
//go through each parameter
for(int i = 0; i < entry.element.getParameters().size(); i++){
VariableElement var = entry.element.getParameters().get(i);
if(!needsPlayer || i != 0){ //if client, skip first parameter since it's always of type player and doesn't need to be read
//full type name of parameter
String typeName = var.asType().toString();
//name of parameter
String varName = var.getSimpleName().toString();
//captialized version of type name for reading primitives
String pname = typeName.equals("boolean") ? "bool" : typeName.charAt(0) + "";
//write primitives automatically
if(BaseProcessor.isPrimitive(typeName)){
readBlock.addStatement("$L $L = read.$L()", typeName, varName, pname);
}else{
//else, try and find a serializer
String ser = serializers.readers.get(typeName.replace("mindustry.gen.", ""), SerializerResolver.locate(entry.element, var.asType(), false));
if(ser == null){ //make sure a serializer exists!
BaseProcessor.err("No read method to read class type '" + typeName + "' in method " + entry.targetMethod + "; " + serializers.readers, var);
return;
}
//add statement for reading it
readBlock.addStatement(typeName + " " + varName + " = " + ser + "(read)");
}
//append variable name to string builder
varResult.append(var.getSimpleName());
if(i != entry.element.getParameters().size() - 1) varResult.append(", ");
}else{
varResult.append("player");
if(i != entry.element.getParameters().size() - 1) varResult.append(", ");
}
}
//execute the relevant method before the forward
//if it throws a ValidateException, the method won't be forwarded
readBlock.addStatement("$N." + entry.element.getSimpleName() + "(" + varResult.toString() + ")", ((TypeElement)entry.element.getEnclosingElement()).getQualifiedName().toString());
//call forwarded method, don't forward on the client reader
if(entry.forward && entry.where.isServer && needsPlayer){
//call forwarded method
readBlock.addStatement(packageName + "." + entry.className + "." + entry.element.getSimpleName() +
"__forward(player.con" + (varResult.length() == 0 ? "" : ", ") + varResult.toString() + ")");
}
readBlock.nextControlFlow("catch (java.lang.Exception e)");
readBlock.addStatement("throw new java.lang.RuntimeException(\"Failed to read remote method '" + entry.element.getSimpleName() + "'!\", e)");
readBlock.endControlFlow();
}
//end control flow if necessary
if(started){
readBlock.nextControlFlow("else");
readBlock.addStatement("throw new $1N(\"Invalid read method ID: \" + id + \"\")", RuntimeException.class.getName()); //handle invalid method IDs
readBlock.endControlFlow();
}
//add block and method to class
readMethod.addCode(readBlock.build());
classBuilder.addMethod(readMethod.build());
//build and write resulting class
TypeSpec spec = classBuilder.build();
JavaFile.builder(packageName, spec).build().writeTo(BaseProcessor.filer);
}
}

View File

@@ -1,228 +0,0 @@
package mindustry.annotations.remote;
import arc.struct.*;
import arc.util.io.*;
import com.squareup.javapoet.*;
import mindustry.annotations.Annotations.*;
import mindustry.annotations.*;
import mindustry.annotations.util.TypeIOResolver.*;
import javax.lang.model.element.*;
import java.io.*;
/** Generates code for writing remote invoke packets on the client and server. */
public class RemoteWriteGenerator{
private final ClassSerializer serializers;
/** Creates a write generator that uses the supplied serializer setup. */
public RemoteWriteGenerator(ClassSerializer serializers){
this.serializers = serializers;
}
/** Generates all classes in this list. */
public void generateFor(Seq<ClassEntry> entries, String packageName) throws IOException{
for(ClassEntry entry : entries){
//create builder
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(entry.name).addModifiers(Modifier.PUBLIC);
classBuilder.addJavadoc(RemoteProcess.autogenWarning);
//add temporary write buffer
classBuilder.addField(FieldSpec.builder(ReusableByteOutStream.class, "OUT", Modifier.STATIC, Modifier.PRIVATE, Modifier.FINAL)
.initializer("new ReusableByteOutStream($L)", RemoteProcess.maxPacketSize).build());
//add writer for that buffer
classBuilder.addField(FieldSpec.builder(Writes.class, "WRITE", Modifier.STATIC, Modifier.PRIVATE, Modifier.FINAL)
.initializer("new Writes(new $T(OUT))", DataOutputStream.class).build());
//go through each method entry in this class
for(MethodEntry methodEntry : entry.methods){
//write the 'send event to all players' variant: always happens for clients, but only happens if 'all' is enabled on the server method
if(methodEntry.where.isClient || methodEntry.target.isAll){
writeMethodVariant(classBuilder, methodEntry, true, false);
}
//write the 'send event to one player' variant, which is only applicable on the server
if(methodEntry.where.isServer && methodEntry.target.isOne){
writeMethodVariant(classBuilder, methodEntry, false, false);
}
//write the forwarded method version
if(methodEntry.where.isServer && methodEntry.forward){
writeMethodVariant(classBuilder, methodEntry, true, true);
}
}
//build and write resulting class
TypeSpec spec = classBuilder.build();
JavaFile.builder(packageName, spec).build().writeTo(BaseProcessor.filer);
}
}
/** Creates a specific variant for a method entry. */
private void writeMethodVariant(TypeSpec.Builder classBuilder, MethodEntry methodEntry, boolean toAll, boolean forwarded){
ExecutableElement elem = methodEntry.element;
//create builder
MethodSpec.Builder method = MethodSpec.methodBuilder(elem.getSimpleName().toString() + (forwarded ? "__forward" : "")) //add except suffix when forwarding
.addModifiers(Modifier.STATIC)
.returns(void.class);
//forwarded methods aren't intended for use, and are not public
if(!forwarded){
method.addModifiers(Modifier.PUBLIC);
}
//validate client methods to make sure
if(methodEntry.where.isClient){
if(elem.getParameters().isEmpty()){
BaseProcessor.err("Client invoke methods must have a first parameter of type Player", elem);
return;
}
if(!elem.getParameters().get(0).asType().toString().contains("Player")){
BaseProcessor.err("Client invoke methods should have a first parameter of type Player", elem);
return;
}
}
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
if(!toAll){
method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "playerConnection");
}
//add sender to ignore
if(forwarded){
method.addParameter(ClassName.bestGuess("mindustry.net.NetConnection"), "exceptConnection");
}
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default
if(!forwarded && methodEntry.local != Loc.none){
//add in local checks
if(methodEntry.local != Loc.both){
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !mindustry.Vars.net.active())");
}
//concatenate parameters
int index = 0;
StringBuilder results = new StringBuilder();
for(VariableElement var : elem.getParameters()){
//special case: calling local-only methods uses the local player
if(index == 0 && methodEntry.where == Loc.client){
results.append("mindustry.Vars.player");
}else{
results.append(var.getSimpleName());
}
if(index != elem.getParameters().size() - 1) results.append(", ");
index++;
}
//add the statement to call it
method.addStatement("$N." + elem.getSimpleName() + "(" + results.toString() + ")",
((TypeElement)elem.getEnclosingElement()).getQualifiedName().toString());
if(methodEntry.local != Loc.both){
method.endControlFlow();
}
}
//start control flow to check if it's actually client/server so no netcode is called
method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
//add statement to create packet from pool
method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "mindustry.net.Packets.InvokePacket", "arc.util.pooling.Pools");
//assign priority
method.addStatement("packet.priority = (byte)" + methodEntry.priority.ordinal());
//assign method ID
method.addStatement("packet.type = (byte)" + methodEntry.id);
//reset stream
method.addStatement("OUT.reset()");
method.addTypeVariables(Seq.with(elem.getTypeParameters()).map(BaseProcessor::getTVN));
for(int i = 0; i < elem.getParameters().size(); i++){
//first argument is skipped as it is always the player caller
if((!methodEntry.where.isServer/* || methodEntry.mode == Loc.both*/) && i == 0){
continue;
}
VariableElement var = elem.getParameters().get(i);
try{
//add parameter to method
method.addParameter(TypeName.get(var.asType()), var.getSimpleName().toString());
}catch(Throwable t){
throw new RuntimeException("Error parsing method " + methodEntry.targetMethod);
}
//name of parameter
String varName = var.getSimpleName().toString();
//name of parameter type
String typeName = var.asType().toString();
//captialized version of type name for writing primitives
String capName = typeName.equals("byte") ? "" : Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1);
//special case: method can be called from anywhere to anywhere
//thus, only write the player when the SERVER is writing data, since the client is the only one who reads it
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
if(writePlayerSkipCheck){ //write begin check
method.beginControlFlow("if(mindustry.Vars.net.server())");
}
if(BaseProcessor.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
method.addStatement("WRITE.$L($L)", typeName.equals("boolean") ? "bool" : typeName.charAt(0) + "", varName);
}else{
//else, try and find a serializer
String ser = serializers.writers.get(typeName.replace("mindustry.gen.", ""), SerializerResolver.locate(elem, var.asType(), true));
if(ser == null){ //make sure a serializer exists!
BaseProcessor.err("No @WriteClass method to write class type: '" + typeName + "'", var);
return;
}
//add statement for writing it
method.addStatement(ser + "(WRITE, " + varName + ")");
}
if(writePlayerSkipCheck){ //write end check
method.endControlFlow();
}
}
//assign packet bytes
method.addStatement("packet.bytes = OUT.getBytes()");
//assign packet length
method.addStatement("packet.length = OUT.size()");
String sendString;
if(forwarded){ //forward packet
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
sendString = "mindustry.Vars.net.send(";
}else{
sendString = "mindustry.Vars.net.sendExcept(exceptConnection, ";
}
}else if(toAll){ //send to all players / to server
sendString = "mindustry.Vars.net.send(";
}else{ //send to specific client from server
sendString = "playerConnection.send(";
}
//send the actual packet
method.addStatement(sendString + "packet, " +
(methodEntry.unreliable ? "mindustry.net.Net.SendMode.udp" : "mindustry.net.Net.SendMode.tcp") + ")");
//end check for server/client
method.endControlFlow();
//add method to class, finally
classBuilder.addMethod(method.build());
}
private String getCheckString(Loc loc){
return loc.isClient && loc.isServer ? "mindustry.Vars.net.server() || mindustry.Vars.net.client()" :
loc.isClient ? "mindustry.Vars.net.client()" :
loc.isServer ? "mindustry.Vars.net.server()" : "false";
}
}

View File

@@ -1,7 +1,6 @@
package mindustry.annotations.util;
import com.sun.source.tree.*;
import com.sun.tools.javac.tree.JCTree.*;
import mindustry.annotations.*;
import javax.lang.model.element.*;
@@ -16,10 +15,6 @@ public class Svar extends Selement<VariableElement>{
return up().asType().toString() + "#" + super.toString().replace("mindustry.gen.", "");
}
public JCVariableDecl jtree(){
return (JCVariableDecl)BaseProcessor.elementu.getTree(e);
}
public Stype enclosingType(){
return new Stype((TypeElement)up());
}

View File

@@ -22,6 +22,7 @@ mindustry.entities.comp.PosTeamDef=28
mindustry.entities.comp.PuddleComp=13
mindustry.type.Weather.WeatherStateComp=14
mindustry.world.blocks.campaign.LaunchPad.LaunchPayloadComp=15
mindustry.world.blocks.campaign.PayloadLaunchPad.LargeLaunchPayloadComp=34
mindustry.world.blocks.defense.ForceProjector.ForceDrawComp=22
mono=16
nova=17

View File

@@ -0,0 +1 @@
{version:1,fields:[{name:collided,type:arc.struct.IntSeq},{name:damage,type:float},{name:data,type:java.lang.Object},{name:fdata,type:float},{name:lifetime,type:float},{name:owner,type:mindustry.gen.Entityc},{name:rotation,type:float},{name:team,type:mindustry.game.Team},{name:time,type:float},{name:type,type:mindustry.entities.bullet.BulletType},{name:x,type:float},{name:y,type:float}]}

View File

@@ -0,0 +1 @@
{fields:[{name:lifetime,type:float},{name:payload,type:mindustry.world.blocks.payloads.Payload},{name:team,type:mindustry.game.Team},{name:time,type:float},{name:x,type:float},{name:y,type:float}]}

View File

@@ -13,29 +13,51 @@ buildscript{
google()
maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
maven{ url 'https://jitpack.io' }
//fake repository to download my patched robovm jar from
ivy{
url 'https://github.com/'
patternLayout {
artifact '/[organisation]/[module]/raw/a-single-jar-file/[revision].jar'
}
// This is required in Gradle 6.0+ as metadata file (ivy.xml)
// is mandatory. Docs linked below this code section
metadataSources { artifact() }
}
}
dependencies{
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.11'
classpath "com.github.anuken:packr:-SNAPSHOT"
//use local, patched robovm gradle plugin until my PR for gradle 7.0 support is merged
//https://github.com/Anuken/robovm/raw/a-single-jar-file/robovm-gradle-plugin-2.3.14-SNAPSHOT.jar
classpath "Anuken:robovm:robovm-gradle-plugin-2.3.14-SNAPSHOT"
//needed for plugin above
classpath "com.mobidevelop.robovm:robovm-dist-compiler:2.3.13"
classpath "com.github.Anuken.Arc:packer:$arcHash"
classpath "com.github.Anuken.Arc:arc-core:$arcHash"
}
}
plugins{
id 'org.jetbrains.kotlin.jvm' version '1.4.32'
id "org.jetbrains.kotlin.kapt" version "1.4.32"
}
allprojects{
apply plugin: 'maven'
apply plugin: 'maven-publish'
version = 'release'
group = 'com.github.Anuken'
ext{
versionNumber = '6'
if(!project.hasProperty("versionModifier")) versionModifier = 'release'
versionNumber = '7'
if(!project.hasProperty("versionModifier")) versionModifier = 'pre-alpha'
if(!project.hasProperty("versionType")) versionType = 'official'
appName = 'Mindustry'
steamworksVersion = '891ed912791e01fe9ee6237a6497e5212b85c256'
rhinoVersion = '2617981f706e50b8753155d8e15e326308be3b22'
steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94'
rhinoVersion = '55bf0dac1cfa7770672fd26112512c733ca9d5dc'
loadVersionProps = {
return new Properties().with{p -> p.load(file('../core/assets/version.properties').newReader()); return p }
@@ -83,13 +105,11 @@ allprojects{
}
hasSprites = {
return new File(rootDir, "core/assets/sprites/sprites.atlas").exists()
return new File(rootDir, "core/assets/sprites/sprites.aatls").exists()
}
getModifierString = {
if(versionModifier != "release"){
return "[${versionModifier.toUpperCase()}]"
}
if(versionModifier != "release") return "[${versionModifier.toUpperCase()}]"
return ""
}
@@ -107,8 +127,7 @@ allprojects{
def v = System.getenv("ANDROID_HOME")
if(v != null) return v
//rootDir is null here, amazing. brilliant.
def file = new File("local.properties")
if(!file.exists()) file = new File("../local.properties")
def file = new File(rootDir, "local.properties")
def props = new Properties().with{p -> p.load(file.newReader()); return p }
return props.get("sdk.dir")
}
@@ -195,10 +214,15 @@ allprojects{
tasks.withType(JavaCompile){
targetCompatibility = 8
sourceCompatibility = 14
sourceCompatibility = JavaVersion.VERSION_16
options.encoding = "UTF-8"
options.compilerArgs += ["-Xlint:deprecation"]
dependsOn clearCache
options.forkOptions.jvmArgs.addAll([
'--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED',
'--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED'
])
}
}
@@ -206,26 +230,20 @@ configure(project(":annotations")){
tasks.withType(JavaCompile){
targetCompatibility = 8
sourceCompatibility = 8
options.fork = true
}
}
//compile with java 8 compatibility for everything except the annotation project
configure(subprojects - project(":annotations")){
tasks.withType(JavaCompile){
if(JavaVersion.current() != JavaVersion.VERSION_1_8){
options.compilerArgs.addAll(['--release', '8', '--enable-preview'])
}
doFirst{
options.compilerArgs = options.compilerArgs.findAll{it != '--enable-preview' }
}
options.compilerArgs.addAll(['--release', '8'])
}
tasks.withType(Javadoc){
options{
addStringOption('Xdoclint:none', '-quiet')
addBooleanOption('-enable-preview', true)
addStringOption('-release', '14')
addStringOption('-release', '16')
}
}
}
@@ -237,9 +255,9 @@ project(":desktop"){
dependencies{
implementation project(":core")
implementation arcModule("extensions:discord")
implementation arcModule("natives:natives-desktop")
implementation arcModule("natives:natives-freetype-desktop")
implementation 'com.github.MinnDevelopment:java-discord-rpc:v2.0.1'
if(debugged()) implementation project(":debug")
@@ -287,6 +305,15 @@ project(":ios"){
project(":core"){
apply plugin: "java-library"
apply plugin: "kotlin"
apply plugin: "kotlin-kapt"
kapt{
javacOptions{
option("-source", "16")
option("-target", "1.8")
}
}
compileJava.options.fork = true
@@ -319,30 +346,46 @@ project(":core"){
}
task sourcesJar(type: Jar, dependsOn: classes){
classifier = 'sources'
archiveClassifier = 'sources'
from sourceSets.main.allSource
}
task assetsJar(type: Jar, dependsOn: ":tools:pack"){
archiveClassifier = 'assets'
from files("assets"){
exclude "config", "cache", "music", "sounds"
}
}
task musicJar(type: Jar){
archiveClassifier = 'music'
from files("assets"){
include "music/*", "sounds/*"
}
}
artifacts{
archives sourcesJar
archives assetsJar
}
dependencies{
compileJava.dependsOn(preGen)
api "org.lz4:lz4-java:1.4.1"
api "org.lz4:lz4-java:1.7.1"
api arcModule("arc-core")
api arcModule("extensions:flabel")
api arcModule("extensions:freetype")
api arcModule("extensions:g3d")
api arcModule("extensions:fx")
api arcModule("extensions:arcnet")
api "com.github.Anuken:rhino:$rhinoVersion"
if(localArc() && debugged()) api arcModule("extensions:recorder")
if(localArc()) api arcModule(":extensions:packer")
compileOnly project(":annotations")
annotationProcessor project(":annotations")
annotationProcessor 'com.github.Anuken:jabel:34e4c172e65b3928cd9eabe1993654ea79c409cd'
compileOnly project(":annotations")
kapt project(":annotations")
}
afterEvaluate{
@@ -366,6 +409,11 @@ project(":core"){
destinationDir = new File(buildDir, 'javadoc')
}
}
//comp** classes are only used for code generation
jar{
exclude("mindustry/entities/comp/**")
}
}
project(":server"){
@@ -382,16 +430,18 @@ project(":tests"){
dependencies{
testImplementation project(":core")
testImplementation "org.junit.jupiter:junit-jupiter-params:5.3.1"
testImplementation "org.junit.jupiter:junit-jupiter-api:5.3.1"
testImplementation "org.junit.jupiter:junit-jupiter-params:5.7.1"
testImplementation "org.junit.jupiter:junit-jupiter-api:5.7.1"
testImplementation arcModule("backends:backend-headless")
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.3.1"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.7.1"
}
test{
//fork every test so mods don't interact with each other
forkEvery = 1
useJUnitPlatform()
workingDir = new File("../core/assets")
testLogging {
testLogging{
exceptionFormat = 'full'
showStandardStreams = true
}
@@ -419,6 +469,21 @@ project(":annotations"){
}
}
configure([":core", ":desktop", ":server", ":tools"].collect{project(it)}){
java{
withJavadocJar()
withSourcesJar()
}
publishing{
publications{
maven(MavenPublication){
from components.java
}
}
}
}
task deployAll{
task cleanDeployOutput{
doFirst{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 B

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 B

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 B

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 521 B

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 B

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 B

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 631 B

After

Width:  |  Height:  |  Size: 1001 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 B

After

Width:  |  Height:  |  Size: 393 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 359 B

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 B

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 B

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 B

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 B

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 B

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 B

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Some files were not shown because too many files have changed in this diff Show More