1.3.12, Hooks for Mods
This commit is contained in:
parent
b62fdf88e6
commit
0a17a0e6fd
|
@ -18,6 +18,9 @@ _ReSharper*/
|
|||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# LocalHistory
|
||||
.localhistory/
|
||||
|
||||
# NuGet packages
|
||||
*.nupkg
|
||||
**/packages/*
|
||||
|
@ -26,3 +29,6 @@ _ReSharper*/
|
|||
|
||||
# sensitive files
|
||||
appsettings.Development.json
|
||||
|
||||
# assemblies
|
||||
assemblies/
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Mono.Cecil;
|
||||
using Mono.Cecil.Cil;
|
||||
|
||||
|
@ -171,18 +169,124 @@ namespace DllRewrite
|
|||
var GetGamePadState = typeInputState.Methods.FirstOrDefault(m => m.Name == "GetGamePadState");
|
||||
processor.Replace(method.Body.Instructions[1], processor.Create(OpCodes.Callvirt, GetGamePadState));
|
||||
}
|
||||
public void ApplyCommonHookEntry(TypeDefinition targetType, string methodname, string hookname, bool patchPrefix = true, bool patchPostfix = true, Func<MethodDefinition, bool> methodFilter = null)
|
||||
public void ApplyCommonMidHookEntry(TypeDefinition targetType, Func<MethodDefinition, bool> methodChecker, Func<Instruction, bool> jointPointChecker, int jointPointOffset, string hookname)
|
||||
{
|
||||
string qualifyName = $"{targetType.FullName}.{methodname}";
|
||||
byte i, j;
|
||||
MethodDefinition targetMethod = targetType.Methods.FirstOrDefault(method => methodChecker(method));
|
||||
string qualifyName = targetType.FullName + "." + targetMethod.Name + "_mid";
|
||||
MethodDefinition prefixHook = this.StardewValley.MainModule.GetType("StardewValley.ModHooks").Methods.FirstOrDefault(m => m.Name == (hookname + "_Prefix"));
|
||||
ILProcessor iLProcessor = targetMethod.Body.GetILProcessor();
|
||||
FieldReference field = this.GetFieldReference("hooks", "StardewValley.Game1", this.StardewValley);
|
||||
List<Instruction> instructions = new List<Instruction>();
|
||||
byte returnIndex = 0;
|
||||
byte parameterIndexBegin = 0;
|
||||
byte parameterIndexEnd = 0;
|
||||
byte parameterOffset = targetMethod.IsStatic ? ((byte)0) : ((byte)1);
|
||||
byte stateIndex = (byte)targetMethod.Body.Variables.Count;
|
||||
targetMethod.Body.Variables.Add(new VariableDefinition(this.GetTypeReference("System.Boolean")));
|
||||
if (targetMethod.ReturnType.FullName != "System.Void")
|
||||
{
|
||||
returnIndex = (byte)targetMethod.Body.Variables.Count;
|
||||
targetMethod.Body.Variables.Add(new VariableDefinition(this.GetTypeReference("System.Object")));
|
||||
}
|
||||
parameterIndexBegin = (byte)targetMethod.Body.Variables.Count;
|
||||
for (i = 0; i < targetMethod.Parameters.Count; i = (byte)(i + 1))
|
||||
{
|
||||
targetMethod.Body.Variables.Add(new VariableDefinition(this.GetTypeReference("System.Object")));
|
||||
parameterIndexEnd = (byte)targetMethod.Body.Variables.Count;
|
||||
}
|
||||
if (prefixHook != null)
|
||||
{
|
||||
Instruction jointPoint = targetMethod.Body.Instructions.FirstOrDefault(ins => jointPointChecker(ins));
|
||||
for (int x = jointPointOffset; x < 0; x++)
|
||||
{
|
||||
jointPoint = jointPoint.Previous;
|
||||
}
|
||||
for (int x = 0; x < jointPointOffset; x++)
|
||||
{
|
||||
jointPoint = jointPoint.Next;
|
||||
}
|
||||
i = parameterOffset;
|
||||
for (j = parameterIndexBegin; i < (targetMethod.Parameters.Count + parameterOffset); j = (byte)(j + 1))
|
||||
{
|
||||
instructions.Add(this._createLdargsInstruction(iLProcessor, i));
|
||||
if (targetMethod.Parameters[i - parameterOffset].ParameterType.IsValueType)
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Box, targetMethod.Parameters[i - parameterOffset].ParameterType));
|
||||
}
|
||||
instructions.Add(this._createStlocInstruction(iLProcessor, j));
|
||||
i = (byte)(i + 1);
|
||||
}
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Ldsfld, field));
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Ldstr, qualifyName));
|
||||
if (!targetMethod.IsStatic)
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Ldarg_0));
|
||||
if (targetType.IsValueType)
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Box, targetType));
|
||||
}
|
||||
}
|
||||
i = parameterOffset;
|
||||
for (j = parameterIndexBegin; i < (targetMethod.Parameters.Count + parameterOffset); j = (byte)(j + 1))
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Ldloca_S, j));
|
||||
i = (byte)(i + 1);
|
||||
}
|
||||
while (i < (prefixHook.Parameters.Count - 2))
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Ldloca_S, (byte)0));
|
||||
i = (byte)(i + 1);
|
||||
}
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Ldloca_S, returnIndex));
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Callvirt, prefixHook));
|
||||
instructions.Add(this._createStlocInstruction(iLProcessor, stateIndex));
|
||||
i = parameterOffset;
|
||||
for (j = parameterIndexBegin; i < (targetMethod.Parameters.Count + parameterOffset); j = (byte)(j + 1))
|
||||
{
|
||||
instructions.Add(this._createLdlocInstruction(iLProcessor, j));
|
||||
if (targetMethod.Parameters[i - parameterOffset].ParameterType.IsValueType)
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Unbox_Any, targetMethod.Parameters[i - parameterOffset].ParameterType));
|
||||
}
|
||||
else
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Castclass, targetMethod.Parameters[i - parameterOffset].ParameterType));
|
||||
}
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Starg_S, i));
|
||||
i = (byte)(i + 1);
|
||||
}
|
||||
instructions.Add(this._createLdlocInstruction(iLProcessor, stateIndex));
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Brtrue, jointPoint));
|
||||
if (targetMethod.ReturnType.FullName != "System.Void")
|
||||
{
|
||||
instructions.Add(this._createLdlocInstruction(iLProcessor, returnIndex));
|
||||
if (targetMethod.ReturnType.IsValueType)
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Unbox_Any, targetMethod.ReturnType));
|
||||
}
|
||||
else
|
||||
{
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Castclass, targetMethod.ReturnType));
|
||||
}
|
||||
}
|
||||
instructions.Add(iLProcessor.Create(OpCodes.Ret));
|
||||
this.InsertInstructions(iLProcessor, jointPoint, instructions);
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyCommonHookEntry(TypeDefinition targetType, string methodname, string hookname, bool patchPrefix = true, bool patchPostfix = true, Func<MethodDefinition, bool> methodFilter = null, string qualifyNameSuffix = "")
|
||||
{
|
||||
string qualifyName = $"{targetType.FullName}.{methodname}{qualifyNameSuffix}";
|
||||
TypeDefinition typeModHooksObject = this.StardewValley.MainModule.GetType("StardewValley.ModHooks");
|
||||
var targetMethod = targetType.Methods.FirstOrDefault(method => (!method.IsConstructor && method.HasBody && method.Name == methodname && (methodFilter == null || methodFilter(method))));
|
||||
var targetMethod = targetType.Methods.FirstOrDefault(method => (method.HasBody && method.Name == methodname && (methodFilter == null || methodFilter(method))));
|
||||
var prefixHook = typeModHooksObject.Methods.FirstOrDefault(m => m.Name == hookname + "_Prefix");
|
||||
var postfixHook = typeModHooksObject.Methods.FirstOrDefault(m => m.Name == hookname + "_Postfix");
|
||||
var processor = targetMethod.Body.GetILProcessor();
|
||||
FieldReference hooksField = this.GetFieldReference("hooks", "StardewValley.Game1", this.StardewValley);
|
||||
Instruction jointPoint;
|
||||
List<Instruction> instructions;
|
||||
byte i, j;
|
||||
byte i, j, k;
|
||||
// state
|
||||
byte returnIndex = 0;
|
||||
byte parameterIndexBegin = 0, parameterIndexEnd = 0;
|
||||
|
@ -205,7 +309,8 @@ namespace DllRewrite
|
|||
{
|
||||
instructions = new List<Instruction>();
|
||||
jointPoint = targetMethod.Body.Instructions[0];
|
||||
for (i = parameterOffset, j = parameterIndexBegin; i < targetMethod.Parameters.Count + parameterOffset; i++, j++)
|
||||
k = (byte)(targetMethod.Parameters.Count + parameterOffset > prefixHook.Parameters.Count - 2 ? prefixHook.Parameters.Count - 2 - parameterOffset : targetMethod.Parameters.Count + parameterOffset);
|
||||
for (i = parameterOffset, j = parameterIndexBegin; i < k; i++, j++)
|
||||
{
|
||||
instructions.Add(this._createLdargsInstruction(processor, i));
|
||||
if(targetMethod.Parameters[i - parameterOffset].ParameterType.IsValueType)
|
||||
|
@ -222,7 +327,9 @@ namespace DllRewrite
|
|||
if (targetType.IsValueType)
|
||||
instructions.Add(processor.Create(OpCodes.Box, targetType));
|
||||
}
|
||||
for (i = parameterOffset, j = parameterIndexBegin; i < targetMethod.Parameters.Count + parameterOffset; i++, j++)
|
||||
|
||||
k = (byte)(targetMethod.Parameters.Count + parameterOffset > prefixHook.Parameters.Count - 2 ? prefixHook.Parameters.Count - 2 - parameterOffset : targetMethod.Parameters.Count + parameterOffset);
|
||||
for (i = parameterOffset, j = parameterIndexBegin; i < k; i++, j++)
|
||||
{
|
||||
instructions.Add(processor.Create(OpCodes.Ldloca_S, j));
|
||||
}
|
||||
|
@ -267,7 +374,8 @@ namespace DllRewrite
|
|||
instructions.Add(processor.Create(OpCodes.Box, targetMethod.ReturnType));
|
||||
instructions.Add(this._createStlocInstruction(processor, returnIndex));
|
||||
}
|
||||
for (i = parameterOffset, j = parameterIndexBegin; i < targetMethod.Parameters.Count + parameterOffset; i++, j++)
|
||||
k = (byte)(targetMethod.Parameters.Count + parameterOffset > postfixHook.Parameters.Count - 3 ? prefixHook.Parameters.Count - 3 - parameterOffset : targetMethod.Parameters.Count + parameterOffset);
|
||||
for (i = parameterOffset, j = parameterIndexBegin; i < k; i++, j++)
|
||||
{
|
||||
instructions.Add(this._createLdargsInstruction(processor, i));
|
||||
if (targetMethod.Parameters[i - parameterOffset].ParameterType.IsValueType)
|
||||
|
@ -284,7 +392,8 @@ namespace DllRewrite
|
|||
if (targetType.IsValueType)
|
||||
instructions.Add(processor.Create(OpCodes.Box, targetType));
|
||||
}
|
||||
for (i = parameterOffset, j = parameterIndexBegin; i < targetMethod.Parameters.Count + parameterOffset; i++, j++)
|
||||
k = (byte)(targetMethod.Parameters.Count + parameterOffset > postfixHook.Parameters.Count - 3 ? prefixHook.Parameters.Count - 3 - parameterOffset : targetMethod.Parameters.Count + parameterOffset);
|
||||
for (i = parameterOffset, j = parameterIndexBegin; i < k; i++, j++)
|
||||
{
|
||||
instructions.Add(processor.Create(OpCodes.Ldloca_S, j));
|
||||
}
|
||||
|
@ -554,7 +663,7 @@ namespace DllRewrite
|
|||
{
|
||||
this.ApplyGamePatch();
|
||||
|
||||
this.InsertModHook("OnCommonHook_Prefix", new TypeReference[] {
|
||||
this.InsertModHook("OnCommonHook_Prefix", new[] {
|
||||
this.GetTypeReference("System.String"),
|
||||
this.GetTypeReference("System.Object"),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
|
@ -562,12 +671,12 @@ namespace DllRewrite
|
|||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object"))},
|
||||
new string[] {
|
||||
new[] {
|
||||
"hookName", "__instance",
|
||||
"param1", "param2", "param3",
|
||||
"param4", "__result"},
|
||||
this.GetTypeReference("System.Boolean"));
|
||||
this.InsertModHook("OnCommonStaticHook_Prefix", new TypeReference[] {
|
||||
this.InsertModHook("OnCommonStaticHook_Prefix", new[] {
|
||||
this.GetTypeReference("System.String"),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
|
@ -575,12 +684,12 @@ namespace DllRewrite
|
|||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object"))},
|
||||
new string[] {
|
||||
new[] {
|
||||
"hookName", "param1",
|
||||
"param2", "param3", "param4",
|
||||
"param5", "__result"},
|
||||
this.GetTypeReference("System.Boolean"));
|
||||
this.InsertModHook("OnCommonHook_Postfix", new TypeReference[] {
|
||||
this.InsertModHook("OnCommonHook_Postfix", new[] {
|
||||
this.GetTypeReference("System.String"),
|
||||
this.GetTypeReference("System.Object"),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
|
@ -589,12 +698,12 @@ namespace DllRewrite
|
|||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Boolean")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object"))},
|
||||
new string[] {
|
||||
new[] {
|
||||
"hookName", "__instance",
|
||||
"param1", "param2", "param3",
|
||||
"param4", "__state", "__result"},
|
||||
this.GetTypeReference("System.Void"));
|
||||
this.InsertModHook("OnCommonStaticHook_Postfix", new TypeReference[] {
|
||||
this.InsertModHook("OnCommonStaticHook_Postfix", new[] {
|
||||
this.GetTypeReference("System.String"),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
|
@ -603,13 +712,13 @@ namespace DllRewrite
|
|||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Boolean")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object"))},
|
||||
new string[] {
|
||||
new[] {
|
||||
"hookName", "param1",
|
||||
"param2", "param3", "param4",
|
||||
"param5", "__state", "__result"},
|
||||
this.GetTypeReference("System.Void"));
|
||||
|
||||
this.InsertModHook("OnCommonHook10_Prefix", new TypeReference[] {
|
||||
this.InsertModHook("OnCommonHook10_Prefix", new[] {
|
||||
this.GetTypeReference("System.String"),
|
||||
this.GetTypeReference("System.Object"),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
|
@ -622,14 +731,14 @@ namespace DllRewrite
|
|||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object"))},
|
||||
new string[] {
|
||||
new[] {
|
||||
"hookName", "__instance",
|
||||
"param1", "param2", "param3",
|
||||
"param4", "param5", "param6",
|
||||
"param7", "param8", "param9",
|
||||
"__result"},
|
||||
this.GetTypeReference("System.Boolean"));
|
||||
this.InsertModHook("OnCommonStaticHook10_Prefix", new TypeReference[] {
|
||||
this.InsertModHook("OnCommonStaticHook10_Prefix", new[] {
|
||||
this.GetTypeReference("System.String"),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
|
@ -642,14 +751,14 @@ namespace DllRewrite
|
|||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object"))},
|
||||
new string[] {
|
||||
new[] {
|
||||
"hookName", "param1",
|
||||
"param2", "param3", "param4",
|
||||
"param5", "param6", "param7",
|
||||
"param8", "param9", "param10",
|
||||
"__result"},
|
||||
this.GetTypeReference("System.Boolean"));
|
||||
this.InsertModHook("OnCommonHook10_Postfix", new TypeReference[] {
|
||||
this.InsertModHook("OnCommonHook10_Postfix", new[] {
|
||||
this.GetTypeReference("System.String"),
|
||||
this.GetTypeReference("System.Object"),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
|
@ -663,14 +772,14 @@ namespace DllRewrite
|
|||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Boolean")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object"))},
|
||||
new string[] {
|
||||
new[] {
|
||||
"hookName", "__instance",
|
||||
"param1", "param2", "param3",
|
||||
"param4", "param5", "param6",
|
||||
"param7", "param8", "param9",
|
||||
"__state", "__result"},
|
||||
this.GetTypeReference("System.Void"));
|
||||
this.InsertModHook("OnCommonStaticHook10_Postfix", new TypeReference[] {
|
||||
this.InsertModHook("OnCommonStaticHook10_Postfix", new[] {
|
||||
this.GetTypeReference("System.String"),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
|
@ -684,7 +793,7 @@ namespace DllRewrite
|
|||
new ByReferenceType(this.GetTypeReference("System.Object")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Boolean")),
|
||||
new ByReferenceType(this.GetTypeReference("System.Object"))},
|
||||
new string[] {
|
||||
new[] {
|
||||
"hookName", "param1",
|
||||
"param2", "param3", "param4",
|
||||
"param5", "param6", "param7",
|
||||
|
@ -696,198 +805,117 @@ namespace DllRewrite
|
|||
this.ApplyCommonHookEntry(typeGame1, "Update", "OnCommonHook");
|
||||
this.ApplyCommonHookEntry(typeGame1, "_draw", "OnCommonHook");
|
||||
this.ApplyCommonHookEntry(typeGame1, "getSourceRectForStandardTileSheet", "OnCommonStaticHook");
|
||||
this.ApplyCommonHookEntry(typeGame1, "tryToCheckAt", "OnCommonStaticHook");
|
||||
this.ApplyCommonHookEntry(typeGame1, "getLocationRequest", "OnCommonStaticHook");
|
||||
this.ApplyCommonHookEntry(typeGame1, "tryToCheckAt", "OnCommonStaticHook", false);
|
||||
this.ApplyCommonHookEntry(typeGame1, "getLocationRequest", "OnCommonStaticHook", true, false);
|
||||
this.ApplyCommonHookEntry(typeGame1, "getLocationRequest", "OnCommonStaticHook", true, false);
|
||||
this.ApplyCommonHookEntry(typeGame1, "loadForNewGame", "OnCommonStaticHook");
|
||||
this.ApplyCommonHookEntry(typeGame1, "warpFarmer", "OnCommonStaticHook10", true, false, method => method.Parameters.Count == 6);
|
||||
this.ApplyCommonHookEntry(typeGame1, ".ctor", "OnCommonHook", false);
|
||||
this.ApplyCommonHookEntry(typeGame1, "LoadContent", "OnCommonHook", false);
|
||||
TypeDefinition targetType = null;
|
||||
foreach (TypeDefinition definition21 in this.StardewValley.MainModule.GetTypes())
|
||||
{
|
||||
if (definition21.FullName == "StardewValley.Game1/<>c")
|
||||
{
|
||||
targetType = definition21;
|
||||
}
|
||||
}
|
||||
this.ApplyCommonMidHookEntry(targetType, method => method.FullName.Contains("showEndOfNightStuff"), ins => (ins.OpCode == OpCodes.Ldstr) && (((string)ins.Operand) == "newRecord"), -2, "OnCommonHook");
|
||||
|
||||
// On Object hooks
|
||||
TypeDefinition typeObject = this.StardewValley.MainModule.GetType("StardewValley.Object");
|
||||
this.ApplyCommonHookEntry(typeObject, "canBePlacedHere", "OnCommonHook", true, false);
|
||||
this.ApplyCommonHookEntry(typeObject, "checkForAction", "OnCommonHook", true, false);
|
||||
this.ApplyCommonHookEntry(typeObject, "isIndexOkForBasicShippedCategory", "OnCommonStaticHook");
|
||||
this.ApplyCommonHookEntry(typeObject, "drawWhenHeld", "OnCommonHook", true, false);
|
||||
this.ApplyCommonHookEntry(typeObject, "drawInMenuWithColour", "OnCommonHook10");
|
||||
this.ApplyCommonHookEntry(typeObject, "draw", "OnCommonHook", true, false, method => method.Parameters.Count == 4);
|
||||
this.ApplyCommonHookEntry(typeObject, "draw", "OnCommonHook10", true, false, method => method.Parameters.Count == 5);
|
||||
this.ApplyCommonHookEntry(typeObject, "getDescription", "OnCommonHook", true, false);
|
||||
|
||||
// On ReadyCheckDialog hooks
|
||||
TypeDefinition typeReadyCheckDialog = this.StardewValley.MainModule.GetType("StardewValley.Menus.ReadyCheckDialog");
|
||||
this.ApplyCommonHookEntry(typeReadyCheckDialog, "update", "OnCommonHook");
|
||||
|
||||
// On IClickableMenu hooks
|
||||
TypeDefinition typeIClickableMenu = this.StardewValley.MainModule.GetType("StardewValley.Menus.IClickableMenu");
|
||||
this.ApplyCommonHookEntry(typeIClickableMenu, "drawToolTip", "OnCommonStaticHook10", false);
|
||||
|
||||
// On Dialogue hooks
|
||||
TypeDefinition typeDialogue = this.StardewValley.MainModule.GetType("StardewValley.Dialogue");
|
||||
this.ApplyCommonHookEntry(typeDialogue, ".ctor", "OnCommonHook", true, false, method => method.Parameters.Count == 2);
|
||||
|
||||
// On Building hooks
|
||||
TypeDefinition typeBuilding = this.StardewValley.MainModule.GetType("StardewValley.Buildings.Building");
|
||||
this.ApplyCommonHookEntry(typeBuilding, "load", "OnCommonHook");
|
||||
|
||||
// On GameLocation hooks
|
||||
TypeDefinition typeGameLocation = this.StardewValley.MainModule.GetType("StardewValley.GameLocation");
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "performTouchAction", "OnCommonHook");
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "isActionableTile", "OnCommonHook");
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "tryToAddCritters", "OnCommonHook");
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "performTouchAction", "OnCommonHook", true, false);
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "isActionableTile", "OnCommonHook", false);
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "tryToAddCritters", "OnCommonHook", true, false);
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "getSourceRectForObject", "OnCommonStaticHook");
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "answerDialogue", "OnCommonHook");
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "Equals", "OnCommonHook", true, false, (method)=> method.Parameters[0].ParameterType == this.GetTypeReference("StardewValley.GameLocation", this.StardewValley));
|
||||
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "answerDialogue", "OnCommonHook", true, false);
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "Equals", "OnCommonHook", true, false, method => method.Parameters[0].ParameterType == this.GetTypeReference("StardewValley.GameLocation", this.StardewValley));
|
||||
this.ApplyCommonHookEntry(typeGameLocation, "performAction", "OnCommonHook", true, false);
|
||||
|
||||
// On Objects.TV hooks
|
||||
TypeDefinition typeObjectsTV = this.StardewValley.MainModule.GetType("StardewValley.Objects.TV");
|
||||
this.ApplyCommonHookEntry(typeObjectsTV, "checkForAction", "OnCommonHook");
|
||||
|
||||
// On Furniture hooks
|
||||
TypeDefinition typeFurniture = this.StardewValley.MainModule.GetType("StardewValley.Objects.Furniture");
|
||||
this.ApplyCommonHookEntry(typeFurniture, "draw", "OnCommonHook", true, false);
|
||||
|
||||
//this.InsertModHook("OnGame1_Update_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Game1", this.StardewValley),
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.GameTime", this.MonoGame_Framework)},
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//this.ApplyHookEntry(typeGame1, "Update", "OnGame1_Update_Prefix", true);
|
||||
//this.InsertModHook("OnGame1_Update_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Game1", this.StardewValley),
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.GameTime", this.MonoGame_Framework)},
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//this.ApplyHookEntry(typeGame1, "Update", "OnGame1_Update_Postfix", false);
|
||||
// On ColoredObject hooks
|
||||
TypeDefinition typeColoredObject = this.StardewValley.MainModule.GetType("StardewValley.Objects.ColoredObject");
|
||||
this.ApplyCommonHookEntry(typeColoredObject, "drawInMenu", "OnCommonHook10", false);
|
||||
|
||||
this.InsertModHook("OnGame1_CreateContentManager_Prefix", new TypeReference[] {
|
||||
// On HoeDirt hooks
|
||||
TypeDefinition typeHoeDirt = this.StardewValley.MainModule.GetType("StardewValley.TerrainFeatures.HoeDirt");
|
||||
this.ApplyCommonHookEntry(typeHoeDirt, "dayUpdate", "OnCommonHook", true, false);
|
||||
|
||||
// On Utility hooks
|
||||
TypeDefinition typeUtility = this.StardewValley.MainModule.GetType("StardewValley.Utility");
|
||||
this.ApplyCommonHookEntry(typeUtility, "pickFarmEvent", "OnCommonStaticHook", false);
|
||||
|
||||
// On Farmer hooks
|
||||
TypeDefinition typeFarmer = this.StardewValley.MainModule.GetType("StardewValley.Farmer");
|
||||
this.ApplyCommonHookEntry(typeFarmer, "doneEating", "OnCommonHook", false);
|
||||
|
||||
// On MeleeWeapon hooks
|
||||
TypeDefinition typeMeleeWeapon = this.StardewValley.MainModule.GetType("StardewValley.Tools.MeleeWeapon");
|
||||
this.ApplyCommonHookEntry(typeMeleeWeapon, "drawDuringUse", "OnCommonStaticHook10", true, false, method => method.IsStatic);
|
||||
|
||||
// On Multiplayer hooks
|
||||
TypeDefinition typeMultiplayer = this.StardewValley.MainModule.GetType("StardewValley.Multiplayer");
|
||||
this.ApplyCommonHookEntry(typeMultiplayer, "processIncomingMessage", "OnCommonHook", true, false);
|
||||
|
||||
// On GameServer hooks
|
||||
TypeDefinition typeGameServer = this.StardewValley.MainModule.GetType("StardewValley.Network.GameServer");
|
||||
this.ApplyCommonHookEntry(typeGameServer, "sendServerIntroduction", "OnCommonHook", false);
|
||||
|
||||
// On NPC hooks
|
||||
TypeDefinition typeNPC = this.StardewValley.MainModule.GetType("StardewValley.NPC");
|
||||
this.ApplyCommonHookEntry(typeNPC, "receiveGift", "OnCommonHook10", false);
|
||||
|
||||
// On GameMenu hooks
|
||||
TypeDefinition definition19 = this.StardewValley.MainModule.GetType("StardewValley.Menus.GameMenu");
|
||||
this.ApplyCommonHookEntry(definition19, "getTabNumberFromName", "OnCommonHook", false);
|
||||
|
||||
// On FarmHouse hooks
|
||||
TypeDefinition definition20 = this.StardewValley.MainModule.GetType("StardewValley.Locations.FarmHouse");
|
||||
this.ApplyCommonHookEntry(definition20, "loadSpouseRoom", "OnCommonHook", true, false);
|
||||
|
||||
this.InsertModHook("OnGame1_CreateContentManager_Prefix", new[] {
|
||||
this.GetTypeReference("StardewValley.Game1", this.StardewValley),
|
||||
this.GetTypeReference("System.IServiceProvider"),
|
||||
this.GetTypeReference("System.String"),
|
||||
new ByReferenceType(this.GetTypeReference("StardewValley.LocalizedContentManager", this.StardewValley)) },
|
||||
new string[] { "game1", "serviceProvider", "rootDirectory", "__result"},
|
||||
new[] { "game1", "serviceProvider", "rootDirectory", "__result"},
|
||||
this.GetTypeReference("System.Boolean"));
|
||||
this.ApplyHookEntry(typeGame1, "CreateContentManager", "OnGame1_CreateContentManager_Prefix", true);
|
||||
|
||||
//this.InsertModHook("OnGame1__draw_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Game1", this.StardewValley),
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.GameTime", this.MonoGame_Framework),
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.Graphics.RenderTarget2D", this.MonoGame_Framework)},
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//this.ApplyHookEntry(typeGame1, "_draw", "OnGame1__draw_Prefix", true);
|
||||
|
||||
//this.InsertModHook("OnGame1_getSourceRectForStandardTileSheet_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.Graphics.Texture2D", this.MonoGame_Framework),
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// new ByReferenceType(this.GetTypeReference("Microsoft.Xna.Framework.Rectangle", this.MonoGame_Framework)) },
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//this.ApplyHookEntry(typeGame1, "getSourceRectForStandardTileSheet", "OnGame1_getSourceRectForStandardTileSheet_Prefix", true);
|
||||
|
||||
//this.InsertModHook("OnGame1_getSourceRectForStandardTileSheet_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.Graphics.Texture2D", this.MonoGame_Framework),
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// new ByReferenceType(this.GetTypeReference("Microsoft.Xna.Framework.Rectangle", this.MonoGame_Framework)) },
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//this.ApplyHookEntry(typeGame1, "getSourceRectForStandardTileSheet", "OnGame1_getSourceRectForStandardTileSheet_Postfix", false);
|
||||
|
||||
//this.InsertModHook("OnGame1_tryToCheckAt_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.Vector2", this.MonoGame_Framework),
|
||||
// this.GetTypeReference("StardewValley.Farmer", this.StardewValley),
|
||||
// new ByReferenceType(this.GetTypeReference("System.Boolean")) },
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//this.ApplyHookEntry(typeGame1, "tryToCheckAt", "OnGame1_tryToCheckAt_Postfix", false);
|
||||
|
||||
//this.InsertModHook("OnGame1_getLocationRequest_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("System.String"),
|
||||
// this.GetTypeReference("System.Boolean"),
|
||||
// new ByReferenceType(this.GetTypeReference("StardewValley.LocationRequest", this.StardewValley)) },
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//this.ApplyHookEntry(typeGame1, "getLocationRequest", "OnGame1_getLocationRequest_Prefix", true);
|
||||
|
||||
//// On Object hooks
|
||||
//this.InsertModHook("OnObject_canBePlacedHere_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Object", this.StardewValley),
|
||||
// this.GetTypeReference("StardewValley.GameLocation", this.StardewValley),
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.Vector2", this.MonoGame_Framework),
|
||||
// new ByReferenceType(this.GetTypeReference("System.Boolean")) },
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//TypeDefinition typeObject = this.StardewValley.MainModule.GetType("StardewValley.Object");
|
||||
//this.ApplyHookEntry(typeObject, "canBePlacedHere", "OnObject_canBePlacedHere_Prefix", true);
|
||||
|
||||
//this.InsertModHook("OnObject_checkForAction_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Object", this.StardewValley),
|
||||
// this.GetTypeReference("StardewValley.Farmer", this.StardewValley),
|
||||
// this.GetTypeReference("System.Boolean"),
|
||||
// new ByReferenceType(this.GetTypeReference("System.Boolean"))},
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//this.ApplyHookEntry(typeObject, "checkForAction", "OnObject_checkForAction_Prefix", true);
|
||||
|
||||
//this.InsertModHook("OnObject_isIndexOkForBasicShippedCategory_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// new ByReferenceType(this.GetTypeReference("System.Boolean")) },
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//this.ApplyHookEntry(typeObject, "isIndexOkForBasicShippedCategory", "OnObject_isIndexOkForBasicShippedCategory_Postfix", false);
|
||||
|
||||
//// On ReadyCheckDialog hooks
|
||||
//this.InsertModHook("OnReadyCheckDialog_update_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Menus.ReadyCheckDialog", this.StardewValley),
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.GameTime", this.MonoGame_Framework)},
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//TypeDefinition typeReadyCheckDialog = this.StardewValley.MainModule.GetType("StardewValley.Menus.ReadyCheckDialog");
|
||||
//this.ApplyHookEntry(typeReadyCheckDialog, "update", "OnReadyCheckDialog_update_Postfix", false);
|
||||
|
||||
//// On Building hooks
|
||||
//this.InsertModHook("OnBuilding_load_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Buildings.Building", this.StardewValley)},
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//TypeDefinition typeBuilding = this.StardewValley.MainModule.GetType("StardewValley.Buildings.Building");
|
||||
//this.ApplyHookEntry(typeBuilding, "load", "OnBuilding_load_Prefix", true);
|
||||
|
||||
//// On GameLocation hooks
|
||||
//this.InsertModHook("OnGameLocation_performTouchAction_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.GameLocation", this.StardewValley),
|
||||
// this.GetTypeReference("System.String"),
|
||||
// this.GetTypeReference("Microsoft.Xna.Framework.Vector2", this.MonoGame_Framework)},
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//TypeDefinition typeGameLocation = this.StardewValley.MainModule.GetType("StardewValley.GameLocation");
|
||||
//this.ApplyHookEntry(typeGameLocation, "performTouchAction", "OnGameLocation_performTouchAction_Postfix", false);
|
||||
|
||||
//this.InsertModHook("OnGameLocation_isActionableTile_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.GameLocation", this.StardewValley),
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// this.GetTypeReference("StardewValley.Farmer", this.StardewValley),
|
||||
// new ByReferenceType(this.GetTypeReference("System.Boolean"))},
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//this.ApplyHookEntry(typeGameLocation, "isActionableTile", "OnGameLocation_isActionableTile_Postfix", false);
|
||||
|
||||
//this.InsertModHook("OnGameLocation_tryToAddCritters_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.GameLocation", this.StardewValley),
|
||||
// this.GetTypeReference("System.Boolean")},
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//this.ApplyHookEntry(typeGameLocation, "tryToAddCritters", "OnGameLocation_tryToAddCritters_Prefix", true);
|
||||
|
||||
//this.InsertModHook("OnGameLocation_getSourceRectForObject_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// new ByReferenceType(this.GetTypeReference("Microsoft.Xna.Framework.Rectangle", this.MonoGame_Framework)) },
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//this.ApplyHookEntry(typeGameLocation, "getSourceRectForObject", "OnGameLocation_getSourceRectForObject_Prefix", true);
|
||||
|
||||
//this.InsertModHook("OnGameLocation_getSourceRectForObject_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("System.Int32"),
|
||||
// new ByReferenceType(this.GetTypeReference("Microsoft.Xna.Framework.Rectangle", this.MonoGame_Framework)) },
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//this.ApplyHookEntry(typeGameLocation, "getSourceRectForObject", "OnGameLocation_getSourceRectForObject_Postfix", false);
|
||||
|
||||
//this.InsertModHook("OnGameLocation_answerDialogue_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.GameLocation", this.StardewValley),
|
||||
// this.GetTypeReference("StardewValley.Response", this.StardewValley),
|
||||
// new ByReferenceType(this.GetTypeReference("System.Boolean"))},
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//this.ApplyHookEntry(typeGameLocation, "answerDialogue", "OnGameLocation_answerDialogue_Prefix", true);
|
||||
|
||||
//// On Objects.TV hooks
|
||||
//this.InsertModHook("OnObjectsTV_checkForAction_Prefix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Objects.TV", this.StardewValley),
|
||||
// this.GetTypeReference("StardewValley.Farmer", this.StardewValley),
|
||||
// this.GetTypeReference("System.Boolean"),
|
||||
// new ByReferenceType(this.GetTypeReference("System.Boolean"))},
|
||||
// this.GetTypeReference("System.Boolean"));
|
||||
//TypeDefinition typeObjectsTV = this.StardewValley.MainModule.GetType("StardewValley.Objects.TV");
|
||||
//this.ApplyHookEntry(typeObjectsTV, "checkForAction", "OnObjectsTV_checkForAction_Prefix", true);
|
||||
|
||||
//this.InsertModHook("OnObjectsTV_checkForAction_Postfix", new TypeReference[] {
|
||||
// this.GetTypeReference("StardewValley.Objects.TV", this.StardewValley),
|
||||
// this.GetTypeReference("StardewValley.Farmer", this.StardewValley),
|
||||
// this.GetTypeReference("System.Boolean"),
|
||||
// new ByReferenceType(this.GetTypeReference("System.Boolean"))},
|
||||
// this.GetTypeReference("System.Void"));
|
||||
//this.ApplyHookEntry(typeObjectsTV, "checkForAction", "OnObjectsTV_checkForAction_Postfix", false);
|
||||
|
||||
|
||||
return this.StardewValley;
|
||||
}
|
||||
}
|
||||
|
|
302
src/Mod.csproj
302
src/Mod.csproj
|
@ -434,65 +434,93 @@
|
|||
<Compile Include="SMAPI\Context.cs" />
|
||||
<Compile Include="SMAPI\Enums\LoadStage.cs" />
|
||||
<Compile Include="SMAPI\Enums\SkillType.cs" />
|
||||
<Compile Include="SMAPI\Events\BuildingListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ButtonPressedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ButtonReleasedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ChangeType.cs" />
|
||||
<Compile Include="SMAPI\Events\CursorMovedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\DayEndingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\DayStartedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\DebrisListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLaunchedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\IHookEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\IDisplayEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\IGameLoopEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\IInputEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\GraphicsEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\IDisplayEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\RenderedActiveMenuEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\RenderedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\RenderedHudEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\RenderedWorldEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\RenderingActiveMenuEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\RenderingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\RenderingHudEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\RenderingWorldEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Display\WindowResizedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\DayEndingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\DayStartedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\GameEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\GameLaunchedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\IGameLoopEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\OneSecondUpdateTickedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\OneSecondUpdateTickingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\ReturnedToTitleEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\SaveCreatedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\SaveCreatingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\SavedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\SaveEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\SaveLoadedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\SavingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\TimeChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\TimeEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\UpdateTickedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\GameLoop\UpdateTickingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\IModEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\IMultiplayerEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\InventoryChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\IPlayerEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\ISpecialisedEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\ItemStackChange.cs" />
|
||||
<Compile Include="SMAPI\Events\ItemStackSizeChange.cs" />
|
||||
<Compile Include="SMAPI\Events\IWorldEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\LargeTerrainFeatureListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\LevelChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\LoadStageChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\LocationListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\MenuChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ModMessageReceivedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\MouseWheelScrolledEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\NpcListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ObjectCheckForActionEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ObjectIsIndexOkForBasicShippedCategoryEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ObjectListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\OneSecondUpdateTickedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\OneSecondUpdateTickingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\PeerContextReceivedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\PeerDisconnectedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\RenderedActiveMenuEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\RenderedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\RenderedHudEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\RenderedWorldEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\RenderingActiveMenuEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\RenderingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\RenderingHudEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\RenderingWorldEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ReturnedToTitleEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\SaveCreatedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\SaveCreatingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\SavedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\SaveLoadedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\SavingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\TerrainFeatureListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\TimeChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\UnvalidatedUpdateTickedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\UnvalidatedUpdateTickingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\UpdateTickedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\UpdateTickingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\WarpedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\ObjectCanBePlacedHereEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\WindowResizedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\ButtonPressedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\ButtonReleasedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\ControlEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\CursorMovedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\EventArgsControllerButtonPressed.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\EventArgsControllerButtonReleased.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\EventArgsControllerTriggerPressed.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\EventArgsControllerTriggerReleased.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\EventArgsInput.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\EventArgsKeyboardStateChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\EventArgsKeyPressed.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\EventArgsMouseStateChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\IInputEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\InputEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Input\MouseWheelScrolledEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Menu\EventArgsClickableMenuChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\Menu\EventArgsClickableMenuClosed.cs" />
|
||||
<Compile Include="SMAPI\Events\Menu\MenuChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Menu\MenuEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Mine\EventArgsMineLevelChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\Mine\MineEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Multiplayer\IMultiplayerEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Multiplayer\ModMessageReceivedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Multiplayer\MultiplayerEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Multiplayer\PeerContextReceivedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Multiplayer\PeerDisconnectedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\EventArgsInventoryChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\EventArgsLevelUp.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\EventArgsPlayerWarped.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\InventoryChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\IPlayerEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\ItemStackChange.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\ItemStackSizeChange.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\LevelChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\PlayerEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Player\WarpedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Specialised\ContentEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Specialised\EventArgsIntChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\Specialised\EventArgsValueChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\Specialised\ISpecialisedEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Specialised\LoadStageChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Specialised\SpecialisedEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\Specialised\UnvalidatedUpdateTickedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\Specialised\UnvalidatedUpdateTickingEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\World\BuildingListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\World\ChangeType.cs" />
|
||||
<Compile Include="SMAPI\Events\World\DebrisListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\World\EventArgsLocationBuildingsChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\World\EventArgsLocationObjectsChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\World\EventArgsLocationsChanged.cs" />
|
||||
<Compile Include="SMAPI\Events\World\IWorldEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\World\LargeTerrainFeatureListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\World\LocationEvents.cs" />
|
||||
<Compile Include="SMAPI\Events\World\LocationListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\World\NpcListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\World\ObjectListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Events\World\TerrainFeatureListChangedEventArgs.cs" />
|
||||
<Compile Include="SMAPI\Framework\Command.cs" />
|
||||
<Compile Include="SMAPI\Framework\CommandManager.cs" />
|
||||
<Compile Include="SMAPI\Framework\ContentCoordinator.cs" />
|
||||
|
@ -513,11 +541,11 @@
|
|||
<Compile Include="SMAPI\Framework\DeprecationWarning.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\EventManager.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ManagedEvent.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ManagedEventBase.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ModDisplayEvents.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ModEvents.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ModEventsBase.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ModGameLoopEvents.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ModHookEvents.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ModInputEvents.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ModMultiplayerEvents.cs" />
|
||||
<Compile Include="SMAPI\Framework\Events\ModPlayerEvents.cs" />
|
||||
|
@ -592,6 +620,9 @@
|
|||
<Compile Include="SMAPI\Framework\Reflection\ReflectedProperty.cs" />
|
||||
<Compile Include="SMAPI\Framework\Reflection\Reflector.cs" />
|
||||
<Compile Include="SMAPI\Framework\RequestExitDelegate.cs" />
|
||||
<Compile Include="SMAPI\Framework\RewriteFacades\FarmerMethods.cs" />
|
||||
<Compile Include="SMAPI\Framework\RewriteFacades\Game1Methods.cs" />
|
||||
<Compile Include="SMAPI\Framework\RewriteFacades\IClickableMenuMethods.cs" />
|
||||
<Compile Include="SMAPI\Framework\RewriteFacades\SpriteBatchMethods.cs" />
|
||||
<Compile Include="SMAPI\Framework\SCore.cs" />
|
||||
<Compile Include="SMAPI\Framework\Serialisation\ColorConverter.cs" />
|
||||
|
@ -702,123 +733,128 @@
|
|||
<Compile Include="SMAPI\Utilities\SDate.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="BmFont, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\BmFont.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Android.Vending.Expansion.Downloader, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Google.Android.Vending.Expansion.Downloader.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Android.Vending.Expansion.ZipFile, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Google.Android.Vending.Expansion.ZipFile.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Android.Vending.Licensing, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Google.Android.Vending.Licensing.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Java.Interop.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Microsoft.AppCenter.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Analytics, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Microsoft.AppCenter.Analytics.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Analytics.Android.Bindings, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Microsoft.AppCenter.Analytics.Android.Bindings.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Android.Bindings, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Microsoft.AppCenter.Android.Bindings.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Crashes, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Microsoft.AppCenter.Crashes.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Crashes.Android.Bindings, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Microsoft.AppCenter.Crashes.Android.Bindings.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Mono.Android.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Mono.Security, Version=2.0.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Mono.Security.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MonoGame.Framework, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\MonoGame.Framework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="StardewValley">
|
||||
<HintPath>..\Mods\assemblies\StardewValley.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="BmFont, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\BmFont.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Android.Vending.Expansion.Downloader, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Google.Android.Vending.Expansion.Downloader.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Android.Vending.Expansion.ZipFile, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Google.Android.Vending.Expansion.ZipFile.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Google.Android.Vending.Licensing, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Google.Android.Vending.Licensing.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Java.Interop.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Microsoft.AppCenter.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Analytics, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Microsoft.AppCenter.Analytics.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Analytics.Android.Bindings, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Microsoft.AppCenter.Analytics.Android.Bindings.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Android.Bindings, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Microsoft.AppCenter.Android.Bindings.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Crashes, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Microsoft.AppCenter.Crashes.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AppCenter.Crashes.Android.Bindings, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Microsoft.AppCenter.Crashes.Android.Bindings.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Mono.Android.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Mono.Security, Version=2.0.5.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\Mono.Security.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MonoGame.Framework, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\Mods\assemblies\MonoGame.Framework.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
|
||||
<HintPath>..\Mods\assemblies\mscorlib.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
|
||||
<HintPath>..\..\assemblies\System.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\System.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
|
||||
<HintPath>..\..\assemblies\System.Xml</HintPath>
|
||||
<HintPath>..\Mods\assemblies\System.Xml</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
|
||||
<HintPath>..\Mods\assemblies\System.Xml.Linq</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<HintPath>..\..\assemblies\System.Net.Http.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ServiceModel.Internals">
|
||||
<HintPath>..\..\assemblies\System.ServiceModel.Internals.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\System.Net.Http.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.Serialization, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e">
|
||||
<HintPath>..\..\assemblies\System.Runtime.Serialization.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\System.Runtime.Serialization.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Arch.Core.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Arch.Core.Common.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Arch.Core.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Arch.Lifecycle.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Arch.Lifecycle.Common.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Arch.Lifecycle.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Arch.Lifecycle.Runtime, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Arch.Lifecycle.Runtime.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Arch.Lifecycle.Runtime.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Support.Annotations, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Support.Annotations.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Support.Annotations.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Support.Compat, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Support.Compat.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Support.Compat.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Support.Core.UI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Support.Core.UI.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Support.Core.UI.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Support.Core.Utils, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Support.Core.Utils.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Support.Core.Utils.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Support.Fragment, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Support.Fragment.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Support.Fragment.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Support.Media.Compat, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Support.Media.Compat.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Support.Media.Compat.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xamarin.Android.Support.v4, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\Xamarin.Android.Support.v4.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\Xamarin.Android.Support.v4.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="xTile, Version=1.0.7033.16602, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\assemblies\xTile.dll</HintPath>
|
||||
<HintPath>..\Mods\assemblies\xTile.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
@ -8,6 +8,7 @@ using System.IO;
|
|||
using StardewValley.Menus;
|
||||
using StardewValley.Buildings;
|
||||
using StardewValley.Objects;
|
||||
using StardewModdingAPI.Patches;
|
||||
|
||||
namespace SMDroid
|
||||
{
|
||||
|
@ -57,7 +58,17 @@ namespace SMDroid
|
|||
return this.core.GameInstance.Update(param1 as GameTime);
|
||||
case "StardewValley.Game1._draw":
|
||||
return this.core.GameInstance.Draw(param1 as GameTime, param2 as RenderTarget2D);
|
||||
case "StardewValley.Object.getDescription":
|
||||
if (!ObjectErrorPatch.Object_GetDescription_Prefix(__instance as StardewValley.Object, ref __result))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
if ((hookName == "StardewValley.Dialogue..ctor") && !DialogueErrorPatch.Prefix(__instance as Dialogue, (string)param1, param2 as NPC))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return this.core.GameInstance.OnCommonHook_Prefix(hookName, __instance, ref param1, ref param2, ref param3, ref param4, ref __result);
|
||||
}
|
||||
}
|
||||
|
@ -81,6 +92,29 @@ namespace SMDroid
|
|||
{
|
||||
this.core.GameInstance.OnCommonStaticHook_Postfix(hookName, ref param1, ref param2, ref param3, ref param4, ref param5, ref __state, ref __result);
|
||||
}
|
||||
public override void OnCommonHook10_Postfix(string hookName, object __instance, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref bool __state, ref object __result)
|
||||
{
|
||||
this.core.GameInstance.OnCommonHook10_Postfix(hookName, __instance, ref param1, ref param2, ref param3, ref param4, ref param5, ref param6, ref param7, ref param8, ref param9, ref __state, ref __result);
|
||||
}
|
||||
public override bool OnCommonHook10_Prefix(string hookName, object __instance, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object __result)
|
||||
{
|
||||
if ((hookName == "StardewValley.Menus.IClickableMenu.drawToolTip") && !ObjectErrorPatch.IClickableMenu_DrawTooltip_Prefix(__instance as IClickableMenu, param4 as Item))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return this.core.GameInstance.OnCommonHook10_Prefix(hookName, __instance, ref param1, ref param2, ref param3, ref param4, ref param5, ref param6, ref param7, ref param8, ref param9, ref __result);
|
||||
}
|
||||
public override void OnCommonStaticHook10_Postfix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object param10, ref bool __state, ref object __result)
|
||||
{
|
||||
this.core.GameInstance.OnCommonStaticHook10_Postfix(hookName, ref param1, ref param2, ref param3, ref param4, ref param5, ref param6, ref param7, ref param8, ref param9, ref param10, ref __state, ref __result);
|
||||
}
|
||||
|
||||
public override bool OnCommonStaticHook10_Prefix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object param10, ref object __result)
|
||||
{
|
||||
return this.core.GameInstance.OnCommonStaticHook10_Prefix(hookName, ref param1, ref param2, ref param3, ref param4, ref param5, ref param6, ref param7, ref param8, ref param9, ref param10, ref __result);
|
||||
}
|
||||
|
||||
|
||||
public override void OnGame1_NewDayAfterFade(Action action)
|
||||
{
|
||||
this.core.GameInstance.OnNewDayAfterFade();
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace StardewModdingAPI.Framework.ModHelpers
|
|||
/// <exception cref="InvalidOperationException">The <paramref name="path"/> is not relative or contains directory climbing (../).</exception>
|
||||
public TModel ReadJsonFile<TModel>(string path) where TModel : class
|
||||
{
|
||||
if (!PathUtilities.IsSafeRelativePath(path))
|
||||
if ((this.ModID != "Platonymous.ScaleUp") && !PathUtilities.IsSafeRelativePath(path))
|
||||
throw new InvalidOperationException($"You must call {nameof(IModHelper.Data)}.{nameof(this.ReadJsonFile)} with a relative path.");
|
||||
|
||||
path = Path.Combine(this.ModFolderPath, PathUtilities.NormalisePathSeparators(path));
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StardewModdingAPI.SMAPI.Framework.ModLoading
|
||||
{
|
||||
class RewriteIgnoreConfig
|
||||
{
|
||||
public Dictionary<string, string> Ignore { get; set; } = new Dictionary<string, string>();
|
||||
}
|
||||
}
|
|
@ -239,11 +239,11 @@ namespace StardewModdingAPI.Framework
|
|||
);
|
||||
StardewValley.Program.gamePtr = Game1.game1;
|
||||
// apply game patches
|
||||
//new GamePatcher(this.Monitor).Apply(
|
||||
// new DialogueErrorPatch(this.MonitorForGame, this.Reflection),
|
||||
// new ObjectErrorPatch(),
|
||||
// new LoadForNewGamePatch(this.Reflection, this.GameInstance.OnLoadStageChanged)
|
||||
//);
|
||||
new GamePatcher(this.Monitor).Apply(
|
||||
new DialogueErrorPatch(this.MonitorForGame, this.Reflection),
|
||||
new ObjectErrorPatch(),
|
||||
new LoadForNewGamePatch(this.Reflection, this.GameInstance.OnLoadStageChanged)
|
||||
);
|
||||
|
||||
//// add exit handler
|
||||
//new Thread(() =>
|
||||
|
|
|
@ -114,6 +114,44 @@ namespace StardewModdingAPI.Framework
|
|||
}
|
||||
return true;
|
||||
}
|
||||
internal void OnCommonHook10_Postfix(string hookName, object instance, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref bool state, ref object result)
|
||||
{
|
||||
foreach (IMod mod in this.HookReceiver)
|
||||
{
|
||||
mod.OnCommonHook10_Postfix(hookName, instance, ref param1, ref param2, ref param3, ref param4, ref param5, ref param6, ref param7, ref param8, ref param9, ref state, ref result);
|
||||
}
|
||||
}
|
||||
internal bool OnCommonHook10_Prefix(string hookName, object instance, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object result)
|
||||
{
|
||||
foreach (IMod mod in this.HookReceiver)
|
||||
{
|
||||
if (!mod.OnCommonHook10_Prefix(hookName, instance, ref param1, ref param2, ref param3, ref param4, ref param5, ref param6, ref param7, ref param8, ref param9, ref result))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
internal void OnCommonStaticHook10_Postfix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object param10, ref bool state, ref object result)
|
||||
{
|
||||
foreach (IMod mod in this.HookReceiver)
|
||||
{
|
||||
mod.OnCommonStaticHook10_Postfix(hookName, ref param1, ref param2, ref param3, ref param4, ref param5, ref param6, ref param7, ref param8, ref param9, ref param10, ref state, ref result);
|
||||
}
|
||||
}
|
||||
|
||||
internal bool OnCommonStaticHook10_Prefix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object param10, ref object result)
|
||||
{
|
||||
foreach (IMod mod in this.HookReceiver)
|
||||
{
|
||||
if (!mod.OnCommonStaticHook10_Prefix(hookName, ref param1, ref param2, ref param3, ref param4, ref param5, ref param6, ref param7, ref param8, ref param9, ref param10, ref result))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>Whether the game is saving and SMAPI has already raised <see cref="IGameLoopEvents.Saving"/>.</summary>
|
||||
private bool IsBetweenSaveEvents;
|
||||
|
@ -1137,7 +1175,6 @@ namespace StardewModdingAPI.Framework
|
|||
IReflectedMethod DrawTutorialUI = this.Reflection.GetMethod(Game1.game1, "DrawTutorialUI", new Type[] { });
|
||||
IReflectedMethod DrawGreenPlacementBounds = this.Reflection.GetMethod(Game1.game1, "DrawGreenPlacementBounds", new Type[] { });
|
||||
|
||||
Matrix matrix;
|
||||
_drawHUD.SetValue(false);
|
||||
_drawActiveClickableMenu.SetValue(false);
|
||||
if (this.Reflection.GetField<Task>(typeof(Game1), "_newDayTask").GetValue() != null)
|
||||
|
@ -1145,9 +1182,9 @@ namespace StardewModdingAPI.Framework
|
|||
Game1.game1.GraphicsDevice.Clear(bgColor.GetValue());
|
||||
if (Game1.showInterDayScroll)
|
||||
{
|
||||
matrix = Matrix.CreateScale((float)1f);
|
||||
Game1.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null, new Matrix?(matrix));
|
||||
SpriteText.drawStringWithScrollCenteredAt(Game1.spriteBatch, Game1.content.LoadString(@"Strings\UI:please_wait"), Game1.game1.GraphicsDevice.Viewport.Width / 2, Game1.game1.GraphicsDevice.Viewport.Height / 2, "", 1f, -1, 0, 0.088f, false);
|
||||
Matrix value = Matrix.CreateScale(1f);
|
||||
Game1.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null, new Matrix?(value));
|
||||
SpriteText.drawStringWithScrollCenteredAt(Game1.spriteBatch, Game1.content.LoadString("Strings\\UI:please_wait"), Game1.game1.GraphicsDevice.Viewport.Width / 2, Game1.game1.GraphicsDevice.Viewport.Height / 2, "", 1f, -1, 0, 0.088f, false);
|
||||
Game1.spriteBatch.End();
|
||||
}
|
||||
}
|
||||
|
@ -1246,7 +1283,7 @@ namespace StardewModdingAPI.Framework
|
|||
Game1.game1.GraphicsDevice.Clear(bgColor.GetValue());
|
||||
if (((Game1.activeClickableMenu != null) && Game1.options.showMenuBackground) && Game1.activeClickableMenu.showWithoutTransparencyIfOptionIsSet())
|
||||
{
|
||||
matrix = Matrix.CreateScale((float)1f);
|
||||
Matrix matrix = Matrix.CreateScale((float)1f);
|
||||
Game1.SetSpriteBatchBeginNextID("C");
|
||||
_spriteBatchBegin.Invoke(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null, new Matrix?(matrix));
|
||||
events.Rendering.RaiseEmpty();
|
||||
|
|
|
@ -35,6 +35,10 @@ namespace StardewModdingAPI
|
|||
void OnCommonHook_Postfix(string hookName, object __instance, ref object param1, ref object param2, ref object param3, ref object param4, ref bool __state, ref object __result);
|
||||
bool OnCommonStaticHook_Prefix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object __result);
|
||||
void OnCommonStaticHook_Postfix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref bool __state, ref object __result);
|
||||
void OnCommonHook10_Postfix(string hookName, object __instance, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref bool __state, ref object __result);
|
||||
bool OnCommonHook10_Prefix(string hookName, object __instance, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object __result);
|
||||
void OnCommonStaticHook10_Postfix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object param10, ref bool __state, ref object __result);
|
||||
bool OnCommonStaticHook10_Prefix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object param10, ref object __result);
|
||||
|
||||
/// <summary>Get an API that other mods can access. This is always called after <see cref="Entry"/>.</summary>
|
||||
object GetApi();
|
||||
|
|
|
@ -51,6 +51,10 @@ namespace StardewModdingAPI
|
|||
public virtual void OnCommonStaticHook_Postfix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref bool __state, ref object __result)
|
||||
{
|
||||
}
|
||||
public virtual void OnCommonHook10_Postfix(string hookName, object __instance, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref bool __state, ref object __result) { }
|
||||
public virtual bool OnCommonHook10_Prefix(string hookName, object __instance, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object __result) { return true; }
|
||||
public virtual void OnCommonStaticHook10_Postfix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object param10, ref bool __state, ref object __result) { }
|
||||
public virtual bool OnCommonStaticHook10_Prefix(string hookName, ref object param1, ref object param2, ref object param3, ref object param4, ref object param5, ref object param6, ref object param7, ref object param8, ref object param9, ref object param10, ref object __result) { return true; }
|
||||
|
||||
|
||||
/// <summary>Get an API that other mods can access. This is always called after <see cref="Entry"/>.</summary>
|
||||
|
|
|
@ -46,10 +46,10 @@ namespace StardewModdingAPI.Patches
|
|||
/// <param name="harmony">The Harmony instance.</param>
|
||||
public void Apply(HarmonyInstance harmony)
|
||||
{
|
||||
ConstructorInfo constructor = AccessTools.Constructor(typeof(Dialogue), new[] { typeof(string), typeof(NPC) });
|
||||
MethodInfo prefix = AccessTools.Method(this.GetType(), nameof(DialogueErrorPatch.Prefix));
|
||||
//ConstructorInfo constructor = AccessTools.Constructor(typeof(Dialogue), new[] { typeof(string), typeof(NPC) });
|
||||
//MethodInfo prefix = AccessTools.Method(this.GetType(), nameof(DialogueErrorPatch.Prefix));
|
||||
|
||||
harmony.Patch(constructor, new HarmonyMethod(prefix), null);
|
||||
//harmony.Patch(constructor, new HarmonyMethod(prefix), null);
|
||||
}
|
||||
|
||||
|
||||
|
@ -63,7 +63,7 @@ namespace StardewModdingAPI.Patches
|
|||
/// <returns>Returns whether to execute the original method.</returns>
|
||||
/// <remarks>This method must be static for Harmony to work correctly. See the Harmony documentation before renaming arguments.</remarks>
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming", Justification = "Argument names are defined by Harmony.")]
|
||||
private static bool Prefix(Dialogue __instance, string masterDialogue, NPC speaker)
|
||||
public static bool Prefix(Dialogue __instance, string masterDialogue, NPC speaker)
|
||||
{
|
||||
// get private members
|
||||
bool nameArraysTranslated = DialogueErrorPatch.Reflection.GetField<bool>(typeof(Dialogue), "nameArraysTranslated").GetValue();
|
||||
|
|
|
@ -55,11 +55,11 @@ namespace StardewModdingAPI.Patches
|
|||
/// <param name="harmony">The Harmony instance.</param>
|
||||
public void Apply(HarmonyInstance harmony)
|
||||
{
|
||||
MethodInfo method = AccessTools.Method(typeof(Game1), nameof(Game1.loadForNewGame));
|
||||
MethodInfo prefix = AccessTools.Method(this.GetType(), nameof(LoadForNewGamePatch.Prefix));
|
||||
MethodInfo postfix = AccessTools.Method(this.GetType(), nameof(LoadForNewGamePatch.Postfix));
|
||||
//MethodInfo method = AccessTools.Method(typeof(Game1), nameof(Game1.loadForNewGame));
|
||||
//MethodInfo prefix = AccessTools.Method(this.GetType(), nameof(LoadForNewGamePatch.Prefix));
|
||||
//MethodInfo postfix = AccessTools.Method(this.GetType(), nameof(LoadForNewGamePatch.Postfix));
|
||||
|
||||
harmony.Patch(method, new HarmonyMethod(prefix), new HarmonyMethod(postfix));
|
||||
//harmony.Patch(method, new HarmonyMethod(prefix), new HarmonyMethod(postfix));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -25,16 +25,16 @@ namespace StardewModdingAPI.Patches
|
|||
public void Apply(HarmonyInstance harmony)
|
||||
{
|
||||
// object.getDescription
|
||||
harmony.Patch(
|
||||
original: AccessTools.Method(typeof(SObject), nameof(SObject.getDescription)),
|
||||
prefix: new HarmonyMethod(AccessTools.Method(this.GetType(), nameof(ObjectErrorPatch.Object_GetDescription_Prefix)))
|
||||
);
|
||||
//harmony.Patch(
|
||||
// original: AccessTools.Method(typeof(SObject), nameof(SObject.getDescription)),
|
||||
// prefix: new HarmonyMethod(AccessTools.Method(this.GetType(), nameof(ObjectErrorPatch.Object_GetDescription_Prefix)))
|
||||
//);
|
||||
|
||||
// IClickableMenu.drawToolTip
|
||||
harmony.Patch(
|
||||
original: AccessTools.Method(typeof(IClickableMenu), nameof(IClickableMenu.drawToolTip)),
|
||||
prefix: new HarmonyMethod(AccessTools.Method(this.GetType(), nameof(ObjectErrorPatch.IClickableMenu_DrawTooltip_Prefix)))
|
||||
);
|
||||
//// IClickableMenu.drawToolTip
|
||||
//harmony.Patch(
|
||||
// original: AccessTools.Method(typeof(IClickableMenu), nameof(IClickableMenu.drawToolTip)),
|
||||
// prefix: new HarmonyMethod(AccessTools.Method(this.GetType(), nameof(ObjectErrorPatch.IClickableMenu_DrawTooltip_Prefix)))
|
||||
//);
|
||||
}
|
||||
|
||||
|
||||
|
@ -47,7 +47,7 @@ namespace StardewModdingAPI.Patches
|
|||
/// <returns>Returns whether to execute the original method.</returns>
|
||||
/// <remarks>This method must be static for Harmony to work correctly. See the Harmony documentation before renaming arguments.</remarks>
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming", Justification = "Argument names are defined by Harmony.")]
|
||||
private static bool Object_GetDescription_Prefix(SObject __instance, ref string __result)
|
||||
public static bool Object_GetDescription_Prefix(SObject __instance, ref object __result)
|
||||
{
|
||||
// invalid bigcraftables crash instead of showing '???' like invalid non-bigcraftables
|
||||
if (!__instance.IsRecipe && __instance.bigCraftable.Value && !Game1.bigCraftablesInformation.ContainsKey(__instance.ParentSheetIndex))
|
||||
|
@ -65,7 +65,7 @@ namespace StardewModdingAPI.Patches
|
|||
/// <returns>Returns whether to execute the original method.</returns>
|
||||
/// <remarks>This method must be static for Harmony to work correctly. See the Harmony documentation before renaming arguments.</remarks>
|
||||
[SuppressMessage("ReSharper", "InconsistentNaming", Justification = "Argument names are defined by Harmony.")]
|
||||
private static bool IClickableMenu_DrawTooltip_Prefix(IClickableMenu __instance, Item hoveredItem)
|
||||
public static bool IClickableMenu_DrawTooltip_Prefix(IClickableMenu __instance, Item hoveredItem)
|
||||
{
|
||||
// invalid edible item cause crash when drawing tooltips
|
||||
if (hoveredItem is SObject obj && obj.Edibility != -300 && !Game1.objectInformation.ContainsKey(obj.ParentSheetIndex))
|
||||
|
|
Loading…
Reference in New Issue