mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-11-18 16:02:19 +01:00
Gotta glue fast
- Super glue is now applied through selecting areas of blocks
This commit is contained in:
parent
3848221712
commit
147c2ff9fa
31 changed files with 630 additions and 38 deletions
|
@ -543,22 +543,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo
|
||||||
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json
|
||||||
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json
|
||||||
7fbb25c577025ff61388c54c43401d8bb80723dd assets/create/lang/en_ud.json
|
7fbb25c577025ff61388c54c43401d8bb80723dd assets/create/lang/en_ud.json
|
||||||
7e435e07260a70aaed229404bd8404a8d2f4146d assets/create/lang/en_us.json
|
21bf73628fbf1f4e3a496f3ae1b0511193f42ddc assets/create/lang/en_us.json
|
||||||
a07abc26a0f35dc516bb2ea0dfe372f35d74a2b9 assets/create/lang/unfinished/de_de.json
|
b8e107ed495ab72b5ee2e5d150d10bb6f9738ef2 assets/create/lang/unfinished/de_de.json
|
||||||
e1df1ec44c3b3fc33bf519c474f9296fdf124f5b assets/create/lang/unfinished/es_cl.json
|
130c39194325888e3b7d8b0fe8186cc1064558b8 assets/create/lang/unfinished/es_cl.json
|
||||||
12353413a397b287924a2f72acbdf61a58a145eb assets/create/lang/unfinished/es_es.json
|
fcba07a025fb54f1de46953eaa182bd422ce8b07 assets/create/lang/unfinished/es_es.json
|
||||||
11dd818781023f97b86a197f26f09b859d189ce6 assets/create/lang/unfinished/fr_fr.json
|
ff2a7df3eb9555df959761654bec0df7adc14a06 assets/create/lang/unfinished/fr_fr.json
|
||||||
f503be711b19278b05a54cf16077a72787b09bd7 assets/create/lang/unfinished/it_it.json
|
1bbaf5201cbe698bdcb946168992f1a6c59a5b5c assets/create/lang/unfinished/it_it.json
|
||||||
4bae3ae77ddcf5a0284731b1816e035f6fe58253 assets/create/lang/unfinished/ja_jp.json
|
62f5f1eb810e76911ddf26af4bd14ac9ff22205e assets/create/lang/unfinished/ja_jp.json
|
||||||
e421c88c3aa465136414a60c1af71fd31a6a31b8 assets/create/lang/unfinished/ko_kr.json
|
f9788d8bdd53e4b1ddaff505eeb5ff783ac6037d assets/create/lang/unfinished/ko_kr.json
|
||||||
548acc508ae8b106501d4c0617447559f6ccdb9a assets/create/lang/unfinished/nl_nl.json
|
afa72a4a1bc4d3aac3ee1960713c1ee7006d0d4d assets/create/lang/unfinished/nl_nl.json
|
||||||
792d1859b3d850136d5757bec2c648764b3b90e2 assets/create/lang/unfinished/pl_pl.json
|
d8c932f13fde024184ab121def7d4c14195e87a0 assets/create/lang/unfinished/pl_pl.json
|
||||||
94d7667331e4bea254b21bb799703dcf8229516e assets/create/lang/unfinished/pt_br.json
|
e65c509495f72c872a3517b40f1cba3e81b2eb4a assets/create/lang/unfinished/pt_br.json
|
||||||
3dc867a8a1c2a061e25bf3e4ca3e035cbb8a32f3 assets/create/lang/unfinished/pt_pt.json
|
e3757ef8da2b88d3c83e6974c2d9ef36d1548121 assets/create/lang/unfinished/pt_pt.json
|
||||||
4f24b259987998bd606096d83c13b26cdd7e0acc assets/create/lang/unfinished/ro_ro.json
|
1313ea94854c11e4b55fe2a2cf143c5a548ec58d assets/create/lang/unfinished/ro_ro.json
|
||||||
a0709243bbdd2846b47f8388f7654314e0d2b357 assets/create/lang/unfinished/ru_ru.json
|
7bc26d8d8b2162615513fba5dd4f48cf787f3f45 assets/create/lang/unfinished/ru_ru.json
|
||||||
dcf1c00ffcd040619092d16e1bb5bd389482379d assets/create/lang/unfinished/zh_cn.json
|
2e704ec8d4cfb767cf22b7c154677e374f7377c9 assets/create/lang/unfinished/zh_cn.json
|
||||||
7a0670419615f5a0f312e2516f6baec2f1be84f8 assets/create/lang/unfinished/zh_tw.json
|
c6dba4495d3a03c2ea196c59c085f90ff9452b51 assets/create/lang/unfinished/zh_tw.json
|
||||||
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
|
487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json
|
||||||
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
|
b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json
|
||||||
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
|
3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json
|
||||||
|
|
|
@ -1527,6 +1527,15 @@
|
||||||
"create.flap_display.cycles.instant": " ; ",
|
"create.flap_display.cycles.instant": " ; ",
|
||||||
"create.flap_display.cycles.pixel": "█;▒",
|
"create.flap_display.cycles.pixel": "█;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "First position selected",
|
||||||
|
"create.super_glue.abort": "Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Hi :)",
|
"create.gui.config.overlay1": "Hi :)",
|
||||||
"create.gui.config.overlay2": "This is a sample overlay",
|
"create.gui.config.overlay2": "This is a sample overlay",
|
||||||
"create.gui.config.overlay3": "Click or drag with your mouse",
|
"create.gui.config.overlay3": "Click or drag with your mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1528",
|
"_": "Missing Localizations: 1536",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Hi :)",
|
"create.gui.config.overlay1": "Hi :)",
|
||||||
"create.gui.config.overlay2": "Dies ist ein Beispiel Overlay",
|
"create.gui.config.overlay2": "Dies ist ein Beispiel Overlay",
|
||||||
"create.gui.config.overlay3": "Klicke oder ziehe mit deiner Maus",
|
"create.gui.config.overlay3": "Klicke oder ziehe mit deiner Maus",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 539",
|
"_": "Missing Localizations: 547",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Hola :)",
|
"create.gui.config.overlay1": "Hola :)",
|
||||||
"create.gui.config.overlay2": "Este es un overlay de ejemplo",
|
"create.gui.config.overlay2": "Este es un overlay de ejemplo",
|
||||||
"create.gui.config.overlay3": "Haz clic o arrastra con el mouse",
|
"create.gui.config.overlay3": "Haz clic o arrastra con el mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 210",
|
"_": "Missing Localizations: 218",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Hola :)",
|
"create.gui.config.overlay1": "Hola :)",
|
||||||
"create.gui.config.overlay2": "Esta es una muestra de la superposición",
|
"create.gui.config.overlay2": "Esta es una muestra de la superposición",
|
||||||
"create.gui.config.overlay3": "Haga clic o arrastre con el ratón",
|
"create.gui.config.overlay3": "Haga clic o arrastre con el ratón",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1790",
|
"_": "Missing Localizations: 1798",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1479",
|
"_": "Missing Localizations: 1487",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Ciao :)",
|
"create.gui.config.overlay1": "Ciao :)",
|
||||||
"create.gui.config.overlay2": "Questo overlay è di esempio",
|
"create.gui.config.overlay2": "Questo overlay è di esempio",
|
||||||
"create.gui.config.overlay3": "Cliccalo o trascinalo col mouse",
|
"create.gui.config.overlay3": "Cliccalo o trascinalo col mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 205",
|
"_": "Missing Localizations: 213",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "やぁ(・∀・)",
|
"create.gui.config.overlay1": "やぁ(・∀・)",
|
||||||
"create.gui.config.overlay2": "これはオーバーレイのサンプルです",
|
"create.gui.config.overlay2": "これはオーバーレイのサンプルです",
|
||||||
"create.gui.config.overlay3": "マウスでクリックまたはドラッグしてください",
|
"create.gui.config.overlay3": "マウスでクリックまたはドラッグしてください",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 205",
|
"_": "Missing Localizations: 213",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Hi :)",
|
"create.gui.config.overlay1": "Hi :)",
|
||||||
"create.gui.config.overlay2": "This is a sample overlay",
|
"create.gui.config.overlay2": "This is a sample overlay",
|
||||||
"create.gui.config.overlay3": "Click or drag with your mouse",
|
"create.gui.config.overlay3": "Click or drag with your mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 2143",
|
"_": "Missing Localizations: 2151",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 578",
|
"_": "Missing Localizations: 586",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Cześć :)",
|
"create.gui.config.overlay1": "Cześć :)",
|
||||||
"create.gui.config.overlay2": "To jest przykładowa nakładka",
|
"create.gui.config.overlay2": "To jest przykładowa nakładka",
|
||||||
"create.gui.config.overlay3": "Kliknij lub przeciągnij myszką",
|
"create.gui.config.overlay3": "Kliknij lub przeciągnij myszką",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1390",
|
"_": "Missing Localizations: 1398",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 1762",
|
"_": "Missing Localizations: 1770",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
"create.gui.config.overlay1": "UNLOCALIZED: Hi :)",
|
||||||
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
"create.gui.config.overlay2": "UNLOCALIZED: This is a sample overlay",
|
||||||
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
"create.gui.config.overlay3": "UNLOCALIZED: Click or drag with your mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 206",
|
"_": "Missing Localizations: 214",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Hi :)",
|
"create.gui.config.overlay1": "Hi :)",
|
||||||
"create.gui.config.overlay2": "This is a sample overlay",
|
"create.gui.config.overlay2": "This is a sample overlay",
|
||||||
"create.gui.config.overlay3": "Click or drag with your mouse",
|
"create.gui.config.overlay3": "Click or drag with your mouse",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 583",
|
"_": "Missing Localizations: 591",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Привет :)",
|
"create.gui.config.overlay1": "Привет :)",
|
||||||
"create.gui.config.overlay2": "Это образец оверлея",
|
"create.gui.config.overlay2": "Это образец оверлея",
|
||||||
"create.gui.config.overlay3": "Кликни и тащи с помощью мыши",
|
"create.gui.config.overlay3": "Кликни и тащи с помощью мыши",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 205",
|
"_": "Missing Localizations: 213",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Hi :)",
|
"create.gui.config.overlay1": "Hi :)",
|
||||||
"create.gui.config.overlay2": "这是一个实例层",
|
"create.gui.config.overlay2": "这是一个实例层",
|
||||||
"create.gui.config.overlay3": "点击拖拽你的鼠标",
|
"create.gui.config.overlay3": "点击拖拽你的鼠标",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"_": "Missing Localizations: 597",
|
"_": "Missing Localizations: 605",
|
||||||
|
|
||||||
"_": "->------------------------] Game Elements [------------------------<-",
|
"_": "->------------------------] Game Elements [------------------------<-",
|
||||||
|
|
||||||
|
@ -1528,6 +1528,15 @@
|
||||||
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
"create.flap_display.cycles.instant": "UNLOCALIZED: ; ",
|
||||||
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
"create.flap_display.cycles.pixel": "UNLOCALIZED: █;▒",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "UNLOCALIZED: Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "UNLOCALIZED: Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "UNLOCALIZED: Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "UNLOCALIZED: Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "UNLOCALIZED: First position selected",
|
||||||
|
"create.super_glue.abort": "UNLOCALIZED: Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "UNLOCALIZED: Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "UNLOCALIZED: Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "嗨 :)",
|
"create.gui.config.overlay1": "嗨 :)",
|
||||||
"create.gui.config.overlay2": "這是一個實例層",
|
"create.gui.config.overlay2": "這是一個實例層",
|
||||||
"create.gui.config.overlay3": "點擊拖拽你的滑鼠",
|
"create.gui.config.overlay3": "點擊拖拽你的滑鼠",
|
||||||
|
|
|
@ -11,6 +11,7 @@ import com.simibubi.create.api.behaviour.BlockSpoutingBehaviour;
|
||||||
import com.simibubi.create.content.CreateItemGroup;
|
import com.simibubi.create.content.CreateItemGroup;
|
||||||
import com.simibubi.create.content.contraptions.TorquePropagator;
|
import com.simibubi.create.content.contraptions.TorquePropagator;
|
||||||
import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineInteractions;
|
import com.simibubi.create.content.contraptions.components.flywheel.engine.FurnaceEngineInteractions;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.GlueQueue;
|
||||||
import com.simibubi.create.content.curiosities.weapons.BuiltinPotatoProjectileTypes;
|
import com.simibubi.create.content.curiosities.weapons.BuiltinPotatoProjectileTypes;
|
||||||
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler;
|
import com.simibubi.create.content.logistics.RedstoneLinkNetworkHandler;
|
||||||
import com.simibubi.create.content.logistics.block.data.AllDataGathererBehaviours;
|
import com.simibubi.create.content.logistics.block.data.AllDataGathererBehaviours;
|
||||||
|
@ -76,6 +77,7 @@ public class Create {
|
||||||
public static final TorquePropagator TORQUE_PROPAGATOR = new TorquePropagator();
|
public static final TorquePropagator TORQUE_PROPAGATOR = new TorquePropagator();
|
||||||
public static final GlobalRailwayManager RAILWAYS = new GlobalRailwayManager();
|
public static final GlobalRailwayManager RAILWAYS = new GlobalRailwayManager();
|
||||||
public static final ServerLagger LAGGER = new ServerLagger();
|
public static final ServerLagger LAGGER = new ServerLagger();
|
||||||
|
public static final GlueQueue GLUE_QUEUE = new GlueQueue();
|
||||||
public static final Random RANDOM = new Random();
|
public static final Random RANDOM = new Random();
|
||||||
|
|
||||||
private static final NonNullSupplier<CreateRegistrate> REGISTRATE = CreateRegistrate.lazy(ID);
|
private static final NonNullSupplier<CreateRegistrate> REGISTRATE = CreateRegistrate.lazy(ID);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.simibubi.create;
|
package com.simibubi.create;
|
||||||
|
|
||||||
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueSelectionHandler;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.ContraptionRenderDispatcher;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.render.SBBContraptionManager;
|
import com.simibubi.create.content.contraptions.components.structureMovement.render.SBBContraptionManager;
|
||||||
import com.simibubi.create.content.contraptions.goggles.GoggleOverlayRenderer;
|
import com.simibubi.create.content.contraptions.goggles.GoggleOverlayRenderer;
|
||||||
|
@ -54,6 +55,7 @@ public class CreateClient {
|
||||||
public static final ClientSchematicLoader SCHEMATIC_SENDER = new ClientSchematicLoader();
|
public static final ClientSchematicLoader SCHEMATIC_SENDER = new ClientSchematicLoader();
|
||||||
public static final SchematicHandler SCHEMATIC_HANDLER = new SchematicHandler();
|
public static final SchematicHandler SCHEMATIC_HANDLER = new SchematicHandler();
|
||||||
public static final SchematicAndQuillHandler SCHEMATIC_AND_QUILL_HANDLER = new SchematicAndQuillHandler();
|
public static final SchematicAndQuillHandler SCHEMATIC_AND_QUILL_HANDLER = new SchematicAndQuillHandler();
|
||||||
|
public static final SuperGlueSelectionHandler GLUE_HANDLER = new SuperGlueSelectionHandler();
|
||||||
|
|
||||||
public static final ZapperRenderHandler ZAPPER_RENDER_HANDLER = new ZapperRenderHandler();
|
public static final ZapperRenderHandler ZAPPER_RENDER_HANDLER = new ZapperRenderHandler();
|
||||||
public static final PotatoCannonRenderHandler POTATO_CANNON_RENDER_HANDLER = new PotatoCannonRenderHandler();
|
public static final PotatoCannonRenderHandler POTATO_CANNON_RENDER_HANDLER = new PotatoCannonRenderHandler();
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.glue;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.simibubi.create.AllSoundEvents;
|
||||||
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
|
import com.simibubi.create.foundation.utility.BlockFace;
|
||||||
|
import com.simibubi.create.foundation.utility.WorldAttached;
|
||||||
|
|
||||||
|
import net.minecraft.util.Mth;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
|
|
||||||
|
public class GlueQueue {
|
||||||
|
|
||||||
|
private WorldAttached<List<BlockFace>> QUEUED_GLUE = new WorldAttached<>(level -> new LinkedList<>());
|
||||||
|
|
||||||
|
public void tick(Level level) {
|
||||||
|
List<BlockFace> list = QUEUED_GLUE.get(level);
|
||||||
|
if (list.isEmpty())
|
||||||
|
return;
|
||||||
|
BlockFace next = list.remove(0);
|
||||||
|
if (!level.isLoaded(next.getPos()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
SuperGlueEntity entity = new SuperGlueEntity(level, next.getPos(), next.getFace());
|
||||||
|
level.addFreshEntity(entity);
|
||||||
|
AllSoundEvents.SLIME_ADDED.playFrom(entity, 0.125F, Mth.clamp(8f / (list.size() + 1), 0.75f, 1f));
|
||||||
|
|
||||||
|
AllPackets.channel.send(PacketDistributor.ALL.noArg(),
|
||||||
|
new GlueEffectPacket(entity.getHangingPosition(), entity.getFacingDirection()
|
||||||
|
.getOpposite(), false));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(Level level, Collection<BlockFace> entries) {
|
||||||
|
QUEUED_GLUE.get(level)
|
||||||
|
.addAll(entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -181,7 +181,7 @@ public class SuperGlueEntity extends Entity
|
||||||
BlockPos pos2 = hangingPosition.relative(getFacingDirection().getOpposite());
|
BlockPos pos2 = hangingPosition.relative(getFacingDirection().getOpposite());
|
||||||
if (level.isOutsideBuildHeight(pos2))
|
if (level.isOutsideBuildHeight(pos2))
|
||||||
return false;
|
return false;
|
||||||
if (!level.isAreaLoaded(pos, 0) || !level.isAreaLoaded(pos2, 0))
|
if (!level.isLoaded(pos) || !level.isLoaded(pos2))
|
||||||
return true;
|
return true;
|
||||||
if (!isValidFace(level, pos2, getFacingDirection())
|
if (!isValidFace(level, pos2, getFacingDirection())
|
||||||
&& !isValidFace(level, pos, getFacingDirection().getOpposite()))
|
&& !isValidFace(level, pos, getFacingDirection().getOpposite()))
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.simibubi.create.content.contraptions.components.structureMovement.glue;
|
package com.simibubi.create.content.contraptions.components.structureMovement.glue;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
||||||
import com.simibubi.create.foundation.utility.VecHelper;
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
@ -16,12 +17,34 @@ import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.item.context.UseOnContext;
|
import net.minecraft.world.item.context.UseOnContext;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.Event.Result;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
||||||
|
|
||||||
|
@EventBusSubscriber
|
||||||
public class SuperGlueItem extends Item {
|
public class SuperGlueItem extends Item {
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void glueItemAlwaysPlacesWhenUsed(PlayerInteractEvent.RightClickBlock event) {
|
||||||
|
if (event.getHitVec() != null) {
|
||||||
|
BlockState blockState = event.getWorld()
|
||||||
|
.getBlockState(event.getHitVec()
|
||||||
|
.getBlockPos());
|
||||||
|
if (blockState.getBlock()instanceof AbstractChassisBlock cb)
|
||||||
|
if (cb.getGlueableSide(blockState, event.getFace()) != null)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.getItemStack()
|
||||||
|
.getItem() instanceof SuperGlueItem)
|
||||||
|
event.setUseBlock(Result.DENY);
|
||||||
|
}
|
||||||
|
|
||||||
public SuperGlueItem(Properties properties) {
|
public SuperGlueItem(Properties properties) {
|
||||||
super(properties);
|
super(properties);
|
||||||
}
|
}
|
||||||
|
@ -84,8 +107,8 @@ public class SuperGlueItem extends Item {
|
||||||
Vec3 motion = offset.normalize()
|
Vec3 motion = offset.normalize()
|
||||||
.scale(1 / 16f);
|
.scale(1 / 16f);
|
||||||
if (fullBlock)
|
if (fullBlock)
|
||||||
offset = new Vec3(Mth.clamp(offset.x, -.5, .5), Mth.clamp(offset.y, -.5, .5),
|
offset =
|
||||||
Mth.clamp(offset.z, -.5, .5));
|
new Vec3(Mth.clamp(offset.x, -.5, .5), Mth.clamp(offset.y, -.5, .5), Mth.clamp(offset.z, -.5, .5));
|
||||||
Vec3 particlePos = facePos.add(offset);
|
Vec3 particlePos = facePos.add(offset);
|
||||||
world.addParticle(new ItemParticleOption(ParticleTypes.ITEM, stack), particlePos.x, particlePos.y,
|
world.addParticle(new ItemParticleOption(ParticleTypes.ITEM, stack), particlePos.x, particlePos.y,
|
||||||
particlePos.z, motion.x, motion.y, motion.z);
|
particlePos.z, motion.x, motion.y, motion.z);
|
||||||
|
|
|
@ -0,0 +1,179 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.glue;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.google.common.base.Objects;
|
||||||
|
import com.simibubi.create.AllSpecialTextures;
|
||||||
|
import com.simibubi.create.CreateClient;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.chassis.AbstractChassisBlock;
|
||||||
|
import com.simibubi.create.foundation.networking.AllPackets;
|
||||||
|
import com.simibubi.create.foundation.utility.BlockFace;
|
||||||
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
import com.simibubi.create.foundation.utility.Pair;
|
||||||
|
import com.simibubi.create.foundation.utility.outliner.Outline.OutlineParams;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.multiplayer.ClientLevel;
|
||||||
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.phys.AABB;
|
||||||
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
|
import net.minecraft.world.phys.HitResult;
|
||||||
|
import net.minecraft.world.phys.HitResult.Type;
|
||||||
|
|
||||||
|
public class SuperGlueSelectionHandler {
|
||||||
|
|
||||||
|
private static final int SUCCESS = 0x68c586;
|
||||||
|
private static final int FAIL = 0xc5b548;
|
||||||
|
|
||||||
|
private Object clusterOutlineSlot = new Object();
|
||||||
|
private Object bbOutlineSlot = new Object();
|
||||||
|
|
||||||
|
private BlockPos firstPos;
|
||||||
|
private BlockPos hoveredPos;
|
||||||
|
private Set<BlockPos> currentCluster;
|
||||||
|
private int glueRequired;
|
||||||
|
|
||||||
|
public void tick() {
|
||||||
|
Minecraft mc = Minecraft.getInstance();
|
||||||
|
LocalPlayer player = mc.player;
|
||||||
|
BlockPos hovered = null;
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
|
||||||
|
if (!isGlue(stack)) {
|
||||||
|
if (firstPos != null)
|
||||||
|
discard();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HitResult hitResult = mc.hitResult;
|
||||||
|
if (hitResult != null && hitResult.getType() == Type.BLOCK)
|
||||||
|
hovered = ((BlockHitResult) hitResult).getBlockPos();
|
||||||
|
|
||||||
|
if (hovered == null) {
|
||||||
|
hoveredPos = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstPos != null && !firstPos.closerThan(hovered, 24)) {
|
||||||
|
Lang.sendStatus(player, FAIL, "super_glue.too_far");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean cancel = player.isSteppingCarefully();
|
||||||
|
if (cancel && firstPos == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
AABB currentSelectionBox = getCurrentSelectionBox();
|
||||||
|
|
||||||
|
boolean unchanged = Objects.equal(hovered, hoveredPos);
|
||||||
|
|
||||||
|
if (unchanged) {
|
||||||
|
if (currentCluster != null) {
|
||||||
|
boolean canReach = currentCluster.contains(hovered);
|
||||||
|
boolean canAfford = SuperGlueSelectionHelper.collectGlueFromInventory(player, glueRequired, true);
|
||||||
|
|
||||||
|
if (!canReach)
|
||||||
|
Lang.sendStatus(player, FAIL, "super_glue.cannot_reach");
|
||||||
|
else if (!canAfford)
|
||||||
|
Lang.sendStatus(player, FAIL, "super_glue.not_enough");
|
||||||
|
else if (cancel)
|
||||||
|
Lang.sendStatus(player, FAIL, "super_glue.click_to_discard");
|
||||||
|
else
|
||||||
|
Lang.sendStatus(player, SUCCESS, "super_glue.click_to_confirm");
|
||||||
|
|
||||||
|
CreateClient.OUTLINER.showCluster(clusterOutlineSlot, currentCluster)
|
||||||
|
.colored(canReach && canAfford && !cancel ? SUCCESS : FAIL)
|
||||||
|
.withFaceTextures(AllSpecialTextures.CHECKERED, AllSpecialTextures.HIGHLIGHT_CHECKERED)
|
||||||
|
.lineWidth(1 / 16f);
|
||||||
|
}
|
||||||
|
if (currentSelectionBox != null) {
|
||||||
|
OutlineParams params =
|
||||||
|
firstPos == null ? CreateClient.OUTLINER.showAABB(bbOutlineSlot, currentSelectionBox)
|
||||||
|
: CreateClient.OUTLINER.chaseAABB(bbOutlineSlot, currentSelectionBox);
|
||||||
|
params.colored(0x111111)
|
||||||
|
.disableNormals()
|
||||||
|
.lineWidth(1 / 128f);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hoveredPos = hovered;
|
||||||
|
|
||||||
|
Pair<Set<BlockPos>, List<BlockFace>> pair =
|
||||||
|
SuperGlueSelectionHelper.searchGlueGroup(mc.level, firstPos, hoveredPos);
|
||||||
|
|
||||||
|
currentCluster = pair == null ? null : pair.getFirst();
|
||||||
|
glueRequired = pair == null ? 0
|
||||||
|
: pair.getSecond()
|
||||||
|
.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isGlue(ItemStack stack) {
|
||||||
|
return stack.getItem() instanceof SuperGlueItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AABB getCurrentSelectionBox() {
|
||||||
|
return firstPos == null || hoveredPos == null ? null : new AABB(firstPos, hoveredPos).expandTowards(1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onMouseInput() {
|
||||||
|
Minecraft mc = Minecraft.getInstance();
|
||||||
|
LocalPlayer player = mc.player;
|
||||||
|
ClientLevel level = mc.level;
|
||||||
|
|
||||||
|
if (!isGlue(player.getMainHandItem()))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (player.isSteppingCarefully()) {
|
||||||
|
if (firstPos != null) {
|
||||||
|
discard();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hoveredPos == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (mc.hitResult instanceof BlockHitResult bhr) {
|
||||||
|
BlockState blockState = level.getBlockState(hoveredPos);
|
||||||
|
if (blockState.getBlock()instanceof AbstractChassisBlock cb)
|
||||||
|
if (cb.getGlueableSide(blockState, bhr.getDirection()) != null)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstPos != null && currentCluster != null) {
|
||||||
|
boolean canReach = currentCluster.contains(hoveredPos);
|
||||||
|
boolean canAfford = SuperGlueSelectionHelper.collectGlueFromInventory(player, glueRequired, true);
|
||||||
|
|
||||||
|
if (!canReach || !canAfford)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
confirm();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
firstPos = hoveredPos;
|
||||||
|
Lang.sendStatus(player, "super_glue.first_pos");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void discard() {
|
||||||
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
currentCluster = null;
|
||||||
|
firstPos = null;
|
||||||
|
Lang.sendStatus(player, "super_glue.abort");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void confirm() {
|
||||||
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
AllPackets.channel.sendToServer(new SuperGlueSelectionPacket(firstPos, hoveredPos));
|
||||||
|
discard();
|
||||||
|
Lang.sendStatus(player, "super_glue.sucess");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,106 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.glue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementChecks;
|
||||||
|
import com.simibubi.create.foundation.utility.BlockFace;
|
||||||
|
import com.simibubi.create.foundation.utility.Iterate;
|
||||||
|
import com.simibubi.create.foundation.utility.Pair;
|
||||||
|
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.core.Direction;
|
||||||
|
import net.minecraft.core.NonNullList;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.phys.AABB;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
|
public class SuperGlueSelectionHelper {
|
||||||
|
|
||||||
|
public static Pair<Set<BlockPos>, List<BlockFace>> searchGlueGroup(Level level, BlockPos startPos,
|
||||||
|
BlockPos endPos) {
|
||||||
|
if (endPos == null || startPos == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
AABB bb = new AABB(startPos, endPos).expandTowards(1, 1, 1);
|
||||||
|
|
||||||
|
List<BlockPos> frontier = new ArrayList<>();
|
||||||
|
Set<BlockPos> visited = new HashSet<>();
|
||||||
|
Set<BlockPos> attached = new HashSet<>();
|
||||||
|
List<BlockFace> glue = new ArrayList<>();
|
||||||
|
|
||||||
|
visited.add(startPos);
|
||||||
|
frontier.add(startPos);
|
||||||
|
|
||||||
|
while (!frontier.isEmpty()) {
|
||||||
|
BlockPos currentPos = frontier.remove(0);
|
||||||
|
attached.add(currentPos);
|
||||||
|
|
||||||
|
Map<Direction, SuperGlueEntity> gatheredGlue = SuperGlueHandler.gatherGlue(level, currentPos);
|
||||||
|
for (Direction d : Iterate.directions) {
|
||||||
|
BlockPos offset = currentPos.relative(d);
|
||||||
|
boolean gluePresent = gatheredGlue.containsKey(d);
|
||||||
|
boolean alreadySticky = SuperGlueEntity.isSideSticky(level, currentPos, d)
|
||||||
|
|| SuperGlueEntity.isSideSticky(level, offset, d.getOpposite());
|
||||||
|
|
||||||
|
if (!alreadySticky && !gluePresent && !bb.contains(Vec3.atCenterOf(offset)))
|
||||||
|
continue;
|
||||||
|
if (!BlockMovementChecks.isMovementNecessary(level.getBlockState(offset), level, offset))
|
||||||
|
continue;
|
||||||
|
if (!SuperGlueEntity.isValidFace(level, currentPos, d)
|
||||||
|
|| !SuperGlueEntity.isValidFace(level, offset, d.getOpposite()))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
boolean glueNecessary = !gluePresent && !alreadySticky;
|
||||||
|
|
||||||
|
if (visited.add(offset)) {
|
||||||
|
frontier.add(offset);
|
||||||
|
if (glueNecessary)
|
||||||
|
glue.add(new BlockFace(offset, d));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attached.size() < 2 && attached.contains(endPos))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return Pair.of(attached, glue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean collectGlueFromInventory(Player player, int requiredAmount, boolean simulate) {
|
||||||
|
if (player.getAbilities().instabuild)
|
||||||
|
return true;
|
||||||
|
if (requiredAmount == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
NonNullList<ItemStack> items = player.getInventory().items;
|
||||||
|
for (int i = -1; i < items.size(); i++) {
|
||||||
|
int slot = i == -1 ? player.getInventory().selected : i;
|
||||||
|
ItemStack stack = items.get(slot);
|
||||||
|
if (stack.isEmpty())
|
||||||
|
continue;
|
||||||
|
if (!stack.isDamageableItem())
|
||||||
|
continue;
|
||||||
|
if (!(stack.getItem() instanceof SuperGlueItem))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
int charges = Math.min(requiredAmount, stack.getMaxDamage() - stack.getDamageValue());
|
||||||
|
|
||||||
|
if (!simulate)
|
||||||
|
stack.hurtAndBreak(charges, player, i == -1 ? SuperGlueItem::onBroken : $ -> {
|
||||||
|
});
|
||||||
|
|
||||||
|
requiredAmount -= charges;
|
||||||
|
if (requiredAmount <= 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.structureMovement.glue;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
import com.simibubi.create.Create;
|
||||||
|
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||||
|
import com.simibubi.create.foundation.utility.BlockFace;
|
||||||
|
import com.simibubi.create.foundation.utility.Pair;
|
||||||
|
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
import net.minecraftforge.common.ForgeMod;
|
||||||
|
import net.minecraftforge.network.NetworkEvent.Context;
|
||||||
|
|
||||||
|
public class SuperGlueSelectionPacket extends SimplePacketBase {
|
||||||
|
|
||||||
|
private BlockPos from;
|
||||||
|
private BlockPos to;
|
||||||
|
|
||||||
|
public SuperGlueSelectionPacket(BlockPos from, BlockPos to) {
|
||||||
|
this.from = from;
|
||||||
|
this.to = to;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SuperGlueSelectionPacket(FriendlyByteBuf buffer) {
|
||||||
|
from = buffer.readBlockPos();
|
||||||
|
to = buffer.readBlockPos();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(FriendlyByteBuf buffer) {
|
||||||
|
buffer.writeBlockPos(from);
|
||||||
|
buffer.writeBlockPos(to);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(Supplier<Context> context) {
|
||||||
|
Context ctx = context.get();
|
||||||
|
ctx.enqueueWork(() -> {
|
||||||
|
ServerPlayer player = ctx.getSender();
|
||||||
|
|
||||||
|
double range = player.getAttribute(ForgeMod.REACH_DISTANCE.get())
|
||||||
|
.getValue() + 2;
|
||||||
|
if (player.distanceToSqr(Vec3.atCenterOf(to)) > range * range)
|
||||||
|
return;
|
||||||
|
if (!to.closerThan(from, 25))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Pair<Set<BlockPos>, List<BlockFace>> group =
|
||||||
|
SuperGlueSelectionHelper.searchGlueGroup(player.level, from, to);
|
||||||
|
if (group == null)
|
||||||
|
return;
|
||||||
|
if (!group.getFirst()
|
||||||
|
.contains(to))
|
||||||
|
return;
|
||||||
|
List<BlockFace> glue = group.getSecond();
|
||||||
|
if (!SuperGlueSelectionHelper.collectGlueFromInventory(player, glue.size(), true))
|
||||||
|
return;
|
||||||
|
|
||||||
|
SuperGlueSelectionHelper.collectGlueFromInventory(player, glue.size(), false);
|
||||||
|
Create.GLUE_QUEUE.add(player.level, glue);
|
||||||
|
});
|
||||||
|
ctx.setPacketHandled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -122,6 +122,7 @@ public class ClientEvents {
|
||||||
|
|
||||||
CreateClient.SCHEMATIC_SENDER.tick();
|
CreateClient.SCHEMATIC_SENDER.tick();
|
||||||
CreateClient.SCHEMATIC_AND_QUILL_HANDLER.tick();
|
CreateClient.SCHEMATIC_AND_QUILL_HANDLER.tick();
|
||||||
|
CreateClient.GLUE_HANDLER.tick();
|
||||||
CreateClient.SCHEMATIC_HANDLER.tick();
|
CreateClient.SCHEMATIC_HANDLER.tick();
|
||||||
CreateClient.ZAPPER_RENDER_HANDLER.tick();
|
CreateClient.ZAPPER_RENDER_HANDLER.tick();
|
||||||
CreateClient.POTATO_CANNON_RENDER_HANDLER.tick();
|
CreateClient.POTATO_CANNON_RENDER_HANDLER.tick();
|
||||||
|
|
|
@ -122,6 +122,7 @@ public class CommonEvents {
|
||||||
LinkedControllerServerHandler.tick(world);
|
LinkedControllerServerHandler.tick(world);
|
||||||
ControlsServerHandler.tick(world);
|
ControlsServerHandler.tick(world);
|
||||||
Create.RAILWAYS.tick(world);
|
Create.RAILWAYS.tick(world);
|
||||||
|
Create.GLUE_QUEUE.tick(world);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
|
@ -59,15 +59,22 @@ public class InputEvents {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onClickInput(ClickInputEvent event) {
|
public static void onClickInput(ClickInputEvent event) {
|
||||||
if (Minecraft.getInstance().screen != null)
|
Minecraft mc = Minecraft.getInstance();
|
||||||
|
if (mc.screen != null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (CurvedTrackInteraction.onClickInput(event)) {
|
if (CurvedTrackInteraction.onClickInput(event)) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getKeyMapping() == Minecraft.getInstance().options.keyPickItem) {
|
if (event.getKeyMapping() == mc.options.keyUse) {
|
||||||
|
if (CreateClient.GLUE_HANDLER.onMouseInput())
|
||||||
|
event.setCanceled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.getKeyMapping() == mc.options.keyPickItem) {
|
||||||
if (ToolboxHandlerClient.onPickItem())
|
if (ToolboxHandlerClient.onPickItem())
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -12,6 +12,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Con
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionStallPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionStallPacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionUpdatePacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.gantry.GantryContraptionUpdatePacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.glue.GlueEffectPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.GlueEffectPacket;
|
||||||
|
import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueSelectionPacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.ControlsInputPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.ControlsInputPacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.ControlsStopControllingPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.interaction.controls.ControlsStopControllingPacket;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket;
|
import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket;
|
||||||
|
@ -128,6 +129,7 @@ public enum AllPackets {
|
||||||
DESTROY_CURVED_TRACK(CurvedTrackDestroyPacket.class, CurvedTrackDestroyPacket::new, PLAY_TO_SERVER),
|
DESTROY_CURVED_TRACK(CurvedTrackDestroyPacket.class, CurvedTrackDestroyPacket::new, PLAY_TO_SERVER),
|
||||||
SELECT_CURVED_TRACK(CurvedTrackSelectionPacket.class, CurvedTrackSelectionPacket::new, PLAY_TO_SERVER),
|
SELECT_CURVED_TRACK(CurvedTrackSelectionPacket.class, CurvedTrackSelectionPacket::new, PLAY_TO_SERVER),
|
||||||
PLACE_CURVED_TRACK(PlaceExtendedCurvePacket.class, PlaceExtendedCurvePacket::new, PLAY_TO_SERVER),
|
PLACE_CURVED_TRACK(PlaceExtendedCurvePacket.class, PlaceExtendedCurvePacket::new, PLAY_TO_SERVER),
|
||||||
|
GLUE_IN_AREA(SuperGlueSelectionPacket.class, SuperGlueSelectionPacket::new, PLAY_TO_SERVER),
|
||||||
|
|
||||||
// Server to Client
|
// Server to Client
|
||||||
SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT),
|
SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT),
|
||||||
|
|
|
@ -24,6 +24,10 @@ public class Lang {
|
||||||
player.displayClientMessage(createTranslationTextComponent(key, args), true);
|
player.displayClientMessage(createTranslationTextComponent(key, args), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void sendStatus(Player player, int color, String key, Object... args) {
|
||||||
|
player.displayClientMessage(createTranslationTextComponent(key, args).withStyle(p -> p.withColor(color)), true);
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Component> translatedOptions(String prefix, String... keys) {
|
public static List<Component> translatedOptions(String prefix, String... keys) {
|
||||||
List<Component> result = new ArrayList<>(keys.length);
|
List<Component> result = new ArrayList<>(keys.length);
|
||||||
for (String key : keys)
|
for (String key : keys)
|
||||||
|
@ -35,7 +39,7 @@ public class Lang {
|
||||||
public static String asId(String name) {
|
public static String asId(String name) {
|
||||||
return name.toLowerCase(Locale.ROOT);
|
return name.toLowerCase(Locale.ROOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String nonPluralId(String name) {
|
public static String nonPluralId(String name) {
|
||||||
String asId = asId(name);
|
String asId = asId(name);
|
||||||
return asId.endsWith("s") ? asId.substring(0, asId.length() - 1) : asId;
|
return asId.endsWith("s") ? asId.substring(0, asId.length() - 1) : asId;
|
||||||
|
|
|
@ -751,6 +751,15 @@
|
||||||
"create.flap_display.cycles.instant": " ; ",
|
"create.flap_display.cycles.instant": " ; ",
|
||||||
"create.flap_display.cycles.pixel": "\u2588;\u2592",
|
"create.flap_display.cycles.pixel": "\u2588;\u2592",
|
||||||
|
|
||||||
|
"create.super_glue.too_far": "Selected area is too big",
|
||||||
|
"create.super_glue.cannot_reach": "Selected blocks must be connected",
|
||||||
|
"create.super_glue.click_to_confirm": "Click again to confirm",
|
||||||
|
"create.super_glue.click_to_discard": "Sneak-click to discard selection",
|
||||||
|
"create.super_glue.first_pos": "First position selected",
|
||||||
|
"create.super_glue.abort": "Selection discarded",
|
||||||
|
"create.super_glue.not_enough": "Not enough glue in inventory",
|
||||||
|
"create.super_glue.sucess": "Applying Glue...",
|
||||||
|
|
||||||
"create.gui.config.overlay1": "Hi :)",
|
"create.gui.config.overlay1": "Hi :)",
|
||||||
"create.gui.config.overlay2": "This is a sample overlay",
|
"create.gui.config.overlay2": "This is a sample overlay",
|
||||||
"create.gui.config.overlay3": "Click or drag with your mouse",
|
"create.gui.config.overlay3": "Click or drag with your mouse",
|
||||||
|
|
Loading…
Reference in a new issue