Controlled attachment
- Added the Sticker, a redstone-driven block attachment component - Fixed lighting of TileEntities lowered by a pulley
This commit is contained in:
parent
5949dd376b
commit
c1c6e5e046
67 changed files with 902 additions and 114 deletions
|
@ -337,7 +337,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl
|
||||||
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
|
d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json
|
||||||
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
|
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json
|
||||||
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
|
61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json
|
||||||
6fa36883e76e9e403bb429c8f86b8c0d3bba0cff assets/create/blockstates/radial_chassis.json
|
4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json
|
||||||
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
|
45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json
|
||||||
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
|
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json
|
||||||
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
|
722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json
|
||||||
|
@ -371,6 +371,7 @@ e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/speedometer.j
|
||||||
1cb7cdbefa0ff199263782809287854b9d85074c assets/create/blockstates/spout.json
|
1cb7cdbefa0ff199263782809287854b9d85074c assets/create/blockstates/spout.json
|
||||||
d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window.json
|
d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window.json
|
||||||
8d7dfa60630a8b4bae4e8eca5c66e1cfa34dda1f assets/create/blockstates/spruce_window_pane.json
|
8d7dfa60630a8b4bae4e8eca5c66e1cfa34dda1f assets/create/blockstates/spruce_window_pane.json
|
||||||
|
5d7385d28a23dcfc95a221d36d82337908582726 assets/create/blockstates/sticker.json
|
||||||
3d93eabbb327aecc526beae9c62283f1d43eb710 assets/create/blockstates/sticky_mechanical_piston.json
|
3d93eabbb327aecc526beae9c62283f1d43eb710 assets/create/blockstates/sticky_mechanical_piston.json
|
||||||
f385988cb6fa9c48b5d59a6942ec50ed2b60c8bf assets/create/blockstates/stockpile_switch.json
|
f385988cb6fa9c48b5d59a6942ec50ed2b60c8bf assets/create/blockstates/stockpile_switch.json
|
||||||
e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/stressometer.json
|
e815bfd854c2653f10828bb11950f7fb991d7efc assets/create/blockstates/stressometer.json
|
||||||
|
@ -400,20 +401,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
||||||
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
|
6801fa1f466f172700e573e5b8ee8ee5f9ca4583 assets/create/blockstates/yellow_valve_handle.json
|
||||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||||
00e2b77dcc86224cd5a33aefaac01f20c90bcb40 assets/create/lang/en_ud.json
|
369f9c6fce0aa11d70efa2e73a4ba2ff12e57e37 assets/create/lang/en_ud.json
|
||||||
55638abca6ffa48e1059f2578ea6d76b8327f496 assets/create/lang/en_us.json
|
10f9c238cdc8b68246c5663bc9745942d1014927 assets/create/lang/en_us.json
|
||||||
374dd193cb26eb590a4a66bf5c8e13f9743ddbdb assets/create/lang/unfinished/de_de.json
|
c46eabdb4476c18f539c95c24259a3fe1ee9cbff assets/create/lang/unfinished/de_de.json
|
||||||
84b205e2a8c9539ab6da68aa8f7c91f1dbec0702 assets/create/lang/unfinished/es_es.json
|
551cd06b553080815a129d6b113473efde3fb5ac assets/create/lang/unfinished/es_es.json
|
||||||
3397c2fed7517a4c9b3b41ee081abb120ddf9b3b assets/create/lang/unfinished/es_mx.json
|
1bac8afa8f92030077db8d921fd9dda30c0e8a5a assets/create/lang/unfinished/es_mx.json
|
||||||
e61eb3ca3d279c438275fb50333b135560574e62 assets/create/lang/unfinished/fr_fr.json
|
d62993dd6f73224cbc17f04ea96022c4ac385dc4 assets/create/lang/unfinished/fr_fr.json
|
||||||
eaa202ec1821372b5f26d724e7c58d710fda7f5b assets/create/lang/unfinished/it_it.json
|
749274555f9b3edc9d7799a7147d724fd7993c66 assets/create/lang/unfinished/it_it.json
|
||||||
d1627e59cf6cf5ac2382397a7db416e75072ac31 assets/create/lang/unfinished/ja_jp.json
|
7e9723798c1459780b2814145eb6a0dc681a2281 assets/create/lang/unfinished/ja_jp.json
|
||||||
39f4258b8d9d56c5d7e5761065081d69ab07d4d8 assets/create/lang/unfinished/ko_kr.json
|
2d1da43b76d2184df5b183641241478e1c101218 assets/create/lang/unfinished/ko_kr.json
|
||||||
402c16cffdd530dfde3e016691720145cc66c7a1 assets/create/lang/unfinished/nl_nl.json
|
9cea3a5a2fe4e2c6d966f3c91b24e9d6595a9cc6 assets/create/lang/unfinished/nl_nl.json
|
||||||
73f22223f6d30068ac2bc3f9be02e43f7fe4cae0 assets/create/lang/unfinished/pt_br.json
|
e7299620ca48f296d678c87470358816f23d7578 assets/create/lang/unfinished/pt_br.json
|
||||||
015a444814ec9982c35d08a3705df3861ce2545e assets/create/lang/unfinished/ru_ru.json
|
6fd3ef5962b10f83e5df7dd0fbdb50cadee1a06b assets/create/lang/unfinished/ru_ru.json
|
||||||
38ed221082ce3ce7b4f6c93ec28b7e89a95cab06 assets/create/lang/unfinished/zh_cn.json
|
b0688d7e4c593c0ed4fc87ea0b4e52205dcdeec8 assets/create/lang/unfinished/zh_cn.json
|
||||||
e51b6bd8cd9696858a417d3d9472a263e9268dd8 assets/create/lang/unfinished/zh_tw.json
|
ff1c97c854da7b7bfe6be829c9bf6a787f6dfacd assets/create/lang/unfinished/zh_tw.json
|
||||||
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
||||||
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
|
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
|
||||||
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
|
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||||
|
@ -1544,6 +1545,7 @@ d6fb0d38b1b5bcc199b52ac8889eaecd167f6725 assets/create/models/item/speedometer.j
|
||||||
b9abe1331d49871838231f3a8e5d2973634e9325 assets/create/models/item/spout.json
|
b9abe1331d49871838231f3a8e5d2973634e9325 assets/create/models/item/spout.json
|
||||||
b305e81f1dc5272634745b6e822af40955a2ef28 assets/create/models/item/spruce_window.json
|
b305e81f1dc5272634745b6e822af40955a2ef28 assets/create/models/item/spruce_window.json
|
||||||
5f622bca8386b8dd077310647e39ac3abb80c6a1 assets/create/models/item/spruce_window_pane.json
|
5f622bca8386b8dd077310647e39ac3abb80c6a1 assets/create/models/item/spruce_window_pane.json
|
||||||
|
bb546e5342c6d1a6b4040cf7ccdd2f10c6f79965 assets/create/models/item/sticker.json
|
||||||
891abc24593d53d282773eca5534065056d89b4c assets/create/models/item/sticky_mechanical_piston.json
|
891abc24593d53d282773eca5534065056d89b4c assets/create/models/item/sticky_mechanical_piston.json
|
||||||
bbb5773adc23128c70174bfc531af936e6e063e3 assets/create/models/item/stockpile_switch.json
|
bbb5773adc23128c70174bfc531af936e6e063e3 assets/create/models/item/stockpile_switch.json
|
||||||
bab8f78c319b2a79ed55c5d2a94b521ddaa44996 assets/create/models/item/stressometer.json
|
bab8f78c319b2a79ed55c5d2a94b521ddaa44996 assets/create/models/item/stressometer.json
|
||||||
|
@ -1816,6 +1818,7 @@ cd8cefee21a1690f9158b8e8661a92d20ad0f535 data/create/advancements/recipes/create
|
||||||
e8a5d924ccf30b6eae4b9ec0a8040e31f0eb165b data/create/advancements/recipes/create.base/crafting/kinetics/speedometer.json
|
e8a5d924ccf30b6eae4b9ec0a8040e31f0eb165b data/create/advancements/recipes/create.base/crafting/kinetics/speedometer.json
|
||||||
90ff137eb1533695d9d17296ed180c0a88ddd891 data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.json
|
90ff137eb1533695d9d17296ed180c0a88ddd891 data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.json
|
||||||
44867af16ec6d960268747effcd578ab55e3a366 data/create/advancements/recipes/create.base/crafting/kinetics/spout.json
|
44867af16ec6d960268747effcd578ab55e3a366 data/create/advancements/recipes/create.base/crafting/kinetics/spout.json
|
||||||
|
8c7fd72b8b4d414a61859dd08857e8538d84f88b data/create/advancements/recipes/create.base/crafting/kinetics/sticker.json
|
||||||
3859abc8839e92b01461d3e9ef853a4934c3256b data/create/advancements/recipes/create.base/crafting/kinetics/sticky_mechanical_piston.json
|
3859abc8839e92b01461d3e9ef853a4934c3256b data/create/advancements/recipes/create.base/crafting/kinetics/sticky_mechanical_piston.json
|
||||||
9a4dad31370d9e71308afe5c3f9349b67f749635 data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.json
|
9a4dad31370d9e71308afe5c3f9349b67f749635 data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.json
|
||||||
f3fc3d4fee0712906f833aa17185f0bacb21922f data/create/advancements/recipes/create.base/crafting/kinetics/super_glue.json
|
f3fc3d4fee0712906f833aa17185f0bacb21922f data/create/advancements/recipes/create.base/crafting/kinetics/super_glue.json
|
||||||
|
@ -2665,6 +2668,7 @@ b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/shaft.js
|
||||||
f6c497d625de67ea9377e840208b1be539d13b73 data/create/loot_tables/blocks/spout.json
|
f6c497d625de67ea9377e840208b1be539d13b73 data/create/loot_tables/blocks/spout.json
|
||||||
a23a1e332c9ba84474e3c0588e8a0857afe346e0 data/create/loot_tables/blocks/spruce_window.json
|
a23a1e332c9ba84474e3c0588e8a0857afe346e0 data/create/loot_tables/blocks/spruce_window.json
|
||||||
3ee2350936ea82fef716bc58e4cd088a384616f0 data/create/loot_tables/blocks/spruce_window_pane.json
|
3ee2350936ea82fef716bc58e4cd088a384616f0 data/create/loot_tables/blocks/spruce_window_pane.json
|
||||||
|
111a3bb893abb899652a923b10ca7dc5ea424e5f data/create/loot_tables/blocks/sticker.json
|
||||||
8d2970acd61b96844a4308d87e858b1612d5862e data/create/loot_tables/blocks/sticky_mechanical_piston.json
|
8d2970acd61b96844a4308d87e858b1612d5862e data/create/loot_tables/blocks/sticky_mechanical_piston.json
|
||||||
ec2889e712702644092197a4b41a682fb953817d data/create/loot_tables/blocks/stockpile_switch.json
|
ec2889e712702644092197a4b41a682fb953817d data/create/loot_tables/blocks/stockpile_switch.json
|
||||||
3479775008a256bc35f98b31655975f7d5c836b2 data/create/loot_tables/blocks/stressometer.json
|
3479775008a256bc35f98b31655975f7d5c836b2 data/create/loot_tables/blocks/stressometer.json
|
||||||
|
@ -2876,6 +2880,7 @@ a17db27e61baa45f8a6ecb46a6d2a5a464704f8b data/create/recipes/crafting/kinetics/s
|
||||||
b1a74f0b51fa37ca1ed814266b3d69b8b7e69fa3 data/create/recipes/crafting/kinetics/speedometer.json
|
b1a74f0b51fa37ca1ed814266b3d69b8b7e69fa3 data/create/recipes/crafting/kinetics/speedometer.json
|
||||||
8d632845deeb723e1a56083536ee5f9d60de2fcb data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json
|
8d632845deeb723e1a56083536ee5f9d60de2fcb data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json
|
||||||
eea9d4066cd2fafef40b50b79323dcc603fa6388 data/create/recipes/crafting/kinetics/spout.json
|
eea9d4066cd2fafef40b50b79323dcc603fa6388 data/create/recipes/crafting/kinetics/spout.json
|
||||||
|
e532a5c405e48b415e3fcd4f7c6183ea335cb915 data/create/recipes/crafting/kinetics/sticker.json
|
||||||
3be40664acfd150d0617bc138dc2dd9d54a21b3a data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json
|
3be40664acfd150d0617bc138dc2dd9d54a21b3a data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json
|
||||||
af5854ee2fa3be195ad9abcdeebe6ed7306b651c data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json
|
af5854ee2fa3be195ad9abcdeebe6ed7306b651c data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json
|
||||||
21f885a674603367b67e1e993c175638cbda9ea3 data/create/recipes/crafting/kinetics/super_glue.json
|
21f885a674603367b67e1e993c175638cbda9ea3 data/create/recipes/crafting/kinetics/super_glue.json
|
||||||
|
|
|
@ -89,8 +89,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "true",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_west": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky",
|
"model": "create:block/radial_chassis_side_x_sticky",
|
||||||
|
@ -99,8 +99,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "true",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_west": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y_sticky",
|
"model": "create:block/radial_chassis_side_y_sticky",
|
||||||
|
@ -109,8 +109,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "true",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_west": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_z_sticky",
|
"model": "create:block/radial_chassis_side_z_sticky",
|
||||||
|
@ -119,8 +119,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "false",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_west": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x",
|
"model": "create:block/radial_chassis_side_x",
|
||||||
|
@ -129,8 +129,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "false",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_west": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y",
|
"model": "create:block/radial_chassis_side_y",
|
||||||
|
@ -139,8 +139,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_west": "false",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_west": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_z",
|
"model": "create:block/radial_chassis_side_z",
|
||||||
|
@ -149,8 +149,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "true",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_north": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky"
|
"model": "create:block/radial_chassis_side_x_sticky"
|
||||||
|
@ -158,8 +158,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "true",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_north": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y_sticky",
|
"model": "create:block/radial_chassis_side_y_sticky",
|
||||||
|
@ -168,8 +168,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "true",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_north": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky",
|
"model": "create:block/radial_chassis_side_x_sticky",
|
||||||
|
@ -178,8 +178,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "false",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_north": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x"
|
"model": "create:block/radial_chassis_side_x"
|
||||||
|
@ -187,8 +187,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "false",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_north": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y",
|
"model": "create:block/radial_chassis_side_y",
|
||||||
|
@ -197,8 +197,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_north": "false",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_north": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x",
|
"model": "create:block/radial_chassis_side_x",
|
||||||
|
@ -207,8 +207,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "true",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x_sticky",
|
"model": "create:block/radial_chassis_side_x_sticky",
|
||||||
|
@ -217,8 +217,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "true",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y_sticky",
|
"model": "create:block/radial_chassis_side_y_sticky",
|
||||||
|
@ -227,8 +227,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "true",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_east": "true"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_z_sticky"
|
"model": "create:block/radial_chassis_side_z_sticky"
|
||||||
|
@ -236,8 +236,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "false",
|
"axis": "x",
|
||||||
"axis": "x"
|
"sticky_east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_x",
|
"model": "create:block/radial_chassis_side_x",
|
||||||
|
@ -246,8 +246,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "false",
|
"axis": "y",
|
||||||
"axis": "y"
|
"sticky_east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_y",
|
"model": "create:block/radial_chassis_side_y",
|
||||||
|
@ -256,8 +256,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"when": {
|
"when": {
|
||||||
"sticky_east": "false",
|
"axis": "z",
|
||||||
"axis": "z"
|
"sticky_east": "false"
|
||||||
},
|
},
|
||||||
"apply": {
|
"apply": {
|
||||||
"model": "create:block/radial_chassis_side_z"
|
"model": "create:block/radial_chassis_side_z"
|
||||||
|
|
108
src/generated/resources/assets/create/blockstates/sticker.json
Normal file
108
src/generated/resources/assets/create/blockstates/sticker.json
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"extended=false,facing=down,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"extended=true,facing=down,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"extended=false,facing=up,powered=false": {
|
||||||
|
"model": "create:block/sticker/block"
|
||||||
|
},
|
||||||
|
"extended=true,facing=up,powered=false": {
|
||||||
|
"model": "create:block/sticker/block"
|
||||||
|
},
|
||||||
|
"extended=false,facing=north,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"extended=true,facing=north,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"extended=false,facing=south,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"extended=true,facing=south,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"extended=false,facing=west,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"extended=true,facing=west,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"extended=false,facing=east,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"extended=true,facing=east,powered=false": {
|
||||||
|
"model": "create:block/sticker/block",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"extended=false,facing=down,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"extended=true,facing=down,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"extended=false,facing=up,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered"
|
||||||
|
},
|
||||||
|
"extended=true,facing=up,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered"
|
||||||
|
},
|
||||||
|
"extended=false,facing=north,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"extended=true,facing=north,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 90
|
||||||
|
},
|
||||||
|
"extended=false,facing=south,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"extended=true,facing=south,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"extended=false,facing=west,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"extended=true,facing=west,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"extended=false,facing=east,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"extended=true,facing=east,powered=true": {
|
||||||
|
"model": "create:block/sticker/block_powered",
|
||||||
|
"x": 90,
|
||||||
|
"y": 90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -372,6 +372,7 @@
|
||||||
"block.create.spout": "\u0287nodS",
|
"block.create.spout": "\u0287nodS",
|
||||||
"block.create.spruce_window": "\u028Dopu\u0131M \u01DD\u0254n\u0279dS",
|
"block.create.spruce_window": "\u028Dopu\u0131M \u01DD\u0254n\u0279dS",
|
||||||
"block.create.spruce_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u01DD\u0254n\u0279dS",
|
"block.create.spruce_window_pane": "\u01DDu\u0250\u0500 \u028Dopu\u0131M \u01DD\u0254n\u0279dS",
|
||||||
|
"block.create.sticker": "\u0279\u01DD\u029E\u0254\u0131\u0287S",
|
||||||
"block.create.sticky_mechanical_piston": "uo\u0287s\u0131\u0500 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW \u028E\u029E\u0254\u0131\u0287S",
|
"block.create.sticky_mechanical_piston": "uo\u0287s\u0131\u0500 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW \u028E\u029E\u0254\u0131\u0287S",
|
||||||
"block.create.stockpile_switch": "\u0265\u0254\u0287\u0131\u028DS \u01DD\u05DF\u0131d\u029E\u0254o\u0287S",
|
"block.create.stockpile_switch": "\u0265\u0254\u0287\u0131\u028DS \u01DD\u05DF\u0131d\u029E\u0254o\u0287S",
|
||||||
"block.create.stressometer": "\u0279\u01DD\u0287\u01DD\u026Foss\u01DD\u0279\u0287S",
|
"block.create.stressometer": "\u0279\u01DD\u0287\u01DD\u026Foss\u01DD\u0279\u0287S",
|
||||||
|
|
|
@ -375,6 +375,7 @@
|
||||||
"block.create.spout": "Spout",
|
"block.create.spout": "Spout",
|
||||||
"block.create.spruce_window": "Spruce Window",
|
"block.create.spruce_window": "Spruce Window",
|
||||||
"block.create.spruce_window_pane": "Spruce Window Pane",
|
"block.create.spruce_window_pane": "Spruce Window Pane",
|
||||||
|
"block.create.sticker": "Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Sticky Mechanical Piston",
|
"block.create.sticky_mechanical_piston": "Sticky Mechanical Piston",
|
||||||
"block.create.stockpile_switch": "Stockpile Switch",
|
"block.create.stockpile_switch": "Stockpile Switch",
|
||||||
"block.create.stressometer": "Stressometer",
|
"block.create.stressometer": "Stressometer",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 973",
|
"_": "Missing Localizations: 974",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "UNLOCALIZED: Spout",
|
"block.create.spout": "UNLOCALIZED: Spout",
|
||||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||||
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Klebriger Mechanischer Kolben",
|
"block.create.sticky_mechanical_piston": "Klebriger Mechanischer Kolben",
|
||||||
"block.create.stockpile_switch": "Vorratssensor",
|
"block.create.stockpile_switch": "Vorratssensor",
|
||||||
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 15",
|
"_": "Missing Localizations: 16",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "Surtidor",
|
"block.create.spout": "Surtidor",
|
||||||
"block.create.spruce_window": "Ventana de abeto",
|
"block.create.spruce_window": "Ventana de abeto",
|
||||||
"block.create.spruce_window_pane": "Panel de ventana de abeto",
|
"block.create.spruce_window_pane": "Panel de ventana de abeto",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Pistón mecánico pegajoso",
|
"block.create.sticky_mechanical_piston": "Pistón mecánico pegajoso",
|
||||||
"block.create.stockpile_switch": "Interruptor de acopio",
|
"block.create.stockpile_switch": "Interruptor de acopio",
|
||||||
"block.create.stressometer": "Estresómetro",
|
"block.create.stressometer": "Estresómetro",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 903",
|
"_": "Missing Localizations: 904",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "Canaleta",
|
"block.create.spout": "Canaleta",
|
||||||
"block.create.spruce_window": "Ventana de Abeto",
|
"block.create.spruce_window": "Ventana de Abeto",
|
||||||
"block.create.spruce_window_pane": "Panel de Ventana de Abeto",
|
"block.create.spruce_window_pane": "Panel de Ventana de Abeto",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Pistón Mecánico Pegajoso",
|
"block.create.sticky_mechanical_piston": "Pistón Mecánico Pegajoso",
|
||||||
"block.create.stockpile_switch": "Interruptor de Pila",
|
"block.create.stockpile_switch": "Interruptor de Pila",
|
||||||
"block.create.stressometer": "Estresómetro",
|
"block.create.stressometer": "Estresómetro",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 685",
|
"_": "Missing Localizations: 686",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "UNLOCALIZED: Spout",
|
"block.create.spout": "UNLOCALIZED: Spout",
|
||||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||||
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Piston mécanique collant",
|
"block.create.sticky_mechanical_piston": "Piston mécanique collant",
|
||||||
"block.create.stockpile_switch": "Détecteur de stockage",
|
"block.create.stockpile_switch": "Détecteur de stockage",
|
||||||
"block.create.stressometer": "Stressomètre",
|
"block.create.stressometer": "Stressomètre",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 20",
|
"_": "Missing Localizations: 21",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "Spruzzo",
|
"block.create.spout": "Spruzzo",
|
||||||
"block.create.spruce_window": "Finestra di abete",
|
"block.create.spruce_window": "Finestra di abete",
|
||||||
"block.create.spruce_window_pane": "Pannello di finestra di abete",
|
"block.create.spruce_window_pane": "Pannello di finestra di abete",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Pistone meccanico appiccicoso",
|
"block.create.sticky_mechanical_piston": "Pistone meccanico appiccicoso",
|
||||||
"block.create.stockpile_switch": "Interruttore accumulatore",
|
"block.create.stockpile_switch": "Interruttore accumulatore",
|
||||||
"block.create.stressometer": "Stressometro",
|
"block.create.stressometer": "Stressometro",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 27",
|
"_": "Missing Localizations: 28",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "アイテム注液口",
|
"block.create.spout": "アイテム注液口",
|
||||||
"block.create.spruce_window": "マツの窓",
|
"block.create.spruce_window": "マツの窓",
|
||||||
"block.create.spruce_window_pane": "マツの窓パネル",
|
"block.create.spruce_window_pane": "マツの窓パネル",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "粘着メカニカルピストン",
|
"block.create.sticky_mechanical_piston": "粘着メカニカルピストン",
|
||||||
"block.create.stockpile_switch": "在庫スイッチ",
|
"block.create.stockpile_switch": "在庫スイッチ",
|
||||||
"block.create.stressometer": "応力メーター",
|
"block.create.stressometer": "応力メーター",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 74",
|
"_": "Missing Localizations: 75",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "수도꼭지",
|
"block.create.spout": "수도꼭지",
|
||||||
"block.create.spruce_window": "가문비나무 유리창",
|
"block.create.spruce_window": "가문비나무 유리창",
|
||||||
"block.create.spruce_window_pane": "가문비나무 유리판",
|
"block.create.spruce_window_pane": "가문비나무 유리판",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "끈끈이 기계식 피스톤",
|
"block.create.sticky_mechanical_piston": "끈끈이 기계식 피스톤",
|
||||||
"block.create.stockpile_switch": "수량 스위치",
|
"block.create.stockpile_switch": "수량 스위치",
|
||||||
"block.create.stressometer": "피로도 계측기",
|
"block.create.stressometer": "피로도 계측기",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1172",
|
"_": "Missing Localizations: 1173",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "UNLOCALIZED: Spout",
|
"block.create.spout": "UNLOCALIZED: Spout",
|
||||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||||
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Mechanische Zuiger",
|
"block.create.sticky_mechanical_piston": "Mechanische Zuiger",
|
||||||
"block.create.stockpile_switch": "Voorraad Schakelaar",
|
"block.create.stockpile_switch": "Voorraad Schakelaar",
|
||||||
"block.create.stressometer": "Stressmeter",
|
"block.create.stressometer": "Stressmeter",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1238",
|
"_": "Missing Localizations: 1239",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "UNLOCALIZED: Spout",
|
"block.create.spout": "UNLOCALIZED: Spout",
|
||||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||||
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento",
|
"block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento",
|
||||||
"block.create.stockpile_switch": "Disjuntor de Armazenamento",
|
"block.create.stockpile_switch": "Disjuntor de Armazenamento",
|
||||||
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 24",
|
"_": "Missing Localizations: 25",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "Дозатор",
|
"block.create.spout": "Дозатор",
|
||||||
"block.create.spruce_window": "Еловое окно",
|
"block.create.spruce_window": "Еловое окно",
|
||||||
"block.create.spruce_window_pane": "Панель из елового окна",
|
"block.create.spruce_window_pane": "Панель из елового окна",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "Липкий механический поршень",
|
"block.create.sticky_mechanical_piston": "Липкий механический поршень",
|
||||||
"block.create.stockpile_switch": "Настраиваемый компаратор",
|
"block.create.stockpile_switch": "Настраиваемый компаратор",
|
||||||
"block.create.stressometer": "Динамометр",
|
"block.create.stressometer": "Динамометр",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 22",
|
"_": "Missing Localizations: 23",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "注液器",
|
"block.create.spout": "注液器",
|
||||||
"block.create.spruce_window": "云杉窗户",
|
"block.create.spruce_window": "云杉窗户",
|
||||||
"block.create.spruce_window_pane": "云杉窗户板",
|
"block.create.spruce_window_pane": "云杉窗户板",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "黏性动力活塞",
|
"block.create.sticky_mechanical_piston": "黏性动力活塞",
|
||||||
"block.create.stockpile_switch": "存量转换器",
|
"block.create.stockpile_switch": "存量转换器",
|
||||||
"block.create.stressometer": "应力表",
|
"block.create.stressometer": "应力表",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 27",
|
"_": "Missing Localizations: 28",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -376,6 +376,7 @@
|
||||||
"block.create.spout": "液體灌注器",
|
"block.create.spout": "液體灌注器",
|
||||||
"block.create.spruce_window": "雲杉木窗戶",
|
"block.create.spruce_window": "雲杉木窗戶",
|
||||||
"block.create.spruce_window_pane": "雲杉木窗戶片",
|
"block.create.spruce_window_pane": "雲杉木窗戶片",
|
||||||
|
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||||
"block.create.sticky_mechanical_piston": "黏性機械活塞",
|
"block.create.sticky_mechanical_piston": "黏性機械活塞",
|
||||||
"block.create.stockpile_switch": "存量檢測器",
|
"block.create.stockpile_switch": "存量檢測器",
|
||||||
"block.create.stressometer": "動能錶",
|
"block.create.stressometer": "動能錶",
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/sticker/item"
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"create:crafting/kinetics/sticker"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"criteria": {
|
||||||
|
"has_item": {
|
||||||
|
"trigger": "minecraft:inventory_changed",
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"item": "create:andesite_alloy"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"trigger": "minecraft:recipe_unlocked",
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "create:crafting/kinetics/sticker"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_item",
|
||||||
|
"has_the_recipe"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "create:sticker"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"ISI",
|
||||||
|
"CRC"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"I": {
|
||||||
|
"item": "create:andesite_alloy"
|
||||||
|
},
|
||||||
|
"C": {
|
||||||
|
"tag": "forge:cobblestone"
|
||||||
|
},
|
||||||
|
"R": {
|
||||||
|
"tag": "forge:dusts/redstone"
|
||||||
|
},
|
||||||
|
"S": {
|
||||||
|
"tag": "forge:slimeballs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "create:sticker"
|
||||||
|
}
|
||||||
|
}
|
|
@ -93,6 +93,8 @@ public class AllBlockPartials {
|
||||||
|
|
||||||
SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"),
|
SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"),
|
||||||
SYMMETRY_TRIPLEPLANE = get("symmetry_effect/tripleplane"),
|
SYMMETRY_TRIPLEPLANE = get("symmetry_effect/tripleplane"),
|
||||||
|
|
||||||
|
STICKER_HEAD = get("sticker/head"),
|
||||||
|
|
||||||
PORTABLE_STORAGE_INTERFACE_MIDDLE = get("portable_storage_interface/block_middle"),
|
PORTABLE_STORAGE_INTERFACE_MIDDLE = get("portable_storage_interface/block_middle"),
|
||||||
PORTABLE_STORAGE_INTERFACE_MIDDLE_POWERED = get("portable_storage_interface/block_middle_powered"),
|
PORTABLE_STORAGE_INTERFACE_MIDDLE_POWERED = get("portable_storage_interface/block_middle_powered"),
|
||||||
|
|
|
@ -54,6 +54,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock.ChassisCTBehaviour;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock.ChassisCTBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.RadialChassisBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.RadialChassisBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.StickerBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock.MinecartAnchorBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock.MinecartAnchorBlock;
|
||||||
|
@ -846,6 +847,15 @@ public class AllBlocks {
|
||||||
.build()
|
.build()
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
public static final BlockEntry<StickerBlock> STICKER = REGISTRATE.block("sticker", StickerBlock::new)
|
||||||
|
.initialProperties(SharedProperties::stone)
|
||||||
|
.properties(Block.Properties::nonOpaque)
|
||||||
|
.addLayer(() -> RenderType::getCutoutMipped)
|
||||||
|
.blockstate((c, p) -> p.directionalBlock(c.get(), AssetLookup.forPowered(c, p)))
|
||||||
|
.item()
|
||||||
|
.transform(customItemModel())
|
||||||
|
.register();
|
||||||
|
|
||||||
public static final BlockEntry<DrillBlock> MECHANICAL_DRILL = REGISTRATE.block("mechanical_drill", DrillBlock::new)
|
public static final BlockEntry<DrillBlock> MECHANICAL_DRILL = REGISTRATE.block("mechanical_drill", DrillBlock::new)
|
||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
.blockstate(BlockStateGen.directionalBlockProvider(true))
|
.blockstate(BlockStateGen.directionalBlockProvider(true))
|
||||||
|
|
|
@ -51,6 +51,8 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.WindmillBearingTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.WindmillBearingTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.StickerRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.StickerTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionRenderer;
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity;
|
||||||
|
@ -398,6 +400,12 @@ public class AllTileEntities {
|
||||||
.validBlocks(AllBlocks.RADIAL_CHASSIS, AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS)
|
.validBlocks(AllBlocks.RADIAL_CHASSIS, AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS)
|
||||||
// .renderer(() -> renderer)
|
// .renderer(() -> renderer)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
public static final TileEntityEntry<StickerTileEntity> STICKER = Create.registrate()
|
||||||
|
.tileEntity("sticker", StickerTileEntity::new)
|
||||||
|
.validBlocks(AllBlocks.STICKER)
|
||||||
|
.renderer(() -> StickerRenderer::new)
|
||||||
|
.register();
|
||||||
|
|
||||||
public static final TileEntityEntry<DrillTileEntity> DRILL = Create.registrate()
|
public static final TileEntityEntry<DrillTileEntity> DRILL = Create.registrate()
|
||||||
.tileEntity("drill", DrillTileEntity::new)
|
.tileEntity("drill", DrillTileEntity::new)
|
||||||
|
|
|
@ -12,7 +12,7 @@ import net.minecraft.util.Direction.Axis;
|
||||||
public abstract class AnimatedKinetics implements IDrawable {
|
public abstract class AnimatedKinetics implements IDrawable {
|
||||||
|
|
||||||
public static float getCurrentAngle() {
|
public static float getCurrentAngle() {
|
||||||
return ((AnimationTickHolder.getRenderTick()) * 4f) % 360;
|
return ((AnimationTickHolder.getRenderTime()) * 4f) % 360;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected BlockState shaft(Axis axis) {
|
protected BlockState shaft(Axis axis) {
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class AnimatedMixer extends AnimatedKinetics {
|
||||||
.scale(scale)
|
.scale(scale)
|
||||||
.render();
|
.render();
|
||||||
|
|
||||||
float animation = ((MathHelper.sin(AnimationTickHolder.getRenderTick() / 32f) + 1) / 5) + .5f;
|
float animation = ((MathHelper.sin(AnimationTickHolder.getRenderTime() / 32f) + 1) / 5) + .5f;
|
||||||
|
|
||||||
GuiGameElement.of(AllBlockPartials.MECHANICAL_MIXER_POLE)
|
GuiGameElement.of(AllBlockPartials.MECHANICAL_MIXER_POLE)
|
||||||
.atLocal(0, animation, 0)
|
.atLocal(0, animation, 0)
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class AnimatedPress extends AnimatedKinetics {
|
||||||
}
|
}
|
||||||
|
|
||||||
private float getAnimatedHeadOffset() {
|
private float getAnimatedHeadOffset() {
|
||||||
float cycle = (AnimationTickHolder.getRenderTick()) % 30;
|
float cycle = (AnimationTickHolder.getRenderTime()) % 30;
|
||||||
if (cycle < 10) {
|
if (cycle < 10) {
|
||||||
float progress = cycle / 10;
|
float progress = cycle / 10;
|
||||||
return -(progress * progress * progress);
|
return -(progress * progress * progress);
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class AnimatedSpout extends AnimatedKinetics {
|
||||||
.scale(scale)
|
.scale(scale)
|
||||||
.render();
|
.render();
|
||||||
|
|
||||||
float cycle = AnimationTickHolder.getRenderTick() % 30;
|
float cycle = AnimationTickHolder.getRenderTime() % 30;
|
||||||
float squeeze = cycle < 20 ? MathHelper.sin((float) (cycle / 20f * Math.PI)) : 0;
|
float squeeze = cycle < 20 ? MathHelper.sin((float) (cycle / 20f * Math.PI)) : 0;
|
||||||
squeeze *= 20;
|
squeeze *= 20;
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float getAngleForTe(KineticTileEntity te, final BlockPos pos, Axis axis) {
|
public static float getAngleForTe(KineticTileEntity te, final BlockPos pos, Axis axis) {
|
||||||
float time = AnimationTickHolder.getRenderTick();
|
float time = AnimationTickHolder.getRenderTime();
|
||||||
float offset = getRotationOffsetForPosition(te, pos, axis);
|
float offset = getRotationOffsetForPosition(te, pos, axis);
|
||||||
float angle = ((time * te.getSpeed() * 3f / 10 + offset) % 360) / 180 * (float) Math.PI;
|
float angle = ((time * te.getSpeed() * 3f / 10 + offset) % 360) / 180 * (float) Math.PI;
|
||||||
return angle;
|
return angle;
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class DrillRenderer extends KineticTileEntityRenderer {
|
||||||
float speed = (float) (context.contraption.stalled
|
float speed = (float) (context.contraption.stalled
|
||||||
|| !VecHelper.isVecPointingTowards(context.relativeMotion, state.get(FACING)
|
|| !VecHelper.isVecPointingTowards(context.relativeMotion, state.get(FACING)
|
||||||
.getOpposite()) ? context.getAnimationSpeed() : 0);
|
.getOpposite()) ? context.getAnimationSpeed() : 0);
|
||||||
float time = AnimationTickHolder.getRenderTick() / 20;
|
float time = AnimationTickHolder.getRenderTime() / 20;
|
||||||
float angle = (float) (((time * speed) % 360));
|
float angle = (float) (((time * speed) % 360));
|
||||||
|
|
||||||
for (MatrixStack m : matrixStacks)
|
for (MatrixStack m : matrixStacks)
|
||||||
|
|
|
@ -70,7 +70,7 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
|
||||||
|
|
||||||
if (context.contraption.stalled)
|
if (context.contraption.stalled)
|
||||||
speed = 0;
|
speed = 0;
|
||||||
float time = AnimationTickHolder.getRenderTick() / 20;
|
float time = AnimationTickHolder.getRenderTime() / 20;
|
||||||
float angle = (time * speed) % 360;
|
float angle = (time * speed) % 360;
|
||||||
float originOffset = 1 / 16f;
|
float originOffset = 1 / 16f;
|
||||||
Vec3d rotOffset = new Vec3d(0, -2 * originOffset, originOffset).add(VecHelper.getCenterOf(BlockPos.ZERO));
|
Vec3d rotOffset = new Vec3d(0, -2 * originOffset, originOffset).add(VecHelper.getCenterOf(BlockPos.ZERO));
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
||||||
ms.translate(0, isBlockItem ? 9 / 16f : 11 / 16f, 0);
|
ms.translate(0, isBlockItem ? 9 / 16f : 11 / 16f, 0);
|
||||||
ms.scale(scale, scale, scale);
|
ms.scale(scale, scale, scale);
|
||||||
transform = TransformType.GROUND;
|
transform = TransformType.GROUND;
|
||||||
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(AnimationTickHolder.getRenderTick()));
|
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(AnimationTickHolder.getRenderTime()));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
float scale = punching ? .75f : isBlockItem ? .75f - 1 / 64f : .5f;
|
float scale = punching ? .75f : isBlockItem ? .75f - 1 / 64f : .5f;
|
||||||
|
@ -176,7 +176,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
||||||
|
|
||||||
double factor;
|
double factor;
|
||||||
if (context.contraption.stalled || context.position == null || context.data.contains("StationaryTimer")) {
|
if (context.contraption.stalled || context.position == null || context.data.contains("StationaryTimer")) {
|
||||||
factor = MathHelper.sin(AnimationTickHolder.getRenderTick() * .5f) * .25f + .25f;
|
factor = MathHelper.sin(AnimationTickHolder.getRenderTime() * .5f) * .25f + .25f;
|
||||||
} else {
|
} else {
|
||||||
Vec3d center = VecHelper.getCenterOf(new BlockPos(context.position));
|
Vec3d center = VecHelper.getCenterOf(new BlockPos(context.position));
|
||||||
double distance = context.position.distanceTo(center);
|
double distance = context.position.distanceTo(center);
|
||||||
|
|
|
@ -41,7 +41,7 @@ public class EncasedFanRenderer extends KineticTileEntityRenderer {
|
||||||
SuperByteBuffer fanInner =
|
SuperByteBuffer fanInner =
|
||||||
AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouth(te.getBlockState(), direction.getOpposite());
|
AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouth(te.getBlockState(), direction.getOpposite());
|
||||||
|
|
||||||
float time = AnimationTickHolder.getRenderTick();
|
float time = AnimationTickHolder.getRenderTime();
|
||||||
float speed = te.getSpeed() * 5;
|
float speed = te.getSpeed() * 5;
|
||||||
if (speed > 0)
|
if (speed > 0)
|
||||||
speed = MathHelper.clamp(speed, 80, 64 * 20);
|
speed = MathHelper.clamp(speed, 80, 64 * 20);
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class MechanicalMixerRenderer extends KineticTileEntityRenderer {
|
||||||
int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, pos);
|
int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, pos);
|
||||||
float renderedHeadOffset = mixer.getRenderedHeadOffset(partialTicks);
|
float renderedHeadOffset = mixer.getRenderedHeadOffset(partialTicks);
|
||||||
float speed = mixer.getRenderedHeadRotationSpeed(partialTicks);
|
float speed = mixer.getRenderedHeadRotationSpeed(partialTicks);
|
||||||
float time = AnimationTickHolder.getRenderTick();
|
float time = AnimationTickHolder.getRenderTime();
|
||||||
float angle = (float) (((time * speed * 6 / 10f) % 360) / 180 * (float) Math.PI);
|
float angle = (float) (((time * speed * 6 / 10f) % 360) / 180 * (float) Math.PI);
|
||||||
|
|
||||||
SuperByteBuffer poleRender = AllBlockPartials.MECHANICAL_MIXER_POLE.renderOn(blockState);
|
SuperByteBuffer poleRender = AllBlockPartials.MECHANICAL_MIXER_POLE.renderOn(blockState);
|
||||||
|
|
|
@ -14,6 +14,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.MechanicalBearingTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.SailBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.SailBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.StickerBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState;
|
||||||
|
@ -198,6 +199,10 @@ public class BlockMovementTraits {
|
||||||
.getAxis();
|
.getAxis();
|
||||||
if (state.getBlock() instanceof FluidTankBlock)
|
if (state.getBlock() instanceof FluidTankBlock)
|
||||||
return FluidTankConnectivityHandler.isConnected(world, pos, pos.offset(direction));
|
return FluidTankConnectivityHandler.isConnected(world, pos, pos.offset(direction));
|
||||||
|
if (AllBlocks.STICKER.has(state) && state.get(StickerBlock.EXTENDED)) {
|
||||||
|
return direction == state.get(StickerBlock.FACING)
|
||||||
|
&& !notSupportive(world.getBlockState(pos.offset(direction)), direction.getOpposite());
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,6 +236,8 @@ public class BlockMovementTraits {
|
||||||
if (AllBlocks.MECHANICAL_PISTON_HEAD.has(state))
|
if (AllBlocks.MECHANICAL_PISTON_HEAD.has(state))
|
||||||
return facing.getAxis() != state.get(BlockStateProperties.FACING)
|
return facing.getAxis() != state.get(BlockStateProperties.FACING)
|
||||||
.getAxis();
|
.getAxis();
|
||||||
|
if (AllBlocks.STICKER.has(state) && !state.get(StickerBlock.EXTENDED))
|
||||||
|
return facing == state.get(StickerBlock.FACING);
|
||||||
return isBrittle(state);
|
return isBrittle(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -21,7 +20,6 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import com.simibubi.create.foundation.utility.*;
|
|
||||||
import org.apache.commons.lang3.tuple.MutablePair;
|
import org.apache.commons.lang3.tuple.MutablePair;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
|
@ -35,6 +33,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedContraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.StabilizedContraption;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.StickerBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryPinionBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueHandler;
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueHandler;
|
||||||
|
@ -54,6 +53,12 @@ import com.simibubi.create.content.logistics.block.redstone.RedstoneContactBlock
|
||||||
import com.simibubi.create.foundation.config.AllConfigs;
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
|
import com.simibubi.create.foundation.fluid.CombinedTankWrapper;
|
||||||
import com.simibubi.create.foundation.render.backend.light.EmptyLighter;
|
import com.simibubi.create.foundation.render.backend.light.EmptyLighter;
|
||||||
|
import com.simibubi.create.foundation.utility.BlockFace;
|
||||||
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.NBTProcessors;
|
||||||
|
import com.simibubi.create.foundation.utility.UniqueLinkedList;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
|
import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld;
|
||||||
|
|
||||||
import net.minecraft.block.AbstractButtonBlock;
|
import net.minecraft.block.AbstractButtonBlock;
|
||||||
|
@ -172,7 +177,8 @@ public abstract class Contraption {
|
||||||
return contraption;
|
return contraption;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean searchMovedStructure(World world, BlockPos pos, @Nullable Direction forcedDirection) throws AssemblyException {
|
public boolean searchMovedStructure(World world, BlockPos pos, @Nullable Direction forcedDirection)
|
||||||
|
throws AssemblyException {
|
||||||
initialPassengers.clear();
|
initialPassengers.clear();
|
||||||
Queue<BlockPos> frontier = new UniqueLinkedList<>();
|
Queue<BlockPos> frontier = new UniqueLinkedList<>();
|
||||||
Set<BlockPos> visited = new HashSet<>();
|
Set<BlockPos> visited = new HashSet<>();
|
||||||
|
@ -293,6 +299,14 @@ public abstract class Contraption {
|
||||||
if (AllBlocks.GANTRY_SHAFT.has(state))
|
if (AllBlocks.GANTRY_SHAFT.has(state))
|
||||||
moveGantryShaft(world, pos, frontier, visited, state);
|
moveGantryShaft(world, pos, frontier, visited, state);
|
||||||
|
|
||||||
|
if (AllBlocks.STICKER.has(state) && state.get(StickerBlock.EXTENDED)) {
|
||||||
|
Direction offset = state.get(StickerBlock.FACING);
|
||||||
|
BlockPos attached = pos.offset(offset);
|
||||||
|
if (!visited.contains(attached)
|
||||||
|
&& !BlockMovementTraits.notSupportive(world.getBlockState(attached), offset.getOpposite()))
|
||||||
|
frontier.add(attached);
|
||||||
|
}
|
||||||
|
|
||||||
// Bearings potentially create stabilized sub-contraptions
|
// Bearings potentially create stabilized sub-contraptions
|
||||||
if (AllBlocks.MECHANICAL_BEARING.has(state))
|
if (AllBlocks.MECHANICAL_BEARING.has(state))
|
||||||
moveBearing(pos, frontier, visited, state);
|
moveBearing(pos, frontier, visited, state);
|
||||||
|
@ -348,7 +362,8 @@ public abstract class Contraption {
|
||||||
boolean brittle = BlockMovementTraits.isBrittle(blockState);
|
boolean brittle = BlockMovementTraits.isBrittle(blockState);
|
||||||
boolean canStick = !brittle && state.canStickTo(blockState) && blockState.canStickTo(state);
|
boolean canStick = !brittle && state.canStickTo(blockState) && blockState.canStickTo(state);
|
||||||
if (canStick) {
|
if (canStick) {
|
||||||
if (state.getPushReaction() == PushReaction.PUSH_ONLY || blockState.getPushReaction() == PushReaction.PUSH_ONLY) {
|
if (state.getPushReaction() == PushReaction.PUSH_ONLY
|
||||||
|
|| blockState.getPushReaction() == PushReaction.PUSH_ONLY) {
|
||||||
canStick = false;
|
canStick = false;
|
||||||
}
|
}
|
||||||
if (BlockMovementTraits.notSupportive(state, offset)) {
|
if (BlockMovementTraits.notSupportive(state, offset)) {
|
||||||
|
@ -359,7 +374,8 @@ public abstract class Contraption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wasVisited && (canStick || blockAttachedTowardsFace || faceHasGlue || (offset == forcedDirection && !BlockMovementTraits.notSupportive(state, forcedDirection))))
|
if (!wasVisited && (canStick || blockAttachedTowardsFace || faceHasGlue
|
||||||
|
|| (offset == forcedDirection && !BlockMovementTraits.notSupportive(state, forcedDirection))))
|
||||||
frontier.add(offsetPos);
|
frontier.add(offsetPos);
|
||||||
if (faceHasGlue)
|
if (faceHasGlue)
|
||||||
addGlue(superglue.get(offset));
|
addGlue(superglue.get(offset));
|
||||||
|
@ -499,7 +515,8 @@ public abstract class Contraption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean moveMechanicalPiston(World world, BlockPos pos, Queue<BlockPos> frontier, Set<BlockPos> visited, BlockState state) throws AssemblyException {
|
private boolean moveMechanicalPiston(World world, BlockPos pos, Queue<BlockPos> frontier, Set<BlockPos> visited,
|
||||||
|
BlockState state) throws AssemblyException {
|
||||||
Direction direction = state.get(MechanicalPistonBlock.FACING);
|
Direction direction = state.get(MechanicalPistonBlock.FACING);
|
||||||
PistonState pistonState = state.get(MechanicalPistonBlock.STATE);
|
PistonState pistonState = state.get(MechanicalPistonBlock.STATE);
|
||||||
if (pistonState == PistonState.MOVING)
|
if (pistonState == PistonState.MOVING)
|
||||||
|
@ -621,8 +638,9 @@ public abstract class Contraption {
|
||||||
specialRenderedTileEntities.clear();
|
specialRenderedTileEntities.clear();
|
||||||
|
|
||||||
INBT blocks = nbt.get("Blocks");
|
INBT blocks = nbt.get("Blocks");
|
||||||
//used to differentiate between the 'old' and the paletted serialization
|
// used to differentiate between the 'old' and the paletted serialization
|
||||||
boolean usePalettedDeserialization = blocks != null && blocks.getId() == 10 && ((CompoundNBT) blocks).contains("Palette");
|
boolean usePalettedDeserialization =
|
||||||
|
blocks != null && blocks.getId() == 10 && ((CompoundNBT) blocks).contains("Palette");
|
||||||
readBlocksCompound(blocks, world, usePalettedDeserialization);
|
readBlocksCompound(blocks, world, usePalettedDeserialization);
|
||||||
|
|
||||||
actors.clear();
|
actors.clear();
|
||||||
|
@ -713,7 +731,8 @@ public abstract class Contraption {
|
||||||
for (Pair<BlockPos, Direction> glueEntry : superglue) {
|
for (Pair<BlockPos, Direction> glueEntry : superglue) {
|
||||||
CompoundNBT c = new CompoundNBT();
|
CompoundNBT c = new CompoundNBT();
|
||||||
c.put("Pos", NBTUtil.writeBlockPos(glueEntry.getKey()));
|
c.put("Pos", NBTUtil.writeBlockPos(glueEntry.getKey()));
|
||||||
c.putByte("Direction", (byte) glueEntry.getValue().getIndex());
|
c.putByte("Direction", (byte) glueEntry.getValue()
|
||||||
|
.getIndex());
|
||||||
superglueNBT.add(c);
|
superglueNBT.add(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -773,7 +792,9 @@ public abstract class Contraption {
|
||||||
|
|
||||||
private CompoundNBT writeBlocksCompound() {
|
private CompoundNBT writeBlocksCompound() {
|
||||||
CompoundNBT compound = new CompoundNBT();
|
CompoundNBT compound = new CompoundNBT();
|
||||||
PaletteHashMap<BlockState> palette = new PaletteHashMap<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {throw new IllegalStateException("Palette Map index exceeded maximum");}, NBTUtil::readBlockState, NBTUtil::writeBlockState);
|
PaletteHashMap<BlockState> palette = new PaletteHashMap<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {
|
||||||
|
throw new IllegalStateException("Palette Map index exceeded maximum");
|
||||||
|
}, NBTUtil::readBlockState, NBTUtil::writeBlockState);
|
||||||
ListNBT blockList = new ListNBT();
|
ListNBT blockList = new ListNBT();
|
||||||
|
|
||||||
for (BlockInfo block : this.blocks.values()) {
|
for (BlockInfo block : this.blocks.values()) {
|
||||||
|
@ -799,7 +820,9 @@ public abstract class Contraption {
|
||||||
ListNBT blockList;
|
ListNBT blockList;
|
||||||
if (usePalettedDeserialization) {
|
if (usePalettedDeserialization) {
|
||||||
CompoundNBT c = ((CompoundNBT) compound);
|
CompoundNBT c = ((CompoundNBT) compound);
|
||||||
palette = new PaletteHashMap<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {throw new IllegalStateException("Palette Map index exceeded maximum");}, NBTUtil::readBlockState, NBTUtil::writeBlockState);
|
palette = new PaletteHashMap<>(GameData.getBlockStateIDMap(), 16, (i, s) -> {
|
||||||
|
throw new IllegalStateException("Palette Map index exceeded maximum");
|
||||||
|
}, NBTUtil::readBlockState, NBTUtil::writeBlockState);
|
||||||
palette.read(c.getList("Palette", 10));
|
palette.read(c.getList("Palette", 10));
|
||||||
|
|
||||||
blockList = c.getList("BlockList", 10);
|
blockList = c.getList("BlockList", 10);
|
||||||
|
@ -857,19 +880,15 @@ public abstract class Contraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BlockInfo readBlockInfo(CompoundNBT blockListEntry, PaletteHashMap<BlockState> palette) {
|
private static BlockInfo readBlockInfo(CompoundNBT blockListEntry, PaletteHashMap<BlockState> palette) {
|
||||||
return new BlockInfo(
|
return new BlockInfo(BlockPos.fromLong(blockListEntry.getLong("Pos")),
|
||||||
BlockPos.fromLong(blockListEntry.getLong("Pos")),
|
Objects.requireNonNull(palette.get(blockListEntry.getInt("State"))),
|
||||||
Objects.requireNonNull(palette.get(blockListEntry.getInt("State"))),
|
blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null);
|
||||||
blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BlockInfo legacyReadBlockInfo(CompoundNBT blockListEntry) {
|
private static BlockInfo legacyReadBlockInfo(CompoundNBT blockListEntry) {
|
||||||
return new BlockInfo(
|
return new BlockInfo(NBTUtil.readBlockPos(blockListEntry.getCompound("Pos")),
|
||||||
NBTUtil.readBlockPos(blockListEntry.getCompound("Pos")),
|
NBTUtil.readBlockState(blockListEntry.getCompound("Block")),
|
||||||
NBTUtil.readBlockState(blockListEntry.getCompound("Block")),
|
blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null);
|
||||||
blockListEntry.contains("Data") ? blockListEntry.getCompound("Data") : null
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeBlocksFromWorld(World world, BlockPos offset) {
|
public void removeBlocksFromWorld(World world, BlockPos offset) {
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class ContraptionEntityRenderer<C extends AbstractContraptionEntity> exte
|
||||||
super.render(entity, yaw, partialTicks, ms, buffers, overlay);
|
super.render(entity, yaw, partialTicks, ms, buffers, overlay);
|
||||||
|
|
||||||
// Keep a copy of the transforms in order to determine correct lighting
|
// Keep a copy of the transforms in order to determine correct lighting
|
||||||
MatrixStack msLocal = translateTo(entity, AnimationTickHolder.getRenderTick());
|
MatrixStack msLocal = translateTo(entity, AnimationTickHolder.getPartialTicks());
|
||||||
MatrixStack[] matrixStacks = new MatrixStack[] { ms, msLocal };
|
MatrixStack[] matrixStacks = new MatrixStack[] { ms, msLocal };
|
||||||
|
|
||||||
ms.push();
|
ms.push();
|
||||||
|
|
|
@ -0,0 +1,162 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.chassis;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.AllTileEntities;
|
||||||
|
import com.simibubi.create.foundation.block.ITE;
|
||||||
|
import com.simibubi.create.foundation.block.ProperDirectionalBlock;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.LivingEntity;
|
||||||
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
import net.minecraft.particles.BlockParticleData;
|
||||||
|
import net.minecraft.particles.ParticleTypes;
|
||||||
|
import net.minecraft.state.BooleanProperty;
|
||||||
|
import net.minecraft.state.StateContainer.Builder;
|
||||||
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraft.world.IWorldReader;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.server.ServerWorld;
|
||||||
|
|
||||||
|
public class StickerBlock extends ProperDirectionalBlock implements ITE<StickerTileEntity> {
|
||||||
|
|
||||||
|
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
|
||||||
|
public static final BooleanProperty EXTENDED = BlockStateProperties.EXTENDED;
|
||||||
|
|
||||||
|
public StickerBlock(Properties p_i48415_1_) {
|
||||||
|
super(p_i48415_1_);
|
||||||
|
setDefaultState(getDefaultState().with(POWERED, false)
|
||||||
|
.with(EXTENDED, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForPlacement(BlockItemUseContext context) {
|
||||||
|
Direction nearestLookingDirection = context.getNearestLookingDirection();
|
||||||
|
boolean shouldPower = context.getWorld()
|
||||||
|
.isBlockPowered(context.getPos());
|
||||||
|
Direction facing = context.getPlayer() != null && context.getPlayer()
|
||||||
|
.isSneaking() ? nearestLookingDirection : nearestLookingDirection.getOpposite();
|
||||||
|
|
||||||
|
return getDefaultState().with(FACING, facing)
|
||||||
|
.with(POWERED, shouldPower);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void fillStateContainer(Builder<Block, BlockState> builder) {
|
||||||
|
super.fillStateContainer(builder.add(POWERED, EXTENDED));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos,
|
||||||
|
boolean isMoving) {
|
||||||
|
if (worldIn.isRemote)
|
||||||
|
return;
|
||||||
|
|
||||||
|
boolean previouslyPowered = state.get(POWERED);
|
||||||
|
if (previouslyPowered != worldIn.isBlockPowered(pos)) {
|
||||||
|
state = state.cycle(POWERED);
|
||||||
|
if (state.get(POWERED))
|
||||||
|
state = state.cycle(EXTENDED);
|
||||||
|
worldIn.setBlockState(pos, state, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasTileEntity(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldCheckWeakPower(BlockState state, IWorldReader world, BlockPos pos, Direction side) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||||
|
return AllTileEntities.STICKER.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<StickerTileEntity> getTileEntityClass() {
|
||||||
|
return StickerTileEntity.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Slime block stuff
|
||||||
|
|
||||||
|
private boolean isUprightSticker(IBlockReader world, BlockPos pos) {
|
||||||
|
BlockState blockState = world.getBlockState(pos);
|
||||||
|
return AllBlocks.STICKER.has(blockState) && blockState.get(FACING) == Direction.UP;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFallenUpon(World p_180658_1_, BlockPos p_180658_2_, Entity p_180658_3_, float p_180658_4_) {
|
||||||
|
if (!isUprightSticker(p_180658_1_, p_180658_2_) || p_180658_3_.bypassesLandingEffects()) {
|
||||||
|
super.onFallenUpon(p_180658_1_, p_180658_2_, p_180658_3_, p_180658_4_);
|
||||||
|
} else {
|
||||||
|
p_180658_3_.handleFallDamage(p_180658_4_, 0.0F);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLanded(IBlockReader p_176216_1_, Entity p_176216_2_) {
|
||||||
|
if (!isUprightSticker(p_176216_1_, p_176216_2_.getPosition()
|
||||||
|
.down()) || p_176216_2_.bypassesLandingEffects()) {
|
||||||
|
super.onLanded(p_176216_1_, p_176216_2_);
|
||||||
|
} else {
|
||||||
|
this.func_226946_a_(p_176216_2_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void func_226946_a_(Entity p_226946_1_) {
|
||||||
|
Vec3d vec3d = p_226946_1_.getMotion();
|
||||||
|
if (vec3d.y < 0.0D) {
|
||||||
|
double d0 = p_226946_1_ instanceof LivingEntity ? 1.0D : 0.8D;
|
||||||
|
p_226946_1_.setMotion(vec3d.x, -vec3d.y * d0, vec3d.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEntityWalk(World p_176199_1_, BlockPos p_176199_2_, Entity p_176199_3_) {
|
||||||
|
double d0 = Math.abs(p_176199_3_.getMotion().y);
|
||||||
|
if (d0 < 0.1D && !p_176199_3_.bypassesSteppingEffects() && isUprightSticker(p_176199_1_, p_176199_2_)) {
|
||||||
|
double d1 = 0.4D + d0 * 0.2D;
|
||||||
|
p_176199_3_.setMotion(p_176199_3_.getMotion()
|
||||||
|
.mul(d1, 1.0D, d1));
|
||||||
|
}
|
||||||
|
super.onEntityWalk(p_176199_1_, p_176199_2_, p_176199_3_);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addLandingEffects(BlockState state1, ServerWorld worldserver, BlockPos pos, BlockState state2,
|
||||||
|
LivingEntity entity, int numberOfParticles) {
|
||||||
|
if (isUprightSticker(worldserver, pos)) {
|
||||||
|
worldserver.spawnParticle(new BlockParticleData(ParticleTypes.BLOCK, Blocks.SLIME_BLOCK.getDefaultState()),
|
||||||
|
entity.getX(), entity.getY(), entity.getZ(), numberOfParticles, 0.0D, 0.0D, 0.0D, (double) 0.15F);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.addLandingEffects(state1, worldserver, pos, state2, entity, numberOfParticles);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addRunningEffects(BlockState state, World world, BlockPos pos, Entity entity) {
|
||||||
|
if (state.get(FACING) == Direction.UP) {
|
||||||
|
Vec3d vec3d = entity.getMotion();
|
||||||
|
world.addParticle(
|
||||||
|
new BlockParticleData(ParticleTypes.BLOCK, Blocks.SLIME_BLOCK.getDefaultState()).setPos(pos),
|
||||||
|
entity.getX() + ((double) world.rand.nextFloat() - 0.5D) * (double) entity.getWidth(),
|
||||||
|
entity.getY() + 0.1D,
|
||||||
|
entity.getZ() + ((double) world.rand.nextFloat() - 0.5D) * (double) entity.getWidth(), vec3d.x * -4.0D,
|
||||||
|
1.5D, vec3d.z * -4.0D);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.addRunningEffects(state, world, pos, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.chassis;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||||
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
|
||||||
|
public class StickerRenderer extends SafeTileEntityRenderer<StickerTileEntity> {
|
||||||
|
|
||||||
|
public StickerRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||||
|
super(dispatcher);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderSafe(StickerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||||
|
int light, int overlay) {
|
||||||
|
BlockState state = te.getBlockState();
|
||||||
|
SuperByteBuffer head = AllBlockPartials.STICKER_HEAD.renderOn(state);
|
||||||
|
float offset = te.piston.getValue(AnimationTickHolder.getPartialTicks());
|
||||||
|
|
||||||
|
if (te.getWorld() != Minecraft.getInstance().world)
|
||||||
|
offset = state.get(StickerBlock.EXTENDED) ? 1 : 0;
|
||||||
|
|
||||||
|
Direction facing = state.get(StickerBlock.FACING);
|
||||||
|
ms.push();
|
||||||
|
MatrixStacker.of(ms)
|
||||||
|
.nudge(te.hashCode())
|
||||||
|
.centre()
|
||||||
|
.rotateY(AngleHelper.horizontalAngle(facing))
|
||||||
|
.rotateX(AngleHelper.verticalAngle(facing) + 90)
|
||||||
|
.unCentre();
|
||||||
|
ms.translate(0, (offset * offset) * 4 / 16f, 0);
|
||||||
|
head.light(light)
|
||||||
|
.renderInto(ms, buffer.getBuffer(RenderType.getSolid()));
|
||||||
|
ms.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.chassis;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.AllSoundEvents;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueItem;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||||
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
|
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||||
|
import com.simibubi.create.foundation.utility.LerpedFloat.Chaser;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.SoundCategory;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
|
public class StickerTileEntity extends SmartTileEntity {
|
||||||
|
|
||||||
|
LerpedFloat piston;
|
||||||
|
boolean update;
|
||||||
|
|
||||||
|
public StickerTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||||
|
super(tileEntityTypeIn);
|
||||||
|
piston = LerpedFloat.linear();
|
||||||
|
update = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addBehaviours(List<TileEntityBehaviour> behaviours) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
super.initialize();
|
||||||
|
if (!world.isRemote)
|
||||||
|
return;
|
||||||
|
piston.startWithValue(isBlockStateExtended() ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBlockStateExtended() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
boolean extended = AllBlocks.STICKER.has(blockState) && blockState.get(StickerBlock.EXTENDED);
|
||||||
|
return extended;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
super.tick();
|
||||||
|
if (!world.isRemote)
|
||||||
|
return;
|
||||||
|
piston.tickChaser();
|
||||||
|
|
||||||
|
if (isAttachedToBlock() && piston.getValue(0) != piston.getValue() && piston.getValue() == 1) {
|
||||||
|
SuperGlueItem.spawnParticles(world, pos, getBlockState().get(StickerBlock.FACING), true);
|
||||||
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> playSound(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!update)
|
||||||
|
return;
|
||||||
|
update = false;
|
||||||
|
int target = isBlockStateExtended() ? 1 : 0;
|
||||||
|
if (isAttachedToBlock() && target == 0 && piston.getChaseTarget() == 1)
|
||||||
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> playSound(false));
|
||||||
|
piston.chase(target, .4f, Chaser.LINEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAttachedToBlock() {
|
||||||
|
BlockState blockState = getBlockState();
|
||||||
|
if (!AllBlocks.STICKER.has(blockState))
|
||||||
|
return false;
|
||||||
|
Direction direction = blockState.get(StickerBlock.FACING);
|
||||||
|
return SuperGlueEntity.isValidFace(world, pos.offset(direction), direction.getOpposite());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void read(CompoundNBT compound, boolean clientPacket) {
|
||||||
|
super.read(compound, clientPacket);
|
||||||
|
if (clientPacket)
|
||||||
|
update = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public void playSound(boolean attach) {
|
||||||
|
world.playSound(Minecraft.getInstance().player, pos, AllSoundEvents.SLIME_ADDED.get(), SoundCategory.BLOCKS,
|
||||||
|
0.35F, attach ? 0.75F : 0.2f);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -72,7 +72,7 @@ public class GantryPinionRenderer extends KineticTileEntityRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float getAngleForTe(KineticTileEntity te, final BlockPos pos, Axis axis) {
|
public static float getAngleForTe(KineticTileEntity te, final BlockPos pos, Axis axis) {
|
||||||
float time = AnimationTickHolder.getRenderTick();
|
float time = AnimationTickHolder.getRenderTime();
|
||||||
float offset = getRotationOffsetForPosition(te, pos, axis);
|
float offset = getRotationOffsetForPosition(te, pos, axis);
|
||||||
return ((time * te.getSpeed() * 3f / 20 + offset) % 360) / 180 * (float) Math.PI;
|
return ((time * te.getSpeed() * 3f / 20 + offset) % 360) / 180 * (float) Math.PI;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ public class BasinRenderer extends SmartTileEntityRenderer<BasinTileEntity> {
|
||||||
|
|
||||||
if (fluidLevel > 0) {
|
if (fluidLevel > 0) {
|
||||||
ms.translate(0,
|
ms.translate(0,
|
||||||
(MathHelper.sin(AnimationTickHolder.getRenderTick() / 12f + anglePartition * itemCount) + 1.5f) * 1
|
(MathHelper.sin(AnimationTickHolder.getRenderTime() / 12f + anglePartition * itemCount) + 1.5f) * 1
|
||||||
/ 32f,
|
/ 32f,
|
||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
|
||||||
if (heatLevel == HeatLevel.NONE)
|
if (heatLevel == HeatLevel.NONE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
float renderTick = AnimationTickHolder.getRenderTick() + (te.hashCode() % 13) * 16f;
|
float renderTick = AnimationTickHolder.getRenderTime() + (te.hashCode() % 13) * 16f;
|
||||||
float offset = (MathHelper.sin((float) ((renderTick / 16f) % (2 * Math.PI))) + .5f) / 16f;
|
float offset = (MathHelper.sin((float) ((renderTick / 16f) % (2 * Math.PI))) + .5f) / 16f;
|
||||||
|
|
||||||
AllBlockPartials blazeModel = AllBlockPartials.BLAZES.get(heatLevel);
|
AllBlockPartials blazeModel = AllBlockPartials.BLAZES.get(heatLevel);
|
||||||
|
|
|
@ -72,7 +72,7 @@ public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> {
|
||||||
|
|
||||||
MatrixStacker msr = MatrixStacker.of(ms);
|
MatrixStacker msr = MatrixStacker.of(ms);
|
||||||
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
|
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
|
||||||
float renderTick = AnimationTickHolder.getRenderTick();
|
float renderTick = AnimationTickHolder.getRenderTime();
|
||||||
|
|
||||||
ms.push();
|
ms.push();
|
||||||
msr.centre();
|
msr.centre();
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class SplitShaftRenderer extends KineticTileEntityRenderer {
|
||||||
Block block = te.getBlockState().getBlock();
|
Block block = te.getBlockState().getBlock();
|
||||||
final Axis boxAxis = ((IRotate) block).getRotationAxis(te.getBlockState());
|
final Axis boxAxis = ((IRotate) block).getRotationAxis(te.getBlockState());
|
||||||
final BlockPos pos = te.getPos();
|
final BlockPos pos = te.getPos();
|
||||||
float time = AnimationTickHolder.getRenderTick();
|
float time = AnimationTickHolder.getRenderTime();
|
||||||
|
|
||||||
for (Direction direction : Iterate.directions) {
|
for (Direction direction : Iterate.directions) {
|
||||||
Axis axis = direction.getAxis();
|
Axis axis = direction.getAxis();
|
||||||
|
|
|
@ -30,7 +30,7 @@ public class GearboxRenderer extends KineticTileEntityRenderer {
|
||||||
|
|
||||||
final Axis boxAxis = te.getBlockState().get(BlockStateProperties.AXIS);
|
final Axis boxAxis = te.getBlockState().get(BlockStateProperties.AXIS);
|
||||||
final BlockPos pos = te.getPos();
|
final BlockPos pos = te.getPos();
|
||||||
float time = AnimationTickHolder.getRenderTick();
|
float time = AnimationTickHolder.getRenderTime();
|
||||||
|
|
||||||
for (Direction direction : Iterate.directions) {
|
for (Direction direction : Iterate.directions) {
|
||||||
final Axis axis = direction.getAxis();
|
final Axis axis = direction.getAxis();
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class WrenchItemRenderer extends CustomRenderedItemModelRenderer<WrenchMo
|
||||||
IRenderTypeBuffer buffer, int light, int overlay) {
|
IRenderTypeBuffer buffer, int light, int overlay) {
|
||||||
renderer.render(model.getBakedModel(), light);
|
renderer.render(model.getBakedModel(), light);
|
||||||
|
|
||||||
float worldTime = AnimationTickHolder.getRenderTick();
|
float worldTime = AnimationTickHolder.getRenderTime();
|
||||||
float angle = worldTime * -.5f % 360;
|
float angle = worldTime * -.5f % 360;
|
||||||
float xOffset = -1/16f;
|
float xOffset = -1/16f;
|
||||||
ms.translate(-xOffset, 0, 0);
|
ms.translate(-xOffset, 0, 0);
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class ChromaticCompoundColor implements IItemColor {
|
||||||
public int getColor(ItemStack stack, int layer) {
|
public int getColor(ItemStack stack, int layer) {
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
float pt = AnimationTickHolder.getPartialTicks();
|
float pt = AnimationTickHolder.getPartialTicks();
|
||||||
float progress = (float) ((mc.player.getYaw(pt)) / 180 * Math.PI) + (AnimationTickHolder.getRenderTick() / 10f);
|
float progress = (float) ((mc.player.getYaw(pt)) / 180 * Math.PI) + (AnimationTickHolder.getRenderTime() / 10f);
|
||||||
if (layer == 0)
|
if (layer == 0)
|
||||||
return ColorHelper.mixColors(0x6e5773, 0x6B3074, ((float) MathHelper.sin(progress) + 1) / 2);
|
return ColorHelper.mixColors(0x6e5773, 0x6B3074, ((float) MathHelper.sin(progress) + 1) / 2);
|
||||||
if (layer == 1)
|
if (layer == 1)
|
||||||
|
|
|
@ -100,7 +100,7 @@ public class SymmetryHandler {
|
||||||
|
|
||||||
float yShift = 0;
|
float yShift = 0;
|
||||||
double speed = 1 / 16d;
|
double speed = 1 / 16d;
|
||||||
yShift = MathHelper.sin((float) (AnimationTickHolder.getRenderTick() * speed)) / 5f;
|
yShift = MathHelper.sin((float) (AnimationTickHolder.getRenderTime() * speed)) / 5f;
|
||||||
|
|
||||||
IRenderTypeBuffer.Impl buffer = Minecraft.getInstance()
|
IRenderTypeBuffer.Impl buffer = Minecraft.getInstance()
|
||||||
.getBufferBuilders()
|
.getBufferBuilders()
|
||||||
|
|
|
@ -15,7 +15,7 @@ public class SymmetryWandItemRenderer extends CustomRenderedItemModelRenderer<Sy
|
||||||
@Override
|
@Override
|
||||||
protected void render(ItemStack stack, SymmetryWandModel model, PartialItemModelRenderer renderer, MatrixStack ms,
|
protected void render(ItemStack stack, SymmetryWandModel model, PartialItemModelRenderer renderer, MatrixStack ms,
|
||||||
IRenderTypeBuffer buffer, int light, int overlay) {
|
IRenderTypeBuffer buffer, int light, int overlay) {
|
||||||
float worldTime = AnimationTickHolder.getRenderTick() / 20;
|
float worldTime = AnimationTickHolder.getRenderTime() / 20;
|
||||||
int maxLight = 0xF000F0;
|
int maxLight = 0xF000F0;
|
||||||
|
|
||||||
renderer.render(model.getBakedModel(), light);
|
renderer.render(model.getBakedModel(), light);
|
||||||
|
|
|
@ -15,7 +15,7 @@ public class DeforesterItemRenderer extends CustomRenderedItemModelRenderer<Defo
|
||||||
protected void render(ItemStack stack, DeforesterModel model, PartialItemModelRenderer renderer,
|
protected void render(ItemStack stack, DeforesterModel model, PartialItemModelRenderer renderer,
|
||||||
MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) {
|
MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) {
|
||||||
int maxLight = 0xF000F0;
|
int maxLight = 0xF000F0;
|
||||||
float worldTime = AnimationTickHolder.getRenderTick();
|
float worldTime = AnimationTickHolder.getRenderTime();
|
||||||
|
|
||||||
renderer.renderSolid(model.getBakedModel(), light);
|
renderer.renderSolid(model.getBakedModel(), light);
|
||||||
renderer.renderSolidGlowing(model.getPartial("core"), maxLight);
|
renderer.renderSolidGlowing(model.getPartial("core"), maxLight);
|
||||||
|
|
|
@ -97,7 +97,7 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer<Ext
|
||||||
|
|
||||||
// cog
|
// cog
|
||||||
ms.push();
|
ms.push();
|
||||||
float angle = AnimationTickHolder.getRenderTick() * -2;
|
float angle = AnimationTickHolder.getRenderTime() * -2;
|
||||||
if (leftHand || rightHand)
|
if (leftHand || rightHand)
|
||||||
angle += 360 * animation;
|
angle += 360 * animation;
|
||||||
angle %= 360;
|
angle %= 360;
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class BlockzapperItemRenderer extends ZapperItemRenderer<BlockzapperModel
|
||||||
super.render(stack, model, renderer, ms, buffer, light, overlay);
|
super.render(stack, model, renderer, ms, buffer, light, overlay);
|
||||||
|
|
||||||
float pt = AnimationTickHolder.getPartialTicks();
|
float pt = AnimationTickHolder.getPartialTicks();
|
||||||
float worldTime = AnimationTickHolder.getRenderTick() / 20;
|
float worldTime = AnimationTickHolder.getRenderTime() / 20;
|
||||||
|
|
||||||
renderer.render(model.getBakedModel(), light);
|
renderer.render(model.getBakedModel(), light);
|
||||||
renderComponent(stack, model, Body, renderer, light);
|
renderComponent(stack, model, Body, renderer, light);
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class WorldshaperItemRenderer extends ZapperItemRenderer<WorldshaperModel
|
||||||
super.render(stack, model, renderer, ms, buffer, light, overlay);
|
super.render(stack, model, renderer, ms, buffer, light, overlay);
|
||||||
|
|
||||||
float pt = AnimationTickHolder.getPartialTicks();
|
float pt = AnimationTickHolder.getPartialTicks();
|
||||||
float worldTime = AnimationTickHolder.getRenderTick() / 20;
|
float worldTime = AnimationTickHolder.getRenderTime() / 20;
|
||||||
|
|
||||||
renderer.renderSolid(model.getBakedModel(), light);
|
renderer.renderSolid(model.getBakedModel(), light);
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class ArmRenderer extends KineticTileEntityRenderer {
|
||||||
float headAngle = arm.headAngle.get(pt);
|
float headAngle = arm.headAngle.get(pt);
|
||||||
|
|
||||||
boolean rave = arm.phase == Phase.DANCING;
|
boolean rave = arm.phase == Phase.DANCING;
|
||||||
float renderTick = AnimationTickHolder.getRenderTick() + (te.hashCode() % 64);
|
float renderTick = AnimationTickHolder.getRenderTime() + (te.hashCode() % 64);
|
||||||
if (rave) {
|
if (rave) {
|
||||||
baseAngle = (renderTick * 10) % 360;
|
baseAngle = (renderTick * 10) % 360;
|
||||||
lowerArmAngle = MathHelper.lerp((MathHelper.sin(renderTick / 4) + 1) / 2, -45, 15);
|
lowerArmAngle = MathHelper.lerp((MathHelper.sin(renderTick / 4) + 1) / 2, -45, 15);
|
||||||
|
|
|
@ -317,7 +317,7 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
||||||
.patternLine("P")
|
.patternLine("P")
|
||||||
.patternLine("A")
|
.patternLine("A")
|
||||||
.patternLine("P")),
|
.patternLine("P")),
|
||||||
|
|
||||||
GANTRY_PINION = create(AllBlocks.GANTRY_PINION).unlockedBy(I::andesiteCasing)
|
GANTRY_PINION = create(AllBlocks.GANTRY_PINION).unlockedBy(I::andesiteCasing)
|
||||||
.viaShaped(b -> b.key('B', ItemTags.PLANKS)
|
.viaShaped(b -> b.key('B', ItemTags.PLANKS)
|
||||||
.key('S', I.cog())
|
.key('S', I.cog())
|
||||||
|
@ -669,6 +669,15 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
||||||
LINEAR_CHASSIS_CYCLE =
|
LINEAR_CHASSIS_CYCLE =
|
||||||
conversionCycle(ImmutableList.of(AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS)),
|
conversionCycle(ImmutableList.of(AllBlocks.LINEAR_CHASSIS, AllBlocks.SECONDARY_LINEAR_CHASSIS)),
|
||||||
|
|
||||||
|
STICKER = create(AllBlocks.STICKER).returns(1)
|
||||||
|
.unlockedBy(I::andesite)
|
||||||
|
.viaShaped(b -> b.key('I', I.andesite())
|
||||||
|
.key('C', Tags.Items.COBBLESTONE)
|
||||||
|
.key('R', I.redstone())
|
||||||
|
.key('S', Tags.Items.SLIMEBALLS)
|
||||||
|
.patternLine("ISI")
|
||||||
|
.patternLine("CRC")),
|
||||||
|
|
||||||
MINECART = create(() -> Items.MINECART).withSuffix("_from_contraption_cart")
|
MINECART = create(() -> Items.MINECART).withSuffix("_from_contraption_cart")
|
||||||
.unlockedBy(AllBlocks.CART_ASSEMBLER::get)
|
.unlockedBy(AllBlocks.CART_ASSEMBLER::get)
|
||||||
.viaShapeless(b -> b.addIngredient(AllItems.MINECART_CONTRAPTION.get())),
|
.viaShapeless(b -> b.addIngredient(AllItems.MINECART_CONTRAPTION.get())),
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||||
import com.simibubi.create.foundation.config.AllConfigs;
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
|
import com.simibubi.create.foundation.utility.Debug;
|
||||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
|
import com.simibubi.create.foundation.utility.worldWrappers.PlacementSimulationWorld;
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class BasicProgram extends GlProgram {
|
||||||
super.bind();
|
super.bind();
|
||||||
|
|
||||||
GL20.glUniform1i(uDebug, debugMode);
|
GL20.glUniform1i(uDebug, debugMode);
|
||||||
GL20.glUniform1f(uTime, AnimationTickHolder.getRenderTick());
|
GL20.glUniform1f(uTime, AnimationTickHolder.getRenderTime());
|
||||||
|
|
||||||
uploadMatrixUniform(uViewProjection, viewProjection);
|
uploadMatrixUniform(uViewProjection, viewProjection);
|
||||||
GL20.glUniform3f(uCameraPos, (float) camX, (float) camY, (float) camZ);
|
GL20.glUniform3f(uCameraPos, (float) camX, (float) camY, (float) camZ);
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class AnimationTickHolder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static float getRenderTick() {
|
public static float getRenderTime() {
|
||||||
return getTicks() + getPartialTicks();
|
return getTicks() + getPartialTicks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"textures": {
|
||||||
|
"0": "block/piston_bottom",
|
||||||
|
"1": "block/piston_inner",
|
||||||
|
"3": "create:block/sticker",
|
||||||
|
"4": "create:block/sticker_side",
|
||||||
|
"particle": "block/piston_bottom"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 8, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 8, 16, 16], "texture": "#4"},
|
||||||
|
"east": {"uv": [0, 8, 16, 16], "texture": "#4"},
|
||||||
|
"south": {"uv": [0, 8, 16, 16], "texture": "#4"},
|
||||||
|
"west": {"uv": [0, 8, 16, 16], "texture": "#4"},
|
||||||
|
"up": {"uv": [0, 0, 16, 16], "texture": "#1"},
|
||||||
|
"down": {"uv": [0, 0, 16, 16], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 8, 0],
|
||||||
|
"to": [16, 16, 16],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 16, 8], "texture": "#4"},
|
||||||
|
"east": {"uv": [0, 0, 16, 8], "texture": "#4"},
|
||||||
|
"south": {"uv": [0, 0, 16, 8], "texture": "#4"},
|
||||||
|
"west": {"uv": [0, 0, 16, 8], "texture": "#4"},
|
||||||
|
"up": {"uv": [0, 0, 8, 8], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 8, -0.95],
|
||||||
|
"to": [16, 16, 0.05],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [0, 0, 16, 8], "texture": "#4"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 8, 15.95],
|
||||||
|
"to": [16, 16, 16.95],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 16, 8], "texture": "#4"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [15.95, 8, 0],
|
||||||
|
"to": [16.95, 16, 16],
|
||||||
|
"faces": {
|
||||||
|
"west": {"uv": [0, 0, 16, 8], "texture": "#4"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [-0.95, 8, 0],
|
||||||
|
"to": [0.05, 16, 16],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [16, 0, 0, 8], "texture": "#4"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "Piston Block",
|
||||||
|
"origin": [8, 8, 8],
|
||||||
|
"children": [0, 1, 2, 3, 4, 5]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "create:block/sticker/block",
|
||||||
|
"textures": {
|
||||||
|
"4": "create:block/sticker_side_powered"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"textures": {
|
||||||
|
"2": "block/piston_side",
|
||||||
|
"3": "create:block/sticker",
|
||||||
|
"particle": "block/piston_bottom"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [1, 8, 1],
|
||||||
|
"to": [15, 13, 15],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [9, 16, 9]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8.5, 0, 15.5, 2.5], "texture": "#3"},
|
||||||
|
"east": {"uv": [8.5, 0, 15.5, 2.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [8.5, 0, 15.5, 2.5], "texture": "#3"},
|
||||||
|
"west": {"uv": [8.5, 0, 15.5, 2.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#3"},
|
||||||
|
"down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [6, 3, 6],
|
||||||
|
"to": [10, 8, 10],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [14, 11, 14]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 5, 4], "rotation": 90, "texture": "#2"},
|
||||||
|
"east": {"uv": [0, 0, 5, 4], "rotation": 90, "texture": "#2"},
|
||||||
|
"south": {"uv": [0, 0, 5, 4], "rotation": 90, "texture": "#2"},
|
||||||
|
"west": {"uv": [0, 0, 5, 4], "rotation": 90, "texture": "#2"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "Piston Head",
|
||||||
|
"origin": [14, 28, 14],
|
||||||
|
"children": [0, 1]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
104
src/main/resources/assets/create/models/block/sticker/item.json
Normal file
104
src/main/resources/assets/create/models/block/sticker/item.json
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"0": "block/piston_bottom",
|
||||||
|
"1": "block/piston_inner",
|
||||||
|
"2": "block/piston_side",
|
||||||
|
"3": "create:block/sticker",
|
||||||
|
"4": "create:block/sticker_side",
|
||||||
|
"particle": "block/piston_bottom"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 8, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 8, 16, 16], "texture": "#4"},
|
||||||
|
"east": {"uv": [0, 8, 16, 16], "texture": "#4"},
|
||||||
|
"south": {"uv": [0, 8, 16, 16], "texture": "#4"},
|
||||||
|
"west": {"uv": [0, 8, 16, 16], "texture": "#4"},
|
||||||
|
"up": {"uv": [0, 0, 16, 16], "texture": "#1"},
|
||||||
|
"down": {"uv": [0, 0, 16, 16], "texture": "#0"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 8, 0],
|
||||||
|
"to": [16, 16, 16],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 16, 8], "texture": "#4"},
|
||||||
|
"east": {"uv": [0, 0, 16, 8], "texture": "#4"},
|
||||||
|
"south": {"uv": [0, 0, 16, 8], "texture": "#4"},
|
||||||
|
"west": {"uv": [0, 0, 16, 8], "texture": "#4"},
|
||||||
|
"up": {"uv": [0, 0, 8, 8], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 8, -0.95],
|
||||||
|
"to": [16, 16, 0.05],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [0, 0, 16, 8], "texture": "#4"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 8, 15.95],
|
||||||
|
"to": [16, 16, 16.95],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 16, 8], "texture": "#4"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [16, 8, 0.05],
|
||||||
|
"to": [17, 16, 16.05],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 8]},
|
||||||
|
"faces": {
|
||||||
|
"west": {"uv": [0, 0, 16, 8], "texture": "#4"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [-1, 8, -0.05],
|
||||||
|
"to": [0, 16, 15.95],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [7, 8, 8]},
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [0, 0, 16, 8], "texture": "#4"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [1, 9, 1],
|
||||||
|
"to": [15, 14, 15],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [9, 17, 9]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8.5, 0, 15.5, 2.5], "texture": "#3"},
|
||||||
|
"east": {"uv": [8.5, 0, 15.5, 2.5], "texture": "#3"},
|
||||||
|
"south": {"uv": [8.5, 0, 15.5, 2.5], "texture": "#3"},
|
||||||
|
"west": {"uv": [8.5, 0, 15.5, 2.5], "texture": "#3"},
|
||||||
|
"up": {"uv": [8.5, 8.5, 15.5, 15.5], "texture": "#3"},
|
||||||
|
"down": {"uv": [0.5, 8.5, 7.5, 15.5], "texture": "#3"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [6, 4, 6],
|
||||||
|
"to": [10, 9, 10],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [14, 12, 14]},
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 0, 5, 4], "rotation": 90, "texture": "#2"},
|
||||||
|
"east": {"uv": [0, 0, 5, 4], "rotation": 90, "texture": "#2"},
|
||||||
|
"south": {"uv": [0, 0, 5, 4], "rotation": 90, "texture": "#2"},
|
||||||
|
"west": {"uv": [0, 0, 5, 4], "rotation": 90, "texture": "#2"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "Piston Block",
|
||||||
|
"origin": [8, 8, 8],
|
||||||
|
"children": [0, 1, 2, 3, 4, 5]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Piston Head",
|
||||||
|
"origin": [14, 28, 14],
|
||||||
|
"children": [6, 7]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
BIN
src/main/resources/assets/create/textures/block/sticker.png
Normal file
BIN
src/main/resources/assets/create/textures/block/sticker.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
BIN
src/main/resources/assets/create/textures/block/sticker_side.png
Normal file
BIN
src/main/resources/assets/create/textures/block/sticker_side.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 6.7 KiB |
Loading…
Reference in a new issue