From a70bf68ccc8c40eb66bb696b46d2796343bd27db Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Thu, 22 Jan 2026 23:36:57 +0100 Subject: [PATCH 01/12] Prevent ChildParentAudioClipPlayer component crashing the game Adds a fix for https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1457 --- CommunityBugFixCollection/Locale/de.json | 5 +- CommunityBugFixCollection/Locale/en.json | 5 +- .../NoParentUnderSelfAudioClipPlayer.cs | 62 +++++++++++++++++++ README.md | 1 + 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs diff --git a/CommunityBugFixCollection/Locale/de.json b/CommunityBugFixCollection/Locale/de.json index e31e69b..ef4cffd 100644 --- a/CommunityBugFixCollection/Locale/de.json +++ b/CommunityBugFixCollection/Locale/de.json @@ -38,6 +38,7 @@ "CommunityBugFixCollection.NodeNameAdjustments.Description": "Verbessert die verwirrenden Namen der Remap [-1; 1] zu [0; 1] ProtoFlux Nodes.", "CommunityBugFixCollection.NonHDRColorClamping.Description": "Korrigiert, dass die nicht-HDR Varianten der Color(X) Kanal-Additionen die Werte nicht limitieren.", "CommunityBugFixCollection.NonLinearColorXFromHexCode.Description": "Zwingt colorX From HexCode das sRGB statt dem Linearen Farbprofil zu nutzen.", + "CommunityBugFixCollection.NoParentUnderSelfAudioClipPlayer.Description": "Verhindert, dass die ChildParentAudioClipPlayer-Komponente das Spiel crasht, wenn ihr ParentUnder-Feld auf den Slot, auf dem sie ist, gesetzt ist. Fügt außerdem eine Erklärung des Problems im Header hinzu.", "CommunityBugFixCollection.PauseAnimatorUpdates.Description": "Verhindert, dass Animatoren jeden Frame in alle assoziierten Felder schreiben, obwohl sie nicht am animieren sind.", "CommunityBugFixCollection.ReallyNoDestroyUndo.Description": "Sorgt dafür, dass die NoDestroyUndo Komponente tatsächlich verhindert, dass das Zerstören eines Objekts rückgängig gemacht werden kann.", "CommunityBugFixCollection.SmoothDraggables.Description": "Umgeht, dass Slider und Joints in Headless-Sessions verrutschen.", @@ -50,6 +51,8 @@ "CommunityBugFixCollection.Config.Options.Name": "Optionen", "CommunityBugFixCollection.Config.Options.Description": "Enthällt die Einstellungen für die wenigen Fixes die diese anbieten.", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Name": "IEC Byte-Format Benutzen", - "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Description": "Ob Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) formatiert werden sollen, wenn LocalizedByteFormatting aktiviert ist." + "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Description": "Ob Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) formatiert werden sollen, wenn LocalizedByteFormatting aktiviert ist.", + + "CommunityBugFixCollection.ChildParentAudioClipPlayer.Header": "Das ParentUnder-Feld dieser AudioClipPlayer-Komponente darf niemals auf den Slot, auf dem sie ist, gesetzt werden. Andernfalls crasht das Spiel wenn ein Clip ausgelöst wird." } } \ No newline at end of file diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index 44aa892..628284d 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -44,6 +44,7 @@ "CommunityBugFixCollection.NodeNameAdjustments.Description": "Fixes the confusing names of the Remap [-1; 1] to [0; 1] ProtoFlux nodes.", "CommunityBugFixCollection.NonHDRColorClamping.Description": "Fixes non-HDR variants of Color(X) channel addition not clamping.", "CommunityBugFixCollection.NonLinearColorXFromHexCode.Description": "Forces colorX From HexCode to use the sRGB rather than Linear profile.", + "CommunityBugFixCollection.NoParentUnderSelfAudioClipPlayer.Description": "Prevents the ChildParentAudioClipPlayer components from crashing the game if their ParentUnder field is set to the slot that it's on. Also adds a header text explaining the problem.", "CommunityBugFixCollection.PauseAnimatorUpdates.Description": "Fixes animators updating all associated fields every frame while enabled but not playing.", "CommunityBugFixCollection.ReallyNoDestroyUndo.Description": "Makes the NoDestroyUndo component actually prevent undoing destroying something.", "CommunityBugFixCollection.SmoothDraggables.Description": "Workaround for Sliders and Joints snapping in sessions hosted by a headless.", @@ -70,6 +71,8 @@ "CommunityBugFixCollection.StorageUnits.MB": "MB", "CommunityBugFixCollection.StorageUnits.GB": "GB", "CommunityBugFixCollection.StorageUnits.TB": "TB", - "CommunityBugFixCollection.StorageUnits.PB": "PB" + "CommunityBugFixCollection.StorageUnits.PB": "PB", + + "CommunityBugFixCollection.ChildParentAudioClipPlayer.Header": "This AudioClipPlayer component's ParentUnder field must never be set to the slot it's on. Otherwise, the game will crash when a clip is triggered." } } \ No newline at end of file diff --git a/CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs b/CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs new file mode 100644 index 0000000..689ff9a --- /dev/null +++ b/CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs @@ -0,0 +1,62 @@ +using FrooxEngine; +using HarmonyLib; +using MonkeyLoader.Resonite; +using MonkeyLoader.Resonite.UI.Inspectors; + +namespace CommunityBugFixCollection +{ + [HarmonyPatch(typeof(ChildParentAudioClipPlayer))] + [HarmonyPatchCategory(nameof(NoParentUnderSelfAudioClipPlayer))] + internal sealed class NoParentUnderSelfAudioClipPlayer : ResoniteEventHandlerMonkey + { + public override IEnumerable Authors => Contributors.Banane9; + + public override bool CanBeDisabled => true; + + public override int Priority => HarmonyLib.Priority.Low; + + protected override void Handle(ResolveInspectorHeaderTextEvent eventData) + => eventData.AddItem(new(Mod.GetLocaleString("ChildParentAudioClipPlayer.Header"))); + + private static User? GetAllocatingUser(ChildParentAudioClipPlayer element) + { + if (element.FilterWorldElement() is null) + return null; + + element.ReferenceID.ExtractIDs(out var position, out var allocationId); + var user = element.World.GetUserByAllocationID(allocationId); + + if (user is null || position < user.AllocationIDStart) + return null; + + return user; + } + + [HarmonyPostfix] + [HarmonyPatch(nameof(ChildParentAudioClipPlayer.OnAwake))] + private static void OnAwakePostfix(ChildParentAudioClipPlayer __instance) + { + if (__instance.ParentUnder.Target == __instance.Slot) + { + Logger.Warn(() => $"User [{GetAllocatingUser(__instance)}] tried loading a ChildParentAudioClipPlayer targeting itself on: {__instance.ParentHierarchyToString()}"); + + if (Enabled) + __instance.ParentUnder.Target = null!; + } + + __instance.ParentUnder.OnTargetChange += _ => + { + if (Enabled && __instance.ParentUnder.Target == __instance.Slot) + __instance.RunSynchronously(() => __instance.ParentUnder.Target = null!); + }; + } + + [HarmonyPostfix] + [HarmonyPatch(nameof(ChildParentAudioClipPlayer.PlayClip))] + private static void PlayClipPrefix(ChildParentAudioClipPlayer __instance) + { + if (Enabled && __instance.World.CanMakeSynchronousChanges && __instance.ParentUnder.Target == __instance.Slot) + __instance.ParentUnder.Target = null!; + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index 7a54b4f..7be72e0 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ just disable them in the settings in the meantime. * https://github.com/Yellow-Dog-Man/Locale/issues/186 * FlipAtUser component does not respect view position (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1335) * ColorX From HexCode (ProtoFlux node) defaults to Linear profile (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1404) +* ChildParentAudioClipPlayer component crashes the game when it's triggered while its *ParentUnder* field is set to the slot it's on (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1457) * Resolution scale may get stuck at 0.5 when opening and closing the SteamVR dashboard while the game is hitching (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/2337) * `ValueMod` node crashes the game when B input is set to zero or disconnected. (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/2746) * Grid World grid being off-center (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/2754) From 3df719853c6b0831ecb953d041763055f369eabf Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Fri, 23 Jan 2026 00:23:01 +0100 Subject: [PATCH 02/12] Update CI for SDK --- .github/workflows/build.yml | 13 +++---------- .github/workflows/publish.yml | 5 +---- CommunityBugFixCollection.sln | 9 +++++++++ 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c0386f5..303b0d8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,7 +43,7 @@ jobs: - name: Setup Dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.x + dotnet-version: 10.x source-url: https://nuget.pkg.github.com/ResoniteModdingGroup/index.json - name: Add MonkeyLoader NuGet Source @@ -69,10 +69,6 @@ jobs: - name: Move NuGet Packages run: mv (Get-ChildItem -Recurse ./ -Include *.nupkg) ./ - - # Removes the version number from the package name - - name: Rename NuGet Packages - run: Get-ChildItem -Include *.nupkg -Path ./* | Rename-Item -NewName { $_.Name -Replace '\.\d+\.\d+\.\d+.*$','.nupkg' } # Publish the NuGet package(s) as an artifact, so they can be used in the following jobs - name: Upload NuGet Packages Artifact @@ -81,7 +77,7 @@ jobs: name: NuGet Packages if-no-files-found: error retention-days: 7 - path: ./*.nupkg + path: ./CommunityBugFixCollection.nupkg # Only when it's not from a PR to avoid any funny packages in the cache - name: Save NuGet Package Cache @@ -98,12 +94,9 @@ jobs: - name: Setup Dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.x + dotnet-version: 10.x source-url: https://nuget.pkg.github.com/ResoniteModdingGroup/index.json - - name: Add MonkeyLoader NuGet Source - run: dotnet nuget add source https://pkg.munally.com/MonkeyModdingTroop/index.json - - name: Restore NuGet Package Cache uses: actions/cache/restore@v4 with: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3fe7a28..3e65cc7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -68,11 +68,8 @@ jobs: - name: Setup Dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.x + dotnet-version: 10.x source-url: https://nuget.pkg.github.com/ResoniteModdingGroup/index.json - - - name: Add MonkeyLoader NuGet Source - run: dotnet nuget add source https://pkg.munally.com/MonkeyModdingTroop/index.json # Publish all NuGet packages to the GitHub feed # Use --skip-duplicate to prevent errors if a package with the same version already exists. diff --git a/CommunityBugFixCollection.sln b/CommunityBugFixCollection.sln index 0f886f2..e96a192 100644 --- a/CommunityBugFixCollection.sln +++ b/CommunityBugFixCollection.sln @@ -11,6 +11,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution README.md = README.md EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" + ProjectSection(SolutionItems) = preProject + .github\workflows\build.yml = .github\workflows\build.yml + .github\workflows\publish.yml = .github\workflows\publish.yml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -25,6 +31,9 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {07124CF9-EE3D-4A7E-A2F8-8FD07966E423} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7D505B2E-FBA2-4F50-BC1C-838BC8DF0D5C} EndGlobalSection From c7b47dc69761788e19130325d7c1a1042f38ee38 Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Sun, 25 Jan 2026 23:27:44 +0100 Subject: [PATCH 03/12] Fix ChildParentAudioClipPlayer warning appearing on every component --- CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs b/CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs index 689ff9a..27c86eb 100644 --- a/CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs +++ b/CommunityBugFixCollection/NoParentUnderSelfAudioClipPlayer.cs @@ -15,6 +15,9 @@ internal sealed class NoParentUnderSelfAudioClipPlayer : ResoniteEventHandlerMon public override int Priority => HarmonyLib.Priority.Low; + protected override bool AppliesTo(ResolveInspectorHeaderTextEvent eventData) + => base.AppliesTo(eventData) && eventData.Worker is ChildParentAudioClipPlayer; + protected override void Handle(ResolveInspectorHeaderTextEvent eventData) => eventData.AddItem(new(Mod.GetLocaleString("ChildParentAudioClipPlayer.Header"))); From 4cebe7ef8a3115d3781629514e70f37fda5a78fc Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Mon, 2 Mar 2026 21:43:59 +0100 Subject: [PATCH 04/12] Remove all unnecessary usings --- CommunityBugFixCollection/AnyProtocolHyperlinks.cs | 3 --- CommunityBugFixCollection/BetterGridWorldPreset.cs | 3 --- CommunityBugFixCollection/Box.cs | 6 +----- .../BreakDragAndDropCopiedComponentDrives.cs | 6 ------ CommunityBugFixCollection/BugFixOptions.cs | 4 ---- CommunityBugFixCollection/CaseInsensitiveCustomGenerics.cs | 3 --- CommunityBugFixCollection/CenteredNotifications.cs | 3 --- CommunityBugFixCollection/CheckSelfForDuplicateSlot.cs | 3 --- CommunityBugFixCollection/ColorDisplayValueProxy.cs | 3 --- CommunityBugFixCollection/ColorXNodeNamesSpacing.cs | 3 --- .../ConsistentContextMenuAngularSize.cs | 3 --- CommunityBugFixCollection/ConstantNodeNameAdjustments.cs | 3 --- .../CopySyncMemberToClipboardAction.cs | 4 ---- CommunityBugFixCollection/CorrectMaterialGizmoScaling.cs | 3 --- CommunityBugFixCollection/CorrectOverriddenSpelling.cs | 3 --- .../DuplicateAndMoveMultipleGrabbedItems.cs | 4 ---- CommunityBugFixCollection/FadeContextMenuLabelOutlines.cs | 3 --- CommunityBugFixCollection/FireBrushToolDequipEvents.cs | 4 ---- CommunityBugFixCollection/FixMigratedItemMessages.cs | 5 +---- CommunityBugFixCollection/FlipAtUserView.cs | 1 - CommunityBugFixCollection/GammaCorrectedColorXLuminance.cs | 3 --- CommunityBugFixCollection/GroupCloudHomeTemplate.cs | 3 --- CommunityBugFixCollection/HighlightHomeWorldInInventory.cs | 3 --- CommunityBugFixCollection/ImportMultipleAudioFiles.cs | 6 ------ CommunityBugFixCollection/ImportWebFilesAsUrls.cs | 4 ---- CommunityBugFixCollection/LocalizedByteFormatting.cs | 3 --- .../LongerWorldLoadingFailIndication.cs | 3 --- CommunityBugFixCollection/NaNtEqual.cs | 3 --- CommunityBugFixCollection/NoLossOfColorProfile.cs | 4 ---- CommunityBugFixCollection/NoZeroScaleToolRaycast.cs | 3 --- CommunityBugFixCollection/NodeNameAdjustments.cs | 3 --- CommunityBugFixCollection/NonHDRColorClamping.cs | 4 ---- CommunityBugFixCollection/NonLinearColorXFromHexCode.cs | 4 +--- CommunityBugFixCollection/PauseAnimatorUpdates.cs | 3 --- CommunityBugFixCollection/ReallyNoDestroyUndo.cs | 3 --- CommunityBugFixCollection/ResoniteBugFixMonkey.cs | 3 --- CommunityBugFixCollection/SmoothDraggables.cs | 3 --- CommunityBugFixCollection/StationaryGrabWorldActivation.cs | 4 ---- CommunityBugFixCollection/SteamVRFocusResolutionScale.cs | 1 - CommunityBugFixCollection/TiltedUIAlignment.cs | 4 ---- CommunityBugFixCollection/ValidQuaternionInputs.cs | 4 ---- CommunityBugFixCollection/ValueModDecimal.cs | 3 --- CommunityBugFixCollection/WhiteDesktopDebug.cs | 3 --- 43 files changed, 3 insertions(+), 144 deletions(-) diff --git a/CommunityBugFixCollection/AnyProtocolHyperlinks.cs b/CommunityBugFixCollection/AnyProtocolHyperlinks.cs index e8f412a..72f44bd 100644 --- a/CommunityBugFixCollection/AnyProtocolHyperlinks.cs +++ b/CommunityBugFixCollection/AnyProtocolHyperlinks.cs @@ -1,10 +1,7 @@ using Elements.Core; using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/BetterGridWorldPreset.cs b/CommunityBugFixCollection/BetterGridWorldPreset.cs index 1cdf1c6..f60885d 100644 --- a/CommunityBugFixCollection/BetterGridWorldPreset.cs +++ b/CommunityBugFixCollection/BetterGridWorldPreset.cs @@ -2,9 +2,6 @@ using FrooxEngine; using HarmonyLib; using Renderite.Shared; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/Box.cs b/CommunityBugFixCollection/Box.cs index 064adac..ef9d060 100644 --- a/CommunityBugFixCollection/Box.cs +++ b/CommunityBugFixCollection/Box.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace CommunityBugFixCollection +namespace CommunityBugFixCollection { internal sealed class Box where T : struct diff --git a/CommunityBugFixCollection/BreakDragAndDropCopiedComponentDrives.cs b/CommunityBugFixCollection/BreakDragAndDropCopiedComponentDrives.cs index 4931844..865cbe3 100644 --- a/CommunityBugFixCollection/BreakDragAndDropCopiedComponentDrives.cs +++ b/CommunityBugFixCollection/BreakDragAndDropCopiedComponentDrives.cs @@ -2,12 +2,6 @@ using FrooxEngine; using FrooxEngine.UIX; using HarmonyLib; -using MonkeyLoader; -using MonkeyLoader.Meta; -using NuGet.Versioning; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/BugFixOptions.cs b/CommunityBugFixCollection/BugFixOptions.cs index 37dd645..1ead671 100644 --- a/CommunityBugFixCollection/BugFixOptions.cs +++ b/CommunityBugFixCollection/BugFixOptions.cs @@ -1,8 +1,4 @@ using MonkeyLoader.Configuration; -using MonkeyLoader.Patching; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/CaseInsensitiveCustomGenerics.cs b/CommunityBugFixCollection/CaseInsensitiveCustomGenerics.cs index 3313376..660fcea 100644 --- a/CommunityBugFixCollection/CaseInsensitiveCustomGenerics.cs +++ b/CommunityBugFixCollection/CaseInsensitiveCustomGenerics.cs @@ -3,10 +3,7 @@ using MonkeyLoader; using MonkeyLoader.Meta; using MonkeyLoader.Patching; -using System; -using System.Collections.Generic; using System.Reflection; -using System.Text; // Taken from ComponentSelectorAdditions // https://github.com/ResoniteModdingGroup/ComponentSelectorAdditions diff --git a/CommunityBugFixCollection/CenteredNotifications.cs b/CommunityBugFixCollection/CenteredNotifications.cs index 47611ce..a692513 100644 --- a/CommunityBugFixCollection/CenteredNotifications.cs +++ b/CommunityBugFixCollection/CenteredNotifications.cs @@ -1,8 +1,5 @@ using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; // Originally released under MIT-0 here: // https://github.com/art0007i/NotificationFixer diff --git a/CommunityBugFixCollection/CheckSelfForDuplicateSlot.cs b/CommunityBugFixCollection/CheckSelfForDuplicateSlot.cs index ea4b7fc..d7478f9 100644 --- a/CommunityBugFixCollection/CheckSelfForDuplicateSlot.cs +++ b/CommunityBugFixCollection/CheckSelfForDuplicateSlot.cs @@ -1,9 +1,6 @@ using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; using System.Reflection.Emit; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ColorDisplayValueProxy.cs b/CommunityBugFixCollection/ColorDisplayValueProxy.cs index 98a3764..d3fea3b 100644 --- a/CommunityBugFixCollection/ColorDisplayValueProxy.cs +++ b/CommunityBugFixCollection/ColorDisplayValueProxy.cs @@ -3,9 +3,6 @@ using FrooxEngine.ProtoFlux; using FrooxEngine.ProtoFlux.Runtimes.Execution.Nodes; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ColorXNodeNamesSpacing.cs b/CommunityBugFixCollection/ColorXNodeNamesSpacing.cs index cf6a076..f3b968e 100644 --- a/CommunityBugFixCollection/ColorXNodeNamesSpacing.cs +++ b/CommunityBugFixCollection/ColorXNodeNamesSpacing.cs @@ -1,8 +1,5 @@ using Elements.Core; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ConsistentContextMenuAngularSize.cs b/CommunityBugFixCollection/ConsistentContextMenuAngularSize.cs index 5501499..c2ef0d0 100644 --- a/CommunityBugFixCollection/ConsistentContextMenuAngularSize.cs +++ b/CommunityBugFixCollection/ConsistentContextMenuAngularSize.cs @@ -1,9 +1,6 @@ using Elements.Core; using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ConstantNodeNameAdjustments.cs b/CommunityBugFixCollection/ConstantNodeNameAdjustments.cs index d2a7704..316081d 100644 --- a/CommunityBugFixCollection/ConstantNodeNameAdjustments.cs +++ b/CommunityBugFixCollection/ConstantNodeNameAdjustments.cs @@ -1,9 +1,6 @@ using FrooxEngine.ProtoFlux; using FrooxEngine.ProtoFlux.Runtimes.Execution.Nodes.Strings.Characters; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/CopySyncMemberToClipboardAction.cs b/CommunityBugFixCollection/CopySyncMemberToClipboardAction.cs index b78fd47..aa72092 100644 --- a/CommunityBugFixCollection/CopySyncMemberToClipboardAction.cs +++ b/CommunityBugFixCollection/CopySyncMemberToClipboardAction.cs @@ -1,10 +1,6 @@ using FrooxEngine; using MonkeyLoader.Resonite; using MonkeyLoader.Resonite.UI.Inspectors; -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/CorrectMaterialGizmoScaling.cs b/CommunityBugFixCollection/CorrectMaterialGizmoScaling.cs index 7a2c1f4..8c2e811 100644 --- a/CommunityBugFixCollection/CorrectMaterialGizmoScaling.cs +++ b/CommunityBugFixCollection/CorrectMaterialGizmoScaling.cs @@ -1,9 +1,6 @@ using Elements.Core; using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/CorrectOverriddenSpelling.cs b/CommunityBugFixCollection/CorrectOverriddenSpelling.cs index 372745f..2f79868 100644 --- a/CommunityBugFixCollection/CorrectOverriddenSpelling.cs +++ b/CommunityBugFixCollection/CorrectOverriddenSpelling.cs @@ -1,8 +1,5 @@ using Elements.Core; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/DuplicateAndMoveMultipleGrabbedItems.cs b/CommunityBugFixCollection/DuplicateAndMoveMultipleGrabbedItems.cs index 6be47bd..761cf09 100644 --- a/CommunityBugFixCollection/DuplicateAndMoveMultipleGrabbedItems.cs +++ b/CommunityBugFixCollection/DuplicateAndMoveMultipleGrabbedItems.cs @@ -2,10 +2,6 @@ using FrooxEngine; using FrooxEngine.Undo; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using static FrooxEngine.Worker; diff --git a/CommunityBugFixCollection/FadeContextMenuLabelOutlines.cs b/CommunityBugFixCollection/FadeContextMenuLabelOutlines.cs index baac20b..34607dc 100644 --- a/CommunityBugFixCollection/FadeContextMenuLabelOutlines.cs +++ b/CommunityBugFixCollection/FadeContextMenuLabelOutlines.cs @@ -3,9 +3,6 @@ using FrooxEngine.FrooxEngine.ProtoFlux.CoreNodes; using FrooxEngine.ProtoFlux.Runtimes.Execution.Nodes.Color; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/FireBrushToolDequipEvents.cs b/CommunityBugFixCollection/FireBrushToolDequipEvents.cs index 05ce3a2..fae7d75 100644 --- a/CommunityBugFixCollection/FireBrushToolDequipEvents.cs +++ b/CommunityBugFixCollection/FireBrushToolDequipEvents.cs @@ -1,10 +1,6 @@ using FrooxEngine; using HarmonyLib; using MonkeyLoader.Patching; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/FixMigratedItemMessages.cs b/CommunityBugFixCollection/FixMigratedItemMessages.cs index 44bd4b4..d5eeb6f 100644 --- a/CommunityBugFixCollection/FixMigratedItemMessages.cs +++ b/CommunityBugFixCollection/FixMigratedItemMessages.cs @@ -1,9 +1,6 @@ using FrooxEngine; using HarmonyLib; using SkyFrost.Base; -using System; -using System.Collections.Generic; -using System.Text; // Originally released under MIT-0 here: // https://github.com/art0007i/FixMigratedItemMessages @@ -18,7 +15,7 @@ internal sealed class FixMigratedItemMessages : ResoniteBugFixMonkey Authors => Contributors.Art0007i; - public static void Prefix(ref Record record) + public static void Prefix(Record record) { if (Enabled && record.AssetURI.StartsWith(OldPrefix)) record.AssetURI = $"{Engine.Current.PlatformProfile.DBScheme}{record.AssetURI[OldPrefix.Length..]}"; diff --git a/CommunityBugFixCollection/FlipAtUserView.cs b/CommunityBugFixCollection/FlipAtUserView.cs index 1f5e450..edf1b15 100644 --- a/CommunityBugFixCollection/FlipAtUserView.cs +++ b/CommunityBugFixCollection/FlipAtUserView.cs @@ -1,7 +1,6 @@ using Elements.Core; using FrooxEngine; using HarmonyLib; -using System.Collections.Generic; using System.Reflection.Emit; namespace CommunityBugFixCollection diff --git a/CommunityBugFixCollection/GammaCorrectedColorXLuminance.cs b/CommunityBugFixCollection/GammaCorrectedColorXLuminance.cs index 4e2e643..c8e5756 100644 --- a/CommunityBugFixCollection/GammaCorrectedColorXLuminance.cs +++ b/CommunityBugFixCollection/GammaCorrectedColorXLuminance.cs @@ -1,9 +1,6 @@ using Elements.Core; using HarmonyLib; using Renderite.Shared; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/GroupCloudHomeTemplate.cs b/CommunityBugFixCollection/GroupCloudHomeTemplate.cs index ef35c1c..9779cae 100644 --- a/CommunityBugFixCollection/GroupCloudHomeTemplate.cs +++ b/CommunityBugFixCollection/GroupCloudHomeTemplate.cs @@ -1,9 +1,6 @@ using FrooxEngine; using HarmonyLib; using SkyFrost.Base; -using System; -using System.Collections.Generic; -using System.Text; // Initially done by https://github.com/goaaats diff --git a/CommunityBugFixCollection/HighlightHomeWorldInInventory.cs b/CommunityBugFixCollection/HighlightHomeWorldInInventory.cs index e4f82e7..de69bf1 100644 --- a/CommunityBugFixCollection/HighlightHomeWorldInInventory.cs +++ b/CommunityBugFixCollection/HighlightHomeWorldInInventory.cs @@ -1,9 +1,6 @@ using FrooxEngine; using HarmonyLib; using SkyFrost.Base; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ImportMultipleAudioFiles.cs b/CommunityBugFixCollection/ImportMultipleAudioFiles.cs index dfc26b0..1072aef 100644 --- a/CommunityBugFixCollection/ImportMultipleAudioFiles.cs +++ b/CommunityBugFixCollection/ImportMultipleAudioFiles.cs @@ -5,12 +5,6 @@ using FrooxEngine.Undo; using HarmonyLib; using SkyFrost.Base; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ImportWebFilesAsUrls.cs b/CommunityBugFixCollection/ImportWebFilesAsUrls.cs index 60c271e..96e7d87 100644 --- a/CommunityBugFixCollection/ImportWebFilesAsUrls.cs +++ b/CommunityBugFixCollection/ImportWebFilesAsUrls.cs @@ -1,10 +1,6 @@ using Elements.Assets; using Elements.Core; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/LocalizedByteFormatting.cs b/CommunityBugFixCollection/LocalizedByteFormatting.cs index 8f99fc0..e0b0952 100644 --- a/CommunityBugFixCollection/LocalizedByteFormatting.cs +++ b/CommunityBugFixCollection/LocalizedByteFormatting.cs @@ -6,11 +6,8 @@ using MonkeyLoader.Patching; using MonkeyLoader.Resonite; using MonkeyLoader.Resonite.Locale; -using System.Collections.Generic; using System.Globalization; using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/LongerWorldLoadingFailIndication.cs b/CommunityBugFixCollection/LongerWorldLoadingFailIndication.cs index 68a01b5..61e64a9 100644 --- a/CommunityBugFixCollection/LongerWorldLoadingFailIndication.cs +++ b/CommunityBugFixCollection/LongerWorldLoadingFailIndication.cs @@ -1,9 +1,6 @@ using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; using System.Reflection.Emit; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/NaNtEqual.cs b/CommunityBugFixCollection/NaNtEqual.cs index 1665552..6a2b29d 100644 --- a/CommunityBugFixCollection/NaNtEqual.cs +++ b/CommunityBugFixCollection/NaNtEqual.cs @@ -3,9 +3,6 @@ using HarmonyLib; using ProtoFlux.Runtimes.Execution; using ProtoFlux.Runtimes.Execution.Nodes; -using System; -using System.Collections.Generic; -using System.Text; using ExecutionContext = ProtoFlux.Runtimes.Execution.ExecutionContext; namespace CommunityBugFixCollection diff --git a/CommunityBugFixCollection/NoLossOfColorProfile.cs b/CommunityBugFixCollection/NoLossOfColorProfile.cs index fd77579..c5a0027 100644 --- a/CommunityBugFixCollection/NoLossOfColorProfile.cs +++ b/CommunityBugFixCollection/NoLossOfColorProfile.cs @@ -1,11 +1,7 @@ using Elements.Core; using HarmonyLib; using Renderite.Shared; -using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/NoZeroScaleToolRaycast.cs b/CommunityBugFixCollection/NoZeroScaleToolRaycast.cs index d381c32..db82b67 100644 --- a/CommunityBugFixCollection/NoZeroScaleToolRaycast.cs +++ b/CommunityBugFixCollection/NoZeroScaleToolRaycast.cs @@ -1,9 +1,6 @@ using Elements.Core; using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/NodeNameAdjustments.cs b/CommunityBugFixCollection/NodeNameAdjustments.cs index 93ca334..61e862e 100644 --- a/CommunityBugFixCollection/NodeNameAdjustments.cs +++ b/CommunityBugFixCollection/NodeNameAdjustments.cs @@ -1,9 +1,6 @@ using FrooxEngine.ProtoFlux; using FrooxEngine.ProtoFlux.Runtimes.Execution.Nodes.Math; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/NonHDRColorClamping.cs b/CommunityBugFixCollection/NonHDRColorClamping.cs index 5e711a3..aad1484 100644 --- a/CommunityBugFixCollection/NonHDRColorClamping.cs +++ b/CommunityBugFixCollection/NonHDRColorClamping.cs @@ -1,10 +1,6 @@ using Elements.Core; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Linq; using System.Reflection; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/NonLinearColorXFromHexCode.cs b/CommunityBugFixCollection/NonLinearColorXFromHexCode.cs index 2ec24d0..326c5f3 100644 --- a/CommunityBugFixCollection/NonLinearColorXFromHexCode.cs +++ b/CommunityBugFixCollection/NonLinearColorXFromHexCode.cs @@ -1,9 +1,7 @@ using Elements.Core; using HarmonyLib; using Renderite.Shared; -using System; -using System.Collections.Generic; -using System.Text; +using System.Diagnostics.CodeAnalysis; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/PauseAnimatorUpdates.cs b/CommunityBugFixCollection/PauseAnimatorUpdates.cs index 920f458..c7f8bdd 100644 --- a/CommunityBugFixCollection/PauseAnimatorUpdates.cs +++ b/CommunityBugFixCollection/PauseAnimatorUpdates.cs @@ -1,8 +1,5 @@ using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; using System.Runtime.CompilerServices; namespace CommunityBugFixCollection diff --git a/CommunityBugFixCollection/ReallyNoDestroyUndo.cs b/CommunityBugFixCollection/ReallyNoDestroyUndo.cs index 70e7370..77928b5 100644 --- a/CommunityBugFixCollection/ReallyNoDestroyUndo.cs +++ b/CommunityBugFixCollection/ReallyNoDestroyUndo.cs @@ -1,9 +1,6 @@ using FrooxEngine; using FrooxEngine.Undo; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ResoniteBugFixMonkey.cs b/CommunityBugFixCollection/ResoniteBugFixMonkey.cs index d4df327..dda006e 100644 --- a/CommunityBugFixCollection/ResoniteBugFixMonkey.cs +++ b/CommunityBugFixCollection/ResoniteBugFixMonkey.cs @@ -2,9 +2,6 @@ using MonkeyLoader.Meta; using MonkeyLoader.Patching; using MonkeyLoader.Resonite; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/SmoothDraggables.cs b/CommunityBugFixCollection/SmoothDraggables.cs index 453b402..3d8a24e 100644 --- a/CommunityBugFixCollection/SmoothDraggables.cs +++ b/CommunityBugFixCollection/SmoothDraggables.cs @@ -1,9 +1,6 @@ using FrooxEngine; using HarmonyLib; using Renderite.Shared; -using System; -using System.Collections.Generic; -using System.Text; // Originally released under MIT by LeCloutPanda here: // https://github.com/LeCloutPanda/SoNoHeadCrash diff --git a/CommunityBugFixCollection/StationaryGrabWorldActivation.cs b/CommunityBugFixCollection/StationaryGrabWorldActivation.cs index 1fb77f8..db1d38c 100644 --- a/CommunityBugFixCollection/StationaryGrabWorldActivation.cs +++ b/CommunityBugFixCollection/StationaryGrabWorldActivation.cs @@ -1,9 +1,5 @@ using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; // Originally released under MIT-0 here: // https://github.com/art0007i/FixGrabWorld diff --git a/CommunityBugFixCollection/SteamVRFocusResolutionScale.cs b/CommunityBugFixCollection/SteamVRFocusResolutionScale.cs index df4fb7e..95384b3 100644 --- a/CommunityBugFixCollection/SteamVRFocusResolutionScale.cs +++ b/CommunityBugFixCollection/SteamVRFocusResolutionScale.cs @@ -1,5 +1,4 @@ using HarmonyLib; -using System.Collections.Generic; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/TiltedUIAlignment.cs b/CommunityBugFixCollection/TiltedUIAlignment.cs index a36eaa0..f0a305f 100644 --- a/CommunityBugFixCollection/TiltedUIAlignment.cs +++ b/CommunityBugFixCollection/TiltedUIAlignment.cs @@ -3,10 +3,6 @@ using HarmonyLib; using MonkeyLoader; using MonkeyLoader.Configuration; -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ValidQuaternionInputs.cs b/CommunityBugFixCollection/ValidQuaternionInputs.cs index 5e5f695..d174cd3 100644 --- a/CommunityBugFixCollection/ValidQuaternionInputs.cs +++ b/CommunityBugFixCollection/ValidQuaternionInputs.cs @@ -2,10 +2,6 @@ using FrooxEngine.ProtoFlux; using FrooxEngine.ProtoFlux.Runtimes.Execution.Nodes; using HarmonyLib; -using MonkeyLoader; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/ValueModDecimal.cs b/CommunityBugFixCollection/ValueModDecimal.cs index 7fe8cb9..6175bfc 100644 --- a/CommunityBugFixCollection/ValueModDecimal.cs +++ b/CommunityBugFixCollection/ValueModDecimal.cs @@ -1,8 +1,5 @@ using Elements.Core; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; namespace CommunityBugFixCollection { diff --git a/CommunityBugFixCollection/WhiteDesktopDebug.cs b/CommunityBugFixCollection/WhiteDesktopDebug.cs index 720517c..24136b2 100644 --- a/CommunityBugFixCollection/WhiteDesktopDebug.cs +++ b/CommunityBugFixCollection/WhiteDesktopDebug.cs @@ -1,9 +1,6 @@ using Elements.Core; using FrooxEngine; using HarmonyLib; -using System; -using System.Collections.Generic; -using System.Text; using static FrooxEngine.LocomotionSimulator; namespace CommunityBugFixCollection From d89157908043c6dd98766f3f90148000880c7c7e Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Mon, 2 Mar 2026 21:57:58 +0100 Subject: [PATCH 05/12] Prevent AudioUpdate from updating listeners when already removed Adds a fix for https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4286 --- CommunityBugFixCollection/Locale/de.json | 9 ++++---- CommunityBugFixCollection/Locale/en.json | 1 + .../NoAudioOutputCrash.cs | 21 +++++++++++++++++++ README.md | 1 + 4 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 CommunityBugFixCollection/NoAudioOutputCrash.cs diff --git a/CommunityBugFixCollection/Locale/de.json b/CommunityBugFixCollection/Locale/de.json index ef4cffd..10bbadd 100644 --- a/CommunityBugFixCollection/Locale/de.json +++ b/CommunityBugFixCollection/Locale/de.json @@ -13,7 +13,7 @@ "CommunityBugFixCollection.CaseInsensitiveCustomGenerics.Description": "Macht das Auswählen von eigenen generischen Typparametern unabhängig von Groß- und Kleinschreibung.", "CommunityBugFixCollection.CenteredNotifications.Description": "Zentriert den Inhalt von Benachrichtigungen.", "CommunityBugFixCollection.CheckSelfForDuplicateSlot.Description": "Verhindert einen Crash wenn der OverrideParent bei der Duplicate Slot ProtoFlux Node gleich dem Template ist.", - "CommunityBugFixCollection.ColorDisplayValueProxy.Description": "Sorgt dafür, dass ValueDisplay Nodes eine ValueProxySource Komponente haben.", + "CommunityBugFixCollection.ColorDisplayValueProxy.Description": "Sorgt dafür, dass ValueDisplay Nodes eine ValueProxySource-Komponente haben.", "CommunityBugFixCollection.ColorXNodeNamesSpacing.Description": "Korrigiert die Schreibweise der Namen von ProtoFlux Nodes die ColorX enthalten.", "CommunityBugFixCollection.ConsistentContextMenuAngularSize.Description": "Sorgt dafür, dass das Kontextmenü im Desktopmodus immer die gleiche Größe auf dem Bildschirm hat, unabhängig vom Sichtfeld (FOV).", "CommunityBugFixCollection.ConstantNodeNameAdjustments.Name": "(Alt) Constant Nodenamen Anpassungen", @@ -30,9 +30,10 @@ "CommunityBugFixCollection.HighlightHomeWorldInInventory.Description": "Sorgt dafür, dass die ausgewählte Heimatwelt im Inventar korrekt hervorgehoben wird.", "CommunityBugFixCollection.ImportMultipleAudioFiles.Description": "Macht es möglich mehrere Audiodateien auf einmal zu importieren.", "CommunityBugFixCollection.ImportWebFilesAsUrls.Description": "Sorgt dafür, dass URLs zu Textdateien oder Resonite Packages nicht importiert werden, statt als Hyperlink aufzutauchen.", - "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Lokalisiert die Speichereinheiten (MiB, GiB, etc.), inbsesondere bei der StorageUsageStatus Komponente. Es gibt eine Einstellung dafür, die Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) zu formatieren.", + "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Lokalisiert die Speichereinheiten (MiB, GiB, etc.), inbsesondere bei der StorageUsageStatus-Komponente. Es gibt eine Einstellung dafür, die Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) zu formatieren.", "CommunityBugFixCollection.LongerWorldLoadingFailIndication.Description": "Lässt den Welt-Ladefortschritts-Indikator frühestens nach 20s verschwinden, falls der Vorgang fehlgeschlagen ist.", - "CommunityBugFixCollection.NaNtEqual.Description": "Sorgt dafür, dass NaN float / double Werte sich bei den == und != ProtoFlux Nodes sowie bei der ValueEqualityDriver Komponente niemals gleichen.", + "CommunityBugFixCollection.NaNtEqual.Description": "Sorgt dafür, dass NaN float / double Werte sich bei den == und != ProtoFlux Nodes sowie bei der ValueEqualityDriver-Komponente niemals gleichen.", + "CommunityBugFixCollection.NoAudioOutputCrash.Description": "Verhindert, dass die AudioOutput-Komponente ihre Listener aktualisiert nachdem sie entfernt wurde und damit die Session crasht.", "CommunityBugFixCollection.NoLossOfColorProfile.Description": "Verhindert, dass Farbprofile nicht bei allen Berechnungen erhalten bleiben.", "CommunityBugFixCollection.NoZeroScaleToolRaycast.Description": "Verhinder einen Crash wenn (Multi-)Werkzeuge auf null skaliert werden.", "CommunityBugFixCollection.NodeNameAdjustments.Description": "Verbessert die verwirrenden Namen der Remap [-1; 1] zu [0; 1] ProtoFlux Nodes.", @@ -40,7 +41,7 @@ "CommunityBugFixCollection.NonLinearColorXFromHexCode.Description": "Zwingt colorX From HexCode das sRGB statt dem Linearen Farbprofil zu nutzen.", "CommunityBugFixCollection.NoParentUnderSelfAudioClipPlayer.Description": "Verhindert, dass die ChildParentAudioClipPlayer-Komponente das Spiel crasht, wenn ihr ParentUnder-Feld auf den Slot, auf dem sie ist, gesetzt ist. Fügt außerdem eine Erklärung des Problems im Header hinzu.", "CommunityBugFixCollection.PauseAnimatorUpdates.Description": "Verhindert, dass Animatoren jeden Frame in alle assoziierten Felder schreiben, obwohl sie nicht am animieren sind.", - "CommunityBugFixCollection.ReallyNoDestroyUndo.Description": "Sorgt dafür, dass die NoDestroyUndo Komponente tatsächlich verhindert, dass das Zerstören eines Objekts rückgängig gemacht werden kann.", + "CommunityBugFixCollection.ReallyNoDestroyUndo.Description": "Sorgt dafür, dass die NoDestroyUndo-Komponente tatsächlich verhindert, dass das Zerstören eines Objekts rückgängig gemacht werden kann.", "CommunityBugFixCollection.SmoothDraggables.Description": "Umgeht, dass Slider und Joints in Headless-Sessions verrutschen.", "CommunityBugFixCollection.TiltedUIAlignment.Description": "Kippt die UI-fokussierte Kamera, um UIX-Renderprobleme zum umgehen.", "CommunityBugFixCollection.SteamVRFocusResolutionScale.Description": "Verhindert, dass das SteamVR Unity Plugin die Renderauflösung dauerhaft verringert, wenn ein Fokusevent verpasst wird.", diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index 628284d..bc4bb26 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -39,6 +39,7 @@ "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Localizes the storage units (MiB, GiB, etc.), in particular for the StorageUsageStatus component. There's an option to use IEC format (factor 1024) over decimal (factor 1000).", "CommunityBugFixCollection.LongerWorldLoadingFailIndication.Description": "Only lets the World Load Progress Indicator disappear after 20s or more if the process failed.", "CommunityBugFixCollection.NaNtEqual.Description": "Makes NaN floats / doubles never equal to each other for the ProtoFlux == and != nodes, as well as the ValueEqualityDriver component.", + "CommunityBugFixCollection.NoAudioOutputCrash.Description": "Prevents the AudioOutput component from updating listeners when it's been removed and crashing the sessions.", "CommunityBugFixCollection.NoLossOfColorProfile.Description": "Fixes Color Profile not being preserved on all operations.", "CommunityBugFixCollection.NoZeroScaleToolRaycast.Description": "Fixes a crash when a (multi)tool is scaled to zero.", "CommunityBugFixCollection.NodeNameAdjustments.Description": "Fixes the confusing names of the Remap [-1; 1] to [0; 1] ProtoFlux nodes.", diff --git a/CommunityBugFixCollection/NoAudioOutputCrash.cs b/CommunityBugFixCollection/NoAudioOutputCrash.cs new file mode 100644 index 0000000..aa2fd3d --- /dev/null +++ b/CommunityBugFixCollection/NoAudioOutputCrash.cs @@ -0,0 +1,21 @@ +using FrooxEngine; +using HarmonyLib; + +namespace CommunityBugFixCollection +{ + [HarmonyPatchCategory(nameof(NoAudioOutputCrash))] + [HarmonyPatch(typeof(AudioOutput), nameof(AudioOutput.UpdateNativeOutput))] + internal sealed class NoAudioOutputCrash : ResoniteBugFixMonkey + { + public override IEnumerable Authors => Contributors.Nytra; + + private static bool Prefix(AudioOutput __instance) + { + if (__instance.Slot.Parent.FilterWorldElement() is not null) + return true; + + __instance._updateRegistered = false; + return false; + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index 7be72e0..2ae0577 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ just disable them in the settings in the meantime. * Animators updating all associated fields every frame while enabled but not playing (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/3480) * Grid World floor shaking on AMD and Intel GPUs (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/3829) * DuplicateSlot ProtoFlux node crashes game when if OverrideParent is identical to Template (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/3950) +* Instantly removing an AudioOutput component crashes the session (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4286) Fixes with no issue (that could be found). * Content of notification being off-center. From 4f2b2b819550cb405a6f2d54ee6bfe73a3642af1 Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Thu, 5 Mar 2026 22:14:45 +0100 Subject: [PATCH 06/12] Prevent April Fools content from triggering for users in universes with optional setting to force april fools at any time. This adds a fix for https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4016 - If you're reading this, Prime, I hope this motivates you to fix it in vanilla before the end of the month, too ;) --- CommunityBugFixCollection/BugFixOptions.cs | 11 +++++- CommunityBugFixCollection/Locale/de.json | 3 ++ CommunityBugFixCollection/Locale/en.json | 3 ++ .../NoFunForCorporate.cs | 39 +++++++++++++++++++ README.md | 4 +- 5 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 CommunityBugFixCollection/NoFunForCorporate.cs diff --git a/CommunityBugFixCollection/BugFixOptions.cs b/CommunityBugFixCollection/BugFixOptions.cs index 1ead671..917b7ad 100644 --- a/CommunityBugFixCollection/BugFixOptions.cs +++ b/CommunityBugFixCollection/BugFixOptions.cs @@ -4,20 +4,27 @@ namespace CommunityBugFixCollection { internal sealed class BugFixOptions : SingletonConfigSection { + private static readonly DefiningConfigKey _forceAprilFools = new("ForceAprilFools", "Whether to force April Fools content to be active.", () => false); + private static readonly DefiningConfigKey _useIecByteFormat = new("UseIecByteFormat", "Whether to format bytes using IEC as opposed to decimal format when LocalizedByteFormatting is enabled.", () => true); /// public override string Description => "Contains the settings for the few fixes that offer them."; + /// + /// Gets whether to force April Fools content to be active. + /// + public bool ForceAprilFools => _forceAprilFools; + /// public override string Id => "Options"; /// /// Gets whether should format bytes using IEC or decimal format. /// - public bool UseIecByteFormat => _useIecByteFormat.GetValue(); + public bool UseIecByteFormat => _useIecByteFormat; /// - public override Version Version { get; } = new(1, 0, 0); + public override Version Version { get; } = new(1, 1, 0); } } \ No newline at end of file diff --git a/CommunityBugFixCollection/Locale/de.json b/CommunityBugFixCollection/Locale/de.json index 10bbadd..358e062 100644 --- a/CommunityBugFixCollection/Locale/de.json +++ b/CommunityBugFixCollection/Locale/de.json @@ -37,6 +37,7 @@ "CommunityBugFixCollection.NoLossOfColorProfile.Description": "Verhindert, dass Farbprofile nicht bei allen Berechnungen erhalten bleiben.", "CommunityBugFixCollection.NoZeroScaleToolRaycast.Description": "Verhinder einen Crash wenn (Multi-)Werkzeuge auf null skaliert werden.", "CommunityBugFixCollection.NodeNameAdjustments.Description": "Verbessert die verwirrenden Namen der Remap [-1; 1] zu [0; 1] ProtoFlux Nodes.", + "CommunityBugFixCollection.NoFunForCorporate.Description": "Verhindert, dass Aprilscherz-Inhalte ausgelöst werden, wenn der Nutzer in einem Universe ist.
Dies wird durch die Erzwinge Aprilscherze Einstellung überschrieben, welche erzwingt, dass diese Inhalte aktiv sind.", "CommunityBugFixCollection.NonHDRColorClamping.Description": "Korrigiert, dass die nicht-HDR Varianten der Color(X) Kanal-Additionen die Werte nicht limitieren.", "CommunityBugFixCollection.NonLinearColorXFromHexCode.Description": "Zwingt colorX From HexCode das sRGB statt dem Linearen Farbprofil zu nutzen.", "CommunityBugFixCollection.NoParentUnderSelfAudioClipPlayer.Description": "Verhindert, dass die ChildParentAudioClipPlayer-Komponente das Spiel crasht, wenn ihr ParentUnder-Feld auf den Slot, auf dem sie ist, gesetzt ist. Fügt außerdem eine Erklärung des Problems im Header hinzu.", @@ -51,6 +52,8 @@ "CommunityBugFixCollection.Config.Options.Name": "Optionen", "CommunityBugFixCollection.Config.Options.Description": "Enthällt die Einstellungen für die wenigen Fixes die diese anbieten.", + "CommunityBugFixCollection.Config.Options.ForceAprilFools.Name": "Erzwinge Aprilscherze", + "CommunityBugFixCollection.Config.Options.ForceAprilFools.Description": "Ob Aprilscherz-Inhalte erzwungenermaßen aktiv sein sollen.", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Name": "IEC Byte-Format Benutzen", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Description": "Ob Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) formatiert werden sollen, wenn LocalizedByteFormatting aktiviert ist.", diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index bc4bb26..4728619 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -43,6 +43,7 @@ "CommunityBugFixCollection.NoLossOfColorProfile.Description": "Fixes Color Profile not being preserved on all operations.", "CommunityBugFixCollection.NoZeroScaleToolRaycast.Description": "Fixes a crash when a (multi)tool is scaled to zero.", "CommunityBugFixCollection.NodeNameAdjustments.Description": "Fixes the confusing names of the Remap [-1; 1] to [0; 1] ProtoFlux nodes.", + "CommunityBugFixCollection.NoFunForCorporate.Description": "Prevents April Fools related content from triggering when the user is in a Universe.
This is overridden by the Force April Fools setting, which forces this content to be active.", "CommunityBugFixCollection.NonHDRColorClamping.Description": "Fixes non-HDR variants of Color(X) channel addition not clamping.", "CommunityBugFixCollection.NonLinearColorXFromHexCode.Description": "Forces colorX From HexCode to use the sRGB rather than Linear profile.", "CommunityBugFixCollection.NoParentUnderSelfAudioClipPlayer.Description": "Prevents the ChildParentAudioClipPlayer components from crashing the game if their ParentUnder field is set to the slot that it's on. Also adds a header text explaining the problem.", @@ -57,6 +58,8 @@ "CommunityBugFixCollection.Config.Options.Name": "Options", "CommunityBugFixCollection.Config.Options.Description": "Contains the settings for the few fixes that offer them.", + "CommunityBugFixCollection.Config.Options.ForceAprilFools.Name": "Force April Fools", + "CommunityBugFixCollection.Config.Options.ForceAprilFools.Description": "Whether to force April Fools content to be active.", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Name": "Use IEC Byte Format", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Description": "Whether to format bytes using IEC (factor 1024) as opposed to decimal format (factor 1000) when LocalizedByteFormatting is enabled.", diff --git a/CommunityBugFixCollection/NoFunForCorporate.cs b/CommunityBugFixCollection/NoFunForCorporate.cs new file mode 100644 index 0000000..c00967d --- /dev/null +++ b/CommunityBugFixCollection/NoFunForCorporate.cs @@ -0,0 +1,39 @@ +using FrooxEngine; +using HarmonyLib; + +namespace CommunityBugFixCollection +{ + [HarmonyPatch] + [HarmonyPatchCategory(nameof(NoFunForCorporate))] + internal sealed class NoFunForCorporate : ResoniteBugFixMonkey + { + public override IEnumerable Authors => Contributors.Banane9; + + [HarmonyPrefix] + [HarmonyPatch(typeof(Engine), nameof(Engine.IsAprilFools), MethodType.Getter)] + private static bool EngineIsAprilFoolsPrefix(ref bool __result) + { + if (!Enabled) + return true; + + if (ConfigSection.ForceAprilFools) + { + __result = true; + return false; + } + + if (Engine.Current.InUniverse) + { + __result = false; + return false; + } + + return true; + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(ViolentAprilFoolsExplosion), nameof(ViolentAprilFoolsExplosion.OnDestroying))] + private static bool ViolentAprilFoolsExplosionOnDestroyingPrefix() + => !Enabled || ConfigSection.ForceAprilFools || !Engine.Current.InUniverse; + } +} \ No newline at end of file diff --git a/README.md b/README.md index 2ae0577..e15e016 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,7 @@ just disable them in the settings in the meantime. * Animators updating all associated fields every frame while enabled but not playing (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/3480) * Grid World floor shaking on AMD and Intel GPUs (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/3829) * DuplicateSlot ProtoFlux node crashes game when if OverrideParent is identical to Template (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/3950) +* April Fools content is active for users in Universes (commercial usage) (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4016) * Instantly removing an AudioOutput component crashes the session (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4286) Fixes with no issue (that could be found). @@ -91,7 +92,8 @@ just disable them in the settings in the meantime. ## Closed Issues -The issues that were first closed in this mod but have officially been closed now will be linked in the following list. +The issues that were first covered by this mod, +but have officially been implemented now, will be linked in the following list. If they appear here, their implementation has been removed from the mod, unless it is marked with `(Legacy)`. In that case, the original fix is left in but disabled by default. From ba63febefce2f484bdd2495e05b8333a6e72cbf1 Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Fri, 6 Mar 2026 20:24:02 +0100 Subject: [PATCH 07/12] Add forcing april fools to be active to the readme and list which monkey needs to be activated --- CommunityBugFixCollection/Locale/de.json | 2 +- CommunityBugFixCollection/Locale/en.json | 2 +- README.md | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CommunityBugFixCollection/Locale/de.json b/CommunityBugFixCollection/Locale/de.json index 358e062..5b5bca2 100644 --- a/CommunityBugFixCollection/Locale/de.json +++ b/CommunityBugFixCollection/Locale/de.json @@ -53,7 +53,7 @@ "CommunityBugFixCollection.Config.Options.Name": "Optionen", "CommunityBugFixCollection.Config.Options.Description": "Enthällt die Einstellungen für die wenigen Fixes die diese anbieten.", "CommunityBugFixCollection.Config.Options.ForceAprilFools.Name": "Erzwinge Aprilscherze", - "CommunityBugFixCollection.Config.Options.ForceAprilFools.Description": "Ob Aprilscherz-Inhalte erzwungenermaßen aktiv sein sollen.", + "CommunityBugFixCollection.Config.Options.ForceAprilFools.Description": "Ob Aprilscherz-Inhalte erzwungenermaßen aktiv sein sollen. Setzt voraus, dass der NoFunForCorporate Monkey aktiviert ist.", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Name": "IEC Byte-Format Benutzen", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Description": "Ob Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) formatiert werden sollen, wenn LocalizedByteFormatting aktiviert ist.", diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index 4728619..8f7f3f6 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -59,7 +59,7 @@ "CommunityBugFixCollection.Config.Options.Name": "Options", "CommunityBugFixCollection.Config.Options.Description": "Contains the settings for the few fixes that offer them.", "CommunityBugFixCollection.Config.Options.ForceAprilFools.Name": "Force April Fools", - "CommunityBugFixCollection.Config.Options.ForceAprilFools.Description": "Whether to force April Fools content to be active.", + "CommunityBugFixCollection.Config.Options.ForceAprilFools.Description": "Whether to force April Fools content to be active. Requires NoFunForCorporate monkey to be enabled.", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Name": "Use IEC Byte Format", "CommunityBugFixCollection.Config.Options.UseIecByteFormat.Description": "Whether to format bytes using IEC (factor 1024) as opposed to decimal format (factor 1000) when LocalizedByteFormatting is enabled.", diff --git a/README.md b/README.md index e15e016..27306d8 100644 --- a/README.md +++ b/README.md @@ -88,6 +88,7 @@ If any of them have been implemented and not removed from the mod, just disable them in the settings in the meantime. * _Copy to Clipboard_ action on any non-reference member fields in Inspectors (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/810) +* Force April Fools content to be active ## Closed Issues From 48b91e34eba952f40b52747b3792eabbc01eaa27 Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Fri, 13 Mar 2026 10:57:22 +0100 Subject: [PATCH 08/12] Update GridWorld Preset for new resonite version and make collider thicker Fixes #71; Fixes #81 --- .../BetterGridWorldPreset.cs | 36 +++++++++++++++---- .../CommunityBugFixCollection.csproj | 2 +- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/CommunityBugFixCollection/BetterGridWorldPreset.cs b/CommunityBugFixCollection/BetterGridWorldPreset.cs index f60885d..1282c53 100644 --- a/CommunityBugFixCollection/BetterGridWorldPreset.cs +++ b/CommunityBugFixCollection/BetterGridWorldPreset.cs @@ -1,5 +1,8 @@ using Elements.Core; using FrooxEngine; +using FrooxEngine.FrooxEngine.ProtoFlux.CoreNodes; +using FrooxEngine.ProtoFlux.Runtimes.Execution.Nodes; +using FrooxEngine.ProtoFlux.Runtimes.Execution.Nodes.Operators; using HarmonyLib; using Renderite.Shared; @@ -16,14 +19,16 @@ private static bool Prefix(World w) if (!Enabled) return true; - WorldPresets.BlankWorld(w); + WorldPresets.SetupWorldControllers(w); + WorldPresets.SetupSimpleSkyBox(w, WorldPresets.SetupSimpleWorldLighting(w)); var ground = w.AddSlot("Ground"); - ground.LocalRotation = floatQ.Euler(90, 0, 0); var attachedModel = ground.AttachMesh(); - attachedModel.mesh.Size.Value = 1000 * float2.One; + attachedModel.mesh.Facing = float3.Up; attachedModel.mesh.Points.Value = 20 * int2.One; + attachedModel.mesh.Size.Value = 1000 * float2.One; + attachedModel.mesh.UVScale.DriveFrom(attachedModel.mesh.Size, true); var gridTexture = ground.AttachComponent(); gridTexture.BackgroundColor.Value = new colorX(0.07f, 0.08f, 0.11f); @@ -45,15 +50,32 @@ private static bool Prefix(World w) majorGrid.Offset.Value = int2.Zero; attachedModel.material.AlbedoTexture.Target = gridTexture; - attachedModel.material.TextureScale.DriveFrom(attachedModel.mesh.Size); attachedModel.material.Smoothness.Value = 0f; var boxCollider = ground.AttachComponent(); - var swizzle = ground.AttachComponent(); - swizzle.Source.Target = attachedModel.mesh.Size; - swizzle.Target.Target = boxCollider.Size; + boxCollider.Offset.Value = new(0, -0.5f, 0); boxCollider.SetCharacterCollider(); + var swizzleSlot = ground.AddSlot("Collider Swizzle"); + + var meshSizeSource = swizzleSlot.AttachComponent>(); + meshSizeSource.TrySetRootSource(attachedModel.mesh.Size); + + var unpackSize = swizzleSlot.AttachComponent(); + unpackSize.V.Target = meshSizeSource; + + var oneConstant = swizzleSlot.AttachComponent>(); + oneConstant.Value.Value = 1; + + var packSize = swizzleSlot.AttachComponent(); + packSize.X.Target = unpackSize.X; + packSize.Y.Target = oneConstant; + packSize.Z.Target = unpackSize.Y; + + var colliderSizeDrive = swizzleSlot.AttachComponent>(); + colliderSizeDrive.TrySetRootTarget(boxCollider.Size); + colliderSizeDrive.Value.Target = packSize; + return false; } } diff --git a/CommunityBugFixCollection/CommunityBugFixCollection.csproj b/CommunityBugFixCollection/CommunityBugFixCollection.csproj index ac2eba5..4194b95 100644 --- a/CommunityBugFixCollection/CommunityBugFixCollection.csproj +++ b/CommunityBugFixCollection/CommunityBugFixCollection.csproj @@ -1,4 +1,4 @@ - + CommunityBugFixCollection Community Bug-Fix Collection From a46e8acb46a854f03b151f5c8a6721e2134d4aa3 Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Sat, 14 Mar 2026 13:46:30 +0100 Subject: [PATCH 09/12] Also set last position of animators to -1 when mappers are invalid --- CommunityBugFixCollection/PauseAnimatorUpdates.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CommunityBugFixCollection/PauseAnimatorUpdates.cs b/CommunityBugFixCollection/PauseAnimatorUpdates.cs index c7f8bdd..2feeaf6 100644 --- a/CommunityBugFixCollection/PauseAnimatorUpdates.cs +++ b/CommunityBugFixCollection/PauseAnimatorUpdates.cs @@ -19,17 +19,21 @@ private static bool Prefix(Animator __instance) __instance._playback.ClipLength = (__instance.Clip.Asset?.Data?.GlobalDuration).GetValueOrDefault(); - if (!__instance._fieldMappersValid) - __instance.GenerateFieldMappers(); - if (!_lastPositionByAnimator.TryGetValue(__instance, out var lastPosition)) { - // Make sure that initial state is always applied, + // Make sure that initial state is always applied for new animators, // since playback position can't be < 0 lastPosition = -1; _lastPositionByAnimator.Add(__instance, lastPosition); } + if (!__instance._fieldMappersValid) + { + // Also make sure that initial state is always applied after the field mappers change + lastPosition.Value = -1; + __instance.GenerateFieldMappers(); + } + if (lastPosition != __instance.Position) { var position = lastPosition.Value = __instance.Position; From 7389f9e0013750be7e52c36b7fb0a5f402372d60 Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Mon, 15 Sep 2025 21:26:25 +0200 Subject: [PATCH 10/12] Add null-checks in the TrackedDevicePositioner component's UpdateBodyNode method to prevent log spam Adds a fix for https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5182 --- CommunityBugFixCollection/Locale/de.json | 1 + CommunityBugFixCollection/Locale/en.json | 1 + .../StopTrackedDeviceSpam.cs | 76 +++++++++++++++++++ README.md | 1 + 4 files changed, 79 insertions(+) create mode 100644 CommunityBugFixCollection/StopTrackedDeviceSpam.cs diff --git a/CommunityBugFixCollection/Locale/de.json b/CommunityBugFixCollection/Locale/de.json index 5b5bca2..03a3595 100644 --- a/CommunityBugFixCollection/Locale/de.json +++ b/CommunityBugFixCollection/Locale/de.json @@ -44,6 +44,7 @@ "CommunityBugFixCollection.PauseAnimatorUpdates.Description": "Verhindert, dass Animatoren jeden Frame in alle assoziierten Felder schreiben, obwohl sie nicht am animieren sind.", "CommunityBugFixCollection.ReallyNoDestroyUndo.Description": "Sorgt dafür, dass die NoDestroyUndo-Komponente tatsächlich verhindert, dass das Zerstören eines Objekts rückgängig gemacht werden kann.", "CommunityBugFixCollection.SmoothDraggables.Description": "Umgeht, dass Slider und Joints in Headless-Sessions verrutschen.", + "CommunityBugFixCollection.StopTrackedDeviceSpam.Description": "Fügt null-Checks in der UpdateBodyNode-Methode der TrackedDevicePositioner-Komponente hinzu, um Logspam zu verhindern.", "CommunityBugFixCollection.TiltedUIAlignment.Description": "Kippt die UI-fokussierte Kamera, um UIX-Renderprobleme zum umgehen.", "CommunityBugFixCollection.SteamVRFocusResolutionScale.Description": "Verhindert, dass das SteamVR Unity Plugin die Renderauflösung dauerhaft verringert, wenn ein Fokusevent verpasst wird.", "CommunityBugFixCollection.StationaryGrabWorldActivation.Description": "Verhindert, dass die Welt-Greifen Fortbewegung den Spieler bei jeder Aktivierung bewegt.", diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index 8f7f3f6..4fcb5ef 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -52,6 +52,7 @@ "CommunityBugFixCollection.SmoothDraggables.Description": "Workaround for Sliders and Joints snapping in sessions hosted by a headless.", "CommunityBugFixCollection.StationaryGrabWorldActivation.Description": "Stops the Grab World Locomotion from moving the player with each activiation.", "CommunityBugFixCollection.SteamVRFocusResolutionScale.Description": "Prevents the SteamVR Unity plugin from permanently lowering the render resolution when a focus event is missed.", + "CommunityBugFixCollection.StopTrackedDeviceSpam.Description": "Adds null-checks in the TrackedDevicePositioner component's UpdateBodyNode method to prevent log spam.", "CommunityBugFixCollection.TiltedUIAlignment.Description": "Tilts the UI-Focus camera to work around UIX rendering issues.", "CommunityBugFixCollection.ValidQuaternionInputs.Description": "Makes the ProtoFlux Tool spawn valid float and double quaternion inputs.", "CommunityBugFixCollection.ValueModDecimal.Description": "Adds a zero check to the Decimal ValueMod ProtoFlux node to prevent DIV/0 crashes.", diff --git a/CommunityBugFixCollection/StopTrackedDeviceSpam.cs b/CommunityBugFixCollection/StopTrackedDeviceSpam.cs new file mode 100644 index 0000000..efdb4e8 --- /dev/null +++ b/CommunityBugFixCollection/StopTrackedDeviceSpam.cs @@ -0,0 +1,76 @@ +using Elements.Core; +using FrooxEngine; +using FrooxEngine.CommonAvatar; +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CommunityBugFixCollection +{ + [HarmonyPatchCategory(nameof(StopTrackedDeviceSpam))] + [HarmonyPatch(typeof(TrackedDevicePositioner), nameof(TrackedDevicePositioner.UpdateBodyNode))] + internal sealed class StopTrackedDeviceSpam : ResoniteBugFixMonkey + { + public override IEnumerable Authors => Contributors.Banane9; + + [HarmonyPatch()] + private static bool Prefix(TrackedDevicePositioner __instance) + { + if (!Enabled) + return true; + + if (__instance.TrackedDevice is not ITrackedDevice device) + return false; + + var bodyNode = device.CorrespondingBodyNode; + if (__instance.ObjectSlot.Target is not null && __instance.UsingExternalObjectSlot) + { + if (__instance.ObjectSlot.Target.Node.Value == bodyNode) + return false; + + __instance.ObjectSlot.Target = null!; + } + + var target = __instance.ObjectSlot.Target; + if (target is null || target.Node.Value != bodyNode) + { + var existingBodyNode = __instance.LocalUserRoot.GetRegisteredComponent((AvatarObjectSlot s) => s.Node.Value == bodyNode); + + if (existingBodyNode != null) + { + UniLog.Log($"Device corresponding body node: {bodyNode}. Exiting: {__instance.ObjectSlot.Target?.Node.Value}"); + + __instance.RemoveBodyNode(); + __instance.ObjectSlot.Target = existingBodyNode; + + return false; + } + } + + if (__instance.CreateAvatarObjectSlot.Value) + __instance.UpdateObjectSlot(); + + if (__instance.BodyNodeRoot.Target.FilterWorldElement() is not null) + { + if (device.IsDeviceActive) + { + __instance.BodyNodeRoot.Target.LocalPosition = device.BodyNodePositionOffset; + __instance.BodyNodeRoot.Target.LocalRotation = device.BodyNodeRotationOffset; + } + else + { + __instance.BodyNodeRoot.Target.LocalPosition = float3.Zero; + __instance.BodyNodeRoot.Target.LocalRotation = floatQ.Identity; + } + } + + if (__instance.ObjectSlot.Target!.FilterWorldElement() is not null) + __instance.ObjectSlot.Target!.Node.Value = bodyNode; + + return false; + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index 27306d8..96582e2 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,7 @@ just disable them in the settings in the meantime. * DuplicateSlot ProtoFlux node crashes game when if OverrideParent is identical to Template (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/3950) * April Fools content is active for users in Universes (commercial usage) (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4016) * Instantly removing an AudioOutput component crashes the session (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4286) +* Log spam from `TrackedDevicePositioner.UpdateBodyNode()` in certain scenarios (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5182) Fixes with no issue (that could be found). * Content of notification being off-center. From 574b0bfab99759388d03526d187905da4dbbedec Mon Sep 17 00:00:00 2001 From: Arne Kiesewetter Date: Sat, 21 Mar 2026 15:53:18 +0100 Subject: [PATCH 11/12] Add some patches to remove an exception from and improve the ListEditor behavior Adds a fix for https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5416 --- CommunityBugFixCollection/BetterListEditor.cs | 108 ++++++++++++++++++ CommunityBugFixCollection/Locale/de.json | 1 + CommunityBugFixCollection/Locale/en.json | 1 + README.md | 1 + 4 files changed, 111 insertions(+) create mode 100644 CommunityBugFixCollection/BetterListEditor.cs diff --git a/CommunityBugFixCollection/BetterListEditor.cs b/CommunityBugFixCollection/BetterListEditor.cs new file mode 100644 index 0000000..b01a1a2 --- /dev/null +++ b/CommunityBugFixCollection/BetterListEditor.cs @@ -0,0 +1,108 @@ +using Elements.Core; +using FrooxEngine; +using FrooxEngine.UIX; +using HarmonyLib; +using System.Globalization; + +namespace CommunityBugFixCollection +{ + [HarmonyPatch(typeof(ListEditor))] + [HarmonyPatchCategory(nameof(BetterListEditor))] + internal sealed class BetterListEditor : ResoniteBugFixMonkey + { + public override IEnumerable Authors => Contributors.Banane9; + + [HarmonyPrefix] + [HarmonyPatch(nameof(ListEditor.Target_ElementsAdded))] + private static bool ElementsAddedPrefix(ListEditor __instance, ISyncList list, int startIndex, int count) + { + if (!Enabled) + return true; + + if (count is 0) + return false; + + var addedElements = Pool.BorrowList(); + + for (var i = startIndex; i < startIndex + count; ++i) + addedElements.Add(list.GetElement(i)); + + __instance.World.RunSynchronously(() => + { + for (var i = __instance.Slot.ChildrenCount - 1; i >= startIndex; --i) + __instance.Slot[i].OrderOffset += count; + + for (var i = 0; i < addedElements.Count; ++i) + { + if (addedElements[i].FilterWorldElement() is null) + continue; + + var slot = __instance.Slot.AddSlot("Element"); + slot.OrderOffset = startIndex + i; + + __instance.BuildListItem(list, startIndex + i, addedElements[i], slot); + } + + Pool.Return(ref addedElements); + }); + + return false; + } + + [HarmonyPrefix] + [HarmonyPatch(nameof(ListEditor.GetElementName))] + private static bool GetElementNamePrefix(int index, ref string __result) + { + if (!Enabled) + return true; + + __result = index.ToString(CultureInfo.InvariantCulture) + ':'; + return false; + } + + [HarmonyPrefix] + [HarmonyPatch(nameof(ListEditor.MoveElement))] + private static bool MoveElementPrefix(ListEditor __instance, IButton button, int offset) + { + if (!Enabled) + return true; + + if (__instance._targetList.Target.FilterWorldElement() is null) + return false; + + if (__instance._targetList.Target is ConflictingSyncElement { DirectAccessOnly: true } && !__instance.LocalUser.IsDirectlyInteracting()) + return false; + + var index = __instance.FindButtonIndex(button); + var newIndex = index + offset; + + if (index < 0 || newIndex < 0 || newIndex >= __instance._targetList.Target.Count) + return false; + + __instance._targetList.Target.MoveElementToIndex(index, newIndex); + + __instance.reindex = true; + __instance.MarkChangeDirty(); + + return false; + } + + [HarmonyPrefix] + [HarmonyPatch(nameof(ListEditor.Reindex))] + private static bool ReindexPrefix(ListEditor __instance) + { + if (!Enabled) + return true; + + for (var i = 0; i < __instance.Slot.ChildrenCount; ++i) + { + if (__instance.Slot[i].GetComponentInChildren() is not Text text) + continue; + + text.Content.Value = __instance.GetElementName(__instance._targetList.Target, i); + } + + return false; + } + } +} \ No newline at end of file diff --git a/CommunityBugFixCollection/Locale/de.json b/CommunityBugFixCollection/Locale/de.json index 03a3595..c0d1a61 100644 --- a/CommunityBugFixCollection/Locale/de.json +++ b/CommunityBugFixCollection/Locale/de.json @@ -9,6 +9,7 @@ "CommunityBugFixCollection.AnyProtocolHyperlinks.Description": "Erlaubt es Hyperlink-Komponenten URLs mit beliebigen Schemata zu öffnen, statt nur http(s).", "CommunityBugFixCollection.BetterGridWorldPreset.Description": "Verbessert das Grid Welt Preset indem das zittern des Bodens verhindert und das Grid zentriert wird.", + "CommunityBugFixCollection.BetterListEditor.Description": "Verbessert Listeneditoren in Inspektoren, wodurch eine Exception beim Hinzufügen von Elementen verhindert wird und deren Namen beim Verschieben entsprechend angepasst werden.", "CommunityBugFixCollection.BreakDragAndDropCopiedComponentDrives.Description": "Sorgt dafür, dass Drives beim Kopieren von Komponenten mittels Drag-und-Drop nicht kaputt gehen.", "CommunityBugFixCollection.CaseInsensitiveCustomGenerics.Description": "Macht das Auswählen von eigenen generischen Typparametern unabhängig von Groß- und Kleinschreibung.", "CommunityBugFixCollection.CenteredNotifications.Description": "Zentriert den Inhalt von Benachrichtigungen.", diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index 4fcb5ef..e5d3329 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -14,6 +14,7 @@ "CommunityBugFixCollection.AnyProtocolHyperlinks.Description": "Allows Hyperlink components to open URLs with any scheme, not just http(s).", "CommunityBugFixCollection.BetterGridWorldPreset.Description": "Improves the Grid World Preset by preventing the shaking ground and centering the grid.", + "CommunityBugFixCollection.BetterListEditor.Description": "Improves the list editors in inspectors, preventing an exception while adding elements and renaming them when they're moved around.", "CommunityBugFixCollection.BreakDragAndDropCopiedComponentDrives.Description": "Fixes copying components using drag-and-drop breaking drives.", "CommunityBugFixCollection.CaseInsensitiveCustomGenerics.Description": "Makes picking custom generic type parameters case-insensitive.", "CommunityBugFixCollection.CenteredNotifications.Description": "Centers the content of notifications.", diff --git a/README.md b/README.md index 96582e2..dbae887 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ just disable them in the settings in the meantime. * April Fools content is active for users in Universes (commercial usage) (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4016) * Instantly removing an AudioOutput component crashes the session (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4286) * Log spam from `TrackedDevicePositioner.UpdateBodyNode()` in certain scenarios (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5182) +* List editors in inspectors throw an exception when elements are added and don't rename them when they're moved around (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/5416) Fixes with no issue (that could be found). * Content of notification being off-center. From c486f8b5f240da6c80cef8a611a314b405cdee31 Mon Sep 17 00:00:00 2001 From: E1int <110526002+E1int@users.noreply.github.com> Date: Wed, 28 May 2025 20:21:23 +0200 Subject: [PATCH 12/12] Add update order workaround for MemberEditors This implements the suggested workaround for https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4431 --- CommunityBugFixCollection/Contributors.cs | 2 ++ CommunityBugFixCollection/Locale/de.json | 1 + CommunityBugFixCollection/Locale/en.json | 3 ++- .../MemberEditorUpdateOrder.cs | 24 +++++++++++++++++++ README.md | 1 + 5 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 CommunityBugFixCollection/MemberEditorUpdateOrder.cs diff --git a/CommunityBugFixCollection/Contributors.cs b/CommunityBugFixCollection/Contributors.cs index d1011a8..61bab7a 100644 --- a/CommunityBugFixCollection/Contributors.cs +++ b/CommunityBugFixCollection/Contributors.cs @@ -22,5 +22,7 @@ internal static class Contributors public static string[] Nytra { get; } = ["Nytra"]; public static string[] Onan { get; } = ["989onan"]; + + public static string[] yosh { get; } = ["yosh"]; } } \ No newline at end of file diff --git a/CommunityBugFixCollection/Locale/de.json b/CommunityBugFixCollection/Locale/de.json index c0d1a61..4dca68a 100644 --- a/CommunityBugFixCollection/Locale/de.json +++ b/CommunityBugFixCollection/Locale/de.json @@ -33,6 +33,7 @@ "CommunityBugFixCollection.ImportWebFilesAsUrls.Description": "Sorgt dafür, dass URLs zu Textdateien oder Resonite Packages nicht importiert werden, statt als Hyperlink aufzutauchen.", "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Lokalisiert die Speichereinheiten (MiB, GiB, etc.), inbsesondere bei der StorageUsageStatus-Komponente. Es gibt eine Einstellung dafür, die Bytes nach IEC (Faktor 1024) statt dezimal (Faktor 1000) zu formatieren.", "CommunityBugFixCollection.LongerWorldLoadingFailIndication.Description": "Lässt den Welt-Ladefortschritts-Indikator frühestens nach 20s verschwinden, falls der Vorgang fehlgeschlagen ist.", + "CommunityBugFixCollection.MemberEditorUpdateOrder.Description": "Sets die Update Order von MemberEditor-Komponenten in Inspektoren auf den höchsten Wert, um (meistens) einen Frame Verzögerung beim angezeigten Wert zu verhindern.", "CommunityBugFixCollection.NaNtEqual.Description": "Sorgt dafür, dass NaN float / double Werte sich bei den == und != ProtoFlux Nodes sowie bei der ValueEqualityDriver-Komponente niemals gleichen.", "CommunityBugFixCollection.NoAudioOutputCrash.Description": "Verhindert, dass die AudioOutput-Komponente ihre Listener aktualisiert nachdem sie entfernt wurde und damit die Session crasht.", "CommunityBugFixCollection.NoLossOfColorProfile.Description": "Verhindert, dass Farbprofile nicht bei allen Berechnungen erhalten bleiben.", diff --git a/CommunityBugFixCollection/Locale/en.json b/CommunityBugFixCollection/Locale/en.json index e5d3329..221c59e 100644 --- a/CommunityBugFixCollection/Locale/en.json +++ b/CommunityBugFixCollection/Locale/en.json @@ -24,7 +24,7 @@ "CommunityBugFixCollection.ConsistentContextMenuAngularSize.Description": "Makes the context menu stay a fixed on-screen size in desktop mode, regardless of FOV.", "CommunityBugFixCollection.ConstantNodeNameAdjustments.Name": "(Legacy) Constant Node Name Adjustments", "CommunityBugFixCollection.ConstantNodeNameAdjustments.Description": "(Legacy) Changes the names of the ProtoFlux nodes in Strings > Constants to be how they were with the original fix.", - "CommunityBugFixCollection.CopySyncMemberToClipboardAction.Description": "Adds Copy to Clipboard action on any non-reference member fields in Inspectors.", + "CommunityBugFixCollection.CopySyncMemberToClipboardAction.Description": "Adds Copy to Clipboard action on any non-reference member fields in inspectors.", "CommunityBugFixCollection.CorrectMaterialGizmoScaling.Description": "Fixes the MaterialGizmo being scaled twice when using Edit on the Material Tool.", "CommunityBugFixCollection.CorrectOverriddenSpelling.Description": "Corrects the spelling of Overridden on ProtoFlux nodes.", "CommunityBugFixCollection.DuplicateAndMoveMultipleGrabbedItems.Description": "Fixes references between multiple duplicated or transferred-between-worlds items breaking.", @@ -39,6 +39,7 @@ "CommunityBugFixCollection.ImportWebFilesAsUrls.Description": "Fixes URLs to text files or Resonite Packages failing to import instead of appearing as a hyperlink.", "CommunityBugFixCollection.LocalizedByteFormatting.Description": "Localizes the storage units (MiB, GiB, etc.), in particular for the StorageUsageStatus component. There's an option to use IEC format (factor 1024) over decimal (factor 1000).", "CommunityBugFixCollection.LongerWorldLoadingFailIndication.Description": "Only lets the World Load Progress Indicator disappear after 20s or more if the process failed.", + "CommunityBugFixCollection.MemberEditorUpdateOrder.Description": "Sets the Update Order of MemberEditor components in inspectors to the highest value to (most of the time) prevent a frame delay in the value they show.", "CommunityBugFixCollection.NaNtEqual.Description": "Makes NaN floats / doubles never equal to each other for the ProtoFlux == and != nodes, as well as the ValueEqualityDriver component.", "CommunityBugFixCollection.NoAudioOutputCrash.Description": "Prevents the AudioOutput component from updating listeners when it's been removed and crashing the sessions.", "CommunityBugFixCollection.NoLossOfColorProfile.Description": "Fixes Color Profile not being preserved on all operations.", diff --git a/CommunityBugFixCollection/MemberEditorUpdateOrder.cs b/CommunityBugFixCollection/MemberEditorUpdateOrder.cs new file mode 100644 index 0000000..2e9cb94 --- /dev/null +++ b/CommunityBugFixCollection/MemberEditorUpdateOrder.cs @@ -0,0 +1,24 @@ +using FrooxEngine; +using HarmonyLib; +using MonkeyLoader.Resonite; + +// This originally came from yosh (https://git.unix.dog/yosh) +// But I can't find the mod anywhere anymore? + +namespace CommunityBugFixCollection +{ + [HarmonyPatchCategory(nameof(MemberEditorUpdateOrder))] + [HarmonyPatch(typeof(MemberEditor), nameof(MemberEditor.Setup))] + internal sealed class MemberEditorUpdateOrder : ResoniteMonkey + { + public override IEnumerable Authors => Contributors.yosh; + + public override bool CanBeDisabled => true; + + private static void Postfix(MemberEditor __instance) + { + if (Enabled) + __instance.UpdateOrder = int.MaxValue; + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index dbae887..65d53fd 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ just disable them in the settings in the meantime. * https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1158 * https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/2979 * UIX Rendering issues in UI-Focus mode (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/1292) +* Driven values in inspectors usually appear delayed by a frame (https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/4431) ## Features