package ljfa.glassshards.handlers;
import ljfa.glassshards.Config;
import ljfa.glassshards.api.GlassType;
import ljfa.glassshards.api.IShatterableGlass;
import ljfa.glassshards.glass.GlassRegistry;
import ljfa.glassshards.glass.ModGlassHandler;
import ljfa.glassshards.items.ModItems;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
public class HarvestDropsHandler {
@SubscribeEvent
public void onBlockHarvested(HarvestDropsEvent event) {
if(event.getWorld().isRemote || event.isSilkTouching())
return;
IBlockState state = event.getState();
Block block = state.getBlock();
if(block instanceof IShatterableGlass) {
addDropForType(event, ((IShatterableGlass)block).getGlassType(event.getWorld(), event.getPos(), state));
}
else {
ModGlassHandler handler = GlassRegistry.get(block);
if(handler != null) {
if(!event.getDrops().isEmpty()) {
if(handler.shouldRemoveDrop(state))
event.getDrops().clear();
else
return;
}
handler.addShardsDrop(event);
}
}
}
/** With the correct probability, adds shards corresponding to the type to the drop list */
public static void addDropForType(HarvestDropsEvent event, GlassType gtype) {
if(gtype != null) {
float chance = gtype.getMultiplier() * getChanceFromFortune(event.getFortuneLevel());
if(event.getWorld().rand.nextFloat() < chance) {
int meta = gtype.isStained() ? gtype.getColor().getMetadata() : 16;
event.getDrops().add(new ItemStack(ModItems.glass_shards, 1, meta));
}
}
}
public static float getChanceFromFortune(int fortune) {
return Math.min(Config.shardsChance + fortune*Config.shardsFortuneChance, 1.0f);
}
}