
This includes Holy Water and Hidden Knowledge. Also fixed the JEI compat for the Alchemy Table so that hovering over the arrow shows the requirements.
181 lines
8.9 KiB
Java
181 lines
8.9 KiB
Java
package wayoftime.bloodmagic.client;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.gui.ScreenManager;
|
|
import net.minecraft.client.renderer.RenderType;
|
|
import net.minecraft.client.renderer.RenderTypeLookup;
|
|
import net.minecraft.client.world.ClientWorld;
|
|
import net.minecraft.entity.LivingEntity;
|
|
import net.minecraft.item.IItemPropertyGetter;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemModelsProperties;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
import net.minecraftforge.client.event.ColorHandlerEvent;
|
|
import net.minecraftforge.client.event.ModelRegistryEvent;
|
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
import net.minecraftforge.fml.DeferredWorkQueue;
|
|
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
|
import net.minecraftforge.fml.client.registry.RenderingRegistry;
|
|
import net.minecraftforge.fml.common.Mod;
|
|
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
|
import wayoftime.bloodmagic.BloodMagic;
|
|
import wayoftime.bloodmagic.anointment.AnointmentColor;
|
|
import wayoftime.bloodmagic.api.compat.IMultiWillTool;
|
|
import wayoftime.bloodmagic.client.model.MimicColor;
|
|
import wayoftime.bloodmagic.client.render.alchemyarray.BeaconAlchemyCircleRenderer;
|
|
import wayoftime.bloodmagic.client.render.alchemyarray.DayAlchemyCircleRenderer;
|
|
import wayoftime.bloodmagic.client.render.alchemyarray.LowStaticAlchemyCircleRenderer;
|
|
import wayoftime.bloodmagic.client.render.alchemyarray.NightAlchemyCircleRenderer;
|
|
import wayoftime.bloodmagic.client.render.alchemyarray.StaticAlchemyCircleRenderer;
|
|
import wayoftime.bloodmagic.client.render.block.RenderAlchemyArray;
|
|
import wayoftime.bloodmagic.client.render.block.RenderAltar;
|
|
import wayoftime.bloodmagic.client.render.block.RenderDemonCrucible;
|
|
import wayoftime.bloodmagic.client.render.entity.BloodLightRenderer;
|
|
import wayoftime.bloodmagic.client.render.entity.SoulSnareRenderer;
|
|
import wayoftime.bloodmagic.client.screens.ScreenAlchemicalReactionChamber;
|
|
import wayoftime.bloodmagic.client.screens.ScreenAlchemyTable;
|
|
import wayoftime.bloodmagic.client.screens.ScreenSoulForge;
|
|
import wayoftime.bloodmagic.common.block.BloodMagicBlocks;
|
|
import wayoftime.bloodmagic.common.item.BloodMagicItems;
|
|
import wayoftime.bloodmagic.common.item.ItemSacrificialDagger;
|
|
import wayoftime.bloodmagic.common.item.sigil.ItemSigilToggleable;
|
|
import wayoftime.bloodmagic.common.item.soul.ItemSentientSword;
|
|
import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes;
|
|
import wayoftime.bloodmagic.core.registry.AlchemyArrayRendererRegistry;
|
|
import wayoftime.bloodmagic.tile.TileAlchemyArray;
|
|
import wayoftime.bloodmagic.tile.TileAltar;
|
|
import wayoftime.bloodmagic.tile.TileDemonCrucible;
|
|
|
|
@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = BloodMagic.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
|
public class ClientEvents
|
|
{
|
|
@SubscribeEvent
|
|
public static void registerModels(ModelRegistryEvent event)
|
|
{
|
|
ClientRegistry.bindTileEntityRenderer(TileAltar.TYPE, RenderAltar::new);
|
|
ClientRegistry.bindTileEntityRenderer(TileAlchemyArray.TYPE, RenderAlchemyArray::new);
|
|
ClientRegistry.bindTileEntityRenderer(TileDemonCrucible.TYPE, RenderDemonCrucible::new);
|
|
// ClientRegistry.bindTileEntityRenderer(TileSoulForge.TYPE, RenderAlchemyArray::new);
|
|
}
|
|
|
|
public static void registerContainerScreens()
|
|
{
|
|
ScreenManager.registerFactory(BloodMagicBlocks.SOUL_FORGE_CONTAINER.get(), ScreenSoulForge::new);
|
|
ScreenManager.registerFactory(BloodMagicBlocks.ARC_CONTAINER.get(), ScreenAlchemicalReactionChamber::new);
|
|
ScreenManager.registerFactory(BloodMagicBlocks.ALCHEMY_TABLE_CONTAINER.get(), ScreenAlchemyTable::new);
|
|
}
|
|
|
|
public static void colorHandlerEvent(ColorHandlerEvent.Item event)
|
|
{
|
|
event.getItemColors().register(new AnointmentColor(), BloodMagicItems.MELEE_DAMAGE_ANOINTMENT.get(), BloodMagicItems.SILK_TOUCH_ANOINTMENT.get(), BloodMagicItems.FORTUNE_ANOINTMENT.get(), BloodMagicItems.HOLY_WATER_ANOINTMENT.get(), BloodMagicItems.HIDDEN_KNOWLEDGE_ANOINTMENT.get());
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
public static void initClientEvents(FMLClientSetupEvent event)
|
|
{
|
|
RenderingRegistry.registerEntityRenderingHandler(BloodMagicEntityTypes.SNARE.getEntityType(), SoulSnareRenderer::new);
|
|
RenderingRegistry.registerEntityRenderingHandler(BloodMagicEntityTypes.BLOOD_LIGHT.getEntityType(), BloodLightRenderer::new);
|
|
|
|
DeferredWorkQueue.runLater(() -> {
|
|
RenderType rendertype = RenderType.getCutoutMipped();
|
|
RenderTypeLookup.setRenderLayer(BloodMagicBlocks.ALCHEMY_TABLE.get(), rendertype);
|
|
RenderTypeLookup.setRenderLayer(BloodMagicBlocks.GROWING_DOUBT.get(), rendertype);
|
|
|
|
ClientEvents.registerContainerScreens();
|
|
|
|
registerToggleableProperties(BloodMagicItems.GREEN_GROVE_SIGIL.get());
|
|
registerToggleableProperties(BloodMagicItems.FAST_MINER_SIGIL.get());
|
|
registerToggleableProperties(BloodMagicItems.MAGNETISM_SIGIL.get());
|
|
registerToggleableProperties(BloodMagicItems.ICE_SIGIL.get());
|
|
registerMultiWillTool(BloodMagicItems.SENTIENT_SWORD.get());
|
|
registerMultiWillTool(BloodMagicItems.SENTIENT_AXE.get());
|
|
registerMultiWillTool(BloodMagicItems.SENTIENT_PICKAXE.get());
|
|
registerMultiWillTool(BloodMagicItems.SENTIENT_SHOVEL.get());
|
|
registerMultiWillTool(BloodMagicItems.SENTIENT_SCYTHE.get());
|
|
registerMultiWillTool(BloodMagicItems.PETTY_GEM.get());
|
|
registerMultiWillTool(BloodMagicItems.LESSER_GEM.get());
|
|
registerMultiWillTool(BloodMagicItems.COMMON_GEM.get());
|
|
registerMultiWillTool(BloodMagicItems.GREATER_GEM.get());
|
|
registerSacrificialKnife(BloodMagicItems.SACRIFICIAL_DAGGER.get());
|
|
|
|
ItemModelsProperties.registerProperty(BloodMagicItems.SENTIENT_SWORD.get(), BloodMagic.rl("active"), new IItemPropertyGetter()
|
|
{
|
|
@Override
|
|
public float call(ItemStack stack, ClientWorld world, LivingEntity entity)
|
|
{
|
|
return ((ItemSentientSword) stack.getItem()).getActivated(stack) ? 1 : 0;
|
|
}
|
|
});
|
|
|
|
Minecraft.getInstance().getBlockColors().register(new MimicColor(), BloodMagicBlocks.MIMIC.get());
|
|
RenderTypeLookup.setRenderLayer(BloodMagicBlocks.MIMIC.get(), (RenderType) -> true);
|
|
});
|
|
|
|
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/movement"), new StaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/movementarray.png")));
|
|
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/updraft"), new BeaconAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/updraftarray.png")));
|
|
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/spike"), new LowStaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/spikearray.png")));
|
|
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/day"), new DayAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/sunarray.png"), BloodMagic.rl("textures/models/alchemyarrays/sunarrayspikes.png"), BloodMagic.rl("textures/models/alchemyarrays/sunarraycircle.png")));
|
|
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/night"), new NightAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/moonarrayoutside.png"), BloodMagic.rl("textures/models/alchemyarrays/moonarraysymbols.png"), BloodMagic.rl("textures/models/alchemyarrays/moonarrayinside.png")));
|
|
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/grove"), new BeaconAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/growthsigil.png")));
|
|
AlchemyArrayRendererRegistry.registerRenderer(BloodMagic.rl("array/bounce"), new LowStaticAlchemyCircleRenderer(BloodMagic.rl("textures/models/alchemyarrays/bouncearray.png")));
|
|
|
|
}
|
|
|
|
public static void registerItemModelProperties(FMLClientSetupEvent event)
|
|
{
|
|
|
|
}
|
|
|
|
public static void registerToggleableProperties(Item item)
|
|
{
|
|
ItemModelsProperties.registerProperty(item, BloodMagic.rl("active"), new IItemPropertyGetter()
|
|
{
|
|
@Override
|
|
public float call(ItemStack stack, ClientWorld world, LivingEntity entity)
|
|
{
|
|
Item item = stack.getItem();
|
|
if (item instanceof ItemSigilToggleable)
|
|
{
|
|
return ((ItemSigilToggleable) item).getActivated(stack) ? 1 : 0;
|
|
}
|
|
return 0;
|
|
}
|
|
});
|
|
}
|
|
|
|
public static void registerMultiWillTool(Item item)
|
|
{
|
|
ItemModelsProperties.registerProperty(item, BloodMagic.rl("type"), new IItemPropertyGetter()
|
|
{
|
|
@Override
|
|
public float call(ItemStack stack, ClientWorld world, LivingEntity entity)
|
|
{
|
|
Item item = stack.getItem();
|
|
if (item instanceof IMultiWillTool)
|
|
{
|
|
return ((IMultiWillTool) item).getCurrentType(stack).ordinal();
|
|
}
|
|
return 0;
|
|
}
|
|
});
|
|
}
|
|
|
|
public static void registerSacrificialKnife(Item item)
|
|
{
|
|
ItemModelsProperties.registerProperty(item, BloodMagic.rl("incense"), new IItemPropertyGetter()
|
|
{
|
|
@Override
|
|
public float call(ItemStack stack, ClientWorld world, LivingEntity entity)
|
|
{
|
|
Item item = stack.getItem();
|
|
if (item instanceof ItemSacrificialDagger)
|
|
{
|
|
return ((ItemSacrificialDagger) item).canUseForSacrifice(stack) ? 1 : 0;
|
|
}
|
|
return 0;
|
|
}
|
|
});
|
|
}
|
|
}
|