package openblocks.common.item; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.IIcon; import net.minecraft.world.World; import openblocks.OpenBlocks; import openblocks.common.PedometerHandler; import openblocks.common.PedometerHandler.PedometerData; import openblocks.common.PedometerHandler.PedometerState; import openmods.utils.Units.DistanceUnit; import openmods.utils.Units.SpeedUnit; public class ItemPedometer extends Item { public ItemPedometer() { setMaxStackSize(1); setCreativeTab(OpenBlocks.tabOpenBlocks); } private IIcon pedometerMoving; private IIcon pedometerStill; @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister registry) { super.registerIcons(registry); pedometerMoving = registry.registerIcon("openblocks:pedometer_moving"); pedometerStill = registry.registerIcon("openblocks:pedometer_still"); } private static void send(EntityPlayer player, String format, Object... args) { player.addChatComponentMessage(new ChatComponentTranslation(format, args)); } private SpeedUnit speedUnit = SpeedUnit.M_PER_TICK; private DistanceUnit distanceUnit = DistanceUnit.M; @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if (world.isRemote) { if (player.isSneaking()) { PedometerHandler.reset(player); send(player, "openblocks.misc.pedometer.tracking_reset"); } else { PedometerState state = PedometerHandler.getProperty(player); if (state.isRunning()) { showPedometerData(player, state); } else { state.init(player, world); send(player, "openblocks.misc.pedometer.tracking_started"); } } } else { world.playSoundAtEntity(player, "openblocks:pedometer.use", 1F, 1F); } return stack; } protected void showPedometerData(EntityPlayer player, PedometerState state) { PedometerData result = state.getData(); if (result == null) return; player.addChatComponentMessage(new ChatComponentText("")); send(player, "openblocks.misc.pedometer.start_point", String.format("%.1f %.1f %.1f", result.startingPoint.xCoord, result.startingPoint.yCoord, result.startingPoint.zCoord)); send(player, "openblocks.misc.pedometer.speed", speedUnit.format(result.currentSpeed)); send(player, "openblocks.misc.pedometer.avg_speed", speedUnit.format(result.averageSpeed())); send(player, "openblocks.misc.pedometer.total_distance", distanceUnit.format(result.totalDistance)); send(player, "openblocks.misc.pedometer.straght_line_distance", distanceUnit.format(result.straightLineDistance)); send(player, "openblocks.misc.pedometer.straigh_line_speed", speedUnit.format(result.straightLineSpeed())); send(player, "openblocks.misc.pedometer.last_check_speed", speedUnit.format(result.lastCheckSpeed())); send(player, "openblocks.misc.pedometer.last_check_distance", distanceUnit.format(result.lastCheckDistance)); send(player, "openblocks.misc.pedometer.last_check_time", result.lastCheckTime); send(player, "openblocks.misc.pedometer.total_time", result.totalTime); } @Override public void onUpdate(ItemStack stack, World world, Entity entity, int slotId, boolean isSelected) { if (world.isRemote && slotId < 9) PedometerHandler.updatePedometerData(entity); } @Override public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { if (player.motionX * player.motionX + player.motionY * player.motionY + player.motionZ * player.motionZ > 0.01) return pedometerMoving; return pedometerStill; } }