I have tried to copy the code for the wheat thing exactly as in the documentation, just to see If I can get it to work on anything and it doesn't work. All I have changed is the name of the registry event to tattered_book_dungeons in prep for when I make it affect the dungeons, and the class names to TatteredBookModifier. Do apply is not being called, i tested using a print.
@EventBusSubscriber(modid = mod_id, bus = EventBusSubscriber.Bus.MOD)
public static class EventHandlers {
@SubscribeEvent
public static void registerModifierSerializers(@Nonnull final RegistryEvent.Register<GlobalLootModifierSerializer<?>> event) {
if (ENABLE) {
event.getRegistry().register(
new TatteredBookModifier.Serializer().setRegistryName(new ResourceLocation(mod_id,"tattered_book_dungeons"))
);
}
}
}
private static class TatteredBookModifier extends LootModifier {
private final int numSeedsToConvert;
private final Item itemToCheck;
private final Item itemReward;
public TatteredBookModifier(ILootCondition[] conditionsIn, int numSeeds, Item itemCheck, Item reward) {
super(conditionsIn);
numSeedsToConvert = numSeeds;
itemToCheck = itemCheck;
itemReward = reward;
}
@Nonnull
@Override
public List<ItemStack> doApply(List<ItemStack> generatedLoot, LootContext context) {
//
// Additional conditions can be checked, though as much as possible should be parameterized via JSON data.
// It is better to write a new ILootCondition implementation than to do things here.
//
System.out.println("BRUHHHH");
int numSeeds = 0;
for(ItemStack stack : generatedLoot) {
if(stack.getItem() == itemToCheck)
numSeeds+=stack.getCount();
}
if(numSeeds >= numSeedsToConvert) {
generatedLoot.removeIf(x -> x.getItem() == itemToCheck);
generatedLoot.add(new ItemStack(itemReward, (numSeeds/numSeedsToConvert)));
numSeeds = numSeeds%numSeedsToConvert;
if(numSeeds > 0)
generatedLoot.add(new ItemStack(itemToCheck, numSeeds));
}
return generatedLoot;
}
private static class Serializer extends GlobalLootModifierSerializer<TatteredBookModifier> {
@Override
public TatteredBookModifier read(ResourceLocation name, JsonObject object, ILootCondition[] conditionsIn) {
int numSeeds = JSONUtils.getInt(object, "numSeeds");
Item seed = ForgeRegistries.ITEMS.getValue(new ResourceLocation((JSONUtils.getString(object, "seedItem"))));
Item wheat = ForgeRegistries.ITEMS.getValue(new ResourceLocation(JSONUtils.getString(object, "replacement")));
return new TatteredBookModifier(conditionsIn, numSeeds, seed, wheat);
}
@Override
public JsonObject write(TatteredBookModifier instance) {
// TODO Auto-generated method stub
return null;
}
}
}
{
"replace": false,
"entries": [
"spacerulerwillmagicmod:tattered_book_dungeons"
]
}
{
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"item": "minecraft:shears"
}
},
{
"condition": "block_state_property",
"block":"minecraft:wheat"
}
],
"seedItem": "minecraft:wheat_seeds",
"numSeeds": 10,
"replacement": "minecraft:wheat"
}
Maybe my JSON files are stored in the wrong directory?