package blusunrize.immersiveengineering.common.util;
import com.google.common.base.Optional;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializer;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.potion.PotionUtils;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.translation.I18n;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.List;
/**
* @author BluSunrize - 22.02.2017
*/
public class IEFluid extends Fluid
{
public IEFluid(String fluidName, ResourceLocation still, ResourceLocation flowing)
{
super(fluidName, still, flowing);
}
@SideOnly(Side.CLIENT)
public void addTooltipInfo(FluidStack fluidStack, @Nullable EntityPlayer player, List<String> tooltip)
{
}
public static class FluidPotion extends IEFluid
{
public FluidPotion(String fluidName, ResourceLocation still, ResourceLocation flowing)
{
super(fluidName, still, flowing);
}
@Override
@SideOnly(Side.CLIENT)
public void addTooltipInfo(FluidStack fluidStack, @Nullable EntityPlayer player, List<String> tooltip)
{
if(fluidStack!=null && fluidStack.tag!=null)
{
List<PotionEffect> effects = PotionUtils.getEffectsFromTag(fluidStack.tag);
if(effects.isEmpty())
tooltip.add(TextFormatting.GRAY+I18n.translateToLocal("effect.none").trim());
else
{
for(PotionEffect potioneffect : effects)
{
String s1 = I18n.translateToLocal(potioneffect.getEffectName()).trim();
Potion potion = potioneffect.getPotion();
if(potioneffect.getAmplifier()>0)
s1 = s1+" "+I18n.translateToLocal("potion.potency."+potioneffect.getAmplifier()).trim();
if(potioneffect.getDuration()>20)
s1 = s1+" ("+Potion.getPotionDurationString(potioneffect, 1)+")";
if(potion.isBadEffect())
tooltip.add(TextFormatting.RED+s1);
else
tooltip.add(TextFormatting.BLUE+s1);
}
}
}
}
@Override
public String getLocalizedName(FluidStack stack)
{
if(stack==null || stack.tag==null)
return super.getLocalizedName(stack);
return I18n.translateToLocal(PotionUtils.getPotionTypeFromNBT(stack.tag).getNamePrefixed("potion.effect."));
}
@Override
public int getColor(FluidStack stack)
{
if(stack==null || stack.tag!=null)
return 0xff000000 | PotionUtils.getPotionColorFromEffectList(PotionUtils.getEffectsFromTag(stack.tag));
return 0xff0000ff;
}
}
public static final DataSerializer<Optional<FluidStack>> OPTIONAL_FLUID_STACK = new DataSerializer<Optional<FluidStack>>()
{
@Override
public void write(PacketBuffer buf, Optional<FluidStack> value)
{
buf.writeBoolean(value.isPresent());
FluidStack fs = value.orNull();
if(fs!=null)
buf.writeNBTTagCompoundToBuffer(fs.writeToNBT(new NBTTagCompound()));
}
@Override
public Optional<FluidStack> read(PacketBuffer buf) throws IOException
{
FluidStack fs = !buf.readBoolean()?null : FluidStack.loadFluidStackFromNBT(buf.readNBTTagCompoundFromBuffer());
return Optional.fromNullable(fs);
}
@Override
public DataParameter<Optional<FluidStack>> createKey(int id)
{
return new DataParameter(id, this);
}
};
}