Changes

Fix the explanation
Line 9: Line 9:  
#* This will contain all of the data about your modification and allows data packs to tweak your effect.
 
#* This will contain all of the data about your modification and allows data packs to tweak your effect.
 
# A class that extends <code>LootModifier</code>
 
# A class that extends <code>LootModifier</code>
#* The operational code that makes your modifier work and associated serializer.
+
#* The operational code that makes your modifier work and associated codec.
   −
Finally, the serializer for your operational class is [[Registration|registered]] as any other registry object.
+
Finally, the codec for your operational class is [[Registration|registered]] as any other registry object.
    
==The global_loot_modifiers.json==
 
==The global_loot_modifiers.json==
Line 66: Line 66:  
== The LootModifier Subclass ==
 
== The LootModifier Subclass ==
   −
You will also need a static child class that extends <code>GlobalLootModifierSerializer<T></code> where <code>T</code> is your LootModifier subclass in order to deserialize your json data file into operational code.
+
You will also need a <code>Codec<T></code> where <code>T</code> is your LootModifier subclass in order to deserialize your json data file into operational code. The codec must be [[Registration|registered]].
    
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
Line 74: Line 74:  
     *
 
     *
 
     */
 
     */
 +
// Assume there exists a <code>IForgeRegistry<Codec<T extends LootModifier>></code> LOOT_MODIFIER_REGISTRAR added by a mod
 
private static class WheatSeedsConverterModifier extends LootModifier
 
private static class WheatSeedsConverterModifier extends LootModifier
 
{
 
{
         public static final Supplier<Codec<WheatSeedsConverterModifier>> CODEC = Suppliers.memoize(() ->  
+
         public static final RegistryObject<Codec<WheatSeedsConverterModifier>> CODEC = LOOT_MODIFIER_REGISTRAR.register("wheat_seeds_converter", () ->  
 
         RecordCodecBuilder.create(inst -> codecStart(inst).and(
 
         RecordCodecBuilder.create(inst -> codecStart(inst).and(
 
                 inst.group(
 
                 inst.group(
Line 128: Line 129:  
This method is only called if the <code>conditions</code> specified return <code>true</code> and the modder is now able to make the modifications they desire. In this case we can see that the number of <code>itemToCheck</code> meets or exceeds the <code>numSeedsToConvert</code> before modifying the list by adding an <code>itemReward</code> and removing any excess <code>itemToCheck</code> stacks, matching the previously mentioned effects: ''When a wheat block is harvested with shears, if enough seeds are generated as loot, they are converted to additional wheat instead''.
 
This method is only called if the <code>conditions</code> specified return <code>true</code> and the modder is now able to make the modifications they desire. In this case we can see that the number of <code>itemToCheck</code> meets or exceeds the <code>numSeedsToConvert</code> before modifying the list by adding an <code>itemReward</code> and removing any excess <code>itemToCheck</code> stacks, matching the previously mentioned effects: ''When a wheat block is harvested with shears, if enough seeds are generated as loot, they are converted to additional wheat instead''.
   −
Utilize <code>GlobalLootModifierProvider</code> for [[datageneration|data generation]].
+
The codec can also be used for [[datageneration|data generation]] with a <code>GlobalLootModifierProvider</code>.
    
Additional [https://github.com/MinecraftForge/MinecraftForge/blob/1.19.x/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java examples] can be found on the Forge Git repository, including silk touch and smelting effects.
 
Additional [https://github.com/MinecraftForge/MinecraftForge/blob/1.19.x/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java examples] can be found on the Forge Git repository, including silk touch and smelting effects.