diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 887d155c4..aef7b05d8 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -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 -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 +07eaea807200c157af29adbbc411d2a80b9cade5 assets/create/lang/en_us.json +3f89caaa4c6ac34222ebd1d5577139c18a9aa6b8 assets/create/lang/unfinished/de_de.json +591db95e6cd9e9f3f106ef4dc1f9ce475edee4df assets/create/lang/unfinished/es_es.json +ee7da78e00b92e5fde92c8ad8b25627bb7f478c7 assets/create/lang/unfinished/es_mx.json +3b604e06a29ddac65e71e4b853e88066496b3118 assets/create/lang/unfinished/fr_fr.json +d50db792720189290b382537f2703d08feab7f52 assets/create/lang/unfinished/it_it.json +2969a487f270d80969d69a5f76cef7e1b41c5c9e assets/create/lang/unfinished/ja_jp.json +5df95bcadb862b4522439ea66dc28a018771562b assets/create/lang/unfinished/ko_kr.json +9f65db261fdda1c22691b5238a8327d7aabcb912 assets/create/lang/unfinished/nl_nl.json +1864077ccca4c023e5bee33a3b1efe9ccdcaad28 assets/create/lang/unfinished/pt_br.json +1559765f5d8f1361e1a78680c60dd16ac5111259 assets/create/lang/unfinished/ru_ru.json +7b9680e0d83fdd4749418e54342fa567b4e2ea6b assets/create/lang/unfinished/zh_cn.json +ea077d3e3141001ebe3fb2cda60276ac21647a1f 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 diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index c95acc466..b7a9084e2 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1804,15 +1804,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "Hold [%1$s] to Ponder", + "create.ponder.subject": "Subject of this scene", "create.ponder.pondering": "Pondering about...", + "create.ponder.identify_mode": "Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "Placed normally, it pull items from the inventory.", "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.belt_funnel": "Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "Placed while sneaking, it will put items into the inventory.", "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", @@ -1845,10 +1849,12 @@ "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.regular_place": "Placed normally, it pull items from the inventory.", "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.belt_funnel": "Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/de_de.json b/src/generated/resources/assets/create/lang/unfinished/de_de.json index 09c4d73bb..2bf4d5364 100644 --- a/src/generated/resources/assets/create/lang/unfinished/de_de.json +++ b/src/generated/resources/assets/create/lang/unfinished/de_de.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1017", + "_": "Missing Localizations: 1023", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/es_es.json b/src/generated/resources/assets/create/lang/unfinished/es_es.json index dd5db5758..9f0011544 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_es.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_es.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 59", + "_": "Missing Localizations: 65", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/es_mx.json b/src/generated/resources/assets/create/lang/unfinished/es_mx.json index d8fe9bdc7..33cd85111 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_mx.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_mx.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 947", + "_": "Missing Localizations: 953", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json index a6065aa98..01831c87c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/fr_fr.json +++ b/src/generated/resources/assets/create/lang/unfinished/fr_fr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 729", + "_": "Missing Localizations: 735", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/it_it.json b/src/generated/resources/assets/create/lang/unfinished/it_it.json index 4118fc830..14100deba 100644 --- a/src/generated/resources/assets/create/lang/unfinished/it_it.json +++ b/src/generated/resources/assets/create/lang/unfinished/it_it.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 64", + "_": "Missing Localizations: 70", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json index 5ecc3c2d7..88b1f8229 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ja_jp.json +++ b/src/generated/resources/assets/create/lang/unfinished/ja_jp.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 71", + "_": "Missing Localizations: 77", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json index fe8092627..b755f5f47 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ko_kr.json +++ b/src/generated/resources/assets/create/lang/unfinished/ko_kr.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 118", + "_": "Missing Localizations: 124", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json index f2efff87e..2890bc7ef 100644 --- a/src/generated/resources/assets/create/lang/unfinished/nl_nl.json +++ b/src/generated/resources/assets/create/lang/unfinished/nl_nl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1216", + "_": "Missing Localizations: 1222", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_br.json b/src/generated/resources/assets/create/lang/unfinished/pt_br.json index 915c5f059..768fd4e46 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_br.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_br.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1282", + "_": "Missing Localizations: 1288", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json index f804d2544..f14fee5da 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ru_ru.json +++ b/src/generated/resources/assets/create/lang/unfinished/ru_ru.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 68", + "_": "Missing Localizations: 74", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json index 75275ef6d..aa9fa5d81 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_cn.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_cn.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 66", + "_": "Missing Localizations: 72", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json index 3b9c69967..feddcaa20 100644 --- a/src/generated/resources/assets/create/lang/unfinished/zh_tw.json +++ b/src/generated/resources/assets/create/lang/unfinished/zh_tw.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 71", + "_": "Missing Localizations: 77", "_": "->------------------------] Game Elements [------------------------<-", @@ -1805,15 +1805,19 @@ "_": "->------------------------] MetaDoc Text [------------------------<-", "create.ponder.hold_to_ponder": "UNLOCALIZED: Hold [%1$s] to Ponder", + "create.ponder.subject": "UNLOCALIZED: Subject of this scene", "create.ponder.pondering": "UNLOCALIZED: Pondering about...", + "create.ponder.identify_mode": "UNLOCALIZED: Identify mode active.\nUnpause with [%1$s]", "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.brass_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.brass_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "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", @@ -1846,10 +1850,12 @@ "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.regular_place": "UNLOCALIZED: Placed normally, it pull items from the inventory.", "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.belt_funnel": "UNLOCALIZED: Funnels on belts will extract/insert depending on its movement direction.", "create.ponder.andesite_funnel.scene_1.title": "UNLOCALIZED: Direction of Transfer", + "create.ponder.andesite_funnel.scene_1.sneak_place": "UNLOCALIZED: Placed while sneaking, it will put items into the inventory.", "create.ponder.andesite_funnel.scene_2.title": "UNLOCALIZED: Funnel compatibility", "_": "Thank you for translating Create!" diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java index ea5de6a18..6dba9fb9e 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/DeployTool.java @@ -67,7 +67,7 @@ public class DeployTool extends PlacementToolBase { .translateBack(origin); AABBOutline outline = schematicHandler.getOutline(); - outline.render(ms, buffer); + outline.render(ms, buffer, pt); outline.getParams() .clearTextures(); ms.pop(); diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/FlipTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/FlipTool.java index 32eb4c7fd..28f06d271 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/FlipTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/FlipTool.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.schematics.client.tools; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllSpecialTextures; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; +import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.outliner.AABBOutline; import net.minecraft.util.Direction; @@ -74,7 +75,7 @@ public class FlipTool extends PlacementToolBase { .disableNormals() .colored(0xdddddd) .withFaceTextures(tex, tex); - outline.render(ms, buffer); + outline.render(ms, buffer, AnimationTickHolder.getPartialTicks()); super.renderOnSchematic(ms, buffer); } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/RotateTool.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/RotateTool.java index 8c34beb39..e0c0eecc6 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/RotateTool.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/RotateTool.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.schematics.client.tools; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; +import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.outliner.LineOutline; import net.minecraft.util.math.AxisAlignedBB; @@ -35,7 +36,7 @@ public class RotateTool extends PlacementToolBase { .colored(0xdddddd) .lineWidth(1 / 16f); line.set(start, end) - .render(ms, buffer); + .render(ms, buffer, AnimationTickHolder.getPartialTicks()); super.renderOnSchematic(ms, buffer); } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java b/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java index 6a7863831..ae07bed15 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/tools/SchematicToolBase.java @@ -143,7 +143,7 @@ public abstract class SchematicToolBase implements ISchematicTool { .colored(0x6886c5) .withFaceTexture(AllSpecialTextures.CHECKERED) .lineWidth(1 / 16f); - outline.render(ms, buffer); + outline.render(ms, buffer, AnimationTickHolder.getPartialTicks()); outline.getParams() .clearTextures(); ms.pop(); diff --git a/src/main/java/com/simibubi/create/events/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java index 58a641c74..9a2811ab0 100644 --- a/src/main/java/com/simibubi/create/events/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -139,6 +139,7 @@ public class ClientEvents { @SubscribeEvent public static void onRenderWorld(RenderWorldLastEvent event) { Vec3d cameraPos = Minecraft.getInstance().gameRenderer.getActiveRenderInfo().getProjectedView(); + float pt = AnimationTickHolder.getPartialTicks(); MatrixStack ms = event.getMatrixStack(); ms.push(); @@ -149,9 +150,8 @@ public class ClientEvents { CreateClient.schematicHandler.render(ms, buffer); CreateClient.ghostBlocks.renderAll(ms, buffer); - CreateClient.outliner.renderOutlines(ms, buffer); + CreateClient.outliner.renderOutlines(ms, buffer, pt); // LightVolumeDebugger.render(ms, buffer); -// CollisionDebugger.render(ms, buffer); buffer.draw(); RenderSystem.enableCull(); diff --git a/src/main/java/com/simibubi/create/foundation/collision/CollisionDebugger.java b/src/main/java/com/simibubi/create/foundation/collision/CollisionDebugger.java deleted file mode 100644 index 0f697c166..000000000 --- a/src/main/java/com/simibubi/create/foundation/collision/CollisionDebugger.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.simibubi.create.foundation.collision; - -import com.mojang.blaze3d.matrix.MatrixStack; -import com.simibubi.create.AllSpecialTextures; -import com.simibubi.create.CreateClient; -import com.simibubi.create.foundation.collision.ContinuousOBBCollider.ContinuousSeparationManifold; -import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; -import com.simibubi.create.foundation.utility.AngleHelper; -import com.simibubi.create.foundation.utility.MatrixStacker; -import com.simibubi.create.foundation.utility.outliner.AABBOutline; - -import net.minecraft.client.Minecraft; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.RayTraceResult.Type; -import net.minecraft.util.math.Vec3d; - -public class CollisionDebugger { - - public static AxisAlignedBB AABB = new AxisAlignedBB(BlockPos.ZERO.up(10)); - public static OrientedBB OBB = new OrientedBB(new AxisAlignedBB(BlockPos.ZERO)); - public static Vec3d motion = Vec3d.ZERO; - static ContinuousSeparationManifold seperation; - static double angle = 0; - static AABBOutline outline; - - public static void onScroll(double delta) { - angle += delta; - angle = (int) angle; - OBB.setRotation(new Matrix3d().asZRotation(AngleHelper.rad(angle))); - } - - public static void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { - ms.push(); - outline = new AABBOutline(OBB.getAsAxisAlignedBB()); - outline.getParams() - .withFaceTexture(seperation == null ? AllSpecialTextures.CHECKERED : null) - .colored(0xffffff); - if (seperation != null) - outline.getParams() - .lineWidth(1 / 64f) - .colored(0xff6544); - MatrixStacker.of(ms) - .translate(OBB.center); - ms.peek() - .getModel() - .multiply(OBB.rotation.getAsMatrix4f()); - MatrixStacker.of(ms) - .translateBack(OBB.center); - outline.render(ms, buffer); - ms.pop(); - -// ms.push(); -// if (motion.length() != 0 && (seperation == null || seperation.getTimeOfImpact() != 1)) { -// outline.getParams() -// .colored(0x6544ff) -// .lineWidth(1 / 32f); -// MatrixStacker.of(ms) -// .translate(seperation != null ? seperation.getAllowedMotion(motion) : motion) -// .translate(OBB.center); -// ms.peek() -// .getModel() -// .multiply(OBB.rotation.getAsMatrix4f()); -// MatrixStacker.of(ms) -// .translateBack(OBB.center); -// outline.render(ms, buffer); -// } -// ms.pop(); - - ms.push(); - if (seperation != null) { - Vec3d asSeparationVec = seperation.asSeparationVec(.5f); - if (asSeparationVec != null) { - outline.getParams() - .colored(0x65ff44) - .lineWidth(1 / 32f); - MatrixStacker.of(ms) - .translate(asSeparationVec) - .translate(OBB.center); - ms.peek() - .getModel() - .multiply(OBB.rotation.getAsMatrix4f()); - MatrixStacker.of(ms) - .translateBack(OBB.center); - outline.render(ms, buffer); - } - } - ms.pop(); - } - - public static void tick() { - AABB = new AxisAlignedBB(BlockPos.ZERO.up(60)).offset(.5, 0, .5); - motion = Vec3d.ZERO; - RayTraceResult mouse = Minecraft.getInstance().objectMouseOver; - if (mouse != null && mouse.getType() == Type.BLOCK) { - BlockRayTraceResult hit = (BlockRayTraceResult) mouse; - OBB.setCenter(hit.getHitVec()); - seperation = OBB.intersect(AABB, motion); - } - CreateClient.outliner.showAABB(AABB, AABB) - .withFaceTexture(seperation == null ? AllSpecialTextures.CHECKERED : null); - } - - static void showDebugLine(Vec3d relativeStart, Vec3d relativeEnd, int color, String id, int offset) { - Vec3d center = CollisionDebugger.AABB.getCenter() - .add(0, 1 + offset / 16f, 0); - CreateClient.outliner.showLine(id + OBBCollider.checkCount, center.add(relativeStart), center.add(relativeEnd)) - .colored(color) - .lineWidth(1 / 32f); - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/collision/OBBCollider.java b/src/main/java/com/simibubi/create/foundation/collision/OBBCollider.java index daf13ab6b..ece63976a 100644 --- a/src/main/java/com/simibubi/create/foundation/collision/OBBCollider.java +++ b/src/main/java/com/simibubi/create/foundation/collision/OBBCollider.java @@ -1,6 +1,5 @@ package com.simibubi.create.foundation.collision; -import static com.simibubi.create.foundation.collision.CollisionDebugger.showDebugLine; import static java.lang.Math.abs; import static java.lang.Math.signum; @@ -60,7 +59,6 @@ public class OBBCollider { if (diff > 0) return true; -// boolean isBestSeperation = distance != 0 && -(diff) <= abs(bestSeparation.getValue()); boolean isBestSeperation = checkCount == 2; // Debug specific separations if (isBestSeperation) { @@ -68,17 +66,6 @@ public class OBBCollider { double value = sTL * abs(diff); mf.axis = axis.normalize(); mf.separation = value; - - // Visualize values - if (CollisionDebugger.AABB != null) { - Vec3d normalizedAxis = axis.normalize(); - showDebugLine(Vec3d.ZERO, normalizedAxis.scale(TL), 0xbb00bb, "tl", 4); - showDebugLine(Vec3d.ZERO, normalizedAxis.scale(sTL * rA), 0xff4444, "ra", 3); - showDebugLine(normalizedAxis.scale(sTL * (distance - rB)), normalizedAxis.scale(TL), 0x4444ff, "rb", 2); - showDebugLine(normalizedAxis.scale(sTL * (distance - rB)), - normalizedAxis.scale(sTL * (distance - rB) + value), 0xff9966, "separation", 1); - System.out.println("TL:" + TL + ", rA: " + rA + ", rB: " + rB); - } } return false; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java index 2ab41b185..217137336 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderLocalization.java @@ -52,7 +52,9 @@ public class PonderLocalization { JsonObject object = new JsonObject(); addGeneral(object, PonderTooltipHandler.HOLD_TO_PONDER, "Hold [%1$s] to Ponder"); + addGeneral(object, PonderTooltipHandler.SUBJECT, "Subject of this scene"); addGeneral(object, PonderUI.PONDERING, "Pondering about..."); + addGeneral(object, PonderUI.IDENTIFY_MODE, "Identify mode active.\nUnpause with [%1$s]"); shared.forEach((k, v) -> object.addProperty(Create.ID + "." + langKeyForShared(k), v)); specific.forEach((rl, map) -> { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java index 6c0b98bd6..fe79bbd4d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderScene.java @@ -12,7 +12,11 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import org.apache.commons.lang3.mutable.MutableDouble; +import org.apache.commons.lang3.mutable.MutableObject; + import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.foundation.ponder.content.PonderIndex; import com.simibubi.create.foundation.ponder.elements.PonderOverlayElement; import com.simibubi.create.foundation.ponder.elements.PonderSceneElement; import com.simibubi.create.foundation.ponder.elements.WorldSectionElement; @@ -21,20 +25,27 @@ 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.Pair; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.outliner.Outliner; +import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ActiveRenderInfo; import net.minecraft.client.renderer.Matrix4f; 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.item.ItemStack; +import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.MutableBoundingBox; import net.minecraft.util.math.Vec2f; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; public class PonderScene { @@ -84,6 +95,59 @@ public class PonderScene { setPointOfInterest(new Vec3d(0, 4, 0)); } + public void deselect() { + forEach(WorldSectionElement.class, WorldSectionElement::resetSelectedBlock); + } + + public Pair rayTraceScene(Vec3d from, Vec3d to) { + MutableObject> nearestHit = new MutableObject<>(); + MutableDouble bestDistance = new MutableDouble(0); + + forEach(WorldSectionElement.class, wse -> { + wse.resetSelectedBlock(); + if (!wse.isVisible()) + return; + Pair rayTrace = wse.rayTrace(world, from, to); + if (rayTrace == null) + return; + double distanceTo = rayTrace.getFirst() + .distanceTo(from); + if (nearestHit.getValue() != null && distanceTo >= bestDistance.getValue()) + return; + + nearestHit.setValue(Pair.of(wse, rayTrace.getSecond())); + bestDistance.setValue(distanceTo); + }); + + if (nearestHit.getValue() == null) + return Pair.of(ItemStack.EMPTY, null); + + BlockPos selectedPos = nearestHit.getValue() + .getSecond(); + + BlockPos origin = new BlockPos(offsetX, 0, offsetZ); + if (!world.getBounds() + .isVecInside(selectedPos)) + return Pair.of(ItemStack.EMPTY, null); + if (new MutableBoundingBox(origin, origin.add(new Vec3i(size - 1, 0, size - 1))).isVecInside(selectedPos)) { + if (PonderIndex.EDITOR_MODE) + nearestHit.getValue() + .getFirst() + .selectBlock(selectedPos); + return Pair.of(ItemStack.EMPTY, selectedPos); + } + + nearestHit.getValue() + .getFirst() + .selectBlock(selectedPos); + BlockState blockState = world.getBlockState(selectedPos); + ItemStack pickBlock = blockState.getPickBlock( + new BlockRayTraceResult(VecHelper.getCenterOf(selectedPos), Direction.UP, selectedPos, true), world, + selectedPos, Minecraft.getInstance().player); + + return Pair.of(pickBlock, selectedPos); + } + public String getTitle() { return getString("title"); } @@ -132,19 +196,16 @@ public class PonderScene { activeSchedule.add(new HideAllInstruction(10, null)); } - public void renderScene(SuperRenderTypeBuffer buffer, MatrixStack ms) { - float pt = Minecraft.getInstance() - .getRenderPartialTicks(); - + public void renderScene(SuperRenderTypeBuffer buffer, MatrixStack ms, float pt) { ms.push(); - forEachVisible(PonderSceneElement.class, e -> e.renderFirst(world, buffer, ms)); + forEachVisible(PonderSceneElement.class, e -> e.renderFirst(world, buffer, ms, pt)); for (RenderType type : RenderType.getBlockLayers()) - forEachVisible(PonderSceneElement.class, e -> e.renderLayer(world, buffer, type, ms)); - forEachVisible(PonderSceneElement.class, e -> e.renderLast(world, buffer, ms)); + forEachVisible(PonderSceneElement.class, e -> e.renderLayer(world, buffer, type, ms, pt)); + forEachVisible(PonderSceneElement.class, e -> e.renderLast(world, buffer, ms, pt)); info.set(transform.xRotation.getValue(pt), transform.yRotation.getValue(pt)); - world.renderEntities(ms, buffer, info); - world.renderParticles(ms, buffer, info); - outliner.renderOutlines(ms, buffer); + world.renderEntities(ms, buffer, info, pt); + world.renderParticles(ms, buffer, info, pt); + outliner.renderOutlines(ms, buffer, pt); ms.pop(); } @@ -295,8 +356,10 @@ public class PonderScene { } public MatrixStack apply(MatrixStack ms) { - float pt = Minecraft.getInstance() - .getRenderPartialTicks(); + return apply(ms, AnimationTickHolder.getPartialTicks()); + } + + public MatrixStack apply(MatrixStack ms, float pt) { ms.translate(width / 2, height / 2, 200); MatrixStacker.of(ms) @@ -316,12 +379,22 @@ public class PonderScene { return ms; } - public Vec3d screenToScene(float x, float y, int depth) { + public Vec3d screenToScene(double x, double y, int depth) { + refreshMatrix(); float pt = AnimationTickHolder.getPartialTicks(); Vec3d vec = new Vec3d(x, y, depth); - - // wut - + + vec = vec.subtract(width / 2, height / 2, 200); + vec = VecHelper.rotate(vec, 35, Axis.X); + vec = VecHelper.rotate(vec, -55, Axis.Y); + vec = vec.subtract(offset, 0, 0); + vec = VecHelper.rotate(vec, 55, Axis.Y); + vec = VecHelper.rotate(vec, -35, Axis.X); + vec = VecHelper.rotate(vec, -xRotation.getValue(pt), Axis.X); + vec = VecHelper.rotate(vec, -yRotation.getValue(pt), Axis.Y); + vec = vec.mul(1f / 30, 1f / -30, 1f / 30); + vec = vec.subtract((size + offsetX) / -2f, -1f, (size + offsetZ) / -2f); + return vec; } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java index a691b96cc..6bf190ba3 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderTooltipHandler.java @@ -4,6 +4,7 @@ import java.util.List; import com.google.common.base.Strings; import com.simibubi.create.foundation.gui.ScreenOpener; +import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.LerpedFloat; @@ -25,29 +26,41 @@ public class PonderTooltipHandler { static LerpedFloat holdWProgress = LerpedFloat.linear() .startWithValue(0); - static ItemStack lastHoveredStack = null; + static ItemStack lastHoveredStack = ItemStack.EMPTY; + static boolean subject = false; + public static final String HOLD_TO_PONDER = PonderLocalization.LANG_PREFIX + "hold_to_ponder"; + public static final String SUBJECT = PonderLocalization.LANG_PREFIX + "subject"; public static void tick() { Minecraft instance = Minecraft.getInstance(); Screen currentScreen = instance.currentScreen; - if (!(currentScreen instanceof ContainerScreen)) - return; - ContainerScreen cs = (ContainerScreen) currentScreen; - + ItemStack stack = ItemStack.EMPTY; ItemStack prevStack = lastHoveredStack; - lastHoveredStack = null; - Slot slotUnderMouse = cs.getSlotUnderMouse(); - if (slotUnderMouse == null || !slotUnderMouse.getHasStack()) + lastHoveredStack = ItemStack.EMPTY; + subject = false; + + if (currentScreen instanceof ContainerScreen) { + ContainerScreen cs = (ContainerScreen) currentScreen; + Slot slotUnderMouse = cs.getSlotUnderMouse(); + if (slotUnderMouse == null || !slotUnderMouse.getHasStack()) + return; + stack = slotUnderMouse.getStack(); + } else if (currentScreen instanceof PonderUI) { + PonderUI ponderUI = (PonderUI) currentScreen; + stack = ponderUI.getHoveredTooltipItem(); + if (stack.isItemEqual(ponderUI.getSubject())) + subject = true; + } else return; - ItemStack stack = slotUnderMouse.getStack(); - + if (stack.isEmpty()) + return; if (!PonderRegistry.all.containsKey(stack.getItem() .getRegistryName())) return; - if (prevStack != stack) + if (prevStack.isEmpty() || !prevStack.isItemEqual(stack)) holdWProgress.startWithValue(0); float value = holdWProgress.getValue(); @@ -56,10 +69,13 @@ public class PonderTooltipHandler { long window = instance.getWindow() .getHandle(); - if (InputMappings.isKeyDown(window, keyCode)) { - if (value >= 1) + if (!subject && InputMappings.isKeyDown(window, keyCode)) { + if (value >= 1) { ScreenOpener.open(new PonderUI(PonderRegistry.compile(stack.getItem() .getRegistryName()))); + holdWProgress.startWithValue(0); + return; + } holdWProgress.setValue(Math.min(1, value + Math.max(.25f, value) * .25f)); } else holdWProgress.setValue(Math.max(0, value - .05f)); @@ -68,10 +84,14 @@ public class PonderTooltipHandler { } public static void addToTooltip(List toolTip, ItemStack stack) { + float renderPartialTicks = AnimationTickHolder.getPartialTicks(); if (lastHoveredStack != stack) return; - float renderPartialTicks = Minecraft.getInstance() - .getRenderPartialTicks(); + if (subject) { + toolTip.set(1, Lang.createTranslationTextComponent(SUBJECT) + .applyTextStyle(TextFormatting.GREEN)); + return; + } toolTip.set(1, makeProgressBar(Math.min(1, holdWProgress.getValue(renderPartialTicks) * 8 / 7f))); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java index 6856871ce..ba6d4110d 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderUI.java @@ -9,41 +9,58 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.foundation.gui.AbstractSimiScreen; import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.AllIcons; +import com.simibubi.create.foundation.ponder.PonderScene.SceneTransform; 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.AnimationTickHolder; 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; +import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.Pointing; +import net.minecraft.client.ClipboardHelper; import net.minecraft.client.GameSettings; +import net.minecraft.client.MainWindow; 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.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.text.StringTextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.client.gui.GuiUtils; import net.minecraftforge.registries.ForgeRegistries; public class PonderUI extends AbstractSimiScreen { public static final String PONDERING = PonderLocalization.LANG_PREFIX + "pondering"; + public static final String IDENTIFY_MODE = PonderLocalization.LANG_PREFIX + "identify_mode"; + private List scenes; private LerpedFloat fadeIn; private LerpedFloat sceneProgress; ItemStack stack; + private boolean identifyMode; + private ItemStack hoveredTooltipItem; + private BlockPos hoveredBlockPos; + + private ClipboardHelper clipboardHelper; + private BlockPos copiedBlockPos; private LerpedFloat lazyIndex; private int index = 0; - private PonderButton left, right, icon, refresh, scan; + private PonderButton left, right, icon, scan; public PonderUI(List scenes) { this.scenes = scenes; @@ -54,6 +71,7 @@ public class PonderUI extends AbstractSimiScreen { fadeIn = LerpedFloat.linear() .startWithValue(0) .chase(1, .1f, Chaser.EXP); + clipboardHelper = new ClipboardHelper(); } @Override @@ -76,7 +94,12 @@ public class PonderUI extends AbstractSimiScreen { 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) + widgets.add(scan = new PonderButton(bX, bY, () -> { + identifyMode = !identifyMode; + if (!identifyMode) + scenes.get(index) + .deselect(); + }).showing(AllIcons.I_MTD_SCAN) .shortcut(bindings.keyBindDrop) .fade(0, -1)); @@ -96,7 +119,7 @@ public class PonderUI extends AbstractSimiScreen { .fade(0, -1)); bX += 50 + spacing; - widgets.add(refresh = new PonderButton(bX, bY, this::replay).showing(AllIcons.I_MTD_REPLAY) + widgets.add(new PonderButton(bX, bY, this::replay).showing(AllIcons.I_MTD_REPLAY) .shortcut(bindings.keyBindBack) .fade(0, -1)); @@ -105,17 +128,38 @@ public class PonderUI extends AbstractSimiScreen { @Override public void tick() { PonderScene activeScene = scenes.get(index); - activeScene.tick(); + if (!identifyMode) + activeScene.tick(); sceneProgress.chase(activeScene.getSceneProgress(), .5f, Chaser.EXP); - lazyIndex.tickChaser(); fadeIn.tickChaser(); sceneProgress.tickChaser(); - float lazyIndexValue = lazyIndex.getValue(); - if (Math.abs(lazyIndexValue - index) > 1 / 512f) - scenes.get(lazyIndexValue < index ? index - 1 : index + 1) - .tick(); + if (!identifyMode) { + float lazyIndexValue = lazyIndex.getValue(); + if (Math.abs(lazyIndexValue - index) > 1 / 512f) + scenes.get(lazyIndexValue < index ? index - 1 : index + 1) + .tick(); + } + + updateIdentifiedItem(activeScene); + } + + public void updateIdentifiedItem(PonderScene activeScene) { + hoveredTooltipItem = ItemStack.EMPTY; + hoveredBlockPos = null; + if (!identifyMode) + return; + + MainWindow w = minecraft.getWindow(); + double mouseX = minecraft.mouseHelper.getMouseX() * w.getScaledWidth() / w.getWidth(); + double mouseY = minecraft.mouseHelper.getMouseY() * w.getScaledHeight() / w.getHeight(); + SceneTransform t = activeScene.getTransform(); + Vec3d vec1 = t.screenToScene(mouseX, mouseY, 1000); + Vec3d vec2 = t.screenToScene(mouseX, mouseY, -100); + Pair pair = activeScene.rayTraceScene(vec1, vec2); + hoveredTooltipItem = pair.getFirst(); + hoveredBlockPos = pair.getSecond(); } @Override @@ -126,6 +170,7 @@ public class PonderUI extends AbstractSimiScreen { } protected void replay() { + identifyMode = false; scenes.get(index) .begin(); } @@ -140,6 +185,7 @@ public class PonderUI extends AbstractSimiScreen { scenes.get(index) .begin(); lazyIndex.chase(index, 1 / 4f, Chaser.EXP); + identifyMode = false; return true; } else index = prevIndex; @@ -149,8 +195,8 @@ public class PonderUI extends AbstractSimiScreen { @Override protected void renderWindow(int mouseX, int mouseY, float partialTicks) { RenderSystem.enableBlend(); - renderVisibleScenes(mouseX, mouseY, partialTicks); - renderWidgets(mouseX, mouseY, partialTicks); + renderVisibleScenes(mouseX, mouseY, identifyMode ? 0 : partialTicks); + renderWidgets(mouseX, mouseY, identifyMode ? 0 : partialTicks); } protected void renderVisibleScenes(int mouseX, int mouseY, float partialTicks) { @@ -164,7 +210,7 @@ public class PonderUI extends AbstractSimiScreen { SuperRenderTypeBuffer buffer = SuperRenderTypeBuffer.getInstance(); PonderScene story = scenes.get(i); MatrixStack ms = new MatrixStack(); - double value = lazyIndex.getValue(partialTicks); + double value = lazyIndex.getValue(AnimationTickHolder.getPartialTicks()); double diff = i - value; double slide = MathHelper.lerp(diff * diff, 200, 600) * diff; @@ -174,8 +220,8 @@ public class PonderUI extends AbstractSimiScreen { ms.push(); story.transform.updateScreenParams(width, height, slide); - story.transform.apply(ms); - story.renderScene(buffer, ms); + story.transform.apply(ms, partialTicks); + story.renderScene(buffer, ms, partialTicks); buffer.draw(); // coords for debug @@ -238,6 +284,7 @@ public class PonderUI extends AbstractSimiScreen { float fade = fadeIn.getValue(partialTicks); float lazyIndexValue = lazyIndex.getValue(partialTicks); float indexDiff = Math.abs(lazyIndexValue - index); + PonderScene activeScene = scenes.get(index); int textColor = 0xeeeeee; { @@ -250,16 +297,35 @@ public class PonderUI extends AbstractSimiScreen { y += 12; x += 0; RenderSystem.translated(0, 3 * (indexDiff), 0); - font.drawSplitString(scenes.get(index) - .getTitle(), x, y, left.x - x, ColorHelper.applyAlpha(textColor, 1 - indexDiff)); + font.drawSplitString(activeScene.getTitle(), x, y, left.x - x, + ColorHelper.applyAlpha(textColor, 1 - indexDiff)); RenderSystem.popMatrix(); } if (identifyMode) { RenderSystem.pushMatrix(); - RenderSystem.translated(mouseX, mouseY, 800); - drawString(font, "?", 6, 2, 0xddffffff); + RenderSystem.translated(mouseX, mouseY, 100); + if (hoveredTooltipItem.isEmpty()) { + String tooltip = Lang + .createTranslationTextComponent(IDENTIFY_MODE, + new StringTextComponent(minecraft.gameSettings.keyBindDrop.getKeyBinding() + .getLocalizedName()).applyTextStyle(TextFormatting.WHITE)) + .applyTextStyle(TextFormatting.GRAY) + .getFormattedText(); + renderTooltip(font.listFormattedStringToWidth(tooltip, width / 3), 0, 0); + } else + renderTooltip(hoveredTooltipItem, 0, 0); + if (hoveredBlockPos != null && PonderIndex.EDITOR_MODE) { + RenderSystem.translated(0, -15, 0); + boolean copied = copiedBlockPos != null && hoveredBlockPos.equals(copiedBlockPos); + String coords = new StringTextComponent( + hoveredBlockPos.getX() + ", " + hoveredBlockPos.getY() + ", " + hoveredBlockPos.getZ()) + .applyTextStyles(copied ? TextFormatting.GREEN : TextFormatting.GOLD) + .getFormattedText(); + renderTooltip(coords, 0, 0); + } RenderSystem.popMatrix(); + scan.flash(); } else { scan.dim(); @@ -288,8 +354,7 @@ public class PonderUI extends AbstractSimiScreen { if (index == scenes.size() - 1 || index == scenes.size() - 2 && lazyIndexValue > index) right.fade(scenes.size() - lazyIndexValue - 1); - boolean finished = scenes.get(index) - .isFinished(); + boolean finished = activeScene.isFinished(); if (finished) right.flash(); else @@ -325,6 +390,8 @@ public class PonderUI extends AbstractSimiScreen { } private void renderOverlay(int i, float partialTicks) { + if (identifyMode) + return; RenderSystem.pushMatrix(); PonderScene story = scenes.get(i); MatrixStack ms = new MatrixStack(); @@ -351,6 +418,15 @@ public class PonderUI extends AbstractSimiScreen { if (handled.booleanValue()) return true; + if (identifyMode && hoveredBlockPos != null && PonderIndex.EDITOR_MODE) { + clipboardHelper.setClipboardString(minecraft.getWindow() + .getHandle(), + "BlockPos copied = util.grid.at(" + hoveredBlockPos.getX() + ", " + hoveredBlockPos.getY() + ", " + + hoveredBlockPos.getZ() + ");"); + copiedBlockPos = hoveredBlockPos; + return true; + } + return super.mouseClicked(x, y, button); } @@ -383,6 +459,9 @@ public class PonderUI extends AbstractSimiScreen { if (code == qCode) { identifyMode = !identifyMode; + if (!identifyMode) + scenes.get(index) + .deselect(); return true; } @@ -474,17 +553,24 @@ public class PonderUI extends AbstractSimiScreen { public static void renderBox(int x, int y, int w, int h, int backgroundColor, int borderColorStart, int borderColorEnd) { - int zLevel = 100; - GuiUtils.drawGradientRect(zLevel, x - 3, y - 4, x + w + 3, y - 3, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, x - 3, y + h + 3, x + w + 3, y + h + 4, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, x - 3, y - 3, x + w + 3, y + h + 3, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, x - 4, y - 3, x - 3, y + h + 3, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, x + w + 3, y - 3, x + w + 4, y + h + 3, backgroundColor, backgroundColor); - GuiUtils.drawGradientRect(zLevel, x - 3, y - 3 + 1, x - 3 + 1, y + h + 3 - 1, borderColorStart, borderColorEnd); - GuiUtils.drawGradientRect(zLevel, x + w + 2, y - 3 + 1, x + w + 3, y + h + 3 - 1, borderColorStart, - borderColorEnd); - GuiUtils.drawGradientRect(zLevel, x - 3, y - 3, x + w + 3, y - 3 + 1, borderColorStart, borderColorStart); - GuiUtils.drawGradientRect(zLevel, x - 3, y + h + 2, x + w + 3, y + h + 3, borderColorEnd, borderColorEnd); + int z = 100; + GuiUtils.drawGradientRect(z, x - 3, y - 4, x + w + 3, y - 3, backgroundColor, backgroundColor); + GuiUtils.drawGradientRect(z, x - 3, y + h + 3, x + w + 3, y + h + 4, backgroundColor, backgroundColor); + GuiUtils.drawGradientRect(z, x - 3, y - 3, x + w + 3, y + h + 3, backgroundColor, backgroundColor); + GuiUtils.drawGradientRect(z, x - 4, y - 3, x - 3, y + h + 3, backgroundColor, backgroundColor); + GuiUtils.drawGradientRect(z, x + w + 3, y - 3, x + w + 4, y + h + 3, backgroundColor, backgroundColor); + GuiUtils.drawGradientRect(z, x - 3, y - 3 + 1, x - 3 + 1, y + h + 3 - 1, borderColorStart, borderColorEnd); + GuiUtils.drawGradientRect(z, x + w + 2, y - 3 + 1, x + w + 3, y + h + 3 - 1, borderColorStart, borderColorEnd); + GuiUtils.drawGradientRect(z, x - 3, y - 3, x + w + 3, y - 3 + 1, borderColorStart, borderColorStart); + GuiUtils.drawGradientRect(z, x - 3, y + h + 2, x + w + 3, y + h + 3, borderColorEnd, borderColorEnd); + } + + public ItemStack getHoveredTooltipItem() { + return hoveredTooltipItem; + } + + public ItemStack getSubject() { + return stack; } } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java index 3f2fe4cfa..23aa0d735 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java @@ -13,7 +13,6 @@ 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.renderState.SuperRenderTypeBuffer; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -122,9 +121,8 @@ public class PonderWorld extends SchematicWorld { return this; } - public void renderEntities(MatrixStack ms, SuperRenderTypeBuffer buffer, ActiveRenderInfo ari) { + public void renderEntities(MatrixStack ms, SuperRenderTypeBuffer buffer, ActiveRenderInfo ari, float pt) { Vec3d vec3d = ari.getProjectedView(); - float pt = AnimationTickHolder.getPartialTicks(); double d0 = vec3d.getX(); double d1 = vec3d.getY(); double d2 = vec3d.getZ(); @@ -157,8 +155,8 @@ public class PonderWorld extends SchematicWorld { renderManager.render(entity, d0 - x, d1 - y, d2 - z, f, pt, ms, buffer, light); } - public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo ari) { - particles.renderParticles(ms, buffer, ari); + public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo ari, float pt) { + particles.renderParticles(ms, buffer, ari, pt); } public void tick() { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorldParticles.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorldParticles.java index 902c1e766..1f121ba1e 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorldParticles.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorldParticles.java @@ -59,10 +59,9 @@ public class PonderWorldParticles { } } - public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo p_228345_4_) { + public void renderParticles(MatrixStack ms, IRenderTypeBuffer buffer, ActiveRenderInfo p_228345_4_, float p_228345_5_) { Minecraft mc = Minecraft.getInstance(); LightTexture p_228345_3_ = mc.gameRenderer.getLightmapTextureManager(); - float p_228345_5_ = mc.getRenderPartialTicks(); p_228345_3_.enableLightmap(); Runnable enable = () -> { diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java index e7b04fb40..4c98c08aa 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/AnimatedSceneElement.java @@ -5,7 +5,6 @@ import com.simibubi.create.foundation.ponder.PonderWorld; import com.simibubi.create.foundation.utility.LerpedFloat; import com.simibubi.create.foundation.utility.MatrixStacker; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.RenderType; import net.minecraft.util.math.MathHelper; @@ -24,7 +23,7 @@ public abstract class AnimatedSceneElement extends PonderSceneElement { public void forceApplyFade(float fade) { this.fade.startWithValue(fade); } - + public void setFade(float fade) { this.fade.setValue(fade); } @@ -32,46 +31,46 @@ public abstract class AnimatedSceneElement extends PonderSceneElement { public void setFadeVec(Vec3d fadeVec) { this.fadeVec = fadeVec; } - + @Override - public final void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms) { + public final void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) { ms.push(); - float currentFade = applyFade(ms); - renderFirst(world, buffer, ms, currentFade); + float currentFade = applyFade(ms, pt); + renderFirst(world, buffer, ms, currentFade, pt); ms.pop(); } @Override - public final void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms) { + public final void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, + float pt) { ms.push(); - float currentFade = applyFade(ms); - renderLayer(world, buffer, type, ms, currentFade); - ms.pop(); - } - - @Override - public final void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms) { - ms.push(); - float currentFade = applyFade(ms); - renderLast(world, buffer, ms, currentFade); + float currentFade = applyFade(ms, pt); + renderLayer(world, buffer, type, ms, currentFade, pt); ms.pop(); } - protected float applyFade(MatrixStack ms) { - float currentFade = fade.getValue(Minecraft.getInstance() - .getRenderPartialTicks()); + @Override + public final void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) { + ms.push(); + float currentFade = applyFade(ms, pt); + renderLast(world, buffer, ms, currentFade, pt); + ms.pop(); + } + + protected float applyFade(MatrixStack ms, float pt) { + float currentFade = fade.getValue(pt); if (fadeVec != null) MatrixStacker.of(ms) .translate(fadeVec.scale(-1 + currentFade)); return currentFade; } - protected void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, - float fade) {} + protected void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float fade, + float pt) {} - protected void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) {} + protected void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) {} - protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) {} + protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) {} protected int lightCoordsFromFade(float fade) { int light = 0xF000F0; diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java index 1209312f2..b8cc26f85 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/ParrotElement.java @@ -62,11 +62,9 @@ public class ParrotElement extends AnimatedSceneElement { } @Override - protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) { + protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) { EntityRendererManager entityrenderermanager = Minecraft.getInstance() .getRenderManager(); - float pt = Minecraft.getInstance() - .getRenderPartialTicks(); if (entity == null) pose.create(world); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/PonderSceneElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/PonderSceneElement.java index e07338444..dfa176d04 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/PonderSceneElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/PonderSceneElement.java @@ -9,10 +9,10 @@ import net.minecraft.client.renderer.RenderType; public abstract class PonderSceneElement extends PonderElement { - public abstract void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms); + public abstract void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt); - public abstract void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms); + public abstract void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float pt); - public abstract void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms); + public abstract void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt); } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/TrackedElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/TrackedElement.java index 4c4bc96fb..b7c2cd7f9 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/TrackedElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/TrackedElement.java @@ -31,12 +31,12 @@ public abstract class TrackedElement extends PonderSceneElement { } @Override - public void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms) {} + public void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) {} @Override - public void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms) {} + public void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float pt) {} @Override - public void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms) {} + public void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float pt) {} } diff --git a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java index 0bb0cae53..185328f5e 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/elements/WorldSectionElement.java @@ -4,10 +4,10 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; -import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.opengl.GL11; import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderWorld; @@ -16,8 +16,10 @@ import com.simibubi.create.foundation.render.Compartment; import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.render.SuperByteBufferCache; import com.simibubi.create.foundation.render.TileEntityRenderHelper; +import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.MatrixStacker; +import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.block.BlockRenderType; @@ -30,13 +32,22 @@ import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.IRenderTypeBuffer; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderTypeLookup; +import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.fluid.IFluidState; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.RayTraceContext; +import net.minecraft.util.math.RayTraceContext.BlockMode; +import net.minecraft.util.math.RayTraceContext.FluidMode; import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.model.data.EmptyModelData; @@ -54,6 +65,8 @@ public class WorldSectionElement extends AnimatedSceneElement { Vec3d animatedRotation = Vec3d.ZERO; Vec3d centerOfRotation = Vec3d.ZERO; + BlockPos selectedBlock; + public WorldSectionElement() {} public WorldSectionElement(Selection section) { @@ -91,15 +104,24 @@ public class WorldSectionElement extends AnimatedSceneElement { public void reset(PonderScene scene) { super.reset(scene); resetAnimatedTransform(); + resetSelectedBlock(); } - + + public void selectBlock(BlockPos pos) { + selectedBlock = pos; + } + + public void resetSelectedBlock() { + selectedBlock = null; + } + public void resetAnimatedTransform() { prevAnimatedOffset = Vec3d.ZERO; animatedOffset = Vec3d.ZERO; prevAnimatedRotation = Vec3d.ZERO; animatedRotation = Vec3d.ZERO; } - + public void queueRedraw() { redraw = true; } @@ -133,6 +155,57 @@ public class WorldSectionElement extends AnimatedSceneElement { return super.isVisible() && !isEmpty(); } + class WorldSectionRayTraceResult { + Vec3d actualHitVec; + BlockPos worldPos; + } + + public Pair rayTrace(PonderWorld world, Vec3d source, Vec3d target) { + world.setMask(this.section); + Vec3d transformedTarget = reverseTransformVec(target); + BlockRayTraceResult rayTraceBlocks = world.rayTraceBlocks(new RayTraceContext(reverseTransformVec(source), + transformedTarget, BlockMode.OUTLINE, FluidMode.NONE, null)); + world.clearMask(); + + if (rayTraceBlocks == null) + return null; + if (rayTraceBlocks.getHitVec() == null) + return null; + + double t = rayTraceBlocks.getHitVec() + .subtract(transformedTarget) + .lengthSquared() + / source.subtract(target) + .lengthSquared(); + Vec3d actualHit = VecHelper.lerp((float) t, target, source); + return Pair.of(actualHit, rayTraceBlocks.getPos()); + } + + private Vec3d reverseTransformVec(Vec3d in) { + float pt = AnimationTickHolder.getPartialTicks(); + in = in.subtract(VecHelper.lerp(pt, prevAnimatedOffset, animatedOffset)); + if (!animatedRotation.equals(Vec3d.ZERO) || !prevAnimatedRotation.equals(Vec3d.ZERO)) { + in = in.subtract(centerOfRotation); + in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.x, animatedRotation.x), Axis.X); + in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.z, animatedRotation.z), Axis.Z); + in = VecHelper.rotate(in, -MathHelper.lerp(pt, prevAnimatedRotation.y, animatedRotation.y), Axis.Y); + in = in.add(centerOfRotation); + } + return in; + } + + public void transformMS(MatrixStack ms, float pt) { + 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); + } + public void tick(PonderScene scene) { prevAnimatedOffset = animatedOffset; prevAnimatedRotation = animatedRotation; @@ -147,46 +220,22 @@ public class WorldSectionElement extends AnimatedSceneElement { } @Override - protected void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, - float fade) { - 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); - + protected void renderLayer(PonderWorld world, IRenderTypeBuffer buffer, RenderType type, MatrixStack ms, float fade, + float pt) { + transformMS(ms, pt); renderStructure(world, ms, buffer, type, fade); } @Override - public void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) { + public void renderFirst(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) { int light = -1; if (fade != 1) 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); - + transformMS(ms, pt); world.pushFakeLight(light); - renderTileEntities(world, ms, buffer); + renderTileEntities(world, ms, buffer, pt); world.popLight(); } @@ -210,11 +259,30 @@ public class WorldSectionElement extends AnimatedSceneElement { } @Override - protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade) { + protected void renderLast(PonderWorld world, IRenderTypeBuffer buffer, MatrixStack ms, float fade, float pt) { redraw = false; + if (selectedBlock == null) + return; + BlockState blockState = world.getBlockState(selectedBlock); + if (blockState.isAir(world, selectedBlock)) + return; + VoxelShape shape = + blockState.getShape(world, selectedBlock, ISelectionContext.forEntity(Minecraft.getInstance().player)); + if (shape.isEmpty()) + return; + + ms.push(); + transformMS(ms, pt); + RenderSystem.disableTexture(); + WorldRenderer.drawBox(ms, buffer.getBuffer(RenderType.getLines()), shape.getBoundingBox() + .offset(selectedBlock), 1, 1, 1, 1); + if (buffer instanceof SuperRenderTypeBuffer) + ((SuperRenderTypeBuffer) buffer).draw(RenderType.getLines()); + RenderSystem.enableTexture(); + ms.pop(); } - private void renderTileEntities(PonderWorld world, MatrixStack ms, IRenderTypeBuffer buffer) { + private void renderTileEntities(PonderWorld world, MatrixStack ms, IRenderTypeBuffer buffer, float pt) { if (renderedTileEntities == null) { renderedTileEntities = new ArrayList<>(); section.forEach(pos -> { @@ -224,8 +292,7 @@ public class WorldSectionElement extends AnimatedSceneElement { }); } else renderedTileEntities.removeIf(te -> world.getTileEntity(te.getPos()) != te); - - TileEntityRenderHelper.renderTileEntities(world, renderedTileEntities, ms, new MatrixStack(), buffer); + TileEntityRenderHelper.renderTileEntities(world, renderedTileEntities, ms, new MatrixStack(), buffer, pt); } private SuperByteBuffer buildStructureBuffer(PonderWorld world, RenderType layer) { diff --git a/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java index 0af8bcff9..6fe466e6f 100644 --- a/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/TileEntityRenderHelper.java @@ -24,13 +24,23 @@ public class TileEntityRenderHelper { public static void renderTileEntities(World world, Iterable customRenderTEs, MatrixStack ms, MatrixStack localTransform, IRenderTypeBuffer buffer) { - renderTileEntities(world, null, customRenderTEs, ms, localTransform, buffer); } + + public static void renderTileEntities(World world, Iterable customRenderTEs, MatrixStack ms, + MatrixStack localTransform, IRenderTypeBuffer buffer, float pt) { + renderTileEntities(world, null, customRenderTEs, ms, localTransform, buffer, pt); + } - public static void renderTileEntities(World world, PlacementSimulationWorld renderWorld, Iterable customRenderTEs, MatrixStack ms, - MatrixStack localTransform, IRenderTypeBuffer buffer) { - float pt = AnimationTickHolder.getPartialTicks(); + public static void renderTileEntities(World world, PlacementSimulationWorld renderWorld, + Iterable customRenderTEs, MatrixStack ms, MatrixStack localTransform, IRenderTypeBuffer buffer) { + renderTileEntities(world, renderWorld, customRenderTEs, ms, localTransform, buffer, + AnimationTickHolder.getPartialTicks()); + } + + public static void renderTileEntities(World world, PlacementSimulationWorld renderWorld, + Iterable customRenderTEs, MatrixStack ms, MatrixStack localTransform, IRenderTypeBuffer buffer, + float pt) { Matrix4f matrix = localTransform.peek() .getModel(); diff --git a/src/main/java/com/simibubi/create/foundation/render/backend/light/LightVolumeDebugger.java b/src/main/java/com/simibubi/create/foundation/render/backend/light/LightVolumeDebugger.java index 811987c5d..ca96b1b79 100644 --- a/src/main/java/com/simibubi/create/foundation/render/backend/light/LightVolumeDebugger.java +++ b/src/main/java/com/simibubi/create/foundation/render/backend/light/LightVolumeDebugger.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; +import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.outliner.AABBOutline; @@ -29,6 +30,6 @@ public class LightVolumeDebugger { outline.getParams().colored(pair.getSecond()); return outline; }) - .forEach(outline -> outline.render(ms, buffer)); + .forEach(outline -> outline.render(ms, buffer, AnimationTickHolder.getPartialTicks())); } } diff --git a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBox.java b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBox.java index 2dcf74527..5914501db 100644 --- a/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBox.java +++ b/src/main/java/com/simibubi/create/foundation/tileEntity/behaviour/ValueBox.java @@ -73,7 +73,7 @@ public class ValueBox extends ChasingAABBOutline { } @Override - public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { + public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) { boolean hasTransform = transform != null; if (transform instanceof Sided && params.getHighlightedFace() != null) ((Sided) transform).fromSide(params.getHighlightedFace()); @@ -88,7 +88,7 @@ public class ValueBox extends ChasingAABBOutline { .getNormal() .copy(); params.colored(isPassive ? passiveColor : highlightColor); - super.render(ms, buffer); + super.render(ms, buffer, pt); float fontScale = hasTransform ? -transform.getFontScale() : -1 / 64f; ms.scale(fontScale, fontScale, fontScale); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/AABBOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/AABBOutline.java index 55c0462fb..5efa0fe17 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/AABBOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/AABBOutline.java @@ -22,7 +22,7 @@ public class AABBOutline extends Outline { } @Override - public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { + public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) { renderBB(ms, buffer, bb); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java index 06f7beb9f..c960eae5e 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/BlockClusterOutline.java @@ -30,7 +30,7 @@ public class BlockClusterOutline extends Outline { } @Override - public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { + public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) { for (MergeEntry edge : cluster.visibleEdges) { Vec3d start = new Vec3d(edge.pos); Direction direction = Direction.getFacingFromAxis(AxisDirection.POSITIVE, edge.axis); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/ChasingAABBOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/ChasingAABBOutline.java index 6621b1a0e..d70ef3189 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/ChasingAABBOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/ChasingAABBOutline.java @@ -2,7 +2,6 @@ package com.simibubi.create.foundation.utility.outliner; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.MathHelper; @@ -29,8 +28,8 @@ public class ChasingAABBOutline extends AABBOutline { } @Override - public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { - renderBB(ms, buffer, interpolateBBs(prevBB, bb, AnimationTickHolder.getPartialTicks())); + public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) { + renderBB(ms, buffer, interpolateBBs(prevBB, bb, pt)); } private static AxisAlignedBB interpolateBBs(AxisAlignedBB current, AxisAlignedBB target, float pt) { diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java index 4a72da0da..66885d45b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/LineOutline.java @@ -2,7 +2,6 @@ package com.simibubi.create.foundation.utility.outliner; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; @@ -19,7 +18,7 @@ public class LineOutline extends Outline { } @Override - public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { + public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) { renderCuboidLine(ms, buffer, start, end); } @@ -46,8 +45,7 @@ public class LineOutline extends Outline { } @Override - public void render(MatrixStack ms, SuperRenderTypeBuffer buffer) { - float pt = AnimationTickHolder.getPartialTicks(); + public void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) { float distanceToTarget = 1 - MathHelper.lerp(pt, prevProgress, progress); Vec3d start = end.add(this.start.subtract(end) .scale(distanceToTarget)); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java index c91099558..e5f90c3ca 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outline.java @@ -31,7 +31,7 @@ public abstract class Outline { params = new OutlineParams(); } - public abstract void render(MatrixStack ms, SuperRenderTypeBuffer buffer); + public abstract void render(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt); public void renderCuboidLine(MatrixStack ms, SuperRenderTypeBuffer buffer, Vec3d start, Vec3d end) { Vec3d diff = end.subtract(start); diff --git a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java index 67e1a46c4..25185c7d0 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java +++ b/src/main/java/com/simibubi/create/foundation/utility/outliner/Outliner.java @@ -10,7 +10,6 @@ import java.util.Set; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.foundation.renderState.SuperRenderTypeBuffer; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBox; -import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.outliner.LineOutline.EndChasingLineOutline; import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams; @@ -146,7 +145,7 @@ public class Outliner { toClear.forEach(outlines::remove); } - public void renderOutlines(MatrixStack ms, SuperRenderTypeBuffer buffer) { + public void renderOutlines(MatrixStack ms, SuperRenderTypeBuffer buffer, float pt) { outlines.forEach((key, entry) -> { Outline outline = entry.getOutline(); outline.params.alpha = 1; @@ -156,13 +155,13 @@ public class Outliner { float fadeticks = OutlineEntry.fadeTicks; float lastAlpha = prevTicks >= 0 ? 1 : 1 + (prevTicks / fadeticks); float currentAlpha = 1 + (entry.ticksTillRemoval / fadeticks); - float alpha = MathHelper.lerp(AnimationTickHolder.getPartialTicks(), lastAlpha, currentAlpha); + float alpha = MathHelper.lerp(pt, lastAlpha, currentAlpha); outline.params.alpha = alpha * alpha * alpha; if (outline.params.alpha < 1 / 8f) return; } - outline.render(ms, buffer); + outline.render(ms, buffer, pt); }); }