--- ../src-base/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.java
+++ ../src-work/minecraft/net/minecraft/world/gen/structure/StructureVillagePieces.java
@@ -25,6 +25,11 @@
 import net.minecraft.world.World;
 import net.minecraft.world.biome.BiomeGenBase;
 import net.minecraft.world.biome.WorldChunkManager;
+import net.minecraftforge.fml.common.eventhandler.Event.Result;
+import net.minecraftforge.common.ChestGenHooks;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.terraingen.BiomeEvent;
+import static net.minecraftforge.common.ChestGenHooks.*;
 
 public class StructureVillagePieces
 {
@@ -848,6 +853,11 @@
 
             public House2() {}
 
+            static
+            {
+                ChestGenHooks.init(VILLAGE_BLACKSMITH, field_74918_a, 3, 8);
+            }
+
             public House2(StructureVillagePieces.Start p_i45563_1_, int p_i45563_2_, Random p_i45563_3_, StructureBoundingBox p_i45563_4_, EnumFacing p_i45563_5_)
             {
                 super(p_i45563_1_, p_i45563_2_);
@@ -926,7 +936,7 @@
                 if (!this.field_74917_c && p_74875_3_.func_175898_b(new BlockPos(this.func_74865_a(5, 5), this.func_74862_a(1), this.func_74873_b(5, 5))))
                 {
                     this.field_74917_c = true;
-                    this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 5, 1, 5, field_74918_a, 3 + p_74875_2_.nextInt(6));
+                    this.func_180778_a(p_74875_1_, p_74875_3_, p_74875_2_, 5, 1, 5, ChestGenHooks.getItems(VILLAGE_BLACKSMITH, p_74875_2_), ChestGenHooks.getCount(VILLAGE_BLACKSMITH, p_74875_2_));
                 }
 
                 int i;
@@ -1428,6 +1438,7 @@
             public List field_74932_i = Lists.newArrayList();
             public List field_74930_j = Lists.newArrayList();
             private static final String __OBFID = "CL_00000527";
+            public BiomeGenBase biome;
 
             public Start() {}
 
@@ -1439,6 +1450,7 @@
                 this.field_74928_c = p_i2104_7_;
                 BiomeGenBase biomegenbase = p_i2104_1_.func_180300_a(new BlockPos(p_i2104_4_, 0, p_i2104_5_), BiomeGenBase.field_180279_ad);
                 this.field_74927_b = biomegenbase == BiomeGenBase.field_76769_d || biomegenbase == BiomeGenBase.field_76786_s;
+                this.biome = biomegenbase;
                 this.func_175846_a(this.field_74927_b);
             }
 
@@ -1546,6 +1558,7 @@
             private int field_74896_a;
             private boolean field_143014_b;
             private static final String __OBFID = "CL_00000531";
+            private StructureVillagePieces.Start startPiece;
 
             public Village() {}
 
@@ -1556,6 +1569,7 @@
                 if (p_i2107_1_ != null)
                 {
                     this.field_143014_b = p_i2107_1_.field_74927_b;
+                    startPiece = p_i2107_1_;
                 }
             }
 
@@ -1679,6 +1693,9 @@
 
             protected IBlockState func_175847_a(IBlockState p_175847_1_)
             {
+                BiomeEvent.GetVillageBlockID event = new BiomeEvent.GetVillageBlockID(startPiece == null ? null : startPiece.biome, p_175847_1_);
+                MinecraftForge.TERRAIN_GEN_BUS.post(event);
+                if (event.getResult() == Result.DENY) return event.replacement;
                 if (this.field_143014_b)
                 {
                     if (p_175847_1_.func_177230_c() == Blocks.field_150364_r || p_175847_1_.func_177230_c() == Blocks.field_150363_s)
