mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-11-13 16:54:06 +00:00
Added Ancient Wills.
This commit is contained in:
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++) {
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -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);
|
||||
}
|
||||
|
||||
+116
-1
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user