package toadmess.explosives.events.handlers;
import org.bukkit.block.Block;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Type;
import org.bukkit.event.entity.EntityExplodeEvent;
import toadmess.explosives.MCNative;
import toadmess.explosives.config.entity.EntityConf;
import toadmess.explosives.events.HEEvent;
import toadmess.explosives.events.Handler;
import toadmess.explosives.events.TippingPoint;
public class HandleYield implements Handler {
@Override
public void handle(final HEEvent ev) {
final EntityConf worldConf = ev.getApplicableConfig();
if(!worldConf.hasYieldConfig() && !worldConf.hasSpecificYieldConfig()) {
return;
}
final EntityExplodeEvent eee = (EntityExplodeEvent) ev.event;
if(!worldConf.hasSpecificYieldConfig()) {
eee.setYield(worldConf.getYield());
return;
}
final Float[] specYields = worldConf.getSpecificYieldConfig();
// We have specific block yields, so we'll override the
// usual minecraft yield handling and handle it ourselves.
eee.setYield(0.0f);
final float defYield;
if(worldConf.hasYieldConfig()) {
defYield = worldConf.getYield();
} else {
defYield = eee.getYield();
}
{
Float specYield = null;
for(final Block b : eee.blockList()) {
specYield = specYields[b.getTypeId()];
MCNative.dropBlockItem(b, (specYield != null) ? specYield : defYield);
}
}
}
@Override
public TippingPoint[] getTippingPointsHandled() {
return new TippingPoint[] { TippingPoint.CAN_CHANGE_EXPLOSION_YIELD };
}
@Override
public Type[] getBukkitEventsRequired() {
return new Type[] { Event.Type.ENTITY_EXPLODE };
}
@Override
public boolean isNeededBy(final EntityConf thisConfig) {
return thisConfig.hasYieldConfig() || thisConfig.hasSpecificYieldConfig();
}
}