Unicopia/src/main/java/com/minelittlepony/unicopia/potion/UPotion.java

100 lines
2.2 KiB
Java

package com.minelittlepony.unicopia.potion;
import javax.annotation.Nonnull;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
public class UPotion extends Potion {
private boolean isSilent;
private int tickDelay = 40;
@Nonnull
private IEffectApplicator applicator = IEffectApplicator.NONE;
public UPotion(String domain, String name, boolean isNegative, int tint) {
super(isNegative, tint);
setRegistryName(domain, name);
setPotionName("effect." + name);
}
public UPotion setSilent() {
isSilent = true;
return this;
}
public UPotion setApplicator(@Nonnull IEffectApplicator applicator) {
this.applicator = applicator;
return this;
}
public UPotion setTickDelay(int delay) {
tickDelay = delay;
return this;
}
@Override
public UPotion setIconIndex(int u, int v) {
super.setIconIndex(u, v);
return this;
}
@Override
public UPotion setEffectiveness(double effectiveness) {
super.setEffectiveness(effectiveness);
return this;
}
@Override
public boolean shouldRender(PotionEffect effect) {
return !isSilent;
}
@Override
public boolean shouldRenderInvText(PotionEffect effect) {
return !isSilent;
}
@Override
public boolean shouldRenderHUD(PotionEffect effect) {
return !isSilent;
}
@Override
public void performEffect(EntityLivingBase entity, int amplifier) {
applicator.performEffect(this, entity, amplifier);
}
@Override
public boolean isInstant() {
return tickDelay > 0;
}
@Override
public boolean isReady(int duration, int amplifier) {
if (!isInstant()) {
int i = tickDelay >> amplifier;
if (i > 0) {
return duration % i == 0;
}
}
return duration > 0;
}
@FunctionalInterface
public interface IEffectApplicator {
IEffectApplicator NONE = (p, e, i) -> {};
void performEffect(Potion effect, EntityLivingBase target, int amplifier);
}
}