--- a/net/minecraft/client/particle/DiggingParticle.java
+++ b/net/minecraft/client/particle/DiggingParticle.java
@@ -36,6 +36,7 @@
    }
 
    public DiggingParticle func_174846_a(BlockPos p_174846_1_) {
+      updateSprite(p_174846_1_);
       this.field_181019_az = p_174846_1_;
       if (this.field_174847_a.func_203425_a(Blocks.field_196658_i)) {
          return this;
@@ -92,7 +93,13 @@
    public static class Factory implements IParticleFactory<BlockParticleData> {
       public Particle func_199234_a(BlockParticleData p_199234_1_, ClientWorld p_199234_2_, double p_199234_3_, double p_199234_5_, double p_199234_7_, double p_199234_9_, double p_199234_11_, double p_199234_13_) {
          BlockState blockstate = p_199234_1_.func_197584_c();
-         return !blockstate.func_196958_f() && !blockstate.func_203425_a(Blocks.field_196603_bb) ? (new DiggingParticle(p_199234_2_, p_199234_3_, p_199234_5_, p_199234_7_, p_199234_9_, p_199234_11_, p_199234_13_, blockstate)).func_174845_l() : null;
+         return !blockstate.func_196958_f() && !blockstate.func_203425_a(Blocks.field_196603_bb) ? (new DiggingParticle(p_199234_2_, p_199234_3_, p_199234_5_, p_199234_7_, p_199234_9_, p_199234_11_, p_199234_13_, blockstate)).func_174845_l().updateSprite(p_199234_1_.getPos()) : null;
       }
    }
+
+   private Particle updateSprite(BlockPos pos) { //FORGE: we cannot assume that the x y z of the particles match the block pos of the block.
+      if (pos != null) // There are cases where we are not able to obtain the correct source pos, and need to fallback to the non-model data version
+         this.func_217567_a(Minecraft.func_71410_x().func_175602_ab().func_175023_a().getTexture(field_174847_a, field_187122_b, pos));
+      return this;
+   }
 }
