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
|
||||
92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.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
|
||||
da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.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
|
||||
d62b7908119fa4f51715a186d0882b388bb25cab assets/create/blockstates/spruce_window.json
|
||||
8d7dfa60630a8b4bae4e8eca5c66e1cfa34dda1f assets/create/blockstates/spruce_window_pane.json
|
||||
5d7385d28a23dcfc95a221d36d82337908582726 assets/create/blockstates/sticker.json
|
||||
3d93eabbb327aecc526beae9c62283f1d43eb710 assets/create/blockstates/sticky_mechanical_piston.json
|
||||
f385988cb6fa9c48b5d59a6942ec50ed2b60c8bf assets/create/blockstates/stockpile_switch.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
|
||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
00e2b77dcc86224cd5a33aefaac01f20c90bcb40 assets/create/lang/en_ud.json
|
||||
55638abca6ffa48e1059f2578ea6d76b8327f496 assets/create/lang/en_us.json
|
||||
374dd193cb26eb590a4a66bf5c8e13f9743ddbdb assets/create/lang/unfinished/de_de.json
|
||||
84b205e2a8c9539ab6da68aa8f7c91f1dbec0702 assets/create/lang/unfinished/es_es.json
|
||||
3397c2fed7517a4c9b3b41ee081abb120ddf9b3b assets/create/lang/unfinished/es_mx.json
|
||||
e61eb3ca3d279c438275fb50333b135560574e62 assets/create/lang/unfinished/fr_fr.json
|
||||
eaa202ec1821372b5f26d724e7c58d710fda7f5b assets/create/lang/unfinished/it_it.json
|
||||
d1627e59cf6cf5ac2382397a7db416e75072ac31 assets/create/lang/unfinished/ja_jp.json
|
||||
39f4258b8d9d56c5d7e5761065081d69ab07d4d8 assets/create/lang/unfinished/ko_kr.json
|
||||
402c16cffdd530dfde3e016691720145cc66c7a1 assets/create/lang/unfinished/nl_nl.json
|
||||
73f22223f6d30068ac2bc3f9be02e43f7fe4cae0 assets/create/lang/unfinished/pt_br.json
|
||||
015a444814ec9982c35d08a3705df3861ce2545e assets/create/lang/unfinished/ru_ru.json
|
||||
38ed221082ce3ce7b4f6c93ec28b7e89a95cab06 assets/create/lang/unfinished/zh_cn.json
|
||||
e51b6bd8cd9696858a417d3d9472a263e9268dd8 assets/create/lang/unfinished/zh_tw.json
|
||||
369f9c6fce0aa11d70efa2e73a4ba2ff12e57e37 assets/create/lang/en_ud.json
|
||||
10f9c238cdc8b68246c5663bc9745942d1014927 assets/create/lang/en_us.json
|
||||
c46eabdb4476c18f539c95c24259a3fe1ee9cbff assets/create/lang/unfinished/de_de.json
|
||||
551cd06b553080815a129d6b113473efde3fb5ac assets/create/lang/unfinished/es_es.json
|
||||
1bac8afa8f92030077db8d921fd9dda30c0e8a5a assets/create/lang/unfinished/es_mx.json
|
||||
d62993dd6f73224cbc17f04ea96022c4ac385dc4 assets/create/lang/unfinished/fr_fr.json
|
||||
749274555f9b3edc9d7799a7147d724fd7993c66 assets/create/lang/unfinished/it_it.json
|
||||
7e9723798c1459780b2814145eb6a0dc681a2281 assets/create/lang/unfinished/ja_jp.json
|
||||
2d1da43b76d2184df5b183641241478e1c101218 assets/create/lang/unfinished/ko_kr.json
|
||||
9cea3a5a2fe4e2c6d966f3c91b24e9d6595a9cc6 assets/create/lang/unfinished/nl_nl.json
|
||||
e7299620ca48f296d678c87470358816f23d7578 assets/create/lang/unfinished/pt_br.json
|
||||
6fd3ef5962b10f83e5df7dd0fbdb50cadee1a06b assets/create/lang/unfinished/ru_ru.json
|
||||
b0688d7e4c593c0ed4fc87ea0b4e52205dcdeec8 assets/create/lang/unfinished/zh_cn.json
|
||||
ff1c97c854da7b7bfe6be829c9bf6a787f6dfacd assets/create/lang/unfinished/zh_tw.json
|
||||
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
||||
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.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
|
||||
b305e81f1dc5272634745b6e822af40955a2ef28 assets/create/models/item/spruce_window.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
|
||||
bbb5773adc23128c70174bfc531af936e6e063e3 assets/create/models/item/stockpile_switch.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
|
||||
90ff137eb1533695d9d17296ed180c0a88ddd891 data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.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
|
||||
9a4dad31370d9e71308afe5c3f9349b67f749635 data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.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
|
||||
a23a1e332c9ba84474e3c0588e8a0857afe346e0 data/create/loot_tables/blocks/spruce_window.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
|
||||
ec2889e712702644092197a4b41a682fb953817d data/create/loot_tables/blocks/stockpile_switch.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
|
||||
8d632845deeb723e1a56083536ee5f9d60de2fcb data/create/recipes/crafting/kinetics/speedometerfrom_conversion.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
|
||||
af5854ee2fa3be195ad9abcdeebe6ed7306b651c data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json
|
||||
21f885a674603367b67e1e993c175638cbda9ea3 data/create/recipes/crafting/kinetics/super_glue.json
|
||||
|
|
|
@ -89,8 +89,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "true",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_west": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -99,8 +99,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "true",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_west": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -109,8 +109,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "true",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_west": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z_sticky",
|
||||
|
@ -119,8 +119,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "false",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_west": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -129,8 +129,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "false",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_west": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -139,8 +139,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_west": "false",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_west": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z",
|
||||
|
@ -149,8 +149,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "true",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_north": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky"
|
||||
|
@ -158,8 +158,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "true",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_north": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -168,8 +168,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "true",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_north": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -178,8 +178,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "false",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_north": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x"
|
||||
|
@ -187,8 +187,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "false",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_north": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -197,8 +197,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_north": "false",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_north": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -207,8 +207,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "true",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x_sticky",
|
||||
|
@ -217,8 +217,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "true",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y_sticky",
|
||||
|
@ -227,8 +227,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "true",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_east": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_z_sticky"
|
||||
|
@ -236,8 +236,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "false",
|
||||
"axis": "x"
|
||||
"axis": "x",
|
||||
"sticky_east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_x",
|
||||
|
@ -246,8 +246,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "false",
|
||||
"axis": "y"
|
||||
"axis": "y",
|
||||
"sticky_east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"model": "create:block/radial_chassis_side_y",
|
||||
|
@ -256,8 +256,8 @@
|
|||
},
|
||||
{
|
||||
"when": {
|
||||
"sticky_east": "false",
|
||||
"axis": "z"
|
||||
"axis": "z",
|
||||
"sticky_east": "false"
|
||||
},
|
||||
"apply": {
|
||||
"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.spruce_window": "\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.stockpile_switch": "\u0265\u0254\u0287\u0131\u028DS \u01DD\u05DF\u0131d\u029E\u0254o\u0287S",
|
||||
"block.create.stressometer": "\u0279\u01DD\u0287\u01DD\u026Foss\u01DD\u0279\u0287S",
|
||||
|
|
|
@ -375,6 +375,7 @@
|
|||
"block.create.spout": "Spout",
|
||||
"block.create.spruce_window": "Spruce Window",
|
||||
"block.create.spruce_window_pane": "Spruce Window Pane",
|
||||
"block.create.sticker": "Sticker",
|
||||
"block.create.sticky_mechanical_piston": "Sticky Mechanical Piston",
|
||||
"block.create.stockpile_switch": "Stockpile Switch",
|
||||
"block.create.stressometer": "Stressometer",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 973",
|
||||
"_": "Missing Localizations: 974",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "UNLOCALIZED: Spout",
|
||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
||||
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||
"block.create.sticky_mechanical_piston": "Klebriger Mechanischer Kolben",
|
||||
"block.create.stockpile_switch": "Vorratssensor",
|
||||
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 15",
|
||||
"_": "Missing Localizations: 16",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "Surtidor",
|
||||
"block.create.spruce_window": "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.stockpile_switch": "Interruptor de acopio",
|
||||
"block.create.stressometer": "Estresómetro",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 903",
|
||||
"_": "Missing Localizations: 904",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "Canaleta",
|
||||
"block.create.spruce_window": "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.stockpile_switch": "Interruptor de Pila",
|
||||
"block.create.stressometer": "Estresómetro",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 685",
|
||||
"_": "Missing Localizations: 686",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "UNLOCALIZED: Spout",
|
||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||
"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.stockpile_switch": "Détecteur de stockage",
|
||||
"block.create.stressometer": "Stressomètre",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 20",
|
||||
"_": "Missing Localizations: 21",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "Spruzzo",
|
||||
"block.create.spruce_window": "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.stockpile_switch": "Interruttore accumulatore",
|
||||
"block.create.stressometer": "Stressometro",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 27",
|
||||
"_": "Missing Localizations: 28",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "アイテム注液口",
|
||||
"block.create.spruce_window": "マツの窓",
|
||||
"block.create.spruce_window_pane": "マツの窓パネル",
|
||||
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||
"block.create.sticky_mechanical_piston": "粘着メカニカルピストン",
|
||||
"block.create.stockpile_switch": "在庫スイッチ",
|
||||
"block.create.stressometer": "応力メーター",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 74",
|
||||
"_": "Missing Localizations: 75",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "수도꼭지",
|
||||
"block.create.spruce_window": "가문비나무 유리창",
|
||||
"block.create.spruce_window_pane": "가문비나무 유리판",
|
||||
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||
"block.create.sticky_mechanical_piston": "끈끈이 기계식 피스톤",
|
||||
"block.create.stockpile_switch": "수량 스위치",
|
||||
"block.create.stressometer": "피로도 계측기",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1172",
|
||||
"_": "Missing Localizations: 1173",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "UNLOCALIZED: Spout",
|
||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||
"block.create.spruce_window_pane": "UNLOCALIZED: Spruce Window Pane",
|
||||
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||
"block.create.sticky_mechanical_piston": "Mechanische Zuiger",
|
||||
"block.create.stockpile_switch": "Voorraad Schakelaar",
|
||||
"block.create.stressometer": "Stressmeter",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1238",
|
||||
"_": "Missing Localizations: 1239",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "UNLOCALIZED: Spout",
|
||||
"block.create.spruce_window": "UNLOCALIZED: Spruce Window",
|
||||
"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.stockpile_switch": "Disjuntor de Armazenamento",
|
||||
"block.create.stressometer": "UNLOCALIZED: Stressometer",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 24",
|
||||
"_": "Missing Localizations: 25",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "Дозатор",
|
||||
"block.create.spruce_window": "Еловое окно",
|
||||
"block.create.spruce_window_pane": "Панель из елового окна",
|
||||
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||
"block.create.sticky_mechanical_piston": "Липкий механический поршень",
|
||||
"block.create.stockpile_switch": "Настраиваемый компаратор",
|
||||
"block.create.stressometer": "Динамометр",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 22",
|
||||
"_": "Missing Localizations: 23",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "注液器",
|
||||
"block.create.spruce_window": "云杉窗户",
|
||||
"block.create.spruce_window_pane": "云杉窗户板",
|
||||
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||
"block.create.sticky_mechanical_piston": "黏性动力活塞",
|
||||
"block.create.stockpile_switch": "存量转换器",
|
||||
"block.create.stressometer": "应力表",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 27",
|
||||
"_": "Missing Localizations: 28",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -376,6 +376,7 @@
|
|||
"block.create.spout": "液體灌注器",
|
||||
"block.create.spruce_window": "雲杉木窗戶",
|
||||
"block.create.spruce_window_pane": "雲杉木窗戶片",
|
||||
"block.create.sticker": "UNLOCALIZED: Sticker",
|
||||
"block.create.sticky_mechanical_piston": "黏性機械活塞",
|
||||
"block.create.stockpile_switch": "存量檢測器",
|
||||
"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"
|
||||
}
|
||||
}
|
|
@ -94,6 +94,8 @@ public class AllBlockPartials {
|
|||
SYMMETRY_PLANE = get("symmetry_effect/plane"), SYMMETRY_CROSSPLANE = get("symmetry_effect/crossplane"),
|
||||
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_POWERED = get("portable_storage_interface/block_middle_powered"),
|
||||
PORTABLE_STORAGE_INTERFACE_TOP = get("portable_storage_interface/block_top"),
|
||||
|
|
|
@ -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.ChassisCTBehaviour;
|
||||
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.mounted.CartAssemblerBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock.MinecartAnchorBlock;
|
||||
|
@ -846,6 +847,15 @@ public class AllBlocks {
|
|||
.build()
|
||||
.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)
|
||||
.initialProperties(SharedProperties::stone)
|
||||
.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.WindmillBearingTileEntity;
|
||||
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.GantryPinionTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity;
|
||||
|
@ -399,6 +401,12 @@ public class AllTileEntities {
|
|||
// .renderer(() -> renderer)
|
||||
.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()
|
||||
.tileEntity("drill", DrillTileEntity::new)
|
||||
.validBlocks(AllBlocks.MECHANICAL_DRILL)
|
||||
|
|
|
@ -12,7 +12,7 @@ import net.minecraft.util.Direction.Axis;
|
|||
public abstract class AnimatedKinetics implements IDrawable {
|
||||
|
||||
public static float getCurrentAngle() {
|
||||
return ((AnimationTickHolder.getRenderTick()) * 4f) % 360;
|
||||
return ((AnimationTickHolder.getRenderTime()) * 4f) % 360;
|
||||
}
|
||||
|
||||
protected BlockState shaft(Axis axis) {
|
||||
|
|
|
@ -29,7 +29,7 @@ public class AnimatedMixer extends AnimatedKinetics {
|
|||
.scale(scale)
|
||||
.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)
|
||||
.atLocal(0, animation, 0)
|
||||
|
|
|
@ -48,7 +48,7 @@ public class AnimatedPress extends AnimatedKinetics {
|
|||
}
|
||||
|
||||
private float getAnimatedHeadOffset() {
|
||||
float cycle = (AnimationTickHolder.getRenderTick()) % 30;
|
||||
float cycle = (AnimationTickHolder.getRenderTime()) % 30;
|
||||
if (cycle < 10) {
|
||||
float progress = cycle / 10;
|
||||
return -(progress * progress * progress);
|
||||
|
|
|
@ -37,7 +37,7 @@ public class AnimatedSpout extends AnimatedKinetics {
|
|||
.scale(scale)
|
||||
.render();
|
||||
|
||||
float cycle = AnimationTickHolder.getRenderTick() % 30;
|
||||
float cycle = AnimationTickHolder.getRenderTime() % 30;
|
||||
float squeeze = cycle < 20 ? MathHelper.sin((float) (cycle / 20f * Math.PI)) : 0;
|
||||
squeeze *= 20;
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ public class KineticTileEntityRenderer extends SafeTileEntityRenderer<KineticTil
|
|||
}
|
||||
|
||||
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 angle = ((time * te.getSpeed() * 3f / 10 + offset) % 360) / 180 * (float) Math.PI;
|
||||
return angle;
|
||||
|
|
|
@ -44,7 +44,7 @@ public class DrillRenderer extends KineticTileEntityRenderer {
|
|||
float speed = (float) (context.contraption.stalled
|
||||
|| !VecHelper.isVecPointingTowards(context.relativeMotion, state.get(FACING)
|
||||
.getOpposite()) ? context.getAnimationSpeed() : 0);
|
||||
float time = AnimationTickHolder.getRenderTick() / 20;
|
||||
float time = AnimationTickHolder.getRenderTime() / 20;
|
||||
float angle = (float) (((time * speed) % 360));
|
||||
|
||||
for (MatrixStack m : matrixStacks)
|
||||
|
|
|
@ -70,7 +70,7 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
|
|||
|
||||
if (context.contraption.stalled)
|
||||
speed = 0;
|
||||
float time = AnimationTickHolder.getRenderTick() / 20;
|
||||
float time = AnimationTickHolder.getRenderTime() / 20;
|
||||
float angle = (time * speed) % 360;
|
||||
float originOffset = 1 / 16f;
|
||||
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.scale(scale, scale, scale);
|
||||
transform = TransformType.GROUND;
|
||||
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(AnimationTickHolder.getRenderTick()));
|
||||
ms.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(AnimationTickHolder.getRenderTime()));
|
||||
|
||||
} else {
|
||||
float scale = punching ? .75f : isBlockItem ? .75f - 1 / 64f : .5f;
|
||||
|
@ -176,7 +176,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
|||
|
||||
double factor;
|
||||
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 {
|
||||
Vec3d center = VecHelper.getCenterOf(new BlockPos(context.position));
|
||||
double distance = context.position.distanceTo(center);
|
||||
|
|
|
@ -41,7 +41,7 @@ public class EncasedFanRenderer extends KineticTileEntityRenderer {
|
|||
SuperByteBuffer fanInner =
|
||||
AllBlockPartials.ENCASED_FAN_INNER.renderOnDirectionalSouth(te.getBlockState(), direction.getOpposite());
|
||||
|
||||
float time = AnimationTickHolder.getRenderTick();
|
||||
float time = AnimationTickHolder.getRenderTime();
|
||||
float speed = te.getSpeed() * 5;
|
||||
if (speed > 0)
|
||||
speed = MathHelper.clamp(speed, 80, 64 * 20);
|
||||
|
|
|
@ -45,7 +45,7 @@ public class MechanicalMixerRenderer extends KineticTileEntityRenderer {
|
|||
int packedLightmapCoords = WorldRenderer.getLightmapCoordinates(te.getWorld(), blockState, pos);
|
||||
float renderedHeadOffset = mixer.getRenderedHeadOffset(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);
|
||||
|
||||
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.SailBlock;
|
||||
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.piston.MechanicalPistonBlock;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock.PistonState;
|
||||
|
@ -198,6 +199,10 @@ public class BlockMovementTraits {
|
|||
.getAxis();
|
||||
if (state.getBlock() instanceof FluidTankBlock)
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -231,6 +236,8 @@ public class BlockMovementTraits {
|
|||
if (AllBlocks.MECHANICAL_PISTON_HEAD.has(state))
|
||||
return facing.getAxis() != state.get(BlockStateProperties.FACING)
|
||||
.getAxis();
|
||||
if (AllBlocks.STICKER.has(state) && !state.get(StickerBlock.EXTENDED))
|
||||
return facing == state.get(StickerBlock.FACING);
|
||||
return isBrittle(state);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import java.util.Arrays;
|
|||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
@ -21,7 +20,6 @@ import java.util.stream.Collectors;
|
|||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.foundation.utility.*;
|
||||
import org.apache.commons.lang3.tuple.MutablePair;
|
||||
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.chassis.AbstractChassisBlock;
|
||||
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.glue.SuperGlueEntity;
|
||||
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.fluid.CombinedTankWrapper;
|
||||
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 net.minecraft.block.AbstractButtonBlock;
|
||||
|
@ -172,7 +177,8 @@ public abstract class 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();
|
||||
Queue<BlockPos> frontier = new UniqueLinkedList<>();
|
||||
Set<BlockPos> visited = new HashSet<>();
|
||||
|
@ -293,6 +299,14 @@ public abstract class Contraption {
|
|||
if (AllBlocks.GANTRY_SHAFT.has(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
|
||||
if (AllBlocks.MECHANICAL_BEARING.has(state))
|
||||
moveBearing(pos, frontier, visited, state);
|
||||
|
@ -348,7 +362,8 @@ public abstract class Contraption {
|
|||
boolean brittle = BlockMovementTraits.isBrittle(blockState);
|
||||
boolean canStick = !brittle && state.canStickTo(blockState) && blockState.canStickTo(state);
|
||||
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;
|
||||
}
|
||||
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);
|
||||
if (faceHasGlue)
|
||||
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);
|
||||
PistonState pistonState = state.get(MechanicalPistonBlock.STATE);
|
||||
if (pistonState == PistonState.MOVING)
|
||||
|
@ -621,8 +638,9 @@ public abstract class Contraption {
|
|||
specialRenderedTileEntities.clear();
|
||||
|
||||
INBT blocks = nbt.get("Blocks");
|
||||
//used to differentiate between the 'old' and the paletted serialization
|
||||
boolean usePalettedDeserialization = blocks != null && blocks.getId() == 10 && ((CompoundNBT) blocks).contains("Palette");
|
||||
// used to differentiate between the 'old' and the paletted serialization
|
||||
boolean usePalettedDeserialization =
|
||||
blocks != null && blocks.getId() == 10 && ((CompoundNBT) blocks).contains("Palette");
|
||||
readBlocksCompound(blocks, world, usePalettedDeserialization);
|
||||
|
||||
actors.clear();
|
||||
|
@ -713,7 +731,8 @@ public abstract class Contraption {
|
|||
for (Pair<BlockPos, Direction> glueEntry : superglue) {
|
||||
CompoundNBT c = new CompoundNBT();
|
||||
c.put("Pos", NBTUtil.writeBlockPos(glueEntry.getKey()));
|
||||
c.putByte("Direction", (byte) glueEntry.getValue().getIndex());
|
||||
c.putByte("Direction", (byte) glueEntry.getValue()
|
||||
.getIndex());
|
||||
superglueNBT.add(c);
|
||||
}
|
||||
|
||||
|
@ -773,7 +792,9 @@ public abstract class Contraption {
|
|||
|
||||
private CompoundNBT writeBlocksCompound() {
|
||||
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();
|
||||
|
||||
for (BlockInfo block : this.blocks.values()) {
|
||||
|
@ -799,7 +820,9 @@ public abstract class Contraption {
|
|||
ListNBT blockList;
|
||||
if (usePalettedDeserialization) {
|
||||
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));
|
||||
|
||||
blockList = c.getList("BlockList", 10);
|
||||
|
@ -857,19 +880,15 @@ public abstract class Contraption {
|
|||
}
|
||||
|
||||
private static BlockInfo readBlockInfo(CompoundNBT blockListEntry, PaletteHashMap<BlockState> palette) {
|
||||
return new BlockInfo(
|
||||
BlockPos.fromLong(blockListEntry.getLong("Pos")),
|
||||
return new BlockInfo(BlockPos.fromLong(blockListEntry.getLong("Pos")),
|
||||
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) {
|
||||
return new BlockInfo(
|
||||
NBTUtil.readBlockPos(blockListEntry.getCompound("Pos")),
|
||||
return new BlockInfo(NBTUtil.readBlockPos(blockListEntry.getCompound("Pos")),
|
||||
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) {
|
||||
|
|
|
@ -39,7 +39,7 @@ public class ContraptionEntityRenderer<C extends AbstractContraptionEntity> exte
|
|||
super.render(entity, yaw, partialTicks, ms, buffers, overlay);
|
||||
|
||||
// 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 };
|
||||
|
||||
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) {
|
||||
float time = AnimationTickHolder.getRenderTick();
|
||||
float time = AnimationTickHolder.getRenderTime();
|
||||
float offset = getRotationOffsetForPosition(te, pos, axis);
|
||||
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) {
|
||||
ms.translate(0,
|
||||
(MathHelper.sin(AnimationTickHolder.getRenderTick() / 12f + anglePartition * itemCount) + 1.5f) * 1
|
||||
(MathHelper.sin(AnimationTickHolder.getRenderTime() / 12f + anglePartition * itemCount) + 1.5f) * 1
|
||||
/ 32f,
|
||||
0);
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ public class BlazeBurnerRenderer extends SafeTileEntityRenderer<BlazeBurnerTileE
|
|||
if (heatLevel == HeatLevel.NONE)
|
||||
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;
|
||||
|
||||
AllBlockPartials blazeModel = AllBlockPartials.BLAZES.get(heatLevel);
|
||||
|
|
|
@ -72,7 +72,7 @@ public class BeltRenderer extends SafeTileEntityRenderer<BeltTileEntity> {
|
|||
|
||||
MatrixStacker msr = MatrixStacker.of(ms);
|
||||
IVertexBuilder vb = buffer.getBuffer(RenderType.getSolid());
|
||||
float renderTick = AnimationTickHolder.getRenderTick();
|
||||
float renderTick = AnimationTickHolder.getRenderTime();
|
||||
|
||||
ms.push();
|
||||
msr.centre();
|
||||
|
|
|
@ -32,7 +32,7 @@ public class SplitShaftRenderer extends KineticTileEntityRenderer {
|
|||
Block block = te.getBlockState().getBlock();
|
||||
final Axis boxAxis = ((IRotate) block).getRotationAxis(te.getBlockState());
|
||||
final BlockPos pos = te.getPos();
|
||||
float time = AnimationTickHolder.getRenderTick();
|
||||
float time = AnimationTickHolder.getRenderTime();
|
||||
|
||||
for (Direction direction : Iterate.directions) {
|
||||
Axis axis = direction.getAxis();
|
||||
|
|
|
@ -30,7 +30,7 @@ public class GearboxRenderer extends KineticTileEntityRenderer {
|
|||
|
||||
final Axis boxAxis = te.getBlockState().get(BlockStateProperties.AXIS);
|
||||
final BlockPos pos = te.getPos();
|
||||
float time = AnimationTickHolder.getRenderTick();
|
||||
float time = AnimationTickHolder.getRenderTime();
|
||||
|
||||
for (Direction direction : Iterate.directions) {
|
||||
final Axis axis = direction.getAxis();
|
||||
|
|
|
@ -16,7 +16,7 @@ public class WrenchItemRenderer extends CustomRenderedItemModelRenderer<WrenchMo
|
|||
IRenderTypeBuffer buffer, int light, int overlay) {
|
||||
renderer.render(model.getBakedModel(), light);
|
||||
|
||||
float worldTime = AnimationTickHolder.getRenderTick();
|
||||
float worldTime = AnimationTickHolder.getRenderTime();
|
||||
float angle = worldTime * -.5f % 360;
|
||||
float xOffset = -1/16f;
|
||||
ms.translate(-xOffset, 0, 0);
|
||||
|
|
|
@ -14,7 +14,7 @@ public class ChromaticCompoundColor implements IItemColor {
|
|||
public int getColor(ItemStack stack, int layer) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
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)
|
||||
return ColorHelper.mixColors(0x6e5773, 0x6B3074, ((float) MathHelper.sin(progress) + 1) / 2);
|
||||
if (layer == 1)
|
||||
|
|
|
@ -100,7 +100,7 @@ public class SymmetryHandler {
|
|||
|
||||
float yShift = 0;
|
||||
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()
|
||||
.getBufferBuilders()
|
||||
|
|
|
@ -15,7 +15,7 @@ public class SymmetryWandItemRenderer extends CustomRenderedItemModelRenderer<Sy
|
|||
@Override
|
||||
protected void render(ItemStack stack, SymmetryWandModel model, PartialItemModelRenderer renderer, MatrixStack ms,
|
||||
IRenderTypeBuffer buffer, int light, int overlay) {
|
||||
float worldTime = AnimationTickHolder.getRenderTick() / 20;
|
||||
float worldTime = AnimationTickHolder.getRenderTime() / 20;
|
||||
int maxLight = 0xF000F0;
|
||||
|
||||
renderer.render(model.getBakedModel(), light);
|
||||
|
|
|
@ -15,7 +15,7 @@ public class DeforesterItemRenderer extends CustomRenderedItemModelRenderer<Defo
|
|||
protected void render(ItemStack stack, DeforesterModel model, PartialItemModelRenderer renderer,
|
||||
MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay) {
|
||||
int maxLight = 0xF000F0;
|
||||
float worldTime = AnimationTickHolder.getRenderTick();
|
||||
float worldTime = AnimationTickHolder.getRenderTime();
|
||||
|
||||
renderer.renderSolid(model.getBakedModel(), light);
|
||||
renderer.renderSolidGlowing(model.getPartial("core"), maxLight);
|
||||
|
|
|
@ -97,7 +97,7 @@ public class ExtendoGripItemRenderer extends CustomRenderedItemModelRenderer<Ext
|
|||
|
||||
// cog
|
||||
ms.push();
|
||||
float angle = AnimationTickHolder.getRenderTick() * -2;
|
||||
float angle = AnimationTickHolder.getRenderTime() * -2;
|
||||
if (leftHand || rightHand)
|
||||
angle += 360 * animation;
|
||||
angle %= 360;
|
||||
|
|
|
@ -33,7 +33,7 @@ public class BlockzapperItemRenderer extends ZapperItemRenderer<BlockzapperModel
|
|||
super.render(stack, model, renderer, ms, buffer, light, overlay);
|
||||
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
float worldTime = AnimationTickHolder.getRenderTick() / 20;
|
||||
float worldTime = AnimationTickHolder.getRenderTime() / 20;
|
||||
|
||||
renderer.render(model.getBakedModel(), 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);
|
||||
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
float worldTime = AnimationTickHolder.getRenderTick() / 20;
|
||||
float worldTime = AnimationTickHolder.getRenderTime() / 20;
|
||||
|
||||
renderer.renderSolid(model.getBakedModel(), light);
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ public class ArmRenderer extends KineticTileEntityRenderer {
|
|||
float headAngle = arm.headAngle.get(pt);
|
||||
|
||||
boolean rave = arm.phase == Phase.DANCING;
|
||||
float renderTick = AnimationTickHolder.getRenderTick() + (te.hashCode() % 64);
|
||||
float renderTick = AnimationTickHolder.getRenderTime() + (te.hashCode() % 64);
|
||||
if (rave) {
|
||||
baseAngle = (renderTick * 10) % 360;
|
||||
lowerArmAngle = MathHelper.lerp((MathHelper.sin(renderTick / 4) + 1) / 2, -45, 15);
|
||||
|
|
|
@ -669,6 +669,15 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
|||
LINEAR_CHASSIS_CYCLE =
|
||||
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")
|
||||
.unlockedBy(AllBlocks.CART_ASSEMBLER::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.foundation.config.AllConfigs;
|
||||
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.worldWrappers.PlacementSimulationWorld;
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ public class BasicProgram extends GlProgram {
|
|||
super.bind();
|
||||
|
||||
GL20.glUniform1i(uDebug, debugMode);
|
||||
GL20.glUniform1f(uTime, AnimationTickHolder.getRenderTick());
|
||||
GL20.glUniform1f(uTime, AnimationTickHolder.getRenderTime());
|
||||
|
||||
uploadMatrixUniform(uViewProjection, viewProjection);
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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