diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index a7b18ba48..2ed629144 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -140,7 +140,7 @@ de8a40b7daf1497d5aecee47a43b3e0b1d030b00 assets/create/blockstates/fancy_scoria_ fc9ac0a7e7191b93516719455a17177fa6524ecc assets/create/blockstates/fancy_weathered_limestone_bricks_slab.json b2a7c321b1795f20e7433f81a55ce4683de081b8 assets/create/blockstates/fancy_weathered_limestone_bricks_stairs.json 6372fe02ba0065acb0758121c45a15a1a8fdc5de assets/create/blockstates/fancy_weathered_limestone_bricks_wall.json -48086bf71a824faf14841b698050cc8544b09a9b assets/create/blockstates/fluid_pipe.json +37bc041b7449dc4d7962225e606125ba1b188974 assets/create/blockstates/fluid_pipe.json f0eaab18e16c4f3f65ebf3b55b08f0dc445720fe assets/create/blockstates/fluid_tank.json 5408d92ab02af86539ac42971d4033545970bb3a assets/create/blockstates/fluid_valve.json e9da1794b6ece7f9aa8bcb43d42c23a55446133b assets/create/blockstates/flywheel.json @@ -337,7 +337,7 @@ e8b0a401c10d1ba67ed71ba31bd5f9bc28571b65 assets/create/blockstates/powered_toggl d06cd9a1101b18d306a786320aab12018b1325d6 assets/create/blockstates/purple_sail.json 92957119abd5fbcca36a113b2a80255fd70fc303 assets/create/blockstates/purple_seat.json 61035f8afe75ff7bbd291da5d8690bcbebe679eb assets/create/blockstates/purple_valve_handle.json -4439fc83a8c7370ab44b211a3fd48abde20a4728 assets/create/blockstates/radial_chassis.json +8d7e653bfd9846e684a0d3725595714a19201017 assets/create/blockstates/radial_chassis.json 45877c4d90a7185c2f304edbd67379d800920439 assets/create/blockstates/red_sail.json da1b08387af7afa0855ee8d040f620c01f20660a assets/create/blockstates/red_seat.json 722fc77bbf387af8a4016e42cbf9501d2b968881 assets/create/blockstates/red_valve_handle.json @@ -402,19 +402,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 2b12f3cf99e498899207a8c4855210e7b5dc55cd assets/create/lang/en_ud.json -cb22b256847375aa973491ca51858a704a3edf2c assets/create/lang/en_us.json -d2c8c43f990f7844f3dea35fd0a98ee7f4d40576 assets/create/lang/unfinished/de_de.json -69ce4c93ab2d6afd93352fd269be68f4c53ed963 assets/create/lang/unfinished/es_es.json -2a63880625f84655bee39fa5ff0e4d5f0933f8f9 assets/create/lang/unfinished/es_mx.json -a568c0d8943021d8f438d80692a62e7987b35c7d assets/create/lang/unfinished/fr_fr.json -b21c69ffdb9f09324bfb51fb843af000bf9c2c13 assets/create/lang/unfinished/it_it.json -230ab0c62a7e8b6a6e0c68b3081f06e0148e120a assets/create/lang/unfinished/ja_jp.json -c42a6c5d2ae9b97d4c79751cd7f60f70864f8c36 assets/create/lang/unfinished/ko_kr.json -b640c6137991b8e25139105a44d0d13b0b66ed18 assets/create/lang/unfinished/nl_nl.json -b9c2f45ac232045e6c1124d48017154504096dbd assets/create/lang/unfinished/pt_br.json -d69e5e26891d5ff7a1d93a1f5cc0bd775e1dfa08 assets/create/lang/unfinished/ru_ru.json -dbf513ee2276e1460adf3f3f50f336d104a74884 assets/create/lang/unfinished/zh_cn.json -40fd381d585db529a20f31adf001ecaf6dc77104 assets/create/lang/unfinished/zh_tw.json +3522bc1dd15fd219aaf506766fb96be5f65b1939 assets/create/lang/en_us.json +d389c171d3d6a7382fb5b2e80b14e9bee53d8179 assets/create/lang/unfinished/de_de.json +b3caab7bb37be53ea93895cbaae2081452cd095e assets/create/lang/unfinished/es_es.json +0039068794faea032b0a39c954f142e2c8e4dfc1 assets/create/lang/unfinished/es_mx.json +1e34083359caea11cf9fdbb3f04a5881ea62a55e assets/create/lang/unfinished/fr_fr.json +c9abd10d296055f56877317a5c7dee14d0e33bf5 assets/create/lang/unfinished/it_it.json +83298d57034c2bb54924dff2d9b5257502ac3b9a assets/create/lang/unfinished/ja_jp.json +2c0e5fbfc813949d973e9f95af9501ed65b80b82 assets/create/lang/unfinished/ko_kr.json +4b3b113e5f9351b741974bc18d13d9d648d38f91 assets/create/lang/unfinished/nl_nl.json +9bddfffdf5349353d37d7003546c94799c6e812d assets/create/lang/unfinished/pt_br.json +5119b6690e8faa7e25450674caebf3c9c53fd54b assets/create/lang/unfinished/ru_ru.json +f11eb922b49753b60894f0dfe8baabe004d13e05 assets/create/lang/unfinished/zh_cn.json +017a9c9cc6f4538c8c497097cbd59f590b4af160 assets/create/lang/unfinished/zh_tw.json 846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json 1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json 1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json @@ -1585,7 +1585,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear 9f9455ccb5fc9e3cbfce73862b46078346a522a5 assets/create/models/item/zinc_nugget.json b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json -0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json +5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json 187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json 0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json 356f4855a2a6c65be3fb51d7d1aabf2ca6034d42 data/create/advancements/arm_blaze_burner.json diff --git a/src/generated/resources/assets/create/blockstates/fluid_pipe.json b/src/generated/resources/assets/create/blockstates/fluid_pipe.json index 80a25280c..37315d0be 100644 --- a/src/generated/resources/assets/create/blockstates/fluid_pipe.json +++ b/src/generated/resources/assets/create/blockstates/fluid_pipe.json @@ -181,10 +181,10 @@ }, { "when": { - "south": "true", + "east": "false", "west": "true", - "north": "false", - "east": "false" + "south": "true", + "north": "false" }, "apply": { "model": "create:block/fluid_pipe/lu_y" @@ -192,10 +192,10 @@ }, { "when": { - "south": "true", + "east": "true", "west": "false", - "north": "false", - "east": "true" + "south": "true", + "north": "false" }, "apply": { "model": "create:block/fluid_pipe/ru_y" @@ -203,10 +203,10 @@ }, { "when": { - "south": "false", + "east": "false", "west": "true", - "north": "true", - "east": "false" + "south": "false", + "north": "true" }, "apply": { "model": "create:block/fluid_pipe/ld_y" @@ -214,10 +214,10 @@ }, { "when": { - "south": "false", + "east": "true", "west": "false", - "north": "true", - "east": "true" + "south": "false", + "north": "true" }, "apply": { "model": "create:block/fluid_pipe/rd_y" @@ -225,10 +225,10 @@ }, { "when": { + "east": "false", + "west": "false", "south": "true", - "west": "false", - "north": "true", - "east": "false" + "north": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -236,10 +236,10 @@ }, { "when": { + "east": "false", + "west": "false", "south": "true", - "west": "false", - "north": "false", - "east": "false" + "north": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -247,10 +247,10 @@ }, { "when": { - "south": "false", + "east": "false", "west": "false", - "north": "true", - "east": "false" + "south": "false", + "north": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_y" @@ -258,10 +258,10 @@ }, { "when": { - "south": "false", + "east": "true", "west": "true", - "north": "false", - "east": "true" + "south": "false", + "north": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -269,10 +269,10 @@ }, { "when": { - "south": "false", + "east": "false", "west": "true", - "north": "false", - "east": "false" + "south": "false", + "north": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -280,10 +280,10 @@ }, { "when": { - "south": "false", + "east": "true", "west": "false", - "north": "false", - "east": "true" + "south": "false", + "north": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_y" @@ -291,10 +291,10 @@ }, { "when": { - "south": "false", + "east": "false", "west": "false", - "north": "false", - "east": "false" + "south": "false", + "north": "false" }, "apply": { "model": "create:block/fluid_pipe/none_y" @@ -303,9 +303,9 @@ { "when": { "down": "false", - "up": "true", + "east": "true", "west": "false", - "east": "true" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/lu_z" @@ -314,9 +314,9 @@ { "when": { "down": "false", - "up": "true", + "east": "false", "west": "true", - "east": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ru_z" @@ -325,9 +325,9 @@ { "when": { "down": "true", - "up": "false", + "east": "true", "west": "false", - "east": "true" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ld_z" @@ -336,9 +336,9 @@ { "when": { "down": "true", - "up": "false", + "east": "false", "west": "true", - "east": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/rd_z" @@ -347,9 +347,9 @@ { "when": { "down": "true", - "up": "true", + "east": "false", "west": "false", - "east": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -358,9 +358,9 @@ { "when": { "down": "false", - "up": "true", + "east": "false", "west": "false", - "east": "false" + "up": "true" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -369,9 +369,9 @@ { "when": { "down": "true", - "up": "false", + "east": "false", "west": "false", - "east": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/ud_z" @@ -380,9 +380,9 @@ { "when": { "down": "false", - "up": "false", + "east": "true", "west": "true", - "east": "true" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -391,9 +391,9 @@ { "when": { "down": "false", - "up": "false", + "east": "true", "west": "false", - "east": "true" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -402,9 +402,9 @@ { "when": { "down": "false", - "up": "false", + "east": "false", "west": "true", - "east": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/lr_z" @@ -413,9 +413,9 @@ { "when": { "down": "false", - "up": "false", + "east": "false", "west": "false", - "east": "false" + "up": "false" }, "apply": { "model": "create:block/fluid_pipe/none_z" diff --git a/src/generated/resources/assets/create/blockstates/radial_chassis.json b/src/generated/resources/assets/create/blockstates/radial_chassis.json index 8bd829ffc..9d00ea8b1 100644 --- a/src/generated/resources/assets/create/blockstates/radial_chassis.json +++ b/src/generated/resources/assets/create/blockstates/radial_chassis.json @@ -29,8 +29,8 @@ }, { "when": { - "axis": "x", - "sticky_south": "true" + "sticky_south": "true", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -39,8 +39,8 @@ }, { "when": { - "axis": "y", - "sticky_south": "true" + "sticky_south": "true", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky" @@ -48,8 +48,8 @@ }, { "when": { - "axis": "z", - "sticky_south": "true" + "sticky_south": "true", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -59,8 +59,8 @@ }, { "when": { - "axis": "x", - "sticky_south": "false" + "sticky_south": "false", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -69,8 +69,8 @@ }, { "when": { - "axis": "y", - "sticky_south": "false" + "sticky_south": "false", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y" @@ -78,8 +78,8 @@ }, { "when": { - "axis": "z", - "sticky_south": "false" + "sticky_south": "false", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -89,8 +89,8 @@ }, { "when": { - "axis": "x", - "sticky_west": "true" + "sticky_west": "true", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -99,8 +99,8 @@ }, { "when": { - "axis": "y", - "sticky_west": "true" + "sticky_west": "true", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -109,8 +109,8 @@ }, { "when": { - "axis": "z", - "sticky_west": "true" + "sticky_west": "true", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_z_sticky", @@ -119,8 +119,8 @@ }, { "when": { - "axis": "x", - "sticky_west": "false" + "sticky_west": "false", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -129,8 +129,8 @@ }, { "when": { - "axis": "y", - "sticky_west": "false" + "sticky_west": "false", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -139,8 +139,8 @@ }, { "when": { - "axis": "z", - "sticky_west": "false" + "sticky_west": "false", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_z", @@ -149,8 +149,8 @@ }, { "when": { - "axis": "x", - "sticky_north": "true" + "sticky_north": "true", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky" @@ -158,8 +158,8 @@ }, { "when": { - "axis": "y", - "sticky_north": "true" + "sticky_north": "true", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -168,8 +168,8 @@ }, { "when": { - "axis": "z", - "sticky_north": "true" + "sticky_north": "true", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -178,8 +178,8 @@ }, { "when": { - "axis": "x", - "sticky_north": "false" + "sticky_north": "false", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x" @@ -187,8 +187,8 @@ }, { "when": { - "axis": "y", - "sticky_north": "false" + "sticky_north": "false", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -197,8 +197,8 @@ }, { "when": { - "axis": "z", - "sticky_north": "false" + "sticky_north": "false", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -207,8 +207,8 @@ }, { "when": { - "axis": "x", - "sticky_east": "true" + "sticky_east": "true", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x_sticky", @@ -217,8 +217,8 @@ }, { "when": { - "axis": "y", - "sticky_east": "true" + "sticky_east": "true", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y_sticky", @@ -227,8 +227,8 @@ }, { "when": { - "axis": "z", - "sticky_east": "true" + "sticky_east": "true", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_z_sticky" @@ -236,8 +236,8 @@ }, { "when": { - "axis": "x", - "sticky_east": "false" + "sticky_east": "false", + "axis": "x" }, "apply": { "model": "create:block/radial_chassis_side_x", @@ -246,8 +246,8 @@ }, { "when": { - "axis": "y", - "sticky_east": "false" + "sticky_east": "false", + "axis": "y" }, "apply": { "model": "create:block/radial_chassis_side_y", @@ -256,8 +256,8 @@ }, { "when": { - "axis": "z", - "sticky_east": "false" + "sticky_east": "false", + "axis": "z" }, "apply": { "model": "create:block/radial_chassis_side_z" diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index b3751d222..43b6dae4a 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1906,7 +1906,7 @@ "create.ponder.belt_directions.text_3": "2. They can connect diagonally", "create.ponder.belt_directions.text_4": "3. They can connect vertically", "create.ponder.belt_directions.text_5": "4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "Moving belts will transport Items and other Entities", @@ -1957,6 +1957,16 @@ "create.ponder.chain_gearshift.text_5": "Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "12 RPM", + "create.ponder.chute.header": "Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2021,6 +2031,12 @@ "create.ponder.deployer_redstone.text_2": "Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "Using Depots", + "create.ponder.depot.text_1": "Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "Alternatively, Blazes can be collected from their Spawners directly", @@ -2068,7 +2084,7 @@ "create.ponder.funnel_intro.text_1": "Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "Redstone control", - "create.ponder.funnel_redstone.text_1": "Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "Direct transfer", "create.ponder.funnel_transfer.text_1": "Funnels cannot ever transfer between closed inventories directly.", @@ -2294,6 +2310,12 @@ "create.ponder.shaft_casing.header": "Encasing Shafts", "create.ponder.shaft_casing.text_1": "Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 d8e19da81..9db22f031 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: 1425", + "_": "Missing Localizations: 1443", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 5bc39f897..4b1671b37 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: 456", + "_": "Missing Localizations: 474", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 2dc445799..087f4834d 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: 1355", + "_": "Missing Localizations: 1373", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 347fa2a27..55a1d458a 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: 1137", + "_": "Missing Localizations: 1155", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 763c8bb7b..aad6e8ef3 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: 473", + "_": "Missing Localizations: 491", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 9b23ee4d0..47b38141f 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: 480", + "_": "Missing Localizations: 498", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 51410c720..92968da8a 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: 526", + "_": "Missing Localizations: 544", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 402bc2bca..c8f125878 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: 1624", + "_": "Missing Localizations: 1642", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 92c791d67..969babaa9 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: 1690", + "_": "Missing Localizations: 1708", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 660e3c42c..7d277317b 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: 476", + "_": "Missing Localizations: 494", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 7f3b14f8d..7befc4728 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: 474", + "_": "Missing Localizations: 492", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", 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 6121864c8..e8d27316c 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: 479", + "_": "Missing Localizations: 497", "_": "->------------------------] Game Elements [------------------------<-", @@ -1907,7 +1907,7 @@ "create.ponder.belt_directions.text_3": "UNLOCALIZED: 2. They can connect diagonally", "create.ponder.belt_directions.text_4": "UNLOCALIZED: 3. They can connect vertically", "create.ponder.belt_directions.text_5": "UNLOCALIZED: 4. And they can connect vertical shafts horizontally", - "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions.\nBelts can span any Length between 2 and 20 blocks", + "create.ponder.belt_directions.text_6": "UNLOCALIZED: These are all possible directions. Belts can span any Length between 2 and 20 blocks", "create.ponder.belt_transport.header": "UNLOCALIZED: Using Mechanical Belts for Logistics", "create.ponder.belt_transport.text_1": "UNLOCALIZED: Moving belts will transport Items and other Entities", @@ -1958,6 +1958,16 @@ "create.ponder.chain_gearshift.text_5": "UNLOCALIZED: Using analog signals, the ratio can be adjusted more precisely between 1 and 2", "create.ponder.chain_gearshift.text_6": "UNLOCALIZED: 12 RPM", + "create.ponder.chute.header": "UNLOCALIZED: Transporting Items downward via Chutes", + "create.ponder.chute.text_1": "UNLOCALIZED: Chutes can transport items vertically from and to inventories", + "create.ponder.chute.text_2": "UNLOCALIZED: Using the Wrench, a window can be created", + "create.ponder.chute.text_3": "UNLOCALIZED: Placing chutes targeting the side faces of another will make it diagonal", + + "create.ponder.chute_upward.header": "UNLOCALIZED: Transporting Items upward via Chutes", + "create.ponder.chute_upward.text_1": "UNLOCALIZED: Using Encased Fans at the top or bottom, a Chute can move items upward", + "create.ponder.chute_upward.text_2": "UNLOCALIZED: Inspecting chutes with Engineers' Goggles reveals information about the movement direction", + "create.ponder.chute_upward.text_3": "UNLOCALIZED: On the 'blocked' end, items will have to be inserted/taken from the sides", + "create.ponder.clockwork_bearing.header": "UNLOCALIZED: Animating Structures using Clockwork Bearings", "create.ponder.clockwork_bearing.text_1": "UNLOCALIZED: Clockwork Bearings attach to blocks in front of them", "create.ponder.clockwork_bearing.text_2": "UNLOCALIZED: Upon receiving Rotational Force, the structure will be rotated according to the hour of the day", @@ -2022,6 +2032,12 @@ "create.ponder.deployer_redstone.text_2": "UNLOCALIZED: Before stopping, the Deployer will finish any started cycles", "create.ponder.deployer_redstone.text_3": "UNLOCALIZED: Thus, a negative pulse can be used to trigger exactly one activation cycle", + "create.ponder.depot.header": "UNLOCALIZED: Using Depots", + "create.ponder.depot.text_1": "UNLOCALIZED: Depots can serve as 'stationary' belt elements", + "create.ponder.depot.text_2": "UNLOCALIZED: Right-Click to manually place or remove Items from it", + "create.ponder.depot.text_3": "UNLOCALIZED: Just like Mechanical Belts, it can provide items to processing", + "create.ponder.depot.text_4": "UNLOCALIZED: ...as well as provide Items to Mechanical Arms", + "create.ponder.empty_blaze_burner.header": "UNLOCALIZED: Using Empty Blaze Burners", "create.ponder.empty_blaze_burner.text_1": "UNLOCALIZED: Right-click a Blaze with the empty burner to capture it", "create.ponder.empty_blaze_burner.text_2": "UNLOCALIZED: Alternatively, Blazes can be collected from their Spawners directly", @@ -2069,7 +2085,7 @@ "create.ponder.funnel_intro.text_1": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.", "create.ponder.funnel_redstone.header": "UNLOCALIZED: Redstone control", - "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting.", + "create.ponder.funnel_redstone.text_1": "UNLOCALIZED: Redstone power will prevent any funnel from acting", "create.ponder.funnel_transfer.header": "UNLOCALIZED: Direct transfer", "create.ponder.funnel_transfer.text_1": "UNLOCALIZED: Funnels cannot ever transfer between closed inventories directly.", @@ -2295,6 +2311,12 @@ "create.ponder.shaft_casing.header": "UNLOCALIZED: Encasing Shafts", "create.ponder.shaft_casing.text_1": "UNLOCALIZED: Brass or Andesite Casing can be used to decorate Shafts", + "create.ponder.smart_chute.header": "UNLOCALIZED: Filtering Items using Smart Chutes", + "create.ponder.smart_chute.text_1": "UNLOCALIZED: Smart Chutes are vertical chutes with additional control", + "create.ponder.smart_chute.text_2": "UNLOCALIZED: Items in the filter slot specify what exactly they can extract and transfer", + "create.ponder.smart_chute.text_3": "UNLOCALIZED: Use the Mouse Wheel to specify the extracted stack size", + "create.ponder.smart_chute.text_4": "UNLOCALIZED: Redstone power will prevent Smart Chutes from acting.", + "create.ponder.speedometer.header": "UNLOCALIZED: Monitoring Kinetic information using the Speedometer", "create.ponder.speedometer.text_1": "UNLOCALIZED: The Speedometer displays the current Speed of the attached components", "create.ponder.speedometer.text_2": "UNLOCALIZED: When wearing Engineers' Goggles, the player can get more detailed information from the Gauge", diff --git a/src/generated/resources/data/create/advancements/aesthetics.json b/src/generated/resources/data/create/advancements/aesthetics.json index d723cbe38..59a86f429 100644 --- a/src/generated/resources/data/create/advancements/aesthetics.json +++ b/src/generated/resources/data/create/advancements/aesthetics.json @@ -28,8 +28,8 @@ "trigger": "create:bracket_apply", "conditions": { "accepted_entries": [ - "create:cogwheel", - "create:large_cogwheel" + "create:large_cogwheel", + "create:cogwheel" ] } }, diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java index bcb39ea99..3ad112e59 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/saw/SawTileEntity.java @@ -7,6 +7,8 @@ import java.util.Random; import java.util.function.Predicate; import java.util.stream.Collectors; +import javax.annotation.ParametersAreNonnullByDefault; + import com.simibubi.create.AllRecipeTypes; import com.simibubi.create.content.contraptions.components.actors.BlockBreakingKineticTileEntity; import com.simibubi.create.content.contraptions.processing.ProcessingInventory; @@ -57,15 +59,13 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; -import javax.annotation.ParametersAreNonnullByDefault; - - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class SawTileEntity extends BlockBreakingKineticTileEntity { private static final Object cuttingRecipesKey = new Object(); - public static final LazyValue> woodcuttingRecipeType = new LazyValue<>(() -> Registry.RECIPE_TYPE.getOrDefault(new ResourceLocation("druidcraft", "woodcutting"))); + public static final LazyValue> woodcuttingRecipeType = + new LazyValue<>(() -> Registry.RECIPE_TYPE.getOrDefault(new ResourceLocation("druidcraft", "woodcutting"))); public ProcessingInventory inventory; private int recipeIndex; @@ -151,10 +151,14 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { continue; ItemStack tryExportingToBeltFunnel = getBehaviour(DirectBeltInputBehaviour.TYPE) .tryExportingToBeltFunnel(stack, itemMovementFacing.getOpposite()); - if (tryExportingToBeltFunnel.getCount() != stack.getCount()) { - inventory.setStackInSlot(slot, tryExportingToBeltFunnel); - notifyUpdate(); - return; + if (tryExportingToBeltFunnel != null) { + if (tryExportingToBeltFunnel.getCount() != stack.getCount()) { + inventory.setStackInSlot(slot, tryExportingToBeltFunnel); + notifyUpdate(); + return; + } + if (!tryExportingToBeltFunnel.isEmpty()) + return; } } @@ -277,19 +281,19 @@ public class SawTileEntity extends BlockBreakingKineticTileEntity { private List> getRecipes() { /* - Predicate> types = AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get() - ? RecipeConditions.isOfType(IRecipeType.STONECUTTING, AllRecipeTypes.CUTTING.getType()) - : RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType()); - + * Predicate> types = + * AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get() ? + * RecipeConditions.isOfType(IRecipeType.STONECUTTING, + * AllRecipeTypes.CUTTING.getType()) : + * RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType()); + * */ - Predicate> types = RecipeConditions.isOfType( - AllRecipeTypes.CUTTING.getType(), + Predicate> types = RecipeConditions.isOfType(AllRecipeTypes.CUTTING.getType(), AllConfigs.SERVER.recipes.allowStonecuttingOnSaw.get() ? IRecipeType.STONECUTTING : null, - AllConfigs.SERVER.recipes.allowWoodcuttingOnSaw.get() ? woodcuttingRecipeType.getValue() : null - ); + AllConfigs.SERVER.recipes.allowWoodcuttingOnSaw.get() ? woodcuttingRecipeType.getValue() : null); - List> startedSearch = RecipeFinder.get(cuttingRecipesKey, world, types); + List> startedSearch = RecipeFinder.get(cuttingRecipesKey, world, types); return startedSearch.stream() .filter(RecipeConditions.outputMatchesFilter(filtering)) .filter(RecipeConditions.firstIngredientMatches(inventory.getStackInSlot(0))) diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainTileEntity.java index 39f9bc7a1..671202efb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainTileEntity.java @@ -99,7 +99,7 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI } boolean onClient = world.isRemote && !isVirtual(); - + if (processingTicks > 0) { heldItem.prevBeltPosition = .5f; boolean wasAtBeginning = processingTicks == FILLING_TIME; @@ -129,13 +129,17 @@ public class ItemDrainTileEntity extends SmartTileEntity implements IHaveGoggleI ItemStack tryExportingToBeltFunnel = getBehaviour(DirectBeltInputBehaviour.TYPE) .tryExportingToBeltFunnel(heldItem.stack, side.getOpposite()); - if (tryExportingToBeltFunnel.getCount() != heldItem.stack.getCount()) { - if (tryExportingToBeltFunnel.isEmpty()) - heldItem = null; - else - heldItem.stack = tryExportingToBeltFunnel; - notifyUpdate(); - return; + if (tryExportingToBeltFunnel != null) { + if (tryExportingToBeltFunnel.getCount() != heldItem.stack.getCount()) { + if (tryExportingToBeltFunnel.isEmpty()) + heldItem = null; + else + heldItem.stack = tryExportingToBeltFunnel; + notifyUpdate(); + return; + } + if (!tryExportingToBeltFunnel.isEmpty()) + return; } BlockPos nextPosition = pos.offset(side); diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java index 49f3725d2..4c16a9d29 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/BeltTileEntity.java @@ -237,7 +237,8 @@ public class BeltTileEntity extends KineticTileEntity implements ILightListener if (casingBefore == casing) return; - requestModelDataUpdate(); + if (!isVirtual()) + requestModelDataUpdate(); if (hasWorld()) world.notifyBlockUpdate(getPos(), getBlockState(), getBlockState(), 16); } @@ -290,10 +291,8 @@ public class BeltTileEntity extends KineticTileEntity implements ILightListener } public boolean isController() { - return controller != null && - pos.getX() == controller.getX() && - pos.getY() == controller.getY() && - pos.getZ() == controller.getZ(); + return controller != null && pos.getX() == controller.getX() && pos.getY() == controller.getY() + && pos.getZ() == controller.getZ(); } public float getBeltMovementSpeed() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java index 1dbd82087..870da7d9d 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/BeltInventory.java @@ -107,6 +107,12 @@ public class BeltInventory { // Don't move if held by processing (client) if (world.isRemote && currentItem.locked) continue; + + // Don't move if held by external components + if (currentItem.lockedExternally) { + currentItem.lockedExternally = false; + continue; + } // Don't move if other items are waiting in front float currentPos = currentItem.beltPosition; diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java index 6dffb5056..5202ea1df 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/belt/transport/TransportedItemStack.java @@ -20,6 +20,7 @@ public class TransportedItemStack implements Comparable { public int insertedAt; public Direction insertedFrom; public boolean locked; + public boolean lockedExternally; public float prevBeltPosition; public float prevSideOffset; @@ -73,7 +74,10 @@ public class TransportedItemStack implements Comparable { nbt.putInt("InSegment", insertedAt); nbt.putInt("Angle", angle); nbt.putInt("InDirection", insertedFrom.getIndex()); - nbt.putBoolean("Locked", locked); + if (locked) + nbt.putBoolean("Locked", locked); + if (lockedExternally) + nbt.putBoolean("LockedExternally", lockedExternally); return nbt; } @@ -87,6 +91,7 @@ public class TransportedItemStack implements Comparable { stack.angle = nbt.getInt("Angle"); stack.insertedFrom = Direction.byIndex(nbt.getInt("InDirection")); stack.locked = nbt.getBoolean("Locked"); + stack.lockedExternally = nbt.getBoolean("LockedExternally"); return stack; } diff --git a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java index 684498740..a3c370ccb 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/relays/elementary/CogWheelBlock.java @@ -26,102 +26,114 @@ import net.minecraft.world.World; public class CogWheelBlock extends AbstractShaftBlock { - boolean isLarge; + boolean isLarge; - private CogWheelBlock(boolean large, Properties properties) { - super(properties); - isLarge = large; - } + private CogWheelBlock(boolean large, Properties properties) { + super(properties); + isLarge = large; + } - public static CogWheelBlock small(Properties properties) { - return new CogWheelBlock(false, properties); - } + public static CogWheelBlock small(Properties properties) { + return new CogWheelBlock(false, properties); + } - public static CogWheelBlock large(Properties properties) { - return new CogWheelBlock(true, properties); - } + public static CogWheelBlock large(Properties properties) { + return new CogWheelBlock(true, properties); + } - public static boolean isSmallCog(BlockState state) { - return AllBlocks.COGWHEEL.has(state); - } + public static boolean isSmallCog(BlockState state) { + return AllBlocks.COGWHEEL.has(state); + } - public static boolean isLargeCog(BlockState state) { - return AllBlocks.LARGE_COGWHEEL.has(state); - } + public static boolean isLargeCog(BlockState state) { + return AllBlocks.LARGE_COGWHEEL.has(state); + } - @Override - public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { - return (isLarge ? AllShapes.LARGE_GEAR : AllShapes.SMALL_GEAR).get(state.get(AXIS)); - } + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return (isLarge ? AllShapes.LARGE_GEAR : AllShapes.SMALL_GEAR).get(state.get(AXIS)); + } - @Override - public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { - for (Direction facing : Iterate.directions) { - if (facing.getAxis() == state.get(AXIS)) - continue; + @Override + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + for (Direction facing : Iterate.directions) { + if (facing.getAxis() == state.get(AXIS)) + continue; - BlockState blockState = worldIn.getBlockState(pos.offset(facing)); - if (blockState.has(AXIS) && facing.getAxis() == blockState.get(AXIS)) - continue; - - if (isLargeCog(blockState) || isLarge && isSmallCog(blockState)) - return false; - } - return true; - } + BlockPos offsetPos = pos.offset(facing); + BlockState blockState = worldIn.getBlockState(offsetPos); + if (blockState.has(AXIS) && facing.getAxis() == blockState.get(AXIS)) + continue; - @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { - BlockPos placedOnPos = context.getPos().offset(context.getFace().getOpposite()); - World world = context.getWorld(); - BlockState placedAgainst = world.getBlockState(placedOnPos); - Block block = placedAgainst.getBlock(); + boolean smallCog = isSmallCog(blockState); + if (!smallCog && blockState.getBlock() instanceof IRotate) + smallCog = ((IRotate) blockState.getBlock()).hasIntegratedCogwheel(worldIn, offsetPos, blockState); - if (context.getPlayer() != null && context.getPlayer().isSneaking()) - return this.getDefaultState().with(AXIS, context.getFace().getAxis()); - - BlockState stateBelow = world.getBlockState(context.getPos() - .down()); - IFluidState ifluidstate = context.getWorld().getFluidState(context.getPos()); - if (AllBlocks.ROTATION_SPEED_CONTROLLER.has(stateBelow) && isLarge) { - return this.getDefaultState() - .with(BlockStateProperties.WATERLOGGED, ifluidstate.getFluid() == Fluids.WATER) - .with(AXIS, stateBelow.get(SpeedControllerBlock.HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X); - } + if (isLargeCog(blockState) || isLarge && smallCog) + return false; + } + return true; + } - if (!(block instanceof IRotate) - || !(((IRotate) block).hasIntegratedCogwheel(world, placedOnPos, placedAgainst))) { - Axis preferredAxis = getPreferredAxis(context); - if (preferredAxis != null) - return this.getDefaultState() - .with(AXIS, preferredAxis) - .with(BlockStateProperties.WATERLOGGED, ifluidstate.getFluid() == Fluids.WATER); - return this.getDefaultState() - .with(AXIS, context.getFace().getAxis()) - .with(BlockStateProperties.WATERLOGGED, ifluidstate.getFluid() == Fluids.WATER); - } + @Override + public BlockState getStateForPlacement(BlockItemUseContext context) { + BlockPos placedOnPos = context.getPos() + .offset(context.getFace() + .getOpposite()); + World world = context.getWorld(); + BlockState placedAgainst = world.getBlockState(placedOnPos); + Block block = placedAgainst.getBlock(); - return getDefaultState().with(AXIS, ((IRotate) block).getRotationAxis(placedAgainst)); - } + if (context.getPlayer() != null && context.getPlayer() + .isSneaking()) + return this.getDefaultState() + .with(AXIS, context.getFace() + .getAxis()); - @Override - public float getParticleTargetRadius() { - return isLarge ? 1.125f : .65f; - } + BlockState stateBelow = world.getBlockState(context.getPos() + .down()); + IFluidState ifluidstate = context.getWorld() + .getFluidState(context.getPos()); + if (AllBlocks.ROTATION_SPEED_CONTROLLER.has(stateBelow) && isLarge) { + return this.getDefaultState() + .with(BlockStateProperties.WATERLOGGED, ifluidstate.getFluid() == Fluids.WATER) + .with(AXIS, stateBelow.get(SpeedControllerBlock.HORIZONTAL_AXIS) == Axis.X ? Axis.Z : Axis.X); + } - @Override - public float getParticleInitialRadius() { - return isLarge ? 1f : .75f; - } + if (!(block instanceof IRotate) + || !(((IRotate) block).hasIntegratedCogwheel(world, placedOnPos, placedAgainst))) { + Axis preferredAxis = getPreferredAxis(context); + if (preferredAxis != null) + return this.getDefaultState() + .with(AXIS, preferredAxis) + .with(BlockStateProperties.WATERLOGGED, ifluidstate.getFluid() == Fluids.WATER); + return this.getDefaultState() + .with(AXIS, context.getFace() + .getAxis()) + .with(BlockStateProperties.WATERLOGGED, ifluidstate.getFluid() == Fluids.WATER); + } - public void fillItemGroup(ItemGroup group, NonNullList items) { - items.add(new ItemStack(this)); - } + return getDefaultState().with(AXIS, ((IRotate) block).getRotationAxis(placedAgainst)); + } - // IRotate + @Override + public float getParticleTargetRadius() { + return isLarge ? 1.125f : .65f; + } - @Override - public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) { - return !isLarge; - } + @Override + public float getParticleInitialRadius() { + return isLarge ? 1f : .75f; + } + + public void fillItemGroup(ItemGroup group, NonNullList items) { + items.add(new ItemStack(this)); + } + + // IRotate + + @Override + public boolean hasIntegratedCogwheel(IWorldReader world, BlockPos pos, BlockState state) { + return !isLarge; + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java index b605298bf..716ba2a6c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelRenderer.java @@ -4,7 +4,6 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import com.simibubi.create.AllBlockPartials; import com.simibubi.create.foundation.render.SuperByteBuffer; -import com.simibubi.create.foundation.render.backend.Backend; import com.simibubi.create.foundation.render.backend.FastRenderDispatcher; import com.simibubi.create.foundation.tileEntity.renderer.SmartTileEntityRenderer; import com.simibubi.create.foundation.utility.AngleHelper; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java index c1a58610f..650edfba7 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/belts/tunnel/BeltTunnelTileEntity.java @@ -1,19 +1,22 @@ package com.simibubi.create.content.logistics.block.belts.tunnel; -import java.util.*; +import java.util.EnumMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; -import com.simibubi.create.content.logistics.packet.TunnelFlapPacket; -import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue; -import com.simibubi.create.foundation.networking.AllPackets; -import com.simibubi.create.foundation.render.backend.FastRenderDispatcher; -import com.simibubi.create.foundation.render.backend.instancing.IInstanceRendered; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; import org.apache.commons.lang3.tuple.Pair; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock.Shape; import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock; +import com.simibubi.create.content.logistics.packet.TunnelFlapPacket; +import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue; +import com.simibubi.create.foundation.networking.AllPackets; +import com.simibubi.create.foundation.render.backend.FastRenderDispatcher; +import com.simibubi.create.foundation.render.backend.instancing.IInstanceRendered; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; import com.simibubi.create.foundation.utility.Iterate; @@ -29,9 +32,11 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.Direction.AxisDirection; +import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; @@ -100,7 +105,7 @@ public class BeltTunnelTileEntity extends SmartTileEntity implements IInstanceRe super.read(compound, clientPacket); if (clientPacket) - DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> FastRenderDispatcher.enqueueUpdate(this)); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FastRenderDispatcher.enqueueUpdate(this)); } public void updateTunnelConnections() { @@ -172,6 +177,11 @@ public class BeltTunnelTileEntity extends SmartTileEntity implements IInstanceRe flapsToSend.clear(); } + @Override + public boolean shouldRenderAsTE() { + return true; + } + @Override public void addBehaviours(List behaviours) {} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java index 605e2e19e..408907020 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/chute/ChuteTileEntity.java @@ -13,6 +13,7 @@ import com.simibubi.create.content.contraptions.components.fan.EncasedFanBlock; import com.simibubi.create.content.contraptions.components.fan.EncasedFanTileEntity; import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; import com.simibubi.create.content.contraptions.particle.AirParticleData; +import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.gui.widgets.InterpolatedValue; @@ -155,7 +156,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (!handleDownwardOutput(true)) nextOffset = .5f; else if (nextOffset < 0) { - handleDownwardOutput(world.isRemote); + handleDownwardOutput(world.isRemote && !isVirtual()); return; } } @@ -166,7 +167,7 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor if (!handleUpwardOutput(true)) nextOffset = .5f; else if (nextOffset > 1) { - handleUpwardOutput(world.isRemote); + handleUpwardOutput(world.isRemote && !isVirtual()); return; } } @@ -380,6 +381,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor .isHorizontal()) return false; + if (FunnelBlock.getFunnelFacing(world.getBlockState(pos.down())) == Direction.DOWN) + return false; if (Block.hasSolidSideOnTop(world, pos.down())) return false; @@ -434,6 +437,8 @@ public class ChuteTileEntity extends SmartTileEntity implements IHaveGoggleInfor return true; } + if (FunnelBlock.getFunnelFacing(world.getBlockState(pos.up())) == Direction.UP) + return false; if (Block.hasSolidSide(stateAbove, world, pos.up(), Direction.DOWN)) return false; if (!inputChutes.isEmpty()) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java index 2eeedb782..bc0f5ade9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/depot/DepotTileEntity.java @@ -98,6 +98,8 @@ public class DepotTileEntity extends SmartTileEntity { continue; ItemStack afterInsert = getBehaviour(DirectBeltInputBehaviour.TYPE).tryExportingToBeltFunnel(previousItem, null); + if (afterInsert == null) + return false; if (previousItem.getCount() != afterInsert.getCount()) { processingOutputBuffer.setStackInSlot(slot, afterInsert); notifyUpdate(); @@ -108,6 +110,8 @@ public class DepotTileEntity extends SmartTileEntity { ItemStack previousItem = heldItem.stack; ItemStack afterInsert = getBehaviour(DirectBeltInputBehaviour.TYPE).tryExportingToBeltFunnel(previousItem, null); + if (afterInsert == null) + return false; if (previousItem.getCount() != afterInsert.getCount()) { if (afterInsert.isEmpty()) heldItem = null; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java index b32718469..663f81567 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/funnel/FunnelTileEntity.java @@ -263,6 +263,8 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn return false; if (!(blockState.getBlock() instanceof FunnelBlock)) return false; + if (blockState.get(FunnelBlock.EXTRACTING)) + return false; return FunnelBlock.getFunnelFacing(blockState) == Direction.UP; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java index 563bd51cc..4809bb3e1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmInteractionPoint.java @@ -1,5 +1,11 @@ package com.simibubi.create.content.logistics.block.mechanicalArm; +import java.util.function.Supplier; + +import javax.annotation.Nullable; + +import org.apache.commons.lang3.mutable.MutableBoolean; + import com.google.common.collect.ImmutableMap; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlockPartials; @@ -10,17 +16,25 @@ import com.simibubi.create.content.contraptions.components.crafter.MechanicalCra import com.simibubi.create.content.contraptions.components.deployer.DeployerBlock; import com.simibubi.create.content.contraptions.components.saw.SawBlock; import com.simibubi.create.content.contraptions.processing.burner.BlazeBurnerBlock; +import com.simibubi.create.content.contraptions.relays.belt.BeltHelper; +import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.logistics.block.belts.tunnel.BeltTunnelBlock; import com.simibubi.create.content.logistics.block.chute.AbstractChuteBlock; +import com.simibubi.create.content.logistics.block.funnel.AbstractFunnelBlock; +import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock; +import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape; import com.simibubi.create.content.logistics.block.funnel.FunnelBlock; import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; import com.simibubi.create.foundation.advancement.AllTriggers; import com.simibubi.create.foundation.item.SmartInventory; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.inventory.InvManipulationBehaviour; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; + import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.block.ComposterBlock; @@ -39,6 +53,7 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -48,9 +63,6 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.wrapper.InvWrapper; -import javax.annotation.Nullable; -import java.util.function.Supplier; - public abstract class ArmInteractionPoint { enum Mode { @@ -65,21 +77,21 @@ public abstract class ArmInteractionPoint { private ArmAngleTarget cachedAngles; private static ImmutableMap> POINTS = - ImmutableMap.>builder() - .put(new Saw(), Saw::new) - .put(new Belt(), Belt::new) - .put(new Depot(), Depot::new) - .put(new Chute(), Chute::new) - .put(new Basin(), Basin::new) - .put(new Funnel(), Funnel::new) - .put(new Jukebox(), Jukebox::new) - .put(new Crafter(), Crafter::new) - .put(new Deployer(), Deployer::new) - .put(new Composter(), Composter::new) - .put(new Millstone(), Millstone::new) - .put(new BlazeBurner(), BlazeBurner::new) - .put(new CrushingWheels(), CrushingWheels::new) - .build(); + ImmutableMap.>builder() + .put(new Saw(), Saw::new) + .put(new Belt(), Belt::new) + .put(new Depot(), Depot::new) + .put(new Chute(), Chute::new) + .put(new Basin(), Basin::new) + .put(new Funnel(), Funnel::new) + .put(new Jukebox(), Jukebox::new) + .put(new Crafter(), Crafter::new) + .put(new Deployer(), Deployer::new) + .put(new Composter(), Composter::new) + .put(new Millstone(), Millstone::new) + .put(new BlazeBurner(), BlazeBurner::new) + .put(new CrushingWheels(), CrushingWheels::new) + .build(); public ArmInteractionPoint() { cachedHandler = LazyOptional.empty(); @@ -108,6 +120,8 @@ public abstract class ArmInteractionPoint { return isValid(reader, pos, reader.getBlockState(pos)); } + void keepAlive(IWorld world) {} + abstract boolean isValid(IBlockReader reader, BlockPos pos, BlockState state); static boolean isInteractable(IBlockReader reader, BlockPos pos, BlockState state) { @@ -119,7 +133,8 @@ public abstract class ArmInteractionPoint { ArmAngleTarget getTargetAngles(BlockPos armPos, boolean ceiling) { if (cachedAngles == null) - cachedAngles = new ArmAngleTarget(armPos, getInteractionPositionVector(), getInteractionDirection(), ceiling); + cachedAngles = + new ArmAngleTarget(armPos, getInteractionPositionVector(), getInteractionDirection(), ceiling); return cachedAngles; } @@ -167,7 +182,8 @@ public abstract class ArmInteractionPoint { for (ArmInteractionPoint armInteractionPoint : POINTS.keySet()) if (armInteractionPoint.isValid(world, pos, state)) - point = POINTS.get(armInteractionPoint).get(); + point = POINTS.get(armInteractionPoint) + .get(); if (point != null) { point.state = state; @@ -222,7 +238,7 @@ public abstract class ArmInteractionPoint { @Override boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { return AllBlocks.MECHANICAL_SAW.has(state) && state.get(SawBlock.FACING) == Direction.UP - && ((KineticTileEntity) reader.getTileEntity(pos)).getSpeed() != 0; + && ((KineticTileEntity) reader.getTileEntity(pos)).getSpeed() != 0; } } @@ -260,7 +276,8 @@ public abstract class ArmInteractionPoint { @Nullable @Override IItemHandler getHandler(World world) { - return new InvWrapper(((ComposterBlock) Blocks.COMPOSTER).createInventory(world.getBlockState(pos), world, pos)); + return new InvWrapper( + ((ComposterBlock) Blocks.COMPOSTER).createInventory(world.getBlockState(pos), world, pos)); } } @@ -273,12 +290,14 @@ public abstract class ArmInteractionPoint { @Override Direction getInteractionDirection() { - return state.get(DeployerBlock.FACING).getOpposite(); + return state.get(DeployerBlock.FACING) + .getOpposite(); } @Override Vec3d getInteractionPositionVector() { - return super.getInteractionPositionVector().add(new Vec3d(getInteractionDirection().getDirectionVec()).scale(.65f)); + return super.getInteractionPositionVector() + .add(new Vec3d(getInteractionDirection().getDirectionVec()).scale(.65f)); } } @@ -298,13 +317,15 @@ public abstract class ArmInteractionPoint { @Override ItemStack insert(World world, ItemStack stack, boolean simulate) { ItemStack input = stack.copy(); - if (!BlazeBurnerBlock.tryInsert(state, world, pos, input, false, true).getResult().isEmpty()) { + if (!BlazeBurnerBlock.tryInsert(state, world, pos, input, false, true) + .getResult() + .isEmpty()) { return stack; } ActionResult res = BlazeBurnerBlock.tryInsert(state, world, pos, input, false, simulate); return res.getType() == ActionResultType.SUCCESS - ? ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - 1) - : stack; + ? ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - 1) + : stack; } @Override @@ -321,7 +342,8 @@ public abstract class ArmInteractionPoint { @Override Direction getInteractionDirection() { - return state.get(MechanicalCrafterBlock.HORIZONTAL_FACING).getOpposite(); + return state.get(MechanicalCrafterBlock.HORIZONTAL_FACING) + .getOpposite(); } @Override @@ -339,7 +361,8 @@ public abstract class ArmInteractionPoint { @Override Vec3d getInteractionPositionVector() { - return super.getInteractionPositionVector().add(new Vec3d(getInteractionDirection().getDirectionVec()).scale(.5f)); + return super.getInteractionPositionVector() + .add(new Vec3d(getInteractionDirection().getDirectionVec()).scale(.5f)); } } @@ -374,7 +397,8 @@ public abstract class ArmInteractionPoint { return stack; JukeboxBlock jukeboxBlock = (JukeboxBlock) state.getBlock(); JukeboxTileEntity jukeboxTE = (JukeboxTileEntity) tileEntity; - if (!jukeboxTE.getRecord().isEmpty()) + if (!jukeboxTE.getRecord() + .isEmpty()) return stack; if (!(stack.getItem() instanceof MusicDiscItem)) return stack; @@ -413,8 +437,30 @@ public abstract class ArmInteractionPoint { @Override boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { - return AllBlocks.BELT.has(state) && !(reader.getBlockState(pos.up()).getBlock() instanceof BeltTunnelBlock); + return AllBlocks.BELT.has(state) && !(reader.getBlockState(pos.up()) + .getBlock() instanceof BeltTunnelBlock); } + + @Override + void keepAlive(IWorld world) { + super.keepAlive(world); + BeltTileEntity beltTE = BeltHelper.getSegmentTE(world, pos); + if (beltTE == null) + return; + TransportedItemStackHandlerBehaviour transport = + beltTE.getBehaviour(TransportedItemStackHandlerBehaviour.TYPE); + if (transport == null) + return; + MutableBoolean found = new MutableBoolean(false); + transport.handleProcessingOnAllItems(tis -> { + if (found.isTrue()) + return TransportedResult.doNothing(); + tis.lockedExternally = true; + found.setTrue(); + return TransportedResult.doNothing(); + }); + } + } static class Chute extends TopFaceArmInteractionPoint { @@ -429,7 +475,9 @@ public abstract class ArmInteractionPoint { @Override Vec3d getInteractionPositionVector() { - return VecHelper.getCenterOf(pos).add(new Vec3d(FunnelBlock.getFunnelFacing(state).getDirectionVec()).scale(-.15f)); + return VecHelper.getCenterOf(pos) + .add(new Vec3d(FunnelBlock.getFunnelFacing(state) + .getDirectionVec()).scale(-.15f)); } @Override @@ -444,7 +492,8 @@ public abstract class ArmInteractionPoint { @Override Direction getInteractionDirection() { - return FunnelBlock.getFunnelFacing(state).getOpposite(); + return FunnelBlock.getFunnelFacing(state) + .getOpposite(); } @Override @@ -475,7 +524,9 @@ public abstract class ArmInteractionPoint { @Override boolean isValid(IBlockReader reader, BlockPos pos, BlockState state) { - return state.getBlock() instanceof FunnelBlock && !state.get(FunnelBlock.EXTRACTING); + return state.getBlock() instanceof AbstractFunnelBlock + && !(state.has(FunnelBlock.EXTRACTING) && state.get(FunnelBlock.EXTRACTING)) + && !(state.has(BeltFunnelBlock.SHAPE) && state.get(BeltFunnelBlock.SHAPE) == Shape.PUSHING); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java index ab7aaf009..986115f01 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/mechanicalArm/ArmTileEntity.java @@ -66,7 +66,7 @@ public class ArmTileEntity extends KineticTileEntity { protected int lastOutputIndex = -1; protected boolean redstoneLocked; - enum Phase { + public enum Phase { SEARCH_INPUTS, MOVE_TO_INPUT, SEARCH_OUTPUTS, MOVE_TO_OUTPUT, DANCING } @@ -108,9 +108,15 @@ public class ArmTileEntity extends KineticTileEntity { initInteractionPoints(); boolean targetReached = tickMovementProgress(); - if (world.isRemote) + if (chasedPointProgress < 1) { + if (phase == Phase.MOVE_TO_INPUT) { + ArmInteractionPoint point = getTargetedInteractionPoint(); + if (point != null) + point.keepAlive(world); + } return; - if (chasedPointProgress < 1) + } + if (world.isRemote) return; if (phase == Phase.MOVE_TO_INPUT) diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java index 1b6c7e5ab..95aeb5c07 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java @@ -94,7 +94,7 @@ public class SchematicWorld extends WrappedWorld { try { TileEntity tileEntity = blockState.createTileEntity(this); if (tileEntity != null) { - tileEntity.setLocation(this, pos); + onTEadded(tileEntity, pos); tileEntities.put(pos, tileEntity); renderedTileEntities.add(tileEntity); } @@ -105,6 +105,10 @@ public class SchematicWorld extends WrappedWorld { } return null; } + + protected void onTEadded(TileEntity tileEntity, BlockPos pos) { + tileEntity.setLocation(this, pos); + } @Override public BlockState getBlockState(BlockPos globalPos) { 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 b43adcffa..01328c7a4 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java @@ -92,14 +92,14 @@ public class PonderWorld extends SchematicWorld { originalBlocks.forEach((k, v) -> blocks.put(k, v)); originalTileEntities.forEach((k, v) -> { TileEntity te = TileEntity.create(v.write(new CompoundNBT())); - te.setLocation(this, te.getPos()); + onTEadded(te, te.getPos()); tileEntities.put(k, te); renderedTileEntities.add(te); }); originalEntities.forEach(e -> EntityType.loadEntityUnchecked(e.serializeNBT(), this) .ifPresent(entities::add)); particles.clearEffects(); - fixVirtualTileEntities(); + fixBeltTileEntities(); } public void restoreBlocks(Selection selection) { @@ -225,16 +225,20 @@ public class PonderWorld extends SchematicWorld { particles.addParticle(p); } - public void fixVirtualTileEntities() { - for (TileEntity tileEntity : tileEntities.values()) { - if (!(tileEntity instanceof SmartTileEntity)) - continue; - SmartTileEntity smartTileEntity = (SmartTileEntity) tileEntity; - smartTileEntity.markVirtual(); + @Override + protected void onTEadded(TileEntity tileEntity, BlockPos pos) { + super.onTEadded(tileEntity, pos); + if (!(tileEntity instanceof SmartTileEntity)) + return; + SmartTileEntity smartTileEntity = (SmartTileEntity) tileEntity; + smartTileEntity.markVirtual(); + } - if (!(smartTileEntity instanceof BeltTileEntity)) + public void fixBeltTileEntities() { + for (TileEntity tileEntity : tileEntities.values()) { + if (!(tileEntity instanceof BeltTileEntity)) continue; - BeltTileEntity beltTileEntity = (BeltTileEntity) smartTileEntity; + BeltTileEntity beltTileEntity = (BeltTileEntity) tileEntity; if (!beltTileEntity.isController()) continue; BlockPos controllerPos = tileEntity.getPos(); 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 ead35f82a..7c0f52c56 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/SceneBuilder.java @@ -16,6 +16,7 @@ import com.simibubi.create.content.contraptions.particle.RotationIndicatorPartic import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity; +import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity; import com.simibubi.create.foundation.ponder.content.PonderPalette; import com.simibubi.create.foundation.ponder.elements.AnimatedSceneElement; import com.simibubi.create.foundation.ponder.elements.BeltItemElement; @@ -56,6 +57,7 @@ import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputB import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour; import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult; import com.simibubi.create.foundation.utility.ColorHelper; +import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockState; @@ -761,6 +763,16 @@ public class SceneBuilder { }, reDrawBlocks)); } + public void instructArm(BlockPos armLocation, ArmTileEntity.Phase phase, ItemStack heldItem, + int targetedPoint) { + modifyTileNBT(scene.getSceneBuildingUtil().select.position(armLocation), ArmTileEntity.class, compound -> { + NBTHelper.writeEnum(compound, "Phase", phase); + compound.put("HeldItem", heldItem.serializeNBT()); + compound.putInt("TargetPointIndex", targetedPoint); + compound.putFloat("MovementProgress", 0); + }); + } + public void flapFunnel(BlockPos position, boolean outward) { modifyTileEntity(position, FunnelTileEntity.class, funnel -> funnel.flap(!outward)); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java index 689a14165..59aac1a8d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/BearingScenes.java @@ -3,6 +3,7 @@ package com.simibubi.create.foundation.ponder.content; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.actors.HarvesterTileEntity; import com.simibubi.create.content.contraptions.components.structureMovement.bearing.SailBlock; +import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity; import com.simibubi.create.foundation.ponder.ElementLink; import com.simibubi.create.foundation.ponder.SceneBuilder; import com.simibubi.create.foundation.ponder.SceneBuildingUtil; @@ -12,6 +13,7 @@ import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Pointing; +import net.minecraft.entity.Entity; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; @@ -149,6 +151,7 @@ public class BearingScenes { scene.title("windmill_structure", "Windmill Contraptions"); scene.configureBasePlate(1, 1, 5); scene.setSceneOffsetY(-1); + scene.world.modifyEntities(SuperGlueEntity.class, Entity::remove); scene.world.showSection(util.select.layer(0), Direction.UP); scene.idle(5); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java index ed9604071..de354e77d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/BeltScenes.java @@ -6,10 +6,14 @@ import java.util.List; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; +import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity; +import com.simibubi.create.content.contraptions.components.press.MechanicalPressTileEntity.Mode; +import com.simibubi.create.content.contraptions.fluids.actors.SpoutTileEntity; import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; import com.simibubi.create.content.contraptions.relays.belt.BeltPart; import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity; import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock; +import com.simibubi.create.content.logistics.block.mechanicalArm.ArmTileEntity.Phase; import com.simibubi.create.foundation.ponder.ElementLink; import com.simibubi.create.foundation.ponder.SceneBuilder; import com.simibubi.create.foundation.ponder.SceneBuildingUtil; @@ -23,6 +27,7 @@ import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; import com.simibubi.create.foundation.utility.NBTHelper; import com.simibubi.create.foundation.utility.Pointing; +import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.item.ItemEntity; import net.minecraft.item.DyeColor; @@ -299,7 +304,7 @@ public class BeltScenes { scene.idle(10); scene.overlay.showText(160) - .text("These are all possible directions.\nBelts can span any Length between 2 and 20 blocks"); + .text("These are all possible directions. Belts can span any Length between 2 and 20 blocks"); scene.markAsFinished(); } @@ -461,4 +466,112 @@ public class BeltScenes { .pointAt(util.vector.blockSurface(beltPos.south(), Direction.WEST)); } + public static void depot(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("depot", "Using Depots"); + scene.configureBasePlate(0, 0, 5); + scene.showBasePlate(); + scene.idle(5); + scene.world.setBlock(util.grid.at(3, 2, 2), Blocks.WATER.getDefaultState(), false); + + BlockPos depotPos = util.grid.at(2, 1, 2); + scene.world.showSection(util.select.position(2, 1, 2), Direction.DOWN); + Vec3d topOf = util.vector.topOf(depotPos); + scene.overlay.showText(60) + .attachKeyFrame() + .text("Depots can serve as 'stationary' belt elements") + .placeNearTarget() + .pointAt(topOf); + scene.idle(70); + + scene.overlay.showControls(new InputWindowElement(topOf, Pointing.DOWN).rightClick() + .withItem(AllBlocks.COPPER_BLOCK.asStack()), 20); + scene.idle(7); + scene.world.createItemOnBeltLike(depotPos, Direction.NORTH, AllBlocks.COPPER_BLOCK.asStack()); + scene.idle(10); + scene.overlay.showText(70) + .attachKeyFrame() + .text("Right-Click to manually place or remove Items from it") + .placeNearTarget() + .pointAt(topOf); + scene.idle(80); + + scene.overlay.showControls(new InputWindowElement(topOf, Pointing.DOWN).rightClick(), 20); + scene.idle(7); + scene.world.removeItemsFromBelt(depotPos); + scene.effects.indicateSuccess(depotPos); + scene.idle(20); + + scene.world.showSection(util.select.position(depotPos.up(2)), Direction.SOUTH); + scene.overlay.showText(70) + .attachKeyFrame() + .text("Just like Mechanical Belts, it can provide items to processing") + .placeNearTarget() + .pointAt(util.vector.blockSurface(depotPos.up(2), Direction.WEST)); + ItemStack bottle = new ItemStack(Items.BUCKET); + scene.world.createItemOnBeltLike(depotPos, Direction.NORTH, bottle); + scene.idle(20); + scene.world.modifyTileNBT(util.select.position(depotPos.up(2)), SpoutTileEntity.class, + nbt -> nbt.putInt("ProcessingTicks", 20)); + scene.idle(20); + scene.world.removeItemsFromBelt(depotPos); + scene.world.createItemOnBeltLike(depotPos, Direction.UP, new ItemStack(Items.WATER_BUCKET)); + scene.world.modifyTileNBT(util.select.position(depotPos.up(2)), SpoutTileEntity.class, + nbt -> nbt.putBoolean("Splash", true)); + scene.idle(30); + scene.world.removeItemsFromBelt(depotPos); + scene.world.hideSection(util.select.position(depotPos.up(2)), Direction.SOUTH); + scene.idle(20); + ElementLink spout = scene.world.showIndependentSection(util.select.position(depotPos.up(2) + .west()), Direction.SOUTH); + scene.world.moveSection(spout, util.vector.of(1, 0, 0), 0); + + BlockPos pressPos = depotPos.up(2) + .west(); + ItemStack copper = AllItems.COPPER_INGOT.asStack(); + scene.world.createItemOnBeltLike(depotPos, Direction.NORTH, copper); + Vec3d depotCenter = util.vector.centerOf(depotPos); + scene.idle(10); + + Class type = MechanicalPressTileEntity.class; + scene.world.modifyTileEntity(pressPos, type, pte -> pte.start(Mode.BELT)); + scene.idle(15); + scene.world.modifyTileEntity(pressPos, type, + pte -> pte.makePressingParticleEffect(depotCenter.add(0, 8 / 16f, 0), copper)); + scene.world.removeItemsFromBelt(depotPos); + ItemStack sheet = AllItems.COPPER_SHEET.asStack(); + scene.world.createItemOnBeltLike(depotPos, Direction.UP, sheet); + + scene.idle(20); + scene.world.hideIndependentSection(spout, Direction.SOUTH); + scene.idle(10); + + Selection fanSelect = util.select.fromTo(4, 1, 3, 5, 2, 2) + .add(util.select.position(3, 1, 2)) + .add(util.select.position(5, 0, 2)); + scene.world.showSection(fanSelect, Direction.SOUTH); + ElementLink water = + scene.world.showIndependentSection(util.select.position(3, 1, 0), Direction.SOUTH); + scene.world.moveSection(water, util.vector.of(0, 1, 2), 0); + scene.idle(30); + + scene.world.hideSection(fanSelect, Direction.SOUTH); + scene.world.hideIndependentSection(water, Direction.SOUTH); + scene.idle(30); + + scene.world.showSection(util.select.fromTo(2, 1, 4, 2, 1, 5) + .add(util.select.position(2, 0, 5)), Direction.DOWN); + BlockPos armPos = util.grid.at(2, 1, 4); + scene.overlay.showText(70) + .attachKeyFrame() + .text("...as well as provide Items to Mechanical Arms") + .placeNearTarget() + .pointAt(util.vector.blockSurface(armPos, Direction.WEST)); + scene.idle(20); + + scene.world.instructArm(armPos, Phase.MOVE_TO_INPUT, ItemStack.EMPTY, 0); + scene.idle(37); + scene.world.removeItemsFromBelt(depotPos); + scene.world.instructArm(armPos, Phase.SEARCH_OUTPUTS, sheet, -1); + } + } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java new file mode 100644 index 000000000..d6f8e5225 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ChuteScenes.java @@ -0,0 +1,265 @@ +package com.simibubi.create.foundation.ponder.content; + +import static com.simibubi.create.content.logistics.block.chute.ChuteBlock.SHAPE; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; +import com.simibubi.create.content.logistics.block.chute.ChuteBlock; +import com.simibubi.create.content.logistics.block.chute.ChuteBlock.Shape; +import com.simibubi.create.content.logistics.block.chute.SmartChuteTileEntity; +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.elements.EntityElement; +import com.simibubi.create.foundation.ponder.elements.InputWindowElement; +import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; +import com.simibubi.create.foundation.utility.Pointing; + +import net.minecraft.block.Blocks; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class ChuteScenes { + + public static void downward(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("chute", "Transporting Items downward via Chutes"); + scene.configureBasePlate(0, 0, 5); + scene.scaleSceneView(.9f); + scene.world.showSection(util.select.layer(0), Direction.UP); + + ElementLink top = + scene.world.showIndependentSection(util.select.fromTo(3, 3, 3, 3, 4, 3), Direction.DOWN); + ElementLink bottom = + scene.world.showIndependentSection(util.select.fromTo(3, 2, 3, 3, 1, 3), Direction.DOWN); + scene.world.moveSection(bottom, util.vector.of(-2, 0, -1), 0); + scene.world.moveSection(top, util.vector.of(0, 0, -1), 0); + scene.idle(20); + + ItemStack stack = AllBlocks.COPPER_BLOCK.asStack(); + scene.world.createItemEntity(util.vector.centerOf(util.grid.at(3, 3, 2)), util.vector.of(0, -0.1, 0), stack); + scene.idle(20); + ElementLink remove = + scene.world.createItemEntity(util.vector.centerOf(util.grid.at(1, 5, 2)), util.vector.of(0, 0.1, 0), stack); + scene.idle(15); + scene.world.modifyEntity(remove, Entity::remove); + + scene.overlay.showText(60) + .attachKeyFrame() + .pointAt(util.vector.topOf(util.grid.at(1, 2, 2))) + .placeNearTarget() + .text("Chutes can transport items vertically from and to inventories"); + scene.idle(70); + scene.world.modifyEntities(ItemEntity.class, Entity::remove); + scene.world.moveSection(bottom, util.vector.of(1, 0, 0), 10); + scene.world.moveSection(top, util.vector.of(-1, 0, 0), 10); + scene.idle(20); + scene.overlay.showControls( + new InputWindowElement(util.vector.blockSurface(util.grid.at(2, 3, 2), Direction.NORTH), Pointing.RIGHT) + .rightClick() + .withWrench(), + 40); + scene.idle(7); + scene.world.modifyBlock(util.grid.at(3, 3, 3), s -> s.with(ChuteBlock.SHAPE, ChuteBlock.Shape.WINDOW), false); + scene.overlay.showText(50) + .attachKeyFrame() + .pointAt(util.vector.blockSurface(util.grid.at(2, 3, 2), Direction.WEST)) + .placeNearTarget() + .text("Using the Wrench, a window can be created"); + + scene.idle(10); + scene.world.modifyBlock(util.grid.at(3, 2, 3), s -> s.with(SHAPE, Shape.WINDOW), false); + + for (int i = 0; i < 8; i++) { + scene.idle(10); + scene.world.createItemOnBeltLike(util.grid.at(3, 3, 3), Direction.UP, stack); + } + scene.idle(20); + scene.world.hideIndependentSection(bottom, Direction.EAST); + scene.world.hideIndependentSection(top, Direction.EAST); + scene.idle(15); + + scene.rotateCameraY(-90); + scene.world.modifyBlock(util.grid.at(2, 2, 1), s -> s.with(SHAPE, Shape.NORMAL), false); + scene.world.showSection(util.select.fromTo(2, 1, 1, 2, 2, 1), Direction.DOWN); + scene.idle(30); + ItemStack chuteItem = AllBlocks.CHUTE.asStack(); + scene.overlay.showControls( + new InputWindowElement(util.vector.blockSurface(util.grid.at(2, 2, 1), Direction.SOUTH), Pointing.LEFT) + .rightClick() + .withItem(chuteItem), + 30); + scene.idle(7); + scene.world.showSection(util.select.position(2, 3, 2), Direction.NORTH); + scene.world.restoreBlocks(util.select.position(2, 2, 1)); + scene.idle(35); + scene.overlay.showControls( + new InputWindowElement(util.vector.blockSurface(util.grid.at(2, 3, 2), Direction.SOUTH), Pointing.LEFT) + .rightClick() + .withItem(chuteItem), + 30); + scene.idle(7); + scene.world.showSection(util.select.position(2, 4, 3), Direction.NORTH); + scene.idle(35); + + scene.overlay.showText(70) + .attachKeyFrame() + .pointAt(util.vector.blockSurface(util.grid.at(2, 4, 3), Direction.WEST)) + .placeNearTarget() + .text("Placing chutes targeting the side faces of another will make it diagonal"); + scene.idle(15); + scene.rotateCameraY(90); + + scene.idle(35); + + Direction offset = Direction.NORTH; + for (int i = 0; i < 3; i++) { + remove = scene.world.createItemEntity(util.vector.centerOf(util.grid.at(2, 6, 3) + .offset(offset)), util.vector.of(0, 0.1, 0) + .add(new Vec3d(offset.getDirectionVec()).scale(-.1)), + stack); + scene.idle(12); + scene.world.createItemOnBeltLike(util.grid.at(2, 4, 3), Direction.UP, stack); + scene.world.modifyEntity(remove, Entity::remove); + scene.idle(3); + offset = offset.rotateY(); + } + + scene.idle(10); + scene.overlay.showControls( + new InputWindowElement(util.vector.blockSurface(util.grid.at(2, 1, 1), Direction.NORTH), Pointing.RIGHT) + .withItem(stack), + 50); + } + + public static void upward(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("chute_upward", "Transporting Items upward via Chutes"); + scene.configureBasePlate(0, 0, 5); + scene.scaleSceneView(.9f); + scene.showBasePlate(); + Selection chute = util.select.fromTo(1, 2, 2, 1, 4, 2); + scene.world.setBlocks(chute, Blocks.AIR.getDefaultState(), false); + scene.world.showSection(util.select.position(1, 1, 2), Direction.UP); + scene.idle(20); + + scene.world.restoreBlocks(chute); + scene.world.showSection(chute, Direction.DOWN); + scene.idle(20); + scene.world.setKineticSpeed(util.select.position(1, 1, 2), 0); + Vec3d surface = util.vector.blockSurface(util.grid.at(1, 2, 2), Direction.WEST); + scene.overlay.showText(70) + .text("Using Encased Fans at the top or bottom, a Chute can move items upward") + .attachKeyFrame() + .pointAt(surface) + .placeNearTarget(); + scene.idle(80); + scene.overlay.showControls( + new InputWindowElement(util.vector.blockSurface(util.grid.at(1, 2, 2), Direction.NORTH), Pointing.RIGHT) + .withItem(AllItems.GOGGLES.asStack()), + 50); + scene.overlay.showText(70) + .text("Inspecting chutes with Engineers' Goggles reveals information about the movement direction") + .attachKeyFrame() + .pointAt(surface) + .placeNearTarget(); + scene.idle(80); + + scene.world.showSection(util.select.fromTo(2, 2, 2, 4, 1, 5) + .add(util.select.position(3, 0, 5)), Direction.DOWN); + ItemStack stack = AllBlocks.COPPER_BLOCK.asStack(); + scene.world.createItemOnBelt(util.grid.at(4, 1, 2), Direction.EAST, stack); + scene.idle(10); + scene.rotateCameraY(60); + scene.overlay.showText(70) + .text("On the 'blocked' end, items will have to be inserted/taken from the sides") + .attachKeyFrame() + .pointAt(util.vector.centerOf(util.grid.at(3, 1, 2)) + .add(0, 3 / 16f, 0)) + .placeNearTarget(); + scene.idle(32); + scene.world.flapFunnel(util.grid.at(2, 2, 2), false); + scene.world.removeItemsFromBelt(util.grid.at(2, 1, 2)); + scene.world.createItemOnBeltLike(util.grid.at(1, 2, 2), Direction.EAST, stack); + } + + public static void smart(SceneBuilder scene, SceneBuildingUtil util) { + scene.title("smart_chute", "Filtering Items using Smart Chutes"); + scene.configureBasePlate(0, 0, 5); + scene.scaleSceneView(.9f); + + Selection lever = util.select.fromTo(0, 1, 2, 1, 3, 2); + BlockPos smarty = util.grid.at(2, 3, 2); + + scene.world.showSection(util.select.layer(0), Direction.UP); + scene.idle(5); + scene.world.showSection(util.select.fromTo(2, 1, 2, 2, 2, 2), Direction.DOWN); + scene.idle(10); + scene.world.showSection(util.select.position(2, 3, 2), Direction.DOWN); + scene.idle(5); + scene.world.showSection(util.select.position(2, 4, 2), Direction.DOWN); + + scene.overlay.showText(60) + .text("Smart Chutes are vertical chutes with additional control") + .attachKeyFrame() + .pointAt(util.vector.blockSurface(smarty, Direction.WEST)) + .placeNearTarget(); + scene.idle(70); + + Vec3d filter = util.vector.blockSurface(smarty, Direction.NORTH) + .add(0, 0.25, 0); + scene.overlay.showFilterSlotInput(filter, 60); + ItemStack copper = new ItemStack(Items.IRON_INGOT); + scene.overlay.showControls(new InputWindowElement(filter, Pointing.DOWN).rightClick() + .withItem(copper), 40); + scene.idle(7); + scene.world.setFilterData(util.select.position(smarty), SmartChuteTileEntity.class, copper); + scene.idle(10); + scene.rotateCameraY(20); + scene.overlay.showText(60) + .text("Items in the filter slot specify what exactly they can extract and transfer") + .attachKeyFrame() + .pointAt(filter) + .placeNearTarget(); + scene.idle(10); + + for (int i = 0; i < 18; i++) { + scene.idle(10); + scene.world.createItemOnBeltLike(util.grid.at(2, 2, 2), Direction.UP, copper); + if (i == 8) { + scene.rotateCameraY(-20); + scene.overlay.showControls(new InputWindowElement(filter, Pointing.DOWN).scroll(), 40); + scene.overlay.showText(50) + .text("Use the Mouse Wheel to specify the extracted stack size") + .attachKeyFrame() + .pointAt(filter) + .placeNearTarget(); + } + if (i == 13) + scene.world.showSection(lever, Direction.NORTH); + } + + scene.world.toggleRedstonePower(lever.add(util.select.position(smarty))); + scene.effects.indicateRedstone(util.grid.at(0, 3, 2)); + scene.overlay.showText(50) + .text("Redstone power will prevent Smart Chutes from acting.") + .attachKeyFrame() + .colored(PonderPalette.RED) + .pointAt(util.vector.blockSurface(util.grid.at(0, 2, 2), Direction.UP)) + .placeNearTarget(); + scene.idle(70); + + scene.world.toggleRedstonePower(lever.add(util.select.position(smarty))); + scene.markAsFinished(); + for (int i = 0; i < 8; i++) { + scene.idle(10); + scene.world.createItemOnBeltLike(util.grid.at(2, 2, 2), Direction.UP, copper); + } + + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java index c8f9c6c44..38e243636 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/FunnelScenes.java @@ -332,7 +332,7 @@ public class FunnelScenes { scene.overlay.chaseBoundingBoxOutline(PonderPalette.RED, funnel, redstoneBB, 80); scene.overlay.showText(80) .colored(PonderPalette.RED) - .text("Redstone power will prevent any funnel from acting.") + .text("Redstone power will prevent any funnel from acting") .pointAt(util.vector.blockSurface(funnel, Direction.DOWN)); } else { scene.idle(4); 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 9ff2b9854..7d5877ff9 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 @@ -95,6 +95,14 @@ public class PonderIndex { PonderRegistry.addStoryBoard(AllItems.EMPTY_BLAZE_BURNER, "empty_blaze_burner", ProcessingScenes::emptyBlazeBurner); PonderRegistry.addStoryBoard(AllBlocks.BLAZE_BURNER, "blaze_burner", ProcessingScenes::blazeBurner); + PonderRegistry.addStoryBoard(AllBlocks.DEPOT, "depot", BeltScenes::depot); + + // Chutes + PonderRegistry.forComponents(AllBlocks.CHUTE) + .addStoryBoard("chute/downward", ChuteScenes::downward, PonderTag.LOGISTICS) + .addStoryBoard("chute/upward", ChuteScenes::upward); + PonderRegistry.forComponents(AllBlocks.CHUTE, AllBlocks.SMART_CHUTE) + .addStoryBoard("chute/smart", ChuteScenes::smart); // Funnels PonderRegistry.addStoryBoard(AllBlocks.BRASS_FUNNEL, "funnels/brass", FunnelScenes::brass); @@ -287,10 +295,10 @@ public class PonderIndex { .add(AllBlocks.MILLSTONE) .add(AllBlocks.DEPLOYER) .add(AllBlocks.MECHANICAL_SAW) - .add(Blocks.COMPOSTER) .add(AllBlocks.BLAZE_BURNER) - .add(Blocks.JUKEBOX) - .add(AllBlocks.CRUSHING_WHEEL); + .add(AllBlocks.CRUSHING_WHEEL) + .add(Blocks.COMPOSTER) + .add(Blocks.JUKEBOX); PonderRegistry.tags.forTag(PonderTag.LOGISTICS) .add(AllItems.BELT_CONNECTOR) diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java index 2ad235153..f14cb3394 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/PonderTagScreen.java @@ -7,6 +7,7 @@ import java.util.Objects; import org.apache.commons.lang3.mutable.MutableBoolean; import com.mojang.blaze3d.systems.RenderSystem; +import com.simibubi.create.Create; import com.simibubi.create.foundation.gui.ScreenOpener; import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.ponder.NavigatableSimiScreen; @@ -25,6 +26,7 @@ import net.minecraft.client.gui.widget.Widget; import net.minecraft.client.renderer.Rectangle2d; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; import net.minecraftforge.registries.ForgeRegistries; @@ -87,7 +89,12 @@ public class PonderTagScreen extends NavigatableSimiScreen { ScreenOpener.transitionTo(PonderUI.of(new ItemStack(i), tag)); }).showing(new ItemStack(i)); if (!canClick) - button.noClickEvent(); + if (i.getRegistryName() + .getNamespace() + .equals(Create.ID)) + button.customColors(0x70984500, 0x70692400); + else + button.customColors(0x505000FF, 0x50300077); button.fade(1); widgets.add(button); @@ -96,9 +103,10 @@ public class PonderTagScreen extends NavigatableSimiScreen { if (!tag.getMainItem() .isEmpty()) { - final boolean canClick = PonderRegistry.all.containsKey(tag.getMainItem() + ResourceLocation registryName = tag.getMainItem() .getItem() - .getRegistryName()); + .getRegistryName(); + final boolean canClick = PonderRegistry.all.containsKey(registryName); PonderButton button = new PonderButton(itemCenterX - layout.getTotalWidth() / 2 - 42, itemCenterY - 10, (mouseX, mouseY) -> { if (!canClick) @@ -107,7 +115,11 @@ public class PonderTagScreen extends NavigatableSimiScreen { ScreenOpener.transitionTo(PonderUI.of(tag.getMainItem(), tag)); }).showing(tag.getMainItem()); if (!canClick) - button.noClickEvent(); + if (registryName.getNamespace() + .equals(Create.ID)) + button.customColors(0x70984500, 0x70692400); + else + button.customColors(0x505000FF, 0x50300077); button.fade(1); widgets.add(button); @@ -202,7 +214,7 @@ public class PonderTagScreen extends NavigatableSimiScreen { RenderSystem.translated(0, 0, 100); FontHelper.drawSplitString(font, desc, x, y, w, 0xeeeeee); RenderSystem.popMatrix(); - + } protected void renderItems(int mouseX, int mouseY, float partialTicks) { @@ -301,7 +313,7 @@ public class PonderTagScreen extends NavigatableSimiScreen { return tag == ((PonderTagScreen) other).tag; return super.isEquivalentTo(other); } - + @Override public boolean isPauseScreen() { return true; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java index 354a8b363..7082ec1f4 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/content/ProcessingScenes.java @@ -618,14 +618,14 @@ public class ProcessingScenes { scene.idle(7); scene.world.setBlock(util.grid.at(3, 1, 2), AllBlocks.LIT_BLAZE_BURNER.getDefaultState(), true); scene.idle(10); - scene.overlay.showText(90) + scene.overlay.showText(70) .text("For Aesthetic purposes, Empty Blaze Burners can also be lit using Flint and Steel") .attachKeyFrame() .pointAt(util.vector.blockSurface(center.east() .up(), Direction.UP)) .placeNearTarget(); - scene.idle(70); - scene.overlay.showText(90) + scene.idle(80); + scene.overlay.showText(60) .colored(PonderPalette.RED) .text("However, these are not suitable for industrial heating") .pointAt(util.vector.blockSurface(center.east() diff --git a/src/main/java/com/simibubi/create/foundation/ponder/instructions/TileEntityDataInstruction.java b/src/main/java/com/simibubi/create/foundation/ponder/instructions/TileEntityDataInstruction.java index d484bae49..93f174f4d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/instructions/TileEntityDataInstruction.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/instructions/TileEntityDataInstruction.java @@ -35,9 +35,9 @@ public class TileEntityDataInstruction extends WorldModifyInstruction { if (!type.isInstance(tileEntity)) return; CompoundNBT apply = data.apply(tileEntity.write(new CompoundNBT())); - tileEntity.read(apply); if (tileEntity instanceof SyncedTileEntity) ((SyncedTileEntity) tileEntity).readClientUpdate(apply); + tileEntity.read(apply); }); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java b/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java index c60da8df9..46cce7309 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/ui/PonderButton.java @@ -8,6 +8,7 @@ import com.simibubi.create.foundation.gui.IScreenRenderable; import com.simibubi.create.foundation.gui.widgets.AbstractSimiWidget; import com.simibubi.create.foundation.ponder.PonderUI; import com.simibubi.create.foundation.utility.ColorHelper; +import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.animation.LerpedFloat; import net.minecraft.client.Minecraft; @@ -25,7 +26,7 @@ public class PonderButton extends AbstractSimiWidget { private float fade; private KeyBinding shortcut; private LerpedFloat flash; - private boolean noClickEvent; + private Couple customPassiveBorder; public static final int SIZE = 20; @@ -54,8 +55,8 @@ public class PonderButton extends AbstractSimiWidget { return this; } - public PonderButton noClickEvent() { - this.noClickEvent = true; + public PonderButton customColors(int start, int end) { + this.customPassiveBorder = Couple.create(start, end); return this; } @@ -103,10 +104,10 @@ public class PonderButton extends AbstractSimiWidget { fade *= 3 * flashValue + Math.sin((PonderUI.ponderTicks + partialTicks) / 6); int backgroundColor = ColorHelper.applyAlpha(0xdd000000, fade); - int borderColorStart = - ColorHelper.applyAlpha(noClickEvent ? 0x70984500 : isHovered ? 0x70ffffff : 0x40aa9999, fade); - int borderColorEnd = - ColorHelper.applyAlpha(noClickEvent ? 0x70692400 : isHovered ? 0x30ffffff : 0x20aa9999, fade); + int borderColorStart = customPassiveBorder != null ? customPassiveBorder.getFirst() : isHovered ? 0x70ffffff : 0x40aa9999; + int borderColorEnd = customPassiveBorder != null ? customPassiveBorder.getSecond() : isHovered ? 0x30ffffff : 0x20aa9999; + borderColorStart = ColorHelper.applyAlpha(borderColorStart, fade); + borderColorEnd = ColorHelper.applyAlpha(borderColorEnd, fade); PonderUI.renderBox(x, y, width, height, backgroundColor, borderColorStart, borderColorEnd); RenderSystem.translated(0, 0, 800); diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java index ed571d3a5..f7f0164e0 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/belt/DirectBeltInputBehaviour.java @@ -47,7 +47,7 @@ public class DirectBeltInputBehaviour extends TileEntityBehaviour { supportsBeltFunnels = pred; return this; } - + public DirectBeltInputBehaviour allowingBeltFunnels() { supportsBeltFunnels = () -> true; return this; @@ -97,20 +97,21 @@ public class DirectBeltInputBehaviour extends TileEntityBehaviour { public boolean test(Direction side); } + @Nullable public ItemStack tryExportingToBeltFunnel(ItemStack stack, @Nullable Direction side) { BlockPos funnelPos = tileEntity.getPos() .up(); World world = getWorld(); BlockState funnelState = world.getBlockState(funnelPos); if (!(funnelState.getBlock() instanceof BeltFunnelBlock)) - return stack; + return null; if (funnelState.get(BeltFunnelBlock.SHAPE) != Shape.PULLING) - return stack; + return null; if (side != null && FunnelBlock.getFunnelFacing(funnelState) != side) - return stack; + return null; TileEntity te = world.getTileEntity(funnelPos); if (!(te instanceof FunnelTileEntity)) - return stack; + return null; ItemStack insert = FunnelBlock.tryInsert(world, funnelPos, stack, false); if (insert.getCount() != stack.getCount()) ((FunnelTileEntity) te).flap(true); diff --git a/src/main/resources/ponder/chute/downward.nbt b/src/main/resources/ponder/chute/downward.nbt new file mode 100644 index 000000000..9ed648941 Binary files /dev/null and b/src/main/resources/ponder/chute/downward.nbt differ diff --git a/src/main/resources/ponder/chute/smart.nbt b/src/main/resources/ponder/chute/smart.nbt new file mode 100644 index 000000000..eb4f6dc6e Binary files /dev/null and b/src/main/resources/ponder/chute/smart.nbt differ diff --git a/src/main/resources/ponder/chute/upward.nbt b/src/main/resources/ponder/chute/upward.nbt new file mode 100644 index 000000000..d067f7490 Binary files /dev/null and b/src/main/resources/ponder/chute/upward.nbt differ diff --git a/src/main/resources/ponder/depot.nbt b/src/main/resources/ponder/depot.nbt new file mode 100644 index 000000000..cb1824d1b Binary files /dev/null and b/src/main/resources/ponder/depot.nbt differ