packages feed

mcpi-0.0.0.3: examples/XJump.hs

{-# LANGUAGE RecordWildCards #-}

{-

Usage:

  ./xjump [--debug]

-}

module Main where

import Control.Monad (when, unless)

import Data.MineCraft.Pi.Block 
import Data.MineCraft.Pi.Player
import Data.MineCraft.Pi.Other
import Data.MineCraft.Pi.Types

-- Most users would import @runMCPI@ from
-- "Network.MineCraft.Pi.Client", but I want to allow
-- debug messages.
import Network.MineCraft.Pi.Client.Internal (MCPI, runMCPI')

import System.Environment (getArgs, getProgName)
import System.Exit (exitFailure)
import System.IO

import Utils (printVersion, checkForDebug)

-- | Move the player by 10 tiles in the X direction,
--   if it is not filled.
movePlayer :: MCPI ()
movePlayer = do
  Pos {..} <- getPlayerTile
  let newPos = Pos (_x+10) _y _z
  bType <- getBlock newPos
  when (bType == air) $ do
    setPlayerTile newPos
    chatPost "*jump*"

usage :: IO ()
usage = do
  pName <- getProgName
  hPutStrLn stderr $ "Usage: " ++ pName ++ " [--debug]"
  exitFailure

main :: IO ()
main = do
  args <- getArgs
  let (dbg, args') = checkForDebug args
  unless (null args') usage
  when dbg printVersion
  runMCPI' dbg movePlayer