diff --git a/QSB/EchoesOfTheEye/DreamWorld/Messages/EnterDreamWorldMessage.cs b/QSB/EchoesOfTheEye/DreamWorld/Messages/EnterDreamWorldMessage.cs index 151230d8..ffcd2361 100644 --- a/QSB/EchoesOfTheEye/DreamWorld/Messages/EnterDreamWorldMessage.cs +++ b/QSB/EchoesOfTheEye/DreamWorld/Messages/EnterDreamWorldMessage.cs @@ -1,23 +1,35 @@ -using QSB.ItemSync.WorldObjects.Items; +using JetBrains.Annotations; +using QSB.ItemSync.WorldObjects.Items; using QSB.Messaging; using QSB.Player; +using QSB.Player.TransformSync; using QSB.WorldSync; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace QSB.EchoesOfTheEye.DreamWorld.Messages; -internal class EnterDreamWorldMessage : QSBMessage +[UsedImplicitly] +internal class EnterDreamWorldMessage : QSBWorldObjectMessage { - public EnterDreamWorldMessage(int lanternId) : base(lanternId) { } + static EnterDreamWorldMessage() + { + GlobalMessenger.AddListener(OWEvents.EnterDreamWorld, () => + { + if (!PlayerTransformSync.LocalInstance) + { + return; + } + + Locator.GetDreamWorldController() + .GetPlayerLantern() + .GetWorldObject() + .SendMessage(new EnterDreamWorldMessage()); + }); + } public override void OnReceiveRemote() { var player = QSBPlayerManager.GetPlayer(From); player.InDreamWorld = true; - player.AssignedSimulationLantern = QSBWorldSync.GetWorldObject(Data); + player.AssignedSimulationLantern = WorldObject; } } diff --git a/QSB/EchoesOfTheEye/DreamWorld/Messages/ExitDreamWorldMessage.cs b/QSB/EchoesOfTheEye/DreamWorld/Messages/ExitDreamWorldMessage.cs new file mode 100644 index 00000000..b454f0bb --- /dev/null +++ b/QSB/EchoesOfTheEye/DreamWorld/Messages/ExitDreamWorldMessage.cs @@ -0,0 +1,30 @@ +using JetBrains.Annotations; +using QSB.Messaging; +using QSB.Player; +using QSB.Player.TransformSync; + +namespace QSB.EchoesOfTheEye.DreamWorld.Messages; + +[UsedImplicitly] +internal class ExitDreamWorldMessage : QSBMessage +{ + static ExitDreamWorldMessage() + { + GlobalMessenger.AddListener(OWEvents.ExitDreamWorld, () => + { + if (!PlayerTransformSync.LocalInstance) + { + return; + } + + new ExitDreamWorldMessage().Send(); + }); + } + + public override void OnReceiveRemote() + { + var player = QSBPlayerManager.GetPlayer(From); + player.InDreamWorld = false; + player.AssignedSimulationLantern = null; + } +} diff --git a/QSB/EchoesOfTheEye/DreamWorld/Patches/DreamWorldPatches.cs b/QSB/EchoesOfTheEye/DreamWorld/Patches/DreamWorldPatches.cs deleted file mode 100644 index 5c0de29e..00000000 --- a/QSB/EchoesOfTheEye/DreamWorld/Patches/DreamWorldPatches.cs +++ /dev/null @@ -1,27 +0,0 @@ -using HarmonyLib; -using QSB.EchoesOfTheEye.DreamWorld.Messages; -using QSB.ItemSync.WorldObjects.Items; -using QSB.Messaging; -using QSB.Patches; -using QSB.WorldSync; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace QSB.EchoesOfTheEye.DreamWorld.Patches; - -internal class DreamWorldPatches : QSBPatch -{ - public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect; - - [HarmonyPostfix] - [HarmonyPatch(typeof(DreamWorldController), nameof(DreamWorldController.SpawnInDreamWorld))] - public static void EnterDreamWorld() - { - var currentLantern = (DreamLanternItem)Locator.GetToolModeSwapper().GetItemCarryTool().GetHeldItem(); - var currentQSBLantern = currentLantern.GetWorldObject(); - new EnterDreamWorldMessage(currentQSBLantern.ObjectId).Send(); - } -} diff --git a/QSB/Messaging/OWEvents.cs b/QSB/Messaging/OWEvents.cs index d989b9de..c99ce15c 100644 --- a/QSB/Messaging/OWEvents.cs +++ b/QSB/Messaging/OWEvents.cs @@ -29,4 +29,6 @@ public static class OWEvents public const string ExitShip = nameof(ExitShip); public const string EyeStateChanged = nameof(EyeStateChanged); public const string FlickerOffAndOn = nameof(FlickerOffAndOn); + public const string EnterDreamWorld = nameof(EnterDreamWorld); + public const string ExitDreamWorld = nameof(ExitDreamWorld); } \ No newline at end of file