diff --git a/API/DimItem.cs b/API/DimItem.cs index 48af853..c81b4cb 100644 --- a/API/DimItem.cs +++ b/API/DimItem.cs @@ -64,14 +64,14 @@ public override bool UseItem(Player player) } if (!File.Exists(Main.SavePath + "/World/" + (dimensionName + "/" + Main.worldName + ".wld").Replace(' ', '_'))) { -<<<<<<< HEAD +/**///<<<<<<< HEAD info.SetValue(Main.ActiveWorldFileData, Main.SavePath + "/World/" + dimensionName + "/" + Main.worldName + ".wld"); startGen(); -======= +/*///======= info.SetValue(Main.ActiveWorldFileData, Main.SavePath + "/World/" + (dimensionName + "/" + Main.worldName + ".wld").Replace(' ', '_')); generateDimension(); ->>>>>>> e6af22ba0365756f77f48c73c0c78257d723705b +/**///>>>>>>> e6af22ba0365756f77f48c73c0c78257d723705b p.player.Spawn(); WorldFile.saveWorld(false, true); return true; diff --git a/API/ReflectionUtil.cs b/API/ReflectionUtil.cs index e79466c..758ab5c 100644 --- a/API/ReflectionUtil.cs +++ b/API/ReflectionUtil.cs @@ -19,67 +19,6 @@ namespace Dimlibs.API { class ReflectionUtil { - public static MethodInfo OriginalLoadWorld; - - public static void MethodSwap(Type OriginalMethodType, String OriginalMethodName, Type NewMethodType, String NewMethodName) - { - if (IntPtr.Size == 4) - { - MethodSwap32Bit(OriginalMethodType, OriginalMethodName, NewMethodType, NewMethodName); - return; - } - MethodSwap64bit(OriginalMethodType, OriginalMethodName, NewMethodType, NewMethodName); - } - - public static void OverloadedMethodSwap(Type OriginalMethodType, String OriginalMethodName, Type NewMethodType, String NewMethodName, Type[] parameter = null) - { - if (IntPtr.Size == 4) - { - MethodSwap32Bit(OriginalMethodType, OriginalMethodName, NewMethodType, NewMethodName, parameter); - return; - } - MethodSwap64bit(OriginalMethodType, OriginalMethodName, NewMethodType, NewMethodName, parameter); - } - - - public static void MethodSwap32Bit(Type OriginalMethodType, String OriginalMethodName, Type NewMethodType, String NewMethodName, Type[] parameter = null) - { - MethodInfo OriginalMethod = (parameter != null) - ? OriginalMethodType.GetMethod(OriginalMethodName, parameter) - : OriginalMethodType.GetMethod(OriginalMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic); - - - MethodInfo NewMethod = - NewMethodType.GetMethod(NewMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic); - - RuntimeHelpers.PrepareMethod(OriginalMethod.MethodHandle); - RuntimeHelpers.PrepareMethod(NewMethod.MethodHandle); - - IntPtr ptr = OriginalMethod.MethodHandle.Value + IntPtr.Size * 2; - IntPtr ptr2 = NewMethod.MethodHandle.Value + IntPtr.Size * 2; - int value; - - value = ptr.ToInt32(); - Marshal.WriteInt32(ptr, Marshal.ReadInt32(ptr2)); - Marshal.WriteInt32(ptr2, Marshal.ReadInt32(new IntPtr(value))); - - } - - public static unsafe void MethodSwap64bit(Type OriginalMethodType, String OriginalMethodName, Type NewMethodType, String NewMethodName, Type[] parameter = null) - { - MethodInfo OriginalMethod = (parameter != null) - ? OriginalMethodType.GetMethod(OriginalMethodName, parameter) - : OriginalMethodType.GetMethod(OriginalMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic); - MethodInfo NewMethod = - NewMethodType.GetMethod(NewMethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic); - RuntimeHelpers.PrepareMethod(OriginalMethod.MethodHandle); - RuntimeHelpers.PrepareMethod(NewMethod.MethodHandle); - - long* inj = (long*)NewMethod.MethodHandle.Value.ToPointer() + 1; - long* tar = (long*)OriginalMethod.MethodHandle.Value.ToPointer() + 1; - *tar = *inj; - } - public static Delegate GetEventDelegate(Object obj, string evt) { Delegate del = null; @@ -111,16 +50,14 @@ public static Object Clone(Object objToClone) public static void MassSwap() { - OriginalLoadWorld = typeof(ReflectionUtil).GetMethod("LoadWorld", - BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); - OverloadedMethodSwap(typeof(WorldFile), "saveWorld", typeof(ReflectionUtil), "SaveWorld", new Type[] {typeof(bool), typeof(bool)}); - MethodSwap(typeof(WorldFile), "loadWorld", typeof(ReflectionUtil), "LoadWorld"); - MethodSwap(typeof(WorldFile), "SaveWorldTiles", typeof(ReflectionUtil), "SaveWorldTiles"); + On.Terraria.IO.WorldFile.saveWorld_1 += SaveWorld; + On.Terraria.IO.WorldFile.loadWorld += LoadWorld; + On.Terraria.IO.WorldFile.SaveWorldTiles += SaveWorldTiles; } - private static int SaveWorldTiles(BinaryWriter writer) + private static int SaveWorldTiles(On.Terraria.IO.WorldFile.orig_SaveWorldTiles orig, BinaryWriter writer) { byte[] array = new byte[13]; for (int i = 0; i < Main.maxTilesX; i++) @@ -310,7 +247,7 @@ private static int SaveWorldTiles(BinaryWriter writer) return (int)writer.BaseStream.Position; } - public static void SaveWorld(bool useCloudSaving, bool resetTime = false) + public static void SaveWorld(On.Terraria.IO.WorldFile.orig_saveWorld_1 orig, bool useCloudSaving, bool resetTime = false) { FieldInfo padLockInfo = typeof(WorldFile).GetField("padlock", BindingFlags.Static | BindingFlags.NonPublic); Object padlock = padLockInfo.GetValue(null); @@ -427,7 +364,7 @@ public static void SaveWorld(bool useCloudSaving, bool resetTime = false) Main.serverGenLock = false;*/ } - public static void LoadWorld(bool loadFromCloud) + public static void LoadWorld(On.Terraria.IO.WorldFile.orig_loadWorld orig, bool loadFromCloud) { foreach (DimensionHandler dim in DimWorld.dimensionInstanceHandlers.Values) { diff --git a/Dimlibs.cs b/Dimlibs.cs index c4a10b4..8a80f91 100644 --- a/Dimlibs.cs +++ b/Dimlibs.cs @@ -3,7 +3,6 @@ using System.Linq; using System.Reflection; using Dimlibs.API; -using ReLogic.Utilities; using Terraria; using Terraria.Localization; using Terraria.ModLoader; @@ -30,7 +29,7 @@ public override void Load() public override void Unload() { - ReflectionUtil.MassSwap(); + // TerrariaHooks undoes our swaps for us. } public override void PostSetupContent() diff --git a/Dimlibs.csproj b/Dimlibs.csproj index 948045f..d247250 100644 --- a/Dimlibs.csproj +++ b/Dimlibs.csproj @@ -66,18 +66,19 @@ False C:\Windows\Microsoft.NET\assembly\GAC_32\Microsoft.Xna.Framework.Xact\v4.0_4.0.0.0__842cf8be1de50553\Microsoft.Xna.Framework.Xact.dll - - False - ..\..\..\..\..\..\Terraria Full source\ReLogic.dll - False - ..\TerrariaUltraApocalypse\bin\Debug\Terraria.exe + ..\TerrariaUltraApocalypse\bin\Debug\Terraria.exe + D:\Program Files (x86)\Steam\steamapps\common\Terraria\Terraria.exe + + + lib\TerrariaHooks.dll - "D:\steam game\steamapps\steamapps\common\Terraria\tModLoaderServer.exe" -build "$(ProjectDir)\" -eac "$(TargetPath)" + "D:\steam game\steamapps\steamapps\common\Terraria\tModLoaderServer.exe" -build "$(ProjectDir)\" -eac "$(TargetPath)" + "D:\Program Files (x86)\Steam\steamapps\common\Terraria\tModLoaderServer.exe" -build "$(ProjectDir)\" -eac "$(TargetPath)" \ No newline at end of file diff --git a/build.txt b/build.txt index d1e99bf..c64ed36 100644 --- a/build.txt +++ b/build.txt @@ -3,4 +3,5 @@ version = 0.1.1 displayName = DimLibs buildIgnore = *.csproj, *.user, obj\*, bin\*, .vs\* includePDB = true -languageVersion = 6 \ No newline at end of file +languageVersion = 6 +modReferences = TerrariaHooks \ No newline at end of file diff --git a/lib/TerrariaHooks.dll b/lib/TerrariaHooks.dll new file mode 100644 index 0000000..7eb623d Binary files /dev/null and b/lib/TerrariaHooks.dll differ