mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-10 20:11:35 +01:00
More pondering
- First couple of funnel scenes - More utility methods - Scene progress bar - An inspect mode that does nothing
This commit is contained in:
parent
550744da92
commit
692c6deaaf
36 changed files with 757 additions and 88 deletions
|
@ -401,19 +401,19 @@ a3a11524cd3515fc01d905767b4b7ea782adaf03 assets/create/blockstates/yellow_seat.j
|
|||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||
e3f618c5b622d21880de858678d1802cbf65e615 assets/create/lang/en_ud.json
|
||||
69eecffe64535bdf97970f09d3fd18ffa1dae05b assets/create/lang/en_us.json
|
||||
b61608001cf56be4b8dc32bec82a763610b558fc assets/create/lang/unfinished/de_de.json
|
||||
03756500794e32ff51549269a33b824acaeb74e4 assets/create/lang/unfinished/es_es.json
|
||||
eebffed3ac6127426f8702ee0303cf9669741476 assets/create/lang/unfinished/es_mx.json
|
||||
600126988d661c32b917643fb57c57848f58373f assets/create/lang/unfinished/fr_fr.json
|
||||
fadd7a77044e77183ca72484ec8fa6ddf14312bf assets/create/lang/unfinished/it_it.json
|
||||
51f49b662a8acc436ab98d1fa6287b97be2e5acc assets/create/lang/unfinished/ja_jp.json
|
||||
a92852c60438845b5672c0f2049cc059140644b6 assets/create/lang/unfinished/ko_kr.json
|
||||
daafb42a5c92310dcb9aa223e5e9683be1fa4487 assets/create/lang/unfinished/nl_nl.json
|
||||
be51f53337c9f91d722ffc592070e01115cd575c assets/create/lang/unfinished/pt_br.json
|
||||
464e5a32896c5b6a3c201d1979c98654c672ad89 assets/create/lang/unfinished/ru_ru.json
|
||||
7e12449d2bacf443f8f97ba42bfd82b00a69129c assets/create/lang/unfinished/zh_cn.json
|
||||
cf33f05e397956a60cc386e4244cf96a57b9c152 assets/create/lang/unfinished/zh_tw.json
|
||||
187d765fed859da0aa91e67d35b18589882ae179 assets/create/lang/en_us.json
|
||||
d9dc6a731465072a69754252c9097bfc83f2e0b8 assets/create/lang/unfinished/de_de.json
|
||||
ae5554d2809e669e80f455abd0e67a764fff31da assets/create/lang/unfinished/es_es.json
|
||||
e17b3b528004939b86009e3f88679555f33fbc90 assets/create/lang/unfinished/es_mx.json
|
||||
4f385f92b948be135e268bf7f6f71e346266128d assets/create/lang/unfinished/fr_fr.json
|
||||
1662dcbf578c71c8f2c92dff276766d1b80eae8c assets/create/lang/unfinished/it_it.json
|
||||
53e51f744fd205abfd6cb69ba213d0ba867b1e95 assets/create/lang/unfinished/ja_jp.json
|
||||
75cf95c526518a104c7a1289a4ce529d2d8ffde1 assets/create/lang/unfinished/ko_kr.json
|
||||
e76bf18f466986aadd4b53991267305755ce299c assets/create/lang/unfinished/nl_nl.json
|
||||
06370d657c5967e43df0f4925b3c5b06844a9172 assets/create/lang/unfinished/pt_br.json
|
||||
586f3041725e75e02d440f233c12df3be879cecf assets/create/lang/unfinished/ru_ru.json
|
||||
bbb874798f5125d4870e31bf6636f8e9b40a40b0 assets/create/lang/unfinished/zh_cn.json
|
||||
e3aeeeaccee348630734c63fcbc3e3bea0af6663 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
|
||||
|
|
|
@ -1807,6 +1807,13 @@
|
|||
"create.ponder.pondering": "Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1834,7 +1841,15 @@
|
|||
"create.ponder.brass_hand.scene_7.independent": "This Section renders independently.",
|
||||
"create.ponder.brass_hand.scene_7.merged": "This Section got merged to base.",
|
||||
"create.ponder.brass_hand.scene_7.title": "Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1003",
|
||||
"_": "Missing Localizations: 1017",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 45",
|
||||
"_": "Missing Localizations: 59",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 933",
|
||||
"_": "Missing Localizations: 947",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 715",
|
||||
"_": "Missing Localizations: 729",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 50",
|
||||
"_": "Missing Localizations: 64",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 57",
|
||||
"_": "Missing Localizations: 71",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 104",
|
||||
"_": "Missing Localizations: 118",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1202",
|
||||
"_": "Missing Localizations: 1216",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 1268",
|
||||
"_": "Missing Localizations: 1282",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 54",
|
||||
"_": "Missing Localizations: 68",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 52",
|
||||
"_": "Missing Localizations: 66",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"_": "Missing Localizations: 57",
|
||||
"_": "Missing Localizations: 71",
|
||||
|
||||
"_": "->------------------------] Game Elements [------------------------<-",
|
||||
|
||||
|
@ -1808,6 +1808,13 @@
|
|||
"create.ponder.pondering": "UNLOCALIZED: Pondering about...",
|
||||
"create.ponder.shared.sneak_and": "UNLOCALIZED: Sneak +",
|
||||
"create.ponder.shared.ctrl_and": "UNLOCALIZED: Ctrl +",
|
||||
"create.ponder.brass_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.brass_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.brass_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.brass_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.brass_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.brass_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
"create.ponder.shaft.scene_0.shaft_relay": "UNLOCALIZED: Shafts will relay rotation in a straight line.",
|
||||
"create.ponder.shaft.scene_0.title": "UNLOCALIZED: Relaying rotational force using Shafts",
|
||||
"create.ponder.shaft.scene_1.shaft_can_be_encased": "UNLOCALIZED: Andesite or Brass Casing can be used to encase them.",
|
||||
|
@ -1837,6 +1844,13 @@
|
|||
"create.ponder.brass_hand.scene_7.title": "UNLOCALIZED: Sections",
|
||||
"create.ponder.brass_hand.scene_8.stalling": "UNLOCALIZED: Belt Items can only be force-stalled on the belt they were created on.",
|
||||
"create.ponder.brass_hand.scene_8.title": "UNLOCALIZED: Manipulating Items",
|
||||
"create.ponder.andesite_funnel.scene_0.funnels_transfer": "UNLOCALIZED: Funnels are ideal for transferring items from and to inventories.",
|
||||
"create.ponder.andesite_funnel.scene_0.title": "UNLOCALIZED: Using funnels",
|
||||
"create.ponder.andesite_funnel.scene_1.same_for_other": "UNLOCALIZED: Same rules will apply for most orientations.",
|
||||
"create.ponder.andesite_funnel.scene_1.wrench_reverse": "UNLOCALIZED: Using a wrench, the funnel can be flipped after placement.",
|
||||
"create.ponder.andesite_funnel.scene_1.belt_funnel": "UNLOCALIZED: Funnels in line with a belt will adjust their direction based it.",
|
||||
"create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer",
|
||||
"create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility",
|
||||
|
||||
"_": "Thank you for translating Create!"
|
||||
|
||||
|
|
|
@ -122,7 +122,9 @@ public class AllIcons {
|
|||
|
||||
I_MTD_LEFT = newRow(),
|
||||
I_MTD_CLOSE = next(),
|
||||
I_MTD_RIGHT = next();
|
||||
I_MTD_RIGHT = next(),
|
||||
I_MTD_SCAN = next(),
|
||||
I_MTD_REPLAY = next();
|
||||
|
||||
public AllIcons(int x, int y) {
|
||||
iconX = x * 16;
|
||||
|
|
|
@ -12,6 +12,8 @@ public abstract class PonderInstruction {
|
|||
|
||||
public abstract boolean isComplete();
|
||||
|
||||
public void onScheduled(PonderScene scene) {}
|
||||
|
||||
public abstract void tick(PonderScene scene);
|
||||
|
||||
public static PonderInstruction simple(Consumer<PonderScene> callback) {
|
||||
|
|
|
@ -35,9 +35,9 @@ public class PonderRegistry {
|
|||
all.computeIfAbsent(id, $ -> new ArrayList<>())
|
||||
.add(new PonderStoryBoardEntry(storyBoard, schematic));
|
||||
}
|
||||
|
||||
public static MultiSceneBuilder forComponent(ItemProviderEntry<?> component) {
|
||||
return new MultiSceneBuilder(component);
|
||||
|
||||
public static MultiSceneBuilder forComponents(ItemProviderEntry<?> component, ItemProviderEntry<?>... additional) {
|
||||
return new MultiSceneBuilder(component, additional);
|
||||
}
|
||||
|
||||
public static List<PonderScene> compile(ResourceLocation id) {
|
||||
|
@ -50,7 +50,7 @@ public class PonderRegistry {
|
|||
|
||||
List<PonderStoryBoardEntry> list = all.get(id);
|
||||
List<PonderScene> scenes = new ArrayList<>();
|
||||
|
||||
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
PonderStoryBoardEntry sb = list.get(i);
|
||||
Template activeTemplate = loadSchematic(sb.getSchematicName());
|
||||
|
@ -99,20 +99,24 @@ public class PonderRegistry {
|
|||
});
|
||||
return PonderLocalization.record();
|
||||
}
|
||||
|
||||
|
||||
public static class MultiSceneBuilder {
|
||||
|
||||
private ItemProviderEntry<?> component;
|
||||
private ItemProviderEntry<?>[] additional;
|
||||
|
||||
MultiSceneBuilder(ItemProviderEntry<?> component) {
|
||||
MultiSceneBuilder(ItemProviderEntry<?> component, ItemProviderEntry<?>[] additional) {
|
||||
this.component = component;
|
||||
this.additional = additional;
|
||||
}
|
||||
|
||||
|
||||
public MultiSceneBuilder addStoryBoard(String schematicPath, PonderStoryBoard storyBoard) {
|
||||
PonderRegistry.addStoryBoard(component, schematicPath, storyBoard);
|
||||
for (ItemProviderEntry<?> itemProviderEntry : additional)
|
||||
PonderRegistry.addStoryBoard(itemProviderEntry, schematicPath, storyBoard);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import com.simibubi.create.foundation.ponder.elements.PonderSceneElement;
|
|||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
import com.simibubi.create.foundation.ponder.instructions.HideAllInstruction;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.MatrixStacker;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
@ -30,6 +31,7 @@ import net.minecraft.client.renderer.RenderType;
|
|||
import net.minecraft.client.renderer.Vector4f;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.MutableBoundingBox;
|
||||
import net.minecraft.util.math.Vec2f;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
@ -38,11 +40,11 @@ public class PonderScene {
|
|||
|
||||
boolean finished;
|
||||
int sceneIndex;
|
||||
|
||||
|
||||
List<PonderInstruction> schedule, activeSchedule;
|
||||
Map<UUID, PonderElement> linkedElements;
|
||||
Set<PonderElement> elements;
|
||||
|
||||
|
||||
PonderWorld world;
|
||||
ResourceLocation component;
|
||||
SceneTransform transform;
|
||||
|
@ -58,6 +60,9 @@ public class PonderScene {
|
|||
int offsetZ;
|
||||
int size;
|
||||
|
||||
int totalTime;
|
||||
int currentTime;
|
||||
|
||||
public PonderScene(PonderWorld world, ResourceLocation component, int sceneIndex) {
|
||||
pointOfInterest = Vec3d.ZERO;
|
||||
|
||||
|
@ -88,30 +93,40 @@ public class PonderScene {
|
|||
}
|
||||
|
||||
public void reset() {
|
||||
currentTime = 0;
|
||||
activeSchedule.clear();
|
||||
schedule.forEach(mdi -> mdi.reset(this));
|
||||
}
|
||||
|
||||
public void begin() {
|
||||
reset();
|
||||
forEach(pe -> pe.reset(this));
|
||||
|
||||
world.restore();
|
||||
elements.clear();
|
||||
linkedElements.clear();
|
||||
|
||||
transform = new SceneTransform();
|
||||
finished = false;
|
||||
setPointOfInterest(new Vec3d(0, 4, 0));
|
||||
forEach(pe -> pe.reset(this));
|
||||
elements.clear();
|
||||
linkedElements.clear();
|
||||
activeSchedule.addAll(schedule);
|
||||
|
||||
|
||||
baseWorldSection.setEmpty();
|
||||
baseWorldSection.forceApplyFade(1);
|
||||
elements.add(baseWorldSection);
|
||||
|
||||
totalTime = 0;
|
||||
activeSchedule.addAll(schedule);
|
||||
activeSchedule.forEach(i -> i.onScheduled(this));
|
||||
}
|
||||
|
||||
public WorldSectionElement getBaseWorldSection() {
|
||||
return baseWorldSection;
|
||||
}
|
||||
|
||||
public float getSceneProgress() {
|
||||
return totalTime == 0 ? 0 : currentTime / (float) totalTime;
|
||||
}
|
||||
|
||||
public void fadeOut() {
|
||||
reset();
|
||||
activeSchedule.add(new HideAllInstruction(10, null));
|
||||
|
@ -158,6 +173,9 @@ public class PonderScene {
|
|||
transform.tick();
|
||||
forEach(e -> e.tick(this));
|
||||
|
||||
if (currentTime < totalTime)
|
||||
currentTime++;
|
||||
|
||||
for (Iterator<PonderInstruction> iterator = activeSchedule.iterator(); iterator.hasNext();) {
|
||||
PonderInstruction instruction = iterator.next();
|
||||
instruction.tick(this);
|
||||
|
@ -173,6 +191,10 @@ public class PonderScene {
|
|||
finished = true;
|
||||
}
|
||||
|
||||
public void addToSceneTime(int time) {
|
||||
totalTime += time;
|
||||
}
|
||||
|
||||
public void addElement(PonderElement e) {
|
||||
elements.add(e);
|
||||
}
|
||||
|
@ -205,7 +227,7 @@ public class PonderScene {
|
|||
for (PonderElement elemtent : elements)
|
||||
function.accept(elemtent);
|
||||
}
|
||||
|
||||
|
||||
public <T extends Entity> void forEachWorldEntity(Class<T> type, Consumer<T> function) {
|
||||
for (Entity element : world.getEntities())
|
||||
if (type.isInstance(element))
|
||||
|
@ -289,19 +311,18 @@ public class PonderScene {
|
|||
.rotateX(xRotation.getValue(pt))
|
||||
.rotateY(yRotation.getValue(pt));
|
||||
ms.scale(30, -30, 30);
|
||||
ms.translate((size + offsetX) / -2f, -.5f, (size + offsetZ) / -2f);
|
||||
ms.translate((size + offsetX) / -2f, -1f, (size + offsetZ) / -2f);
|
||||
|
||||
return ms;
|
||||
}
|
||||
|
||||
public Vec3d screenToScene(float x, float y) {
|
||||
refreshMatrix();
|
||||
Vector4f vec = new Vector4f(x, y, 0, 1);
|
||||
cachedMat.invert();
|
||||
vec.transform(cachedMat);
|
||||
cachedMat.invert();
|
||||
MutableBoundingBox bounds = getBounds();
|
||||
return new Vec3d(vec.getX() + bounds.getXSize() / -2f, vec.getY(), vec.getZ() + bounds.getZSize() / -2f);
|
||||
public Vec3d screenToScene(float x, float y, int depth) {
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
Vec3d vec = new Vec3d(x, y, depth);
|
||||
|
||||
// wut
|
||||
|
||||
return vec;
|
||||
}
|
||||
|
||||
public Vec2f sceneToScreen(Vec3d vec) {
|
||||
|
|
|
@ -13,6 +13,7 @@ import com.simibubi.create.foundation.ponder.content.PonderIndex;
|
|||
import com.simibubi.create.foundation.ponder.ui.PonderButton;
|
||||
import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer;
|
||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.Lang;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||
import com.simibubi.create.foundation.utility.LerpedFloat.Chaser;
|
||||
|
@ -23,6 +24,7 @@ import net.minecraft.client.Minecraft;
|
|||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.MutableBoundingBox;
|
||||
|
@ -34,17 +36,21 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
public static final String PONDERING = PonderLocalization.LANG_PREFIX + "pondering";
|
||||
private List<PonderScene> scenes;
|
||||
private LerpedFloat fadeIn;
|
||||
private LerpedFloat sceneProgress;
|
||||
ItemStack stack;
|
||||
private boolean identifyMode;
|
||||
|
||||
private LerpedFloat lazyIndex;
|
||||
private int index = 0;
|
||||
|
||||
private PonderButton left, right, icon;
|
||||
private PonderButton left, right, icon, refresh, scan;
|
||||
|
||||
public PonderUI(List<PonderScene> scenes) {
|
||||
this.scenes = scenes;
|
||||
lazyIndex = LerpedFloat.linear()
|
||||
.startWithValue(index);
|
||||
sceneProgress = LerpedFloat.linear()
|
||||
.startWithValue(0);
|
||||
fadeIn = LerpedFloat.linear()
|
||||
.startWithValue(0)
|
||||
.chase(1, .1f, Chaser.EXP);
|
||||
|
@ -66,29 +72,46 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
}).showing(stack)
|
||||
.fade(0, -1));
|
||||
|
||||
int spacing = 8;
|
||||
int bX = (width - 20) / 2 - (20 + spacing);
|
||||
GameSettings bindings = minecraft.gameSettings;
|
||||
int spacing = 8;
|
||||
int bX = (width - 20) / 2 - (70 + 2 * spacing);
|
||||
|
||||
widgets.add(scan = new PonderButton(bX, bY, () -> identifyMode = !identifyMode).showing(AllIcons.I_MTD_SCAN)
|
||||
.shortcut(bindings.keyBindDrop)
|
||||
.fade(0, -1));
|
||||
|
||||
bX += 50 + spacing;
|
||||
widgets.add(left = new PonderButton(bX, bY, () -> this.scroll(false)).showing(AllIcons.I_MTD_LEFT)
|
||||
.shortcut(bindings.keyBindLeft)
|
||||
.fade(0, -1));
|
||||
|
||||
bX += 20 + spacing;
|
||||
widgets.add(new PonderButton(bX, bY, this::onClose).showing(AllIcons.I_MTD_CLOSE)
|
||||
.shortcut(bindings.keyBindInventory)
|
||||
.fade(0, -1));
|
||||
|
||||
bX += 20 + spacing;
|
||||
widgets.add(right = new PonderButton(bX, bY, () -> this.scroll(true)).showing(AllIcons.I_MTD_RIGHT)
|
||||
.shortcut(bindings.keyBindRight)
|
||||
.fade(0, -1));
|
||||
|
||||
bX += 50 + spacing;
|
||||
widgets.add(refresh = new PonderButton(bX, bY, this::replay).showing(AllIcons.I_MTD_REPLAY)
|
||||
.shortcut(bindings.keyBindBack)
|
||||
.fade(0, -1));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
PonderScene activeScene = scenes.get(index);
|
||||
activeScene.tick();
|
||||
sceneProgress.chase(activeScene.getSceneProgress(), .5f, Chaser.EXP);
|
||||
|
||||
lazyIndex.tickChaser();
|
||||
fadeIn.tickChaser();
|
||||
scenes.get(index)
|
||||
.tick();
|
||||
sceneProgress.tickChaser();
|
||||
|
||||
float lazyIndexValue = lazyIndex.getValue();
|
||||
if (Math.abs(lazyIndexValue - index) > 1 / 512f)
|
||||
scenes.get(lazyIndexValue < index ? index - 1 : index + 1)
|
||||
|
@ -102,6 +125,11 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
return super.mouseScrolled(mouseX, mouseY, delta);
|
||||
}
|
||||
|
||||
protected void replay() {
|
||||
scenes.get(index)
|
||||
.begin();
|
||||
}
|
||||
|
||||
protected boolean scroll(boolean forward) {
|
||||
int prevIndex = index;
|
||||
index = forward ? index + 1 : index - 1;
|
||||
|
@ -121,18 +149,18 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
@Override
|
||||
protected void renderWindow(int mouseX, int mouseY, float partialTicks) {
|
||||
RenderSystem.enableBlend();
|
||||
renderVisibleScenes(partialTicks);
|
||||
renderVisibleScenes(mouseX, mouseY, partialTicks);
|
||||
renderWidgets(mouseX, mouseY, partialTicks);
|
||||
}
|
||||
|
||||
protected void renderVisibleScenes(float partialTicks) {
|
||||
renderScene(index, partialTicks);
|
||||
protected void renderVisibleScenes(int mouseX, int mouseY, float partialTicks) {
|
||||
renderScene(mouseX, mouseY, index, partialTicks);
|
||||
float lazyIndexValue = lazyIndex.getValue(partialTicks);
|
||||
if (Math.abs(lazyIndexValue - index) > 1 / 512f)
|
||||
renderScene(lazyIndexValue < index ? index - 1 : index + 1, partialTicks);
|
||||
renderScene(mouseX, mouseY, lazyIndexValue < index ? index - 1 : index + 1, partialTicks);
|
||||
}
|
||||
|
||||
protected void renderScene(int i, float partialTicks) {
|
||||
protected void renderScene(int mouseX, int mouseY, int i, float partialTicks) {
|
||||
SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance();
|
||||
PonderScene story = scenes.get(i);
|
||||
MatrixStack ms = new MatrixStack();
|
||||
|
@ -157,18 +185,23 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
RenderSystem.pushMatrix();
|
||||
RenderSystem.multMatrix(ms.peek()
|
||||
.getModel());
|
||||
|
||||
RenderSystem.scaled(-1 / 16d, -1 / 16d, 1 / 16d);
|
||||
RenderSystem.translated(1, -8, -1 / 64f);
|
||||
|
||||
// X AXIS
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(4, -3, 0);
|
||||
for (int x = 0; x <= bounds.getXSize(); x++) {
|
||||
RenderSystem.translated(-16, 0, 0);
|
||||
font.drawString(x == bounds.getXSize() ? "x" : "" + x, 0, 0, 0xFFFFFFFF);
|
||||
}
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
// Z AXIS
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.scaled(-1, 1, 1);
|
||||
RenderSystem.translated(0, -3, -4);
|
||||
RenderSystem.rotatef(-90, 0, 1, 0);
|
||||
RenderSystem.translated(-8, -2, 2 / 64f);
|
||||
for (int z = 0; z <= bounds.getZSize(); z++) {
|
||||
|
@ -177,6 +210,23 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
}
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
// DIRECTIONS
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(bounds.getXSize() * -8, 0, bounds.getZSize() * 8);
|
||||
RenderSystem.rotatef(-90, 0, 1, 0);
|
||||
for (Direction d : Iterate.horizontalDirections) {
|
||||
RenderSystem.rotatef(90, 0, 1, 0);
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(0, 0, bounds.getZSize() * 16);
|
||||
RenderSystem.rotatef(-90, 1, 0, 0);
|
||||
font.drawString(d.name()
|
||||
.substring(0, 1), 0, 0, 0x66FFFFFF);
|
||||
font.drawString("|", 2, 10, 0x44FFFFFF);
|
||||
font.drawString(".", 2, 14, 0x22FFFFFF);
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
RenderSystem.popMatrix();
|
||||
|
||||
buffer.draw();
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
@ -205,6 +255,16 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
RenderSystem.popMatrix();
|
||||
}
|
||||
|
||||
if (identifyMode) {
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(mouseX, mouseY, 800);
|
||||
drawString(font, "?", 6, 2, 0xddffffff);
|
||||
RenderSystem.popMatrix();
|
||||
scan.flash();
|
||||
} else {
|
||||
scan.dim();
|
||||
}
|
||||
|
||||
{
|
||||
// Scene overlay
|
||||
RenderSystem.pushMatrix();
|
||||
|
@ -228,11 +288,24 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
if (index == scenes.size() - 1 || index == scenes.size() - 2 && lazyIndexValue > index)
|
||||
right.fade(scenes.size() - lazyIndexValue - 1);
|
||||
|
||||
if (scenes.get(index).isFinished())
|
||||
boolean finished = scenes.get(index)
|
||||
.isFinished();
|
||||
if (finished)
|
||||
right.flash();
|
||||
else
|
||||
right.dim();
|
||||
|
||||
{
|
||||
int x = (width / 2) - 110;
|
||||
int y = right.y + right.getHeight() + 4;
|
||||
int w = width - 2 * x;
|
||||
renderBox(x, y, w, 1, false);
|
||||
RenderSystem.pushMatrix();
|
||||
RenderSystem.translated(x - 2, y - 2, 0);
|
||||
RenderSystem.scaled((w + 4) * sceneProgress.getValue(partialTicks), 1, 1);
|
||||
GuiUtils.drawGradientRect(200, 0, 3, 1, 4, 0x60ffeedd, 0x60ffeedd);
|
||||
RenderSystem.popMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
protected void lowerButtonGroup(int index, int mouseX, int mouseY, float fade, AllIcons icon, KeyBinding key) {
|
||||
|
@ -290,9 +363,11 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
.getKeyCode();
|
||||
int dCode = settings.keyBindRight.getKey()
|
||||
.getKeyCode();
|
||||
int qCode = settings.keyBindDrop.getKey()
|
||||
.getKeyCode();
|
||||
|
||||
if (code == sCode) {
|
||||
onClose();
|
||||
replay();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -306,6 +381,11 @@ public class PonderUI extends AbstractSimiScreen {
|
|||
return true;
|
||||
}
|
||||
|
||||
if (code == qCode) {
|
||||
identifyMode = !identifyMode;
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.keyPressed(code, p_keyPressed_2_, p_keyPressed_3_);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,10 @@ import java.util.function.Consumer;
|
|||
import java.util.function.Function;
|
||||
import java.util.function.UnaryOperator;
|
||||
|
||||
import com.simibubi.create.content.contraptions.base.IRotate.SpeedLevel;
|
||||
import com.simibubi.create.content.contraptions.base.KineticBlock;
|
||||
import com.simibubi.create.content.contraptions.base.KineticTileEntity;
|
||||
import com.simibubi.create.content.contraptions.particle.RotationIndicatorParticleData;
|
||||
import com.simibubi.create.content.contraptions.relays.belt.BeltTileEntity;
|
||||
import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelTileEntity;
|
||||
|
@ -34,6 +37,7 @@ import com.simibubi.create.foundation.ponder.instructions.TileEntityDataInstruct
|
|||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.DirectBeltInputBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour;
|
||||
import com.simibubi.create.foundation.tileEntity.behaviour.belt.TransportedItemStackHandlerBehaviour.TransportedResult;
|
||||
import com.simibubi.create.foundation.utility.ColorHelper;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
|
@ -43,6 +47,7 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.particles.RedstoneParticleData;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Direction.Axis;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
@ -183,9 +188,55 @@ public class SceneBuilder {
|
|||
addInstruction(new EmitParticlesInstruction(location, emitter, amountPerCycle, cycles));
|
||||
}
|
||||
|
||||
private void rotationIndicator(BlockPos pos, boolean direction) {
|
||||
addInstruction(scene -> {
|
||||
BlockState blockState = scene.world.getBlockState(pos);
|
||||
TileEntity tileEntity = scene.world.getTileEntity(pos);
|
||||
|
||||
if (!(blockState.getBlock() instanceof KineticBlock))
|
||||
return;
|
||||
if (!(tileEntity instanceof KineticTileEntity))
|
||||
return;
|
||||
|
||||
KineticTileEntity kte = (KineticTileEntity) tileEntity;
|
||||
KineticBlock kb = (KineticBlock) blockState.getBlock();
|
||||
Axis rotationAxis = kb.getRotationAxis(blockState);
|
||||
|
||||
float speed = kte.getTheoreticalSpeed();
|
||||
int color = direction ? speed > 0 ? 0xeb5e0b : 0x1687a7
|
||||
: SpeedLevel.of(speed)
|
||||
.getColor();
|
||||
|
||||
Vec3d location = VecHelper.getCenterOf(pos);
|
||||
RotationIndicatorParticleData particleData = new RotationIndicatorParticleData(color, speed,
|
||||
kb.getParticleInitialRadius(), kb.getParticleTargetRadius(), 20, rotationAxis.name()
|
||||
.charAt(0));
|
||||
|
||||
for (int i = 0; i < 20; i++)
|
||||
scene.world.addParticle(particleData, location.x, location.y, location.z, 0, 0, 0);
|
||||
});
|
||||
}
|
||||
|
||||
public void rotationSpeedIndicator(BlockPos pos) {
|
||||
rotationIndicator(pos, false);
|
||||
}
|
||||
|
||||
public void rotationDirectionIndicator(BlockPos pos) {
|
||||
rotationIndicator(pos, true);
|
||||
}
|
||||
|
||||
public void indicateRedstone(BlockPos pos) {
|
||||
createRedstoneParticles(pos, 0xFF0000, 10);
|
||||
}
|
||||
|
||||
public void indicateSuccess(BlockPos pos) {
|
||||
addInstruction(new EmitParticlesInstruction(VecHelper.getCenterOf(pos),
|
||||
Emitter.withinBlockSpace(new RedstoneParticleData(.5f, 1, .7f, 1), new Vec3d(0, 0, 0)), 20, 2));
|
||||
createRedstoneParticles(pos, 0x80FFaa, 10);
|
||||
}
|
||||
|
||||
public void createRedstoneParticles(BlockPos pos, int color, int amount) {
|
||||
Vec3d rgb = ColorHelper.getRGB(color);
|
||||
addInstruction(new EmitParticlesInstruction(VecHelper.getCenterOf(pos), Emitter.withinBlockSpace(
|
||||
new RedstoneParticleData((float) rgb.x, (float) rgb.y, (float) rgb.z, 1), Vec3d.ZERO), amount, 2));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -195,7 +246,13 @@ public class SceneBuilder {
|
|||
public void showTargetedText(PonderPalette color, Vec3d position, String key, String defaultText,
|
||||
int duration) {
|
||||
PonderLocalization.registerSpecific(scene.component, scene.sceneIndex, key, defaultText);
|
||||
addInstruction(new TextInstruction(color.getColor(), scene.textGetter(key), duration, position));
|
||||
addInstruction(new TextInstruction(color.getColor(), scene.textGetter(key), duration, position, false));
|
||||
}
|
||||
|
||||
public void showTargetedTextNearScene(PonderPalette color, Vec3d position, String key, String defaultText,
|
||||
int duration) {
|
||||
PonderLocalization.registerSpecific(scene.component, scene.sceneIndex, key, defaultText);
|
||||
addInstruction(new TextInstruction(color.getColor(), scene.textGetter(key), duration, position, true));
|
||||
}
|
||||
|
||||
public void showSelectionWithText(PonderPalette color, Selection selection, String key, String defaultText,
|
||||
|
@ -210,7 +267,7 @@ public class SceneBuilder {
|
|||
}
|
||||
|
||||
public void showControls(InputWindowElement element, int duration) {
|
||||
addInstruction(new ShowInputInstruction(element, duration));
|
||||
addInstruction(new ShowInputInstruction(element.clone(), duration));
|
||||
}
|
||||
|
||||
public void chaseBoundingBoxOutline(PonderPalette color, Object slot, AxisAlignedBB boundingBox, int duration) {
|
||||
|
@ -314,7 +371,7 @@ public class SceneBuilder {
|
|||
}
|
||||
|
||||
public void setBlocks(Selection selection, BlockState state, boolean spawnParticles) {
|
||||
addInstruction(new ReplaceBlocksInstruction(selection, state, true, spawnParticles));
|
||||
addInstruction(new ReplaceBlocksInstruction(selection, $ -> state, true, spawnParticles));
|
||||
}
|
||||
|
||||
public void setBlock(BlockPos pos, BlockState state) {
|
||||
|
@ -322,13 +379,37 @@ public class SceneBuilder {
|
|||
}
|
||||
|
||||
public void replaceBlocks(Selection selection, BlockState state, boolean spawnParticles) {
|
||||
addInstruction(new ReplaceBlocksInstruction(selection, state, false, spawnParticles));
|
||||
modifyBlocks(selection, $ -> state, spawnParticles);
|
||||
}
|
||||
|
||||
public void modifyBlock(BlockPos pos, UnaryOperator<BlockState> stateFunc, boolean spawnParticles) {
|
||||
modifyBlocks(scene.getSceneBuildingUtil().select.position(pos), stateFunc, spawnParticles);
|
||||
}
|
||||
|
||||
public void modifyBlocks(Selection selection, UnaryOperator<BlockState> stateFunc, boolean spawnParticles) {
|
||||
addInstruction(new ReplaceBlocksInstruction(selection, stateFunc, false, spawnParticles));
|
||||
}
|
||||
|
||||
public <T extends Entity> void modifyEntities(Class<T> entityClass, Consumer<T> entityCallBack) {
|
||||
addInstruction(scene -> scene.forEachWorldEntity(entityClass, entityCallBack));
|
||||
}
|
||||
|
||||
public <T extends Entity> void modifyEntitiesInside(Class<T> entityClass, Selection area,
|
||||
Consumer<T> entityCallBack) {
|
||||
addInstruction(scene -> scene.forEachWorldEntity(entityClass, e -> {
|
||||
if (area.test(e.getPosition()))
|
||||
entityCallBack.accept(e);
|
||||
}));
|
||||
}
|
||||
|
||||
public void modifyEntity(ElementLink<EntityElement> link, Consumer<Entity> entityCallBack) {
|
||||
addInstruction(scene -> {
|
||||
EntityElement resolve = scene.resolve(link);
|
||||
if (resolve != null)
|
||||
resolve.ifPresent(entityCallBack::accept);
|
||||
});
|
||||
}
|
||||
|
||||
public ElementLink<EntityElement> createEntity(Function<World, Entity> factory) {
|
||||
ElementLink<EntityElement> link = new ElementLink<>(EntityElement.class, UUID.randomUUID());
|
||||
addInstruction(scene -> {
|
||||
|
@ -362,7 +443,7 @@ public class SceneBuilder {
|
|||
BeltTileEntity beltTileEntity = (BeltTileEntity) tileEntity;
|
||||
DirectBeltInputBehaviour behaviour = beltTileEntity.getBehaviour(DirectBeltInputBehaviour.TYPE);
|
||||
behaviour.handleInsertion(stack, insertionSide.getOpposite(), false);
|
||||
|
||||
|
||||
BeltTileEntity controllerTE = beltTileEntity.getControllerTE();
|
||||
if (controllerTE != null)
|
||||
controllerTE.tick();
|
||||
|
@ -381,6 +462,19 @@ public class SceneBuilder {
|
|||
return link;
|
||||
}
|
||||
|
||||
public void removeItemsFromBelt(BlockPos beltLocation) {
|
||||
addInstruction(scene -> {
|
||||
PonderWorld world = scene.getWorld();
|
||||
TileEntity tileEntity = world.getTileEntity(beltLocation);
|
||||
if (!(tileEntity instanceof BeltTileEntity))
|
||||
return;
|
||||
BeltTileEntity beltTileEntity = (BeltTileEntity) tileEntity;
|
||||
TransportedItemStackHandlerBehaviour transporter =
|
||||
beltTileEntity.getBehaviour(TransportedItemStackHandlerBehaviour.TYPE);
|
||||
transporter.handleProcessingOnAllItems(tis -> TransportedResult.removeItem());
|
||||
});
|
||||
}
|
||||
|
||||
public void stallBeltItem(ElementLink<BeltItemElement> link, boolean stalled) {
|
||||
addInstruction(scene -> {
|
||||
BeltItemElement resolve = scene.resolve(link);
|
||||
|
|
|
@ -64,7 +64,7 @@ public class SceneBuildingUtil {
|
|||
return centerOf(pos).add(new Vec3d(face.getDirectionVec()).scale(.5f + margin));
|
||||
}
|
||||
|
||||
public Vec3d at(double x, double y, double z) {
|
||||
public Vec3d of(double x, double y, double z) {
|
||||
return new Vec3d(x, y, z);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ public class DebugScenes {
|
|||
scene.showBasePlate();
|
||||
scene.idle(10);
|
||||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
|
||||
|
||||
Selection xAxis = util.select.fromTo(2, 1, 1, 4, 1, 1);
|
||||
Selection yAxis = util.select.fromTo(1, 2, 1, 1, 4, 1);
|
||||
Selection zAxis = util.select.fromTo(1, 1, 2, 1, 1, 4);
|
||||
|
@ -153,11 +153,11 @@ public class DebugScenes {
|
|||
scene.world.showSection(util.select.layersFrom(1), Direction.DOWN);
|
||||
scene.idle(10);
|
||||
|
||||
Vec3d emitterPos = util.vector.at(2.5, 2.25, 2.5);
|
||||
Emitter emitter = Emitter.simple(ParticleTypes.LAVA, util.vector.at(0, .1, 0));
|
||||
Vec3d emitterPos = util.vector.of(2.5, 2.25, 2.5);
|
||||
Emitter emitter = Emitter.simple(ParticleTypes.LAVA, util.vector.of(0, .1, 0));
|
||||
Emitter rotation =
|
||||
Emitter.simple(new RotationIndicatorParticleData(SpeedLevel.MEDIUM.getColor(), 12, 1, 1, 20, 'Y'),
|
||||
util.vector.at(0, .1, 0));
|
||||
util.vector.of(0, .1, 0));
|
||||
|
||||
scene.overlay.showTargetedText(WHITE, emitterPos, "incoming", "Incoming...", 20);
|
||||
scene.idle(30);
|
||||
|
@ -191,7 +191,7 @@ public class DebugScenes {
|
|||
|
||||
scene.idle(20);
|
||||
|
||||
scene.overlay.showControls(new InputWindowElement(util.vector.at(1, 4.5, 3.5), Pointing.LEFT).rightClick()
|
||||
scene.overlay.showControls(new InputWindowElement(util.vector.of(1, 4.5, 3.5), Pointing.LEFT).rightClick()
|
||||
.withItem(new ItemStack(Blocks.POLISHED_ANDESITE)), 20);
|
||||
scene.world.showSection(util.select.layer(4), Direction.DOWN);
|
||||
|
||||
|
@ -343,7 +343,7 @@ public class DebugScenes {
|
|||
|
||||
ElementLink<WorldSectionElement> helicopter = scene.world.makeSectionIndependent(hiddenReplaceArea);
|
||||
scene.world.rotateSection(helicopter, 50, 5 * 360, 0, 60);
|
||||
scene.world.moveSection(helicopter, util.vector.at(0, 4, 5), 50);
|
||||
scene.world.moveSection(helicopter, util.vector.of(0, 4, 5), 50);
|
||||
scene.overlay.showText(PonderPalette.BLUE, 30, "blast_off", "Up, up and away.", 30);
|
||||
|
||||
scene.idle(40);
|
||||
|
@ -388,7 +388,7 @@ public class DebugScenes {
|
|||
|
||||
scene.world.modifyEntities(ItemEntity.class, entity -> {
|
||||
if (brassItem.isItemEqual(entity.getItem()))
|
||||
entity.setMotion(util.vector.at(-.15f, .5f, 0));
|
||||
entity.setMotion(util.vector.of(-.15f, .5f, 0));
|
||||
});
|
||||
|
||||
scene.idle(27);
|
||||
|
|
|
@ -0,0 +1,234 @@
|
|||
package com.simibubi.create.foundation.ponder.content;
|
||||
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.content.logistics.block.funnel.FunnelBlock;
|
||||
import com.simibubi.create.foundation.ponder.ElementLink;
|
||||
import com.simibubi.create.foundation.ponder.SceneBuilder;
|
||||
import com.simibubi.create.foundation.ponder.SceneBuildingUtil;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
import com.simibubi.create.foundation.ponder.elements.EntityElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.InputWindowElement;
|
||||
import com.simibubi.create.foundation.ponder.elements.WorldSectionElement;
|
||||
import com.simibubi.create.foundation.utility.Pointing;
|
||||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.state.properties.BlockStateProperties;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
public class FunnelScenes {
|
||||
|
||||
public static void intro(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Using funnels");
|
||||
scene.configureBasePlate(0, 1, 5);
|
||||
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> f / 2f);
|
||||
|
||||
scene.idle(10);
|
||||
|
||||
Selection verticalFunnel = util.select.fromTo(2, -1, 4, 2, 4, 4)
|
||||
.add(util.select.fromTo(1, 1, 4, 1, 4, 4));
|
||||
Selection beltFunnels = util.select.fromTo(1, 2, 2, 3, 2, 2);
|
||||
Selection beltFunnelEnv = util.select.fromTo(0, 1, 0, 5, 2, 2)
|
||||
.substract(beltFunnels);
|
||||
|
||||
scene.world.showSection(beltFunnelEnv, Direction.DOWN);
|
||||
|
||||
scene.idle(20);
|
||||
scene.world.showSection(beltFunnels, Direction.DOWN);
|
||||
|
||||
BlockPos entryBeltPos = util.grid.at(3, 1, 2);
|
||||
BlockPos exitBeltPos = util.grid.at(1, 1, 2);
|
||||
ItemStack itemStack = AllBlocks.BRASS_BLOCK.asStack();
|
||||
Selection exitFunnel = util.select.position(exitBeltPos.up());
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
scene.idle(8);
|
||||
scene.world.removeItemsFromBelt(exitBeltPos);
|
||||
scene.world.flapFunnels(exitFunnel, false);
|
||||
if (i == 2)
|
||||
scene.rotateCameraY(70);
|
||||
if (i < 6)
|
||||
scene.world.createItemOnBelt(entryBeltPos, Direction.EAST, itemStack);
|
||||
}
|
||||
|
||||
scene.rotateCameraY(-70);
|
||||
scene.idle(10);
|
||||
|
||||
Selection outputFunnel = util.select.position(1, 2, 4);
|
||||
scene.world.setBlocks(outputFunnel, Blocks.AIR.getDefaultState(), false);
|
||||
scene.world.setBlocks(util.select.fromTo(2, -1, 4, 2, 0, 4), AllBlocks.ANDESITE_CASING.getDefaultState(), true);
|
||||
ElementLink<WorldSectionElement> independentSection =
|
||||
scene.world.showIndependentSection(verticalFunnel, Direction.UP);
|
||||
|
||||
Vec3d topItemSpawn = util.vector.centerOf(2, 6, 4);
|
||||
Vec3d sideItemSpawn = util.vector.centerOf(1, 3, 4)
|
||||
.add(0.15f, -0.45f, 0);
|
||||
ElementLink<EntityElement> lastItemEntity = null;
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (lastItemEntity != null)
|
||||
scene.world.modifyEntity(lastItemEntity, Entity::remove);
|
||||
if (i < 3)
|
||||
lastItemEntity = scene.world.createItemEntity(topItemSpawn, util.vector.of(0, -0.4, 0), itemStack);
|
||||
scene.idle(8);
|
||||
}
|
||||
|
||||
scene.world.moveSection(independentSection, util.vector.of(0, 1, 0), 15);
|
||||
scene.idle(10);
|
||||
scene.world.setBlocks(outputFunnel, AllBlocks.ANDESITE_FUNNEL.getDefaultState()
|
||||
.with(FunnelBlock.FACING, Direction.WEST)
|
||||
.with(FunnelBlock.EXTRACTING, true), false);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
scene.idle(8);
|
||||
scene.world.flapFunnels(outputFunnel, false);
|
||||
scene.world.createItemEntity(sideItemSpawn, util.vector.of(-.05, 0, 0), itemStack);
|
||||
}
|
||||
|
||||
scene.idle(8);
|
||||
scene.overlay.showText(PonderPalette.WHITE, 0, "funnels_transfer",
|
||||
"Funnels are ideal for transferring items from and to inventories.", 360);
|
||||
scene.markAsFinished();
|
||||
}
|
||||
|
||||
public static void directionality(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Direction of Transfer");
|
||||
scene.configureBasePlate(0, 0, 5);
|
||||
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||
scene.world.modifyKineticSpeed(util.select.everywhere(), f -> f / 2f);
|
||||
scene.world.setBlocks(util.select.position(3, 1, 1), AllBlocks.ANDESITE_CASING.getDefaultState(), false);
|
||||
|
||||
BlockPos topFunnel = util.grid.at(3, 3, 2);
|
||||
Selection topFunnelSelection = util.select.position(topFunnel);
|
||||
Selection firstShow = util.select.fromTo(3, 1, 2, 3, 2, 2);
|
||||
scene.idle(5);
|
||||
|
||||
scene.world.showSection(firstShow, Direction.DOWN);
|
||||
scene.idle(15);
|
||||
|
||||
ItemStack itemStack = AllBlocks.BRASS_BLOCK.asStack();
|
||||
Vec3d topCenter = util.vector.centerOf(topFunnel);
|
||||
Vec3d topSide = util.vector.blockSurface(topFunnel, Direction.EAST);
|
||||
|
||||
InputWindowElement controlsSneak = new InputWindowElement(topCenter, Pointing.DOWN).rightClick()
|
||||
.whileSneaking();
|
||||
|
||||
// Placing funnels without sneak
|
||||
scene.world.showSection(topFunnelSelection, Direction.DOWN);
|
||||
scene.overlay.showTargetedTextNearScene(PonderPalette.WHITE, topCenter, "regular_place",
|
||||
"Placed normally, it pull items from the inventory.", 80);
|
||||
scene.idle(45);
|
||||
|
||||
ElementLink<EntityElement> itemLink =
|
||||
scene.world.createItemEntity(topCenter, util.vector.of(0, 4 / 16f, 0), itemStack);
|
||||
scene.idle(40);
|
||||
|
||||
scene.world.modifyEntity(itemLink, Entity::remove);
|
||||
scene.world.hideSection(topFunnelSelection, Direction.UP);
|
||||
scene.idle(20);
|
||||
|
||||
// Placing funnels with sneak
|
||||
scene.world.modifyBlock(topFunnel, s -> s.with(FunnelBlock.EXTRACTING, false), false);
|
||||
scene.idle(5);
|
||||
|
||||
scene.world.showSection(topFunnelSelection, Direction.DOWN);
|
||||
scene.overlay.showControls(controlsSneak, 35);
|
||||
scene.overlay.showTargetedTextNearScene(PonderPalette.WHITE, topCenter, "sneak_place",
|
||||
"Placed while sneaking, it will put items into the inventory.", 80);
|
||||
scene.idle(45);
|
||||
|
||||
itemLink = scene.world.createItemEntity(topCenter.add(0, 3, 0), util.vector.of(0, -0.2, 0), itemStack);
|
||||
scene.idle(10);
|
||||
|
||||
scene.world.modifyEntity(itemLink, Entity::remove);
|
||||
scene.idle(45);
|
||||
|
||||
// Wrench interaction
|
||||
InputWindowElement wrenchControls = new InputWindowElement(topSide, Pointing.RIGHT).rightClick()
|
||||
.withWrench();
|
||||
scene.overlay.showControls(wrenchControls, 40);
|
||||
scene.idle(10);
|
||||
scene.world.modifyBlock(topFunnel, s -> s.cycle(FunnelBlock.EXTRACTING), true);
|
||||
scene.idle(10);
|
||||
scene.overlay.showTargetedTextNearScene(PonderPalette.WHITE, topCenter, "wrench_reverse",
|
||||
"Using a wrench, the funnel can be flipped after placement.", 80);
|
||||
|
||||
itemLink = scene.world.createItemEntity(topCenter, util.vector.of(0, 4 / 16f, 0), itemStack);
|
||||
scene.idle(30);
|
||||
|
||||
scene.overlay.showControls(wrenchControls, 40);
|
||||
scene.idle(10);
|
||||
scene.world.modifyBlock(topFunnel, s -> s.cycle(FunnelBlock.EXTRACTING), true);
|
||||
scene.idle(10);
|
||||
scene.world.modifyEntity(itemLink, Entity::remove);
|
||||
|
||||
scene.idle(20);
|
||||
|
||||
// Side funnel
|
||||
BlockPos sideFunnel = util.grid.at(3, 2, 1);
|
||||
Selection sideFunnelSelection = util.select.fromTo(sideFunnel.down(), sideFunnel);
|
||||
Vec3d sideCenter = util.vector.centerOf(sideFunnel);
|
||||
|
||||
scene.world.modifyBlock(sideFunnel, s -> s.cycle(FunnelBlock.EXTRACTING), false);
|
||||
scene.world.showSection(sideFunnelSelection, Direction.DOWN);
|
||||
scene.overlay.showTargetedTextNearScene(PonderPalette.WHITE, sideCenter, "same_for_other",
|
||||
"Same rules will apply for most orientations.", 70);
|
||||
|
||||
scene.idle(20);
|
||||
|
||||
scene.world.flapFunnels(sideFunnelSelection, true);
|
||||
itemLink = scene.world.createItemEntity(sideCenter.subtract(0, .45, 0), util.vector.of(0, 0, -0.1), itemStack);
|
||||
scene.idle(60);
|
||||
scene.world.hideSection(sideFunnelSelection, Direction.UP);
|
||||
scene.world.hideSection(topFunnelSelection, Direction.UP);
|
||||
scene.world.modifyEntity(itemLink, Entity::remove);
|
||||
scene.idle(20);
|
||||
|
||||
// Belt funnel
|
||||
Selection beltFunnelSetup = util.select.fromTo(0, 1, 0, 2, 2, 5);
|
||||
Selection gearshiftAndLever = util.select.fromTo(1, 1, 4, 1, 2, 4);
|
||||
Selection gearshiftedKinetics = util.select.fromTo(1, 1, 2, 2, 1, 4);
|
||||
Vec3d topOfBeltFunnel = util.vector.topOf(2, 2, 2);
|
||||
BlockPos beltPos = util.grid.at(2, 1, 2);
|
||||
BlockPos cogPos = util.grid.at(1, 1, 3);
|
||||
|
||||
scene.world.showSection(beltFunnelSetup, Direction.DOWN);
|
||||
scene.overlay.showTargetedText(PonderPalette.WHITE, topOfBeltFunnel, "belt_funnel",
|
||||
"Funnels on belts will extract/insert depending on its movement direction.", 140);
|
||||
scene.idle(15);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
scene.world.createItemOnBelt(beltPos, Direction.EAST, itemStack);
|
||||
scene.effects.rotationDirectionIndicator(cogPos);
|
||||
scene.idle(50);
|
||||
|
||||
scene.world.modifyBlocks(gearshiftAndLever, s -> s.cycle(BlockStateProperties.POWERED), false);
|
||||
scene.world.modifyKineticSpeed(gearshiftedKinetics, f -> -f);
|
||||
scene.effects.indicateRedstone(util.grid.at(1, 2, 4));
|
||||
scene.effects.rotationDirectionIndicator(cogPos);
|
||||
scene.idle(35);
|
||||
|
||||
scene.world.removeItemsFromBelt(beltPos);
|
||||
scene.world.flapFunnels(beltFunnelSetup, false);
|
||||
|
||||
if (i == 0) {
|
||||
scene.idle(50);
|
||||
scene.world.modifyBlocks(gearshiftAndLever, s -> s.cycle(BlockStateProperties.POWERED), false);
|
||||
scene.world.modifyKineticSpeed(gearshiftedKinetics, f -> -f);
|
||||
scene.effects.indicateRedstone(util.grid.at(1, 2, 4));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void mounting(SceneBuilder scene, SceneBuildingUtil util) {
|
||||
scene.title("Funnel compatibility");
|
||||
scene.configureBasePlate(0, 0, 5);
|
||||
scene.world.showSection(util.select.layer(0), Direction.UP);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -52,7 +52,7 @@ public class KineticsScenes {
|
|||
scene.world.setKineticSpeed(gauge, 64);
|
||||
scene.effects.indicateSuccess(gaugePos);
|
||||
scene.idle(10);
|
||||
scene.overlay.showTargetedText(WHITE, util.vector.at(3, 1.5, 2.5), "shaft_relay",
|
||||
scene.overlay.showTargetedText(WHITE, util.vector.of(3, 1.5, 2.5), "shaft_relay",
|
||||
"Shafts will relay rotation in a straight line.", 1000);
|
||||
|
||||
scene.idle(20);
|
||||
|
@ -92,7 +92,7 @@ public class KineticsScenes {
|
|||
scene.world.setKineticSpeed(shaft, -112);
|
||||
|
||||
scene.idle(10);
|
||||
scene.overlay.showTargetedText(WHITE, util.vector.at(1.5, 2, 2.5), "shaft_can_be_encased",
|
||||
scene.overlay.showTargetedText(WHITE, util.vector.of(1.5, 2, 2.5), "shaft_can_be_encased",
|
||||
"Andesite or Brass Casing can be used to encase them.", 1000);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,10 +12,18 @@ public class PonderIndex {
|
|||
// (!) Added entries require re-launch
|
||||
// (!) Modifications inside storyboard methods only require re-opening the ui
|
||||
|
||||
PonderRegistry.forComponent(AllBlocks.SHAFT)
|
||||
PonderRegistry.forComponents(AllBlocks.SHAFT)
|
||||
.addStoryBoard("shaft/relay", KineticsScenes::shaftAsRelay)
|
||||
.addStoryBoard("shaft/encasing", KineticsScenes::shaftsCanBeEncased);
|
||||
|
||||
PonderRegistry.forComponents(AllBlocks.ANDESITE_FUNNEL, AllBlocks.BRASS_FUNNEL)
|
||||
.addStoryBoard("funnels/intro", FunnelScenes::intro)
|
||||
.addStoryBoard("funnels/direction", FunnelScenes::directionality)
|
||||
.addStoryBoard("funnels/mounting", FunnelScenes::mounting);
|
||||
// redstone
|
||||
// brass vs andesite
|
||||
// arm compat?
|
||||
|
||||
// Debug scenes, can be found in game via the Brass Hand
|
||||
if (EDITOR_MODE)
|
||||
DebugScenes.registerAll();
|
||||
|
|
|
@ -20,12 +20,18 @@ import net.minecraft.util.math.Vec3d;
|
|||
public class InputWindowElement extends AnimatedOverlayElement {
|
||||
|
||||
private Pointing direction;
|
||||
|
||||
String key;
|
||||
AllIcons icon;
|
||||
ItemStack item = ItemStack.EMPTY;
|
||||
|
||||
private Vec3d sceneSpace;
|
||||
|
||||
public InputWindowElement clone() {
|
||||
InputWindowElement inputWindowElement = new InputWindowElement(sceneSpace, direction);
|
||||
inputWindowElement.key = key;
|
||||
inputWindowElement.icon = icon;
|
||||
inputWindowElement.item = item.copy();
|
||||
return inputWindowElement;
|
||||
}
|
||||
|
||||
public InputWindowElement(Vec3d sceneSpace, Pointing direction) {
|
||||
this.sceneSpace = sceneSpace;
|
||||
|
|
|
@ -23,6 +23,7 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
|||
int y;
|
||||
|
||||
Vec3d vec;
|
||||
boolean nearScene;
|
||||
int color;
|
||||
|
||||
public TextWindowElement(Supplier<String> textGetter) {
|
||||
|
@ -42,6 +43,11 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
|||
this.y = y;
|
||||
return this;
|
||||
}
|
||||
|
||||
public TextWindowElement placeNearTarget() {
|
||||
this.nearScene = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void render(PonderScene scene, PonderUI screen, MatrixStack ms, float partialTicks, float fade) {
|
||||
|
@ -54,7 +60,11 @@ public class TextWindowElement extends AnimatedOverlayElement {
|
|||
|
||||
float yDiff = (screen.height / 2 - sceneToScreen.y - 10) / 100f;
|
||||
int targetX = (int) (screen.width * MathHelper.lerp(yDiff * yDiff, 6f / 8, 5f / 8));
|
||||
int textWidth = screen.width - targetX;
|
||||
|
||||
if (nearScene)
|
||||
targetX = (int) Math.min(targetX, sceneToScreen.x + 50);
|
||||
|
||||
int textWidth = Math.min(screen.width - targetX, 180);
|
||||
|
||||
List<String> list = screen.getFontRenderer()
|
||||
.listFormattedStringToWidth(bakedText, textWidth);
|
||||
|
|
|
@ -172,6 +172,18 @@ public class WorldSectionElement extends AnimatedSceneElement {
|
|||
light = (int) (MathHelper.lerp(fade, 5, 14));
|
||||
if (redraw)
|
||||
renderedTileEntities = null;
|
||||
|
||||
//TODO: extract method
|
||||
float pt = AnimationTickHolder.getPartialTicks();
|
||||
MatrixStacker.of(ms)
|
||||
.translate(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset));
|
||||
if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO))
|
||||
MatrixStacker.of(ms)
|
||||
.translate(centerOfRotation)
|
||||
.rotateX(MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x))
|
||||
.rotateZ(MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z))
|
||||
.rotateY(MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y))
|
||||
.translateBack(centerOfRotation);
|
||||
|
||||
world.pushFakeLight(light);
|
||||
renderTileEntities(world, ms, buffer);
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.simibubi.create.foundation.ponder.instructions;
|
||||
|
||||
import java.util.function.UnaryOperator;
|
||||
|
||||
import com.simibubi.create.foundation.ponder.PonderScene;
|
||||
import com.simibubi.create.foundation.ponder.PonderWorld;
|
||||
import com.simibubi.create.foundation.ponder.Selection;
|
||||
|
@ -9,11 +11,11 @@ import net.minecraft.block.Blocks;
|
|||
|
||||
public class ReplaceBlocksInstruction extends WorldModifyInstruction {
|
||||
|
||||
private BlockState stateToUse;
|
||||
private UnaryOperator<BlockState> stateToUse;
|
||||
private boolean replaceAir;
|
||||
private boolean spawnParticles;
|
||||
|
||||
public ReplaceBlocksInstruction(Selection selection, BlockState stateToUse, boolean replaceAir,
|
||||
public ReplaceBlocksInstruction(Selection selection, UnaryOperator<BlockState> stateToUse, boolean replaceAir,
|
||||
boolean spawnParticles) {
|
||||
super(selection);
|
||||
this.stateToUse = stateToUse;
|
||||
|
@ -33,7 +35,7 @@ public class ReplaceBlocksInstruction extends WorldModifyInstruction {
|
|||
return;
|
||||
if (spawnParticles)
|
||||
world.addBlockDestroyEffects(pos, prevState);
|
||||
world.setBlockState(pos, stateToUse);
|
||||
world.setBlockState(pos, stateToUse.apply(prevState));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -27,10 +27,12 @@ public class TextInstruction extends FadeInOutInstruction {
|
|||
.colored(color));
|
||||
}
|
||||
|
||||
public TextInstruction(int color, Supplier<String> text, int duration, Vec3d position) {
|
||||
public TextInstruction(int color, Supplier<String> text, int duration, Vec3d position, boolean near) {
|
||||
this(color, text, duration);
|
||||
element = new TextWindowElement(text).pointAt(position);
|
||||
element.colored(color);
|
||||
if (near)
|
||||
element.placeNearTarget();
|
||||
}
|
||||
|
||||
public TextInstruction(int color, Supplier<String> text, int duration, int y) {
|
||||
|
|
|
@ -21,6 +21,13 @@ public abstract class TickingInstruction extends PonderInstruction {
|
|||
}
|
||||
|
||||
protected void firstTick(PonderScene scene) {}
|
||||
|
||||
@Override
|
||||
public void onScheduled(PonderScene scene) {
|
||||
super.onScheduled(scene);
|
||||
if (isBlocking())
|
||||
scene.addToSceneTime(totalTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(PonderScene scene) {
|
||||
|
|
|
@ -126,6 +126,8 @@ public class FilteringHandler {
|
|||
return false;
|
||||
if (!filtering.isCountVisible())
|
||||
return false;
|
||||
if (!filtering.isActive())
|
||||
return false;
|
||||
if (filtering.slotPositioning instanceof ValueBoxTransform.Sided)
|
||||
((Sided) filtering.slotPositioning).fromSide(result.getFace());
|
||||
if (!filtering.testHit(objectMouseOver.getHitVec()))
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.8 KiB |
BIN
src/main/resources/ponder/funnels/direction.nbt
Normal file
BIN
src/main/resources/ponder/funnels/direction.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/funnels/intro.nbt
Normal file
BIN
src/main/resources/ponder/funnels/intro.nbt
Normal file
Binary file not shown.
BIN
src/main/resources/ponder/funnels/mounting.nbt
Normal file
BIN
src/main/resources/ponder/funnels/mounting.nbt
Normal file
Binary file not shown.
Loading…
Reference in a new issue