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