package com.minelittlepony.unicopia; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.minecraft.resource.ResourceType; import net.minecraft.util.Identifier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.ability.data.tree.TreeTypeLoader; import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.ability.magic.spell.trait.TraitLoader; import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.block.UBlocks; import com.minelittlepony.unicopia.block.state.StateMapLoader; import com.minelittlepony.unicopia.command.Commands; import com.minelittlepony.unicopia.compat.trinkets.TrinketsDelegate; import com.minelittlepony.unicopia.container.SpellbookChapterLoader; import com.minelittlepony.unicopia.container.UScreenHandlers; import com.minelittlepony.unicopia.diet.DietsLoader; import com.minelittlepony.unicopia.diet.affliction.AfflictionType; import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.effect.SeaponyGraceStatusEffect; import com.minelittlepony.unicopia.entity.effect.UPotions; import com.minelittlepony.unicopia.entity.mob.UEntities; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.item.enchantment.UEnchantments; import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.server.world.BlockDestructionManager; import com.minelittlepony.unicopia.server.world.Ether; import com.minelittlepony.unicopia.server.world.NocturnalSleepManager; import com.minelittlepony.unicopia.server.world.UGameRules; import com.minelittlepony.unicopia.server.world.UWorldGen; import com.minelittlepony.unicopia.server.world.WeatherConditions; import com.minelittlepony.unicopia.server.world.ZapAppleStageStore; public class Unicopia implements ModInitializer { public static final String DEFAULT_NAMESPACE = "unicopia"; public static final Logger LOGGER = LogManager.getLogger(); private static Config CONFIG; public static Config getConfig() { if (CONFIG == null) { CONFIG = new Config(); try { CONFIG.load(); } catch (IllegalStateException ignored) { CONFIG.save(); } } return CONFIG; } public static Identifier id(String name) { return new Identifier(DEFAULT_NAMESPACE, name); } @Override public void onInitialize() { Channel.bootstrap(); UCriteria.bootstrap(); UEntities.bootstrap(); Commands.bootstrap(); TrinketsDelegate.getInstance(null).bootstrap(); ServerTickEvents.END_WORLD_TICK.register(w -> { ((BlockDestructionManager.Source)w).getDestructionManager().tick(); ZapAppleStageStore.get(w).tick(); WeatherConditions.get(w).tick(); Ether.get(w).tick(); if (Debug.SPELLBOOK_CHAPTERS) { SpellbookChapterLoader.INSTANCE.sendUpdate(w.getServer()); } if (Debug.CHECK_GAME_VALUES) { Debug.runTests(w); } }); PlayerBlockBreakEvents.AFTER.register(SeaponyGraceStatusEffect::processBlockChange); NocturnalSleepManager.bootstrap(); registerServerDataReloaders(ResourceManagerHelper.get(ResourceType.SERVER_DATA)); UGameEvents.bootstrap(); UBlocks.bootstrap(); UPOIs.bootstrap(); UItems.bootstrap(); UPotions.bootstrap(); UParticles.bootstrap(); USounds.bootstrap(); Race.bootstrap(); SpellType.bootstrap(); AfflictionType.bootstrap(); Abilities.bootstrap(); UScreenHandlers.bootstrap(); UWorldGen.bootstrap(); UGameRules.bootstrap(); UDamageTypes.bootstrap(); } private void registerServerDataReloaders(ResourceManagerHelper registry) { registry.registerReloadListener(TreeTypeLoader.INSTANCE); registry.registerReloadListener(UEnchantments.POISONED_JOKE); registry.registerReloadListener(new TraitLoader()); registry.registerReloadListener(StateMapLoader.INSTANCE); registry.registerReloadListener(SpellbookChapterLoader.INSTANCE); registry.registerReloadListener(new DietsLoader()); } }