2020-10-29 19:50:03 +00:00
package wayoftime.bloodmagic ;
import org.apache.logging.log4j.LogManager ;
import org.apache.logging.log4j.Logger ;
import com.google.gson.Gson ;
import net.minecraft.block.Block ;
import net.minecraft.data.DataGenerator ;
import net.minecraft.fluid.Fluid ;
import net.minecraft.item.ItemGroup ;
import net.minecraft.item.ItemStack ;
import net.minecraft.item.crafting.IRecipeSerializer ;
import net.minecraft.potion.Effect ;
import net.minecraft.tileentity.TileEntityType ;
import net.minecraft.util.ResourceLocation ;
2021-01-12 13:27:47 +00:00
import net.minecraftforge.client.event.ColorHandlerEvent ;
2020-11-18 18:51:58 +00:00
import net.minecraftforge.client.event.ModelRegistryEvent ;
import net.minecraftforge.client.model.ModelLoaderRegistry ;
2020-10-29 19:50:03 +00:00
import net.minecraftforge.client.model.generators.ItemModelProvider ;
import net.minecraftforge.common.MinecraftForge ;
import net.minecraftforge.common.crafting.CraftingHelper ;
import net.minecraftforge.event.RegistryEvent ;
import net.minecraftforge.eventbus.api.IEventBus ;
import net.minecraftforge.eventbus.api.SubscribeEvent ;
2020-11-12 18:16:44 +00:00
import net.minecraftforge.fml.ModLoadingContext ;
2020-10-29 19:50:03 +00:00
import net.minecraftforge.fml.common.Mod ;
2020-11-12 18:16:44 +00:00
import net.minecraftforge.fml.config.ModConfig ;
2020-10-29 19:50:03 +00:00
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent ;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent ;
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent ;
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent ;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent ;
import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent ;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent ;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext ;
import wayoftime.bloodmagic.client.ClientEvents ;
2020-11-12 02:15:58 +00:00
import wayoftime.bloodmagic.client.hud.Elements ;
2021-01-20 00:26:23 +00:00
import wayoftime.bloodmagic.client.key.BloodMagicKeyHandler ;
import wayoftime.bloodmagic.client.key.KeyBindings ;
2020-11-18 18:51:58 +00:00
import wayoftime.bloodmagic.client.model.MimicModelLoader ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.common.block.BloodMagicBlocks ;
import wayoftime.bloodmagic.common.data.GeneratorBaseRecipes ;
import wayoftime.bloodmagic.common.data.GeneratorBlockStates ;
import wayoftime.bloodmagic.common.data.GeneratorBlockTags ;
2020-11-20 02:42:30 +00:00
import wayoftime.bloodmagic.common.data.GeneratorFluidTags ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.common.data.GeneratorItemModels ;
import wayoftime.bloodmagic.common.data.GeneratorItemTags ;
import wayoftime.bloodmagic.common.data.GeneratorLanguage ;
import wayoftime.bloodmagic.common.data.GeneratorLootTable ;
import wayoftime.bloodmagic.common.data.recipe.BloodMagicRecipeProvider ;
import wayoftime.bloodmagic.common.item.BloodMagicItems ;
import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes ;
import wayoftime.bloodmagic.common.registries.BloodMagicRecipeSerializers ;
2021-01-10 21:50:19 +00:00
import wayoftime.bloodmagic.core.AnointmentRegistrar ;
2020-11-28 17:04:11 +00:00
import wayoftime.bloodmagic.core.LivingArmorRegistrar ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.core.recipe.IngredientBloodOrb ;
2020-12-05 16:26:01 +00:00
import wayoftime.bloodmagic.core.registry.AlchemyArrayRegistry ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.core.registry.OrbRegistry ;
2020-11-20 02:42:30 +00:00
import wayoftime.bloodmagic.impl.BloodMagicAPI ;
import wayoftime.bloodmagic.impl.BloodMagicCorePlugin ;
2021-01-12 13:27:47 +00:00
import wayoftime.bloodmagic.loot.GlobalLootModifier ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.network.BloodMagicPacketHandler ;
import wayoftime.bloodmagic.potion.BloodMagicPotions ;
2020-11-26 18:32:56 +00:00
import wayoftime.bloodmagic.ritual.ModRituals ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.ritual.RitualManager ;
2020-11-15 17:07:01 +00:00
import wayoftime.bloodmagic.structures.ModDungeons ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.tile.TileAlchemicalReactionChamber ;
import wayoftime.bloodmagic.tile.TileAlchemyArray ;
2020-10-31 17:42:28 +00:00
import wayoftime.bloodmagic.tile.TileAlchemyTable ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.tile.TileAltar ;
2021-01-02 17:13:51 +00:00
import wayoftime.bloodmagic.tile.TileDeforesterCharge ;
2020-11-03 22:23:44 +00:00
import wayoftime.bloodmagic.tile.TileDemonCrucible ;
2020-11-02 23:53:48 +00:00
import wayoftime.bloodmagic.tile.TileDemonCrystal ;
2020-11-05 21:10:50 +00:00
import wayoftime.bloodmagic.tile.TileDemonCrystallizer ;
2020-11-14 00:44:57 +00:00
import wayoftime.bloodmagic.tile.TileIncenseAltar ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.tile.TileMasterRitualStone ;
2020-11-18 18:51:58 +00:00
import wayoftime.bloodmagic.tile.TileMimic ;
2021-01-02 17:13:51 +00:00
import wayoftime.bloodmagic.tile.TileShapedExplosive ;
2020-10-29 19:50:03 +00:00
import wayoftime.bloodmagic.tile.TileSoulForge ;
import wayoftime.bloodmagic.util.handler.event.GenericHandler ;
import wayoftime.bloodmagic.util.handler.event.WillHandler ;
@Mod ( " bloodmagic " )
//@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class BloodMagic
{
public static final String MODID = " bloodmagic " ;
// Directly reference a log4j logger.
public static final Logger LOGGER = LogManager . getLogger ( ) ;
private static Gson GSON = null ;
public static final BloodMagicPacketHandler packetHandler = new BloodMagicPacketHandler ( ) ;
public static final RitualManager RITUAL_MANAGER = new RitualManager ( ) ;
public BloodMagic ( )
{
IEventBus modBus = FMLJavaModLoadingContext . get ( ) . getModEventBus ( ) ;
modBus . addListener ( this : : setup ) ;
modBus . addListener ( this : : onLoadComplete ) ;
BloodMagicBlocks . BLOCKS . register ( modBus ) ;
BloodMagicItems . ITEMS . register ( modBus ) ;
// RegistrarBloodMagic.BLOOD_ORBS.createAndRegister(modBus, "bloodorbs");
BloodMagicItems . BLOOD_ORBS . createAndRegister ( modBus , " bloodorbs " ) ;
2020-11-28 17:04:11 +00:00
LivingArmorRegistrar . UPGRADES . createAndRegister ( modBus , " upgrades " ) ;
2021-01-10 21:50:19 +00:00
AnointmentRegistrar . ANOINTMENTS . createAndRegister ( modBus , " anointments " ) ;
2020-10-29 19:50:03 +00:00
BloodMagicItems . BASICITEMS . register ( modBus ) ;
BloodMagicBlocks . BASICBLOCKS . register ( modBus ) ;
2020-11-14 21:15:26 +00:00
BloodMagicBlocks . DUNGEONBLOCKS . register ( modBus ) ;
2020-10-29 19:50:03 +00:00
BloodMagicBlocks . FLUIDS . register ( modBus ) ;
BloodMagicBlocks . CONTAINERS . register ( modBus ) ;
BloodMagicEntityTypes . ENTITY_TYPES . register ( modBus ) ;
2021-01-12 13:27:47 +00:00
GlobalLootModifier . GLM . register ( modBus ) ;
2020-10-29 19:50:03 +00:00
BloodMagicRecipeSerializers . RECIPE_SERIALIZERS . register ( modBus ) ;
// Register the setup method for modloading
modBus . addListener ( this : : setup ) ;
// Register the enqueueIMC method for modloading
modBus . addListener ( this : : enqueueIMC ) ;
// Register the processIMC method for modloading
modBus . addListener ( this : : processIMC ) ;
// Register the doClientStuff method for modloading
modBus . addListener ( this : : doClientStuff ) ;
2020-11-18 18:51:58 +00:00
modBus . addListener ( this : : loadModels ) ;
2020-10-29 19:50:03 +00:00
modBus . addListener ( this : : gatherData ) ;
modBus . addGenericListener ( Fluid . class , this : : registerFluids ) ;
modBus . addGenericListener ( TileEntityType . class , this : : registerTileEntityTypes ) ;
modBus . addGenericListener ( IRecipeSerializer . class , this : : registerRecipes ) ;
modBus . addGenericListener ( Effect . class , BloodMagicPotions : : registerPotions ) ;
MinecraftForge . EVENT_BUS . register ( new GenericHandler ( ) ) ;
2021-01-20 17:50:34 +00:00
// MinecraftForge.EVENT_BUS.register(new ClientHandler());
2021-01-16 16:51:26 +00:00
modBus . addListener ( this : : registerColors ) ;
2020-10-29 19:50:03 +00:00
MinecraftForge . EVENT_BUS . register ( new WillHandler ( ) ) ;
// MinecraftForge.EVENT_BUS.register(new BloodMagicBlocks());
// MinecraftForge.EVENT_BUS.addListener(this::commonSetup);
// Register ourselves for server and other game events we are interested in
MinecraftForge . EVENT_BUS . register ( this ) ;
2020-11-12 18:16:44 +00:00
ModLoadingContext context = ModLoadingContext . get ( ) ;
context . registerConfig ( ModConfig . Type . CLIENT , ConfigManager . CLIENT_SPEC ) ;
2020-11-14 00:44:57 +00:00
2020-11-15 17:07:01 +00:00
ModDungeons . init ( ) ;
2020-10-29 19:50:03 +00:00
}
private void registerRecipes ( RegistryEvent . Register < IRecipeSerializer < ? > > event )
{
// System.out.println("Registering IngredientBloodOrb Serializer.");
CraftingHelper . register ( IngredientBloodOrb . NAME , IngredientBloodOrb . Serializer . INSTANCE ) ;
// event.getRegistry().registerAll(
// new SewingRecipe.Serializer().setRegistryName("sewing")
// );
}
public static ResourceLocation rl ( String name )
{
return new ResourceLocation ( BloodMagic . MODID , name ) ;
}
public void registerFluids ( RegistryEvent . Register < Fluid > event )
{
}
public void onLoadComplete ( FMLLoadCompleteEvent event )
{
OrbRegistry . tierMap . put ( BloodMagicItems . ORB_WEAK . get ( ) . getTier ( ) , new ItemStack ( BloodMagicItems . WEAK_BLOOD_ORB . get ( ) ) ) ;
OrbRegistry . tierMap . put ( BloodMagicItems . ORB_APPRENTICE . get ( ) . getTier ( ) , new ItemStack ( BloodMagicItems . APPRENTICE_BLOOD_ORB . get ( ) ) ) ;
OrbRegistry . tierMap . put ( BloodMagicItems . ORB_MAGICIAN . get ( ) . getTier ( ) , new ItemStack ( BloodMagicItems . MAGICIAN_BLOOD_ORB . get ( ) ) ) ;
OrbRegistry . tierMap . put ( BloodMagicItems . ORB_MASTER . get ( ) . getTier ( ) , new ItemStack ( BloodMagicItems . MASTER_BLOOD_ORB . get ( ) ) ) ;
BloodMagicCorePlugin . INSTANCE . register ( BloodMagicAPI . INSTANCE ) ;
RITUAL_MANAGER . discover ( ) ;
2020-11-26 18:32:56 +00:00
ModRituals . initHarvestHandlers ( ) ;
2020-11-28 17:04:11 +00:00
LivingArmorRegistrar . register ( ) ;
2021-01-10 21:50:19 +00:00
AnointmentRegistrar . register ( ) ;
2020-12-05 16:26:01 +00:00
AlchemyArrayRegistry . registerBaseArrays ( ) ;
2020-10-29 19:50:03 +00:00
}
public void registerTileEntityTypes ( RegistryEvent . Register < TileEntityType < ? > > event )
{
LOGGER . info ( " Attempting to register Tile Entities " ) ;
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileAltar : : new , BloodMagicBlocks . BLOOD_ALTAR . get ( ) ) . build ( null ) . setRegistryName ( " altar " ) ) ;
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileAlchemyArray : : new , BloodMagicBlocks . ALCHEMY_ARRAY . get ( ) ) . build ( null ) . setRegistryName ( " alchemyarray " ) ) ;
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileSoulForge : : new , BloodMagicBlocks . SOUL_FORGE . get ( ) ) . build ( null ) . setRegistryName ( " soulforge " ) ) ;
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileMasterRitualStone : : new , BloodMagicBlocks . MASTER_RITUAL_STONE . get ( ) ) . build ( null ) . setRegistryName ( " masterritualstone " ) ) ;
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileAlchemicalReactionChamber : : new , BloodMagicBlocks . ALCHEMICAL_REACTION_CHAMBER . get ( ) ) . build ( null ) . setRegistryName ( " alchemicalreactionchamber " ) ) ;
2020-10-31 17:42:28 +00:00
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileAlchemyTable : : new , BloodMagicBlocks . ALCHEMY_TABLE . get ( ) ) . build ( null ) . setRegistryName ( " alchemytable " ) ) ;
2020-11-02 23:53:48 +00:00
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileDemonCrystal : : new , BloodMagicBlocks . RAW_CRYSTAL_BLOCK . get ( ) , BloodMagicBlocks . CORROSIVE_CRYSTAL_BLOCK . get ( ) , BloodMagicBlocks . DESTRUCTIVE_CRYSTAL_BLOCK . get ( ) , BloodMagicBlocks . VENGEFUL_CRYSTAL_BLOCK . get ( ) , BloodMagicBlocks . STEADFAST_CRYSTAL_BLOCK . get ( ) ) . build ( null ) . setRegistryName ( " demoncrystal " ) ) ;
2020-11-03 22:23:44 +00:00
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileDemonCrucible : : new , BloodMagicBlocks . DEMON_CRUCIBLE . get ( ) ) . build ( null ) . setRegistryName ( " demoncrucible " ) ) ;
2020-11-05 21:10:50 +00:00
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileDemonCrystallizer : : new , BloodMagicBlocks . DEMON_CRYSTALLIZER . get ( ) ) . build ( null ) . setRegistryName ( " demoncrystallizer " ) ) ;
2020-11-14 00:44:57 +00:00
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileIncenseAltar : : new , BloodMagicBlocks . INCENSE_ALTAR . get ( ) ) . build ( null ) . setRegistryName ( " incensealtar " ) ) ;
2020-11-18 18:51:58 +00:00
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileMimic : : new , BloodMagicBlocks . MIMIC . get ( ) , BloodMagicBlocks . ETHEREAL_MIMIC . get ( ) ) . build ( null ) . setRegistryName ( " mimic " ) ) ;
2021-01-02 17:13:51 +00:00
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileShapedExplosive : : new , BloodMagicBlocks . SHAPED_CHARGE . get ( ) ) . build ( null ) . setRegistryName ( " shaped_explosive " ) ) ;
event . getRegistry ( ) . register ( TileEntityType . Builder . create ( TileDeforesterCharge : : new , BloodMagicBlocks . DEFORESTER_CHARGE . get ( ) ) . build ( null ) . setRegistryName ( " deforester_charge " ) ) ;
2020-10-29 19:50:03 +00:00
}
@SubscribeEvent
public void gatherData ( GatherDataEvent event )
{
// GSON = new GsonBuilder().registerTypeAdapter(Variant.class, new Variant.Deserializer()).registerTypeAdapter(ItemCameraTransforms.class, new ItemCameraTransforms.Deserializer()).registerTypeAdapter(ItemTransformVec3f.class, new ItemTransformVec3f.Deserializer()).create();
DataGenerator gen = event . getGenerator ( ) ;
// if(event.includeClient())
{
ItemModelProvider itemModels = new GeneratorItemModels ( gen , event . getExistingFileHelper ( ) ) ;
gen . addProvider ( itemModels ) ;
gen . addProvider ( new GeneratorBlockStates ( gen , itemModels . existingFileHelper ) ) ;
gen . addProvider ( new GeneratorLanguage ( gen ) ) ;
gen . addProvider ( new BloodMagicRecipeProvider ( gen ) ) ;
gen . addProvider ( new GeneratorBaseRecipes ( gen ) ) ;
gen . addProvider ( new GeneratorLootTable ( gen ) ) ;
GeneratorBlockTags bmBlockTags = new GeneratorBlockTags ( gen , event . getExistingFileHelper ( ) ) ;
gen . addProvider ( bmBlockTags ) ;
gen . addProvider ( new GeneratorItemTags ( gen , bmBlockTags , event . getExistingFileHelper ( ) ) ) ;
2020-11-20 02:42:30 +00:00
gen . addProvider ( new GeneratorFluidTags ( gen , event . getExistingFileHelper ( ) ) ) ;
2020-10-29 19:50:03 +00:00
}
}
2020-11-18 18:51:58 +00:00
private void loadModels ( final ModelRegistryEvent event )
{
ModelLoaderRegistry . registerLoader ( BloodMagic . rl ( " mimicloader " ) , new MimicModelLoader ( BloodMagic . rl ( " block/solidopaquemimic " ) ) ) ;
ModelLoaderRegistry . registerLoader ( BloodMagic . rl ( " mimicloader_ethereal " ) , new MimicModelLoader ( BloodMagic . rl ( " block/etherealopaquemimic " ) ) ) ;
}
2020-10-29 19:50:03 +00:00
private void setup ( final FMLCommonSetupEvent event )
{
// some preinit code
// LOGGER.info("HELLO FROM PREINIT");
// LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
packetHandler . initialize ( ) ;
}
2020-11-21 15:24:35 +00:00
// @OnlyIn(Dist.CLIENT)
2020-10-29 19:50:03 +00:00
private void doClientStuff ( final FMLClientSetupEvent event )
{
// do something that can only be done on the client
// LOGGER.info("Got game settings {}", event.getMinecraftSupplier().get().gameSettings);
2020-10-31 17:42:28 +00:00
ClientEvents . initClientEvents ( event ) ;
2020-11-12 02:15:58 +00:00
Elements . registerElements ( ) ;
2021-01-16 16:51:26 +00:00
MinecraftForge . EVENT_BUS . register ( new ClientEvents ( ) ) ;
2021-01-20 00:26:23 +00:00
KeyBindings . initializeKeys ( ) ;
new BloodMagicKeyHandler ( ) ;
2021-01-16 16:51:26 +00:00
// IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus();
//
2020-10-29 19:50:03 +00:00
}
2021-01-16 16:51:26 +00:00
private void registerColors ( final ColorHandlerEvent event )
2021-01-12 13:27:47 +00:00
{
2021-01-16 16:51:26 +00:00
if ( event instanceof ColorHandlerEvent . Item )
ClientEvents . colorHandlerEvent ( ( ColorHandlerEvent . Item ) event ) ;
2021-01-12 13:27:47 +00:00
}
2020-10-29 19:50:03 +00:00
private void enqueueIMC ( final InterModEnqueueEvent event )
{
// some example code to dispatch IMC to another mod
// InterModComms.sendTo("examplemod", "helloworld", () -> {
// LOGGER.info("Hello world from the MDK");
// return "Hello world";
// });
}
private void processIMC ( final InterModProcessEvent event )
{
// some example code to receive and process InterModComms from other mods
// LOGGER.info("Got IMC {}", event.getIMCStream().map(m -> m.getMessageSupplier().get()).collect(Collectors.toList()));
}
// You can use SubscribeEvent and let the Event Bus discover methods to call
@SubscribeEvent
public void onServerStarting ( FMLServerStartingEvent event )
{
// do something when the server starts
// LOGGER.info("HELLO from server starting");
}
// You can use EventBusSubscriber to automatically subscribe events on the
// contained class (this is subscribing to the MOD
// Event bus for receiving Registry Events)
@Mod.EventBusSubscriber ( bus = Mod . EventBusSubscriber . Bus . MOD )
public static class RegistryEvents
{
@SubscribeEvent
public static void onBlocksRegistry ( final RegistryEvent . Register < Block > blockRegistryEvent )
{
// register a new block here
// LOGGER.info("HELLO from Register Block");
}
}
// Custom ItemGroup TAB
public static final ItemGroup TAB = new ItemGroup ( " bloodmagictab " )
{
@Override
public ItemStack createIcon ( )
{
return new ItemStack ( BloodMagicBlocks . BLOOD_ALTAR . get ( ) ) ;
}
} ;
2021-01-20 00:26:23 +00:00
public static final String NAME = " Blood Magic: Alchemical Wizardry " ;
2020-10-29 19:50:03 +00:00
}