Advertisement
staffehn

minecraft resizing structures

Jan 17th, 2014
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. module Main where
  2.  
  3. import Data.List
  4.  
  5. main = writeFile "testoutput.txt" $ resize 22
  6.  
  7. root = "summon MinecartCommandBlock ~ ~1 ~ {"
  8. slime = "Riding:{id:Slime,Size:-2,"
  9. cart = "Riding:{id:MinecartCommandBlock,"
  10. kill = "kill @e[type=MinecartCommandBlock,r=1]"
  11. c1 = ",Command:"
  12. c2 = "}"
  13.  
  14. carts = cycle . reverse $ (slime ++ cart) : replicate 8 cart
  15. cartsN :: Int -> String
  16. cartsN n = concat . reverse . take n $ carts
  17.  
  18. nines :: [a] -> [[a]]
  19. nines (a:b:c:d:e:f:g:h:i:xs) = [a,b,c,d,e,f,g,h,i] : nines xs
  20. nines xs = [xs]
  21.  
  22. format :: [String] -> String
  23. format = concat . concat . intersperse [c2] . map reverse . nines . map ((c1++).(++c2)) . (kill:) . reverse
  24.  
  25. compress :: [String] -> String
  26. compress [] = []
  27. compress xs = root ++ cartsN (length xs) ++ tail (format xs)
  28.  
  29.  
  30. data D = X|Y|Z
  31. posRel1 :: D -> Int -> String
  32. posRel1 X n = " ~"++show n++" ~-2 ~1"
  33. posRel1 Y n = " ~1 ~"++show (n-3)++" ~1"
  34. posRel1 Z n = " ~1 ~-2 ~"++show n
  35.  
  36. posRel2 :: Int -> D -> Int -> String
  37. posRel2 m X n = " ~"++show n++" ~"++show (m-3)++" ~"++show m
  38. posRel2 m Y n = " ~"++show m++" ~"++show (n-3)++" ~"++show m
  39. posRel2 m Z n = " ~"++show m++" ~"++show (m-3)++" ~"++show n
  40.  
  41. resize' :: D -> Int -> [String]
  42. resize' d n = (fromToWidth n (2*n) 1):steps n
  43. where
  44. fromToWidth a b w = "clone" ++ posRel1 d a ++ posRel2 (2*n) d (a+w-1) ++ posRel1 d b
  45. steps 1 = []
  46. steps 2 = [fromToWidth 2 3 1, fromToWidth 1 2 1]
  47. steps n = let n' = n-1 in fromToWidth n' (2*n') 2 : steps n'
  48.  
  49. resize n = compress $ concatMap (flip resize' n) [Y,X,Z]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement