forked from Digus/StardewValleyMods
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCropTransplantModEntry.cs
106 lines (89 loc) · 4.58 KB
/
CropTransplantModEntry.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using Harmony;
using Microsoft.Xna.Framework;
using StardewModdingAPI;
using StardewModdingAPI.Events;
using StardewValley;
using StardewValley.TerrainFeatures;
namespace CropTransplantMod
{
/// <summary>The mod entry class loaded by SMAPI.</summary>
public class CropTransplantModEntry : Mod
{
public static IMonitor ModMonitor;
public static IModEvents Events;
/*********
** Public methods
*********/
/// <summary>The mod entry point, called after the mod is first loaded.</summary>
/// <param name="helper">Provides simplified APIs for writing mods.</param>
public override void Entry(IModHelper helper)
{
ModMonitor = Monitor;
Events = helper.Events;
helper.Events.GameLoop.GameLaunched += OnGameLaunched;
helper.Events.GameLoop.Saving += OnSaving;
}
/*********
** Private methods
*********/
/// <summary>Raised after the game is launched, right before the first update tick. This happens once per game session (unrelated to loading saves). All mods are loaded and initialised at this point, so this is a good time to set up mod integrations.</summary>
/// <param name="sender">The event sender.</param>
/// <param name="e">The event data.</param>
private void OnGameLaunched(object sender, GameLaunchedEventArgs e)
{
new DataLoader(Helper, ModManifest);
var harmony = HarmonyInstance.Create("Digus.CropTransplantMod");
harmony.Patch(
original: AccessTools.Method(typeof(Utility), nameof(Utility.tryToPlaceItem)),
prefix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.TryToPlaceItem))
);
harmony.Patch(
original: AccessTools.Method(typeof(Utility), nameof(Utility.canGrabSomethingFromHere)),
prefix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.CanGrabSomethingFromHere))
);
harmony.Patch(
original: AccessTools.Method(typeof(Utility), nameof(Utility.playerCanPlaceItemHere)),
prefix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.PlayerCanPlaceItemHere))
);
harmony.Patch(
original: AccessTools.Method(typeof(HoeDirt), nameof(HoeDirt.performUseAction)),
prefix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.PerformUseAction))
);
harmony.Patch(
original: AccessTools.Method(typeof(Tree), nameof(Tree.performUseAction)),
postfix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.TreeOrBushPerformUseAction))
);
harmony.Patch(
original: AccessTools.Method(typeof(FruitTree), nameof(FruitTree.performUseAction)),
postfix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.TreeOrBushPerformUseAction))
);
harmony.Patch(
original: AccessTools.Method(typeof(Bush), nameof(Bush.performUseAction)),
postfix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.TreeOrBushPerformUseAction))
);
harmony.Patch(
original: AccessTools.Method(typeof(Game1), nameof(Game1.pressUseToolButton)),
prefix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.PressUseToolButton))
);
if (DataLoader.ModConfig.EnableSoilTileUnderTrees)
{
harmony.Patch(
original: AccessTools.Method(typeof(Tree), nameof(Tree.draw)),
prefix: new HarmonyMethod(typeof(TransplantOverrides), nameof(TransplantOverrides.PreTreeDraw))
);
}
}
/// <summary>Raised before the game begins writes data to the save file (except the initial save creation).</summary>
/// <param name="sender">The event sender.</param>
/// <param name="e">The event data.</param>
private void OnSaving(object sender, SavingEventArgs e)
{
if (Game1.player.ActiveObject is HeldIndoorPot)
{
Game1.player.ActiveObject = (Object)TransplantOverrides.RegularPotObject.getOne();
Events.GameLoop.UpdateTicked -= TransplantOverrides.OnUpdateTicked;
TransplantOverrides.CurrentHeldIndoorPot = null;
}
}
}
}