Difference between revisions of "Modding Tutorials/Modifying classes"
(Created page with "{{BackToTutorials}} =Changing methods= Use Harmony. =Adding fields or methods to classes= You can't. Not even with Modding Tutorials/Harmony...") |
|||
(4 intermediate revisions by 2 users not shown) | |||
Line 15: | Line 15: | ||
=Adding behaviour to the Hediff class= | =Adding behaviour to the Hediff class= | ||
HediffWithComps also support comps. HediffComps are different from [[Modding Tutorials/ThingComp|ThingComp]]s, but their general use is the same. | HediffWithComps also support comps. HediffComps are different from [[Modding Tutorials/ThingComp|ThingComp]]s, 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. | ||
+ | |||
+ | Alternatives: | ||
+ | * [[Modding_Tutorials/Modifying_classes#Patching_the_base_class_of_a_subclass|Patch the base]] class instead, then check for the instance. | ||
+ | * [[Modding_Tutorials/Modifying_classes#Adding_fields_or_methods_to_classes|Subclass]], and then replace it wherever it's created with Harmony. | ||
+ | |||
+ | =Patching the base class of a subclass= | ||
+ | [[Modding Tutorials/Harmony|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. | ||
+ | <source lang="csharp"> | ||
+ | if (!(__instance is SubClass)) | ||
+ | return; | ||
+ | </source> | ||
+ | |||
+ | [[Category:Modding tutorials]][[Category:Modding]] |
Latest revision as of 15:22, 1 February 2019
Changing methods[edit]
Use Harmony.
Adding fields or methods to classes[edit]
You can't. Not even with Harmony. Maybe you want to subclass instead?
Adding fields to Defs[edit]
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[edit]
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[edit]
HediffWithComps also support comps. HediffComps are different from ThingComps, but their general use is the same.
Using Harmony to override a non-overridden method[edit]
You can't. Harmony can only patch methods which are actually implemented. You can't patch what isn't there.
Alternatives:
- Patch the base class instead, then check for the instance.
- Subclass, and then replace it wherever it's created with Harmony.
Patching the base class of a subclass[edit]
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;