From 0a376b719ec98ce2adea6fc7b95c03b9398d5787 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 21 Jun 2021 18:46:31 +0200 Subject: [PATCH] Thinking with Pipes - Implemented ponder scenes for Fluid Pipes and Copper Casing - Adjusted Fluid transfer, containment and rendering behaviours to function in 'virtual' environments --- src/generated/resources/.cache/cache | 28 +- .../resources/assets/create/lang/en_us.json | 15 + .../assets/create/lang/unfinished/de_de.json | 17 +- .../assets/create/lang/unfinished/es_es.json | 17 +- .../assets/create/lang/unfinished/es_mx.json | 17 +- .../assets/create/lang/unfinished/fr_fr.json | 17 +- .../assets/create/lang/unfinished/it_it.json | 17 +- .../assets/create/lang/unfinished/ja_jp.json | 17 +- .../assets/create/lang/unfinished/ko_kr.json | 17 +- .../assets/create/lang/unfinished/nl_nl.json | 17 +- .../assets/create/lang/unfinished/pl_pl.json | 17 +- .../assets/create/lang/unfinished/pt_br.json | 17 +- .../assets/create/lang/unfinished/ru_ru.json | 17 +- .../assets/create/lang/unfinished/zh_cn.json | 17 +- .../assets/create/lang/unfinished/zh_tw.json | 17 +- .../fluids/FluidTransportBehaviour.java | 12 +- .../contraptions/fluids/OpenEndedPipe.java | 5 +- .../contraptions/fluids/PipeConnection.java | 14 +- .../contraptions/fluids/PumpTileEntity.java | 5 +- .../fluids/tank/FluidTankTileEntity.java | 12 +- .../foundation/fluid/FluidRenderer.java | 6 + .../create/foundation/ponder/PonderWorld.java | 61 ++- .../foundation/ponder/SceneBuilder.java | 6 + .../ponder/content/DebugScenes.java | 13 + .../ponder/content/PonderIndex.java | 8 +- .../ponder/content/fluid/PipeScenes.java | 401 +++++++++++++++--- .../ponder/elements/WorldSectionElement.java | 17 +- .../fluid/SmartFluidTankBehaviour.java | 9 +- .../create/foundation/utility/Debug.java | 20 +- src/main/resources/ponder/debug/scene_10.nbt | Bin 0 -> 1142 bytes .../resources/ponder/fluid_pipe/encasing.nbt | Bin 0 -> 561 bytes src/main/resources/ponder/fluid_pipe/flow.nbt | Bin 0 -> 950 bytes .../ponder/fluid_pipe/interaction.nbt | Bin 0 -> 1243 bytes 33 files changed, 722 insertions(+), 131 deletions(-) create mode 100644 src/main/resources/ponder/debug/scene_10.nbt create mode 100644 src/main/resources/ponder/fluid_pipe/encasing.nbt create mode 100644 src/main/resources/ponder/fluid_pipe/flow.nbt create mode 100644 src/main/resources/ponder/fluid_pipe/interaction.nbt diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index fab931e6d..41feaf092 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -408,20 +408,20 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json c71f5246d2cb8e9913d1552d23fcc82c43cde7a0 assets/create/lang/en_ud.json -ecb2b14e09668bb04ead075b25751af4d47d530a assets/create/lang/en_us.json -32a311fee8bea2504ec80f4ecfabf64afc994109 assets/create/lang/unfinished/de_de.json -af669cb92010605ebb73ea48bad9215e8efa216b assets/create/lang/unfinished/es_es.json -23dce1fd449f6e0e747c10508f9551edb3912a69 assets/create/lang/unfinished/es_mx.json -461155a3e7555df12d07748e7b8c7ca137f2ce69 assets/create/lang/unfinished/fr_fr.json -9cb68aeeeb220466ec4766ac7fd4adc4a28a14ee assets/create/lang/unfinished/it_it.json -1a287c031e3a9cd370e61b8912a2d1f39273b051 assets/create/lang/unfinished/ja_jp.json -0eaa7a9f39f3cd8be5b88e61992cf3198b76689d assets/create/lang/unfinished/ko_kr.json -db87b45eff6bd38dd1774510fa54429c47c194b9 assets/create/lang/unfinished/nl_nl.json -4c90c5055d090adc5765e8ab80f73f7e22185151 assets/create/lang/unfinished/pl_pl.json -bf04fa57b3e3efee8c6989b69f98fb374c8eff86 assets/create/lang/unfinished/pt_br.json -c8f9159b77f8176c994fb008d9b57f9154f48c6d assets/create/lang/unfinished/ru_ru.json -9f55faa2273c7493fe66aa7d369bfdd6edcb2a3f assets/create/lang/unfinished/zh_cn.json -9333985168408e58aa76f9c865b2c5fad4691527 assets/create/lang/unfinished/zh_tw.json +0352f128a214a76365bae7365d7904536ffccbba assets/create/lang/en_us.json +d2fe2b5beb7c4b7d05842dc45da6630dd1f0611f assets/create/lang/unfinished/de_de.json +a486966e82368a85f4c6c5c6b4fd17b0b6e260b4 assets/create/lang/unfinished/es_es.json +94c05715d19c5ceced368c4aa4307b5184eb9d0f assets/create/lang/unfinished/es_mx.json +44fe3efbe33085dc4248ba7ee94e35065aab5cca assets/create/lang/unfinished/fr_fr.json +c53beea261e7a64bdbe397481a2010bb166b10ce assets/create/lang/unfinished/it_it.json +2d75e6eb0c1683ef4856acf86b4f1e49d9e7b9b2 assets/create/lang/unfinished/ja_jp.json +a0d8634f363ee47f3e5ac568d5b63cc6e25a4267 assets/create/lang/unfinished/ko_kr.json +75e6dcc51ef14e39fd7ec1a87a0bbc945ef12637 assets/create/lang/unfinished/nl_nl.json +93b883e54947c1a1869984bc4e764c34b7055998 assets/create/lang/unfinished/pl_pl.json +fc093fa80821bfc4076261dcf1ec56c21edc2262 assets/create/lang/unfinished/pt_br.json +c5b4013e8758f6bfde86eb2d25ec920b5d25c7d1 assets/create/lang/unfinished/ru_ru.json +5bb493fd0d4a05d4b83db99eacea460cb96f8f1a assets/create/lang/unfinished/zh_cn.json +9c049cc88deb8b319c6de28caa417eea9baa7f79 assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 952a35eac..e7537f5da 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1751,6 +1751,9 @@ "create.ponder.empty_blaze_burner.text_5": "However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "Encased Fans use Rotational Force to create an Air Current", @@ -1771,8 +1774,20 @@ "create.ponder.fan_source.text_2": "When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "Dimensions of a Fluid tank", 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 65187531b..d1e028884 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: 1024", + "_": "Missing Localizations: 1039", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index 973e7e921..56f7e7460 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 725", + "_": "Missing Localizations: 740", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index 3dff56990..208abfcf0 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1337", + "_": "Missing Localizations: 1352", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", 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 cec3e9464..f852897b6 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: 1276", + "_": "Missing Localizations: 1291", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", 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 65467970e..4bb49e83f 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: 742", + "_": "Missing Localizations: 757", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", 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 486c11fae..5ca80c09d 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: 106", + "_": "Missing Localizations: 121", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "しかし、これは加工用の熱源には適していません", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "ケース入りファンの気流", "create.ponder.fan_direction.text_1": "ケース入りファンは、回転力を利用して気流を生み出します", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "レッドストーン信号を受けると、回転力が生成されます", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", 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 adcd4692d..d10fc6a39 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: 795", + "_": "Missing Localizations: 810", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", 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 4e870daaf..72b9df586 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: 1659", + "_": "Missing Localizations: 1674", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index 67dac6ca4..18dc98c92 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 82", + "_": "Missing Localizations: 97", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "Nie będzie on dawał jednak ciepła", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "Przepływ powietrza przez izolowane wiatraki", "create.ponder.fan_direction.text_1": "Izolowane wiatraki używają siły obrotowej, aby wytworzyć przepływ powietrza", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "Po zasileniu, wiatraki zaczną przesyłać siłę do przylegających komponentów", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", 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 c5c1ec0c6..327048fc1 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: 1700", + "_": "Missing Localizations: 1715", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", 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 7b53ce1b1..e9358caf7 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: 639", + "_": "Missing Localizations: 654", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "UNLOCALIZED: However, these are not suitable for industrial heating", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans", "create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", 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 a275acd0d..dd31aeb2c 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: 125", + "_": "Missing Localizations: 140", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "但是,这样的热源不足以给机器提加工供足够的热量", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "鼓风机的气流", "create.ponder.fan_direction.text_1": "鼓风机使用旋转力来制造气流", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "当鼓风机接受红石信号后,它便会向外供给旋转力", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index ed3bfc17a..af9c043ad 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 118", + "_": "Missing Localizations: 133", "_": "->------------------------] Game Elements [------------------------<-", @@ -1752,6 +1752,9 @@ "create.ponder.empty_blaze_burner.text_5": "但是,這樣的熱源不足以給機器提加工供足夠的熱量", "create.ponder.encased_fluid_pipe.header": "UNLOCALIZED: Encasing Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_1": "UNLOCALIZED: Copper Casing can be used to decorate Fluid Pipes", + "create.ponder.encased_fluid_pipe.text_2": "UNLOCALIZED: Aside from being conceiled, Encased Pipes are locked into their connectivity state", + "create.ponder.encased_fluid_pipe.text_3": "UNLOCALIZED: It will no longer react to any neighbouring blocks being added or removed", "create.ponder.fan_direction.header": "鼓風機的氣流", "create.ponder.fan_direction.text_1": "鼓風機使用動能來製造氣流", @@ -1772,8 +1775,20 @@ "create.ponder.fan_source.text_2": "當鼓風機接受紅石訊號後,它便會向外供給動能", "create.ponder.fluid_pipe_flow.header": "UNLOCALIZED: Moving Fluids using Copper Pipes", + "create.ponder.fluid_pipe_flow.text_1": "UNLOCALIZED: Fluid Pipes can connect two or more fluid sources and targets", + "create.ponder.fluid_pipe_flow.text_2": "UNLOCALIZED: Using a wrench, a straight pipe segment can be given a window", + "create.ponder.fluid_pipe_flow.text_3": "UNLOCALIZED: Windowed pipes will not connect to any other adjacent pipe segments", + "create.ponder.fluid_pipe_flow.text_4": "UNLOCALIZED: Powered by Mechanical Pumps, the Pipes can transport Fluids", + "create.ponder.fluid_pipe_flow.text_5": "UNLOCALIZED: No fluid is being extracted at first", + "create.ponder.fluid_pipe_flow.text_6": "UNLOCALIZED: Once the flow connects them, the endpoints gradually transfer their contents", + "create.ponder.fluid_pipe_flow.text_7": "UNLOCALIZED: Thus, the Pipe blocks themselves never 'physically' contain any fluid", "create.ponder.fluid_pipe_interaction.header": "UNLOCALIZED: Draining and Filling fluid containers", + "create.ponder.fluid_pipe_interaction.text_1": "UNLOCALIZED: Endpoints of a pipe network can interact with a variety of blocks", + "create.ponder.fluid_pipe_interaction.text_2": "UNLOCALIZED: Any block with fluid storage capabilities can be filled or drained", + "create.ponder.fluid_pipe_interaction.text_3": "UNLOCALIZED: Source blocks right in front of an open end can be picked up...", + "create.ponder.fluid_pipe_interaction.text_4": "UNLOCALIZED: ...while spilling into empty spaces can create fluid sources", + "create.ponder.fluid_pipe_interaction.text_5": "UNLOCALIZED: Pipes can also extract fluids from a handful of other blocks directly", "create.ponder.fluid_tank_sizes.header": "UNLOCALIZED: Dimensions of a Fluid tank", diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java index 9cb460344..027db42d1 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/FluidTransportBehaviour.java @@ -60,8 +60,8 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { super.tick(); World world = getWorld(); BlockPos pos = getPos(); - boolean onClient = world.isRemote; - + boolean onServer = !world.isRemote || tileEntity.isVirtual(); + if (interfaces == null) return; Collection connections = interfaces.values(); @@ -81,7 +81,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { return; } - if (!onClient) { + if (onServer) { boolean sendUpdate = false; for (PipeConnection connection : connections) { sendUpdate |= connection.flipFlowsIfPressureReversed(); @@ -96,7 +96,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { return; } - if (!onClient) { + if (onServer) { FluidStack availableFlow = FluidStack.EMPTY; FluidStack collidingFlow = FluidStack.EMPTY; @@ -131,7 +131,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { sendUpdate |= connection.manageFlows(world, pos, internalFluid, extractionPredicate); } - if (sendUpdate) + if (sendUpdate) tileEntity.notifyUpdate(); } @@ -155,7 +155,7 @@ public abstract class FluidTransportBehaviour extends TileEntityBehaviour { } interfaces.values() - .forEach(connection -> connection.deserializeNBT(nbt, clientPacket)); + .forEach(connection -> connection.deserializeNBT(nbt, tileEntity.getPos(), clientPacket)); } @Override 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 7cc6874b3..affb969e3 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 @@ -208,8 +208,9 @@ public class OpenEndedPipe extends FlowSource { return compound; } - public static OpenEndedPipe fromNBT(CompoundNBT compound) { - OpenEndedPipe oep = new OpenEndedPipe(BlockFace.fromNBT(compound.getCompound("Location"))); + public static OpenEndedPipe fromNBT(CompoundNBT compound, BlockPos tilePos) { + BlockFace fromNBT = BlockFace.fromNBT(compound.getCompound("Location")); + OpenEndedPipe oep = new OpenEndedPipe(new BlockFace(tilePos, fromNBT.getFace())); oep.fluidHandler.readFromNBT(compound); oep.wasPulling = compound.getBoolean("Pulling"); return oep; diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java index 5f3fc685b..072abea8c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/PipeConnection.java @@ -239,7 +239,7 @@ public class PipeConnection { return source.orElse(null) instanceof OpenEndedPipe; } - public void deserializeNBT(CompoundNBT tag, boolean clientPacket) { + public void deserializeNBT(CompoundNBT tag, BlockPos tilePos, boolean clientPacket) { CompoundNBT connectionData = tag.getCompound(side.getName2()); if (connectionData.contains("Pressure")) { @@ -250,7 +250,7 @@ public class PipeConnection { source = Optional.empty(); if (connectionData.contains("OpenEnd")) - source = Optional.of(OpenEndedPipe.fromNBT(connectionData.getCompound("OpenEnd"))); + source = Optional.of(OpenEndedPipe.fromNBT(connectionData.getCompound("OpenEnd"), tilePos)); if (connectionData.contains("Flow")) { CompoundNBT flowData = connectionData.getCompound("Flow"); @@ -367,8 +367,9 @@ public class PipeConnection { @OnlyIn(Dist.CLIENT) private void spawnParticlesInner(World world, BlockPos pos, FluidStack fluid) { - if (!isRenderEntityWithinDistance(pos)) - return; + if (world == Minecraft.getInstance().world) + if (!isRenderEntityWithinDistance(pos)) + return; if (hasOpenEnd()) spawnPouringLiquid(world, pos, fluid, 1); else if (r.nextFloat() < IDLE_PARTICLE_SPAWN_CHANCE) @@ -377,8 +378,9 @@ public class PipeConnection { @OnlyIn(Dist.CLIENT) private void spawnSplashOnRimInner(World world, BlockPos pos, FluidStack fluid) { - if (!isRenderEntityWithinDistance(pos)) - return; + if (world == Minecraft.getInstance().world) + if (!isRenderEntityWithinDistance(pos)) + return; spawnRimParticles(world, pos, fluid, SPLASH_PARTICLE_AMOUNT); } 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 77dd51c68..75195f266 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 @@ -70,7 +70,8 @@ public class PumpTileEntity extends KineticTileEntity { return; arrowDirection.chase(speed >= 0 ? 1 : -1, .5f, Chaser.EXP); arrowDirection.tickChaser(); - return; + if (!isVirtual()) + return; } sidesToUpdate.forEachWithContext((update, isFront) -> { @@ -96,7 +97,7 @@ public class PumpTileEntity extends KineticTileEntity { return; if (speed != 0) reversed = speed < 0; - if (world.isRemote) + if (world.isRemote && !isVirtual()) return; BlockPos frontPos = pos.offset(getFront()); diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java index 6b38d00f2..47c27575f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/FluidTankTileEntity.java @@ -105,6 +105,10 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI if (fluidLevel != null) fluidLevel.tick(); } + + public BlockPos getLastKnownPos() { + return lastKnownPos; + } public boolean isController() { return controller == null @@ -157,6 +161,12 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI markDirty(); sendData(); } + + if (isVirtual()) { + if (fluidLevel == null) + fluidLevel = new InterpolatedChasingValue().start(getFillState()); + fluidLevel.target(getFillState()); + } } protected void setLuminosity(int luminosity) { @@ -268,7 +278,7 @@ public class FluidTankTileEntity extends SmartTileEntity implements IHaveGoggleI } public void setController(BlockPos controller) { - if (world.isRemote) + if (world.isRemote && !isVirtual()) return; if (controller.equals(this.controller)) return; 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 23d8a0624..70ad7c272 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidRenderer.java @@ -5,6 +5,7 @@ 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.renderState.SuperRenderTypeBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Iterate; @@ -39,6 +40,9 @@ public class FluidRenderer { int color = fluidAttributes.getColor(fluidStack); IVertexBuilder builder = buffer.getBuffer(RenderType.getTranslucent()); + if (buffer instanceof SuperRenderTypeBuffer) + builder = ((SuperRenderTypeBuffer) buffer).getLateBuffer(RenderType.getTranslucent()); + MatrixStacker msr = MatrixStacker.of(ms); int blockLightIn = (light >> 4) & 0xf; int luminosity = Math.max(blockLightIn, fluidAttributes.getLuminosity(fluidStack)); @@ -87,6 +91,8 @@ public class FluidRenderer { int color = fluidAttributes.getColor(fluidStack); IVertexBuilder builder = buffer.getBuffer(RenderType.getTranslucent()); + if (buffer instanceof SuperRenderTypeBuffer) + builder = ((SuperRenderTypeBuffer) buffer).getLateBuffer(RenderType.getTranslucent()); MatrixStacker msr = MatrixStacker.of(ms); Vector3d center = new Vector3d(xMin + (xMax - xMin) / 2, yMin + (yMax - yMin) / 2, zMin + (zMax - zMin) / 2); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java index 7635ab03a..83a8d7f46 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java @@ -9,6 +9,7 @@ import java.util.Map; import javax.annotation.Nullable; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.schematics.SchematicWorld; @@ -104,15 +105,26 @@ public class PonderWorld extends SchematicWorld { originalEntities.forEach(e -> EntityType.loadEntityUnchecked(e.serializeNBT(), this) .ifPresent(entities::add)); particles.clearEffects(); - fixBeltTileEntities(); + fixControllerTileEntities(); } public void restoreBlocks(Selection selection) { selection.forEach(p -> { if (originalBlocks.containsKey(p)) blocks.put(p, originalBlocks.get(p)); + if (originalTileEntities.containsKey(p)) { + TileEntity te = TileEntity.createFromTag(originalBlocks.get(p), originalTileEntities.get(p) + .write(new CompoundNBT())); + onTEadded(te, te.getPos()); + tileEntities.put(p, te); + } }); - scene.forEach(WorldSectionElement.class, WorldSectionElement::queueRedraw); + redraw(); + } + + private void redraw() { + if (scene != null) + scene.forEach(WorldSectionElement.class, WorldSectionElement::queueRedraw); } public void pushFakeLight(int light) { @@ -226,6 +238,11 @@ public class PonderWorld extends SchematicWorld { : iparticlefactory.makeParticle(data, asClientWorld.getValue(), x, y, z, mx, my, mz); } + @Override + public boolean setBlockState(BlockPos pos, BlockState arg1, int arg2) { + return super.setBlockState(pos, arg1, arg2); + } + public void addParticle(Particle p) { if (p != null) particles.addParticle(p); @@ -240,20 +257,34 @@ public class PonderWorld extends SchematicWorld { smartTileEntity.markVirtual(); } - public void fixBeltTileEntities() { + public void fixControllerTileEntities() { for (TileEntity tileEntity : tileEntities.values()) { - if (!(tileEntity instanceof BeltTileEntity)) - continue; - BeltTileEntity beltTileEntity = (BeltTileEntity) tileEntity; - if (!beltTileEntity.isController()) - continue; - BlockPos controllerPos = tileEntity.getPos(); - for (BlockPos blockPos : BeltBlock.getBeltChain(this, controllerPos)) { - TileEntity tileEntity2 = getTileEntity(blockPos); - if (!(tileEntity2 instanceof BeltTileEntity)) + if (tileEntity instanceof BeltTileEntity) { + BeltTileEntity beltTileEntity = (BeltTileEntity) tileEntity; + if (!beltTileEntity.isController()) continue; - BeltTileEntity belt2 = (BeltTileEntity) tileEntity2; - belt2.setController(controllerPos); + BlockPos controllerPos = tileEntity.getPos(); + for (BlockPos blockPos : BeltBlock.getBeltChain(this, controllerPos)) { + TileEntity tileEntity2 = getTileEntity(blockPos); + if (!(tileEntity2 instanceof BeltTileEntity)) + continue; + BeltTileEntity belt2 = (BeltTileEntity) tileEntity2; + belt2.setController(controllerPos); + } + } + if (tileEntity instanceof FluidTankTileEntity) { + FluidTankTileEntity fluidTankTileEntity = (FluidTankTileEntity) tileEntity; + BlockPos lastKnown = fluidTankTileEntity.getLastKnownPos(); + BlockPos current = fluidTankTileEntity.getPos(); + if (lastKnown == null || current == null) + continue; + if (fluidTankTileEntity.isController()) + continue; + if (!lastKnown.equals(current)) { + BlockPos newControllerPos = fluidTankTileEntity.getController() + .add(current.subtract(lastKnown)); + fluidTankTileEntity.setController(newControllerPos); + } } } } @@ -302,7 +333,7 @@ public class PonderWorld extends SchematicWorld { protected BlockState processBlockStateForPrinting(BlockState state) { return state; } - + @Override public boolean isBlockLoaded(BlockPos pos) { return true; // fix particle lighting diff --git a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java index 2767b1b02..eaf8c3532 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -14,6 +14,8 @@ import com.simibubi.create.content.contraptions.components.crafter.ConnectedInpu import com.simibubi.create.content.contraptions.components.crafter.MechanicalCrafterTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueItem; +import com.simibubi.create.content.contraptions.fluids.FluidPropagator; +import com.simibubi.create.content.contraptions.fluids.PumpTileEntity; import com.simibubi.create.content.contraptions.particle.RotationIndicatorParticleData; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; @@ -739,6 +741,10 @@ public class SceneBuilder { }); } + public void propagatePipeChange(BlockPos pos) { + modifyTileEntity(pos, PumpTileEntity.class, te -> te.onSpeedChanged(0)); + } + public void setFilterData(Selection selection, Class teType, ItemStack filter) { modifyTileNBT(selection, teType, nbt -> { nbt.put("Filter", filter.serializeNBT()); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java index 30199ef5c..5261f9437 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/DebugScenes.java @@ -45,6 +45,7 @@ public class DebugScenes { add(DebugScenes::birbScene); add(DebugScenes::sectionsScene); add(DebugScenes::itemScene); + add(DebugScenes::pipeScene); } private static void add(PonderStoryBoard sb) { @@ -433,5 +434,17 @@ public class DebugScenes { scene.world.modifyEntities(ItemEntity.class, Entity::remove); } + + public static void pipeScene(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("debug_pipes", "Manipulating Items"); + scene.configureBasePlate(0, 0, 5); + scene.world.showSection(util.select.layer(0), Direction.UP); + scene.idle(10); + scene.world.showSection(util.select.layersFrom(1), Direction.DOWN); + + + + + } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java index 5d9781437..83e4074e5 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderIndex.java @@ -242,11 +242,11 @@ public class PonderIndex { // Fluids PonderRegistry.forComponents(AllBlocks.FLUID_PIPE) - .addStoryBoard("debug/scene_1", PipeScenes::flow, PonderTag.FLUIDS) - .addStoryBoard("debug/scene_1", PipeScenes::interaction) - .addStoryBoard("debug/scene_1", PipeScenes::encasing); + .addStoryBoard("fluid_pipe/flow", PipeScenes::flow, PonderTag.FLUIDS) + .addStoryBoard("fluid_pipe/interaction", PipeScenes::interaction) + .addStoryBoard("fluid_pipe/encasing", PipeScenes::encasing); PonderRegistry.forComponents(AllBlocks.COPPER_CASING) - .addStoryBoard("debug/scene_1", PipeScenes::encasing); + .addStoryBoard("fluid_pipe/encasing", PipeScenes::encasing); PonderRegistry.forComponents(AllBlocks.MECHANICAL_PUMP) .addStoryBoard("debug/scene_1", PumpScenes::flow, PonderTag.FLUIDS, PonderTag.KINETIC_APPLIANCES) .addStoryBoard("debug/scene_1", PumpScenes::speed); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PipeScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PipeScenes.java index f7c309f79..1cf206d1a 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PipeScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/fluid/PipeScenes.java @@ -1,76 +1,364 @@ package com.simibubi.create.foundation.ponder.content.fluid; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.contraptions.fluids.PumpBlock; +import com.simibubi.create.content.contraptions.fluids.actors.ItemDrainTileEntity; +import com.simibubi.create.content.contraptions.fluids.pipes.AxisPipeBlock; +import com.simibubi.create.content.contraptions.fluids.pipes.FluidPipeBlock; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity; +import com.simibubi.create.foundation.ponder.ElementLink; import com.simibubi.create.foundation.ponder.SceneBuilder; import com.simibubi.create.foundation.ponder.SceneBuildingUtil; +import com.simibubi.create.foundation.ponder.Selection; +import com.simibubi.create.foundation.ponder.content.PonderPalette; +import com.simibubi.create.foundation.ponder.elements.InputWindowElement; +import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; +import com.simibubi.create.foundation.tileEntity.behaviour.fluid.SmartFluidTankBehaviour; +import com.simibubi.create.foundation.utility.Pointing; +import net.minecraft.block.BeehiveBlock; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.state.BooleanProperty; import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler.FluidAction; public class PipeScenes { public static void flow(SceneBuilder scene, SceneBuildingUtil util) { scene.title("fluid_pipe_flow", "Moving Fluids using Copper Pipes"); scene.configureBasePlate(0, 0, 5); - scene.world.showSection(util.select.layer(0), Direction.UP); + scene.showBasePlate(); scene.idle(5); - scene.world.showSection(util.select.layersFrom(1), Direction.DOWN); -// scene.overlay.showText(50) -// .text("") -// .attachKeyFrame() -// .placeNearTarget() -// .pointAt(util.vector.topOf(2, 0, 2)); + BlockState pipeState = AllBlocks.FLUID_PIPE.getDefaultState() + .with(FluidPipeBlock.UP, false) + .with(FluidPipeBlock.DOWN, false); - /* - * Use Fluid Pipes to connect two fluid sources, containers or empty spaces - * - * Using a wrench, a straight pipe segment can be given a window - * - * Windowed pipes will not connect to any other adjancent pipe segements - * - * Powered by Mechanical Pumps, Fluid Pipes can be used to transport Fluids between endpoints - * - * Until the flow finds a target, nothing is extracted from the source - * - * Once a connection is established, fluids are gradually transferred between the endpoints - * - * Thus, the Pipe blocks themselves never 'physically' contain any fluid - */ + scene.world.setBlock(util.grid.at(2, 1, 1), pipeState.with(FluidPipeBlock.NORTH, false) + .with(FluidPipeBlock.SOUTH, false), false); + scene.world.setBlock(util.grid.at(1, 1, 2), pipeState.with(FluidPipeBlock.WEST, false) + .with(FluidPipeBlock.EAST, false), false); + + Selection largeCog = util.select.position(5, 0, 1); + Selection kinetics = util.select.fromTo(5, 1, 0, 3, 1, 0); + Selection tank = util.select.fromTo(4, 1, 2, 4, 2, 2); + Selection tank2 = util.select.fromTo(0, 1, 3, 0, 2, 3); + + Selection strayPipes = util.select.fromTo(2, 1, 2, 2, 2, 2) + .add(util.select.fromTo(1, 2, 2, 1, 3, 2)); + + scene.world.showSection(tank, Direction.DOWN); + scene.idle(5); + scene.world.showSection(tank2, Direction.DOWN); + FluidStack content = new FluidStack(Fluids.LAVA, 10000); + scene.world.modifyTileEntity(util.grid.at(4, 1, 2), FluidTankTileEntity.class, te -> te.getTankInventory() + .fill(content, FluidAction.EXECUTE)); + scene.idle(10); + + for (int i = 4; i >= 1; i--) { + scene.world.showSection(util.select.position(i, 1, 1), i == 4 ? Direction.SOUTH : Direction.EAST); + scene.idle(3); + } + + scene.overlay.showText(60) + .text("Fluid Pipes can connect two or more fluid sources and targets") + .attachKeyFrame() + .placeNearTarget() + .pointAt(util.vector.topOf(1, 1, 1)); + + for (int i = 2; i <= 3; i++) { + scene.world.showSection(util.select.position(1, 1, i), Direction.NORTH); + scene.idle(3); + } + + scene.idle(60); + + scene.overlay.showControls(new InputWindowElement(util.vector.centerOf(2, 1, 1), Pointing.DOWN).rightClick() + .withWrench(), 40); + scene.idle(7); + scene.world.restoreBlocks(util.select.position(2, 1, 1)); + scene.overlay.showText(70) + .attachKeyFrame() + .pointAt(util.vector.centerOf(2, 1, 1)) + .placeNearTarget() + .text("Using a wrench, a straight pipe segment can be given a window"); + scene.idle(40); + + scene.overlay.showControls(new InputWindowElement(util.vector.centerOf(1, 1, 2), Pointing.DOWN).rightClick() + .withWrench(), 10); + scene.idle(7); + scene.world.restoreBlocks(util.select.position(1, 1, 2)); + scene.idle(40); + + Vector3d center = util.vector.centerOf(2, 1, 2); + AxisAlignedBB bb = new AxisAlignedBB(center, center).grow(1 / 6f); + AxisAlignedBB bb1 = bb.offset(-0.5, 0, 0); + AxisAlignedBB bb2 = bb.offset(0, 0, -0.5); + + scene.world.showSection(strayPipes, Direction.DOWN); + scene.idle(10); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb1, bb, 1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb2, bb, 1); + scene.idle(1); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb1, bb1, 50); + scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, bb2, bb2, 50); + scene.idle(10); + scene.overlay.showText(55) + .attachKeyFrame() + .pointAt(util.vector.centerOf(2, 1, 2)) + .placeNearTarget() + .colored(PonderPalette.RED) + .text("Windowed pipes will not connect to any other adjacent pipe segments"); + scene.idle(60); + scene.world.hideSection(strayPipes, Direction.UP); + scene.idle(10); + + BlockPos pumpPos = util.grid.at(3, 1, 1); + scene.world.setBlock(pumpPos, AllBlocks.MECHANICAL_PUMP.getDefaultState() + .with(PumpBlock.FACING, Direction.WEST), true); + scene.idle(10); + scene.world.showSection(largeCog, Direction.UP); + scene.world.showSection(kinetics, Direction.SOUTH); + scene.idle(10); + scene.world.setKineticSpeed(util.select.position(pumpPos), 32); + scene.world.propagatePipeChange(pumpPos); + + scene.overlay.showText(70) + .attachKeyFrame() + .pointAt(util.vector.topOf(pumpPos)) + .placeNearTarget() + .text("Powered by Mechanical Pumps, the Pipes can transport Fluids"); + scene.idle(85); + scene.overlay.showSelectionWithText(tank, 40) + .colored(PonderPalette.RED) + .placeNearTarget() + .text("No fluid is being extracted at first"); + scene.idle(90); + + scene.overlay.showOutline(PonderPalette.GREEN, new Object(), tank, 100); + scene.idle(5); + scene.overlay.showOutline(PonderPalette.GREEN, new Object(), tank2, 100); + scene.idle(5); + scene.overlay.showText(100) + .attachKeyFrame() + .independent() + .text("Once the flow connects them, the endpoints gradually transfer their contents"); + scene.overlay.showLine(PonderPalette.GREEN, util.vector.blockSurface(util.grid.at(4, 2, 2), Direction.WEST), + util.vector.blockSurface(util.grid.at(0, 2, 3), Direction.EAST), 80); + + scene.world.multiplyKineticSpeed(util.select.everywhere(), 2); + scene.world.propagatePipeChange(pumpPos); + scene.effects.rotationSpeedIndicator(pumpPos); + + scene.idle(120); + + scene.overlay.showText(60) + .text("Thus, the Pipe blocks themselves never 'physically' contain any fluid") + .placeNearTarget() + .pointAt(util.vector.topOf(1, 1, 1)); + scene.idle(50); } public static void interaction(SceneBuilder scene, SceneBuildingUtil util) { scene.title("fluid_pipe_interaction", "Draining and Filling fluid containers"); - scene.configureBasePlate(0, 0, 5); - scene.world.showSection(util.select.layer(0), Direction.UP); + scene.configureBasePlate(0, 1, 5); + scene.showBasePlate(); scene.idle(5); - scene.world.showSection(util.select.layersFrom(1), Direction.DOWN); - - /* - * Endpoints of a pipe network can interact with a variety of blocks - * - * Any block with fluid storage capabities can be filled or drained - * - * Source blocks right in front of an open end can be picked up... - * - * ...while spilling into empty spaces can create fluid sources - * - * Pipes can also extract fluids from a handful of blocks directly - */ + + BlockPos pumpPos = util.grid.at(2, 1, 4); + Selection largeCog = util.select.position(5, 0, 4); + Selection kinetics = util.select.fromTo(5, 1, 5, 2, 1, 5); + Selection pipes = util.select.fromTo(1, 1, 4, 3, 1, 3) + .add(util.select.position(3, 1, 2)); + Selection tank = util.select.fromTo(4, 1, 3, 4, 2, 3); + Selection drain = util.select.position(1, 1, 2); + Selection basin = util.select.position(3, 1, 1); + + Selection waterSourceS = util.select.position(1, 1, 1); + Selection waterTargetS = util.select.position(4, 1, 1); + Selection waterTarget2S = util.select.fromTo(4, 0, 0, 4, 1, 0); + + scene.world.setKineticSpeed(util.select.position(pumpPos), 0); + + scene.world.showSection(pipes, Direction.DOWN); + scene.idle(10); + scene.world.showSection(basin, Direction.SOUTH); + scene.idle(5); + scene.world.showSection(drain, Direction.SOUTH); + scene.idle(5); + scene.world.showSection(tank, Direction.WEST); + + scene.overlay.showText(60) + .text("Endpoints of a pipe network can interact with a variety of blocks") + .attachKeyFrame() + .placeNearTarget() + .pointAt(util.vector.blockSurface(util.grid.at(1, 1, 3), Direction.NORTH)); + scene.idle(60); + scene.world.showSection(largeCog, Direction.UP); + scene.idle(5); + scene.world.showSection(kinetics, Direction.NORTH); + scene.idle(10); + scene.world.setKineticSpeed(util.select.position(pumpPos), 64); + BlockPos drainPos = util.grid.at(1, 1, 2); + scene.world.modifyTileEntity(drainPos, ItemDrainTileEntity.class, + te -> te.getBehaviour(SmartFluidTankBehaviour.TYPE) + .allowInsertion() + .getPrimaryHandler() + .fill(new FluidStack(Fluids.WATER, 1500), FluidAction.EXECUTE)); + + scene.idle(50); + scene.overlay.showOutline(PonderPalette.MEDIUM, new Object(), drain, 40); + scene.idle(5); + scene.overlay.showOutline(PonderPalette.MEDIUM, new Object(), tank, 40); + scene.idle(5); + scene.overlay.showOutline(PonderPalette.MEDIUM, new Object(), basin, 40); + scene.idle(5); + + scene.overlay.showText(60) + .text("Any block with fluid storage capabilities can be filled or drained") + .attachKeyFrame() + .colored(PonderPalette.MEDIUM) + .placeNearTarget() + .pointAt(util.vector.blockSurface(drainPos, Direction.UP)); + scene.idle(100); + + scene.world.hideSection(drain, Direction.NORTH); + scene.idle(5); + scene.world.hideSection(tank, Direction.EAST); + scene.idle(5); + scene.world.setBlock(drainPos, Blocks.AIR.getDefaultState(), false); + scene.world.propagatePipeChange(pumpPos); + scene.world.hideSection(basin, Direction.NORTH); + scene.idle(5); + scene.world.setBlock(util.grid.at(3, 1, 1), Blocks.AIR.getDefaultState(), false); + scene.idle(5); + scene.world.setBlock(util.grid.at(3, 1, 3), AllBlocks.GLASS_FLUID_PIPE.getDefaultState() + .with(AxisPipeBlock.AXIS, Axis.Z), false); + scene.idle(10); + scene.world.multiplyKineticSpeed(util.select.everywhere(), 2); + scene.world.propagatePipeChange(pumpPos); + ElementLink water = scene.world.showIndependentSection(waterSourceS, Direction.DOWN); + scene.world.moveSection(water, util.vector.of(0, 0, 1), 0); + scene.idle(10); + scene.world.setBlock(drainPos, Blocks.WATER.getDefaultState(), false); + scene.idle(20); + + scene.overlay.showText(60) + .text("Source blocks right in front of an open end can be picked up...") + .attachKeyFrame() + .placeNearTarget() + .pointAt(util.vector.blockSurface(drainPos, Direction.SOUTH)); + + scene.idle(40); + scene.world.setBlock(drainPos.north(), Blocks.AIR.getDefaultState(), false); + scene.idle(40); + ElementLink target = scene.world.showIndependentSection(waterTargetS, Direction.UP); + scene.world.moveSection(target, util.vector.of(-1, 0, 0), 0); + scene.idle(5); + scene.world.showSectionAndMerge(waterTarget2S, Direction.UP, target); + + scene.overlay.showText(60) + .text("...while spilling into empty spaces can create fluid sources") + .attachKeyFrame() + .placeNearTarget() + .pointAt(util.vector.blockSurface(util.grid.at(3, 1, 2), Direction.NORTH)); + + scene.idle(80); + scene.world.hideIndependentSection(target, Direction.DOWN); + scene.idle(5); + scene.world.setBlock(drainPos, Blocks.BEE_NEST.getDefaultState() + .with(BeehiveBlock.HONEY_LEVEL, 5), false); + scene.world.showSection(drain, Direction.DOWN); + scene.world.setBlock(util.grid.at(3, 1, 2), AllBlocks.FLUID_TANK.getDefaultState(), false); + scene.world.propagatePipeChange(pumpPos); + scene.idle(15); + + scene.overlay.showText(60) + .text("Pipes can also extract fluids from a handful of other blocks directly") + .attachKeyFrame() + .placeNearTarget() + .pointAt(util.vector.topOf(drainPos)); + + scene.idle(60); + scene.world.setBlock(drainPos, Blocks.BEE_NEST.getDefaultState() + .with(BeehiveBlock.HONEY_LEVEL, 0), false); } public static void encasing(SceneBuilder scene, SceneBuildingUtil util) { scene.title("encased_fluid_pipe", "Encasing Fluid Pipes"); scene.configureBasePlate(0, 0, 5); - scene.world.showSection(util.select.layer(0), Direction.UP); + scene.showBasePlate(); scene.idle(5); - scene.world.showSection(util.select.layersFrom(1), Direction.DOWN); - - /* - * Copper Casing can be used to decorate Fluid Pipes - * - * Aside from being conceiled, encased pipes are locked into their connectivity state - * - * Adding and Removing Pipes around it will no longer affect its shape - */ + scene.world.showSection(util.select.position(2, 0, 5), Direction.UP); + scene.idle(5); + scene.world.showSection(util.select.layer(1), Direction.DOWN); + scene.idle(15); + + BlockState copperEncased = AllBlocks.ENCASED_FLUID_PIPE.getDefaultState() + .with(FluidPipeBlock.SOUTH, true) + .with(FluidPipeBlock.WEST, true); + ItemStack casingItem = AllBlocks.COPPER_CASING.asStack(); + + scene.overlay.showControls(new InputWindowElement(util.vector.topOf(3, 1, 1), Pointing.DOWN).rightClick() + .withItem(casingItem), 60); + scene.idle(7); + scene.world.setBlock(util.grid.at(3, 1, 1), copperEncased, true); + scene.idle(10); + + scene.overlay.showText(60) + .placeNearTarget() + .text("Copper Casing can be used to decorate Fluid Pipes") + .attachKeyFrame() + .pointAt(util.vector.topOf(3, 1, 1)); + + scene.idle(70); + scene.world.destroyBlock(util.grid.at(2, 1, 1)); + scene.world.modifyBlock(util.grid.at(1, 1, 1), s -> s.with(FluidPipeBlock.EAST, false) + .with(FluidPipeBlock.NORTH, true), false); + scene.idle(5); + + scene.overlay.showLine(PonderPalette.RED, util.vector.of(1.5, 1.75, 1), util.vector.of(1.5, 1.75, 2), 80); + scene.idle(5); + scene.addKeyframe(); + scene.overlay.showLine(PonderPalette.GREEN, util.vector.of(3.5, 2, 1.5), util.vector.of(3.5, 2, 2), 80); + scene.overlay.showLine(PonderPalette.GREEN, util.vector.of(3, 2, 1.5), util.vector.of(3.5, 2, 1.5), 80); + + scene.idle(25); + scene.overlay.showText(60) + .placeNearTarget() + .text("Aside from being conceiled, Encased Pipes are locked into their connectivity state") + .pointAt(util.vector.blockSurface(util.grid.at(3, 1, 1), Direction.WEST)); + + scene.idle(70); + BlockState defaultState = AllBlocks.FLUID_PIPE.getDefaultState(); + for (BooleanProperty booleanProperty : FluidPipeBlock.FACING_TO_PROPERTY_MAP.values()) + defaultState = defaultState.with(booleanProperty, false); + + scene.world.setBlock(util.grid.at(3, 2, 1), defaultState.with(FluidPipeBlock.EAST, true) + .with(FluidPipeBlock.WEST, true), false); + scene.world.setBlock(util.grid.at(1, 2, 1), defaultState.with(FluidPipeBlock.UP, true) + .with(FluidPipeBlock.DOWN, true), false); + scene.world.showSection(util.select.layer(2), Direction.DOWN); + scene.idle(10); + scene.world.modifyBlock(util.grid.at(1, 1, 1), s -> s.with(FluidPipeBlock.UP, true) + .with(FluidPipeBlock.NORTH, false), false); + scene.idle(20); + + scene.overlay.showText(60) + .placeNearTarget() + .colored(PonderPalette.RED) + .text("It will no longer react to any neighbouring blocks being added or removed") + .attachKeyFrame() + .pointAt(util.vector.centerOf(3, 2, 1)); + scene.idle(20); } public static void valve(SceneBuilder scene, SceneBuildingUtil util) { @@ -79,11 +367,12 @@ public class PipeScenes { scene.world.showSection(util.select.layer(0), Direction.UP); scene.idle(5); scene.world.showSection(util.select.layersFrom(1), Direction.DOWN); - + /* * Valve pipes propagate flows in a straight line * - * When given Rotational Force in the closing direction, the valve will stop the fluid flow + * When given Rotational Force in the closing direction, the valve will stop the + * fluid flow * * It can be re-opened by reversing the input rotation */ @@ -95,17 +384,21 @@ public class PipeScenes { scene.world.showSection(util.select.layer(0), Direction.UP); scene.idle(5); scene.world.showSection(util.select.layersFrom(1), Direction.DOWN); - + /* * Smart pipes propagate flows in a straight line * - * When placed directly at the source, they can specify the type of fluid to extract + * When placed directly at the source, they can specify the type of fluid to + * extract * - * Simply Right-Click their filter slot with any item containing the desired fluid + * Simply Right-Click their filter slot with any item containing the desired + * fluid * - * When placed further down a pipe network, smart pipes will only let matching fluids continue past + * When placed further down a pipe network, smart pipes will only let matching + * fluids continue past * - * In this configuration, their filter has no impact on whether a fluid can enter the pipe network + * In this configuration, their filter has no impact on whether a fluid can + * enter the pipe network */ } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java index 5862087bf..fb7bd38f8 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java @@ -60,6 +60,7 @@ public class WorldSectionElement extends AnimatedSceneElement { public static final Compartment> DOC_WORLD_SECTION = new Compartment<>(); List renderedTileEntities; + List tickableTileEntities; Selection section; boolean redraw; @@ -256,7 +257,9 @@ public class WorldSectionElement extends AnimatedSceneElement { loadTEsIfMissing(scene.getWorld()); renderedTileEntities.removeIf(te -> scene.getWorld() .getTileEntity(te.getPos()) != te); - renderedTileEntities.forEach(te -> { + tickableTileEntities.removeIf(te -> scene.getWorld() + .getTileEntity(te.getPos()) != te); + tickableTileEntities.forEach(te -> { if (te instanceof ITickableTileEntity) ((ITickableTileEntity) te).tick(); }); @@ -264,19 +267,23 @@ public class WorldSectionElement extends AnimatedSceneElement { @Override public void whileSkipping(PonderScene scene) { - if (redraw) + if (redraw) { renderedTileEntities = null; + tickableTileEntities = null; + } redraw = false; } protected void loadTEsIfMissing(PonderWorld world) { if (renderedTileEntities != null) return; + tickableTileEntities = new ArrayList<>(); renderedTileEntities = new ArrayList<>(); section.forEach(pos -> { TileEntity tileEntity = world.getTileEntity(pos); if (tileEntity == null) return; + tickableTileEntities.add(tileEntity); renderedTileEntities.add(tileEntity); tileEntity.updateContainingBlockInfo(); }); @@ -294,8 +301,10 @@ public class WorldSectionElement extends AnimatedSceneElement { int light = -1; if (fade != 1) light = (int) (MathHelper.lerp(fade, 5, 14)); - if (redraw) + if (redraw) { renderedTileEntities = null; + tickableTileEntities = null; + } transformMS(ms, pt); world.pushFakeLight(light); renderTileEntities(world, ms, buffer, pt); @@ -352,7 +361,7 @@ public class WorldSectionElement extends AnimatedSceneElement { if (selectedBlock == null) return; BlockState blockState = world.getBlockState(selectedBlock); - if (blockState.isAir(world, selectedBlock)) + if (blockState.isAir()) return; VoxelShape shape = blockState.getShape(world, selectedBlock, ISelectionContext.forEntity(Minecraft.getInstance().player)); diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java index 05ddc710a..9841bbb8d 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/fluid/SmartFluidTankBehaviour.java @@ -102,7 +102,7 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { if (syncCooldown > 0) { syncCooldown--; - if (syncCooldown == 0 && queuedSync) + if (syncCooldown == 0 && queuedSync) updateFluids(); } @@ -203,7 +203,7 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { return 0; return super.fill(resource, action); } - + public int forceFill(FluidStack resource, FluidAction action) { return super.fill(resource, action); } @@ -244,6 +244,9 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { fluidLevel.chase(tank.getFluidAmount() / (float) tank.getCapacity(), .25, Chaser.EXP); if (!getWorld().isRemote) sendDataLazily(); + if (tileEntity.isVirtual() && !tank.getFluid() + .isEmpty()) + renderedFluid = tank.getFluid(); } public FluidStack getRenderedFluid() { @@ -272,7 +275,7 @@ public class SmartFluidTankBehaviour extends TileEntityBehaviour { .isEmpty()) renderedFluid = tank.getFluid(); } - + public boolean isEmpty(float partialTicks) { FluidStack renderedFluid = getRenderedFluid(); if (renderedFluid.isEmpty()) diff --git a/src/main/java/com/simibubi/create/foundation/utility/Debug.java b/src/main/java/com/simibubi/create/foundation/utility/Debug.java index b52612b30..e6445ae11 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Debug.java +++ b/src/main/java/com/simibubi/create/foundation/utility/Debug.java @@ -1,5 +1,7 @@ package com.simibubi.create.foundation.utility; +import com.simibubi.create.Create; + import net.minecraft.client.Minecraft; import net.minecraft.util.text.IFormattableTextComponent; import net.minecraft.util.text.ITextComponent; @@ -14,23 +16,27 @@ import net.minecraftforge.fml.common.thread.EffectiveSide; public class Debug { @Deprecated - public static void debugChat(ITextComponent message) { + public static void debugChat(String message) { if (Minecraft.getInstance().player != null) - Minecraft.getInstance().player.sendStatusMessage(message, false); + Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent(message), false); } @Deprecated - public static void debugChatAndShowStack(ITextComponent message, int depth) { + public static void debugChatAndShowStack(String message, int depth) { if (Minecraft.getInstance().player != null) - Minecraft.getInstance().player.sendStatusMessage(message.copy() - .append("@") + Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent(message).append("@") .append(debugStack(depth)), false); } @Deprecated - public static void debugMessage(ITextComponent message) { + public static void debugMessage(String message) { if (Minecraft.getInstance().player != null) - Minecraft.getInstance().player.sendStatusMessage(message, true); + Minecraft.getInstance().player.sendStatusMessage(new StringTextComponent(message), true); + } + + @Deprecated + public static void log(String message) { + Create.LOGGER.info(message); } @Deprecated diff --git a/src/main/resources/ponder/debug/scene_10.nbt b/src/main/resources/ponder/debug/scene_10.nbt new file mode 100644 index 0000000000000000000000000000000000000000..41e45e42dc15224daf704d589c306d2703d879a9 GIT binary patch literal 1142 zcmV-+1d00}iwFP!000000L53^ZsRr(rEZQbZ<`j_Ua()#*S@AjQSWwxT{K98I^AAg z46a1mLS#}9sXDt){<7Xs6#b0;M<3jwMB0ihGIETh1`Ju&(czgh!xHU01zcc3)E#XYr-pG17`FqD z*MY~k@Hj1+n>-rhbl`D2@OT|~d<&1;!Do%J`K&QEpEbtjv&Ptb-sHo=qcJw0HOA(% z#@Kw;7@N<22cI>@=Cj7weAXD7&l+R%*+*3k)%CarOkIy>z|{5lC`2B8Ekfik2^VnY z6U+s)h>M(XUgSi!4R@qu!sXMHE&FJ2niffXju!+SFA_?k98bl`5=e6gxi2Yb?Tr?! zprTr|kK80i??*WS$jMaRJjs%bgdl|#V%}U(E;ia{LDX2VrEfGn3{>ouwvUvyS&BKI zbXN!@0cH6vpy634FSD6M1Soig(}H~Qixd%zGeTli3hG_rd`3j2HaKN@L>#og+lJul z#nF41;7wAz7Ac0>+pKk44c%Exee)eDF*+~5uO#NZbNI>2KfcRiKsuF}50n_5EV7hL zt{^uei9*yHvjTGGA?F9+{0ojh!tn%-Kdsm6Utx`-b0U^3zw#k}ko-^A>wo__2~htT z&Ty27H!oIFqd$fLE-M2{V=QD$PglEfIOakXtPW@zRZ>4xNnMa=j%gC%bdnW|?6$1_W=c!F=L~N4 zTVtiFv{-81Ei&UyF$k&Gd1x1+sSdQVd&56?!syN4_O#Q?!tno}daaG>VAlt-kkyB(u3x>9*CG!1O9a!%H|kV^qK!Uw8N08i?CyAn&NKc9hwp`+O6f zS#&4`=PXT0ZuF)_q1RCOE?|x_oDw03e6>A>N-AUjxR&>MBFH3S6lB0n8u56G;1I{8 zd_R^w6CU9*lFL_TfX;C`g?DEr1Y7jcu&kk!&1Nw2f+BIVLN%Gnsy(x@0I#Ue* zNPv$bU*yGh^(WiaqdZw~MkgZ2S_p0D_7s^?1xQ238s(4!!s3$}P zQIkSntcHL-gTcDJ0^60UvyHIbe%{p6D#63)b`c+6CmcC%H>Ab}bJtKer&X-#j)w_V zMR&d7IaWLon=R*rq@7r9)ai!G@O0Mhlcw6ksGCKhY?DT52k+)ncRjWmt;u<)620EL zL<2s@@NaKfPCH-~Y%5naipE~wodTUml^vSXYC=isq2X6p;8*Zo0#6n&tDd0$04t9t I!zmR20AG12_5c6? literal 0 HcmV?d00001 diff --git a/src/main/resources/ponder/fluid_pipe/encasing.nbt b/src/main/resources/ponder/fluid_pipe/encasing.nbt new file mode 100644 index 0000000000000000000000000000000000000000..c6e1d76e653ffc554b1e72cbec989d2bfc40fb84 GIT binary patch literal 561 zcmV-10?z#(iwFP!000000L7M3Z<{a_g)i8oK(>cUl{WRgf1=NQp7ylY$Vr^k8pX(V zMActEllTH*#5gS5B1OUY`1ttqbsz`GfNJr<2>>+T#QiQZNO@_55nMy_$zZWA%70VF*`;tcH&&a{Ck<3!7Yd2KFA zsqDo_%|`=<^epoiXT2|&)~o&mf!2NWNteFnHvRM}0w?M3-QvngMyL;w+|A8>!Mh(f zoh*?F258!^yKK_*RB=v)VX=i*}L)oGLNqmZXGA& zq@3sZyW2J63^B*I1 literal 0 HcmV?d00001 diff --git a/src/main/resources/ponder/fluid_pipe/flow.nbt b/src/main/resources/ponder/fluid_pipe/flow.nbt new file mode 100644 index 0000000000000000000000000000000000000000..f3dd374bcf302fa188b9662417b8987dca9eb9ac GIT binary patch literal 950 zcmV;n14;ZJiwFP!000000L@q1PTN2b9bZWtC{$|Is=v^OK0}`nRYg^Vkm&s-GRcxy zI9|)UQGh2ts}Ho5`UNfho+=$*)(M;S;sk;kDRP#~o}F`c<_z%wnqafwoLB&mzFmCV z_;#AmAQ2CEKp3R2Cb&l-?VKW#aYT$!1IMg^W7WX1H8^GsokfgJXAz^*S;Xjc7BM=V%lpvah!~yDB1WgPh|%dR zVstv&HFOp+I-Ny~PG=FL(^6Q_zZ;tlGFK12_}osNT$JRvMM4T*=N(9A4&7~p;kqAnd79<1*9 zjK7WOC^|?tXSsbXa@#6$`!jVa;(2?+K@d@f8RZw}?vkL_=jjQ#1P==dj>BQlZF4_5 z@u2k%A3HSSXmt%}zD~c|_Xh;l5sY*a|Cn!)LCnt(Z+k$85m(X5C`ngn6|_9CM}%=) z*#t>}DwjBjiHBS1koPgriD-f!6#igH+S$b+Ip~uDv={n}wHJV%E>mY&`A>`FY7eR6 zqc9;^n3Ze7sIoPOae5rqTcmP6S&oL(Z9n1m-F7Ke^shVawsNXW@o3I@trd{dT6;^7 z=G&5`u@%y^Bxx3|bXy_PYE74uYvStvaXCTDRJhzS?tYm=sH!by6xPq8m*p&~7T-&S zPiPpDq;ire=7}j;<=Uh=Z}8#N*%aPuN>}$_ZiBzUGUWr-=hO63()4OBO=tT?QN418 zYqyyahM<0JN;F|5_CvxsNq;77G{DXp?dhb^M*V=3c85lI9BvX3k0uceg=uHMwNh_A zNN7xw^k-NDS|dCs32CoKy5Jo9AtSioKMfcdrzMnVv(Qg^=}Em&pO8?-a#-I-e|JZj z9W}t>G%hjSBg#1)fX$QPB*)pSkU{ej%63&`TX<&?QW$7SC96cSO2sd~$*v$@RpgV6 zt2%;Ne#m9@&P&kB|2mXZ1&oesxy;EH)N`)I;y$UK-XGQKdle#NTy<4eo9Ya^^#Z4= z0czK(mei6jaE8^Yn4x{Nip4KV*ME0MN$D{Kys#K8=&d|vv0|K?k4yHEK&%a1_fftvvFgOJMcc*b!ZkJk-kUx*Yrw!b;^opZi(j-3FZK5{vI zK^%lo{`K{-k9s5)R8YcE{^=us6tVFQ58&jZK5`Pq^&Ryh4Pt}gwV5iR6Ghpu836K+ygonJVgplx9V)ifKCzlt#OhQ0fJ!I1my**9| zoE>sHPa-nBp)nD393cOSW$75Yto1dl{|%1c!0{m*zrDS^{R8&cxgcV}(i<1qXCZXh zA8!Bt>!F8wCpf`lDxRN7j_wuoYWTI|fk}}P&QF%+JXiJND?c2xcbT#=tfcYunnFX* zkp=q$#hwZ>ABHKWaUXftI4+vL6`(8N(qoIfTr%^`33p^)iZw{W0Q#=ueWS)rU z4)TxYEQ^KY5g_lJd`BXP;Zq!CQkpuRpDgp={xwdgL=@ulP8r0?T60UMxmr#;%B{kI zca;Ov2y;H19Lse9NHchm8n1WiEel&#XKGps68j=6Dy0stG zPCqEMH+YhXBok*)!hB`14}~l*AytsUS=<5TpVCN>wDA7Hs>U%*p-fNm0?+5r{$tAV zC;~ksOzy5kT5M7_5c{<^kk`JUgLaFMt!(vmO8!rAC=|1+>Scs^K1zB|ppi@>wrFZ% zWh1ModiP&7_p)7@`f1sb4OHy=HTR>JFTY17GVm@TW+-4k7}dcQ+`;;|BA*TTfhX}JqJa699JmprkvcHA&{JQ1zxGm|~h9BE}S~tz} zHKnwx?NO;VvxtIRKq-qNk{Y$z5NW%nm;=D;(IGCE@tp1F&wiP zXuu+kcx#2=;Kxw@uTMkTqW=ZZGp_jH z-YY)ryka1)Mr=BTM`dq{+6mFcy-=m_%}6yaLI!c{Qr zFXU8)k`Qb~%O5cz*t}qD;FWjBPDYj6+GeY>(x`(5kFmf{;Vqi77<%~o=pV3k@Vt2! F0041$XV?G$ literal 0 HcmV?d00001