Move commonly used API systems to a plugin based system

Create a class that implements IBloodMagicPlugin and annotate it with
`@BloodMagicPlugin`. The `register` method will be called during init.

Currently implemented systems:
- Blacklisting
  - Teleposer
  - Teleposer (entity)
  - Transposition
  - Well of Suffering
  - Green Grove
- Setting sacrificial values
- Adding altar components
This commit is contained in:
Nicholas Ignoffo 2017-08-15 18:14:28 -07:00
parent 5fcdd978d7
commit 554c9852e6
86 changed files with 528 additions and 496 deletions

View file

@ -0,0 +1,134 @@
package WayofTime.bloodmagic.core;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.orb.BloodOrb;
import WayofTime.bloodmagic.api.registry.OrbRegistry;
import WayofTime.bloodmagic.entity.mob.*;
import WayofTime.bloodmagic.entity.projectile.*;
import WayofTime.bloodmagic.potion.PotionBloodMagic;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.init.MobEffects;
import net.minecraft.potion.Potion;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.EntityEntry;
import net.minecraftforge.fml.common.registry.EntityRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.RegistryBuilder;
@Mod.EventBusSubscriber(modid = BloodMagic.MODID)
@GameRegistry.ObjectHolder(BloodMagic.MODID)
public class RegistrarBloodMagic {
@GameRegistry.ObjectHolder("weak")
public static final BloodOrb ORB_WEAK = new BloodOrb("", 0, 0);
@GameRegistry.ObjectHolder("apprentice")
public static final BloodOrb ORB_APPRENTICE = new BloodOrb("", 0, 0);
@GameRegistry.ObjectHolder("magician")
public static final BloodOrb ORB_MAGICIAN = new BloodOrb("", 0, 0);
@GameRegistry.ObjectHolder("master")
public static final BloodOrb ORB_MASTER = new BloodOrb("", 0, 0);
@GameRegistry.ObjectHolder("archmage")
public static final BloodOrb ORB_ARCHMAGE = new BloodOrb("", 0, 0);
@GameRegistry.ObjectHolder("transcendent")
public static final BloodOrb ORB_TRANSCENDENT = new BloodOrb("", 0, 0);
public static final Potion BOOST = MobEffects.HASTE;
public static final Potion WHIRLWIND = MobEffects.HASTE;
public static final Potion PLANAR_BINDING = MobEffects.HASTE;
public static final Potion SOUL_SNARE = MobEffects.HASTE;
public static final Potion SOUL_FRAY = MobEffects.HASTE;
public static final Potion FIRE_FUSE = MobEffects.HASTE;
public static final Potion CONSTRICT = MobEffects.HASTE;
public static final Potion PLANT_LEECH = MobEffects.HASTE;
public static final Potion DEAFNESS = MobEffects.HASTE;
public static final Potion BOUNCE = MobEffects.HASTE;
public static final Potion CLING = MobEffects.HASTE;
public static final Potion SACRIFICIAL_LAMB = MobEffects.HASTE;
public static IForgeRegistry<BloodOrb> BLOOD_ORBS = null;
@SubscribeEvent
public static void registerBloodOrbs(RegistryEvent.Register<BloodOrb> event) {
event.getRegistry().registerAll(
new BloodOrb("weak", 1, 5000).setRegistryName("weak"),
new BloodOrb("apprentice", 2, 25000).setRegistryName("apprentice"),
new BloodOrb("magician", 3, 150000).setRegistryName("magician"),
new BloodOrb("master", 4, 1000000).setRegistryName("master"),
new BloodOrb("archmage", 5, 10000000).setRegistryName("archmage"),
new BloodOrb("transcendent", 6, 30000000).setRegistryName("transcendent")
);
}
@SubscribeEvent
public static void registerPotions(RegistryEvent.Register<Potion> event) {
event.getRegistry().registerAll(
new PotionBloodMagic("Boost", false, 0xFFFFFF, 0, 1).setRegistryName("boost"),
new PotionBloodMagic("Planar Binding", false, 0, 2, 0).setRegistryName("planar_binding"),
new PotionBloodMagic("Soul Snare", false, 0xFFFFFF, 3, 0).setRegistryName("soul_snare"),
new PotionBloodMagic("Soul Fray", true, 0xFFFFFF, 4, 0).setRegistryName("soul_fray"),
new PotionBloodMagic("Fire Fuse", true, 0xFF3333, 5, 0).setRegistryName("fire_fuse"),
new PotionBloodMagic("Constriction", true, 0x000000, 6, 0).setRegistryName("constriction"),
new PotionBloodMagic("Plant Leech", true, 0x000000, 7, 0).setRegistryName("plant_leech"),
new PotionBloodMagic("Deaf", true, 0x000000, 0, 1).setRegistryName("deafness"),
new PotionBloodMagic("Bounce", false, 0x000000, 1, 1).setRegistryName("bounce"),
new PotionBloodMagic("Cling", false, 0x000000, 2, 1).setRegistryName("cling"),
new PotionBloodMagic("S. Lamb", false, 0x000000, 3, 1).setRegistryName("sacrificial_lamb")
);
}
@SubscribeEvent
public static void registerEntities(RegistryEvent.Register<EntityEntry> event) {
int entities = 0;
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "blood_light"), EntityBloodLight.class, "BloodLight", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "soul_snare"), EntitySoulSnare.class, "SoulSnare", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "soul_arrow"), EntitySentientArrow.class, "SoulArrow", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "meteor"), EntityMeteor.class, "Meteor", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "sentient_specter"), EntitySentientSpecter.class, "SentientSpecter", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "mimic"), EntityMimic.class, "Mimic", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "corrupted_zombie"), EntityCorruptedZombie.class, "CorruptedZombie", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "corrupted_sheep"), EntityCorruptedSheep.class, "CorruptedSheep", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "corrupted_chicken"), EntityCorruptedChicken.class, "CorruptedChicken", ++entities, BloodMagic.instance, 16*4, 3, true);
EntityRegistry.registerModEntity(new ResourceLocation(BloodMagic.MODID, "corrupted_spider"), EntityCorruptedSpider.class, "CorruptedSpider", ++entities, BloodMagic.instance, 16*4, 3, true);
}
@SubscribeEvent
public static void onRegistryCreation(RegistryEvent.NewRegistry event) {
BLOOD_ORBS = new RegistryBuilder<BloodOrb>()
.setName(new ResourceLocation(BloodMagic.MODID, "blood_orb"))
.setIDRange(0, Short.MAX_VALUE)
.setType(BloodOrb.class)
.addCallback((IForgeRegistry.AddCallback<BloodOrb>) (owner, stage, id, obj, oldObj) -> OrbRegistry.tierMap.put(obj.getTier(), OrbRegistry.getOrbStack(obj)))
.create();
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void registerModels(ModelRegistryEvent event) {
for (BloodOrb orb : BLOOD_ORBS) {
ModelResourceLocation modelLocation = orb.getModelLocation();
if (modelLocation == null)
modelLocation = new ModelResourceLocation(orb.getRegistryName(), "inventory");
ModelLoader.registerItemVariants(RegistrarBloodMagicItems.BLOOD_ORB, modelLocation);
}
ModelLoader.setCustomMeshDefinition(RegistrarBloodMagicItems.BLOOD_ORB, stack -> {
if (!stack.hasTagCompound())
return new ModelResourceLocation(ORB_WEAK.getRegistryName(), "inventory");
BloodOrb orb = BLOOD_ORBS.getValue(new ResourceLocation(stack.getTagCompound().getString("orb")));
if (orb == null || orb.getModelLocation() == null)
return new ModelResourceLocation(ORB_WEAK.getRegistryName(), "inventory");
return orb.getModelLocation();
});
}
}

View file

@ -0,0 +1,176 @@
package WayofTime.bloodmagic.core;
import WayofTime.bloodmagic.block.*;
import com.google.common.collect.Sets;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.block.enums.EnumDemonBlock1;
import WayofTime.bloodmagic.block.enums.EnumDemonBlock2;
import WayofTime.bloodmagic.block.enums.EnumDemonBlock3;
import WayofTime.bloodmagic.block.enums.EnumSubWillType;
import WayofTime.bloodmagic.block.enums.EnumSubWillType1;
import WayofTime.bloodmagic.block.enums.EnumSubWillType2;
import WayofTime.bloodmagic.block.enums.EnumSubWillType3;
import WayofTime.bloodmagic.block.enums.EnumWillWall;
import WayofTime.bloodmagic.tile.TileAlchemyArray;
import WayofTime.bloodmagic.tile.TileAlchemyTable;
import WayofTime.bloodmagic.tile.TileAltar;
import WayofTime.bloodmagic.tile.TileBloodTank;
import WayofTime.bloodmagic.tile.TileDemonCrucible;
import WayofTime.bloodmagic.tile.TileDemonCrystal;
import WayofTime.bloodmagic.tile.TileDemonCrystallizer;
import WayofTime.bloodmagic.tile.TileDemonPylon;
import WayofTime.bloodmagic.tile.TileDimensionalPortal;
import WayofTime.bloodmagic.tile.TileImperfectRitualStone;
import WayofTime.bloodmagic.tile.TileIncenseAltar;
import WayofTime.bloodmagic.tile.TileInversionPillar;
import WayofTime.bloodmagic.tile.TileMasterRitualStone;
import WayofTime.bloodmagic.tile.TileMimic;
import WayofTime.bloodmagic.tile.TilePhantomBlock;
import WayofTime.bloodmagic.tile.TileSoulForge;
import WayofTime.bloodmagic.tile.TileSpectralBlock;
import WayofTime.bloodmagic.tile.TileTeleposer;
import WayofTime.bloodmagic.tile.routing.TileInputRoutingNode;
import WayofTime.bloodmagic.tile.routing.TileItemRoutingNode;
import WayofTime.bloodmagic.tile.routing.TileMasterRoutingNode;
import WayofTime.bloodmagic.tile.routing.TileOutputRoutingNode;
import java.util.Set;
@Mod.EventBusSubscriber(modid = BloodMagic.MODID)
@GameRegistry.ObjectHolder(BloodMagic.MODID)
@SuppressWarnings("unused")
public class RegistrarBloodMagicBlocks
{
public static final Block ALTAR = Blocks.AIR;
public static final Block BLOOD_RUNE = Blocks.AIR;
public static final Block RITUAL_CONTROLLER = Blocks.AIR;
public static final Block RITUAL_STONE = Blocks.AIR;
public static final Block BLOOD_LIGHT = Blocks.AIR;
public static final Block TELEPOSER = Blocks.AIR;
public static final Block ALCHEMY_ARRAY = Blocks.AIR;
public static final Block SPECTRAL = Blocks.AIR;
public static final Block PHANTOM = Blocks.AIR;
public static final Block SOUL_FORGE = Blocks.AIR;
public static final Block INCENSE_ALTAR = Blocks.AIR;
public static final Block DEMON_CRUCIBLE = Blocks.AIR;
public static final Block DEMON_PYLON = Blocks.AIR;
public static final Block DEMON_CRYSTALLIZER = Blocks.AIR;
public static final Block DEMON_CRYSTAL = Blocks.AIR;
public static final Block ALCHEMY_TABLE = Blocks.AIR;
public static final Block LIFE_ESSENCE = Blocks.AIR;
public static final Block DECORATIVE_BRICK = Blocks.AIR;
public static final Block PATH = Blocks.AIR;
public static final Block MASTER_ROUTING_NODE = Blocks.AIR;
public static final Block INPUT_ROUTING_NODE = Blocks.AIR;
public static final Block OUTPUT_ROUTING_NODE = Blocks.AIR;
public static final Block ITEM_ROUTING_NODE = Blocks.AIR;
public static final Block DIMENSIONAL_PORTAL = Blocks.AIR;
public static final Block BLOOD_TANK = Blocks.AIR;
public static final Block MIMIC = Blocks.AIR;
public static final Block DEMON_BRICK_1 = Blocks.AIR;
public static final Block DEMON_BRICK_2 = Blocks.AIR;
public static final Block DEMON_EXTRAS = Blocks.AIR;
public static final Block DEMON_PILLAR_1 = Blocks.AIR;
public static final Block DEMON_PILLAR_2 = Blocks.AIR;
public static final Block DEMON_PILLAR_CAP_1 = Blocks.AIR;
public static final Block DEMON_PILLAR_CAP_2 = Blocks.AIR;
public static final Block DEMON_PILLAR_CAP_3 = Blocks.AIR;
public static final Block DEMON_LIGHT = Blocks.AIR;
public static final Block DEMON_WALL_1 = Blocks.AIR;
public static final Block DEMON_STAIRS_1 = Blocks.AIR;
public static final Block DEMON_STAIRS_2 = Blocks.AIR;
public static final Block DEMON_STAIRS_3 = Blocks.AIR;
public static final Block INVERSION_PILLAR = Blocks.AIR;
public static final Block INVERSION_PILLAR_END = Blocks.AIR;
static Set<Block> blocks;
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event)
{
FluidRegistry.registerFluid(BlockLifeEssence.getLifeEssence());
FluidRegistry.addBucketForFluid(BlockLifeEssence.getLifeEssence());
blocks = Sets.newHashSet(
new BlockAltar().setRegistryName("altar"),
new BlockBloodRune().setRegistryName("blood_rune"),
new BlockRitualController().setRegistryName("ritual_controller"),
new BlockRitualStone().setRegistryName("ritual_stone"),
new BlockBloodLight().setRegistryName("blood_light"),
new BlockTeleposer().setRegistryName("teleposer"),
new BlockAlchemyArray().setRegistryName("alchemy_array"),
new BlockSpectral().setRegistryName("spectral"),
new BlockPhantom().setRegistryName("phantom"),
new BlockSoulForge().setRegistryName("soul_forge"),
new BlockIncenseAltar().setRegistryName("incense_altar"),
new BlockDemonCrucible().setRegistryName("demon_crucible"),
new BlockDemonPylon().setRegistryName("demon_pylon"),
new BlockDemonCrystallizer().setRegistryName("demon_crystallizer"),
new BlockDemonCrystal().setRegistryName("demon_crystal"),
new BlockAlchemyTable().setRegistryName("alchemy_table"),
new BlockLifeEssence().setRegistryName("life_essence"),
new BlockDecorative().setRegistryName("decorative_brick"),
new BlockPath().setRegistryName("path"),
new BlockMasterRoutingNode().setRegistryName("master_routing_node"),
new BlockInputRoutingNode().setRegistryName("input_routing_node"),
new BlockOutputRoutingNode().setRegistryName("output_routing_node"),
new BlockItemRoutingNode().setRegistryName("item_routing_node"),
new BlockDimensionalPortal().setRegistryName("dimensional_portal"),
new BlockBloodTank().setRegistryName("blood_tank"),
new BlockMimic().setRegistryName("mimic"),
new BlockDemonBase<>("bricks1", EnumDemonBlock1.class).setRegistryName("demon_brick_1"),
new BlockDemonBase<>("bricks2", EnumDemonBlock2.class).setRegistryName("demon_brick_2"),
new BlockDemonBase<>("extras", EnumDemonBlock3.class).setRegistryName("demon_extras"),
new BlockDemonPillarBase<>("pillar1", Material.ROCK, EnumSubWillType.class).setRegistryName("demon_pillar_1"),
new BlockDemonPillarBase<>("pillar2", Material.ROCK, EnumSubWillType.class).setRegistryName("demon_pillar_2"),
new BlockDemonPillarCapBase<>("pillarCap1", Material.ROCK, EnumSubWillType1.class).setRegistryName("demon_pillar_cap_1"),
new BlockDemonPillarCapBase<>("pillarCap2", Material.ROCK, EnumSubWillType2.class).setRegistryName("demon_pillar_cap_2"),
new BlockDemonPillarCapBase<>("pillarCap3", Material.ROCK, EnumSubWillType3.class).setRegistryName("demon_pillar_cap_3"),
new BlockDemonLight().setRegistryName("demon_light"),
new BlockDemonWallBase<>("wall1", Material.ROCK, EnumWillWall.class).setRegistryName("demon_wall_1"),
new BlockDemonStairsBase<>("stairs1", Material.ROCK, EnumSubWillType1.class).setRegistryName("demon_stairs_1"),
new BlockDemonStairsBase<>("stairs2", Material.ROCK, EnumSubWillType2.class).setRegistryName("demon_stairs_2"),
new BlockDemonStairsBase<>("stairs3", Material.ROCK, EnumSubWillType3.class).setRegistryName("demon_stairs_3"),
new BlockInversionPillar().setRegistryName("inversion_pillar"),
new BlockInversionPillarEnd().setRegistryName("inversion_pillar_end")
);
event.getRegistry().registerAll(blocks.toArray(new Block[0]));
registerTiles();
}
private static void registerTiles() {
GameRegistry.registerTileEntity(TileAltar.class, BloodMagic.MODID + ":" + TileAltar.class.getSimpleName());
GameRegistry.registerTileEntity(TileImperfectRitualStone.class, BloodMagic.MODID + ":" + TileImperfectRitualStone.class.getSimpleName());
GameRegistry.registerTileEntity(TileMasterRitualStone.class, BloodMagic.MODID + ":" + TileMasterRitualStone.class.getSimpleName());
GameRegistry.registerTileEntity(TileAlchemyArray.class, BloodMagic.MODID + ":" + TileAlchemyArray.class.getSimpleName());
GameRegistry.registerTileEntity(TileSpectralBlock.class, BloodMagic.MODID + ":" + TileSpectralBlock.class.getSimpleName());
GameRegistry.registerTileEntity(TilePhantomBlock.class, BloodMagic.MODID + ":" + TilePhantomBlock.class.getSimpleName());
GameRegistry.registerTileEntity(TileTeleposer.class, BloodMagic.MODID + ":" + TileTeleposer.class.getSimpleName());
GameRegistry.registerTileEntity(TileSoulForge.class, BloodMagic.MODID + ":" + TileSoulForge.class.getSimpleName());
GameRegistry.registerTileEntity(TileMasterRoutingNode.class, BloodMagic.MODID + ":" + TileMasterRoutingNode.class.getSimpleName());
GameRegistry.registerTileEntity(TileInputRoutingNode.class, BloodMagic.MODID + ":" + TileInputRoutingNode.class.getSimpleName());
GameRegistry.registerTileEntity(TileOutputRoutingNode.class, BloodMagic.MODID + ":" + TileOutputRoutingNode.class.getSimpleName());
GameRegistry.registerTileEntity(TileItemRoutingNode.class, BloodMagic.MODID + ":" + TileItemRoutingNode.class.getSimpleName());
GameRegistry.registerTileEntity(TileIncenseAltar.class, BloodMagic.MODID + ":" + TileIncenseAltar.class.getSimpleName());
GameRegistry.registerTileEntity(TileDemonCrucible.class, BloodMagic.MODID + ":" + TileDemonCrucible.class.getSimpleName());
GameRegistry.registerTileEntity(TileDemonPylon.class, BloodMagic.MODID + ":" + TileDemonPylon.class.getSimpleName());
GameRegistry.registerTileEntity(TileDemonCrystallizer.class, BloodMagic.MODID + ":" + TileDemonCrystallizer.class.getSimpleName());
GameRegistry.registerTileEntity(TileDemonCrystal.class, BloodMagic.MODID + ":" + TileDemonCrystal.class.getSimpleName());
GameRegistry.registerTileEntity(TileAlchemyTable.class, BloodMagic.MODID + ":" + TileAlchemyTable.class.getSimpleName());
GameRegistry.registerTileEntity(TileDimensionalPortal.class, BloodMagic.MODID + ":" + TileDimensionalPortal.class.getSimpleName());
GameRegistry.registerTileEntity(TileBloodTank.class, BloodMagic.MODID + ":" + TileBloodTank.class.getSimpleName());
GameRegistry.registerTileEntity(TileMimic.class, BloodMagic.MODID + ":" + TileMimic.class.getSimpleName());
GameRegistry.registerTileEntity(TileInversionPillar.class, BloodMagic.MODID + ":" + TileInversionPillar.class.getSimpleName());
}
}

View file

@ -0,0 +1,231 @@
package WayofTime.bloodmagic.core;
import WayofTime.bloodmagic.block.IBMBlock;
import WayofTime.bloodmagic.client.IVariantProvider;
import com.google.common.collect.Sets;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.init.Items;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.item.*;
import WayofTime.bloodmagic.item.alchemy.ItemCuttingFluid;
import WayofTime.bloodmagic.item.alchemy.ItemLivingArmourPointsUpgrade;
import WayofTime.bloodmagic.item.armour.ItemLivingArmour;
import WayofTime.bloodmagic.item.armour.ItemSentientArmour;
import WayofTime.bloodmagic.item.gear.ItemPackSacrifice;
import WayofTime.bloodmagic.item.gear.ItemPackSelfSacrifice;
import WayofTime.bloodmagic.item.routing.ItemFluidRouterFilter;
import WayofTime.bloodmagic.item.routing.ItemNodeRouter;
import WayofTime.bloodmagic.item.routing.ItemRouterFilter;
import WayofTime.bloodmagic.item.sigil.*;
import WayofTime.bloodmagic.item.soul.*;
import org.apache.commons.lang3.tuple.Pair;
import java.util.Set;
@Mod.EventBusSubscriber(modid = BloodMagic.MODID)
@GameRegistry.ObjectHolder(BloodMagic.MODID)
@SuppressWarnings("unchecked")
public class RegistrarBloodMagicItems
{
public static final Item BLOOD_ORB = Items.AIR;
public static final Item ACTIVATION_CRYSTAL = Items.AIR;
public static final Item SLATE = Items.AIR;
public static final Item INSCRIPTION_TOOL = Items.AIR;
public static final Item SACRIFICIAL_DAGGER = Items.AIR;
public static final Item PACK_SELF_SACRIFICE = Items.AIR;
public static final Item PACK_SACRIFICE = Items.AIR;
public static final Item DAGGER_OF_SACRIFICE = Items.AIR;
public static final Item RITUAL_DIVINER = Items.AIR;
public static final Item RITUAL_READER = Items.AIR;
public static final Item LAVA_CRYSTAL = Items.AIR;
public static final Item BOUND_SWORD = Items.AIR;
public static final Item BOUND_PICKAXE = Items.AIR;
public static final Item BOUND_AXE = Items.AIR;
public static final Item BOUND_SHOVEL = Items.AIR;
public static final Item SIGIL_DIVINATION = Items.AIR;
public static final Item SIGIL_AIR = Items.AIR;
public static final Item SIGIL_WATER = Items.AIR;
public static final Item SIGIL_LAVA = Items.AIR;
public static final Item SIGIL_VOID = Items.AIR;
public static final Item SIGIL_GREEN_GROVE = Items.AIR;
public static final Item SIGIL_BLOOD_LIGHT = Items.AIR;
public static final Item SIGIL_ELEMENTAL_AFFINITY = Items.AIR;
public static final Item SIGIL_HASTE = Items.AIR;
public static final Item SIGIL_MAGNETISM = Items.AIR;
public static final Item SIGIL_SUPPRESSION = Items.AIR;
public static final Item SIGIL_FAST_MINER = Items.AIR;
public static final Item SIGIL_SEER = Items.AIR;
public static final Item SIGIL_ENDER_SEVERANCE = Items.AIR;
public static final Item SIGIL_WHIRLWIND = Items.AIR;
public static final Item SIGIL_PHANTOM_BRIDGE = Items.AIR;
public static final Item SIGIL_COMPRESSION = Items.AIR;
public static final Item SIGIL_HOLDING = Items.AIR;
public static final Item SIGIL_TELEPOSITION = Items.AIR;
public static final Item SIGIL_TRANSPOSITION = Items.AIR;
public static final Item SIGIL_CLAW = Items.AIR;
public static final Item SIGIL_BOUNCE = Items.AIR;
public static final Item SIGIL_FROST = Items.AIR;
public static final Item ITEM_COMPONENT = Items.AIR;
public static final Item ITEM_DEMON_CRYSTAL = Items.AIR;
public static final Item TELEPOSITION_FOCUS = Items.AIR;
public static final Item EXPERIENCE_TOME = Items.AIR;
public static final Item BLOOD_SHARD = Items.AIR;
public static final Item LIVING_ARMOUR_HELMET = Items.AIR;
public static final Item LIVING_ARMOUR_CHEST = Items.AIR;
public static final Item LIVING_ARMOUR_LEGS = Items.AIR;
public static final Item LIVING_ARMOUR_BOOTS = Items.AIR;
public static final Item SENTIENT_ARMOUR_HELMET = Items.AIR;
public static final Item SENTIENT_ARMOUR_CHEST = Items.AIR;
public static final Item SENTIENT_ARMOUR_LEGS = Items.AIR;
public static final Item SENTIENT_ARMOUR_BOOTS = Items.AIR;
public static final Item ALTAR_MAKER = Items.AIR;
public static final Item UPGRADE_TOME = Items.AIR;
public static final Item UPGRADE_TRAINER = Items.AIR;
public static final Item ARCANE_ASHES = Items.AIR;
public static final Item MONSTER_SOUL = Items.AIR;
public static final Item SOUL_GEM = Items.AIR;
public static final Item SOUL_SNARE = Items.AIR;
public static final Item SENTIENT_SWORD = Items.AIR;
public static final Item SENTIENT_BOW = Items.AIR;
public static final Item SENTIENT_ARMOUR_GEM = Items.AIR;
public static final Item SENTIENT_AXE = Items.AIR;
public static final Item SENTIENT_PICKAXE = Items.AIR;
public static final Item SENTIENT_SHOVEL = Items.AIR;
public static final Item NODE_ROUTER = Items.AIR;
public static final Item BASE_ITEM_FILTER = Items.AIR;
public static final Item BASE_FLUID_FILTER = Items.AIR;
public static final Item CUTTING_FLUID = Items.AIR;
public static final Item SANGUINE_BOOK = Items.AIR;
public static final Item ITEM_POINTS_UPGRADE = Items.AIR;
public static final Item DEMON_WILL_GAUGE = Items.AIR;
public static final Item POTION_FLASK = Items.AIR;
public static Item.ToolMaterial BOUND_TOOL_MATERIAL = EnumHelper.addToolMaterial("bound", 4, 1, 10, 8, 50);
public static Item.ToolMaterial SOUL_TOOL_MATERIAL = EnumHelper.addToolMaterial("demonic", 4, 520, 7, 8, 50);
private static Set<Item> items;
@SubscribeEvent
public static void registerItems(RegistryEvent.Register<Item> event)
{
items = Sets.newHashSet(
new ItemBloodOrb().setRegistryName("blood_orb"),
new ItemActivationCrystal().setRegistryName("activation_crystal"),
new ItemSlate().setRegistryName("slate"),
new ItemInscriptionTool().setRegistryName("inscription_tool"),
new ItemSacrificialDagger().setRegistryName("sacrificial_dagger"),
new ItemPackSacrifice().setRegistryName("sacrificial_pack"),
new ItemPackSelfSacrifice().setRegistryName("pack_of_sacrifice"),
new ItemDaggerOfSacrifice().setRegistryName("dagger_of_sacrifice"),
new ItemRitualDiviner().setRegistryName("ritual_diviner"),
new ItemRitualReader().setRegistryName("ritual_reader"),
new ItemLavaCrystal().setRegistryName("lava_crystal"),
new ItemBoundSword().setRegistryName("bound_sword"),
new ItemBoundPickaxe().setRegistryName("bound_pickaxe"),
new ItemBoundAxe().setRegistryName("bound_axe"),
new ItemBoundShovel().setRegistryName("bound_shovel"),
new ItemSigilDivination().setRegistryName("sigil_divination"),
new ItemSigilAir().setRegistryName("sigil_air"),
new ItemSigilWater().setRegistryName("sigil_water"),
new ItemSigilLava().setRegistryName("sigil_lava"),
new ItemSigilVoid().setRegistryName("sigil_void"),
new ItemSigilGreenGrove().setRegistryName("sigil_growth"),
new ItemSigilBloodLight().setRegistryName("sigil_light"),
new ItemSigilElementalAffinity().setRegistryName("sigil_elemental"),
new ItemSigilMagnetism().setRegistryName("sigil_magnetism"),
new ItemSigilSuppression().setRegistryName("sigil_suppression"),
new ItemSigilHaste().setRegistryName("sigil_haste"),
new ItemSigilFastMiner().setRegistryName("sigil_fast_miner"),
new ItemSigilSeer().setRegistryName("sigil_seer"),
new ItemSigilPhantomBridge().setRegistryName("sigil_bridge"),
new ItemSigilWhirlwind().setRegistryName("sigil_whirlwind"),
new ItemSigilCompression().setRegistryName("sigil_compression"),
new ItemSigilEnderSeverance().setRegistryName("sigil_severance"),
new ItemSigilHolding().setRegistryName("sigil_holding"),
new ItemSigilTeleposition().setRegistryName("sigil_teleposition"),
new ItemSigilTransposition().setRegistryName("sigil_transposition"),
new ItemSigilClaw().setRegistryName("sigil_claw"),
new ItemSigilBounce().setRegistryName("sigil_bounce"),
new ItemSigilFrost().setRegistryName("sigil_frost"),
new ItemComponent().setRegistryName("component"),
new ItemDemonCrystal().setRegistryName("demon_crystal"),
new ItemTelepositionFocus().setRegistryName("teleposition_focus"),
new ItemExperienceBook().setRegistryName("experience_book"),
new ItemBloodShard().setRegistryName("blood_shard"),
new ItemLivingArmour(EntityEquipmentSlot.HEAD).setRegistryName("living_helm"),
new ItemLivingArmour(EntityEquipmentSlot.CHEST).setRegistryName("living_chest"),
new ItemLivingArmour(EntityEquipmentSlot.LEGS).setRegistryName("living_leggings"),
new ItemLivingArmour(EntityEquipmentSlot.FEET).setRegistryName("living_boots"),
new ItemSentientArmour(EntityEquipmentSlot.HEAD).setRegistryName("sentient_helm"),
new ItemSentientArmour(EntityEquipmentSlot.CHEST).setRegistryName("sentient_chest"),
new ItemSentientArmour(EntityEquipmentSlot.LEGS).setRegistryName("sentient_leggings"),
new ItemSentientArmour(EntityEquipmentSlot.FEET).setRegistryName("sentient_boots"),
new ItemAltarMaker().setRegistryName("altar_maker"),
new ItemUpgradeTome().setRegistryName("upgrade_tome"),
new ItemUpgradeTrainer().setRegistryName("upgrade_trainer"),
new ItemArcaneAshes().setRegistryName("arcane_ashes"),
new ItemMonsterSoul().setRegistryName("monster_soul"),
new ItemSoulGem().setRegistryName("soul_gem"),
new ItemSoulSnare().setRegistryName("soul_snare"),
new ItemSentientSword().setRegistryName("sentient_sword"),
new ItemSentientBow().setRegistryName("sentient_bow"),
new ItemSentientArmourGem().setRegistryName("armour_gem"),
new ItemSentientAxe().setRegistryName("sentient_axe"),
new ItemSentientPickaxe().setRegistryName("sentient_pickaxe"),
new ItemSentientShovel().setRegistryName("sentient_shovel"),
new ItemNodeRouter().setRegistryName("node_router"),
new ItemRouterFilter().setRegistryName("router_filter"),
new ItemFluidRouterFilter().setRegistryName("fluid_router_filter"),
new ItemCuttingFluid().setRegistryName("cutting_fluid"),
new ItemSanguineBook().setRegistryName("sanguine_book"),
new ItemLivingArmourPointsUpgrade().setRegistryName("living_armor_point_upgrade"),
new ItemDemonWillGauge().setRegistryName("demon_will_gauge"),
new ItemPotionFlask().setRegistryName("potion_flask")
);
RegistrarBloodMagicBlocks.blocks.stream().filter(block -> block instanceof IBMBlock && ((IBMBlock) block).getItem() != null).forEach(block -> {
IBMBlock bmBlock = (IBMBlock) block;
items.add(bmBlock.getItem().setRegistryName(block.getRegistryName()));
});
event.getRegistry().registerAll(items.toArray(new Item[0]));
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public static void registerRenders(ModelRegistryEvent event)
{
items.stream().filter(i -> i instanceof IVariantProvider).forEach(item -> {
IVariantProvider variantProvider = (IVariantProvider) item;
for (Pair<Integer, String> variant : variantProvider.getVariants())
ModelLoader.setCustomModelResourceLocation(item, variant.getLeft(), new ModelResourceLocation(item.getRegistryName(), variant.getRight()));
});
RegistrarBloodMagicBlocks.blocks.stream().filter(i -> i instanceof IVariantProvider).forEach(block -> {
IVariantProvider variantProvider = (IVariantProvider) block;
for (Pair<Integer, String> variant : variantProvider.getVariants())
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), variant.getLeft(), new ModelResourceLocation(block.getRegistryName(), variant.getRight()));
});
final ResourceLocation holdingLoc = new ResourceLocation("bloodmagic", "item/ItemSigilHolding");
ModelLoader.setCustomMeshDefinition(SIGIL_HOLDING, stack -> {
if (stack.hasTagCompound() && stack.getTagCompound().hasKey("color"))
return new ModelResourceLocation(holdingLoc, "type=color");
return new ModelResourceLocation(holdingLoc, "type=normal");
});
ModelLoader.registerItemVariants(SIGIL_HOLDING, new ModelResourceLocation(holdingLoc, "type=normal"));
ModelLoader.registerItemVariants(SIGIL_HOLDING, new ModelResourceLocation(holdingLoc, "type=color"));
}
}