Difference between revisions of "Modding Tutorials/Modifying classes"

From RimWorld Wiki
Jump to navigation Jump to search
Line 17: Line 17:
  
 
=Using Harmony to override a non-overridden method=
 
=Using Harmony to override a non-overridden method=
You can't. Patch the base class.
+
You can't. Harmony can only patch methods which are actually implemented. You can't patch what isn't there.
 +
 
 +
Patch the base class instead, then check for the instance.
  
 
=Patching the base class of a subclass=
 
=Patching the base class of a subclass=

Revision as of 15:03, 1 February 2019

Modding Tutorials

Changing methods

Use Harmony.

Adding fields or methods to classes

You can't. Not even with Harmony. Maybe you want to subclass instead?

Adding fields to Defs

You can. The game support something called a DefModExtension. If you have a Def, you can get your mod extension from it. This allows you to add any custom field to any def.

Adding behaviour to the Thing class

If it's a ThingWithComps, you can add a ThingComp instead. Almost all Things are a ThingWithComps. ThingComps can also be used to store whatever data you need.

Adding behaviour to the Hediff class

HediffWithComps also support comps. HediffComps are different from ThingComps, but their general use is the same.

Using Harmony to override a non-overridden method

You can't. Harmony can only patch methods which are actually implemented. You can't patch what isn't there.

Patch the base class instead, then check for the instance.

Patching the base class of a subclass

Harmony can only patch methods that actually have IL code. What you can do is patch the parent class. Let your patch take the __instance of the parent and pattern match.

if (!(__instance is SubClass))
    return;