Package net.neoforged.neoforge.coremods
Class ReplaceFieldComparisonWithInstanceOf
java.lang.Object
net.neoforged.neoforge.coremods.ReplaceFieldComparisonWithInstanceOf
- All Implemented Interfaces:
ITransformer<MethodNode>
public class ReplaceFieldComparisonWithInstanceOf
extends Object
implements ITransformer<MethodNode>
Replaces code such as
itemstack.getItem() == Items.CROSSBOW with instanceof checks such
as itemstack.getItem() instanceof CrossbowItem.
This transformer targets a set of methods to replace the occurrence of a single field-comparison.-
Nested Class Summary
Nested classes/interfaces inherited from interface cpw.mods.modlauncher.api.ITransformer
ITransformer.Target<T> -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Stringprivate final Stringprivate static final org.slf4j.Loggerprivate final Stringprivate final Set<ITransformer.Target<MethodNode>> Fields inherited from interface cpw.mods.modlauncher.api.ITransformer
DEFAULT_LABEL -
Constructor Summary
ConstructorsConstructorDescriptionReplaceFieldComparisonWithInstanceOf(String fieldOwner, String fieldName, String replacementClassName, List<ITransformer.Target<MethodNode>> methodsToScan) -
Method Summary
Modifier and TypeMethodDescriptioncastVote(ITransformerVotingContext context) Return theTransformerVoteResultfor this transformer.targets()Return a set ofITransformer.Targetidentifying which elements this transformer wishes to try and apply to.transform(MethodNode methodNode, ITransformerVotingContext votingContext) Transform the input to the ITransformer's desire.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface cpw.mods.modlauncher.api.ITransformer
labels
-
Field Details
-
LOG
private static final org.slf4j.Logger LOG -
targets
-
fieldOwner
-
fieldName
-
replacementClassName
-
-
Constructor Details
-
ReplaceFieldComparisonWithInstanceOf
public ReplaceFieldComparisonWithInstanceOf(String fieldOwner, String fieldName, String replacementClassName, List<ITransformer.Target<MethodNode>> methodsToScan) - Parameters:
fieldOwner- The class that ownsfieldNamefieldName- The name of a field infieldOwnerreplacementClassName- Reference comparisons againstfieldNameinfieldOwnerare replaced by instanceof checks against this class.methodsToScan- The methods to scan
-
-
Method Details
-
getTargetType
- Specified by:
getTargetTypein interfaceITransformer<MethodNode>
-
targets
Description copied from interface:ITransformerReturn a set ofITransformer.Targetidentifying which elements this transformer wishes to try and apply to. TheITransformer.getTargetType()must match the T variable for the transformer as documented inTargetType, other combinations will be rejected.- Specified by:
targetsin interfaceITransformer<MethodNode>- Returns:
- The set of targets this transformer wishes to apply to
-
transform
Description copied from interface:ITransformerTransform the input to the ITransformer's desire. The context from the last vote is provided as well.- Specified by:
transformin interfaceITransformer<MethodNode>- Parameters:
methodNode- The ASM input node, which can be mutated directlyvotingContext- The voting context- Returns:
- An ASM node of the same type as that supplied. It will be used for subsequent rounds of voting.
-
castVote
Description copied from interface:ITransformerReturn theTransformerVoteResultfor this transformer. The transformer should evaluate whether or not is is a candidate to apply during the round of voting in progress, represented by the context parameter. How the vote works:- If the transformer wishes to be a candidate, it should return
TransformerVoteResult.YES. - If the transformer wishes to exit the voting (the transformer has already
has its intended change applied, for example), it should return
TransformerVoteResult.NO - If the transformer wishes to wait for future rounds of voting it should return
TransformerVoteResult.DEFER. Note that if there is no YES candidate, but DEFER candidates remain, this is a DEFERRAL stalemate and the game will crash. - If the transformer wishes to crash the game, it should return
TransformerVoteResult.REJECT. This is extremely frowned upon, and should not be used except in extreme circumstances. If an incompatibility is present, it should detect and handle it in theITransformationService.onLoad(cpw.mods.modlauncher.api.IEnvironment, java.util.Set<java.lang.String>)
ITransformer.transform(Object, ITransformerVotingContext)method called. It is then removed from the set of transformers and another round is performed.- Specified by:
castVotein interfaceITransformer<MethodNode>- Parameters:
context- The context of the vote- Returns:
- A TransformerVoteResult indicating the desire of this transformer
- If the transformer wishes to be a candidate, it should return
-