File size: 5,215 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package net.minecraft.client.resources.model;

import javax.annotation.Nullable;
import net.minecraft.client.renderer.block.model.ItemTransform;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.renderer.block.model.TextureSlots;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@OnlyIn(Dist.CLIENT)
public interface UnbakedModel extends ResolvableModel {
    boolean DEFAULT_AMBIENT_OCCLUSION = true;
    UnbakedModel.GuiLight DEFAULT_GUI_LIGHT = UnbakedModel.GuiLight.SIDE;

    BakedModel bake(TextureSlots p_376037_, ModelBaker p_250133_, ModelState p_119536_, boolean p_378145_, boolean p_377763_, ItemTransforms p_375499_);

    @Nullable
    default Boolean getAmbientOcclusion() {
        return null;
    }

    @Nullable
    default UnbakedModel.GuiLight getGuiLight() {
        return null;
    }

    @Nullable
    default ItemTransforms getTransforms() {
        return null;
    }

    default TextureSlots.Data getTextureSlots() {
        return TextureSlots.Data.EMPTY;
    }

    @Nullable
    default UnbakedModel getParent() {
        return null;
    }

    static BakedModel bakeWithTopModelValues(UnbakedModel p_377580_, ModelBaker p_375760_, ModelState p_377199_) {
        TextureSlots textureslots = getTopTextureSlots(p_377580_, p_375760_.rootName());
        boolean flag = getTopAmbientOcclusion(p_377580_);
        boolean flag1 = getTopGuiLight(p_377580_).lightLikeBlock();
        ItemTransforms itemtransforms = getTopTransforms(p_377580_);
        return p_377580_.bake(textureslots, p_375760_, p_377199_, flag, flag1, itemtransforms);
    }

    static TextureSlots getTopTextureSlots(UnbakedModel p_375427_, ModelDebugName p_378400_) {
        TextureSlots.Resolver textureslots$resolver = new TextureSlots.Resolver();

        while (p_375427_ != null) {
            textureslots$resolver.addLast(p_375427_.getTextureSlots());
            p_375427_ = p_375427_.getParent();
        }

        return textureslots$resolver.resolve(p_378400_);
    }

    static boolean getTopAmbientOcclusion(UnbakedModel p_377158_) {
        while (p_377158_ != null) {
            Boolean obool = p_377158_.getAmbientOcclusion();
            if (obool != null) {
                return obool;
            }

            p_377158_ = p_377158_.getParent();
        }

        return true;
    }

    static UnbakedModel.GuiLight getTopGuiLight(UnbakedModel p_375581_) {
        while (p_375581_ != null) {
            UnbakedModel.GuiLight unbakedmodel$guilight = p_375581_.getGuiLight();
            if (unbakedmodel$guilight != null) {
                return unbakedmodel$guilight;
            }

            p_375581_ = p_375581_.getParent();
        }

        return DEFAULT_GUI_LIGHT;
    }

    static ItemTransform getTopTransform(UnbakedModel p_377137_, ItemDisplayContext p_376495_) {
        while (p_377137_ != null) {
            ItemTransforms itemtransforms = p_377137_.getTransforms();
            if (itemtransforms != null) {
                ItemTransform itemtransform = itemtransforms.getTransform(p_376495_);
                if (itemtransform != ItemTransform.NO_TRANSFORM) {
                    return itemtransform;
                }
            }

            p_377137_ = p_377137_.getParent();
        }

        return ItemTransform.NO_TRANSFORM;
    }

    static ItemTransforms getTopTransforms(UnbakedModel p_377896_) {
        ItemTransform itemtransform = getTopTransform(p_377896_, ItemDisplayContext.THIRD_PERSON_LEFT_HAND);
        ItemTransform itemtransform1 = getTopTransform(p_377896_, ItemDisplayContext.THIRD_PERSON_RIGHT_HAND);
        ItemTransform itemtransform2 = getTopTransform(p_377896_, ItemDisplayContext.FIRST_PERSON_LEFT_HAND);
        ItemTransform itemtransform3 = getTopTransform(p_377896_, ItemDisplayContext.FIRST_PERSON_RIGHT_HAND);
        ItemTransform itemtransform4 = getTopTransform(p_377896_, ItemDisplayContext.HEAD);
        ItemTransform itemtransform5 = getTopTransform(p_377896_, ItemDisplayContext.GUI);
        ItemTransform itemtransform6 = getTopTransform(p_377896_, ItemDisplayContext.GROUND);
        ItemTransform itemtransform7 = getTopTransform(p_377896_, ItemDisplayContext.FIXED);
        return new ItemTransforms(itemtransform, itemtransform1, itemtransform2, itemtransform3, itemtransform4, itemtransform5, itemtransform6, itemtransform7);
    }

    @OnlyIn(Dist.CLIENT)
    public static enum GuiLight {
        FRONT("front"),
        SIDE("side");

        private final String name;

        private GuiLight(final String p_377886_) {
            this.name = p_377886_;
        }

        public static UnbakedModel.GuiLight getByName(String p_378162_) {
            for (UnbakedModel.GuiLight unbakedmodel$guilight : values()) {
                if (unbakedmodel$guilight.name.equals(p_378162_)) {
                    return unbakedmodel$guilight;
                }
            }

            throw new IllegalArgumentException("Invalid gui light: " + p_378162_);
        }

        public boolean lightLikeBlock() {
            return this == SIDE;
        }
    }
}