Files
Botania/src/main/java/vazkii/botania/common/item/material/ItemManaResource.java
T

198 lines
6.5 KiB
Java

/**
* 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, 2014, 4:49:16 PM (GMT)]
*/
package vazkii.botania.common.item.material;
import java.awt.Color;
import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.Achievement;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action;
import vazkii.botania.api.recipe.IElvenItem;
import vazkii.botania.api.recipe.IFlowerComponent;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.Botania;
import vazkii.botania.common.achievement.IPickupAchievement;
import vazkii.botania.common.achievement.ModAchievements;
import vazkii.botania.common.entity.EntityDoppleganger;
import vazkii.botania.common.entity.EntityEnderAirBottle;
import vazkii.botania.common.item.ItemMod;
import vazkii.botania.common.item.equipment.tool.ToolCommons;
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 ItemManaResource extends ItemMod implements IFlowerComponent, IElvenItem, IPickupAchievement {
final int types = 24;
IIcon[] icons;
// begin dank_memes
public IIcon tailIcon = null;
public IIcon phiFlowerIcon = null;
public IIcon goldfishIcon = null;
public IIcon nerfBatIcon = null;
// end dank_memes
public ItemManaResource() {
super();
setUnlocalizedName(LibItemNames.MANA_RESOURCE);
setHasSubtypes(true);
MinecraftForge.EVENT_BUS.register(new EventHandler());
}
public void onPlayerInteract(PlayerInteractEvent event) {
boolean rightEvent = event.action == Action.RIGHT_CLICK_AIR;
ItemStack stack = event.entityPlayer.getCurrentEquippedItem();
boolean correctStack = stack != null && stack.getItem() == Items.glass_bottle;
boolean ender = event.world.provider.dimensionId == 1;
if(rightEvent && correctStack && ender) {
MovingObjectPosition pos = ToolCommons.raytraceFromEntity(event.world, event.entityPlayer, false, 5F);
if(pos == null) {
ItemStack stack1 = new ItemStack(this, 1, 15);
event.entityPlayer.addStat(ModAchievements.enderAirMake, 1);
if(!event.entityPlayer.inventory.addItemStackToInventory(stack1))
event.entityPlayer.dropPlayerItemWithRandomChoice(stack1, true);
stack.stackSize--;
if(stack.stackSize == 0)
event.entityPlayer.inventory.setInventorySlotContents(event.entityPlayer.inventory.currentItem, null);
if(event.world.isRemote)
event.entityPlayer.swingItem();
else event.world.playSoundAtEntity(event.entityPlayer, "random.pop", 0.5F, 1F);
}
}
}
@Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float subX, float subY, float subZ) {
if(stack.getItemDamage() == 4 || stack.getItemDamage() == 14)
return EntityDoppleganger.spawn(player, stack, world, x, y, z, stack.getItemDamage() == 14);
else if(stack.getItemDamage() == 20 && net.minecraft.item.ItemDye.applyBonemeal(stack, world, x, y, z, player)) {
if(!world.isRemote)
world.playAuxSFX(2005, x, y, z, 0);
return true;
}
return super.onItemUse(stack, player, world, x, y, z, side, subX, subY, subZ);
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if(stack.getItemDamage() == 15) {
if(!player.capabilities.isCreativeMode)
--stack.stackSize;
world.playSoundAtEntity(player, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
if(!world.isRemote)
world.spawnEntityInWorld(new EntityEnderAirBottle(world, player));
else player.swingItem();
}
return stack;
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tab, List<ItemStack> list) {
for(int i = 0; i < types; i++)
if(Botania.gardenOfGlassLoaded || i != 20 && i != 21)
list.add(new ItemStack(item, 1, i));
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register) {
icons = new IIcon[types];
for(int i = 0; i < icons.length; i++)
icons[i] = IconHelper.forName(register, LibItemNames.MANA_RESOURCE_NAMES[i]);
tailIcon = IconHelper.forName(register, "tail");
phiFlowerIcon = IconHelper.forName(register, "phiFlower");
goldfishIcon = IconHelper.forName(register, "goldfish");
nerfBatIcon = IconHelper.forName(register, "nerfBat");
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int renderPass) {
if(stack.getItemDamage() == 5 || stack.getItemDamage() == 14)
return Color.HSBtoRGB(Botania.proxy.getWorldElapsedTicks() * 2 % 360 / 360F, 0.25F, 1F);
return 0xFFFFFF;
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return "item." + LibItemNames.MANA_RESOURCE_NAMES[Math.min(types - 1, stack.getItemDamage())];
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int meta) {
return icons[Math.min(icons.length - 1, meta)];
}
@Override
public boolean canFit(ItemStack stack, IInventory apothecary) {
int meta = stack.getItemDamage();
return meta == 6 || meta == 8 || meta == 5 || meta == 23;
}
@Override
public int getParticleColor(ItemStack stack) {
return 0x9b0000;
}
@Override
public boolean isElvenItem(ItemStack stack) {
int meta = stack.getItemDamage();
return meta == 7 || meta == 8 || meta == 9;
}
@Override
public ItemStack getContainerItem(ItemStack itemStack) {
return itemStack.getItemDamage() == 11 ? itemStack.copy() : null;
}
@Override
public Achievement getAchievementOnPickup(ItemStack stack, EntityPlayer player, EntityItem item) {
return stack.getItemDamage() == 4 ? ModAchievements.terrasteelPickup : null;
}
public class EventHandler {
@SubscribeEvent
public void onPlayerInteractWrapper(PlayerInteractEvent event) {
ItemManaResource.this.onPlayerInteract(event);
}
}
}