package joshie.progression.criteria.rewards;
import joshie.progression.Progression;
import joshie.progression.api.criteria.ProgressionRule;
import joshie.progression.api.special.DisplayMode;
import joshie.progression.player.PlayerTracker;
import joshie.progression.player.data.AbilityStats.SpeedType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.List;
import static joshie.progression.player.data.AbilityStats.SpeedType.*;
@ProgressionRule(name="speed", color=0xFFFFBF00, meta="speed")
public class RewardSpeed extends RewardBaseAbility {
public float speed = 0.1F;
public boolean land = true;
public boolean air = false;
public boolean water = true;
@Override
public String getDescription() {
return Progression.format("reward.speed.description", speed, getType());
}
@Override
public int getWidth(DisplayMode mode) {
return mode == DisplayMode.EDIT ? 100 : 55;
}
@Override
public void addAbilityTooltip(List list) {
list.add(TextFormatting.GRAY + getProvider().getLocalisedName() + ": " + speed + " " + getType());
}
@SubscribeEvent
public void onLivingUpdate(LivingUpdateEvent event) {
if (event.getEntityLiving() instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) event.getEntityLiving();
if (player.worldObj.isRemote) {
SpeedType type = player.isInWater() ? WATER : !player.onGround ? AIR : LAND;
float speed = PlayerTracker.getClientPlayer().getAbilities().getSpeed(type);
if (speed != 1F) {
player.motionX *= speed;
player.motionZ *= speed;
}
}
}
}
@Override
public void reward(EntityPlayerMP player) {
if (land) PlayerTracker.getServerPlayer(player).addSpeed(LAND, speed);
if (air) PlayerTracker.getServerPlayer(player).addSpeed(AIR, speed);
if (water) PlayerTracker.getServerPlayer(player).addSpeed(WATER, speed);
}
//Helper methods
public String[] translate(String... text) {
String[] translated = new String[text.length];
for (int i = 0; i < translated.length; i++) {
translated[i] = Progression.translate("reward.speed." + text[i]);
}
return translated;
}
private String getType() {
if (land && water && air) return Progression.format("reward.speed.format3", (Object[])translate("water.description", "land.description", "air.description"));
else if (land && water) return Progression.format("reward.speed.format2", (Object[])translate("water.description", "land.description"));
else if (water && air) return Progression.format("reward.speed.format2", (Object[])translate("water.description", "air.description"));
else if (land && air) return Progression.format("reward.speed.format2", (Object[])translate("land.description", "air.description"));
else if (land) return Progression.translate("reward.speed.land.description");
else if (water) return Progression.translate("reward.speed.water.description");
else if (air) return Progression.translate("reward.speed.air.description");
else return Progression.translate("reward.speed.never");
}
}