packages feed

minecraft-data-0.1.0.0: Minecraft/Command.hs

{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Minecraft.Command where

import Data.Data (Data)
import Data.Typeable (Typeable)
import Data.Int (Int8, Int16, Int32, Int64)
import Data.Monoid ((<>), mconcat, mempty)
import Data.NBT
import Data.Word (Word, Word8)
import Data.Text (Text)
import Data.Text.Lazy.Builder (Builder)
import qualified Data.Text.Lazy.Builder as B
import GHC.Generics
import Minecraft.Core
import TextShow (showb)

data Command
  = Give Target Item (Maybe Int6) (Maybe Int64) (Maybe NBT)
    deriving (Eq, Show)

(<+>) :: Builder -> Builder -> Builder
a <+> b = a <> B.singleton ' ' <> b

(<?>) :: (Render b) => Builder -> Maybe b -> Builder
a <?> Nothing  = a
a <?> (Just b) = a <+> (render b)

instance Render NBT where
  render nbt = error "Render NBT not implemented."

instance Render Command where
  render command =
    case command of
     (Give target item Nothing Nothing Nothing) ->
       "give" <+> render target <+> showb item
     (Give target item mAmount mData mDataTag) ->
       "give" <+> render target <+> showb item <+> (maybe "1" render mAmount) <+> (maybe "0" render mData) <?> mDataTag