--- a/net/minecraft/client/renderer/model/MultipartBakedModel.java
+++ b/net/minecraft/client/renderer/model/MultipartBakedModel.java
@@ -18,7 +18,7 @@
 import org.apache.commons.lang3.tuple.Pair;
 
 @OnlyIn(Dist.CLIENT)
-public class MultipartBakedModel implements IBakedModel {
+public class MultipartBakedModel implements net.minecraftforge.client.model.data.IDynamicBakedModel {
    private final List<Pair<Predicate<BlockState>, IBakedModel>> field_188626_f;
    protected final boolean field_188621_a;
    protected final boolean field_188622_b;
@@ -27,10 +27,12 @@
    protected final ItemCameraTransforms field_188624_d;
    protected final ItemOverrideList field_188625_e;
    private final Map<BlockState, BitSet> field_210277_g = new Object2ObjectOpenCustomHashMap<>(Util.func_212443_g());
+   private final IBakedModel defaultModel;
 
    public MultipartBakedModel(List<Pair<Predicate<BlockState>, IBakedModel>> p_i48273_1_) {
       this.field_188626_f = p_i48273_1_;
       IBakedModel ibakedmodel = p_i48273_1_.iterator().next().getRight();
+      this.defaultModel = ibakedmodel;
       this.field_188621_a = ibakedmodel.func_177555_b();
       this.field_188622_b = ibakedmodel.func_177556_c();
       this.field_230185_c_ = ibakedmodel.func_230044_c_();
@@ -39,7 +41,8 @@
       this.field_188625_e = ibakedmodel.func_188617_f();
    }
 
-   public List<BakedQuad> func_200117_a(@Nullable BlockState p_200117_1_, @Nullable Direction p_200117_2_, Random p_200117_3_) {
+   // FORGE: Implement our overloads (here and below) so child models can have custom logic 
+   public List<BakedQuad> getQuads(@Nullable BlockState p_200117_1_, @Nullable Direction p_200117_2_, Random p_200117_3_, net.minecraftforge.client.model.data.IModelData modelData) {
       if (p_200117_1_ == null) {
          return Collections.emptyList();
       } else {
@@ -62,7 +65,7 @@
 
          for(int j = 0; j < bitset.length(); ++j) {
             if (bitset.get(j)) {
-               list.addAll(this.field_188626_f.get(j).getRight().func_200117_a(p_200117_1_, p_200117_2_, new Random(k)));
+               list.addAll(this.field_188626_f.get(j).getRight().getQuads(p_200117_1_, p_200117_2_, new Random(k), modelData));
             }
          }
 
@@ -74,6 +77,10 @@
       return this.field_188621_a;
    }
 
+   public boolean isAmbientOcclusion(BlockState state) {
+      return this.defaultModel.isAmbientOcclusion(state);
+   }
+
    public boolean func_177556_c() {
       return this.field_188622_b;
    }
@@ -86,14 +93,24 @@
       return false;
    }
 
+   @Deprecated
    public TextureAtlasSprite func_177554_e() {
       return this.field_188623_c;
    }
 
+   public TextureAtlasSprite getParticleTexture(net.minecraftforge.client.model.data.IModelData modelData) {
+      return this.defaultModel.getParticleTexture(modelData);
+   }
+
+   @Deprecated
    public ItemCameraTransforms func_177552_f() {
       return this.field_188624_d;
    }
 
+   public IBakedModel handlePerspective(net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType transformType, com.mojang.blaze3d.matrix.MatrixStack matrixStack) {
+      return this.defaultModel.handlePerspective(transformType, matrixStack);
+   }
+
    public ItemOverrideList func_188617_f() {
       return this.field_188625_e;
    }
