Added Ancient Wills.

This commit is contained in:
Lizbeth Rika committed 2015-01-31 00:21:34 +00:00
1 parent b09034c667
commit c646768dc5
21 files changed
+343 -16

No files matched your search

@@ -0,0 +1,25 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Jan 30, 2015, 11:24:54 PM (GMT)]
*/
package vazkii.botania.api.item;
import net.minecraft.item.ItemStack;
/**
* An item that implements this can have Ancient Wills
* crafted onto it.
*/
public interface IAncientWillContainer {
public void addAncientWill(ItemStack stack, int will);
public boolean hasAncientWill(ItemStack stack, int will);
}
@@ -30,6 +30,8 @@ import vazkii.botania.api.item.IBaubleRender.Helper;
import vazkii.botania.api.item.IBaubleRender.RenderType;
import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.item.equipment.armor.elementium.ItemElementiumHelm;
import vazkii.botania.common.item.equipment.armor.terrasteel.ItemTerrasteelHelm;
import baubles.common.container.InventoryBaubles;
import baubles.common.lib.PlayerHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -57,6 +59,10 @@ public final class BaubleRenderHandler {
GL11.glRotatef(yaw - 270, 0, 1, 0);
GL11.glRotatef(pitch, 0, 0, 1);
dispatchRenders(inv, event, RenderType.HEAD);
ItemStack helm = player.inventory.armorItemInSlot(3);
if(helm != null && helm.getItem() instanceof ItemTerrasteelHelm)
ItemTerrasteelHelm.renderOnPlayer(helm, event);
GL11.glPopMatrix();
}
@@ -224,14 +224,6 @@ public final class BotaniaCreativeTab extends CreativeTabs {
addItem(ModItems.manasteelChest);
addItem(ModItems.manasteelLegs);
addItem(ModItems.manasteelBoots);
addItem(ModItems.terraSword);
addItem(ModItems.terraPick);
addItem(ModItems.terrasteelHelm);
if(Botania.thaumcraftLoaded)
addItem(ModItems.terrasteelHelmRevealing);
addItem(ModItems.terrasteelChest);
addItem(ModItems.terrasteelLegs);
addItem(ModItems.terrasteelBoots);
addItem(ModItems.elementiumPick);
addItem(ModItems.elementiumShovel);
addItem(ModItems.elementiumAxe);
@@ -243,7 +235,16 @@ public final class BotaniaCreativeTab extends CreativeTabs {
addItem(ModItems.elementiumChest);
addItem(ModItems.elementiumLegs);
addItem(ModItems.elementiumBoots);
addItem(ModItems.terraSword);
addItem(ModItems.terraPick);
addItem(ModItems.terrasteelHelm);
if(Botania.thaumcraftLoaded)
addItem(ModItems.terrasteelHelmRevealing);
addItem(ModItems.terrasteelChest);
addItem(ModItems.terrasteelLegs);
addItem(ModItems.terrasteelBoots);
addItem(ModItems.ancientWill);
addItem(ModItems.tinyPlanet);
addBlock(ModBlocks.tinyPlanet);
addItem(ModItems.manaRing);
@@ -0,0 +1,78 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Jan 30, 2015, 11:24:08 PM (GMT)]
*/
package vazkii.botania.common.crafting.recipe;
import vazkii.botania.api.item.IAncientWillContainer;
import vazkii.botania.api.mana.ILens;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.item.lens.ItemLens;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.World;
public class AncientWillRecipe implements IRecipe {
@Override
public boolean matches(InventoryCrafting var1, World var2) {
boolean foundWill = false;
boolean foundItem = false;
for(int i = 0; i < var1.getSizeInventory(); i++) {
ItemStack stack = var1.getStackInSlot(i);
if(stack != null) {
if(stack.getItem() == ModItems.ancientWill && !foundWill)
foundWill = true;
else if(!foundItem) {
if(stack.getItem() instanceof IAncientWillContainer)
foundItem = true;
else return false;
}
}
}
return foundWill && foundItem;
}
@Override
public ItemStack getCraftingResult(InventoryCrafting var1) {
ItemStack item = null;
int will = -1;
for(int i = 0; i < var1.getSizeInventory(); i++) {
ItemStack stack = var1.getStackInSlot(i);
if(stack != null) {
if(stack.getItem() instanceof IAncientWillContainer && item == null)
item = stack;
else will = stack.getItemDamage();
}
}
IAncientWillContainer container = (IAncientWillContainer) item.getItem();
if(container.hasAncientWill(item, will))
return null;
ItemStack copy = item.copy();
container.addAncientWill(copy, will);
return copy;
}
@Override
public int getRecipeSize() {
return 10;
}
@Override
public ItemStack getRecipeOutput() {
return null;
}
}
@@ -301,7 +301,7 @@ public class EntityDoppleganger extends EntityCreature implements IBotaniaBossWi
entityDropItem(new ItemStack(ModItems.manaResource, hard ? 16 : 8, 5), 1F);
if(hard) {
// TODO Add Will Drops
entityDropItem(new ItemStack(ModItems.ancientWill, 1, rand.nextInt(6)), 1F);
if(Math.random() < 0.25)
entityDropItem(new ItemStack(ModItems.overgrowthSeed, rand.nextInt(3) + 1), 1F);
if(Math.random() < 0.5) {
@@ -0,0 +1,78 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Jan 30, 2015, 10:59:45 PM (GMT)]
*/
package vazkii.botania.common.item;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.StatCollector;
import net.minecraftforge.oredict.RecipeSorter;
import net.minecraftforge.oredict.RecipeSorter.Category;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.crafting.recipe.AncientWillRecipe;
import vazkii.botania.common.lib.LibItemNames;
import cpw.mods.fml.common.registry.GameRegistry;
public class ItemAncientWill extends ItemMod {
private static final int SUBTYPES = 6;
IIcon[] icons;
public ItemAncientWill() {
setUnlocalizedName(LibItemNames.ANCIENT_WILL);
setHasSubtypes(true);
setMaxStackSize(1);
GameRegistry.addRecipe(new AncientWillRecipe());
RecipeSorter.register("botania:ancientWill", AncientWillRecipe.class, Category.SHAPELESS, "");
}
@Override
public void getSubItems(Item item, CreativeTabs tab, List list) {
for(int i = 0; i < SUBTYPES; i++)
list.add(new ItemStack(item, 1, i));
}
@Override
public void registerIcons(IIconRegister par1IconRegister) {
icons = new IIcon[SUBTYPES];
for(int i = 0; i < icons.length; i++)
icons[i] = IconHelper.forItem(par1IconRegister, this, i);
}
@Override
public IIcon getIconFromDamage(int dmg) {
return icons[Math.min(icons.length - 1, dmg)];
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean adv) {
addStringToTooltip(StatCollector.translateToLocal("botaniamisc.craftToAddWill"), list);
addStringToTooltip(StatCollector.translateToLocal("botania.armorset.will" + stack.getItemDamage() + ".shortDesc"), list);
}
public void addStringToTooltip(String s, List<String> tooltip) {
tooltip.add(s.replaceAll("&", "\u00a7"));
}
@Override
public String getUnlocalizedName(ItemStack par1ItemStack) {
return super.getUnlocalizedName(par1ItemStack) + par1ItemStack.getItemDamage();
}
}
@@ -200,6 +200,7 @@ public final class ModItems {
public static Item thornChakram;
public static Item overgrowthSeed;
public static Item craftPattern;
public static Item ancientWill;
public static void init() {
lexicon = new ItemLexicon();
@@ -308,6 +309,7 @@ public final class ModItems {
thornChakram = new ItemThornChakram();
overgrowthSeed = new ItemOvergrowthSeed();
craftPattern = new ItemCraftPattern();
ancientWill = new ItemAncientWill();
OreDictionary.registerOre(LibOreDict.LEXICON, lexicon);
for(int i = 0; i < 16; i++) {
@@ -61,8 +61,8 @@ public abstract class ItemElementiumArmor extends ItemManasteelArmor implements
return StatCollector.translateToLocal("botania.armorset.elementium.name");
}
public void addArmorSetDescription(List<String> list) {
super.addArmorSetDescription(list);
public void addArmorSetDescription(ItemStack stack, List<String> list) {
super.addArmorSetDescription(stack, list);
addStringToTooltip(StatCollector.translateToLocal("botania.armorset.elementium.desc"), list);
}
@@ -114,7 +114,7 @@ public class ItemManasteelArmor extends ItemArmor implements ISpecialArmor, IMan
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean adv) {
if(GuiScreen.isShiftKeyDown()) {
addStringToTooltip(getArmorSetTitle(player), list);
addArmorSetDescription(list);
addArmorSetDescription(stack, list);
ItemStack[] stacks = getArmorSetStacks();
for(int i = 0; i < stacks.length; i++)
addStringToTooltip((hasArmorSetItem(player, i) ? EnumChatFormatting.GREEN : "") + " - " + stacks[i].getDisplayName(), list);
@@ -175,7 +175,7 @@ public class ItemManasteelArmor extends ItemArmor implements ISpecialArmor, IMan
return StatCollector.translateToLocal("botaniamisc.armorset") + " " + getArmorSetName() + " (" + getSetPiecesEquipped(player) + "/" + getArmorSetStacks().length + ")";
}
public void addArmorSetDescription(List<String> list) {
public void addArmorSetDescription(ItemStack stack, List<String> list) {
addStringToTooltip(StatCollector.translateToLocal("botania.armorset.manasteel.desc"), list);
}
@@ -13,6 +13,7 @@ package vazkii.botania.common.item.equipment.armor.terrasteel;
import java.util.List;
import java.util.UUID;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
@@ -76,7 +77,8 @@ public class ItemTerrasteelArmor extends ItemManasteelArmor {
return StatCollector.translateToLocal("botania.armorset.terrasteel.name");
}
public void addArmorSetDescription(List<String> list) {
@Override
public void addArmorSetDescription(ItemStack stack, List<String> list) {
addStringToTooltip(StatCollector.translateToLocal("botania.armorset.terrasteel.desc0"), list);
addStringToTooltip(StatCollector.translateToLocal("botania.armorset.terrasteel.desc1"), list);
}
@@ -10,22 +10,58 @@
*/
package vazkii.botania.common.item.equipment.armor.terrasteel;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.IIcon;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import org.lwjgl.opengl.GL11;
import vazkii.botania.api.item.IAncientWillContainer;
import vazkii.botania.api.item.IBaubleRender.Helper;
import vazkii.botania.api.mana.IManaDiscountArmor;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.lib.LibItemNames;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class ItemTerrasteelHelm extends ItemTerrasteelArmor implements IManaDiscountArmor {
public class ItemTerrasteelHelm extends ItemTerrasteelArmor implements IManaDiscountArmor, IAncientWillContainer {
private static final String TAG_ANCIENT_WILL = "AncientWill";
static IIcon willIcon;
public ItemTerrasteelHelm() {
this(LibItemNames.TERRASTEEL_HELM);
MinecraftForge.EVENT_BUS.register(this);
}
public ItemTerrasteelHelm(String name) {
super(0, name);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister par1IconRegister) {
super.registerIcons(par1IconRegister);
willIcon = IconHelper.forName(par1IconRegister, "willFlame");
}
@Override
public void onArmorTick(World world, EntityPlayer player, ItemStack stack) {
super.onArmorTick(world, player, stack);
@@ -41,4 +77,83 @@ public class ItemTerrasteelHelm extends ItemTerrasteelArmor implements IManaDisc
return hasArmorSet(player) ? 0.2F : 0F;
}
@Override
public void addAncientWill(ItemStack stack, int will) {
ItemNBTHelper.setBoolean(stack, TAG_ANCIENT_WILL + will, true);
}
@Override
public boolean hasAncientWill(ItemStack stack, int will) {
return hasAncientWill_(stack, will);
}
public static boolean hasAncientWill_(ItemStack stack, int will) {
return ItemNBTHelper.getBoolean(stack, TAG_ANCIENT_WILL + will, false);
}
@Override
@SideOnly(Side.CLIENT)
public void addArmorSetDescription(ItemStack stack, List<String> list) {
super.addArmorSetDescription(stack, list);
for(int i = 0; i < 6; i++)
if(hasAncientWill(stack, i))
addStringToTooltip(StatCollector.translateToLocal("botania.armorset.will" + i + ".desc"), list);
}
public static boolean hasAnyWill(ItemStack stack) {
for(int i = 0; i < 6; i++)
if(hasAncientWill_(stack, i))
return true;
return false;
}
@SideOnly(Side.CLIENT)
public static void renderOnPlayer(ItemStack stack, RenderPlayerEvent event) {
if(hasAnyWill(stack)) {
float f = willIcon.getMinU();
float f1 = willIcon.getMaxU();
float f2 = willIcon.getMinV();
float f3 = willIcon.getMaxV();
Helper.translateToHeadLevel(event.entityPlayer);
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
GL11.glRotatef(90F, 0F, 1F, 0F);
GL11.glRotatef(180F, 1F, 0F, 0F);
GL11.glTranslatef(-0.26F, 0.3F, -0.29F);
GL11.glScalef(0.5F, 0.5F, 0.5F);
ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, willIcon.getIconWidth(), willIcon.getIconHeight(), 1F / 16F);
}
}
@SubscribeEvent
public void onEntityAttacked(LivingHurtEvent event) {
Entity attacker = event.source.getEntity();
if(attacker instanceof EntityPlayer) {
EntityPlayer player = ((EntityPlayer) attacker);
boolean crit = player.fallDistance > 0.0F && !player.onGround && !player.isOnLadder() && !player.isInWater() && !player.isPotionActive(Potion.blindness) && player.ridingEntity == null;
ItemStack stack = player.inventory.armorItemInSlot(3);
if(crit && stack != null && stack.getItem() instanceof ItemTerrasteelHelm) {
boolean ahrim = hasAncientWill(stack, 0);
boolean dharok = hasAncientWill(stack, 1);
boolean guthan = hasAncientWill(stack, 2);
boolean torag = hasAncientWill(stack, 3);
boolean verac = hasAncientWill(stack, 4);
boolean karil = hasAncientWill(stack, 5);
if(ahrim)
event.entityLiving.addPotionEffect(new PotionEffect(Potion.weakness.id, 20, 1));
if(dharok)
event.ammount *= (1F + (1F - player.getHealth() / player.getMaxHealth()) * 0.5F);
if(guthan)
player.heal(event.ammount * 0.25F);
if(torag)
event.entityLiving.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 60, 1));
if(verac)
event.source.setDamageBypassesArmor();
if(karil)
event.entityLiving.addPotionEffect(new PotionEffect(Potion.wither.id, 60, 1));
}
}
}
}
@@ -119,6 +119,7 @@ public final class LibItemNames {
public static final String THORN_CHAKRAM = "thornChakram";
public static final String OVERGROWTH_SEED = "overgrowthSeed";
public static final String CRAFT_PATTERN = "craftPattern";
public static final String ANCIENT_WILL = "ancientWill";
public static final String[] LENS_NAMES = new String[] {
"lensNormal",