91 lines
2.5 KiB
Java
91 lines
2.5 KiB
Java
package net.minecraft.util;
|
|
|
|
import com.google.common.collect.Maps;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
import java.util.Map.Entry;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.util.math.MathHelper;
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
|
|
|
public class CooldownTracker
|
|
{
|
|
private final Map<Item, CooldownTracker.Cooldown> cooldowns = Maps.<Item, CooldownTracker.Cooldown>newHashMap();
|
|
private int ticks;
|
|
|
|
public boolean hasCooldown(Item itemIn)
|
|
{
|
|
return this.getCooldown(itemIn, 0.0F) > 0.0F;
|
|
}
|
|
|
|
public float getCooldown(Item itemIn, float partialTicks)
|
|
{
|
|
CooldownTracker.Cooldown cooldowntracker$cooldown = this.cooldowns.get(itemIn);
|
|
|
|
if (cooldowntracker$cooldown != null)
|
|
{
|
|
float f = (float)(cooldowntracker$cooldown.expireTicks - cooldowntracker$cooldown.createTicks);
|
|
float f1 = (float)cooldowntracker$cooldown.expireTicks - ((float)this.ticks + partialTicks);
|
|
return MathHelper.clamp(f1 / f, 0.0F, 1.0F);
|
|
}
|
|
else
|
|
{
|
|
return 0.0F;
|
|
}
|
|
}
|
|
|
|
public void tick()
|
|
{
|
|
++this.ticks;
|
|
|
|
if (!this.cooldowns.isEmpty())
|
|
{
|
|
Iterator<Entry<Item, CooldownTracker.Cooldown>> iterator = this.cooldowns.entrySet().iterator();
|
|
|
|
while (iterator.hasNext())
|
|
{
|
|
Entry<Item, CooldownTracker.Cooldown> entry = (Entry)iterator.next();
|
|
|
|
if ((entry.getValue()).expireTicks <= this.ticks)
|
|
{
|
|
iterator.remove();
|
|
this.notifyOnRemove(entry.getKey());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void setCooldown(Item itemIn, int ticksIn)
|
|
{
|
|
this.cooldowns.put(itemIn, new CooldownTracker.Cooldown(this.ticks, this.ticks + ticksIn));
|
|
this.notifyOnSet(itemIn, ticksIn);
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public void removeCooldown(Item itemIn)
|
|
{
|
|
this.cooldowns.remove(itemIn);
|
|
this.notifyOnRemove(itemIn);
|
|
}
|
|
|
|
protected void notifyOnSet(Item itemIn, int ticksIn)
|
|
{
|
|
}
|
|
|
|
protected void notifyOnRemove(Item itemIn)
|
|
{
|
|
}
|
|
|
|
class Cooldown
|
|
{
|
|
final int createTicks;
|
|
final int expireTicks;
|
|
|
|
private Cooldown(int createTicksIn, int expireTicksIn)
|
|
{
|
|
this.createTicks = createTicksIn;
|
|
this.expireTicks = expireTicksIn;
|
|
}
|
|
}
|
|
} |