mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-01-19 09:27:53 +01:00
Merge branch 'mc1.15/dev' of https://github.com/Creators-of-Create/Create into mc1.15/dev
This commit is contained in:
commit
3b36526443
79 changed files with 3771 additions and 208 deletions
|
@ -402,19 +402,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
||||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||||
2b12f3cf99e498899207a8c4855210e7b5dc55cd assets/create/lang/en_ud.json
|
2b12f3cf99e498899207a8c4855210e7b5dc55cd assets/create/lang/en_ud.json
|
||||||
f7bdf2fb1af4cae8bca1735861d603cce0870985 assets/create/lang/en_us.json
|
e371fd4fccf90c4ee6f2fbea91ea5d70e3d6c652 assets/create/lang/en_us.json
|
||||||
f83d2acecd5ce6ebe8dfddffde3c5c3a68abd492 assets/create/lang/unfinished/de_de.json
|
610a33e7074c3fb8e88370bed76549bfcfe0eddb assets/create/lang/unfinished/de_de.json
|
||||||
35e50f9ba61af0ef900154213b0b25d1dc5469d3 assets/create/lang/unfinished/es_es.json
|
29339e0bf9743251639a2598d17f194cd406602c assets/create/lang/unfinished/es_es.json
|
||||||
98c26496201d8f12be5f6fc0ddaf919d9098f825 assets/create/lang/unfinished/es_mx.json
|
e7138596de0babd4fc90a4b8ffb8fdea13088086 assets/create/lang/unfinished/es_mx.json
|
||||||
161ac9821b2445c96c6d594885c2d32cd784e8c5 assets/create/lang/unfinished/fr_fr.json
|
a95f57787534ae5d4920fe8e4825fe3012fdcd70 assets/create/lang/unfinished/fr_fr.json
|
||||||
0c1baeb251ff32329a8d34a7200101de2cb724c4 assets/create/lang/unfinished/it_it.json
|
7956b67df2d19a9f890f893c9d736516cc6e8629 assets/create/lang/unfinished/it_it.json
|
||||||
b0ccadbcc765e7ddee1089b3ca65414f5aa1ad95 assets/create/lang/unfinished/ja_jp.json
|
95394f8cc9d53397e030c46a9abef4fa4348e2ad assets/create/lang/unfinished/ja_jp.json
|
||||||
9551b6b6df919ff7e2b7e14361e8061b65cd4857 assets/create/lang/unfinished/ko_kr.json
|
edcd5ffe8239f13cedbd63ab11c8334a38b90c90 assets/create/lang/unfinished/ko_kr.json
|
||||||
552b3ef71a2898d7e263035ade5b47fb0bcfec23 assets/create/lang/unfinished/nl_nl.json
|
1749d2d020f02a2ccca4698d85bfdc4dcf849e3f assets/create/lang/unfinished/nl_nl.json
|
||||||
1661f76a0ba088209fcd837a8a1676dbed186368 assets/create/lang/unfinished/pt_br.json
|
83c43209c295b3d3d85f7bebaa9a8ce7b79d47da assets/create/lang/unfinished/pt_br.json
|
||||||
621af99986c9e334d224f9a356c25d7468a1ef47 assets/create/lang/unfinished/ru_ru.json
|
a1a67295a2fe537080254fc8b353699d4d30989a assets/create/lang/unfinished/ru_ru.json
|
||||||
6340ad62aedc1fec27abb6b490c36b1fd1317214 assets/create/lang/unfinished/zh_cn.json
|
a525852b4f3aa0af52816e02e5cf4181de0c60c5 assets/create/lang/unfinished/zh_cn.json
|
||||||
56a1fedad3d453a36c456085c836fcfbf9740b1d assets/create/lang/unfinished/zh_tw.json
|
51242fa9de9994103e9373e5c8dd6941438ec9a8 assets/create/lang/unfinished/zh_tw.json
|
||||||
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
||||||
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
|
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
|
||||||
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
|
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||||
|
|
|
@ -1907,6 +1907,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1947,6 +1967,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1965,6 +2016,11 @@
|
||||||
"create.ponder.fan_source.text_1": "Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "Funnel compatibility",
|
"create.ponder.funnel_compat.header": "Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "Vertical Saws",
|
||||||
|
@ -1989,6 +2045,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "Gantry setups can move attached Blocks.",
|
||||||
|
@ -2059,6 +2120,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2068,6 +2133,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2134,9 +2205,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2151,6 +2222,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1302",
|
"_": "Missing Localizations: 1370",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 333",
|
"_": "Missing Localizations: 401",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1232",
|
"_": "Missing Localizations: 1300",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1014",
|
"_": "Missing Localizations: 1082",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 350",
|
"_": "Missing Localizations: 418",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 357",
|
"_": "Missing Localizations: 425",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 403",
|
"_": "Missing Localizations: 471",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1501",
|
"_": "Missing Localizations: 1569",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1567",
|
"_": "Missing Localizations: 1635",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 353",
|
"_": "Missing Localizations: 421",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 351",
|
"_": "Missing Localizations: 419",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 356",
|
"_": "Missing Localizations: 424",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1908,6 +1908,26 @@
|
||||||
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
"create.ponder.brass_funnel.text_3": "UNLOCALIZED: Scrolling on the filter slot allows for precise control over the extracted stack size.",
|
||||||
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
"create.ponder.brass_funnel.text_4": "UNLOCALIZED: Using items on the filter slot will restrict the funnel to only transfer matching stacks.",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler.header": "UNLOCALIZED: Moving Structures using Cart Assemblers",
|
||||||
|
"create.ponder.cart_assembler.text_1": "UNLOCALIZED: Powered Cart Assemblers mount attached structures to passing Minecarts",
|
||||||
|
"create.ponder.cart_assembler.text_2": "UNLOCALIZED: Without a redstone signal, it disassembles passing cart contraptions back into blocks",
|
||||||
|
"create.ponder.cart_assembler.text_3": "UNLOCALIZED: Using a Wrench on the Minecart will let you carry the Contraption elsewhere",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_dual.header": "UNLOCALIZED: Assembling Carriage Contraptions",
|
||||||
|
"create.ponder.cart_assembler_dual.text_1": "UNLOCALIZED: Whenever two Cart Assembers share an attached structure...",
|
||||||
|
"create.ponder.cart_assembler_dual.text_2": "UNLOCALIZED: Powering either of them will create a Carriage Contraption",
|
||||||
|
"create.ponder.cart_assembler_dual.text_3": "UNLOCALIZED: The carts will behave like those connected via Minecart Coupling",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_modes.header": "UNLOCALIZED: Orientation Settings for Minecart Contraptions",
|
||||||
|
"create.ponder.cart_assembler_modes.text_1": "UNLOCALIZED: Cart Contraptions will rotate to face towards their carts' motion",
|
||||||
|
"create.ponder.cart_assembler_modes.text_2": "UNLOCALIZED: If the Assembler is set to Lock Rotation, the contraptions' orientation will never change",
|
||||||
|
|
||||||
|
"create.ponder.cart_assembler_rails.header": "UNLOCALIZED: Other types of Minecarts and Rails",
|
||||||
|
"create.ponder.cart_assembler_rails.text_1": "UNLOCALIZED: Cart Assemblers on Regular Tracks will not affect the passing carts' motion",
|
||||||
|
"create.ponder.cart_assembler_rails.text_2": "UNLOCALIZED: When on Powered or Controller Rail, the carts will be held in place until it's Powered",
|
||||||
|
"create.ponder.cart_assembler_rails.text_3": "UNLOCALIZED: Other types of Minecarts can be used as the anchor",
|
||||||
|
"create.ponder.cart_assembler_rails.text_4": "UNLOCALIZED: Furnace Carts will keep themselves powered, pulling fuel from any attached inventories",
|
||||||
|
|
||||||
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
"create.ponder.chain_drive.header": "UNLOCALIZED: Relaying rotational force with Chain Drives",
|
||||||
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
"create.ponder.chain_drive.text_1": "UNLOCALIZED: Chain Drives relay rotation to each other in a row",
|
||||||
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
"create.ponder.chain_drive.text_2": "UNLOCALIZED: All shafts connected like this will rotate in the same direction",
|
||||||
|
@ -1948,6 +1968,37 @@
|
||||||
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
"create.ponder.creative_motor.text_1": "UNLOCALIZED: Creative motors are a compact and configurable source of Rotational Force",
|
||||||
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
"create.ponder.creative_motor.text_2": "UNLOCALIZED: Scrolling on the back panel changes the RPM of the motors' rotational output",
|
||||||
|
|
||||||
|
"create.ponder.deployer.header": "UNLOCALIZED: Using the Deployer",
|
||||||
|
"create.ponder.deployer.text_1": "UNLOCALIZED: Given Rotational Force, a Deployer can imitate player interactions",
|
||||||
|
"create.ponder.deployer.text_10": "UNLOCALIZED: Right-click the front to give it an Item to use",
|
||||||
|
"create.ponder.deployer.text_11": "UNLOCALIZED: Items can also be inserted automatically",
|
||||||
|
"create.ponder.deployer.text_12": "UNLOCALIZED: Deployers carry a filter slot",
|
||||||
|
"create.ponder.deployer.text_13": "UNLOCALIZED: When a filter is set, it activates only while holding a matching item",
|
||||||
|
"create.ponder.deployer.text_14": "UNLOCALIZED: Only items matching the filter can now be inserted...",
|
||||||
|
"create.ponder.deployer.text_15": "UNLOCALIZED: ...and only non-matching items will be extracted",
|
||||||
|
"create.ponder.deployer.text_2": "UNLOCALIZED: It will always interact with the position 2 blocks in front of itself",
|
||||||
|
"create.ponder.deployer.text_3": "UNLOCALIZED: Blocks directly in front will not obstruct it",
|
||||||
|
"create.ponder.deployer.text_4": "UNLOCALIZED: Deployers can:",
|
||||||
|
"create.ponder.deployer.text_5": "UNLOCALIZED: Place Blocks,",
|
||||||
|
"create.ponder.deployer.text_6": "UNLOCALIZED: Use Items,",
|
||||||
|
"create.ponder.deployer.text_7": "UNLOCALIZED: Activate Blocks,",
|
||||||
|
"create.ponder.deployer.text_8": "UNLOCALIZED: Harvest blocks",
|
||||||
|
"create.ponder.deployer.text_9": "UNLOCALIZED: and Attack Mobs",
|
||||||
|
|
||||||
|
"create.ponder.deployer_contraption.header": "UNLOCALIZED: Using Deployers on Contraptions",
|
||||||
|
"create.ponder.deployer_contraption.text_1": "UNLOCALIZED: Whenever Deployers are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.deployer_contraption.text_2": "UNLOCALIZED: They activate at each visited location, using items from inventories anywhere on the contraption",
|
||||||
|
"create.ponder.deployer_contraption.text_3": "UNLOCALIZED: The Filter slot can be used to specify which items to pull",
|
||||||
|
|
||||||
|
"create.ponder.deployer_modes.header": "UNLOCALIZED: Modes of the Deployer",
|
||||||
|
"create.ponder.deployer_modes.text_1": "UNLOCALIZED: By default, a Deployer imitates a Right-click interaction",
|
||||||
|
"create.ponder.deployer_modes.text_2": "UNLOCALIZED: Using a Wrench, it can be set to imitate a Left-click instead",
|
||||||
|
|
||||||
|
"create.ponder.deployer_redstone.header": "UNLOCALIZED: Controlling Deployers with Redstone",
|
||||||
|
"create.ponder.deployer_redstone.text_1": "UNLOCALIZED: When powered by Redstone, Deployers will not activate",
|
||||||
|
"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.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
"create.ponder.fan_direction.header": "UNLOCALIZED: Air flow of Encased Fans",
|
||||||
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
"create.ponder.fan_direction.text_1": "UNLOCALIZED: Encased Fans use Rotational Force to create an Air Current",
|
||||||
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
"create.ponder.fan_direction.text_2": "UNLOCALIZED: Strength and Direction of Flow depends on the Rotational Input",
|
||||||
|
@ -1966,6 +2017,11 @@
|
||||||
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
"create.ponder.fan_source.text_1": "UNLOCALIZED: Fans facing down into a source of heat can provide Rotational Force",
|
||||||
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
"create.ponder.fan_source.text_2": "UNLOCALIZED: When given a Redstone Signal, the Fans will start providing power",
|
||||||
|
|
||||||
|
"create.ponder.flywheel.header": "UNLOCALIZED: Generating Rotational Force using the Flywheel",
|
||||||
|
"create.ponder.flywheel.text_1": "UNLOCALIZED: Flywheels are required for generating rotational force with the Furnace Engine",
|
||||||
|
"create.ponder.flywheel.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.flywheel.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
"create.ponder.funnel_compat.header": "UNLOCALIZED: Funnel compatibility",
|
||||||
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
"create.ponder.funnel_compat.text_1": "UNLOCALIZED: Funnels should also interact nicely with a handful of other components.",
|
||||||
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
"create.ponder.funnel_compat.text_2": "UNLOCALIZED: Vertical Saws",
|
||||||
|
@ -1990,6 +2046,11 @@
|
||||||
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
"create.ponder.funnel_transfer.text_2": "UNLOCALIZED: Chutes or Smart chutes might be more suitable for such purposes.",
|
||||||
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
"create.ponder.funnel_transfer.text_3": "UNLOCALIZED: Same applies for horizontal movement.\nA mechanical belt should help here.",
|
||||||
|
|
||||||
|
"create.ponder.furnace_engine.header": "UNLOCALIZED: Generating Rotational Force using the Furnace Engine",
|
||||||
|
"create.ponder.furnace_engine.text_1": "UNLOCALIZED: Furnace Engines generate Rotational Force while their attached Furnace is running",
|
||||||
|
"create.ponder.furnace_engine.text_2": "UNLOCALIZED: The provided Rotational Force has a very large stress capacity",
|
||||||
|
"create.ponder.furnace_engine.text_3": "UNLOCALIZED: Using a Blast Furnace will double the efficiency of the Engine",
|
||||||
|
|
||||||
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
"create.ponder.gantry_carriage.header": "UNLOCALIZED: Using Gantry Carriages",
|
||||||
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
"create.ponder.gantry_carriage.text_1": "UNLOCALIZED: Gantry Carriages can mount to and slide along a Gantry Shaft.",
|
||||||
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
"create.ponder.gantry_carriage.text_2": "UNLOCALIZED: Gantry setups can move attached Blocks.",
|
||||||
|
@ -2060,6 +2121,10 @@
|
||||||
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
"create.ponder.mechanical_drill_contraption.text_1": "UNLOCALIZED: Whenever Drills are moved as part of an animated Contraption...",
|
||||||
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
"create.ponder.mechanical_drill_contraption.text_2": "UNLOCALIZED: ...they will break blocks the contraption runs them into",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_harvester.header": "UNLOCALIZED: Using Mechanical Harvesters on Contraptions",
|
||||||
|
"create.ponder.mechanical_harvester.text_1": "UNLOCALIZED: Whenever Harvesters are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_harvester.text_2": "UNLOCALIZED: They will harvest and reset any mature crops on their way",
|
||||||
|
|
||||||
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
"create.ponder.mechanical_piston.header": "UNLOCALIZED: Moving Structures using Mechanical Pistons",
|
||||||
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
"create.ponder.mechanical_piston.text_1": "UNLOCALIZED: Mechanical Pistons can move blocks in front of them",
|
||||||
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
"create.ponder.mechanical_piston.text_2": "UNLOCALIZED: Speed and direction of movement depend on the Rotational Input",
|
||||||
|
@ -2069,6 +2134,12 @@
|
||||||
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
"create.ponder.mechanical_piston_modes.text_1": "UNLOCALIZED: Whenever Pistons stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.mechanical_piston_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.mechanical_plough.header": "UNLOCALIZED: Using Mechanical Ploughs on Contraptions",
|
||||||
|
"create.ponder.mechanical_plough.text_1": "UNLOCALIZED: Whenever Ploughs are moved as part of an animated Contraption...",
|
||||||
|
"create.ponder.mechanical_plough.text_2": "UNLOCALIZED: ...they will break blocks without a solid collision hitbox",
|
||||||
|
"create.ponder.mechanical_plough.text_3": "UNLOCALIZED: Additionally, ploughs can create farmland",
|
||||||
|
"create.ponder.mechanical_plough.text_4": "UNLOCALIZED: ...they can also launch entities without hurting them",
|
||||||
|
|
||||||
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
"create.ponder.mechanical_saw_breaker.header": "UNLOCALIZED: Cutting Trees with the Mechanical Saw",
|
||||||
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
"create.ponder.mechanical_saw_breaker.text_1": "UNLOCALIZED: When given Rotational Force, a Mechanical Saw will cut trees directly in front of it",
|
||||||
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
"create.ponder.mechanical_saw_breaker.text_2": "UNLOCALIZED: In order to cut the tree fully, the Saw has to break the last block connecting it to the ground",
|
||||||
|
@ -2135,9 +2206,9 @@
|
||||||
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
"create.ponder.redstone_link.text_1": "UNLOCALIZED: Redstone Links can transmit redstone signals wirelessly",
|
||||||
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
"create.ponder.redstone_link.text_2": "UNLOCALIZED: Right-click while Sneaking to toggle receive mode",
|
||||||
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
"create.ponder.redstone_link.text_3": "UNLOCALIZED: A simple Right-click with a Wrench can do the same",
|
||||||
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers will emit the redstone power of transmitters within a range of 128 blocks",
|
"create.ponder.redstone_link.text_4": "UNLOCALIZED: Receivers emit the redstone power of transmitters within 128 blocks",
|
||||||
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
"create.ponder.redstone_link.text_5": "UNLOCALIZED: Placing items in the two slots can specify a Frequency",
|
||||||
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequency combinations will communicate",
|
"create.ponder.redstone_link.text_6": "UNLOCALIZED: Only the links with matching Frequencies will communicate",
|
||||||
|
|
||||||
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
"create.ponder.rope_pulley.header": "UNLOCALIZED: Moving Structures using Rope Pulleys",
|
||||||
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
"create.ponder.rope_pulley.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||||
|
@ -2152,6 +2223,17 @@
|
||||||
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
"create.ponder.rope_pulley_modes.text_1": "UNLOCALIZED: Whenever Pulleys stop moving, the moved structure reverts to blocks",
|
||||||
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
"create.ponder.rope_pulley_modes.text_2": "UNLOCALIZED: It can be configured never to revert to solid blocks, or only at the location it started at",
|
||||||
|
|
||||||
|
"create.ponder.rotation_speed_controller.header": "UNLOCALIZED: Using the Rotational Speed Controller",
|
||||||
|
"create.ponder.rotation_speed_controller.text_1": "UNLOCALIZED: Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them",
|
||||||
|
"create.ponder.rotation_speed_controller.text_2": "UNLOCALIZED: Using the scroll input on its side, the conveyed speed can be configured",
|
||||||
|
|
||||||
|
"create.ponder.sequenced_gearshift.header": "UNLOCALIZED: Controlling Rotational Speed using Sequenced Gearshifts",
|
||||||
|
"create.ponder.sequenced_gearshift.text_1": "UNLOCALIZED: Seq. Gearshifts relay rotation by following a timed list of instructions",
|
||||||
|
"create.ponder.sequenced_gearshift.text_2": "UNLOCALIZED: Right-click it to open the Configuration UI",
|
||||||
|
"create.ponder.sequenced_gearshift.text_3": "UNLOCALIZED: Upon receiving a Redstone Signal, it will start running its configured sequence",
|
||||||
|
"create.ponder.sequenced_gearshift.text_4": "UNLOCALIZED: Once finished, it waits for the next Redstone Signal and starts over",
|
||||||
|
"create.ponder.sequenced_gearshift.text_5": "UNLOCALIZED: A redstone comparator can be used to read the current progress",
|
||||||
|
|
||||||
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
"create.ponder.shaft.header": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||||
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
"create.ponder.shaft.text_1": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import com.simibubi.create.content.contraptions.components.crank.HandCrankRender
|
||||||
import com.simibubi.create.content.contraptions.components.crank.HandCrankTileEntity;
|
import com.simibubi.create.content.contraptions.components.crank.HandCrankTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerTileEntity;
|
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelControllerTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelTileEntity;
|
import com.simibubi.create.content.contraptions.components.crusher.CrushingWheelTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerInstance;
|
||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerRenderer;
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity;
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.fan.EncasedFanRenderer;
|
import com.simibubi.create.content.contraptions.components.fan.EncasedFanRenderer;
|
||||||
|
@ -476,7 +477,7 @@ public class AllTileEntities {
|
||||||
|
|
||||||
public static final TileEntityEntry<DeployerTileEntity> DEPLOYER = Create.registrate()
|
public static final TileEntityEntry<DeployerTileEntity> DEPLOYER = Create.registrate()
|
||||||
.tileEntity("deployer", DeployerTileEntity::new)
|
.tileEntity("deployer", DeployerTileEntity::new)
|
||||||
.instance(() -> ShaftInstance::new)
|
.instance(() -> DeployerInstance::new)
|
||||||
.validBlocks(AllBlocks.DEPLOYER)
|
.validBlocks(AllBlocks.DEPLOYER)
|
||||||
.renderer(() -> DeployerRenderer::new)
|
.renderer(() -> DeployerRenderer::new)
|
||||||
.register();
|
.register();
|
||||||
|
|
|
@ -12,6 +12,7 @@ public enum ActorVertexAttributes implements IVertexAttrib {
|
||||||
AXIS("aAxis", CommonAttributes.NORMAL),
|
AXIS("aAxis", CommonAttributes.NORMAL),
|
||||||
INSTANCE_ROTATION("aInstanceRot", CommonAttributes.VEC3),
|
INSTANCE_ROTATION("aInstanceRot", CommonAttributes.VEC3),
|
||||||
ROTATION_CENTER("aRotationCenter", CommonAttributes.NORMAL),
|
ROTATION_CENTER("aRotationCenter", CommonAttributes.NORMAL),
|
||||||
|
SPEED("aSpeed", CommonAttributes.FLOAT),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
|
|
@ -30,6 +30,8 @@ public class ContraptionActorData extends InstanceData {
|
||||||
private byte rotationCenterY = 64;
|
private byte rotationCenterY = 64;
|
||||||
private byte rotationCenterZ = 64;
|
private byte rotationCenterZ = 64;
|
||||||
|
|
||||||
|
private float speed;
|
||||||
|
|
||||||
protected ContraptionActorData(InstancedModel<?> owner) {
|
protected ContraptionActorData(InstancedModel<?> owner) {
|
||||||
super(owner);
|
super(owner);
|
||||||
}
|
}
|
||||||
|
@ -57,6 +59,11 @@ public class ContraptionActorData extends InstanceData {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ContraptionActorData setSpeed(float speed) {
|
||||||
|
this.speed = speed;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public ContraptionActorData setRotationAxis(Vector3f axis) {
|
public ContraptionActorData setRotationAxis(Vector3f axis) {
|
||||||
setRotationAxis(axis.getX(), axis.getY(), axis.getZ());
|
setRotationAxis(axis.getX(), axis.getY(), axis.getZ());
|
||||||
return this;
|
return this;
|
||||||
|
@ -101,6 +108,7 @@ public class ContraptionActorData extends InstanceData {
|
||||||
putVec3(buf, rotationAxisX, rotationAxisY, rotationAxisZ);
|
putVec3(buf, rotationAxisX, rotationAxisY, rotationAxisZ);
|
||||||
putVec3(buf, localRotationX, localRotationY, localRotationZ);
|
putVec3(buf, localRotationX, localRotationY, localRotationZ);
|
||||||
putVec3(buf, rotationCenterX, rotationCenterY, rotationCenterZ);
|
putVec3(buf, rotationCenterX, rotationCenterY, rotationCenterZ);
|
||||||
|
put(buf, speed);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.actors;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
|
||||||
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
|
||||||
|
public class DrillActorInstance extends ActorInstance {
|
||||||
|
|
||||||
|
InstanceKey<ContraptionActorData> drillHead;
|
||||||
|
private Direction facing;
|
||||||
|
|
||||||
|
public DrillActorInstance(ContraptionKineticRenderer modelManager, MovementContext context) {
|
||||||
|
super(modelManager, context);
|
||||||
|
|
||||||
|
RenderMaterial<?, InstancedModel<ContraptionActorData>> renderMaterial = modelManager.getActorMaterial();
|
||||||
|
|
||||||
|
BlockState state = context.state;
|
||||||
|
|
||||||
|
facing = state.get(DrillBlock.FACING);
|
||||||
|
float eulerX = AngleHelper.verticalAngle(facing) + ((facing.getAxis() == Direction.Axis.Y) ? 180 : 0);
|
||||||
|
float eulerY = facing.getHorizontalAngle();
|
||||||
|
|
||||||
|
drillHead = renderMaterial.getModel(AllBlockPartials.DRILL_HEAD, state).createInstance();
|
||||||
|
|
||||||
|
drillHead.getInstance()
|
||||||
|
.setPosition(context.localPos)
|
||||||
|
.setBlockLight(localBlockLight())
|
||||||
|
.setRotationOffset(0)
|
||||||
|
.setRotationAxis(0, 0, 1)
|
||||||
|
.setLocalRotation(eulerX, eulerY, 0)
|
||||||
|
.setSpeed(getSpeed(facing));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void tick() {
|
||||||
|
drillHead.getInstance().setSpeed(getSpeed(facing));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected float getSpeed(Direction facing) {
|
||||||
|
if (context.contraption.stalled || !VecHelper.isVecPointingTowards(context.relativeMotion, facing.getOpposite()))
|
||||||
|
return context.getAnimationSpeed();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,23 +22,6 @@ public class DrillInstance extends SingleRotatingInstance {
|
||||||
super(modelManager, tile);
|
super(modelManager, tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addInstanceForContraption(RenderedContraption contraption, MovementContext context) {
|
|
||||||
RenderMaterial<?, InstancedModel<ContraptionActorData>> renderMaterial = contraption.getActorMaterial();
|
|
||||||
|
|
||||||
BlockState state = context.state;
|
|
||||||
InstancedModel<ContraptionActorData> model = renderMaterial.getModel(AllBlockPartials.DRILL_HEAD, state);
|
|
||||||
|
|
||||||
Direction facing = state.get(DrillBlock.FACING);
|
|
||||||
float eulerX = AngleHelper.verticalAngle(facing) + ((facing.getAxis() == Direction.Axis.Y) ? 180 : 0);
|
|
||||||
float eulerY = facing.getHorizontalAngle();
|
|
||||||
model.getInstance(model.createInstance())
|
|
||||||
.setPosition(context.localPos)
|
|
||||||
.setBlockLight(contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos))
|
|
||||||
.setRotationOffset(0)
|
|
||||||
.setRotationAxis(0, 0, 1)
|
|
||||||
.setLocalRotation(eulerX, eulerY, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected InstancedModel<RotatingData> getModel() {
|
protected InstancedModel<RotatingData> getModel() {
|
||||||
return AllBlockPartials.DRILL_HEAD.renderOnDirectionalSouthRotating(modelManager, tile.getBlockState());
|
return AllBlockPartials.DRILL_HEAD.renderOnDirectionalSouthRotating(modelManager, tile.getBlockState());
|
||||||
|
|
|
@ -2,6 +2,8 @@ package com.simibubi.create.content.contraptions.components.actors;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.RenderedContraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.RenderedContraption;
|
||||||
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
|
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
@ -15,6 +17,8 @@ import net.minecraft.world.World;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour {
|
public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -42,9 +46,10 @@ public class DrillMovementBehaviour extends BlockBreakingMovementBehaviour {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public void addInstance(RenderedContraption contraption, MovementContext context) {
|
public ActorInstance createInstance(ContraptionKineticRenderer kr, MovementContext context) {
|
||||||
DrillInstance.addInstanceForContraption(contraption, context);
|
return new DrillActorInstance(kr, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class DrillRenderer extends KineticTileEntityRenderer {
|
||||||
Direction facing = state.get(DrillBlock.FACING);
|
Direction facing = state.get(DrillBlock.FACING);
|
||||||
|
|
||||||
float speed = (float) (context.contraption.stalled
|
float speed = (float) (context.contraption.stalled
|
||||||
|| !VecHelper.isVecPointingTowards(context.relativeMotion, state.get(FACING)
|
|| !VecHelper.isVecPointingTowards(context.relativeMotion, facing
|
||||||
.getOpposite()) ? context.getAnimationSpeed() : 0);
|
.getOpposite()) ? context.getAnimationSpeed() : 0);
|
||||||
float time = AnimationTickHolder.getRenderTime() / 20;
|
float time = AnimationTickHolder.getRenderTime() / 20;
|
||||||
float angle = (float) (((time * speed) % 360));
|
float angle = (float) (((time * speed) % 360));
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.actors;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.client.renderer.Vector3f;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.world.LightType;
|
||||||
|
|
||||||
|
import static net.minecraft.state.properties.BlockStateProperties.HORIZONTAL_FACING;
|
||||||
|
|
||||||
|
public class HarvesterActorInstance extends ActorInstance {
|
||||||
|
|
||||||
|
InstanceKey<ContraptionActorData> harvester;
|
||||||
|
private Direction facing;
|
||||||
|
|
||||||
|
public HarvesterActorInstance(ContraptionKineticRenderer modelManager, MovementContext context) {
|
||||||
|
super(modelManager, context);
|
||||||
|
|
||||||
|
RenderMaterial<?, InstancedModel<ContraptionActorData>> renderMaterial = modelManager.getActorMaterial();
|
||||||
|
|
||||||
|
BlockState state = context.state;
|
||||||
|
|
||||||
|
facing = state.get(HORIZONTAL_FACING);
|
||||||
|
float originOffset = 1 / 16f;
|
||||||
|
Vector3f rotOffset = new Vector3f(0.5f, -2 * originOffset + 0.5f, originOffset + 0.5f);
|
||||||
|
|
||||||
|
harvester = renderMaterial.getModel(AllBlockPartials.HARVESTER_BLADE, state).createInstance();
|
||||||
|
|
||||||
|
harvester.getInstance()
|
||||||
|
.setPosition(context.localPos)
|
||||||
|
.setBlockLight(localBlockLight())
|
||||||
|
.setRotationOffset(0)
|
||||||
|
.setRotationCenter(rotOffset)
|
||||||
|
.setRotationAxis(-1, 0, 0)
|
||||||
|
.setLocalRotation(0, facing.getHorizontalAngle(), 0)
|
||||||
|
.setSpeed(getSpeed(facing));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void tick() {
|
||||||
|
harvester.getInstance().setSpeed(getSpeed(facing));
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,8 @@ package com.simibubi.create.content.contraptions.components.actors;
|
||||||
|
|
||||||
import static net.minecraft.block.HorizontalBlock.HORIZONTAL_FACING;
|
import static net.minecraft.block.HorizontalBlock.HORIZONTAL_FACING;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
|
||||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
@ -29,6 +31,8 @@ import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.IPlantable;
|
import net.minecraftforge.common.IPlantable;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class HarvesterMovementBehaviour extends MovementBehaviour {
|
public class HarvesterMovementBehaviour extends MovementBehaviour {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -42,9 +46,10 @@ public class HarvesterMovementBehaviour extends MovementBehaviour {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public void addInstance(RenderedContraption contraption, MovementContext context) {
|
public ActorInstance createInstance(ContraptionKineticRenderer kr, MovementContext context) {
|
||||||
HarvesterRenderer.addInstanceForContraption(contraption, context);
|
return new HarvesterActorInstance(kr, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -43,24 +43,6 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
|
||||||
.renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped()));
|
.renderInto(ms, buffer.getBuffer(RenderType.getCutoutMipped()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addInstanceForContraption(RenderedContraption contraption, MovementContext context) {
|
|
||||||
RenderMaterial<?, InstancedModel<ContraptionActorData>> renderMaterial = contraption.getActorMaterial();
|
|
||||||
|
|
||||||
BlockState state = context.state;
|
|
||||||
InstancedModel<ContraptionActorData> model = renderMaterial.getModel(AllBlockPartials.HARVESTER_BLADE, state);
|
|
||||||
|
|
||||||
Direction facing = state.get(HORIZONTAL_FACING);
|
|
||||||
float originOffset = 1 / 16f;
|
|
||||||
Vector3f rotOffset = new Vector3f(0.5f, -2 * originOffset + 0.5f, originOffset + 0.5f);
|
|
||||||
model.getInstance(model.createInstance())
|
|
||||||
.setPosition(context.localPos)
|
|
||||||
.setBlockLight(contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos))
|
|
||||||
.setRotationOffset(0)
|
|
||||||
.setRotationCenter(rotOffset)
|
|
||||||
.setRotationAxis(-1, 0, 0)
|
|
||||||
.setLocalRotation(0, facing.getHorizontalAngle(), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
|
public static void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
|
||||||
IRenderTypeBuffer buffers) {
|
IRenderTypeBuffer buffers) {
|
||||||
BlockState blockState = context.state;
|
BlockState blockState = context.state;
|
||||||
|
@ -90,7 +72,4 @@ public class HarvesterRenderer extends SafeTileEntityRenderer<HarvesterTileEntit
|
||||||
.rotate(Direction.WEST, AngleHelper.rad(angle))
|
.rotate(Direction.WEST, AngleHelper.rad(angle))
|
||||||
.translate(-rotOffset.x, -rotOffset.y, -rotOffset.z);
|
.translate(-rotOffset.x, -rotOffset.y, -rotOffset.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void transformHead(MatrixStack ms, float angle) {}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.block.FarmlandBlock;
|
import net.minecraft.block.FarmlandBlock;
|
||||||
import net.minecraft.block.FlowingFluidBlock;
|
import net.minecraft.block.FlowingFluidBlock;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -22,6 +23,9 @@ import net.minecraft.util.math.RayTraceResult.Type;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
|
import net.minecraft.world.storage.loot.LootContext;
|
||||||
|
import net.minecraft.world.storage.loot.LootParameter;
|
||||||
|
import net.minecraft.world.storage.loot.LootParameters;
|
||||||
|
|
||||||
public class PloughMovementBehaviour extends BlockBreakingMovementBehaviour {
|
public class PloughMovementBehaviour extends BlockBreakingMovementBehaviour {
|
||||||
|
|
||||||
|
@ -75,6 +79,20 @@ public class PloughMovementBehaviour extends BlockBreakingMovementBehaviour {
|
||||||
.getBlock() instanceof FarmlandBlock);
|
.getBlock() instanceof FarmlandBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onBlockBroken(MovementContext context, BlockPos pos, BlockState brokenState) {
|
||||||
|
super.onBlockBroken(context, pos, brokenState);
|
||||||
|
|
||||||
|
if (brokenState.getBlock() == Blocks.SNOW && context.world instanceof ServerWorld) {
|
||||||
|
ServerWorld world = (ServerWorld) context.world;
|
||||||
|
brokenState.getDrops(new LootContext.Builder(world).withParameter(LootParameters.BLOCK_STATE, brokenState)
|
||||||
|
.withParameter(LootParameters.POSITION, pos)
|
||||||
|
.withParameter(LootParameters.THIS_ENTITY, getPlayer(context))
|
||||||
|
.withParameter(LootParameters.TOOL, new ItemStack(Items.IRON_SHOVEL)))
|
||||||
|
.forEach(s -> dropItem(context, s));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stopMoving(MovementContext context) {
|
public void stopMoving(MovementContext context) {
|
||||||
super.stopMoving(context);
|
super.stopMoving(context);
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.deployer;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.base.*;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionProgram;
|
||||||
|
import com.simibubi.create.foundation.render.Compartment;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstanceKey;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.InstancedModel;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
|
import com.simibubi.create.foundation.utility.*;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import static com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE;
|
||||||
|
import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING;
|
||||||
|
|
||||||
|
public class DeployerActorInstance extends ActorInstance {
|
||||||
|
|
||||||
|
Direction facing;
|
||||||
|
boolean stationaryTimer;
|
||||||
|
|
||||||
|
float yRot;
|
||||||
|
float zRot;
|
||||||
|
float zRotPole;
|
||||||
|
|
||||||
|
InstanceKey<ModelData> pole;
|
||||||
|
InstanceKey<ModelData> hand;
|
||||||
|
InstanceKey<RotatingData> shaft;
|
||||||
|
|
||||||
|
public DeployerActorInstance(ContraptionKineticRenderer modelManager, MovementContext context) {
|
||||||
|
super(modelManager, context);
|
||||||
|
|
||||||
|
RenderMaterial<ContraptionProgram, InstancedModel<ModelData>> mat = modelManager.basicMaterial();
|
||||||
|
|
||||||
|
BlockState state = context.state;
|
||||||
|
DeployerTileEntity.Mode mode = NBTHelper.readEnum(context.tileData, "Mode", DeployerTileEntity.Mode.class);
|
||||||
|
AllBlockPartials handPose = DeployerRenderer.getHandPose(mode);
|
||||||
|
|
||||||
|
stationaryTimer = context.data.contains("StationaryTimer");
|
||||||
|
facing = state.get(FACING);
|
||||||
|
|
||||||
|
boolean rotatePole = state.get(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z;
|
||||||
|
yRot = AngleHelper.horizontalAngle(facing);
|
||||||
|
zRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0;
|
||||||
|
zRotPole = rotatePole ? 90 : 0;
|
||||||
|
|
||||||
|
pole = mat.getModel(AllBlockPartials.DEPLOYER_POLE, state).createInstance();
|
||||||
|
hand = mat.getModel(handPose, state).createInstance();
|
||||||
|
|
||||||
|
Direction.Axis axis = ((IRotate) state.getBlock()).getRotationAxis(state);
|
||||||
|
shaft = modelManager.getMaterial(KineticRenderMaterials.ROTATING)
|
||||||
|
.getModel(KineticTileEntityRenderer.KINETIC_TILE, KineticTileInstance.shaft(axis))
|
||||||
|
.createInstance();
|
||||||
|
|
||||||
|
int blockLight = localBlockLight();
|
||||||
|
|
||||||
|
shaft.getInstance()
|
||||||
|
.setBlockLight(blockLight)
|
||||||
|
.setRotationAxis(axis)
|
||||||
|
.setPosition(context.localPos);
|
||||||
|
|
||||||
|
pole.getInstance().setBlockLight(blockLight);
|
||||||
|
hand.getInstance().setBlockLight(blockLight);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void tick() {
|
||||||
|
double factor;
|
||||||
|
if (context.contraption.stalled || context.position == null || context.data.contains("StationaryTimer")) {
|
||||||
|
factor = MathHelper.sin(AnimationTickHolder.getRenderTime() * .5f) * .25f + .25f;
|
||||||
|
} else {
|
||||||
|
Vec3d center = VecHelper.getCenterOf(new BlockPos(context.position));
|
||||||
|
double distance = context.position.distanceTo(center);
|
||||||
|
double nextDistance = context.position.add(context.motion)
|
||||||
|
.distanceTo(center);
|
||||||
|
factor = .5f - MathHelper.clamp(MathHelper.lerp(AnimationTickHolder.getPartialTicks(), distance, nextDistance), 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vec3d offset = new Vec3d(facing.getDirectionVec()).scale(factor);
|
||||||
|
|
||||||
|
MatrixStack ms = new MatrixStack();
|
||||||
|
MatrixStacker msr = MatrixStacker.of(ms);
|
||||||
|
|
||||||
|
msr.translate(context.localPos)
|
||||||
|
.translate(offset);
|
||||||
|
|
||||||
|
DeployerInstance.transformModel(msr, pole, hand, yRot, zRot, zRotPole);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,132 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.deployer;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.AllBlockPartials;
|
||||||
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.encased.ShaftInstance;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
|
import com.simibubi.create.foundation.render.backend.instancing.impl.ModelData;
|
||||||
|
import com.simibubi.create.foundation.utility.AngleHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
import static com.simibubi.create.content.contraptions.base.DirectionalAxisKineticBlock.AXIS_ALONG_FIRST_COORDINATE;
|
||||||
|
import static com.simibubi.create.content.contraptions.base.DirectionalKineticBlock.FACING;
|
||||||
|
|
||||||
|
public class DeployerInstance extends ShaftInstance implements ITickableInstance {
|
||||||
|
|
||||||
|
DeployerTileEntity tile;
|
||||||
|
|
||||||
|
Direction facing;
|
||||||
|
|
||||||
|
InstanceKey<ModelData> pole;
|
||||||
|
|
||||||
|
AllBlockPartials currentHand;
|
||||||
|
InstanceKey<ModelData> hand;
|
||||||
|
|
||||||
|
float yRot;
|
||||||
|
float zRot;
|
||||||
|
float zRotPole;
|
||||||
|
|
||||||
|
public DeployerInstance(InstancedTileRenderer<?> dispatcher, KineticTileEntity tile) {
|
||||||
|
super(dispatcher, tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void init() {
|
||||||
|
super.init();
|
||||||
|
|
||||||
|
this.tile = (DeployerTileEntity) super.tile;
|
||||||
|
facing = lastState.get(FACING);
|
||||||
|
|
||||||
|
boolean rotatePole = lastState.get(AXIS_ALONG_FIRST_COORDINATE) ^ facing.getAxis() == Direction.Axis.Z;
|
||||||
|
|
||||||
|
yRot = AngleHelper.horizontalAngle(facing);
|
||||||
|
zRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0;
|
||||||
|
zRotPole = rotatePole ? 90 : 0;
|
||||||
|
|
||||||
|
pole = modelManager.basicMaterial().getModel(AllBlockPartials.DEPLOYER_POLE, lastState).createInstance();
|
||||||
|
|
||||||
|
updateHandPose();
|
||||||
|
relight(pos, pole.getInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick() {
|
||||||
|
|
||||||
|
updateHandPose();
|
||||||
|
|
||||||
|
MatrixStack ms = new MatrixStack();
|
||||||
|
MatrixStacker msr = MatrixStacker.of(ms);
|
||||||
|
|
||||||
|
msr.translate(getFloatingPos())
|
||||||
|
.translate(getHandOffset(AnimationTickHolder.getPartialTicks()));
|
||||||
|
|
||||||
|
transformModel(msr, pole, hand, yRot, zRot, zRotPole);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateLight() {
|
||||||
|
super.updateLight();
|
||||||
|
relight(pos, hand.getInstance(), pole.getInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove() {
|
||||||
|
super.remove();
|
||||||
|
hand.delete();
|
||||||
|
pole.delete();
|
||||||
|
currentHand = null; // updateHandPose() uses an invalid key after a block update otherwise.
|
||||||
|
hand = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean updateHandPose() {
|
||||||
|
AllBlockPartials handPose = tile.getHandPose();
|
||||||
|
|
||||||
|
if (currentHand == handPose) return false;
|
||||||
|
currentHand = handPose;
|
||||||
|
|
||||||
|
if (hand != null) hand.delete();
|
||||||
|
|
||||||
|
hand = modelManager.basicMaterial().getModel(currentHand, lastState).createInstance();
|
||||||
|
|
||||||
|
relight(pos, hand.getInstance());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Vec3d getHandOffset(float partialTicks) {
|
||||||
|
float progress = 0;
|
||||||
|
if (tile.state == DeployerTileEntity.State.EXPANDING)
|
||||||
|
progress = 1 - (tile.timer - partialTicks * tile.getTimerSpeed()) / 1000f;
|
||||||
|
if (tile.state == DeployerTileEntity.State.RETRACTING)
|
||||||
|
progress = (tile.timer - partialTicks * tile.getTimerSpeed()) / 1000f;
|
||||||
|
|
||||||
|
float handLength = tile.getHandPose() == AllBlockPartials.DEPLOYER_HAND_POINTING ? 0
|
||||||
|
: tile.getHandPose() == AllBlockPartials.DEPLOYER_HAND_HOLDING ? 4 / 16f : 3 / 16f;
|
||||||
|
float distance = Math.min(MathHelper.clamp(progress, 0, 1) * (tile.reach + handLength), 21 / 16f);
|
||||||
|
Vec3d offset = new Vec3d(facing.getDirectionVec()).scale(distance);
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void transformModel(MatrixStacker msr, InstanceKey<ModelData> pole, InstanceKey<ModelData> hand, float yRot, float zRot, float zRotPole) {
|
||||||
|
|
||||||
|
msr.centre();
|
||||||
|
msr.rotate(Direction.SOUTH, (float) ((zRot) / 180 * Math.PI));
|
||||||
|
msr.rotate(Direction.UP, (float) ((yRot) / 180 * Math.PI));
|
||||||
|
|
||||||
|
msr.push();
|
||||||
|
msr.rotate(Direction.SOUTH, (float) ((zRotPole) / 180 * Math.PI));
|
||||||
|
msr.unCentre();
|
||||||
|
pole.getInstance().setTransform(msr.unwrap());
|
||||||
|
msr.pop();
|
||||||
|
|
||||||
|
msr.unCentre();
|
||||||
|
|
||||||
|
hand.getInstance().setTransform(msr.unwrap());
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,9 @@ package com.simibubi.create.content.contraptions.components.deployer;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
|
||||||
|
import com.simibubi.create.foundation.render.backend.FastRenderDispatcher;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
@ -24,6 +27,8 @@ import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
import net.minecraftforge.common.util.Constants.NBT;
|
import net.minecraftforge.common.util.Constants.NBT;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class DeployerMovementBehaviour extends MovementBehaviour {
|
public class DeployerMovementBehaviour extends MovementBehaviour {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -167,7 +172,18 @@ public class DeployerMovementBehaviour extends MovementBehaviour {
|
||||||
@Override
|
@Override
|
||||||
public void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
|
public void renderInContraption(MovementContext context, MatrixStack ms, MatrixStack msLocal,
|
||||||
IRenderTypeBuffer buffers) {
|
IRenderTypeBuffer buffers) {
|
||||||
|
if (!FastRenderDispatcher.available())
|
||||||
DeployerRenderer.renderInContraption(context, ms, msLocal, buffers);
|
DeployerRenderer.renderInContraption(context, ms, msLocal, buffers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasSpecialInstancedRendering() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public ActorInstance createInstance(ContraptionKineticRenderer kr, MovementContext context) {
|
||||||
|
return new DeployerActorInstance(kr, context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ import com.simibubi.create.AllBlockPartials;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode;
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.Mode;
|
||||||
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity.State;
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||||
|
@ -50,11 +49,17 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
||||||
int light, int overlay) {
|
int light, int overlay) {
|
||||||
renderItem(te, partialTicks, ms, buffer, light, overlay);
|
renderItem(te, partialTicks, ms, buffer, light, overlay);
|
||||||
FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay);
|
FilteringRenderer.renderOnTileEntity(te, partialTicks, ms, buffer, light, overlay);
|
||||||
|
|
||||||
|
if (FastRenderDispatcher.available(te.getWorld())) return;
|
||||||
|
|
||||||
renderComponents(te, partialTicks, ms, buffer, light, overlay);
|
renderComponents(te, partialTicks, ms, buffer, light, overlay);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderItem(DeployerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
protected void renderItem(DeployerTileEntity te, float partialTicks, MatrixStack ms, IRenderTypeBuffer buffer,
|
||||||
int light, int overlay) {
|
int light, int overlay) {
|
||||||
|
|
||||||
|
if (te.heldItem.isEmpty()) return;
|
||||||
|
|
||||||
BlockState deployerState = te.getBlockState();
|
BlockState deployerState = te.getBlockState();
|
||||||
Vec3d offset = getHandOffset(te, partialTicks, deployerState).add(VecHelper.getCenterOf(BlockPos.ZERO));
|
Vec3d offset = getHandOffset(te, partialTicks, deployerState).add(VecHelper.getCenterOf(BlockPos.ZERO));
|
||||||
ms.push();
|
ms.push();
|
||||||
|
@ -123,15 +128,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Vec3d getHandOffset(DeployerTileEntity te, float partialTicks, BlockState blockState) {
|
protected Vec3d getHandOffset(DeployerTileEntity te, float partialTicks, BlockState blockState) {
|
||||||
float progress = 0;
|
float distance = te.getHandOffset(partialTicks);
|
||||||
if (te.state == State.EXPANDING)
|
|
||||||
progress = 1 - (te.timer - partialTicks * te.getTimerSpeed()) / 1000f;
|
|
||||||
if (te.state == State.RETRACTING)
|
|
||||||
progress = (te.timer - partialTicks * te.getTimerSpeed()) / 1000f;
|
|
||||||
|
|
||||||
float handLength = te.getHandPose() == AllBlockPartials.DEPLOYER_HAND_POINTING ? 0
|
|
||||||
: te.getHandPose() == AllBlockPartials.DEPLOYER_HAND_HOLDING ? 4 / 16f : 3 / 16f;
|
|
||||||
float distance = Math.min(MathHelper.clamp(progress, 0, 1) * (te.reach + handLength), 21 / 16f);
|
|
||||||
Vec3d offset = new Vec3d(blockState.get(FACING)
|
Vec3d offset = new Vec3d(blockState.get(FACING)
|
||||||
.getDirectionVec()).scale(distance);
|
.getDirectionVec()).scale(distance);
|
||||||
return offset;
|
return offset;
|
||||||
|
@ -166,8 +163,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
||||||
BlockPos pos = BlockPos.ZERO;
|
BlockPos pos = BlockPos.ZERO;
|
||||||
Mode mode = NBTHelper.readEnum(context.tileData, "Mode", Mode.class);
|
Mode mode = NBTHelper.readEnum(context.tileData, "Mode", Mode.class);
|
||||||
World world = context.world;
|
World world = context.world;
|
||||||
AllBlockPartials handPose =
|
AllBlockPartials handPose = getHandPose(mode);
|
||||||
mode == Mode.PUNCH ? AllBlockPartials.DEPLOYER_HAND_PUNCHING : AllBlockPartials.DEPLOYER_HAND_POINTING;
|
|
||||||
|
|
||||||
SuperByteBuffer pole = AllBlockPartials.DEPLOYER_POLE.renderOn(blockState);
|
SuperByteBuffer pole = AllBlockPartials.DEPLOYER_POLE.renderOn(blockState);
|
||||||
SuperByteBuffer hand = handPose.renderOn(blockState);
|
SuperByteBuffer hand = handPose.renderOn(blockState);
|
||||||
|
@ -198,4 +194,8 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
||||||
.renderInto(ms, builder);
|
.renderInto(ms, builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static AllBlockPartials getHandPose(DeployerTileEntity.Mode mode) {
|
||||||
|
return mode == DeployerTileEntity.Mode.PUNCH ? AllBlockPartials.DEPLOYER_HAND_PUNCHING : AllBlockPartials.DEPLOYER_HAND_POINTING;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour;
|
||||||
import com.simibubi.create.foundation.utility.NBTHelper;
|
import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||||
|
|
||||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -53,6 +54,8 @@ public class DeployerTileEntity extends KineticTileEntity {
|
||||||
private LazyOptional<IItemHandlerModifiable> invHandler;
|
private LazyOptional<IItemHandlerModifiable> invHandler;
|
||||||
private ListNBT deferredInventoryList;
|
private ListNBT deferredInventoryList;
|
||||||
|
|
||||||
|
private LerpedFloat animatedOffset;
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
WAITING, EXPANDING, RETRACTING, DUMPING;
|
WAITING, EXPANDING, RETRACTING, DUMPING;
|
||||||
}
|
}
|
||||||
|
@ -67,6 +70,8 @@ public class DeployerTileEntity extends KineticTileEntity {
|
||||||
mode = Mode.USE;
|
mode = Mode.USE;
|
||||||
heldItem = ItemStack.EMPTY;
|
heldItem = ItemStack.EMPTY;
|
||||||
redstoneLocked = false;
|
redstoneLocked = false;
|
||||||
|
animatedOffset = LerpedFloat.linear()
|
||||||
|
.startWithValue(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -386,4 +391,28 @@ public class DeployerTileEntity extends KineticTileEntity {
|
||||||
public boolean shouldRenderAsTE() {
|
public boolean shouldRenderAsTE() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getHandOffset(float partialTicks) {
|
||||||
|
if (isVirtual())
|
||||||
|
return animatedOffset.getValue(partialTicks);
|
||||||
|
|
||||||
|
float progress = 0;
|
||||||
|
int timerSpeed = getTimerSpeed();
|
||||||
|
AllBlockPartials handPose = getHandPose();
|
||||||
|
|
||||||
|
if (state == State.EXPANDING)
|
||||||
|
progress = 1 - (timer - partialTicks * timerSpeed) / 1000f;
|
||||||
|
if (state == State.RETRACTING)
|
||||||
|
progress = (timer - partialTicks * timerSpeed) / 1000f;
|
||||||
|
float handLength = handPose == AllBlockPartials.DEPLOYER_HAND_POINTING ? 0
|
||||||
|
: handPose == AllBlockPartials.DEPLOYER_HAND_HOLDING ? 4 / 16f : 3 / 16f;
|
||||||
|
float distance = Math.min(MathHelper.clamp(progress, 0, 1) * (reach + handLength), 21 / 16f);
|
||||||
|
|
||||||
|
return distance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnimatedOffset(float offset) {
|
||||||
|
animatedOffset.setValue(offset);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,8 @@ public class FlywheelTileEntity extends GeneratingKineticTileEntity {
|
||||||
super.tick();
|
super.tick();
|
||||||
|
|
||||||
if (world.isRemote) {
|
if (world.isRemote) {
|
||||||
visualSpeed.target(getGeneratedSpeed());
|
float targetSpeed = isVirtual() ? speed : getGeneratedSpeed();
|
||||||
|
visualSpeed.target(targetSpeed);
|
||||||
visualSpeed.tick();
|
visualSpeed.tick();
|
||||||
angle += visualSpeed.value * 3 / 10f;
|
angle += visualSpeed.value * 3 / 10f;
|
||||||
angle %= 360;
|
angle %= 360;
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package com.simibubi.create.content.contraptions.components.structureMovement;
|
package com.simibubi.create.content.contraptions.components.structureMovement;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ActorInstance;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionKineticRenderer;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.RenderedContraption;
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.RenderedContraption;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
|
@ -8,10 +10,13 @@ import net.minecraft.entity.item.ItemEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.gen.feature.template.Template;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public abstract class MovementBehaviour {
|
public abstract class MovementBehaviour {
|
||||||
|
|
||||||
public boolean isActive(MovementContext context) {
|
public boolean isActive(MovementContext context) {
|
||||||
|
@ -61,7 +66,10 @@ public abstract class MovementBehaviour {
|
||||||
IRenderTypeBuffer buffer) {}
|
IRenderTypeBuffer buffer) {}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
public void addInstance(RenderedContraption contraption, MovementContext context) {}
|
@Nullable
|
||||||
|
public ActorInstance createInstance(ContraptionKineticRenderer kr, MovementContext context) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void onSpeedChanged(MovementContext context, Vec3d oldMotion, Vec3d motion) {
|
public void onSpeedChanged(MovementContext context, Vec3d oldMotion, Vec3d motion) {
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.render;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.world.LightType;
|
||||||
|
|
||||||
|
public abstract class ActorInstance {
|
||||||
|
protected final ContraptionKineticRenderer modelManager;
|
||||||
|
protected final MovementContext context;
|
||||||
|
|
||||||
|
public ActorInstance(ContraptionKineticRenderer modelManager, MovementContext context) {
|
||||||
|
this.modelManager = modelManager;
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tick() { }
|
||||||
|
|
||||||
|
protected float getSpeed(Direction facing) {
|
||||||
|
if (context.contraption.stalled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return !VecHelper.isVecPointingTowards(context.relativeMotion, facing.getOpposite()) ? context.getAnimationSpeed() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int localBlockLight() {
|
||||||
|
return modelManager.contraption.renderWorld.getLightLevel(LightType.BLOCK, context.localPos);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,20 +1,41 @@
|
||||||
package com.simibubi.create.content.contraptions.components.structureMovement.render;
|
package com.simibubi.create.content.contraptions.components.structureMovement.render;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllMovementBehaviours;
|
||||||
import com.simibubi.create.content.contraptions.base.KineticRenderMaterials;
|
import com.simibubi.create.content.contraptions.base.KineticRenderMaterials;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingInstancedModel;
|
import com.simibubi.create.content.contraptions.base.RotatingInstancedModel;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.ContraptionActorData;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.RotatingActorModel;
|
import com.simibubi.create.content.contraptions.components.actors.RotatingActorModel;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltInstancedModel;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltInstancedModel;
|
||||||
import com.simibubi.create.content.logistics.block.FlapInstancedModel;
|
import com.simibubi.create.content.logistics.block.FlapInstancedModel;
|
||||||
import com.simibubi.create.foundation.render.AllProgramSpecs;
|
import com.simibubi.create.foundation.render.AllProgramSpecs;
|
||||||
|
import com.simibubi.create.foundation.render.backend.Backend;
|
||||||
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
import com.simibubi.create.foundation.render.backend.RenderMaterials;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.InstancedTileRenderer;
|
import com.simibubi.create.foundation.render.backend.instancing.*;
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.RenderMaterial;
|
|
||||||
|
|
||||||
import com.simibubi.create.foundation.render.backend.instancing.impl.BasicInstancedModel;
|
import com.simibubi.create.foundation.render.backend.instancing.impl.BasicInstancedModel;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.gen.feature.template.Template;
|
||||||
|
import org.apache.commons.lang3.tuple.MutablePair;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class ContraptionKineticRenderer extends InstancedTileRenderer<ContraptionProgram> {
|
public class ContraptionKineticRenderer extends InstancedTileRenderer<ContraptionProgram> {
|
||||||
|
|
||||||
|
protected ArrayList<ActorInstance> actors = new ArrayList<>();
|
||||||
|
|
||||||
|
public final RenderedContraption contraption;
|
||||||
|
|
||||||
|
ContraptionKineticRenderer(RenderedContraption contraption) {
|
||||||
|
this.contraption = contraption;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerMaterials() {
|
public void registerMaterials() {
|
||||||
materials.put(RenderMaterials.MODELS, new RenderMaterial<>(this, AllProgramSpecs.C_MODEL, BasicInstancedModel::new));
|
materials.put(RenderMaterials.MODELS, new RenderMaterial<>(this, AllProgramSpecs.C_MODEL, BasicInstancedModel::new));
|
||||||
|
@ -25,6 +46,36 @@ public class ContraptionKineticRenderer extends InstancedTileRenderer<Contraptio
|
||||||
materials.put(KineticRenderMaterials.ACTORS, new RenderMaterial<>(this, AllProgramSpecs.C_ACTOR, RotatingActorModel::new));
|
materials.put(KineticRenderMaterials.ACTORS, new RenderMaterial<>(this, AllProgramSpecs.C_ACTOR, RotatingActorModel::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beginFrame(double cameraX, double cameraY, double cameraZ) {
|
||||||
|
super.beginFrame(cameraX, cameraY, cameraZ);
|
||||||
|
|
||||||
|
actors.forEach(ActorInstance::tick);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public ActorInstance createActor(Pair<Template.BlockInfo, MovementContext> actor) {
|
||||||
|
Template.BlockInfo blockInfo = actor.getLeft();
|
||||||
|
MovementContext context = actor.getRight();
|
||||||
|
|
||||||
|
MovementBehaviour movementBehaviour = AllMovementBehaviours.of(blockInfo.state);
|
||||||
|
|
||||||
|
if (movementBehaviour != null && movementBehaviour.hasSpecialInstancedRendering()) {
|
||||||
|
ActorInstance instance = movementBehaviour.createInstance(this, context);
|
||||||
|
|
||||||
|
actors.add(instance);
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RenderMaterial<?, InstancedModel<ContraptionActorData>> getActorMaterial() {
|
||||||
|
return getMaterial(KineticRenderMaterials.ACTORS);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockPos getOriginCoordinate() {
|
public BlockPos getOriginCoordinate() {
|
||||||
return BlockPos.ZERO;
|
return BlockPos.ZERO;
|
||||||
|
|
|
@ -64,7 +64,7 @@ public class RenderedContraption {
|
||||||
public RenderedContraption(World world, Contraption contraption) {
|
public RenderedContraption(World world, Contraption contraption) {
|
||||||
this.contraption = contraption;
|
this.contraption = contraption;
|
||||||
this.lighter = contraption.makeLighter();
|
this.lighter = contraption.makeLighter();
|
||||||
this.kinetics = new ContraptionKineticRenderer();
|
this.kinetics = new ContraptionKineticRenderer(this);
|
||||||
this.renderWorld = setupRenderWorld(world, contraption);
|
this.renderWorld = setupRenderWorld(world, contraption);
|
||||||
|
|
||||||
buildLayers();
|
buildLayers();
|
||||||
|
@ -86,10 +86,6 @@ public class RenderedContraption {
|
||||||
return lighter;
|
return lighter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RenderMaterial<?, InstancedModel<ContraptionActorData>> getActorMaterial() {
|
|
||||||
return kinetics.getMaterial(KineticRenderMaterials.ACTORS);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doRenderLayer(RenderType layer, ContraptionProgram shader) {
|
public void doRenderLayer(RenderType layer, ContraptionProgram shader) {
|
||||||
ContraptionModel structure = renderLayers.get(layer);
|
ContraptionModel structure = renderLayers.get(layer);
|
||||||
if (structure != null) {
|
if (structure != null) {
|
||||||
|
@ -172,18 +168,7 @@ public class RenderedContraption {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void buildActors() {
|
private void buildActors() {
|
||||||
List<MutablePair<Template.BlockInfo, MovementContext>> actors = contraption.getActors();
|
contraption.getActors().forEach(kinetics::createActor);
|
||||||
|
|
||||||
for (MutablePair<Template.BlockInfo, MovementContext> actor : actors) {
|
|
||||||
Template.BlockInfo blockInfo = actor.left;
|
|
||||||
MovementContext context = actor.right;
|
|
||||||
|
|
||||||
MovementBehaviour movementBehaviour = AllMovementBehaviours.of(blockInfo.state);
|
|
||||||
|
|
||||||
if (movementBehaviour != null) {
|
|
||||||
movementBehaviour.addInstance(this, context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ContraptionModel buildStructureModel(PlacementSimulationWorld renderWorld, Contraption c, RenderType layer) {
|
private static ContraptionModel buildStructureModel(PlacementSimulationWorld renderWorld, Contraption c, RenderType layer) {
|
||||||
|
|
|
@ -41,11 +41,12 @@ public class SpeedControllerRenderer extends SmartTileEntityRenderer<SpeedContro
|
||||||
BlockPos pos = tileEntityIn.getPos();
|
BlockPos pos = tileEntityIn.getPos();
|
||||||
World world = tileEntityIn.getWorld();
|
World world = tileEntityIn.getWorld();
|
||||||
BlockState blockState = tileEntityIn.getBlockState();
|
BlockState blockState = tileEntityIn.getBlockState();
|
||||||
|
boolean alongX = blockState.get(SpeedControllerBlock.HORIZONTAL_AXIS) == Axis.X;
|
||||||
|
|
||||||
SuperByteBuffer bracket = AllBlockPartials.SPEED_CONTROLLER_BRACKET.renderOn(blockState);
|
SuperByteBuffer bracket = AllBlockPartials.SPEED_CONTROLLER_BRACKET.renderOn(blockState);
|
||||||
bracket.translate(0, 1, 0);
|
bracket.translate(0, 1, 0);
|
||||||
bracket.rotateCentered(Direction.UP,
|
bracket.rotateCentered(Direction.UP,
|
||||||
(float) (blockState.get(SpeedControllerBlock.HORIZONTAL_AXIS) == Axis.X ? Math.PI : 0));
|
(float) (alongX ? Math.PI : Math.PI / 2));
|
||||||
bracket.light(WorldRenderer.getLightmapCoordinates(world, pos.up()));
|
bracket.light(WorldRenderer.getLightmapCoordinates(world, pos.up()));
|
||||||
bracket.renderInto(ms, builder);
|
bracket.renderInto(ms, builder);
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,6 +122,11 @@ public class SpeedControllerTileEntity extends KineticTileEntity {
|
||||||
.isHorizontal();
|
.isHorizontal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldRenderAsTE() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private class ControllerValueBoxTransform extends ValueBoxTransform.Sided {
|
private class ControllerValueBoxTransform extends ValueBoxTransform.Sided {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -150,6 +150,8 @@ public class SequencedGearshiftTileEntity extends SplitShaftTileEntity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getRotationSpeedModifier(Direction face) {
|
public float getRotationSpeedModifier(Direction face) {
|
||||||
|
if (isVirtual())
|
||||||
|
return 1;
|
||||||
return (!hasSource() || face == getSourceFacing()) ? 1 : getModifier();
|
return (!hasSource() || face == getSourceFacing()) ? 1 : getModifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,23 @@
|
||||||
package com.simibubi.create.content.logistics.block.funnel;
|
package com.simibubi.create.content.logistics.block.funnel;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementBehaviour;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
import com.simibubi.create.content.contraptions.components.structureMovement.MovementContext;
|
||||||
import com.simibubi.create.content.logistics.item.filter.FilterItem;
|
import com.simibubi.create.content.logistics.item.filter.FilterItem;
|
||||||
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
|
import com.simibubi.create.foundation.item.ItemHelper;
|
||||||
import net.minecraft.entity.item.ItemEntity;
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.SoundCategory;
|
||||||
|
import net.minecraft.util.SoundEvents;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class FunnelMovementBehaviour extends MovementBehaviour {
|
public class FunnelMovementBehaviour extends MovementBehaviour {
|
||||||
|
|
||||||
private final boolean hasFilter;
|
private final boolean hasFilter;
|
||||||
|
@ -32,14 +36,67 @@ public class FunnelMovementBehaviour extends MovementBehaviour {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Vec3d getActiveAreaOffset(MovementContext context) {
|
public Vec3d getActiveAreaOffset(MovementContext context) {
|
||||||
return new Vec3d(FunnelBlock.getFunnelFacing(context.state)
|
Direction facing = FunnelBlock.getFunnelFacing(context.state);
|
||||||
.getDirectionVec()).scale(.65);
|
Vec3d vec = new Vec3d(facing.getDirectionVec());
|
||||||
|
if (facing != Direction.UP)
|
||||||
|
return vec.scale(context.state.get(FunnelBlock.EXTRACTING) ? .15 : .65);
|
||||||
|
|
||||||
|
return vec.scale(.65);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visitNewPosition(MovementContext context, BlockPos pos) {
|
public void visitNewPosition(MovementContext context, BlockPos pos) {
|
||||||
super.visitNewPosition(context, pos);
|
super.visitNewPosition(context, pos);
|
||||||
|
|
||||||
|
if (context.state.get(FunnelBlock.EXTRACTING))
|
||||||
|
extract(context, pos);
|
||||||
|
else
|
||||||
|
succ(context, pos);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void extract(MovementContext context, BlockPos pos) {
|
||||||
|
World world = context.world;
|
||||||
|
|
||||||
|
Vec3d entityPos = context.position;
|
||||||
|
if (context.state.get(FunnelBlock.FACING) != Direction.DOWN)
|
||||||
|
entityPos = entityPos.add(0, -.5f, 0);
|
||||||
|
|
||||||
|
if (!world.getBlockState(pos).getCollisionShape(world, pos).isEmpty())
|
||||||
|
return;//only drop items if the target block is a empty space
|
||||||
|
|
||||||
|
if (!world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(new BlockPos(entityPos))).isEmpty())
|
||||||
|
return;//don't drop items if there already are any in the target block space
|
||||||
|
|
||||||
|
ItemStack filter = getFilter(context);
|
||||||
|
int filterAmount = context.tileData.getInt("FilterAmount");
|
||||||
|
if (filterAmount <= 0)
|
||||||
|
filterAmount = hasFilter ? AllConfigs.SERVER.logistics.defaultExtractionLimit.get() : 1;
|
||||||
|
|
||||||
|
ItemStack extract = ItemHelper.extract(
|
||||||
|
context.contraption.inventory,
|
||||||
|
s -> FilterItem.test(world, s, filter),
|
||||||
|
ItemHelper.ExtractionCountMode.UPTO,
|
||||||
|
filterAmount,
|
||||||
|
false);
|
||||||
|
|
||||||
|
if (extract.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (world.isRemote)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ItemEntity entity = new ItemEntity(world, entityPos.x, entityPos.y, entityPos.z, extract);
|
||||||
|
entity.setMotion(Vec3d.ZERO);
|
||||||
|
entity.setPickupDelay(5);
|
||||||
|
world.playSound(null, pos, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.BLOCKS, 1/16f, .1f);
|
||||||
|
world.addEntity(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void succ(MovementContext context, BlockPos pos) {
|
||||||
World world = context.world;
|
World world = context.world;
|
||||||
List<ItemEntity> items = world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(pos));
|
List<ItemEntity> items = world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(pos));
|
||||||
ItemStack filter = getFilter(context);
|
ItemStack filter = getFilter(context);
|
||||||
|
@ -61,7 +118,6 @@ public class FunnelMovementBehaviour extends MovementBehaviour {
|
||||||
|
|
||||||
item.setItem(remainder);
|
item.setItem(remainder);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemStack getFilter(MovementContext context) {
|
private ItemStack getFilter(MovementContext context) {
|
||||||
|
|
|
@ -329,7 +329,7 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn
|
||||||
extractionCooldown = compound.getInt("TransferCooldown");
|
extractionCooldown = compound.getInt("TransferCooldown");
|
||||||
|
|
||||||
if (clientPacket)
|
if (clientPacket)
|
||||||
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> FastRenderDispatcher.enqueueUpdate(this));
|
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FastRenderDispatcher.enqueueUpdate(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -383,4 +383,10 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn
|
||||||
TooltipHelper.addHint(tooltip, "hint.horizontal_funnel");
|
TooltipHelper.addHint(tooltip, "hint.horizontal_funnel");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldRenderAsTE() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,5 @@
|
||||||
package com.simibubi.create.foundation.ponder;
|
package com.simibubi.create.foundation.ponder;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
|
||||||
import org.apache.commons.lang3.mutable.MutableInt;
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.simibubi.create.foundation.gui.AbstractSimiScreen;
|
import com.simibubi.create.foundation.gui.AbstractSimiScreen;
|
||||||
import com.simibubi.create.foundation.gui.IScreenRenderable;
|
import com.simibubi.create.foundation.gui.IScreenRenderable;
|
||||||
|
@ -17,11 +9,18 @@ import com.simibubi.create.foundation.ponder.content.PonderTagScreen;
|
||||||
import com.simibubi.create.foundation.ponder.ui.PonderButton;
|
import com.simibubi.create.foundation.ponder.ui.PonderButton;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||||
|
|
||||||
import net.minecraft.client.MainWindow;
|
import net.minecraft.client.MainWindow;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||||
|
import org.apache.commons.lang3.mutable.MutableInt;
|
||||||
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
||||||
|
|
||||||
|
@ -31,6 +30,9 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
||||||
public final LerpedFloat transition = LerpedFloat.linear()
|
public final LerpedFloat transition = LerpedFloat.linear()
|
||||||
.startWithValue(0)
|
.startWithValue(0)
|
||||||
.chase(0, .1f, LerpedFloat.Chaser.LINEAR);
|
.chase(0, .1f, LerpedFloat.Chaser.LINEAR);
|
||||||
|
protected final LerpedFloat arrowAnimation = LerpedFloat.linear()
|
||||||
|
.startWithValue(0)
|
||||||
|
.chase(0, 0.075f, LerpedFloat.Chaser.LINEAR);
|
||||||
protected PonderButton backTrack;
|
protected PonderButton backTrack;
|
||||||
|
|
||||||
public NavigatableSimiScreen() {
|
public NavigatableSimiScreen() {
|
||||||
|
@ -50,6 +52,7 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
||||||
public void tick() {
|
public void tick() {
|
||||||
super.tick();
|
super.tick();
|
||||||
transition.tickChaser();
|
transition.tickChaser();
|
||||||
|
arrowAnimation.tickChaser();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -90,8 +93,13 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
||||||
|
|
||||||
RenderSystem.pushMatrix();
|
RenderSystem.pushMatrix();
|
||||||
RenderSystem.translated(0, 0, 500);
|
RenderSystem.translated(0, 0, 500);
|
||||||
if (backTrack.isHovered())
|
if (backTrack.isHovered()) {
|
||||||
drawString(font, Lang.translate(THINK_BACK), 15, height - 16, 0xffa3a3a3);
|
drawString(font, Lang.translate(THINK_BACK), 15, height - 16, 0xffa3a3a3);
|
||||||
|
if (MathHelper.epsilonEquals(arrowAnimation.getValue(), arrowAnimation.getChaseTarget())) {
|
||||||
|
arrowAnimation.setValue(1);
|
||||||
|
arrowAnimation.setValue(1);//called twice to also set the previous value to 1
|
||||||
|
}
|
||||||
|
}
|
||||||
RenderSystem.popMatrix();
|
RenderSystem.popMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,8 +157,14 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
||||||
RenderSystem.translated(-depthPointX, -depthPointY, 0);
|
RenderSystem.translated(-depthPointX, -depthPointY, 0);
|
||||||
|
|
||||||
if (backTrack != null) {
|
if (backTrack != null) {
|
||||||
UIRenderHelper.breadcrumbArrow(21, height - 51, 30, 20, 5, 0x40aa9999, 0x10aa9999);
|
int x = (int) MathHelper.lerp(arrowAnimation.getValue(partialTicks), -9, 21);
|
||||||
UIRenderHelper.breadcrumbArrow(-19, height - 51, 40, 20, 5, 0x40aa9999, 0x10aa9999);
|
int maxX = backTrack.x + backTrack.getWidth();
|
||||||
|
|
||||||
|
if (x + 30 < backTrack.x)
|
||||||
|
UIRenderHelper.breadcrumbArrow(x + 30, height - 51, maxX - (x + 30), 20, 5, 0x40aa9999, 0x10aa9999);
|
||||||
|
|
||||||
|
UIRenderHelper.breadcrumbArrow(x, height - 51, 30, 20, 5, 0x40aa9999, 0x10aa9999);
|
||||||
|
UIRenderHelper.breadcrumbArrow(x - 30, height - 51, 30, 20, 5, 0x40aa9999, 0x10aa9999);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,8 +109,10 @@ public class PonderRegistry {
|
||||||
String filepath = "ponder/" + path + ".nbt";
|
String filepath = "ponder/" + path + ".nbt";
|
||||||
InputStream resourceAsStream = Create.class.getClassLoader()
|
InputStream resourceAsStream = Create.class.getClassLoader()
|
||||||
.getResourceAsStream(filepath);
|
.getResourceAsStream(filepath);
|
||||||
if (resourceAsStream == null)
|
if (resourceAsStream == null) {
|
||||||
throw new IllegalStateException("Could not find ponder schematic: " + filepath);
|
Create.logger.error("Ponder schematic missing: " + path);
|
||||||
|
return t;
|
||||||
|
}
|
||||||
try (DataInputStream stream =
|
try (DataInputStream stream =
|
||||||
new DataInputStream(new BufferedInputStream(new GZIPInputStream(resourceAsStream)))) {
|
new DataInputStream(new BufferedInputStream(new GZIPInputStream(resourceAsStream)))) {
|
||||||
CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L));
|
CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L));
|
||||||
|
|
|
@ -83,6 +83,9 @@ public class PonderUI extends NavigatableSimiScreen {
|
||||||
private ClipboardHelper clipboardHelper;
|
private ClipboardHelper clipboardHelper;
|
||||||
private BlockPos copiedBlockPos;
|
private BlockPos copiedBlockPos;
|
||||||
|
|
||||||
|
private LerpedFloat finishingFlash;
|
||||||
|
private int finishingFlashWarmup = 0;
|
||||||
|
|
||||||
private LerpedFloat lazyIndex;
|
private LerpedFloat lazyIndex;
|
||||||
private int index = 0;
|
private int index = 0;
|
||||||
private PonderTag referredToByTag;
|
private PonderTag referredToByTag;
|
||||||
|
@ -133,6 +136,9 @@ public class PonderUI extends NavigatableSimiScreen {
|
||||||
.startWithValue(0)
|
.startWithValue(0)
|
||||||
.chase(1, .1f, Chaser.EXP);
|
.chase(1, .1f, Chaser.EXP);
|
||||||
clipboardHelper = new ClipboardHelper();
|
clipboardHelper = new ClipboardHelper();
|
||||||
|
finishingFlash = LerpedFloat.linear()
|
||||||
|
.startWithValue(0)
|
||||||
|
.chase(0, .1f, Chaser.EXP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -250,10 +256,22 @@ public class PonderUI extends NavigatableSimiScreen {
|
||||||
if (skipCooling == 0)
|
if (skipCooling == 0)
|
||||||
activeScene.tick();
|
activeScene.tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
lazyIndex.tickChaser();
|
lazyIndex.tickChaser();
|
||||||
fadeIn.tickChaser();
|
fadeIn.tickChaser();
|
||||||
|
finishingFlash.tickChaser();
|
||||||
progressBar.tick();
|
progressBar.tick();
|
||||||
|
|
||||||
|
if (activeScene.currentTime == activeScene.totalTime - 1)
|
||||||
|
finishingFlashWarmup = 30;
|
||||||
|
if (finishingFlashWarmup > 0) {
|
||||||
|
finishingFlashWarmup--;
|
||||||
|
if (finishingFlashWarmup == 0) {
|
||||||
|
finishingFlash.setValue(1);
|
||||||
|
finishingFlash.setValue(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!identifyMode) {
|
if (!identifyMode) {
|
||||||
float lazyIndexValue = lazyIndex.getValue();
|
float lazyIndexValue = lazyIndex.getValue();
|
||||||
if (Math.abs(lazyIndexValue - index) > 1 / 512f)
|
if (Math.abs(lazyIndexValue - index) > 1 / 512f)
|
||||||
|
@ -351,6 +369,7 @@ public class PonderUI extends NavigatableSimiScreen {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void renderVisibleScenes(int mouseX, int mouseY, float partialTicks) {
|
protected void renderVisibleScenes(int mouseX, int mouseY, float partialTicks) {
|
||||||
|
SuperRenderTypeBuffer.vertexSortingOrigin = new BlockPos(0, 0, 800);
|
||||||
renderScene(mouseX, mouseY, index, partialTicks);
|
renderScene(mouseX, mouseY, index, partialTicks);
|
||||||
float lazyIndexValue = lazyIndex.getValue(partialTicks);
|
float lazyIndexValue = lazyIndex.getValue(partialTicks);
|
||||||
if (Math.abs(lazyIndexValue - index) > 1 / 512f)
|
if (Math.abs(lazyIndexValue - index) > 1 / 512f)
|
||||||
|
@ -388,10 +407,26 @@ public class PonderUI extends NavigatableSimiScreen {
|
||||||
RenderSystem.pushMatrix();
|
RenderSystem.pushMatrix();
|
||||||
RenderSystem.translated(story.basePlateOffsetX, 0, story.basePlateOffsetZ);
|
RenderSystem.translated(story.basePlateOffsetX, 0, story.basePlateOffsetZ);
|
||||||
RenderSystem.scaled(1, -1, 1);
|
RenderSystem.scaled(1, -1, 1);
|
||||||
|
|
||||||
|
float flash = finishingFlash.getValue(partialTicks) * .9f;
|
||||||
|
float alpha = flash;
|
||||||
|
flash *= flash;
|
||||||
|
flash = ((flash * 2) - 1);
|
||||||
|
flash *= flash;
|
||||||
|
flash = 1 - flash;
|
||||||
|
|
||||||
for (int f = 0; f < 4; f++) {
|
for (int f = 0; f < 4; f++) {
|
||||||
RenderSystem.translated(story.basePlateSize, 0, 0);
|
RenderSystem.translated(story.basePlateSize, 0, 0);
|
||||||
RenderSystem.pushMatrix();
|
RenderSystem.pushMatrix();
|
||||||
RenderSystem.translated(0, 0, 1 / 1024f);
|
RenderSystem.translated(0, 0, -1 / 1024f);
|
||||||
|
if (flash > 0) {
|
||||||
|
RenderSystem.pushMatrix();
|
||||||
|
RenderSystem.scaled(1, .5 + flash * .75, 1);
|
||||||
|
GuiUtils.drawGradientRect(0, 0, -1, -story.basePlateSize, 0, 0x00_c6ffc9,
|
||||||
|
ColorHelper.applyAlpha(0xaa_c6ffc9, alpha));
|
||||||
|
RenderSystem.popMatrix();
|
||||||
|
}
|
||||||
|
RenderSystem.translated(0, 0, 2 / 1024f);
|
||||||
GuiUtils.drawGradientRect(0, 0, 0, -story.basePlateSize, 4, 0x66_000000, 0x00_000000);
|
GuiUtils.drawGradientRect(0, 0, 0, -story.basePlateSize, 4, 0x66_000000, 0x00_000000);
|
||||||
RenderSystem.popMatrix();
|
RenderSystem.popMatrix();
|
||||||
RenderSystem.rotatef(-90, 0, 1, 0);
|
RenderSystem.rotatef(-90, 0, 1, 0);
|
||||||
|
@ -897,4 +932,10 @@ public class PonderUI extends NavigatableSimiScreen {
|
||||||
skipCooling = 15;
|
skipCooling = 15;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removed() {
|
||||||
|
super.removed();
|
||||||
|
SuperRenderTypeBuffer.vertexSortingOrigin = BlockPos.ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||||
import com.simibubi.create.content.schematics.SchematicWorld;
|
import com.simibubi.create.content.schematics.SchematicWorld;
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||||
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||||
|
|
||||||
|
@ -106,6 +107,7 @@ public class PonderWorld extends SchematicWorld {
|
||||||
if (originalBlocks.containsKey(p))
|
if (originalBlocks.containsKey(p))
|
||||||
blocks.put(p, originalBlocks.get(p));
|
blocks.put(p, originalBlocks.get(p));
|
||||||
});
|
});
|
||||||
|
scene.forEach(WorldSectionElement.class, WorldSectionElement::queueRedraw);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pushFakeLight(int light) {
|
public void pushFakeLight(int light) {
|
||||||
|
|
|
@ -17,18 +17,23 @@ import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
|
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.funnel.FunnelTileEntity;
|
||||||
import com.simibubi.create.foundation.ponder.content.PonderPalette;
|
import com.simibubi.create.foundation.ponder.content.PonderPalette;
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.AnimatedSceneElement;
|
||||||
import com.simibubi.create.foundation.ponder.elements.BeltItemElement;
|
import com.simibubi.create.foundation.ponder.elements.BeltItemElement;
|
||||||
import com.simibubi.create.foundation.ponder.elements.EntityElement;
|
import com.simibubi.create.foundation.ponder.elements.EntityElement;
|
||||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.MinecartElement;
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.MinecartElement.MinecartConstructor;
|
||||||
import com.simibubi.create.foundation.ponder.elements.ParrotElement;
|
import com.simibubi.create.foundation.ponder.elements.ParrotElement;
|
||||||
import com.simibubi.create.foundation.ponder.elements.ParrotElement.ParrotPose;
|
import com.simibubi.create.foundation.ponder.elements.ParrotElement.ParrotPose;
|
||||||
import com.simibubi.create.foundation.ponder.elements.ParrotElement.SpinOnComponentPose;
|
import com.simibubi.create.foundation.ponder.elements.ParrotElement.SpinOnComponentPose;
|
||||||
import com.simibubi.create.foundation.ponder.elements.TextWindowElement;
|
import com.simibubi.create.foundation.ponder.elements.TextWindowElement;
|
||||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||||
|
import com.simibubi.create.foundation.ponder.instructions.AnimateMinecartInstruction;
|
||||||
import com.simibubi.create.foundation.ponder.instructions.AnimateParrotInstruction;
|
import com.simibubi.create.foundation.ponder.instructions.AnimateParrotInstruction;
|
||||||
import com.simibubi.create.foundation.ponder.instructions.AnimateTileEntityInstruction;
|
import com.simibubi.create.foundation.ponder.instructions.AnimateTileEntityInstruction;
|
||||||
import com.simibubi.create.foundation.ponder.instructions.AnimateWorldSectionInstruction;
|
import com.simibubi.create.foundation.ponder.instructions.AnimateWorldSectionInstruction;
|
||||||
import com.simibubi.create.foundation.ponder.instructions.ChaseAABBInstruction;
|
import com.simibubi.create.foundation.ponder.instructions.ChaseAABBInstruction;
|
||||||
|
import com.simibubi.create.foundation.ponder.instructions.CreateMinecartInstruction;
|
||||||
import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction;
|
import com.simibubi.create.foundation.ponder.instructions.CreateParrotInstruction;
|
||||||
import com.simibubi.create.foundation.ponder.instructions.DelayInstruction;
|
import com.simibubi.create.foundation.ponder.instructions.DelayInstruction;
|
||||||
import com.simibubi.create.foundation.ponder.instructions.DisplayWorldSectionInstruction;
|
import com.simibubi.create.foundation.ponder.instructions.DisplayWorldSectionInstruction;
|
||||||
|
@ -177,7 +182,7 @@ public class SceneBuilder {
|
||||||
public void showBasePlate() {
|
public void showBasePlate() {
|
||||||
world.showSection(
|
world.showSection(
|
||||||
scene.getSceneBuildingUtil().select.cuboid(new BlockPos(scene.basePlateOffsetX, 0, scene.basePlateOffsetZ),
|
scene.getSceneBuildingUtil().select.cuboid(new BlockPos(scene.basePlateOffsetX, 0, scene.basePlateOffsetZ),
|
||||||
new Vec3i(scene.basePlateSize, 0, scene.basePlateSize)),
|
new Vec3i(scene.basePlateSize - 1, 0, scene.basePlateSize - 1)),
|
||||||
Direction.UP);
|
Direction.UP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,12 +333,15 @@ public class SceneBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showCenteredScrollInput(BlockPos pos, Direction side, int duration) {
|
public void showCenteredScrollInput(BlockPos pos, Direction side, int duration) {
|
||||||
|
showScrollInput(scene.getSceneBuildingUtil().vector.blockSurface(pos, side), side, duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showScrollInput(Vec3d location, Direction side, int duration) {
|
||||||
Axis axis = side.getAxis();
|
Axis axis = side.getAxis();
|
||||||
float s = 1 / 16f;
|
float s = 1 / 16f;
|
||||||
float q = 1 / 4f;
|
float q = 1 / 4f;
|
||||||
Vec3d expands = new Vec3d(axis == Axis.X ? s : q, axis == Axis.Y ? s : q, axis == Axis.Z ? s : q);
|
Vec3d expands = new Vec3d(axis == Axis.X ? s : q, axis == Axis.Y ? s : q, axis == Axis.Z ? s : q);
|
||||||
addInstruction(new HighlightValueBoxInstruction(scene.getSceneBuildingUtil().vector.blockSurface(pos, side),
|
addInstruction(new HighlightValueBoxInstruction(location, expands, duration));
|
||||||
expands, duration));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showRepeaterScrollInput(BlockPos pos, int duration) {
|
public void showRepeaterScrollInput(BlockPos pos, int duration) {
|
||||||
|
@ -359,6 +367,10 @@ public class SceneBuilder {
|
||||||
addInstruction(new OutlineSelectionInstruction(color, slot, selection, duration));
|
addInstruction(new OutlineSelectionInstruction(color, slot, selection, duration));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T extends AnimatedSceneElement> void hideElement(ElementLink<T> link, Direction direction) {
|
||||||
|
addInstruction(new FadeOutOfSceneInstruction<>(15, direction, link));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SpecialInstructions {
|
public class SpecialInstructions {
|
||||||
|
@ -402,6 +414,22 @@ public class SceneBuilder {
|
||||||
addInstruction(AnimateParrotInstruction.move(link, offset, duration));
|
addInstruction(AnimateParrotInstruction.move(link, offset, duration));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ElementLink<MinecartElement> createCart(Vec3d location, float angle, MinecartConstructor type) {
|
||||||
|
ElementLink<MinecartElement> link = new ElementLink<>(MinecartElement.class);
|
||||||
|
MinecartElement cart = new MinecartElement(location, angle, type);
|
||||||
|
addInstruction(new CreateMinecartInstruction(10, Direction.DOWN, cart));
|
||||||
|
addInstruction(scene -> scene.linkElement(cart, link));
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rotateCart(ElementLink<MinecartElement> link, float yRotation, int duration) {
|
||||||
|
addInstruction(AnimateMinecartInstruction.rotate(link, yRotation, duration));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void moveCart(ElementLink<MinecartElement> link, Vec3d offset, int duration) {
|
||||||
|
addInstruction(AnimateMinecartInstruction.move(link, offset, duration));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WorldInstructions {
|
public class WorldInstructions {
|
||||||
|
@ -445,6 +473,13 @@ public class SceneBuilder {
|
||||||
return instruction.createLink(scene);
|
return instruction.createLink(scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ElementLink<WorldSectionElement> showIndependentSectionImmediately(Selection selection) {
|
||||||
|
DisplayWorldSectionInstruction instruction =
|
||||||
|
new DisplayWorldSectionInstruction(0, Direction.DOWN, selection, Optional.empty());
|
||||||
|
addInstruction(instruction);
|
||||||
|
return instruction.createLink(scene);
|
||||||
|
}
|
||||||
|
|
||||||
public void hideSection(Selection selection, Direction fadeOutDirection) {
|
public void hideSection(Selection selection, Direction fadeOutDirection) {
|
||||||
WorldSectionElement worldSectionElement = new WorldSectionElement(selection);
|
WorldSectionElement worldSectionElement = new WorldSectionElement(selection);
|
||||||
ElementLink<WorldSectionElement> elementLink = new ElementLink<>(WorldSectionElement.class);
|
ElementLink<WorldSectionElement> elementLink = new ElementLink<>(WorldSectionElement.class);
|
||||||
|
@ -514,6 +549,10 @@ public class SceneBuilder {
|
||||||
addInstruction(AnimateTileEntityInstruction.pulley(pos, distance, duration));
|
addInstruction(AnimateTileEntityInstruction.pulley(pos, distance, duration));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void moveDeployer(BlockPos pos, float distance, int duration) {
|
||||||
|
addInstruction(AnimateTileEntityInstruction.deployer(pos, distance, duration));
|
||||||
|
}
|
||||||
|
|
||||||
public void setBlocks(Selection selection, BlockState state, boolean spawnParticles) {
|
public void setBlocks(Selection selection, BlockState state, boolean spawnParticles) {
|
||||||
addInstruction(new ReplaceBlocksInstruction(selection, $ -> state, true, spawnParticles));
|
addInstruction(new ReplaceBlocksInstruction(selection, $ -> state, true, spawnParticles));
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,534 @@
|
||||||
|
package com.simibubi.create.foundation.ponder.content;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllBlocks;
|
||||||
|
import com.simibubi.create.AllItems;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssembleRailType;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerBlock;
|
||||||
|
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.MinecartElement;
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||||
|
import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction.Emitter;
|
||||||
|
import com.simibubi.create.foundation.utility.Pointing;
|
||||||
|
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.item.minecart.ChestMinecartEntity;
|
||||||
|
import net.minecraft.entity.item.minecart.FurnaceMinecartEntity;
|
||||||
|
import net.minecraft.entity.item.minecart.MinecartEntity;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.particles.ParticleTypes;
|
||||||
|
import net.minecraft.state.properties.RailShape;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
public class CartAssemblerScenes {
|
||||||
|
|
||||||
|
public static void anchor(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("cart_assembler", "Moving Structures using Cart Assemblers");
|
||||||
|
scene.configureBasePlate(0, 0, 5);
|
||||||
|
scene.scaleSceneView(.9f);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
BlockPos assemblerPos = util.grid.at(2, 1, 2);
|
||||||
|
scene.world.setBlock(assemblerPos, Blocks.RAIL.getDefaultState(), false);
|
||||||
|
for (int z = 0; z < 5; z++) {
|
||||||
|
scene.world.showSection(util.select.position(2, 1, z), Direction.DOWN);
|
||||||
|
scene.idle(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockPos leverPos = util.grid.at(0, 1, 2);
|
||||||
|
Selection toggle = util.select.fromTo(assemblerPos, leverPos);
|
||||||
|
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.overlay
|
||||||
|
.showControls(new InputWindowElement(util.vector.centerOf(assemblerPos), Pointing.DOWN).rightClick()
|
||||||
|
.withItem(AllBlocks.CART_ASSEMBLER.asStack()), 30);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.world.setBlock(assemblerPos, AllBlocks.CART_ASSEMBLER.getDefaultState()
|
||||||
|
.with(CartAssemblerBlock.RAIL_SHAPE, RailShape.NORTH_SOUTH)
|
||||||
|
.with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true);
|
||||||
|
scene.idle(20);
|
||||||
|
scene.world.showSection(util.select.fromTo(0, 1, 2, 1, 1, 2), Direction.EAST);
|
||||||
|
scene.idle(20);
|
||||||
|
scene.world.toggleRedstonePower(toggle);
|
||||||
|
scene.effects.indicateRedstone(leverPos);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.overlay.showText(70)
|
||||||
|
.text("Powered Cart Assemblers mount attached structures to passing Minecarts")
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.topOf(assemblerPos))
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.idle(80);
|
||||||
|
|
||||||
|
ElementLink<MinecartElement> cart =
|
||||||
|
scene.special.createCart(util.vector.topOf(2, 0, 4), 90, MinecartEntity::new);
|
||||||
|
scene.world.showSection(util.select.position(assemblerPos.up()), Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20);
|
||||||
|
scene.idle(20);
|
||||||
|
ElementLink<WorldSectionElement> plank =
|
||||||
|
scene.world.makeSectionIndependent(util.select.position(assemblerPos.up()));
|
||||||
|
ElementLink<WorldSectionElement> anchor =
|
||||||
|
scene.world.showIndependentSectionImmediately(util.select.position(assemblerPos.east()));
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-1, 0, 0), 0);
|
||||||
|
scene.effects.indicateSuccess(assemblerPos);
|
||||||
|
scene.idle(1);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 0, -2), 20);
|
||||||
|
scene.world.moveSection(plank, util.vector.of(0, 0, -2), 20);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.world.toggleRedstonePower(toggle);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.overlay.showText(70)
|
||||||
|
.text("Without a redstone signal, it disassembles passing cart contraptions back into blocks")
|
||||||
|
.colored(PonderPalette.RED)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.topOf(assemblerPos))
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.idle(80);
|
||||||
|
|
||||||
|
scene.world.rotateSection(anchor, 0, 180, 0, 6);
|
||||||
|
scene.world.rotateSection(plank, 0, 180, 0, 6);
|
||||||
|
scene.idle(3);
|
||||||
|
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 0, 2), 20);
|
||||||
|
scene.world.moveSection(plank, util.vector.of(0, 0, 2), 20);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 0, 2), 20);
|
||||||
|
scene.idle(21);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, -2, 0), 0);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 0, 2), 20);
|
||||||
|
scene.idle(30);
|
||||||
|
|
||||||
|
scene.world.destroyBlock(assemblerPos.up());
|
||||||
|
scene.idle(5);
|
||||||
|
ElementLink<WorldSectionElement> contraption =
|
||||||
|
scene.world.showIndependentSection(util.select.fromTo(1, 4, 2, 3, 3, 2), Direction.DOWN);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(0, -1, 0), 0);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.showSectionAndMerge(util.select.position(3, 3, 1), Direction.SOUTH, contraption);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.effects.superGlue(util.grid.at(3, 2, 1), Direction.SOUTH, true);
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.sharedText("movement_anchors")
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(1, 3, 2), Direction.NORTH))
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.idle(80);
|
||||||
|
scene.world.toggleRedstonePower(toggle);
|
||||||
|
scene.effects.indicateRedstone(leverPos);
|
||||||
|
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20);
|
||||||
|
scene.idle(20);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 2, 0), 0);
|
||||||
|
scene.idle(1);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 0, -2), 20);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(0, 0, -2), 20);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 0, -2), 20);
|
||||||
|
scene.idle(25);
|
||||||
|
|
||||||
|
Vec3d cartCenter = util.vector.centerOf(assemblerPos.north(2));
|
||||||
|
scene.overlay.showControls(new InputWindowElement(cartCenter, Pointing.LEFT).rightClick()
|
||||||
|
.withWrench(), 40);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, -100, 4), 0);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, -100, 4), 0);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(0, -100, 4), 0);
|
||||||
|
ItemStack asStack = AllItems.MINECART_CONTRAPTION.asStack();
|
||||||
|
ElementLink<EntityElement> itemEntity =
|
||||||
|
scene.world.createItemEntity(cartCenter, util.vector.of(0, .1, 0), asStack);
|
||||||
|
scene.idle(40);
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.text("Using a Wrench on the Minecart will let you carry the Contraption elsewhere")
|
||||||
|
.pointAt(cartCenter)
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.idle(80);
|
||||||
|
scene.world.modifyEntity(itemEntity, Entity::remove);
|
||||||
|
|
||||||
|
scene.overlay.showControls(new InputWindowElement(cartCenter.add(0, 0, 4), Pointing.DOWN).rightClick()
|
||||||
|
.withItem(asStack), 20);
|
||||||
|
scene.idle(20);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 100.5, 0), 0);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 100.5, 0), 0);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(0, 100.5, 0), 0);
|
||||||
|
scene.idle(1);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, -.5, 0), 5);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, -.5, 0), 5);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(0, -.5, 0), 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void modes(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("cart_assembler_modes", "Orientation Settings for Minecart Contraptions");
|
||||||
|
scene.configureBasePlate(0, 0, 5);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
for (int z = 0; z < 4; z++) {
|
||||||
|
scene.world.showSection(util.select.position(1, 1, z), Direction.DOWN);
|
||||||
|
scene.idle(2);
|
||||||
|
}
|
||||||
|
for (int x = 2; x < 5; x++) {
|
||||||
|
scene.world.showSection(util.select.position(x, 1, 3), Direction.DOWN);
|
||||||
|
scene.idle(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockPos assemblerPos = util.grid.at(3, 1, 3);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.setBlock(assemblerPos, AllBlocks.CART_ASSEMBLER.getDefaultState()
|
||||||
|
.with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST)
|
||||||
|
.with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(util.select.fromTo(3, 1, 1, 3, 1, 2), Direction.SOUTH);
|
||||||
|
ElementLink<WorldSectionElement> contraption =
|
||||||
|
scene.world.showIndependentSection(util.select.position(3, 2, 3), Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.glueBlockOnto(util.grid.at(2, 2, 3), Direction.EAST, contraption);
|
||||||
|
scene.world.toggleRedstonePower(util.select.fromTo(3, 1, 1, 3, 1, 3));
|
||||||
|
scene.effects.indicateRedstone(util.grid.at(3, 1, 1));
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
ElementLink<MinecartElement> cart =
|
||||||
|
scene.special.createCart(util.vector.topOf(util.grid.at(4, 0, 3)), 0, MinecartEntity::new);
|
||||||
|
scene.idle(20);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-1, 0, 0), 10);
|
||||||
|
scene.idle(10);
|
||||||
|
ElementLink<WorldSectionElement> anchor =
|
||||||
|
scene.world.showIndependentSectionImmediately(util.select.position(assemblerPos.south()));
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 0, -1), 0);
|
||||||
|
scene.idle(1);
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(util.select.position(2, 2, 3), 32);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-1.5, 0, 0), 15);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-1.5, 0, 0), 15);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-1.5, 0, 0), 15);
|
||||||
|
scene.idle(16);
|
||||||
|
scene.special.rotateCart(cart, -45, 2);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-.5, 0, -.5), 8);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-.5, 0, -.5), 8);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-.5, 0, -.5), 8);
|
||||||
|
scene.world.rotateSection(anchor, 0, -90, 0, 12);
|
||||||
|
scene.world.rotateSection(contraption, 0, -90, 0, 12);
|
||||||
|
scene.idle(9);
|
||||||
|
scene.special.rotateCart(cart, -45, 2);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 0, -1.5), 15);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 0, -1.5), 15);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(0, 0, -1.5), 15);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.setKineticSpeed(util.select.position(2, 2, 3), 0);
|
||||||
|
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.text("Cart Contraptions will rotate to face towards their carts' motion")
|
||||||
|
.pointAt(util.vector.of(1.5, 2.5, 0))
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.idle(90);
|
||||||
|
|
||||||
|
scene.world.hideIndependentSection(contraption, Direction.UP);
|
||||||
|
scene.world.hideIndependentSection(anchor, Direction.UP);
|
||||||
|
scene.overlay.hideElement(cart, Direction.UP);
|
||||||
|
scene.idle(25);
|
||||||
|
|
||||||
|
Vec3d blockSurface = util.vector.blockSurface(assemblerPos, Direction.NORTH)
|
||||||
|
.add(0, 0, -2 / 16f);
|
||||||
|
scene.overlay.showScrollInput(blockSurface, Direction.NORTH, 60);
|
||||||
|
scene.overlay.showControls(new InputWindowElement(blockSurface, Pointing.DOWN).scroll()
|
||||||
|
.withWrench(), 60);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.pointAt(util.vector.of(3, 1.5, 3))
|
||||||
|
.placeNearTarget()
|
||||||
|
.sharedText("behaviour_modify_wrench");
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
contraption = scene.world.showIndependentSection(util.select.fromTo(3, 2, 3, 2, 2, 3), Direction.DOWN);
|
||||||
|
cart = scene.special.createCart(util.vector.topOf(util.grid.at(4, 0, 3)), 0, MinecartEntity::new);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-1, 0, 0), 10);
|
||||||
|
scene.idle(10);
|
||||||
|
anchor = scene.world.showIndependentSectionImmediately(util.select.position(assemblerPos.south()));
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 0, -1), 0);
|
||||||
|
scene.idle(1);
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(util.select.position(2, 2, 3), 32);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-1.5, 0, 0), 15);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-1.5, 0, 0), 15);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-1.5, 0, 0), 15);
|
||||||
|
scene.idle(16);
|
||||||
|
scene.special.rotateCart(cart, -45, 2);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-.5, 0, -.5), 8);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-.5, 0, -.5), 8);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-.5, 0, -.5), 8);
|
||||||
|
scene.idle(9);
|
||||||
|
scene.special.rotateCart(cart, -45, 2);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(0, 0, -1.5), 15);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 0, -1.5), 15);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(0, 0, -1.5), 15);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.setKineticSpeed(util.select.position(2, 2, 3), 0);
|
||||||
|
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.text("If the Assembler is set to Lock Rotation, the contraptions' orientation will never change")
|
||||||
|
.pointAt(util.vector.of(0, 2.5, 1.5))
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.idle(90);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void dual(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("cart_assembler_dual", "Assembling Carriage Contraptions");
|
||||||
|
scene.configureBasePlate(0, 0, 6);
|
||||||
|
scene.scaleSceneView(.9f);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
for (int z = 0; z < 5; z++) {
|
||||||
|
scene.world.showSection(util.select.position(1, 1, z), Direction.DOWN);
|
||||||
|
scene.idle(2);
|
||||||
|
}
|
||||||
|
for (int x = 2; x < 6; x++) {
|
||||||
|
scene.world.showSection(util.select.position(x, 1, 4), Direction.DOWN);
|
||||||
|
scene.idle(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockPos assembler1 = util.grid.at(2, 1, 4);
|
||||||
|
BlockPos assembler2 = util.grid.at(5, 1, 4);
|
||||||
|
Selection chassis = util.select.fromTo(5, 2, 4, 2, 2, 4);
|
||||||
|
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(util.select.fromTo(2, 1, 3, 2, 1, 2), Direction.SOUTH);
|
||||||
|
scene.idle(5);
|
||||||
|
ElementLink<MinecartElement> cart =
|
||||||
|
scene.special.createCart(util.vector.topOf(assembler1.down()), 0, MinecartEntity::new);
|
||||||
|
ElementLink<MinecartElement> cart2 =
|
||||||
|
scene.special.createCart(util.vector.topOf(assembler2.down()), 0, ChestMinecartEntity::new);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.setBlock(assembler1, AllBlocks.CART_ASSEMBLER.getDefaultState()
|
||||||
|
.with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST)
|
||||||
|
.with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.CONTROLLER_RAIL), true);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.setBlock(assembler2, AllBlocks.CART_ASSEMBLER.getDefaultState()
|
||||||
|
.with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST)
|
||||||
|
.with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true);
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
ElementLink<WorldSectionElement> contraption = scene.world.showIndependentSection(chassis, Direction.DOWN);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.overlay.showOutline(PonderPalette.GREEN, new Object(), util.select.position(assembler2), 60);
|
||||||
|
scene.overlay.showSelectionWithText(util.select.position(assembler1), 60)
|
||||||
|
.colored(PonderPalette.GREEN)
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(2, 2, 4), Direction.NORTH))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("Whenever two Cart Assembers share an attached structure...")
|
||||||
|
.attachKeyFrame();
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(2, 1, 4), Direction.NORTH))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("Powering either of them will create a Carriage Contraption");
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
scene.effects.indicateRedstone(util.grid.at(2, 1, 2));
|
||||||
|
scene.world.toggleRedstonePower(util.select.fromTo(2, 1, 2, 2, 1, 4));
|
||||||
|
ElementLink<WorldSectionElement> anchors =
|
||||||
|
scene.world.showIndependentSectionImmediately(util.select.fromTo(assembler1.south(), assembler2.south()));
|
||||||
|
scene.world.moveSection(anchors, util.vector.of(0, 0, -1), 0);
|
||||||
|
scene.world.configureCenterOfRotation(anchors, util.vector.centerOf(util.grid.at(2, 2, 5)));
|
||||||
|
scene.world.configureCenterOfRotation(contraption, util.vector.centerOf(util.grid.at(2, 2, 4)));
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
Vec3d m = util.vector.of(-0.5, 0, 0);
|
||||||
|
scene.special.moveCart(cart, m, 5);
|
||||||
|
scene.special.moveCart(cart2, m, 5);
|
||||||
|
scene.world.moveSection(contraption, m, 5);
|
||||||
|
scene.world.moveSection(anchors, m, 5);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.special.rotateCart(cart, -45, 2);
|
||||||
|
scene.special.moveCart(cart2, util.vector.of(-.3, 0, 0), 8);
|
||||||
|
m = util.vector.of(-.5, 0, -.5);
|
||||||
|
scene.special.moveCart(cart, m, 8);
|
||||||
|
scene.world.moveSection(anchors, m, 8);
|
||||||
|
scene.world.moveSection(contraption, m, 8);
|
||||||
|
scene.world.rotateSection(anchors, 0, -10, 0, 8);
|
||||||
|
scene.world.rotateSection(contraption, 0, -10, 0, 8);
|
||||||
|
scene.idle(8);
|
||||||
|
scene.special.rotateCart(cart, -45, 2);
|
||||||
|
scene.special.moveCart(cart2, util.vector.of(-.4, 0, 0), 5);
|
||||||
|
m = util.vector.of(0, 0, -3.5);
|
||||||
|
scene.special.moveCart(cart, m, 25);
|
||||||
|
scene.world.moveSection(anchors, m, 25);
|
||||||
|
scene.world.moveSection(contraption, m, 25);
|
||||||
|
scene.world.rotateSection(anchors, 0, -33, 0, 10);
|
||||||
|
scene.world.rotateSection(contraption, 0, -33, 0, 10);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.special.moveCart(cart2, util.vector.of(-0.8, 0, 0), 5);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.special.moveCart(cart2, util.vector.of(-1.5, 0, 0), 9);
|
||||||
|
scene.world.rotateSection(anchors, 0, -42, 0, 9);
|
||||||
|
scene.world.rotateSection(contraption, 0, -42, 0, 9);
|
||||||
|
scene.idle(9);
|
||||||
|
m = util.vector.of(-.5, 0, -.5);
|
||||||
|
scene.special.moveCart(cart2, m, 2);
|
||||||
|
scene.special.rotateCart(cart2, -45, 2);
|
||||||
|
scene.world.rotateSection(anchors, 0, -5, 0, 5);
|
||||||
|
scene.world.rotateSection(contraption, 0, -5, 0, 5);
|
||||||
|
scene.idle(2);
|
||||||
|
scene.special.moveCart(cart2, util.vector.of(0, 0, -.5), 5);
|
||||||
|
scene.special.rotateCart(cart2, -45, 2);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.overlay.showText(70)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(1, 1, 3), Direction.WEST))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("The carts will behave like those connected via Minecart Coupling");
|
||||||
|
scene.idle(80);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void rails(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("cart_assembler_rails", "Other types of Minecarts and Rails");
|
||||||
|
scene.configureBasePlate(0, 0, 6);
|
||||||
|
scene.scaleSceneView(.9f);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
for (int x = 0; x < 6; x++) {
|
||||||
|
scene.world.showSection(util.select.position(x, 1, 3), Direction.DOWN);
|
||||||
|
scene.idle(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockPos assembler = util.grid.at(3, 1, 3);
|
||||||
|
|
||||||
|
Selection chassis = util.select.fromTo(4, 2, 3, 2, 2, 3);
|
||||||
|
|
||||||
|
scene.idle(5);
|
||||||
|
scene.overlay.showText(70)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.blockSurface(assembler, Direction.DOWN))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("Cart Assemblers on Regular Tracks will not affect the passing carts' motion");
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.setBlock(assembler, AllBlocks.CART_ASSEMBLER.getDefaultState()
|
||||||
|
.with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST)
|
||||||
|
.with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.REGULAR), true);
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
ElementLink<MinecartElement> cart = scene.special.createCart(util.vector.topOf(assembler.east(2)
|
||||||
|
.down()), 0, MinecartEntity::new);
|
||||||
|
ElementLink<WorldSectionElement> anchor =
|
||||||
|
scene.world.showIndependentSection(util.select.position(assembler.south()), Direction.DOWN);
|
||||||
|
ElementLink<WorldSectionElement> contraption =
|
||||||
|
scene.world.showIndependentSection(util.select.position(assembler.south()
|
||||||
|
.up()), Direction.DOWN);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(2, 0, -1), 0);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(2, 0, -1), 0);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 10);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-2, 0, 0), 10);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-5, 0, 0), 25);
|
||||||
|
scene.idle(30);
|
||||||
|
scene.overlay.hideElement(cart, Direction.UP);
|
||||||
|
scene.world.hideIndependentSection(contraption, Direction.UP);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, -3, 0), 0);
|
||||||
|
scene.idle(30);
|
||||||
|
|
||||||
|
scene.overlay.showControls(new InputWindowElement(util.vector.topOf(assembler), Pointing.DOWN)
|
||||||
|
.withItem(new ItemStack(Items.POWERED_RAIL)), 50);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.world.setBlock(assembler, AllBlocks.CART_ASSEMBLER.getDefaultState()
|
||||||
|
.with(CartAssemblerBlock.RAIL_SHAPE, RailShape.EAST_WEST)
|
||||||
|
.with(CartAssemblerBlock.RAIL_TYPE, CartAssembleRailType.POWERED_RAIL), true);
|
||||||
|
scene.overlay.showText(100)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.topOf(assembler))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("When on Powered or Controller Rail, the carts will be held in place until it's Powered");
|
||||||
|
scene.idle(110);
|
||||||
|
|
||||||
|
scene.world.hideIndependentSection(anchor, Direction.DOWN);
|
||||||
|
cart = scene.special.createCart(util.vector.topOf(assembler.east(2)
|
||||||
|
.down()), 0, MinecartEntity::new);
|
||||||
|
anchor = scene.world.showIndependentSection(util.select.position(assembler.south()), Direction.DOWN);
|
||||||
|
contraption = scene.world.showIndependentSection(util.select.position(assembler.south()
|
||||||
|
.up()), Direction.DOWN);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(2, 0, -1), 0);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(2, 0, -1), 0);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 10);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-2, 0, 0), 10);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-2, 0, 0), 10);
|
||||||
|
scene.world.showSection(util.select.fromTo(3, 1, 1, 3, 1, 2), Direction.SOUTH);
|
||||||
|
scene.idle(30);
|
||||||
|
|
||||||
|
scene.world.toggleRedstonePower(util.select.fromTo(3, 1, 1, 3, 1, 3));
|
||||||
|
scene.effects.indicateRedstone(util.grid.at(3, 1, 1));
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-3, 0, 0), 15);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-3, 0, 0), 15);
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-3, 0, 0), 15);
|
||||||
|
|
||||||
|
scene.idle(30);
|
||||||
|
scene.overlay.hideElement(cart, Direction.UP);
|
||||||
|
scene.world.hideIndependentSection(anchor, Direction.UP);
|
||||||
|
scene.world.hideIndependentSection(contraption, Direction.UP);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
cart = scene.special.createCart(util.vector.topOf(assembler.east(2)
|
||||||
|
.down()), 0, FurnaceMinecartEntity::new);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.overlay.showText(50)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.topOf(assembler.east(2)))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("Other types of Minecarts can be used as the anchor");
|
||||||
|
scene.idle(50);
|
||||||
|
contraption = scene.world.showIndependentSection(chassis, Direction.DOWN);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.glueBlockOnto(assembler.up(2), Direction.DOWN, contraption);
|
||||||
|
scene.idle(15);
|
||||||
|
|
||||||
|
scene.overlay.showControls(new InputWindowElement(util.vector.topOf(assembler.up()), Pointing.UP)
|
||||||
|
.withItem(new ItemStack(Items.CHARCOAL)), 40);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.pointAt(util.vector.blockSurface(assembler.up(2), Direction.WEST))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("Furnace Carts will keep themselves powered, pulling fuel from any attached inventories");
|
||||||
|
scene.idle(85);
|
||||||
|
|
||||||
|
Emitter smoke = Emitter.simple(ParticleTypes.LARGE_SMOKE, util.vector.of(0, 0, 0));
|
||||||
|
|
||||||
|
scene.special.moveCart(cart, util.vector.of(-5, 0, 0), 50);
|
||||||
|
scene.idle(20);
|
||||||
|
anchor = scene.world.showIndependentSectionImmediately(util.select.position(assembler.south()));
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(0, 0, -1), 0);
|
||||||
|
scene.idle(1);
|
||||||
|
scene.world.setKineticSpeed(util.select.position(2, 2, 3), 32);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-3, 0, 0), 30);
|
||||||
|
scene.world.moveSection(anchor, util.vector.of(-3, 0, 0), 30);
|
||||||
|
|
||||||
|
Vec3d vec = util.vector.centerOf(assembler)
|
||||||
|
.add(.25, .25, -0.5);
|
||||||
|
for (int i = 0; i < 7; i++) {
|
||||||
|
scene.effects.emitParticles(vec = vec.add(-.5, 0, 0), smoke, 2, 1);
|
||||||
|
scene.idle(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(util.select.position(2, 2, 3), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,460 @@
|
||||||
|
package com.simibubi.create.foundation.ponder.content;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity;
|
||||||
|
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.ponder.instructions.EmitParticlesInstruction.Emitter;
|
||||||
|
import com.simibubi.create.foundation.utility.Pointing;
|
||||||
|
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.entity.EntityType;
|
||||||
|
import net.minecraft.entity.passive.SheepEntity;
|
||||||
|
import net.minecraft.item.DyeColor;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.particles.BlockParticleData;
|
||||||
|
import net.minecraft.particles.ParticleTypes;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
public class DeployerScenes {
|
||||||
|
|
||||||
|
public static void filter(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("deployer", "Using the Deployer");
|
||||||
|
scene.configureBasePlate(0, 0, 5);
|
||||||
|
|
||||||
|
BlockPos potPosition = util.grid.at(1, 1, 2);
|
||||||
|
BlockPos deployerPos = util.grid.at(3, 1, 2);
|
||||||
|
Selection deployerSelection = util.select.position(deployerPos);
|
||||||
|
|
||||||
|
scene.world.setBlock(potPosition, Blocks.AIR.getDefaultState(), false);
|
||||||
|
scene.world.showSection(util.select.layer(0)
|
||||||
|
.add(util.select.position(1, 1, 2)), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(util.select.fromTo(3, 1, 3, 3, 1, 5), Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.world.showSection(deployerSelection, Direction.SOUTH);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.topOf(deployerPos))
|
||||||
|
.text("Given Rotational Force, a Deployer can imitate player interactions");
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
scene.idle(44);
|
||||||
|
|
||||||
|
scene.overlay.showSelectionWithText(util.select.position(deployerPos.west(2)), 60)
|
||||||
|
.text("It will always interact with the position 2 blocks in front of itself")
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.colored(PonderPalette.GREEN)
|
||||||
|
.attachKeyFrame();
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
scene.idle(20);
|
||||||
|
scene.world.showSection(util.select.fromTo(2, 1, 3, 2, 1, 1), Direction.DOWN);
|
||||||
|
scene.idle(24);
|
||||||
|
|
||||||
|
scene.overlay.showText(50)
|
||||||
|
.pointAt(util.vector.topOf(deployerPos.west()))
|
||||||
|
.text("Blocks directly in front will not obstruct it")
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
scene.idle(34);
|
||||||
|
scene.world.hideSection(util.select.fromTo(2, 1, 3, 2, 1, 1), Direction.UP);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
String[] actions =
|
||||||
|
new String[] { "Place Blocks,", "Use Items,", "Activate Blocks,", "Harvest blocks", "and Attack Mobs" };
|
||||||
|
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.independent(40)
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("Deployers can:");
|
||||||
|
|
||||||
|
int y = 60;
|
||||||
|
for (String s : actions) {
|
||||||
|
scene.idle(15);
|
||||||
|
scene.overlay.showText(50)
|
||||||
|
.colored(PonderPalette.MEDIUM)
|
||||||
|
.placeNearTarget()
|
||||||
|
.independent(y)
|
||||||
|
.text(s);
|
||||||
|
y += 16;
|
||||||
|
}
|
||||||
|
scene.idle(50);
|
||||||
|
|
||||||
|
ItemStack pot = new ItemStack(Items.FLOWER_POT);
|
||||||
|
Vec3d frontVec = util.vector.blockSurface(deployerPos, Direction.WEST)
|
||||||
|
.add(-.125, 0, 0);
|
||||||
|
|
||||||
|
scene.overlay.showControls(new InputWindowElement(frontVec, Pointing.DOWN).rightClick()
|
||||||
|
.withItem(pot), 40);
|
||||||
|
scene.idle(7);
|
||||||
|
Class<DeployerTileEntity> teType = DeployerTileEntity.class;
|
||||||
|
scene.world.modifyTileNBT(deployerSelection, teType, nbt -> nbt.put("HeldItem", pot.serializeNBT()));
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.overlay.showText(40)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(frontVec)
|
||||||
|
.text("Right-click the front to give it an Item to use");
|
||||||
|
scene.idle(40);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.restoreBlocks(util.select.position(potPosition));
|
||||||
|
scene.world.modifyTileNBT(deployerSelection, teType,
|
||||||
|
nbt -> nbt.put("HeldItem", ItemStack.EMPTY.serializeNBT()));
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.world.showSection(util.select.position(deployerPos.up()), Direction.DOWN);
|
||||||
|
|
||||||
|
ItemStack tulip = new ItemStack(Items.RED_TULIP);
|
||||||
|
Vec3d entitySpawn = util.vector.topOf(deployerPos.up(3));
|
||||||
|
|
||||||
|
ElementLink<EntityElement> entity1 =
|
||||||
|
scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), tulip);
|
||||||
|
scene.idle(17);
|
||||||
|
scene.world.modifyEntity(entity1, Entity::remove);
|
||||||
|
scene.world.modifyTileNBT(deployerSelection, teType, nbt -> nbt.put("HeldItem", tulip.serializeNBT()));
|
||||||
|
scene.idle(10);
|
||||||
|
scene.overlay.showText(40)
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.of(3, 2.5, 3))
|
||||||
|
.text("Items can also be inserted automatically");
|
||||||
|
scene.idle(30);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.setBlock(potPosition, Blocks.POTTED_RED_TULIP.getDefaultState(), false);
|
||||||
|
scene.world.modifyTileNBT(deployerSelection, teType,
|
||||||
|
nbt -> nbt.put("HeldItem", ItemStack.EMPTY.serializeNBT()));
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
scene.idle(25);
|
||||||
|
scene.world.hideSection(util.select.position(potPosition), Direction.UP);
|
||||||
|
scene.world.hideSection(util.select.position(deployerPos.up()), Direction.EAST);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
Vec3d filterSlot = frontVec.add(0.375, 0.25, 0);
|
||||||
|
scene.overlay.showFilterSlotInput(filterSlot, 80);
|
||||||
|
scene.overlay.showText(40)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(filterSlot)
|
||||||
|
.text("Deployers carry a filter slot");
|
||||||
|
scene.idle(50);
|
||||||
|
|
||||||
|
ItemStack shears = new ItemStack(Items.SHEARS);
|
||||||
|
|
||||||
|
scene.overlay.showControls(new InputWindowElement(filterSlot, Pointing.DOWN).rightClick()
|
||||||
|
.withItem(shears), 40);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.world.setFilterData(deployerSelection, teType, shears);
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(filterSlot)
|
||||||
|
.text("When a filter is set, it activates only while holding a matching item");
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
ElementLink<EntityElement> sheep = scene.world.createEntity(w -> {
|
||||||
|
SheepEntity entity = EntityType.SHEEP.create(w);
|
||||||
|
entity.setFleeceColor(DyeColor.PINK);
|
||||||
|
Vec3d p = util.vector.topOf(util.grid.at(1, 0, 2));
|
||||||
|
entity.setPosition(p.x, p.y, p.z);
|
||||||
|
entity.prevPosX = p.x;
|
||||||
|
entity.prevPosY = p.y;
|
||||||
|
entity.prevPosZ = p.z;
|
||||||
|
entity.limbSwing = 0;
|
||||||
|
entity.prevRotationYaw = 210;
|
||||||
|
entity.rotationYaw = 210;
|
||||||
|
entity.prevRotationYawHead = 210;
|
||||||
|
entity.rotationYawHead = 210;
|
||||||
|
return entity;
|
||||||
|
});
|
||||||
|
scene.idle(20);
|
||||||
|
scene.world.showSection(util.select.position(deployerPos.up()), Direction.WEST);
|
||||||
|
entity1 = scene.world.createItemEntity(entitySpawn, util.vector.of(0, 0.2, 0), shears);
|
||||||
|
scene.idle(17);
|
||||||
|
scene.world.modifyEntity(entity1, Entity::remove);
|
||||||
|
scene.world.modifyTileNBT(deployerSelection, teType, nbt -> nbt.put("HeldItem", shears.serializeNBT()));
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.of(3, 2.5, 3))
|
||||||
|
.text("Only items matching the filter can now be inserted...");
|
||||||
|
|
||||||
|
scene.idle(70);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.modifyEntity(sheep, e -> ((SheepEntity) e).setSheared(true));
|
||||||
|
scene.effects.emitParticles(util.vector.topOf(deployerPos.west(2))
|
||||||
|
.add(0, -.25, 0),
|
||||||
|
Emitter.withinBlockSpace(new BlockParticleData(ParticleTypes.BLOCK, Blocks.PINK_WOOL.getDefaultState()),
|
||||||
|
util.vector.of(0, 0, 0)),
|
||||||
|
25, 1);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
scene.world.showSection(util.select.position(deployerPos.north()), Direction.SOUTH);
|
||||||
|
scene.idle(25);
|
||||||
|
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.of(3.5, 1.25, 1.25))
|
||||||
|
.text("...and only non-matching items will be extracted");
|
||||||
|
scene.world.flapFunnel(deployerPos.north(), true);
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(deployerPos.north())
|
||||||
|
.subtract(0, .45, 0), util.vector.of(0, 0, -0.1), new ItemStack(Items.PINK_WOOL));
|
||||||
|
|
||||||
|
scene.markAsFinished();
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void modes(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("deployer_modes", "Modes of the Deployer");
|
||||||
|
scene.configureBasePlate(0, 0, 5);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(util.select.fromTo(3, 1, 3, 3, 1, 5), Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
BlockPos deployerPos = util.grid.at(3, 1, 2);
|
||||||
|
Vec3d frontVec = util.vector.blockSurface(deployerPos, Direction.WEST)
|
||||||
|
.add(-.125, 0, 0);
|
||||||
|
Selection grassBlock = util.select.position(1, 1, 2);
|
||||||
|
|
||||||
|
Selection deployerSelection = util.select.position(deployerPos);
|
||||||
|
scene.world.showSection(deployerSelection, Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.showSection(grassBlock, Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
ItemStack tool = new ItemStack(Items.GOLDEN_HOE);
|
||||||
|
scene.overlay.showControls(new InputWindowElement(util.vector.topOf(deployerPos), Pointing.DOWN).withItem(tool),
|
||||||
|
30);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.world.modifyTileNBT(deployerSelection, DeployerTileEntity.class,
|
||||||
|
nbt -> nbt.put("HeldItem", tool.serializeNBT()));
|
||||||
|
scene.idle(45);
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(util.select.position(2, 0, 5), 16);
|
||||||
|
scene.world.setKineticSpeed(util.select.layer(1), -32);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.topOf(1, 1, 2))
|
||||||
|
.text("By default, a Deployer imitates a Right-click interaction");
|
||||||
|
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.replaceBlocks(grassBlock, Blocks.FARMLAND.getDefaultState(), false);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
scene.idle(46);
|
||||||
|
|
||||||
|
scene.overlay.showControls(new InputWindowElement(frontVec, Pointing.LEFT).rightClick()
|
||||||
|
.withWrench(), 40);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.world.modifyTileNBT(deployerSelection, DeployerTileEntity.class, nbt -> nbt.putString("Mode", "PUNCH"));
|
||||||
|
scene.idle(45);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.topOf(1, 1, 2))
|
||||||
|
.text("Using a Wrench, it can be set to imitate a Left-click instead");
|
||||||
|
|
||||||
|
BlockPos breakingPos = deployerPos.west(2);
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 25);
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.incrementBlockBreakingProgress(breakingPos);
|
||||||
|
scene.world.incrementBlockBreakingProgress(breakingPos);
|
||||||
|
scene.world.incrementBlockBreakingProgress(breakingPos);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 25);
|
||||||
|
if (i == 3)
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(breakingPos), util.vector.of(0, 0, 0),
|
||||||
|
new ItemStack(Blocks.DIRT));
|
||||||
|
scene.idle(26);
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
scene.markAsFinished();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void redstone(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("deployer_redstone", "Controlling Deployers with Redstone");
|
||||||
|
scene.configureBasePlate(0, 0, 5);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(util.select.fromTo(3, 1, 5, 3, 1, 3), Direction.DOWN);
|
||||||
|
|
||||||
|
BlockPos deployerPos = util.grid.at(3, 1, 3);
|
||||||
|
Selection redstone = util.select.fromTo(3, 1, 1, 3, 1, 2);
|
||||||
|
BlockPos leverPos = util.grid.at(3, 1, 1);
|
||||||
|
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
|
||||||
|
scene.idle(26);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 30);
|
||||||
|
scene.idle(31);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 30);
|
||||||
|
scene.world.showSection(redstone, Direction.SOUTH);
|
||||||
|
scene.idle(31);
|
||||||
|
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
scene.effects.indicateRedstone(leverPos);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.colored(PonderPalette.RED)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.topOf(deployerPos))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("When powered by Redstone, Deployers will not activate");
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1f, 30);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
scene.effects.indicateRedstone(leverPos);
|
||||||
|
scene.idle(21);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.pointAt(util.vector.topOf(deployerPos))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("Before stopping, the Deployer will finish any started cycles");
|
||||||
|
|
||||||
|
scene.world.moveDeployer(deployerPos, -1f, 30);
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
scene.idle(3);
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
scene.effects.indicateRedstone(leverPos);
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 30);
|
||||||
|
scene.overlay.showText(100)
|
||||||
|
.colored(PonderPalette.GREEN)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.topOf(deployerPos))
|
||||||
|
.placeNearTarget()
|
||||||
|
.text("Thus, a negative pulse can be used to trigger exactly one activation cycle");
|
||||||
|
scene.idle(31);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 30);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void contraption(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("deployer_contraption", "Using Deployers on Contraptions");
|
||||||
|
scene.configureBasePlate(0, 0, 6);
|
||||||
|
scene.scaleSceneView(.9f);
|
||||||
|
Selection flowers = util.select.fromTo(4, 1, 1, 1, 1, 1);
|
||||||
|
scene.world.replaceBlocks(flowers, Blocks.AIR.getDefaultState(), false);
|
||||||
|
|
||||||
|
Selection kinetics = util.select.fromTo(5, 1, 6, 5, 1, 3);
|
||||||
|
BlockPos deployerPos = util.grid.at(4, 1, 3);
|
||||||
|
Selection deployerSelection = util.select.position(deployerPos);
|
||||||
|
|
||||||
|
scene.world.showSection(util.select.layer(0)
|
||||||
|
.add(flowers), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
ElementLink<WorldSectionElement> pistonHead =
|
||||||
|
scene.world.showIndependentSection(util.select.fromTo(5, 1, 2, 8, 1, 2), Direction.DOWN);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(0, 0, 1), 0);
|
||||||
|
scene.world.showSection(kinetics, Direction.DOWN);
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
ElementLink<WorldSectionElement> contraption =
|
||||||
|
scene.world.showIndependentSection(deployerSelection, Direction.DOWN);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.glueBlockOnto(util.grid.at(4, 2, 3), Direction.DOWN, contraption);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.blockSurface(deployerPos, Direction.WEST))
|
||||||
|
.text("Whenever Deployers are moved as part of an animated Contraption...");
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(util.select.position(4, 0, 6), -8);
|
||||||
|
scene.world.setKineticSpeed(kinetics, 16);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(-3, 0, 0), 100);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-3, 0, 0), 100);
|
||||||
|
|
||||||
|
for (int x = 0; x < 4; x++) {
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 9);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 9);
|
||||||
|
scene.world.restoreBlocks(util.select.position(4 - x, 1, 1));
|
||||||
|
scene.idle(18);
|
||||||
|
}
|
||||||
|
|
||||||
|
scene.overlay.showSelectionWithText(flowers, 90)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.colored(PonderPalette.GREEN)
|
||||||
|
.text("They activate at each visited location, using items from inventories anywhere on the contraption");
|
||||||
|
scene.idle(100);
|
||||||
|
|
||||||
|
scene.world.hideSection(flowers, Direction.UP);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.replaceBlocks(flowers, Blocks.AIR.getDefaultState(), false);
|
||||||
|
scene.world.showSection(flowers, Direction.UP);
|
||||||
|
|
||||||
|
Vec3d frontVec = util.vector.blockSurface(deployerPos.west(3), Direction.NORTH)
|
||||||
|
.add(0, 0, -.125);
|
||||||
|
Vec3d filterSlot = frontVec.add(0, 0.25, 0.375);
|
||||||
|
scene.overlay.showFilterSlotInput(filterSlot, 80);
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(filterSlot)
|
||||||
|
.text("The Filter slot can be used to specify which items to pull");
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
ItemStack poppy = new ItemStack(Items.POPPY);
|
||||||
|
scene.overlay.showControls(new InputWindowElement(filterSlot, Pointing.DOWN).withItem(poppy), 30);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.world.setFilterData(deployerSelection, DeployerTileEntity.class, poppy);
|
||||||
|
scene.idle(25);
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(util.select.position(4, 0, 6), 8);
|
||||||
|
scene.world.setKineticSpeed(kinetics, -16);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(3, 0, 0), 100);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(3, 0, 0), 100);
|
||||||
|
|
||||||
|
for (int x = 0; x < 4; x++) {
|
||||||
|
scene.world.moveDeployer(deployerPos, 1, 9);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.moveDeployer(deployerPos, -1, 9);
|
||||||
|
scene.world.setBlock(util.grid.at(1 + x, 1, 1), Blocks.POPPY.getDefaultState(), false);
|
||||||
|
scene.idle(18);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,21 +3,28 @@ package com.simibubi.create.foundation.ponder.content;
|
||||||
import com.simibubi.create.AllBlocks;
|
import com.simibubi.create.AllBlocks;
|
||||||
import com.simibubi.create.content.contraptions.components.crank.ValveHandleBlock;
|
import com.simibubi.create.content.contraptions.components.crank.ValveHandleBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock;
|
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.relays.advanced.sequencer.SequencedGearshiftBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.CogWheelBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
|
import com.simibubi.create.content.contraptions.relays.elementary.ShaftBlock;
|
||||||
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock;
|
import com.simibubi.create.content.contraptions.relays.encased.EncasedShaftBlock;
|
||||||
|
import com.simibubi.create.content.logistics.block.redstone.NixieTubeTileEntity;
|
||||||
import com.simibubi.create.foundation.ponder.ElementLink;
|
import com.simibubi.create.foundation.ponder.ElementLink;
|
||||||
import com.simibubi.create.foundation.ponder.SceneBuilder;
|
import com.simibubi.create.foundation.ponder.SceneBuilder;
|
||||||
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
|
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
|
||||||
import com.simibubi.create.foundation.ponder.Selection;
|
import com.simibubi.create.foundation.ponder.Selection;
|
||||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||||
|
import com.simibubi.create.foundation.ponder.instructions.EmitParticlesInstruction.Emitter;
|
||||||
import com.simibubi.create.foundation.utility.Pointing;
|
import com.simibubi.create.foundation.utility.Pointing;
|
||||||
import com.tterrag.registrate.util.entry.BlockEntry;
|
import com.tterrag.registrate.util.entry.BlockEntry;
|
||||||
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.block.FurnaceBlock;
|
||||||
|
import net.minecraft.block.RedstoneWireBlock;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.particles.ParticleTypes;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.Direction.Axis;
|
import net.minecraft.util.Direction.Axis;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
@ -689,4 +696,318 @@ public class KineticsScenes {
|
||||||
scene.idle(90);
|
scene.idle(90);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void sequencedGearshift(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("sequenced_gearshift", "Controlling Rotational Speed using Sequenced Gearshifts");
|
||||||
|
scene.configureBasePlate(1, 0, 5);
|
||||||
|
scene.showBasePlate();
|
||||||
|
|
||||||
|
Selection redstone = util.select.fromTo(3, 1, 0, 3, 1, 1);
|
||||||
|
|
||||||
|
scene.world.showSection(util.select.position(6, 0, 3)
|
||||||
|
.add(redstone), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(util.select.fromTo(6, 1, 2, 4, 1, 2), Direction.DOWN);
|
||||||
|
|
||||||
|
BlockPos gearshiftPos = util.grid.at(3, 1, 2);
|
||||||
|
Selection gearshiftSelection = util.select.position(gearshiftPos);
|
||||||
|
BlockPos bearingPos = util.grid.at(1, 1, 2);
|
||||||
|
BlockPos buttonPos = util.grid.at(3, 1, 0);
|
||||||
|
Selection outputKinetics = util.select.fromTo(3, 1, 2, 1, 1, 2);
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(gearshiftSelection, 0);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.world.showSection(gearshiftSelection, Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.world.showSection(util.select.fromTo(2, 1, 2, 1, 1, 2), Direction.EAST);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
Vec3d top = util.vector.topOf(gearshiftPos);
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.text("Seq. Gearshifts relay rotation by following a timed list of instructions")
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(top)
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.idle(80);
|
||||||
|
|
||||||
|
scene.overlay.showControls(new InputWindowElement(top, Pointing.DOWN).rightClick(), 40);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.overlay.showSelectionWithText(gearshiftSelection, 50)
|
||||||
|
.colored(PonderPalette.BLUE)
|
||||||
|
.text("Right-click it to open the Configuration UI")
|
||||||
|
.pointAt(top)
|
||||||
|
.placeNearTarget();
|
||||||
|
scene.idle(60);
|
||||||
|
|
||||||
|
ElementLink<WorldSectionElement> contraption =
|
||||||
|
scene.world.showIndependentSection(util.select.fromTo(0, 3, 2, 0, 0, 2), Direction.EAST);
|
||||||
|
scene.world.configureCenterOfRotation(contraption, util.vector.centerOf(bearingPos));
|
||||||
|
|
||||||
|
scene.idle(20);
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
scene.effects.indicateRedstone(buttonPos);
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, 16);
|
||||||
|
scene.world.rotateBearing(bearingPos, 90, 40);
|
||||||
|
scene.world.rotateSection(contraption, 90, 0, 0, 40);
|
||||||
|
scene.effects.rotationDirectionIndicator(gearshiftPos.west());
|
||||||
|
scene.idle(20);
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.text("Upon receiving a Redstone Signal, it will start running its configured sequence")
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(top);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, -32);
|
||||||
|
scene.world.rotateBearing(bearingPos, -180, 40);
|
||||||
|
scene.world.rotateSection(contraption, -180, 0, 0, 40);
|
||||||
|
scene.effects.rotationDirectionIndicator(gearshiftPos.west());
|
||||||
|
scene.idle(40);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, 0);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, 16);
|
||||||
|
scene.world.rotateBearing(bearingPos, 90, 40);
|
||||||
|
scene.world.rotateSection(contraption, 90, 0, 0, 40);
|
||||||
|
scene.effects.rotationDirectionIndicator(gearshiftPos.west());
|
||||||
|
scene.idle(40);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, 0);
|
||||||
|
|
||||||
|
scene.idle(20);
|
||||||
|
scene.overlay.showText(70)
|
||||||
|
.text("Once finished, it waits for the next Redstone Signal and starts over")
|
||||||
|
.pointAt(util.vector.topOf(util.grid.at(3, 0, 1)));
|
||||||
|
scene.idle(80);
|
||||||
|
|
||||||
|
scene.idle(20);
|
||||||
|
scene.world.toggleRedstonePower(redstone);
|
||||||
|
scene.effects.indicateRedstone(buttonPos);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, 16);
|
||||||
|
scene.world.rotateBearing(bearingPos, 90, 40);
|
||||||
|
scene.world.rotateSection(contraption, 90, 0, 0, 40);
|
||||||
|
scene.effects.rotationDirectionIndicator(gearshiftPos.west());
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.text("A redstone comparator can be used to read the current progress")
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.topOf(util.grid.at(3, 0, 1)));
|
||||||
|
|
||||||
|
scene.world.hideSection(redstone, Direction.NORTH);
|
||||||
|
scene.idle(15);
|
||||||
|
|
||||||
|
BlockPos wire = util.grid.at(5, 1, 0);
|
||||||
|
Selection nixie = util.select.position(4, 1, 0);
|
||||||
|
ElementLink<WorldSectionElement> comparator =
|
||||||
|
scene.world.showIndependentSection(util.select.fromTo(5, 1, 1, 4, 1, 0), Direction.SOUTH);
|
||||||
|
scene.world.moveSection(comparator, util.vector.of(-2, 0, 0), 0);
|
||||||
|
scene.world.toggleRedstonePower(util.select.position(5, 1, 1));
|
||||||
|
scene.world.cycleBlockProperty(wire, RedstoneWireBlock.POWER);
|
||||||
|
scene.world.modifyTileNBT(nixie, NixieTubeTileEntity.class, nbt -> nbt.putInt("RedstoneStrength", 1));
|
||||||
|
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, -32);
|
||||||
|
scene.world.rotateBearing(bearingPos, -180, 40);
|
||||||
|
scene.world.rotateSection(contraption, -180, 0, 0, 40);
|
||||||
|
scene.effects.rotationDirectionIndicator(gearshiftPos.west());
|
||||||
|
scene.world.cycleBlockProperty(wire, RedstoneWireBlock.POWER);
|
||||||
|
scene.world.modifyTileNBT(nixie, NixieTubeTileEntity.class, nbt -> nbt.putInt("RedstoneStrength", 2));
|
||||||
|
scene.idle(40);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, 0);
|
||||||
|
scene.world.cycleBlockProperty(wire, RedstoneWireBlock.POWER);
|
||||||
|
scene.world.modifyTileNBT(nixie, NixieTubeTileEntity.class, nbt -> nbt.putInt("RedstoneStrength", 3));
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, 16);
|
||||||
|
scene.world.rotateBearing(bearingPos, 90, 40);
|
||||||
|
scene.world.rotateSection(contraption, 90, 0, 0, 40);
|
||||||
|
scene.effects.rotationDirectionIndicator(gearshiftPos.west());
|
||||||
|
scene.world.cycleBlockProperty(wire, RedstoneWireBlock.POWER);
|
||||||
|
scene.world.modifyTileNBT(nixie, NixieTubeTileEntity.class, nbt -> nbt.putInt("RedstoneStrength", 4));
|
||||||
|
scene.idle(40);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.cycleBlockProperty(gearshiftPos, SequencedGearshiftBlock.STATE);
|
||||||
|
scene.world.modifyBlock(wire, s -> s.with(RedstoneWireBlock.POWER, 0), false);
|
||||||
|
scene.world.toggleRedstonePower(util.select.position(5, 1, 1));
|
||||||
|
scene.world.modifyTileNBT(nixie, NixieTubeTileEntity.class, nbt -> nbt.putInt("RedstoneStrength", 0));
|
||||||
|
scene.world.setKineticSpeed(outputKinetics, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void furnaceEngine(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
furnaceEngine(scene, util, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void flywheel(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
furnaceEngine(scene, util, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void furnaceEngine(SceneBuilder scene, SceneBuildingUtil util, boolean flywheel) {
|
||||||
|
scene.title(flywheel ? "flywheel" : "furnace_engine",
|
||||||
|
"Generating Rotational Force using the " + (flywheel ? "Flywheel" : "Furnace Engine"));
|
||||||
|
scene.configureBasePlate(0, 0, 6);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
|
||||||
|
BlockPos furnacePos = util.grid.at(4, 1, 3);
|
||||||
|
BlockPos cogPos = util.grid.at(1, 1, 2);
|
||||||
|
BlockPos gaugePos = util.grid.at(1, 1, 1);
|
||||||
|
|
||||||
|
scene.idle(5);
|
||||||
|
Selection furnaceSelect = util.select.position(furnacePos);
|
||||||
|
scene.world.showSection(furnaceSelect, Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.showSection(util.select.position(furnacePos.west()), Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.showSection(util.select.position(furnacePos.west(3)), Direction.EAST);
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
String text = flywheel ? "Flywheels are required for generating rotational force with the Furnace Engine"
|
||||||
|
: "Furnace Engines generate Rotational Force while their attached Furnace is running";
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.topOf(furnacePos.west(flywheel ? 3 : 1)))
|
||||||
|
.text(text);
|
||||||
|
scene.idle(90);
|
||||||
|
|
||||||
|
scene.overlay.showControls(
|
||||||
|
new InputWindowElement(util.vector.topOf(furnacePos), Pointing.DOWN).withItem(new ItemStack(Items.OAK_LOG)),
|
||||||
|
30);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.overlay
|
||||||
|
.showControls(new InputWindowElement(util.vector.blockSurface(furnacePos, Direction.NORTH), Pointing.RIGHT)
|
||||||
|
.withItem(new ItemStack(Items.COAL)), 30);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.world.cycleBlockProperty(furnacePos, FurnaceBlock.LIT);
|
||||||
|
scene.effects.emitParticles(util.vector.of(4.5, 1.2, 2.9), Emitter.simple(ParticleTypes.LAVA, Vec3d.ZERO), 4,
|
||||||
|
1);
|
||||||
|
scene.world.setKineticSpeed(util.select.fromTo(1, 1, 3, 1, 1, 1), 16);
|
||||||
|
scene.idle(40);
|
||||||
|
|
||||||
|
scene.world.showSection(util.select.position(cogPos), Direction.SOUTH);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.effects.rotationSpeedIndicator(cogPos);
|
||||||
|
scene.world.showSection(util.select.position(gaugePos), Direction.SOUTH);
|
||||||
|
scene.idle(15);
|
||||||
|
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.colored(PonderPalette.GREEN)
|
||||||
|
.pointAt(util.vector.blockSurface(gaugePos, Direction.WEST))
|
||||||
|
.text("The provided Rotational Force has a very large stress capacity");
|
||||||
|
scene.idle(90);
|
||||||
|
|
||||||
|
ElementLink<WorldSectionElement> engine =
|
||||||
|
scene.world.makeSectionIndependent(util.select.fromTo(3, 1, 3, 1, 1, 1));
|
||||||
|
scene.world.moveSection(engine, util.vector.of(0, 1, 0), 15);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.hideSection(furnaceSelect, Direction.NORTH);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.setBlock(furnacePos, Blocks.BLAST_FURNACE.getDefaultState()
|
||||||
|
.with(FurnaceBlock.FACING, Direction.NORTH)
|
||||||
|
.with(FurnaceBlock.LIT, true), false);
|
||||||
|
scene.world.showSection(furnaceSelect, Direction.NORTH);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.moveSection(engine, util.vector.of(0, -1, 0), 15);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.setKineticSpeed(util.select.fromTo(1, 1, 3, 1, 1, 1), 32);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.effects.rotationSpeedIndicator(cogPos);
|
||||||
|
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.placeNearTarget()
|
||||||
|
.colored(PonderPalette.MEDIUM)
|
||||||
|
.pointAt(util.vector.topOf(furnacePos.west()))
|
||||||
|
.text("Using a Blast Furnace will double the efficiency of the Engine");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void speedController(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("rotation_speed_controller", "Using the Rotational Speed Controller");
|
||||||
|
scene.configureBasePlate(0, 0, 5);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
|
||||||
|
BlockPos cogPos = util.grid.at(1, 2, 1);
|
||||||
|
Selection gaugeSelect = util.select.position(1, 2, 3);
|
||||||
|
|
||||||
|
scene.world.multiplyKineticSpeed(util.select.everywhere(), 0.5f);
|
||||||
|
scene.world.setKineticSpeed(gaugeSelect, 0);
|
||||||
|
scene.world.showSection(util.select.fromTo(5, 1, 1, 2, 1, 1), Direction.DOWN);
|
||||||
|
scene.world.showSection(util.select.fromTo(1, 1, 3, 1, 2, 3), Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
ElementLink<WorldSectionElement> rsc =
|
||||||
|
scene.world.showIndependentSection(util.select.position(0, 1, 1), Direction.DOWN);
|
||||||
|
scene.world.moveSection(rsc, util.vector.of(1, 0, 0), 0);
|
||||||
|
ElementLink<WorldSectionElement> rsc2 =
|
||||||
|
scene.world.showIndependentSection(util.select.position(1, 1, 1), Direction.DOWN);
|
||||||
|
scene.world.moveSection(rsc2, util.vector.of(0, -100, 0), 0);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.showSection(util.select.position(1, 2, 1), Direction.DOWN);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.effects.indicateSuccess(cogPos);
|
||||||
|
scene.world.moveSection(rsc2, util.vector.of(0, 100, 0), 0);
|
||||||
|
scene.world.moveSection(rsc, util.vector.of(0, -100, 0), 0);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(util.select.position(1, 2, 2), Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.setKineticSpeed(gaugeSelect, 8);
|
||||||
|
scene.effects.indicateSuccess(util.grid.at(1, 2, 3));
|
||||||
|
|
||||||
|
scene.overlay.showText(90)
|
||||||
|
.placeNearTarget()
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.blockSurface(cogPos, Direction.NORTH))
|
||||||
|
.text("Rot. Speed Controllers relay rotation from their axis to a Large Cogwheel above them");
|
||||||
|
scene.idle(100);
|
||||||
|
|
||||||
|
Vec3d inputVec = util.vector.of(1.5, 1.75, 1);
|
||||||
|
scene.overlay.showFilterSlotInput(inputVec, 60);
|
||||||
|
|
||||||
|
scene.overlay.showText(70)
|
||||||
|
.placeNearTarget()
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(inputVec)
|
||||||
|
.text("Using the scroll input on its side, the conveyed speed can be configured");
|
||||||
|
scene.idle(80);
|
||||||
|
|
||||||
|
InputWindowElement input = new InputWindowElement(inputVec, Pointing.UP).scroll();
|
||||||
|
scene.overlay.showControls(input, 40);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.multiplyKineticSpeed(util.select.fromTo(1, 2, 1, 1, 2, 3), 4);
|
||||||
|
scene.effects.rotationSpeedIndicator(cogPos);
|
||||||
|
scene.idle(55);
|
||||||
|
scene.markAsFinished();
|
||||||
|
|
||||||
|
scene.overlay.showControls(input, 30);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.multiplyKineticSpeed(util.select.fromTo(1, 2, 1, 1, 2, 3), 4);
|
||||||
|
scene.effects.rotationSpeedIndicator(cogPos);
|
||||||
|
scene.idle(55);
|
||||||
|
|
||||||
|
scene.overlay.showControls(input, 30);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.multiplyKineticSpeed(util.select.fromTo(1, 2, 1, 1, 2, 3), -.05f);
|
||||||
|
scene.effects.rotationSpeedIndicator(cogPos);
|
||||||
|
scene.idle(35);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,6 +173,7 @@ public class MechanicalSawScenes {
|
||||||
public static void treeCutting(SceneBuilder scene, SceneBuildingUtil util) {
|
public static void treeCutting(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
scene.title("mechanical_saw_breaker", "Cutting Trees with the Mechanical Saw");
|
scene.title("mechanical_saw_breaker", "Cutting Trees with the Mechanical Saw");
|
||||||
scene.configureBasePlate(0, 0, 5);
|
scene.configureBasePlate(0, 0, 5);
|
||||||
|
scene.scaleSceneView(.9f);
|
||||||
scene.world.setBlock(util.grid.at(2, 0, 2), Blocks.GRASS_BLOCK.getDefaultState(), false);
|
scene.world.setBlock(util.grid.at(2, 0, 2), Blocks.GRASS_BLOCK.getDefaultState(), false);
|
||||||
scene.world.showSection(util.select.layer(0)
|
scene.world.showSection(util.select.layer(0)
|
||||||
.add(util.select.position(3, 1, 1))
|
.add(util.select.position(3, 1, 1))
|
||||||
|
@ -265,6 +266,7 @@ public class MechanicalSawScenes {
|
||||||
public static void contraption(SceneBuilder scene, SceneBuildingUtil util) {
|
public static void contraption(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
scene.title("mechanical_saw_contraption", "Using Mechanical Saws on Contraptions");
|
scene.title("mechanical_saw_contraption", "Using Mechanical Saws on Contraptions");
|
||||||
scene.configureBasePlate(1, 0, 6);
|
scene.configureBasePlate(1, 0, 6);
|
||||||
|
scene.scaleSceneView(.9f);
|
||||||
scene.world.setBlock(util.grid.at(2, 0, 3), Blocks.GRASS_BLOCK.getDefaultState(), false);
|
scene.world.setBlock(util.grid.at(2, 0, 3), Blocks.GRASS_BLOCK.getDefaultState(), false);
|
||||||
scene.world.showSection(util.select.layer(0)
|
scene.world.showSection(util.select.layer(0)
|
||||||
.add(util.select.position(3, 1, 1))
|
.add(util.select.position(3, 1, 1))
|
||||||
|
|
|
@ -1,19 +1,27 @@
|
||||||
package com.simibubi.create.foundation.ponder.content;
|
package com.simibubi.create.foundation.ponder.content;
|
||||||
|
|
||||||
import com.simibubi.create.AllItems;
|
import com.simibubi.create.AllItems;
|
||||||
|
import com.simibubi.create.content.contraptions.components.actors.HarvesterTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.actors.PortableItemInterfaceTileEntity;
|
import com.simibubi.create.content.contraptions.components.actors.PortableItemInterfaceTileEntity;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.LinearChassisBlock;
|
||||||
import com.simibubi.create.foundation.ponder.ElementLink;
|
import com.simibubi.create.foundation.ponder.ElementLink;
|
||||||
import com.simibubi.create.foundation.ponder.SceneBuilder;
|
import com.simibubi.create.foundation.ponder.SceneBuilder;
|
||||||
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
|
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
|
||||||
import com.simibubi.create.foundation.ponder.Selection;
|
import com.simibubi.create.foundation.ponder.Selection;
|
||||||
import com.simibubi.create.foundation.ponder.elements.EntityElement;
|
import com.simibubi.create.foundation.ponder.elements.EntityElement;
|
||||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.ParrotElement;
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.ParrotElement.FlappyPose;
|
||||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||||
import com.simibubi.create.foundation.utility.Pointing;
|
import com.simibubi.create.foundation.utility.Pointing;
|
||||||
|
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.block.CropsBlock;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.item.ItemEntity;
|
import net.minecraft.entity.item.ItemEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
@ -189,4 +197,313 @@ public class MovementActorScenes {
|
||||||
scene.markAsFinished();
|
scene.markAsFinished();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void harvester(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("mechanical_harvester", "Using Mechanical Harvesters on Contraptions");
|
||||||
|
scene.configureBasePlate(0, 0, 6);
|
||||||
|
scene.scaleSceneView(0.9f);
|
||||||
|
|
||||||
|
Selection crops = util.select.fromTo(4, 1, 2, 3, 1, 2)
|
||||||
|
.add(util.select.fromTo(3, 1, 1, 2, 1, 1)
|
||||||
|
.add(util.select.position(2, 1, 3))
|
||||||
|
.add(util.select.position(1, 1, 2)));
|
||||||
|
|
||||||
|
scene.world.setBlocks(crops, Blocks.WHEAT.getDefaultState()
|
||||||
|
.with(CropsBlock.AGE, 7), false);
|
||||||
|
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||||
|
|
||||||
|
BlockPos bearingPos = util.grid.at(4, 1, 4);
|
||||||
|
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(crops, Direction.UP);
|
||||||
|
scene.world.showSection(util.select.position(bearingPos), Direction.DOWN);
|
||||||
|
scene.idle(5);
|
||||||
|
ElementLink<WorldSectionElement> contraption =
|
||||||
|
scene.world.showIndependentSection(util.select.fromTo(4, 2, 4, 2, 2, 5)
|
||||||
|
.add(util.select.fromTo(2, 1, 5, 0, 1, 5)), Direction.DOWN);
|
||||||
|
scene.world.configureCenterOfRotation(contraption, util.vector.centerOf(bearingPos));
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
scene.world.showSectionAndMerge(util.select.position(i, 1, 4), Direction.SOUTH, contraption);
|
||||||
|
scene.idle(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(1, 1, 4), Direction.SOUTH))
|
||||||
|
.text("Whenever Harvesters are moved as part of an animated Contraption...");
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
scene.world.modifyTileEntity(util.grid.at(i, 1, 4), HarvesterTileEntity.class,
|
||||||
|
hte -> hte.setAnimatedSpeed(-150));
|
||||||
|
scene.world.rotateBearing(bearingPos, -360, 140);
|
||||||
|
scene.world.rotateSection(contraption, 0, -360, 0, 140);
|
||||||
|
|
||||||
|
BlockState harvested = Blocks.WHEAT.getDefaultState();
|
||||||
|
ItemStack wheatItem = new ItemStack(Items.WHEAT);
|
||||||
|
|
||||||
|
scene.idle(5);
|
||||||
|
BlockPos current = util.grid.at(2, 1, 3);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(current), util.vector.of(0, 0.3, -.2), wheatItem);
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(1, 1, 2);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(current), util.vector.of(0, 0.3, -.2), wheatItem);
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(3, 1, 2);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(current), util.vector.of(.1, 0.3, -.1), wheatItem);
|
||||||
|
current = util.grid.at(2, 1, 1);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(current), util.vector.of(.1, 0.3, -.1), wheatItem);
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(3, 1, 1);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(current), util.vector.of(.1, 0.3, -.1), wheatItem);
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(4, 1, 2);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(current), util.vector.of(.2, 0.3, 0), wheatItem);
|
||||||
|
|
||||||
|
scene.overlay.showText(80)
|
||||||
|
.pointAt(util.vector.topOf(1, 0, 2))
|
||||||
|
.text("They will harvest and reset any mature crops on their way")
|
||||||
|
.placeNearTarget();
|
||||||
|
|
||||||
|
scene.idle(101);
|
||||||
|
scene.world.hideSection(crops, Direction.DOWN);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.modifyEntities(ItemEntity.class, Entity::remove);
|
||||||
|
scene.world.setBlocks(crops, Blocks.WHEAT.getDefaultState()
|
||||||
|
.with(CropsBlock.AGE, 7), false);
|
||||||
|
scene.world.showSection(crops, Direction.UP);
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
scene.world.modifyTileEntity(util.grid.at(i, 1, 4), HarvesterTileEntity.class,
|
||||||
|
hte -> hte.setAnimatedSpeed(0));
|
||||||
|
scene.idle(10);
|
||||||
|
|
||||||
|
scene.world.cycleBlockProperty(util.grid.at(1, 1, 5), LinearChassisBlock.STICKY_TOP);
|
||||||
|
scene.world.glueBlockOnto(util.grid.at(1, 2, 5), Direction.DOWN, contraption);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(1, 2, 5), Direction.WEST))
|
||||||
|
.sharedText("storage_on_contraption");
|
||||||
|
scene.idle(70);
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
scene.world.modifyTileEntity(util.grid.at(i, 1, 4), HarvesterTileEntity.class,
|
||||||
|
hte -> hte.setAnimatedSpeed(-150));
|
||||||
|
scene.world.rotateBearing(bearingPos, -360, 140);
|
||||||
|
scene.world.rotateSection(contraption, 0, -360, 0, 140);
|
||||||
|
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(2, 1, 3);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(1, 1, 2);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(3, 1, 2);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
current = util.grid.at(2, 1, 1);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(3, 1, 1);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
scene.idle(5);
|
||||||
|
current = util.grid.at(4, 1, 2);
|
||||||
|
scene.world.setBlock(current, harvested, true);
|
||||||
|
|
||||||
|
scene.idle(116);
|
||||||
|
scene.overlay
|
||||||
|
.showControls(new InputWindowElement(util.vector.topOf(1, 2, 5), Pointing.DOWN).withItem(wheatItem), 50);
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
scene.world.modifyTileEntity(util.grid.at(i, 1, 4), HarvesterTileEntity.class,
|
||||||
|
hte -> hte.setAnimatedSpeed(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void plough(SceneBuilder scene, SceneBuildingUtil util) {
|
||||||
|
scene.title("mechanical_plough", "Using Mechanical Ploughs on Contraptions");
|
||||||
|
scene.configureBasePlate(0, 0, 6);
|
||||||
|
scene.scaleSceneView(0.9f);
|
||||||
|
|
||||||
|
Selection garbage = util.select.fromTo(2, 1, 3, 1, 1, 2);
|
||||||
|
Selection kinetics = util.select.fromTo(5, 1, 6, 5, 1, 2);
|
||||||
|
Selection dynamic = util.select.fromTo(4, 0, 6, 5, 1, 6);
|
||||||
|
|
||||||
|
scene.showBasePlate();
|
||||||
|
ElementLink<WorldSectionElement> cogs =
|
||||||
|
scene.world.showIndependentSection(util.select.fromTo(4, 0, 6, 5, 1, 6), Direction.UP);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSection(kinetics.substract(dynamic), Direction.DOWN);
|
||||||
|
ElementLink<WorldSectionElement> pistonHead =
|
||||||
|
scene.world.showIndependentSection(util.select.fromTo(5, 1, 1, 7, 1, 1), Direction.DOWN);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(0, 0, 1), 0);
|
||||||
|
scene.idle(5);
|
||||||
|
ElementLink<WorldSectionElement> contraption =
|
||||||
|
scene.world.showIndependentSection(util.select.fromTo(4, 1, 3, 4, 1, 2), Direction.DOWN);
|
||||||
|
scene.idle(10);
|
||||||
|
scene.world.showSectionAndMerge(util.select.position(3, 1, 3), Direction.EAST, contraption);
|
||||||
|
scene.idle(5);
|
||||||
|
scene.world.showSectionAndMerge(util.select.position(3, 1, 2), Direction.EAST, contraption);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(3, 1, 3), Direction.EAST))
|
||||||
|
.text("Whenever Ploughs are moved as part of an animated Contraption...");
|
||||||
|
scene.idle(50);
|
||||||
|
scene.world.showSection(garbage, Direction.EAST);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(util.select.position(4, 0, 6), -8);
|
||||||
|
scene.world.setKineticSpeed(kinetics, 16);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(-2, 0, 0), 60);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 60);
|
||||||
|
scene.idle(15);
|
||||||
|
|
||||||
|
Vec3d m = util.vector.of(-0.1, .2, 0);
|
||||||
|
scene.world.destroyBlock(util.grid.at(2, 1, 3));
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(2, 1, 3), m, new ItemStack(Items.LEVER));
|
||||||
|
scene.world.destroyBlock(util.grid.at(2, 1, 2));
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(2, 1, 2), m, new ItemStack(Items.TORCH));
|
||||||
|
|
||||||
|
scene.idle(30);
|
||||||
|
|
||||||
|
scene.world.destroyBlock(util.grid.at(1, 1, 3));
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(1, 1, 3), m, new ItemStack(Items.RAIL));
|
||||||
|
scene.world.destroyBlock(util.grid.at(1, 1, 2));
|
||||||
|
scene.world.createItemEntity(util.vector.centerOf(1, 1, 2), m, new ItemStack(Items.REDSTONE));
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(1, 1, 3), Direction.EAST))
|
||||||
|
.text("...they will break blocks without a solid collision hitbox");
|
||||||
|
scene.idle(50);
|
||||||
|
|
||||||
|
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -f);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(2, 0, 0), 40);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(2, 0, 0), 40);
|
||||||
|
scene.world.hideSection(garbage, Direction.UP);
|
||||||
|
scene.idle(40);
|
||||||
|
scene.world.setBlocks(garbage, Blocks.SNOW.getDefaultState(), false);
|
||||||
|
scene.world.modifyEntities(ItemEntity.class, Entity::remove);
|
||||||
|
ElementLink<WorldSectionElement> chest =
|
||||||
|
scene.world.showIndependentSection(util.select.position(4, 2, 2), Direction.DOWN);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.attachKeyFrame()
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(4, 2, 2), Direction.WEST))
|
||||||
|
.sharedText("storage_on_contraption");
|
||||||
|
scene.idle(15);
|
||||||
|
scene.effects.superGlue(util.grid.at(4, 2, 2), Direction.DOWN, true);
|
||||||
|
scene.idle(45);
|
||||||
|
scene.world.showSection(garbage, Direction.EAST);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -f);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(-2, 0, 0), 60);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 60);
|
||||||
|
scene.world.moveSection(chest, util.vector.of(-2, 0, 0), 60);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.destroyBlock(util.grid.at(2, 1, 3));
|
||||||
|
scene.world.destroyBlock(util.grid.at(2, 1, 2));
|
||||||
|
scene.idle(30);
|
||||||
|
scene.world.destroyBlock(util.grid.at(1, 1, 3));
|
||||||
|
scene.world.destroyBlock(util.grid.at(1, 1, 2));
|
||||||
|
scene.idle(15);
|
||||||
|
|
||||||
|
scene.overlay.showControls(
|
||||||
|
new InputWindowElement(util.vector.topOf(2, 2, 2), Pointing.DOWN).withItem(new ItemStack(Items.SNOWBALL)),
|
||||||
|
40);
|
||||||
|
scene.idle(40);
|
||||||
|
scene.world.hideIndependentSection(chest, Direction.UP);
|
||||||
|
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -f);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(2, 0, 0), 40);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(2, 0, 0), 40);
|
||||||
|
scene.idle(40);
|
||||||
|
|
||||||
|
Selection dirt = util.select.fromTo(2, 0, 3, 1, 0, 2);
|
||||||
|
scene.world.hideSection(dirt, Direction.DOWN);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.setBlocks(dirt, Blocks.GRASS_BLOCK.getDefaultState(), false);
|
||||||
|
scene.world.showSection(dirt, Direction.UP);
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.placeNearTarget()
|
||||||
|
.attachKeyFrame()
|
||||||
|
.pointAt(util.vector.blockSurface(util.grid.at(3, 1, 3), Direction.EAST))
|
||||||
|
.text("Additionally, ploughs can create farmland");
|
||||||
|
scene.idle(30);
|
||||||
|
|
||||||
|
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -f);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(-2, 0, 0), 60);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(-2, 0, 0), 60);
|
||||||
|
scene.world.moveSection(chest, util.vector.of(-2, 0, 0), 60);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.setBlocks(util.select.fromTo(2, 0, 2, 2, 0, 3), Blocks.FARMLAND.getDefaultState(), true);
|
||||||
|
scene.idle(30);
|
||||||
|
scene.world.setBlocks(util.select.fromTo(1, 0, 2, 1, 0, 3), Blocks.FARMLAND.getDefaultState(), true);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -f);
|
||||||
|
scene.world.moveSection(pistonHead, util.vector.of(2, 0, 0), 40);
|
||||||
|
scene.world.moveSection(contraption, util.vector.of(2, 0, 0), 40);
|
||||||
|
|
||||||
|
scene.idle(50);
|
||||||
|
scene.world.setKineticSpeed(util.select.everywhere(), 0);
|
||||||
|
scene.world.hideSection(kinetics.substract(dynamic), Direction.EAST);
|
||||||
|
scene.world.hideSection(dirt, Direction.DOWN);
|
||||||
|
scene.world.hideIndependentSection(pistonHead, Direction.EAST);
|
||||||
|
scene.world.moveSection(cogs, util.vector.of(-1, 0, 0), 15);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.restoreBlocks(dirt);
|
||||||
|
scene.world.showSection(dirt, Direction.UP);
|
||||||
|
scene.world.showSection(util.select.fromTo(4, 1, 6, 4, 3, 4), Direction.NORTH);
|
||||||
|
scene.idle(15);
|
||||||
|
scene.world.showSectionAndMerge(util.select.fromTo(4, 3, 3, 4, 2, 3), Direction.DOWN, contraption);
|
||||||
|
scene.idle(15);
|
||||||
|
|
||||||
|
BlockPos bearingPos = util.grid.at(4, 3, 4);
|
||||||
|
scene.addKeyframe();
|
||||||
|
|
||||||
|
scene.world.setKineticSpeed(util.select.position(4, 0, 6), 8);
|
||||||
|
scene.world.setKineticSpeed(util.select.position(5, 1, 6), -16);
|
||||||
|
scene.world.setKineticSpeed(util.select.position(4, 3, 5), -16);
|
||||||
|
scene.world.setKineticSpeed(util.select.position(4, 1, 5), -16);
|
||||||
|
scene.world.setKineticSpeed(util.select.position(4, 2, 5), 16);
|
||||||
|
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -2 * f);
|
||||||
|
scene.world.configureCenterOfRotation(contraption, util.vector.centerOf(bearingPos));
|
||||||
|
scene.world.rotateSection(contraption, 0, 0, 90, 20);
|
||||||
|
scene.world.rotateBearing(bearingPos, 90, 20);
|
||||||
|
|
||||||
|
scene.idle(10);
|
||||||
|
ElementLink<ParrotElement> birb = scene.special.createBirb(util.vector.topOf(3, 0, 2)
|
||||||
|
.add(0, 0, 0.5), FlappyPose::new);
|
||||||
|
scene.idle(11);
|
||||||
|
|
||||||
|
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> -2 * f);
|
||||||
|
scene.world.rotateSection(contraption, 0, 0, -135, 10);
|
||||||
|
scene.world.rotateBearing(bearingPos, -135, 10);
|
||||||
|
scene.idle(7);
|
||||||
|
scene.special.moveParrot(birb, util.vector.of(-20, 15, 0), 20);
|
||||||
|
scene.special.rotateParrot(birb, 0, 360, 0, 20);
|
||||||
|
scene.idle(3);
|
||||||
|
scene.world.setKineticSpeed(util.select.everywhere(), 0);
|
||||||
|
scene.idle(20);
|
||||||
|
|
||||||
|
scene.overlay.showText(60)
|
||||||
|
.placeNearTarget()
|
||||||
|
.pointAt(util.vector.centerOf(util.grid.at(1, 3, 2)))
|
||||||
|
.text("...they can also launch entities without hurting them");
|
||||||
|
scene.idle(30);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,9 @@ public class PonderIndex {
|
||||||
PonderRegistry.addStoryBoard(AllBlocks.GEARSHIFT, "gearshift", KineticsScenes::gearshift,
|
PonderRegistry.addStoryBoard(AllBlocks.GEARSHIFT, "gearshift", KineticsScenes::gearshift,
|
||||||
PonderTag.KINETIC_RELAYS);
|
PonderTag.KINETIC_RELAYS);
|
||||||
|
|
||||||
|
PonderRegistry.forComponents(AllBlocks.SEQUENCED_GEARSHIFT)
|
||||||
|
.addStoryBoard("sequenced_gearshift", KineticsScenes::sequencedGearshift);
|
||||||
|
|
||||||
PonderRegistry.forComponents(AllBlocks.ENCASED_FAN)
|
PonderRegistry.forComponents(AllBlocks.ENCASED_FAN)
|
||||||
.addStoryBoard("fan/direction", FanScenes::direction, PonderTag.KINETIC_APPLIANCES)
|
.addStoryBoard("fan/direction", FanScenes::direction, PonderTag.KINETIC_APPLIANCES)
|
||||||
.addStoryBoard("fan/processing", FanScenes::processing)
|
.addStoryBoard("fan/processing", FanScenes::processing)
|
||||||
|
@ -67,6 +70,13 @@ public class PonderIndex {
|
||||||
PonderRegistry.forComponents(AllBlocks.ENCASED_CHAIN_DRIVE, AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT)
|
PonderRegistry.forComponents(AllBlocks.ENCASED_CHAIN_DRIVE, AllBlocks.ADJUSTABLE_CHAIN_GEARSHIFT)
|
||||||
.addStoryBoard("chain_drive/gearshift", ChainDriveScenes::adjustableChainGearshift);
|
.addStoryBoard("chain_drive/gearshift", ChainDriveScenes::adjustableChainGearshift);
|
||||||
|
|
||||||
|
PonderRegistry.forComponents(AllBlocks.FURNACE_ENGINE)
|
||||||
|
.addStoryBoard("furnace_engine", KineticsScenes::furnaceEngine);
|
||||||
|
PonderRegistry.forComponents(AllBlocks.FLYWHEEL)
|
||||||
|
.addStoryBoard("furnace_engine", KineticsScenes::flywheel);
|
||||||
|
PonderRegistry.forComponents(AllBlocks.ROTATION_SPEED_CONTROLLER)
|
||||||
|
.addStoryBoard("speed_controller", KineticsScenes::speedController);
|
||||||
|
|
||||||
// Funnels
|
// Funnels
|
||||||
PonderRegistry.addStoryBoard(AllBlocks.BRASS_FUNNEL, "funnels/brass", FunnelScenes::brass);
|
PonderRegistry.addStoryBoard(AllBlocks.BRASS_FUNNEL, "funnels/brass", FunnelScenes::brass);
|
||||||
PonderRegistry.forComponents(AllBlocks.ANDESITE_FUNNEL, AllBlocks.BRASS_FUNNEL)
|
PonderRegistry.forComponents(AllBlocks.ANDESITE_FUNNEL, AllBlocks.BRASS_FUNNEL)
|
||||||
|
@ -134,6 +144,13 @@ public class PonderIndex {
|
||||||
.addStoryBoard("gantry/direction", GantryScenes::direction)
|
.addStoryBoard("gantry/direction", GantryScenes::direction)
|
||||||
.addStoryBoard("gantry/subgantry", GantryScenes::subgantry);
|
.addStoryBoard("gantry/subgantry", GantryScenes::subgantry);
|
||||||
|
|
||||||
|
// Cart Assembler
|
||||||
|
PonderRegistry.forComponents(AllBlocks.CART_ASSEMBLER)
|
||||||
|
.addStoryBoard("cart_assembler/anchor", CartAssemblerScenes::anchor, PonderTag.MOVEMENT_ANCHOR)
|
||||||
|
.addStoryBoard("cart_assembler/modes", CartAssemblerScenes::modes)
|
||||||
|
.addStoryBoard("cart_assembler/dual", CartAssemblerScenes::dual)
|
||||||
|
.addStoryBoard("cart_assembler/rails", CartAssemblerScenes::rails);
|
||||||
|
|
||||||
// Movement Actors
|
// Movement Actors
|
||||||
PonderRegistry.forComponents(AllBlocks.PORTABLE_STORAGE_INTERFACE)
|
PonderRegistry.forComponents(AllBlocks.PORTABLE_STORAGE_INTERFACE)
|
||||||
.addStoryBoard("portable_interface/transfer", MovementActorScenes::psiTransfer, PonderTag.CONTRAPTION_ACTOR)
|
.addStoryBoard("portable_interface/transfer", MovementActorScenes::psiTransfer, PonderTag.CONTRAPTION_ACTOR)
|
||||||
|
@ -148,6 +165,15 @@ public class PonderIndex {
|
||||||
.addStoryBoard("mechanical_drill/breaker", MechanicalDrillScenes::breaker, PonderTag.KINETIC_APPLIANCES)
|
.addStoryBoard("mechanical_drill/breaker", MechanicalDrillScenes::breaker, PonderTag.KINETIC_APPLIANCES)
|
||||||
.addStoryBoard("mechanical_drill/contraption", MechanicalDrillScenes::contraption,
|
.addStoryBoard("mechanical_drill/contraption", MechanicalDrillScenes::contraption,
|
||||||
PonderTag.CONTRAPTION_ACTOR);
|
PonderTag.CONTRAPTION_ACTOR);
|
||||||
|
PonderRegistry.forComponents(AllBlocks.DEPLOYER)
|
||||||
|
.addStoryBoard("deployer/filter", DeployerScenes::filter, PonderTag.KINETIC_APPLIANCES)
|
||||||
|
.addStoryBoard("deployer/modes", DeployerScenes::modes)
|
||||||
|
.addStoryBoard("deployer/redstone", DeployerScenes::redstone)
|
||||||
|
.addStoryBoard("deployer/contraption", DeployerScenes::contraption, PonderTag.CONTRAPTION_ACTOR);
|
||||||
|
PonderRegistry.forComponents(AllBlocks.MECHANICAL_HARVESTER)
|
||||||
|
.addStoryBoard("harvester", MovementActorScenes::harvester);
|
||||||
|
PonderRegistry.forComponents(AllBlocks.MECHANICAL_PLOUGH)
|
||||||
|
.addStoryBoard("plough", MovementActorScenes::plough);
|
||||||
|
|
||||||
// Redstone
|
// Redstone
|
||||||
PonderRegistry.forComponents(AllBlocks.PULSE_REPEATER)
|
PonderRegistry.forComponents(AllBlocks.PULSE_REPEATER)
|
||||||
|
@ -208,6 +234,7 @@ public class PonderIndex {
|
||||||
.add(AllBlocks.MECHANICAL_CRAFTER)
|
.add(AllBlocks.MECHANICAL_CRAFTER)
|
||||||
.add(AllBlocks.MECHANICAL_DRILL)
|
.add(AllBlocks.MECHANICAL_DRILL)
|
||||||
.add(AllBlocks.MECHANICAL_SAW)
|
.add(AllBlocks.MECHANICAL_SAW)
|
||||||
|
.add(AllBlocks.DEPLOYER)
|
||||||
.add(AllBlocks.MECHANICAL_PUMP)
|
.add(AllBlocks.MECHANICAL_PUMP)
|
||||||
.add(AllBlocks.MECHANICAL_ARM)
|
.add(AllBlocks.MECHANICAL_ARM)
|
||||||
.add(AllBlocks.MECHANICAL_PISTON)
|
.add(AllBlocks.MECHANICAL_PISTON)
|
||||||
|
@ -320,7 +347,6 @@ public class PonderIndex {
|
||||||
.add(AllBlocks.BRASS_FUNNEL)
|
.add(AllBlocks.BRASS_FUNNEL)
|
||||||
.add(AllBlocks.SEATS[0])
|
.add(AllBlocks.SEATS[0])
|
||||||
.add(AllBlocks.REDSTONE_CONTACT)
|
.add(AllBlocks.REDSTONE_CONTACT)
|
||||||
.add(AllBlocks.SAIL)
|
|
||||||
.add(Blocks.BELL)
|
.add(Blocks.BELL)
|
||||||
.add(Blocks.DISPENSER)
|
.add(Blocks.DISPENSER)
|
||||||
.add(Blocks.DROPPER);
|
.add(Blocks.DROPPER);
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
package com.simibubi.create.foundation.ponder.elements;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
|
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||||
|
import com.simibubi.create.foundation.ponder.PonderWorld;
|
||||||
|
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||||
|
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
|
import net.minecraft.client.renderer.entity.EntityRendererManager;
|
||||||
|
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
public class MinecartElement extends AnimatedSceneElement {
|
||||||
|
|
||||||
|
private Vec3d location;
|
||||||
|
private LerpedFloat rotation;
|
||||||
|
private AbstractMinecartEntity entity;
|
||||||
|
private MinecartConstructor constructor;
|
||||||
|
private float initialRotation;
|
||||||
|
|
||||||
|
public interface MinecartConstructor {
|
||||||
|
AbstractMinecartEntity create(World w, double x, double y, double z);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MinecartElement(Vec3d location, float rotation, MinecartConstructor constructor) {
|
||||||
|
initialRotation = rotation;
|
||||||
|
this.location = location.add(0, 1 / 16f, 0);
|
||||||
|
this.constructor = constructor;
|
||||||
|
this.rotation = LerpedFloat.angular()
|
||||||
|
.startWithValue(rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reset(PonderScene scene) {
|
||||||
|
super.reset(scene);
|
||||||
|
entity.setPos(0, 0, 0);
|
||||||
|
entity.prevPosX = 0;
|
||||||
|
entity.prevPosY = 0;
|
||||||
|
entity.prevPosZ = 0;
|
||||||
|
entity.lastTickPosX = 0;
|
||||||
|
entity.lastTickPosY = 0;
|
||||||
|
entity.lastTickPosZ = 0;
|
||||||
|
rotation.startWithValue(initialRotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tick(PonderScene scene) {
|
||||||
|
super.tick(scene);
|
||||||
|
if (entity == null)
|
||||||
|
entity = constructor.create(scene.getWorld(), 0, 0, 0);
|
||||||
|
|
||||||
|
entity.ticksExisted++;
|
||||||
|
entity.onGround = true;
|
||||||
|
entity.prevPosX = entity.getX();
|
||||||
|
entity.prevPosY = entity.getY();
|
||||||
|
entity.prevPosZ = entity.getZ();
|
||||||
|
entity.lastTickPosX = entity.getX();
|
||||||
|
entity.lastTickPosY = entity.getY();
|
||||||
|
entity.lastTickPosZ = entity.getZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPositionOffset(Vec3d position, boolean immediate) {
|
||||||
|
if (entity == null)
|
||||||
|
return;
|
||||||
|
entity.setPosition(position.x, position.y, position.z);
|
||||||
|
if (!immediate)
|
||||||
|
return;
|
||||||
|
entity.prevPosX = position.x;
|
||||||
|
entity.prevPosY = position.y;
|
||||||
|
entity.prevPosZ = position.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRotation(float angle, boolean immediate) {
|
||||||
|
if (entity == null)
|
||||||
|
return;
|
||||||
|
rotation.setValue(angle);
|
||||||
|
if (!immediate)
|
||||||
|
return;
|
||||||
|
rotation.startWithValue(angle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vec3d getPositionOffset() {
|
||||||
|
return entity != null ? entity.getPositionVec() : Vec3d.ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vec3d getRotation() {
|
||||||
|
return new Vec3d(0, rotation.getValue(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) {
|
||||||
|
EntityRendererManager entityrenderermanager = Minecraft.getInstance()
|
||||||
|
.getRenderManager();
|
||||||
|
if (entity == null)
|
||||||
|
entity = constructor.create(world, 0, 0, 0);
|
||||||
|
|
||||||
|
ms.push();
|
||||||
|
ms.translate(location.x, location.y, location.z);
|
||||||
|
ms.translate(MathHelper.lerp(pt, entity.prevPosX, entity.getX()),
|
||||||
|
MathHelper.lerp(pt, entity.prevPosY, entity.getY()), MathHelper.lerp(pt, entity.prevPosZ, entity.getZ()));
|
||||||
|
|
||||||
|
MatrixStacker.of(ms)
|
||||||
|
.rotateY(rotation.getValue(pt));
|
||||||
|
|
||||||
|
entityrenderermanager.render(entity, 0, 0, 0, 0, pt, ms, buffer, lightCoordsFromFade(fade));
|
||||||
|
ms.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -50,13 +50,17 @@ public class ParrotElement extends AnimatedSceneElement {
|
||||||
entity.lastTickPosX = 0;
|
entity.lastTickPosX = 0;
|
||||||
entity.lastTickPosY = 0;
|
entity.lastTickPosY = 0;
|
||||||
entity.lastTickPosZ = 0;
|
entity.lastTickPosZ = 0;
|
||||||
|
entity.prevRotationPitch = entity.rotationPitch = 0;
|
||||||
|
entity.prevRotationYaw = entity.rotationYaw = 180;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick(PonderScene scene) {
|
public void tick(PonderScene scene) {
|
||||||
super.tick(scene);
|
super.tick(scene);
|
||||||
if (entity == null)
|
if (entity == null) {
|
||||||
return;
|
entity = pose.create(scene.getWorld());
|
||||||
|
entity.prevRotationYaw = entity.rotationYaw = 180;
|
||||||
|
}
|
||||||
|
|
||||||
entity.ticksExisted++;
|
entity.ticksExisted++;
|
||||||
entity.prevRotationYawHead = entity.rotationYawHead;
|
entity.prevRotationYawHead = entity.rotationYawHead;
|
||||||
|
@ -112,8 +116,10 @@ public class ParrotElement extends AnimatedSceneElement {
|
||||||
EntityRendererManager entityrenderermanager = Minecraft.getInstance()
|
EntityRendererManager entityrenderermanager = Minecraft.getInstance()
|
||||||
.getRenderManager();
|
.getRenderManager();
|
||||||
|
|
||||||
if (entity == null)
|
if (entity == null) {
|
||||||
entity = pose.create(world);
|
entity = pose.create(world);
|
||||||
|
entity.prevRotationYaw = entity.rotationYaw = 180;
|
||||||
|
}
|
||||||
|
|
||||||
ms.push();
|
ms.push();
|
||||||
ms.translate(location.x, location.y, location.z);
|
ms.translate(location.x, location.y, location.z);
|
||||||
|
@ -209,10 +215,13 @@ public class ParrotElement extends AnimatedSceneElement {
|
||||||
double d1 = p_200602_2_.y - vec3d.y;
|
double d1 = p_200602_2_.y - vec3d.y;
|
||||||
double d2 = p_200602_2_.z - vec3d.z;
|
double d2 = p_200602_2_.z - vec3d.z;
|
||||||
double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2);
|
double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2);
|
||||||
entity.rotationPitch =
|
float targetPitch =
|
||||||
MathHelper.wrapDegrees((float) -(MathHelper.atan2(d1, d3) * (double) (180F / (float) Math.PI)));
|
MathHelper.wrapDegrees((float) -(MathHelper.atan2(d1, d3) * (double) (180F / (float) Math.PI)));
|
||||||
entity.rotationYaw =
|
float targetYaw =
|
||||||
MathHelper.wrapDegrees((float) -(MathHelper.atan2(d2, d0) * (double) (180F / (float) Math.PI)) + 90);
|
MathHelper.wrapDegrees((float) -(MathHelper.atan2(d2, d0) * (double) (180F / (float) Math.PI)) + 90);
|
||||||
|
|
||||||
|
entity.rotationPitch = AngleHelper.angleLerp(.4f, entity.rotationPitch, targetPitch);
|
||||||
|
entity.rotationYaw = AngleHelper.angleLerp(.4f, entity.rotationYaw, targetYaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Vec3d getFacedVec(PonderScene scene);
|
protected abstract Vec3d getFacedVec(PonderScene scene);
|
||||||
|
|
|
@ -73,7 +73,8 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder attachKeyFrame() {
|
public Builder attachKeyFrame() {
|
||||||
scene.builder().addLazyKeyframe();
|
scene.builder()
|
||||||
|
.addLazyKeyframe();
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
||||||
if (fade < 1 / 16f)
|
if (fade < 1 / 16f)
|
||||||
return;
|
return;
|
||||||
Vec2f sceneToScreen = vec != null ? scene.getTransform()
|
Vec2f sceneToScreen = vec != null ? scene.getTransform()
|
||||||
.sceneToScreen(vec) : new Vec2f(0, (screen.height - 200) / 2 + y - 8);
|
.sceneToScreen(vec) : new Vec2f(screen.width / 2, (screen.height - 200) / 2 + y - 8);
|
||||||
|
|
||||||
float yDiff = (screen.height / 2 - sceneToScreen.y - 10) / 100f;
|
float yDiff = (screen.height / 2 - sceneToScreen.y - 10) / 100f;
|
||||||
int targetX = (int) (screen.width * MathHelper.lerp(yDiff * yDiff, 6f / 8, 5f / 8));
|
int targetX = (int) (screen.width * MathHelper.lerp(yDiff * yDiff, 6f / 8, 5f / 8));
|
||||||
|
|
|
@ -47,6 +47,7 @@ public class AnimateElementInstruction<T extends PonderSceneElement> extends Tic
|
||||||
if (element == null)
|
if (element == null)
|
||||||
return;
|
return;
|
||||||
if (remainingTicks == 0) {
|
if (remainingTicks == 0) {
|
||||||
|
setter.accept(element, target);
|
||||||
setter.accept(element, target);
|
setter.accept(element, target);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.simibubi.create.foundation.ponder.instructions;
|
||||||
|
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.ponder.ElementLink;
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.MinecartElement;
|
||||||
|
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
public class AnimateMinecartInstruction extends AnimateElementInstruction<MinecartElement> {
|
||||||
|
|
||||||
|
public static AnimateMinecartInstruction rotate(ElementLink<MinecartElement> link, float rotation, int ticks) {
|
||||||
|
return new AnimateMinecartInstruction(link, new Vec3d(0, rotation, 0), ticks,
|
||||||
|
(wse, v) -> wse.setRotation((float) v.y, ticks == 0), MinecartElement::getRotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AnimateMinecartInstruction move(ElementLink<MinecartElement> link, Vec3d offset, int ticks) {
|
||||||
|
return new AnimateMinecartInstruction(link, offset, ticks, (wse, v) -> wse.setPositionOffset(v, ticks == 0),
|
||||||
|
MinecartElement::getPositionOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected AnimateMinecartInstruction(ElementLink<MinecartElement> link, Vec3d totalDelta, int ticks,
|
||||||
|
BiConsumer<MinecartElement, Vec3d> setter, Function<MinecartElement, Vec3d> getter) {
|
||||||
|
super(link, totalDelta, ticks, setter, getter);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import java.util.Optional;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.deployer.DeployerTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.IBearingTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.bearing.IBearingTileEntity;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
|
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyTileEntity;
|
||||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||||
|
@ -36,6 +37,14 @@ public class AnimateTileEntityInstruction extends TickingInstruction {
|
||||||
.orElse(0f));
|
.orElse(0f));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static AnimateTileEntityInstruction deployer(BlockPos location, float totalDelta, int ticks) {
|
||||||
|
return new AnimateTileEntityInstruction(location, totalDelta, ticks,
|
||||||
|
(w, f) -> castIfPresent(w, location, DeployerTileEntity.class)
|
||||||
|
.ifPresent(deployer -> deployer.setAnimatedOffset(f)),
|
||||||
|
(w) -> castIfPresent(w, location, DeployerTileEntity.class).map(deployer -> deployer.getHandOffset(1))
|
||||||
|
.orElse(0f));
|
||||||
|
}
|
||||||
|
|
||||||
protected AnimateTileEntityInstruction(BlockPos location, float totalDelta, int ticks,
|
protected AnimateTileEntityInstruction(BlockPos location, float totalDelta, int ticks,
|
||||||
BiConsumer<PonderWorld, Float> setter, Function<PonderWorld, Float> getter) {
|
BiConsumer<PonderWorld, Float> setter, Function<PonderWorld, Float> getter) {
|
||||||
super(false, ticks);
|
super(false, ticks);
|
||||||
|
@ -57,7 +66,11 @@ public class AnimateTileEntityInstruction extends TickingInstruction {
|
||||||
public void tick(PonderScene scene) {
|
public void tick(PonderScene scene) {
|
||||||
super.tick(scene);
|
super.tick(scene);
|
||||||
PonderWorld world = scene.getWorld();
|
PonderWorld world = scene.getWorld();
|
||||||
setter.accept(world, (float) (remainingTicks == 0 ? target : getter.apply(world) + deltaPerTick));
|
float current = getter.apply(world);
|
||||||
|
float next = (float) (remainingTicks == 0 ? target : current + deltaPerTick);
|
||||||
|
setter.accept(world, next);
|
||||||
|
if (remainingTicks == 0) // lock interpolation
|
||||||
|
setter.accept(world, next);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static <T> Optional<T> castIfPresent(PonderWorld world, BlockPos pos, Class<T> teType) {
|
private static <T> Optional<T> castIfPresent(PonderWorld world, BlockPos pos, Class<T> teType) {
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.simibubi.create.foundation.ponder.instructions;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.ponder.elements.MinecartElement;
|
||||||
|
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
|
||||||
|
public class CreateMinecartInstruction extends FadeIntoSceneInstruction<MinecartElement> {
|
||||||
|
|
||||||
|
public CreateMinecartInstruction(int fadeInTicks, Direction fadeInFrom, MinecartElement element) {
|
||||||
|
super(fadeInTicks, fadeInFrom, element);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<MinecartElement> getElementClass() {
|
||||||
|
return MinecartElement.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ public abstract class FadeIntoSceneInstruction<T extends AnimatedSceneElement> e
|
||||||
protected void firstTick(PonderScene scene) {
|
protected void firstTick(PonderScene scene) {
|
||||||
super.firstTick(scene);
|
super.firstTick(scene);
|
||||||
scene.addElement(element);
|
scene.addElement(element);
|
||||||
|
element.setVisible(true);
|
||||||
element.setFade(0);
|
element.setFade(0);
|
||||||
element.setFadeVec(new Vec3d(fadeInFrom.getDirectionVec()).scale(.5f));
|
element.setFadeVec(new Vec3d(fadeInFrom.getDirectionVec()).scale(.5f));
|
||||||
if (elementLink != null)
|
if (elementLink != null)
|
||||||
|
@ -32,10 +33,13 @@ public abstract class FadeIntoSceneInstruction<T extends AnimatedSceneElement> e
|
||||||
@Override
|
@Override
|
||||||
public void tick(PonderScene scene) {
|
public void tick(PonderScene scene) {
|
||||||
super.tick(scene);
|
super.tick(scene);
|
||||||
float fade = (remainingTicks / (float) totalTicks);
|
float fade = totalTicks == 0 ? 1 : (remainingTicks / (float) totalTicks);
|
||||||
element.setFade(1 - fade * fade);
|
element.setFade(1 - fade * fade);
|
||||||
if (remainingTicks == 0)
|
if (remainingTicks == 0) {
|
||||||
|
if (totalTicks == 0)
|
||||||
element.setFade(1);
|
element.setFade(1);
|
||||||
|
element.setFade(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ElementLink<T> createLink(PonderScene scene) {
|
public ElementLink<T> createLink(PonderScene scene) {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package com.simibubi.create.foundation.renderState;
|
package com.simibubi.create.foundation.renderState;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.SortedMap;
|
import java.util.SortedMap;
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
@ -13,9 +15,11 @@ import net.minecraft.client.renderer.RegionRenderCacheBuilder;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.model.ModelBakery;
|
import net.minecraft.client.renderer.model.ModelBakery;
|
||||||
import net.minecraft.util.Util;
|
import net.minecraft.util.Util;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
public class SuperRenderTypeBuffer implements IRenderTypeBuffer {
|
public class SuperRenderTypeBuffer implements IRenderTypeBuffer {
|
||||||
|
|
||||||
|
public static BlockPos vertexSortingOrigin = BlockPos.ZERO;
|
||||||
static SuperRenderTypeBuffer instance;
|
static SuperRenderTypeBuffer instance;
|
||||||
|
|
||||||
public static SuperRenderTypeBuffer getInstance() {
|
public static SuperRenderTypeBuffer getInstance() {
|
||||||
|
@ -65,6 +69,7 @@ public class SuperRenderTypeBuffer implements IRenderTypeBuffer {
|
||||||
|
|
||||||
// Visible clones from net.minecraft.client.renderer.RenderTypeBuffers
|
// Visible clones from net.minecraft.client.renderer.RenderTypeBuffers
|
||||||
static final RegionRenderCacheBuilder blockBuilders = new RegionRenderCacheBuilder();
|
static final RegionRenderCacheBuilder blockBuilders = new RegionRenderCacheBuilder();
|
||||||
|
|
||||||
static final SortedMap<RenderType, BufferBuilder> createEntityBuilders() {
|
static final SortedMap<RenderType, BufferBuilder> createEntityBuilders() {
|
||||||
return Util.make(new Object2ObjectLinkedOpenHashMap<>(), (map) -> {
|
return Util.make(new Object2ObjectLinkedOpenHashMap<>(), (map) -> {
|
||||||
map.put(Atlases.getEntitySolid(), blockBuilders.get(RenderType.getSolid()));
|
map.put(Atlases.getEntitySolid(), blockBuilders.get(RenderType.getSolid()));
|
||||||
|
@ -87,7 +92,6 @@ public class SuperRenderTypeBuffer implements IRenderTypeBuffer {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void assign(Object2ObjectLinkedOpenHashMap<RenderType, BufferBuilder> map, RenderType type) {
|
private static void assign(Object2ObjectLinkedOpenHashMap<RenderType, BufferBuilder> map, RenderType type) {
|
||||||
map.put(type, new BufferBuilder(type.getExpectedBufferSize()));
|
map.put(type, new BufferBuilder(type.getExpectedBufferSize()));
|
||||||
}
|
}
|
||||||
|
@ -96,6 +100,20 @@ public class SuperRenderTypeBuffer implements IRenderTypeBuffer {
|
||||||
super(new BufferBuilder(256), createEntityBuilders());
|
super(new BufferBuilder(256), createEntityBuilders());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void draw(RenderType p_228462_1_) {
|
||||||
|
BlockPos v = vertexSortingOrigin;
|
||||||
|
BufferBuilder bufferbuilder = layerBuffers.getOrDefault(p_228462_1_, this.fallbackBuffer);
|
||||||
|
boolean flag = Objects.equals(this.currentLayer, p_228462_1_.asOptional());
|
||||||
|
if (flag || bufferbuilder != this.fallbackBuffer) {
|
||||||
|
if (this.activeConsumers.remove(bufferbuilder)) {
|
||||||
|
p_228462_1_.draw(bufferbuilder, v.getX(), v.getY(), v.getZ());
|
||||||
|
if (flag) {
|
||||||
|
this.currentLayer = Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,4 +109,18 @@ public class MatrixStacker {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MatrixStacker push() {
|
||||||
|
ms.push();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MatrixStacker pop() {
|
||||||
|
ms.pop();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MatrixStack unwrap() {
|
||||||
|
return ms;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,8 @@ public class VecHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isVecPointingTowards(Vec3d vec, Direction direction) {
|
public static boolean isVecPointingTowards(Vec3d vec, Direction direction) {
|
||||||
return new Vec3d(direction.getDirectionVec()).distanceTo(vec.normalize()) < .75;
|
return new Vec3d(direction.getDirectionVec()).dotProduct(vec.normalize()) > 0;
|
||||||
|
//return new Vec3d(direction.getDirectionVec()).distanceTo(vec.normalize()) < .75;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vec3d getCenterOf(Vec3i pos) {
|
public static Vec3d getCenterOf(Vec3i pos) {
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
"ambientocclusion": false,
|
"ambientocclusion": false,
|
||||||
"textures": {
|
"textures": {
|
||||||
"18": "create:block/deployer",
|
"18": "create:block/deployer",
|
||||||
"particle": "create:block/gearbox_top",
|
|
||||||
"mechanical_press_head": "create:block/mechanical_press_head",
|
"mechanical_press_head": "create:block/mechanical_press_head",
|
||||||
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
||||||
},
|
},
|
||||||
|
@ -25,15 +24,15 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"from": [6, 6, 14],
|
"from": [6, 6, 14],
|
||||||
"to": [10, 9, 16],
|
"to": [10, 10, 16],
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 5]},
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 5]},
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
"north": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
||||||
"east": {"uv": [0, 0, 2, 3], "texture": "#mechanical_press_head"},
|
"east": {"uv": [3, 0, 5, 4], "rotation": 180, "texture": "#mechanical_press_head"},
|
||||||
"south": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
"south": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
||||||
"west": {"uv": [0, 0, 2, 3], "texture": "#mechanical_press_head"},
|
"west": {"uv": [3, 0, 5, 4], "texture": "#mechanical_press_head"},
|
||||||
"up": {"uv": [0, 0, 2, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
"up": {"uv": [3, 0, 5, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
||||||
"down": {"uv": [0, 0, 2, 4], "rotation": 90, "texture": "#mechanical_press_head"}
|
"down": {"uv": [3, 0, 5, 4], "rotation": 90, "texture": "#mechanical_press_head"}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
"ambientocclusion": false,
|
"ambientocclusion": false,
|
||||||
"textures": {
|
"textures": {
|
||||||
"18": "create:block/deployer",
|
"18": "create:block/deployer",
|
||||||
"particle": "create:block/gearbox_top",
|
|
||||||
"mechanical_press_head": "create:block/mechanical_press_head",
|
"mechanical_press_head": "create:block/mechanical_press_head",
|
||||||
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
||||||
},
|
},
|
||||||
|
@ -51,15 +50,15 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"from": [6, 6, 14],
|
"from": [6, 6, 14],
|
||||||
"to": [10, 9, 18],
|
"to": [10, 9.95, 18],
|
||||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 5]},
|
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 5]},
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
"north": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
||||||
"east": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
"east": {"uv": [3, 0, 7, 4], "texture": "#mechanical_press_head"},
|
||||||
"south": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
"south": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
||||||
"west": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
"west": {"uv": [3, 0, 7, 4], "texture": "#mechanical_press_head"},
|
||||||
"up": {"uv": [0, 0, 4, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
"up": {"uv": [0, 0, 4, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
||||||
"down": {"uv": [0, 0, 4, 4], "rotation": 90, "texture": "#mechanical_press_head"}
|
"down": {"uv": [4, 8, 8, 12], "rotation": 90, "texture": "#mechanical_press_head"}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
"ambientocclusion": false,
|
"ambientocclusion": false,
|
||||||
"textures": {
|
"textures": {
|
||||||
"18": "create:block/deployer",
|
"18": "create:block/deployer",
|
||||||
"particle": "create:block/gearbox_top",
|
|
||||||
"mechanical_press_head": "create:block/mechanical_press_head",
|
"mechanical_press_head": "create:block/mechanical_press_head",
|
||||||
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
||||||
},
|
},
|
||||||
|
@ -25,14 +24,15 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"from": [6, 6, 14],
|
"from": [6, 6, 14],
|
||||||
"to": [10, 9, 17],
|
"to": [10.05, 9.95, 17],
|
||||||
|
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 0]},
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
"north": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
||||||
"east": {"uv": [0, 0, 3, 3], "texture": "#mechanical_press_head"},
|
"east": {"uv": [4, 0, 7, 4], "texture": "#mechanical_press_head"},
|
||||||
"south": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
"south": {"uv": [0, 0, 4, 3], "texture": "#mechanical_press_head"},
|
||||||
"west": {"uv": [0, 0, 3, 3], "texture": "#mechanical_press_head"},
|
"west": {"uv": [3, 0, 6, 4], "texture": "#mechanical_press_head"},
|
||||||
"up": {"uv": [0, 0, 3, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
"up": {"uv": [3, 0, 6, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
||||||
"down": {"uv": [0, 0, 3, 4], "rotation": 90, "texture": "#mechanical_press_head"}
|
"down": {"uv": [4, 8, 7, 12], "rotation": 270, "texture": "#mechanical_press_head"}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -88,28 +88,28 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"from": [9, 8, 16],
|
"from": [9, 8, 15],
|
||||||
"to": [11, 10, 17],
|
"to": [11, 10, 17],
|
||||||
"rotation": {"angle": 0, "axis": "x", "origin": [7, 8, 8]},
|
"rotation": {"angle": 0, "axis": "x", "origin": [7, 8, 8]},
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": {"uv": [0, 2, 2, 4], "rotation": 90, "texture": "#18"},
|
"north": {"uv": [0, 2, 2, 4], "rotation": 90, "texture": "#18"},
|
||||||
"east": {"uv": [0, 3, 2, 4], "rotation": 90, "texture": "#18"},
|
"east": {"uv": [0, 2, 2, 4], "rotation": 90, "texture": "#18"},
|
||||||
"south": {"uv": [0, 8, 2, 10], "rotation": 180, "texture": "#18"},
|
"south": {"uv": [0, 8, 2, 10], "rotation": 180, "texture": "#18"},
|
||||||
"west": {"uv": [0, 0, 1, 2], "rotation": 180, "texture": "#18"},
|
"west": {"uv": [0, 0, 1, 2], "rotation": 180, "texture": "#18"},
|
||||||
"up": {"uv": [0, 0, 1, 2], "rotation": 90, "texture": "#18"},
|
"up": {"uv": [0, 0, 2, 2], "rotation": 90, "texture": "#18"},
|
||||||
"down": {"uv": [0, 0, 1, 2], "rotation": 270, "texture": "#18"}
|
"down": {"uv": [0, 0, 1, 2], "rotation": 270, "texture": "#18"}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"from": [5, 7, 15],
|
"from": [5, 7, 15],
|
||||||
"to": [9, 10, 17],
|
"to": [10, 11, 17],
|
||||||
"rotation": {"angle": 0, "axis": "x", "origin": [7, 8, 8]},
|
"rotation": {"angle": 0, "axis": "x", "origin": [7, 8, 8]},
|
||||||
"faces": {
|
"faces": {
|
||||||
"north": {"uv": [0, 3, 4, 6], "texture": "#18"},
|
"north": {"uv": [6, 1, 10, 6], "rotation": 90, "texture": "#18"},
|
||||||
"east": {"uv": [1, 2, 3, 5], "texture": "#18"},
|
"east": {"uv": [0, 6, 3, 8], "rotation": 90, "texture": "#18"},
|
||||||
"south": {"uv": [0, 0, 3, 4], "rotation": 270, "texture": "#18"},
|
"south": {"uv": [0, 0, 3, 4], "rotation": 270, "texture": "#18"},
|
||||||
"west": {"uv": [0, 2, 2, 5], "texture": "#18"},
|
"west": {"uv": [0, 2, 2, 6], "texture": "#18"},
|
||||||
"up": {"uv": [0, 0, 2, 4], "rotation": 90, "texture": "#18"},
|
"up": {"uv": [0, 0, 2, 5], "rotation": 90, "texture": "#18"},
|
||||||
"down": {"uv": [1, 4, 3, 8], "rotation": 270, "texture": "#18"}
|
"down": {"uv": [1, 4, 3, 8], "rotation": 270, "texture": "#18"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ attribute float aOffset;
|
||||||
attribute vec3 aAxis;
|
attribute vec3 aAxis;
|
||||||
attribute vec3 aInstanceRot;
|
attribute vec3 aInstanceRot;
|
||||||
attribute vec3 aRotationCenter;
|
attribute vec3 aRotationCenter;
|
||||||
|
attribute float aSpeed;
|
||||||
|
|
||||||
|
|
||||||
varying float Diffuse;
|
varying float Diffuse;
|
||||||
|
@ -57,11 +58,10 @@ mat4 rotation(vec3 rot) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mat4 kineticRotation() {
|
mat4 kineticRotation() {
|
||||||
const float speed = -20.;
|
float degrees = aOffset + uTime * aSpeed / 20.;
|
||||||
float degrees = aOffset + uTime * speed * -3./10.;
|
|
||||||
float angle = fract(degrees / 360.) * PI * 2.;
|
float angle = fract(degrees / 360.) * PI * 2.;
|
||||||
|
|
||||||
return rotate(normalize(aAxis), angle);
|
return rotate(normalize(aAxis), -angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
|
BIN
src/main/resources/ponder/cart_assembler/anchor.nbt
Normal file
BIN
src/main/resources/ponder/cart_assembler/anchor.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/cart_assembler/dual.nbt
Normal file
BIN
src/main/resources/ponder/cart_assembler/dual.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/cart_assembler/modes.nbt
Normal file
BIN
src/main/resources/ponder/cart_assembler/modes.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/cart_assembler/rails.nbt
Normal file
BIN
src/main/resources/ponder/cart_assembler/rails.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/deployer/contraption.nbt
Normal file
BIN
src/main/resources/ponder/deployer/contraption.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/deployer/filter.nbt
Normal file
BIN
src/main/resources/ponder/deployer/filter.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/deployer/modes.nbt
Normal file
BIN
src/main/resources/ponder/deployer/modes.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/deployer/redstone.nbt
Normal file
BIN
src/main/resources/ponder/deployer/redstone.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/furnace_engine.nbt
Normal file
BIN
src/main/resources/ponder/furnace_engine.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/harvester.nbt
Normal file
BIN
src/main/resources/ponder/harvester.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/plough.nbt
Normal file
BIN
src/main/resources/ponder/plough.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/sequenced_gearshift.nbt
Normal file
BIN
src/main/resources/ponder/sequenced_gearshift.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/speed_controller.nbt
Normal file
BIN
src/main/resources/ponder/speed_controller.nbt
Normal file
Binary file not shown.
Loading…
Reference in a new issue