mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-10 20:11:35 +01:00
Merge remote-tracking branch 'upstream/mc1.15/dev' into mc1.15/dev
This commit is contained in:
commit
20da7c7761
47 changed files with 1670 additions and 141 deletions
|
@ -402,19 +402,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
|||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
2b12f3cf99e498899207a8c4855210e7b5dc55cd assets/create/lang/en_ud.json
|
||||
f7bdf2fb1af4cae8bca1735861d603cce0870985 assets/create/lang/en_us.json
|
||||
f83d2acecd5ce6ebe8dfddffde3c5c3a68abd492 assets/create/lang/unfinished/de_de.json
|
||||
35e50f9ba61af0ef900154213b0b25d1dc5469d3 assets/create/lang/unfinished/es_es.json
|
||||
98c26496201d8f12be5f6fc0ddaf919d9098f825 assets/create/lang/unfinished/es_mx.json
|
||||
161ac9821b2445c96c6d594885c2d32cd784e8c5 assets/create/lang/unfinished/fr_fr.json
|
||||
0c1baeb251ff32329a8d34a7200101de2cb724c4 assets/create/lang/unfinished/it_it.json
|
||||
b0ccadbcc765e7ddee1089b3ca65414f5aa1ad95 assets/create/lang/unfinished/ja_jp.json
|
||||
9551b6b6df919ff7e2b7e14361e8061b65cd4857 assets/create/lang/unfinished/ko_kr.json
|
||||
552b3ef71a2898d7e263035ade5b47fb0bcfec23 assets/create/lang/unfinished/nl_nl.json
|
||||
1661f76a0ba088209fcd837a8a1676dbed186368 assets/create/lang/unfinished/pt_br.json
|
||||
621af99986c9e334d224f9a356c25d7468a1ef47 assets/create/lang/unfinished/ru_ru.json
|
||||
6340ad62aedc1fec27abb6b490c36b1fd1317214 assets/create/lang/unfinished/zh_cn.json
|
||||
56a1fedad3d453a36c456085c836fcfbf9740b1d assets/create/lang/unfinished/zh_tw.json
|
||||
14e0e7784c59a76deddf3bfc32e334ce043396fe assets/create/lang/en_us.json
|
||||
9d0c4eb5b8fcf787b1bbdd35dcb2efd37b7b9f9c assets/create/lang/unfinished/de_de.json
|
||||
7e78635390f2802b325aec510ebef35345e2c9a4 assets/create/lang/unfinished/es_es.json
|
||||
f87b6f876dbb50c37ebbd67d9f636f70c5e4e7f2 assets/create/lang/unfinished/es_mx.json
|
||||
866086d9a9fe1f4c39208bf592b75145dd67bb47 assets/create/lang/unfinished/fr_fr.json
|
||||
2f32a7fbbfaa1d78c6f9975c4aa121def52280b7 assets/create/lang/unfinished/it_it.json
|
||||
2041ea4e1e516f7953be44b06092b144df0359b3 assets/create/lang/unfinished/ja_jp.json
|
||||
e5057798e54fe5485a36f71b7298c6b2c73cd1b4 assets/create/lang/unfinished/ko_kr.json
|
||||
e4bdb059ad70595c66c84ebfc3cac6a3929e97c4 assets/create/lang/unfinished/nl_nl.json
|
||||
849db8c87d521cdf0ce8dc21652f8d95eea47194 assets/create/lang/unfinished/pt_br.json
|
||||
cdafda2402e1c3259eba15fdd55a446117fece83 assets/create/lang/unfinished/ru_ru.json
|
||||
8063b79a864f2a1a56c30aabe6df4bd616c938c2 assets/create/lang/unfinished/zh_cn.json
|
||||
bd9961903c4e125cd3029dad62a4a7fd690149aa assets/create/lang/unfinished/zh_tw.json
|
||||
846200eb548d3bfa2e77b41039de159b4b6cfb45 assets/create/models/block/acacia_window.json
|
||||
1930fa3a3c98d53dd19e4ee7f55bc27fd47aa281 assets/create/models/block/acacia_window_pane_noside.json
|
||||
1763ea2c9b981d187f5031ba608f3d5d3be3986a assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||
|
@ -1585,7 +1585,7 @@ d080b1b25e5bc8baf5aee68691b08c7f12ece3b0 assets/create/models/item/windmill_bear
|
|||
9f9455ccb5fc9e3cbfce73862b46078346a522a5 assets/create/models/item/zinc_nugget.json
|
||||
b1689617190c05ef34bd18456b0c7ae09bb3210f assets/create/models/item/zinc_ore.json
|
||||
e76041b7ae829fdd7dc0524f6ca4d2f89fca51bb assets/create/sounds.json
|
||||
5d0cc4c0255dc241e61c173b31ddca70c88d08e4 data/create/advancements/aesthetics.json
|
||||
0f1b4b980afba9bf2caf583b88e261bba8b10313 data/create/advancements/aesthetics.json
|
||||
187921fa131b06721bfaf63f2623a28c141aae9a data/create/advancements/andesite_alloy.json
|
||||
0ea2db7173b5be28b289ea7c9a6a0cf5805c60c7 data/create/advancements/andesite_casing.json
|
||||
356f4855a2a6c65be3fb51d7d1aabf2ca6034d42 data/create/advancements/arm_blaze_burner.json
|
||||
|
|
|
@ -1947,6 +1947,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2059,6 +2090,10 @@
|
|||
"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_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.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",
|
||||
|
@ -2068,6 +2103,12 @@
|
|||
"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_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.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",
|
||||
|
@ -2134,9 +2175,9 @@
|
|||
"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_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_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.text_1": "Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1302",
|
||||
"_": "Missing Localizations: 1337",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 333",
|
||||
"_": "Missing Localizations: 368",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1232",
|
||||
"_": "Missing Localizations: 1267",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1014",
|
||||
"_": "Missing Localizations: 1049",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 350",
|
||||
"_": "Missing Localizations: 385",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 357",
|
||||
"_": "Missing Localizations: 392",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 403",
|
||||
"_": "Missing Localizations: 438",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1501",
|
||||
"_": "Missing Localizations: 1536",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1567",
|
||||
"_": "Missing Localizations: 1602",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 353",
|
||||
"_": "Missing Localizations: 388",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 351",
|
||||
"_": "Missing Localizations: 386",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 356",
|
||||
"_": "Missing Localizations: 391",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1948,6 +1948,37 @@
|
|||
"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.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.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",
|
||||
|
@ -2060,6 +2091,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_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.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",
|
||||
|
@ -2069,6 +2104,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_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.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",
|
||||
|
@ -2135,9 +2176,9 @@
|
|||
"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_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_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.text_1": "UNLOCALIZED: Rope Pulleys can move blocks vertically when given Rotational Force",
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
"trigger": "create:bracket_apply",
|
||||
"conditions": {
|
||||
"accepted_entries": [
|
||||
"create:large_cogwheel",
|
||||
"create:cogwheel"
|
||||
"create:cogwheel",
|
||||
"create:large_cogwheel"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
@ -40,6 +40,8 @@ import com.simibubi.create.content.contraptions.fluids.recipe.PotionMixingRecipe
|
|||
import com.simibubi.create.content.contraptions.processing.BasinRecipe;
|
||||
import com.simibubi.create.content.logistics.block.inventories.AdjustableCrateScreen;
|
||||
import com.simibubi.create.content.logistics.item.filter.AbstractFilterScreen;
|
||||
import com.simibubi.create.content.logistics.item.filter.AttributeFilterScreen;
|
||||
import com.simibubi.create.content.logistics.item.filter.FilterScreen;
|
||||
import com.simibubi.create.content.schematics.block.SchematicTableScreen;
|
||||
import com.simibubi.create.content.schematics.block.SchematicannonScreen;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
|
@ -231,6 +233,8 @@ public class CreateJEI implements IModPlugin {
|
|||
registration.addGuiContainerHandler(AdjustableCrateScreen.class, slotMover);
|
||||
registration.addGuiContainerHandler(SchematicannonScreen.class, slotMover);
|
||||
registration.addGuiContainerHandler(SchematicTableScreen.class, slotMover);
|
||||
registration.addGuiContainerHandler(FilterScreen.class, slotMover);
|
||||
registration.addGuiContainerHandler(AttributeFilterScreen.class, slotMover);
|
||||
registration.addGhostIngredientHandler(AbstractFilterScreen.class, new FilterGhostIngredientHandler());
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Mov
|
|||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.FarmlandBlock;
|
||||
import net.minecraft.block.FlowingFluidBlock;
|
||||
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.world.World;
|
||||
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 {
|
||||
|
||||
|
@ -75,6 +79,20 @@ public class PloughMovementBehaviour extends BlockBreakingMovementBehaviour {
|
|||
.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
|
||||
public void stopMoving(MovementContext context) {
|
||||
super.stopMoving(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.KineticTileEntityRenderer;
|
||||
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.render.ContraptionRenderDispatcher;
|
||||
import com.simibubi.create.foundation.render.SuperByteBuffer;
|
||||
|
@ -129,15 +128,7 @@ public class DeployerRenderer extends SafeTileEntityRenderer<DeployerTileEntity>
|
|||
}
|
||||
|
||||
protected Vec3d getHandOffset(DeployerTileEntity te, float partialTicks, BlockState blockState) {
|
||||
float progress = 0;
|
||||
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);
|
||||
float distance = te.getHandOffset(partialTicks);
|
||||
Vec3d offset = new Vec3d(blockState.get(FACING)
|
||||
.getDirectionVec()).scale(distance);
|
||||
return offset;
|
||||
|
|
|
@ -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.utility.NBTHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -53,6 +54,8 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
private LazyOptional<IItemHandlerModifiable> invHandler;
|
||||
private ListNBT deferredInventoryList;
|
||||
|
||||
private LerpedFloat animatedOffset;
|
||||
|
||||
enum State {
|
||||
WAITING, EXPANDING, RETRACTING, DUMPING;
|
||||
}
|
||||
|
@ -67,6 +70,8 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
mode = Mode.USE;
|
||||
heldItem = ItemStack.EMPTY;
|
||||
redstoneLocked = false;
|
||||
animatedOffset = LerpedFloat.linear()
|
||||
.startWithValue(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -106,7 +111,7 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
|
||||
if (getSpeed() == 0)
|
||||
return;
|
||||
if (!world.isRemote && player != null && player.blockBreakingProgress != null) {
|
||||
|
@ -365,11 +370,11 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
|
||||
@Override
|
||||
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
||||
if (isItemHandlerCap(cap) && invHandler != null)
|
||||
if (isItemHandlerCap(cap) && invHandler != null)
|
||||
return invHandler.cast();
|
||||
return super.getCapability(cap, side);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean addToTooltip(List<String> tooltip, boolean isPlayerSneaking) {
|
||||
if (super.addToTooltip(tooltip, isPlayerSneaking))
|
||||
|
@ -386,4 +391,28 @@ public class DeployerTileEntity extends KineticTileEntity {
|
|||
public boolean shouldRenderAsTE() {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,19 +1,23 @@
|
|||
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.MovementContext;
|
||||
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.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.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class FunnelMovementBehaviour extends MovementBehaviour {
|
||||
|
||||
private final boolean hasFilter;
|
||||
|
@ -32,14 +36,67 @@ public class FunnelMovementBehaviour extends MovementBehaviour {
|
|||
|
||||
@Override
|
||||
public Vec3d getActiveAreaOffset(MovementContext context) {
|
||||
return new Vec3d(FunnelBlock.getFunnelFacing(context.state)
|
||||
.getDirectionVec()).scale(.65);
|
||||
Direction facing = FunnelBlock.getFunnelFacing(context.state);
|
||||
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
|
||||
public void visitNewPosition(MovementContext context, BlockPos 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;
|
||||
List<ItemEntity> items = world.getEntitiesWithinAABB(ItemEntity.class, new AxisAlignedBB(pos));
|
||||
ItemStack filter = getFilter(context);
|
||||
|
@ -61,7 +118,6 @@ public class FunnelMovementBehaviour extends MovementBehaviour {
|
|||
|
||||
item.setItem(remainder);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private ItemStack getFilter(MovementContext context) {
|
||||
|
|
|
@ -4,7 +4,6 @@ import java.lang.ref.WeakReference;
|
|||
import java.util.List;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.CreateClient;
|
||||
import com.simibubi.create.content.contraptions.components.saw.SawTileEntity;
|
||||
import com.simibubi.create.content.contraptions.goggles.IHaveHoveringInformation;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltHelper;
|
||||
|
@ -13,7 +12,6 @@ import com.simibubi.create.content.contraptions.relays.belt.transport.Transporte
|
|||
import com.simibubi.create.content.logistics.block.chute.ChuteTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.funnel.BeltFunnelBlock.Shape;
|
||||
import com.simibubi.create.content.logistics.packet.FunnelFlapPacket;
|
||||
import com.simibubi.create.content.logistics.packet.TunnelFlapPacket;
|
||||
import com.simibubi.create.foundation.config.AllConfigs;
|
||||
import com.simibubi.create.foundation.gui.widgets.InterpolatedChasingValue;
|
||||
import com.simibubi.create.foundation.item.TooltipHelper;
|
||||
|
@ -42,7 +40,6 @@ import net.minecraft.util.math.Vec3d;
|
|||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import net.minecraftforge.fml.DistExecutor;
|
||||
import net.minecraftforge.fml.network.PacketDistributor;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
|
@ -332,7 +329,7 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn
|
|||
extractionCooldown = compound.getInt("TransferCooldown");
|
||||
|
||||
if (clientPacket)
|
||||
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> FastRenderDispatcher.enqueueUpdate(this));
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FastRenderDispatcher.enqueueUpdate(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -386,4 +383,10 @@ public class FunnelTileEntity extends SmartTileEntity implements IHaveHoveringIn
|
|||
TooltipHelper.addHint(tooltip, "hint.horizontal_funnel");
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRenderAsTE() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ public abstract class AbstractFilterContainer extends Container {
|
|||
protected abstract void saveData(ItemStack filterItem);
|
||||
|
||||
protected void addPlayerSlots() {
|
||||
int x = 58;
|
||||
int x = 8;
|
||||
int y = 28 + getInventoryOffset();
|
||||
|
||||
for (int hotbarSlot = 0; hotbarSlot < 9; ++hotbarSlot)
|
||||
|
|
|
@ -6,6 +6,7 @@ import static net.minecraft.util.text.TextFormatting.GRAY;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.simibubi.create.content.logistics.item.filter.FilterScreenPacket.Option;
|
||||
import com.simibubi.create.foundation.gui.AbstractSimiContainerScreen;
|
||||
import com.simibubi.create.foundation.gui.AllGuiTextures;
|
||||
|
@ -19,6 +20,7 @@ import com.simibubi.create.foundation.item.TooltipHelper;
|
|||
import com.simibubi.create.foundation.networking.AllPackets;
|
||||
|
||||
import net.minecraft.client.gui.widget.Widget;
|
||||
import net.minecraft.client.renderer.Rectangle2d;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
|
@ -26,6 +28,7 @@ import net.minecraft.util.text.ITextComponent;
|
|||
public abstract class AbstractFilterScreen<F extends AbstractFilterContainer> extends AbstractSimiContainerScreen<F> {
|
||||
|
||||
protected AllGuiTextures background;
|
||||
private List<Rectangle2d> extraAreas = Collections.EMPTY_LIST;
|
||||
|
||||
private IconButton resetButton;
|
||||
private IconButton confirmButton;
|
||||
|
@ -37,12 +40,15 @@ public abstract class AbstractFilterScreen<F extends AbstractFilterContainer> ex
|
|||
|
||||
@Override
|
||||
protected void init() {
|
||||
setWindowSize(background.width + 80, background.height + PLAYER_INVENTORY.height + 20);
|
||||
setWindowSize(PLAYER_INVENTORY.width, background.height + PLAYER_INVENTORY.height + 20);
|
||||
super.init();
|
||||
widgets.clear();
|
||||
int x = guiLeft - 50;
|
||||
int offset = guiTop < 30 ? 30 - guiTop : 0;
|
||||
extraAreas = ImmutableList.of(new Rectangle2d(x, guiTop + offset, background.width + 70, background.height - offset));
|
||||
|
||||
resetButton = new IconButton(guiLeft + background.width - 62, guiTop + background.height - 24, AllIcons.I_TRASH);
|
||||
confirmButton = new IconButton(guiLeft + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM);
|
||||
resetButton = new IconButton(x + background.width - 62, guiTop + background.height - 24, AllIcons.I_TRASH);
|
||||
confirmButton = new IconButton(x + background.width - 33, guiTop + background.height - 24, AllIcons.I_CONFIRM);
|
||||
|
||||
widgets.add(resetButton);
|
||||
widgets.add(confirmButton);
|
||||
|
@ -50,11 +56,11 @@ public abstract class AbstractFilterScreen<F extends AbstractFilterContainer> ex
|
|||
|
||||
@Override
|
||||
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
||||
int x = guiLeft;
|
||||
int x = guiLeft - 50;
|
||||
int y = guiTop;
|
||||
background.draw(this, x, y);
|
||||
|
||||
int invX = x + 50;
|
||||
int invX = guiLeft;
|
||||
int invY = y + background.height + 10;
|
||||
PLAYER_INVENTORY.draw(this, invX, invY);
|
||||
|
||||
|
@ -62,7 +68,7 @@ public abstract class AbstractFilterScreen<F extends AbstractFilterContainer> ex
|
|||
font.drawStringWithShadow(I18n.format(container.filterItem.getTranslationKey()), x + 15, y + 3, 0xdedede);
|
||||
|
||||
GuiGameElement.of(container.filterItem)
|
||||
.at(guiLeft + background.width, guiTop +background.height -60)
|
||||
.at(x + background.width, guiTop +background.height -60)
|
||||
.scale(5)
|
||||
.render();
|
||||
|
||||
|
@ -150,4 +156,8 @@ public abstract class AbstractFilterScreen<F extends AbstractFilterContainer> ex
|
|||
AllPackets.channel.sendToServer(new FilterScreenPacket(option));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Rectangle2d> getExtraAreas() {
|
||||
return extraAreas;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,8 +62,8 @@ public class AttributeFilterContainer extends AbstractFilterContainer {
|
|||
}
|
||||
|
||||
protected void addFilterSlots() {
|
||||
this.addSlot(new SlotItemHandler(filterInventory, 0, 16, 22));
|
||||
this.addSlot(new SlotItemHandler(filterInventory, 1, 22, 57) {
|
||||
this.addSlot(new SlotItemHandler(filterInventory, 0, -34, 22));
|
||||
this.addSlot(new SlotItemHandler(filterInventory, 1, -28, 57) {
|
||||
@Override
|
||||
public boolean canTakeStack(PlayerEntity playerIn) {
|
||||
return false;
|
||||
|
|
|
@ -60,7 +60,7 @@ public class AttributeFilterScreen extends AbstractFilterScreen<AttributeFilterC
|
|||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
int x = guiLeft;
|
||||
int x = guiLeft - 50;
|
||||
int y = guiTop;
|
||||
|
||||
whitelistDis = new IconButton(x + 47, y + 59, AllIcons.I_WHITELIST_OR);
|
||||
|
@ -158,7 +158,7 @@ public class AttributeFilterScreen extends AbstractFilterScreen<AttributeFilterC
|
|||
RenderSystem.translatef(0.0F, 0.0F, 32.0F);
|
||||
this.setBlitOffset(200);
|
||||
this.itemRenderer.zLevel = 200.0F;
|
||||
this.itemRenderer.renderItemOverlayIntoGUI(font, stack, guiLeft + 22, guiTop + 57,
|
||||
this.itemRenderer.renderItemOverlayIntoGUI(font, stack, guiLeft - 27, guiTop + 57,
|
||||
String.valueOf(selectedAttributes.size() - 1));
|
||||
this.setBlitOffset(0);
|
||||
this.itemRenderer.zLevel = 0.0F;
|
||||
|
|
|
@ -24,7 +24,7 @@ public class FilterContainer extends AbstractFilterContainer {
|
|||
|
||||
@Override
|
||||
protected void addFilterSlots() {
|
||||
int x = 23;
|
||||
int x = -27;
|
||||
int y = 20;
|
||||
|
||||
for (int row = 0; row < 2; ++row)
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.nio.file.Paths;
|
|||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
@ -142,6 +143,56 @@ public class ClientSchematicLoader {
|
|||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Collections.sort(availableSchematics, (a, b) -> {
|
||||
if (a.endsWith(".nbt"))
|
||||
a = a.substring(0, a.length() - 4);
|
||||
if (b.endsWith(".nbt"))
|
||||
b = b.substring(0, b.length() - 4);
|
||||
int aLength = a.length();
|
||||
int bLength = b.length();
|
||||
int minSize = Math.min(aLength, bLength);
|
||||
char aChar, bChar;
|
||||
boolean aNumber, bNumber;
|
||||
boolean asNumeric = false;
|
||||
int lastNumericCompare = 0;
|
||||
for (int i = 0; i < minSize; i++) {
|
||||
aChar = a.charAt(i);
|
||||
bChar = b.charAt(i);
|
||||
aNumber = aChar >= '0' && aChar <= '9';
|
||||
bNumber = bChar >= '0' && bChar <= '9';
|
||||
if (asNumeric)
|
||||
if (aNumber && bNumber) {
|
||||
if (lastNumericCompare == 0)
|
||||
lastNumericCompare = aChar - bChar;
|
||||
} else if (aNumber)
|
||||
return 1;
|
||||
else if (bNumber)
|
||||
return -1;
|
||||
else if (lastNumericCompare == 0) {
|
||||
if (aChar != bChar)
|
||||
return aChar - bChar;
|
||||
asNumeric = false;
|
||||
} else
|
||||
return lastNumericCompare;
|
||||
else if (aNumber && bNumber) {
|
||||
asNumeric = true;
|
||||
if (lastNumericCompare == 0)
|
||||
lastNumericCompare = aChar - bChar;
|
||||
} else if (aChar != bChar)
|
||||
return aChar - bChar;
|
||||
}
|
||||
if (asNumeric)
|
||||
if (aLength > bLength && a.charAt(bLength) >= '0' && a.charAt(bLength) <= '9') // as number
|
||||
return 1; // a has bigger size, thus b is smaller
|
||||
else if (bLength > aLength && b.charAt(aLength) >= '0' && b.charAt(aLength) <= '9') // as number
|
||||
return -1; // b has bigger size, thus a is smaller
|
||||
else if (lastNumericCompare == 0)
|
||||
return aLength - bLength;
|
||||
else
|
||||
return lastNumericCompare;
|
||||
else
|
||||
return aLength - bLength;
|
||||
});
|
||||
}
|
||||
|
||||
public List<String> getAvailableSchematics() {
|
||||
|
|
|
@ -38,6 +38,16 @@ public class SelectionScrollInput extends ScrollInput {
|
|||
protected void updateTooltip() {
|
||||
toolTip.clear();
|
||||
toolTip.add(TextFormatting.BLUE + title);
|
||||
int min = Math.min(this.max - 16, state - 7);
|
||||
int max = Math.max(this.min + 16, state + 8);
|
||||
min = Math.max(min, this.min);
|
||||
max = Math.min(max, this.max);
|
||||
if (this.min + 1 == min)
|
||||
min--;
|
||||
if (min > this.min)
|
||||
toolTip.add(TextFormatting.GRAY + "> ...");
|
||||
if (this.max - 1 == max)
|
||||
max++;
|
||||
for (int i = min; i < max; i++) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
if (i == state)
|
||||
|
@ -46,6 +56,8 @@ public class SelectionScrollInput extends ScrollInput {
|
|||
result.append(TextFormatting.GRAY).append("> ").append(options.get(i));
|
||||
toolTip.add(result.toString());
|
||||
}
|
||||
if (max < this.max)
|
||||
toolTip.add(TextFormatting.GRAY + "> ...");
|
||||
toolTip.add(TextFormatting.DARK_GRAY + "" + TextFormatting.ITALIC + scrollToSelect);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,5 @@
|
|||
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.simibubi.create.foundation.gui.AbstractSimiScreen;
|
||||
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.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
|
||||
|
||||
import net.minecraft.client.MainWindow;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
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 {
|
||||
|
||||
|
@ -31,6 +30,9 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
|||
public final LerpedFloat transition = LerpedFloat.linear()
|
||||
.startWithValue(0)
|
||||
.chase(0, .1f, LerpedFloat.Chaser.LINEAR);
|
||||
protected final LerpedFloat arrowAnimation = LerpedFloat.linear()
|
||||
.startWithValue(0)
|
||||
.chase(0, 0.075f, LerpedFloat.Chaser.LINEAR);
|
||||
protected PonderButton backTrack;
|
||||
|
||||
public NavigatableSimiScreen() {
|
||||
|
@ -50,6 +52,7 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
|||
public void tick() {
|
||||
super.tick();
|
||||
transition.tickChaser();
|
||||
arrowAnimation.tickChaser();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -90,8 +93,13 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
|||
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(0, 0, 500);
|
||||
if (backTrack.isHovered())
|
||||
if (backTrack.isHovered()) {
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -149,8 +157,14 @@ public abstract class NavigatableSimiScreen extends AbstractSimiScreen {
|
|||
RenderSystem.translated(-depthPointX, -depthPointY, 0);
|
||||
|
||||
if (backTrack != null) {
|
||||
UIRenderHelper.breadcrumbArrow(21, height - 51, 30, 20, 5, 0x40aa9999, 0x10aa9999);
|
||||
UIRenderHelper.breadcrumbArrow(-19, height - 51, 40, 20, 5, 0x40aa9999, 0x10aa9999);
|
||||
int x = (int) MathHelper.lerp(arrowAnimation.getValue(partialTicks), -9, 21);
|
||||
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";
|
||||
InputStream resourceAsStream = Create.class.getClassLoader()
|
||||
.getResourceAsStream(filepath);
|
||||
if (resourceAsStream == null)
|
||||
throw new IllegalStateException("Could not find ponder schematic: " + filepath);
|
||||
if (resourceAsStream == null) {
|
||||
Create.logger.error("Ponder schematic missing: " + path);
|
||||
return t;
|
||||
}
|
||||
try (DataInputStream stream =
|
||||
new DataInputStream(new BufferedInputStream(new GZIPInputStream(resourceAsStream)))) {
|
||||
CompoundNBT nbt = CompressedStreamTools.read(stream, new NBTSizeTracker(0x20000000L));
|
||||
|
|
|
@ -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.BeltTileEntity;
|
||||
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.tileEntity.SmartTileEntity;
|
||||
|
||||
|
@ -106,6 +107,7 @@ public class PonderWorld extends SchematicWorld {
|
|||
if (originalBlocks.containsKey(p))
|
||||
blocks.put(p, originalBlocks.get(p));
|
||||
});
|
||||
scene.forEach(WorldSectionElement.class, WorldSectionElement::queueRedraw);
|
||||
}
|
||||
|
||||
public void pushFakeLight(int light) {
|
||||
|
@ -280,7 +282,7 @@ public class PonderWorld extends SchematicWorld {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected BlockState processBlockStateForPrinting(BlockState state) {
|
||||
return state;
|
||||
|
@ -295,5 +297,5 @@ public class PonderWorld extends SchematicWorld {
|
|||
public boolean isBlockPresent(BlockPos pos) {
|
||||
return true; // fix particle lighting
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -177,7 +177,7 @@ public class SceneBuilder {
|
|||
public void showBasePlate() {
|
||||
world.showSection(
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -513,6 +513,10 @@ public class SceneBuilder {
|
|||
public void movePulley(BlockPos pos, float distance, int 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) {
|
||||
addInstruction(new ReplaceBlocksInstruction(selection, $ -> state, true, spawnParticles));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -173,6 +173,7 @@ public class MechanicalSawScenes {
|
|||
public static void treeCutting(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("mechanical_saw_breaker", "Cutting Trees with the Mechanical Saw");
|
||||
scene.configureBasePlate(0, 0, 5);
|
||||
scene.scaleSceneView(.9f);
|
||||
scene.world.setBlock(util.grid.at(2, 0, 2), Blocks.GRASS_BLOCK.getDefaultState(), false);
|
||||
scene.world.showSection(util.select.layer(0)
|
||||
.add(util.select.position(3, 1, 1))
|
||||
|
@ -265,6 +266,7 @@ public class MechanicalSawScenes {
|
|||
public static void contraption(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("mechanical_saw_contraption", "Using Mechanical Saws on Contraptions");
|
||||
scene.configureBasePlate(1, 0, 6);
|
||||
scene.scaleSceneView(.9f);
|
||||
scene.world.setBlock(util.grid.at(2, 0, 3), Blocks.GRASS_BLOCK.getDefaultState(), false);
|
||||
scene.world.showSection(util.select.layer(0)
|
||||
.add(util.select.position(3, 1, 1))
|
||||
|
|
|
@ -1,19 +1,27 @@
|
|||
package com.simibubi.create.foundation.ponder.content;
|
||||
|
||||
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.structureMovement.chassis.LinearChassisBlock;
|
||||
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.ParrotElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.ParrotElement.FlappyPose;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
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.item.ItemEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
@ -189,4 +197,313 @@ public class MovementActorScenes {
|
|||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -148,6 +148,15 @@ public class PonderIndex {
|
|||
.addStoryBoard("mechanical_drill/breaker", MechanicalDrillScenes::breaker, PonderTag.KINETIC_APPLIANCES)
|
||||
.addStoryBoard("mechanical_drill/contraption", MechanicalDrillScenes::contraption,
|
||||
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
|
||||
PonderRegistry.forComponents(AllBlocks.PULSE_REPEATER)
|
||||
|
@ -208,6 +217,7 @@ public class PonderIndex {
|
|||
.add(AllBlocks.MECHANICAL_CRAFTER)
|
||||
.add(AllBlocks.MECHANICAL_DRILL)
|
||||
.add(AllBlocks.MECHANICAL_SAW)
|
||||
.add(AllBlocks.DEPLOYER)
|
||||
.add(AllBlocks.MECHANICAL_PUMP)
|
||||
.add(AllBlocks.MECHANICAL_ARM)
|
||||
.add(AllBlocks.MECHANICAL_PISTON)
|
||||
|
@ -320,7 +330,6 @@ public class PonderIndex {
|
|||
.add(AllBlocks.BRASS_FUNNEL)
|
||||
.add(AllBlocks.SEATS[0])
|
||||
.add(AllBlocks.REDSTONE_CONTACT)
|
||||
.add(AllBlocks.SAIL)
|
||||
.add(Blocks.BELL)
|
||||
.add(Blocks.DISPENSER)
|
||||
.add(Blocks.DROPPER);
|
||||
|
|
|
@ -24,9 +24,9 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
|||
|
||||
// from 0 to 200
|
||||
int y;
|
||||
|
||||
|
||||
Vec3d vec;
|
||||
|
||||
|
||||
boolean nearScene = false;
|
||||
int color = PonderPalette.WHITE.getColor();
|
||||
|
||||
|
@ -52,7 +52,7 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
|||
TextWindowElement.this.y = y;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public Builder independent() {
|
||||
return independent(0);
|
||||
}
|
||||
|
@ -71,12 +71,13 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
|||
TextWindowElement.this.nearScene = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public Builder attachKeyFrame() {
|
||||
scene.builder().addLazyKeyframe();
|
||||
scene.builder()
|
||||
.addLazyKeyframe();
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -86,7 +87,7 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
|||
if (fade < 1 / 16f)
|
||||
return;
|
||||
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;
|
||||
int targetX = (int) (screen.width * MathHelper.lerp(yDiff * yDiff, 6f / 8, 5f / 8));
|
||||
|
@ -122,7 +123,7 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
|||
}
|
||||
|
||||
FontHelper.drawSplitString(screen.getFontRenderer(), bakedText, targetX - 10, 3, textWidth,
|
||||
ColorHelper.applyAlpha(brighterColor, fade));
|
||||
ColorHelper.applyAlpha(brighterColor, fade));
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import java.util.Optional;
|
|||
import java.util.function.BiConsumer;
|
||||
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.pulley.PulleyTileEntity;
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
|
@ -36,6 +37,14 @@ public class AnimateTileEntityInstruction extends TickingInstruction {
|
|||
.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,
|
||||
BiConsumer<PonderWorld, Float> setter, Function<PonderWorld, Float> getter) {
|
||||
super(false, ticks);
|
||||
|
@ -57,7 +66,11 @@ public class AnimateTileEntityInstruction extends TickingInstruction {
|
|||
public void tick(PonderScene scene) {
|
||||
super.tick(scene);
|
||||
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) {
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
"ambientocclusion": false,
|
||||
"textures": {
|
||||
"18": "create:block/deployer",
|
||||
"particle": "create:block/gearbox_top",
|
||||
"mechanical_press_head": "create:block/mechanical_press_head",
|
||||
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
||||
},
|
||||
|
@ -25,15 +24,15 @@
|
|||
},
|
||||
{
|
||||
"from": [6, 6, 14],
|
||||
"to": [10, 9, 16],
|
||||
"to": [10, 10, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 5]},
|
||||
"faces": {
|
||||
"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"},
|
||||
"west": {"uv": [0, 0, 2, 3], "texture": "#mechanical_press_head"},
|
||||
"up": {"uv": [0, 0, 2, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
||||
"down": {"uv": [0, 0, 2, 4], "rotation": 90, "texture": "#mechanical_press_head"}
|
||||
"west": {"uv": [3, 0, 5, 4], "texture": "#mechanical_press_head"},
|
||||
"up": {"uv": [3, 0, 5, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
||||
"down": {"uv": [3, 0, 5, 4], "rotation": 90, "texture": "#mechanical_press_head"}
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
"ambientocclusion": false,
|
||||
"textures": {
|
||||
"18": "create:block/deployer",
|
||||
"particle": "create:block/gearbox_top",
|
||||
"mechanical_press_head": "create:block/mechanical_press_head",
|
||||
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
||||
},
|
||||
|
@ -51,15 +50,15 @@
|
|||
},
|
||||
{
|
||||
"from": [6, 6, 14],
|
||||
"to": [10, 9, 18],
|
||||
"to": [10, 9.95, 18],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 5]},
|
||||
"faces": {
|
||||
"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"},
|
||||
"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"},
|
||||
"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,
|
||||
"textures": {
|
||||
"18": "create:block/deployer",
|
||||
"particle": "create:block/gearbox_top",
|
||||
"mechanical_press_head": "create:block/mechanical_press_head",
|
||||
"mechanical_press_pole": "create:block/mechanical_press_pole"
|
||||
},
|
||||
|
@ -25,14 +24,15 @@
|
|||
},
|
||||
{
|
||||
"from": [6, 6, 14],
|
||||
"to": [10, 9, 17],
|
||||
"to": [10.05, 9.95, 17],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, 0, 0]},
|
||||
"faces": {
|
||||
"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"},
|
||||
"west": {"uv": [0, 0, 3, 3], "texture": "#mechanical_press_head"},
|
||||
"up": {"uv": [0, 0, 3, 4], "rotation": 270, "texture": "#mechanical_press_head"},
|
||||
"down": {"uv": [0, 0, 3, 4], "rotation": 90, "texture": "#mechanical_press_head"}
|
||||
"west": {"uv": [3, 0, 6, 4], "texture": "#mechanical_press_head"},
|
||||
"up": {"uv": [3, 0, 6, 4], "rotation": 270, "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],
|
||||
"rotation": {"angle": 0, "axis": "x", "origin": [7, 8, 8]},
|
||||
"faces": {
|
||||
"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"},
|
||||
"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"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 7, 15],
|
||||
"to": [9, 10, 17],
|
||||
"to": [10, 11, 17],
|
||||
"rotation": {"angle": 0, "axis": "x", "origin": [7, 8, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 3, 4, 6], "texture": "#18"},
|
||||
"east": {"uv": [1, 2, 3, 5], "texture": "#18"},
|
||||
"north": {"uv": [6, 1, 10, 6], "rotation": 90, "texture": "#18"},
|
||||
"east": {"uv": [0, 6, 3, 8], "rotation": 90, "texture": "#18"},
|
||||
"south": {"uv": [0, 0, 3, 4], "rotation": 270, "texture": "#18"},
|
||||
"west": {"uv": [0, 2, 2, 5], "texture": "#18"},
|
||||
"up": {"uv": [0, 0, 2, 4], "rotation": 90, "texture": "#18"},
|
||||
"west": {"uv": [0, 2, 2, 6], "texture": "#18"},
|
||||
"up": {"uv": [0, 0, 2, 5], "rotation": 90, "texture": "#18"},
|
||||
"down": {"uv": [1, 4, 3, 8], "rotation": 270, "texture": "#18"}
|
||||
}
|
||||
}
|
||||
|
|
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/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.
Loading…
Reference in a new issue