@@ -33,52 +33,55 @@ You should have received a copy of the GNU General Public License
3333[ MonoModIgnore ]
3434partial class CollisionSwitchTiles
3535{
36- //static ParameterDefinition Entity { get; set; }
37- //static MethodDefinition SwitchTiles { get; set; }
38-
3936 [ Modification ( ModType . PreMerge , "Patching Collision.SwitchTiles" ) ]
40- static void ModifyCollisionSwitchTiles ( ModFramework . ModFwModder modder )
37+ public static void ModifyCollisionSwitchTiles ( ModFwModder modder )
4138 {
39+ #if TerrariaServer_1455_OrAbove
40+ var csr = modder . GetILCursor ( ( ) => Terraria . Collision . SwitchTiles ( default , default , 0 , 0 , default , 0 ) ) ;
41+ #else
4242 var csr = modder . GetILCursor ( ( ) => Terraria . Collision . SwitchTiles ( default , 0 , 0 , default , 0 ) ) ;
43+ #endif
4344 var redirects = csr . Method . DeclaringType . Methods
4445 . Where ( x => ( HookEmitter . HookMethodNamePrefix + x . Name ) == csr . Method . Name || ( "orig_" + x . Name ) == csr . Method . Name )
4546 . Select ( x => x . GetILCursor ( ) )
4647 . ToArray ( ) ;
47- //SwitchTiles = csr.Method;
4848
4949 foreach ( var method in redirects . Append ( csr ) )
5050 {
51- ParameterDefinition entity ;
52- method . Method . Parameters . Add ( entity = new ( "entity" ,
53- ParameterAttributes . HasDefault | ParameterAttributes . Optional ,
54-
55- modder . Module . ImportReference ( modder . GetDefinition < Terraria . Entity > ( ) )
56- )
51+ ParameterDefinition ? entity = method . Method . Parameters . FirstOrDefault ( x => x . Name == "entity" ) ;
52+ if ( entity is null ) // 1455 added this natively.
5753 {
58- Constant = null
59- } ) ;
54+ method . Method . Parameters . Add ( entity = new ( "entity" ,
55+ ParameterAttributes . HasDefault | ParameterAttributes . Optional ,
6056
61- modder . OnRewritingMethodBody += ( MonoModder modder , MethodBody body , Instruction instr , int instri ) =>
62- {
63- if ( instr . Operand is MethodReference methodReference &&
64- methodReference . DeclaringType . Name == method . Method . DeclaringType . Name &&
65- methodReference . Name == method . Method . Name
57+ modder . Module . ImportReference ( modder . GetDefinition < Terraria . Entity > ( ) )
6658 )
6759 {
68- if ( methodReference . Parameters . Any ( x => x . Name == entity . Name ) )
69- return ;
60+ Constant = null
61+ } ) ;
7062
71- methodReference . Parameters . Add ( entity ) ;
72-
73- if ( body . Method . DeclaringType . BaseType . FullName == typeof ( Terraria . Entity ) . FullName )
63+ modder . OnRewritingMethodBody += ( MonoModder modder , MethodBody body , Instruction instr , int instri ) =>
64+ {
65+ if ( instr . Operand is MethodReference methodReference &&
66+ methodReference . DeclaringType . Name == method . Method . DeclaringType . Name &&
67+ methodReference . Name == method . Method . Name
68+ )
7469 {
75- body . GetILProcessor ( ) . InsertBefore ( instr ,
76- new { OpCodes . Ldarg_0 }
77- ) ;
70+ if ( methodReference . Parameters . Any ( x => x . Name == entity . Name ) )
71+ return ;
72+
73+ methodReference . Parameters . Add ( entity ) ;
74+
75+ if ( body . Method . DeclaringType . BaseType . FullName == typeof ( Terraria . Entity ) . FullName )
76+ {
77+ body . GetILProcessor ( ) . InsertBefore ( instr ,
78+ new { OpCodes . Ldarg_0 }
79+ ) ;
80+ }
81+ else throw new NotImplementedException ( $ "{ body . Method . Name } is not a supported caller for this modification") ;
7882 }
79- else throw new NotImplementedException ( $ "{ body . Method . Name } is not a supported caller for this modification") ;
80- }
81- } ;
83+ } ;
84+ }
8285
8386 // inject the callback if the target
8487 if ( method == csr )
@@ -121,8 +124,7 @@ static void ModifyCollisionSwitchTiles(ModFramework.ModFwModder modder)
121124 }
122125}
123126
124-
125- [ MonoMod . MonoModIgnore ]
127+ [ MonoModIgnore ]
126128public delegate bool PressurePlateCallback ( int x , int y , Terraria . Entity entity ) ;
127129
128130namespace OTAPI
0 commit comments