diff --git a/src/main/java/com/teamdman/animus/AnimusGuide.java b/src/main/java/com/teamdman/animus/AnimusGuide.java index 5dfbd12..765f2b1 100644 --- a/src/main/java/com/teamdman/animus/AnimusGuide.java +++ b/src/main/java/com/teamdman/animus/AnimusGuide.java @@ -10,6 +10,7 @@ import amerifrance.guideapi.entry.EntryItemStack; import amerifrance.guideapi.page.PageIRecipe; import amerifrance.guideapi.page.PageText; +import com.teamdman.animus.items.ItemAltarDiviner; import com.teamdman.animus.items.ItemKama; import com.teamdman.animus.items.ItemKamaBound; import com.teamdman.animus.registry.AnimusBlocks; @@ -20,6 +21,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.registry.GameRegistry; @@ -37,68 +39,77 @@ public class AnimusGuide { public static Book book; - public static void buildEntry(Map entries, String identifier, int numpages, ItemStack icon, @Nullable Consumer> extras) { + private static void buildEntry(Map entries, String identifier, int numpages, ItemStack icon, List extras) { ArrayList pages = new ArrayList(); - for (int i=0;i entries,String identifier, int pages, Block icon, @Nullable Consumer> extras) { - buildEntry(entries, identifier,pages, new ItemStack(icon), extras); + + + private static void buildEntry(Map entries, String identifier, int pages, Block icon, List extras) { + buildEntry(entries, identifier, pages, new ItemStack(icon), extras); } - public static void buildEntry(Map entries,String identifier, int pages, Item icon, @Nullable Consumer> extras) { - buildEntry(entries, identifier,pages, new ItemStack(icon), extras); + + private static void buildEntry(Map entries, String identifier, int pages, Item icon, List extras) { + buildEntry(entries, identifier, pages, new ItemStack(icon), extras); } - public static void buildEntry(Map entries,String identifier, int pages, Block icon) { - buildEntry(entries, identifier,pages, new ItemStack(icon), null); + private static void buildEntry(Map entries, String identifier, int pages, Block icon) { + buildEntry(entries, identifier, pages, new ItemStack(icon), null); } - public static void buildEntry(Map entries,String identifier, int pages, Item icon) { - buildEntry(entries, identifier,pages, new ItemStack(icon), null); + + private static void buildEntry(Map entries, String identifier, int pages, Item icon) { + buildEntry(entries, identifier, pages, new ItemStack(icon), null); + } + + private static List getRecipesPagesFor(Class check) { + List matches = new ArrayList<>(); + CraftingManager.getInstance().getRecipeList().forEach((v) -> { + try { + if (check.isInstance(v.getRecipeOutput().getItem())) + matches.add(new PageIRecipe(v)); + } catch (Exception e) { + System.out.println("Error fetching recipe to animus guidebook"); + } + }); + return matches; } public static void buildGuide() { book = new Book(); List categories = new ArrayList(); - Map entries = new LinkedHashMap(); - buildEntry(entries,"rituals.sol",1,Blocks.GLOWSTONE); - buildEntry(entries,"rituals.luna",1, Items.COAL); - buildEntry(entries,"rituals.entropy",1, Blocks.COBBLESTONE); - buildEntry(entries,"rituals.unmaking",1, Items.ENCHANTED_BOOK); - buildEntry(entries,"rituals.peace",1, Items.SPAWN_EGG); - buildEntry(entries,"rituals.culling",1, Items.DIAMOND_SWORD); - buildEntry(entries,"rituals.leech",1, Blocks.LEAVES); - categories.add(new CategoryItemStack(entries,"guide.animus.category.rituals",new ItemStack(ModBlocks.ritualController))); - entries = new LinkedHashMap(); - - buildEntry(entries,"sigils.chains",1, AnimusItems.sigilChains); - buildEntry(entries,"sigils.transposition",1, AnimusItems.sigilTransposition); - buildEntry(entries,"sigils.builder",1, AnimusItems.sigilBuilder); - categories.add(new CategoryItemStack(entries,"guide.animus.category.sigils",new ItemStack(AnimusItems.sigilBuilder))); - entries = new LinkedHashMap(); - - buildEntry(entries,"blocks.phantom",1, AnimusBlocks.phantomBuilder); - categories.add(new CategoryItemStack(entries,"guide.animus.category.blocks",new ItemStack(AnimusBlocks.phantomBuilder))); - entries = new LinkedHashMap(); - - buildEntry(entries,"items.kama",1,AnimusItems.kamaBound, (pages) -> { - CraftingManager.getInstance().getRecipeList().forEach((v) -> { - try { - if (v.getRecipeOutput().getItem() instanceof ItemKama) - pages.add(new PageIRecipe(v)); - } catch (Exception e) { - System.out.println("Error adding kama recipe to guidebook"); - } - }); - }); - buildEntry(entries,"items.altardiviner",1,AnimusItems.altarDiviner); - buildEntry(entries,"items.mobsoul",1,AnimusItems.mobSoul); - categories.add(new CategoryItemStack(entries,"guide.animus.category.items",new ItemStack(AnimusItems.kamaBound))); + Map entries = new LinkedHashMap<>(); + buildEntry(entries, "rituals.sol", 1, Blocks.GLOWSTONE); + buildEntry(entries, "rituals.luna", 1, Items.COAL); + buildEntry(entries, "rituals.entropy", 1, Blocks.COBBLESTONE); + buildEntry(entries, "rituals.unmaking", 1, Items.ENCHANTED_BOOK); + buildEntry(entries, "rituals.peace", 1, Items.SPAWN_EGG); + buildEntry(entries, "rituals.culling", 1, Items.DIAMOND_SWORD); + buildEntry(entries, "rituals.leech", 1, Blocks.LEAVES); + categories.add(new CategoryItemStack(entries, "guide.animus.category.rituals", new ItemStack(ModBlocks.ritualController))); + entries = new LinkedHashMap<>(); + + buildEntry(entries, "sigils.chains", 1, AnimusItems.sigilChains); + buildEntry(entries, "sigils.transposition", 1, AnimusItems.sigilTransposition); + buildEntry(entries, "sigils.builder", 1, AnimusItems.sigilBuilder); + categories.add(new CategoryItemStack(entries, "guide.animus.category.sigils", new ItemStack(AnimusItems.sigilBuilder))); + entries = new LinkedHashMap<>(); + + buildEntry(entries, "blocks.phantom", 1, AnimusBlocks.phantomBuilder); + categories.add(new CategoryItemStack(entries, "guide.animus.category.blocks", new ItemStack(AnimusBlocks.phantomBuilder))); + entries = new LinkedHashMap<>(); + + buildEntry(entries, "items.kama", 1, AnimusItems.kamaBound, getRecipesPagesFor(ItemKama.class)); + buildEntry(entries, "items.altardiviner", 1, AnimusItems.altarDiviner, getRecipesPagesFor(ItemAltarDiviner.class)); + buildEntry(entries, "items.mobsoul", 1, AnimusItems.mobSoul); + buildEntry(entries, "items.fragmenthealing", 1, AnimusItems.fragmentHealing); + categories.add(new CategoryItemStack(entries, "guide.animus.category.items", new ItemStack(AnimusItems.kamaBound))); book.setCategoryList(categories); book.setTitle("guide.animus.title"); diff --git a/src/main/java/com/teamdman/animus/handlers/EventHandler.java b/src/main/java/com/teamdman/animus/handlers/EventHandler.java index 5857d8b..613195c 100644 --- a/src/main/java/com/teamdman/animus/handlers/EventHandler.java +++ b/src/main/java/com/teamdman/animus/handlers/EventHandler.java @@ -2,9 +2,18 @@ import com.teamdman.animus.Animus; import com.teamdman.animus.AnimusConfig; +import com.teamdman.animus.registry.AnimusItems; +import com.teamdman.animus.slots.SlotNoPickup; +import net.minecraft.init.MobEffects; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.potion.PotionHealthBoost; import net.minecraftforge.client.event.sound.PlaySoundEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; public class EventHandler { @SubscribeEvent @@ -21,6 +30,28 @@ public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent e) { AnimusConfig.syncConfig(); } } - - + + + @SubscribeEvent + public void onPlayerTick(TickEvent.PlayerTickEvent eventArgs) { + Container open = eventArgs.player.openContainer; + if (open == null) + return; + int frags = 0; + for (int i = 0; i < open.inventorySlots.size(); i++) { + Slot slot = (Slot) open.inventorySlots.get(i); + if (slot.getHasStack() && slot.getStack().getItem() == AnimusItems.fragmentHealing) { + frags++; + if (!eventArgs.player.capabilities.isCreativeMode && slot.getClass()==Slot.class) { + open.inventorySlots.set(i,new SlotNoPickup(slot.inventory, slot.getSlotIndex(), slot.xDisplayPosition, slot.yDisplayPosition)); + } + } + } + if (eventArgs.player.worldObj.getWorldTime()%20==0 && frags>=9 && !eventArgs.player.worldObj.isRemote) { + eventArgs.player.addPotionEffect(new PotionEffect(MobEffects.REGENERATION,20, frags/9-1)); + if (frags>=35 && eventArgs.player.worldObj.getWorldTime()%200==0) + eventArgs.player.addPotionEffect(new PotionEffect(MobEffects.ABSORPTION,200,4)); + } + } + } diff --git a/src/main/java/com/teamdman/animus/items/ItemFragmentHealing.java b/src/main/java/com/teamdman/animus/items/ItemFragmentHealing.java new file mode 100644 index 0000000..264d7f0 --- /dev/null +++ b/src/main/java/com/teamdman/animus/items/ItemFragmentHealing.java @@ -0,0 +1,48 @@ +package com.teamdman.animus.items; + +import WayofTime.bloodmagic.client.IVariantProvider; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.ArrayList; +import java.util.List; + +public class ItemFragmentHealing extends Item implements IVariantProvider { + public ItemFragmentHealing() { + setMaxStackSize(1); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced) { + tooltip.add("More the merrier!"); + tooltip.add("This item cannot be moved."); + } + + @Override + public boolean onDroppedByPlayer(ItemStack item, EntityPlayer player) { + return false; + } + + @Override + public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, EntityPlayer player) { + return true; + } + + @Override + public boolean canHarvestBlock(IBlockState blockIn) { + return false; + } + + @Override + public List> getVariants() + { + List> ret = new ArrayList>(); + ret.add(new ImmutablePair(0, "type=normal")); + return ret; + } +} diff --git a/src/main/java/com/teamdman/animus/registry/AnimusItems.java b/src/main/java/com/teamdman/animus/registry/AnimusItems.java index 7df385b..ffa0027 100644 --- a/src/main/java/com/teamdman/animus/registry/AnimusItems.java +++ b/src/main/java/com/teamdman/animus/registry/AnimusItems.java @@ -2,10 +2,7 @@ import com.teamdman.animus.Animus; import com.teamdman.animus.AnimusConfig; -import com.teamdman.animus.items.ItemAltarDiviner; -import com.teamdman.animus.items.ItemKama; -import com.teamdman.animus.items.ItemKamaBound; -import com.teamdman.animus.items.ItemMobSoul; +import com.teamdman.animus.items.*; import com.teamdman.animus.items.sigils.ItemSigilBuilder; import com.teamdman.animus.items.sigils.ItemSigilChains; import com.teamdman.animus.items.sigils.ItemSigilTransposition; @@ -18,50 +15,51 @@ * Created by TeamDman on 9/18/2016. */ public class AnimusItems { - public static Item kamaWood; - public static Item kamaStone; - public static Item kamaIron; - public static Item kamaGold; - public static Item kamaDiamond; - public static Item kamaBound; + public static Item kamaWood; + public static Item kamaStone; + public static Item kamaIron; + public static Item kamaGold; + public static Item kamaDiamond; + public static Item kamaBound; public static Item altarDiviner; - public static Item mobSoul; - public static Item sigilChains; - public static Item sigilTransposition; - public static Item sigilBuilder; + public static Item mobSoul; + public static Item sigilChains; + public static Item sigilTransposition; + public static Item sigilBuilder; + public static Item fragmentHealing; - public static void init() { - kamaWood = setupItem(new ItemKama(Item.ToolMaterial.WOOD), "itemkamawood"); - kamaStone = setupItem(new ItemKama(Item.ToolMaterial.STONE), "itemkamastone"); - kamaIron = setupItem(new ItemKama(Item.ToolMaterial.IRON), "itemkamairon"); - kamaGold = setupItem(new ItemKama(Item.ToolMaterial.GOLD), "itemkamagold"); - kamaDiamond = setupItem(new ItemKama(Item.ToolMaterial.DIAMOND), "itemkamadiamond"); - kamaBound = setupItem(new ItemKamaBound(), "itemkamabound"); + public static void init() { + kamaWood = setupItem(new ItemKama(Item.ToolMaterial.WOOD), "itemkamawood"); + kamaStone = setupItem(new ItemKama(Item.ToolMaterial.STONE), "itemkamastone"); + kamaIron = setupItem(new ItemKama(Item.ToolMaterial.IRON), "itemkamairon"); + kamaGold = setupItem(new ItemKama(Item.ToolMaterial.GOLD), "itemkamagold"); + kamaDiamond = setupItem(new ItemKama(Item.ToolMaterial.DIAMOND), "itemkamadiamond"); + kamaBound = setupItem(new ItemKamaBound(), "itemkamabound"); altarDiviner = setupItem(new ItemAltarDiviner(), "itemaltardiviner"); - mobSoul=setupItem(new ItemMobSoul(), "itemmobsoul"); - sigilChains=setupItem(new ItemSigilChains(), "itemsigilchains"); - sigilTransposition=setupItem(new ItemSigilTransposition(), "itemsigiltransposition"); - sigilBuilder=setupItem(new ItemSigilBuilder(), "itemsigilbuilder"); + mobSoul = setupItem(new ItemMobSoul(), "itemmobsoul"); + sigilChains = setupItem(new ItemSigilChains(), "itemsigilchains"); + sigilTransposition = setupItem(new ItemSigilTransposition(), "itemsigiltransposition"); + sigilBuilder = setupItem(new ItemSigilBuilder(), "itemsigilbuilder"); + fragmentHealing = setupItem(new ItemFragmentHealing(), "itemfragmenthealing"); + } - } + private static Item setupItem(Item item, String name) { + if (AnimusConfig.itemBlacklist.contains(name)) + return item; + if (item.getRegistryName() == null) + item.setRegistryName(name); + item.setUnlocalizedName(name); + item.setCreativeTab(Animus.tabMain); + GameRegistry.register(item); + Animus.proxy.tryHandleItemModel(item, name); - private static Item setupItem(Item item, String name) { - if (AnimusConfig.itemBlacklist.contains(name)) - return item; - if (item.getRegistryName() == null) - item.setRegistryName(name); - item.setUnlocalizedName(name); - item.setCreativeTab(Animus.tabMain); - GameRegistry.register(item); - Animus.proxy.tryHandleItemModel(item, name); + return item; + //TODO: Animus Config Blacklist + } - return item; - //TODO: Animus Config Blacklist - } + @SideOnly(Side.CLIENT) + public static void initRenders() { - @SideOnly(Side.CLIENT) - public static void initRenders() { - - } + } } diff --git a/src/main/java/com/teamdman/animus/registry/AnimusRecipes.java b/src/main/java/com/teamdman/animus/registry/AnimusRecipes.java index 4826c00..4373291 100644 --- a/src/main/java/com/teamdman/animus/registry/AnimusRecipes.java +++ b/src/main/java/com/teamdman/animus/registry/AnimusRecipes.java @@ -1,11 +1,21 @@ package com.teamdman.animus.registry; +import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding; +import WayofTime.bloodmagic.api.altar.EnumAltarTier; import WayofTime.bloodmagic.api.recipe.ShapedBloodOrbRecipe; +import WayofTime.bloodmagic.api.registry.AlchemyArrayRecipeRegistry; +import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; import WayofTime.bloodmagic.api.registry.OrbRegistry; +import WayofTime.bloodmagic.client.render.alchemyArray.BindingAlchemyCircleRenderer; +import WayofTime.bloodmagic.compat.jei.binding.BindingRecipeHandler; +import WayofTime.bloodmagic.item.ItemComponent; import WayofTime.bloodmagic.registry.ModItems; +import WayofTime.bloodmagic.util.Utils; +import com.google.common.collect.ImmutableList; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ShapelessRecipes; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.ShapedOreRecipe; @@ -22,8 +32,15 @@ public static void initCrafting() { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(AnimusItems.kamaDiamond), " a ", "a a", " b", 'a', Items.DIAMOND, 'b', Items.STICK)); - GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(AnimusItems.sigilChains), "aba", "bcb", "ada", 'a', Blocks.END_STONE, 'b', Blocks.REDSTONE_LAMP, 'c', new ItemStack(ModItems.slate, 1, 3), 'd', OrbRegistry.getOrbStack(ModItems.orbMaster))); + GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(AnimusItems.sigilChains), "aba", "bcb", "ada", 'a', Blocks.END_STONE, 'b', Blocks.OBSIDIAN, 'c', new ItemStack(ModItems.slate, 1, 3), 'd', OrbRegistry.getOrbStack(ModItems.orbMaster))); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(AnimusItems.sigilTransposition), "aba", "bcb", "ada", 'a', Blocks.OBSIDIAN, 'b', Items.ENDER_PEARL, 'c', new ItemStack(ModItems.slate, 1, 3), 'd', OrbRegistry.getOrbStack(ModItems.orbMaster))); GameRegistry.addRecipe(new ShapedBloodOrbRecipe(new ItemStack(AnimusItems.sigilBuilder), "aba", "bcb", "ada", 'a', Items.SUGAR, 'b', Items.POTIONITEM, 'c',new ItemStack(ModItems.slate, 1, 3), 'd', OrbRegistry.getOrbStack(ModItems.orbApprentice))); + + GameRegistry.addRecipe(new ShapelessRecipes(new ItemStack(AnimusItems.altarDiviner), ImmutableList.of(new ItemStack(ModItems.ritualDiviner),new ItemStack(Blocks.REDSTONE_TORCH)))); + + AltarRecipeRegistry.registerRecipe(new AltarRecipeRegistry.AltarRecipe(new ItemStack(Items.PRISMARINE_SHARD),new ItemStack(AnimusItems.fragmentHealing), EnumAltarTier.TWO,1000,20,25)); + + AlchemyArrayRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.REAGENT_BINDING), new ItemStack(AnimusItems.kamaDiamond), new AlchemyArrayEffectBinding("boundKama", Utils.setUnbreakable(new ItemStack(AnimusItems.kamaBound))), new BindingAlchemyCircleRenderer()); + } } diff --git a/src/main/java/com/teamdman/animus/slots/SlotNoPickup.java b/src/main/java/com/teamdman/animus/slots/SlotNoPickup.java new file mode 100644 index 0000000..c98cd6b --- /dev/null +++ b/src/main/java/com/teamdman/animus/slots/SlotNoPickup.java @@ -0,0 +1,16 @@ +package com.teamdman.animus.slots; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; + +public class SlotNoPickup extends Slot { + public SlotNoPickup(IInventory inventoryIn, int index, int xPosition, int yPosition) { + super(inventoryIn, index, xPosition, yPosition); + } + + @Override + public boolean canTakeStack(EntityPlayer playerIn) { + return false; + } +} diff --git a/src/main/resources/assets/animus/blockstates/item/itemFragmentHealing.json b/src/main/resources/assets/animus/blockstates/item/itemFragmentHealing.json new file mode 100644 index 0000000..efeefbf --- /dev/null +++ b/src/main/resources/assets/animus/blockstates/item/itemFragmentHealing.json @@ -0,0 +1,16 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "builtin/generated", + "transform": "forge:default-item" + }, + "variants": { + "type": { + "normal": { + "textures": { + "layer0": "animus:items/itemFragmentHealing" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/animus/lang/en_US.lang b/src/main/resources/assets/animus/lang/en_US.lang index 307919c..6393af1 100644 --- a/src/main/resources/assets/animus/lang/en_US.lang +++ b/src/main/resources/assets/animus/lang/en_US.lang @@ -10,6 +10,7 @@ item.itemmobsoul.name=Mob Soul item.itemsigilchains.name=Sigil of Phantom Chains item.itemsigiltransposition.name=Sigil of Transposition item.itemsigilbuilder.name=Sigil of the Fast Builder +item.itemfragmenthealing.name=Healing Fragment tile.blockphantombuilder.name=Phantom Builder Block tile.lightgem.name=Glowstone @@ -70,3 +71,5 @@ guide.animus.items.mobsoul.entry=Mob Souls guide.animus.items.mobsoul.page0=The soul of a mob that was captured with a Sigil of Phantom Chains, right click to release. guide.animus.items.altardiviner.entry=Altar Diviner guide.animus.items.altardiviner.page0=When shift-clicked on an altar, an outline of the next tier will be displayed in the world. Keep shift-clicking to automatically place components. +guide.animus.items.fragmenthealing.entry=Fragment of Healing +guide.animus.items.fragmenthealing.page0=Once the item is in your inventory, it cannot be removed. When in sets of 9, the fragments give the holder a regeneration buff of strength equal to the number of sets of 9 fragments. If the holder has 36 fragments, they get a huge bonus. diff --git a/src/main/resources/assets/animus/textures/items/itemFragmentHealing.png b/src/main/resources/assets/animus/textures/items/itemFragmentHealing.png new file mode 100644 index 0000000..48f48f1 Binary files /dev/null and b/src/main/resources/assets/animus/textures/items/itemFragmentHealing.png differ