mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-29 08:27:03 +01:00
Encased and Windowed Pipes
- Added encased and non-opaque versions of the fluid pipe. - Added new generic te behaviour across pipe blocks for their rims/attachment models - Pipes and pumps now render a little drain cap when connected to a fluid inventory
This commit is contained in:
parent
a4b4c770be
commit
e52765cce0
59 changed files with 1358 additions and 218 deletions
|
@ -91,6 +91,7 @@ f63a5816d4bfe643aa098d03c3b54462dd06fe19 assets/create/blockstates/dolomite_cobb
|
|||
f179202e59e449157f89efc37229b03bbfd391d7 assets/create/blockstates/dolomite_pillar.json
|
||||
7b1c40891b07c8f3238537625d9e25c8627e7333 assets/create/blockstates/encased_belt.json
|
||||
7b2b836649e729feafa60972bf95e3afb2143131 assets/create/blockstates/encased_fan.json
|
||||
656813b75dd3b901bf34f24df785e4b0fbe11aa6 assets/create/blockstates/encased_fluid_pipe.json
|
||||
e157d7f67b08493b71d7ffea8d622f4a64dbc155 assets/create/blockstates/encased_shaft.json
|
||||
1442ff1a0e404f99263ba99d734da1dfed03d4e3 assets/create/blockstates/extractor.json
|
||||
a774e815376a67e2a2de44e39af0a1a0b4406932 assets/create/blockstates/fancy_andesite_bricks.json
|
||||
|
@ -147,6 +148,7 @@ a64d8d0924c0b5b192f355343dd9b3a440875f6a assets/create/blockstates/gabbro_cobble
|
|||
a6b44e8a1c4ce0c7442b2384b41ad36dd133f19b assets/create/blockstates/gabbro_pillar.json
|
||||
9c48e311be8b959bfb98e16ffaa358210ac8b9dd assets/create/blockstates/gearbox.json
|
||||
f34814b17cde3231a1dfb271f3dabf8d6de4fbf6 assets/create/blockstates/gearshift.json
|
||||
93f8bdc22d9a5e04268964e35e4285c8cbf2b89d assets/create/blockstates/glass_fluid_pipe.json
|
||||
87661d61e1645ef5ad4ea34f1c0fa31f139ea431 assets/create/blockstates/granite_bricks.json
|
||||
d7f4cf7be7e9a3895840d9288245c52cbe25f0bd assets/create/blockstates/granite_bricks_slab.json
|
||||
ec51efc72eb6b16c5f99399b4cb6284665d5be99 assets/create/blockstates/granite_bricks_stairs.json
|
||||
|
@ -357,17 +359,17 @@ c77b46d8b459e5c7cc495393546f3fcca8a1fa1d assets/create/blockstates/weathered_lim
|
|||
a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.json
|
||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
a9bcfd546e95865633a97e4b29e39c4aec940338 assets/create/lang/en_ud.json
|
||||
8e6187bfc654637c05fd80adaec3c60e6739705a assets/create/lang/en_us.json
|
||||
2426fd815d49680600f1b69e936915413020d117 assets/create/lang/unfinished/de_de.json
|
||||
a287218c649de21c20e43db160ad862dec493103 assets/create/lang/unfinished/fr_fr.json
|
||||
4bfe784a61dac2afb024c4030162c6b1b62ac80d assets/create/lang/unfinished/it_it.json
|
||||
e2b77bb3274597ce3752fae2e93f207f8837e191 assets/create/lang/unfinished/ja_jp.json
|
||||
bebccb9ae6b0d00bf651fa73ac4945f06b57fac2 assets/create/lang/unfinished/ko_kr.json
|
||||
1c158b2b894f9092a4da2d12a8379da7cfcfe3bc assets/create/lang/unfinished/nl_nl.json
|
||||
3610f9f37483efe94c591b96e946f93091f56773 assets/create/lang/unfinished/pt_br.json
|
||||
1d0b24b5dc447e1306a779e1a510411b9ce3c44d assets/create/lang/unfinished/ru_ru.json
|
||||
76928b7d9f7f41f4fa622824a872bec8e5635cea assets/create/lang/unfinished/zh_cn.json
|
||||
15f8e8f779c6ce41a9e42d87796df14d1415ab5a assets/create/lang/en_ud.json
|
||||
3c6d8906ded9a78050003f8b029407ef2078da87 assets/create/lang/en_us.json
|
||||
1abcbe5404e82eb9b944c9075eb39ff3b20512e5 assets/create/lang/unfinished/de_de.json
|
||||
e9f885ab2cee12075ec10a85e95e2f0a7fc49d9b assets/create/lang/unfinished/fr_fr.json
|
||||
44331773068529facc64870b0762609567fec8b6 assets/create/lang/unfinished/it_it.json
|
||||
e3c2ef988da795fc84ea8a9bff8b8557ac6c370a assets/create/lang/unfinished/ja_jp.json
|
||||
a5c17249f0b2575c372c658bfd958fe4244fb5d6 assets/create/lang/unfinished/ko_kr.json
|
||||
abcfc0ab1bf1b077f0aeaf54e00c2aceef78d253 assets/create/lang/unfinished/nl_nl.json
|
||||
899ebaa95bf6d3140bf6bbcf6f8a5fab2ab5111e assets/create/lang/unfinished/pt_br.json
|
||||
bba218b9d488faf4406d975eba81996f621b2200 assets/create/lang/unfinished/ru_ru.json
|
||||
b87385232b0be35079736a3a32ff88f252721cf3 assets/create/lang/unfinished/zh_cn.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
|
||||
|
@ -544,6 +546,7 @@ cc6d9300cd26f2323c653dbcc61b7a885be8fa3b assets/create/models/block/dolomite_cob
|
|||
a101974d906487326dc38916f828d12a278a49ae assets/create/models/block/dolomite_cobblestone_wall_post.json
|
||||
9c497140dfe73abe1964479eaf1af8f1892de290 assets/create/models/block/dolomite_cobblestone_wall_side.json
|
||||
999a7cd79a9dc80c47fd6103b65f006b55187402 assets/create/models/block/dolomite_pillar.json
|
||||
1a8bac1e97a2a6c3cc362081568d2a7fce815ad5 assets/create/models/block/encased_fluid_pipe.json
|
||||
17dae5fdc1a551d8ab1ab8a68cabf7a8c3848d86 assets/create/models/block/fancy_andesite_bricks.json
|
||||
cfb2cd84a1cbd9226a77ebc1f6c29e8eaa9c577f assets/create/models/block/fancy_andesite_bricks_slab.json
|
||||
8ee27601996ab577991b6a0f7e9df27db0282cad assets/create/models/block/fancy_andesite_bricks_slab_top.json
|
||||
|
@ -1920,6 +1923,7 @@ d5fc5b3dc612cd748117e9d8b0ecda76e73f4514 data/create/loot_tables/blocks/dolomite
|
|||
6121c99e6e037dda9022af3a414aee444467ac1b data/create/loot_tables/blocks/dolomite_pillar.json
|
||||
503a93787537b46f462d32b0382c3396f42bb1f6 data/create/loot_tables/blocks/encased_belt.json
|
||||
9055d82b983b673e1638d17b712b9fcd1f5a52e6 data/create/loot_tables/blocks/encased_fan.json
|
||||
205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/encased_fluid_pipe.json
|
||||
b127cb6920e6d7d9c8b2402cb186402a9a8dd3fc data/create/loot_tables/blocks/encased_shaft.json
|
||||
5a47c1535c866184b4ffca65763f5676f319e0aa data/create/loot_tables/blocks/extractor.json
|
||||
ddfc4764a6039d771e03af815ac4493da80d2e6b data/create/loot_tables/blocks/fancy_andesite_bricks.json
|
||||
|
@ -1976,6 +1980,7 @@ ae19749df10663efc51b8b27af310164f250ed38 data/create/loot_tables/blocks/gabbro_c
|
|||
e8d09c919e3b8125d7da0f38383c01bcfc61c7a8 data/create/loot_tables/blocks/gabbro_pillar.json
|
||||
b0109b4a4f0f738cbbe6b5911e8c3c0310b76f99 data/create/loot_tables/blocks/gearbox.json
|
||||
5f39461c5c9d3ad8d84195b06b9468fe2b0fb269 data/create/loot_tables/blocks/gearshift.json
|
||||
205f5899101262f31f5c1a88bb7d954918d08d04 data/create/loot_tables/blocks/glass_fluid_pipe.json
|
||||
74371bc2b516ad9742ca081d82dc1b7f642e25b4 data/create/loot_tables/blocks/granite_bricks.json
|
||||
29f2cbc04f898bb8ff48055a7e43ded85e635bf9 data/create/loot_tables/blocks/granite_bricks_slab.json
|
||||
6b2c74992f261df4f539ff65919e2f4a58b146ec data/create/loot_tables/blocks/granite_bricks_stairs.json
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"variants": {
|
||||
"axis=x": {
|
||||
"model": "create:block/encased_fluid_pipe",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"axis=y": {
|
||||
"model": "create:block/encased_fluid_pipe"
|
||||
},
|
||||
"axis=z": {
|
||||
"model": "create:block/encased_fluid_pipe",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"variants": {
|
||||
"alt=false,axis=x": {
|
||||
"model": "create:block/fluid_pipe/window",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"alt=true,axis=x": {
|
||||
"model": "create:block/fluid_pipe/window_alt",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"alt=false,axis=y": {
|
||||
"model": "create:block/fluid_pipe/window"
|
||||
},
|
||||
"alt=true,axis=y": {
|
||||
"model": "create:block/fluid_pipe/window_alt"
|
||||
},
|
||||
"alt=false,axis=z": {
|
||||
"model": "create:block/fluid_pipe/window",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"alt=true,axis=z": {
|
||||
"model": "create:block/fluid_pipe/window_alt",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
}
|
||||
}
|
||||
}
|
|
@ -92,6 +92,7 @@
|
|||
"block.create.dolomite_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 \u01DD\u0287\u0131\u026Fo\u05DFo\u15E1",
|
||||
"block.create.encased_belt": "\u0287\u05DF\u01DD\u15FA p\u01DDs\u0250\u0254u\u018E",
|
||||
"block.create.encased_fan": "u\u0250\u2132 p\u01DDs\u0250\u0254u\u018E",
|
||||
"block.create.encased_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 p\u01DDs\u0250\u0254u\u018E",
|
||||
"block.create.encased_shaft": "\u0287\u025F\u0250\u0265S p\u01DDs\u0250\u0254u\u018E",
|
||||
"block.create.extractor": "\u0279o\u0287\u0254\u0250\u0279\u0287x\u018E",
|
||||
"block.create.fancy_andesite_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131s\u01DDpu\u2C6F \u028E\u0254u\u0250\u2132",
|
||||
|
@ -148,6 +149,7 @@
|
|||
"block.create.gabbro_pillar": "\u0279\u0250\u05DF\u05DF\u0131\u0500 o\u0279qq\u0250\u2141",
|
||||
"block.create.gearbox": "xoq\u0279\u0250\u01DD\u2141",
|
||||
"block.create.gearshift": "\u0287\u025F\u0131\u0265s\u0279\u0250\u01DD\u2141",
|
||||
"block.create.glass_fluid_pipe": "\u01DDd\u0131\u0500 p\u0131n\u05DF\u2132 ss\u0250\u05DF\u2141",
|
||||
"block.create.granite_bricks": "s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131u\u0250\u0279\u2141",
|
||||
"block.create.granite_bricks_slab": "q\u0250\u05DFS s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131u\u0250\u0279\u2141",
|
||||
"block.create.granite_bricks_stairs": "s\u0279\u0131\u0250\u0287S s\u029E\u0254\u0131\u0279\u15FA \u01DD\u0287\u0131u\u0250\u0279\u2141",
|
||||
|
|
|
@ -95,6 +95,7 @@
|
|||
"block.create.dolomite_pillar": "Dolomite Pillar",
|
||||
"block.create.encased_belt": "Encased Belt",
|
||||
"block.create.encased_fan": "Encased Fan",
|
||||
"block.create.encased_fluid_pipe": "Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Encased Shaft",
|
||||
"block.create.extractor": "Extractor",
|
||||
"block.create.fancy_andesite_bricks": "Fancy Andesite Bricks",
|
||||
|
@ -151,6 +152,7 @@
|
|||
"block.create.gabbro_pillar": "Gabbro Pillar",
|
||||
"block.create.gearbox": "Gearbox",
|
||||
"block.create.gearshift": "Gearshift",
|
||||
"block.create.glass_fluid_pipe": "Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "Granite Bricks",
|
||||
"block.create.granite_bricks_slab": "Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 814",
|
||||
"_": "Missing Localizations: 816",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "Dolomitsäule",
|
||||
"block.create.encased_belt": "Eingeschlossener Riemen",
|
||||
"block.create.encased_fan": "Eingeschlossener Propeller",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Eingeschlossene Welle",
|
||||
"block.create.extractor": "Auswerfer",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||
"block.create.gearbox": "Getriebe",
|
||||
"block.create.gearshift": "Gangschaltung",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "Granitziegel",
|
||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 417",
|
||||
"_": "Missing Localizations: 419",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "Pillier de dolomie",
|
||||
"block.create.encased_belt": "Tapis roulant enfermé",
|
||||
"block.create.encased_fan": "Ventilateur enfermé",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Arbre mécanique enfermé",
|
||||
"block.create.extractor": "Extracteur",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||
"block.create.gearbox": "Boîte à roue dentée",
|
||||
"block.create.gearshift": "Décaleur de rotation",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "Briques de granite",
|
||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 401",
|
||||
"_": "Missing Localizations: 403",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "Pilastro di Dolomite",
|
||||
"block.create.encased_belt": "Nastro Incassato",
|
||||
"block.create.encased_fan": "Ventilatore incassato",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Albero Incassato",
|
||||
"block.create.extractor": "Estrattore",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||
"block.create.gearbox": "Riduttore",
|
||||
"block.create.gearshift": "Cambio",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "Mattoni di Granito",
|
||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 396",
|
||||
"_": "Missing Localizations: 398",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "苦灰石の柱",
|
||||
"block.create.encased_belt": "ケース入りベルト",
|
||||
"block.create.encased_fan": "ケース入りファン",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "ケース入りシャフト",
|
||||
"block.create.extractor": "エクストラクター",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||
"block.create.gearbox": "ギアボックス",
|
||||
"block.create.gearshift": "ギアシフト",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "花崗岩レンガ",
|
||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 401",
|
||||
"_": "Missing Localizations: 403",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "백운암 기둥",
|
||||
"block.create.encased_belt": "덮힌 벨트",
|
||||
"block.create.encased_fan": "덮힌 환풍기",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "덮힌 축",
|
||||
"block.create.extractor": "추출기",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||
"block.create.gearbox": "기어박스",
|
||||
"block.create.gearshift": "기어쉬프트",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "화강암 벽돌",
|
||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 751",
|
||||
"_": "Missing Localizations: 753",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "Dolomiet Pilaar",
|
||||
"block.create.encased_belt": "Omhulsde Transportband",
|
||||
"block.create.encased_fan": "Omhulsde Ventilator",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Omhulsde Drijfas",
|
||||
"block.create.extractor": "Extractor",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||
"block.create.gearbox": "Versnellingsbak",
|
||||
"block.create.gearshift": "Versnellingspook",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "Granietstenen",
|
||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 821",
|
||||
"_": "Missing Localizations: 823",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "Pilar de Dolomite",
|
||||
"block.create.encased_belt": "Esteira Revestida",
|
||||
"block.create.encased_fan": "Ventilador Revestida",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Eixo Revestido",
|
||||
"block.create.extractor": "Extrator",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||
"block.create.gearbox": "Caixa de Transmissão",
|
||||
"block.create.gearshift": "Câmbio",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "Tijolos de Granito",
|
||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 815",
|
||||
"_": "Missing Localizations: 817",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "Доломитовая колонна",
|
||||
"block.create.encased_belt": "Ленточный привод",
|
||||
"block.create.encased_fan": "Вентилятор",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "Вальный привод",
|
||||
"block.create.extractor": "Экстрактор",
|
||||
"block.create.fancy_andesite_bricks": "UNLOCALIZED: Fancy Andesite Bricks",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "UNLOCALIZED: Gabbro Pillar",
|
||||
"block.create.gearbox": "Муфта",
|
||||
"block.create.gearshift": "Реверсивная муфта",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "Гранитные кирпичи",
|
||||
"block.create.granite_bricks_slab": "UNLOCALIZED: Granite Bricks Slab",
|
||||
"block.create.granite_bricks_stairs": "UNLOCALIZED: Granite Bricks Stairs",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 77",
|
||||
"_": "Missing Localizations: 79",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -96,6 +96,7 @@
|
|||
"block.create.dolomite_pillar": "竖纹白云岩",
|
||||
"block.create.encased_belt": "连携齿轮箱",
|
||||
"block.create.encased_fan": "鼓风机",
|
||||
"block.create.encased_fluid_pipe": "UNLOCALIZED: Encased Fluid Pipe",
|
||||
"block.create.encased_shaft": "齿轮箱",
|
||||
"block.create.extractor": "提取器",
|
||||
"block.create.fancy_andesite_bricks": "方纹安山岩砖",
|
||||
|
@ -152,6 +153,7 @@
|
|||
"block.create.gabbro_pillar": "竖纹辉长岩",
|
||||
"block.create.gearbox": "十字齿轮箱",
|
||||
"block.create.gearshift": "红石齿轮箱",
|
||||
"block.create.glass_fluid_pipe": "UNLOCALIZED: Glass Fluid Pipe",
|
||||
"block.create.granite_bricks": "花岗岩砖",
|
||||
"block.create.granite_bricks_slab": "花岗岩砖台阶",
|
||||
"block.create.granite_bricks_stairs": "花岗岩砖楼梯",
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "block/cube_column",
|
||||
"textures": {
|
||||
"side": "create:block/copper_casing",
|
||||
"end": "create:block/encased_pipe"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "minecraft:air"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"type": "minecraft:block",
|
||||
"pools": [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "minecraft:air"
|
||||
}
|
||||
],
|
||||
"conditions": [
|
||||
{
|
||||
"condition": "minecraft:survives_explosion"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -9,9 +9,11 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour.AttachmentTypes;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock.HeatLevel;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
import com.simibubi.create.foundation.utility.SuperByteBuffer;
|
||||
|
||||
|
@ -30,46 +32,28 @@ public class AllBlockPartials {
|
|||
public static final AllBlockPartials SCHEMATICANNON_CONNECTOR = get("schematicannon/connector"),
|
||||
SCHEMATICANNON_PIPE = get("schematicannon/pipe"),
|
||||
|
||||
SHAFTLESS_COGWHEEL = get("cogwheel_shaftless"),
|
||||
SHAFT_HALF = get("shaft_half"),
|
||||
|
||||
BELT_PULLEY = get("belt_pulley"),
|
||||
BELT_START = get("belt/start"),
|
||||
BELT_MIDDLE = get("belt/middle"),
|
||||
BELT_END = get("belt/end"),
|
||||
BELT_START_BOTTOM = get("belt/start_bottom"),
|
||||
BELT_MIDDLE_BOTTOM = get("belt/middle_bottom"),
|
||||
BELT_END_BOTTOM = get("belt/end_bottom"),
|
||||
BELT_DIAGONAL_START = get("belt/diagonal_start"),
|
||||
BELT_DIAGONAL_MIDDLE = get("belt/diagonal_middle"),
|
||||
SHAFTLESS_COGWHEEL = get("cogwheel_shaftless"), SHAFT_HALF = get("shaft_half"),
|
||||
|
||||
BELT_PULLEY = get("belt_pulley"), BELT_START = get("belt/start"), BELT_MIDDLE = get("belt/middle"),
|
||||
BELT_END = get("belt/end"), BELT_START_BOTTOM = get("belt/start_bottom"),
|
||||
BELT_MIDDLE_BOTTOM = get("belt/middle_bottom"), BELT_END_BOTTOM = get("belt/end_bottom"),
|
||||
BELT_DIAGONAL_START = get("belt/diagonal_start"), BELT_DIAGONAL_MIDDLE = get("belt/diagonal_middle"),
|
||||
BELT_DIAGONAL_END = get("belt/diagonal_end"),
|
||||
|
||||
ENCASED_FAN_INNER = get("encased_fan/propeller"),
|
||||
HAND_CRANK_HANDLE = get("hand_crank/handle"),
|
||||
MECHANICAL_PRESS_HEAD = get("mechanical_press/head"),
|
||||
MECHANICAL_MIXER_POLE = get("mechanical_mixer/pole"),
|
||||
MECHANICAL_MIXER_HEAD = get("mechanical_mixer/head"),
|
||||
MECHANICAL_CRAFTER_LID = get("mechanical_crafter/lid"),
|
||||
ENCASED_FAN_INNER = get("encased_fan/propeller"), HAND_CRANK_HANDLE = get("hand_crank/handle"),
|
||||
MECHANICAL_PRESS_HEAD = get("mechanical_press/head"), MECHANICAL_MIXER_POLE = get("mechanical_mixer/pole"),
|
||||
MECHANICAL_MIXER_HEAD = get("mechanical_mixer/head"), MECHANICAL_CRAFTER_LID = get("mechanical_crafter/lid"),
|
||||
MECHANICAL_CRAFTER_ARROW = get("mechanical_crafter/arrow"),
|
||||
MECHANICAL_CRAFTER_BELT_FRAME = get("mechanical_crafter/belt"),
|
||||
MECHANICAL_CRAFTER_BELT = get("mechanical_crafter/belt_animated"),
|
||||
GAUGE_DIAL = get("gauge/dial"),
|
||||
GAUGE_INDICATOR = get("gauge/indicator"),
|
||||
GAUGE_HEAD_SPEED = get("gauge/speedometer/head"),
|
||||
GAUGE_HEAD_STRESS = get("gauge/stressometer/head"),
|
||||
BEARING_TOP = get("bearing/top"),
|
||||
DRILL_HEAD = get("mechanical_drill/head"),
|
||||
HARVESTER_BLADE = get("mechanical_harvester/blade"),
|
||||
DEPLOYER_POLE = get("deployer/pole"),
|
||||
DEPLOYER_HAND_POINTING = get("deployer/hand_pointing"),
|
||||
DEPLOYER_HAND_PUNCHING = get("deployer/hand_punching"),
|
||||
DEPLOYER_HAND_HOLDING = get("deployer/hand_holding"),
|
||||
ANALOG_LEVER_HANDLE = get("analog_lever/handle"),
|
||||
ANALOG_LEVER_INDICATOR = get("analog_lever/indicator"),
|
||||
BELT_FUNNEL_FLAP = get("belt_funnel/flap"),
|
||||
BELT_TUNNEL_FLAP = get("belt_tunnel/flap"),
|
||||
FLEXPEATER_INDICATOR = get("diodes/indicator"),
|
||||
FLYWHEEL = get("flywheel/wheel"),
|
||||
MECHANICAL_CRAFTER_BELT = get("mechanical_crafter/belt_animated"), GAUGE_DIAL = get("gauge/dial"),
|
||||
GAUGE_INDICATOR = get("gauge/indicator"), GAUGE_HEAD_SPEED = get("gauge/speedometer/head"),
|
||||
GAUGE_HEAD_STRESS = get("gauge/stressometer/head"), BEARING_TOP = get("bearing/top"),
|
||||
DRILL_HEAD = get("mechanical_drill/head"), HARVESTER_BLADE = get("mechanical_harvester/blade"),
|
||||
DEPLOYER_POLE = get("deployer/pole"), DEPLOYER_HAND_POINTING = get("deployer/hand_pointing"),
|
||||
DEPLOYER_HAND_PUNCHING = get("deployer/hand_punching"), DEPLOYER_HAND_HOLDING = get("deployer/hand_holding"),
|
||||
ANALOG_LEVER_HANDLE = get("analog_lever/handle"), ANALOG_LEVER_INDICATOR = get("analog_lever/indicator"),
|
||||
BELT_FUNNEL_FLAP = get("belt_funnel/flap"), BELT_TUNNEL_FLAP = get("belt_tunnel/flap"),
|
||||
FLEXPEATER_INDICATOR = get("diodes/indicator"), FLYWHEEL = get("flywheel/wheel"),
|
||||
FLYWHEEL_UPPER_ROTATING = get("flywheel/upper_rotating_connector"),
|
||||
|
||||
FLYWHEEL_LOWER_ROTATING = get("flywheel/lower_rotating_connector"),
|
||||
|
@ -95,14 +79,14 @@ public class AllBlockPartials {
|
|||
|
||||
MECHANICAL_PUMP_ARROW = get("mechanical_pump/arrow"), MECHANICAL_PUMP_COG = get("mechanical_pump/cog"),
|
||||
FLUID_PIPE_CASING = get("fluid_pipe/casing"),
|
||||
|
||||
|
||||
COUPLING_ATTACHMENT = getEntity("minecart_coupling/attachment"),
|
||||
COUPLING_RING = getEntity("minecart_coupling/ring"),
|
||||
COUPLING_CONNECTOR = getEntity("minecart_coupling/connector")
|
||||
|
||||
;
|
||||
|
||||
public static final Map<Direction, AllBlockPartials> PIPE_RIMS = map();
|
||||
;
|
||||
|
||||
public static final Map<AttachmentTypes, Map<Direction, AllBlockPartials>> PIPE_ATTACHMENTS = map();
|
||||
public static final Map<HeatLevel, AllBlockPartials> BLAZES = map();
|
||||
|
||||
static {
|
||||
|
@ -117,8 +101,16 @@ public class AllBlockPartials {
|
|||
private AllBlockPartials() {}
|
||||
|
||||
private static void populateMaps() {
|
||||
for (Direction d : Iterate.directions)
|
||||
PIPE_RIMS.put(d, get("fluid_pipe/rim/" + d.getName()));
|
||||
for (AttachmentTypes type : AttachmentTypes.values()) {
|
||||
if (!type.hasModel())
|
||||
continue;
|
||||
Map<Direction, AllBlockPartials> map = map();
|
||||
for (Direction d : Iterate.directions) {
|
||||
String asId = Lang.asId(type.name());
|
||||
map.put(d, get("fluid_pipe/" + asId + "/" + Lang.asId(d.getName())));
|
||||
}
|
||||
PIPE_ATTACHMENTS.put(type, map);
|
||||
}
|
||||
for (HeatLevel heat : HeatLevel.values()) {
|
||||
if (heat == HeatLevel.NONE)
|
||||
continue;
|
||||
|
@ -136,7 +128,7 @@ public class AllBlockPartials {
|
|||
all.add(partials);
|
||||
return partials;
|
||||
}
|
||||
|
||||
|
||||
private static AllBlockPartials get(String path) {
|
||||
AllBlockPartials partials = new AllBlockPartials();
|
||||
partials.modelLocation = new ResourceLocation(Create.ID, "block/" + path);
|
||||
|
|
|
@ -59,13 +59,15 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul
|
|||
import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock;
|
||||
import com.simibubi.create.content.contraptions.components.turntable.TurntableBlock;
|
||||
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeModel;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidTankBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidTankGenerator;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidTankItem;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidTankModel;
|
||||
import com.simibubi.create.content.contraptions.fluids.PipeAttachmentModel;
|
||||
import com.simibubi.create.content.contraptions.fluids.PumpBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.EncasedPipeBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.GlassFluidPipeBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankGenerator;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankItem;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankModel;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinBlock;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlockItem;
|
||||
|
@ -219,12 +221,14 @@ public class AllBlocks {
|
|||
.build()
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<EncasedShaftBlock> ENCASED_SHAFT = REGISTRATE.block("encased_shaft", EncasedShaftBlock::new)
|
||||
public static final BlockEntry<EncasedShaftBlock> ENCASED_SHAFT =
|
||||
REGISTRATE.block("encased_shaft", EncasedShaftBlock::new)
|
||||
.initialProperties(SharedProperties::stone)
|
||||
.properties(Block.Properties::nonOpaque)
|
||||
.transform(StressConfigDefaults.setNoImpact())
|
||||
//.blockstate(BlockStateGen.axisBlockProvider(true))
|
||||
.blockstate((c, p) -> axisBlock(c, p, blockState -> p.models().getExistingFile(p.modLoc("block/encased_shaft/" + blockState.get(EncasedShaftBlock.CASING).getName()))))
|
||||
.blockstate((c, p) -> axisBlock(c, p, blockState -> p.models()
|
||||
.getExistingFile(p.modLoc("block/encased_shaft/" + blockState.get(EncasedShaftBlock.CASING)
|
||||
.getName()))))
|
||||
.loot((p, b) -> p.registerDropping(b, SHAFT.get()))
|
||||
.register();
|
||||
|
||||
|
@ -461,14 +465,34 @@ public class AllBlocks {
|
|||
public static final BlockEntry<FluidPipeBlock> FLUID_PIPE = REGISTRATE.block("fluid_pipe", FluidPipeBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate(BlockStateGen.pipe())
|
||||
.onRegister(CreateRegistrate.blockModel(() -> FluidPipeModel::new))
|
||||
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
|
||||
.item()
|
||||
.transform(customItemModel())
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<EncasedPipeBlock> ENCASED_FLUID_PIPE =
|
||||
REGISTRATE.block("encased_fluid_pipe", EncasedPipeBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate((c, p) -> BlockStateGen.axisBlock(c, p, state -> p.models()
|
||||
.cubeColumn(c.getName(), p.modLoc("block/copper_casing"), p.modLoc("block/encased_pipe"))))
|
||||
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
|
||||
.loot((p, b) -> p.registerDropping(b, FLUID_PIPE.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<GlassFluidPipeBlock> GLASS_FLUID_PIPE =
|
||||
REGISTRATE.block("glass_fluid_pipe", GlassFluidPipeBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.addLayer(() -> RenderType::getCutoutMipped)
|
||||
.blockstate((c, p) -> BlockStateGen.axisBlock(c, p, s -> p.models()
|
||||
.getExistingFile(p.modLoc("block/fluid_pipe/window" + (s.get(GlassFluidPipeBlock.ALT) ? "_alt" : "")))))
|
||||
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
|
||||
.loot((p, b) -> p.registerDropping(b, FLUID_PIPE.get()))
|
||||
.register();
|
||||
|
||||
public static final BlockEntry<PumpBlock> MECHANICAL_PUMP = REGISTRATE.block("mechanical_pump", PumpBlock::new)
|
||||
.initialProperties(SharedProperties::softMetal)
|
||||
.blockstate(BlockStateGen.directionalBlockProviderIgnoresWaterlogged(true))
|
||||
.onRegister(CreateRegistrate.blockModel(() -> PipeAttachmentModel::new))
|
||||
.transform(StressConfigDefaults.setImpact(4.0))
|
||||
.item()
|
||||
.transform(customItemModel())
|
||||
|
|
|
@ -29,6 +29,7 @@ public class AllShapes {
|
|||
CASING_11PX = shape(0, 0, 0, 16, 11, 16).forDirectional(),
|
||||
MOTOR_BLOCK = shape(3, 0, 3, 13, 14, 13).forDirectional(),
|
||||
FOUR_VOXEL_POLE = shape(6, 0, 6, 10, 16, 10).forAxis(), SIX_VOXEL_POLE = shape(5, 0, 5, 11, 16, 11).forAxis(),
|
||||
EIGHT_VOXEL_POLE = shape(4, 0, 4, 12, 16, 12).forAxis(),
|
||||
EXTRACTOR = shape(4, 2, 11, 12, 10, 17).forDirectional(SOUTH)
|
||||
.withVerticalShapes(cuboid(4, 11, 4, 12, 17, 12)),
|
||||
TRANSPOSER = shape(4, 4, -1, 12, 12, 1).add(5, 5, 0, 11, 11, 16)
|
||||
|
|
|
@ -43,11 +43,13 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pul
|
|||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.turntable.TurntableTileEntity;
|
||||
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidTankRenderer;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidTankTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.PumpRenderer;
|
||||
import com.simibubi.create.content.contraptions.fluids.PumpTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.StraightPipeTileEntity;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.TransparentStraightPipeRenderer;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankRenderer;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinRenderer;
|
||||
import com.simibubi.create.content.contraptions.processing.BasinTileEntity;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerRenderer;
|
||||
|
@ -203,10 +205,21 @@ public class AllTileEntities {
|
|||
.register();
|
||||
|
||||
public static final TileEntityEntry<FluidPipeTileEntity> FLUID_PIPE = Create.registrate()
|
||||
.tileEntity("fluid_pipe", (NonNullFunction<TileEntityType<FluidPipeTileEntity>, ? extends FluidPipeTileEntity>) FluidPipeTileEntity::new)
|
||||
.tileEntity("fluid_pipe", FluidPipeTileEntity::new)
|
||||
.validBlocks(AllBlocks.FLUID_PIPE)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<StraightPipeTileEntity> ENCASED_FLUID_PIPE = Create.registrate()
|
||||
.tileEntity("encased_fluid_pipe", StraightPipeTileEntity::new)
|
||||
.validBlocks(AllBlocks.ENCASED_FLUID_PIPE)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<StraightPipeTileEntity> GLASS_FLUID_PIPE = Create.registrate()
|
||||
.tileEntity("glass_fluid_pipe", StraightPipeTileEntity::new)
|
||||
.validBlocks(AllBlocks.GLASS_FLUID_PIPE)
|
||||
.renderer(() -> TransparentStraightPipeRenderer::new)
|
||||
.register();
|
||||
|
||||
public static final TileEntityEntry<FluidTankTileEntity> FLUID_TANK = Create.registrate()
|
||||
.tileEntity("fluid_tank", (NonNullFunction<TileEntityType<FluidTankTileEntity>, ? extends FluidTankTileEntity>) FluidTankTileEntity::new)
|
||||
.validBlocks(AllBlocks.FLUID_TANK)
|
||||
|
|
|
@ -61,10 +61,10 @@ class FluidNetworkFlow {
|
|||
|
||||
void addToSkippedConnections(IWorld world) {
|
||||
forEachPipeFlow(world, (pipe, face, inbound) -> {
|
||||
if (!pipe.fluid.isFluidEqual(fluidStack))
|
||||
if (!pipe.getFluid().isFluidEqual(fluidStack))
|
||||
return;
|
||||
BlockFace blockFace = new BlockFace(pipe.getPos(), face);
|
||||
this.activePipeNetwork.previousFlow.put(blockFace, pipe.fluid);
|
||||
this.activePipeNetwork.previousFlow.put(blockFace, pipe.getFluid());
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -186,7 +186,7 @@ class FluidNetworkFlow {
|
|||
BlockFace blockface = new BlockFace(currentPos, direction);
|
||||
|
||||
if (!pipe.hasStartedFlow(this, direction, inbound))
|
||||
pipe.addFlow(this, direction, inbound);
|
||||
pipe.addFlow(this, direction, inbound, false);
|
||||
if (skipping && canSkip(previousFlow, blockface)) {
|
||||
pipe.skipFlow(direction, inbound);
|
||||
FluidPropagator.showBlockFace(blockface)
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.BehaviourType;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.ILightReader;
|
||||
|
||||
public class FluidPipeAttachmentBehaviour extends TileEntityBehaviour {
|
||||
|
||||
public static BehaviourType<FluidPipeAttachmentBehaviour> TYPE = new BehaviourType<>();
|
||||
|
||||
public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) {
|
||||
if (!isPipeConnectedTowards(state, direction))
|
||||
return AttachmentTypes.NONE;
|
||||
|
||||
BlockPos offsetPos = pos.offset(direction);
|
||||
BlockState facingState = world.getBlockState(offsetPos);
|
||||
|
||||
if (facingState.getBlock() instanceof PumpBlock && facingState.get(PumpBlock.FACING)
|
||||
.getAxis() == direction.getAxis())
|
||||
return AttachmentTypes.NONE;
|
||||
|
||||
if (FluidPropagator.hasFluidCapability(facingState, world, offsetPos, direction))
|
||||
return AttachmentTypes.DRAIN;
|
||||
|
||||
return AttachmentTypes.RIM;
|
||||
}
|
||||
|
||||
public boolean isPipeConnectedTowards(BlockState state, Direction direction) {
|
||||
FluidPipeBehaviour fluidPipeBehaviour = TileEntityBehaviour.get(tileEntity, FluidPipeBehaviour.TYPE);
|
||||
if (fluidPipeBehaviour == null)
|
||||
return false;
|
||||
return fluidPipeBehaviour.isConnectedTo(state, direction);
|
||||
}
|
||||
|
||||
public static enum AttachmentTypes {
|
||||
NONE, RIM, DRAIN;
|
||||
|
||||
public boolean hasModel() {
|
||||
return this != NONE;
|
||||
}
|
||||
}
|
||||
|
||||
public FluidPipeAttachmentBehaviour(SmartTileEntity te) {
|
||||
super(te);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BehaviourType<?> getType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
}
|
|
@ -103,7 +103,15 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
CompoundNBT nbt = new CompoundNBT();
|
||||
NBTHelper.writeEnum(nbt, "Face", face);
|
||||
nbt.putBoolean("In", inbound);
|
||||
PipeFlows pipeFlows = allFlows.get(face)
|
||||
.get(inbound);
|
||||
Set<FluidNetworkFlow> participants = pipeFlows.participants;
|
||||
nbt.putBoolean("Silent", participants == null || participants.isEmpty());
|
||||
nbt.put("Progress", flowProgress.writeNBT());
|
||||
|
||||
if (client)
|
||||
nbt.putFloat("Strength", pipeFlows.bestFlowStrength);
|
||||
|
||||
flows.add(nbt);
|
||||
}
|
||||
compound.put("Flows", flows);
|
||||
|
@ -125,8 +133,10 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
boolean inbound = nbt.getBoolean("In");
|
||||
LerpedFloat progress = createFlowProgress(0);
|
||||
progress.readNBT(nbt.getCompound("Progress"), false);
|
||||
addFlow(null, face, inbound);
|
||||
addFlow(null, face, inbound, nbt.getBoolean("Silent"));
|
||||
setFlowProgress(face, inbound, progress);
|
||||
if (client)
|
||||
setVisualFlowStrength(face, inbound, nbt.getFloat("Strength"));
|
||||
});
|
||||
|
||||
if (!client)
|
||||
|
@ -143,7 +153,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
}
|
||||
}
|
||||
|
||||
public void addFlow(@Nullable FluidNetworkFlow flow, Direction face, boolean inbound) {
|
||||
public void addFlow(@Nullable FluidNetworkFlow flow, Direction face, boolean inbound, boolean silent) {
|
||||
if (flow != null) {
|
||||
FluidStack fluid = flow.getFluidStack();
|
||||
if (!this.fluid.isEmpty() && !fluid.isFluidEqual(this.fluid)) {
|
||||
|
@ -155,7 +165,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
|
||||
if (!allFlows.containsKey(face)) {
|
||||
allFlows.put(face, Couple.create(PipeFlows::new));
|
||||
if (inbound)
|
||||
if (inbound && !silent)
|
||||
spawnSplashOnRim(face);
|
||||
}
|
||||
|
||||
|
@ -173,6 +183,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
Couple<PipeFlows> couple = allFlows.get(face);
|
||||
couple.get(inbound)
|
||||
.removeFlow(flow);
|
||||
contentsChanged();
|
||||
if (!couple.get(true)
|
||||
.isActive()
|
||||
&& !couple.get(false)
|
||||
|
@ -182,6 +193,13 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
clear();
|
||||
}
|
||||
|
||||
public void setVisualFlowStrength(Direction face, boolean inbound, float strength) {
|
||||
if (!allFlows.containsKey(face))
|
||||
return;
|
||||
allFlows.get(face)
|
||||
.get(inbound).bestFlowStrength = strength;
|
||||
}
|
||||
|
||||
public void setFlowProgress(Direction face, boolean inbound, LerpedFloat progress) {
|
||||
if (!allFlows.containsKey(face))
|
||||
return;
|
||||
|
@ -219,7 +237,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
}
|
||||
|
||||
public static final int MAX_PARTICLE_RENDER_DISTANCE = 20;
|
||||
public static final int SPLASH_PARTICLE_AMOUNT = 10;
|
||||
public static final int SPLASH_PARTICLE_AMOUNT = 3;
|
||||
public static final float IDLE_PARTICLE_SPAWN_CHANCE = 1 / 100f;
|
||||
public static final Random r = new Random();
|
||||
|
||||
|
@ -256,7 +274,7 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
World world = Minecraft.getInstance().world;
|
||||
BlockPos pos = tileEntity.getPos();
|
||||
BlockState state = world.getBlockState(pos);
|
||||
spawnRimParticles(world, state, fluid, face, 20);
|
||||
spawnRimParticles(world, state, fluid, face, SPLASH_PARTICLE_AMOUNT);
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
|
@ -316,12 +334,14 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
vec = vec.add(centerOf);
|
||||
if (inbound) {
|
||||
vec = vec.add(m);
|
||||
m = centerOf.add(directionVec.scale(.5)).subtract(vec).scale(3);
|
||||
m = centerOf.add(directionVec.scale(.5))
|
||||
.subtract(vec)
|
||||
.scale(3);
|
||||
}
|
||||
world.addOptionalParticle(particle, vec.x, vec.y - 1 / 16f, vec.z, m.x, m.y, m.z);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
|
@ -360,6 +380,28 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
}
|
||||
}
|
||||
|
||||
public Pair<Boolean, LerpedFloat> getStrogestFlow(Direction side) {
|
||||
Couple<PipeFlows> couple = allFlows.get(side);
|
||||
if (couple == null)
|
||||
return null;
|
||||
|
||||
PipeFlows in = couple.get(true);
|
||||
PipeFlows out = couple.get(false);
|
||||
Couple<LerpedFloat> progress = couple.map(pf -> pf.progress);
|
||||
boolean inboundStronger = false;
|
||||
|
||||
if (in.isCompleted() != out.isCompleted()) {
|
||||
inboundStronger = in.isCompleted();
|
||||
} else if ((progress.get(true) == null) != (progress.get(false) == null)) {
|
||||
inboundStronger = progress.get(true) != null;
|
||||
} else {
|
||||
if (progress.get(true) != null)
|
||||
inboundStronger = in.bestFlowStrength > out.bestFlowStrength;
|
||||
}
|
||||
|
||||
return Pair.of(inboundStronger, progress.get(inboundStronger));
|
||||
}
|
||||
|
||||
private void clientTick() {
|
||||
spawnParticles();
|
||||
|
||||
|
@ -418,6 +460,10 @@ public abstract class FluidPipeBehaviour extends TileEntityBehaviour {
|
|||
.chase(1, speed, Chaser.LINEAR);
|
||||
}
|
||||
|
||||
public FluidStack getFluid() {
|
||||
return fluid;
|
||||
}
|
||||
|
||||
class PipeFlows {
|
||||
LerpedFloat progress;
|
||||
Set<FluidNetworkFlow> participants;
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
|
||||
public class FluidPipeTileEntity extends SmartTileEntity {
|
||||
|
||||
FluidPipeBehaviour behaviour;
|
||||
|
||||
public FluidPipeTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||
super(tileEntityTypeIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
behaviour = new StandardPipeBehaviour(this);
|
||||
behaviours.add(behaviour);
|
||||
}
|
||||
|
||||
class StandardPipeBehaviour extends FluidPipeBehaviour {
|
||||
|
||||
public StandardPipeBehaviour(SmartTileEntity te) {
|
||||
super(te);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConnectedTo(BlockState state, Direction direction) {
|
||||
return FluidPipeBlock.isPipe(state) && state.get(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(direction));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -9,6 +9,8 @@ import org.apache.commons.lang3.mutable.MutableObject;
|
|||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.AxisPipeBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.BlockFace;
|
||||
|
@ -17,19 +19,47 @@ import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams;
|
|||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.FlowingFluidBlock;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.Direction.AxisDirection;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import net.minecraftforge.fml.DistExecutor;
|
||||
|
||||
public class FluidPropagator {
|
||||
|
||||
public static Direction validateNeighbourChange(BlockState state, World world, BlockPos pos, Block otherBlock,
|
||||
BlockPos neighborPos, boolean isMoving) {
|
||||
if (world.isRemote)
|
||||
return null;
|
||||
if (otherBlock instanceof FluidPipeBlock)
|
||||
return null;
|
||||
if (otherBlock instanceof AxisPipeBlock)
|
||||
return null;
|
||||
if (otherBlock instanceof PumpBlock)
|
||||
return null;
|
||||
if (otherBlock instanceof FlowingFluidBlock)
|
||||
return null;
|
||||
if (!isStraightPipe(state))
|
||||
return null;
|
||||
for (Direction d : Iterate.directions) {
|
||||
if (!pos.offset(d)
|
||||
.equals(neighborPos))
|
||||
continue;
|
||||
return d;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static FluidPipeBehaviour getPipe(IBlockReader reader, BlockPos pos) {
|
||||
return TileEntityBehaviour.get(reader, pos, FluidPipeBehaviour.TYPE);
|
||||
}
|
||||
|
@ -125,4 +155,35 @@ public class FluidPropagator {
|
|||
|
||||
static AxisAlignedBB smallCenter = new AxisAlignedBB(BlockPos.ZERO).shrink(.25);
|
||||
|
||||
public static boolean hasFluidCapability(BlockState state, IBlockReader world, BlockPos pos, Direction blockFace) {
|
||||
return state.hasTileEntity() && world.getTileEntity(pos)
|
||||
.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, blockFace.getOpposite())
|
||||
.isPresent();
|
||||
}
|
||||
|
||||
public static boolean isStraightPipe(BlockState state) {
|
||||
if (state.getBlock() instanceof AxisPipeBlock)
|
||||
return true;
|
||||
if (!FluidPipeBlock.isPipe(state))
|
||||
return false;
|
||||
boolean axisFound = false;
|
||||
int connections = 0;
|
||||
for (Axis axis : Iterate.axes) {
|
||||
Direction d1 = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis);
|
||||
Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis);
|
||||
boolean openAt1 = FluidPipeBlock.isOpenAt(state, d1);
|
||||
boolean openAt2 = FluidPipeBlock.isOpenAt(state, d2);
|
||||
if (openAt1)
|
||||
connections++;
|
||||
if (openAt2)
|
||||
connections++;
|
||||
if (openAt1 && openAt2)
|
||||
if (axisFound)
|
||||
return false;
|
||||
else
|
||||
axisFound = true;
|
||||
}
|
||||
return axisFound && connections == 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -125,6 +125,8 @@ public class OpenEndedPipe {
|
|||
return 0;
|
||||
if (!world.isAreaLoaded(outputPos, 0))
|
||||
return 0;
|
||||
if (resource.isEmpty())
|
||||
return 0;
|
||||
BlockState state = world.getBlockState(outputPos);
|
||||
IFluidState fluidState = state.getFluidState();
|
||||
if (!fluidState.isEmpty() && fluidState.getFluid() != resource.getFluid()) {
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import com.simibubi.create.AllBlockPartials;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour.AttachmentTypes;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
||||
import com.simibubi.create.foundation.block.render.WrappedBakedModel;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
|
@ -18,19 +22,22 @@ import net.minecraftforge.client.model.data.IModelData;
|
|||
import net.minecraftforge.client.model.data.ModelDataMap;
|
||||
import net.minecraftforge.client.model.data.ModelProperty;
|
||||
|
||||
public class FluidPipeModel extends WrappedBakedModel {
|
||||
public class PipeAttachmentModel extends WrappedBakedModel {
|
||||
|
||||
private static ModelProperty<PipeModelData> PIPE_PROPERTY = new ModelProperty<>();
|
||||
|
||||
public FluidPipeModel(IBakedModel template) {
|
||||
public PipeAttachmentModel(IBakedModel template) {
|
||||
super(template);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IModelData getModelData(ILightReader world, BlockPos pos, BlockState state, IModelData tileData) {
|
||||
PipeModelData data = new PipeModelData();
|
||||
for (Direction d : Iterate.directions)
|
||||
data.putRim(d, FluidPipeBlock.shouldDrawRim(world, pos, state, d));
|
||||
FluidPipeAttachmentBehaviour attachmentBehaviour =
|
||||
TileEntityBehaviour.get(world, pos, FluidPipeAttachmentBehaviour.TYPE);
|
||||
if (attachmentBehaviour != null)
|
||||
for (Direction d : Iterate.directions)
|
||||
data.putRim(d, attachmentBehaviour.getAttachment(world, pos, state, d));
|
||||
data.setEncased(FluidPipeBlock.shouldDrawCasing(world, pos, state));
|
||||
return new ModelDataMap.Builder().withInitial(PIPE_PROPERTY, data)
|
||||
.build();
|
||||
|
@ -41,8 +48,10 @@ public class FluidPipeModel extends WrappedBakedModel {
|
|||
List<BakedQuad> quads = super.getQuads(state, side, rand, data);
|
||||
if (data instanceof ModelDataMap) {
|
||||
ModelDataMap modelDataMap = (ModelDataMap) data;
|
||||
if (modelDataMap.hasProperty(PIPE_PROPERTY))
|
||||
if (modelDataMap.hasProperty(PIPE_PROPERTY)) {
|
||||
quads = new ArrayList<>(quads);
|
||||
addQuads(quads, state, side, rand, modelDataMap, modelDataMap.getData(PIPE_PROPERTY));
|
||||
}
|
||||
}
|
||||
return quads;
|
||||
}
|
||||
|
@ -50,8 +59,9 @@ public class FluidPipeModel extends WrappedBakedModel {
|
|||
private void addQuads(List<BakedQuad> quads, BlockState state, Direction side, Random rand, IModelData data,
|
||||
PipeModelData pipeData) {
|
||||
for (Direction d : Iterate.directions)
|
||||
if (pipeData.getRim(d))
|
||||
quads.addAll(AllBlockPartials.PIPE_RIMS.get(d)
|
||||
if (pipeData.hasRim(d))
|
||||
quads.addAll(AllBlockPartials.PIPE_ATTACHMENTS.get(pipeData.getRim(d))
|
||||
.get(d)
|
||||
.get()
|
||||
.getQuads(state, side, rand, data));
|
||||
if (pipeData.isEncased())
|
||||
|
@ -60,15 +70,15 @@ public class FluidPipeModel extends WrappedBakedModel {
|
|||
}
|
||||
|
||||
private class PipeModelData {
|
||||
boolean[] rims;
|
||||
AttachmentTypes[] rims;
|
||||
boolean encased;
|
||||
|
||||
public PipeModelData() {
|
||||
rims = new boolean[6];
|
||||
Arrays.fill(rims, false);
|
||||
rims = new AttachmentTypes[6];
|
||||
Arrays.fill(rims, AttachmentTypes.NONE);
|
||||
}
|
||||
|
||||
public void putRim(Direction face, boolean rim) {
|
||||
public void putRim(Direction face, AttachmentTypes rim) {
|
||||
rims[face.getIndex()] = rim;
|
||||
}
|
||||
|
||||
|
@ -76,7 +86,11 @@ public class FluidPipeModel extends WrappedBakedModel {
|
|||
this.encased = encased;
|
||||
}
|
||||
|
||||
public boolean getRim(Direction face) {
|
||||
public boolean hasRim(Direction face) {
|
||||
return rims[face.getIndex()] != AttachmentTypes.NONE;
|
||||
}
|
||||
|
||||
public AttachmentTypes getRim(Direction face) {
|
||||
return rims[face.getIndex()];
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ import org.apache.commons.lang3.mutable.MutableBoolean;
|
|||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.base.DirectionalKineticBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
||||
import com.simibubi.create.foundation.utility.BlockFace;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@ import java.util.Map;
|
|||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.BlockFace;
|
||||
import com.simibubi.create.foundation.utility.Couple;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
@ -22,6 +24,8 @@ import net.minecraft.nbt.CompoundNBT;
|
|||
import net.minecraft.nbt.ListNBT;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.ILightReader;
|
||||
import net.minecraftforge.common.util.Constants.NBT;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||
|
@ -45,6 +49,12 @@ public class PumpTileEntity extends KineticTileEntity {
|
|||
openEnds = Couple.create(HashMap::new);
|
||||
setProvidedFluid(FluidStack.EMPTY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
behaviours.add(new PumpAttachmentBehaviour(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
|
@ -346,4 +356,25 @@ public class PumpTileEntity extends KineticTileEntity {
|
|||
this.providedFluid = providedFluid;
|
||||
}
|
||||
|
||||
class PumpAttachmentBehaviour extends FluidPipeAttachmentBehaviour {
|
||||
|
||||
public PumpAttachmentBehaviour(SmartTileEntity te) {
|
||||
super(te);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPipeConnectedTowards(BlockState state, Direction direction) {
|
||||
return isSideAccessible(direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) {
|
||||
AttachmentTypes attachment = super.getAttachment(world, pos, state, direction);
|
||||
if (attachment == AttachmentTypes.RIM)
|
||||
return AttachmentTypes.NONE;
|
||||
return attachment;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.pipes;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllShapes;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPropagator;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.RotatedPillarBlock;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.DebugPacketSender;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.AxisDirection;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.TickPriority;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
|
||||
public class AxisPipeBlock extends RotatedPillarBlock implements IWrenchable {
|
||||
|
||||
public AxisPipeBlock(Properties p_i48339_1_) {
|
||||
super(p_i48339_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean isMoving) {
|
||||
boolean blockTypeChanged = state.getBlock() != newState.getBlock();
|
||||
if (blockTypeChanged && !world.isRemote)
|
||||
FluidPropagator.propagateChangedPipe(world, pos, state);
|
||||
if (state.hasTileEntity() && (blockTypeChanged || !newState.hasTileEntity()))
|
||||
world.removeTileEntity(pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving) {
|
||||
if (world.isRemote)
|
||||
return;
|
||||
if (state != oldState)
|
||||
world.getPendingBlockTicks()
|
||||
.scheduleTick(pos, this, 1, TickPriority.HIGH);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getPickBlock(BlockState state, RayTraceResult target, IBlockReader world, BlockPos pos,
|
||||
PlayerEntity player) {
|
||||
return AllBlocks.FLUID_PIPE.asStack();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos,
|
||||
boolean isMoving) {
|
||||
DebugPacketSender.func_218806_a(world, pos);
|
||||
Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving);
|
||||
if (d == null)
|
||||
return;
|
||||
if (!isOpenAt(state, d))
|
||||
return;
|
||||
world.getPendingBlockTicks()
|
||||
.scheduleTick(pos, this, 1, TickPriority.HIGH);
|
||||
}
|
||||
|
||||
public static boolean isOpenAt(BlockState state, Direction d) {
|
||||
return d.getAxis() == state.get(AXIS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random r) {
|
||||
FluidPropagator.propagateChangedPipe(world, pos, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||
ISelectionContext p_220053_4_) {
|
||||
return AllShapes.EIGHT_VOXEL_POLE.get(state.get(AXIS));
|
||||
}
|
||||
|
||||
public BlockState toRegularPipe(IWorld world, BlockPos pos, BlockState state) {
|
||||
Direction side = Direction.getFacingFromAxis(AxisDirection.POSITIVE, state.get(AXIS));
|
||||
Map<Direction, BooleanProperty> facingToPropertyMap = FluidPipeBlock.FACING_TO_PROPERTY_MAP;
|
||||
return AllBlocks.FLUID_PIPE.get()
|
||||
.updateBlockState(AllBlocks.FLUID_PIPE.getDefaultState()
|
||||
.with(facingToPropertyMap.get(side), true)
|
||||
.with(facingToPropertyMap.get(side.getOpposite()), true), side, null, world, pos);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.pipes;
|
||||
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.shapes.ISelectionContext;
|
||||
import net.minecraft.util.math.shapes.VoxelShape;
|
||||
import net.minecraft.util.math.shapes.VoxelShapes;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EncasedPipeBlock extends AxisPipeBlock {
|
||||
|
||||
public EncasedPipeBlock(Properties p_i48339_1_) {
|
||||
super(p_i48339_1_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.ENCASED_FLUID_PIPE.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VoxelShape getShape(BlockState state, IBlockReader p_220053_2_, BlockPos p_220053_3_,
|
||||
ISelectionContext p_220053_4_) {
|
||||
return VoxelShapes.fullCube();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
World world = context.getWorld();
|
||||
BlockPos pos = context.getPos();
|
||||
world.setBlockState(pos, toRegularPipe(world, pos, state), 3);
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,43 +1,95 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.pipes;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPropagator;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.FlowingFluidBlock;
|
||||
import net.minecraft.block.IWaterLoggable;
|
||||
import net.minecraft.block.SixWayBlock;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.fluid.IFluidState;
|
||||
import net.minecraft.item.BlockItemUseContext;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.network.DebugPacketSender;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.Direction.AxisDirection;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockRayTraceResult;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.ILightReader;
|
||||
import net.minecraft.world.IWorld;
|
||||
import net.minecraft.world.TickPriority;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.server.ServerWorld;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
|
||||
public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable {
|
||||
public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable, IWrenchable {
|
||||
|
||||
public FluidPipeBlock(Properties properties) {
|
||||
super(4 / 16f, properties);
|
||||
this.setDefaultState(super.getDefaultState().with(BlockStateProperties.WATERLOGGED, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
World world = context.getWorld();
|
||||
BlockPos pos = context.getPos();
|
||||
Axis axis = getAxis(world, pos, state);
|
||||
if (axis == null)
|
||||
return ActionResultType.PASS;
|
||||
if (context.getFace()
|
||||
.getAxis() == axis)
|
||||
return ActionResultType.PASS;
|
||||
if (!world.isRemote)
|
||||
world.setBlockState(pos, AllBlocks.GLASS_FLUID_PIPE.getDefaultState()
|
||||
.with(GlassFluidPipeBlock.AXIS, axis));
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand,
|
||||
BlockRayTraceResult hit) {
|
||||
if (!AllBlocks.COPPER_CASING.isIn(player.getHeldItem(hand)))
|
||||
return ActionResultType.PASS;
|
||||
Axis axis = getAxis(world, pos, state);
|
||||
if (axis == null)
|
||||
return ActionResultType.PASS;
|
||||
if (!world.isRemote)
|
||||
world.setBlockState(pos, AllBlocks.ENCASED_FLUID_PIPE.getDefaultState()
|
||||
.with(EncasedPipeBlock.AXIS, axis));
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Axis getAxis(IBlockReader world, BlockPos pos, BlockState state) {
|
||||
if (!FluidPropagator.isStraightPipe(state))
|
||||
return null;
|
||||
Axis axis = null;
|
||||
for (Direction d : Iterate.directions) {
|
||||
if (isOpenAt(state, d)) {
|
||||
axis = d.getAxis();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return axis;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
|
@ -70,25 +122,13 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable {
|
|||
public void neighborChanged(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos neighborPos,
|
||||
boolean isMoving) {
|
||||
DebugPacketSender.func_218806_a(world, pos);
|
||||
if (world.isRemote)
|
||||
Direction d = FluidPropagator.validateNeighbourChange(state, world, pos, otherBlock, neighborPos, isMoving);
|
||||
if (d == null)
|
||||
return;
|
||||
if (otherBlock instanceof FluidPipeBlock)
|
||||
if (!isOpenAt(state, d))
|
||||
return;
|
||||
if (otherBlock instanceof PumpBlock)
|
||||
return;
|
||||
if (otherBlock instanceof FlowingFluidBlock)
|
||||
return;
|
||||
if (!isStraightPipe(state))
|
||||
return;
|
||||
for (Direction d : Iterate.directions) {
|
||||
if (!pos.offset(d)
|
||||
.equals(neighborPos))
|
||||
continue;
|
||||
if (!isOpenAt(state, d))
|
||||
return;
|
||||
world.getPendingBlockTicks()
|
||||
.scheduleTick(pos, this, 1, TickPriority.HIGH);
|
||||
}
|
||||
world.getPendingBlockTicks()
|
||||
.scheduleTick(pos, this, 1, TickPriority.HIGH);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -100,65 +140,38 @@ public class FluidPipeBlock extends SixWayBlock implements IWaterLoggable {
|
|||
return state.getBlock() instanceof FluidPipeBlock;
|
||||
}
|
||||
|
||||
public static boolean hasFluidCapability(BlockState state, IBlockReader world, BlockPos pos, Direction blockFace) {
|
||||
return state.hasTileEntity() && world.getTileEntity(pos)
|
||||
.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, blockFace.getOpposite())
|
||||
.isPresent();
|
||||
}
|
||||
|
||||
public static boolean canConnectTo(ILightReader world, BlockPos pos, BlockState neighbour, Direction blockFace) {
|
||||
if (isPipe(neighbour) || hasFluidCapability(neighbour, world, pos, blockFace))
|
||||
if (isPipe(neighbour) || FluidPropagator.hasFluidCapability(neighbour, world, pos, blockFace))
|
||||
return true;
|
||||
// TODO: more generic pipe connection handling.
|
||||
return neighbour.getBlock() instanceof PumpBlock && blockFace.getAxis() == neighbour.get(PumpBlock.FACING)
|
||||
.getAxis();
|
||||
FluidPipeAttachmentBehaviour attachmentBehaviour =
|
||||
TileEntityBehaviour.get(world, pos, FluidPipeAttachmentBehaviour.TYPE);
|
||||
if (attachmentBehaviour == null)
|
||||
return false;
|
||||
return attachmentBehaviour.isPipeConnectedTowards(neighbour, blockFace.getOpposite());
|
||||
}
|
||||
|
||||
public static boolean shouldDrawRim(ILightReader world, BlockPos pos, BlockState state, Direction direction) {
|
||||
if (!isPipe(state))
|
||||
return false;
|
||||
if (!isOpenAt(state, direction))
|
||||
return false;
|
||||
BlockPos offsetPos = pos.offset(direction);
|
||||
BlockState facingState = world.getBlockState(offsetPos);
|
||||
if (facingState.getBlock() instanceof PumpBlock && facingState.get(PumpBlock.FACING)
|
||||
.getAxis() == direction.getAxis())
|
||||
return false;
|
||||
if (!isPipe(facingState))
|
||||
return true;
|
||||
if (!isCornerOrEndPipe(world, pos, state))
|
||||
return false;
|
||||
if (isStraightPipe(facingState))
|
||||
if (FluidPropagator.isStraightPipe(facingState))
|
||||
return true;
|
||||
if (!shouldDrawCasing(world, pos, state) && shouldDrawCasing(world, offsetPos, facingState))
|
||||
return true;
|
||||
if (isCornerOrEndPipe(world, offsetPos, facingState))
|
||||
return direction.getAxisDirection() == AxisDirection.POSITIVE;
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean isOpenAt(BlockState state, Direction direction) {
|
||||
public static boolean isOpenAt(BlockState state, Direction direction) {
|
||||
return state.get(FACING_TO_PROPERTY_MAP.get(direction));
|
||||
}
|
||||
|
||||
public static boolean isCornerOrEndPipe(ILightReader world, BlockPos pos, BlockState state) {
|
||||
return isPipe(state) && !isStraightPipe(state) && !shouldDrawCasing(world, pos, state);
|
||||
}
|
||||
|
||||
public static boolean isStraightPipe(BlockState state) {
|
||||
if (!isPipe(state))
|
||||
return false;
|
||||
boolean axisFound = false;
|
||||
for (Axis axis : Iterate.axes) {
|
||||
Direction d1 = Direction.getFacingFromAxis(AxisDirection.NEGATIVE, axis);
|
||||
Direction d2 = Direction.getFacingFromAxis(AxisDirection.POSITIVE, axis);
|
||||
if (isOpenAt(state, d1) && isOpenAt(state, d2))
|
||||
if (axisFound)
|
||||
return false;
|
||||
else
|
||||
axisFound = true;
|
||||
}
|
||||
return axisFound;
|
||||
return isPipe(state) && !FluidPropagator.isStraightPipe(state) && !shouldDrawCasing(world, pos, state);
|
||||
}
|
||||
|
||||
public static boolean shouldDrawCasing(ILightReader world, BlockPos pos, BlockState state) {
|
|
@ -0,0 +1,67 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.pipes;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.ILightReader;
|
||||
|
||||
public class FluidPipeTileEntity extends SmartTileEntity {
|
||||
|
||||
public FluidPipeTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||
super(tileEntityTypeIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
behaviours.add(new StandardPipeBehaviour(this));
|
||||
behaviours.add(new StandardPipeAttachmentBehaviour(this));
|
||||
}
|
||||
|
||||
class StandardPipeBehaviour extends FluidPipeBehaviour {
|
||||
|
||||
public StandardPipeBehaviour(SmartTileEntity te) {
|
||||
super(te);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConnectedTo(BlockState state, Direction direction) {
|
||||
return FluidPipeBlock.isPipe(state) && state.get(FluidPipeBlock.FACING_TO_PROPERTY_MAP.get(direction));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class StandardPipeAttachmentBehaviour extends FluidPipeAttachmentBehaviour {
|
||||
|
||||
public StandardPipeAttachmentBehaviour(SmartTileEntity te) {
|
||||
super(te);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) {
|
||||
AttachmentTypes attachment = super.getAttachment(world, pos, state, direction);
|
||||
|
||||
BlockPos offsetPos = pos.offset(direction);
|
||||
if (!FluidPipeBlock.isPipe(world.getBlockState(offsetPos))) {
|
||||
FluidPipeAttachmentBehaviour attachmentBehaviour =
|
||||
TileEntityBehaviour.get(world, offsetPos, FluidPipeAttachmentBehaviour.TYPE);
|
||||
if (attachmentBehaviour != null && attachmentBehaviour
|
||||
.isPipeConnectedTowards(world.getBlockState(offsetPos), direction.getOpposite()))
|
||||
return AttachmentTypes.NONE;
|
||||
}
|
||||
|
||||
if (attachment == AttachmentTypes.RIM && !FluidPipeBlock.shouldDrawRim(world, pos, state, direction))
|
||||
return AttachmentTypes.NONE;
|
||||
return attachment;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.pipes;
|
||||
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.item.ItemUseContext;
|
||||
import net.minecraft.state.BooleanProperty;
|
||||
import net.minecraft.state.StateContainer.Builder;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ActionResultType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockReader;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class GlassFluidPipeBlock extends AxisPipeBlock {
|
||||
|
||||
public static final BooleanProperty ALT = BooleanProperty.create("alt");
|
||||
|
||||
public GlassFluidPipeBlock(Properties p_i48339_1_) {
|
||||
super(p_i48339_1_);
|
||||
setDefaultState(getDefaultState().with(ALT, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillStateContainer(Builder<Block, BlockState> p_206840_1_) {
|
||||
super.fillStateContainer(p_206840_1_.add(ALT));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasTileEntity(BlockState state) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
|
||||
return AllTileEntities.GLASS_FLUID_PIPE.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||
BlockState newState = state;
|
||||
World world = context.getWorld();
|
||||
BlockPos pos = context.getPos();
|
||||
if (!state.get(ALT))
|
||||
newState = state.with(ALT, true);
|
||||
else
|
||||
newState = toRegularPipe(world, pos, state);
|
||||
world.setBlockState(pos, newState, 3);
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.pipes;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeAttachmentBehaviour;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.tileentity.TileEntityType;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.AxisDirection;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.ILightReader;
|
||||
|
||||
public class StraightPipeTileEntity extends SmartTileEntity {
|
||||
|
||||
public StraightPipeTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||
super(tileEntityTypeIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<TileEntityBehaviour> behaviours) {
|
||||
behaviours.add(new StraightPipeBehaviour(this));
|
||||
behaviours.add(new StraightPipeAttachmentBehaviour(this));
|
||||
}
|
||||
|
||||
class StraightPipeBehaviour extends FluidPipeBehaviour {
|
||||
|
||||
public StraightPipeBehaviour(SmartTileEntity te) {
|
||||
super(te);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConnectedTo(BlockState state, Direction direction) {
|
||||
return state.get(AxisPipeBlock.AXIS) == direction.getAxis();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class StraightPipeAttachmentBehaviour extends FluidPipeAttachmentBehaviour {
|
||||
|
||||
public StraightPipeAttachmentBehaviour(SmartTileEntity te) {
|
||||
super(te);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AttachmentTypes getAttachment(ILightReader world, BlockPos pos, BlockState state, Direction direction) {
|
||||
AttachmentTypes attachment = super.getAttachment(world, pos, state, direction);
|
||||
BlockState otherState = world.getBlockState(pos.offset(direction));
|
||||
if (state.getBlock() instanceof AxisPipeBlock && otherState.getBlock() instanceof AxisPipeBlock) {
|
||||
if (state.get(AxisPipeBlock.AXIS) == otherState.get(AxisPipeBlock.AXIS)) {
|
||||
if (state.getBlock() == otherState.getBlock()
|
||||
|| direction.getAxisDirection() == AxisDirection.POSITIVE)
|
||||
return AttachmentTypes.NONE;
|
||||
}
|
||||
}
|
||||
return attachment;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
package com.simibubi.create.content.contraptions.fluids.pipes;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeBehaviour;
|
||||
import com.simibubi.create.foundation.fluid.FluidRenderer;
|
||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.renderer.SafeTileEntityRenderer;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.Pair;
|
||||
|
||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
public class TransparentStraightPipeRenderer extends SafeTileEntityRenderer<StraightPipeTileEntity> {
|
||||
|
||||
public TransparentStraightPipeRenderer(TileEntityRendererDispatcher dispatcher) {
|
||||
super(dispatcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderSafe(StraightPipeTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||
int light, int overlay) {
|
||||
FluidPipeBehaviour pipe = TileEntityBehaviour.get(te, FluidPipeBehaviour.TYPE);
|
||||
if (pipe == null)
|
||||
return;
|
||||
FluidStack fluidStack = pipe.getFluid();
|
||||
if (fluidStack.isEmpty())
|
||||
return;
|
||||
|
||||
for (Direction side : Iterate.directions) {
|
||||
if (!pipe.isConnectedTo(te.getBlockState(), side))
|
||||
continue;
|
||||
Pair<Boolean, LerpedFloat> strogestFlow = pipe.getStrogestFlow(side);
|
||||
if (strogestFlow == null)
|
||||
continue;
|
||||
LerpedFloat second = strogestFlow.getSecond();
|
||||
if (second == null)
|
||||
continue;
|
||||
|
||||
float value = second.getValue(partialTicks);
|
||||
Boolean inbound = strogestFlow.getFirst();
|
||||
if (value == 1 && !inbound) {
|
||||
FluidPipeBehaviour adjacent = TileEntityBehaviour.get(te.getWorld(), te.getPos()
|
||||
.offset(side), FluidPipeBehaviour.TYPE);
|
||||
|
||||
if (adjacent != null && adjacent.getFluid()
|
||||
.isEmpty())
|
||||
value -= 1e-6f;
|
||||
}
|
||||
|
||||
FluidRenderer.renderFluidStream(fluidStack, side, 3 / 16f, value, inbound, buffer, ms, light);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import com.simibubi.create.AllTileEntities;
|
||||
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import com.simibubi.create.foundation.block.connected.CTSpriteShiftEntry;
|
||||
import com.simibubi.create.foundation.block.connected.HorizontalCTBehaviour;
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
|
@ -1,6 +1,6 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidTankBlock.Shape;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock.Shape;
|
||||
import com.simibubi.create.foundation.data.AssetLookup;
|
||||
import com.simibubi.create.foundation.data.SpecialBlockStateGen;
|
||||
import com.tterrag.registrate.providers.DataGenContext;
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.simibubi.create.foundation.fluid.FluidRenderer;
|
|
@ -1,4 +1,4 @@
|
|||
package com.simibubi.create.content.contraptions.fluids;
|
||||
package com.simibubi.create.content.contraptions.fluids.tank;
|
||||
|
||||
import static java.lang.Math.abs;
|
||||
|
||||
|
@ -7,7 +7,7 @@ import java.util.List;
|
|||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidTankBlock.Shape;
|
||||
import com.simibubi.create.content.contraptions.fluids.tank.FluidTankBlock.Shape;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.fluid.SmartFluidTank;
|
||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue;
|
|
@ -83,10 +83,8 @@ public class BasinBlock extends Block implements ITE<BasinTileEntity>, IWrenchab
|
|||
withTileEntityDo(worldIn, entityIn.getPosition(), te -> {
|
||||
ItemStack insertItem = ItemHandlerHelper.insertItem(te.inputItemInventory, itemEntity.getItem()
|
||||
.copy(), false);
|
||||
|
||||
if (insertItem.isEmpty()) {
|
||||
itemEntity.remove();
|
||||
|
||||
if (!itemEntity.world.isRemote)
|
||||
AllTriggers.triggerForNearbyPlayers(AllTriggers.BASIN_THROW, itemEntity.world,
|
||||
itemEntity.getPosition(), 3);
|
||||
|
|
|
@ -19,7 +19,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.cha
|
|||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssembleRailType;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
|
||||
import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.FluidPipeBlock;
|
||||
import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock;
|
||||
import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock;
|
||||
import com.simibubi.create.content.logistics.block.belts.observer.BeltObserverBlock;
|
||||
import com.simibubi.create.content.palettes.PavedBlock;
|
||||
|
@ -58,7 +58,7 @@ public class BlockStateGen {
|
|||
boolean customItem) {
|
||||
return (c, p) -> p.directionalBlock(c.get(), getBlockModel(customItem, c, p));
|
||||
}
|
||||
|
||||
|
||||
public static <T extends Block> NonNullBiConsumer<DataGenContext<Block, T>, RegistrateBlockstateProvider> directionalBlockProviderIgnoresWaterlogged(
|
||||
boolean customItem) {
|
||||
return (c, p) -> directionalBlockIgnoresWaterlogged(c, p, getBlockModel(customItem, c, p));
|
||||
|
@ -212,9 +212,12 @@ public class BlockStateGen {
|
|||
.build();
|
||||
});
|
||||
}
|
||||
|
||||
public static NonNullBiConsumer<DataGenContext<Block, BlazeBurnerBlock>, RegistrateBlockstateProvider> blazeHeater(){
|
||||
return (c, p) -> ConfiguredModel.builder().modelFile(p.models().getExistingFile(p.modLoc("block/" + c.getName() + "/block"))).build();
|
||||
|
||||
public static NonNullBiConsumer<DataGenContext<Block, BlazeBurnerBlock>, RegistrateBlockstateProvider> blazeHeater() {
|
||||
return (c, p) -> ConfiguredModel.builder()
|
||||
.modelFile(p.models()
|
||||
.getExistingFile(p.modLoc("block/" + c.getName() + "/block")))
|
||||
.build();
|
||||
}
|
||||
|
||||
public static NonNullBiConsumer<DataGenContext<Block, ReinforcedRailBlock>, RegistrateBlockstateProvider> reinforcedRail() {
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
package com.simibubi.create.foundation.fluid;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||
import com.mojang.blaze3d.matrix.MatrixStack.Entry;
|
||||
import com.mojang.blaze3d.vertex.IVertexBuilder;
|
||||
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
|
@ -16,6 +19,8 @@ import net.minecraft.inventory.container.PlayerContainer;
|
|||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.Direction.AxisDirection;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
import net.minecraftforge.fluids.FluidAttributes;
|
||||
|
@ -23,6 +28,55 @@ import net.minecraftforge.fluids.FluidStack;
|
|||
|
||||
public class FluidRenderer {
|
||||
|
||||
public static void renderFluidStream(FluidStack fluidStack, Direction direction, float radius, float progress,
|
||||
boolean inbound, IRenderTypeBuffer buffer, MatrixStack ms, int light) {
|
||||
Fluid fluid = fluidStack.getFluid();
|
||||
FluidAttributes fluidAttributes = fluid.getAttributes();
|
||||
Function<ResourceLocation, TextureAtlasSprite> spriteAtlas = Minecraft.getInstance()
|
||||
.getSpriteAtlas(PlayerContainer.BLOCK_ATLAS_TEXTURE);
|
||||
TextureAtlasSprite flowTexture = spriteAtlas.apply(fluidAttributes.getFlowingTexture(fluidStack));
|
||||
TextureAtlasSprite stillTexture = spriteAtlas.apply(fluidAttributes.getStillTexture(fluidStack));
|
||||
|
||||
int color = fluidAttributes.getColor(fluidStack);
|
||||
IVertexBuilder builder = buffer.getBuffer(RenderType.getTranslucent());
|
||||
MatrixStacker msr = MatrixStacker.of(ms);
|
||||
int blockLightIn = (light >> 4) & 0xf;
|
||||
int luminosity = Math.max(blockLightIn, fluidAttributes.getLuminosity(fluidStack));
|
||||
light = (light & 0xf00000) | luminosity << 4;
|
||||
|
||||
if (inbound)
|
||||
direction = direction.getOpposite();
|
||||
|
||||
ms.push();
|
||||
msr.centre()
|
||||
.rotateY(AngleHelper.horizontalAngle(direction))
|
||||
.rotateX(direction == Direction.UP ? 0 : direction == Direction.DOWN ? 180 : 90)
|
||||
.unCentre();
|
||||
ms.translate(.5, 0, .5);
|
||||
|
||||
float h = (float) (radius);
|
||||
float hMin = (float) (-radius);
|
||||
float hMax = (float) (radius);
|
||||
float y = inbound ? 0 : .5f;
|
||||
float yMin = y;
|
||||
float yMax = y + MathHelper.clamp(progress * .5f - 1e-6f, 0, 1);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
ms.push();
|
||||
renderTiledHorizontalFace(h, Direction.SOUTH, hMin, yMin, hMax, yMax, builder, ms, light, color,
|
||||
flowTexture);
|
||||
ms.pop();
|
||||
msr.rotateY(90);
|
||||
}
|
||||
|
||||
if (progress != 1)
|
||||
renderTiledVerticalFace(yMax, Direction.UP, hMin, hMin, hMax, hMax, builder, ms, light, color,
|
||||
stillTexture);
|
||||
|
||||
ms.pop();
|
||||
|
||||
}
|
||||
|
||||
public static void renderTiledFluidBB(FluidStack fluidStack, float xMin, float yMin, float zMin, float xMax,
|
||||
float yMax, float zMax, IRenderTypeBuffer buffer, MatrixStack ms, int light, boolean renderBottom) {
|
||||
Fluid fluid = fluidStack.getFluid();
|
||||
|
@ -63,7 +117,7 @@ public class FluidRenderer {
|
|||
.translateBack(center);
|
||||
|
||||
boolean X = side.getAxis() == Axis.X;
|
||||
int darkColor = ColorHelper.mixColors(color, 0xff000011, 1/4f);
|
||||
int darkColor = ColorHelper.mixColors(color, 0xff000011, 1 / 4f);
|
||||
renderTiledHorizontalFace(X ? xMax : zMax, side, X ? zMin : xMin, yMin, X ? zMax : xMax, yMax, builder,
|
||||
ms, light, darkColor, fluidTexture);
|
||||
|
||||
|
@ -113,10 +167,11 @@ public class FluidRenderer {
|
|||
for (float y1 = yMin; y1 < yMax; y1 = y2) {
|
||||
y2 = Math.min((int) (y1 + 1), yMax);
|
||||
|
||||
float u1 = texture.getInterpolatedU(local(h1) * 16);
|
||||
float v1 = texture.getInterpolatedV(local(y1) * 16);
|
||||
float u2 = texture.getInterpolatedU(h2 == hMax ? local(h2) * 16 : 16);
|
||||
float v2 = texture.getInterpolatedV(y2 == yMax ? local(y2) * 16 : 16);
|
||||
int multiplier = texture.getWidth() == 32 ? 8 : 16;
|
||||
float u1 = texture.getInterpolatedU(local(h1) * multiplier);
|
||||
float v1 = texture.getInterpolatedV(local(y1) * multiplier);
|
||||
float u2 = texture.getInterpolatedU(h2 == hMax ? local(h2) * multiplier : multiplier);
|
||||
float v2 = texture.getInterpolatedV(y2 == yMax ? local(y2) * multiplier : multiplier);
|
||||
|
||||
float x1 = X ? h : h1;
|
||||
float x2 = X ? h : h2;
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "create:block/pipe_drain",
|
||||
"particle": "create:block/fluid_pipe",
|
||||
"1_0": "create:block/fluid_pipe"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4.5, -3.9, 4.5],
|
||||
"to": [11.5, -0.9, 11.5],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 7, 3], "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 7, 3], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 7, 3], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 7, 3], "texture": "#0"},
|
||||
"up": {"uv": [0, 0, 0, 0], "texture": "#0"},
|
||||
"down": {"uv": [0, 3, 7, 10], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3.1, -1.1, 3.1],
|
||||
"to": [12.9, 1, 12.9],
|
||||
"faces": {
|
||||
"north": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1_0"},
|
||||
"east": {"uv": [11, 6, 6, 5], "texture": "#1_0"},
|
||||
"south": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1_0"},
|
||||
"west": {"uv": [11, 6, 6, 5], "texture": "#1_0"},
|
||||
"up": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"down": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [0,
|
||||
{
|
||||
"name": "up",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [1]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "create:block/pipe_drain",
|
||||
"particle": "create:block/fluid_pipe",
|
||||
"1_0": "create:block/fluid_pipe"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [16.9, 4.5, 4.5],
|
||||
"to": [19.9, 11.5, 11.5],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"},
|
||||
"east": {"uv": [0, 3, 7, 10], "rotation": 180, "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 0, 0], "texture": "#0"},
|
||||
"up": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [15, 3.1, 3.1],
|
||||
"to": [17.1, 12.9, 12.9],
|
||||
"faces": {
|
||||
"north": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"east": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#1_0"},
|
||||
"south": {"uv": [11, 6, 6, 5], "rotation": 270, "texture": "#1_0"},
|
||||
"west": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"up": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1_0"},
|
||||
"down": {"uv": [6, 5, 11, 6], "rotation": 90, "texture": "#1_0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [0,
|
||||
{
|
||||
"name": "up",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [1]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "create:block/pipe_drain",
|
||||
"particle": "create:block/fluid_pipe",
|
||||
"1_0": "create:block/fluid_pipe"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4.5, 4.5, -3.9],
|
||||
"to": [11.5, 11.5, -0.9],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 3, 7, 10], "rotation": 180, "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 0, 0], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"},
|
||||
"up": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 7, 3], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3.1, 3.1, -1.1],
|
||||
"to": [12.9, 12.9, 1],
|
||||
"faces": {
|
||||
"north": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#1_0"},
|
||||
"east": {"uv": [11, 6, 6, 5], "rotation": 270, "texture": "#1_0"},
|
||||
"south": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"west": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"up": {"uv": [6, 5, 11, 6], "texture": "#1_0"},
|
||||
"down": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1_0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [0,
|
||||
{
|
||||
"name": "up",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [1]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "create:block/pipe_drain",
|
||||
"particle": "create:block/fluid_pipe",
|
||||
"1_0": "create:block/fluid_pipe"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4.5, 4.5, 16.9],
|
||||
"to": [11.5, 11.5, 19.9],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 0, 0], "rotation": 180, "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"},
|
||||
"south": {"uv": [0, 3, 7, 10], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"},
|
||||
"up": {"uv": [0, 0, 7, 3], "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3.1, 3.1, 15],
|
||||
"to": [12.9, 12.9, 17.1],
|
||||
"faces": {
|
||||
"north": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#1_0"},
|
||||
"east": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"south": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"west": {"uv": [11, 6, 6, 5], "rotation": 270, "texture": "#1_0"},
|
||||
"up": {"uv": [6, 5, 11, 6], "rotation": 180, "texture": "#1_0"},
|
||||
"down": {"uv": [6, 5, 11, 6], "texture": "#1_0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [0,
|
||||
{
|
||||
"name": "up",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [1]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "create:block/pipe_drain",
|
||||
"particle": "create:block/fluid_pipe",
|
||||
"1_0": "create:block/fluid_pipe"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4.5, 16.9, 4.5],
|
||||
"to": [11.5, 19.9, 11.5],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 7, 3], "rotation": 180, "texture": "#0"},
|
||||
"up": {"uv": [0, 3, 7, 10], "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 0, 0], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3.1, 15, 3.1],
|
||||
"to": [12.9, 17.1, 12.9],
|
||||
"faces": {
|
||||
"north": {"uv": [6, 5, 11, 6], "texture": "#1_0"},
|
||||
"east": {"uv": [11, 6, 6, 5], "rotation": 180, "texture": "#1_0"},
|
||||
"south": {"uv": [6, 5, 11, 6], "texture": "#1_0"},
|
||||
"west": {"uv": [11, 6, 6, 5], "rotation": 180, "texture": "#1_0"},
|
||||
"up": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"down": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [0,
|
||||
{
|
||||
"name": "up",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [1]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"textures": {
|
||||
"0": "create:block/pipe_drain",
|
||||
"particle": "create:block/fluid_pipe",
|
||||
"1_0": "create:block/fluid_pipe"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [-3.9, 4.5, 4.5],
|
||||
"to": [-0.9, 11.5, 11.5],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 7, 3], "rotation": 270, "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 0, 0], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"},
|
||||
"west": {"uv": [0, 3, 7, 10], "rotation": 180, "texture": "#0"},
|
||||
"up": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 7, 3], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [-1.1, 3.1, 3.1],
|
||||
"to": [1, 12.9, 12.9],
|
||||
"faces": {
|
||||
"north": {"uv": [11, 6, 6, 5], "rotation": 270, "texture": "#1_0"},
|
||||
"east": {"uv": [6, 0, 11, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"south": {"uv": [11, 6, 6, 5], "rotation": 90, "texture": "#1_0"},
|
||||
"west": {"uv": [6, 0, 11, 5], "rotation": 270, "texture": "#1_0"},
|
||||
"up": {"uv": [6, 5, 11, 6], "rotation": 270, "texture": "#1_0"},
|
||||
"down": {"uv": [6, 5, 11, 6], "rotation": 270, "texture": "#1_0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [0,
|
||||
{
|
||||
"name": "up",
|
||||
"origin": [8, 8, 8],
|
||||
"children": [1]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"0": "create:block/glass_fluid_pipe",
|
||||
"particle": "#0"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Outer",
|
||||
"from": [4, 0, 4],
|
||||
"to": [12, 16, 12],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"},
|
||||
"east": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"},
|
||||
"south": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"},
|
||||
"west": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inner",
|
||||
"from": [4, 0, 11.5],
|
||||
"to": [12, 16, 11.5],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inner",
|
||||
"from": [4, 0, 4.5],
|
||||
"to": [12, 16, 4.5],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"south": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inner",
|
||||
"from": [4.5, 0, 4],
|
||||
"to": [4.5, 16, 12],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"east": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inner",
|
||||
"from": [11.5, 0, 4],
|
||||
"to": [11.5, 16, 12],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"west": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"credit": "Made with Blockbench",
|
||||
"parent": "block/block",
|
||||
"textures": {
|
||||
"0": "create:block/glass_fluid_pipe",
|
||||
"particle": "#0"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "Outer",
|
||||
"from": [4, 0, 4],
|
||||
"to": [12, 16, 12],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inner",
|
||||
"from": [4, 0, 11.5],
|
||||
"to": [12, 16, 11.5],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inner",
|
||||
"from": [4, 0, 4.5],
|
||||
"to": [12, 16, 4.5],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"south": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inner",
|
||||
"from": [4.5, 0, 4],
|
||||
"to": [4.5, 16, 12],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"east": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inner",
|
||||
"from": [11.5, 0, 4],
|
||||
"to": [11.5, 16, 12],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"west": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#0"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
BIN
src/main/resources/assets/create/textures/block/encased_pipe.png
Normal file
BIN
src/main/resources/assets/create/textures/block/encased_pipe.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 499 B |
BIN
src/main/resources/assets/create/textures/block/pipe_drain.png
Normal file
BIN
src/main/resources/assets/create/textures/block/pipe_drain.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 315 B |
Loading…
Reference in a new issue