What are wheels?

- Added the Large Water Wheel
- Water wheel fins are no longer directional
- Water wheels now only have two speed levels
- Liquid can no longer spread perpendicularly on top of water wheels (experimental)
- New crushing wheel model
This commit is contained in:
simibubi 2023-02-24 00:36:35 +01:00
parent 0ad875bb74
commit 70964165d5
64 changed files with 13431 additions and 492 deletions

View file

@ -77,7 +77,7 @@ f0031f5e970b3d5695472ed384950b8631b015ed assets/create/blockstates/creative_moto
f7c283460879e70ed0fa112a24caa06a7122358f assets/create/blockstates/crimsite_pillar.json
24ee16e3dadb3e0221afce7af37643494f471fb0 assets/create/blockstates/crimson_window.json
3e6cd0945390b390b963474f7cf708e2dcba631c assets/create/blockstates/crimson_window_pane.json
fe2f78b94c20944399101e7369e2d43324297fb6 assets/create/blockstates/crushing_wheel.json
644cc650c49602e654e85b3b05073748c6cd42e5 assets/create/blockstates/crushing_wheel.json
a1dd6cb3daa97ea871290ef7b178d28b564ee2a2 assets/create/blockstates/crushing_wheel_controller.json
b1126c191877cff86b4e2de83e1fcbd151451cb7 assets/create/blockstates/cuckoo_clock.json
7b4147b215d676a528ee8782a4528d42dac02198 assets/create/blockstates/cut_andesite.json
@ -256,6 +256,7 @@ be3bef7e091d8b50bfc1c6b7275946d1f636aefd assets/create/blockstates/horizontal_fr
b15bea757ef981e0ca60f740ca234ee2014eb7b7 assets/create/blockstates/jungle_window_pane.json
a922b31bc4a91f5825b643ba5fa2c9a836d612cd assets/create/blockstates/large_bogey.json
f651091db216b009b3379b2f48d56d03481c8675 assets/create/blockstates/large_cogwheel.json
9554c8d14271a2b85df7eadeceaa8b31849415e4 assets/create/blockstates/large_water_wheel.json
a38184e035c2ebca7471e1714494fea213af259e assets/create/blockstates/layered_andesite.json
2409f04042380a8ad086f9c4f98032e85771c3f3 assets/create/blockstates/layered_asurine.json
ca1648840d9f5786f85e4214a0951306c1247c73 assets/create/blockstates/layered_calcite.json
@ -525,6 +526,7 @@ c4db76b9d36cfb098df0d158cb6f8b82768ebe14 assets/create/blockstates/vertical_fram
3a5da54d9763e9512cfaa47b25226b79738b25f3 assets/create/blockstates/warped_window.json
19ef7a16c82f07d304fb60d121845185d189aecf assets/create/blockstates/warped_window_pane.json
d31fce8315c8715521d66b5dcc166c84e949dd1d assets/create/blockstates/water_wheel.json
f4d185b9eb086e5024a9818bad57d524267d6e13 assets/create/blockstates/water_wheel_structure.json
97a8f4cf45776b1fb5249fe1a9314b5c615fb130 assets/create/blockstates/waxed_copper_shingle_slab.json
d31a8ad9ffa09cbabfb284d44c9c44d036072083 assets/create/blockstates/waxed_copper_shingle_stairs.json
e7be350dd2fd80357c56a0fbad3e000818b822c9 assets/create/blockstates/waxed_copper_shingles.json
@ -570,24 +572,24 @@ 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
6f48c5bb5b0a00ed692330c78e46366c92023cf2 assets/create/lang/en_ud.json
a443edd357467dacda00c40358a3933c633078f2 assets/create/lang/en_us.json
245e6a527f4e866df5763a589d63f19183ba59f4 assets/create/lang/unfinished/de_de.json
d8e0bfab611fe154641e2a8a34f4c9d682d86fd4 assets/create/lang/unfinished/es_cl.json
bf3c212b924f822ae6b6606b4d1182ae1e50d38c assets/create/lang/unfinished/es_es.json
a667b67cd82970545f5738d7e5f196630779350a assets/create/lang/unfinished/fr_fr.json
ee2306a105bb9e78d3a18769f4538a81d57f34a4 assets/create/lang/unfinished/it_it.json
b2afee31be5c95277dd11fc11237c6786d4f4621 assets/create/lang/unfinished/ja_jp.json
18f0b32499050a5f538d0e9aaac09287c9babb26 assets/create/lang/unfinished/ko_kr.json
b5921f0aeaf4554809c4e3c90c4fca4205132437 assets/create/lang/unfinished/nl_nl.json
8e2edbbf4a6597ca5f6da51ec8a8c719c46e4ba8 assets/create/lang/unfinished/pl_pl.json
3f5d2c7b80b865327c3e20621a1d418d07c63075 assets/create/lang/unfinished/pt_br.json
cabcafe00fe908f86da28ae83ddd8f6d45a81337 assets/create/lang/unfinished/pt_pt.json
d334a2745c94642644719c98f36bd0947b5ff28d assets/create/lang/unfinished/ro_ro.json
095cde1dcaf51ca9d951779d8a267c570b54076b assets/create/lang/unfinished/ru_ru.json
4726ad8297dd08781ba2bf477dff5c3361f91bb3 assets/create/lang/unfinished/uk_ua.json
c45fa0de470ef40a2eaa99057fa01d124a89e903 assets/create/lang/unfinished/zh_cn.json
cd4b05e87dd85cf9d6e270770c7ce069e01156c5 assets/create/lang/unfinished/zh_tw.json
f7ccfdfb562774ed479b0eb4428b01c9370a0e82 assets/create/lang/en_ud.json
a687bb0e852475b0767811d1ed312cea575c8d67 assets/create/lang/en_us.json
24ac91b8858450b43759a28f4e723770ff830f3e assets/create/lang/unfinished/de_de.json
03d654aa6010284357870c7182b09b0f3c002a36 assets/create/lang/unfinished/es_cl.json
5cc92870004fc51c4161e18fe47584c3ed007d95 assets/create/lang/unfinished/es_es.json
777b19874e306ff7cf15680daa09cb96f6932bac assets/create/lang/unfinished/fr_fr.json
6195558d5fab2313cbecdf6700cac56ba6cc01bc assets/create/lang/unfinished/it_it.json
ec44c15168f39ddef731a63c381334648d2c43ec assets/create/lang/unfinished/ja_jp.json
a748f9aa8e1a2e46a767534d108f45106d9ba1cd assets/create/lang/unfinished/ko_kr.json
f2b869014a5a09bb6afde268bca429d30678b513 assets/create/lang/unfinished/nl_nl.json
06ab4f23425ecdabd0f6d448cd4f3cce9c4b6340 assets/create/lang/unfinished/pl_pl.json
8e3c503979b094574aa63bfed38c49d8a89a38a2 assets/create/lang/unfinished/pt_br.json
1d0aaae3e650b5c0b5331b12fb65c0b9287510b3 assets/create/lang/unfinished/pt_pt.json
f9446a1fe1546c679553b6ae06afc52b77c1d249 assets/create/lang/unfinished/ro_ro.json
140a5ac56c031fe47aaedb1c3ee1e7d8ff363240 assets/create/lang/unfinished/ru_ru.json
3bc54c7c305a6f33e9c1eb84bfd7d4282c6e635d assets/create/lang/unfinished/uk_ua.json
7096c87595fa806088e0602cb165cc6c68336c96 assets/create/lang/unfinished/zh_cn.json
994886a932bc8cc19c8203273e2b0d5852c86fd5 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
@ -1742,7 +1744,7 @@ cecee6daf2619dcf035c7aea5fff1bd892f6ff06 assets/create/models/item/crushed_silve
a8d3f330d312f82b0de59940581910090b2bd012 assets/create/models/item/crushed_tin_ore.json
b359064405d189e2802969715cd5f682ddbf0bb1 assets/create/models/item/crushed_uranium_ore.json
2bb791db62dce6bf2e2227f9b607c131828471fd assets/create/models/item/crushed_zinc_ore.json
823c91f63565db54ec3944a1e90e7aee18e41062 assets/create/models/item/crushing_wheel.json
f9a158bd5bbbf60310e8f3d4f10911e8baf03579 assets/create/models/item/crushing_wheel.json
dae5cffa4e1263d6a113469f79fba8695fa8232a assets/create/models/item/cuckoo_clock.json
120cb6f4fc6b28d86117dbe059b990c1303c46ee assets/create/models/item/cut_andesite.json
9c94151d18e0201e1e1967713f2ab86ebc9c647b assets/create/models/item/cut_andesite_brick_slab.json
@ -1924,6 +1926,7 @@ d4883a5c777abb6c5235563eadb70e2b1b3de17b assets/create/models/item/incomplete_tr
83fa8699318e51f838b483b40b3e897c34ed53d1 assets/create/models/item/jungle_window.json
766323f6026c3505a75db2dee2996d342370d9c2 assets/create/models/item/jungle_window_pane.json
bcaaf60d9a853cce90169dabcb36d29a3ce19e18 assets/create/models/item/large_cogwheel.json
7418fb83e9b4ad6cab8e0a28aff7f615fbfb20b4 assets/create/models/item/large_water_wheel.json
281e2b055c6eb6994ca306c8957fc80a98fb5473 assets/create/models/item/layered_andesite.json
ad814f2eef3415c44e1df73a84011fbe801a0de3 assets/create/models/item/layered_asurine.json
d188923db1e37aeac3b24ee2e6f0a4a13a794da9 assets/create/models/item/layered_calcite.json
@ -2450,6 +2453,7 @@ a9f2c8a0b0b322741575ef833a461006ef2f0421 data/create/advancements/recipes/create
2ccfaf572456e8642a0070ea6928a082f98c63af data/create/advancements/recipes/create.base/crafting/kinetics/item_vault.json
73433a5cd400ed392796a4e543f15c42dd499fe8 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json
1c9e9888ccc51ddf76b9df0c186e74efaefb1256 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheelfrom_little.json
5a1df5831fe5d2e2a6cbedcbc67216dd566e7fa0 data/create/advancements/recipes/create.base/crafting/kinetics/large_water_wheel.json
eb007bb079bbe6b6aaad2ca90f5af84261e3f8ea data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat.json
571da50fbf5f2fcd3363b3dab91e7233e0ebffa0 data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_seat_from_other_seat.json
ddd80e84a7d595bbb3cf405a902ebbfd4ea5263c data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_valve_handle_from_other_valve_handle.json
@ -3666,6 +3670,7 @@ db23fee08abdb61fe2f200a5016e41523159feef data/create/loot_tables/blocks/jungle_w
67f7d9162d3b86e198ab7faa1ddcfdfce605d10c data/create/loot_tables/blocks/jungle_window_pane.json
7ed68e33a8c488242a2d9039797498068797c5a6 data/create/loot_tables/blocks/large_bogey.json
a70fcfe474ba023adc9c326218c5664fbd7b58f8 data/create/loot_tables/blocks/large_cogwheel.json
9edccdfed011fdbac3a8911684b73fd029df87b4 data/create/loot_tables/blocks/large_water_wheel.json
81013913c3cc88e2390608420a2911d57414bd2c data/create/loot_tables/blocks/layered_andesite.json
a89d357d3b8d7633bffe12a4197ab19cba891005 data/create/loot_tables/blocks/layered_asurine.json
93950e03d141e59948c4aadca09ecd8b898a5276 data/create/loot_tables/blocks/layered_calcite.json
@ -3935,6 +3940,7 @@ f74bc454bda585bc5ab0b5b3e0b4d345a6ff039b data/create/loot_tables/blocks/train_tr
183444f27542a3a7ab933243b61c2714357f7361 data/create/loot_tables/blocks/warped_window.json
2fa711af9d00bd47f256fe6b0cc83a303644b1c0 data/create/loot_tables/blocks/warped_window_pane.json
e6c1f19127a3fcf010ed6fb004a40a69458c54e3 data/create/loot_tables/blocks/water_wheel.json
5c1df8443043b3fe3b665dba348e2ff188bcbe31 data/create/loot_tables/blocks/water_wheel_structure.json
815cddd9fb217a69b3a0ac4554d830c04d0ef173 data/create/loot_tables/blocks/waxed_copper_shingle_slab.json
b28ea9be9de982b6561839c61f4a7264c8ba4171 data/create/loot_tables/blocks/waxed_copper_shingle_stairs.json
b26f12b81e4f801cc107b5c6316ad9006c5ea391 data/create/loot_tables/blocks/waxed_copper_shingles.json
@ -4130,6 +4136,7 @@ f4fbb11ef55f3431bd387f3f6f258513bfbc8011 data/create/recipes/crafting/kinetics/i
8f7110447f039f80a6f5b1d854bc760c3d77da82 data/create/recipes/crafting/kinetics/item_vault.json
7f105694e02d4ce69a02740edfa4a0d0bc4f4eac data/create/recipes/crafting/kinetics/large_cogwheel.json
197c174c28f294b23ae6496b7a31c35e7e8b4771 data/create/recipes/crafting/kinetics/large_cogwheelfrom_little.json
5609b12dde7127965c70da2760038c456ba3cfd6 data/create/recipes/crafting/kinetics/large_water_wheel.json
0397b107ab380cd23390c96f298971a70e9bceef data/create/recipes/crafting/kinetics/light_blue_seat.json
aa06f0594e1b2d31aa41bace309ed95a16529498 data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json
bb8759b51aef768fa841962b9ad49676a6096a1c data/create/recipes/crafting/kinetics/light_blue_valve_handle_from_other_valve_handle.json
@ -4207,7 +4214,7 @@ c38984c432bd410261aaf6a6f30744c58481b325 data/create/recipes/crafting/kinetics/t
5e2af5ce3957d5ce4f54ceb667dcfed5cffafb32 data/create/recipes/crafting/kinetics/train_trapdoor.json
8494f5fcd85a740fa0f0384e3522d8cdd905ce49 data/create/recipes/crafting/kinetics/turntable.json
057c889b0a306f44b8835c896663154ccd9ff12f data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json
4fb009b86a51b2e259bd1f73848803f6276dd820 data/create/recipes/crafting/kinetics/water_wheel.json
152e63ade2759d01a07b9e71a3c60dfe5ea15ba8 data/create/recipes/crafting/kinetics/water_wheel.json
06b5b371ae9dd81df8fd3dee6d3559b1ed0db35c data/create/recipes/crafting/kinetics/weighted_ejector.json
f508d510576c93712e7f5265345a32e8818bbf0d data/create/recipes/crafting/kinetics/whisk.json
98546e5e5f1fe111e84c4a17569c8e7b57f8cc8d data/create/recipes/crafting/kinetics/white_sail.json
@ -5779,8 +5786,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
8d1b001e56bf81a9b314200a43bafa5210d2594d data/minecraft/tags/blocks/mineable/pickaxe.json
f4a1cdc4ffe7dd8412e8be369a48d19cf31a7f77 data/minecraft/tags/blocks/mineable/axe.json
a7eb0e379696c39c6f5a4603e29d3d8cc4fbf50c 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

View file

@ -1,15 +1,15 @@
{
"variants": {
"axis=x": {
"model": "create:block/crushing_wheel",
"model": "create:block/crushing_wheel/block",
"x": 90,
"y": 90
},
"axis=y": {
"model": "create:block/crushing_wheel"
"model": "create:block/crushing_wheel/block"
},
"axis=z": {
"model": "create:block/crushing_wheel",
"model": "create:block/crushing_wheel/block",
"x": 90,
"y": 180
}

View file

@ -0,0 +1,30 @@
{
"variants": {
"axis=x,extension=false": {
"model": "create:block/large_water_wheel/block",
"x": 90,
"y": 90
},
"axis=y,extension=false": {
"model": "create:block/large_water_wheel/block"
},
"axis=z,extension=false": {
"model": "create:block/large_water_wheel/block",
"x": 90,
"y": 180
},
"axis=x,extension=true": {
"model": "create:block/large_water_wheel/block_extension",
"x": 90,
"y": 90
},
"axis=y,extension=true": {
"model": "create:block/large_water_wheel/block_extension"
},
"axis=z,extension=true": {
"model": "create:block/large_water_wheel/block_extension",
"x": 90,
"y": 180
}
}
}

View file

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "minecraft:block/air"
}
}
}

View file

@ -257,6 +257,7 @@
"block.create.jungle_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u01DD\u05DFbun\u017F",
"block.create.large_bogey": "\u028E\u01DDbo\u15FA \u01DDb\u0279\u0250\uA780",
"block.create.large_cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186 \u01DDb\u0279\u0250\uA780",
"block.create.large_water_wheel": "\u05DF\u01DD\u01DD\u0265M \u0279\u01DD\u0287\u0250M \u01DDb\u0279\u0250\uA780",
"block.create.layered_andesite": "\u01DD\u0287\u0131s\u01DDpu\u2C6F p\u01DD\u0279\u01DD\u028E\u0250\uA780",
"block.create.layered_asurine": "\u01DDu\u0131\u0279ns\u2C6F p\u01DD\u0279\u01DD\u028E\u0250\uA780",
"block.create.layered_calcite": "\u01DD\u0287\u0131\u0254\u05DF\u0250\u0186 p\u01DD\u0279\u01DD\u028E\u0250\uA780",
@ -526,6 +527,7 @@
"block.create.warped_window": "\u028Dopu\u0131M p\u01DDd\u0279\u0250M",
"block.create.warped_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M p\u01DDd\u0279\u0250M",
"block.create.water_wheel": "\u05DF\u01DD\u01DD\u0265M \u0279\u01DD\u0287\u0250M",
"block.create.water_wheel_structure": "\u05DF\u01DD\u01DD\u0265M \u0279\u01DD\u0287\u0250M \u01DDb\u0279\u0250\uA780",
"block.create.waxed_copper_shingle_slab": "q\u0250\u05DFS \u01DD\u05DFbu\u0131\u0265S \u0279\u01DDddo\u0186 p\u01DDx\u0250M",
"block.create.waxed_copper_shingle_stairs": "s\u0279\u0131\u0250\u0287S \u01DD\u05DFbu\u0131\u0265S \u0279\u01DDddo\u0186 p\u01DDx\u0250M",
"block.create.waxed_copper_shingles": "s\u01DD\u05DFbu\u0131\u0265S \u0279\u01DDddo\u0186 p\u01DDx\u0250M",

View file

@ -260,6 +260,7 @@
"block.create.jungle_window_pane": "Jungle Window Pane",
"block.create.large_bogey": "Large Bogey",
"block.create.large_cogwheel": "Large Cogwheel",
"block.create.large_water_wheel": "Large Water Wheel",
"block.create.layered_andesite": "Layered Andesite",
"block.create.layered_asurine": "Layered Asurine",
"block.create.layered_calcite": "Layered Calcite",
@ -529,6 +530,7 @@
"block.create.warped_window": "Warped Window",
"block.create.warped_window_pane": "Warped Window Pane",
"block.create.water_wheel": "Water Wheel",
"block.create.water_wheel_structure": "Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "Waxed Copper Shingle Slab",
"block.create.waxed_copper_shingle_stairs": "Waxed Copper Shingle Stairs",
"block.create.waxed_copper_shingles": "Waxed Copper Shingles",
@ -1044,6 +1046,8 @@
"create.terrainzapper.usingBlock": "Using: %1$s",
"create.terrainzapper.leftClickToSet": "Left-Click a Block to set Material",
"create.large_water_wheel.not_enough_space": "Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "Parts of your train seem to be in unloaded chunks",
"create.minecart_coupling.no_loops": "Couplings cannot form a loop",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 878",
"_": "Missing Localizations: 881",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Tropenholzfensterscheibe",
"block.create.large_bogey": "Großes Drehgestell",
"block.create.large_cogwheel": "Großes Zahnrad",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Geschichteter Andesit",
"block.create.layered_asurine": "Geschichtetes Asurin",
"block.create.layered_calcite": "Geschichtetes Kalzit",
@ -530,6 +531,7 @@
"block.create.warped_window": "Wirrfenster",
"block.create.warped_window_pane": "Wirrfensterscheibe",
"block.create.water_wheel": "Wasserrad",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "Gewachste Kupferschindelstufe",
"block.create.waxed_copper_shingle_stairs": "Gewachste Kupferschindeltreppe",
"block.create.waxed_copper_shingles": "Gewachste Kupferschindel",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "Nutze: %1$s",
"create.terrainzapper.leftClickToSet": "Linksklicke einen Block, um ein Material auszuwählen",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Jede Lore kann nicht mehr als zwei Kupplungen haben",
"create.minecart_coupling.unloaded": "Teile des Zuges scheinen in nicht geladenen Chunks zu sein",
"create.minecart_coupling.no_loops": "Kupplungen können keine Schleife bilden",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1024",
"_": "Missing Localizations: 1027",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Panel de Ventana de Jungla",
"block.create.large_bogey": "UNLOCALIZED: Large Bogey",
"block.create.large_cogwheel": "Engranaje Grande",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Capa de Andesita",
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite",
@ -530,6 +531,7 @@
"block.create.warped_window": "Ventana Distorsionada",
"block.create.warped_window_pane": "Panel de Ventana Distorsionada",
"block.create.water_wheel": "Rueda de Agua",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab",
"block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs",
"block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "Usando: %1$s",
"create.terrainzapper.leftClickToSet": "Click Izquierdo a un Bloque para elegir Material",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Las vagonetas no pueden tener mas de dos uniones cada una",
"create.minecart_coupling.unloaded": "Partes de tu tren parecen estar en chunks no cargados",
"create.minecart_coupling.no_loops": "Las uniones no puede formar un ciclo",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 44",
"_": "Missing Localizations: 47",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Panel de ventana de jungla",
"block.create.large_bogey": "Vagón grande",
"block.create.large_cogwheel": "Engranaje grande",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Andesita estratificada",
"block.create.layered_asurine": "Azurina estratificada",
"block.create.layered_calcite": "Calcita estratificada",
@ -530,6 +531,7 @@
"block.create.warped_window": "Ventana distorsionada",
"block.create.warped_window_pane": "Panel de ventana distorsionada",
"block.create.water_wheel": "Rueda hidráulica mecánica",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "Losa de tejas de cobre encerado",
"block.create.waxed_copper_shingle_stairs": "Escaleras de tejas de cobre encerado",
"block.create.waxed_copper_shingles": "Bloque de tejas de cobre encerado",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "Usando: %1$s",
"create.terrainzapper.leftClickToSet": "Clic izquierdo a un bloque para establecer el material",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Las vagonetas no pueden tener más de dos enganches cada una",
"create.minecart_coupling.unloaded": "Algunas partes de su tren parecen estar en chunks no cargados",
"create.minecart_coupling.no_loops": "Los acoplamientos no pueden formar un bucle",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2173",
"_": "Missing Localizations: 2176",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane",
"block.create.large_bogey": "UNLOCALIZED: Large Bogey",
"block.create.large_cogwheel": "Grande roue dentée",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "UNLOCALIZED: Layered Andesite",
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite",
@ -530,6 +531,7 @@
"block.create.warped_window": "UNLOCALIZED: Warped Window",
"block.create.warped_window_pane": "UNLOCALIZED: Warped Window Pane",
"block.create.water_wheel": "Roue à eau",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab",
"block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs",
"block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks",
"create.minecart_coupling.no_loops": "UNLOCALIZED: Couplings cannot form a loop",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 38",
"_": "Missing Localizations: 41",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Pannello di finestra della giungla",
"block.create.large_bogey": "Carrello grande",
"block.create.large_cogwheel": "Ingranaggio grande",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Andesite stratificata",
"block.create.layered_asurine": "Azurite stratificata",
"block.create.layered_calcite": "Calcite stratificata",
@ -530,6 +531,7 @@
"block.create.warped_window": "Finestra distorta",
"block.create.warped_window_pane": "Pannello di finestra distorta",
"block.create.water_wheel": "Mulino ad acqua",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "Lastra di tegole di rame cerato",
"block.create.waxed_copper_shingle_stairs": "Scalini di tegole di rame cerato",
"block.create.waxed_copper_shingles": "Tegole di rame cerato",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "Blocco in uso: %1$s",
"create.terrainzapper.leftClickToSet": "Fai click sinistro su un blocco per scegliere il materiale",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "I carrelli da miniera non possono avere più di due agganci ciascuno",
"create.minecart_coupling.unloaded": "Parti del tuo Macchinario sembrano essere in mezzo a chunk non caricati",
"create.minecart_coupling.no_loops": "Gli agganci non possono creare un loop",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 40",
"_": "Missing Localizations: 43",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "ジャングルの板窓",
"block.create.large_bogey": "大きな台車",
"block.create.large_cogwheel": "大きな歯車",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "安山岩の組石",
"block.create.layered_asurine": "瑠璃岩の組石",
"block.create.layered_calcite": "方解石の組石",
@ -530,6 +531,7 @@
"block.create.warped_window": "歪んだ窓",
"block.create.warped_window_pane": "歪んだ板窓",
"block.create.water_wheel": "水車",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "錆止めされた銅の屋根板のハーフブロック",
"block.create.waxed_copper_shingle_stairs": "錆止めされた銅の屋根板の階段",
"block.create.waxed_copper_shingles": "錆止めされた銅の屋根板",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "使用中: %1$s",
"create.terrainzapper.leftClickToSet": "ブロックをスニークせず右クリックでブロックを選択",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "トロッコを2つ以上連結させることはできません",
"create.minecart_coupling.unloaded": "列車の一部があるチャンクがロードされていません",
"create.minecart_coupling.no_loops": "ループ状に連結させることはできません",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 44",
"_": "Missing Localizations: 47",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "정글나무 유리판",
"block.create.large_bogey": "큰 대차",
"block.create.large_cogwheel": "큰 톱니바퀴",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "단층 안산암",
"block.create.layered_asurine": "단층 담청암",
"block.create.layered_calcite": "단층 방해석",
@ -530,6 +531,7 @@
"block.create.warped_window": "뒤틀린 유리창",
"block.create.warped_window_pane": "뒤틀린 유리판",
"block.create.water_wheel": "물레바퀴",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "밀랍칠한 구리 판자 반 블록",
"block.create.waxed_copper_shingle_stairs": "밀랍칠한 구리 판자 계단",
"block.create.waxed_copper_shingles": "밀랍칠한 구리 판자",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "사용 중: %1$s",
"create.terrainzapper.leftClickToSet": "좌클릭으로 재료로 쓸 블록을 선택하세요",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "광산 수레는 최대 2개의 커플링만 가질 수 있습니다",
"create.minecart_coupling.unloaded": "열차 일부분이 로딩되지 않은 청크에 있는 것 같습니다",
"create.minecart_coupling.no_loops": "커플링은 반복할 수 없습니다",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2521",
"_": "Missing Localizations: 2524",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane",
"block.create.large_bogey": "UNLOCALIZED: Large Bogey",
"block.create.large_cogwheel": "Groot Tandwiel",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "UNLOCALIZED: Layered Andesite",
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite",
@ -530,6 +531,7 @@
"block.create.warped_window": "UNLOCALIZED: Warped Window",
"block.create.warped_window_pane": "UNLOCALIZED: Warped Window Pane",
"block.create.water_wheel": "Waterrad",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab",
"block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs",
"block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks",
"create.minecart_coupling.no_loops": "UNLOCALIZED: Couplings cannot form a loop",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 48",
"_": "Missing Localizations: 51",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Dżunglowa szyba okienna",
"block.create.large_bogey": "Duży wózek",
"block.create.large_cogwheel": "Duże koło zębate",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Warstwowy andezyt",
"block.create.layered_asurine": "Warstwowy azuryn",
"block.create.layered_calcite": "Warstwowy kalcyt",
@ -530,6 +531,7 @@
"block.create.warped_window": "Spaczone okno",
"block.create.warped_window_pane": "Spaczona szyba okienna",
"block.create.water_wheel": "Koło wodne",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "Woskowana płyta z miedzianych dachówek",
"block.create.waxed_copper_shingle_stairs": "Woskowane schody z miedzianych dachówek",
"block.create.waxed_copper_shingles": "Woskowane miedziane dachówki",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "Używając: %1$s",
"create.terrainzapper.leftClickToSet": "Kliknij LPM na blok aby ustawić materiał",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Wagoniki nie mogą mieć więcej niż dwa łączniki każdy",
"create.minecart_coupling.unloaded": "Część twojego pociągu wydaje się być w niezaładowanych Chunkach.",
"create.minecart_coupling.no_loops": "Łączniki nie mogą tworzyć pętli",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1367",
"_": "Missing Localizations: 1370",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Vidraça da selva",
"block.create.large_bogey": "Roda grande do trem",
"block.create.large_cogwheel": "Roda dentada grande",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Andesito estratificado",
"block.create.layered_asurine": "Asurino estratificado",
"block.create.layered_calcite": "Calcita estratificada",
@ -530,6 +531,7 @@
"block.create.warped_window": "Janela distorcida",
"block.create.warped_window_pane": "Vidraça distorcida",
"block.create.water_wheel": "Roda de Água",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "Laje de telha de cobre encerada",
"block.create.waxed_copper_shingle_stairs": "Escada de telha de cobre encerada",
"block.create.waxed_copper_shingles": "Telha de cobre encerada",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Carrinhos de mina não podem ter mais de dois acoplamentos cada",
"create.minecart_coupling.unloaded": "Partes do seu trem aparentam estar em um chunk descarregado",
"create.minecart_coupling.no_loops": "Acoplamentos não podem formar um loop",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 2232",
"_": "Missing Localizations: 2235",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "UNLOCALIZED: Jungle Window Pane",
"block.create.large_bogey": "UNLOCALIZED: Large Bogey",
"block.create.large_cogwheel": "UNLOCALIZED: Large Cogwheel",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "UNLOCALIZED: Layered Andesite",
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite",
@ -530,6 +531,7 @@
"block.create.warped_window": "UNLOCALIZED: Warped Window",
"block.create.warped_window_pane": "UNLOCALIZED: Warped Window Pane",
"block.create.water_wheel": "Roda de Água",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab",
"block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs",
"block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "UNLOCALIZED: Using: %1$s",
"create.terrainzapper.leftClickToSet": "UNLOCALIZED: Left-Click a Block to set Material",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "UNLOCALIZED: Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "UNLOCALIZED: Parts of your train seem to be in unloaded chunks",
"create.minecart_coupling.no_loops": "UNLOCALIZED: Couplings cannot form a loop",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 691",
"_": "Missing Localizations: 694",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Geam De Junglă",
"block.create.large_bogey": "UNLOCALIZED: Large Bogey",
"block.create.large_cogwheel": "Roată Dințată Mare",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Andezit Stratificat",
"block.create.layered_asurine": "Asurină Stratificată",
"block.create.layered_calcite": "Calcit Stratificat",
@ -530,6 +531,7 @@
"block.create.warped_window": "Sticlă Deformată",
"block.create.warped_window_pane": "Geam Deformat",
"block.create.water_wheel": "Roată De Apă",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "Lespede De Șindrilă De Cupru Ceruit",
"block.create.waxed_copper_shingle_stairs": "Scări De Șindrilă De Cupru Ceruit",
"block.create.waxed_copper_shingles": "Șindrile De Cupru Ceruite",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "Folosing: %1$s",
"create.terrainzapper.leftClickToSet": "Click-Stânga pe un Bloc pentru a seta Materialul",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Vagonetele nu pot avea nu mai mult de două cuplaje fiecare",
"create.minecart_coupling.unloaded": "Părți din trenul tău par să fie în chunkuri neîncărcate",
"create.minecart_coupling.no_loops": "Cuplajele nu pot forma o buclă",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 36",
"_": "Missing Localizations: 39",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Панель окна из тропического дерева",
"block.create.large_bogey": "Большая вагонная тележка",
"block.create.large_cogwheel": "Большая шестерня",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Слоистый андезит",
"block.create.layered_asurine": "Слоистый азурин",
"block.create.layered_calcite": "Слоистый кальцит",
@ -530,6 +531,7 @@
"block.create.warped_window": "Искажённое окно",
"block.create.warped_window_pane": "Панель из искажённого окна",
"block.create.water_wheel": "Водяное колесо",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "Вощёная плита из медной черепицы",
"block.create.waxed_copper_shingle_stairs": "Вощёные ступеньки из медной черепицы",
"block.create.waxed_copper_shingles": "Вощёная медная черепица",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "Используется: %1$s",
"create.terrainzapper.leftClickToSet": "Нажмите ЛКМ по блоку, что бы использовать материал",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Вагонетки могут иметь только два соединения",
"create.minecart_coupling.unloaded": "Кажется, в данный момент часть вашей вагонеточной штуковины в незагруженных чанках",
"create.minecart_coupling.no_loops": "Соединители не могут образовывать петлю",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 1022",
"_": "Missing Localizations: 1025",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "Склянна панель з тропічним деревом",
"block.create.large_bogey": "UNLOCALIZED: Large Bogey",
"block.create.large_cogwheel": "Велика шестірня",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "Багатошаровий андезит",
"block.create.layered_asurine": "UNLOCALIZED: Layered Asurine",
"block.create.layered_calcite": "UNLOCALIZED: Layered Calcite",
@ -530,6 +531,7 @@
"block.create.warped_window": "Скло з багряного дерева",
"block.create.warped_window_pane": "Склянна панель з багряного дерева",
"block.create.water_wheel": "Водяне колесо",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "UNLOCALIZED: Waxed Copper Shingle Slab",
"block.create.waxed_copper_shingle_stairs": "UNLOCALIZED: Waxed Copper Shingle Stairs",
"block.create.waxed_copper_shingles": "UNLOCALIZED: Waxed Copper Shingles",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "Використовується: %1$s",
"create.terrainzapper.leftClickToSet": "Left-Click a Block to set Material",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Вагонетки можуть мати лише два зв'язки",
"create.minecart_coupling.unloaded": "Здається, частина вашого поїзда у незавантажених чанках",
"create.minecart_coupling.no_loops": "З'єднувачі не можуть утворювати петлю",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 36",
"_": "Missing Localizations: 39",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "丛林木窗户板",
"block.create.large_bogey": "大转向架",
"block.create.large_cogwheel": "大齿轮",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "层叠安山岩",
"block.create.layered_asurine": "层叠皓蓝石",
"block.create.layered_calcite": "层叠方解石",
@ -530,6 +531,7 @@
"block.create.warped_window": "诡异木窗户",
"block.create.warped_window_pane": "诡异木窗户板",
"block.create.water_wheel": "水车",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "涂蜡铜砖瓦台阶",
"block.create.waxed_copper_shingle_stairs": "涂蜡铜砖瓦楼梯",
"block.create.waxed_copper_shingles": "涂蜡铜砖瓦",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "使用:%1$s",
"create.terrainzapper.leftClickToSet": "鼠标左击一个方块以设置填充材料",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "矿车无法被连接两个以上的矿车连轴器",
"create.minecart_coupling.unloaded": "有一部分列车存在于未加载区块中",
"create.minecart_coupling.no_loops": "矿车连轴器不能连成一个环",

View file

@ -1,5 +1,5 @@
{
"_": "Missing Localizations: 44",
"_": "Missing Localizations: 47",
"_": "->------------------------] Game Elements [------------------------<-",
@ -261,6 +261,7 @@
"block.create.jungle_window_pane": "叢林木窗戶片",
"block.create.large_bogey": "大轉向架",
"block.create.large_cogwheel": "大齒輪",
"block.create.large_water_wheel": "UNLOCALIZED: Large Water Wheel",
"block.create.layered_andesite": "疊層安山岩",
"block.create.layered_asurine": "疊層皓藍石",
"block.create.layered_calcite": "疊層方解石",
@ -530,6 +531,7 @@
"block.create.warped_window": "扭曲蕈木窗戶",
"block.create.warped_window_pane": "扭曲蕈木窗戶片",
"block.create.water_wheel": "水車",
"block.create.water_wheel_structure": "UNLOCALIZED: Large Water Wheel",
"block.create.waxed_copper_shingle_slab": "上蠟的銅屋瓦半磚",
"block.create.waxed_copper_shingle_stairs": "上蠟的銅屋瓦階梯",
"block.create.waxed_copper_shingles": "上蠟的銅屋瓦",
@ -1045,6 +1047,8 @@
"create.terrainzapper.usingBlock": "使用:%1$s",
"create.terrainzapper.leftClickToSet": "左鍵點擊方塊可以設定材質",
"create.large_water_wheel.not_enough_space": "UNLOCALIZED: Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "礦車無法被連接兩個以上的礦車連結器",
"create.minecart_coupling.unloaded": "有一部份礦車存在於未讀取區塊中",
"create.minecart_coupling.no_loops": "礦車連結器不能連成一個環",

View file

@ -1,3 +1,3 @@
{
"parent": "create:block/crushing_wheel"
"parent": "create:block/crushing_wheel/item"
}

View file

@ -0,0 +1,3 @@
{
"parent": "create:block/large_water_wheel/item"
}

View file

@ -0,0 +1,34 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"create:crafting/kinetics/large_water_wheel"
]
},
"criteria": {
"has_item": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"items": [
"create:water_wheel"
]
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "create:crafting/kinetics/large_water_wheel"
}
}
},
"requirements": [
[
"has_item",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "create:large_water_wheel"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:air"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,19 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"SSS",
"SCS",
"SSS"
],
"key": {
"S": {
"tag": "minecraft:planks"
},
"C": {
"item": "create:water_wheel"
}
},
"result": {
"item": "create:large_water_wheel"
}
}

View file

@ -7,10 +7,10 @@
],
"key": {
"S": {
"tag": "minecraft:wooden_slabs"
"tag": "minecraft:planks"
},
"C": {
"item": "create:large_cogwheel"
"item": "create:shaft"
}
},
"result": {

View file

@ -17,6 +17,8 @@
"create:adjustable_chain_gearshift",
"create:belt",
"create:water_wheel",
"create:large_water_wheel",
"create:water_wheel_structure",
"create:encased_fan",
"create:nozzle",
"create:turntable",

View file

@ -20,6 +20,8 @@
"create:belt",
"create:creative_motor",
"create:water_wheel",
"create:large_water_wheel",
"create:water_wheel_structure",
"create:encased_fan",
"create:nozzle",
"create:turntable",

View file

@ -85,7 +85,10 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul
import com.simibubi.create.content.contraptions.components.tracks.ControllerRailBlock;
import com.simibubi.create.content.contraptions.components.tracks.ControllerRailGenerator;
import com.simibubi.create.content.contraptions.components.turntable.TurntableBlock;
import com.simibubi.create.content.contraptions.components.waterwheel.LargeWaterWheelBlock;
import com.simibubi.create.content.contraptions.components.waterwheel.LargeWaterWheelBlockItem;
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock;
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelStructuralBlock;
import com.simibubi.create.content.contraptions.fluids.PipeAttachmentModel;
import com.simibubi.create.content.contraptions.fluids.PumpBlock;
import com.simibubi.create.content.contraptions.fluids.actors.HosePulleyBlock;
@ -526,6 +529,32 @@ public class AllBlocks {
.simpleItem()
.register();
public static final BlockEntry<LargeWaterWheelBlock> LARGE_WATER_WHEEL =
REGISTRATE.block("large_water_wheel", LargeWaterWheelBlock::new)
.initialProperties(SharedProperties::wooden)
.properties(p -> p.color(MaterialColor.DIRT))
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(axeOrPickaxe())
.blockstate((c, p) -> axisBlock(c, p,
s -> s.getValue(LargeWaterWheelBlock.EXTENSION) ? AssetLookup.partialBaseModel(c, p, "extension")
: AssetLookup.partialBaseModel(c, p)))
.transform(BlockStressDefaults.setCapacity(64.0))
.transform(BlockStressDefaults.setGeneratorSpeed(WaterWheelBlock::getSpeedRange))
.item(LargeWaterWheelBlockItem::new)
.transform(customItemModel())
.register();
public static final BlockEntry<WaterWheelStructuralBlock> WATER_WHEEL_STRUCTURAL =
REGISTRATE.block("water_wheel_structure", WaterWheelStructuralBlock::new)
.initialProperties(SharedProperties::wooden)
.blockstate((c, p) -> p.getVariantBuilder(c.get())
.forAllStatesExcept(BlockStateGen.mapToAir(p), WaterWheelStructuralBlock.FACING))
.properties(p -> p.color(MaterialColor.DIRT))
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(axeOrPickaxe())
.lang("Large Water Wheel")
.register();
public static final BlockEntry<EncasedFanBlock> ENCASED_FAN = REGISTRATE.block("encased_fan", EncasedFanBlock::new)
.initialProperties(SharedProperties::stone)
.properties(p -> p.color(MaterialColor.PODZOL))
@ -604,10 +633,11 @@ public class AllBlocks {
.initialProperties(SharedProperties::stone)
.properties(BlockBehaviour.Properties::noOcclusion)
.transform(pickaxeOnly())
.blockstate(BlockStateGen.axisBlockProvider(false))
.blockstate((c, p) -> BlockStateGen.axisBlock(c, p, s -> AssetLookup.partialBaseModel(c, p)))
.addLayer(() -> RenderType::cutoutMipped)
.transform(BlockStressDefaults.setImpact(8.0))
.simpleItem()
.item()
.transform(customItemModel())
.register();
public static final BlockEntry<CrushingWheelControllerBlock> CRUSHING_WHEEL_CONTROLLER =
@ -618,10 +648,7 @@ public class AllBlocks {
.noDrops()
.air())
.blockstate((c, p) -> p.getVariantBuilder(c.get())
.forAllStatesExcept(state -> ConfiguredModel.builder()
.modelFile(p.models()
.getExistingFile(p.mcLoc("block/air")))
.build(), CrushingWheelControllerBlock.FACING))
.forAllStatesExcept(BlockStateGen.mapToAir(p), CrushingWheelControllerBlock.FACING))
.register();
public static final BlockEntry<MechanicalPressBlock> MECHANICAL_PRESS =

View file

@ -81,6 +81,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.RopePulleyInstance;
import com.simibubi.create.content.contraptions.components.turntable.TurntableTileEntity;
import com.simibubi.create.content.contraptions.components.waterwheel.LargeWaterWheelTileEntity;
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity;
import com.simibubi.create.content.contraptions.fluids.PumpCogInstance;
import com.simibubi.create.content.contraptions.fluids.PumpRenderer;
@ -602,6 +603,13 @@ public class AllTileEntities {
.validBlocks(AllBlocks.WATER_WHEEL)
.renderer(() -> KineticTileEntityRenderer::new)
.register();
public static final BlockEntityEntry<LargeWaterWheelTileEntity> LARGE_WATER_WHEEL = Create.registrate()
.tileEntity("large_water_wheel", LargeWaterWheelTileEntity::new)
.instance(() -> CutoutRotatingInstance::new, false)
.validBlocks(AllBlocks.LARGE_WATER_WHEEL)
.renderer(() -> KineticTileEntityRenderer::new)
.register();
public static final BlockEntityEntry<MechanicalPressTileEntity> MECHANICAL_PRESS = Create.registrate()
.tileEntity("mechanical_press", MechanicalPressTileEntity::new)

View file

@ -0,0 +1,173 @@
package com.simibubi.create.content.contraptions.components.waterwheel;
import java.util.Random;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.RotatedPillarKineticBlock;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.Iterate;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
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.RenderShape;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.phys.BlockHitResult;
public class LargeWaterWheelBlock extends RotatedPillarKineticBlock implements ITE<LargeWaterWheelTileEntity> {
public static final BooleanProperty EXTENSION = BooleanProperty.create("extension");
public LargeWaterWheelBlock(Properties properties) {
super(properties);
registerDefaultState(defaultBlockState().setValue(EXTENSION, false));
}
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder.add(EXTENSION));
}
public Axis getAxisForPlacement(BlockPlaceContext context) {
return super.getStateForPlacement(context).getValue(AXIS);
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
BlockState stateForPlacement = super.getStateForPlacement(context);
BlockPos pos = context.getClickedPos();
Axis axis = stateForPlacement.getValue(AXIS);
for (int x = -1; x <= 1; x++) {
for (int y = -1; y <= 1; y++) {
for (int z = -1; z <= 1; z++) {
if (axis.choose(x, y, z) != 0)
continue;
BlockPos offset = new BlockPos(x, y, z);
if (offset.equals(BlockPos.ZERO))
continue;
BlockState occupiedState = context.getLevel()
.getBlockState(pos.offset(offset));
if (!occupiedState.getMaterial()
.isReplaceable())
return null;
}
}
}
if (context.getLevel()
.getBlockState(pos.relative(Direction.fromAxisAndDirection(axis, AxisDirection.NEGATIVE)))
.is(this))
stateForPlacement = stateForPlacement.setValue(EXTENSION, true);
return stateForPlacement;
}
@Override
public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand,
BlockHitResult pHit) {
return onTileEntityUse(pLevel, pPos, wwt -> wwt.applyMaterialIfValid(pPlayer.getItemInHand(pHand)));
}
@Override
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
return InteractionResult.PASS;
}
@Override
public BlockState updateShape(BlockState pState, Direction pDirection, BlockState pNeighborState,
LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) {
if (pDirection != Direction.fromAxisAndDirection(pState.getValue(AXIS), AxisDirection.NEGATIVE))
return pState;
return pState.setValue(EXTENSION, pNeighborState.is(this));
}
@Override
public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) {
super.onPlace(state, level, pos, oldState, isMoving);
if (!level.getBlockTicks()
.hasScheduledTick(pos, this))
level.scheduleTick(pos, this, 1);
}
@Override
public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, Random pRandom) {
Axis axis = pState.getValue(AXIS);
for (Direction side : Iterate.directions) {
if (side.getAxis() == axis)
continue;
for (boolean secondary : Iterate.falseAndTrue) {
Direction targetSide = secondary ? side.getClockWise(axis) : side;
BlockPos structurePos = (secondary ? pPos.relative(side) : pPos).relative(targetSide);
BlockState occupiedState = pLevel.getBlockState(structurePos);
BlockState requiredStructure = AllBlocks.WATER_WHEEL_STRUCTURAL.getDefaultState()
.setValue(WaterWheelStructuralBlock.FACING, targetSide.getOpposite());
if (occupiedState == requiredStructure)
continue;
if (!occupiedState.getMaterial()
.isReplaceable()) {
pLevel.destroyBlock(pPos, false);
return;
}
pLevel.setBlockAndUpdate(structurePos, requiredStructure);
}
}
withTileEntityDo(pLevel, pPos, WaterWheelTileEntity::determineAndApplyFlowScore);
}
@Override
public RenderShape getRenderShape(BlockState pState) {
return RenderShape.ENTITYBLOCK_ANIMATED;
}
@Override
public BlockEntityType<? extends LargeWaterWheelTileEntity> getTileEntityType() {
return AllTileEntities.LARGE_WATER_WHEEL.get();
}
@Override
public Class<LargeWaterWheelTileEntity> getTileEntityClass() {
return LargeWaterWheelTileEntity.class;
}
@Override
public boolean hasShaftTowards(LevelReader world, BlockPos pos, BlockState state, Direction face) {
return face.getAxis() == getRotationAxis(state);
}
@Override
public Axis getRotationAxis(BlockState state) {
return state.getValue(AXIS);
}
@Override
public float getParticleTargetRadius() {
return 2.5f;
}
@Override
public float getParticleInitialRadius() {
return 2.25f;
}
public static Couple<Integer> getSpeedRange() {
return Couple.create(4, 8);
}
}

View file

@ -0,0 +1,59 @@
package com.simibubi.create.content.contraptions.components.waterwheel;
import com.simibubi.create.CreateClient;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.Pair;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.DistExecutor;
public class LargeWaterWheelBlockItem extends BlockItem {
public LargeWaterWheelBlockItem(Block pBlock, Properties pProperties) {
super(pBlock, pProperties);
}
@Override
public InteractionResult place(BlockPlaceContext ctx) {
InteractionResult result = super.place(ctx);
if (result != InteractionResult.FAIL)
return result;
Direction clickedFace = ctx.getClickedFace();
if (clickedFace.getAxis() != ((LargeWaterWheelBlock) getBlock()).getAxisForPlacement(ctx))
result = super.place(BlockPlaceContext.at(ctx, ctx.getClickedPos()
.relative(clickedFace), clickedFace));
if (result == InteractionResult.FAIL && ctx.getLevel()
.isClientSide())
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> showBounds(ctx));
return result;
}
@OnlyIn(Dist.CLIENT)
public void showBounds(BlockPlaceContext context) {
BlockPos pos = context.getClickedPos();
Axis axis = ((LargeWaterWheelBlock) getBlock()).getAxisForPlacement(context);
Vec3 contract = Vec3.atLowerCornerOf(Direction.get(AxisDirection.POSITIVE, axis)
.getNormal());
if (!(context.getPlayer()instanceof LocalPlayer localPlayer))
return;
CreateClient.OUTLINER.showAABB(Pair.of("waterwheel", pos), new AABB(pos).inflate(1)
.deflate(contract.x, contract.y, contract.z))
.colored(0xFF_ff5d6c);
Lang.translate("large_water_wheel.not_enough_space")
.color(0xFF_ff5d6c)
.sendStatus(localPlayer);
}
}

View file

@ -0,0 +1,18 @@
package com.simibubi.create.content.contraptions.components.waterwheel;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
public class LargeWaterWheelTileEntity extends WaterWheelTileEntity {
public LargeWaterWheelTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
}
@Override
protected int getSize() {
return 2;
}
}

View file

@ -1,38 +1,32 @@
package com.simibubi.create.content.contraptions.components.waterwheel;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Random;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTileEntities;
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.block.ITE;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.utility.Couple;
import com.simibubi.create.foundation.utility.Iterate;
import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.core.Direction.AxisDirection;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.BubbleColumnBlock;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.BlockHitResult;
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class WaterWheelBlock extends DirectionalKineticBlock implements ITE<WaterWheelTileEntity> {
public WaterWheelBlock(Properties properties) {
@ -51,132 +45,55 @@ public class WaterWheelBlock extends DirectionalKineticBlock implements ITE<Wate
BlockState neighbourState = worldIn.getBlockState(neighbourPos);
if (!AllBlocks.WATER_WHEEL.has(neighbourState))
continue;
Axis axis = state.getValue(FACING)
.getAxis();
if (neighbourState.getValue(FACING)
.getAxis() != state.getValue(FACING)
.getAxis()
|| state.getValue(FACING)
.getAxis() != direction.getAxis())
.getAxis() != axis || axis != direction.getAxis())
return false;
}
return true;
}
@Override
public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand,
BlockHitResult pHit) {
return onTileEntityUse(pLevel, pPos, wwt -> wwt.applyMaterialIfValid(pPlayer.getItemInHand(pHand)));
}
@Override
public BlockState updateShape(BlockState stateIn, Direction facing, BlockState facingState, LevelAccessor worldIn,
BlockPos currentPos, BlockPos facingPos) {
if (worldIn instanceof WrappedWorld)
return stateIn;
updateFlowAt(stateIn, worldIn, currentPos, facing);
updateWheelSpeed(worldIn, currentPos);
if (worldIn.isClientSide())
return stateIn;
if (!worldIn.getBlockTicks()
.hasScheduledTick(currentPos, this))
worldIn.scheduleTick(currentPos, this, 1);
return stateIn;
}
@Override
public void onPlace(BlockState state, Level worldIn, BlockPos pos, BlockState oldState, boolean isMoving) {
super.onPlace(state, worldIn, pos, oldState, isMoving);
updateAllSides(state, worldIn, pos);
}
public void updateAllSides(BlockState state, Level worldIn, BlockPos pos) {
for (Direction d : Iterate.directions)
updateFlowAt(state, worldIn, pos, d);
updateWheelSpeed(worldIn, pos);
}
private void updateFlowAt(BlockState state, LevelAccessor world, BlockPos pos, Direction side) {
if (side.getAxis() == state.getValue(FACING)
.getAxis())
if (worldIn.isClientSide())
return;
FluidState fluid = world.getFluidState(pos.relative(side));
Direction wf = state.getValue(FACING);
boolean clockwise = wf.getAxisDirection() == AxisDirection.POSITIVE;
int clockwiseMultiplier = 2;
Vec3 vec = fluid.getFlow(world, pos.relative(side));
if (side.getAxis()
.isHorizontal()) {
BlockState adjacentBlock = world.getBlockState(pos.relative(side));
if (adjacentBlock.getBlock() == Blocks.BUBBLE_COLUMN)
vec = new Vec3(0, adjacentBlock.getValue(BubbleColumnBlock.DRAG_DOWN) ? -1 : 1, 0);
}
vec = vec.scale(side.getAxisDirection()
.getStep());
vec = new Vec3(Math.signum(vec.x), Math.signum(vec.y), Math.signum(vec.z));
Vec3 flow = vec;
withTileEntityDo(world, pos, te -> {
double flowStrength = 0;
if (wf.getAxis() == Axis.Z) {
if (side.getAxis() == Axis.Y)
flowStrength = flow.x > 0 ^ !clockwise ? -flow.x * clockwiseMultiplier : -flow.x;
if (side.getAxis() == Axis.X)
flowStrength = flow.y < 0 ^ !clockwise ? flow.y * clockwiseMultiplier : flow.y;
}
if (wf.getAxis() == Axis.X) {
if (side.getAxis() == Axis.Y)
flowStrength = flow.z < 0 ^ !clockwise ? flow.z * clockwiseMultiplier : flow.z;
if (side.getAxis() == Axis.Z)
flowStrength = flow.y > 0 ^ !clockwise ? -flow.y * clockwiseMultiplier : -flow.y;
}
if (wf.getAxis() == Axis.Y) {
if (side.getAxis() == Axis.Z)
flowStrength = flow.x < 0 ^ !clockwise ? flow.x * clockwiseMultiplier : flow.x;
if (side.getAxis() == Axis.X)
flowStrength = flow.z > 0 ^ !clockwise ? -flow.z * clockwiseMultiplier : -flow.z;
}
if (te.getSpeed() == 0 && flowStrength != 0 && !world.isClientSide())
te.award(
FluidHelper.isLava(fluid.getType()) ? AllAdvancements.LAVA_WHEEL : AllAdvancements.WATER_WHEEL);
Integer flowModifier = AllConfigs.SERVER.kinetics.waterWheelFlowSpeed.get();
te.setFlow(side, (float) (flowStrength * flowModifier / 2f));
});
if (!worldIn.getBlockTicks()
.hasScheduledTick(pos, this))
worldIn.scheduleTick(pos, this, 1);
}
private void updateWheelSpeed(LevelAccessor world, BlockPos pos) {
withTileEntityDo(world, pos, WaterWheelTileEntity::updateGeneratedRotation);
@Override
public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, Random pRandom) {
withTileEntityDo(pLevel, pPos, WaterWheelTileEntity::determineAndApplyFlowScore);
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
Direction face = context.getClickedFace();
Direction horizontalFacing = context.getHorizontalDirection();
BlockPos pos = context.getClickedPos();
Level world = context.getLevel();
Player player = context.getPlayer();
BlockState placedOn = world.getBlockState(pos.relative(face.getOpposite()));
if (AllBlocks.WATER_WHEEL.has(placedOn))
return defaultBlockState().setValue(FACING, placedOn.getValue(FACING));
Direction facing = face;
boolean sneaking = player != null && player.isShiftKeyDown();
if (player != null) {
Vec3 lookVec = player.getLookAngle();
double tolerance = 0.985;
if (!canSurvive(defaultBlockState().setValue(FACING, Direction.UP), world, pos))
facing = horizontalFacing;
else if (Vec3.atLowerCornerOf(Direction.DOWN.getNormal())
.dot(lookVec.normalize()) > tolerance)
facing = Direction.DOWN;
else if (Vec3.atLowerCornerOf(Direction.UP.getNormal())
.dot(lookVec.normalize()) > tolerance)
facing = Direction.UP;
else
facing = horizontalFacing;
}
return defaultBlockState().setValue(FACING, sneaking ? facing.getOpposite() : facing);
BlockState state = super.getStateForPlacement(context);
state.setValue(FACING, Direction.get(AxisDirection.POSITIVE, state.getValue(FACING)
.getAxis()));
return state;
}
@Override
@ -217,9 +134,7 @@ public class WaterWheelBlock extends DirectionalKineticBlock implements ITE<Wate
}
public static Couple<Integer> getSpeedRange() {
Integer base = AllConfigs.SERVER.kinetics.waterWheelBaseSpeed.get();
Integer flow = AllConfigs.SERVER.kinetics.waterWheelFlowSpeed.get();
return Couple.create(base, base + 4 * flow);
return Couple.create(8, 16);
}
}

View file

@ -0,0 +1,13 @@
package com.simibubi.create.content.contraptions.components.waterwheel;
import com.jozufozu.flywheel.api.MaterialManager;
import com.simibubi.create.content.contraptions.base.CutoutRotatingInstance;
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
public class WaterWheelInstance extends CutoutRotatingInstance {
public WaterWheelInstance(MaterialManager modelManager, KineticTileEntity tile) {
super(modelManager, tile);
}
}

View file

@ -0,0 +1,195 @@
package com.simibubi.create.content.contraptions.components.waterwheel;
import java.util.Random;
import java.util.function.Consumer;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.goggles.IProxyHoveringInformation;
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
import com.simibubi.create.foundation.block.render.DestroyProgressRenderingHandler;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.particle.ParticleEngine;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.DirectionalBlock;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition.Builder;
import net.minecraft.world.level.material.PushReaction;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.IBlockRenderProperties;
public class WaterWheelStructuralBlock extends DirectionalBlock implements IWrenchable, IProxyHoveringInformation {
public WaterWheelStructuralBlock(Properties p_52591_) {
super(p_52591_);
}
@Override
protected void createBlockStateDefinition(Builder<Block, BlockState> pBuilder) {
super.createBlockStateDefinition(pBuilder.add(FACING));
}
@Override
public RenderShape getRenderShape(BlockState pState) {
return RenderShape.INVISIBLE;
}
@Override
public PushReaction getPistonPushReaction(BlockState pState) {
return PushReaction.BLOCK;
}
@Override
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
return InteractionResult.PASS;
}
@Override
public ItemStack getCloneItemStack(BlockGetter pLevel, BlockPos pPos, BlockState pState) {
return AllBlocks.LARGE_WATER_WHEEL.asStack();
}
@Override
public InteractionResult onSneakWrenched(BlockState state, UseOnContext context) {
BlockPos clickedPos = context.getClickedPos();
Level level = context.getLevel();
if (stillValid(level, clickedPos, state, false)) {
BlockPos masterPos = getMaster(level, clickedPos, state);
context = new UseOnContext(level, context.getPlayer(), context.getHand(), context.getItemInHand(),
new BlockHitResult(context.getClickLocation(), context.getClickedFace(), masterPos,
context.isInside()));
state = level.getBlockState(masterPos);
}
return IWrenchable.super.onSneakWrenched(state, context);
}
@Override
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pIsMoving) {
if (stillValid(pLevel, pPos, pState, false))
pLevel.destroyBlock(getMaster(pLevel, pPos, pState), true);
}
public void playerWillDestroy(Level pLevel, BlockPos pPos, BlockState pState, Player pPlayer) {
if (stillValid(pLevel, pPos, pState, false)) {
BlockPos masterPos = getMaster(pLevel, pPos, pState);
pLevel.destroyBlockProgress(masterPos.hashCode(), masterPos, -1);
if (!pLevel.isClientSide() && pPlayer.isCreative())
pLevel.destroyBlock(masterPos, false);
}
super.playerWillDestroy(pLevel, pPos, pState, pPlayer);
}
@Override
public BlockState updateShape(BlockState pState, Direction pFacing, BlockState pFacingState, LevelAccessor pLevel,
BlockPos pCurrentPos, BlockPos pFacingPos) {
if (stillValid(pLevel, pCurrentPos, pState, false)) {
BlockPos masterPos = getMaster(pLevel, pCurrentPos, pState);
if (!pLevel.getBlockTicks()
.hasScheduledTick(masterPos, AllBlocks.LARGE_WATER_WHEEL.get()))
pLevel.scheduleTick(masterPos, AllBlocks.LARGE_WATER_WHEEL.get(), 1);
return pState;
}
if (!(pLevel instanceof Level level) || level.isClientSide())
return pState;
if (!level.getBlockTicks()
.hasScheduledTick(pCurrentPos, this))
level.scheduleTick(pCurrentPos, this, 1);
return pState;
}
public static BlockPos getMaster(BlockGetter level, BlockPos pos, BlockState state) {
Direction direction = state.getValue(FACING);
BlockPos targetedPos = pos.relative(direction);
BlockState targetedState = level.getBlockState(targetedPos);
if (targetedState.is(AllBlocks.WATER_WHEEL_STRUCTURAL.get()))
return getMaster(level, targetedPos, targetedState);
return targetedPos;
}
public boolean stillValid(BlockGetter level, BlockPos pos, BlockState state, boolean directlyAdjacent) {
if (!state.is(this))
return false;
Direction direction = state.getValue(FACING);
BlockPos targetedPos = pos.relative(direction);
BlockState targetedState = level.getBlockState(targetedPos);
if (!directlyAdjacent && stillValid(level, targetedPos, targetedState, true))
return true;
return targetedState.getBlock() instanceof LargeWaterWheelBlock
&& targetedState.getValue(LargeWaterWheelBlock.AXIS) != direction.getAxis();
}
@Override
public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, Random pRandom) {
if (!stillValid(pLevel, pPos, pState, false))
pLevel.setBlockAndUpdate(pPos, Blocks.AIR.defaultBlockState());
}
@OnlyIn(Dist.CLIENT)
public void initializeClient(Consumer<IBlockRenderProperties> consumer) {
consumer.accept(new RenderProperties());
}
@Override
public boolean addLandingEffects(BlockState state1, ServerLevel level, BlockPos pos, BlockState state2,
LivingEntity entity, int numberOfParticles) {
return true;
}
public static class RenderProperties implements IBlockRenderProperties, DestroyProgressRenderingHandler {
@Override
public boolean addDestroyEffects(BlockState state, Level Level, BlockPos pos, ParticleEngine manager) {
return true;
}
@Override
public boolean addHitEffects(BlockState state, Level level, HitResult target, ParticleEngine manager) {
if (target instanceof BlockHitResult bhr) {
BlockPos targetPos = bhr.getBlockPos();
WaterWheelStructuralBlock waterWheelStructuralBlock = AllBlocks.WATER_WHEEL_STRUCTURAL.get();
if (waterWheelStructuralBlock.stillValid(level, targetPos, state, false))
manager.crack(WaterWheelStructuralBlock.getMaster(level, targetPos, state), bhr.getDirection());
return true;
}
return DestroyProgressRenderingHandler.super.addHitEffects(state, level, target, manager);
}
@Override
public boolean renderDestroyProgress(ClientLevel level, LevelRenderer renderer, int breakerId,
BlockPos targetPos, int progress, BlockState blockState) {
WaterWheelStructuralBlock waterWheelStructuralBlock = AllBlocks.WATER_WHEEL_STRUCTURAL.get();
if (!waterWheelStructuralBlock.stillValid(level, targetPos, blockState, false))
return true;
BlockPos masterPos = WaterWheelStructuralBlock.getMaster(level, targetPos, blockState);
renderer.destroyBlockProgress(masterPos.hashCode(), masterPos, progress);
return true;
}
}
@Override
public BlockPos getInformationSource(Level level, BlockPos pos, BlockState state) {
return stillValid(level, pos, state, false) ? getMaster(level, pos, state) : pos;
}
}

View file

@ -1,33 +1,158 @@
package com.simibubi.create.content.contraptions.components.waterwheel;
import java.util.HashMap;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.simibubi.create.AllBlocks;
import com.google.gson.JsonParser;
import com.mojang.serialization.JsonOps;
import com.simibubi.create.content.contraptions.base.GeneratingKineticTileEntity;
import com.simibubi.create.content.contraptions.base.IRotate;
import com.simibubi.create.foundation.advancement.AllAdvancements;
import com.simibubi.create.foundation.config.AllConfigs;
import com.simibubi.create.foundation.fluid.FluidHelper;
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
import com.simibubi.create.foundation.utility.Iterate;
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.core.Direction.AxisDirection;
import net.minecraft.core.Vec3i;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.tags.BlockTags;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.BubbleColumnBlock;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.model.data.IModelData;
import net.minecraftforge.client.model.data.ModelDataMap;
import net.minecraftforge.client.model.data.ModelProperty;
public class WaterWheelTileEntity extends GeneratingKineticTileEntity {
private Map<Direction, Float> flows;
public static Map<Axis, Set<BlockPos>> SMALL_OFFSETS = new IdentityHashMap<>();
public static Map<Axis, Set<BlockPos>> LARGE_OFFSETS = new IdentityHashMap<>();
static {
for (Axis axis : Iterate.axes) {
HashSet<BlockPos> offsets = new HashSet<>();
for (Direction d : Iterate.directions)
if (d.getAxis() != axis)
offsets.add(BlockPos.ZERO.relative(d));
SMALL_OFFSETS.put(axis, offsets);
offsets = new HashSet<>();
for (Direction d : Iterate.directions) {
if (d.getAxis() == axis)
continue;
BlockPos centralOffset = BlockPos.ZERO.relative(d, 2);
offsets.add(centralOffset);
for (Direction d2 : Iterate.directions) {
if (d2.getAxis() == axis)
continue;
if (d2.getAxis() == d.getAxis())
continue;
offsets.add(centralOffset.relative(d2));
}
}
LARGE_OFFSETS.put(axis, offsets);
}
}
public int flowScore;
public BlockState baseBlock; // <-- TODO use planks/corresponding logs in rendered instance
public WaterWheelTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
flows = new HashMap<>();
for (Direction d : Iterate.directions)
setFlow(d, 0);
setLazyTickRate(20);
baseBlock = Blocks.SPRUCE_PLANKS.defaultBlockState();
}
protected int getSize() {
return 1;
}
protected Set<BlockPos> getOffsetsToCheck() {
return (getSize() == 1 ? SMALL_OFFSETS : LARGE_OFFSETS).get(getAxis());
}
public InteractionResult applyMaterialIfValid(ItemStack item) {
if (!(item.getItem() instanceof BlockItem blockItem))
return InteractionResult.PASS;
BlockState material = blockItem.getBlock().defaultBlockState();
if (material == this.baseBlock)
return InteractionResult.PASS;
if (!material.is(BlockTags.PLANKS))
return InteractionResult.PASS;
baseBlock = material;
notifyUpdate();
return InteractionResult.SUCCESS;
}
protected Axis getAxis() {
Axis axis = Axis.X;
BlockState blockState = getBlockState();
if (blockState.getBlock()instanceof IRotate irotate)
axis = irotate.getRotationAxis(blockState);
return axis;
}
public void determineAndApplyFlowScore() {
Vec3 wheelPlane =
Vec3.atLowerCornerOf(new Vec3i(1, 1, 1).subtract(Direction.get(AxisDirection.POSITIVE, getAxis())
.getNormal()));
int flowScore = 0;
boolean lava = false;
for (BlockPos blockPos : getOffsetsToCheck()) {
BlockPos targetPos = blockPos.offset(worldPosition);
Vec3 flowAtPos = getFlowVectorAtPosition(targetPos).multiply(wheelPlane);
lava |= FluidHelper.isLava(level.getFluidState(targetPos)
.getType());
if (flowAtPos.lengthSqr() == 0)
continue;
flowAtPos = flowAtPos.normalize();
Vec3 normal = Vec3.atLowerCornerOf(blockPos)
.normalize();
Vec3 positiveMotion = VecHelper.rotate(normal, 90, getAxis());
double dot = flowAtPos.dot(positiveMotion);
if (Math.abs(dot) > .5)
flowScore += Math.signum(dot);
}
if (flowScore != 0 && !level.isClientSide())
award(lava ? AllAdvancements.LAVA_WHEEL : AllAdvancements.WATER_WHEEL);
setFlowScoreAndUpdate(flowScore);
}
public Vec3 getFlowVectorAtPosition(BlockPos pos) {
FluidState fluid = level.getFluidState(pos);
Vec3 vec = fluid.getFlow(level, pos);
BlockState blockState = level.getBlockState(pos);
if (blockState.getBlock() == Blocks.BUBBLE_COLUMN)
vec = new Vec3(0, blockState.getValue(BubbleColumnBlock.DRAG_DOWN) ? -1 : 1, 0);
return vec;
}
public void setFlowScoreAndUpdate(int score) {
if (flowScore == score)
return;
flowScore = score;
updateGeneratedRotation();
setChanged();
}
@Override
@ -35,52 +160,63 @@ public class WaterWheelTileEntity extends GeneratingKineticTileEntity {
super.addBehaviours(behaviours);
registerAwardables(behaviours, AllAdvancements.LAVA_WHEEL, AllAdvancements.WATER_WHEEL);
}
@Override
protected void read(CompoundTag compound, boolean clientPacket) {
super.read(compound, clientPacket);
if (compound.contains("Flows")) {
for (Direction d : Iterate.directions)
setFlow(d, compound.getCompound("Flows")
.getFloat(d.getSerializedName()));
flowScore = compound.getInt("FlowScore");
BlockState prevMaterial = baseBlock;
if (!compound.contains("Material"))
return;
JsonOps ops = JsonOps.INSTANCE;
BlockState.CODEC.decode(ops, JsonParser.parseString(compound.getString("Material")))
.result()
.ifPresent(p -> baseBlock = p.getFirst());
if (clientPacket && prevMaterial != baseBlock)
redraw();
}
private void redraw() {
if (!isVirtual())
requestModelDataUpdate();
if (hasLevel()) {
level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 16);
level.getChunkSource()
.getLightEngine()
.checkBlock(worldPosition);
}
}
public static final ModelProperty<BlockState> MATERIAL_PROPERTY = new ModelProperty<>();
@Override
protected AABB createRenderBoundingBox() {
return new AABB(worldPosition).inflate(1);
public IModelData getModelData() {
return new ModelDataMap.Builder().withInitial(MATERIAL_PROPERTY, baseBlock)
.build();
}
@Override
public void write(CompoundTag compound, boolean clientPacket) {
CompoundTag flows = new CompoundTag();
for (Direction d : Iterate.directions)
flows.putFloat(d.getSerializedName(), this.flows.get(d));
compound.put("Flows", flows);
super.write(compound, clientPacket);
compound.putInt("FlowScore", flowScore);
JsonOps ops = JsonOps.INSTANCE;
BlockState.CODEC.encode(baseBlock, ops, ops.empty())
.result()
.map(je -> je.toString())
.ifPresent(s -> compound.putString("Material", s));
}
public void setFlow(Direction direction, float speed) {
flows.put(direction, speed);
setChanged();
@Override
protected AABB createRenderBoundingBox() {
return new AABB(worldPosition).inflate(getSize());
}
@Override
public float getGeneratedSpeed() {
float speed = 0;
for (Float f : flows.values())
speed += f;
if (speed != 0)
speed += AllConfigs.SERVER.kinetics.waterWheelBaseSpeed.get() * Math.signum(speed);
return speed;
}
@Override
public void lazyTick() {
super.lazyTick();
AllBlocks.WATER_WHEEL.get()
.updateAllSides(getBlockState(), level, worldPosition);
return Mth.clamp(flowScore / getSize(), -2, 2) * 8 / getSize();
}
}

View file

@ -34,6 +34,7 @@ import net.minecraft.network.chat.FormattedText;
import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
@ -74,7 +75,6 @@ public class GoggleOverlayRenderer {
BlockHitResult result = (BlockHitResult) objectMouseOver;
ClientLevel world = mc.level;
BlockPos pos = result.getBlockPos();
BlockEntity te = world.getBlockEntity(pos);
int prevHoverTicks = hoverTicks;
if (lastHovered == null || lastHovered.equals(pos))
@ -83,6 +83,9 @@ public class GoggleOverlayRenderer {
hoverTicks = 0;
lastHovered = pos;
pos = proxiedOverlayPosition(world, pos);
BlockEntity te = world.getBlockEntity(pos);
boolean wearingGoggles = GogglesItem.isWearingGoggles(mc.player);
boolean hasGoggleInformation = te instanceof IHaveGoggleInformation;
@ -203,5 +206,12 @@ public class GoggleOverlayRenderer {
.render(poseStack);
poseStack.popPose();
}
public static BlockPos proxiedOverlayPosition(Level level, BlockPos pos) {
BlockState targetedState = level.getBlockState(pos);
if (targetedState.getBlock() instanceof IProxyHoveringInformation proxy)
return proxy.getInformationSource(level, pos, targetedState);
return pos;
}
}

View file

@ -0,0 +1,11 @@
package com.simibubi.create.content.contraptions.goggles;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
public interface IProxyHoveringInformation {
public BlockPos getInformationSource(Level level, BlockPos pos, BlockState state);
}

View file

@ -8,8 +8,6 @@ public class CKinetics extends ConfigBase {
public final ConfigInt maxBeltLength = i(20, 5, "maxBeltLength", Comments.maxBeltLength);
public final ConfigInt crushingDamage = i(4, 0, "crushingDamage", Comments.crushingDamage);
public final ConfigInt maxMotorSpeed = i(256, 64, "maxMotorSpeed", Comments.rpm, Comments.maxMotorSpeed, ConfigAnnotations.RequiresRestart.BOTH.asComment());
public final ConfigInt waterWheelBaseSpeed = i(4, 1, "waterWheelBaseSpeed", Comments.rpm, Comments.waterWheelBaseSpeed);
public final ConfigInt waterWheelFlowSpeed = i(4, 1, "waterWheelFlowSpeed", Comments.rpm, Comments.waterWheelFlowSpeed);
public final ConfigInt maxRotationSpeed = i(256, 64, "maxRotationSpeed", Comments.rpm, Comments.maxRotationSpeed);
public final ConfigEnum<DeployerAggroSetting> ignoreDeployerAttacks =
e(DeployerAggroSetting.CREEPERS, "ignoreDeployerAttacks", Comments.ignoreDeployerAttacks);
@ -93,9 +91,6 @@ public class CKinetics extends ConfigBase {
static String highCapacity = "Minimum added Capacity by sources to be considered 'high'";
static String stress = "Fine tune the kinetic stats of individual components";
static String ignoreDeployerAttacks = "Select what mobs should ignore Deployers when attacked by them.";
static String waterWheelBaseSpeed = "Added rotation speed by a water wheel when at least one flow is present.";
static String waterWheelFlowSpeed =
"Rotation speed gained by a water wheel for each side with running fluids. (halved if not against blades)";
static String disableStress = "Disable the Stress mechanic altogether.";
static String kineticValidationFrequency =
"Game ticks between Kinetic Blocks checking whether their source is still valid.";

View file

@ -30,6 +30,7 @@ import com.simibubi.create.foundation.utility.Pointing;
import com.tterrag.registrate.providers.DataGenContext;
import com.tterrag.registrate.providers.RegistrateBlockstateProvider;
import com.tterrag.registrate.util.nullness.NonNullBiConsumer;
import com.tterrag.registrate.util.nullness.NonnullType;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
@ -522,4 +523,11 @@ public class BlockStateGen {
.end();
}
public static Function<BlockState, ConfiguredModel[]> mapToAir(@NonnullType RegistrateBlockstateProvider p) {
return state -> ConfiguredModel.builder()
.modelFile(p.models()
.getExistingFile(p.mcLoc("block/air")))
.build();
}
}

View file

@ -247,8 +247,15 @@ public class StandardRecipeGen extends CreateRecipeProvider {
.requires(I.planks())),
WATER_WHEEL = create(AllBlocks.WATER_WHEEL).unlockedBy(I::andesite)
.viaShaped(b -> b.define('S', ItemTags.WOODEN_SLABS)
.define('C', AllBlocks.LARGE_COGWHEEL.get())
.viaShaped(b -> b.define('S', I.planks())
.define('C', I.shaft())
.pattern("SSS")
.pattern("SCS")
.pattern("SSS")),
LARGE_WATER_WHEEL = create(AllBlocks.LARGE_WATER_WHEEL).unlockedBy(AllBlocks.WATER_WHEEL::get)
.viaShaped(b -> b.define('S', I.planks())
.define('C', AllBlocks.WATER_WHEEL.get())
.pattern("SSS")
.pattern("SCS")
.pattern("SSS")),

View file

@ -0,0 +1,47 @@
package com.simibubi.create.foundation.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.base.IRotate;
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelStructuralBlock;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.FlowingFluid;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
@Mixin(FlowingFluid.class)
public class WaterWheelFluidSpreadMixin {
@Inject(at = @At("HEAD"), cancellable = true, method = "canSpreadTo(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/core/Direction;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/material/FluidState;Lnet/minecraft/world/level/material/Fluid;)Z")
protected void canSpreadToOnWaterWheel(BlockGetter pLevel, BlockPos pFromPos, BlockState pFromBlockState,
Direction pDirection, BlockPos pToPos, BlockState pToBlockState, FluidState pToFluidState, Fluid pFluid,
CallbackInfoReturnable<Boolean> cir) {
if (pDirection.getAxis() == Axis.Y)
return;
BlockPos belowPos = pFromPos.below();
BlockState belowState = pLevel.getBlockState(belowPos);
if (AllBlocks.WATER_WHEEL_STRUCTURAL.has(belowState)) {
if (AllBlocks.WATER_WHEEL_STRUCTURAL.get()
.stillValid(pLevel, belowPos, belowState, false))
belowState = pLevel.getBlockState(WaterWheelStructuralBlock.getMaster(pLevel, belowPos, belowState));
} else if (!AllBlocks.WATER_WHEEL.has(belowState))
return;
if (belowState.getBlock()instanceof IRotate irotate
&& irotate.getRotationAxis(belowState) == pDirection.getAxis())
cir.setReturnValue(false);
}
}

View file

@ -172,6 +172,8 @@
"create.terrainzapper.usingBlock": "Using: %1$s",
"create.terrainzapper.leftClickToSet": "Left-Click a Block to set Material",
"create.large_water_wheel.not_enough_space": "Clear Blocks for Placement",
"create.minecart_coupling.two_couplings_max": "Minecarts cannot have more than two couplings each",
"create.minecart_coupling.unloaded": "Parts of your train seem to be in unloaded chunks",
"create.minecart_coupling.no_loops": "Couplings cannot form a loop",

View file

@ -1,281 +0,0 @@
{
"credit": "Made with Blockbench",
"parent": "create:block/large_wheels",
"textures": {
"6": "create:block/crushing_wheel_body",
"spruce_log_top": "create:block/smooth_dark_log_top",
"axis_top": "create:block/axis_top",
"axis": "create:block/axis",
"crushing_wheel": "create:block/crushing_wheel",
"particle": "block/polished_andesite"
},
"elements": [
{
"name": "Axis",
"from": [6, 0, 6],
"to": [10, 16, 10],
"faces": {
"north": {"uv": [6, 0, 10, 16], "texture": "#axis"},
"east": {"uv": [6, 0, 10, 16], "texture": "#axis"},
"south": {"uv": [6, 0, 10, 16], "texture": "#axis"},
"west": {"uv": [6, 0, 10, 16], "texture": "#axis"},
"up": {"uv": [6, 6, 10, 10], "texture": "#axis_top"},
"down": {"uv": [6, 6, 10, 10], "texture": "#axis_top"}
}
},
{
"name": "B1",
"from": [2, 1.95, -8],
"to": [9, 14.05, 7],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [7.5, 6, 11, 12], "texture": "#6"},
"east": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"south": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"west": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"up": {"uv": [0, 9.5, 7.5, 13], "rotation": 270, "texture": "#6"},
"down": {"uv": [0, 9.5, 7.5, 13], "rotation": 90, "texture": "#6"}
}
},
{
"name": "B2",
"from": [2, 1.9, -8],
"to": [10, 14.1, 7],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [3.5, 0, 7.5, 6], "texture": "#6"},
"east": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"south": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"west": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"up": {"uv": [0, 6.5, 7.5, 10.5], "rotation": 270, "texture": "#6"},
"down": {"uv": [0, 6, 7.5, 9.5], "rotation": 90, "texture": "#6"}
}
},
{
"name": "B3",
"from": [2, 1.95, -8],
"to": [9, 14.05, 7],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [11, 0, 14.5, 6], "texture": "#6"},
"east": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"south": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"west": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"up": {"uv": [0, 6, 7.5, 9.5], "rotation": 270, "texture": "#6"},
"down": {"uv": [0, 6, 7.5, 9.5], "rotation": 90, "texture": "#6"}
}
},
{
"name": "B4",
"from": [2, 1.9, -8],
"to": [10, 14.1, 7],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8.05, 8]},
"faces": {
"north": {"uv": [3.5, 0, 7.5, 6], "texture": "#6"},
"east": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"south": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"west": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"up": {"uv": [0, 6.5, 7.5, 10.5], "rotation": 270, "texture": "#6"},
"down": {"uv": [8.5, 12.5, 16, 16], "rotation": 90, "texture": "#6"}
}
},
{
"name": "B5",
"from": [-8, 1.95, 7],
"to": [7, 14.05, 14],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"east": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"south": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"west": {"uv": [7.5, 6, 11, 12], "texture": "#6"},
"up": {"uv": [0, 9.5, 7.5, 13], "rotation": 180, "texture": "#6"},
"down": {"uv": [0, 9.5, 7.5, 13], "rotation": 180, "texture": "#6"}
}
},
{
"name": "B6",
"from": [-8, 1.9, 6],
"to": [7, 14.1, 14],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"east": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"south": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"west": {"uv": [3.5, 0, 7.5, 6], "texture": "#6"},
"up": {"uv": [0, 6.5, 7.5, 10.5], "rotation": 180, "texture": "#6"},
"down": {"uv": [0, 6, 7.5, 9.5], "rotation": 180, "texture": "#6"}
}
},
{
"name": "B7",
"from": [-8, 1.95, 7],
"to": [7, 14.05, 14],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"east": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"south": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"west": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"up": {"uv": [0, 6, 7.5, 9.5], "rotation": 180, "texture": "#6"},
"down": {"uv": [0, 6, 7.5, 9.5], "rotation": 180, "texture": "#6"}
}
},
{
"name": "B8",
"from": [-8, 1.9, 6],
"to": [7, 14.1, 14],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"east": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"south": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"west": {"uv": [3.5, 0, 7.5, 6], "texture": "#6"},
"up": {"uv": [0, 6.5, 7.5, 10.5], "rotation": 180, "texture": "#6"},
"down": {"uv": [8.5, 12.5, 16, 16], "rotation": 180, "texture": "#6"}
}
},
{
"name": "B9",
"from": [7, 1.95, 9],
"to": [14, 14.05, 24],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"east": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"south": {"uv": [7.5, 6, 11, 12], "texture": "#6"},
"west": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"up": {"uv": [0, 9.5, 7.5, 13], "rotation": 90, "texture": "#6"},
"down": {"uv": [0, 9.5, 7.5, 13], "rotation": 270, "texture": "#6"}
}
},
{
"name": "B10",
"from": [6, 1.9, 9],
"to": [14, 14.1, 24],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"east": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"south": {"uv": [3.5, 0, 7.5, 6], "texture": "#6"},
"west": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"up": {"uv": [0, 6, 7.5, 10], "rotation": 90, "texture": "#6"},
"down": {"uv": [0, 6, 7.5, 9.5], "rotation": 270, "texture": "#6"}
}
},
{
"name": "B11",
"from": [7, 1.95, 9],
"to": [14, 14.05, 24],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"east": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"south": {"uv": [7.5, 6, 11, 12], "texture": "#6"},
"west": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"up": {"uv": [8.5, 12.5, 16, 16], "rotation": 90, "texture": "#6"},
"down": {"uv": [8.5, 12.5, 16, 16], "rotation": 270, "texture": "#6"}
}
},
{
"name": "B12",
"from": [6, 1.9, 9],
"to": [14, 14.1, 24],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"east": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"south": {"uv": [3.5, 0, 7.5, 6], "texture": "#6"},
"west": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"up": {"uv": [0, 6.5, 7.5, 10.5], "rotation": 90, "texture": "#6"},
"down": {"uv": [0, 6, 7.5, 9.5], "rotation": 270, "texture": "#6"}
}
},
{
"name": "B13",
"from": [9, 1.95, 2],
"to": [24, 14.05, 9],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"east": {"uv": [7.5, 6, 11, 12], "texture": "#6"},
"south": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"west": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"up": {"uv": [0, 9.5, 7.5, 13], "texture": "#6"},
"down": {"uv": [0, 9.5, 7.5, 13], "texture": "#6"}
}
},
{
"name": "B14",
"from": [9, 1.9, 2],
"to": [24, 14.1, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"east": {"uv": [3.5, 0, 7.5, 6], "texture": "#6"},
"south": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"west": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"up": {"uv": [0, 7.5, 7.5, 11.5], "texture": "#6"},
"down": {"uv": [0, 6, 7.5, 9.5], "texture": "#6"}
}
},
{
"name": "B15",
"from": [9, 1.95, 2],
"to": [24, 14.05, 9],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"east": {"uv": [11, 0, 14.5, 6], "texture": "#6"},
"south": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"west": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"up": {"uv": [8.5, 12.5, 16, 16], "texture": "#6"},
"down": {"uv": [8.5, 12.5, 16, 16], "texture": "#6"}
}
},
{
"name": "B16",
"from": [2, 1.9, -8],
"to": [10, 14.1, 7],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 7.95, 8]},
"faces": {
"north": {"uv": [3.5, 0, 7.5, 6], "texture": "#6"},
"east": {"uv": [0, 0, 7.5, 6], "texture": "#6"},
"south": {"uv": [7.5, 0, 11, 6], "texture": "#6"},
"west": {"uv": [1.5, 6, 7.5, 0], "rotation": 180, "texture": "#6"},
"up": {"uv": [0, 6.5, 7.5, 10.5], "rotation": 270, "texture": "#6"},
"down": {"uv": [0, 6, 7.5, 9.5], "rotation": 90, "texture": "#6"}
}
},
{
"name": "AxisCoat",
"from": [4, 1, 4],
"to": [12, 15, 12],
"shade": false,
"faces": {
"north": {"uv": [4, 1, 12, 15], "texture": "#spruce_log_top"},
"east": {"uv": [4, 1, 12, 15], "texture": "#spruce_log_top"},
"south": {"uv": [4, 1, 12, 15], "texture": "#spruce_log_top"},
"west": {"uv": [4, 1, 12, 15], "texture": "#spruce_log_top"},
"up": {"uv": [4, 4, 12, 12], "texture": "#spruce_log_top"},
"down": {"uv": [4, 4, 12, 12], "texture": "#spruce_log_top"}
}
},
{
"name": "Cover",
"from": [-4, 1.85, -4],
"to": [20, 14.15, 20],
"faces": {
"up": {"uv": [2, 2, 14, 14], "texture": "#crushing_wheel"},
"down": {"uv": [2, 2, 14, 14], "texture": "#crushing_wheel"}
}
}
],
"groups": [
{
"name": "crushing_wheel",
"origin": [8, 8, 8],
"children": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
}
]
}

View file

@ -0,0 +1,6 @@
{
"parent": "create:block/crushing_wheel/textures",
"loader": "forge:obj",
"flip-v": true,
"model": "create:models/block/crushing_wheel/crushing_wheel.obj"
}

View file

@ -0,0 +1,52 @@
# Blender 3.4.1 MTL File: 'crushing wheel.blend'
# www.blender.org
newmtl crushing_wheel_insert
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd #insert
newmtl crushing_wheel_plates
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd #plates
newmtl m_axis
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 1
map_Kd #axis
newmtl m_axis_top
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 1
map_Kd #axis_top
newmtl m_spruce_log_top.001
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 1
map_Kd #spruce_log_top

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,18 @@
{
"parent": "create:block/crushing_wheel/textures",
"loader": "forge:obj",
"flip-v": true,
"model": "create:models/block/crushing_wheel/crushing_wheel.obj",
"display": {
"gui": {
"rotation": [ 30, 225, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.45, 0.45, 0.45 ]
},
"fixed": {
"rotation": [ 90, 0, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.45, 0.45, 0.45 ]
}
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "block/block",
"ambientocclusion": false,
"textures": {
"axis": "create:block/axis",
"axis_top": "create:block/axis_top",
"plates": "create:block/crushing_wheel_plates",
"insert": "create:block/crushing_wheel_insert",
"spruce_log_top": "block/spruce_log_top",
"particle": "create:block/palettes/stone_types/cut/andesite_cut"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "create:block/large_water_wheel/textures",
"loader": "forge:obj",
"flip-v": true,
"model": "create:models/block/large_water_wheel/waterwheel_large.obj"
}

View file

@ -0,0 +1,6 @@
{
"parent": "create:block/large_water_wheel/textures",
"loader": "forge:obj",
"flip-v": true,
"model": "create:models/block/large_water_wheel/waterwheel_large_extension.obj"
}

View file

@ -0,0 +1,36 @@
{
"parent": "create:block/large_water_wheel/textures",
"loader": "forge:obj",
"flip-v": true,
"model": "create:models/block/large_water_wheel/waterwheel_large.obj",
"display": {
"gui": {
"rotation": [ 30, 225, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.25, 0.25, 0.25 ]
},
"fixed": {
"rotation": [ 90, 0, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.4, 0.4, 0.4 ]
},
"thirdperson_righthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.2, 0.2, 0.2]
},
"thirdperson_lefthand": {
"rotation": [75, 45, 0],
"translation": [0, 2.5, 0],
"scale": [0.2, 0.2, 0.2]
},
"firstperson_righthand": {
"rotation": [0, 45, 0],
"scale": [0.2, 0.2, 0.2]
},
"firstperson_lefthand": {
"rotation": [0, 225, 0],
"scale": [0.2, 0.2, 0.2]
}
}
}

View file

@ -0,0 +1,13 @@
{
"parent": "block/block",
"ambientocclusion": false,
"textures": {
"axis": "create:block/axis",
"axis_top": "create:block/axis_top",
"log": "block/oak_log",
"planks": "block/oak_planks",
"metal": "create:block/waterwheel_metal",
"stripped_log_top": "block/stripped_oak_log_top",
"particle": "#planks"
}
}

View file

@ -0,0 +1,62 @@
# Blender 3.4.1 MTL File: 'waterwheel.blend'
# www.blender.org
newmtl axis
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 1
map_Kd #axis
newmtl axis_top
Ns 0.000000
Ka 1.000000 1.000000 1.000000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 1
map_Kd #axis_top
newmtl waterwheel_log
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd #log
newmtl waterwheel_metal
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd #metal
newmtl waterwheel_plank
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd #planks
newmtl waterwheel_stripped_log
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 2
map_Kd #stripped_log_top

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -10,6 +10,7 @@
"HumanoidArmorLayerMixin",
"MapItemSavedDataMixin",
"ContraptionDriverInteractMixin",
"WaterWheelFluidSpreadMixin",
"accessor.AbstractProjectileDispenseBehaviorAccessor",
"accessor.DispenserBlockAccessor",
"accessor.FallingBlockEntityAccessor",