mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-11-13 16:54:06 +00:00
186 lines
5.7 KiB
Java
186 lines
5.7 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 @ [Nov 1, 2014, 5:45:58 PM (GMT)]
|
|
*/
|
|
package vazkii.botania.common.item.brew;
|
|
|
|
import java.awt.Color;
|
|
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.EnumAction;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.potion.Potion;
|
|
import net.minecraft.potion.PotionEffect;
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
import net.minecraft.util.IIcon;
|
|
import net.minecraft.util.StatCollector;
|
|
import net.minecraft.world.World;
|
|
import vazkii.botania.api.BotaniaAPI;
|
|
import vazkii.botania.api.brew.Brew;
|
|
import vazkii.botania.api.brew.IBrewItem;
|
|
import vazkii.botania.client.core.handler.ClientTickHandler;
|
|
import vazkii.botania.client.core.helper.IconHelper;
|
|
import vazkii.botania.common.core.helper.ItemNBTHelper;
|
|
import vazkii.botania.common.item.ItemMod;
|
|
|
|
public abstract class ItemBrewBase extends ItemMod implements IBrewItem {
|
|
|
|
private static final String TAG_BREW_KEY = "brewKey";
|
|
private static final String TAG_SWIGS_LEFT = "swigsLeft";
|
|
|
|
String name;
|
|
String texName;
|
|
int swigs;
|
|
int drinkSpeed;
|
|
ItemStack baseItem;
|
|
|
|
IIcon[] icons;
|
|
|
|
public ItemBrewBase(String name, String texName, int swigs, int drinkSpeed, ItemStack baseItem) {
|
|
this.name = name;
|
|
this.texName = texName;
|
|
this.swigs = swigs;
|
|
this.drinkSpeed = drinkSpeed;
|
|
this.baseItem = baseItem;
|
|
setMaxStackSize(1);
|
|
setMaxDamage(swigs);
|
|
setUnlocalizedName(name);
|
|
setNoRepair();
|
|
}
|
|
|
|
@Override
|
|
public int getMaxItemUseDuration(ItemStack p_77626_1_) {
|
|
return drinkSpeed;
|
|
}
|
|
|
|
@Override
|
|
public EnumAction getItemUseAction(ItemStack p_77661_1_) {
|
|
return EnumAction.drink;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) {
|
|
p_77659_3_.setItemInUse(p_77659_1_, getMaxItemUseDuration(p_77659_1_));
|
|
return p_77659_1_;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) {
|
|
if(!world.isRemote) {
|
|
for(PotionEffect effect : getBrew(stack).getPotionEffects(stack)) {
|
|
PotionEffect newEffect = new PotionEffect(effect.getPotionID(), effect.getDuration(), effect.getAmplifier(), true);
|
|
player.addPotionEffect(newEffect);
|
|
}
|
|
|
|
if(world.rand.nextBoolean())
|
|
world.playSoundAtEntity(player, "random.burp", 1F, 1F);
|
|
|
|
int swigs = getSwigsLeft(stack);
|
|
if(!player.capabilities.isCreativeMode) {
|
|
if(swigs == 1) {
|
|
ItemStack copy = baseItem.copy();
|
|
if(!player.inventory.addItemStackToInventory(copy))
|
|
return baseItem.copy();
|
|
return null;
|
|
}
|
|
|
|
|
|
setSwigsLeft(stack, swigs - 1);
|
|
}
|
|
}
|
|
|
|
return stack;
|
|
}
|
|
|
|
@Override
|
|
public void getSubItems(Item item, CreativeTabs tab, List list) {
|
|
for(String s : BotaniaAPI.brewMap.keySet()) {
|
|
ItemStack stack = new ItemStack(item);
|
|
setBrew(stack, s);
|
|
list.add(stack);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void registerIcons(IIconRegister par1IconRegister) {
|
|
itemIcon = IconHelper.forName(par1IconRegister, texName + "0");
|
|
|
|
icons = new IIcon[swigs];
|
|
for(int i = 0; i < swigs; i++)
|
|
icons[i] = IconHelper.forName(par1IconRegister, texName + "1_" + i);
|
|
}
|
|
|
|
@Override
|
|
public boolean requiresMultipleRenderPasses() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public IIcon getIcon(ItemStack stack, int pass) {
|
|
return pass == 0 ? itemIcon : icons[Math.max(0, Math.min(icons.length - 1, swigs - getSwigsLeft(stack)))];
|
|
}
|
|
|
|
@Override
|
|
public int getColorFromItemStack(ItemStack stack, int pass) {
|
|
if(pass == 0)
|
|
return 0xFFFFFF;
|
|
|
|
Color color = new Color(getBrew(stack).getColor(stack));
|
|
int add = (int) (Math.sin(ClientTickHandler.ticksInGame * 0.1) * 16);
|
|
|
|
int r = Math.max(0, Math.min(255, color.getRed() + add));
|
|
int g = Math.max(0, Math.min(255, color.getGreen() + add));
|
|
int b = Math.max(0, Math.min(255, color.getBlue() + add));
|
|
|
|
return r << 16 | g << 8 | b;
|
|
}
|
|
|
|
@Override
|
|
public String getItemStackDisplayName(ItemStack stack) {
|
|
return String.format(StatCollector.translateToLocal(getUnlocalizedNameInefficiently(stack) + ".name"), StatCollector.translateToLocal(getBrew(stack).getUnlocalizedName(stack)), EnumChatFormatting.BOLD + "" + getSwigsLeft(stack) + EnumChatFormatting.RESET);
|
|
}
|
|
|
|
@Override
|
|
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean adv) {
|
|
Brew brew = getBrew(stack);
|
|
for(PotionEffect effect : brew.getPotionEffects(stack)) {
|
|
Potion potion = Potion.potionTypes[effect.getPotionID()];
|
|
EnumChatFormatting format = potion.isBadEffect() ? EnumChatFormatting.RED : EnumChatFormatting.GRAY;
|
|
list.add(format + StatCollector.translateToLocal(effect.getEffectName()) + (effect.getAmplifier() == 0 ? "" : " " + StatCollector.translateToLocal("botania.roman" + (effect.getAmplifier() + 1))) + EnumChatFormatting.GRAY + (potion.isInstant() ? "" : " (" + Potion.getDurationString(effect) + ")"));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Brew getBrew(ItemStack stack) {
|
|
String key = ItemNBTHelper.getString(stack, TAG_BREW_KEY, "");
|
|
return BotaniaAPI.getBrewFromKey(key);
|
|
}
|
|
|
|
public static void setBrew(ItemStack stack, Brew brew) {
|
|
setBrew(stack, (brew == null ? BotaniaAPI.fallbackBrew : brew).getKey());
|
|
}
|
|
|
|
public static void setBrew(ItemStack stack, String brew) {
|
|
ItemNBTHelper.setString(stack, TAG_BREW_KEY, brew);
|
|
}
|
|
|
|
public int getSwigsLeft(ItemStack stack) {
|
|
return ItemNBTHelper.getInt(stack, TAG_SWIGS_LEFT, swigs);
|
|
}
|
|
|
|
public void setSwigsLeft(ItemStack stack, int swigs) {
|
|
ItemNBTHelper.setInt(stack, TAG_SWIGS_LEFT, swigs);
|
|
}
|
|
|
|
}
|