erion 2023-04-16 15:02:57 +02:00
commit e50f0fa976
22 changed files with 383 additions and 263 deletions

View File

@ -356,7 +356,7 @@ namespace stardew_access
helper.ConsoleCommands.Add("buildsel", "Select the building index which you want to upgrade/demolish/paint", (string command, string[] args) => helper.ConsoleCommands.Add("buildsel", "Select the building index which you want to upgrade/demolish/paint", (string command, string[] args) =>
{ {
if ((Game1.activeClickableMenu is not CarpenterMenu && Game1.activeClickableMenu is not PurchaseAnimalsMenu && Game1.activeClickableMenu is not AnimalQueryMenu) || !CarpenterMenuPatch.isOnFarm) if ((Game1.activeClickableMenu is not CarpenterMenu && Game1.activeClickableMenu is not PurchaseAnimalsMenu && Game1.activeClickableMenu is not AnimalQueryMenu) || (!CarpenterMenuPatch.isOnFarm && !PurchaseAnimalsMenuPatch.isOnFarm && !AnimalQueryMenuPatch.isOnFarm))
{ {
MainClass.InfoLog($"Cannot select building."); MainClass.InfoLog($"Cannot select building.");
return; return;

View File

@ -4,6 +4,7 @@ using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input;
using stardew_access.Patches; using stardew_access.Patches;
using StardewValley; using StardewValley;
using StardewValley.Characters;
using StardewValley.Menus; using StardewValley.Menus;
using StardewValley.Minigames; using StardewValley.Minigames;
@ -291,6 +292,26 @@ namespace stardew_access
original: AccessTools.Method(typeof(TextBox), nameof(TextBox.Draw)), original: AccessTools.Method(typeof(TextBox), nameof(TextBox.Draw)),
prefix: new HarmonyMethod(typeof(TextBoxPatch), nameof(TextBoxPatch.DrawPatch)) prefix: new HarmonyMethod(typeof(TextBoxPatch), nameof(TextBoxPatch.DrawPatch))
); );
harmony.Patch(
original: AccessTools.Method(typeof(TextEntryMenu), nameof(TextEntryMenu.draw), new Type[] { typeof(SpriteBatch) }),
prefix: new HarmonyMethod(typeof(TextEntryMenuPatch), nameof(TextEntryMenuPatch.DrawPatch))
);
harmony.Patch(
original: AccessTools.Method(typeof(TextEntryMenu), nameof(TextEntryMenu.Close)),
prefix: new HarmonyMethod(typeof(TextEntryMenuPatch), nameof(TextEntryMenuPatch.ClosePatch))
);
harmony.Patch(
original: AccessTools.Method(typeof(Game1), nameof(Game1.closeTextEntry)),
prefix: new HarmonyMethod(typeof(Game1Patch), nameof(Game1Patch.CloseTextEntryPatch))
);
harmony.Patch(
original: AccessTools.Method(typeof(TrashBear), nameof(TrashBear.checkAction)),
postfix: new HarmonyMethod(typeof(TrashBearPatch), nameof(TrashBearPatch.CheckActionPatch))
);
} }
} }
} }

View File

@ -13,7 +13,7 @@ namespace stardew_access
{ {
#region Global Vars & Properties #region Global Vars & Properties
#pragma warning disable CS8603 #pragma warning disable CS8603
private static int prevDate = -99; private static int prevDate = -99;
private static ModConfig? config; private static ModConfig? config;
private Harmony? harmony; private Harmony? harmony;
@ -129,10 +129,21 @@ namespace stardew_access
helper.Events.Input.ButtonPressed += this.OnButtonPressed; helper.Events.Input.ButtonPressed += this.OnButtonPressed;
helper.Events.GameLoop.UpdateTicked += this.onUpdateTicked; helper.Events.GameLoop.UpdateTicked += this.onUpdateTicked;
helper.Events.GameLoop.DayStarted += this.onDayStarted; helper.Events.GameLoop.DayStarted += this.onDayStarted;
helper.Events.Display.MenuChanged += this.onMenuChanged;
AppDomain.CurrentDomain.DomainUnload += OnExit; AppDomain.CurrentDomain.DomainUnload += OnExit;
AppDomain.CurrentDomain.ProcessExit += OnExit; AppDomain.CurrentDomain.ProcessExit += OnExit;
} }
private void onMenuChanged(object? sender, MenuChangedEventArgs e)
{
TextBoxPatch.activeTextBoxes = "";
if (e.OldMenu != null)
{
MainClass.DebugLog($"Switched from {e.OldMenu.GetType().ToString()} menu, performing cleanup...");
IClickableMenuPatch.Cleanup(e.OldMenu);
}
}
/// <summary>Returns the Screen Reader class for other mods to use.</summary> /// <summary>Returns the Screen Reader class for other mods to use.</summary>
public override object GetApi() public override object GetApi()
{ {
@ -335,6 +346,20 @@ namespace stardew_access
TileViewerFeature.HandleInput(); TileViewerFeature.HandleInput();
} }
public static string Translate(string translationKey)
{
if (ModHelper == null) return "null";
return ModHelper.Translation.Get(translationKey);
}
public static string Translate(string translationKey, object? tokens)
{
if (ModHelper == null) return "null";
return ModHelper.Translation.Get(translationKey, tokens);
}
private static void LogMessage(string message, LogLevel logLevel) private static void LogMessage(string message, LogLevel logLevel)
{ {
if (monitor == null) if (monitor == null)

View File

@ -13,6 +13,7 @@ namespace stardew_access.Patches
{ {
try try
{ {
MainClass.DebugLog($"Closing {Game1.activeClickableMenu.GetType().ToString()} menu, performing cleanup...");
IClickableMenuPatch.Cleanup(Game1.activeClickableMenu); IClickableMenuPatch.Cleanup(Game1.activeClickableMenu);
} }
catch (Exception e) catch (Exception e)
@ -21,6 +22,11 @@ namespace stardew_access.Patches
} }
} }
internal static void CloseTextEntryPatch()
{
TextBoxPatch.activeTextBoxes = "";
}
internal static bool PlaySoundPatch(string cueName) internal static bool PlaySoundPatch(string cueName)
{ {
try try

View File

@ -199,6 +199,7 @@ namespace stardew_access.Patches
{ {
try try
{ {
MainClass.DebugLog($"Closed {__instance.GetType().ToString()} menu, performing cleanup...");
Cleanup(__instance); Cleanup(__instance);
} }
catch (Exception e) catch (Exception e)
@ -209,114 +210,88 @@ namespace stardew_access.Patches
internal static void Cleanup(IClickableMenu menu) internal static void Cleanup(IClickableMenu menu)
{ {
if (menu is TitleMenu) switch (menu)
{ {
case TitleMenu:
TitleMenuPatch.Cleanup(); TitleMenuPatch.Cleanup();
} break;
else if (menu is CoopMenu) case CoopMenu:
{
CoopMenuPatch.Cleanup(); CoopMenuPatch.Cleanup();
} break;
else if (menu is LoadGameMenu) case LoadGameMenu:
{
LoadGameMenuPatch.Cleanup(); LoadGameMenuPatch.Cleanup();
} break;
else if (menu is AdvancedGameOptions) case AdvancedGameOptions:
{
AdvancedGameOptionsPatch.Cleanup(); AdvancedGameOptionsPatch.Cleanup();
} break;
else if (menu is LetterViewerMenu) case LetterViewerMenu:
{
LetterViwerMenuPatch.Cleanup(); LetterViwerMenuPatch.Cleanup();
} break;
else if (menu is LevelUpMenu) case LevelUpMenu:
{
LevelUpMenuPatch.Cleanup(); LevelUpMenuPatch.Cleanup();
} break;
else if (menu is Billboard) case Billboard:
{
BillboardPatch.Cleanup(); BillboardPatch.Cleanup();
} break;
else if (menu is GameMenu) case GameMenu:
{
GameMenuPatch.Cleanup(); GameMenuPatch.Cleanup();
ExitPagePatch.Cleanup(); ExitPagePatch.Cleanup();
OptionsPagePatch.Cleanup(); OptionsPagePatch.Cleanup();
SocialPagePatch.Cleanup(); SocialPagePatch.Cleanup();
InventoryPagePatch.Cleanup(); InventoryPagePatch.Cleanup();
CraftingPagePatch.Cleanup(); CraftingPagePatch.Cleanup();
} break;
else if (menu is JunimoNoteMenu) case JunimoNoteMenu:
{
JunimoNoteMenuPatch.Cleanup(); JunimoNoteMenuPatch.Cleanup();
} break;
else if (menu is ShopMenu) case ShopMenu:
{
ShopMenuPatch.Cleanup(); ShopMenuPatch.Cleanup();
} break;
else if (menu is ItemGrabMenu) case ItemGrabMenu:
{
ItemGrabMenuPatch.Cleanup(); ItemGrabMenuPatch.Cleanup();
} break;
else if (menu is GeodeMenu) case GeodeMenu:
{
GeodeMenuPatch.Cleanup(); GeodeMenuPatch.Cleanup();
} break;
else if (menu is CarpenterMenu) case CarpenterMenu:
{
CarpenterMenuPatch.Cleanup(); CarpenterMenuPatch.Cleanup();
} break;
else if (menu is PurchaseAnimalsMenu) case PurchaseAnimalsMenu:
{
PurchaseAnimalsMenuPatch.Cleanup(); PurchaseAnimalsMenuPatch.Cleanup();
} break;
else if (menu is AnimalQueryMenu) case AnimalQueryMenu:
{
AnimalQueryMenuPatch.Cleanup(); AnimalQueryMenuPatch.Cleanup();
} break;
else if (menu is DialogueBox) case DialogueBox:
{
DialogueBoxPatch.Cleanup(); DialogueBoxPatch.Cleanup();
} break;
else if (menu is JojaCDMenu) case JojaCDMenu:
{
JojaCDMenuPatch.Cleanup(); JojaCDMenuPatch.Cleanup();
} break;
else if (menu is QuestLog) case QuestLog:
{
QuestLogPatch.Cleaup(); QuestLogPatch.Cleaup();
} break;
else if (menu is TailoringMenu) case TailoringMenu:
{
TailoringMenuPatch.Cleanup(); TailoringMenuPatch.Cleanup();
} break;
else if (menu is ForgeMenu) case ForgeMenu:
{
ForgeMenuPatch.Cleanup(); ForgeMenuPatch.Cleanup();
} break;
else if (menu is ItemListMenu) case ItemListMenu:
{
ItemListMenuPatch.Cleanup(); ItemListMenuPatch.Cleanup();
} break;
else if (menu is FieldOfficeMenu) case FieldOfficeMenu:
{
FieldOfficeMenuPatch.Cleanup(); FieldOfficeMenuPatch.Cleanup();
} break;
else if (menu is MuseumMenu) case MuseumMenu:
{
MuseumMenuPatch.Cleanup(); MuseumMenuPatch.Cleanup();
} break;
else if (menu is PondQueryMenu) case PondQueryMenu:
{
PondQueryMenuPatch.Cleanup(); PondQueryMenuPatch.Cleanup();
} break;
else if (menu is GeodeMenu) case SpecialOrdersBoard:
{
GeodeMenuPatch.Cleanup();
}
else if (menu is SpecialOrdersBoard)
{
SpecialOrdersBoardPatch.Cleanup(); SpecialOrdersBoardPatch.Cleanup();
break;
} }
InventoryUtils.Cleanup(); InventoryUtils.Cleanup();

View File

@ -2,7 +2,7 @@ namespace stardew_access.Patches
{ {
internal class TextBoxPatch internal class TextBoxPatch
{ {
internal static string textBoxQuery = " "; internal static string textBoxQuery = "";
internal static string activeTextBoxes = ""; internal static string activeTextBoxes = "";
internal static bool isAnyTextBoxActive => activeTextBoxes != ""; internal static bool isAnyTextBoxActive => activeTextBoxes != "";
@ -24,6 +24,7 @@ namespace stardew_access.Patches
if (isEscPressed) if (isEscPressed)
{ {
if (activeTextBoxes.Contains(uniqueIdentifier)) activeTextBoxes = activeTextBoxes.Replace(uniqueIdentifier, "");
__instance.Selected = false; __instance.Selected = false;
} }

View File

@ -0,0 +1,23 @@
namespace stardew_access.Patches
{
internal class TextEntryMenuPatch
{
internal static void DrawPatch(StardewValley.Menus.TextEntryMenu __instance, StardewValley.Menus.TextBox ____target)
{
try
{
TextBoxPatch.DrawPatch(____target);
}
catch (Exception e)
{
MainClass.ErrorLog($"An error occured in DrawPatch() in TextEntryPatch:\n{e.Message}\n{e.StackTrace}");
}
}
internal static void ClosePatch()
{
TextBoxPatch.activeTextBoxes = "";
}
}
}

View File

@ -0,0 +1,24 @@
using StardewValley;
using StardewValley.Characters;
namespace stardew_access.Patches
{
internal class TrashBearPatch
{
internal static void CheckActionPatch(TrashBear __instance, bool __result, int ___itemWantedIndex, int ___showWantBubbleTimer)
{
try
{
if (__result) return; // The true `true` value of __result indicates the bear is interactable i.e. when giving the bear the wanted item
if (__instance.sprite.Value.CurrentAnimation != null) return;
string itemName = Game1.objectInformation[___itemWantedIndex].Split('/')[4];
MainClass.ScreenReader.Say(MainClass.Translate("patch.trash_bear.wanted_item", new {trash_bear_name = __instance.displayName, item_name = itemName}), true);
}
catch (Exception e)
{
MainClass.ErrorLog($"An error occured TrashBearPatch::CheckActionPatch():\n{e.Message}\n{e.StackTrace}");
}
}
}
}

View File

@ -11,7 +11,9 @@ namespace stardew_access.Patches
internal static FarmAnimal? animalBeingMoved = null; internal static FarmAnimal? animalBeingMoved = null;
internal static bool isOnFarm = false; internal static bool isOnFarm = false;
internal static void DrawPatch(AnimalQueryMenu __instance, bool ___confirmingSell, FarmAnimal ___animal, TextBox ___textBox, string ___parentName, bool ___movingAnimal) private static double loveLevel;
internal static void DrawPatch(AnimalQueryMenu __instance, bool ___confirmingSell, FarmAnimal ___animal, TextBox ___textBox, string ___parentName, bool ___movingAnimal, double ___loveLevel)
{ {
try try
{ {
@ -23,6 +25,8 @@ namespace stardew_access.Patches
animalQueryMenu = __instance; animalQueryMenu = __instance;
animalBeingMoved = ___animal; animalBeingMoved = ___animal;
loveLevel = ___loveLevel;
narrateAnimalDetailsOnKeyPress(___animal, ___parentName); narrateAnimalDetailsOnKeyPress(___animal, ___parentName);
narrateHoveredButton(__instance, ___animal, ___confirmingSell, x, y); narrateHoveredButton(__instance, ___animal, ___confirmingSell, x, y);
@ -44,6 +48,7 @@ namespace stardew_access.Patches
int age = (___animal.GetDaysOwned() + 1) / 28 + 1; int age = (___animal.GetDaysOwned() + 1) / 28 + 1;
string ageText = (age <= 1) ? Game1.content.LoadString("Strings\\UI:AnimalQuery_Age1") : Game1.content.LoadString("Strings\\UI:AnimalQuery_AgeN", age); string ageText = (age <= 1) ? Game1.content.LoadString("Strings\\UI:AnimalQuery_Age1") : Game1.content.LoadString("Strings\\UI:AnimalQuery_AgeN", age);
string parent = ""; string parent = "";
if ((int)___animal.age.Value < (byte)___animal.ageWhenMature.Value) if ((int)___animal.age.Value < (byte)___animal.ageWhenMature.Value)
{ {
ageText += Game1.content.LoadString("Strings\\UI:AnimalQuery_AgeBaby"); ageText += Game1.content.LoadString("Strings\\UI:AnimalQuery_AgeBaby");
@ -53,10 +58,26 @@ namespace stardew_access.Patches
parent = Game1.content.LoadString("Strings\\UI:AnimalQuery_Parent", ___parentName); parent = Game1.content.LoadString("Strings\\UI:AnimalQuery_Parent", ___parentName);
} }
// The loveLevel varies between 0 and 1
// 1 indicates 5 hearts and similarily 0 indicates 0 hearts
// the below code multiplies the loveLevel by 10 and
// the numeric value of the resultent is divided by 2 to give the number of full hearts and
// if its decimal value is above 0.5, then that indicates half a heart
double heartCount = Math.Floor(loveLevel * 10);
double remainder = (loveLevel * 10) % 1;
heartCount /= 2;
if (remainder >= 0.5)
{
heartCount += 0.5;
}
MainClass.DebugLog($"Lovelevel: {loveLevel}");
string heart = MainClass.Translate("patch.animal_query_menu.heart", new { count = heartCount });
isNarratingAnimalInfo = true; isNarratingAnimalInfo = true;
Task.Delay(200).ContinueWith(_ => { isNarratingAnimalInfo = false; }); // Adds delay Task.Delay(200).ContinueWith(_ => { isNarratingAnimalInfo = false; }); // Adds delay
MainClass.ScreenReader.Say($"Name: {name} Type: {type} \n\t Age: {ageText} {parent}", true); MainClass.ScreenReader.Say($"Name: {name} Type: {type} \n\t {ageText} {parent} \n\t {heart}", true);
} }
private static void narrateHoveredButton(AnimalQueryMenu __instance, FarmAnimal ___animal, bool ___confirmingSell, int x, int y) private static void narrateHoveredButton(AnimalQueryMenu __instance, FarmAnimal ___animal, bool ___confirmingSell, int x, int y)

View File

@ -24,7 +24,7 @@ namespace stardew_access.Patches
if (___onFarm && ___namingAnimal) if (___onFarm && ___namingAnimal)
{ {
narrateNamingMenu(__instance, x, y); narrateNamingMenu(__instance, ___textBox, x, y);
} }
else if (___onFarm && !___namingAnimal) else if (___onFarm && !___namingAnimal)
{ {
@ -42,7 +42,7 @@ namespace stardew_access.Patches
} }
} }
private static void narrateNamingMenu(PurchaseAnimalsMenu __instance, int x, int y) private static void narrateNamingMenu(PurchaseAnimalsMenu __instance, TextBox ___textBox, int x, int y)
{ {
string toSpeak = ""; string toSpeak = "";
if (__instance.okButton != null && __instance.okButton.containsPoint(x, y)) if (__instance.okButton != null && __instance.okButton.containsPoint(x, y))
@ -60,9 +60,9 @@ namespace stardew_access.Patches
else if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y)) else if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y))
{ {
toSpeak = "Name Text Box"; toSpeak = "Name Text Box";
// string? value = ___textBox.Text; string? name = ___textBox.Text;
// if (value != "" && value != null && value != "null") if (name != null)
// toSpeak = $"{toSpeak}, Value: {value}"; toSpeak = $"{toSpeak}, Value: {name}";
} }
if (purchaseAnimalMenuQuery == toSpeak) return; if (purchaseAnimalMenuQuery == toSpeak) return;

View File

@ -2,15 +2,17 @@
"warnings.health": "Warnung! Die Gesundheit liegt bei {{value}} Prozent!", "warnings.health": "Warnung! Die Gesundheit liegt bei {{value}} Prozent!",
"warnings.stamina": "Warnung! Ausdauer beträgt ar {{value}} Prozent!", "warnings.stamina": "Warnung! Ausdauer beträgt ar {{value}} Prozent!",
"warnings.time": "Warnung! Zeit ist {{value}}", "warnings.time": "Warnung! Zeit ist {{value}}",
"grandpastory.scene0":"Opa, auf seinem Sterbebett.", "grandpastory.scene0": "Opa, auf seinem Sterbebett.",
"grandpastory.scene4":"Mitarbeiter der JoJa corp.", "grandpastory.scene4": "Mitarbeiter der JoJa corp.",
"grandpastory.scene5":"Mitarbeiter in ihren Kabinen, einige von ihnen sehen erschöpft aus, Sie selbst eingeschlossen.", "grandpastory.scene5": "Mitarbeiter in ihren Kabinen, einige von ihnen sehen erschöpft aus, Sie selbst eingeschlossen.",
"grandpastory.scene6":"Du erreichst deinen Schreibtisch und findest Opas Brief.", "grandpastory.scene6": "Du erreichst deinen Schreibtisch und findest Opas Brief.",
"grandpastory.letteropen":"Linksklick, um Opas Brief zu öffnen", "grandpastory.letteropen": "Linksklick, um Opas Brief zu öffnen",
"intro.scene3":"Fahrt zur Bushaltestelle Stardew Valley", "intro.scene3": "Fahrt zur Bushaltestelle Stardew Valley",
"intro.scene4":"Stardew Valley 0.5 Meilen entfernt", "intro.scene4": "Stardew Valley 0.5 Meilen entfernt",
"manuallytriggered.healthnstamina.percent":"Gesundheit ist {{health}} % und Ausdauer ist {{stamina}} %", "manuallytriggered.healthnstamina.percent": "Gesundheit ist {{health}} % und Ausdauer ist {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"Gesundheit ist {{health}} und Ausdauer ist {{stamina}}", "manuallytriggered.healthnstamina.normal": "Gesundheit ist {{health}} und Ausdauer ist {{stamina}}",
"readtile.sprinkler.pressurenozzle":"Druck-{{value}}", "readtile.sprinkler.pressurenozzle": "Druck-{{value}}",
"readtile.sprinkler.enricher":"Bereichernd {{value}}" "readtile.sprinkler.enricher": "Bereichernd {{value}}",
"patch.animal_query_menu.heart": "Anzahl der Herzen: {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} möchte {{item_name}} haben!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "Warning! Health is at {{value}} percent!", "warnings.health": "Warning! Health is at {{value}} percent!",
"warnings.stamina": "Warning! Stamina is at {{value}} percent!", "warnings.stamina": "Warning! Stamina is at {{value}} percent!",
"warnings.time": "Warning! Time is {{value}}", "warnings.time": "Warning! Time is {{value}}",
"grandpastory.scene0":"Grandpa, on his deathbed.", "grandpastory.scene0": "Grandpa, on his deathbed.",
"grandpastory.scene4":"Employees working in JoJa corp.", "grandpastory.scene4": "Employees working in JoJa corp.",
"grandpastory.scene5":"Employees in their cubicles, some of them look exhausted including yourself.", "grandpastory.scene5": "Employees in their cubicles, some of them look exhausted including yourself.",
"grandpastory.scene6":"You reach your desk finding grandpa's letter.", "grandpastory.scene6": "You reach your desk finding grandpa's letter.",
"grandpastory.letteropen":"Left click to open grandpa's letter", "grandpastory.letteropen": "Left click to open grandpa's letter",
"intro.scene3":"Travelling to Stardew Valley bus stop", "intro.scene3": "Travelling to Stardew Valley bus stop",
"intro.scene4":"Stardew valley 0.5 miles away", "intro.scene4": "Stardew valley 0.5 miles away",
"manuallytriggered.healthnstamina.percent":"Health is {{health}} % and Stamina is {{stamina}} %", "manuallytriggered.healthnstamina.percent": "Health is {{health}} % and Stamina is {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"Health is {{health}} and Stamina is {{stamina}}", "manuallytriggered.healthnstamina.normal": "Health is {{health}} and Stamina is {{stamina}}",
"readtile.sprinkler.pressurenozzle":"Pressurized {{value}}", "readtile.sprinkler.pressurenozzle": "Pressurized {{value}}",
"readtile.sprinkler.enricher":"Enriching {{value}}" "readtile.sprinkler.enricher": "Enriching {{value}}",
"patch.animal_query_menu.heart": "Heart Count: {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} wants {{item_name}}!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "¡Advertencia! ¡La salud está al {{value}} por ciento!", "warnings.health": "¡Advertencia! ¡La salud está al {{value}} por ciento!",
"warnings.stamina": "¡Advertencia! ¡La resistencia es un {{value}} por ciento!", "warnings.stamina": "¡Advertencia! ¡La resistencia es un {{value}} por ciento!",
"warnings.time": "¡Advertencia! El tiempo es {{valor}}", "warnings.time": "¡Advertencia! El tiempo es {{valor}}",
"grandpastory.scene0":"Abuelo, en su lecho de muerte.", "grandpastory.scene0": "Abuelo, en su lecho de muerte.",
"grandpastory.scene4":"Empleados que trabajan en JoJa corp.", "grandpastory.scene4": "Empleados que trabajan en JoJa corp.",
"grandpastory.scene5":"Empleados en sus cubículos, algunos de ellos parecen exhaustos, incluido usted.", "grandpastory.scene5": "Empleados en sus cubículos, algunos de ellos parecen exhaustos, incluido usted.",
"grandpastory.scene6":"Llegas a tu escritorio y encuentras la carta del abuelo.", "grandpastory.scene6": "Llegas a tu escritorio y encuentras la carta del abuelo.",
"grandpastory.letteropen":"Haz clic izquierdo para abrir la carta del abuelo.", "grandpastory.letteropen": "Haz clic izquierdo para abrir la carta del abuelo.",
"intro.scene3":"Viajando a la parada de autobús de Stardew Valley", "intro.scene3": "Viajando a la parada de autobús de Stardew Valley",
"intro.scene4":"Valle de Stardew a 0.5 millas de distancia", "intro.scene4": "Valle de Stardew a 0.5 millas de distancia",
"manuallytriggered.healthnstamina.percent":"La salud es {{health}} % y la resistencia es {{stamina}} %", "manuallytriggered.healthnstamina.percent": "La salud es {{health}} % y la resistencia es {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"La salud es {{health}} y la resistencia es {{stamina}}", "manuallytriggered.healthnstamina.normal": "La salud es {{health}} y la resistencia es {{stamina}}",
"readtile.sprinkler.pressurenozzle":"presurizada {{value}}", "readtile.sprinkler.pressurenozzle": "presurizada {{value}}",
"readtile.sprinkler.enricher":"Enriquecedora {{value}}" "readtile.sprinkler.enricher": "Enriquecedora {{value}}",
"patch.animal_query_menu.heart": "Conteo de corazones: {{count}}",
"patch.trash_bear.wanted_item": "¡{{trash_bear_name}} quiere {{item_name}}!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "Avertissement! La santé est à {{value}} pour cent!", "warnings.health": "Avertissement! La santé est à {{value}} pour cent!",
"warnings.stamina": "Avertissement! L'endurance est à {{value}} pour cent!", "warnings.stamina": "Avertissement! L'endurance est à {{value}} pour cent!",
"warnings.time": "Avertissement! Le temps est de {{value}}", "warnings.time": "Avertissement! Le temps est de {{value}}",
"grandpastory.scene0":"Grand-père, sur son lit de mort.", "grandpastory.scene0": "Grand-père, sur son lit de mort.",
"grandpastory.scene4":"Les employés travaillant chez JoJa corp.", "grandpastory.scene4": "Les employés travaillant chez JoJa corp.",
"grandpastory.scene5":"Employés dans leurs cabines, certains ont l'air épuisés, y compris vous-même.", "grandpastory.scene5": "Employés dans leurs cabines, certains ont l'air épuisés, y compris vous-même.",
"grandpastory.scene6":"Vous atteignez votre bureau en trouvant la lettre de grand-père.", "grandpastory.scene6": "Vous atteignez votre bureau en trouvant la lettre de grand-père.",
"grandpastory.letteropen":"Clic gauche pour ouvrir la lettre de grand-père", "grandpastory.letteropen": "Clic gauche pour ouvrir la lettre de grand-père",
"intro.scene3":"Se rendre à l'arrêt de bus Stardew Valley", "intro.scene3": "Se rendre à l'arrêt de bus Stardew Valley",
"intro.scene4":"Vallée de Stardew à 0.5 miles", "intro.scene4": "Vallée de Stardew à 0.5 miles",
"manuallytriggered.healthnstamina.percent":"La santé est de {{health}} % et l'endurance est de {{stamina}} %", "manuallytriggered.healthnstamina.percent": "La santé est de {{health}} % et l'endurance est de {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"La santé est {{health}} et l'endurance est {{stamina}}", "manuallytriggered.healthnstamina.normal": "La santé est {{health}} et l'endurance est {{stamina}}",
"readtile.sprinkler.pressurenozzle":"Sous pression {{value}}", "readtile.sprinkler.pressurenozzle": "Sous pression {{value}}",
"readtile.sprinkler.enricher":"Enrichissant {{value}}" "readtile.sprinkler.enricher": "Enrichissant {{value}}",
"patch.animal_query_menu.heart": "Nombre de cœurs : {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} veut {{item_name}} !"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "Figyelem! Az egészségi állapot {{érték}} százalék!", "warnings.health": "Figyelem! Az egészségi állapot {{érték}} százalék!",
"warnings.stamina": "Figyelem! Az állóképesség {{value}} százalék!", "warnings.stamina": "Figyelem! Az állóképesség {{value}} százalék!",
"warnings.time": "Figyelem! Az idő {{érték}}", "warnings.time": "Figyelem! Az idő {{érték}}",
"grandpastory.scene0":"Nagypapa, a halálos ágyán.", "grandpastory.scene0": "Nagypapa, a halálos ágyán.",
"grandpastory.scene4":"A JoJa corp.-nál dolgozó alkalmazottak", "grandpastory.scene4": "A JoJa corp.-nál dolgozó alkalmazottak",
"grandpastory.scene5":"Alkalmazottak a fülkéiben, néhányuk kimerültnek tűnik, beleértve Önt is.", "grandpastory.scene5": "Alkalmazottak a fülkéiben, néhányuk kimerültnek tűnik, beleértve Önt is.",
"grandpastory.scene6":"Az asztalodhoz érve megtalálod a nagypapa levelét.", "grandpastory.scene6": "Az asztalodhoz érve megtalálod a nagypapa levelét.",
"grandpastory.letteropen":"Kattintson a bal gombbal a nagypapa levelének megnyitásához", "grandpastory.letteropen": "Kattintson a bal gombbal a nagypapa levelének megnyitásához",
"intro.scene3":"Utazás a Stardew Valley buszmegállóhoz", "intro.scene3": "Utazás a Stardew Valley buszmegállóhoz",
"intro.scene4":"Stardew-völgy 0.5 mérföldre van", "intro.scene4": "Stardew-völgy 0.5 mérföldre van",
"manuallytriggered.healthnstamina.percent":"Az egészségi állapot {{health}} %, az állóképesség pedig {{stamina}} %", "manuallytriggered.healthnstamina.percent": "Az egészségi állapot {{health}} %, az állóképesség pedig {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"Az egészség {{health}}, az állóképesség pedig {{stamina}}", "manuallytriggered.healthnstamina.normal": "Az egészség {{health}}, az állóképesség pedig {{stamina}}",
"readtile.sprinkler.pressurenozzle":"Nyomás alatt {{value}}", "readtile.sprinkler.pressurenozzle": "Nyomás alatt {{value}}",
"readtile.sprinkler.enricher":"Gazdagítás {{value}}" "readtile.sprinkler.enricher": "Gazdagítás {{value}}",
"patch.animal_query_menu.heart": "Szív szám: {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} szeretné {{item_name}}!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "Avvertimento! La salute è al {{value}} percento!", "warnings.health": "Avvertimento! La salute è al {{value}} percento!",
"warnings.stamina": "Avvertimento! La resistenza è al {{value}} percento!", "warnings.stamina": "Avvertimento! La resistenza è al {{value}} percento!",
"warnings.time": "Avvertimento! L'ora è {{value}}", "warnings.time": "Avvertimento! L'ora è {{value}}",
"grandpastory.scene0":"Il nonno, sul letto di morte.", "grandpastory.scene0": "Il nonno, sul letto di morte.",
"grandpastory.scene4":"Dipendenti che lavorano in JoJa corp.", "grandpastory.scene4": "Dipendenti che lavorano in JoJa corp.",
"grandpastory.scene5":"Impiegati nei loro cubicoli, alcuni di loro sembrano esausti, compreso te.", "grandpastory.scene5": "Impiegati nei loro cubicoli, alcuni di loro sembrano esausti, compreso te.",
"grandpastory.scene6":"Raggiungi la tua scrivania e trovi la lettera del nonno.", "grandpastory.scene6": "Raggiungi la tua scrivania e trovi la lettera del nonno.",
"grandpastory.letteropen":"Fare clic con il tasto sinistro per aprire la lettera del nonno", "grandpastory.letteropen": "Fare clic con il tasto sinistro per aprire la lettera del nonno",
"intro.scene3":"In viaggio verso la fermata dell'autobus di Stardew Valley", "intro.scene3": "In viaggio verso la fermata dell'autobus di Stardew Valley",
"intro.scene4":"Stardew Valley 0.5 miglia di distanza", "intro.scene4": "Stardew Valley 0.5 miglia di distanza",
"manuallytriggered.healthnstamina.percent":"La salute è {{health}} % e la resistenza è {{stamina}} %", "manuallytriggered.healthnstamina.percent": "La salute è {{health}} % e la resistenza è {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"La salute è {{health}} e la resistenza è {{stamina}}", "manuallytriggered.healthnstamina.normal": "La salute è {{health}} e la resistenza è {{stamina}}",
"readtile.sprinkler.pressurenozzle":"Pressurizzato {{value}}", "readtile.sprinkler.pressurenozzle": "Pressurizzato {{value}}",
"readtile.sprinkler.enricher":"Arricchimento {{value}}" "readtile.sprinkler.enricher": "Arricchimento {{value}}",
"patch.animal_query_menu.heart": "Conteggio cuori: {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} vuole {{item_name}}!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "警告!健康状態は{{value}}パーセントです!", "warnings.health": "警告!健康状態は{{value}}パーセントです!",
"warnings.stamina": "警告!スタミナは{{value}}パーセントです!", "warnings.stamina": "警告!スタミナは{{value}}パーセントです!",
"warnings.time": "警告!時間は{{value}}です", "warnings.time": "警告!時間は{{value}}です",
"grandpastory.scene0":"おじいちゃん、彼の死の床に。", "grandpastory.scene0": "おじいちゃん、彼の死の床に。",
"grandpastory.scene4":"JoJacorpで働く従業員。", "grandpastory.scene4": "JoJacorpで働く従業員。",
"grandpastory.scene5":"彼らのキュービクルの従業員、彼らの何人かはあなた自身を含めて疲れ果てているように見えます。", "grandpastory.scene5": "彼らのキュービクルの従業員、彼らの何人かはあなた自身を含めて疲れ果てているように見えます。",
"grandpastory.scene6":"おじいちゃんの手紙を見つけて机に着きます。", "grandpastory.scene6": "おじいちゃんの手紙を見つけて机に着きます。",
"grandpastory.letteropen":"左クリックしておじいちゃんの手紙を開く", "grandpastory.letteropen": "左クリックしておじいちゃんの手紙を開く",
"intro.scene3":"スターデューバレーバス停への移動", "intro.scene3": "スターデューバレーバス停への移動",
"intro.scene4":"0.5マイル離れたスターデューバレー", "intro.scene4": "0.5マイル離れたスターデューバレー",
"manuallytriggered.healthnstamina.percent":"体力は {{health}} %、スタミナは {{stamina}} %", "manuallytriggered.healthnstamina.percent": "体力は {{health}} %、スタミナは {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"体力は{{health}}、スタミナは{{stamina}}です", "manuallytriggered.healthnstamina.normal": "体力は{{health}}、スタミナは{{stamina}}です",
"readtile.sprinkler.pressurenozzle":"加圧 {{value}}", "readtile.sprinkler.pressurenozzle": "加圧 {{value}}",
"readtile.sprinkler.enricher":"豊かにする {{value}}" "readtile.sprinkler.enricher": "豊かにする {{value}}",
"patch.animal_query_menu.heart": "ハート数:{{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}}は{{item_name}}が欲しい!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "경고! 건강은 {{value}}퍼센트입니다!", "warnings.health": "경고! 건강은 {{value}}퍼센트입니다!",
"warnings.stamina": "경고! 체력은 {{value}}퍼센트입니다!", "warnings.stamina": "경고! 체력은 {{value}}퍼센트입니다!",
"warnings.time": "경고! 시간은 {{value}}입니다", "warnings.time": "경고! 시간은 {{value}}입니다",
"grandpastory.scene0":"임종을 앞둔 할아버지.", "grandpastory.scene0": "임종을 앞둔 할아버지.",
"grandpastory.scene4":"(주)조자에서 근무하는 직원들", "grandpastory.scene4": "(주)조자에서 근무하는 직원들",
"grandpastory.scene5":"칸막이에 있는 직원들, 당신을 포함하여 몇몇은 지쳐 보입니다.", "grandpastory.scene5": "칸막이에 있는 직원들, 당신을 포함하여 몇몇은 지쳐 보입니다.",
"grandpastory.scene6":"책상에 다가가 할아버지의 편지를 찾습니다.", "grandpastory.scene6": "책상에 다가가 할아버지의 편지를 찾습니다.",
"grandpastory.letteropen":"할아버지의 편지를 열려면 왼쪽 클릭", "grandpastory.letteropen": "할아버지의 편지를 열려면 왼쪽 클릭",
"intro.scene3":"스타듀밸리 버스정류장으로 이동", "intro.scene3": "스타듀밸리 버스정류장으로 이동",
"intro.scene4":"스타듀 밸리에서 0.8km 떨어짐", "intro.scene4": "스타듀 밸리에서 0.8km 떨어짐",
"manuallytriggered.healthnstamina.percent":"체력은 {{health}} %이고 체력은 {{stamina}} %입니다.", "manuallytriggered.healthnstamina.percent": "체력은 {{health}} %이고 체력은 {{stamina}} %입니다.",
"manuallytriggered.healthnstamina.normal":"체력은 {{health}}이고 체력은 {{stamina}}입니다.", "manuallytriggered.healthnstamina.normal": "체력은 {{health}}이고 체력은 {{stamina}}입니다.",
"readtile.sprinkler.pressurenozzle":"가압 {{value}}", "readtile.sprinkler.pressurenozzle": "가압 {{value}}",
"readtile.sprinkler.enricher":"풍부하게 하기 {{value}}" "readtile.sprinkler.enricher": "풍부하게 하기 {{value}}",
"patch.animal_query_menu.heart": "하트 개수: {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}}가 {{item_name}}이(가) 필요합니다!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "Aviso! A saúde está em {{value}} por cento!", "warnings.health": "Aviso! A saúde está em {{value}} por cento!",
"warnings.stamina": "Aviso! A resistência está em {{value}} por cento!", "warnings.stamina": "Aviso! A resistência está em {{value}} por cento!",
"warnings.time": "Aviso! O tempo é {{value}}", "warnings.time": "Aviso! O tempo é {{value}}",
"grandpastory.scene0":"Vovô, em seu leito de morte.", "grandpastory.scene0": "Vovô, em seu leito de morte.",
"grandpastory.scene4":"Funcionários que trabalham na JoJa corp.", "grandpastory.scene4": "Funcionários que trabalham na JoJa corp.",
"grandpastory.scene5":"Funcionários em seus cubículos, alguns deles parecem exaustos, incluindo você.", "grandpastory.scene5": "Funcionários em seus cubículos, alguns deles parecem exaustos, incluindo você.",
"grandpastory.scene6":"Você chega à sua mesa encontrando a carta do vovô.", "grandpastory.scene6": "Você chega à sua mesa encontrando a carta do vovô.",
"grandpastory.letteropen":"Clique com o botão esquerdo para abrir a carta do vovô", "grandpastory.letteropen": "Clique com o botão esquerdo para abrir a carta do vovô",
"intro.scene3":"Viajar para o ponto de ônibus Stardew Valley", "intro.scene3": "Viajar para o ponto de ônibus Stardew Valley",
"intro.scene4":"Vale Stardew a 0.5 km de distância", "intro.scene4": "Vale Stardew a 0.5 km de distância",
"manuallytriggered.healthnstamina.percent":"Saúde é {{health}} % e Stamina é {{stamina}} %", "manuallytriggered.healthnstamina.percent": "Saúde é {{health}} % e Stamina é {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"Saúde é {{health}} e Stamina é {{stamina}}", "manuallytriggered.healthnstamina.normal": "Saúde é {{health}} e Stamina é {{stamina}}",
"readtile.sprinkler.pressurenozzle":"Pressurizada {{value}}", "readtile.sprinkler.pressurenozzle": "Pressurizada {{value}}",
"readtile.sprinkler.enricher":"Enriquecimento {{value}}" "readtile.sprinkler.enricher": "Enriquecimento {{value}}",
"patch.animal_query_menu.heart": "Contagem de corações: {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} quer {{item_name}}!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "Предупреждение! Здоровье составляет {{value}} процентов!", "warnings.health": "Предупреждение! Здоровье составляет {{value}} процентов!",
"warnings.stamina": "Предупреждение! Выносливость составляет {{value}} процентов!", "warnings.stamina": "Предупреждение! Выносливость составляет {{value}} процентов!",
"warnings.time": "Предупреждение! Время {{value}}", "warnings.time": "Предупреждение! Время {{value}}",
"grandpastory.scene0":"Дедушка на смертном одре.", "grandpastory.scene0": "Дедушка на смертном одре.",
"grandpastory.scene4":"Сотрудники, работающие в JoJa corp.", "grandpastory.scene4": "Сотрудники, работающие в JoJa corp.",
"grandpastory.scene5":"Сотрудники в своих кабинетах, некоторые из них выглядят измученными, в том числе и вы.", "grandpastory.scene5": "Сотрудники в своих кабинетах, некоторые из них выглядят измученными, в том числе и вы.",
"grandpastory.scene6":"Вы подходите к своему столу и находите дедушкино письмо.", "grandpastory.scene6": "Вы подходите к своему столу и находите дедушкино письмо.",
"grandpastory.letteropen":"Щелкните левой кнопкой мыши, чтобы открыть письмо дедушки", "grandpastory.letteropen": "Щелкните левой кнопкой мыши, чтобы открыть письмо дедушки",
"intro.scene3":"Поездка на автобусную остановку Stardew Valley", "intro.scene3": "Поездка на автобусную остановку Stardew Valley",
"intro.scene4":"Долина Стардью: 0.8 км", "intro.scene4": "Долина Стардью: 0.8 км",
"manuallytriggered.healthnstamina.percent":"Здоровье составляет {{health}}%, а выносливость - {{stamina}}%", "manuallytriggered.healthnstamina.percent": "Здоровье составляет {{health}}%, а выносливость - {{stamina}}%",
"manuallytriggered.healthnstamina.normal":"Здоровье – {{health}}, а выносливость – {{stamina}}.", "manuallytriggered.healthnstamina.normal": "Здоровье – {{health}}, а выносливость – {{stamina}}.",
"readtile.sprinkler.pressurenozzle":"под давлением {{value}}", "readtile.sprinkler.pressurenozzle": "под давлением {{value}}",
"readtile.sprinkler.enricher":"Обогащение {{value}}" "readtile.sprinkler.enricher": "Обогащение {{value}}",
"patch.animal_query_menu.heart": "Количество сердец: {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} хочет {{item_name}}!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "Uyarı! Sağlık yüzde {{değer}}!", "warnings.health": "Uyarı! Sağlık yüzde {{değer}}!",
"warnings.stamina": "uyarı! Dayanıklılık yüzde {{değer}}!", "warnings.stamina": "uyarı! Dayanıklılık yüzde {{değer}}!",
"warnings.time": "Uyarı! Zaman {{değer}}", "warnings.time": "Uyarı! Zaman {{değer}}",
"grandpastory.scene0":"Büyükbaba, ölüm döşeğinde.", "grandpastory.scene0": "Büyükbaba, ölüm döşeğinde.",
"grandpastory.scene4":"JoJa şirketinde çalışan çalışanlar", "grandpastory.scene4": "JoJa şirketinde çalışan çalışanlar",
"grandpastory.scene5":"Kabinlerinde çalışanlar, siz de dahil olmak üzere bazıları bitkin görünüyor.", "grandpastory.scene5": "Kabinlerinde çalışanlar, siz de dahil olmak üzere bazıları bitkin görünüyor.",
"grandpastory.scene6":"Dedenizin mektubunu bulmak için masanıza ulaşıyorsunuz.", "grandpastory.scene6": "Dedenizin mektubunu bulmak için masanıza ulaşıyorsunuz.",
"grandpastory.letteropen":"Büyükbabanın mektubunu açmak için sol tıklayın", "grandpastory.letteropen": "Büyükbabanın mektubunu açmak için sol tıklayın",
"intro.scene3":"Stardew Valley otobüs durağına seyahat", "intro.scene3": "Stardew Valley otobüs durağına seyahat",
"intro.scene4":"Stardew vadisi 0.5 mil uzakta", "intro.scene4": "Stardew vadisi 0.5 mil uzakta",
"manuallytriggered.healthnstamina.percent":"Sağlık %{{health}} ve Dayanıklılık %{{stamina}}", "manuallytriggered.healthnstamina.percent": "Sağlık %{{health}} ve Dayanıklılık %{{stamina}}",
"manuallytriggered.healthnstamina.normal":"Sağlık {{health}} ve Dayanıklılık {{stamina}}", "manuallytriggered.healthnstamina.normal": "Sağlık {{health}} ve Dayanıklılık {{stamina}}",
"readtile.sprinkler.pressurenozzle":"basınçlı {{value}}", "readtile.sprinkler.pressurenozzle": "basınçlı {{value}}",
"readtile.sprinkler.enricher":"zenginleştirici {{value}}" "readtile.sprinkler.enricher": "zenginleştirici {{value}}",
"patch.animal_query_menu.heart": "Kalp Sayısı: {{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} {{item_name}} istiyor!"
} }

View File

@ -2,15 +2,17 @@
"warnings.health": "警告!健康状况为 {{value}} 百分!", "warnings.health": "警告!健康状况为 {{value}} 百分!",
"warnings.stamina": "警告!耐力为 {{value}} 百分!", "warnings.stamina": "警告!耐力为 {{value}} 百分!",
"warnings.time": "警告!时间是 {{value}}", "warnings.time": "警告!时间是 {{value}}",
"grandpastory.scene0":"爷爷,去世前。", "grandpastory.scene0": "爷爷,去世前。",
"grandpastory.scene4":"在 JoJa corp. 工作的员工", "grandpastory.scene4": "在 JoJa corp. 工作的员工",
"grandpastory.scene5":"员工在他们的办公室里,他们看起来很累,这其中也包括你自己。", "grandpastory.scene5": "员工在他们的办公室里,他们看起来很累,这其中也包括你自己。",
"grandpastory.scene6":"你走到办公桌前,找到了爷爷的信。", "grandpastory.scene6": "你走到办公桌前,找到了爷爷的信。",
"grandpastory.letteropen":"左方括号打开爷爷的信", "grandpastory.letteropen": "左方括号打开爷爷的信",
"intro.scene3":"前往星露谷物语巴士站", "intro.scene3": "前往星露谷物语巴士站",
"intro.scene4":"星露谷物语 0.5 英里外", "intro.scene4": "星露谷物语 0.5 英里外",
"manuallytriggered.healthnstamina.percent":"健康为 {{health}} %,耐力为 {{stamina}} %", "manuallytriggered.healthnstamina.percent": "健康为 {{health}} %,耐力为 {{stamina}} %",
"manuallytriggered.healthnstamina.normal":"健康为 {{health}},耐力为 {{stamina}}", "manuallytriggered.healthnstamina.normal": "健康为 {{health}},耐力为 {{stamina}}",
"readtile.sprinkler.pressurenozzle":"加压 {{value}}", "readtile.sprinkler.pressurenozzle": "加压 {{value}}",
"readtile.sprinkler.enricher":"丰富 {{value}}" "readtile.sprinkler.enricher": "丰富 {{value}}",
"patch.animal_query_menu.heart": "心数量:{{count}}",
"patch.trash_bear.wanted_item": "{{trash_bear_name}} 想要 {{item_name}}"
} }