This wiki is a read-only version of the Stardew Valley Wiki. The official editable wiki maintained by ConcernedApe can be found at stardewvalleywiki.com

Changes

Jump to: navigation, search

Modding:Migrate to SMAPI 3.0

2,079 bytes added, 22:20, 8 October 2018
Event changes: use template, expand
==Major changes==
===Event changes===
The former events will be removed in SMAPI 3.0. Here's how to convert them to the new events under <tt>this.Helper.Events</tt>. This list does not cover new only shows equivalent events in SMAPI 3.0; see [[Modding:Modder Guide/APIs/Events|''events'' in the modder guide]] for a full list.
{| class="wikitable"
! new event
! conversion notes
|-{{/event | <tt>old events = ContentEvents.AfterLocaleChanged</tt> | | ''n/a''new events = none | summary = Mods very rarely need to handle this, since SMAPI's translation and content APIs do. Since the locale can only change on the title screen, mods that used this can check once the save is loaded instead.|-}}{{/event | <tt>old events = ControlEvents.ControllerButtonPressed</tt><br /><tt>, ControlEvents.ControllerButtonReleased</tt><br /><tt>, ControlEvents.ControllerTriggerPressed</tt><br /><tt>, ControlEvents.ControllerTriggerReleased</tt> | | <tt>new events = Input.ButtonPressed</tt><br /><tt>, Input.ButtonReleased</tt> | summary = Mostly equivalent.
* Remove <tt>e.PlayerIndex</tt> (this was always <tt>PlayerIndex.One</tt>).
* Change <tt>e.ButtonPressed</tt> to <tt>e.Button</tt>, which is now an [[Modding:Modder Guide/APIs/Utilities#Input|<tt>SButton</tt>]] value.
* Remove <tt>e.Value</tt> for trigger events.
|-}}{{/event | <tt>old events = ControlEvents.KeyboardChanged</tt>| → | <tt>new events = Input.ButtonPressed</tt><br /><tt>, Input.ButtonReleased</tt> | summary = Not directly equivalent; may need to rewrite affected code.|-}}{{/event | <tt>old events = ControlEvents.KeyPressed</tt><br /><tt>, ControlEvents.KeyReleased</tt>| → | <tt>new events = Input.ButtonPressed</tt><br /><tt>, Input.ButtonReleased</tt> | summary = Mostly equivalent.
* Change <tt>e.KeyPressed</tt> to <tt>e.Button</tt>, which is now an [[Modding:Modder Guide/APIs/Utilities#Input|<tt>SButton</tt>]] value.
|-}}{{/event | <tt>old events = ControlEvents.MouseChanged</tt> | | <tt>new events = Input.ButtonPressed</tt><br /><tt>, Input.ButtonReleased</tt><br /><tt>, Input.CursorMoved</tt><br /><tt>, Input.MouseWheelScrolled</tt> | summary = Not directly equivalent; may need to rewrite affected code.|-}}{{/event | <tt>old events = GameEvents.EighthUpdateTick</tt>| →| <tt>GameLoop, GameEvents.UpdateTicked</tt>| * Check if <tt>eFourthUpdateTick, GameEvents.IsMultipleOf(8)</tt>HalfSecondTick, GameEvents.|-| <tt>OneSecondTick, GameEvents.FirstUpdateTick</tt>QuarterSecondTick, GameEvents.SecondUpdateTick | | <tt>new events = GameLoop.GameLaunched</tt>UpdateTicked | The new event is raised before the first update ticksummary = Mostly equivalent. To do something ''after'' You can match the first previous update tick, use ticks using <ttcode>GameEventse.UpdateTickedIsMultipleOf</ttcode> with (<tt>if (e.Ticks == 1)SecondUpdateTick</tt>.|-| = 2, <tt>GameEvents.FourthUpdateTick</tt>| →| = 4, <tt>GameLoop.UpdateTickedEighthUpdateTick</tt>| * Check if = 8, <tt>e.IsMultipleOf(4)QuarterSecondTick</tt>.|-| = 15, and <tt>GameEvents.HalfSecondTick</tt>| →| <tt>GameLoop.UpdateTicked</tt>| * Check if <tt>e.IsMultipleOf(= 30)and </ttcode>e.|-| <tt>GameEvents.OneSecondTickIsOneSecond</ttcode>| →| <tt>GameLoop.UpdateTicked</tt>| }}* Check if <tt>e.IsOneSecond<{{/tt>.event |-| <tt>old events = GameEvents.QuarterSecondTick</tt>FirstUpdateTick | | <tt>new events = GameLoop.UpdateTicked</tt>GameLaunched | * Check if <tt>e.IsMultipleOfsummary = The new event is raised before the first update tick (15the old one happened after it)</tt>.|-| To do something ''after'' the first update tick, use <tt>GameEvents.SecondUpdateTickUpdateTicked</tt>| →| with <tt>GameLoop.UpdateTicked</tt>| * Check if <tt>(e.IsMultipleOf(2Ticks == 1)</tt>.|-}}{{/event | <tt>old events = GameEvents.UpdateTick</tt> | | <tt>new events = GameLoop.UpdateTicked</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = GraphicsEvents.OnPostRenderEvent</tt> | | <tt>new events = Display.Rendered</tt> | summary = Equivalent, except the new event isn't triggered during certain special cutscenes and minigames (e.g. the [[Sebastian#Six Hearts|board game scene]]).|-}}{{/event | <tt>old events = GraphicsEvents.OnPostRenderGuiEvent</tt> | | <tt>new events = Display.RenderedActiveMenu< |summary = equivalent}}{{/tt>event | Equivalentold events = GraphicsEvents.OnPostRenderGuiEvent |-new events = Display.RenderedActiveMenu | <tt>summary = equivalent}}{{/event |old events = GraphicsEvents.OnPostRenderHudEvent</tt> | | <tt>new events = Display.RenderedHud</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = GraphicsEvents.OnPreRenderEvent</tt> | | <tt>new events = Display.RenderingWorld</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = GraphicsEvents.OnPreRenderGuiEvent</tt> | | <tt>new events = Display.RenderingActiveMenu</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = GraphicsEvents.OnPreRenderHudEvent</tt> | | <tt>new events = Display.RenderingHud</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = GraphicsEvents.Resize</tt> | | <tt>new events = Display.WindowResized</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = InputEvents.ButtonPressed</tt><br /><tt>, InputEvents.ButtonReleased</tt> | | <tt>new events = Input.ButtonPressed</tt><br /><tt>, Input.ButtonReleased</tt> | summary = Mostly equivalent.
* Change <tt>e.IsActionButton</tt> to <tt>e.Button.IsActionButton()</tt>.
* Change <tt>e.IsUseToolButton</tt> to <tt>e.Button.IsUseToolButton()</tt>.
* Change <tt>e.SuppressButton</tt> to <tt>this.Helper.Input.Suppress(button)</tt>.
|-}}{{/event | <tt>old events = LocationEvents.BuildingsChanged</tt> | | <tt>new events = World.BuildingListChanged</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = LocationEvents.LocationsChanged</tt> | | <tt>new events = World.LocationListChanged</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = LocationEvents.ObjectsChanged</tt> | | <tt>new events = World.ObjectListChanged</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = MenuEvents.MenuChanged</tt><br /><tt>, MenuEvents.MenuClosed</tt> | new events = Display.MenuChanged | summary = These caused a lot of confusion (e.g. <tt>DisplayMenuEvents.MenuChangedMenuClosed</tt>| Combined wasn't called when a menu was closed and immediately replaced), so they've been combined into one event which is called when a menu is opened, closed, or replaced. You can check the <tt>e.NewMenu</tt> and <tt>e.PriorMenu</tt> event args to know what the change is(e.|-| g. to match the old <tt>MineEventsMenuEvents.MineLevelChangedMenuClosed</tt>, check <code>if (e.NewMenu == null)</code>).| →}}| ''TODO''{{/event | old events = MineEvents.MineLevelChanged |-new events = PlayerEvents.Warped | summary = To know whether the player changed mine level, you can check <ttcode>MultiplayerEventsif (e.AfterMainBroadcastNewLocation is MineShaft mine)</ttcode>; the new mine level will be <br /code><tt>MultiplayerEventsmine.AfterMainSyncmineLevel</ttcode><br .}}{{/><tt>event |old events = MultiplayerEvents.AfterMainBroadcast, MultiplayerEvents.AfterMainSync, MultiplayerEvents.BeforeMainBroadcast</tt><br /><tt>, MultiplayerEvents.BeforeMainSync</tt> | new events = none | ''n/a''| Mods very rarely need summary = No known mods use these, and no open-source mod uses them. If you need thesethem, consider replacing <tt>Game1.multiplayer</tt> with a delegating subclass.}}{{/event |-old events = PlayerEvents.InventoryChanged | new events = Player.InventoryChanged |summary = Mostly equivalent. The event arguments changed type, but should be straightforward to migrate. Although the new event is still only called for the current player, that will likely change in a future version; make sure to check <tt>PlayerEventse.InventoryChangedPlayer</tt>| →| ''TODO''| |-| , <tt>PlayerEventse.LeveledUpPlayer.IsLocalPlayer</tt>| →| ''TODO''| |-| , or <tt>PlayerEventse.WarpedPlayer.IsMainPlayer</tt>if needed.| →}}| ''TODO''{{/event | old events = PlayerEvents.LeveledUp |-new events = Player.LevelChanged | summary = Mostly equivalent. The event arguments changed type, but should be straightforward to migrate. Although the new event is still only called for the current player, that will likely change in a future version; make sure to check <tt>SaveEventse.AfterCreatePlayer</tt>| →| , <tt>GameLoope.SaveCreatedPlayer.IsLocalPlayer</tt>| Equivalent.|-| , or <tt>SaveEventse.AfterLoadPlayer.IsMainPlayer</tt>if needed.| →}}| <tt>GameLoop.SaveLoaded<{{/tt>event | Equivalentold events = PlayerEvents.Warped |-new events = Player.Warped | summary = Mostly equivalent. The event arguments changed type, but should be straightforward to migrate. Although the new event is still only called for the current player, that will likely change in a future version; make sure to check <tt>SaveEventse.AfterReturnToTitlePlayer</tt>| →| , <tt>GameLoope.ReturnedToTitlePlayer.IsLocalPlayer</tt>| Equivalent.|-| , or <tt>SaveEventse.AfterSavePlayer.IsMainPlayer</tt>if needed.}}{{/event | old events = SaveEvents.AfterCreate | <tt>new events = GameLoop.Saved<SaveCreated |summary = equivalent}}{{/tt>event | Equivalentold events = SaveEvents.AfterLoad |-new events = GameLoop.SaveLoaded | <tt>SaveEvents.BeforeCreate<summary = equivalent}}{{/tt>event | old events = SaveEvents.AfterReturnToTitle | <tt>new events = GameLoop.SaveCreating<ReturnedToTitle |summary = equivalent}}{{/tt>event | Equivalentold events = SaveEvents.AfterSave |-new events = GameLoop.Saved | <tt>SaveEvents.BeforeSave<summary = equivalent}}{{/tt>event | old events = SaveEvents.BeforeCreate | <tt>new events = GameLoop.Saving<SaveCreating |summary = equivalent}}{{/tt>event | Equivalentold events = SaveEvents.BeforeSave |-new events = GameLoop.Saving | <tt>summary = equivalent}}{{/event |old events = SpecialisedEvents.UnvalidatedUpdateTick</tt> | | <tt>new events = Specialised.UnvalidatedUpdateTicked</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = TimeEvents.AfterDayStarted</tt> | | <tt>new events = GameLoop.DayStarted</tt> | Equivalent.summary = equivalent|-}}{{/event | <tt>old events = TimeEvents.TimeOfDayChanged</tt> | new events = TODO | ''TODO''summary = | }}
|}
Protected, translators
5,421
edits

Navigation menu