package choonster.testmod3.item;
import choonster.testmod3.api.capability.pigspawner.IPigSpawner;
import choonster.testmod3.api.capability.pigspawner.IPigSpawnerFinite;
import choonster.testmod3.capability.pigspawner.CapabilityPigSpawner;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import javax.annotation.Nullable;
import java.util.function.Supplier;
/**
* A pig spawner item.
*
* @author Choonster
*/
public class ItemPigSpawner extends ItemTestMod3 {
/**
* A factory to create the {@link IPigSpawner}
*/
private Supplier<IPigSpawner> spawnerFactory;
public ItemPigSpawner(String name) {
super("pig_spawner_" + name);
setHasSubtypes(true);
}
@Override
public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable NBTTagCompound nbt) {
return CapabilityPigSpawner.createProvider(spawnerFactory.get());
}
@Override
public boolean isDamageable() {
return true;
}
@Override
public int getMaxDamage(ItemStack stack) {
final IPigSpawner pigSpawner = CapabilityPigSpawner.getPigSpawner(stack);
if (pigSpawner instanceof IPigSpawnerFinite) {
final IPigSpawnerFinite pigSpawnerFinite = (IPigSpawnerFinite) pigSpawner;
return pigSpawnerFinite.getMaxNumPigs();
}
return super.getMaxDamage(stack);
}
@Override
public boolean isDamaged(ItemStack stack) {
final IPigSpawner pigSpawner = CapabilityPigSpawner.getPigSpawner(stack);
if (pigSpawner instanceof IPigSpawnerFinite) {
final IPigSpawnerFinite pigSpawnerFinite = (IPigSpawnerFinite) pigSpawner;
return pigSpawnerFinite.getNumPigs() < pigSpawnerFinite.getMaxNumPigs();
}
return super.isDamaged(stack);
}
@Override
public double getDurabilityForDisplay(ItemStack stack) {
final IPigSpawner pigSpawner = CapabilityPigSpawner.getPigSpawner(stack);
if (pigSpawner instanceof IPigSpawnerFinite) {
final IPigSpawnerFinite pigSpawnerFinite = (IPigSpawnerFinite) pigSpawner;
final int maxNumPigs = pigSpawnerFinite.getMaxNumPigs();
return (double) (maxNumPigs - pigSpawnerFinite.getNumPigs()) / maxNumPigs;
}
return super.getDurabilityForDisplay(stack);
}
public void setSpawnerFactory(Supplier<IPigSpawner> spawnerFactory) {
if (this.spawnerFactory != null)
throw new IllegalStateException("Attempt to replace the spawner factory of " + getRegistryName().toString());
this.spawnerFactory = spawnerFactory;
}
}