Advertisement
Guest User

Untitled

a guest
Dec 26th, 2011
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.74 KB | None | 0 0
  1. //using the Minecraft Coder Pack 5.0
  2. //----------------------------------
  3. //in Minecraft.java; in the finally block at the end of shutdownMinecraftApplet(), line 600:
  4.  
  5. mod_MapRecorder.getInstance().saveExisting();
  6.  
  7. //in Chunk.java; at the end of onChunkLoad(), line 687:
  8.  
  9. mod_MapRecorder.getInstance().renderChunk(worldObj, this);
  10.  
  11. //and finally, mod_MapRecorder.java; please don't judge me too harshly for the number of terrible, terrible coding practices this employs, it only needed to work once :)
  12.  
  13. package net.minecraft.src;
  14.  
  15. import java.io.*;
  16. import java.awt.image.*;
  17. import javax.imageio.*;
  18. import java.util.Date;
  19. import net.minecraft.client.Minecraft;
  20.  
  21. public class mod_MapRecorder
  22. {
  23.  
  24. private static mod_MapRecorder instance;
  25.  
  26. private static final int WIDTH = 6000;
  27. private static final int HEIGHT = 6000;
  28.  
  29. private String worldName;
  30. private File directory;
  31. private BufferedImage day;
  32. private BufferedImage night;
  33. private Date lastSave;
  34.  
  35. private mod_MapRecorder()
  36. {
  37.     directory = new File(Minecraft.getMinecraftDir(), new StringBuilder().append("mods").append(File.separatorChar).append("MapRecorder").toString());
  38.     if (!directory.exists())
  39.     {
  40.         directory.mkdirs();
  41.     }
  42.     worldName = "";
  43.     lastSave = new Date();
  44. }
  45.  
  46. protected void finalize()
  47. {
  48.     saveExisting();
  49. }
  50.  
  51. public static mod_MapRecorder getInstance()
  52. {
  53.     if(instance == null)
  54.         instance = new mod_MapRecorder();
  55.     return instance;
  56. }
  57.  
  58. protected void beginNew()
  59. {  
  60.     try
  61.     {
  62.         File fileDay = new File(directory, new StringBuilder().append(worldName).append(".day.png").toString());
  63.         if(fileDay.exists())
  64.             day = ImageIO.read(fileDay);
  65.         else
  66.             day = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
  67.        
  68.         /*File fileNight = new File(directory, new StringBuilder().append(worldName).append(".night.png").toString());
  69.         if(fileNight.exists())
  70.             night = ImageIO.read(fileNight);
  71.         else
  72.             night = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);*/
  73.     }
  74.     catch(IOException e)
  75.     {
  76.         e.printStackTrace();
  77.     }
  78. }
  79.  
  80. public void saveExisting()
  81. {
  82.     if(worldName.compareTo("") == 0)
  83.         return;
  84.     try
  85.     {
  86.             File fileDay = new File(directory, new StringBuilder().append(worldName).append(".day.png").toString());
  87.             ImageIO.write(day, "png", fileDay);
  88.             //File fileNight = new File(directory, new StringBuilder().append(worldName).append(".night.png").toString());
  89.             //ImageIO.write(night, "png", fileNight);
  90.         }
  91.     catch(IOException e)
  92.     {
  93.         e.printStackTrace();
  94.     }
  95. }
  96.  
  97. public void renderChunk(World w, Chunk c)
  98. {
  99.     if(worldName != w.getWorldInfo().getWorldName())
  100.     {
  101.         saveExisting();
  102.         lastSave = new Date();
  103.         worldName = w.getWorldInfo().getWorldName();
  104.         beginNew();
  105.     }
  106.     try{
  107.     //doit
  108.     for(int x = 0; x < 16; x++)
  109.     {
  110.         for(int z = 0; z < 16; z++)
  111.         {
  112.             int pixelX = convertX(c.xPosition, x);
  113.             int pixelZ = convertZ(c.zPosition, z);
  114.             if(pixelX < 0 || pixelX > (WIDTH-1) || pixelZ < 0 || pixelZ > (HEIGHT-1))
  115.                 continue;
  116.        
  117.        
  118.             int color = colorLookup(w, c, x, z);
  119.             int diff = ((c.getHeightValue(x, z)-72));
  120.             int red = (color & 0xff0000) + (diff << 16);
  121.             if(red > 0xff0000)
  122.                 red = 0xff0000;
  123.             else if(red < 0)
  124.                 red = 0;
  125.             int green = (color & 0x00ff00) + (diff << 8);
  126.             if(green > 0x00ff00)
  127.                 green = 0x00ff00;
  128.             else if (green < 0)
  129.                 green = 0;
  130.             int blue = (color & 0x0000ff) + diff;
  131.             if(blue > 0x0000ff)
  132.                 blue = 0x0000ff;
  133.             else if (blue < 0)
  134.                 blue = 0;
  135.             color = red | green | blue;
  136.            
  137.             day.setRGB(pixelX, pixelZ, color);
  138.         }
  139.     }
  140.     }catch(Exception e)
  141.     {
  142.         try{
  143.         FileOutputStream outFile = new FileOutputStream("C:\\Users\\Matthew\\Desktop\\a.txt", true);
  144.         PrintStream out = new PrintStream(outFile);
  145.         e.printStackTrace(out);
  146.         out.close();
  147.         }
  148.         catch(Exception e2)
  149.         {
  150.             e2.printStackTrace();
  151.         }
  152.     }
  153.    
  154.     if(new Date().getTime() - lastSave.getTime() >= 180000)
  155.     {
  156.         saveExisting();
  157.         lastSave = new Date();
  158.     }
  159. }
  160.  
  161. private int colorLookup(World w, Chunk c, int x, int z)
  162. {
  163.     int ret = 0;
  164.  
  165.     int y = c.getHeightValue(x, z);
  166.     if(y >= 128)
  167.         y = 127;
  168.     else if(y <= 0)
  169.         y = 1;
  170.     int aboveId = c.getBlockID(x, y, z);
  171.     int id = c.getBlockID(x, y -1 , z);
  172.     int damage = c.data.getNibble(x, y -1, z);
  173.    
  174.     switch(aboveId)
  175.     {
  176.         case 37: //yellow flower
  177.             ret = 0xf1f902;
  178.             break;
  179.         case 38: //red flower
  180.             ret = 0xf7070f;
  181.             break;
  182.         case 54: //chest
  183.             ret = 0x8e6525;
  184.             break;
  185.         case 78: //snow cover
  186.             ret = 0xf1fcfc;
  187.             break;
  188.         case 81: //cactus
  189.             ret = 0x0b5715;
  190.             break;
  191.         case 83: //sugar cane
  192.             ret = 0xa0e080;
  193.             break;
  194.         case 85: //fence
  195.         case 107:
  196.             ret = 0xa08250;
  197.             break;
  198.         case 111: //lily pad
  199.             ret = 0x13621c;
  200.             break;
  201.         case 113: //nether fence
  202.             ret = 0x2d171b;
  203.         default:
  204.             ret = 0;
  205.             break;
  206.     }
  207.    
  208.     if(ret != 0)
  209.         return ret;
  210.    
  211.     if(id == 2) //grass
  212.     {
  213.         WorldChunkManager mgmt = w.getWorldChunkManager();
  214.         float temperature = mgmt.func_35554_b(c.xPosition*16 + x, 64, c.zPosition*16 + z);
  215.         float humidity = mgmt.func_35558_c(c.xPosition*16, c.zPosition);
  216.         return ColorizerGrass.getGrassColor(temperature, humidity) - 0x171717;
  217.     }
  218.     /*else if(id == 8 || id == 9) //water
  219.     {
  220.         int seaFloor = 0;
  221.         int depth = 0;
  222.         int floorColor = 0;
  223.         int i = y - 1;
  224.         while(i > 0)
  225.         {
  226.             seaFloor = c.getBlockID(x, i, z);
  227.             if(seaFloor == 8 || seaFloor == 9)
  228.                 depth++;
  229.             else
  230.             {
  231.                 floorColor =  rawColorLookup(seaFloor, c.data.getNibble(x, i, z));
  232.                 break;
  233.             }
  234.             i--;
  235.         }
  236.         double opacity = ((double)depth)/7.0;
  237.         if(opacity > 1.0)
  238.             opacity = 1.0;
  239.         int r = floorColor & 0xff0000;
  240.         int g = floorColor & 0x00ff00;
  241.         int b = floorColor & 0x0000ff;
  242.         r = (int)((((double)0x2a0000) * opacity) + ((1.0-opacity) * ((double)r)));
  243.         g = (int)((((double)0x005f00) * opacity) + ((1.0-opacity) * ((double)g)));
  244.         b = (int)((((double)0x0000ff) * opacity) + ((1.0-opacity) * ((double)b)));
  245.         if(r > 0xff0000)
  246.             r = 0xff0000;
  247.         else if(r < 0)
  248.             r = 0;
  249.         if(g > 0x00ff00)
  250.             g = 0x00ff00;
  251.         else if(g < 0)
  252.             g = 0;
  253.         if(b > 0x0000ff)
  254.             b = 0x0000ff;
  255.         else if(r < 0)
  256.             b = 0;
  257.         return r | g | b;
  258.     }   */
  259.     else
  260.         return rawColorLookup(id, damage);
  261. }
  262.  
  263. private int rawColorLookup(int id, int damage)
  264. {
  265.     int ret = 0;
  266.    
  267.     switch(id)
  268.     {
  269.         case 1: //stone
  270.             ret = 0x7e7e7e;
  271.             break;
  272.         case 2: //grass
  273.             ret = 0x62a238;
  274.             break;
  275.         case 3: //dirt
  276.             ret = 0x866043;
  277.             break;
  278.         case 4: //cobble
  279.         case 67:
  280.             ret = 0x7c7c7c;
  281.             break;
  282.         case 5: //planks
  283.         case 53:
  284.             ret = 0xa08250;
  285.             break;
  286.         case 7: //bedrock
  287.             ret = 0x555555;
  288.             break;
  289.         case 8: //water
  290.         case 9:        
  291.             ret = 0x2a5fff;
  292.             break;
  293.         case 10: //lava
  294.         case 11:
  295.             ret = 0xf74700;
  296.             break;
  297.         case 12: //sand
  298.             ret = 0xdbd3a0;
  299.             break;
  300.         case 13: //gravel
  301.             ret = 0x857d7d;
  302.             break;
  303.         case 14: //gold ore
  304.             ret = 0x928e7d;
  305.             break;
  306.         case 15: //iron ore
  307.             ret = 0x89837f;
  308.             break;
  309.         case 16: //coal ore
  310.             ret = 0x727272;
  311.             break;
  312.         case 17: //log
  313.             ret = 0xa38452;
  314.             break;
  315.         case 18: //
  316.             if(damage == 1) //pine
  317.                 ret = 0x2d472d;
  318.             else if(damage == 2) //birch
  319.                 ret = 0x074b36;
  320.             else
  321.                 ret = 0x2c5619;
  322.             break;
  323.         case 19: //sponge
  324.             ret = 0xb5b538;
  325.             break;
  326.         case 21: //lapis ore
  327.             ret = 0x636f88;
  328.             break;
  329.         case 22: //lapis block
  330.             ret = 0x1d46a6;
  331.             break;
  332.         case 23: //dispenser
  333.             ret = 0x676767;
  334.             break;
  335.         case 24: //sandstone
  336.             ret = 0xdad29f;
  337.             break;
  338.         case 25: //noteblock
  339.             ret = 0x6c4734;
  340.             break;
  341.         case 29: //sticky piston
  342.             ret = 0x8d9462;
  343.             break;
  344.         case 33: //piston
  345.             ret = 0x9b8157;
  346.             break;
  347.         case 35: //wool
  348.             switch (damage)
  349.             {
  350.                 case 1: //orange
  351.                     ret = 0xea8037;
  352.                     break;
  353.                 case 2: //magenta
  354.                     ret = 0xbf4cc9;
  355.                     break;
  356.                 case 3: //light blue
  357.                     ret = 0x688bd4;
  358.                     break;
  359.                 case 4: //yellow
  360.                     ret = 0xc2b51c;
  361.                     break;
  362.                 case 5: //lime green
  363.                     ret = 0x3bbd30;
  364.                     break;
  365.                 case 6: //pink
  366.                     ret = 0xd9849b;
  367.                     break;
  368.                 case 7: //dark gray
  369.                     ret = 0x434343;
  370.                     break;
  371.                 case 8: //light gray
  372.                     ret = 0x9ea6a6;
  373.                     break;
  374.                 case 9: //cyan
  375.                     ret = 0x277596;
  376.                     break;
  377.                 case 10: //purple
  378.                     ret = 0x8136c4;
  379.                     break;
  380.                 case 11: //blue
  381.                     ret = 0x27339a;
  382.                     break;
  383.                 case 12: //brown
  384.                     ret = 0x56331c;
  385.                     break;
  386.                 case 13: //green
  387.                     ret = 0x384d18;
  388.                     break;
  389.                 case 14: //red
  390.                     ret = 0xa42d29;
  391.                     break;
  392.                 case 15: //black
  393.                     ret = 0x1b1717;
  394.                     break;
  395.                 default: //white
  396.                     ret = 0xdfdfdf;
  397.                     break;
  398.             }
  399.             break;
  400.         case 41: //gold block
  401.             ret = 0xfbf152;
  402.             break;
  403.         case 42: //iron block
  404.             ret = 0xe0e0e0;
  405.             break;
  406.         case 43: //slabs
  407.         case 44:
  408.             switch(damage)
  409.             {
  410.                 case 1: //sandstone
  411.                     ret = 0xdad29f;
  412.                     break;
  413.                 case 2: //wood
  414.                     ret = 0xa08250;
  415.                     break;
  416.                 case 3: //cobble
  417.                     ret = 0x7c7c7c;
  418.                     break;
  419.                 case 4: //brick
  420.                     ret = 0x916052;
  421.                     break;
  422.                 case 5: //stone brick
  423.                     ret = 0x7d7d7d;
  424.                     break;
  425.                 default: //stone
  426.                     ret = 0xa3a3a3;
  427.                     break;
  428.             }
  429.             break;
  430.         case 45: //brick
  431.         case 108:
  432.             ret = 0x916052;
  433.             break;
  434.         case 46: //tnt
  435.             ret = 0xad5238;
  436.             break;
  437.         case 47: //bookshelve
  438.             ret = 0xa08250;
  439.             break;
  440.         case 48: //mossy cobble
  441.             ret = 0x697b69;
  442.             break;
  443.         case 49: //obsidian
  444.             ret = 0x15131f;
  445.             break;
  446.         case 54: //chest
  447.             ret = 0x8e6525;
  448.         case 56: //diamond ore
  449.             ret = 0x828f92;
  450.             break;
  451.         case 57: //diamond block
  452.             ret = 0x6fdfda;
  453.             break;
  454.         case 58: //workbench
  455.             ret = 0x764e2f;
  456.             break;
  457.         case 60: //farmland
  458.             ret = 0x724b2d;
  459.             break;
  460.         case 61: //furnace
  461.         case 62:
  462.             ret = 0x676767;
  463.             break;
  464.         case 73: //redstone ore
  465.         case 74:
  466.             ret = 0x866969;
  467.             break;
  468.         case 80: //snow block
  469.             ret = 0xf1fcfc;
  470.             break;
  471.         case 79: //ice
  472.             ret = 0x7eaeff;
  473.             break;
  474.         case 82: //clay
  475.             ret = 0x9fa4b1;
  476.             break;
  477.         case 84: //jukebox
  478.             ret = 0x734d39;
  479.             break;
  480.         case 86: //pumpkin
  481.         case 91:
  482.             ret = 0xc27816;
  483.             break;
  484.         case 87: //netherrak
  485.             ret = 0x703635;
  486.             break;
  487.         case 88: //soul sand
  488.             ret = 0x543f33;
  489.             break;
  490.         case 89: //glowstone
  491.             ret = 0x927848;
  492.             break;
  493.         case 98: //stone brick
  494.         case 109:
  495.             ret = 0x7d7d7d;
  496.             break;
  497.         case 99: //huge brown mushroom
  498.             ret = 0x8d6a53;
  499.             break;
  500.         case 100: //huge red mushroom
  501.             ret = 0xb72725;
  502.             break;
  503.         case 103: //melon
  504.             ret = 0x969925;
  505.             break;
  506.         case 110: //mycelium
  507.             ret = 0x6f6469;
  508.             break;
  509.         case 112: //nether brick
  510.         case 114:
  511.             ret = 0x2d171b;
  512.             break;
  513.         case 121: //end stone
  514.             ret = 0xdddfa5;
  515.             break;
  516.         default:
  517.             ret = 0x000000;
  518.             break;
  519.     }
  520.     return ret;
  521. }
  522.  
  523. private int convertX(int chunkX, int x)
  524. {
  525.     return (chunkX*16) + x + (HEIGHT/2);
  526. }
  527.  
  528. private int convertZ(int chunkZ, int z)
  529. {
  530.     return (chunkZ*16) + z + (WIDTH/2);
  531. }
  532.  
  533. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement