예제 #1
0
        /// <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)
        {
            instance = this;
            Config   = helper.ReadConfig <Configuration>();

            helper.Events.GameLoop.SaveLoaded += onSaveLoaded;
            helper.Events.GameLoop.Saving     += onSaving;
            helper.Events.GameLoop.Saved      += onSaved;

            Commands.register();
            Skills.init(helper.Events);

            harmony = HarmonyInstance.Create("spacechase0.SpaceCore");

            Type game1CompilerType = null;

            foreach (var t in typeof(Game1).Assembly.GetTypes())
            {
                if (t.FullName == "StardewValley.Game1+<>c")
                {
                    game1CompilerType = t;
                }
            }
            MethodInfo showNightEndMethod = null;

            foreach (var m in game1CompilerType.GetRuntimeMethods())
            {
                if (m.FullDescription().Contains("showEndOfNightStuff"))
                {
                    showNightEndMethod = m;
                }
            }

            doPrefix(typeof(HoeDirt), nameof(HoeDirt.dayUpdate), typeof(HoeDirtWinterFix));
            doPostfix(typeof(Utility), nameof(Utility.pickFarmEvent), typeof(NightlyFarmEventHook));
            doTranspiler(showNightEndMethod, typeof(ShowEndOfNightStuffHook).GetMethod(nameof(ShowEndOfNightStuffHook.Transpiler)));
            doPostfix(typeof(Farmer), nameof(Farmer.doneEating), typeof(DoneEatingHook));
            doPrefix(typeof(MeleeWeapon).GetMethod(nameof(MeleeWeapon.drawDuringUse), new[] { typeof(int), typeof(int), typeof(SpriteBatch), typeof(Vector2), typeof(Farmer), typeof(Rectangle), typeof(int), typeof(bool) }), typeof(CustomWeaponDrawPatch).GetMethod(nameof(CustomWeaponDrawPatch.Prefix)));
            doPrefix(typeof(Multiplayer), nameof(Multiplayer.processIncomingMessage), typeof(MultiplayerPackets));
            doPrefix(typeof(GameLocation), nameof(GameLocation.performAction), typeof(ActionHook));
            doPrefix(typeof(GameLocation), nameof(GameLocation.performTouchAction), typeof(TouchActionHook));
            doPostfix(typeof(GameServer), nameof(GameServer.sendServerIntroduction), typeof(ServerGotClickHook));
            doPostfix(typeof(NPC), nameof(NPC.receiveGift), typeof(AfterGiftGivenHook));
            doPostfix(typeof(Game1), nameof(Game1.loadForNewGame), typeof(BlankSaveHook));
            doPrefix(typeof(Game1).GetMethod(nameof(Game1.warpFarmer), new[] { typeof(LocationRequest), typeof(int), typeof(int), typeof(int) }), typeof(WarpFarmerHook).GetMethod(nameof(WarpFarmerHook.Prefix)));
            doPostfix(typeof(GameMenu), nameof(GameMenu.getTabNumberFromName), typeof(GameMenuTabNameHook));
        }
예제 #2
0
        public override void Entry(IModHelper helper)
        {
            instance = this;

            SpecialisedEvents.UnvalidatedUpdateTick += onUpdate;

            SaveEvents.AfterLoad += onLoad;
            SaveEvents.AfterSave += onSave;

            Commands.register();
            Skills.init();

            harmony = HarmonyInstance.Create("spacechase0.SpaceCore");

            Type game1CompilerType = null;

            foreach (var t in typeof(Game1).Assembly.GetTypes())
            {
                if (t.FullName == "StardewValley.Game1+<>c")
                {
                    game1CompilerType = t;
                }
            }
            MethodInfo showNightEndMethod = null;

            foreach (var m in game1CompilerType.GetRuntimeMethods())
            {
                if (m.FullDescription().Contains("showEndOfNightStuff"))
                {
                    showNightEndMethod = m;
                }
            }

            doPrefix(typeof(HoeDirt), "dayUpdate", typeof(HoeDirtWinterFix));
            doPostfix(typeof(Utility), "pickFarmEvent", typeof(NightlyFarmEventHook));
            doTranspiler(showNightEndMethod, typeof(ShowEndOfNightStuffHook).GetMethod("Transpiler"));
            doPostfix(typeof(Farmer), "doneEating", typeof(DoneEatingHook));
            doPrefix(typeof(MeleeWeapon).GetMethod("drawDuringUse", new[] { typeof(int), typeof(int), typeof(SpriteBatch), typeof(Vector2), typeof(SFarmer), typeof(Rectangle), typeof(int), typeof(bool) }), typeof(CustomWeaponDrawPatch).GetMethod("Prefix"));
            doPrefix(typeof(Multiplayer), "processIncomingMessage", typeof(MultiplayerPackets));
            doPrefix(typeof(GameLocation), "performAction", typeof(ActionHook));
            doPrefix(typeof(GameLocation), "performTouchAction", typeof(TouchActionHook));
            doPostfix(typeof(GameServer), "sendServerIntroduction", typeof(ServerGotClickHook));
            doPostfix(typeof(NPC), "receiveGift", typeof(AfterGiftGivenHook));
        }
예제 #3
0
        /// <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)
        {
            instance    = this;
            Log.Monitor = Monitor;
            Config      = helper.ReadConfig <Configuration>();

            helper.Events.GameLoop.UpdateTicked += onUpdate;
            helper.Events.GameLoop.SaveLoaded   += onSaveLoaded;
            helper.Events.GameLoop.Saving       += onSaving;
            helper.Events.GameLoop.Saved        += onSaved;

            Commands.register();
            Skills.init(helper.Events);
            TileSheetExtensions.init();

            harmony = HarmonyInstance.Create("spacechase0.SpaceCore");

            MethodInfo showNightEndMethod = null;

            try
            {
                Type game1CompilerType = null;
                foreach (var t in typeof(Game1).Assembly.GetTypes())
                {
                    if (t.FullName == "StardewValley.Game1+<>c")
                    {
                        game1CompilerType = t;
                    }
                }
                foreach (var m in game1CompilerType.GetRuntimeMethods())
                {
                    if (m.FullDescription().Contains("showEndOfNightStuff"))
                    {
                        showNightEndMethod = m;
                    }
                }
            }
            catch (Exception e1)
            {
                Log.trace("Failed to find Windows showEndOfNightStuff lambda: " + e1);
                try
                {
                    Type game1CompilerType = typeof(Game1);
                    foreach (var m in game1CompilerType.GetRuntimeMethods())
                    {
                        if (m.FullDescription().Contains("<showEndOfNightStuff>m__"))
                        {
                            showNightEndMethod = m;
                        }
                    }
                }
                catch (Exception e2)
                {
                    Log.error("Failed to find Mac/Linux showEndOfNightStuff lambda: " + e2);
                }
            }
            Log.trace("showEndOfNightStuff: " + showNightEndMethod);

            doPrefix(typeof(HoeDirt), nameof(HoeDirt.dayUpdate), typeof(HoeDirtWinterFix));
            doPostfix(typeof(Utility), nameof(Utility.pickFarmEvent), typeof(NightlyFarmEventHook));
            doTranspiler(showNightEndMethod, typeof(ShowEndOfNightStuffHook).GetMethod(nameof(ShowEndOfNightStuffHook.Transpiler)));
            doPostfix(typeof(Farmer), nameof(Farmer.doneEating), typeof(DoneEatingHook));
            doPrefix(typeof(MeleeWeapon).GetMethod(nameof(MeleeWeapon.drawDuringUse), new[] { typeof(int), typeof(int), typeof(SpriteBatch), typeof(Vector2), typeof(Farmer), typeof(Rectangle), typeof(int), typeof(bool) }), typeof(CustomWeaponDrawPatch).GetMethod(nameof(CustomWeaponDrawPatch.Prefix)));
            doPrefix(typeof(Multiplayer), nameof(Multiplayer.processIncomingMessage), typeof(MultiplayerPackets));
            doPrefix(typeof(GameLocation), nameof(GameLocation.performAction), typeof(ActionHook));
            doPrefix(typeof(GameLocation), nameof(GameLocation.performTouchAction), typeof(TouchActionHook));
            doPostfix(typeof(GameLocation), nameof(GameLocation.explode), typeof(ExplodeHook));
            doPostfix(typeof(GameServer), nameof(GameServer.sendServerIntroduction), typeof(ServerGotClickHook));
            doPostfix(typeof(NPC), nameof(NPC.receiveGift), typeof(AfterGiftGivenHook));
            doPostfix(typeof(Game1), nameof(Game1.loadForNewGame), typeof(BlankSaveHook));
            if (Constants.TargetPlatform != GamePlatform.Android)
            {
                doPrefix(typeof(Game1).GetMethod(nameof(Game1.warpFarmer), new[] { typeof(LocationRequest), typeof(int), typeof(int), typeof(int) }), typeof(WarpFarmerHook).GetMethod(nameof(WarpFarmerHook.Prefix)));
            }
            else
            {
                doPrefix(typeof(Game1).GetMethod(nameof(Game1.warpFarmer), new[] { typeof(LocationRequest), typeof(int), typeof(int), typeof(int), typeof(bool), typeof(bool) }), typeof(WarpFarmerHook).GetMethod(nameof(WarpFarmerHook.Prefix)));
            }
            doPostfix(typeof(GameMenu), nameof(GameMenu.getTabNumberFromName), typeof(GameMenuTabNameHook));
            doPrefix(typeof(SpriteBatch).GetMethod("Draw", new[] { typeof(Texture2D), typeof(Rectangle), typeof(Rectangle? ), typeof(Color), typeof(float), typeof(Vector2), typeof(SpriteEffects), typeof(float) }), typeof(SpriteBatchTileSheetAdjustments).GetMethod(nameof(SpriteBatchTileSheetAdjustments.Prefix1)));
            doPrefix(typeof(SpriteBatch).GetMethod("Draw", new[] { typeof(Texture2D), typeof(Rectangle), typeof(Rectangle? ), typeof(Color), }), typeof(SpriteBatchTileSheetAdjustments).GetMethod(nameof(SpriteBatchTileSheetAdjustments.Prefix2)));
            doPrefix(typeof(SpriteBatch).GetMethod("Draw", new[] { typeof(Texture2D), typeof(Vector2), typeof(Rectangle? ), typeof(Color), typeof(float), typeof(Vector2), typeof(Vector2), typeof(SpriteEffects), typeof(float) }), typeof(SpriteBatchTileSheetAdjustments).GetMethod(nameof(SpriteBatchTileSheetAdjustments.Prefix3)));
            doPrefix(typeof(SpriteBatch).GetMethod("Draw", new[] { typeof(Texture2D), typeof(Vector2), typeof(Rectangle? ), typeof(Color), typeof(float), typeof(Vector2), typeof(float), typeof(SpriteEffects), typeof(float) }), typeof(SpriteBatchTileSheetAdjustments).GetMethod(nameof(SpriteBatchTileSheetAdjustments.Prefix4)));
            doPrefix(typeof(SpriteBatch).GetMethod("Draw", new[] { typeof(Texture2D), typeof(Vector2), typeof(Rectangle? ), typeof(Color) }), typeof(SpriteBatchTileSheetAdjustments).GetMethod(nameof(SpriteBatchTileSheetAdjustments.Prefix5)));
        }