mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-14 16:43:43 +01:00
On a Roll
- Added a movement actor for easier track clearing and paving
This commit is contained in:
parent
0dd8c3a4f1
commit
3c1523d165
68 changed files with 2004 additions and 127 deletions
|
@ -294,13 +294,14 @@ bff90a8d674a839b13fd9cd1f78bf3d0ad9fad4f assets/create/blockstates/limestone_pil
|
|||
ddcf4bb281e046fbb1026b8f46a2cf12448598df assets/create/blockstates/mechanical_bearing.json
|
||||
5586beef2d9183dc34d8e8d2723620c0569592ae assets/create/blockstates/mechanical_crafter.json
|
||||
0cfa8a4a37f4142fa07e04666e0aef080c517053 assets/create/blockstates/mechanical_drill.json
|
||||
0fb175e5260ec60e130e589d682a4d3301d7364e assets/create/blockstates/mechanical_harvester.json
|
||||
f199f57510befeb2a583126bc16392e49a70dc7f assets/create/blockstates/mechanical_harvester.json
|
||||
d9afcfa27c42df5fd54a7b783acb0eb45ddf5aa5 assets/create/blockstates/mechanical_mixer.json
|
||||
da612a05f94dc19e07e250efc35a7b2839d2ee76 assets/create/blockstates/mechanical_piston.json
|
||||
94ec340a50b2406f833735f7501a1840c692e32a assets/create/blockstates/mechanical_piston_head.json
|
||||
debef0f5dde74103aaf4422de4bc90e4099b0c47 assets/create/blockstates/mechanical_plough.json
|
||||
cd13e5327f1adaf9ab2bfc511ead05b2799fdfb3 assets/create/blockstates/mechanical_plough.json
|
||||
92269fe66d7b83095a2e04e121af0be792f55dd6 assets/create/blockstates/mechanical_press.json
|
||||
b7c4a0ff0c6f16e14d71fc0fb7fc66d032b65cf3 assets/create/blockstates/mechanical_pump.json
|
||||
29ec1a3ec9b158b954f9ca126eaac89cee96cf84 assets/create/blockstates/mechanical_roller.json
|
||||
264d72320ee0f1e014319f7d99dcc1fa953a4ad4 assets/create/blockstates/mechanical_saw.json
|
||||
94bbcb7e622471dbf418d78f9200ad321c7168de assets/create/blockstates/metal_bracket.json
|
||||
c253a827d9f0b0e29f67dfd19d65b259d3d4f045 assets/create/blockstates/metal_girder.json
|
||||
|
@ -565,31 +566,31 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
|
|||
5616dda664dd106d576848124fc0fc1de18d0fd3 assets/create/blockstates/yellow_valve_handle.json
|
||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
3054a5519fbf91481b0c9c8160a20679fa9530da assets/create/lang/en_ud.json
|
||||
10368a860ae28910f8b376da5a71ed5329e878d6 assets/create/lang/en_us.json
|
||||
0aca1235610eae2a297eda6f96780115f8cd0a8e assets/create/lang/unfinished/cs_cz.json
|
||||
91513e2231501328a1a2e99c8bd90a51c8513c1b assets/create/lang/unfinished/da_dk.json
|
||||
e2e4f2644ca0cfbe26436abadc6553333fe2ce89 assets/create/lang/unfinished/de_de.json
|
||||
ef633c12441059ac2d6795e39bb70578696da6e0 assets/create/lang/unfinished/es_cl.json
|
||||
2d4d14e4c1fb9d9c8590a33570981cca83e0f44f assets/create/lang/unfinished/es_es.json
|
||||
2fb12650950d8867501f5b00ff6edbedd8e231e4 assets/create/lang/unfinished/es_mx.json
|
||||
645f1b7cc8d99de345fa3e5f2d1967e49b17d32b assets/create/lang/unfinished/fr_fr.json
|
||||
0e6f608edc0d95337a6cce21d26cc8c5c7284bfc assets/create/lang/unfinished/hu_hu.json
|
||||
0afaccef5e6b4bc2149bef652e5dd51c426c816a assets/create/lang/unfinished/it_it.json
|
||||
ee8bd262d30c4b176d012902d0371648f5f5d5d4 assets/create/lang/unfinished/ja_jp.json
|
||||
499063468b398b7b31182c109b68e751361b04fa assets/create/lang/unfinished/ko_kr.json
|
||||
5beecf8025e06933a488a4e8224927e001f759cb assets/create/lang/unfinished/nl_nl.json
|
||||
7e6a23b7f7c24ebbd08c135a8565787f65c6e0f0 assets/create/lang/unfinished/no_no.json
|
||||
da8649af75b2b52a99ae4c30a106768f917192b4 assets/create/lang/unfinished/pl_pl.json
|
||||
3fba7b5d3649aac2cb759bed41d8690b5cf4dbd1 assets/create/lang/unfinished/pt_br.json
|
||||
3e83cdf96cde7c50f3f106a7e1f4c029cf26bfe2 assets/create/lang/unfinished/pt_pt.json
|
||||
4a9f031baa04241b34779c74a75ca9f73ee589b7 assets/create/lang/unfinished/ro_ro.json
|
||||
fa470b919e1f304ed0eb43cf3b47f2e9c9f1a470 assets/create/lang/unfinished/ru_ru.json
|
||||
ec236461ebc2bddf2a1281b4d8713ba0bbb40012 assets/create/lang/unfinished/sv_se.json
|
||||
906d8450cd95b65824ff23c1db38096cdc3802ec assets/create/lang/unfinished/th_th.json
|
||||
a7122f134d4cdad8802f097822c38158b3042fa5 assets/create/lang/unfinished/uk_ua.json
|
||||
0e0501505897acbc7bb2fe5cb20faa71727285ab assets/create/lang/unfinished/zh_cn.json
|
||||
7829c9e8b9e5fa92b7327b839d914162a2ab5f06 assets/create/lang/unfinished/zh_tw.json
|
||||
f1bedeb51c35e70a2247178634e61ea637a6622e assets/create/lang/en_ud.json
|
||||
629c4b2f4a7b93c4ba276245ea92b56931fa1e55 assets/create/lang/en_us.json
|
||||
f409c19eb8fcab16e270a51f5a3865c933ae37fa assets/create/lang/unfinished/cs_cz.json
|
||||
38b96811697f30d5a7656e17c2874ba76cf3711d assets/create/lang/unfinished/da_dk.json
|
||||
f2d95918e378b28e44392e46860383091523bdb3 assets/create/lang/unfinished/de_de.json
|
||||
fd181773e9f3515a9a8f797024c79c4c8003515a assets/create/lang/unfinished/es_cl.json
|
||||
78fef9fbc89d9ff476430e30b1dea5857c11d920 assets/create/lang/unfinished/es_es.json
|
||||
2a9aa2e8dd66f40a09a15794318ebf70d5b57a05 assets/create/lang/unfinished/es_mx.json
|
||||
9b89df317edb110ac5df3e9842fdf67d1432108a assets/create/lang/unfinished/fr_fr.json
|
||||
40012bcf7152b6c8ee906278bb44678354b4e3ca assets/create/lang/unfinished/hu_hu.json
|
||||
651125b7f58573fc357630eb2c7003013357b860 assets/create/lang/unfinished/it_it.json
|
||||
ea9197b6373e059aef42f8ee0c6bda66949cac2f assets/create/lang/unfinished/ja_jp.json
|
||||
8897df5518b74c8d28364c82c237ec784e9222bf assets/create/lang/unfinished/ko_kr.json
|
||||
554765f5eab85c86c26dc292b214fcdd05b55828 assets/create/lang/unfinished/nl_nl.json
|
||||
ee06a5dbc1eaa43944e1666b5626d4bf168f422c assets/create/lang/unfinished/no_no.json
|
||||
1740766c3789bd8ac476f789b25c12c4f88005ce assets/create/lang/unfinished/pl_pl.json
|
||||
1d935b043ae8050228ba5685d39b13c156f793a0 assets/create/lang/unfinished/pt_br.json
|
||||
bce4776c51d30ffbba1d7ef24e5cf5c794854cdc assets/create/lang/unfinished/pt_pt.json
|
||||
58863a13d65ecf34fe31dc37c90854972ec5427e assets/create/lang/unfinished/ro_ro.json
|
||||
0471b8bb5bbd8d3c07e971c4d1e1606f78d50e66 assets/create/lang/unfinished/ru_ru.json
|
||||
7fe39a993e8f9870a39f8d411b1577368effa477 assets/create/lang/unfinished/sv_se.json
|
||||
3b0df05712345b5d239882f0ca9ee7931591a611 assets/create/lang/unfinished/th_th.json
|
||||
84e50f51ed81826a585a7f686f762a3800ba3082 assets/create/lang/unfinished/uk_ua.json
|
||||
8d04ac15eaa0b6f5632bc389946a452f3862608a assets/create/lang/unfinished/zh_cn.json
|
||||
7965f6b897b0109e46e47e092e280eea20fb20d1 assets/create/lang/unfinished/zh_tw.json
|
||||
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
|
||||
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
|
||||
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||
|
@ -1953,6 +1954,7 @@ f8d0d4b2a890ea7a69ab0c390947b48fe0478d3f assets/create/models/item/mechanical_pi
|
|||
726ae61699dc379a4f535c1be3ec2672a2f03583 assets/create/models/item/mechanical_plough.json
|
||||
6c2acb80e53256fbb85f76851f335f9248ace6da assets/create/models/item/mechanical_press.json
|
||||
4e363477e3e8059dd7b2bad04046521b31923d1b assets/create/models/item/mechanical_pump.json
|
||||
2d7d314661e39f027c118cf14ae2f4acf213b9be assets/create/models/item/mechanical_roller.json
|
||||
3fc1fcb2016d2782c3667c21575423122b66705a assets/create/models/item/mechanical_saw.json
|
||||
3afa723a8ba4160a4bd8778a56e1880e7ff53ed9 assets/create/models/item/metal_bracket.json
|
||||
56494f6d8743241836f7e68122ad9cc83f77658a assets/create/models/item/metal_girder.json
|
||||
|
@ -2461,6 +2463,7 @@ c32f74a21df56b67f99366fba747277c40b09935 data/create/advancements/recipes/create
|
|||
ab3cb22e7cb2469c69a177ba83e29a2e1abdc3f8 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_plough.json
|
||||
6b1ae84d071e8fc7a1789aaeb01a15260831fc82 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_press.json
|
||||
90434eccfbcff42e8bc397881fd9d68f2dcb7ad4 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_pump.json
|
||||
b0fabbe0b97cf7a56260af78cb29d21c55aafbe1 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_roller.json
|
||||
40a87b7abbc22436efab546fad3910f4a945c5fc data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_saw.json
|
||||
ed6f472a0de659074e384d20e6c5903bda543acc data/create/advancements/recipes/create.base/crafting/kinetics/metal_bracket.json
|
||||
3072592260b044257cc53be8f023909394b6cfea data/create/advancements/recipes/create.base/crafting/kinetics/metal_girder.json
|
||||
|
@ -3698,6 +3701,7 @@ a21c4e4eebeff2daf1f081cd6226f29adfeade7c data/create/loot_tables/blocks/mechanic
|
|||
b8f5a9201775b711195a01882888307dd273aeab data/create/loot_tables/blocks/mechanical_plough.json
|
||||
ff55d31ae8f7a8943f1e9fcc330d18e246566997 data/create/loot_tables/blocks/mechanical_press.json
|
||||
8f885b8cec8f1ef9e35bd9b93a64a0f6e14c31b0 data/create/loot_tables/blocks/mechanical_pump.json
|
||||
fda8ee4cd0f5a29267b10e53b013dc75cee253e9 data/create/loot_tables/blocks/mechanical_roller.json
|
||||
6c88dd3f096f2a7572573158f8e6d9f4b3dedae0 data/create/loot_tables/blocks/mechanical_saw.json
|
||||
fcd800d7abf5dc5ce50b6fff6f2fc934b3d47b4b data/create/loot_tables/blocks/metal_bracket.json
|
||||
afdff197c9d1a6940e988c00435135f9705fd0e5 data/create/loot_tables/blocks/metal_girder.json
|
||||
|
@ -4134,6 +4138,7 @@ e8d842e3bd9949ea12682d9cddf29e7d54f926ec data/create/recipes/crafting/kinetics/m
|
|||
8a2f9068d6fab81f46699f897e619461ca89e38f data/create/recipes/crafting/kinetics/mechanical_plough.json
|
||||
be0b5c980c310807253d54006a714534a4b27065 data/create/recipes/crafting/kinetics/mechanical_press.json
|
||||
4307cc2c988ac19602f2f86afa2146c7e7fef026 data/create/recipes/crafting/kinetics/mechanical_pump.json
|
||||
316c72e1a2ec264b33f98a51125a6de20e679c38 data/create/recipes/crafting/kinetics/mechanical_roller.json
|
||||
ce28bcb47a379976d4a1bdfcfd1cdd0bae0bcdae data/create/recipes/crafting/kinetics/mechanical_saw.json
|
||||
353146e9501096b4cd9632ad5500b0a2406c6f5d data/create/recipes/crafting/kinetics/metal_bracket.json
|
||||
0ef8088b775f551c6f5b44f21f419fba366a971e data/create/recipes/crafting/kinetics/metal_girder.json
|
||||
|
@ -5757,8 +5762,8 @@ e16d74571ae10007f06f3b86ddf05d3ca9b73559 data/minecraft/tags/blocks/doors.json
|
|||
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/dripstone_replaceable_blocks.json
|
||||
69f596fcb065e26b02ce246760432b5174191b76 data/minecraft/tags/blocks/impermeable.json
|
||||
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/lush_ground_replaceable.json
|
||||
a8662d145a8b1b5faa263c2aac9d12e7727c8c3f data/minecraft/tags/blocks/mineable/axe.json
|
||||
6f18f0d6fe0e4204079cbf9c7b6dc79c8cebcaa9 data/minecraft/tags/blocks/mineable/pickaxe.json
|
||||
e2ba2b22fbda681faa4db4a32f6e15d2c7946fec data/minecraft/tags/blocks/mineable/axe.json
|
||||
1c1c974423a0d5668d20ebabfe4444e7fb1fe372 data/minecraft/tags/blocks/mineable/pickaxe.json
|
||||
2db7759fe036160c14c6ed19a68604ca16f4de60 data/minecraft/tags/blocks/moss_replaceable.json
|
||||
e157c1d3af30e409e34bbefbe15a037e6e1c8daa data/minecraft/tags/blocks/needs_iron_tool.json
|
||||
a08f67865337f62601c5e333b4011382d10020e4 data/minecraft/tags/blocks/needs_stone_tool.json
|
||||
|
|
|
@ -1,17 +1,32 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north": {
|
||||
"facing=north,waterlogged=false": {
|
||||
"model": "create:block/mechanical_harvester/block"
|
||||
},
|
||||
"facing=south": {
|
||||
"facing=south,waterlogged=false": {
|
||||
"model": "create:block/mechanical_harvester/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"facing=west,waterlogged=false": {
|
||||
"model": "create:block/mechanical_harvester/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east": {
|
||||
"facing=east,waterlogged=false": {
|
||||
"model": "create:block/mechanical_harvester/block",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,waterlogged=true": {
|
||||
"model": "create:block/mechanical_harvester/block"
|
||||
},
|
||||
"facing=south,waterlogged=true": {
|
||||
"model": "create:block/mechanical_harvester/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,waterlogged=true": {
|
||||
"model": "create:block/mechanical_harvester/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,waterlogged=true": {
|
||||
"model": "create:block/mechanical_harvester/block",
|
||||
"y": 90
|
||||
}
|
||||
|
|
|
@ -1,17 +1,32 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north": {
|
||||
"facing=north,waterlogged=false": {
|
||||
"model": "create:block/mechanical_plough"
|
||||
},
|
||||
"facing=south": {
|
||||
"facing=south,waterlogged=false": {
|
||||
"model": "create:block/mechanical_plough",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"facing=west,waterlogged=false": {
|
||||
"model": "create:block/mechanical_plough",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east": {
|
||||
"facing=east,waterlogged=false": {
|
||||
"model": "create:block/mechanical_plough",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,waterlogged=true": {
|
||||
"model": "create:block/mechanical_plough"
|
||||
},
|
||||
"facing=south,waterlogged=true": {
|
||||
"model": "create:block/mechanical_plough",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,waterlogged=true": {
|
||||
"model": "create:block/mechanical_plough",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,waterlogged=true": {
|
||||
"model": "create:block/mechanical_plough",
|
||||
"y": 90
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=north,waterlogged=false": {
|
||||
"model": "create:block/mechanical_roller/block"
|
||||
},
|
||||
"facing=south,waterlogged=false": {
|
||||
"model": "create:block/mechanical_roller/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,waterlogged=false": {
|
||||
"model": "create:block/mechanical_roller/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,waterlogged=false": {
|
||||
"model": "create:block/mechanical_roller/block",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,waterlogged=true": {
|
||||
"model": "create:block/mechanical_roller/block"
|
||||
},
|
||||
"facing=south,waterlogged=true": {
|
||||
"model": "create:block/mechanical_roller/block",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,waterlogged=true": {
|
||||
"model": "create:block/mechanical_roller/block",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,waterlogged=true": {
|
||||
"model": "create:block/mechanical_roller/block",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
|
@ -302,6 +302,7 @@
|
|||
"block.create.mechanical_plough": "\u0265bno\u05DF\u0500 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW",
|
||||
"block.create.mechanical_press": "ss\u01DD\u0279\u0500 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW",
|
||||
"block.create.mechanical_pump": "d\u026Fn\u0500 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW",
|
||||
"block.create.mechanical_roller": "\u0279\u01DD\u05DF\u05DFo\u1D1A \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW",
|
||||
"block.create.mechanical_saw": "\u028D\u0250S \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW",
|
||||
"block.create.metal_bracket": "\u0287\u01DD\u029E\u0254\u0250\u0279\u15FA \u05DF\u0250\u0287\u01DDW",
|
||||
"block.create.metal_girder": "\u0279\u01DDp\u0279\u0131\u2141 \u05DF\u0250\u0287\u01DDW",
|
||||
|
|
|
@ -305,6 +305,7 @@
|
|||
"block.create.mechanical_plough": "Mechanical Plough",
|
||||
"block.create.mechanical_press": "Mechanical Press",
|
||||
"block.create.mechanical_pump": "Mechanical Pump",
|
||||
"block.create.mechanical_roller": "Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Mechanical Saw",
|
||||
"block.create.metal_bracket": "Metal Bracket",
|
||||
"block.create.metal_girder": "Metal Girder",
|
||||
|
@ -879,6 +880,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s was thrown into a smelter by %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s was impaled by a Mechanical Drill",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s was thrown in front of a Drill by %2$s",
|
||||
"death.attack.create.mechanical_roller": "%1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "%1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s got cut in half by a Mechanical Saw",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s was thrown into a Saw by %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s was shot by %2$s's Potato Cannon",
|
||||
|
@ -1056,6 +1059,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Always face toward motion",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pause actors while rotating",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Lock rotation",
|
||||
"create.contraptions.roller_mode": "Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Rotation Direction",
|
||||
"create.contraptions.clockwork.clock_hands": "Clock Hands",
|
||||
"create.contraptions.clockwork.hour_first": "Hour hand first",
|
||||
|
@ -1070,6 +1077,7 @@
|
|||
"create.logistics.filter.apply": "Applied filter to %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Applied filter to %1$s, click again to copy the amount.",
|
||||
"create.logistics.filter.apply_count": "Applied extraction count to filter.",
|
||||
"create.logistics.filter.invalid_item": "Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Generator Stats:",
|
||||
"create.gui.goggles.kinetic_stats": "Kinetic Stats:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 2700",
|
||||
"_": "Missing Localizations: 2708",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "UNLOCALIZED: Mechanical Plough",
|
||||
"block.create.mechanical_press": "UNLOCALIZED: Mechanical Press",
|
||||
"block.create.mechanical_pump": "UNLOCALIZED: Mechanical Pump",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "UNLOCALIZED: Mechanical Saw",
|
||||
"block.create.metal_bracket": "UNLOCALIZED: Metal Bracket",
|
||||
"block.create.metal_girder": "UNLOCALIZED: Metal Girder",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s",
|
||||
"death.attack.create.mechanical_drill": "UNLOCALIZED: %1$s was impaled by a Mechanical Drill",
|
||||
"death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
|
||||
"death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s",
|
||||
"death.attack.create.potato_cannon": "UNLOCALIZED: %1$s was shot by %2$s's Potato Cannon",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "UNLOCALIZED: Always face toward motion",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "UNLOCALIZED: Pause actors while rotating",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "UNLOCALIZED: Rotation Direction",
|
||||
"create.contraptions.clockwork.clock_hands": "UNLOCALIZED: Clock Hands",
|
||||
"create.contraptions.clockwork.hour_first": "UNLOCALIZED: Hour hand first",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
|
||||
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "UNLOCALIZED: Generator Stats:",
|
||||
"create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1354",
|
||||
"_": "Missing Localizations: 1362",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Mekanisk plov",
|
||||
"block.create.mechanical_press": "Mekanisk presse",
|
||||
"block.create.mechanical_pump": "Mekanisk pumpe",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Mekanisk sav",
|
||||
"block.create.metal_bracket": "Metalbeslag",
|
||||
"block.create.metal_girder": "Metalbjælke",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s blev kastet ind i en smelteovn af %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s blev spiddet af et mekanisk bor",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s blev kastet ind foran et bor af %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s blev skåret halvt over af en mekanisk sav",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s blev kastet ind i en sav af %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s blev skudt af %2$ss kartoffelkanon",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Peg altid mod bevægelse",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Stop maskiner under rotation",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Lås rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Omdrejningsretning",
|
||||
"create.contraptions.clockwork.clock_hands": "Urvisere",
|
||||
"create.contraptions.clockwork.hour_first": "Timeviser først",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Anvendte filter på %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Anvendte filter på %1$s, klik igen for at kopiere antal.",
|
||||
"create.logistics.filter.apply_count": "Anvendte udtagningsantal til filter.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Generatorstatistik:",
|
||||
"create.gui.goggles.kinetic_stats": "Kinetisk statistik:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 42",
|
||||
"_": "Missing Localizations: 50",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Mechanischer Pflug",
|
||||
"block.create.mechanical_press": "Mechanische Presse",
|
||||
"block.create.mechanical_pump": "Mechanische Pumpe",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Mechanische Säge",
|
||||
"block.create.metal_bracket": "Metallhalterung",
|
||||
"block.create.metal_girder": "Metallträger",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s wurde von %2$s in einen Schmelzer geworfen",
|
||||
"death.attack.create.mechanical_drill": "%1$s wurde von einem Bohrer durchlöchert",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s wurde von %2$s vor einen Bohrer gestoßen",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s wurde zersägt",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s wurde von %2$s in eine Säge gestoßen",
|
||||
"death.attack.create.potato_cannon": "%1$s wurde von %2$s's Kartoffelkanone erschossen",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Zeige immer in Bewegungsrichtung",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pausiere Akteure beim drehen",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Sperre Rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Rotationsrichtung",
|
||||
"create.contraptions.clockwork.clock_hands": "Uhrzeiger",
|
||||
"create.contraptions.clockwork.hour_first": "Stundenzeiger zuerst",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Filter angewendet auf %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Filter angewendet auf %1$s, klicke nochmal um Menge zu kopieren.",
|
||||
"create.logistics.filter.apply_count": "Extraktionsmenge auf Filter angewendet.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Generator Statistik:",
|
||||
"create.gui.goggles.kinetic_stats": "Kinetische Statistik:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1061",
|
||||
"_": "Missing Localizations: 1069",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Arador Mecánico",
|
||||
"block.create.mechanical_press": "Prensa Mecánica",
|
||||
"block.create.mechanical_pump": "Bomba Mecánica",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Sierra Mecánica",
|
||||
"block.create.metal_bracket": "Soporte Metálico",
|
||||
"block.create.metal_girder": "UNLOCALIZED: Metal Girder",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s fué tirado dentro de una derretidora por %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s fué empalado por un Taladro Mecánico",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s fué tirado en frente de un Taladro por %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s fué cortado por la mitad por Sierra Mecánica",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s fué lanzado dentro de una Sierra por %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s fue disparado por el Cañón de Papas de %2$s",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Siempre apuntar en la dirección de movimiento",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pausar actores mientras rota",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Bloquear Rotación",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Dirección de Rotación",
|
||||
"create.contraptions.clockwork.clock_hands": "Manijas del Reloj",
|
||||
"create.contraptions.clockwork.hour_first": "Horario Primero",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Filtro Aplicado a %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Filtro Aplicado a %1$s, haz click de nuevo para copiar la cantidad.",
|
||||
"create.logistics.filter.apply_count": "Recuento de extracción aplicado al filtro.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Estadísticas de Generación:",
|
||||
"create.gui.goggles.kinetic_stats": "Estadísticas Kineticas:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 106",
|
||||
"_": "Missing Localizations: 114",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Arado mecánico",
|
||||
"block.create.mechanical_press": "Prensa mecánica",
|
||||
"block.create.mechanical_pump": "Bomba mecánica",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Sierra mecánica",
|
||||
"block.create.metal_bracket": "Soporte de metal para ejes",
|
||||
"block.create.metal_girder": "Viga de metal",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s fue arrojado a una fundición por %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s fue empalado por un taladro mecánico",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s fue lanzado frente a un taladro por %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s fue cortado por la mitad por una sierra mecánica",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s fue arrojado a una sierra por %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s fue disparado por el cañón de patatas de %2$s's",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Siempre de cara al movimiento",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pausar a los actores mientras giran",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Bloquear rotación",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Dirección de rotación",
|
||||
"create.contraptions.clockwork.clock_hands": "Manecillas de reloj",
|
||||
"create.contraptions.clockwork.hour_first": "La manecilla de las horas primero",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Filtro aplicado a %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Filtro aplicado a %1$s, haga clic de nuevo para copiar la cantidad.",
|
||||
"create.logistics.filter.apply_count": "Aplicado recuento de extracciones al filtro.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Estadísticas del generador:",
|
||||
"create.gui.goggles.kinetic_stats": "Estadísticas cinéticas:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 106",
|
||||
"_": "Missing Localizations: 114",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Arado mecánico",
|
||||
"block.create.mechanical_press": "Prensa mecánica",
|
||||
"block.create.mechanical_pump": "Bomba mecánica",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Sierra mecánica",
|
||||
"block.create.metal_bracket": "Soporte de metal para ejes",
|
||||
"block.create.metal_girder": "Viga de metal",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s fue arrojado a una fundición por %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s fue empalado por un taladro mecánico",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s fue lanzado frente a un taladro por %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s fue cortado por la mitad por una sierra mecánica",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s fue arrojado a una sierra por %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s fue disparado por el cañón de papas de %2$s's",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Siempre de cara al movimiento",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pausar a los actores mientras giran",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Bloquear rotación",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Dirección de rotación",
|
||||
"create.contraptions.clockwork.clock_hands": "Manecillas de reloj",
|
||||
"create.contraptions.clockwork.hour_first": "La manecilla de las horas primero",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Filtro aplicado a %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Filtro aplicado a %1$s, haga clic de nuevo para copiar la cantidad.",
|
||||
"create.logistics.filter.apply_count": "Aplicado recuento de extracciones al filtro.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Estadísticas del generador:",
|
||||
"create.gui.goggles.kinetic_stats": "Estadísticas cinéticas:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 42",
|
||||
"_": "Missing Localizations: 50",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Charrue mécanique",
|
||||
"block.create.mechanical_press": "Presse mécanique",
|
||||
"block.create.mechanical_pump": "Pompe mécanique",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Scie mécanique",
|
||||
"block.create.metal_bracket": "Support en métal",
|
||||
"block.create.metal_girder": "Poutre en métal",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s a été lancé(e) dans un ventilateur de lave par %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s a été empalé(e) par une perceuse mécanique",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s a été lancé(e) devant une perceuse mécanique par %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s a été coupé(e) en deux par une scie mécanique",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s a été lancé(e) devant une scie mécanique par %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s s'est fait tirer dessus par le canon à pomme de terre de %2$s",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Toujours face au mouvement",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Mettre en pause les acteurs pendant une rotation",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Verrouiller la rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Direction de la rotation",
|
||||
"create.contraptions.clockwork.clock_hands": "Aiguilles",
|
||||
"create.contraptions.clockwork.hour_first": "Aiguille des heures en premier",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Filtre appliqué à %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Filtre appliqué à %1$s, appuyez de nouveau pour copier le montant.",
|
||||
"create.logistics.filter.apply_count": "Montant d'extraction appliqué au filtre",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Statistiques du générateur :",
|
||||
"create.gui.goggles.kinetic_stats": "Statistiques cinétiques :",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 773",
|
||||
"_": "Missing Localizations: 781",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Szántógép",
|
||||
"block.create.mechanical_press": "Présgép",
|
||||
"block.create.mechanical_pump": "Szivattyú",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Fűrészgép",
|
||||
"block.create.metal_bracket": "Fémkeret",
|
||||
"block.create.metal_girder": "Fémgerenda",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s egy tüzes légáramba lépett, miközben %2$s elől menekült",
|
||||
"death.attack.create.mechanical_drill": "%1$s egy fúrógép előtt lyukadt ki",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s egy fúrógép elé ugrott %2$s elől",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s ketté lett fűrészelve",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s egy fűrészgép elé ugrott %2$s elől",
|
||||
"death.attack.create.potato_cannon": "%2$s lelőtte %1$s játékost egy krumpliágyúval",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Mindig a menetirány felé",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Aktorok leállítása kanyarodáskor",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Tájolás rögzítése",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Forgási irány",
|
||||
"create.contraptions.clockwork.clock_hands": "Óramutatók",
|
||||
"create.contraptions.clockwork.hour_first": "Óramutató először",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Szűrő alkalmazva ehhez: %1$s",
|
||||
"create.logistics.filter.apply_click_again": "Szűrő alkalmazva ehhez: %1$s, kattints ismét az érték másolásához.",
|
||||
"create.logistics.filter.apply_count": "A szűrőhöz alkalmazott kivonatszám.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Meghajtás adatai:",
|
||||
"create.gui.goggles.kinetic_stats": "Alkatrész adatai:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 42",
|
||||
"_": "Missing Localizations: 50",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Aratro meccanico",
|
||||
"block.create.mechanical_press": "Pressa meccanica",
|
||||
"block.create.mechanical_pump": "Pompa meccanica",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Sega meccanica",
|
||||
"block.create.metal_bracket": "Supporto di metallo",
|
||||
"block.create.metal_girder": "Trave di metallo",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s è stato gettato in una fonderia da %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s è stato trafitto da una trivella meccanica",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s è stato gettato di fronte a una trivella da by %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s è stato tagliato a metà",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s è stato gettato su una Sega meccanica da %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s è stato ucciso dal Cannone a patate di %2$s",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Sempre rivolto verso il movimento",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pausa durante la rotazione",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Blocca rotazione",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Direzione di rotazione",
|
||||
"create.contraptions.clockwork.clock_hands": "Lancette dell'orologio",
|
||||
"create.contraptions.clockwork.hour_first": "Prima lancetta delle ore",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Filtro applicato a %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Filtro applicato a %1$s, clicca di nuovo per copiare.",
|
||||
"create.logistics.filter.apply_count": "Conteggio estrazione applicato ai filtri.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Statistiche del generatore:",
|
||||
"create.gui.goggles.kinetic_stats": "Statistiche cinetiche:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 71",
|
||||
"_": "Missing Localizations: 79",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "メカニカルプラウ",
|
||||
"block.create.mechanical_press": "メカニカルプレス",
|
||||
"block.create.mechanical_pump": "メカニカルポンプ",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "メカニカルソー",
|
||||
"block.create.metal_bracket": "金属ブラケット",
|
||||
"block.create.metal_girder": "鉄骨",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$sは%2$sによって熱風に投げ込まれた",
|
||||
"death.attack.create.mechanical_drill": "%1$sはメカニカルドリルに突き抜かれた",
|
||||
"death.attack.create.mechanical_drill.player": "%1$sは%2$sにドリルの目の前に投げ込まれた",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$sはメカニカルソーで半分にカットされた",
|
||||
"death.attack.create.mechanical_saw.player": "%1$sは%2$sによってメカニカルソーの回転する刃に投げ込まれた",
|
||||
"death.attack.create.potato_cannon": "%1$sは%2$sのポテトキャノンに撃ち抜かれた",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "常に動いている方向を向く",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "回転中に機械を一時停止する",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "常に向きを固定する",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "回転方向",
|
||||
"create.contraptions.clockwork.clock_hands": "時計の針",
|
||||
"create.contraptions.clockwork.hour_first": "時針を最初に",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "フィルターを%1$sに適用しました。",
|
||||
"create.logistics.filter.apply_click_again": "フィルターを%1$sに適用しました。再度クリックすると数量をコピーします",
|
||||
"create.logistics.filter.apply_count": "搬出入数をフィルターに適用しました。",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "原動機の統計:",
|
||||
"create.gui.goggles.kinetic_stats": "動力の統計:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 50",
|
||||
"_": "Missing Localizations: 58",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "쟁기",
|
||||
"block.create.mechanical_press": "압착기",
|
||||
"block.create.mechanical_pump": "펌프",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "톱",
|
||||
"block.create.metal_bracket": "금속 지지대",
|
||||
"block.create.metal_girder": "금속 거더",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s이(가) %2$s 때문에 용암 바람으로 재가 되었습니다",
|
||||
"death.attack.create.mechanical_drill": "%1$s이(가) 드릴에 관통당했습니다",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s이(가) %2$s 때문에 드릴에 관통당했습니다",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s이(가) 톱날에 반으로 갈라져 죽었습니다",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s이(가) %2$s 때문에 톱날에 반으로 갈라져 죽었습니다",
|
||||
"death.attack.create.potato_cannon": "%1$s이(가) %2$s의 감자포에 맞고 죽었습니다.",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "구조물이 항상 전방을 향함",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "수레가 회전할때 구조물이 행동을 멈춤",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "구조물이 회전하지 않음",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "회전 방향",
|
||||
"create.contraptions.clockwork.clock_hands": "시계침",
|
||||
"create.contraptions.clockwork.hour_first": "시침 먼저",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "%1$s에 필터를 적용했습니다",
|
||||
"create.logistics.filter.apply_click_again": "%1$s에 필터를 적용했습니다. 다시 클릭하면 가지고 있는 아이템의 수량을 복사하여 필터에 적용합니다",
|
||||
"create.logistics.filter.apply_count": "필터에 수량을 적용했습니다",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "동력 상태:",
|
||||
"create.gui.goggles.kinetic_stats": "작동 상태:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1832",
|
||||
"_": "Missing Localizations: 1840",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Mechanische Ploeg",
|
||||
"block.create.mechanical_press": "Mechanische Pers",
|
||||
"block.create.mechanical_pump": "Mechanische Pomp",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Mechanische Zaag",
|
||||
"block.create.metal_bracket": "Metalen Steun",
|
||||
"block.create.metal_girder": "Metalen Draagbalk",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s is gespietst door een mechanische boor",
|
||||
"death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
|
||||
"death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s",
|
||||
"death.attack.create.potato_cannon": "UNLOCALIZED: %1$s was shot by %2$s's Potato Cannon",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "UNLOCALIZED: Always face toward motion",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "UNLOCALIZED: Pause actors while rotating",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "UNLOCALIZED: Rotation Direction",
|
||||
"create.contraptions.clockwork.clock_hands": "UNLOCALIZED: Clock Hands",
|
||||
"create.contraptions.clockwork.hour_first": "UNLOCALIZED: Hour hand first",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
|
||||
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "UNLOCALIZED: Generator Stats:",
|
||||
"create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 2360",
|
||||
"_": "Missing Localizations: 2368",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Mekanisk plog",
|
||||
"block.create.mechanical_press": "UNLOCALIZED: Mechanical Press",
|
||||
"block.create.mechanical_pump": "Mekanisk pumpe",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Mekanisk sag",
|
||||
"block.create.metal_bracket": "Metallbrakett",
|
||||
"block.create.metal_girder": "UNLOCALIZED: Metal Girder",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s",
|
||||
"death.attack.create.mechanical_drill": "UNLOCALIZED: %1$s was impaled by a Mechanical Drill",
|
||||
"death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
|
||||
"death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s",
|
||||
"death.attack.create.potato_cannon": "UNLOCALIZED: %1$s was shot by %2$s's Potato Cannon",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "UNLOCALIZED: Always face toward motion",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "UNLOCALIZED: Pause actors while rotating",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "UNLOCALIZED: Rotation Direction",
|
||||
"create.contraptions.clockwork.clock_hands": "UNLOCALIZED: Clock Hands",
|
||||
"create.contraptions.clockwork.hour_first": "UNLOCALIZED: Hour hand first",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
|
||||
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "UNLOCALIZED: Generator Stats:",
|
||||
"create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 51",
|
||||
"_": "Missing Localizations: 59",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Mechaniczny pług",
|
||||
"block.create.mechanical_press": "Mechaniczna prasa",
|
||||
"block.create.mechanical_pump": "Mechaniczna pompa",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Mechaniczna piła",
|
||||
"block.create.metal_bracket": "Metalowy wspornik",
|
||||
"block.create.metal_girder": "Metalowa belka",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "Gracz %1$s został wepchnięty w strumień kropel lawy przez %2$s",
|
||||
"death.attack.create.mechanical_drill": "Gracz %1$s nabił się na mechaniczne wiertło",
|
||||
"death.attack.create.mechanical_drill.player": "Gracz %1$s został wepchnięty na mechaniczne wiertło przez %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "Gracz %1$s został przecięty na pół przez mechaniczną piłę",
|
||||
"death.attack.create.mechanical_saw.player": "Gracz %1$s został wepchnięty na mechaniczną piłę przez %2$s",
|
||||
"death.attack.create.potato_cannon": "Gracz %1$s został zestrzelowny przez armate na ziemniaki należącą do %2$s",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Zawsze kieruj w stronę ruchu",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Zatrzymaj komponenty podczas obrotu",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Zablokuj obrót",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Kierunek obrotu",
|
||||
"create.contraptions.clockwork.clock_hands": "Wskazówki zegara",
|
||||
"create.contraptions.clockwork.hour_first": "Najpierw wskazówka godzinowa",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Zastosowano filtr na %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Zastosowano filtr na %1$s; kliknij ponownie, aby skopiować ilość.",
|
||||
"create.logistics.filter.apply_count": "Zastosowano limit wyciągania do filtra.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Właściwości generatora:",
|
||||
"create.gui.goggles.kinetic_stats": "Właściwości kinetyczne:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 47",
|
||||
"_": "Missing Localizations: 55",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Arador Mecânico",
|
||||
"block.create.mechanical_press": "Prensa Mecânica",
|
||||
"block.create.mechanical_pump": "Bomba Mecânica",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Serra Mecânica",
|
||||
"block.create.metal_bracket": "Suporte de metal",
|
||||
"block.create.metal_girder": "Viga de metal",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "U%1$s foi jogado numa fundidora por %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s foi empalado pela Broca Mecânica",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s foi jogado na frente de uma broca por %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s foi cortado ao meio por uma serra mecânica",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s foi jogado numa serra por %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s foi atirado pelo canhão de batatas do %2$",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Sempre apontar para a direção do movimento",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pausar atores quando girando",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Travar a rotação",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Direção da rotação",
|
||||
"create.contraptions.clockwork.clock_hands": "Ponteiros do relógio",
|
||||
"create.contraptions.clockwork.hour_first": "Ponteiro da hora primeiro",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Aplicou filtro para %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Aplicou filtro para %1$s, Clique denovo para copiar quantidade.",
|
||||
"create.logistics.filter.apply_count": "Aplicou quantidade de extração para o filtro.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Estatísticas do gerador:",
|
||||
"create.gui.goggles.kinetic_stats": "Estatísticas cinéticas:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 2254",
|
||||
"_": "Missing Localizations: 2262",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Arador Mecânico",
|
||||
"block.create.mechanical_press": "Prensa Mecânica",
|
||||
"block.create.mechanical_pump": "Bomba Mecânica",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Serra Mecânica",
|
||||
"block.create.metal_bracket": "Suporte de metal",
|
||||
"block.create.metal_girder": "UNLOCALIZED: Metal Girder",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "U%1$s foi jogado numa fundidora por %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s foi empalado pela Broca Mecânica",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s foi jogado na frente de uma broca por %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s foi cortado ao meio por uma serra mecânica",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s foi jogado numa serra por %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s foi atirado pelo canhão de batatas do %2$",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "UNLOCALIZED: Always face toward motion",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "UNLOCALIZED: Pause actors while rotating",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "UNLOCALIZED: Rotation Direction",
|
||||
"create.contraptions.clockwork.clock_hands": "UNLOCALIZED: Clock Hands",
|
||||
"create.contraptions.clockwork.hour_first": "UNLOCALIZED: Hour hand first",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
|
||||
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Estatísticas do gerador:",
|
||||
"create.gui.goggles.kinetic_stats": "Estatísticas cinéticas:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 741",
|
||||
"_": "Missing Localizations: 749",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Plug Mecanic",
|
||||
"block.create.mechanical_press": "Presă Mecanică",
|
||||
"block.create.mechanical_pump": "Pompă Mecanică",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Ferăstrău Mecanic",
|
||||
"block.create.metal_bracket": "Brachetă De Metal",
|
||||
"block.create.metal_girder": "UNLOCALIZED: Metal Girder",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s a fost aruncat într-un topitor de către %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s a fost tras în țeapă de către un Burghiu Mecanic",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s a fost aruncat în fața unui Burghiu de către %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s a fost tăiat în jumătate de către un Ferăstrău Mecanic",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s a fost aruncat într-un Ferăstrău de către %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s a fost împușcat de către Tunul De Cartofi al lui %2$s",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Mereu stă cu fața spre mișcare",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Oprește Actorii când se rotește",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Blochează Rotația",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Direcție De Rotație",
|
||||
"create.contraptions.clockwork.clock_hands": "Ace de Ceas",
|
||||
"create.contraptions.clockwork.hour_first": "Acul orei primul",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Filtru aplicat la %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Filtru aplicat la %1$s, click din nou pentru a copia cantitatea.",
|
||||
"create.logistics.filter.apply_count": "Număr de extracție applicat la filtru.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Statistici Generator:",
|
||||
"create.gui.goggles.kinetic_stats": "Statistici Cinetice:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 47",
|
||||
"_": "Missing Localizations: 55",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Механический плуг",
|
||||
"block.create.mechanical_press": "Механический пресс",
|
||||
"block.create.mechanical_pump": "Механическая помпа",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Механическая пила",
|
||||
"block.create.metal_bracket": "Металлическая скоба",
|
||||
"block.create.metal_girder": "Металлическая балка",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s был сожжён огненным потоком благодаря %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s был пронзён механической дрелью",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s был пронзён механической дрелью благодаря %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s был разрезан пополам механической пилой",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s был разрезан пополам механической пилой благодаря %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s был застрелен из картофельной пушки %2$s",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Вращение в сторону движения",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Пауза во время вращения",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Блокировка вращения",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Направление вращения",
|
||||
"create.contraptions.clockwork.clock_hands": "Формат часов",
|
||||
"create.contraptions.clockwork.hour_first": "Сначала часовая стрелка",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Фильтр применён (%1$s)",
|
||||
"create.logistics.filter.apply_click_again": "Фильтр применён (%1$s); кликните ещё раз, чтобы скопировать количество",
|
||||
"create.logistics.filter.apply_count": "Применено извлекаемое количество к фильтру",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Статистика генератора:",
|
||||
"create.gui.goggles.kinetic_stats": "Кинетическая статистика:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1250",
|
||||
"_": "Missing Localizations: 1258",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Mekanisk Plog",
|
||||
"block.create.mechanical_press": "Mekanisk Tryckpress",
|
||||
"block.create.mechanical_pump": "Mekanisk Pump",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Mekanisk Såg",
|
||||
"block.create.metal_bracket": "Metallfäste",
|
||||
"block.create.metal_girder": "Metallbalk",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s slängdes in i en smältare av %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s skar sig ordentligt av en Mekanisk Borr",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s slängdes in en Borr av %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s blev halverad av en Mekanisk Såg",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s kastades in i en Såg av %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s blev skjuten av %2$ss Potatis Kanon",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Alltid riktad mot rörelse",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pausa aktörer vid rotation",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Lås rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Rotationsriktning",
|
||||
"create.contraptions.clockwork.clock_hands": "Klockvisare",
|
||||
"create.contraptions.clockwork.hour_first": "Timvisaren först",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Tillämpade filter till %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Tillämpade filter på %1$s, klicka igen för att kopiera beloppet.",
|
||||
"create.logistics.filter.apply_count": "Applicerade antal extraheringar för filter.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Generator Statistik:",
|
||||
"create.gui.goggles.kinetic_stats": "Kinetisk Statistik:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 2711",
|
||||
"_": "Missing Localizations: 2719",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "UNLOCALIZED: Mechanical Plough",
|
||||
"block.create.mechanical_press": "UNLOCALIZED: Mechanical Press",
|
||||
"block.create.mechanical_pump": "UNLOCALIZED: Mechanical Pump",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "UNLOCALIZED: Mechanical Saw",
|
||||
"block.create.metal_bracket": "UNLOCALIZED: Metal Bracket",
|
||||
"block.create.metal_girder": "UNLOCALIZED: Metal Girder",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "UNLOCALIZED: %1$s was thrown into a smelter by %2$s",
|
||||
"death.attack.create.mechanical_drill": "UNLOCALIZED: %1$s was impaled by a Mechanical Drill",
|
||||
"death.attack.create.mechanical_drill.player": "UNLOCALIZED: %1$s was thrown in front of a Drill by %2$s",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "UNLOCALIZED: %1$s got cut in half by a Mechanical Saw",
|
||||
"death.attack.create.mechanical_saw.player": "UNLOCALIZED: %1$s was thrown into a Saw by %2$s",
|
||||
"death.attack.create.potato_cannon": "UNLOCALIZED: %1$s was shot by %2$s's Potato Cannon",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "UNLOCALIZED: Always face toward motion",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "UNLOCALIZED: Pause actors while rotating",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "UNLOCALIZED: Lock rotation",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "UNLOCALIZED: Rotation Direction",
|
||||
"create.contraptions.clockwork.clock_hands": "UNLOCALIZED: Clock Hands",
|
||||
"create.contraptions.clockwork.hour_first": "UNLOCALIZED: Hour hand first",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "UNLOCALIZED: Applied filter to %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "UNLOCALIZED: Applied filter to %1$s, click again to copy the amount.",
|
||||
"create.logistics.filter.apply_count": "UNLOCALIZED: Applied extraction count to filter.",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "UNLOCALIZED: Generator Stats:",
|
||||
"create.gui.goggles.kinetic_stats": "UNLOCALIZED: Kinetic Stats:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 215",
|
||||
"_": "Missing Localizations: 223",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "Механічний плуг",
|
||||
"block.create.mechanical_press": "Механічний прес",
|
||||
"block.create.mechanical_pump": "Механічний насос",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "Механічна пила",
|
||||
"block.create.metal_bracket": "Металевий кронштейн",
|
||||
"block.create.metal_girder": "Металевий брус",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%2$s скинув %1$s в плавильню",
|
||||
"death.attack.create.mechanical_drill": "%1$s простромлено механічним буром",
|
||||
"death.attack.create.mechanical_drill.player": "%2$s скинув %1$s попереду механічного бура",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s розрізано навпіл механічною пилою",
|
||||
"death.attack.create.mechanical_saw.player": "%2$s скинув %1$s на пилу",
|
||||
"death.attack.create.potato_cannon": "%2$s застрелив %1$s картопляною гарматою",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Завжди бути повернутим в напрямку руху",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Призупинити прилади під час обертання",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Заблокувати обертання",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "Напрям обертання",
|
||||
"create.contraptions.clockwork.clock_hands": "Стрілки годинника",
|
||||
"create.contraptions.clockwork.hour_first": "Спочатку годинна стрілка",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "Фільтр застосовано до блоку %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Фільтр застосовано до блоку %1$s, натисніть ще раз, щоб скопіювати кількість.",
|
||||
"create.logistics.filter.apply_count": "До фільтра застосовано кількість вилучення",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Статистика генератора:",
|
||||
"create.gui.goggles.kinetic_stats": "Кінетична статистика:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 50",
|
||||
"_": "Missing Localizations: 58",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "动力犁",
|
||||
"block.create.mechanical_press": "动力辊压机",
|
||||
"block.create.mechanical_pump": "动力泵",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "动力锯",
|
||||
"block.create.metal_bracket": "金属支架",
|
||||
"block.create.metal_girder": "金属梁",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s被%2$s扔进了冶炼炉",
|
||||
"death.attack.create.mechanical_drill": "%1$s被钻头刺穿了",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s被%2$s扔到钻头前",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s被动力锯切成了两截",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s被%2$s扔到动力锯上",
|
||||
"death.attack.create.potato_cannon": "%1$s被%2$s的土豆加农炮射杀",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "始终面朝前进方向",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "矿车转向时机器停止工作",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "旋转锁定",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "旋转方向",
|
||||
"create.contraptions.clockwork.clock_hands": "钟表指针",
|
||||
"create.contraptions.clockwork.hour_first": "时针优先",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "已将过滤应用于%1$s",
|
||||
"create.logistics.filter.apply_click_again": "已将过滤应用于%1$s,再次点击可将手持物品数量复制到过滤器上",
|
||||
"create.logistics.filter.apply_count": "已将提取数量应用至过滤器",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "应力发生器状态:",
|
||||
"create.gui.goggles.kinetic_stats": "动力学状态:",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 48",
|
||||
"_": "Missing Localizations: 56",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -306,6 +306,7 @@
|
|||
"block.create.mechanical_plough": "機械犁",
|
||||
"block.create.mechanical_press": "機械鍛壓機",
|
||||
"block.create.mechanical_pump": "機械幫浦",
|
||||
"block.create.mechanical_roller": "UNLOCALIZED: Mechanical Roller",
|
||||
"block.create.mechanical_saw": "機械圓鋸機",
|
||||
"block.create.metal_bracket": "金屬支架",
|
||||
"block.create.metal_girder": "金屬樑",
|
||||
|
@ -880,6 +881,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s 被 %2$s 推進岩漿",
|
||||
"death.attack.create.mechanical_drill": "%1$s 被鑽頭鑽爆腦袋",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s 被 %2$s 當成礦物放在鑽頭前面而死",
|
||||
"death.attack.create.mechanical_roller": "UNLOCALIZED: %1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "UNLOCALIZED: %1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s 被鋸切成了兩半",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s 被 %2$s 鋸掉了",
|
||||
"death.attack.create.potato_cannon": "%1$s 被 %2$s 的馬鈴薯大砲餵飽了",
|
||||
|
@ -1057,6 +1060,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "結構與礦車保持相同方向",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "礦車轉向時機器停止工作",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "結構方向保持不變",
|
||||
"create.contraptions.roller_mode": "UNLOCALIZED: Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "UNLOCALIZED: Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "UNLOCALIZED: Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "UNLOCALIZED: Sloped Fill Below",
|
||||
"create.contraptions.windmill.rotation_direction": "旋轉方向",
|
||||
"create.contraptions.clockwork.clock_hands": "鐘錶指針",
|
||||
"create.contraptions.clockwork.hour_first": "時針優先",
|
||||
|
@ -1071,6 +1078,7 @@
|
|||
"create.logistics.filter.apply": "將過濾器應用來 %1$s",
|
||||
"create.logistics.filter.apply_click_again": "將過濾器應用來 %1$s,再次點擊以複製數量",
|
||||
"create.logistics.filter.apply_count": "使用提取計數過濾",
|
||||
"create.logistics.filter.invalid_item": "UNLOCALIZED: Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "發動機狀態:",
|
||||
"create.gui.goggles.kinetic_stats": "動力學狀態:",
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "create:block/mechanical_roller/item"
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"parent": "minecraft:recipes/root",
|
||||
"rewards": {
|
||||
"recipes": [
|
||||
"create:crafting/kinetics/mechanical_roller"
|
||||
]
|
||||
},
|
||||
"criteria": {
|
||||
"has_item": {
|
||||
"trigger": "minecraft:inventory_changed",
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": [
|
||||
"create:andesite_casing"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"has_the_recipe": {
|
||||
"trigger": "minecraft:recipe_unlocked",
|
||||
"conditions": {
|
||||
"recipe": "create:crafting/kinetics/mechanical_roller"
|
||||
}
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"has_item",
|
||||
"has_the_recipe"
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1.0,
|
||||
"bonus_rolls": 0.0,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "create:mechanical_roller"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"A",
|
||||
"C",
|
||||
"I"
|
||||
],
|
||||
"key": {
|
||||
"C": {
|
||||
"item": "create:andesite_casing"
|
||||
},
|
||||
"A": {
|
||||
"item": "create:electron_tube"
|
||||
},
|
||||
"I": {
|
||||
"item": "create:crushing_wheel"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "create:mechanical_roller"
|
||||
}
|
||||
}
|
|
@ -56,6 +56,7 @@
|
|||
"create:elevator_contact",
|
||||
"create:mechanical_harvester",
|
||||
"create:mechanical_plough",
|
||||
"create:mechanical_roller",
|
||||
"create:white_seat",
|
||||
"create:orange_seat",
|
||||
"create:magenta_seat",
|
||||
|
|
|
@ -105,6 +105,7 @@
|
|||
"create:elevator_contact",
|
||||
"create:mechanical_harvester",
|
||||
"create:mechanical_plough",
|
||||
"create:mechanical_roller",
|
||||
"create:andesite_casing",
|
||||
"create:brass_casing",
|
||||
"create:copper_casing",
|
||||
|
|
|
@ -18,6 +18,8 @@ import com.simibubi.create.content.contraptions.components.actors.PSIInstance;
|
|||
import com.simibubi.create.content.contraptions.components.actors.PortableFluidInterfaceBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.components.actors.PortableItemInterfaceBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.actors.RollerBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.components.actors.RollerRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.actors.controls.ContraptionControlsBlockEntity;
|
||||
import com.simibubi.create.content.contraptions.components.actors.controls.ContraptionControlsRenderer;
|
||||
import com.simibubi.create.content.contraptions.components.clock.CuckooClockBlockEntity;
|
||||
|
@ -535,6 +537,12 @@ public class AllBlockEntityTypes {
|
|||
.renderer(() -> HarvesterRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final BlockEntityEntry<RollerBlockEntity> MECHANICAL_ROLLER =
|
||||
REGISTRATE.blockEntity("mechanical_roller", RollerBlockEntity::new)
|
||||
.validBlocks(AllBlocks.MECHANICAL_ROLLER)
|
||||
.renderer(() -> RollerRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final BlockEntityEntry<PortableItemInterfaceBlockEntity> PORTABLE_STORAGE_INTERFACE =
|
||||
REGISTRATE
|
||||
.blockEntity("portable_storage_interface", PortableItemInterfaceBlockEntity::new)
|
||||
|
|
|
@ -53,6 +53,9 @@ public class AllBlockPartials {
|
|||
BELT_FUNNEL_FLAP = block("belt_funnel/flap"), BELT_TUNNEL_FLAP = block("belt_tunnel/flap"),
|
||||
FLEXPEATER_INDICATOR = block("diodes/indicator"),
|
||||
|
||||
ROLLER_WHEEL = block("mechanical_roller/wheel"),
|
||||
ROLLER_FRAME = block("mechanical_roller/frame"),
|
||||
|
||||
CUCKOO_MINUTE_HAND = block("cuckoo_clock/minute_hand"), CUCKOO_HOUR_HAND = block("cuckoo_clock/hour_hand"),
|
||||
CUCKOO_LEFT_DOOR = block("cuckoo_clock/left_door"), CUCKOO_RIGHT_DOOR = block("cuckoo_clock/right_door"),
|
||||
CUCKOO_PIG = block("cuckoo_clock/pig"), CUCKOO_CREEPER = block("cuckoo_clock/creeper"),
|
||||
|
|
|
@ -26,6 +26,8 @@ import com.simibubi.create.content.contraptions.components.actors.PloughBlock;
|
|||
import com.simibubi.create.content.contraptions.components.actors.PloughMovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock;
|
||||
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceMovement;
|
||||
import com.simibubi.create.content.contraptions.components.actors.RollerBlock;
|
||||
import com.simibubi.create.content.contraptions.components.actors.RollerMovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.components.actors.SawMovementBehaviour;
|
||||
import com.simibubi.create.content.contraptions.components.actors.SeatBlock;
|
||||
import com.simibubi.create.content.contraptions.components.actors.SeatInteractionBehaviour;
|
||||
|
@ -1356,6 +1358,19 @@ public class AllBlocks {
|
|||
.simpleItem()
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<RollerBlock> MECHANICAL_ROLLER =
|
||||
REGISTRATE.block("mechanical_roller", RollerBlock::new)
|
||||
.initialProperties(SharedProperties::stone)
|
||||
.properties(p -> p.color(MaterialColor.COLOR_GRAY)
|
||||
.noOcclusion())
|
||||
.transform(axeOrPickaxe())
|
||||
.onRegister(movementBehaviour(new RollerMovementBehaviour()))
|
||||
.blockstate(BlockStateGen.horizontalBlockProvider(true))
|
||||
.addLayer(() -> RenderType::cutoutMipped)
|
||||
.item()
|
||||
.transform(customItemModel())
|
||||
.register();
|
||||
|
||||
public static final DyedBlockList<SeatBlock> SEATS = new DyedBlockList<>(colour -> {
|
||||
String colourName = colour.getSerializedName();
|
||||
SeatMovementBehaviour movementBehaviour = new SeatMovementBehaviour();
|
||||
|
@ -1700,8 +1715,7 @@ public class AllBlocks {
|
|||
|
||||
public static final BlockEntry<ItemVaultBlock> ITEM_VAULT = REGISTRATE.block("item_vault", ItemVaultBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.properties(p -> p.color(
|
||||
MaterialColor.TERRACOTTA_BLUE))
|
||||
.properties(p -> p.color(MaterialColor.TERRACOTTA_BLUE))
|
||||
.properties(p -> p.sound(SoundType.NETHERITE_BLOCK)
|
||||
.explosionResistance(1200))
|
||||
.transform(pickaxeOnly())
|
||||
|
|
|
@ -49,6 +49,7 @@ public class AllShapes {
|
|||
.forDirectional(),
|
||||
SAIL_FRAME = shape(0, 5, 0, 16, 9, 16).forDirectional(), SAIL = shape(0, 5, 0, 16, 10, 16).forDirectional(),
|
||||
HARVESTER_BASE = shape(0, 2, 0, 16, 14, 3).forDirectional(SOUTH),
|
||||
ROLLER_BASE = shape(0, 0, 0, 16, 16, 10).forDirectional(SOUTH),
|
||||
NOZZLE = shape(2, 0, 2, 14, 14, 14).add(1, 13, 1, 15, 15, 15)
|
||||
.erase(3, 13, 3, 13, 15, 13)
|
||||
.forDirectional(),
|
||||
|
|
|
@ -4,6 +4,7 @@ import javax.annotation.ParametersAreNonnullByDefault;
|
|||
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||
import com.simibubi.create.foundation.block.ProperWaterloggedBlock;
|
||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||
|
||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
|
@ -13,21 +14,25 @@ import net.minecraft.world.InteractionResult;
|
|||
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||
import net.minecraft.world.item.context.UseOnContext;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.LevelAccessor;
|
||||
import net.minecraft.world.level.LevelReader;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.StateDefinition.Builder;
|
||||
import net.minecraft.world.level.material.FluidState;
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType;
|
||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
public abstract class AttachedActorBlock extends HorizontalDirectionalBlock implements IWrenchable {
|
||||
public abstract class AttachedActorBlock extends HorizontalDirectionalBlock
|
||||
implements IWrenchable, ProperWaterloggedBlock {
|
||||
|
||||
protected AttachedActorBlock(Properties p_i48377_1_) {
|
||||
super(p_i48377_1_);
|
||||
registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -43,7 +48,7 @@ public abstract class AttachedActorBlock extends HorizontalDirectionalBlock impl
|
|||
|
||||
@Override
|
||||
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
|
||||
builder.add(FACING);
|
||||
builder.add(FACING, WATERLOGGED);
|
||||
super.createBlockStateDefinition(builder);
|
||||
}
|
||||
|
||||
|
@ -57,17 +62,29 @@ public abstract class AttachedActorBlock extends HorizontalDirectionalBlock impl
|
|||
@Override
|
||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
||||
Direction facing;
|
||||
if (context.getClickedFace().getAxis().isVertical())
|
||||
facing = context.getHorizontalDirection().getOpposite();
|
||||
if (context.getClickedFace()
|
||||
.getAxis()
|
||||
.isVertical())
|
||||
facing = context.getHorizontalDirection()
|
||||
.getOpposite();
|
||||
else {
|
||||
BlockState blockState =
|
||||
context.getLevel().getBlockState(context.getClickedPos().relative(context.getClickedFace().getOpposite()));
|
||||
BlockState blockState = context.getLevel()
|
||||
.getBlockState(context.getClickedPos()
|
||||
.relative(context.getClickedFace()
|
||||
.getOpposite()));
|
||||
if (blockState.getBlock() instanceof AttachedActorBlock)
|
||||
facing = blockState.getValue(FACING);
|
||||
else
|
||||
facing = context.getClickedFace();
|
||||
}
|
||||
return defaultBlockState().setValue(FACING, facing);
|
||||
return withWater(defaultBlockState().setValue(FACING, facing), context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState updateShape(BlockState pState, Direction pDirection, BlockState pNeighborState,
|
||||
LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) {
|
||||
updateWater(pLevel, pState, pCurrentPos);
|
||||
return pState;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -75,4 +92,9 @@ public abstract class AttachedActorBlock extends HorizontalDirectionalBlock impl
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidState getFluidState(BlockState pState) {
|
||||
return fluidState(pState);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -40,9 +40,9 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
|
|||
damageEntities(context, pos, world);
|
||||
if (world.isClientSide)
|
||||
return;
|
||||
|
||||
if (!canBreak(world, pos, stateVisited))
|
||||
return;
|
||||
|
||||
context.data.put("BreakingPos", NbtUtils.writeBlockPos(pos));
|
||||
context.stall = true;
|
||||
}
|
||||
|
@ -180,7 +180,7 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
|
|||
return;
|
||||
}
|
||||
|
||||
float breakSpeed = Mth.clamp(Math.abs(context.getAnimationSpeed()) / 500f, 1 / 128f, 16f);
|
||||
float breakSpeed = getBlockBreakingSpeed(context);
|
||||
destroyProgress += Mth.clamp((int) (breakSpeed / blockHardness), 1, 10 - destroyProgress);
|
||||
world.playSound(null, breakingPos, stateToBreak.getSoundType()
|
||||
.getHitSound(), SoundSource.NEUTRAL, .25f, 1);
|
||||
|
@ -199,7 +199,7 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
|
|||
|
||||
context.stall = false;
|
||||
if (shouldDestroyStartBlock(stateToBreak))
|
||||
BlockHelper.destroyBlock(context.world, breakingPos, 1f, stack -> this.dropItem(context, stack));
|
||||
destroyBlock(context, breakingPos);
|
||||
onBlockBroken(context, ogPos, stateToBreak);
|
||||
ticksUntilNextProgress = -1;
|
||||
data.remove("Progress");
|
||||
|
@ -214,6 +214,14 @@ public class BlockBreakingMovementBehaviour implements MovementBehaviour {
|
|||
data.putInt("Progress", destroyProgress);
|
||||
}
|
||||
|
||||
protected void destroyBlock(MovementContext context, BlockPos breakingPos) {
|
||||
BlockHelper.destroyBlock(context.world, breakingPos, 1f, stack -> this.dropItem(context, stack));
|
||||
}
|
||||
|
||||
protected float getBlockBreakingSpeed(MovementContext context) {
|
||||
return Mth.clamp(Math.abs(context.getAnimationSpeed()) / 500f, 1 / 128f, 16f);
|
||||
}
|
||||
|
||||
protected boolean shouldDestroyStartBlock(BlockState stateToBreak) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.simibubi.create.content.contraptions.components.actors;
|
|||
import com.jozufozu.flywheel.api.Material;
|
||||
import com.jozufozu.flywheel.api.MaterialManager;
|
||||
import com.jozufozu.flywheel.core.Materials;
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.jozufozu.flywheel.core.materials.model.ModelData;
|
||||
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
|
@ -18,15 +19,13 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class HarvesterActorInstance extends ActorInstance {
|
||||
static double oneOverRadius = 16.0 / 6.5;
|
||||
static float originOffset = 1 / 16f;
|
||||
static Vec3 rotOffset = new Vec3(0.5f, -2 * originOffset + 0.5f, originOffset + 0.5f);
|
||||
|
||||
|
||||
ModelData harvester;
|
||||
private Direction facing;
|
||||
|
||||
private float horizontalAngle;
|
||||
protected float horizontalAngle;
|
||||
|
||||
private double rotation;
|
||||
private double previousRotation;
|
||||
|
@ -41,13 +40,25 @@ public class HarvesterActorInstance extends ActorInstance {
|
|||
|
||||
facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING);
|
||||
|
||||
harvester = material.getModel(AllBlockPartials.HARVESTER_BLADE, state).createInstance();
|
||||
harvester = material.getModel(getRollingPartial(), state).createInstance();
|
||||
|
||||
horizontalAngle = facing.toYRot() + ((facing.getAxis() == Direction.Axis.X) ? 180 : 0);
|
||||
|
||||
harvester.setBlockLight(localBlockLight());
|
||||
}
|
||||
|
||||
protected PartialModel getRollingPartial() {
|
||||
return AllBlockPartials.HARVESTER_BLADE;
|
||||
}
|
||||
|
||||
protected Vec3 getRotationOffset() {
|
||||
return rotOffset;
|
||||
}
|
||||
|
||||
protected double getRadius() {
|
||||
return 6.5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
@ -60,7 +71,7 @@ public class HarvesterActorInstance extends ActorInstance {
|
|||
|
||||
double arcLength = context.motion.length();
|
||||
|
||||
double radians = arcLength * oneOverRadius;
|
||||
double radians = arcLength * 16 / getRadius();
|
||||
|
||||
float deg = AngleHelper.deg(radians);
|
||||
|
||||
|
@ -78,9 +89,9 @@ public class HarvesterActorInstance extends ActorInstance {
|
|||
.centre()
|
||||
.rotateY(horizontalAngle)
|
||||
.unCentre()
|
||||
.translate(rotOffset)
|
||||
.translate(getRotationOffset())
|
||||
.rotateX(getRotation())
|
||||
.translateBack(rotOffset);
|
||||
.translateBack(getRotationOffset());
|
||||
}
|
||||
|
||||
private double getRotation() {
|
||||
|
|
|
@ -18,7 +18,6 @@ import com.simibubi.create.foundation.utility.VecHelper;
|
|||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
|
@ -26,16 +25,16 @@ import net.minecraft.world.phys.Vec3;
|
|||
|
||||
public class HarvesterRenderer extends SafeBlockEntityRenderer<HarvesterBlockEntity> {
|
||||
|
||||
public HarvesterRenderer(BlockEntityRendererProvider.Context context) {
|
||||
}
|
||||
private static final Vec3 PIVOT = new Vec3(0, 6, 9);
|
||||
|
||||
public HarvesterRenderer(BlockEntityRendererProvider.Context context) {}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(HarvesterBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
int light, int overlay) {
|
||||
BlockState blockState = be.getBlockState();
|
||||
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.HARVESTER_BLADE, blockState);
|
||||
transform(be.getLevel(), blockState.getValue(HarvesterBlock.FACING), superBuffer,
|
||||
be.getAnimatedSpeed());
|
||||
transform(be.getLevel(), blockState.getValue(HarvesterBlock.FACING), superBuffer, be.getAnimatedSpeed(), PIVOT);
|
||||
superBuffer.light(light)
|
||||
.renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped()));
|
||||
}
|
||||
|
@ -52,17 +51,16 @@ public class HarvesterRenderer extends SafeBlockEntityRenderer<HarvesterBlockEnt
|
|||
speed = 0;
|
||||
|
||||
superBuffer.transform(matrices.getModel());
|
||||
transform(context.world, facing, superBuffer, speed);
|
||||
transform(context.world, facing, superBuffer, speed, PIVOT);
|
||||
|
||||
superBuffer
|
||||
.light(matrices.getWorld(),
|
||||
ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld))
|
||||
.light(matrices.getWorld(), ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld))
|
||||
.renderInto(matrices.getViewProjection(), buffers.getBuffer(RenderType.cutoutMipped()));
|
||||
}
|
||||
|
||||
public static void transform(Level world, Direction facing, SuperByteBuffer superBuffer, float speed) {
|
||||
public static void transform(Level world, Direction facing, SuperByteBuffer superBuffer, float speed, Vec3 pivot) {
|
||||
float originOffset = 1 / 16f;
|
||||
Vec3 rotOffset = new Vec3(0, -2 * originOffset, originOffset).add(VecHelper.getCenterOf(BlockPos.ZERO));
|
||||
Vec3 rotOffset = new Vec3(0, pivot.y * originOffset, pivot.z * originOffset);
|
||||
float time = AnimationTickHolder.getRenderTime(world) / 20;
|
||||
float angle = (time * speed) % 360;
|
||||
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors;
|
||||
|
||||
import com.jozufozu.flywheel.api.Material;
|
||||
import com.jozufozu.flywheel.api.MaterialManager;
|
||||
import com.jozufozu.flywheel.core.Materials;
|
||||
import com.jozufozu.flywheel.core.PartialModel;
|
||||
import com.jozufozu.flywheel.core.materials.model.ModelData;
|
||||
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class RollerActorInstance extends HarvesterActorInstance {
|
||||
|
||||
static Vec3 rotOffset = new Vec3(0.5f, -12 * originOffset + 0.5f, 8 * originOffset + 0.5f);
|
||||
|
||||
ModelData frame;
|
||||
|
||||
public RollerActorInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld,
|
||||
MovementContext context) {
|
||||
super(materialManager, simulationWorld, context);
|
||||
|
||||
Material<ModelData> material = materialManager.defaultCutout()
|
||||
.material(Materials.TRANSFORMED);
|
||||
frame = material.getModel(AllBlockPartials.ROLLER_FRAME, context.state)
|
||||
.createInstance();
|
||||
frame.setBlockLight(localBlockLight());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginFrame() {
|
||||
super.beginFrame();
|
||||
frame.loadIdentity()
|
||||
.translate(context.localPos)
|
||||
.centre()
|
||||
.rotateY(horizontalAngle)
|
||||
.unCentre();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PartialModel getRollingPartial() {
|
||||
return AllBlockPartials.ROLLER_WHEEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Vec3 getRotationOffset() {
|
||||
return rotOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getRadius() {
|
||||
return 16.5;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors;
|
||||
|
||||
import com.simibubi.create.AllBlockEntityTypes;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.foundation.block.IBE;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||
import net.minecraft.world.level.BlockGetter;
|
||||
import net.minecraft.world.level.LevelReader;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
public class RollerBlock extends AttachedActorBlock implements IBE<RollerBlockEntity> {
|
||||
|
||||
public static DamageSource damageSourceRoller = new DamageSource("create.mechanical_roller");
|
||||
|
||||
public RollerBlock(Properties p_i48377_1_) {
|
||||
super(p_i48377_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
||||
return withWater(defaultBlockState().setValue(FACING, context.getHorizontalDirection()
|
||||
.getOpposite()), context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<RollerBlockEntity> getBlockEntityClass() {
|
||||
return RollerBlockEntity.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockEntityType<? extends RollerBlockEntity> getBlockEntityType() {
|
||||
return AllBlockEntityTypes.MECHANICAL_ROLLER.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, BlockGetter worldIn, BlockPos pos, CollisionContext context) {
|
||||
Direction direction = state.getValue(FACING);
|
||||
return AllShapes.ROLLER_BASE.get(direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canSurvive(BlockState state, LevelReader worldIn, BlockPos pos) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,138 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jozufozu.flywheel.util.transform.TransformStack;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.foundation.blockEntity.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.scrollvalue.INamedIconOptions;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.scrollvalue.ScrollOptionBehaviour;
|
||||
import com.simibubi.create.foundation.gui.AllIcons;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.Direction.Axis;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.EntityBlock;
|
||||
import net.minecraft.world.level.block.StairBlock;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraft.world.phys.shapes.Shapes;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
public class RollerBlockEntity extends SmartBlockEntity {
|
||||
|
||||
// For simulations such as Ponder
|
||||
private float manuallyAnimatedSpeed;
|
||||
|
||||
public FilteringBehaviour filtering;
|
||||
public ScrollOptionBehaviour<RollingMode> mode;
|
||||
|
||||
public RollerBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
behaviours.add(filtering = new FilteringBehaviour(this, new RollerValueBox(4)).moveText(new Vec3(-30, 23, 10))
|
||||
.withCallback(this::onFilterChanged));
|
||||
behaviours.add(mode = new ScrollOptionBehaviour<RollingMode>(RollingMode.class,
|
||||
Lang.translateDirect("contraptions.roller_mode"), this, new RollerValueBox(-2)));
|
||||
}
|
||||
|
||||
protected boolean onFilterChanged(ItemStack newFilter) {
|
||||
BlockState appliedState = RollerMovementBehaviour.getStateToPaveWith(newFilter);
|
||||
if (appliedState.isAir())
|
||||
return false;
|
||||
if (appliedState.getBlock() instanceof EntityBlock)
|
||||
return false;
|
||||
if (appliedState.getBlock() instanceof StairBlock)
|
||||
return false;
|
||||
VoxelShape shape = appliedState.getShape(level, worldPosition);
|
||||
if (shape.isEmpty() || !shape.bounds()
|
||||
.equals(Shapes.block()
|
||||
.bounds()))
|
||||
return false;
|
||||
VoxelShape collisionShape = appliedState.getCollisionShape(level, worldPosition);
|
||||
if (collisionShape.isEmpty())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AABB createRenderBoundingBox() {
|
||||
return new AABB(worldPosition).inflate(1);
|
||||
}
|
||||
|
||||
public float getAnimatedSpeed() {
|
||||
return manuallyAnimatedSpeed;
|
||||
}
|
||||
|
||||
public void setAnimatedSpeed(float speed) {
|
||||
manuallyAnimatedSpeed = speed;
|
||||
}
|
||||
|
||||
static enum RollingMode implements INamedIconOptions {
|
||||
|
||||
TUNNEL_PAVE(AllIcons.I_ROLLER_PAVE),
|
||||
STRAIGHT_FILL(AllIcons.I_ROLLER_FILL),
|
||||
WIDE_FILL(AllIcons.I_ROLLER_WIDE_FILL),
|
||||
|
||||
;
|
||||
|
||||
private String translationKey;
|
||||
private AllIcons icon;
|
||||
|
||||
private RollingMode(AllIcons icon) {
|
||||
this.icon = icon;
|
||||
translationKey = "contraptions.roller_mode." + Lang.asId(name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public AllIcons getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTranslationKey() {
|
||||
return translationKey;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private final class RollerValueBox extends ValueBoxTransform {
|
||||
|
||||
private int hOffset;
|
||||
|
||||
public RollerValueBox(int hOffset) {
|
||||
this.hOffset = hOffset;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void rotate(BlockState state, PoseStack ms) {
|
||||
Direction facing = state.getValue(RollerBlock.FACING);
|
||||
float yRot = AngleHelper.horizontalAngle(facing) + 180;
|
||||
TransformStack.cast(ms)
|
||||
.rotateY(yRot)
|
||||
.rotateX(90);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Vec3 getLocalOffset(BlockState state) {
|
||||
Direction facing = state.getValue(RollerBlock.FACING);
|
||||
float stateAngle = AngleHelper.horizontalAngle(facing) + 180;
|
||||
return VecHelper.rotateCentered(VecHelper.voxelSpace(7.75 + hOffset, 15.5f, 11), stateAngle, Axis.Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,452 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.jozufozu.flywheel.api.MaterialManager;
|
||||
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.contraptions.components.actors.RollerBlockEntity.RollingMode;
|
||||
import com.simibubi.create.content.contraptions.components.actors.trackPaver.PaveTask;
|
||||
import com.simibubi.create.content.contraptions.components.actors.trackPaver.TrackPaverV2;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyContraption;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||
import com.simibubi.create.content.logistics.item.filter.FilterItem;
|
||||
import com.simibubi.create.content.logistics.trains.TrackEdge;
|
||||
import com.simibubi.create.content.logistics.trains.TrackGraph;
|
||||
import com.simibubi.create.content.logistics.trains.entity.Carriage;
|
||||
import com.simibubi.create.content.logistics.trains.entity.CarriageBogey;
|
||||
import com.simibubi.create.content.logistics.trains.entity.CarriageContraptionEntity;
|
||||
import com.simibubi.create.content.logistics.trains.entity.Train;
|
||||
import com.simibubi.create.content.logistics.trains.entity.TravellingPoint;
|
||||
import com.simibubi.create.content.logistics.trains.entity.TravellingPoint.ITrackSelector;
|
||||
import com.simibubi.create.content.logistics.trains.entity.TravellingPoint.SteerDirection;
|
||||
import com.simibubi.create.content.logistics.trains.track.StandardBogeyBlock;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||
import com.simibubi.create.foundation.utility.Couple;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.Direction.Axis;
|
||||
import net.minecraft.nbt.NbtUtils;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.FallingBlock;
|
||||
import net.minecraft.world.level.block.SlabBlock;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.level.block.state.properties.SlabType;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
public class RollerMovementBehaviour extends BlockBreakingMovementBehaviour {
|
||||
|
||||
@Override
|
||||
public boolean isActive(MovementContext context) {
|
||||
return super.isActive(context) && !(context.contraption instanceof PulleyContraption)
|
||||
&& VecHelper.isVecPointingTowards(context.relativeMotion, context.state.getValue(RollerBlock.FACING));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSpecialInstancedRendering() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ActorInstance createInstance(MaterialManager materialManager, VirtualRenderWorld simulationWorld,
|
||||
MovementContext context) {
|
||||
return new RollerActorInstance(materialManager, simulationWorld, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
|
||||
ContraptionMatrices matrices, MultiBufferSource buffers) {
|
||||
if (!ContraptionRenderDispatcher.canInstance())
|
||||
RollerRenderer.renderInContraption(context, renderWorld, matrices, buffers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vec3 getActiveAreaOffset(MovementContext context) {
|
||||
return Vec3.atLowerCornerOf(context.state.getValue(RollerBlock.FACING)
|
||||
.getNormal())
|
||||
.scale(.45)
|
||||
.subtract(0, 2, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float getBlockBreakingSpeed(MovementContext context) {
|
||||
return Mth.clamp(super.getBlockBreakingSpeed(context) * 4, 1 / 128f, 16f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBreak(Level world, BlockPos breakingPos, BlockState state) {
|
||||
return super.canBreak(world, breakingPos, state) && !state.getCollisionShape(world, breakingPos)
|
||||
.isEmpty() && !AllBlocks.TRACK.has(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DamageSource getDamageSource() {
|
||||
return RollerBlock.damageSourceRoller;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitNewPosition(MovementContext context, BlockPos pos) {
|
||||
Level world = context.world;
|
||||
BlockState stateVisited = world.getBlockState(pos);
|
||||
if (!stateVisited.isRedstoneConductor(world, pos))
|
||||
damageEntities(context, pos, world);
|
||||
if (world.isClientSide)
|
||||
return;
|
||||
|
||||
List<BlockPos> positionsToBreak = getPositionsToBreak(context, pos);
|
||||
if (positionsToBreak.isEmpty()) {
|
||||
triggerPaver(context, pos);
|
||||
return;
|
||||
}
|
||||
|
||||
BlockPos argMax = null;
|
||||
double max = Double.MIN_VALUE;
|
||||
for (BlockPos toBreak : positionsToBreak) {
|
||||
float hardness = context.world.getBlockState(toBreak)
|
||||
.getDestroySpeed(world, toBreak);
|
||||
if (hardness < max)
|
||||
continue;
|
||||
max = hardness;
|
||||
argMax = toBreak;
|
||||
}
|
||||
|
||||
context.data.put("ReferencePos", NbtUtils.writeBlockPos(pos));
|
||||
context.data.put("BreakingPos", NbtUtils.writeBlockPos(argMax));
|
||||
context.stall = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBlockBroken(MovementContext context, BlockPos pos, BlockState brokenState) {
|
||||
super.onBlockBroken(context, pos, brokenState);
|
||||
if (!context.data.contains("ReferencePos"))
|
||||
return;
|
||||
|
||||
BlockPos referencePos = NbtUtils.readBlockPos(context.data.getCompound("ReferencePos"));
|
||||
for (BlockPos otherPos : getPositionsToBreak(context, referencePos))
|
||||
if (!otherPos.equals(pos))
|
||||
destroyBlock(context, otherPos);
|
||||
|
||||
triggerPaver(context, referencePos);
|
||||
context.data.remove("ReferencePos");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void destroyBlock(MovementContext context, BlockPos breakingPos) {
|
||||
BlockState blockState = context.world.getBlockState(breakingPos);
|
||||
boolean noHarvest = blockState.is(BlockTags.NEEDS_IRON_TOOL) || blockState.is(BlockTags.NEEDS_STONE_TOOL)
|
||||
|| blockState.is(BlockTags.NEEDS_DIAMOND_TOOL);
|
||||
|
||||
BlockHelper.destroyBlock(context.world, breakingPos, 1f, stack -> {
|
||||
if (noHarvest || context.world.random.nextBoolean())
|
||||
return;
|
||||
this.dropItem(context, stack);
|
||||
});
|
||||
|
||||
super.destroyBlock(context, breakingPos);
|
||||
}
|
||||
|
||||
RollerTravellingPoint rollerScout = new RollerTravellingPoint();
|
||||
|
||||
protected List<BlockPos> getPositionsToBreak(MovementContext context, BlockPos visitedPos) {
|
||||
ArrayList<BlockPos> positions = new ArrayList<>();
|
||||
|
||||
RollingMode mode = getMode(context);
|
||||
if (mode != RollingMode.TUNNEL_PAVE)
|
||||
return positions;
|
||||
|
||||
// Train
|
||||
PaveTask profileForTracks = createHeightProfileForTracks(context);
|
||||
if (profileForTracks != null) {
|
||||
for (Couple<Integer> coords : profileForTracks.keys()) {
|
||||
float height = profileForTracks.get(coords);
|
||||
BlockPos targetPosition = new BlockPos(coords.getFirst(), height, coords.getSecond());
|
||||
boolean shouldPlaceSlab = height > Math.floor(height) + .45;
|
||||
for (int i = 0; i <= (shouldPlaceSlab ? 3 : 2); i++)
|
||||
if (testBreakerTarget(context, targetPosition.above(i), i))
|
||||
positions.add(targetPosition.above(i));
|
||||
}
|
||||
return positions;
|
||||
}
|
||||
|
||||
// Otherwise
|
||||
for (int i = 0; i <= 2; i++)
|
||||
if (testBreakerTarget(context, visitedPos.above(i), i))
|
||||
positions.add(visitedPos.above(i));
|
||||
|
||||
return positions;
|
||||
}
|
||||
|
||||
protected boolean testBreakerTarget(MovementContext context, BlockPos target, int columnY) {
|
||||
BlockState stateToPaveWith = getStateToPaveWith(context);
|
||||
BlockState stateToPaveWithAsSlab = getStateToPaveWithAsSlab(context);
|
||||
BlockState stateAbove = context.world.getBlockState(target);
|
||||
if (columnY == 0 && stateAbove.is(stateToPaveWith.getBlock()))
|
||||
return false;
|
||||
if (stateToPaveWithAsSlab != null && columnY == 1 && stateAbove.is(stateToPaveWithAsSlab.getBlock()))
|
||||
return false;
|
||||
return canBreak(context.world, target, stateAbove);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected PaveTask createHeightProfileForTracks(MovementContext context) {
|
||||
if (context.contraption == null)
|
||||
return null;
|
||||
if (!(context.contraption.entity instanceof CarriageContraptionEntity cce))
|
||||
return null;
|
||||
Carriage carriage = cce.getCarriage();
|
||||
if (carriage == null)
|
||||
return null;
|
||||
Train train = carriage.train;
|
||||
if (train == null || train.graph == null)
|
||||
return null;
|
||||
|
||||
CarriageBogey mainBogey = carriage.bogeys.getFirst();
|
||||
TravellingPoint point = mainBogey.trailing();
|
||||
|
||||
rollerScout.node1 = point.node1;
|
||||
rollerScout.node2 = point.node2;
|
||||
rollerScout.edge = point.edge;
|
||||
rollerScout.position = point.position;
|
||||
|
||||
Axis axis = Axis.X;
|
||||
StructureBlockInfo info = context.contraption.getBlocks()
|
||||
.get(BlockPos.ZERO);
|
||||
if (info != null && info.state.hasProperty(StandardBogeyBlock.AXIS))
|
||||
axis = info.state.getValue(StandardBogeyBlock.AXIS);
|
||||
|
||||
Direction orientation = cce.getInitialOrientation();
|
||||
Direction rollerFacing = context.state.getValue(RollerBlock.FACING);
|
||||
|
||||
int step = orientation.getAxisDirection()
|
||||
.getStep();
|
||||
double widthWiseOffset = axis.choose(-context.localPos.getZ(), 0, -context.localPos.getX()) * step;
|
||||
double lengthWiseOffset = axis.choose(-context.localPos.getX(), 0, context.localPos.getZ()) * step - 1;
|
||||
|
||||
if (rollerFacing == orientation.getClockWise())
|
||||
lengthWiseOffset += 1;
|
||||
|
||||
double distanceToTravel = 2;
|
||||
PaveTask heightProfile = new PaveTask(widthWiseOffset, widthWiseOffset);
|
||||
ITrackSelector steering = rollerScout.steer(SteerDirection.NONE, new Vec3(0, 1, 0));
|
||||
|
||||
rollerScout.traversalCallback = (edge, coords) -> {
|
||||
};
|
||||
rollerScout.travel(train.graph, lengthWiseOffset + 1, steering);
|
||||
|
||||
rollerScout.traversalCallback =
|
||||
(edge, coords) -> TrackPaverV2.pave(heightProfile, edge, coords.getFirst(), coords.getSecond());
|
||||
rollerScout.travel(train.graph, distanceToTravel, steering);
|
||||
|
||||
for (Couple<Integer> entry : heightProfile.keys())
|
||||
heightProfile.put(entry.getFirst(), entry.getSecond(), context.localPos.getY() + heightProfile.get(entry));
|
||||
|
||||
return heightProfile;
|
||||
}
|
||||
|
||||
protected void triggerPaver(MovementContext context, BlockPos pos) {
|
||||
BlockState stateToPaveWith = getStateToPaveWith(context);
|
||||
BlockState stateToPaveWithAsSlab = getStateToPaveWithAsSlab(context);
|
||||
RollingMode mode = getMode(context);
|
||||
|
||||
Vec3 directionVec = Vec3.atLowerCornerOf(context.state.getValue(RollerBlock.FACING)
|
||||
.getClockWise()
|
||||
.getNormal());
|
||||
directionVec = context.rotation.apply(directionVec);
|
||||
PaveResult paveResult = PaveResult.PASS;
|
||||
int yOffset = 0;
|
||||
|
||||
List<Pair<BlockPos, Boolean>> paveSet = new ArrayList<>();
|
||||
PaveTask profileForTracks = createHeightProfileForTracks(context);
|
||||
if (profileForTracks == null)
|
||||
paveSet.add(Pair.of(pos, false));
|
||||
else
|
||||
for (Couple<Integer> coords : profileForTracks.keys()) {
|
||||
float height = profileForTracks.get(coords);
|
||||
boolean shouldPlaceSlab = height > Math.floor(height) + .45;
|
||||
BlockPos targetPosition = new BlockPos(coords.getFirst(), height, coords.getSecond());
|
||||
paveSet.add(Pair.of(targetPosition, shouldPlaceSlab));
|
||||
}
|
||||
|
||||
if (paveSet.isEmpty())
|
||||
return;
|
||||
|
||||
while (paveResult == PaveResult.PASS) {
|
||||
if (yOffset > AllConfigs.SERVER.kinetics.rollerFillDepth.get()) {
|
||||
paveResult = PaveResult.FAIL;
|
||||
break;
|
||||
}
|
||||
|
||||
Set<Pair<BlockPos, Boolean>> currentLayer = new HashSet<>();
|
||||
if (mode == RollingMode.WIDE_FILL) {
|
||||
for (Pair<BlockPos, Boolean> anchor : paveSet) {
|
||||
int radius = (yOffset + 1) / 2;
|
||||
for (int i = -radius; i <= radius; i++)
|
||||
for (int j = -radius; j <= radius; j++)
|
||||
if (BlockPos.ZERO.distManhattan(new BlockPos(i, 0, j)) <= radius)
|
||||
currentLayer.add(Pair.of(anchor.getFirst()
|
||||
.offset(i, -yOffset, j), anchor.getSecond()));
|
||||
}
|
||||
} else
|
||||
for (Pair<BlockPos, Boolean> anchor : paveSet)
|
||||
currentLayer.add(Pair.of(anchor.getFirst()
|
||||
.below(yOffset), anchor.getSecond()));
|
||||
|
||||
boolean completelyBlocked = true;
|
||||
boolean anyBlockPlaced = false;
|
||||
|
||||
for (Pair<BlockPos, Boolean> currentPos : currentLayer) {
|
||||
if (stateToPaveWithAsSlab != null && yOffset == 0 && currentPos.getSecond())
|
||||
tryFill(context, currentPos.getFirst()
|
||||
.above(), stateToPaveWithAsSlab);
|
||||
paveResult = tryFill(context, currentPos.getFirst(), stateToPaveWith);
|
||||
if (paveResult != PaveResult.FAIL)
|
||||
completelyBlocked = false;
|
||||
if (paveResult == PaveResult.SUCCESS)
|
||||
anyBlockPlaced = true;
|
||||
}
|
||||
|
||||
if (anyBlockPlaced)
|
||||
paveResult = PaveResult.SUCCESS;
|
||||
else if (!completelyBlocked || yOffset == 0)
|
||||
paveResult = PaveResult.PASS;
|
||||
|
||||
if (paveResult == PaveResult.SUCCESS && stateToPaveWith.getBlock() instanceof FallingBlock)
|
||||
paveResult = PaveResult.PASS;
|
||||
if (paveResult != PaveResult.PASS)
|
||||
break;
|
||||
if (mode == RollingMode.TUNNEL_PAVE)
|
||||
break;
|
||||
|
||||
yOffset++;
|
||||
}
|
||||
|
||||
if (paveResult == PaveResult.SUCCESS) {
|
||||
context.data.putInt("WaitingTicks", 2);
|
||||
context.data.put("LastPos", NbtUtils.writeBlockPos(pos));
|
||||
context.stall = true;
|
||||
}
|
||||
}
|
||||
|
||||
public static BlockState getStateToPaveWith(ItemStack itemStack) {
|
||||
if (itemStack.getItem()instanceof BlockItem bi) {
|
||||
BlockState defaultBlockState = bi.getBlock()
|
||||
.defaultBlockState();
|
||||
if (defaultBlockState.hasProperty(SlabBlock.TYPE))
|
||||
defaultBlockState = defaultBlockState.setValue(SlabBlock.TYPE, SlabType.DOUBLE);
|
||||
return defaultBlockState;
|
||||
}
|
||||
return Blocks.AIR.defaultBlockState();
|
||||
}
|
||||
|
||||
protected BlockState getStateToPaveWith(MovementContext context) {
|
||||
return getStateToPaveWith(ItemStack.of(context.blockEntityData.getCompound("Filter")));
|
||||
}
|
||||
|
||||
protected BlockState getStateToPaveWithAsSlab(MovementContext context) {
|
||||
BlockState stateToPaveWith = getStateToPaveWith(context);
|
||||
if (stateToPaveWith.hasProperty(SlabBlock.TYPE))
|
||||
return stateToPaveWith.setValue(SlabBlock.TYPE, SlabType.BOTTOM);
|
||||
|
||||
Block block = stateToPaveWith.getBlock();
|
||||
if (block == null)
|
||||
return null;
|
||||
|
||||
ResourceLocation rl = block.getRegistryName();
|
||||
String namespace = rl.getNamespace();
|
||||
String blockName = rl.getPath();
|
||||
int nameLength = blockName.length();
|
||||
|
||||
List<String> possibleSlabLocations = new ArrayList<>();
|
||||
possibleSlabLocations.add(blockName + "_slab");
|
||||
|
||||
if (blockName.endsWith("s") && nameLength > 1)
|
||||
possibleSlabLocations.add(blockName.substring(0, nameLength - 1) + "_slab");
|
||||
if (blockName.endsWith("planks") && nameLength > 7)
|
||||
possibleSlabLocations.add(blockName.substring(0, nameLength - 7) + "_slab");
|
||||
|
||||
for (String locationAttempt : possibleSlabLocations) {
|
||||
Optional<Block> result = ForgeRegistries.BLOCKS.getHolder(new ResourceLocation(namespace, locationAttempt))
|
||||
.map(slabHolder -> slabHolder.value());
|
||||
if (result.isEmpty())
|
||||
continue;
|
||||
return result.get()
|
||||
.defaultBlockState();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected RollingMode getMode(MovementContext context) {
|
||||
return RollingMode.values()[context.blockEntityData.getInt("ScrollValue")];
|
||||
}
|
||||
|
||||
private final class RollerTravellingPoint extends TravellingPoint {
|
||||
|
||||
public BiConsumer<TrackEdge, Couple<Double>> traversalCallback;
|
||||
|
||||
@Override
|
||||
protected Double edgeTraversedFrom(TrackGraph graph, boolean forward, IEdgePointListener edgePointListener,
|
||||
ITurnListener turnListener, double prevPos, double totalDistance) {
|
||||
double from = forward ? prevPos : position;
|
||||
double to = forward ? position : prevPos;
|
||||
traversalCallback.accept(edge, Couple.create(from, to));
|
||||
return super.edgeTraversedFrom(graph, forward, edgePointListener, turnListener, prevPos, totalDistance);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private enum PaveResult {
|
||||
FAIL, PASS, SUCCESS;
|
||||
}
|
||||
|
||||
protected PaveResult tryFill(MovementContext context, BlockPos targetPos, BlockState toPlace) {
|
||||
Level level = context.world;
|
||||
if (!level.isLoaded(targetPos))
|
||||
return PaveResult.FAIL;
|
||||
BlockState existing = level.getBlockState(targetPos);
|
||||
if (existing.is(toPlace.getBlock()))
|
||||
return PaveResult.PASS;
|
||||
if (!existing.is(BlockTags.LEAVES) && !existing.getMaterial()
|
||||
.isReplaceable()
|
||||
&& !existing.getCollisionShape(level, targetPos)
|
||||
.isEmpty())
|
||||
return PaveResult.FAIL;
|
||||
|
||||
ItemStack filter = ItemStack.of(context.blockEntityData.getCompound("Filter"));
|
||||
ItemStack held = ItemHelper.extract(context.contraption.getSharedInventory(),
|
||||
stack -> FilterItem.test(context.world, stack, filter), 1, false);
|
||||
if (held.isEmpty())
|
||||
return PaveResult.FAIL;
|
||||
|
||||
level.setBlockAndUpdate(targetPos, toPlace);
|
||||
return PaveResult.SUCCESS;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,85 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors;
|
||||
|
||||
import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING;
|
||||
|
||||
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionMatrices;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||
import com.simibubi.create.foundation.blockEntity.renderer.SmartBlockEntityRenderer;
|
||||
import com.simibubi.create.foundation.render.CachedBufferer;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class RollerRenderer extends SmartBlockEntityRenderer<RollerBlockEntity> {
|
||||
|
||||
private static final Vec3 PIVOT = new Vec3(0, -4, 16);
|
||||
|
||||
public RollerRenderer(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(RollerBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
|
||||
int light, int overlay) {
|
||||
super.renderSafe(be, partialTicks, ms, buffer, light, overlay);
|
||||
|
||||
BlockState blockState = be.getBlockState();
|
||||
|
||||
ms.pushPose();
|
||||
ms.translate(0, -.25, 0);
|
||||
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.ROLLER_WHEEL, blockState)
|
||||
.translate(0, .25, 0);
|
||||
Direction facing = blockState.getValue(RollerBlock.FACING);
|
||||
HarvesterRenderer.transform(be.getLevel(), facing, superBuffer, be.getAnimatedSpeed(), PIVOT);
|
||||
superBuffer.light(light)
|
||||
.renderInto(ms, buffer.getBuffer(RenderType.cutoutMipped()));
|
||||
ms.popPose();
|
||||
|
||||
CachedBufferer.partial(AllBlockPartials.ROLLER_FRAME, blockState)
|
||||
.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing)))
|
||||
.light(light)
|
||||
.renderInto(ms, buffer.getBuffer(RenderType.solid()));
|
||||
}
|
||||
|
||||
public static void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld,
|
||||
ContraptionMatrices matrices, MultiBufferSource buffers) {
|
||||
BlockState blockState = context.state;
|
||||
Direction facing = blockState.getValue(HORIZONTAL_FACING);
|
||||
SuperByteBuffer superBuffer = CachedBufferer.partial(AllBlockPartials.ROLLER_WHEEL, blockState);
|
||||
float speed = (float) (!VecHelper.isVecPointingTowards(context.relativeMotion, facing.getOpposite())
|
||||
? context.getAnimationSpeed()
|
||||
: -context.getAnimationSpeed());
|
||||
if (context.contraption.stalled)
|
||||
speed = 0;
|
||||
|
||||
superBuffer.translate(0, .25, 0)
|
||||
.transform(matrices.getModel());
|
||||
HarvesterRenderer.transform(context.world, facing, superBuffer, speed, PIVOT);
|
||||
|
||||
PoseStack viewProjection = matrices.getViewProjection();
|
||||
viewProjection.pushPose();
|
||||
viewProjection.translate(0, -.25, 0);
|
||||
int contraptionWorldLight = ContraptionRenderDispatcher.getContraptionWorldLight(context, renderWorld);
|
||||
superBuffer.light(matrices.getWorld(), contraptionWorldLight)
|
||||
.renderInto(viewProjection, buffers.getBuffer(RenderType.cutoutMipped()));
|
||||
viewProjection.popPose();
|
||||
|
||||
CachedBufferer.partial(AllBlockPartials.ROLLER_FRAME, blockState)
|
||||
.transform(matrices.getModel())
|
||||
.rotateCentered(Direction.UP, AngleHelper.rad(AngleHelper.horizontalAngle(facing)))
|
||||
.light(matrices.getWorld(), contraptionWorldLight)
|
||||
.renderInto(viewProjection, buffers.getBuffer(RenderType.solid()));
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors.trackPaver;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.simibubi.create.foundation.utility.Couple;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
||||
public class PaveTask {
|
||||
|
||||
private Couple<Double> horizontalInterval;
|
||||
private Map<Couple<Integer>, Float> heightValues = new HashMap<>();
|
||||
|
||||
public PaveTask(double h1, double h2) {
|
||||
horizontalInterval = Couple.create(h1, h2);
|
||||
}
|
||||
|
||||
public Couple<Double> getHorizontalInterval() {
|
||||
return horizontalInterval;
|
||||
}
|
||||
|
||||
public void put(int x, int z, float y) {
|
||||
heightValues.put(Couple.create(x, z), y);
|
||||
}
|
||||
|
||||
public float get(Couple<Integer> coords) {
|
||||
return heightValues.get(coords);
|
||||
}
|
||||
|
||||
public Set<Couple<Integer>> keys() {
|
||||
return heightValues.keySet();
|
||||
}
|
||||
|
||||
public void put(BlockPos p) {
|
||||
put(p.getX(), p.getZ(), p.getY());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,215 @@
|
|||
package com.simibubi.create.content.contraptions.components.actors.trackPaver;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.simibubi.create.content.logistics.trains.BezierConnection;
|
||||
import com.simibubi.create.content.logistics.trains.TrackEdge;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec2;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class TrackPaverV2 {
|
||||
|
||||
public static void pave(PaveTask task, TrackEdge edge, double from, double to) {
|
||||
if (edge.isTurn()) {
|
||||
paveCurve(task, edge.getTurn(), from, to);
|
||||
return;
|
||||
}
|
||||
|
||||
Vec3 location1 = edge.node1.getLocation()
|
||||
.getLocation();
|
||||
Vec3 location2 = edge.node2.getLocation()
|
||||
.getLocation();
|
||||
Vec3 diff = location2.subtract(location1);
|
||||
Vec3 direction = VecHelper.clampComponentWise(diff, 1);
|
||||
int extent = (int) Math.round((to - from) / direction.length());
|
||||
double length = edge.getLength();
|
||||
BlockPos pos = new BlockPos(edge.getPosition(Mth.clamp(from, 1 / 16f, length - 1 / 16f) / length)
|
||||
.subtract(0, 0.5, 0));
|
||||
|
||||
paveStraight(task, pos, direction, extent);
|
||||
}
|
||||
|
||||
public static void paveStraight(PaveTask task, BlockPos startPos, Vec3 direction, int extent) {
|
||||
Set<BlockPos> toPlaceOn = new HashSet<>();
|
||||
Vec3 start = VecHelper.getCenterOf(startPos);
|
||||
Vec3 mainNormal = direction.cross(new Vec3(0, 1, 0));
|
||||
Vec3 normalizedDirection = direction.normalize();
|
||||
|
||||
boolean isDiagonalTrack = direction.multiply(1, 0, 1)
|
||||
.length() > 1.125f;
|
||||
double r1 = task.getHorizontalInterval()
|
||||
.getFirst();
|
||||
int flip = (int) Math.signum(r1);
|
||||
double r2 = r1 + flip;
|
||||
|
||||
if (isDiagonalTrack) {
|
||||
r1 /= Mth.SQRT_OF_TWO;
|
||||
r2 /= Mth.SQRT_OF_TWO;
|
||||
}
|
||||
|
||||
int currentOffset = (int) (Math.abs(r1) * 2 + .5f);
|
||||
int nextOffset = (int) (Math.abs(r2) * 2 + .5f);
|
||||
|
||||
for (int i = 0; i < extent; i++) {
|
||||
Vec3 offset = direction.scale(i);
|
||||
Vec3 mainPos = start.add(offset.x, offset.y, offset.z);
|
||||
Vec3 targetVec = mainPos.add(mainNormal.scale(flip * (int) (currentOffset / 2.0)));
|
||||
|
||||
if (!isDiagonalTrack) {
|
||||
toPlaceOn.add(new BlockPos(targetVec));
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean placeRow = currentOffset % 2 == 0 || nextOffset % 2 == 1;
|
||||
boolean placeSides = currentOffset % 2 == 1 || nextOffset % 2 == 0;
|
||||
|
||||
if (placeSides) {
|
||||
for (int side : Iterate.positiveAndNegative) {
|
||||
Vec3 sideOffset = normalizedDirection.scale(side)
|
||||
.add(mainNormal.normalize()
|
||||
.scale(flip))
|
||||
.scale(.5);
|
||||
toPlaceOn.add(new BlockPos(targetVec.add(sideOffset)));
|
||||
}
|
||||
}
|
||||
|
||||
if (placeRow) {
|
||||
if (Math.abs(currentOffset % 2) == 1)
|
||||
targetVec = mainPos.add(mainNormal.scale(flip * (int) ((currentOffset + 1) / 2.0)));
|
||||
toPlaceOn.add(new BlockPos(targetVec));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
toPlaceOn.forEach(task::put);
|
||||
}
|
||||
|
||||
public static void paveCurve(PaveTask task, BezierConnection bc, double from, double to) {
|
||||
Map<Pair<Integer, Integer>, Double> yLevels = new HashMap<>();
|
||||
Map<Pair<Integer, Integer>, Double> tLevels = new HashMap<>();
|
||||
|
||||
BlockPos tePosition = bc.tePositions.getFirst();
|
||||
double radius = -task.getHorizontalInterval()
|
||||
.getFirst();
|
||||
double r1 = radius - .575;
|
||||
double r2 = radius + .575;
|
||||
|
||||
double handleLength = bc.getHandleLength();
|
||||
Vec3 start = bc.starts.getFirst()
|
||||
.subtract(Vec3.atLowerCornerOf(tePosition))
|
||||
.add(0, 3 / 16f, 0);
|
||||
Vec3 end = bc.starts.getSecond()
|
||||
.subtract(Vec3.atLowerCornerOf(tePosition))
|
||||
.add(0, 3 / 16f, 0);
|
||||
Vec3 startHandle = bc.axes.getFirst()
|
||||
.scale(handleLength)
|
||||
.add(start);
|
||||
Vec3 endHandle = bc.axes.getSecond()
|
||||
.scale(handleLength)
|
||||
.add(end);
|
||||
Vec3 startNormal = bc.normals.getFirst();
|
||||
Vec3 endNormal = bc.normals.getSecond();
|
||||
|
||||
int segCount = bc.getSegmentCount();
|
||||
float[] lut = bc.getStepLUT();
|
||||
double localFrom = from / bc.getLength();
|
||||
double localTo = to / bc.getLength();
|
||||
|
||||
for (int i = 0; i < segCount; i++) {
|
||||
|
||||
float t = i == segCount ? 1 : i * lut[i] / segCount;
|
||||
float t1 = (i + 1) == segCount ? 1 : (i + 1) * lut[(i + 1)] / segCount;
|
||||
|
||||
if (t1 < localFrom)
|
||||
continue;
|
||||
if (t > localTo)
|
||||
continue;
|
||||
|
||||
Vec3 vt = VecHelper.bezier(start, end, startHandle, endHandle, t);
|
||||
Vec3 vNormal = startNormal.equals(endNormal) ? startNormal : VecHelper.slerp(t, startNormal, endNormal);
|
||||
Vec3 hNormal = vNormal.cross(VecHelper.bezierDerivative(start, end, startHandle, endHandle, t)
|
||||
.normalize())
|
||||
.normalize();
|
||||
vt = vt.add(vNormal.scale(-1.175f));
|
||||
|
||||
Vec3 vt1 = VecHelper.bezier(start, end, startHandle, endHandle, t1);
|
||||
Vec3 vNormal1 = startNormal.equals(endNormal) ? startNormal : VecHelper.slerp(t1, startNormal, endNormal);
|
||||
Vec3 hNormal1 = vNormal1.cross(VecHelper.bezierDerivative(start, end, startHandle, endHandle, t1)
|
||||
.normalize())
|
||||
.normalize();
|
||||
vt1 = vt1.add(vNormal1.scale(-1.175f));
|
||||
|
||||
Vec3 a3 = vt.add(hNormal.scale(r2));
|
||||
Vec3 b3 = vt1.add(hNormal1.scale(r2));
|
||||
Vec3 c3 = vt1.add(hNormal1.scale(r1));
|
||||
Vec3 d3 = vt.add(hNormal.scale(r1));
|
||||
|
||||
Vec2 a = vec2(a3);
|
||||
Vec2 b = vec2(b3);
|
||||
Vec2 c = vec2(c3);
|
||||
Vec2 d = vec2(d3);
|
||||
|
||||
AABB aabb = new AABB(a3, b3).minmax(new AABB(c3, d3));
|
||||
|
||||
double y = vt.add(vt1).y / 2f;
|
||||
for (int scanX = Mth.floor(aabb.minX); scanX <= aabb.maxX; scanX++) {
|
||||
for (int scanZ = Mth.floor(aabb.minZ); scanZ <= aabb.maxZ; scanZ++) {
|
||||
|
||||
Vec2 p = new Vec2(scanX + .5f, scanZ + .5f);
|
||||
if (!isInTriangle(a, b, c, p) && !isInTriangle(a, c, d, p))
|
||||
continue;
|
||||
|
||||
Pair<Integer, Integer> key = Pair.of(scanX, scanZ);
|
||||
if (!yLevels.containsKey(key) || yLevels.get(key) > y) {
|
||||
yLevels.put(key, y);
|
||||
tLevels.put(key, (t + t1) / 2d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
for (Entry<Pair<Integer, Integer>, Double> entry : yLevels.entrySet()) {
|
||||
double yValue = entry.getValue();
|
||||
int floor = Mth.floor(yValue);
|
||||
BlockPos targetPos = new BlockPos(entry.getKey()
|
||||
.getFirst(), floor,
|
||||
entry.getKey()
|
||||
.getSecond()).offset(tePosition);
|
||||
task.put(targetPos.getX(), targetPos.getZ(), targetPos.getY() + (yValue - floor >= .5 ? .5f : 0));
|
||||
}
|
||||
}
|
||||
|
||||
private static Vec2 vec2(Vec3 vec3) {
|
||||
return new Vec2((float) vec3.x, (float) vec3.z);
|
||||
}
|
||||
|
||||
private static boolean isInTriangle(Vec2 a, Vec2 b, Vec2 c, Vec2 p) {
|
||||
float pcx = p.x - c.x;
|
||||
float pcy = p.y - c.y;
|
||||
float cbx = c.x - b.x;
|
||||
float bcy = b.y - c.y;
|
||||
float d = bcy * (a.x - c.x) + cbx * (a.y - c.y);
|
||||
float s = bcy * pcx + cbx * pcy;
|
||||
float t = (c.y - a.y) * pcx + (a.x - c.x) * pcy;
|
||||
return d < 0 ? s <= 0 && t <= 0 && s + t >= d : s >= 0 && t >= 0 && s + t <= d;
|
||||
}
|
||||
|
||||
public static double lineToPointDiff2d(Vec3 l1, Vec3 l2, Vec3 p) {
|
||||
return Math.abs((l2.x - l1.x) * (l1.z - p.z) - (l1.x - p.x) * (l2.z - l1.z));
|
||||
}
|
||||
|
||||
}
|
|
@ -8,7 +8,6 @@ import com.simibubi.create.AllTags.AllBlockTags;
|
|||
import com.simibubi.create.api.connectivity.ConnectivityHandler;
|
||||
import com.simibubi.create.content.contraptions.components.actors.AttachedActorBlock;
|
||||
import com.simibubi.create.content.contraptions.components.actors.HarvesterBlock;
|
||||
import com.simibubi.create.content.contraptions.components.actors.PloughBlock;
|
||||
import com.simibubi.create.content.contraptions.components.actors.PortableStorageInterfaceBlock;
|
||||
import com.simibubi.create.content.contraptions.components.crank.HandCrankBlock;
|
||||
import com.simibubi.create.content.contraptions.components.fan.NozzleBlock;
|
||||
|
@ -353,10 +352,6 @@ public class BlockMovementChecks {
|
|||
return state.getValue(BlockStateProperties.FACING) == facing;
|
||||
if (AllBlocks.MECHANICAL_BEARING.has(state))
|
||||
return state.getValue(BlockStateProperties.FACING) == facing;
|
||||
if (AllBlocks.MECHANICAL_HARVESTER.has(state))
|
||||
return state.getValue(HarvesterBlock.FACING) == facing;
|
||||
if (AllBlocks.MECHANICAL_PLOUGH.has(state))
|
||||
return state.getValue(PloughBlock.FACING) == facing;
|
||||
|
||||
if (AllBlocks.CART_ASSEMBLER.has(state))
|
||||
return Direction.DOWN == facing;
|
||||
|
@ -364,7 +359,7 @@ public class BlockMovementChecks {
|
|||
return state.getValue(BlockStateProperties.FACING) == facing;
|
||||
if (AllBlocks.PORTABLE_STORAGE_INTERFACE.has(state))
|
||||
return state.getValue(PortableStorageInterfaceBlock.FACING) == facing;
|
||||
if (state.getBlock() instanceof AttachedActorBlock)
|
||||
if (state.getBlock() instanceof AttachedActorBlock && !AllBlocks.MECHANICAL_ROLLER.has(state))
|
||||
return state.getValue(BlockStateProperties.HORIZONTAL_FACING) == facing;
|
||||
if (AllBlocks.ROPE_PULLEY.has(state))
|
||||
return facing == Direction.DOWN;
|
||||
|
|
|
@ -39,10 +39,11 @@ public class SmartFluidPipeBlockEntity extends SmartBlockEntity {
|
|||
registerAwardables(behaviours, FluidPropagator.getSharedTriggers());
|
||||
}
|
||||
|
||||
private void onFilterChanged(ItemStack newFilter) {
|
||||
private boolean onFilterChanged(ItemStack newFilter) {
|
||||
if (level.isClientSide)
|
||||
return;
|
||||
return true;
|
||||
FluidPropagator.propagateChangedPipe(level, worldPosition, getBlockState());
|
||||
return true;
|
||||
}
|
||||
|
||||
class SmartPipeBehaviour extends StraightPipeFluidTransportBehaviour {
|
||||
|
|
|
@ -195,7 +195,10 @@ public class StockpileSwitchBlockEntity extends SmartBlockEntity {
|
|||
@Override
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
filtering = new FilteringBehaviour(this, new FilteredDetectorFilterSlot()).moveText(new Vec3(0, 5, 0))
|
||||
.withCallback($ -> updateCurrentLevel());
|
||||
.withCallback($ -> {
|
||||
updateCurrentLevel();
|
||||
return true;
|
||||
});
|
||||
behaviours.add(filtering);
|
||||
|
||||
InterfaceProvider towardBlockFacing = InterfaceProvider.towardBlockFacing();
|
||||
|
|
|
@ -358,7 +358,7 @@ public class TravellingPoint {
|
|||
return traveled;
|
||||
}
|
||||
|
||||
private Double edgeTraversedFrom(TrackGraph graph, boolean forward, IEdgePointListener edgePointListener,
|
||||
protected Double edgeTraversedFrom(TrackGraph graph, boolean forward, IEdgePointListener edgePointListener,
|
||||
ITurnListener turnListener, double prevPos, double totalDistance) {
|
||||
if (edge.isTurn())
|
||||
turnListener.accept(Math.max(0, totalDistance), edge);
|
||||
|
|
|
@ -39,12 +39,13 @@ public class TrackObserverBlockEntity extends SmartBlockEntity implements ITrans
|
|||
behaviours.add(filtering = createFilter().withCallback(this::onFilterChanged));
|
||||
}
|
||||
|
||||
private void onFilterChanged(ItemStack newFilter) {
|
||||
private boolean onFilterChanged(ItemStack newFilter) {
|
||||
if (level.isClientSide())
|
||||
return;
|
||||
return true;
|
||||
TrackObserver observer = getObserver();
|
||||
if (observer != null)
|
||||
observer.setFilterAndNotify(level, newFilter);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.simibubi.create.foundation.blockEntity.behaviour.filtering;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import com.simibubi.create.content.logistics.item.filter.FilterItem;
|
||||
|
@ -33,7 +33,7 @@ public class FilteringBehaviour extends BlockEntityBehaviour {
|
|||
|
||||
private ItemStack filter;
|
||||
public int count;
|
||||
private Consumer<ItemStack> callback;
|
||||
private Predicate<ItemStack> callback;
|
||||
private Supplier<Boolean> isActive;
|
||||
private Supplier<Boolean> showCountPredicate;
|
||||
|
||||
|
@ -48,8 +48,7 @@ public class FilteringBehaviour extends BlockEntityBehaviour {
|
|||
filter = ItemStack.EMPTY;
|
||||
slotPositioning = slot;
|
||||
showCount = false;
|
||||
callback = stack -> {
|
||||
};
|
||||
callback = stack -> true;
|
||||
isActive = () -> true;
|
||||
textShift = Vec3.ZERO;
|
||||
count = 0;
|
||||
|
@ -102,7 +101,7 @@ public class FilteringBehaviour extends BlockEntityBehaviour {
|
|||
ticksUntilScrollPacket = -1;
|
||||
}
|
||||
|
||||
public FilteringBehaviour withCallback(Consumer<ItemStack> filterCallback) {
|
||||
public FilteringBehaviour withCallback(Predicate<ItemStack> filterCallback) {
|
||||
callback = filterCallback;
|
||||
return this;
|
||||
}
|
||||
|
@ -143,20 +142,23 @@ public class FilteringBehaviour extends BlockEntityBehaviour {
|
|||
scrollableValue = count;
|
||||
}
|
||||
|
||||
public void setFilter(Direction face, ItemStack stack) {
|
||||
setFilter(stack);
|
||||
public boolean setFilter(Direction face, ItemStack stack) {
|
||||
return setFilter(stack);
|
||||
}
|
||||
|
||||
public void setFilter(ItemStack stack) {
|
||||
public boolean setFilter(ItemStack stack) {
|
||||
boolean confirm = ItemHandlerHelper.canItemStacksStack(stack, filter);
|
||||
filter = stack.copy();
|
||||
callback.accept(filter);
|
||||
ItemStack toApply = stack.copy();
|
||||
if (!callback.test(toApply))
|
||||
return false;
|
||||
filter = toApply;
|
||||
count = !confirm ? 0
|
||||
: (filter.getItem() instanceof FilterItem) ? 0 : Math.min(stack.getCount(), stack.getMaxStackSize());
|
||||
forceClientState = true;
|
||||
|
||||
blockEntity.setChanged();
|
||||
blockEntity.sendData();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -81,11 +81,14 @@ public class FilteringHandler {
|
|||
.shrink(1);
|
||||
if (behaviour.getFilter()
|
||||
.getItem() instanceof FilterItem)
|
||||
player.getInventory().placeItemBackInInventory(behaviour.getFilter());
|
||||
player.getInventory()
|
||||
.placeItemBackInInventory(behaviour.getFilter());
|
||||
}
|
||||
if (toApply.getItem() instanceof FilterItem)
|
||||
toApply.setCount(1);
|
||||
behaviour.setFilter(toApply);
|
||||
if (!behaviour.setFilter(toApply))
|
||||
player.displayClientMessage(Lang.translateDirect("logistics.filter.invalid_item")
|
||||
.withStyle(ChatFormatting.WHITE), true);
|
||||
|
||||
} else {
|
||||
ItemStack filter = behaviour.getFilter();
|
||||
|
|
|
@ -91,11 +91,12 @@ public class SidedFilteringBehaviour extends FilteringBehaviour {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setFilter(Direction side, ItemStack stack) {
|
||||
public boolean setFilter(Direction side, ItemStack stack) {
|
||||
if (!sidedFilters.containsKey(side))
|
||||
return;
|
||||
return true;
|
||||
sidedFilters.get(side)
|
||||
.setFilter(stack);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -37,6 +37,7 @@ public class CKinetics extends ConfigBase {
|
|||
public final ConfigInt maxPistonPoles = i(64, 1, "maxPistonPoles", Comments.maxPistonPoles);
|
||||
public final ConfigInt maxRopeLength = i(256, 1, "maxRopeLength", Comments.maxRopeLength);
|
||||
public final ConfigInt maxCartCouplingLength = i(32, 1, "maxCartCouplingLength", Comments.maxCartCouplingLength);
|
||||
public final ConfigInt rollerFillDepth = i(12, 1, "rollerFillDepth", Comments.rollerFillDepth);
|
||||
public final ConfigBool survivalContraptionPickup = b(true, "survivalContraptionPickup", Comments.survivalContraptionPickup);
|
||||
public final ConfigEnum<ContraptionMovementSetting> spawnerMovement =
|
||||
e(ContraptionMovementSetting.NO_PICKUP, "movableSpawners", Comments.spawnerMovement);
|
||||
|
@ -85,6 +86,7 @@ public class CKinetics extends ConfigBase {
|
|||
static String maxPistonPoles = "Maximum amount of extension poles behind a Mechanical Piston.";
|
||||
static String maxRopeLength = "Max length of rope available off a Rope Pulley.";
|
||||
static String maxCartCouplingLength = "Maximum allowed distance of two coupled minecarts.";
|
||||
static String rollerFillDepth = "Maximum depth of blocks filled in using a Mechanical Roller.";
|
||||
static String moveItemsToStorage =
|
||||
"Whether items mined or harvested by contraptions should be placed in their mounted storage.";
|
||||
static String harvestPartiallyGrown = "Whether harvesters should break crops that aren't fully grown.";
|
||||
|
|
|
@ -812,6 +812,14 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
|||
.pattern("AAA")
|
||||
.pattern(" C ")),
|
||||
|
||||
MECHANICAL_ROLLER = create(AllBlocks.MECHANICAL_ROLLER).unlockedBy(I::andesiteCasing)
|
||||
.viaShaped(b -> b.define('C', I.andesiteCasing())
|
||||
.define('A', I.electronTube())
|
||||
.define('I', AllBlocks.CRUSHING_WHEEL.get())
|
||||
.pattern("A")
|
||||
.pattern("C")
|
||||
.pattern("I")),
|
||||
|
||||
MECHANICAL_DRILL = create(AllBlocks.MECHANICAL_DRILL).unlockedBy(I::andesiteCasing)
|
||||
.viaShaped(b -> b.define('C', I.andesiteCasing())
|
||||
.define('A', I.andesite())
|
||||
|
|
|
@ -105,6 +105,10 @@ public class AllIcons implements ScreenElement {
|
|||
I_ADD_INVERTED_ATTRIBUTE = next(),
|
||||
I_FLIP = next(),
|
||||
|
||||
I_ROLLER_PAVE = next(),
|
||||
I_ROLLER_FILL = next(),
|
||||
I_ROLLER_WIDE_FILL = next(),
|
||||
|
||||
I_PLAY = newRow(),
|
||||
I_PAUSE = next(),
|
||||
I_STOP = next(),
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
"death.attack.create.fan_lava.player": "%1$s was thrown into a smelter by %2$s",
|
||||
"death.attack.create.mechanical_drill": "%1$s was impaled by a Mechanical Drill",
|
||||
"death.attack.create.mechanical_drill.player": "%1$s was thrown in front of a Drill by %2$s",
|
||||
"death.attack.create.mechanical_roller": "%1$s was flattened by a Mechanical Roller",
|
||||
"death.attack.create.mechanical_roller.player": "%1$s was thrown in front of a Mechanical Roller by %2$s",
|
||||
"death.attack.create.mechanical_saw": "%1$s got cut in half by a Mechanical Saw",
|
||||
"death.attack.create.mechanical_saw.player": "%1$s was thrown into a Saw by %2$s",
|
||||
"death.attack.create.potato_cannon": "%1$s was shot by %2$s's Potato Cannon",
|
||||
|
@ -189,6 +191,10 @@
|
|||
"create.contraptions.cart_movement_mode.rotate": "Always face toward motion",
|
||||
"create.contraptions.cart_movement_mode.rotate_paused": "Pause actors while rotating",
|
||||
"create.contraptions.cart_movement_mode.rotation_locked": "Lock rotation",
|
||||
"create.contraptions.roller_mode": "Roller Mode",
|
||||
"create.contraptions.roller_mode.tunnel_pave": "Clear Blocks and Pave",
|
||||
"create.contraptions.roller_mode.straight_fill": "Straight Fill Below",
|
||||
"create.contraptions.roller_mode.wide_fill": "Sloped Fill Below",
|
||||
|
||||
"create.contraptions.windmill.rotation_direction": "Rotation Direction",
|
||||
"create.contraptions.clockwork.clock_hands": "Clock Hands",
|
||||
|
@ -205,6 +211,7 @@
|
|||
"create.logistics.filter.apply": "Applied filter to %1$s.",
|
||||
"create.logistics.filter.apply_click_again": "Applied filter to %1$s, click again to copy the amount.",
|
||||
"create.logistics.filter.apply_count": "Applied extraction count to filter.",
|
||||
"create.logistics.filter.invalid_item": "Cannot use this item here.",
|
||||
|
||||
"create.gui.goggles.generator_stats": "Generator Stats:",
|
||||
"create.gui.goggles.kinetic_stats": "Kinetic Stats:",
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"ambientocclusion": false,
|
||||
"textures": {
|
||||
"6": "create:block/mechanical_roller",
|
||||
"7": "create:block/sticker_side",
|
||||
"particle": "create:block/palettes/stone_types/polished/andesite_cut_polished"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0, 6, 6],
|
||||
"to": [16, 16, 16],
|
||||
"rotation": {"angle": 0, "axis": "x", "origin": [16, 0, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 11, 8, 16], "texture": "#6"},
|
||||
"east": {"uv": [0, 11, 5, 16], "texture": "#6"},
|
||||
"south": {"uv": [0, 11, 8, 16], "texture": "#6"},
|
||||
"west": {"uv": [0, 11, 5, 16], "texture": "#6"},
|
||||
"up": {"uv": [8, 11, 16, 16], "rotation": 180, "texture": "#6"},
|
||||
"down": {"uv": [8, 11, 16, 16], "rotation": 180, "texture": "#6"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [1, -2, 0],
|
||||
"to": [15, 6, 16],
|
||||
"rotation": {"angle": 0, "axis": "x", "origin": [16, 0, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 9, 15, 1], "texture": "#7"},
|
||||
"east": {"uv": [0, 11, 16, 3], "texture": "#7"},
|
||||
"south": {"uv": [1, 11, 15, 3], "texture": "#7"},
|
||||
"west": {"uv": [0, 11, 16, 3], "texture": "#7"},
|
||||
"up": {"uv": [1, 0, 15, 16], "rotation": 180, "texture": "#particle"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [8.5, 2.25, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [8.5, 2.25, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 225, 0],
|
||||
"translation": [-1.5, 3.5, 0],
|
||||
"scale": [0.45, 0.45, 0.45]
|
||||
},
|
||||
"fixed": {
|
||||
"translation": [0, 4.75, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "roller",
|
||||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [0, 1]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"ambientocclusion": false,
|
||||
"textures": {
|
||||
"6": "create:block/mechanical_roller",
|
||||
"particle": "create:block/palettes/stone_types/polished/andesite_cut_polished"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [-0.95, -8.05, -1.1],
|
||||
"to": [16.95, 0.05, 25.1],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 4, 9, 8], "texture": "#6"},
|
||||
"east": {"uv": [0, 0, 13, 4], "texture": "#6"},
|
||||
"south": {"uv": [0, 4, 9, 8], "texture": "#6"},
|
||||
"west": {"uv": [0, 0, 13, 4], "texture": "#6"},
|
||||
"up": {"uv": [0, 0, 13, 4], "rotation": 270, "texture": "#6"},
|
||||
"down": {"uv": [0, 0, 13, 4], "rotation": 270, "texture": "#6"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [8.5, 2.25, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [8.5, 2.25, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 225, 0],
|
||||
"translation": [-1.5, 3.5, 0],
|
||||
"scale": [0.45, 0.45, 0.45]
|
||||
},
|
||||
"fixed": {
|
||||
"translation": [0, 4.75, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "roller",
|
||||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [0]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"ambientocclusion": false,
|
||||
"textures": {
|
||||
"5": "create:block/crushing_wheel",
|
||||
"6": "create:block/mechanical_roller",
|
||||
"particle": "create:block/palettes/stone_types/polished/andesite_cut_polished"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0, -4, 11],
|
||||
"to": [16, 6, 21],
|
||||
"rotation": {"angle": 0, "axis": "x", "origin": [16, 0, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 11, 8, 16], "texture": "#6"},
|
||||
"east": {"uv": [0, 11, 5, 16], "texture": "#6"},
|
||||
"south": {"uv": [0, 11, 8, 16], "texture": "#6"},
|
||||
"west": {"uv": [0, 11, 5, 16], "texture": "#6"},
|
||||
"up": {"uv": [8, 11, 16, 16], "rotation": 180, "texture": "#6"},
|
||||
"down": {"uv": [8, 11, 16, 16], "rotation": 180, "texture": "#6"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-1, -8, -9.1],
|
||||
"to": [17, 0, 17.1],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [16, 0, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 4, 9, 8], "texture": "#6"},
|
||||
"east": {"uv": [0, 0, 13, 4], "texture": "#6"},
|
||||
"south": {"uv": [0, 4, 9, 8], "texture": "#6"},
|
||||
"west": {"uv": [0, 0, 13, 4], "texture": "#6"},
|
||||
"up": {"uv": [0, 0, 13, 4], "rotation": 90, "texture": "#6"},
|
||||
"down": {"uv": [0, 0, 13, 4], "rotation": 90, "texture": "#6"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.15, -16, -5],
|
||||
"to": [15.85, 8, 5],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 16, 16], "texture": "#particle"},
|
||||
"east": {"uv": [15, 16, 16, 6], "rotation": 270, "texture": "#particle"},
|
||||
"south": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"west": {"uv": [15, 16, 16, 6], "rotation": 270, "texture": "#particle"},
|
||||
"up": {"uv": [0, 6, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"down": {"uv": [0, 6, 16, 16], "rotation": 180, "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.1, -9, -12],
|
||||
"to": [15.9, 1, 12],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, -4, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 6, 16, 16], "texture": "#particle"},
|
||||
"east": {"uv": [16, 16, 15, 6], "rotation": 180, "texture": "#particle"},
|
||||
"south": {"uv": [0, 6, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"west": {"uv": [16, 16, 15, 6], "rotation": 180, "texture": "#particle"},
|
||||
"up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"down": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.15, -9, -12],
|
||||
"to": [15.85, 1, 12],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 6, 16, 16], "texture": "#particle"},
|
||||
"east": {"uv": [16, 16, 15, 6], "rotation": 180, "texture": "#particle"},
|
||||
"south": {"uv": [0, 6, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"west": {"uv": [16, 16, 15, 6], "rotation": 180, "texture": "#particle"},
|
||||
"up": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"down": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.1, -16, -5],
|
||||
"to": [15.9, 8, 5],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, -4, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 16, 16], "texture": "#particle"},
|
||||
"east": {"uv": [15, 6, 16, 16], "rotation": 270, "texture": "#particle"},
|
||||
"south": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"west": {"uv": [15, 6, 16, 16], "rotation": 270, "texture": "#particle"},
|
||||
"up": {"uv": [0, 6, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"down": {"uv": [0, 6, 16, 16], "rotation": 180, "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.05, -15, -11],
|
||||
"to": [15.95, 7, 11],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 0]},
|
||||
"faces": {
|
||||
"east": {"uv": [2, 2, 14, 14], "texture": "#5"},
|
||||
"west": {"uv": [2, 2, 14, 14], "texture": "#5"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [8.5, 2.25, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [8.5, 2.25, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 225, 0],
|
||||
"translation": [-1.25, 4.75, 0],
|
||||
"scale": [0.45, 0.45, 0.45]
|
||||
},
|
||||
"head": {
|
||||
"translation": [0, 11, -5.75]
|
||||
},
|
||||
"fixed": {
|
||||
"translation": [0, 4.75, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "roller",
|
||||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3, 4, 5, 6]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,114 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"ambientocclusion": false,
|
||||
"textures": {
|
||||
"5": "create:block/crushing_wheel",
|
||||
"particle": "create:block/palettes/stone_types/polished/andesite_cut_polished"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0.15, -16, 11],
|
||||
"to": [15.85, 8, 21],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, -4, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"east": {"uv": [15, 16, 16, 6], "rotation": 270, "texture": "#particle"},
|
||||
"south": {"uv": [0, 0, 16, 16], "texture": "#particle"},
|
||||
"west": {"uv": [15, 16, 16, 6], "rotation": 270, "texture": "#particle"},
|
||||
"up": {"uv": [0, 6, 16, 16], "texture": "#particle"},
|
||||
"down": {"uv": [0, 6, 16, 16], "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.1, -9, 4],
|
||||
"to": [15.9, 1, 28],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 6, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"east": {"uv": [16, 16, 15, 6], "rotation": 180, "texture": "#particle"},
|
||||
"south": {"uv": [0, 6, 16, 16], "texture": "#particle"},
|
||||
"west": {"uv": [16, 16, 15, 6], "rotation": 180, "texture": "#particle"},
|
||||
"up": {"uv": [0, 0, 16, 16], "texture": "#particle"},
|
||||
"down": {"uv": [0, 0, 16, 16], "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.15, -9, 4],
|
||||
"to": [15.85, 1, 28],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, -4, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 6, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"east": {"uv": [16, 16, 15, 6], "rotation": 180, "texture": "#particle"},
|
||||
"south": {"uv": [0, 6, 16, 16], "texture": "#particle"},
|
||||
"west": {"uv": [16, 16, 15, 6], "rotation": 180, "texture": "#particle"},
|
||||
"up": {"uv": [0, 0, 16, 16], "texture": "#particle"},
|
||||
"down": {"uv": [0, 0, 16, 16], "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.1, -16, 11],
|
||||
"to": [15.9, 8, 21],
|
||||
"rotation": {"angle": -22.5, "axis": "x", "origin": [8, -4, 16]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 16, 16], "rotation": 180, "texture": "#particle"},
|
||||
"east": {"uv": [15, 6, 16, 16], "rotation": 270, "texture": "#particle"},
|
||||
"south": {"uv": [0, 0, 16, 16], "texture": "#particle"},
|
||||
"west": {"uv": [15, 6, 16, 16], "rotation": 270, "texture": "#particle"},
|
||||
"up": {"uv": [0, 6, 16, 16], "texture": "#particle"},
|
||||
"down": {"uv": [0, 6, 16, 16], "texture": "#particle"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [0.05, -15, 5],
|
||||
"to": [15.95, 7, 27],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, -4, 16]},
|
||||
"faces": {
|
||||
"east": {"uv": [2, 2, 14, 14], "texture": "#5"},
|
||||
"west": {"uv": [2, 2, 14, 14], "texture": "#5"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [8.5, 2.25, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [8.5, 2.25, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, 225, 0],
|
||||
"translation": [-1.5, 3.5, 0],
|
||||
"scale": [0.45, 0.45, 0.45]
|
||||
},
|
||||
"fixed": {
|
||||
"translation": [0, 4.75, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "roller",
|
||||
"origin": [8, 8, 8],
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3, 4]
|
||||
}
|
||||
]
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 616 B |
Binary file not shown.
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 3.6 KiB |
Loading…
Reference in a new issue