diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 01dc3693b..6b3f5258e 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -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 diff --git a/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json b/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.json new file mode 100644 index 000000000..129e39baa --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/encased_fluid_pipe.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 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/blockstates/glass_fluid_pipe.json b/src/generated/resources/assets/create/blockstates/glass_fluid_pipe.json new file mode 100644 index 000000000..190223a77 --- /dev/null +++ b/src/generated/resources/assets/create/blockstates/glass_fluid_pipe.json @@ -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 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index c7193b404..b8b2bea9a 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 392f2099c..3e1f93730 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 3258affd5..d97957a10 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index f15220a1b..cc5d96a42 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index d389aafbc..0cbe83a50 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 07348263d..e7f17c4b3 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index 0cdf1d4f7..0ea3b551d 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index 112256c93..4ede6062f 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 29c578ff0..142638abd 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index 955e661e8..f00860aa7 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -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", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 7a67ca10c..f52c5c6d9 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -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": "花岗岩砖楼梯", diff --git a/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json b/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json new file mode 100644 index 000000000..a8aad1994 --- /dev/null +++ b/src/generated/resources/assets/create/models/block/encased_fluid_pipe.json @@ -0,0 +1,7 @@ +{ + "parent": "block/cube_column", + "textures": { + "side": "create:block/copper_casing", + "end": "create:block/encased_pipe" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json b/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json new file mode 100644 index 000000000..78793172c --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/encased_fluid_pipe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json b/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json new file mode 100644 index 000000000..78793172c --- /dev/null +++ b/src/generated/resources/data/create/loot_tables/blocks/glass_fluid_pipe.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/create/AllBlockPartials.java b/src/main/java/com/simibubi/create/AllBlockPartials.java index 40d85a378..02ae1d3d0 100644 --- a/src/main/java/com/simibubi/create/AllBlockPartials.java +++ b/src/main/java/com/simibubi/create/AllBlockPartials.java @@ -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 PIPE_RIMS = map(); + ; + + public static final Map> PIPE_ATTACHMENTS = map(); public static final Map 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 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); diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index c4d77e2b9..f358f2969 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -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 ENCASED_SHAFT = REGISTRATE.block("encased_shaft", EncasedShaftBlock::new) + public static final BlockEntry 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 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 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 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 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()) diff --git a/src/main/java/com/simibubi/create/AllShapes.java b/src/main/java/com/simibubi/create/AllShapes.java index 3e3c165d9..ea7bba3c1 100644 --- a/src/main/java/com/simibubi/create/AllShapes.java +++ b/src/main/java/com/simibubi/create/AllShapes.java @@ -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) diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index cce060912..7d969877a 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -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 FLUID_PIPE = Create.registrate() - .tileEntity("fluid_pipe", (NonNullFunction, ? extends FluidPipeTileEntity>) FluidPipeTileEntity::new) + .tileEntity("fluid_pipe", FluidPipeTileEntity::new) .validBlocks(AllBlocks.FLUID_PIPE) .register(); + public static final TileEntityEntry ENCASED_FLUID_PIPE = Create.registrate() + .tileEntity("encased_fluid_pipe", StraightPipeTileEntity::new) + .validBlocks(AllBlocks.ENCASED_FLUID_PIPE) + .register(); + + public static final TileEntityEntry GLASS_FLUID_PIPE = Create.registrate() + .tileEntity("glass_fluid_pipe", StraightPipeTileEntity::new) + .validBlocks(AllBlocks.GLASS_FLUID_PIPE) + .renderer(() -> TransparentStraightPipeRenderer::new) + .register(); + public static final TileEntityEntry FLUID_TANK = Create.registrate() .tileEntity("fluid_tank", (NonNullFunction, ? extends FluidTankTileEntity>) FluidTankTileEntity::new) .validBlocks(AllBlocks.FLUID_TANK) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java index 93ba80f0c..9c861bb2e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidNetworkFlow.java @@ -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) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java new file mode 100644 index 000000000..71afd7cfb --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeAttachmentBehaviour.java @@ -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 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; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java index 26984c7ae..940f75fb7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBehaviour.java @@ -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 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 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 getStrogestFlow(Direction side) { + Couple couple = allFlows.get(side); + if (couple == null) + return null; + + PipeFlows in = couple.get(true); + PipeFlows out = couple.get(false); + Couple 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 participants; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java deleted file mode 100644 index 50df900fb..000000000 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeTileEntity.java +++ /dev/null @@ -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 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)); - } - - } - -} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java index a65007737..34fa74ea8 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPropagator.java @@ -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; + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java index 5aff361b3..29e89f1f9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/OpenEndedPipe.java @@ -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()) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java similarity index 64% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeModel.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java index dd78d40d6..715ccf946 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeAttachmentModel.java @@ -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 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 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 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()]; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java index a13065207..9e707518a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpBlock.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java index bae4cdf86..2e83cfd4b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PumpTileEntity.java @@ -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 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; + } + + } + } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java new file mode 100644 index 000000000..71a17ee4f --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/AxisPipeBlock.java @@ -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 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); + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java new file mode 100644 index 000000000..6d236427c --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/EncasedPipeBlock.java @@ -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; + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java similarity index 69% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java index 71f869865..fdfdbd9fc 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidPipeBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeBlock.java @@ -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) { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java new file mode 100644 index 000000000..5b0ca5222 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/FluidPipeTileEntity.java @@ -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 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; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java new file mode 100644 index 000000000..83f3bae69 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/GlassFluidPipeBlock.java @@ -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 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; + } + + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java new file mode 100644 index 000000000..b5e273f5b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/StraightPipeTileEntity.java @@ -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 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; + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java new file mode 100644 index 000000000..47f692529 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/pipes/TransparentStraightPipeRenderer.java @@ -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 { + + 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 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); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java similarity index 99% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java index ffb931aed..0b209bbbf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankBlock.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankCTBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java similarity index 93% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankCTBehaviour.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java index 56c954a50..24ba5d55c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankCTBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankCTBehaviour.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankConnectivityHandler.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java similarity index 99% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankConnectivityHandler.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java index e1d227e3f..3e9199034 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankConnectivityHandler.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankConnectivityHandler.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankGenerator.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java similarity index 89% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankGenerator.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java index 455d01f14..70fdd24b3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankGenerator.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankGenerator.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankItem.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankItem.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java index 2ab8bc72a..9205c1be9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankItem.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankModel.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankModel.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java index be89fd152..bad2f0500 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankModel.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankModel.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankRenderer.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java index 829f8ba7b..b63e56e8c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankRenderer.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java similarity index 98% rename from src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankTileEntity.java rename to src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java index d2088b6c2..0658fe787 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java @@ -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; diff --git a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java index 99bb9751f..3b0430bb6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/processing/BasinBlock.java @@ -83,10 +83,8 @@ public class BasinBlock extends Block implements ITE, 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); diff --git a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java index bbf81c149..6cf438249 100644 --- a/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/BlockStateGen.java @@ -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 NonNullBiConsumer, 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, RegistrateBlockstateProvider> blazeHeater(){ - return (c, p) -> ConfiguredModel.builder().modelFile(p.models().getExistingFile(p.modLoc("block/" + c.getName() + "/block"))).build(); + + public static NonNullBiConsumer, RegistrateBlockstateProvider> blazeHeater() { + return (c, p) -> ConfiguredModel.builder() + .modelFile(p.models() + .getExistingFile(p.modLoc("block/" + c.getName() + "/block"))) + .build(); } public static NonNullBiConsumer, RegistrateBlockstateProvider> reinforcedRail() { diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java index 905a0d273..b6bf69a7b 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -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 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; diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/down.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/down.json new file mode 100644 index 000000000..5da83c4d1 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/down.json @@ -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] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/east.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/east.json new file mode 100644 index 000000000..70b1659c3 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/east.json @@ -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] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/north.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/north.json new file mode 100644 index 000000000..ebf01b1b8 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/north.json @@ -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] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/south.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/south.json new file mode 100644 index 000000000..df3dd6fc1 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/south.json @@ -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] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/up.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/up.json new file mode 100644 index 000000000..327970657 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/up.json @@ -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] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/drain/west.json b/src/main/resources/assets/create/models/block/fluid_pipe/drain/west.json new file mode 100644 index 000000000..0ae3c2d7d --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/drain/west.json @@ -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] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/window.json b/src/main/resources/assets/create/models/block/fluid_pipe/window.json new file mode 100644 index 000000000..5cfccad79 --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/window.json @@ -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"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/fluid_pipe/window_alt.json b/src/main/resources/assets/create/models/block/fluid_pipe/window_alt.json new file mode 100644 index 000000000..6670d228d --- /dev/null +++ b/src/main/resources/assets/create/models/block/fluid_pipe/window_alt.json @@ -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"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/encased_pipe.png b/src/main/resources/assets/create/textures/block/encased_pipe.png new file mode 100644 index 000000000..41205f1af Binary files /dev/null and b/src/main/resources/assets/create/textures/block/encased_pipe.png differ diff --git a/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png b/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png new file mode 100644 index 000000000..f5b36798d Binary files /dev/null and b/src/main/resources/assets/create/textures/block/glass_fluid_pipe.png differ diff --git a/src/main/resources/assets/create/textures/block/pipe_drain.png b/src/main/resources/assets/create/textures/block/pipe_drain.png new file mode 100644 index 000000000..ce79757af Binary files /dev/null and b/src/main/resources/assets/create/textures/block/pipe_drain.png differ