package net.glowstone.constants;
import org.apache.commons.lang.Validate;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.potion.Potion;
/**
* Conversion of data classes to raw values for Effects.
*/
public final class GlowEffect {
private GlowEffect() {}
/**
* Get the raw data value for an Effect and its data object.
* @param effect the Effect whose data to calculate
* @param data the original data
* @param <T> the type of data
* @return the raw data value
*/
public static <T> int getDataValue(Effect effect, T data) {
int result;
switch (effect) {
case POTION_BREAK:
// 0x3f - bits of the potion corresponding to its type
result = ((Potion) data).toDamageValue() & 0x3f;
break;
case RECORD_PLAY:
Validate.isTrue(((Material) data).isRecord(), "Invalid record type!");
result = ((Material) data).getId();
break;
case SMOKE:
// block face to data value conversion information from
// the protocol documentation
switch ((BlockFace) data) {
case SOUTH_EAST:
result = 0;
break;
case SOUTH:
result = 1;
break;
case SOUTH_WEST:
result = 2;
break;
case EAST:
result = 3;
break;
case UP:
case SELF:
result = 4;
break;
case WEST:
result = 5;
break;
case NORTH_EAST:
result = 6;
break;
case NORTH:
result = 7;
break;
case NORTH_WEST:
result = 8;
break;
default:
throw new IllegalArgumentException("Bad smoke direction!");
}
break;
case STEP_SOUND:
Validate.isTrue(((Material) data).isBlock(), "Material is not a block!");
result = ((Material) data).getId();
break;
default:
result = 0;
}
return result;
}
}