diff --git a/LibMatrix.EventTypes/Common/MjolnirShortcodeEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Common/MjolnirShortcodeEventContent.cs
index a31cbbb..be8c154 100644
--- a/LibMatrix.EventTypes/Common/MjolnirShortcodeEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Common/MjolnirShortcodeEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Common;
+namespace LibMatrix.LegacyEvents.EventTypes.Common;
[MatrixEvent(EventName = EventId)]
public class MjolnirShortcodeEventContent : TimelineEventContent {
diff --git a/LibMatrix.EventTypes/Common/RoomEmotesEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Common/RoomEmotesEventContent.cs
index b9a837f..ee268d9 100644
--- a/LibMatrix.EventTypes/Common/RoomEmotesEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Common/RoomEmotesEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Common;
+namespace LibMatrix.LegacyEvents.EventTypes.Common;
[MatrixEvent(EventName = EventId)]
public class RoomEmotesEventContent : TimelineEventContent {
diff --git a/LibMatrix.EventTypes/EventContent.cs b/LibMatrix.LegacyEvents.EventTypes/EventContent.cs
index c582cf2..3e76459 100644
--- a/LibMatrix.EventTypes/EventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/EventContent.cs
@@ -2,7 +2,7 @@ using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes;
+namespace LibMatrix.LegacyEvents.EventTypes;
public abstract class EventContent;
diff --git a/LibMatrix.LegacyEvents.EventTypes/LibMatrix.LegacyEvents.EventTypes.csproj b/LibMatrix.LegacyEvents.EventTypes/LibMatrix.LegacyEvents.EventTypes.csproj
new file mode 100644
index 0000000..4276003
--- /dev/null
+++ b/LibMatrix.LegacyEvents.EventTypes/LibMatrix.LegacyEvents.EventTypes.csproj
@@ -0,0 +1,22 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net8.0</TargetFramework>
+ <ImplicitUsings>enable</ImplicitUsings>
+ <Nullable>enable</Nullable>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <ProjectReference Condition="Exists('..\ArcaneLibs\ArcaneLibs\ArcaneLibs.csproj')" Include="..\ArcaneLibs\ArcaneLibs\ArcaneLibs.csproj"/>
+ <!-- This is dangerous, but eases development since locking the version will drift out of sync without noticing,
+ which causes build errors due to missing functions.
+ Using the NuGet version in development is annoying due to delays between pushing and being able to consume.
+ If you want to use a time-appropriate version of the library, recursively clone https://cgit.rory.gay/matrix/MatrixUtils.git
+ instead, since this will be locked by the MatrixUtils project, which contains both LibMatrix and ArcaneLibs as a submodule. -->
+ <PackageReference Condition="!Exists('..\ArcaneLibs\ArcaneLibs\ArcaneLibs.csproj')" Include="ArcaneLibs" Version="*-preview*"/>
+ </ItemGroup>
+
+ <Target Name="ArcaneLibsNugetWarning" AfterTargets="AfterBuild">
+ <Warning Text="ArcaneLibs is being referenced from NuGet, which is dangerous. Please read the warning in LibMatrix.csproj!" Condition="!Exists('..\ArcaneLibs\ArcaneLibs\ArcaneLibs.csproj')"/>
+ </Target>
+</Project>
diff --git a/LibMatrix.EventTypes/MatrixEventAttribute.cs b/LibMatrix.LegacyEvents.EventTypes/MatrixEventAttribute.cs
index 5f06cec..708dad1 100644
--- a/LibMatrix.EventTypes/MatrixEventAttribute.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/MatrixEventAttribute.cs
@@ -1,4 +1,4 @@
-namespace LibMatrix.EventTypes;
+namespace LibMatrix.LegacyEvents.EventTypes;
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class MatrixEventAttribute : Attribute {
diff --git a/LibMatrix.EventTypes/Spec/Ephemeral/PresenceStateEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/Ephemeral/PresenceStateEventContent.cs
index fc2c355..676f36d 100644
--- a/LibMatrix.EventTypes/Spec/Ephemeral/PresenceStateEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/Ephemeral/PresenceStateEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.Ephemeral;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.Ephemeral;
[MatrixEvent(EventName = EventId)]
public class PresenceEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/Ephemeral/RoomTypingEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/Ephemeral/RoomTypingEventContent.cs
index 494936d..97b86fc 100644
--- a/LibMatrix.EventTypes/Spec/Ephemeral/RoomTypingEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/Ephemeral/RoomTypingEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomTypingEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/RoomMessageEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/RoomMessageEventContent.cs
index ae893f8..ef26ab0 100644
--- a/LibMatrix.EventTypes/Spec/RoomMessageEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/RoomMessageEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec;
[MatrixEvent(EventName = EventId)]
public class RoomMessageEventContent : TimelineEventContent {
diff --git a/LibMatrix.EventTypes/Spec/RoomMessageReactionEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/RoomMessageReactionEventContent.cs
index e2c0c8f..3649a6b 100644
--- a/LibMatrix.EventTypes/Spec/RoomMessageReactionEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/RoomMessageReactionEventContent.cs
@@ -1,4 +1,4 @@
-namespace LibMatrix.EventTypes.Spec;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec;
[MatrixEvent(EventName = EventId)]
public class RoomMessageReactionEventContent : TimelineEventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs
index 6006048..c61f2bf 100644
--- a/LibMatrix.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/Policy/PolicyRuleStateEventContent.cs
@@ -1,7 +1,7 @@
using System.Text.Json.Serialization;
using ArcaneLibs.Attributes;
-namespace LibMatrix.EventTypes.Spec.State.Policy;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State.Policy;
//spec
[MatrixEvent(EventName = EventId)] //spec
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomAliasEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomAliasEventContent.cs
index 4e82ac1..197fe4b 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomAliasEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomAliasEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State.RoomInfo;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State.RoomInfo;
[MatrixEvent(EventName = EventId)]
public class RoomAliasEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomAvatarEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomAvatarEventContent.cs
index c718826..bc70d65 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomAvatarEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomAvatarEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State.RoomInfo;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State.RoomInfo;
[MatrixEvent(EventName = EventId)]
public class RoomAvatarEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomCanonicalAliasEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomCanonicalAliasEventContent.cs
index 93f13ac..790f80b 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomCanonicalAliasEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomCanonicalAliasEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomCanonicalAliasEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomCreateEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomCreateEventContent.cs
index c619d0e..c6d259d 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomCreateEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomCreateEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomCreateEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomEncryptionEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomEncryptionEventContent.cs
index b49abfa..2fed1f3 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomEncryptionEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomEncryptionEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomEncryptionEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomGuestAccessEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomGuestAccessEventContent.cs
index a7811bf..be66dbf 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomGuestAccessEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomGuestAccessEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomGuestAccessEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomHistoryVisibilityEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomHistoryVisibilityEventContent.cs
index 7676dad..0be42d6 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomHistoryVisibilityEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomHistoryVisibilityEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomHistoryVisibilityEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs
index 349c8a7..48202a5 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomJoinRulesEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomJoinRulesEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomMemberEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomMemberEventContent.cs
index b2d5596..1926417 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomMemberEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomMemberEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomMemberEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomNameEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomNameEventContent.cs
index 3ea5730..165a1a3 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomNameEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomNameEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomNameEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomPinnedEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomPinnedEventContent.cs
index b4474e9..4c08396 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomPinnedEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomPinnedEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomPinnedEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomPowerLevelEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomPowerLevelEventContent.cs
index 49a1b62..e7b58ee 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomPowerLevelEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomPowerLevelEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomServerACLEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomServerACLEventContent.cs
index be83e37..506203f 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomServerACLEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomServerACLEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class RoomServerACLEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomTopicEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomTopicEventContent.cs
index 92fa75d..d9e1ba9 100644
--- a/LibMatrix.EventTypes/Spec/State/RoomInfo/RoomTopicEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/RoomInfo/RoomTopicEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
[MatrixEvent(EventName = "org.matrix.msc3765.topic", Legacy = true)]
diff --git a/LibMatrix.EventTypes/Spec/State/Space/SpaceChildEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/Space/SpaceChildEventContent.cs
index d233be4..bd8ff64 100644
--- a/LibMatrix.EventTypes/Spec/State/Space/SpaceChildEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/Space/SpaceChildEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class SpaceChildEventContent : EventContent {
diff --git a/LibMatrix.EventTypes/Spec/State/Space/SpaceParentEventContent.cs b/LibMatrix.LegacyEvents.EventTypes/Spec/State/Space/SpaceParentEventContent.cs
index 2ab79a4..4e9903f 100644
--- a/LibMatrix.EventTypes/Spec/State/Space/SpaceParentEventContent.cs
+++ b/LibMatrix.LegacyEvents.EventTypes/Spec/State/Space/SpaceParentEventContent.cs
@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
-namespace LibMatrix.EventTypes.Spec.State;
+namespace LibMatrix.LegacyEvents.EventTypes.Spec.State;
[MatrixEvent(EventName = EventId)]
public class SpaceParentEventContent : EventContent {
|