public override void Entry(IModHelper helper) { config = Helper.ReadConfig <ModConfig>(); if (!config.EnableMod) { return; } SMonitor = Monitor; myRand = new Random(); SwimPatches.Initialize(Monitor, helper, config); SwimDialog.Initialize(Monitor, helper, config); SwimMaps.Initialize(Monitor, helper, config); SwimHelperEvents.Initialize(Monitor, helper, config); SwimUtils.Initialize(Monitor, helper, config); helper.Events.GameLoop.UpdateTicked += SwimHelperEvents.GameLoop_UpdateTicked; helper.Events.Input.ButtonPressed += SwimHelperEvents.Input_ButtonPressed; helper.Events.Input.ButtonReleased += SwimHelperEvents.Input_ButtonReleased; helper.Events.GameLoop.DayStarted += SwimHelperEvents.GameLoop_DayStarted; helper.Events.GameLoop.GameLaunched += SwimHelperEvents.GameLoop_GameLaunched; helper.Events.GameLoop.SaveLoaded += SwimHelperEvents.GameLoop_SaveLoaded; helper.Events.Display.RenderedHud += SwimHelperEvents.Display_RenderedHud; helper.Events.Display.RenderedWorld += SwimHelperEvents.Display_RenderedWorld; helper.Events.Player.InventoryChanged += SwimHelperEvents.Player_InventoryChanged; helper.Events.Player.Warped += SwimHelperEvents.Player_Warped; var harmony = HarmonyInstance.Create(this.ModManifest.UniqueID); harmony.Patch( original: AccessTools.Method(typeof(FarmerRenderer), nameof(FarmerRenderer.draw), new Type[] { typeof(SpriteBatch), typeof(FarmerSprite.AnimationFrame), typeof(int), typeof(Rectangle), typeof(Vector2), typeof(Vector2), typeof(float), typeof(int), typeof(Color), typeof(float), typeof(float), typeof(Farmer) }), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.FarmerRenderer_draw_Prefix)), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.FarmerRenderer_draw_Postfix)) ); harmony.Patch( original: AccessTools.Method(typeof(FarmerSprite), "checkForFootstep"), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.FarmerSprite_checkForFootstep_Prefix)) ); harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.startEvent)), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_StartEvent_Postfix)) ); harmony.Patch( original: AccessTools.Method(typeof(Event), nameof(Event.exitEvent)), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Event_exitEvent_Postfix)) ); harmony.Patch( original: AccessTools.Method(typeof(Farmer), "updateCommon"), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Farmer_updateCommon_Prefix)), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Farmer_updateCommon_Postfix)), transpiler: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Farmer_updateCommon_Transpiler)) ); harmony.Patch( original: AccessTools.Method(typeof(Farmer), nameof(Farmer.setRunning)), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Farmer_setRunning_Prefix)), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Farmer_setRunning_Postfix)) ); harmony.Patch( original: AccessTools.Method(typeof(Farmer), nameof(Farmer.changeIntoSwimsuit)), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Farmer_changeIntoSwimsuit_Postfix)) ); harmony.Patch( original: AccessTools.Method(typeof(Toolbar), nameof(Toolbar.draw), new Type[] { typeof(SpriteBatch) }), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Toolbar_draw_Prefix)) ); /* * * harmony.Patch( * original: AccessTools.Method(typeof(Wand), nameof(Wand.DoFunction)), * transpiler: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.Wand_DoFunction_Transpiler)) * ); * */ harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.draw)), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_draw_Prefix)) ); harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.UpdateWhenCurrentLocation)), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_UpdateWhenCurrentLocation_Postfix)) ); harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.resetForPlayerEntry)), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_resetForPlayerEntry_Prefix)) ); harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.isCollidingPosition), new Type[] { typeof(Rectangle), typeof(xTile.Dimensions.Rectangle), typeof(bool), typeof(int), typeof(bool), typeof(Character) }), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_isCollidingPosition_Prefix)) ); harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.performTouchAction)), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_performTouchAction_Prefix)) ); harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.checkAction)), prefix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_checkAction_Prefix)) ); harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.isCollidingPosition), new Type[] { typeof(Rectangle), typeof(xTile.Dimensions.Rectangle), typeof(bool), typeof(int), typeof(bool), typeof(Character), typeof(bool), typeof(bool), typeof(bool) }), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_isCollidingPosition_Postfix)) ); harmony.Patch( original: AccessTools.Method(typeof(GameLocation), nameof(GameLocation.sinkDebris)), postfix: new HarmonyMethod(typeof(SwimPatches), nameof(SwimPatches.GameLocation_sinkDebris_Postfix)) ); }
public static void Input_ButtonPressed(object sender, ButtonPressedEventArgs e) { if (Game1.player == null || Game1.player.currentLocation == null) { ModEntry.myButtonDown = false; return; } if (false && e.Button == SButton.Q) { SwimUtils.SeaMonsterSay("The quick brown fox jumped over the slow lazy dog."); } if (Game1.activeClickableMenu != null && Game1.player.currentLocation.Name == "ScubaCrystalCave" && Game1.player.currentLocation.lastQuestionKey.StartsWith("SwimMod_Mariner_")) { IClickableMenu menu = Game1.activeClickableMenu; if (menu == null || menu.GetType() != typeof(DialogueBox)) { return; } int resp = (int)typeof(DialogueBox).GetField("selectedResponse", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(menu); List <Response> resps = (List <Response>) typeof(DialogueBox).GetField("responses", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(menu); if (resp < 0 || resps == null || resp >= resps.Count || resps[resp] == null) { return; } Game1.player.currentLocation.lastQuestionKey = ""; SwimDialog.OldMarinerDialogue(resps[resp].responseKey); return; } if (false && e.Button == SButton.Q) { var v1 = Game1.game1; return; //Game1.player.currentLocation.overlayObjects[Game1.player.getTileLocation() + new Vector2(0, 1)] = new Chest(0, new List<Item>() { Helper.Input.IsDown(SButton.LeftShift) ? (Item)(new StardewValley.Object(434, 1)) : (new Hat(ModEntry.scubaMaskID)) }, Game1.player.getTileLocation() + new Vector2(0, 1), false, 0); } if (e.Button == Config.DiveKey && ModEntry.diveMaps.ContainsKey(Game1.player.currentLocation.Name) && ModEntry.diveMaps[Game1.player.currentLocation.Name].DiveLocations.Count > 0) { Point pos = Game1.player.getTileLocationPoint(); Location loc = new Location(pos.X, pos.Y); if (!SwimUtils.IsInWater()) { return; } DiveMap dm = ModEntry.diveMaps[Game1.player.currentLocation.Name]; DiveLocation diveLocation = null; foreach (DiveLocation dl in dm.DiveLocations) { if (dl.GetRectangle().X == -1 || dl.GetRectangle().Contains(loc)) { diveLocation = dl; break; } } if (diveLocation == null) { Monitor.Log($"No dive destination for this point on this map", LogLevel.Debug); return; } if (Game1.getLocationFromName(diveLocation.OtherMapName) == null) { Monitor.Log($"Can't find destination map named {diveLocation.OtherMapName}", LogLevel.Warn); return; } Monitor.Log($"warping to {diveLocation.OtherMapName}", LogLevel.Debug); SwimUtils.DiveTo(diveLocation); return; } if (e.Button == Config.SwimKey && (!Game1.player.swimming || !Config.ReadyToSwim) && !isJumping) { Config.ReadyToSwim = !Config.ReadyToSwim; Helper.WriteConfig <ModConfig>(Config); Monitor.Log($"Ready to swim: {Config.ReadyToSwim}"); return; } if (e.Button == Config.SwimSuitKey) { Config.SwimSuitAlways = !Config.SwimSuitAlways; Helper.WriteConfig <ModConfig>(Config); if (!Game1.player.swimming) { if (!Config.SwimSuitAlways) { Game1.player.changeOutOfSwimSuit(); } else { Game1.player.changeIntoSwimsuit(); } } return; } }