From f033633271038de9dc88f84e89c6affa789ddcfe Mon Sep 17 00:00:00 2001 From: zelophed Date: Tue, 7 Jun 2022 23:14:04 +0200 Subject: [PATCH] Big Data, Part II - Created "Data-source" behaviour for Boilers, Seats, Kinetic Gauges, Enchantment Table and Fluid-Content Observers - Minor refactors at some locations --- src/generated/resources/.cache/cache | 32 ++-- .../resources/assets/create/lang/en_us.json | 20 ++- .../assets/create/lang/unfinished/de_de.json | 20 ++- .../assets/create/lang/unfinished/es_cl.json | 20 ++- .../assets/create/lang/unfinished/es_es.json | 20 ++- .../assets/create/lang/unfinished/fr_fr.json | 20 ++- .../assets/create/lang/unfinished/it_it.json | 20 ++- .../assets/create/lang/unfinished/ja_jp.json | 20 ++- .../assets/create/lang/unfinished/ko_kr.json | 20 ++- .../assets/create/lang/unfinished/nl_nl.json | 22 ++- .../assets/create/lang/unfinished/pl_pl.json | 20 ++- .../assets/create/lang/unfinished/pt_br.json | 20 ++- .../assets/create/lang/unfinished/pt_pt.json | 20 ++- .../assets/create/lang/unfinished/ro_ro.json | 20 ++- .../assets/create/lang/unfinished/ru_ru.json | 20 ++- .../assets/create/lang/unfinished/zh_cn.json | 20 ++- .../assets/create/lang/unfinished/zh_tw.json | 20 ++- .../java/com/simibubi/create/AllBlocks.java | 15 ++ .../jei/category/CreateRecipeCategory.java | 2 +- .../contraptions/fluids/tank/BoilerData.java | 143 +++++++++++------- .../block/display/AllDisplayBehaviours.java | 10 +- .../block/display/DisplayLinkContext.java | 14 +- .../display/source/BoilerDisplaySource.java | 129 ++++++++++++++++ ...ce.java => DeathCounterDisplaySource.java} | 4 +- .../block/display/source/DisplaySource.java | 8 +- .../source/EnchantPowerDisplaySource.java | 54 +++++++ .../source/EntityNameDisplaySource.java | 39 +++++ .../source/FluidAmountDisplaySource.java | 53 +++++++ .../source/FluidListDisplaySource.java | 110 ++++++++++++++ .../source/KineticSpeedDisplaySource.java | 49 ++++++ .../source/KineticStressDisplaySource.java | 80 ++++++++++ .../display/target/DisplayBoardTarget.java | 8 +- .../display/target/LecternDisplayTarget.java | 8 +- .../display/target/SignDisplayTarget.java | 6 +- .../foundation/utility/FluidFormatter.java | 27 ++++ .../assets/create/lang/default/interface.json | 24 ++- 36 files changed, 988 insertions(+), 149 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/display/source/BoilerDisplaySource.java rename src/main/java/com/simibubi/create/content/logistics/block/display/source/{DeathCounterDataSource.java => DeathCounterDisplaySource.java} (89%) create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/display/source/EnchantPowerDisplaySource.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/display/source/EntityNameDisplaySource.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidAmountDisplaySource.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidListDisplaySource.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/display/source/KineticSpeedDisplaySource.java create mode 100644 src/main/java/com/simibubi/create/content/logistics/block/display/source/KineticStressDisplaySource.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/FluidFormatter.java diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 5500a5ab0..758cf840b 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -554,22 +554,22 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json 50f7862ded2d9a955c259a12685906a9ec9ad97a assets/create/lang/en_ud.json -b8ef69f9d7a670363f8adcc294c890c9d4265955 assets/create/lang/en_us.json -389ca4ecd1ff00ed2a211f6c07b0cf359098a49f assets/create/lang/unfinished/de_de.json -6e7e9849785c878046cd2b582a461aef95b7ce20 assets/create/lang/unfinished/es_cl.json -dbbb124039358f0a19af2f13e40e2767ed502976 assets/create/lang/unfinished/es_es.json -9a17028a587007778503582a53a3055a969f05c4 assets/create/lang/unfinished/fr_fr.json -b153f0c6d252ee91ca57751630268f40fd9aa9eb assets/create/lang/unfinished/it_it.json -292ace9dd69adc7028dfd551038dd612f1a62f34 assets/create/lang/unfinished/ja_jp.json -fdc062986ad47205b33c16f4339f9eb11ed89f3e assets/create/lang/unfinished/ko_kr.json -81a2447f877c072cb8709570482c5b98ba18f45f assets/create/lang/unfinished/nl_nl.json -79f443acec9320796a140b6ca53c399b639c516f assets/create/lang/unfinished/pl_pl.json -df1f85f1762ad26c4ab33eb0e52ab0516c227d27 assets/create/lang/unfinished/pt_br.json -6e54230dee02119d3deef8668f815dfe095285fe assets/create/lang/unfinished/pt_pt.json -7495c140ed817cc02a68e9ada4a2867a33260411 assets/create/lang/unfinished/ro_ro.json -53896d6fd85c2f6bd7fb4376bb4ce41aa1b12f38 assets/create/lang/unfinished/ru_ru.json -a049b20621987947fc060c94b912f3afd90abe9e assets/create/lang/unfinished/zh_cn.json -a41da0cb6db644b9e13531ded820857a7811c7c7 assets/create/lang/unfinished/zh_tw.json +231f8ff1089adcd2f800eae89889d1bc8cfbc880 assets/create/lang/en_us.json +c8b2bff9ff418afffb2cf0bcb0cdcfa9217284af assets/create/lang/unfinished/de_de.json +caab06d1829dcbe8d1bd90f5a3372e697950b1c9 assets/create/lang/unfinished/es_cl.json +aafa069927c628995802b86292b6e688ff37cf7c assets/create/lang/unfinished/es_es.json +4f36eaeefffb1f14830eeb4e757305472dbe5123 assets/create/lang/unfinished/fr_fr.json +0708c7e4d9ac7b69c9b81ad6829b370d95e48c83 assets/create/lang/unfinished/it_it.json +80c818a030468a7ac89b30b6d977f6ca3dc4dd6c assets/create/lang/unfinished/ja_jp.json +1af2a080a1a4ad06afafeda0c316ca59cc05f1d9 assets/create/lang/unfinished/ko_kr.json +99cabbf434a085f68d1d8acf12736d70f141e68a assets/create/lang/unfinished/nl_nl.json +a76b173ed917a6209f479aa3554784ebe7c62753 assets/create/lang/unfinished/pl_pl.json +52ff06ad9d938cb90c446d3e3e2401e5a3cb03a8 assets/create/lang/unfinished/pt_br.json +3a77d4f14b4a03654f66105666de5aab2d71cfb7 assets/create/lang/unfinished/pt_pt.json +bdcdbfea30a78bb65ab5b1b2054348cd5fb4daab assets/create/lang/unfinished/ro_ro.json +2c77fee5e42425963ff239634e1bc131208785e5 assets/create/lang/unfinished/ru_ru.json +27a690b057a14d4fe96fae20392b97da3164727e assets/create/lang/unfinished/zh_cn.json +6f04d53cca731b7419cb9e617be69b6ca1355eef assets/create/lang/unfinished/zh_tw.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 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 230a31ab2..9f1fdb7b7 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -906,7 +906,8 @@ "create.generic.unit.rpm": "RPM", "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", - "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.millibuckets": "mB", + "create.generic.unit.buckets": "B", "create.generic.clockwise": "Clockwise", "create.generic.counter_clockwise": "Counter-Clockwise", "create.generic.in_quotes": "\"%1$s\"", @@ -1514,6 +1515,8 @@ "create.display_source.combine_item_names": "Combine Item Names", "create.display_source.count_items": "Amount of matching Items", "create.display_source.list_items": "List matching Items", + "create.display_source.fluid_amount": "Amount of matching Fluids", + "create.display_source.list_fluids": "List matching Fluids", "create.display_source.nixie_tube": "Copy Nixie Tubes", "create.display_source.fill_level": "Container Fill Level", "create.display_source.fill_level.display": "Display Format", @@ -1548,6 +1551,16 @@ "create.display_source.station_summary.minutes": " min", "create.display_source.station_summary.seconds": "%1$ss", "create.display_source.observed_train_name": "Detected Train Name", + "create.display_source.max_enchant_level": "Max Enchanting Cost", + "create.display_source.boiler_status": "Boiler Status", + "create.display_source.entity_name": "Entity Name", + "create.display_source.kinetic_speed": "Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "Ignore Direction", + "create.display_source.kinetic_speed.directional": "Include Direction", + "create.display_source.kinetic_stress.current": "Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "Stress Capacity (Remaining)", "create.display_target.line": "Line %1$s", "create.display_target.page": "Page %1$s", @@ -1557,8 +1570,9 @@ "create.flap_display.cycles.numeric": " ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": " ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": " ;K;M", + "create.flap_display.cycles.fluid_units": "mB;B ", "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", @@ -2699,4 +2713,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 f51dfdb78..206ccc907 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: 942", + "_": "Missing Localizations: 956", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "Uhrzeigersinn", "create.generic.counter_clockwise": "Gegen-Uhrzeigersinn", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} diff --git a/src/generated/resources/assets/create/lang/unfinished/es_cl.json b/src/generated/resources/assets/create/lang/unfinished/es_cl.json index d83111132..94dc24334 100644 --- a/src/generated/resources/assets/create/lang/unfinished/es_cl.json +++ b/src/generated/resources/assets/create/lang/unfinished/es_cl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 592", + "_": "Missing Localizations: 606", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "us", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "En sentido del Reloj", "create.generic.counter_clockwise": "Al contrario del Reloj", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 cab825d6b..a4b7cc1a3 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: 256", + "_": "Missing Localizations: 270", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "SU(unidades de estrés)", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "En el sentido de las agujas del reloj", "create.generic.counter_clockwise": "En sentido contrario a las agujas del reloj", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 3b8e2ca4c..25c4d1215 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: 1830", + "_": "Missing Localizations: 1844", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "us", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smS", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "dans le sens horaire", "create.generic.counter_clockwise": "dans le sens anti-horaire", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 ce8caf237..675d23051 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: 1519", + "_": "Missing Localizations: 1533", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$s mB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "Senso orario", "create.generic.counter_clockwise": "Senso anti-orario", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 34082b029..bc411c741 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: 258", + "_": "Missing Localizations: 272", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "su", "create.generic.unit.degrees": "度", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "時計回り", "create.generic.counter_clockwise": "反時計回り", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 f2c3c251a..9b15a6a56 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: 258", + "_": "Missing Localizations: 272", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "시계 방향", "create.generic.counter_clockwise": "시계 반대 방향", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 7915c39a3..21512a6ac 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: 2182", + "_": "Missing Localizations: 2196", "_": "->------------------------] Game Elements [------------------------<-", @@ -907,7 +907,8 @@ "create.generic.unit.rpm": "UNLOCALIZED: RPM", "create.generic.unit.stress": "UNLOCALIZED: su", "create.generic.unit.degrees": "UNLOCALIZED: °", - "create.generic.unit.millibuckets": "UNLOCALIZED: %1$smB", + "create.generic.unit.millibuckets": "UNLOCALIZED: mB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "UNLOCALIZED: Clockwise", "create.generic.counter_clockwise": "UNLOCALIZED: Counter-Clockwise", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} diff --git a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json index f975a3417..6cfe73b5c 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pl_pl.json +++ b/src/generated/resources/assets/create/lang/unfinished/pl_pl.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 631", + "_": "Missing Localizations: 645", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "JO", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smW", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "Zgodnie ze wskazówkami zegara", "create.generic.counter_clockwise": "Przeciwnie do wskazówek zegara", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 6c661d646..facad6414 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: 1126", + "_": "Missing Localizations: 1140", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "us", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "Sentido horário", "create.generic.counter_clockwise": "Sentido anti-horário", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} diff --git a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json index 53a537481..d79472e84 100644 --- a/src/generated/resources/assets/create/lang/unfinished/pt_pt.json +++ b/src/generated/resources/assets/create/lang/unfinished/pt_pt.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 1804", + "_": "Missing Localizations: 1818", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "us", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "Sentido horário", "create.generic.counter_clockwise": "Sentido anti-horário", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} diff --git a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json index 3063835ef..7d5d8a40e 100644 --- a/src/generated/resources/assets/create/lang/unfinished/ro_ro.json +++ b/src/generated/resources/assets/create/lang/unfinished/ro_ro.json @@ -1,5 +1,5 @@ { - "_": "Missing Localizations: 259", + "_": "Missing Localizations: 273", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "În sensul acelor de ceasornic", "create.generic.counter_clockwise": "În sensul invers acelor de ceasornic", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 b0d0f5292..433179537 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: 636", + "_": "Missing Localizations: 650", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "ен", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "По часовой стрелке", "create.generic.counter_clockwise": "Против часовой стрелки", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 03cd87b3c..ce1c6ecc3 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: 256", + "_": "Missing Localizations: 270", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "su", "create.generic.unit.degrees": "°", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "顺时针方向", "create.generic.counter_clockwise": "逆时针方向", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} 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 f96123fc9..d5d0d97f9 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: 650", + "_": "Missing Localizations: 664", "_": "->------------------------] Game Elements [------------------------<-", @@ -908,6 +908,7 @@ "create.generic.unit.stress": "su", "create.generic.unit.degrees": "度", "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.buckets": "UNLOCALIZED: B", "create.generic.clockwise": "順時鐘方向", "create.generic.counter_clockwise": "逆時鐘方向", "create.generic.in_quotes": "UNLOCALIZED: \"%1$s\"", @@ -1515,6 +1516,8 @@ "create.display_source.combine_item_names": "UNLOCALIZED: Combine Item Names", "create.display_source.count_items": "UNLOCALIZED: Amount of matching Items", "create.display_source.list_items": "UNLOCALIZED: List matching Items", + "create.display_source.fluid_amount": "UNLOCALIZED: Amount of matching Fluids", + "create.display_source.list_fluids": "UNLOCALIZED: List matching Fluids", "create.display_source.nixie_tube": "UNLOCALIZED: Copy Nixie Tubes", "create.display_source.fill_level": "UNLOCALIZED: Container Fill Level", "create.display_source.fill_level.display": "UNLOCALIZED: Display Format", @@ -1549,6 +1552,16 @@ "create.display_source.station_summary.minutes": "UNLOCALIZED: min", "create.display_source.station_summary.seconds": "UNLOCALIZED: %1$ss", "create.display_source.observed_train_name": "UNLOCALIZED: Detected Train Name", + "create.display_source.max_enchant_level": "UNLOCALIZED: Max Enchanting Cost", + "create.display_source.boiler_status": "UNLOCALIZED: Boiler Status", + "create.display_source.entity_name": "UNLOCALIZED: Entity Name", + "create.display_source.kinetic_speed": "UNLOCALIZED: Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "UNLOCALIZED: Ignore Direction", + "create.display_source.kinetic_speed.directional": "UNLOCALIZED: Include Direction", + "create.display_source.kinetic_stress.current": "UNLOCALIZED: Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "UNLOCALIZED: Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "UNLOCALIZED: Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "UNLOCALIZED: Stress Capacity (Remaining)", "create.display_target.line": "UNLOCALIZED: Line %1$s", "create.display_target.page": "UNLOCALIZED: Page %1$s", @@ -1558,8 +1571,9 @@ "create.flap_display.cycles.numeric": "UNLOCALIZED: ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": "UNLOCALIZED: ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": "UNLOCALIZED: ;K;M", + "create.flap_display.cycles.fluid_units": "UNLOCALIZED: mB;B ", "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", @@ -2700,4 +2714,4 @@ "_": "Thank you for translating Create!" -} \ No newline at end of file +} diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index e2503ba2c..27f739aa9 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -163,11 +163,17 @@ import com.simibubi.create.content.logistics.block.diodes.ToggleLatchGenerator; import com.simibubi.create.content.logistics.block.display.DisplayLinkBlock; import com.simibubi.create.content.logistics.block.display.DisplayLinkBlockItem; import com.simibubi.create.content.logistics.block.display.source.AccumulatedItemCountDisplaySource; +import com.simibubi.create.content.logistics.block.display.source.BoilerDisplaySource; +import com.simibubi.create.content.logistics.block.display.source.EntityNameDisplaySource; import com.simibubi.create.content.logistics.block.display.source.FillLevelDisplaySource; +import com.simibubi.create.content.logistics.block.display.source.FluidAmountDisplaySource; +import com.simibubi.create.content.logistics.block.display.source.FluidListDisplaySource; import com.simibubi.create.content.logistics.block.display.source.ItemCountDisplaySource; import com.simibubi.create.content.logistics.block.display.source.ItemListDisplaySource; import com.simibubi.create.content.logistics.block.display.source.ItemNameDisplaySource; import com.simibubi.create.content.logistics.block.display.source.ItemThoughputDisplaySource; +import com.simibubi.create.content.logistics.block.display.source.KineticSpeedDisplaySource; +import com.simibubi.create.content.logistics.block.display.source.KineticStressDisplaySource; import com.simibubi.create.content.logistics.block.display.source.ObservedTrainNameSource; import com.simibubi.create.content.logistics.block.display.source.StationSummaryDisplaySource; import com.simibubi.create.content.logistics.block.display.source.StopWatchDisplaySource; @@ -718,6 +724,7 @@ public class AllBlocks { .transform(axeOrPickaxe()) .transform(BlockStressDefaults.setNoImpact()) .blockstate(new GaugeGenerator()::generate) + .onRegister(assignDataBehaviour(new KineticSpeedDisplaySource(), "kinetic_speed")) .item() .transform(ModelGen.customItemModel("gauge", "_", "item")) .register(); @@ -728,6 +735,10 @@ public class AllBlocks { .transform(axeOrPickaxe()) .transform(BlockStressDefaults.setNoImpact()) .blockstate(new GaugeGenerator()::generate) + .onRegister(assignDataBehaviour(new KineticStressDisplaySource.Current(), "kinetic_stress_current")) + .onRegister(assignDataBehaviour(new KineticStressDisplaySource.Percent(), "kinetic_stress_percent")) + .onRegister(assignDataBehaviour(new KineticStressDisplaySource.Max(), "kinetic_stress_max")) + .onRegister(assignDataBehaviour(new KineticStressDisplaySource.Remaining(), "kinetic_stress_remaining")) .item() .transform(ModelGen.customItemModel("gauge", "_", "item")) .register(); @@ -897,6 +908,7 @@ public class AllBlocks { .transform(pickaxeOnly()) .blockstate(new FluidTankGenerator()::generate) .onRegister(CreateRegistrate.blockModel(() -> FluidTankModel::standard)) + .onRegister(assignDataBehaviour(new BoilerDisplaySource(), "boiler_status")) .addLayer(() -> RenderType::cutoutMipped) .item(FluidTankItem::new) .model(AssetLookup.customBlockItemModel("_", "block_single_window")) @@ -1297,6 +1309,7 @@ public class AllBlocks { .transform(axeOnly()) .onRegister(addMovementBehaviour(movementBehaviour)) .onRegister(addInteractionBehaviour(interactionBehaviour)) + .onRegister(assignDataBehaviour(new EntityNameDisplaySource(), "entity_name")) .blockstate((c, p) -> { p.simpleBlock(c.get(), p.models() .withExistingParent(colourName + "_seat", p.modLoc("block/seat")) @@ -1689,6 +1702,8 @@ public class AllBlocks { .blockstate((c, p) -> p.horizontalBlock(c.get(), AssetLookup.forPowered(c, p))) .onRegister(assignDataBehaviour(new ItemCountDisplaySource(), "count_items")) .onRegister(assignDataBehaviour(new ItemListDisplaySource(), "list_items")) + .onRegister(assignDataBehaviour(new FluidAmountDisplaySource(), "count_fluids")) + .onRegister(assignDataBehaviour(new FluidListDisplaySource(), "list_fluids")) .item() .transform(customItemModel("_", "block")) .register(); diff --git a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java index c853ffef8..6fed1b60f 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/CreateRecipeCategory.java @@ -168,7 +168,7 @@ public abstract class CreateRecipeCategory> implements IReci } int amount = amounts.get(index != -1 ? 0 : slotIndex); - Component text = (Lang.translate("generic.unit.millibuckets", amount)).withStyle(ChatFormatting.GOLD); + Component text = new TextComponent(String.valueOf(amount)).append(Lang.translate("generic.unit.millibuckets")).withStyle(ChatFormatting.GOLD); if (tooltip.isEmpty()) tooltip.add(0, text); else { diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/BoilerData.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/BoilerData.java index 6ac005ed3..f02507f2b 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/BoilerData.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/tank/BoilerData.java @@ -3,6 +3,8 @@ package com.simibubi.create.content.contraptions.fluids.tank; import java.util.Arrays; import java.util.List; +import org.jetbrains.annotations.NotNull; + import com.simibubi.create.AllBlocks; import com.simibubi.create.Create; import com.simibubi.create.content.contraptions.components.steam.SteamEngineBlock; @@ -51,6 +53,12 @@ public class BoilerData { public int attachedEngines; public int attachedWhistles; + // display + private int maxHeatForSize = 0; + private int maxHeatForWater = 0; + private int minValue = 0; + private int maxValue = 0; + public LerpedFloat gauge = LerpedFloat.linear(); public void tick(FluidTankTileEntity controller) { @@ -99,8 +107,13 @@ public class BoilerData { return (int) Math.min(18, Mth.ceil(waterSupply) / waterSupplyPerLevel); } + public boolean isPassive() { + return passiveHeat && maxHeatForSize > 0 && maxHeatForWater > 0; + } + public boolean isPassive(int boilerSize) { - return passiveHeat && getMaxHeatLevelForBoilerSize(boilerSize) > 0 && getMaxHeatLevelForWaterSupply() > 0; + calcMinMaxForSize(boilerSize); + return isPassive(); } public float getEngineEfficiency(int boilerSize) { @@ -119,77 +132,105 @@ public class BoilerData { return actualHeat; } - String spacing = " "; - Component componentSpacing = new TextComponent(spacing); - public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking, int boilerSize) { if (!isActive()) return false; - int forBoilerSize = getMaxHeatLevelForBoilerSize(boilerSize); - int forWaterSupply = getMaxHeatLevelForWaterSupply(); - int boilerLevel = Math.min(activeHeat, Math.min(forWaterSupply, forBoilerSize)); + Component indent = new TextComponent(IHaveGoggleInformation.spacing); + Component indent2 = new TextComponent(IHaveGoggleInformation.spacing + " "); - int minValue = Math.min(passiveHeat ? 1 : activeHeat, Math.min(forWaterSupply, forBoilerSize)); - int maxValue = Math.max(passiveHeat ? 1 : activeHeat, Math.max(forWaterSupply, forBoilerSize)); + calcMinMaxForSize(boilerSize); - TextComponent heatLevel = isPassive(boilerSize) ? new TextComponent("Passive") - : (boilerLevel == 0 ? new TextComponent("Idle") - : boilerLevel == 18 ? new TextComponent("Max") - : new TextComponent("Lvl " + IHaveGoggleInformation.format(boilerLevel))); - tooltip.add(componentSpacing.plainCopy() - .append(new TextComponent("Boiler Status: ").append(heatLevel.withStyle(ChatFormatting.GREEN)))); + tooltip.add(indent.plainCopy().append(new TextComponent("Boiler Status: ").append(getHeatLevelTextComponent().withStyle(ChatFormatting.GREEN)))); + tooltip.add(indent2.plainCopy().append(getSizeComponent(true, false))); + tooltip.add(indent2.plainCopy().append(getWaterComponent(true, false))); + tooltip.add(indent2.plainCopy().append(getHeatComponent(true, false))); - Component h = levelComponent("Heat ...... ", passiveHeat ? 1 : activeHeat, minValue, maxValue); - Component w = levelComponent("Water ... ", forWaterSupply, minValue, maxValue); - Component s = levelComponent("Size ....... ", forBoilerSize, minValue, maxValue); - - Component indent = new TextComponent(spacing); - Component indent2 = new TextComponent(spacing + " "); - - tooltip.add(indent2.plainCopy() - .append(s)); - tooltip.add(indent2.plainCopy() - .append(w)); - tooltip.add(indent2.plainCopy() - .append(h)); - if (attachedEngines == 0) return true; - + + int boilerLevel = Math.min(activeHeat, Math.min(maxHeatForWater, maxHeatForSize)); + double totalSU = getEngineEfficiency(boilerSize) * 16 * Math.max(boilerLevel, attachedEngines) - * BlockStressValues.getCapacity(AllBlocks.STEAM_ENGINE.get()); + * BlockStressValues.getCapacity(AllBlocks.STEAM_ENGINE.get()); Component capacity = - new TextComponent(IHaveGoggleInformation.format(totalSU)).append(Lang.translate("generic.unit.stress")) - .withStyle(ChatFormatting.AQUA); + new TextComponent(IHaveGoggleInformation.format(totalSU)).append(Lang.translate("generic.unit.stress")) + .withStyle(ChatFormatting.AQUA); Component engines = - new TextComponent(" via " + attachedEngines + " engine(s)").withStyle(ChatFormatting.DARK_GRAY); + new TextComponent(" via " + attachedEngines + " engine(s)").withStyle(ChatFormatting.DARK_GRAY); tooltip.add(indent); tooltip.add(indent.plainCopy() - .append(Lang.translate("tooltip.capacityProvided") - .withStyle(ChatFormatting.GRAY))); + .append(Lang.translate("tooltip.capacityProvided") + .withStyle(ChatFormatting.GRAY))); tooltip.add(indent2.plainCopy() - .append(capacity) - .append(engines)); + .append(capacity) + .append(engines)); return true; } - private MutableComponent levelComponent(String text, int level, int min, int max) { - int indexOf = text.indexOf("."); - String label = text.substring(0, indexOf); - String dots = text.substring(indexOf); - MutableComponent c = new TextComponent(label).withStyle(ChatFormatting.GRAY) - .append(new TextComponent(dots).withStyle(ChatFormatting.DARK_GRAY)); + public void calcMinMaxForSize(int boilerSize) { + maxHeatForSize = getMaxHeatLevelForBoilerSize(boilerSize); + maxHeatForWater = getMaxHeatLevelForWaterSupply(); - c.append(bars(Math.max(0, min - 1), ChatFormatting.DARK_GREEN)); - c.append(bars(min > 0 ? 1 : 0, ChatFormatting.GREEN)); - c.append(bars(Math.max(0, level - min), ChatFormatting.DARK_GREEN)); - c.append(bars(Math.max(0, max - level), ChatFormatting.DARK_RED)); - c.append(bars(Math.max(0, Math.min(18 - max, ((max / 5 + 1) * 5) - max)), ChatFormatting.DARK_GRAY)); + minValue = Math.min(passiveHeat ? 1 : activeHeat, Math.min(maxHeatForWater, maxHeatForSize)); + maxValue = Math.max(passiveHeat ? 1 : activeHeat, Math.max(maxHeatForWater, maxHeatForSize)); + } + + @NotNull + public TextComponent getHeatLevelTextComponent() { + int boilerLevel = Math.min(activeHeat, Math.min(maxHeatForWater, maxHeatForSize)); + + return isPassive() ? new TextComponent("Passive") + : (boilerLevel == 0 ? new TextComponent("Idle") + : boilerLevel == 18 ? new TextComponent("Max") + : new TextComponent("Lvl " + IHaveGoggleInformation.format(boilerLevel))); + } + + public MutableComponent getSizeComponent(boolean forGoggles, boolean useBlocksAsBars, ChatFormatting... styles) { + return componentHelper("Size ", "....... ", maxHeatForSize, forGoggles, useBlocksAsBars, styles); + } + + public MutableComponent getWaterComponent(boolean forGoggles, boolean useBlocksAsBars, ChatFormatting... styles) { + return componentHelper("Water ", "... ", maxHeatForWater, forGoggles, useBlocksAsBars, styles); + } + + public MutableComponent getHeatComponent(boolean forGoggles, boolean useBlocksAsBars, ChatFormatting... styles) { + return componentHelper("Heat ", "...... ", passiveHeat ? 1 : activeHeat, forGoggles, useBlocksAsBars, styles); + } + + private MutableComponent componentHelper(String label, String dots, int level, boolean forGoggles, boolean useBlocksAsBars, ChatFormatting... styles) { + MutableComponent base = useBlocksAsBars ? blockComponent(level) : barComponent(level); + + if (!forGoggles) + return base; + + ChatFormatting style1 = styles.length >= 1 ? styles[0] : ChatFormatting.GRAY; + ChatFormatting style2 = styles.length >= 2 ? styles[1] : ChatFormatting.DARK_GRAY; + + return new TextComponent(label).withStyle(style1) + .append(new TextComponent(dots).withStyle(style2)) + .append(base); + } + + + private MutableComponent blockComponent(int level) { + return new TextComponent("" + + "\u2588".repeat(minValue) + + "\u2592".repeat(level - minValue) + + "\u2591".repeat(maxValue - level) + ); + } + + private MutableComponent barComponent(int level) { + return TextComponent.EMPTY.copy() + .append(bars(Math.max(0, minValue - 1), ChatFormatting.DARK_GREEN)) + .append(bars(minValue > 0 ? 1 : 0, ChatFormatting.GREEN)) + .append(bars(Math.max(0, level - minValue), ChatFormatting.DARK_GREEN)) + .append(bars(Math.max(0, maxValue - level), ChatFormatting.DARK_RED)) + .append(bars(Math.max(0, Math.min(18 - maxValue, ((maxValue / 5 + 1) * 5) - maxValue)), ChatFormatting.DARK_GRAY)); - return c; } private MutableComponent bars(int level, ChatFormatting format) { @@ -218,7 +259,7 @@ public class BoilerData { if (AllBlocks.STEAM_ENGINE.has(attachedState) && SteamEngineBlock.getFacing(attachedState) == d) attachedEngines++; if (AllBlocks.STEAM_WHISTLE.has(attachedState) - && WhistleBlock.getAttachedDirection(attachedState) + && WhistleBlock.getAttachedDirection(attachedState) .getOpposite() == d) attachedWhistles++; } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/AllDisplayBehaviours.java b/src/main/java/com/simibubi/create/content/logistics/block/display/AllDisplayBehaviours.java index 1c90cd58f..837465852 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/AllDisplayBehaviours.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/AllDisplayBehaviours.java @@ -8,8 +8,9 @@ import java.util.List; import javax.annotation.Nullable; import com.simibubi.create.Create; -import com.simibubi.create.content.logistics.block.display.source.DeathCounterDataSource; +import com.simibubi.create.content.logistics.block.display.source.DeathCounterDisplaySource; import com.simibubi.create.content.logistics.block.display.source.DisplaySource; +import com.simibubi.create.content.logistics.block.display.source.EnchantPowerDisplaySource; import com.simibubi.create.content.logistics.block.display.source.ScoreboardDisplaySource; import com.simibubi.create.content.logistics.block.display.target.DisplayTarget; import com.simibubi.create.content.logistics.block.display.target.LecternDisplayTarget; @@ -177,9 +178,8 @@ public class AllDisplayBehaviours { public static void register() { assign(register(Create.asResource("sign_display_target"), new SignDisplayTarget()), BlockEntityType.SIGN); assign(register(Create.asResource("lectern_display_target"), new LecternDisplayTarget()), BlockEntityType.LECTERN); - assign(register(Create.asResource("death_count_display_source"), new DeathCounterDataSource()), - Blocks.RESPAWN_ANCHOR); - assign(register(Create.asResource("scoreboard_display_source"), new ScoreboardDisplaySource()), - BlockEntityType.COMMAND_BLOCK); + assign(register(Create.asResource("death_count_display_source"), new DeathCounterDisplaySource()), Blocks.RESPAWN_ANCHOR); + assign(register(Create.asResource("scoreboard_display_source"), new ScoreboardDisplaySource()), BlockEntityType.COMMAND_BLOCK); + assign(register(Create.asResource("enchant_power_display_source"), new EnchantPowerDisplaySource()), BlockEntityType.ENCHANTING_TABLE); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/DisplayLinkContext.java b/src/main/java/com/simibubi/create/content/logistics/block/display/DisplayLinkContext.java index 148206428..49477f76b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/DisplayLinkContext.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/DisplayLinkContext.java @@ -2,29 +2,29 @@ package com.simibubi.create.content.logistics.block.display; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; public class DisplayLinkContext { - private LevelAccessor level; + private Level level; private DisplayLinkTileEntity te; - + public Object flapDisplayContext; - public DisplayLinkContext(LevelAccessor level, DisplayLinkTileEntity te) { + public DisplayLinkContext(Level level, DisplayLinkTileEntity te) { this.level = level; this.te = te; } - public LevelAccessor level() { + public Level level() { return level; } - + public DisplayLinkTileEntity te() { return te; } - + public BlockEntity getSourceTE() { return level.getBlockEntity(getSourcePos()); } diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/BoilerDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/BoilerDisplaySource.java new file mode 100644 index 000000000..7e37d23a5 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/BoilerDisplaySource.java @@ -0,0 +1,129 @@ +package com.simibubi.create.content.logistics.block.display.source; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; + +import com.simibubi.create.content.contraptions.fluids.tank.BoilerData; +import com.simibubi.create.content.contraptions.fluids.tank.FluidTankTileEntity; +import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; +import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; +import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayLayout; +import com.simibubi.create.content.logistics.trains.management.display.FlapDisplaySection; +import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayTileEntity; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.LecternBlockEntity; + +public class BoilerDisplaySource extends DisplaySource { + + public static final List notEnoughSpaceSingle = List.of(new TextComponent("Not enough space for Boiler Status!")); + public static final List notEnoughSpaceDouble = List.of(new TextComponent("Not enough space"), new TextComponent("for Boiler Status!")); + public static final List> notEnoughSpaceFlap = List.of(List.of(new TextComponent("Not enough space")), List.of(new TextComponent("for Boiler Status!"))); + + @Override + public List provideText(DisplayLinkContext context, DisplayTargetStats stats) { + if (stats.maxRows() < 2) { + return notEnoughSpaceSingle; + } else if (stats.maxRows() < 4) { + return notEnoughSpaceDouble; + } + + boolean isBook = context.getTargetTE() instanceof LecternBlockEntity; + + if (isBook) { + Stream componentList = getComponents(context, false) + .map(components -> { + Optional reduce = components.stream().reduce(MutableComponent::append); + return reduce.orElse(EMPTY_LINE); + }); + + return List.of(componentList.reduce((comp1, comp2) -> comp1.append(new TextComponent("\n")).append(comp2)).orElse(EMPTY_LINE)); + } + + return getComponents(context, false) + .map(components -> { + Optional reduce = components.stream().reduce(MutableComponent::append); + return reduce.orElse(EMPTY_LINE); + }).toList(); + } + + @Override + public List> provideFlapDisplayText(DisplayLinkContext context, DisplayTargetStats stats) { + if (stats.maxRows() < 4) { + context.flapDisplayContext = Boolean.FALSE; + return notEnoughSpaceFlap; + } + + List> components = getComponents(context, true).toList(); + + if (stats.maxColumns() * FlapDisplaySection.MONOSPACE < 6 * FlapDisplaySection.MONOSPACE + components.get(1).get(1).getString().length() * FlapDisplaySection.WIDE_MONOSPACE) { + context.flapDisplayContext = Boolean.FALSE; + return notEnoughSpaceFlap; + } + + return components; + } + + @Override + public void loadFlapDisplayLayout(DisplayLinkContext context, FlapDisplayTileEntity flapDisplay, FlapDisplayLayout layout, int lineIndex) { + if (lineIndex == 0 || context.flapDisplayContext instanceof Boolean b && !b) { + if (layout.isLayout("Default")) + return; + + layout.loadDefault(flapDisplay.getMaxCharCount()); + return; + } + + String layoutKey = "Boiler"; + if (layout.isLayout(layoutKey)) + return; + + int labelLength = (int) (5 * FlapDisplaySection.MONOSPACE); + float maxSpace = flapDisplay.getMaxCharCount(1) * FlapDisplaySection.MONOSPACE; + FlapDisplaySection label = new FlapDisplaySection(labelLength, "alphabet", false, true); + FlapDisplaySection symbols = new FlapDisplaySection(maxSpace - labelLength, "pixel", false, false).wideFlaps(); + + layout.configure(layoutKey, List.of(label, symbols)); + } + + private Stream> getComponents(DisplayLinkContext context, boolean forFlapDisplay) { + BlockEntity sourceTE = context.getSourceTE(); + if (!(sourceTE instanceof FluidTankTileEntity tankTile)) + return Stream.of(EMPTY); + + tankTile = tankTile.getControllerTE(); + if (tankTile == null) + return Stream.of(EMPTY); + + BoilerData boiler = tankTile.boiler; + + int totalTankSize = tankTile.getTotalTankSize(); + + boiler.calcMinMaxForSize(totalTankSize); + + String label = forFlapDisplay ? "Boiler Status: " : "Boiler:"; + String size = forFlapDisplay ? " Size" : ""; + String water = forFlapDisplay ? "Water" : ""; + String heat = forFlapDisplay ? " Heat" : ""; + + //String size = forFlapDisplay ? " Size" : "\u21d5"; + //String water = forFlapDisplay ? "Water" : "\ud83c\udf0a"; + //String heat = forFlapDisplay ? " Heat" : "\ud83d\udd25"; + + return Stream.of( + List.of(new TextComponent(label).append(boiler.getHeatLevelTextComponent())), + List.of(new TextComponent(size), boiler.getSizeComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.BLACK)), + List.of(new TextComponent(water), boiler.getWaterComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.BLACK)), + List.of(new TextComponent(heat), boiler.getHeatComponent(!forFlapDisplay, forFlapDisplay, ChatFormatting.BLACK)) + ); + } + + @Override + protected String getTranslationKey() { + return "boiler_status"; + } +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/DeathCounterDataSource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/DeathCounterDisplaySource.java similarity index 89% rename from src/main/java/com/simibubi/create/content/logistics/block/display/source/DeathCounterDataSource.java rename to src/main/java/com/simibubi/create/content/logistics/block/display/source/DeathCounterDisplaySource.java index c98772a27..371b7e796 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/source/DeathCounterDataSource.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/DeathCounterDisplaySource.java @@ -6,14 +6,14 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.stats.Stats; -public class DeathCounterDataSource extends StatTrackingDisplaySource { +public class DeathCounterDisplaySource extends StatTrackingDisplaySource { @Override protected int updatedScoreOf(ServerPlayer player) { return player.getStats() .getValue(Stats.CUSTOM.get(Stats.DEATHS)); } - + @Override protected String getTranslationKey() { return "player_deaths"; diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/DisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/DisplaySource.java index 0e3fb583d..54338548b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/source/DisplaySource.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/DisplaySource.java @@ -42,9 +42,9 @@ public abstract class DisplaySource extends DisplayBehaviour { } public void onSignalReset(DisplayLinkContext context) {}; - + public void populateData(DisplayLinkContext context) {}; - + public int getPassiveRefreshTicks() { return 100; }; @@ -57,6 +57,10 @@ public abstract class DisplaySource extends DisplayBehaviour { return new TranslatableComponent(id.getNamespace() + ".display_source." + getTranslationKey()); } + public void loadFlapDisplayLayout(DisplayLinkContext context, FlapDisplayTileEntity flapDisplay, FlapDisplayLayout layout, int lineIndex) { + loadFlapDisplayLayout(context, flapDisplay, layout); + } + public void loadFlapDisplayLayout(DisplayLinkContext context, FlapDisplayTileEntity flapDisplay, FlapDisplayLayout layout) { if (!layout.isLayout("Default")) diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/EnchantPowerDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/EnchantPowerDisplaySource.java new file mode 100644 index 000000000..4ce1e54b1 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/EnchantPowerDisplaySource.java @@ -0,0 +1,54 @@ +package com.simibubi.create.content.logistics.block.display.source; + +import java.util.Random; + +import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; +import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; + +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.EnchantmentTableBlock; +import net.minecraft.world.level.block.entity.EnchantmentTableBlockEntity; + +public class EnchantPowerDisplaySource extends NumericSingleLineDisplaySource { + + protected static final Random random = new Random(); + protected static final ItemStack stack = new ItemStack(Items.DIAMOND_PICKAXE); + + @Override + protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) { + if (!(context.getSourceTE() instanceof EnchantmentTableBlockEntity enchantmentTile)) + return ZERO; + + BlockPos pos = context.getSourcePos(); + Level level = context.level(); + float enchantPower = 0; + + for(BlockPos offset : EnchantmentTableBlock.BOOKSHELF_OFFSETS) { + if (!EnchantmentTableBlock.isValidBookShelf(level, pos, offset)) + continue; + + enchantPower += level.getBlockState(pos.offset(offset)).getEnchantPowerBonus(level, pos.offset(offset)); + } + + + int cost = EnchantmentHelper.getEnchantmentCost(random, 2, (int) enchantPower, stack); + + return new TextComponent(String.valueOf(cost)); + } + + @Override + protected String getTranslationKey() { + return "max_enchant_level"; + } + + @Override + protected boolean allowsLabeling(DisplayLinkContext context) { + return true; + } +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/EntityNameDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/EntityNameDisplaySource.java new file mode 100644 index 000000000..0f6375a73 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/EntityNameDisplaySource.java @@ -0,0 +1,39 @@ +package com.simibubi.create.content.logistics.block.display.source; + +import java.util.List; + +import com.simibubi.create.content.contraptions.components.actors.SeatEntity; +import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; +import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.AABB; + +public class EntityNameDisplaySource extends SingleLineDisplaySource { + @Override + protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) { + List seats = context.level().getEntitiesOfClass(SeatEntity.class, new AABB(context.getSourcePos())); + + if (seats.isEmpty()) + return EMPTY_LINE; + + SeatEntity seatEntity = seats.get(0); + List passengers = seatEntity.getPassengers(); + + if (passengers.isEmpty()) + return EMPTY_LINE; + + return passengers.get(0).getDisplayName().copy(); + } + + @Override + protected String getTranslationKey() { + return "entity_name"; + } + + @Override + protected boolean allowsLabeling(DisplayLinkContext context) { + return true; + } +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidAmountDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidAmountDisplaySource.java new file mode 100644 index 000000000..55b96be2a --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidAmountDisplaySource.java @@ -0,0 +1,53 @@ +package com.simibubi.create.content.logistics.block.display.source; + +import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; +import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; +import com.simibubi.create.content.logistics.block.redstone.ContentObserverTileEntity; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.TankManipulationBehaviour; +import com.simibubi.create.foundation.utility.FluidFormatter; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class FluidAmountDisplaySource extends SingleLineDisplaySource { + + @Override + protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) { + BlockEntity sourceTE = context.getSourceTE(); + if (!(sourceTE instanceof ContentObserverTileEntity cote)) + return EMPTY_LINE; + + TankManipulationBehaviour tankManipulationBehaviour = cote.getBehaviour(TankManipulationBehaviour.OBSERVE); + FilteringBehaviour filteringBehaviour = cote.getBehaviour(FilteringBehaviour.TYPE); + IFluidHandler handler = tankManipulationBehaviour.getInventory(); + + if (handler == null) + return EMPTY_LINE; + + long collected = 0; + for (int i = 0; i < handler.getTanks(); i++) { + FluidStack stack = handler.getFluidInTank(i); + if (stack.isEmpty()) + continue; + if (!filteringBehaviour.test(stack)) + continue; + collected += stack.getAmount(); + } + + return new TextComponent(FluidFormatter.asString(collected, false)); + } + + @Override + protected String getTranslationKey() { + return "fluid_amount"; + } + + @Override + protected boolean allowsLabeling(DisplayLinkContext context) { + return true; + } +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidListDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidListDisplaySource.java new file mode 100644 index 000000000..19c16a5d1 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/FluidListDisplaySource.java @@ -0,0 +1,110 @@ +package com.simibubi.create.content.logistics.block.display.source; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +import org.apache.commons.lang3.mutable.MutableInt; + +import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; +import com.simibubi.create.content.logistics.block.redstone.ContentObserverTileEntity; +import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayLayout; +import com.simibubi.create.content.logistics.trains.management.display.FlapDisplaySection; +import com.simibubi.create.content.logistics.trains.management.display.FlapDisplayTileEntity; +import com.simibubi.create.foundation.tileEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.tileEntity.behaviour.inventory.TankManipulationBehaviour; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.FluidFormatter; +import com.simibubi.create.foundation.utility.IntAttached; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; + +public class FluidListDisplaySource extends ValueListDisplaySource { + + + @Override + protected Stream> provideEntries(DisplayLinkContext context, int maxRows) { + BlockEntity sourceTE = context.getSourceTE(); + if (!(sourceTE instanceof ContentObserverTileEntity cote)) + return Stream.empty(); + + TankManipulationBehaviour tankManipulationBehaviour = cote.getBehaviour(TankManipulationBehaviour.OBSERVE); + FilteringBehaviour filteringBehaviour = cote.getBehaviour(FilteringBehaviour.TYPE); + IFluidHandler handler = tankManipulationBehaviour.getInventory(); + + if (handler == null) + return Stream.empty(); + + + Map fluids = new HashMap<>(); + Map fluidNames = new HashMap<>(); + + for (int i = 0; i < handler.getTanks(); i++) { + FluidStack stack = handler.getFluidInTank(i); + if (stack.isEmpty()) + continue; + if (!filteringBehaviour.test(stack)) + continue; + + fluids.merge(stack.getFluid(), stack.getAmount(), Integer::sum); + fluidNames.putIfAbsent(stack.getFluid(), stack); + } + + return fluids.entrySet() + .stream() + .sorted((Comparator.comparingInt(value -> ((Map.Entry) value).getValue()).reversed())) + .limit(maxRows) + .map(entry -> IntAttached.with( + entry.getValue(), + new TranslatableComponent(fluidNames.get(entry.getKey()).getTranslationKey())) + ); + } + + @Override + protected List createComponentsFromEntry(DisplayLinkContext context, IntAttached entry) { + int amount = entry.getFirst(); + MutableComponent name = entry.getSecond().append(WHITESPACE); + + Couple formatted = FluidFormatter.asComponents(amount, shortenNumbers(context)); + + return List.of(formatted.getFirst(), formatted.getSecond(), name); + } + + @Override + public void loadFlapDisplayLayout(DisplayLinkContext context, FlapDisplayTileEntity flapDisplay, FlapDisplayLayout layout) { + Integer max = ((MutableInt) context.flapDisplayContext).getValue(); + boolean shorten = shortenNumbers(context); + int length = FluidFormatter.asString(max, shorten).length(); + String layoutKey = "FluidList_" + length; + + if (layout.isLayout(layoutKey)) + return; + + int maxCharCount = flapDisplay.getMaxCharCount(1); + int numberLength = Math.min(maxCharCount, Math.max(3, length - 2)); + int nameLength = Math.max(maxCharCount - numberLength - 2, 0); + + FlapDisplaySection value = new FlapDisplaySection(FlapDisplaySection.MONOSPACE * numberLength, "number", false, false).rightAligned(); + FlapDisplaySection unit = new FlapDisplaySection(FlapDisplaySection.MONOSPACE * 2, "fluid_units", true, true); + FlapDisplaySection name = new FlapDisplaySection(FlapDisplaySection.MONOSPACE * nameLength, "alphabet", false, false); + + layout.configure(layoutKey, List.of(value, unit, name)); + } + + @Override + protected String getTranslationKey() { + return "list_fluids"; + } + + @Override + protected boolean valueFirst() { + return false; + } +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/KineticSpeedDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/KineticSpeedDisplaySource.java new file mode 100644 index 000000000..85e0b27cb --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/KineticSpeedDisplaySource.java @@ -0,0 +1,49 @@ +package com.simibubi.create.content.logistics.block.display.source; + +import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; +import com.simibubi.create.content.contraptions.relays.gauge.SpeedGaugeTileEntity; +import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; +import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; +import com.simibubi.create.foundation.gui.ModularGuiLineBuilder; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +public class KineticSpeedDisplaySource extends NumericSingleLineDisplaySource { + + @Override + protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) { + if (!(context.getSourceTE() instanceof SpeedGaugeTileEntity gaugeTile)) + return ZERO; + + boolean absoluteValue = context.sourceConfig().getInt("Directional") == 0; + float speed = absoluteValue ? Math.abs(gaugeTile.getSpeed()) : gaugeTile.getSpeed(); + + return new TextComponent(IHaveGoggleInformation.format(speed)); + } + + @Override + protected String getTranslationKey() { + return "kinetic_speed"; + } + + @Override + @OnlyIn(Dist.CLIENT) + public void initConfigurationWidgets(DisplayLinkContext context, ModularGuiLineBuilder builder, boolean isFirstLine) { + super.initConfigurationWidgets(context, builder, isFirstLine); + if (isFirstLine) + return; + + builder.addSelectionScrollInput(0, 95, (selectionScrollInput, label) -> { + selectionScrollInput.forOptions(Lang.translatedOptions("display_source.kinetic_speed", "absolute", "directional")); + }, "Directional"); + } + + @Override + protected boolean allowsLabeling(DisplayLinkContext context) { + return true; + } +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/source/KineticStressDisplaySource.java b/src/main/java/com/simibubi/create/content/logistics/block/display/source/KineticStressDisplaySource.java new file mode 100644 index 000000000..98d64e486 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/source/KineticStressDisplaySource.java @@ -0,0 +1,80 @@ +package com.simibubi.create.content.logistics.block.display.source; + +import com.simibubi.create.content.contraptions.goggles.IHaveGoggleInformation; +import com.simibubi.create.content.contraptions.relays.gauge.StressGaugeTileEntity; +import com.simibubi.create.content.logistics.block.display.DisplayLinkContext; +import com.simibubi.create.content.logistics.block.display.target.DisplayTargetStats; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; + +public abstract class KineticStressDisplaySource extends NumericSingleLineDisplaySource { + + protected abstract double getValue(StressGaugeTileEntity gaugeTile); + + @Override + protected MutableComponent provideLine(DisplayLinkContext context, DisplayTargetStats stats) { + if (!(context.getSourceTE() instanceof StressGaugeTileEntity gaugeTile)) + return ZERO; + + return new TextComponent(IHaveGoggleInformation.format(getValue(gaugeTile))); + } + + @Override + protected boolean allowsLabeling(DisplayLinkContext context) { + return true; + } + + public static class Current extends KineticStressDisplaySource { + + @Override + protected double getValue(StressGaugeTileEntity gaugeTile) { + return gaugeTile.getNetworkStress(); + } + + @Override + protected String getTranslationKey() { + return "kinetic_stress.current"; + } + } + + public static class Max extends KineticStressDisplaySource { + + @Override + protected double getValue(StressGaugeTileEntity gaugeTile) { + return gaugeTile.getNetworkCapacity(); + } + + @Override + protected String getTranslationKey() { + return "kinetic_stress.max"; + } + } + + public static class Percent extends KineticStressDisplaySource { + + @Override + protected double getValue(StressGaugeTileEntity gaugeTile) { + return gaugeTile.getNetworkStress() / gaugeTile.getNetworkCapacity() * 100; + } + + @Override + protected String getTranslationKey() { + return "kinetic_stress.percent"; + } + } + + public static class Remaining extends KineticStressDisplaySource { + + @Override + protected double getValue(StressGaugeTileEntity gaugeTile) { + return gaugeTile.getNetworkCapacity() - gaugeTile.getNetworkStress(); + } + + @Override + protected String getTranslationKey() { + return "kinetic_stress.remaining"; + } + } + +} diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/target/DisplayBoardTarget.java b/src/main/java/com/simibubi/create/content/logistics/block/display/target/DisplayBoardTarget.java index 8bb5bdf2f..b12501abe 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/target/DisplayBoardTarget.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/target/DisplayBoardTarget.java @@ -37,9 +37,9 @@ public class DisplayBoardTarget extends DisplayTarget { reserve(i + line, controller, context); if (i > 0 && isReserved(i + line, controller, context)) break; - + FlapDisplayLayout layout = lines.get(i + line); - + if (i >= text.size()) { if (source instanceof SingleLineDisplaySource) break; @@ -47,7 +47,7 @@ public class DisplayBoardTarget extends DisplayTarget { continue; } - source.loadFlapDisplayLayout(context, controller, layout); + source.loadFlapDisplayLayout(context, controller, layout, i); for (int sectionIndex = 0; sectionIndex < layout.getSections() .size(); sectionIndex++) { @@ -96,7 +96,7 @@ public class DisplayBoardTarget extends DisplayTarget { FlapDisplayTileEntity controller = fdte.getController(); if (controller == null) return baseShape; - + Vec3i normal = controller.getDirection() .getClockWise() .getNormal(); diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/target/LecternDisplayTarget.java b/src/main/java/com/simibubi/create/content/logistics/block/display/target/LecternDisplayTarget.java index 13962758c..f5e4324c6 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/target/LecternDisplayTarget.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/target/LecternDisplayTarget.java @@ -40,13 +40,13 @@ public class LecternDisplayTarget extends DisplayTarget { for (int i = 0; i - line < text.size() && i < 50; i++) { if (tag.size() <= i) tag.add(StringTag.valueOf(i < line ? "" : Component.Serializer.toJson(text.get(i - line)))); - + else if (i >= line) { if (i - line == 0) reserve(i, lectern, context); if (i - line > 0 && isReserved(i - line, lectern, context)) break; - + tag.set(i, StringTag.valueOf(Component.Serializer.toJson(text.get(i - line)))); } changed = true; @@ -56,8 +56,8 @@ public class LecternDisplayTarget extends DisplayTarget { .put("pages", tag); lectern.setBook(book); - if (changed && context.level()instanceof Level level) - level.sendBlockUpdated(context.getTargetPos(), lectern.getBlockState(), lectern.getBlockState(), 2); + if (changed) + context.level().sendBlockUpdated(context.getTargetPos(), lectern.getBlockState(), lectern.getBlockState(), 2); } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/block/display/target/SignDisplayTarget.java b/src/main/java/com/simibubi/create/content/logistics/block/display/target/SignDisplayTarget.java index f157410a0..9e068f1e4 100644 --- a/src/main/java/com/simibubi/create/content/logistics/block/display/target/SignDisplayTarget.java +++ b/src/main/java/com/simibubi/create/content/logistics/block/display/target/SignDisplayTarget.java @@ -23,13 +23,13 @@ public class SignDisplayTarget extends DisplayTarget { reserve(i + line, sign, context); if (i > 0 && isReserved(i + line, sign, context)) break; - + sign.setMessage(i + line, text.get(i)); changed = true; } - if (changed && context.level()instanceof Level level) - level.sendBlockUpdated(context.getTargetPos(), sign.getBlockState(), sign.getBlockState(), 2); + if (changed) + context.level().sendBlockUpdated(context.getTargetPos(), sign.getBlockState(), sign.getBlockState(), 2); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/utility/FluidFormatter.java b/src/main/java/com/simibubi/create/foundation/utility/FluidFormatter.java new file mode 100644 index 000000000..a97ac43b5 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/FluidFormatter.java @@ -0,0 +1,27 @@ +package com.simibubi.create.foundation.utility; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; + +public class FluidFormatter { + + public static String asString(long amount, boolean shorten) { + Couple couple = asComponents(amount, shorten); + return couple.getFirst().getString() + " " + couple.getSecond().getString(); + } + + public static Couple asComponents(long amount, boolean shorten) { + if (shorten && amount >= 1000) { + return Couple.create( + new TextComponent(String.format("%.1f" , amount / 1000d)), + Lang.translate("generic.unit.buckets") + ); + } + + return Couple.create( + new TextComponent(String.valueOf(amount)), + Lang.translate("generic.unit.millibuckets") + ); + } + +} diff --git a/src/main/resources/assets/create/lang/default/interface.json b/src/main/resources/assets/create/lang/default/interface.json index d1012ae6c..7c96b0b61 100644 --- a/src/main/resources/assets/create/lang/default/interface.json +++ b/src/main/resources/assets/create/lang/default/interface.json @@ -19,7 +19,7 @@ "death.attack.create.cuckoo_clock_explosion.player": "%1$s was blown up by tampered cuckoo clock", "death.attack.create.run_over": "%1$s was run over by %2$s", "create.block.deployer.damage_source_name": "a rogue Deployer", - + "create.block.cart_assembler.invalid": "Place your Cart Assembler on a rail block", "create.menu.return": "Return to Menu", @@ -95,7 +95,8 @@ "create.generic.unit.rpm": "RPM", "create.generic.unit.stress": "su", "create.generic.unit.degrees": "\u00B0", - "create.generic.unit.millibuckets": "%1$smB", + "create.generic.unit.millibuckets": "mB", + "create.generic.unit.buckets": "B", "create.generic.clockwise": "Clockwise", "create.generic.counter_clockwise": "Counter-Clockwise", "create.generic.in_quotes": "\"%1$s\"", @@ -721,11 +722,13 @@ "create.display_link.information_type": "Type of Information", "create.display_link.display_on": "Write data to:", "create.display_link.display_on_multiline": "Start writing at:", - + "create.display_source.label": "Attached Label", "create.display_source.combine_item_names": "Combine Item Names", "create.display_source.count_items": "Amount of matching Items", "create.display_source.list_items": "List matching Items", + "create.display_source.fluid_amount": "Amount of matching Fluids", + "create.display_source.list_fluids": "List matching Fluids", "create.display_source.nixie_tube": "Copy Nixie Tubes", "create.display_source.fill_level": "Container Fill Level", "create.display_source.fill_level.display": "Display Format", @@ -760,7 +763,17 @@ "create.display_source.station_summary.minutes": " min", "create.display_source.station_summary.seconds": "%1$ss", "create.display_source.observed_train_name": "Detected Train Name", - + "create.display_source.max_enchant_level": "Max Enchanting Cost", + "create.display_source.boiler_status": "Boiler Status", + "create.display_source.entity_name": "Entity Name", + "create.display_source.kinetic_speed": "Rotation Speed (RPM)", + "create.display_source.kinetic_speed.absolute": "Ignore Direction", + "create.display_source.kinetic_speed.directional": "Include Direction", + "create.display_source.kinetic_stress.current": "Stress Impact (Amount)", + "create.display_source.kinetic_stress.max": "Stress Capacity (Max)", + "create.display_source.kinetic_stress.percent": "Stress Impact (Percent)", + "create.display_source.kinetic_stress.remaining": "Stress Capacity (Remaining)", + "create.display_target.line": "Line %1$s", "create.display_target.page": "Page %1$s", "create.display_target.single_line": "Single Line", @@ -769,8 +782,9 @@ "create.flap_display.cycles.numeric": " ;0;1;2;3;4;5;6;7;8;9", "create.flap_display.cycles.arrival_time": " ; min;now;15s;30s;45s", "create.flap_display.cycles.shortened_numbers": " ;K;M", + "create.flap_display.cycles.fluid_units": "mB;B ", "create.flap_display.cycles.instant": " ; ", - "create.flap_display.cycles.pixel": "\u2588;\u2592", + "create.flap_display.cycles.pixel": "\u2588;\u2593;\u2592", "create.super_glue.too_far": "Selected area is too big", "create.super_glue.cannot_reach": "Selected blocks must be connected",