Added new RecipeUpdateEventHandler for refreshing recipe list when config file changes.
This commit is contained in:
@ -0,0 +1,65 @@
|
|||||||
|
package dev.micle.totemofreviving.event;
|
||||||
|
|
||||||
|
import dev.micle.totemofreviving.TotemOfReviving;
|
||||||
|
import dev.micle.totemofreviving.config.Config;
|
||||||
|
import dev.micle.totemofreviving.item.StrawTotemItem;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
|
import net.minecraft.item.crafting.RecipeManager;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||||
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
import net.minecraftforge.fml.config.ModConfig;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class RecipeUpdateEventHandler {
|
||||||
|
public static class ModBus {
|
||||||
|
@SubscribeEvent
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public void onModConfigReloadEvent(ModConfig.Reloading event) {
|
||||||
|
if (!event.getConfig().getModId().equals(TotemOfReviving.MOD_ID)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Minecraft.getInstance().getSingleplayerServer() != null) {
|
||||||
|
updateRecipeManager(Minecraft.getInstance().getSingleplayerServer().getRecipeManager());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Minecraft.getInstance().getConnection() != null) {
|
||||||
|
updateRecipeManager(Minecraft.getInstance().getConnection().getRecipeManager());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
System.out.println("FAILED TO GET RECIPE MANAGER!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class EventBus {
|
||||||
|
@SubscribeEvent
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public void onPlayerJoinEvent(EntityJoinWorldEvent event) {
|
||||||
|
if (!(event.getEntity() instanceof PlayerEntity)) { return; }
|
||||||
|
updateRecipeManager(event.getEntity().level.getRecipeManager());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void updateRecipeManager(RecipeManager recipeManager) {
|
||||||
|
ArrayList<IRecipe<?>> newRecipes = new ArrayList<>();
|
||||||
|
for (IRecipe<?> recipe : recipeManager.getRecipes()) {
|
||||||
|
if (recipe.getResultItem().getItem() instanceof StrawTotemItem) {
|
||||||
|
StrawTotemItem.setRecipe(recipe);
|
||||||
|
if (!Config.Server.getStrawTotemConfig().getIsEnabled()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newRecipes.add(recipe);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!newRecipes.contains(StrawTotemItem.getRecipe()) && Config.Server.getStrawTotemConfig().getIsEnabled()) {
|
||||||
|
newRecipes.add(StrawTotemItem.getRecipe());
|
||||||
|
}
|
||||||
|
|
||||||
|
recipeManager.replaceRecipes(newRecipes);
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +1,28 @@
|
|||||||
package dev.micle.totemofreviving.setup;
|
package dev.micle.totemofreviving.setup;
|
||||||
|
|
||||||
import dev.micle.totemofreviving.TotemOfReviving;
|
import dev.micle.totemofreviving.TotemOfReviving;
|
||||||
import net.minecraft.block.Block;
|
import dev.micle.totemofreviving.event.RecipeUpdateEventHandler;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
import net.minecraftforge.eventbus.api.IEventBus;
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||||
import net.minecraftforge.registries.*;
|
import net.minecraftforge.registries.DeferredRegister;
|
||||||
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
import net.minecraftforge.registries.IForgeRegistry;
|
||||||
|
import net.minecraftforge.registries.IForgeRegistryEntry;
|
||||||
|
|
||||||
public class Registration {
|
public class Registration {
|
||||||
public static final DeferredRegister<Block> BLOCKS = create(ForgeRegistries.BLOCKS);
|
|
||||||
public static final DeferredRegister<Item> ITEMS = create(ForgeRegistries.ITEMS);
|
public static final DeferredRegister<Item> ITEMS = create(ForgeRegistries.ITEMS);
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
|
||||||
|
|
||||||
BLOCKS.register(eventBus);
|
|
||||||
ITEMS.register(eventBus);
|
|
||||||
|
|
||||||
|
ITEMS.register(modEventBus);
|
||||||
ModItems.register();
|
ModItems.register();
|
||||||
|
|
||||||
|
modEventBus.register(new RecipeUpdateEventHandler.ModBus());
|
||||||
|
|
||||||
|
MinecraftForge.EVENT_BUS.register(new RecipeUpdateEventHandler.EventBus());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static <T extends IForgeRegistryEntry<T>> DeferredRegister<T> create(IForgeRegistry<T> registry) {
|
private static <T extends IForgeRegistryEntry<T>> DeferredRegister<T> create(IForgeRegistry<T> registry) {
|
||||||
|
Reference in New Issue
Block a user