Advertisement
drackiseries

A New Tree

Jul 27th, 2012
597
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.89 KB | None | 0 0
  1. MOD_ FILE CONTENTS:
  2.  
  3.  
  4. package net.minecraft.src;
  5.  
  6. import java.util.Random;
  7.  
  8. public class mod_tutorial extends BaseMod
  9. {
  10.    
  11.    
  12.    
  13.     //Textures
  14.  
  15.     public static int BloodLogTop = ModLoader.addOverride("/terrain.png","/Blocks/bloodlogtop.png");
  16.     public static int BloodLogSide = ModLoader.addOverride("/terrain.png","/Blocks/bloodlogside.png");
  17.     public static int LeavesBlood = ModLoader.addOverride("/terrain.png","/Blocks/bloodleaves.png");
  18.    
  19.     //Blocks
  20.    
  21.     //Tree Blocks
  22.    
  23.     public static final Block BloodLog = (new BlockBloodLog(212)).setHardness(2.0F).setStepSound(Block.soundWoodFootstep).setBlockName("BloodLog").setRequiresSelfNotify();
  24.     public static final Block BloodLeaves = (new BlockBloodLeaves(213,ModLoader.addOverride("/terrain.png","/Blocks/bloodleaves.png"))).setHardness(0.2F).setLightOpacity(1).setStepSound(Block.soundGrassFootstep).setRequiresSelfNotify().setBlockName("BloodLeaves");
  25.  
  26.     //Very Complex Blocks
  27.    
  28.     //Items
  29.    
  30.     public void load()
  31.     {
  32.        
  33.         //Registering
  34.        
  35.         ModLoader.registerBlock(BloodLeaves);
  36.         ModLoader.registerBlock(BloodLog);
  37.        
  38.         //Adding names
  39.        
  40.         ModLoader.addName(BloodLog, "Blood Log");
  41.         ModLoader.addName(BloodLeaves, "Leaves");
  42.        
  43.         //Tile Entity
  44.        
  45.         //Biomes
  46.        
  47.         ModLoader.addBiome(BiomeGenBase.souldesert);
  48.        
  49.         //Crafting Recipes
  50.        
  51.         //Smelting Recipes
  52.        
  53.         //Shapeless Recipes
  54.     }
  55.    
  56.     public String getVersion()
  57.     {
  58.         return "1.2.5";
  59.     }
  60. }
  61.  
  62. WORLDGENBLOODTREES FILE:
  63.  
  64. package net.minecraft.src;
  65.  
  66. import java.util.Random;
  67.  
  68. public class WorldGenBloodTrees extends WorldGenerator
  69. {
  70.     private final int field_48202_a;
  71.     private final boolean field_48200_b;
  72.     private final int field_48201_c;
  73.     private final int field_48199_d;
  74.  
  75.     public WorldGenBloodTrees(boolean par1)
  76.     {
  77.         this(par1, 4, 0, 0, false);
  78.     }
  79.  
  80.     public WorldGenBloodTrees(boolean par1, int par2, int par3, int par4, boolean par5)
  81.     {
  82.         super(par1);
  83.         field_48202_a = par2;
  84.         field_48201_c = par3;
  85.         field_48199_d = par4;
  86.         field_48200_b = par5;
  87.     }
  88.  
  89.     public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
  90.     {
  91.         int i = par2Random.nextInt(3) + field_48202_a;
  92.         boolean flag = true;
  93.  
  94.         if (par4 < 1 || par4 + i + 1 > 256)
  95.         {
  96.             return false;
  97.         }
  98.  
  99.         for (int j = par4; j <= par4 + 1 + i; j++)
  100.         {
  101.             byte byte0 = 1;
  102.  
  103.             if (j == par4)
  104.             {
  105.                 byte0 = 0;
  106.             }
  107.  
  108.             if (j >= (par4 + 1 + i) - 2)
  109.             {
  110.                 byte0 = 2;
  111.             }
  112.  
  113.             for (int l = par3 - byte0; l <= par3 + byte0 && flag; l++)
  114.             {
  115.                 for (int j1 = par5 - byte0; j1 <= par5 + byte0 && flag; j1++)
  116.                 {
  117.                     if (j >= 0 && j < 256)
  118.                     {
  119.                         int j2 = par1World.getBlockId(l, j, j1);
  120.  
  121.                         if (j2 != 0 && j2 != mod_tutorial.BloodLeaves.blockID && j2 != Block.grass.blockID && j2 != Block.dirt.blockID && j2 != mod_tutorial.BloodLog.blockID)
  122.                         {
  123.                             flag = false;
  124.                         }
  125.                     }
  126.                     else
  127.                     {
  128.                         flag = false;
  129.                     }
  130.                 }
  131.             }
  132.         }
  133.  
  134.         if (!flag)
  135.         {
  136.             return false;
  137.         }
  138.  
  139.         int k = par1World.getBlockId(par3, par4 - 1, par5);
  140.  
  141.         if (k != Block.slowSand.blockID)
  142.         {
  143.             return false;
  144.         }
  145.  
  146.         func_50073_a(par1World, par3, par4 - 1, par5, Block.slowSand.blockID);
  147.         byte byte1 = 3;
  148.         int i1 = 0;
  149.  
  150.         for (int k1 = (par4 - byte1) + i; k1 <= par4 + i; k1++)
  151.         {
  152.             int k2 = k1 - (par4 + i);
  153.             int j3 = (i1 + 1) - k2 / 2;
  154.  
  155.             for (int l3 = par3 - j3; l3 <= par3 + j3; l3++)
  156.             {
  157.                 int j4 = l3 - par3;
  158.  
  159.                 for (int l4 = par5 - j3; l4 <= par5 + j3; l4++)
  160.                 {
  161.                     int i5 = l4 - par5;
  162.  
  163.                     if ((Math.abs(j4) != j3 || Math.abs(i5) != j3 || par2Random.nextInt(2) != 0 && k2 != 0) && !Block.opaqueCubeLookup[par1World.getBlockId(l3, k1, l4)])
  164.                     {
  165.                         setBlockAndMetadata(par1World, l3, k1, l4, mod_tutorial.BloodLeaves.blockID, field_48199_d);
  166.                     }
  167.                 }
  168.             }
  169.         }
  170.  
  171.         for (int l1 = 0; l1 < i; l1++)
  172.         {
  173.             int l2 = par1World.getBlockId(par3, par4 + l1, par5);
  174.  
  175.             if (l2 != 0 && l2 != mod_tutorial.BloodLeaves.blockID)
  176.             {
  177.                 continue;
  178.             }
  179.  
  180.             setBlockAndMetadata(par1World, par3, par4 + l1, par5, mod_tutorial.BloodLog.blockID, field_48201_c);
  181.  
  182.             if (!field_48200_b || l1 <= 0)
  183.             {
  184.                 continue;
  185.             }
  186.  
  187.             if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 - 1, par4 + l1, par5))
  188.             {
  189.                 setBlockAndMetadata(par1World, par3 - 1, par4 + l1, par5, Block.vine.blockID, 8);
  190.             }
  191.  
  192.             if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3 + 1, par4 + l1, par5))
  193.             {
  194.                 setBlockAndMetadata(par1World, par3 + 1, par4 + l1, par5, Block.vine.blockID, 2);
  195.             }
  196.  
  197.             if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + l1, par5 - 1))
  198.             {
  199.                 setBlockAndMetadata(par1World, par3, par4 + l1, par5 - 1, Block.vine.blockID, 1);
  200.             }
  201.  
  202.             if (par2Random.nextInt(3) > 0 && par1World.isAirBlock(par3, par4 + l1, par5 + 1))
  203.             {
  204.                 setBlockAndMetadata(par1World, par3, par4 + l1, par5 + 1, Block.vine.blockID, 4);
  205.             }
  206.         }
  207.  
  208.         if (field_48200_b)
  209.         {
  210.             for (int i2 = (par4 - 3) + i; i2 <= par4 + i; i2++)
  211.             {
  212.                 int i3 = i2 - (par4 + i);
  213.                 int k3 = 2 - i3 / 2;
  214.  
  215.                 for (int i4 = par3 - k3; i4 <= par3 + k3; i4++)
  216.                 {
  217.                     for (int k4 = par5 - k3; k4 <= par5 + k3; k4++)
  218.                     {
  219.                         if (par1World.getBlockId(i4, i2, k4) != mod_tutorial.BloodLeaves.blockID)
  220.                         {
  221.                             continue;
  222.                         }
  223.  
  224.                         if (par2Random.nextInt(4) == 0 && par1World.getBlockId(i4 - 1, i2, k4) == 0)
  225.                         {
  226.                             func_48198_a(par1World, i4 - 1, i2, k4, 8);
  227.                         }
  228.  
  229.                         if (par2Random.nextInt(4) == 0 && par1World.getBlockId(i4 + 1, i2, k4) == 0)
  230.                         {
  231.                             func_48198_a(par1World, i4 + 1, i2, k4, 2);
  232.                         }
  233.  
  234.  
  235.                         if (par2Random.nextInt(4) == 0 && par1World.getBlockId(i4, i2, k4 - 1) == 0)
  236.                         {
  237.                             func_48198_a(par1World, i4, i2, k4 - 1, 1);
  238.                         }
  239.  
  240.                         if (par2Random.nextInt(4) == 0 && par1World.getBlockId(i4, i2, k4 + 1) == 0)
  241.                         {
  242.                             func_48198_a(par1World, i4, i2, k4 + 1, 4);
  243.                         }
  244.                     }
  245.                 }
  246.             }
  247.         }
  248.  
  249.         return true;
  250.     }
  251.  
  252.     private void func_48198_a(World par1World, int par2, int par3, int par4, int par5)
  253.     {
  254.         setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);
  255.  
  256.         for (int i = 4; par1World.getBlockId(par2, --par3, par4) == 0 && i > 0; i--)
  257.         {
  258.             setBlockAndMetadata(par1World, par2, par3, par4, Block.vine.blockID, par5);
  259.         }
  260.     }
  261. }
  262.  
  263. BLOCKLEAVES (***** WITH BUG FIX *****)
  264.  
  265. package net.minecraft.src;
  266.  
  267. import java.util.Random;
  268.  
  269. public class BlockBloodLeaves extends BlockBreakable
  270. {
  271.     public BlockBloodLeaves(int par1, int par2)
  272.     {
  273.         super(par1,par2,Material.leaves,true);
  274.     }
  275.    
  276.     public int getRenderBlockPass()
  277.     {
  278.         return 1;
  279.     }
  280.    
  281.     public boolean renderAsNormalBlock()
  282.     {
  283.         return false;
  284.     }
  285.  
  286.     protected boolean func_50074_q()
  287.     {
  288.         return true;
  289.     }
  290.  
  291. }
  292.  
  293. BIOMEDECORATOR STUFF:
  294.  
  295. // ADD THIS OUTSIDE OF PUBLIC BIOMEDECORATOR(BiomeGenBasepar1BiomeGenBase)
  296.  protected int bloodtreeperchunk;
  297.  protected WorldGenerator bloodTreeGen;
  298.  
  299. // ADD THIS INSIDE OF PUBLIC BIOMEDECORATOR(BiomeGenBasepar1BiomeGenBase)
  300. bloodTreeGen = new WorldGenBloodTrees(true);
  301. bloodtreeperchunk = 0;
  302.  
  303.  
  304.  
  305. ADD THIS TO THE DECORATE METHOD:
  306. for(int g1 = 0; g1 < bloodtreeperchunk; g1++)
  307.         {
  308.             int g2 = chunk_X + randomGenerator.nextInt(16) + 8;
  309.             int g3 = chunk_Z + randomGenerator.nextInt(16) + 8;
  310.             bloodTreeGen.generate(currentWorld, randomGenerator, g2, currentWorld.getHeightValue(g2, g3), g3);
  311.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement