summaryrefslogtreecommitdiff
path: root/assets/minecraft/optifine/cem
diff options
context:
space:
mode:
Diffstat (limited to 'assets/minecraft/optifine/cem')
-rwxr-xr-xassets/minecraft/optifine/cem/.cat.jem265
-rwxr-xr-xassets/minecraft/optifine/cem/.villager.jem271
-rwxr-xr-xassets/minecraft/optifine/cem/.wolf.jem270
-rwxr-xr-xassets/minecraft/optifine/cem/banner.jem56
-rwxr-xr-xassets/minecraft/optifine/cem/boat.jem252
-rwxr-xr-xassets/minecraft/optifine/cem/chest.jem134
-rwxr-xr-xassets/minecraft/optifine/cem/chest.pngbin0 -> 2841 bytes
-rwxr-xr-xassets/minecraft/optifine/cem/chest_large.jem161
-rwxr-xr-xassets/minecraft/optifine/cem/chest_large.pngbin0 -> 3876 bytes
-rwxr-xr-xassets/minecraft/optifine/cem/chicken.jem159
-rwxr-xr-xassets/minecraft/optifine/cem/cod.jem167
-rwxr-xr-xassets/minecraft/optifine/cem/cow.jem220
-rwxr-xr-xassets/minecraft/optifine/cem/ender_chest.jem156
-rwxr-xr-xassets/minecraft/optifine/cem/ender_chest.properties8
-rwxr-xr-xassets/minecraft/optifine/cem/enderman.jem316
-rwxr-xr-xassets/minecraft/optifine/cem/horse.jem452
-rwxr-xr-xassets/minecraft/optifine/cem/horse_armor.jem411
-rwxr-xr-xassets/minecraft/optifine/cem/mooshroom.jem184
-rwxr-xr-xassets/minecraft/optifine/cem/pig.jem357
-rwxr-xr-xassets/minecraft/optifine/cem/pig_saddle.jem244
-rwxr-xr-xassets/minecraft/optifine/cem/puffer_fish_big.jem220
-rwxr-xr-xassets/minecraft/optifine/cem/puffer_fish_medium.jem205
-rwxr-xr-xassets/minecraft/optifine/cem/puffer_fish_small.jem114
-rwxr-xr-xassets/minecraft/optifine/cem/salmon.jem186
-rwxr-xr-xassets/minecraft/optifine/cem/sheep.jem167
-rwxr-xr-xassets/minecraft/optifine/cem/sheep_wool.jem126
-rwxr-xr-xassets/minecraft/optifine/cem/sign.jem39
-rwxr-xr-xassets/minecraft/optifine/cem/skeleton.jem145
-rwxr-xr-xassets/minecraft/optifine/cem/snow_golem.jem87
-rwxr-xr-xassets/minecraft/optifine/cem/snow_golem.pngbin0 -> 842 bytes
-rwxr-xr-xassets/minecraft/optifine/cem/stray.jem145
-rwxr-xr-xassets/minecraft/optifine/cem/trapped_chest.jem134
-rwxr-xr-xassets/minecraft/optifine/cem/trapped_chest.pngbin0 -> 2850 bytes
-rwxr-xr-xassets/minecraft/optifine/cem/trapped_chest_large.jem161
-rwxr-xr-xassets/minecraft/optifine/cem/trapped_chest_large.pngbin0 -> 3917 bytes
-rwxr-xr-xassets/minecraft/optifine/cem/tropical_fish_a.jem133
-rwxr-xr-xassets/minecraft/optifine/cem/tropical_fish_b.jem150
-rwxr-xr-xassets/minecraft/optifine/cem/tropical_fish_pattern_a.jem133
-rwxr-xr-xassets/minecraft/optifine/cem/tropical_fish_pattern_b.jem150
-rwxr-xr-xassets/minecraft/optifine/cem/wither_skeleton.jem145
-rwxr-xr-xassets/minecraft/optifine/cem/wolf_collar.jem106
41 files changed, 6629 insertions, 0 deletions
diff --git a/assets/minecraft/optifine/cem/.cat.jem b/assets/minecraft/optifine/cem/.cat.jem
new file mode 100755
index 00000000..3832acfc
--- /dev/null
+++ b/assets/minecraft/optifine/cem/.cat.jem
@@ -0,0 +1,265 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [64, 32],
4 "models": [
5 {
6 "part": "head",
7 "id": "head",
8 "invertAxis": "xy",
9 "translate": [0, -9, 9],
10 "boxes": [
11 {
12 "coordinates": [-2.5, 7, -11, 5, 4, 5],
13 "uvNorth": [5, 5, 10, 9],
14 "uvEast": [0, 5, 5, 9],
15 "uvSouth": [15, 5, 20, 9],
16 "uvWest": [10, 5, 15, 9],
17 "uvUp": [10, 5, 5, 0],
18 "uvDown": [15, 0, 10, 5]
19 },
20 {
21 "coordinates": [-1.5, 7.02, -12, 3, 2, 2],
22 "uvNorth": [2, 26, 5, 28],
23 "uvEast": [0, 26, 2, 28],
24 "uvSouth": [7, 26, 10, 28],
25 "uvWest": [5, 26, 7, 28],
26 "uvUp": [5, 26, 2, 24],
27 "uvDown": [8, 24, 5, 26]
28 },
29 {
30 "coordinates": [-2.5, 9, -11.01, 5, 1, 0],
31 "uvNorth": [14, 11, 19, 12]
32 }
33 ],
34 "submodels": [
35 {
36 "id": "ears_down",
37 "invertAxis": "xy",
38 "translate": [0, 11, -6],
39 "rotate": [-20, 0, 0],
40 "boxes": [
41 {"coordinates": [1, 0, -2, 1, 1, 2], "textureOffset": [0, 10]},
42 {"coordinates": [-2, 0, -2, 1, 1, 2], "textureOffset": [6, 10]}
43 ]
44 },
45 {
46 "id": "ears_up",
47 "invertAxis": "xy",
48 "translate": [0, 11, -9],
49 "submodels": [
50 {
51 "id": "left",
52 "invertAxis": "xy",
53 "translate": [1, 0, 0],
54 "boxes": [
55 {
56 "coordinates": [0, -1, 0, 3, 3, 0],
57 "uvNorth": [7, 29, 10, 32]
58 }
59 ]
60 },
61 {
62 "id": "right",
63 "invertAxis": "xy",
64 "translate": [-1, 0, 0],
65 "boxes": [
66 {
67 "coordinates": [-3, -1, 0, 3, 3, 0],
68 "uvNorth": [11, 29, 14, 32]
69 }
70 ]
71 }
72 ]
73 },
74 {
75 "id": "left_pupil",
76 "invertAxis": "xy",
77 "translate": [0, 0, 0],
78 "boxes": [
79 {
80 "coordinates": [0.5, 9, -11.02, 1, 1, 0],
81 "uvNorth": [15, 12, 16, 13]
82 }
83 ]
84 },
85 {
86 "id": "closed_eyes",
87 "invertAxis": "xy",
88 "translate": [0, 0, 0],
89 "boxes": [
90 {
91 "coordinates": [-2.5, 9, -10.02, 5, 1, 0],
92 "uvNorth": [14, 10, 19, 11]
93 }
94 ]
95 },
96 {
97 "id": "right_pupil",
98 "invertAxis": "xy",
99 "translate": [0, 0, 0],
100 "boxes": [
101 {
102 "coordinates": [-1.5, 9, -11.02, 1, 1, 0],
103 "uvNorth": [17, 12, 18, 13]
104 }
105 ]
106 }
107 ]
108 },
109 {
110 "part": "body",
111 "id": "body",
112 "invertAxis": "xy",
113 "translate": [0, -12, 10],
114 "rotate": [-90, 0, 0],
115 "boxes": [
116 {
117 "coordinates": [-2, -7, -18, 4, 16, 6],
118 "uvNorth": [26, 6, 30, 22],
119 "uvEast": [20, 6, 26, 22],
120 "uvSouth": [36, 6, 40, 22],
121 "uvWest": [30, 6, 36, 22],
122 "uvUp": [30, 6, 26, 0],
123 "uvDown": [30, 0, 34, 6]
124 }
125 ],
126 "submodels": [
127 {
128 "id": "loaf",
129 "invertAxis": "xy",
130 "translate": [0, 0, 0],
131 "boxes": [
132 {
133 "coordinates": [-3, -3, -19, 6, 13, 6],
134 "uvNorth": [46, 20, 52, 32],
135 "uvEast": [40, 20, 46, 32],
136 "uvSouth": [58, 20, 64, 32],
137 "uvWest": [52, 20, 58, 32],
138 "uvUp": [52, 20, 46, 14],
139 "uvDown": [58, 14, 52, 20]
140 }
141 ]
142 }
143 ],
144 "animations": [
145 {
146 "this.rx": 0
147 }
148 ]
149 },
150 {
151 "part": "front_left_leg",
152 "id": "front_left_leg",
153 "invertAxis": "xy",
154 "translate": [1.1, -9.9, 5],
155 "boxes": [
156 {
157 "coordinates": [-2.1, -0.1, -5, 2, 10, 2],
158 "uvNorth": [44, 2, 42, 12],
159 "uvEast": [46, 2, 44, 12],
160 "uvSouth": [48, 2, 46, 12],
161 "uvWest": [42, 2, 40, 12],
162 "uvUp": [44, 2, 42, 0],
163 "uvDown": [46, 0, 44, 2]
164 }
165 ]
166 },
167 {
168 "part": "front_right_leg",
169 "id": "front_right_leg",
170 "invertAxis": "xy",
171 "translate": [-1.1, -9.9, 5],
172 "boxes": [
173 {
174 "coordinates": [0.1, -0.1, -5, 2, 10, 2],
175 "uvNorth": [42, 2, 44, 12],
176 "uvEast": [40, 2, 42, 12],
177 "uvSouth": [46, 2, 48, 12],
178 "uvWest": [44, 2, 46, 12],
179 "uvUp": [44, 2, 42, 0],
180 "uvDown": [46, 0, 44, 2]
181 }
182 ]
183 },
184 {
185 "part": "back_left_leg",
186 "id": "back_left_leg",
187 "invertAxis": "xy",
188 "translate": [1.1, -6, -5],
189 "boxes": [
190 {
191 "coordinates": [-2.1, 0, 6, 2, 6, 2],
192 "uvNorth": [12, 15, 10, 21],
193 "uvEast": [14, 15, 12, 21],
194 "uvSouth": [16, 15, 14, 21],
195 "uvWest": [10, 15, 8, 21],
196 "uvUp": [12, 15, 10, 13],
197 "uvDown": [14, 13, 12, 15]
198 }
199 ]
200 },
201 {
202 "part": "back_right_leg",
203 "id": "back_right_leg",
204 "invertAxis": "xy",
205 "translate": [-1.1, -6, -5],
206 "boxes": [
207 {
208 "coordinates": [0.1, 0, 6, 2, 6, 2],
209 "uvNorth": [10, 15, 12, 21],
210 "uvEast": [8, 15, 10, 21],
211 "uvSouth": [14, 15, 16, 21],
212 "uvWest": [12, 15, 14, 21],
213 "uvUp": [12, 15, 10, 13],
214 "uvDown": [14, 13, 12, 15]
215 }
216 ]
217 },
218 {
219 "part": "tail",
220 "id": "tail",
221 "invertAxis": "xy",
222 "translate": [0, -8.5, -8],
223 "rotate": [-90, 0, 0],
224 "boxes": [
225 {
226 "coordinates": [-0.5, 0.5, 8, 1, 8, 1],
227 "uvNorth": [1, 16, 2, 24],
228 "uvEast": [0, 16, 1, 24],
229 "uvSouth": [3, 16, 4, 24],
230 "uvWest": [2, 16, 3, 24],
231 "uvUp": [2, 16, 1, 15],
232 "uvDown": [3, 15, 2, 16]
233 }
234 ],
235 "animations": [
236 {
237 "this.rx": 0
238 }
239 ]
240 },
241 {
242 "part": "tail2",
243 "id": "tail2",
244 "invertAxis": "xy",
245 "translate": [0, -8.5, -16],
246 "rotate": [-90, 0, 0],
247 "boxes": [
248 {
249 "coordinates": [-0.5, 0.5, 16, 1, 8, 1],
250 "uvNorth": [5, 16, 6, 24],
251 "uvEast": [4, 16, 5, 24],
252 "uvSouth": [7, 16, 8, 24],
253 "uvWest": [6, 16, 7, 24],
254 "uvUp": [6, 16, 5, 15],
255 "uvDown": [7, 15, 6, 16]
256 }
257 ],
258 "animations": [
259 {
260 "this.rx": 0
261 }
262 ]
263 }
264 ]
265} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/.villager.jem b/assets/minecraft/optifine/cem/.villager.jem
new file mode 100755
index 00000000..192b0269
--- /dev/null
+++ b/assets/minecraft/optifine/cem/.villager.jem
@@ -0,0 +1,271 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [64, 64],
4 "models": [
5 {
6 "part": "head",
7 "id": "head",
8 "invertAxis": "xy",
9 "translate": [0, -24, 0],
10 "boxes": [
11 {
12 "coordinates": [-4, 24, -4, 8, 10, 8],
13 "uvNorth": [8, 8, 16, 18],
14 "uvEast": [0, 8, 8, 18],
15 "uvSouth": [24, 8, 32, 18],
16 "uvWest": [16, 8, 24, 18],
17 "uvUp": [16, 8, 8, 0],
18 "uvDown": [24, 0, 16, 8]
19 },
20 {
21 "coordinates": [-4, 24, -4, 8, 4.5, 8],
22 "uvNorth": [40, 13, 48, 18],
23 "uvEast": [32, 13, 40, 18],
24 "uvSouth": [56, 13, 64, 18],
25 "uvWest": [48, 13, 56, 18],
26 "uvDown": [56, 0, 48, 8],
27 "sizeAdd": 0.51
28 }
29 ]
30 },
31 {
32 "part": "nose",
33 "id": "nose",
34 "invertAxis": "xy",
35 "translate": [0, -26, 0],
36 "boxes": [
37 {
38 "coordinates": [-1, 23, -6, 2, 4, 2],
39 "uvNorth": [26, 2, 28, 6],
40 "uvEast": [24, 2, 26, 6],
41 "uvSouth": [30, 2, 32, 6],
42 "uvWest": [28, 2, 30, 6],
43 "uvUp": [28, 2, 26, 0],
44 "uvDown": [30, 0, 28, 2]
45 }
46 ]
47 },
48 {
49 "part": "headwear",
50 "id": "headwear",
51 "invertAxis": "xy",
52 "translate": [0, -24, 0],
53 "boxes": [
54 {
55 "coordinates": [-4, 29.5, -4, 8, 4.5, 8],
56 "uvNorth": [40, 8, 48, 13],
57 "uvEast": [32, 8, 40, 13],
58 "uvSouth": [56, 8, 64, 13],
59 "uvWest": [48, 8, 56, 13],
60 "uvUp": [48, 8, 40, 0],
61 "sizeAdd": 0.51
62 }
63 ]
64 },
65 {
66 "part": "headwear2",
67 "id": "headwear2",
68 "invertAxis": "xy",
69 "translate": [0, -24, 0],
70 "rotate": [90, 0, 0],
71 "boxes": [
72 {
73 "coordinates": [-8, 16, -6, 16, 16, 1],
74 "uvNorth": [31, 48, 47, 64],
75 "uvEast": [30, 48, 31, 64],
76 "uvSouth": [48, 48, 64, 64],
77 "uvWest": [47, 48, 48, 64],
78 "uvUp": [47, 48, 31, 47],
79 "uvDown": [63, 47, 47, 48]
80 }
81 ],
82 "animations": [
83 {
84 "this.rx": 0
85 }
86 ]
87 },
88 {
89 "part": "body",
90 "id": "body",
91 "invertAxis": "xy",
92 "translate": [0, -24, 0],
93 "boxes": [
94 {
95 "coordinates": [-4, 12, -2, 8, 12, 4],
96 "uvNorth": [22, 26, 30, 38],
97 "uvEast": [18, 26, 22, 38],
98 "uvSouth": [36, 26, 44, 38],
99 "uvWest": [30, 26, 34, 38],
100 "uvUp": [30, 26, 22, 22],
101 "uvDown": [39, 20, 31, 24]
102 }
103 ]
104 },
105 {
106 "part": "bodywear",
107 "id": "bodywear",
108 "invertAxis": "xy",
109 "translate": [0, -24, 0],
110 "boxes": [
111 {
112 "coordinates": [-4, 3, -3, 8, 21, 6],
113 "uvEast": [0, 44, 6, 64],
114 "uvSouth": [20, 44, 28, 64],
115 "uvWest": [14, 44, 20, 64],
116 "uvUp": [14, 44, 6, 38],
117 "uvDown": [22, 38, 14, 44],
118 "sizeAdd": 0.5
119 }
120 ],
121 "submodels": [
122 {
123 "id": "right_flap",
124 "invertAxis": "xy",
125 "translate": [4.5, 23, -3.5],
126 "boxes": [
127 {
128 "coordinates": [-4, -20, 0.5, 3.5, 21, -1],
129 "uvNorth": [6, 44, 10, 64],
130 "sizeAdd": 0.5
131 }
132 ]
133 },
134 {
135 "id": "left_flap",
136 "invertAxis": "xy",
137 "translate": [-4.5, 23, -3.5],
138 "boxes": [
139 {
140 "coordinates": [0.5, -20, 0.5, 3.5, 21, -1],
141 "uvNorth": [10, 44, 14, 64],
142 "sizeAdd": 0.5
143 }
144 ]
145 }
146 ]
147 },
148 {
149 "part": "arms",
150 "id": "arms",
151 "invertAxis": "xy",
152 "translate": [0, -21.05, 1.05],
153 "rotate": [43, 0, 0],
154 "attach": true,
155 "boxes": [
156 {
157 "coordinates": [-4, 15.05, -3.05, 8, 4, 4],
158 "uvNorth": [44, 42, 52, 46],
159 "uvEast": [40, 42, 44, 46],
160 "uvSouth": [56, 42, 64, 46],
161 "uvWest": [52, 42, 56, 46],
162 "uvUp": [52, 42, 44, 38],
163 "uvDown": [60, 38, 52, 42]
164 },
165 {
166 "coordinates": [4, 15.05, -3.05, 4, 8, 4],
167 "uvNorth": [48, 26, 52, 34],
168 "uvEast": [44, 26, 48, 34],
169 "uvSouth": [56, 26, 60, 34],
170 "uvWest": [52, 26, 56, 34],
171 "uvUp": [52, 26, 48, 22],
172 "uvDown": [56, 22, 52, 26]
173 }
174 ],
175 "submodels": [
176 {
177 "id": "right_extended",
178 "invertAxis": "xy",
179 "translate": [0, 22.4, -0.95],
180 "rotate": [-43, 0, 0],
181 "boxes": [
182 {
183 "coordinates": [4, -10, -2, 4, 12, 4],
184 "uvNorth": [48, 26, 52, 38],
185 "uvEast": [44, 26, 48, 38],
186 "uvSouth": [56, 26, 60, 38],
187 "uvWest": [52, 26, 56, 38],
188 "uvUp": [52, 26, 48, 22],
189 "uvDown": [60, 22, 56, 26]
190 }
191 ]
192 },
193 {
194 "id": "mirrored",
195 "invertAxis": "xy",
196 "mirrorTexture": "u",
197 "translate": [0, 0, 0],
198 "boxes": [
199 {
200 "coordinates": [-8, 15.05, -3.05, 4, 8, 4],
201 "uvNorth": [48, 26, 52, 34],
202 "uvEast": [44, 26, 48, 34],
203 "uvSouth": [56, 26, 60, 34],
204 "uvWest": [52, 26, 56, 34],
205 "uvUp": [52, 26, 48, 22],
206 "uvDown": [56, 22, 52, 26]
207 }
208 ],
209 "submodels": [
210 {
211 "id": "left_extended",
212 "invertAxis": "xy",
213 "translate": [0, 13, 12],
214 "rotate": [-43, 0, 0],
215 "boxes": [
216 {
217 "coordinates": [-8, 5.65, -4.95, 4, 12, 4],
218 "uvNorth": [52, 26, 48, 38],
219 "uvEast": [56, 26, 52, 38],
220 "uvSouth": [60, 26, 56, 38],
221 "uvWest": [48, 26, 44, 38],
222 "uvUp": [48, 26, 52, 22],
223 "uvDown": [56, 22, 60, 26]
224 }
225 ]
226 }
227 ]
228 }
229 ],
230 "animations": [
231 {
232 "this.rx": 0
233 }
234 ]
235 },
236 {
237 "part": "right_leg",
238 "id": "right_leg",
239 "invertAxis": "xy",
240 "translate": [-2, -12, 0],
241 "boxes": [
242 {
243 "coordinates": [0, 0, -2, 4, 12, 4],
244 "uvNorth": [4, 26, 8, 38],
245 "uvEast": [0, 26, 4, 38],
246 "uvSouth": [12, 26, 16, 38],
247 "uvWest": [8, 26, 12, 38],
248 "uvUp": [8, 26, 4, 22],
249 "uvDown": [12, 22, 8, 26]
250 }
251 ]
252 },
253 {
254 "part": "left_leg",
255 "id": "left_leg",
256 "invertAxis": "xy",
257 "translate": [2, -12, 0],
258 "boxes": [
259 {
260 "coordinates": [-4, 0, -2, 4, 12, 4],
261 "uvNorth": [8, 26, 4, 38],
262 "uvEast": [12, 26, 8, 38],
263 "uvSouth": [16, 26, 12, 38],
264 "uvWest": [4, 26, 0, 38],
265 "uvUp": [4, 26, 8, 22],
266 "uvDown": [8, 22, 12, 26]
267 }
268 ]
269 }
270 ]
271} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/.wolf.jem b/assets/minecraft/optifine/cem/.wolf.jem
new file mode 100755
index 00000000..f2c86ffe
--- /dev/null
+++ b/assets/minecraft/optifine/cem/.wolf.jem
@@ -0,0 +1,270 @@
1{
2 "textureSize": [64, 32],
3 "models": [
4 {
5 "part": "head",
6 "id": "head",
7 "invertAxis": "xy",
8 "translate": [-1, -10.5, 7],
9 "boxes": [
10 {
11 "coordinates": [-3, 7.5, -9, 6, 6, 4],
12 "uvNorth": [4, 4, 10, 10],
13 "uvEast": [0, 4, 4, 10],
14 "uvSouth": [14, 4, 20, 10],
15 "uvWest": [10, 4, 14, 10],
16 "uvUp": [10, 4, 4, 0],
17 "uvDown": [16, 0, 10, 4]
18 },
19 {
20 "coordinates": [-3, 10.5, -9.01, 6, 1, 0],
21 "uvNorth": [16, 1, 22, 2]
22 }
23 ],
24 "submodels": [
25 {
26 "id": "top_jaw",
27 "invertAxis": "xy",
28 "translate": [0, 8.5, -9],
29 "boxes": [
30 {
31 "coordinates": [-1.5, 0.02, -3, 3, 2, 4],
32 "uvNorth": [4, 14, 7, 16],
33 "uvEast": [0, 14, 4, 16],
34 "uvSouth": [11, 14, 14, 16],
35 "uvWest": [7, 14, 11, 16],
36 "uvUp": [7, 14, 4, 10],
37 "uvDown": [4, 10, 1, 14]
38 }
39 ]
40 },
41 {
42 "id": "closed_eyes",
43 "invertAxis": "xy",
44 "translate": [0, 0, 0],
45 "boxes": [
46 {
47 "coordinates": [-3, 10.5, -9, 6, 1, 0],
48 "uvNorth": [16, 0, 22, 1]
49 }
50 ]
51 },
52 {
53 "id": "left_pupil",
54 "invertAxis": "xy",
55 "translate": [0, 0, 0],
56 "boxes": [
57 {
58 "coordinates": [1, 10.5, -9.02, 1, 1, 0],
59 "uvNorth": [17, 2, 18, 3]
60 }
61 ]
62 },
63 {
64 "id": "right_pupil",
65 "invertAxis": "xy",
66 "translate": [0, 0, 0],
67 "boxes": [
68 {
69 "coordinates": [-2, 10.5, -9.02, 1, 1, 0],
70 "uvNorth": [17, 2, 18, 3]
71 }
72 ]
73 },
74 {
75 "id": "leftear",
76 "invertAxis": "xy",
77 "translate": [2, 13.5, -6.5],
78 "boxes": [
79 {
80 "coordinates": [-1.01, -1, -0.5, 2, 3, 1],
81 "uvNorth": [17, 15, 19, 18],
82 "uvEast": [16, 15, 17, 18],
83 "uvSouth": [20, 15, 22, 18],
84 "uvWest": [19, 15, 20, 18],
85 "uvUp": [19, 15, 17, 14],
86 "uvDown": [21, 14, 19, 15]
87 }
88 ]
89 },
90 {
91 "id": "rightear",
92 "invertAxis": "xy",
93 "translate": [-2, 13.5, -6.5],
94 "boxes": [
95 {
96 "coordinates": [-1.01, -1, -0.5, 2, 3, 1],
97 "uvNorth": [19, 15, 17, 18],
98 "uvEast": [20, 15, 19, 18],
99 "uvSouth": [22, 15, 20, 18],
100 "uvWest": [17, 15, 16, 18],
101 "uvUp": [17, 15, 19, 14],
102 "uvDown": [19, 14, 21, 15]
103 }
104 ]
105 },
106 {
107 "id": "bottom_jaw",
108 "invertAxis": "xy",
109 "translate": [0, 8.5, -9],
110 "boxes": [
111 {
112 "coordinates": [-1.5, -0.98, -2.75, 3, 1, 4],
113 "uvNorth": [4, 16, 7, 17],
114 "uvEast": [0, 16, 4, 17],
115 "uvSouth": [11, 16, 14, 17],
116 "uvWest": [7, 16, 11, 17],
117 "uvUp": [13, 14, 10, 10],
118 "uvDown": [10, 10, 7, 14]
119 }
120 ]
121 }
122 ]
123 },
124 {
125 "part": "body",
126 "id": "body",
127 "invertAxis": "xy",
128 "translate": [0, -10, -2],
129 "submodels": [
130 {
131 "id": "body_rotation",
132 "invertAxis": "xy",
133 "translate": [0, 10, 2],
134 "rotate": [-90, 0, 0],
135 "boxes": [
136 {
137 "coordinates": [-3, -7, -3, 6, 9, 6],
138 "uvNorth": [24, 20, 30, 29],
139 "uvEast": [18, 20, 24, 29],
140 "uvSouth": [36, 20, 42, 29],
141 "uvWest": [30, 20, 36, 29],
142 "uvUp": [30, 20, 24, 14],
143 "uvDown": [36, 14, 30, 20]
144 }
145 ]
146 }
147 ],
148 "animations": [
149 {
150 "body_rotation.rx": 0
151 }
152 ]
153 },
154 {
155 "part": "mane",
156 "id": "mane",
157 "invertAxis": "xy",
158 "translate": [-1, -10, -2],
159 "submodels": [
160 {
161 "id": "mane_rotation",
162 "invertAxis": "xy",
163 "translate": [0, 7.5, -0.5],
164 "rotate": [-90, 0, 0],
165 "boxes": [
166 {
167 "coordinates": [-4, -0.5, -0.5, 8, 6, 7],
168 "uvNorth": [28, 7, 36, 13],
169 "uvEast": [21, 7, 28, 13],
170 "uvSouth": [43, 7, 51, 13],
171 "uvWest": [36, 7, 43, 13],
172 "uvUp": [36, 7, 28, 0],
173 "uvDown": [44, 0, 36, 7]
174 }
175 ]
176 }
177 ],
178 "animations": [
179 {
180 "mane_rotation.rx": 0
181 }
182 ]
183 },
184 {
185 "part": "leg1",
186 "id": "leg1",
187 "invertAxis": "xy",
188 "translate": [-2.5, -8, -7],
189 "boxes": [
190 {
191 "coordinates": [0.5, 0, 6, 2, 8, 2],
192 "uvNorth": [44, 20, 46, 28],
193 "uvEast": [42, 20, 44, 28],
194 "uvSouth": [48, 20, 50, 28],
195 "uvWest": [46, 20, 48, 28],
196 "uvUp": [46, 20, 44, 18],
197 "uvDown": [48, 18, 46, 20]
198 }
199 ]
200 },
201 {
202 "part": "leg2",
203 "id": "leg2",
204 "invertAxis": "xy",
205 "translate": [0.5, -8, -7],
206 "boxes": [
207 {
208 "coordinates": [-2.5, 0, 6, 2, 8, 2],
209 "uvNorth": [46, 20, 44, 28],
210 "uvEast": [48, 20, 46, 28],
211 "uvSouth": [50, 20, 48, 28],
212 "uvWest": [44, 20, 42, 28],
213 "uvUp": [44, 20, 46, 18],
214 "uvDown": [46, 18, 48, 20]
215 }
216 ]
217 },
218 {
219 "part": "leg3",
220 "id": "leg3",
221 "invertAxis": "xy",
222 "translate": [-2.5, -8, 4],
223 "boxes": [
224 {
225 "coordinates": [0.5, 0, -5, 2, 8, 2],
226 "uvNorth": [2, 20, 4, 28],
227 "uvEast": [0, 20, 2, 28],
228 "uvSouth": [6, 20, 8, 28],
229 "uvWest": [4, 20, 6, 28],
230 "uvUp": [4, 20, 2, 18],
231 "uvDown": [6, 18, 4, 20]
232 }
233 ]
234 },
235 {
236 "part": "leg4",
237 "id": "leg4",
238 "invertAxis": "xy",
239 "translate": [0.5, -8, 4],
240 "boxes": [
241 {
242 "coordinates": [-2.5, 0, -5, 2, 8, 2],
243 "uvNorth": [4, 20, 2, 28],
244 "uvEast": [6, 20, 4, 28],
245 "uvSouth": [8, 20, 6, 28],
246 "uvWest": [2, 20, 0, 28],
247 "uvUp": [2, 20, 4, 18],
248 "uvDown": [4, 18, 6, 20]
249 }
250 ]
251 },
252 {
253 "part": "tail",
254 "id": "tail",
255 "invertAxis": "xy",
256 "translate": [-1, -12, -9],
257 "boxes": [
258 {
259 "coordinates": [-1, 4, 8, 2, 8, 3],
260 "uvNorth": [11, 20, 13, 28],
261 "uvEast": [8, 20, 11, 28],
262 "uvSouth": [16, 20, 18, 28],
263 "uvWest": [13, 20, 16, 28],
264 "uvUp": [13, 20, 11, 17],
265 "uvDown": [15, 17, 13, 20]
266 }
267 ]
268 }
269 ]
270} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/banner.jem b/assets/minecraft/optifine/cem/banner.jem
new file mode 100755
index 00000000..d6e16b19
--- /dev/null
+++ b/assets/minecraft/optifine/cem/banner.jem
@@ -0,0 +1,56 @@
1{
2 "textureSize": [64, 64],
3 "models": [
4 {
5 "part": "top",
6 "id": "top",
7 "invertAxis": "xy",
8 "translate": [0, -12, 0],
9 "boxes": [
10 {
11 "coordinates": [-10.5, 41.5, 0, 21, 3, 3],
12 "uvNorth": [2, 48, 16, 50],
13 "uvEast": [0, 48, 2, 50],
14 "uvSouth": [18, 48, 32, 50],
15 "uvWest": [16, 48, 18, 50],
16 "uvUp": [16, 48, 2, 46],
17 "uvDown": [30, 46, 16, 48]
18 }
19 ]
20 },
21 {
22 "part": "slate",
23 "id": "slate",
24 "invertAxis": "xy",
25 "translate": [0, -44, 0],
26 "boxes": [
27 {
28 "coordinates": [-10.5, 3, -1.5, 21, 41.5, 1.5],
29 "uvNorth": [1, 1, 21, 41],
30 "uvEast": [0, 1, 1, 41],
31 "uvSouth": [22, 1, 42, 41],
32 "uvWest": [21, 1, 22, 41],
33 "uvUp": [21, 1, 1, 0],
34 "uvDown": [41, 0, 21, 1]
35 }
36 ]
37 },
38 {
39 "part": "stand",
40 "id": "stand",
41 "invertAxis": "xy",
42 "translate": [0, -12, 0],
43 "boxes": [
44 {
45 "coordinates": [-1.5, 0, 0, 3, 41.5, 3],
46 "uvNorth": [54, 2, 56, 30],
47 "uvEast": [52, 2, 54, 30],
48 "uvSouth": [58, 2, 60, 30],
49 "uvWest": [56, 2, 58, 30],
50 "uvUp": [56, 2, 54, 0],
51 "uvDown": [58, 0, 56, 2]
52 }
53 ]
54 }
55 ]
56} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/boat.jem b/assets/minecraft/optifine/cem/boat.jem
new file mode 100755
index 00000000..4a6ae172
--- /dev/null
+++ b/assets/minecraft/optifine/cem/boat.jem
@@ -0,0 +1,252 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "textures/entity/boat/oak.png",
4 "textureSize": [128, 64],
5 "models": [
6 {
7 "part": "front",
8 "id": "front",
9 "invertAxis": "xy",
10 "translate": [0, 0, 0]
11 },
12 {
13 "part": "back",
14 "id": "back",
15 "invertAxis": "xy",
16 "translate": [4, -2, -15],
17 "submodels": [
18 {
19 "id": "boat",
20 "invertAxis": "xy",
21 "translate": [0, 3, 1],
22 "boxes": [
23 {"coordinates": [-8, 0, 12, 16, 6, 2], "textureOffset": [92, 0]}
24 ],
25 "submodels": [
26 {
27 "id": "bottom2",
28 "invertAxis": "xy",
29 "translate": [-2, -1, 1.5],
30 "rotate": [-90, -90, 0],
31 "boxes": [
32 {
33 "coordinates": [-15.5, -6, -3, 28, 16, 4],
34 "uvNorth": [68, 48, 96, 64],
35 "uvEast": [64, 48, 68, 64],
36 "uvSouth": [100, 48, 128, 64],
37 "uvWest": [96, 48, 100, 64],
38 "uvUp": [96, 48, 68, 44],
39 "uvDown": [124, 44, 96, 48]
40 }
41 ]
42 },
43 {
44 "id": "right2",
45 "invertAxis": "xy",
46 "translate": [0, -3, 1.5],
47 "rotate": [0, 90, 0],
48 "boxes": [
49 {"coordinates": [-12.5, 3, 8, 28, 6, 2], "textureOffset": [0, 56]}
50 ]
51 },
52 {
53 "id": "left2",
54 "invertAxis": "xy",
55 "translate": [-9, 3, 0.5],
56 "rotate": [0, -90, 0],
57 "boxes": [
58 {"coordinates": [-14.5, -3, -1, 28, 6, 2], "textureOffset": [0, 56]}
59 ]
60 },
61 {
62 "id": "front2",
63 "invertAxis": "xy",
64 "translate": [0, 3, -14.5],
65 "rotate": [0, -180, 0],
66 "boxes": [
67 {"coordinates": [-8, -3, -2.5, 16, 6, 2], "textureOffset": [92, 0]}
68 ]
69 },
70 {
71 "id": "left_paddle",
72 "invertAxis": "xy",
73 "translate": [-11, 8, -3],
74 "rotate": [-124, -50, 165],
75 "boxes": [
76 {"coordinates": [-1, -2, -5, 2, 2, 18], "textureOffset": [62, 0]},
77 {"coordinates": [0.001, -3, 8, 1, 6, 7], "textureOffset": [62, 0]}
78 ]
79 },
80 {
81 "id": "right_paddle",
82 "invertAxis": "xy",
83 "translate": [11, 8, -3],
84 "rotate": [-124, 60, -165],
85 "boxes": [
86 {"coordinates": [-1, -2, -5, 2, 2, 18], "textureOffset": [62, 0]}
87 ],
88 "submodels": [
89 {
90 "id": "back_sub_8",
91 "invertAxis": "xy",
92 "mirrorTexture": "u",
93 "translate": [0, 0, 0],
94 "boxes": [
95 {"coordinates": [-1.001, -3, 8, 1, 6, 7], "textureOffset": [62, 0]}
96 ]
97 }
98 ]
99 },
100 {
101 "id": "in_paddles",
102 "invertAxis": "xy",
103 "translate": [0, 0, 0],
104 "submodels": [
105 {
106 "id": "right_paddle2",
107 "invertAxis": "xy",
108 "translate": [8.25, 7.5, -11],
109 "rotate": [27.30132, 1.15421, -42.12613],
110 "boxes": [
111 {"coordinates": [-1, -2, -5, 2, 2, 18], "textureOffset": [62, 0]}
112 ],
113 "submodels": [
114 {
115 "id": "back_sub_2",
116 "invertAxis": "xy",
117 "mirrorTexture": "u",
118 "translate": [0, 0, 0],
119 "boxes": [
120 {"coordinates": [-1.001, -3, 8, 1, 6, 7], "textureOffset": [62, 0]}
121 ]
122 }
123 ]
124 },
125 {
126 "id": "left_paddle2",
127 "invertAxis": "xy",
128 "translate": [-7, 7.5, -9.75],
129 "rotate": [17.2512, -12.69876, 46.24166],
130 "boxes": [
131 {"coordinates": [-1, -2, -5, 2, 2, 18], "textureOffset": [62, 0]},
132 {"coordinates": [0.001, -3, 8, 1, 6, 7], "textureOffset": [62, 0]}
133 ]
134 }
135 ]
136 }
137 ]
138 }
139 ],
140 "animations": [
141 {
142 "var.water_x": "clamp(if(is_in_water,var.water_x+0.05,var.water_x-0.05),0,1)",
143 "var.water_k": "pow(var.water_x,1/3)",
144 "var.forwards": "clamp(if(paddle_left.rx < -0.654 && paddle_left.rx > -0.655,1,paddle_right.rx < -0.654 && paddle_right.rx > -0.655 && limb_swing == var.limb_counter,1, var.forwards -0.03),0,1)",
145 "varb.forward": "var.forwards == 0 ",
146 "var.f_speed_x": "clamp(if(varb.forward,lerp(0.01,var.f_speed_x,1),lerp(0.01,var.f_speed_x,0)),0,1)",
147 "var.f_speed_k": "sqrt(var.f_speed_x)*var.f_speed_x+pow(var.f_speed_x,2)*(1-var.f_speed_x)",
148 "var.side_tilt": "clamp(if(between(var.old_rot_y-rot_y,-0.005,0.005),lerp(0.03,var.side_tilt,0) ,var.old_rot_y>rot_y,lerp(0.01,var.side_tilt,-1),var.old_rot_y<rot_y,lerp(0.01,var.side_tilt,1),0),-1,1)"
149 },
150 {
151 "var.idle": "var.water_k * sin(pos_x/3 + pos_z/3 + time/10)",
152 "var.idle2": "var.water_k * cos(pos_x/3 + pos_z/3 + time/10)"
153 },
154 {
155 "boat.rx": "var.water_k * (-var.f_speed_k/10) + var.idle2*cos(rot_y+pi/4)/20",
156 "boat.rz": "var.water_k * (-var.side_tilt/8) + var.idle2*sin(rot_y+pi/4)/20",
157 "boat.ty": "-3 + var.idle/3"
158 },
159 {
160 "left_paddle.rx": "print(10,10,paddle_left.rx)",
161 "left_paddle.ry": "pi/2+paddle_left.ry",
162 "left_paddle.rz": "paddle_left.rz"
163 },
164 {
165 "right_paddle.rx": "paddle_right.rx-0.34",
166 "right_paddle.ry": "pi/2+paddle_right.ry-0.1",
167 "right_paddle.rz": "paddle_right.rz"
168 },
169 {
170 "var.old_rot_y": "rot_y",
171 "var.limb_counter": "limb_swing"
172 },
173 {
174 "left_paddle.visible": "is_ridden",
175 "right_paddle.visible": "is_ridden",
176 "in_paddles.visible": "!is_ridden"
177 }
178 ]
179 },
180 {
181 "part": "left",
182 "id": "left",
183 "invertAxis": "xy",
184 "translate": [0, 0, 0]
185 },
186 {
187 "part": "right",
188 "id": "right",
189 "invertAxis": "xy",
190 "translate": [0, 0, 0]
191 },
192 {
193 "part": "bottom",
194 "id": "bottom",
195 "invertAxis": "xy",
196 "translate": [0, 0, 0]
197 },
198 {
199 "part": "bottom_no_water",
200 "id": "bottom_no_water",
201 "invertAxis": "xy",
202 "translate": [1, -9, 0],
203 "rotate": [0, -90, -90],
204 "submodels": [
205 {
206 "id": "no_water",
207 "invertAxis": "xy",
208 "translate": [0, 3, 1],
209 "boxes": [
210 {"coordinates": [-12, -1, -7, 24, 16, 6], "textureOffset": [68, 42]}
211 ]
212 }
213 ],
214 "animations": [
215 {
216 "this.ry": 0,
217 "this.rz": 0
218 },
219 {
220 "var.water_x": "clamp(if(is_in_water,var.water_x+0.05,var.water_x-0.05),0,1)",
221 "var.water_k": "pow(var.water_x,1/3)",
222 "var.forwards": "clamp(if(paddle_left.rx < -0.654 && paddle_left.rx > -0.655,1,paddle_right.rx < -0.654 && paddle_right.rx > -0.655 && limb_swing == var.limb_counter,1, var.forwards -0.03),0,1)",
223 "varb.forward": "var.forwards == 0 ",
224 "var.f_speed_x": "clamp(if(varb.forward,lerp(0.01,var.f_speed_x,1),lerp(0.01,var.f_speed_x,0)),0,1)",
225 "var.f_speed_k": "sqrt(var.f_speed_x)*var.f_speed_x+pow(var.f_speed_x,2)*(1-var.f_speed_x)",
226 "var.side_tilt": "clamp(if(between(var.old_rot_y-rot_y,-0.005,0.005),lerp(0.03,var.side_tilt,0) ,var.old_rot_y>rot_y,lerp(0.01,var.side_tilt,-1),var.old_rot_y<rot_y,lerp(0.01,var.side_tilt,1),0),-1,1)"
227 },
228 {
229 "var.idle": "var.water_k * sin(pos_x/3 + pos_z/3 + time/10)",
230 "var.idle2": "var.water_k * cos(pos_x/3 + pos_z/3 + time/10)"
231 },
232 {
233 "no_water.ry": "var.water_k * (-var.f_speed_k/10) + var.idle2*cos(rot_y+pi/4)/20",
234 "no_water.rx": "-(var.water_k * (-var.side_tilt/8) + var.idle2*sin(rot_y+pi/4)/20)",
235 "no_water.ty": "-3 + var.idle/3"
236 }
237 ]
238 },
239 {
240 "part": "paddle_left",
241 "id": "paddle_left",
242 "invertAxis": "xy",
243 "translate": [0, 0, 0]
244 },
245 {
246 "part": "paddle_right",
247 "id": "paddle_right",
248 "invertAxis": "xy",
249 "translate": [0, 0, 0]
250 }
251 ]
252} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/chest.jem b/assets/minecraft/optifine/cem/chest.jem
new file mode 100755
index 00000000..5747462d
--- /dev/null
+++ b/assets/minecraft/optifine/cem/chest.jem
@@ -0,0 +1,134 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "chest.png",
4 "textureSize": [64, 64],
5 "models": [
6 {
7 "part": "base",
8 "id": "base",
9 "invertAxis": "xy",
10 "translate": [-8, 0, -8],
11 "rotate": [-180, 0, 0],
12 "submodels": [
13 {
14 "id": "base2",
15 "invertAxis": "xy",
16 "translate": [8, 0, 24],
17 "submodels": [
18 {
19 "id": "anti_base",
20 "invertAxis": "xy",
21 "translate": [0, 0, -16],
22 "rotate": [-180, 0, 0],
23 "submodels": [
24 {
25 "id": "lid2",
26 "invertAxis": "xy",
27 "translate": [0, 9, -1],
28 "rotate": [-180, 0, 0],
29 "boxes": [
30 {
31 "coordinates": [-16, -7, -1, 16, 6, 16],
32 "uvNorth": [48, 22, 64, 16],
33 "uvEast": [16, 22, 0, 16],
34 "uvSouth": [32, 22, 16, 16],
35 "uvWest": [48, 22, 32, 16],
36 "uvUp": [64, 16, 48, 0],
37 "uvDown": [32, 16, 16, 0]
38 },
39 {
40 "coordinates": [-9, -4, 15, 2, 4, 1],
41 "uvNorth": [4, 5, 6, 1],
42 "uvEast": [0, 5, 1, 1],
43 "uvSouth": [1, 5, 3, 1],
44 "uvWest": [3, 5, 4, 1],
45 "uvUp": [5, 1, 3, 0],
46 "uvDown": [3, 0, 1, 1]
47 },
48 {
49 "coordinates": [-2, -5, 1, -12, 4, 12],
50 "uvNorth": [36, 48, 48, 44],
51 "uvEast": [12, 48, 0, 44],
52 "uvSouth": [24, 48, 12, 44],
53 "uvWest": [36, 48, 24, 44],
54 "uvDown": [36, 44, 24, 32]
55 }
56 ]
57 }
58 ]
59 }
60 ],
61 "boxes": [
62 {
63 "coordinates": [-2, -11, -14, -12, 9, 12],
64 "uvNorth": [36, 56, 48, 47],
65 "uvEast": [12, 56, 0, 47],
66 "uvSouth": [24, 56, 12, 47],
67 "uvWest": [36, 56, 24, 47],
68 "uvUp": [24, 44, 12, 32]
69 },
70 {
71 "coordinates": [-16, -11, -16, 16, 11, 16],
72 "uvNorth": [64, 32, 48, 21],
73 "uvEast": [16, 32, 0, 21],
74 "uvSouth": [32, 32, 16, 21],
75 "uvWest": [48, 32, 32, 21],
76 "uvUp": [48, 0, 32, 16],
77 "uvDown": [64, 0, 48, 16]
78 }
79 ]
80 },
81 {
82 "id": "test",
83 "invertAxis": "xy",
84 "translate": [8, 0, 8],
85 "submodels": [
86 {
87 "id": "close",
88 "invertAxis": "xy",
89 "translate": [0, 0, 0]
90 }
91 ]
92 }
93 ],
94 "animations": [
95 {
96 "this.rx": 0
97 },
98 {
99 "lid2.rx": "if(test.rx <= lid.rx, if(lid.rx > -pi/2.5 ,sin(lid.rx*2.5)/3,(lid.rx*2)+(pi/2)) , lid.rx) +pi",
100 "base.rx": "if(test.rx <= lid.rx,0, if(lid.rx > -pi/2.5 ,sin(lid.rx*2.5)/6,0))",
101 "base2.rx": "if(test.rx <= lid.rx,if(lid.rx > -pi/2.5 ,-sin(lid.rx*2.5)/2,0 )/7,0)",
102 "close.visible": "if(test.rx <= lid.rx,1,0) > 0"
103 },
104 {
105 "test.rx": "lid.rx"
106 }
107 ]
108 },
109 {
110 "part": "lid",
111 "id": "lid",
112 "invertAxis": "xy",
113 "translate": [-8, -9, -7],
114 "rotate": [-180, 0, 0],
115 "animations": [
116 {
117 "this.rx": 0
118 }
119 ]
120 },
121 {
122 "part": "knob",
123 "id": "knob",
124 "invertAxis": "xy",
125 "translate": [-8, -8, -8],
126 "rotate": [-180, 0, 0],
127 "animations": [
128 {
129 "this.rx": 0
130 }
131 ]
132 }
133 ]
134} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/chest.png b/assets/minecraft/optifine/cem/chest.png
new file mode 100755
index 00000000..a261e891
--- /dev/null
+++ b/assets/minecraft/optifine/cem/chest.png
Binary files differ
diff --git a/assets/minecraft/optifine/cem/chest_large.jem b/assets/minecraft/optifine/cem/chest_large.jem
new file mode 100755
index 00000000..2f4e4720
--- /dev/null
+++ b/assets/minecraft/optifine/cem/chest_large.jem
@@ -0,0 +1,161 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "chest_large.png",
4 "textureSize": [128, 64],
5 "models": [
6 {
7 "part": "base_left",
8 "id": "base_left",
9 "invertAxis": "xy",
10 "translate": [-16, 0, -8],
11 "rotate": [-180, 0, 0],
12 "submodels": [
13 {
14 "id": "base2",
15 "invertAxis": "xy",
16 "translate": [16, 0, 24],
17 "boxes": [
18 {
19 "coordinates": [-2, -11, -14, -28, 9, 12],
20 "uvNorth": [48, 56, 72, 47],
21 "uvEast": [12, 56, 0, 47],
22 "uvSouth": [36, 56, 12, 47],
23 "uvWest": [48, 56, 36, 47],
24 "uvUp": [60, 44, 36, 32]
25 },
26 {
27 "coordinates": [-32, -11, -16, 32, 11, 16],
28 "uvNorth": [96, 32, 64, 21],
29 "uvEast": [16, 32, 0, 21],
30 "uvSouth": [48, 32, 16, 21],
31 "uvWest": [64, 32, 48, 21],
32 "uvUp": [80, 0, 48, 16],
33 "uvDown": [112, 0, 80, 16]
34 }
35 ],
36 "submodels": [
37 {
38 "id": "anti_base",
39 "invertAxis": "xy",
40 "translate": [0, 0, -16],
41 "rotate": [-180, 0, 0],
42 "submodels": [
43 {
44 "id": "lid_left2",
45 "invertAxis": "xy",
46 "translate": [0, 9, -1],
47 "rotate": [-180, 0, 0],
48 "boxes": [
49 {
50 "coordinates": [-32, -7, -1, 32, 6, 16],
51 "uvNorth": [64, 22, 96, 16],
52 "uvEast": [16, 22, 0, 16],
53 "uvSouth": [48, 22, 16, 16],
54 "uvWest": [64, 22, 48, 16],
55 "uvUp": [112, 16, 80, 0],
56 "uvDown": [48, 16, 16, 0]
57 },
58 {
59 "coordinates": [-17, -4, 15, 2, 4, 1],
60 "uvNorth": [4, 5, 6, 1],
61 "uvEast": [0, 5, 1, 1],
62 "uvSouth": [1, 5, 3, 1],
63 "uvWest": [3, 5, 4, 1],
64 "uvUp": [5, 1, 3, 0],
65 "uvDown": [3, 0, 1, 1]
66 },
67 {
68 "coordinates": [-2, -5, 1, -28, 4, 12],
69 "uvNorth": [48, 48, 72, 44],
70 "uvEast": [12, 48, 0, 44],
71 "uvSouth": [36, 48, 12, 44],
72 "uvWest": [48, 48, 36, 44],
73 "uvDown": [36, 44, 12, 32]
74 }
75 ]
76 }
77 ]
78 }
79 ]
80 },
81 {
82 "id": "close",
83 "invertAxis": "xy",
84 "translate": [16, 0, 8]
85 }
86 ],
87 "animations": [
88 {
89 "this.rx": 0,
90 "this.ry": 0
91 },
92 {
93 "lid_left2.rx": "if(close.visible, if(lid_left.rx > -pi/2.5 ,sin(lid_left.rx*2.5)/3,(lid_left.rx*2)+(pi/2)) , lid_left.rx) +pi",
94 "base_left.rx": "if(close.visible,0, if(lid_left.rx > -pi/2.5 ,sin(lid_left.rx*2.5)/6,0))",
95 "base2.rx": "if(close.visible,if(lid_left.rx > -pi/2.5 ,-sin(lid_left.rx*2.5)/2,0 )/7,0)",
96 "close.visible": "if(lid_left.rx == 0,0,lid_left.rx < -1.5, 1,if(close.visible,1,0)) > 0"
97 }
98 ]
99 },
100 {
101 "part": "base_right",
102 "id": "base_right",
103 "invertAxis": "xy",
104 "translate": [0, 0, -8],
105 "rotate": [-180, 0, 0],
106 "animations": [
107 {
108 "this.rx": 0
109 }
110 ]
111 },
112 {
113 "part": "lid_left",
114 "id": "lid_left",
115 "invertAxis": "xy",
116 "translate": [-16, -9, -7],
117 "rotate": [-180, 0, 0],
118 "animations": [
119 {
120 "this.rx": 0
121 }
122 ]
123 },
124 {
125 "part": "lid_right",
126 "id": "lid_right",
127 "invertAxis": "xy",
128 "translate": [0, -9, -7],
129 "rotate": [-180, 0, 0],
130 "animations": [
131 {
132 "this.rx": 0
133 }
134 ]
135 },
136 {
137 "part": "knob_left",
138 "id": "knob_left",
139 "invertAxis": "xy",
140 "translate": [-16, -8, -8],
141 "rotate": [-180, 0, 0],
142 "animations": [
143 {
144 "this.rx": 0
145 }
146 ]
147 },
148 {
149 "part": "knob_right",
150 "id": "knob_right",
151 "invertAxis": "xy",
152 "translate": [0, -8, -8],
153 "rotate": [-180, 0, 0],
154 "animations": [
155 {
156 "this.rx": 0
157 }
158 ]
159 }
160 ]
161} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/chest_large.png b/assets/minecraft/optifine/cem/chest_large.png
new file mode 100755
index 00000000..ac818d9b
--- /dev/null
+++ b/assets/minecraft/optifine/cem/chest_large.png
Binary files differ
diff --git a/assets/minecraft/optifine/cem/chicken.jem b/assets/minecraft/optifine/cem/chicken.jem
new file mode 100755
index 00000000..d431b938
--- /dev/null
+++ b/assets/minecraft/optifine/cem/chicken.jem
@@ -0,0 +1,159 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "textures/entity/chicken.png",
4 "textureSize": [64, 32],
5 "models": [
6 {
7 "part": "head",
8 "id": "head",
9 "invertAxis": "xy",
10 "translate": [0, -9, 4],
11 "boxes": [
12 {
13 "coordinates": [-2, 9, -6, 4, 6, 3],
14 "uvNorth": [3, 3, 7, 9],
15 "uvEast": [0, 3, 3, 9],
16 "uvSouth": [10, 3, 14, 9],
17 "uvWest": [7, 3, 10, 9],
18 "uvUp": [7, 3, 3, 0],
19 "uvDown": [11, 0, 7, 3]
20 },
21 {
22 "coordinates": [0, 15, -6, 0, 1, 3],
23 "uvEast": [14, 2, 11, 3],
24 "uvWest": [11, 2, 14, 3]
25 }
26 ]
27 },
28 {
29 "part": "bill",
30 "id": "bill",
31 "invertAxis": "xy",
32 "translate": [0, -9, 4],
33 "boxes": [
34 {
35 "coordinates": [-2, 11, -8, 4, 2, 2],
36 "uvNorth": [16, 2, 20, 4],
37 "uvEast": [14, 2, 16, 4],
38 "uvSouth": [22, 2, 26, 4],
39 "uvWest": [20, 2, 22, 4],
40 "uvUp": [20, 2, 16, 0],
41 "uvDown": [24, 0, 20, 2]
42 }
43 ]
44 },
45 {
46 "part": "chin",
47 "id": "chin",
48 "invertAxis": "xy",
49 "translate": [0, -9, 4],
50 "boxes": [
51 {
52 "coordinates": [-1, 9, -7, 2, 2, 2],
53 "uvNorth": [16, 6, 18, 8],
54 "uvEast": [14, 6, 16, 8],
55 "uvSouth": [20, 6, 22, 8],
56 "uvWest": [18, 6, 20, 8],
57 "uvUp": [18, 6, 16, 4],
58 "uvDown": [20, 4, 18, 6]
59 }
60 ]
61 },
62 {
63 "part": "body",
64 "id": "body",
65 "invertAxis": "xy",
66 "translate": [0, -8, 0],
67 "rotate": [-90, 0, 0],
68 "boxes": [
69 {
70 "coordinates": [-3, 4, -3, 6, 8, 6],
71 "uvNorth": [6, 15, 12, 23],
72 "uvEast": [0, 15, 6, 23],
73 "uvSouth": [18, 15, 24, 23],
74 "uvWest": [12, 15, 18, 23],
75 "uvUp": [12, 15, 6, 9],
76 "uvDown": [18, 9, 12, 15]
77 },
78 {
79 "coordinates": [0, 1, 1, 0, 4, 5],
80 "uvEast": [19, 13, 24, 9],
81 "uvWest": [19, 13, 24, 9]
82 }
83 ],
84 "animations": [
85 {
86 "this.rx": 0
87 }
88 ]
89 },
90 {
91 "part": "left_wing",
92 "id": "left_wing",
93 "invertAxis": "xy",
94 "translate": [4, -11, 0],
95 "boxes": [
96 {
97 "coordinates": [-4, 7, -3, 1, 4, 6],
98 "uvNorth": [30, 19, 31, 23],
99 "uvEast": [24, 19, 30, 23],
100 "uvSouth": [37, 19, 38, 23],
101 "uvWest": [31, 19, 37, 23],
102 "uvUp": [31, 19, 30, 13],
103 "uvDown": [32, 13, 31, 19]
104 }
105 ]
106 },
107 {
108 "part": "right_wing",
109 "id": "right_wing",
110 "invertAxis": "xy",
111 "translate": [-4, -11, 0],
112 "boxes": [
113 {
114 "coordinates": [3, 7, -3, 1, 4, 6],
115 "uvNorth": [30, 19, 31, 23],
116 "uvEast": [24, 19, 30, 23],
117 "uvSouth": [37, 19, 38, 23],
118 "uvWest": [31, 19, 37, 23],
119 "uvUp": [31, 19, 30, 13],
120 "uvDown": [32, 13, 31, 19]
121 }
122 ]
123 },
124 {
125 "part": "left_leg",
126 "id": "left_leg",
127 "invertAxis": "xy",
128 "translate": [1, -5, -1],
129 "boxes": [
130 {
131 "coordinates": [-3, 0, -2, 3, 5, 3],
132 "uvNorth": [29, 3, 32, 8],
133 "uvEast": [26, 3, 29, 8],
134 "uvSouth": [35, 3, 38, 8],
135 "uvWest": [32, 3, 35, 8],
136 "uvUp": [32, 3, 29, 0],
137 "uvDown": [35, 0, 32, 3]
138 }
139 ]
140 },
141 {
142 "part": "right_leg",
143 "id": "right_leg",
144 "invertAxis": "xy",
145 "translate": [-2, -5, -1],
146 "boxes": [
147 {
148 "coordinates": [0, 0, -2, 3, 5, 3],
149 "uvNorth": [29, 3, 32, 8],
150 "uvEast": [26, 3, 29, 8],
151 "uvSouth": [35, 3, 38, 8],
152 "uvWest": [32, 3, 35, 8],
153 "uvUp": [32, 3, 29, 0],
154 "uvDown": [35, 0, 32, 3]
155 }
156 ]
157 }
158 ]
159} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/cod.jem b/assets/minecraft/optifine/cem/cod.jem
new file mode 100755
index 00000000..ab019502
--- /dev/null
+++ b/assets/minecraft/optifine/cem/cod.jem
@@ -0,0 +1,167 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [32, 32],
4 "models": [
5 {
6 "part": "body",
7 "id": "body",
8 "invertAxis": "xy",
9 "translate": [0, -2, 0],
10 "submodels": [
11 {
12 "id": "fish",
13 "invertAxis": "xy",
14 "translate": [0, 2, 2],
15 "submodels": [
16 {
17 "id": "body2",
18 "invertAxis": "xy",
19 "translate": [0, 0, -2],
20 "boxes": [
21 {"coordinates": [-1, -2, 0, 2, 4, 7], "textureOffset": [0, 0]}
22 ],
23 "submodels": [
24 {
25 "id": "right_fin2",
26 "invertAxis": "xy",
27 "translate": [1, -1, 0],
28 "rotate": [0, 0, -45],
29 "boxes": [
30 {"coordinates": [0, 0, -1, 2, 0, 2], "textureOffset": [24, 1]}
31 ]
32 },
33 {
34 "id": "left_fin2",
35 "invertAxis": "xy",
36 "translate": [-1, -1, 0],
37 "rotate": [0, 0, 45],
38 "boxes": [
39 {"coordinates": [-2, 0, -1, 2, 0, 2], "textureOffset": [24, 4]}
40 ]
41 }
42 ]
43 },
44 {
45 "id": "head2",
46 "invertAxis": "xy",
47 "translate": [0, 0, -2],
48 "boxes": [
49 {"coordinates": [-1, -2, -3, 2, 4, 3], "textureOffset": [11, 0]}
50 ]
51 },
52 {
53 "id": "nose2",
54 "invertAxis": "xy",
55 "translate": [0, 0, -5],
56 "boxes": [
57 {"coordinates": [-1, -1, -1, 2, 3, 1], "textureOffset": [0, 0]}
58 ]
59 },
60 {
61 "id": "tail2",
62 "invertAxis": "xy",
63 "translate": [0, 0, 5],
64 "boxes": [
65 {"coordinates": [0, -2, 0, 0, 4, 4], "textureOffset": [22, 3]}
66 ]
67 },
68 {
69 "id": "fin_back2",
70 "invertAxis": "xy",
71 "translate": [0, 2, -2],
72 "boxes": [
73 {"coordinates": [0, 0, -1, 0, 1, 6], "textureOffset": [20, -6]}
74 ]
75 }
76 ]
77 },
78 {
79 "id": "right_fin",
80 "invertAxis": "xy",
81 "translate": [1, 1, 0],
82 "rotate": [0, 0, -45]
83 },
84 {
85 "id": "left_fin",
86 "invertAxis": "xy",
87 "translate": [-1, 1, 0],
88 "rotate": [0, 0, 45]
89 }
90 ],
91 "animations": [
92 {
93 "fish.rx": "-body.rx",
94 "fish.ry": "-body.ry",
95 "fish.rz": "-body.rz"
96 },
97 {
98 "body2.rx": "body.rx",
99 "body2.ry": "body.ry",
100 "body2.rz": "body.rz",
101 "head2.rx": "head.rx",
102 "head2.ry": "head.ry",
103 "head2.rz": "head.rz",
104 "nose2.rx": "nose.rx",
105 "nose2.ry": "nose.ry",
106 "nose2.rz": "nose.rz",
107 "tail2.rx": "tail.rx",
108 "tail2.ry": "tail.ry",
109 "tail2.rz": "tail.rz",
110 "fin_back2.rx": "fin_back.rx * limb_speed*2",
111 "fin_back2.ry": "fin_back.ry* limb_speed*2",
112 "fin_back2.rz": "fin_back.rz* limb_speed*2",
113 "right_fin2.rx": "right_fin.rx",
114 "right_fin2.ry": "right_fin.ry",
115 "right_fin2.rz": "right_fin.rz",
116 "left_fin2.rx": "left_fin.rx",
117 "left_fin2.ry": "left_fin.ry",
118 "left_fin2.rz": "left_fin.rz"
119 },
120 {
121 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
122 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
123 "var.test": "print(1,5,var.old_pos_y-pos_y)",
124 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
125 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
126 "fish.rx": "var.pitch"
127 }
128 ]
129 },
130 {
131 "part": "head",
132 "id": "head",
133 "invertAxis": "xy",
134 "translate": [0, -2, 0]
135 },
136 {
137 "part": "nose",
138 "id": "nose",
139 "invertAxis": "xy",
140 "translate": [0, -2, 3]
141 },
142 {
143 "part": "fin_left",
144 "id": "fin_left",
145 "invertAxis": "xy",
146 "translate": [0, 0, 0]
147 },
148 {
149 "part": "fin_right",
150 "id": "fin_right",
151 "invertAxis": "xy",
152 "translate": [0, 0, 0]
153 },
154 {
155 "part": "fin_back",
156 "id": "fin_back",
157 "invertAxis": "xy",
158 "translate": [0, -4, 0]
159 },
160 {
161 "part": "tail",
162 "id": "tail",
163 "invertAxis": "xy",
164 "translate": [0, -2, -7]
165 }
166 ]
167} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/cow.jem b/assets/minecraft/optifine/cem/cow.jem
new file mode 100755
index 00000000..98bb5a3c
--- /dev/null
+++ b/assets/minecraft/optifine/cem/cow.jem
@@ -0,0 +1,220 @@
1{
2 "textureSize": [64, 32],
3 "models": [
4 {
5 "part": "head",
6 "id": "head",
7 "invertAxis": "xy",
8 "translate": [0, -20, 7],
9 "boxes": [
10 {
11 "coordinates": [-4, 16, -13, 8, 8, 6],
12 "uvNorth": [6, 6, 14, 14],
13 "uvEast": [20, 6, 14, 14],
14 "uvSouth": [20, 6, 28, 14],
15 "uvWest": [6, 6, 0, 14],
16 "uvUp": [14, 6, 6, 0],
17 "uvDown": [22, 0, 14, 6]
18 },
19 {
20 "coordinates": [-4.5, 22, -11, 1, 3, 1],
21 "uvNorth": [23, 1, 24, 4],
22 "uvEast": [22, 1, 23, 4],
23 "uvSouth": [25, 1, 26, 4],
24 "uvWest": [24, 1, 25, 4],
25 "uvUp": [24, 1, 23, 0],
26 "uvDown": [25, 0, 24, 1]
27 },
28 {
29 "coordinates": [3.5, 22, -11, 1, 3, 1],
30 "uvNorth": [23, 1, 24, 4],
31 "uvEast": [22, 1, 23, 4],
32 "uvSouth": [25, 1, 26, 4],
33 "uvWest": [24, 1, 25, 4],
34 "uvUp": [24, 1, 23, 0],
35 "uvDown": [25, 0, 24, 1]
36 },
37 {
38 "coordinates": [-3, 16, -14, 6, 3, 1],
39 "uvNorth": [7, 11, 13, 14],
40 "uvEast": [12, 11, 13, 14],
41 "uvSouth": [7, 11, 13, 14],
42 "uvWest": [7, 11, 8, 14],
43 "uvUp": [7, 11, 13, 12],
44 "uvDown": [7, 13, 13, 14]
45 },
46 {
47 "coordinates": [-4, 19, -13.01, 8, 1, 0],
48 "uvNorth": [6, 14, 14, 15]
49 },
50 {
51 "coordinates": [-1, 20, -8, 2, 2, 2],
52 "uvNorth": [0, 0, 2, 2],
53 "uvEast": [0, 0, 2, 2],
54 "uvSouth": [0, 0, 2, 2],
55 "uvWest": [0, 0, 2, 2],
56 "uvUp": [0, 0, 2, 2],
57 "uvDown": [0, 0, 2, 2]
58 }
59 ],
60 "submodels": [
61 {
62 "id": "left_pupil",
63 "invertAxis": "xy",
64 "translate": [0, 0, 0],
65 "boxes": [
66 {
67 "coordinates": [2, 19, -13.02, 1, 1, 0],
68 "uvNorth": [7, 15, 8, 16]
69 }
70 ]
71 },
72 {
73 "id": "right_pupil",
74 "invertAxis": "xy",
75 "translate": [0, 0, 0],
76 "boxes": [
77 {
78 "coordinates": [-3, 19, -13.02, 1, 1, 0],
79 "uvNorth": [7, 15, 8, 16]
80 }
81 ]
82 },
83 {
84 "id": "leftear",
85 "invertAxis": "xy",
86 "translate": [4, 22, -9.5],
87 "rotate": [0, 0, -10],
88 "boxes": [
89 {
90 "coordinates": [0, -1, -0.5, 3, 2, 1],
91 "uvNorth": [27, 1, 30, 3],
92 "uvEast": [31, 1, 30, 3],
93 "uvSouth": [34, 1, 31, 3],
94 "uvWest": [27, 1, 26, 3],
95 "uvUp": [27, 1, 30, 0],
96 "uvDown": [30, 0, 33, 1]
97 }
98 ]
99 },
100 {
101 "id": "rightear",
102 "invertAxis": "xy",
103 "translate": [-4, 22, -9.5],
104 "rotate": [0, 0, 10],
105 "boxes": [
106 {
107 "coordinates": [-3, -1, -0.5, 3, 2, 1],
108 "uvNorth": [30, 1, 27, 3],
109 "uvEast": [26, 1, 27, 3],
110 "uvSouth": [31, 1, 34, 3],
111 "uvWest": [30, 1, 31, 3],
112 "uvUp": [30, 1, 27, 0],
113 "uvDown": [33, 0, 30, 1]
114 }
115 ]
116 }
117 ]
118 },
119 {
120 "part": "body",
121 "id": "body",
122 "invertAxis": "xy",
123 "translate": [0, -19, -2],
124 "rotate": [-90, 0, 0],
125 "boxes": [
126 {
127 "coordinates": [-6, 11, -5, 12, 18, 10],
128 "uvNorth": [28, 14, 40, 32],
129 "uvEast": [18, 14, 28, 32],
130 "uvSouth": [50, 14, 62, 32],
131 "uvWest": [40, 14, 50, 32],
132 "uvUp": [40, 14, 28, 4],
133 "uvDown": [52, 4, 40, 14]
134 },
135 {
136 "coordinates": [-2, 12, -7, 4, 6, 2],
137 "uvNorth": [53, 1, 57, 7],
138 "uvEast": [52, 1, 53, 7],
139 "uvSouth": [58, 1, 62, 7],
140 "uvWest": [57, 1, 58, 7],
141 "uvUp": [57, 1, 53, 0],
142 "uvDown": [61, 0, 57, 1]
143 }
144 ],
145 "animations": [
146 {
147 "this.rx": 0
148 }
149 ]
150 },
151 {
152 "part": "leg1",
153 "id": "leg1",
154 "invertAxis": "xy",
155 "translate": [-4, -12, -7],
156 "boxes": [
157 {
158 "coordinates": [2, 0, 5, 4, 12, 4],
159 "uvNorth": [4, 20, 8, 32],
160 "uvEast": [0, 20, 4, 32],
161 "uvSouth": [12, 20, 16, 32],
162 "uvWest": [8, 20, 12, 32],
163 "uvUp": [8, 20, 4, 16],
164 "uvDown": [12, 16, 8, 20]
165 }
166 ]
167 },
168 {
169 "part": "leg2",
170 "id": "leg2",
171 "invertAxis": "xy",
172 "translate": [4, -12, -7],
173 "boxes": [
174 {
175 "coordinates": [-6, 0, 5, 4, 12, 4],
176 "uvNorth": [4, 20, 8, 32],
177 "uvEast": [0, 20, 4, 32],
178 "uvSouth": [12, 20, 16, 32],
179 "uvWest": [8, 20, 12, 32],
180 "uvUp": [8, 20, 4, 16],
181 "uvDown": [12, 16, 8, 20]
182 }
183 ]
184 },
185 {
186 "part": "leg3",
187 "id": "leg3",
188 "invertAxis": "xy",
189 "translate": [-4.5, -12, 6],
190 "boxes": [
191 {
192 "coordinates": [1.5, 0, -7, 4, 12, 4],
193 "uvNorth": [4, 20, 8, 32],
194 "uvEast": [0, 20, 4, 32],
195 "uvSouth": [12, 20, 16, 32],
196 "uvWest": [8, 20, 12, 32],
197 "uvUp": [8, 20, 4, 16],
198 "uvDown": [12, 16, 8, 20]
199 }
200 ]
201 },
202 {
203 "part": "leg4",
204 "id": "leg4",
205 "invertAxis": "xy",
206 "translate": [4, -12, 6],
207 "boxes": [
208 {
209 "coordinates": [-5.5, 0, -7, 4, 12, 4],
210 "uvNorth": [4, 20, 8, 32],
211 "uvEast": [0, 20, 4, 32],
212 "uvSouth": [12, 20, 16, 32],
213 "uvWest": [8, 20, 12, 32],
214 "uvUp": [8, 20, 4, 16],
215 "uvDown": [12, 16, 8, 20]
216 }
217 ]
218 }
219 ]
220} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/ender_chest.jem b/assets/minecraft/optifine/cem/ender_chest.jem
new file mode 100755
index 00000000..1bfb3c7b
--- /dev/null
+++ b/assets/minecraft/optifine/cem/ender_chest.jem
@@ -0,0 +1,156 @@
1{
2 "textureSize": [64, 64],
3 "models": [
4 {
5 "part": "base",
6 "id": "base",
7 "invertAxis": "xy",
8 "translate": [-8, 0, -8],
9 "rotate": [-180, 0, 0],
10 "submodels": [
11 {
12 "id": "base2",
13 "invertAxis": "xy",
14 "translate": [0, 0, 23],
15 "submodels": [
16 {
17 "id": "anti_base",
18 "invertAxis": "xy",
19 "translate": [8, 0, -15],
20 "rotate": [-180, 0, 0],
21 "submodels": [
22 {
23 "id": "lid2",
24 "invertAxis": "xy",
25 "translate": [0, 9, -1],
26 "rotate": [-180, 0, 0],
27 "boxes": [
28 {
29 "coordinates": [-15, -5, 0, 14, 5, 14],
30 "uvNorth": [14, 14, 28, 19],
31 "uvEast": [0, 14, 14, 19],
32 "uvSouth": [42, 14, 56, 19],
33 "uvWest": [28, 14, 42, 19],
34 "uvUp": [28, 14, 14, 0],
35 "uvDown": [42, 0, 28, 14]
36 }
37 ],
38 "submodels": [
39 {
40 "id": "knob2",
41 "invertAxis": "xy",
42 "translate": [0, -1, 30],
43 "rotate": [-180, 0, 0],
44 "boxes": [
45 {
46 "coordinates": [-9, -3, 15, 2, 4, 1],
47 "uvNorth": [1, 1, 3, 5],
48 "uvEast": [0, 1, 1, 5],
49 "uvSouth": [4, 1, 6, 5],
50 "uvWest": [3, 1, 4, 5],
51 "uvUp": [3, 1, 1, 0],
52 "uvDown": [5, 0, 3, 1]
53 }
54 ]
55 }
56 ]
57 }
58 ]
59 },
60 {
61 "id": "rand",
62 "invertAxis": "xy",
63 "translate": [8, 0, -15]
64 },
65 {
66 "id": "close",
67 "invertAxis": "xy",
68 "translate": [8, 0, -15]
69 },
70 {
71 "id": "eye",
72 "invertAxis": "xy",
73 "translate": [0, -5, 3],
74 "submodels": [
75 {
76 "id": "negey",
77 "invertAxis": "xy",
78 "translate": [-1, 5, -27],
79 "boxes": [
80 {
81 "coordinates": [0, -7, 24.02, 2, 4, 0],
82 "uvSouth": [43, 26, 45, 30]
83 }
84 ]
85 }
86 ]
87 }
88 ],
89 "boxes": [
90 {
91 "coordinates": [-2, -7, 0.03, 2, 2, 0],
92 "uvSouth": [53, 29, 54, 30]
93 },
94 {
95 "coordinates": [-3, -9, 0.01, 6, 8, 0],
96 "uvSouth": [46, 24, 52, 32]
97 },
98 {
99 "coordinates": [-7, -10, -14, 14, 10, 14],
100 "uvNorth": [14, 33, 28, 43],
101 "uvEast": [0, 33, 14, 43],
102 "uvSouth": [42, 33, 56, 43],
103 "uvWest": [28, 33, 42, 43],
104 "uvUp": [28, 33, 14, 19],
105 "uvDown": [42, 19, 28, 33]
106 }
107 ]
108 }
109 ],
110 "animations": [
111 {
112 "this.rx": 0,
113 "this.ry": 0
114 },
115 {
116 "rand.rx": "if(sin(time/8)>0.999,(random(time)*4)-2,rand.rx)",
117 "rand.ry": "if(sin(time/8)>0.999,(random(time+1)*6)+2,rand.ry)",
118 "eye.ty": "if( (pow(pos_x-player_pos_x, 2) + pow(pos_y-player_pos_y, 2) + pow(pos_z-player_pos_z, 2) < 25) , lerp(0.1,eye.ty, clamp( -(pos_y+0.3-player_pos_y+1)+7,3,7) ) , lerp(0.1,eye.ty,rand.ry))",
119 "eye.tx": "if(pow(pos_x-player_pos_x, 2) + pow(pos_y-player_pos_y, 2) + pow(pos_z-player_pos_z, 2) < 25 , lerp(0.1,eye.tx, if(rule_index==3 && player_pos_z < pos_z+0.5,-2*pi,0) + if(rule_index==1,torad(-90),rule_index==2,torad(90),rule_index==3,torad(180),0) -torad(atan2(player_pos_z - (pos_z+0.5), player_pos_x - (pos_x+0.5)) * 180 / pi) ), lerp(0.1,eye.tx,rand.rx))",
120 "eye.sy": "(lid.rx/(pi*2))+1",
121 "eye.sx": "(lid.rx/(pi))+1"
122 },
123 {
124 "lid2.rx": "if(close.visible, if(lid.rx > -pi/2.5 ,sin(lid.rx*2.5)/3,(lid.rx*2)+(pi/2)) , lid.rx) +pi",
125 "base.rx": "if(close.visible,0, if(lid.rx > -pi/2.5 ,sin(lid.rx*2.5)/6,0))",
126 "base2.rx": "if(close.visible,if(lid.rx > -pi/2.5 ,-sin(lid.rx*2.5)/2,0 )/7,0)",
127 "close.visible": "if(lid.rx == 0,0,lid.rx < -1.5, 1,if(close.visible,1,0)) > 0"
128 }
129 ]
130 },
131 {
132 "part": "lid",
133 "id": "lid",
134 "invertAxis": "xy",
135 "translate": [-8, -9, -7],
136 "rotate": [-180, 0, 0],
137 "animations": [
138 {
139 "this.rx": 0
140 }
141 ]
142 },
143 {
144 "part": "knob",
145 "id": "knob",
146 "invertAxis": "xy",
147 "translate": [-8, -8, -8],
148 "rotate": [-180, 0, 0],
149 "animations": [
150 {
151 "this.rx": 0
152 }
153 ]
154 }
155 ]
156} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/ender_chest.properties b/assets/minecraft/optifine/cem/ender_chest.properties
new file mode 100755
index 00000000..9a26b589
--- /dev/null
+++ b/assets/minecraft/optifine/cem/ender_chest.properties
@@ -0,0 +1,8 @@
1models.1=1
2blocks.1=ender_chest:facing=north
3
4models.2=1
5blocks.2=ender_chest:facing=south
6
7models.3=1
8blocks.3=ender_chest:facing=west \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/enderman.jem b/assets/minecraft/optifine/cem/enderman.jem
new file mode 100755
index 00000000..5c2bc9c3
--- /dev/null
+++ b/assets/minecraft/optifine/cem/enderman.jem
@@ -0,0 +1,316 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "textures/entity/enderman/enderman.png",
4 "textureSize": [64, 32],
5 "models": [
6 {
7 "part": "body",
8 "id": "body",
9 "invertAxis": "xy",
10 "translate": [0, -39, 0],
11 "submodels": [
12 {
13 "id": "chest",
14 "invertAxis": "xy",
15 "translate": [0, 27, 0],
16 "boxes": [
17 {"coordinates": [-4, 0, -2, 8, 12, 4], "textureOffset": [32, 16]}
18 ],
19 "submodels": [
20 {
21 "id": "anti_chest",
22 "invertAxis": "xy",
23 "translate": [0, 10, 0],
24 "submodels": [
25 {
26 "id": "right_arm2",
27 "invertAxis": "xy",
28 "translate": [5, 0, 0],
29 "boxes": [
30 {"coordinates": [-1, -13, -1, 2, 15, 2], "textureOffset": [56, 0]}
31 ],
32 "submodels": [
33 {
34 "id": "r_elbow",
35 "invertAxis": "xy",
36 "translate": [0, -13, 1],
37 "boxes": [
38 {"coordinates": [-1, -15, -2, 2, 15, 2], "textureOffset": [56, 15]}
39 ]
40 }
41 ]
42 },
43 {
44 "id": "left_arm2",
45 "invertAxis": "xy",
46 "mirrorTexture": "u",
47 "translate": [-5, 0, 0],
48 "boxes": [
49 {"coordinates": [-1, -13, -1, 2, 15, 2], "textureOffset": [56, 0]}
50 ],
51 "submodels": [
52 {
53 "id": "l_elbow",
54 "invertAxis": "xy",
55 "mirrorTexture": "u",
56 "translate": [0, -13, 1],
57 "boxes": [
58 {"coordinates": [-1, -15, -2, 2, 15, 2], "textureOffset": [56, 15]}
59 ]
60 }
61 ]
62 },
63 {
64 "id": "anti_rot",
65 "invertAxis": "xy",
66 "translate": [0, 15, 0],
67 "submodels": [
68 {
69 "id": "head_look",
70 "invertAxis": "xy",
71 "translate": [0, -14, 0],
72 "submodels": [
73 {
74 "id": "headw_l",
75 "invertAxis": "xy",
76 "translate": [0, 0, 0],
77 "boxes": [
78 {"coordinates": [-4, 0, -4, 8, 8, 8], "textureOffset": [0, 16], "sizeAdd": -0.5}
79 ]
80 },
81 {
82 "id": "head3",
83 "invertAxis": "xy",
84 "translate": [0, 0, 0],
85 "submodels": [
86 {
87 "id": "head_n2",
88 "invertAxis": "xy",
89 "translate": [0, -38, 0],
90 "boxes": [
91 {"coordinates": [-4, 38, -4, 8, 8, 8], "textureOffset": [0, 0]}
92 ]
93 }
94 ]
95 }
96 ]
97 }
98 ]
99 },
100 {
101 "id": "headwear2",
102 "invertAxis": "xy",
103 "translate": [0, 1, 0],
104 "submodels": [
105 {
106 "id": "headw_n",
107 "invertAxis": "xy",
108 "translate": [0, 0, 0],
109 "boxes": [
110 {"coordinates": [-4, 0, -4, 8, 8, 8], "textureOffset": [0, 16], "sizeAdd": -0.5}
111 ]
112 },
113 {
114 "id": "head2",
115 "invertAxis": "xy",
116 "translate": [0, 0, 0],
117 "submodels": [
118 {
119 "id": "head_n",
120 "invertAxis": "xy",
121 "translate": [0, -38, 0],
122 "boxes": [
123 {"coordinates": [-4, 38, -4, 8, 8, 8], "textureOffset": [0, 0]}
124 ]
125 }
126 ]
127 }
128 ]
129 }
130 ]
131 }
132 ]
133 },
134 {
135 "id": "right_leg2",
136 "invertAxis": "xy",
137 "translate": [2, 30, 0],
138 "boxes": [
139 {"coordinates": [-1, -15, -1, 2, 15, 2], "textureOffset": [56, 0]}
140 ],
141 "submodels": [
142 {
143 "id": "right_knee2",
144 "invertAxis": "xy",
145 "translate": [0, -15, 0],
146 "boxes": [
147 {"coordinates": [-1, -15, -1, 2, 15, 2], "textureOffset": [56, 15]}
148 ]
149 }
150 ]
151 },
152 {
153 "id": "left_leg2",
154 "invertAxis": "xy",
155 "mirrorTexture": "u",
156 "translate": [-2, 30, 0],
157 "boxes": [
158 {"coordinates": [-1, -15, -1, 2, 15, 2], "textureOffset": [56, 0]}
159 ],
160 "submodels": [
161 {
162 "id": "left_knee2",
163 "invertAxis": "xy",
164 "mirrorTexture": "u",
165 "translate": [0, -15, 0],
166 "boxes": [
167 {"coordinates": [-1, -15, -1, 2, 15, 2], "textureOffset": [56, 15]}
168 ]
169 }
170 ]
171 }
172 ],
173 "animations": [
174 {
175 "var.angry": "if(head.ty==-18,1,0)",
176 "var.fortesting": "if(head.ty==-18,1,0)",
177 "var.still_k": "if(is_on_ground && limb_speed <= 0.1,(var.still_k+0.03),0)",
178 "var.rand_still": "if(var.still_k < 0,random(id*age),var.rand_still)"
179 },
180 {
181 "var.time": "var.time + 1 * limb_speed * if(var.angry==1,1.5,1) * if(random(id) > 0.5 && var.angry!=1,if(sin(var.time) < sin(var.time-0.01),3.4*limb_speed,1),1) * 4 * frame_time",
182 "var.time_idle": "var.time_idle + 2 * frame_time"
183 },
184 {
185 "var.hop": 4,
186 "var.cos_base": "if(limb_speed > 0.1,((cos( var.time )-(var.hop/2)/2)*var.hop + 9),var.cos_base+1)",
187 "var.ncos_base": "if(limb_speed > 0.1,((-cos( var.time )-(var.hop/2)/2)*var.hop + 9),var.ncos_base+1)",
188 "var.limp_rrx": "((sin(var.time)*2)/6)+torad(-7)",
189 "var.limp_rty": "min(var.cos_base*2-36, 30 * -cos(var.leg_rrx)) ",
190 "var.limp_lrx": "(-(sin(var.time)*2)/8)+torad(13)",
191 "var.limp_lty": " 30 * -cos(left_leg2.rx)",
192 "var.walk_rrx": "(sin(var.time)*limb_speed*2)/4",
193 "var.walk_rty": "min(var.cos_base*2-36, 30 * -cos(var.leg_rrx)) ",
194 "var.walk_lrx": "-(sin(var.time)*limb_speed*2)/4",
195 "var.walk_lty": "min(var.ncos_base*2-36, 30 * -cos(var.leg_rrx))",
196 "var.leg_rrx": "if(random(id) > 0.5 && var.angry!=1,var.limp_rrx,var.walk_rrx)",
197 "var.leg_rty": "if(random(id) > 0.5 && var.angry!=1,var.limp_rty,var.walk_rty)",
198 "var.leg_lrx": "if(random(id) > 0.5 && var.angry!=1,var.limp_lrx,var.walk_lrx)",
199 "var.leg_lty": "if(random(id) > 0.5 && var.angry!=1,var.limp_lty,var.walk_lty)",
200 "var.angry_cos_base": "if(limb_speed > 0.1,((cos( var.time )-(var.hop/2)/2)*var.hop + 9),var.angry_cos_base-1)",
201 "var.angry_ncos_base": "if(limb_speed > 0.1,((-cos( var.time )-(var.hop/2)/2)*var.hop + 9),var.angry_ncos_base-1)",
202 "var.right_bend": "(-cos(var.time)*limb_speed*0.8)+0.7*limb_speed",
203 "var.angry_rrx": "(sin(var.time)*limb_speed*1.5)-0.3*limb_speed",
204 "var.y": "(15*sin(-(var.right_bend-torad(180))/2))*2",
205 "var.f": "(todeg(-var.angry_rrx) - (90-todeg(-(var.right_bend-torad(180))/2)))",
206 "var.angry_rty": "min(-22,-(var.y * cos(torad(var.f))),-(15 * cos(var.angry_rrx)))",
207 "var.left_bend": "(-cos(var.time)*limb_speed*0.8)-0.7*limb_speed",
208 "var.angry_lrx": "(-sin(var.time)*limb_speed*1.5)-0.5*limb_speed",
209 "var.ly": "(15*sin(-(var.left_bend-torad(180))/2))*2",
210 "var.lf": "(todeg(-var.angry_lrx) - (90-todeg((var.left_bend-torad(180))/2)))",
211 "var.angry_lty": "min(-22,(var.ly * cos(torad(var.lf))),-(15 * cos(var.angry_lrx)))",
212 "right_leg2.rx": "if(var.angry==1,var.angry_rrx,var.leg_rrx)",
213 "right_leg2.ty": "if(var.angry==1,var.angry_rty,var.leg_rty)",
214 "right_knee2.rx": "if(var.angry==1,var.right_bend,0)",
215 "left_leg2.rx": "if(var.angry==1,var.angry_lrx,var.leg_lrx)",
216 "left_leg2.ty": "if(var.angry==1,var.angry_lty,var.leg_lty)",
217 "left_knee2.rx": "if(var.angry==1,-var.left_bend,0)"
218 },
219 {
220 "var.chest_ty": "(-sin( var.time *2)-(var.hop/2)/2)*var.hop + 7",
221 "chest.rx": "if(var.angry==1,0.9*limb_speed,0) + if(limb_speed < 0.1,cos(var.time_idle/2)/9,0) + ((cos(var.time)*limb_speed*2)/9)+0.2",
222 "var.smooth_speed": "clamp( if(sin(var.time) < sin(var.time-0.01),var.smooth_speed+0.1,var.smooth_speed-0.1) ,1,1)",
223 "chest.ty": "max(left_leg2.ty,right_leg2.ty)",
224 "chest.rz": "if(var.angry!=1,-left_leg2.rx/6,0)",
225 "anti_chest.rx": "-chest.rx",
226 "anti_chest.ry": "-chest.ry",
227 "anti_chest.rz": "-chest.rz"
228 },
229 {
230 "var.right_arm_rty": "if(limb_speed < 0.1,-sin(var.time_idle)/4,0) + (-sin(var.time*2)*limb_speed*2)/3",
231 "var.right_arm_rrx": "if(right_arm.rx == -0.5,-0.5,if(limb_speed < 0.1,-sin(var.time_idle/2)/9,0) - (sin(var.time)*limb_speed*2)/4 )",
232 "var.right_arm_bend": "((-cos(var.time)*limb_speed*0.8)+0.5 )*if(random(id+1) < 0.5,0,1)",
233 "var.angry_arm_rrx": "((sin(var.time)*limb_speed*1.3)+0.4)*if(random(id+1) < 0.5,0,1) + if(random(id+1) < 0.5,-torad(90)*limb_speed,0)",
234 "var.ay": "(15*sin(-(var.right_arm_bend-torad(180))/2))*2",
235 "var.af": "(todeg(-var.angry_arm_rrx) - (90-todeg(-(var.right_arm_bend-torad(180))/2)))",
236 "right_arm2.rx": "if(var.angry==1,var.angry_arm_rrx,var.right_arm_rrx)",
237 "right_arm2.rz": "if(right_arm.rx == -0.5,torad(-1),0)",
238 "right_arm2.ty": "if(var.angry==1,var.angry_arm_rty,var.right_arm_rty)",
239 "r_elbow.rx": "if(var.angry==1,-var.right_arm_bend,0)"
240 },
241 {
242 "var.left_arm_lty": "if(limb_speed < 0.1,-sin(var.time_idle)/4,0) + (-sin(var.time*2)*limb_speed*2)/3",
243 "var.left_arm_lrx": "if(left_arm.rx == -0.5,-0.5,if(limb_speed < 0.1,sin(var.time_idle/2)/9,0) - (-sin(var.time)*limb_speed*2)/4 ) ",
244 "var.left_arm_bend": "((cos(var.time)*limb_speed*0.8)+0.5) *if(random(id+1) < 0.5,0,1)",
245 "var.angry_arm_lrx": "((-sin(var.time)*limb_speed*1.3)+0.4 )*if(random(id+1) < 0.5,0,1) + if(random(id+1) < 0.5,-torad(90)*limb_speed,0)",
246 "var.lay": "(15*sin(-(var.left_arm_bend-torad(180))/2))*2",
247 "var.laf": "(todeg(-var.angry_arm_lrx) - (90-todeg(-(var.left_arm_bend-torad(180))/2)))",
248 "left_arm2.rx": "if(var.angry==1,var.angry_arm_lrx,var.left_arm_lrx)",
249 "left_arm2.rz": "if(right_arm.rx == -0.5,torad(-1),0)",
250 "left_arm2.ty": "if(var.angry==1,var.angry_arm_lty,var.left_arm_lty)",
251 "l_elbow.rx": "if(var.angry==1,-var.left_arm_bend,0)"
252 },
253 {
254 "var.glitch_k": "if(var.glitch_k > 10, -0.2 * if(var.angry== 1,3,1),var.glitch_k + 0.02 * if(var.angry== 1,10,1) * var.glitch_rand)",
255 "var.glitch_rand": "if( var.glitch_k <= 0,random(id*age)*2+0.5,var.glitch_rand)",
256 "var.glitch": "if(var.glitch_k > 0,random(id*age),var.glitch)",
257 "var.glitch_clean": "if(var.glitch_k < 0,var.glitch,0)",
258 "var.glitch2": "if(var.glitch_k > 0,random(id+2*age),var.glitch2)",
259 "var.glitch_clean2": "if(var.glitch_k < 0,var.glitch2,0)"
260 },
261 {
262 "headwear2.rx": "head.rx + (var.glitch_clean2*2 * pi) + ((sin(var.time)*limb_speed*2)/9)",
263 "headwear2.ry": "head.ry + (var.glitch_clean2*2 * pi) ",
264 "var.angry_k": "clamp( if(var.angry==1,var.angry_k+0.1,var.angry_k-0.1) ,0,1)",
265 "head_n.ty": "lerp(var.angry_k,38,34)"
266 },
267 {
268 "anti_rot.ry": "-rot_y",
269 "var.look_k": "if(var.look_k>10,-(time % 10),var.look_k+ 1/60)",
270 "head_look.visible": "if(var.look_k > 0 && var.angry!=1,1,0) > 0",
271 "headwear2.visible": "!head_look.visible",
272 "head_look.ry": "torad(-90 + atan2(player_pos_z - pos_z, player_pos_x - pos_x) * 180 / pi)",
273 "head_look.rx": "torad(-90) + acos(((player_pos_y-1) - pos_y) / sqrt(pow(player_pos_x - pos_x, 2) + pow(player_pos_y - pos_y, 2) + pow(player_pos_z - pos_z, 2)))"
274 }
275 ]
276 },
277 {
278 "part": "head",
279 "id": "head",
280 "invertAxis": "xy",
281 "translate": [0, -39, 0]
282 },
283 {
284 "part": "headwear",
285 "id": "headwear",
286 "invertAxis": "xy",
287 "translate": [0, -39, 0]
288 },
289 {
290 "part": "right_arm",
291 "id": "right_arm",
292 "invertAxis": "xy",
293 "translate": [-5, -37, 0]
294 },
295 {
296 "part": "left_arm",
297 "id": "left_arm",
298 "invertAxis": "xy",
299 "mirrorTexture": "u",
300 "translate": [5, -37, 0]
301 },
302 {
303 "part": "right_leg",
304 "id": "right_leg",
305 "invertAxis": "xy",
306 "translate": [-2, -30, 0]
307 },
308 {
309 "part": "left_leg",
310 "id": "left_leg",
311 "invertAxis": "xy",
312 "mirrorTexture": "u",
313 "translate": [2, -30, 0]
314 }
315 ]
316} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/horse.jem b/assets/minecraft/optifine/cem/horse.jem
new file mode 100755
index 00000000..ec643bb4
--- /dev/null
+++ b/assets/minecraft/optifine/cem/horse.jem
@@ -0,0 +1,452 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "textures/entity/horse/horse_brown.png",
4 "textureSize": [64, 64],
5 "models": [
6 {
7 "part": "head",
8 "id": "head",
9 "invertAxis": "xy",
10 "translate": [0, -22, 9],
11 "boxes": [
12 {
13 "coordinates": [-3, 28, -11, 6, 5, 7],
14 "uvNorth": [7, 20, 13, 25],
15 "uvEast": [0, 20, 7, 25],
16 "uvSouth": [20, 20, 26, 25],
17 "uvWest": [13, 20, 20, 25],
18 "uvUp": [13, 20, 7, 13],
19 "uvDown": [19, 13, 13, 20]
20 },
21 {
22 "coordinates": [-3.01, 31, -9, 0, 1, 2],
23 "uvWest": [22, 14, 24, 15]
24 },
25 {
26 "coordinates": [3.01, 31, -9, 0, 1, 2],
27 "uvEast": [19, 14, 21, 15]
28 }
29 ],
30 "submodels": [
31 {
32 "id": "pupils",
33 "invertAxis": "xy",
34 "translate": [0, 0, 0],
35 "boxes": [
36 {
37 "coordinates": [-3.02, 31, -9, 6.04, 1, 1],
38 "uvEast": [20, 15, 21, 16],
39 "uvWest": [22, 15, 23, 16]
40 }
41 ]
42 }
43 ]
44 },
45 {
46 "part": "mouth",
47 "id": "mouth",
48 "invertAxis": "xy",
49 "translate": [0, -22, 9],
50 "boxes": [
51 {
52 "coordinates": [-2, 30, -16, 4, 3, 5],
53 "uvNorth": [5, 30, 9, 33],
54 "uvEast": [0, 30, 5, 33],
55 "uvSouth": [14, 30, 18, 33],
56 "uvWest": [9, 30, 14, 33],
57 "uvUp": [9, 30, 5, 25],
58 "uvDown": [18, 25, 14, 30]
59 }
60 ],
61 "submodels": [
62 {
63 "id": "bone",
64 "invertAxis": "xy",
65 "translate": [0, 30, -11],
66 "boxes": [
67 {
68 "coordinates": [-1.5, -2, -4, 3, 2, 4],
69 "uvNorth": [5, 33, 8, 35],
70 "uvEast": [1, 33, 5, 35],
71 "uvSouth": [15, 33, 18, 35],
72 "uvWest": [9, 33, 13, 35],
73 "uvUp": [4, 29, 0, 25],
74 "uvDown": [13, 25, 9, 30]
75 }
76 ]
77 }
78 ]
79 },
80 {
81 "part": "left_ear",
82 "id": "left_ear",
83 "invertAxis": "xy",
84 "translate": [0, -23, 9.01],
85 "boxes": [
86 {
87 "coordinates": [-3.05, 33, -5.11, 2, 3, 1],
88 "uvNorth": [20, 17, 22, 20],
89 "uvEast": [19, 17, 20, 20],
90 "uvSouth": [23, 17, 25, 20],
91 "uvWest": [22, 17, 23, 20],
92 "uvUp": [22, 17, 20, 16],
93 "uvDown": [24, 16, 22, 17]
94 }
95 ]
96 },
97 {
98 "part": "right_ear",
99 "id": "right_ear",
100 "invertAxis": "xy",
101 "translate": [0, -23, 9.01],
102 "boxes": [
103 {
104 "coordinates": [1.05, 33, -5.11, 2, 3, 1],
105 "uvNorth": [20, 17, 22, 20],
106 "uvEast": [19, 17, 20, 20],
107 "uvSouth": [23, 17, 25, 20],
108 "uvWest": [22, 17, 23, 20],
109 "uvUp": [22, 17, 20, 16],
110 "uvDown": [24, 16, 22, 17]
111 }
112 ]
113 },
114 {
115 "part": "neck",
116 "id": "neck",
117 "invertAxis": "xy",
118 "translate": [0, -22, 9],
119 "boxes": [
120 {
121 "coordinates": [-1.95, 16, -11, 4, 12, 7],
122 "uvNorth": [7, 42, 11, 54],
123 "uvEast": [0, 42, 7, 54],
124 "uvSouth": [18, 42, 22, 54],
125 "uvWest": [11, 42, 18, 54],
126 "uvUp": [11, 42, 7, 35],
127 "uvDown": [15, 35, 11, 42]
128 }
129 ]
130 },
131 {
132 "part": "mane",
133 "id": "mane",
134 "invertAxis": "xy",
135 "translate": [0, -22, 9.01],
136 "boxes": [
137 {
138 "coordinates": [-1, 18, -4.5, 2, 16, 2.5],
139 "uvNorth": [58, 38, 60, 54],
140 "uvEast": [56, 38, 58, 54],
141 "uvSouth": [62, 38, 64, 54],
142 "uvWest": [60, 38, 62, 54],
143 "uvUp": [60, 38, 58, 36],
144 "uvDown": [62, 36, 60, 38]
145 }
146 ]
147 },
148 {
149 "part": "body",
150 "id": "body",
151 "invertAxis": "xy",
152 "translate": [0, -13, -6],
153 "boxes": [
154 {
155 "coordinates": [-5, 11, -11, 10, 10, 22],
156 "uvNorth": [22, 54, 32, 64],
157 "uvEast": [0, 54, 22, 64],
158 "uvSouth": [54, 54, 64, 64],
159 "uvWest": [32, 54, 54, 64],
160 "uvUp": [32, 54, 22, 32],
161 "uvDown": [42, 32, 32, 54],
162 "sizeAdd": 0.05
163 }
164 ]
165 },
166 {
167 "part": "tail",
168 "id": "tail",
169 "invertAxis": "xy",
170 "translate": [0, -21, -11],
171 "boxes": [
172 {
173 "coordinates": [-1.5, 7, 11, 3, 14, 4],
174 "uvNorth": [46, 40, 49, 54],
175 "uvEast": [42, 40, 46, 54],
176 "uvSouth": [53, 40, 56, 54],
177 "uvWest": [49, 40, 53, 54],
178 "uvUp": [49, 40, 46, 36],
179 "uvDown": [52, 36, 49, 40]
180 }
181 ]
182 },
183 {
184 "part": "front_left_leg",
185 "id": "front_left_leg",
186 "invertAxis": "xy",
187 "translate": [4, -10, 9],
188 "boxes": [
189 {
190 "coordinates": [-4.8, 0, -10.8, 3.6, 11, 3.8],
191 "uvNorth": [56, 25, 52, 36],
192 "uvEast": [60, 25, 56, 36],
193 "uvSouth": [64, 25, 60, 36],
194 "uvWest": [52, 25, 48, 36],
195 "uvUp": [52, 25, 56, 21],
196 "uvDown": [56, 21, 60, 25]
197 },
198 {
199 "coordinates": [-5, 0, -10.9, 4, 3, 4],
200 "uvNorth": [56, 33, 52, 36],
201 "uvEast": [60, 33, 56, 36],
202 "uvSouth": [64, 33, 60, 36],
203 "uvWest": [52, 33, 48, 36],
204 "uvUp": [52, 34, 56, 33],
205 "uvDown": [56, 21, 60, 25],
206 "sizeAdd": 0.25
207 }
208 ]
209 },
210 {
211 "part": "front_right_leg",
212 "id": "front_right_leg",
213 "invertAxis": "xy",
214 "translate": [-4, -10, 9],
215 "boxes": [
216 {
217 "coordinates": [1.2, 0, -10.8, 3.6, 11, 3.8],
218 "uvNorth": [52, 25, 56, 36],
219 "uvEast": [48, 25, 52, 36],
220 "uvSouth": [60, 25, 64, 36],
221 "uvWest": [56, 25, 60, 36],
222 "uvUp": [56, 25, 52, 21],
223 "uvDown": [60, 21, 56, 25]
224 },
225 {
226 "coordinates": [1, 0, -10.9, 4, 3, 4],
227 "uvNorth": [52, 33, 56, 36],
228 "uvEast": [48, 33, 52, 36],
229 "uvSouth": [60, 33, 64, 36],
230 "uvWest": [56, 33, 60, 36],
231 "uvUp": [56, 34, 52, 33],
232 "uvDown": [60, 21, 56, 25],
233 "sizeAdd": 0.25
234 }
235 ]
236 },
237 {
238 "part": "back_left_leg",
239 "id": "back_left_leg",
240 "invertAxis": "xy",
241 "translate": [4, -10, -8],
242 "boxes": [
243 {
244 "coordinates": [-4.8, 0, 7.1, 3.6, 11, 3.8],
245 "uvNorth": [56, 25, 52, 36],
246 "uvEast": [60, 25, 56, 36],
247 "uvSouth": [64, 25, 60, 36],
248 "uvWest": [52, 25, 48, 36],
249 "uvUp": [52, 25, 56, 21],
250 "uvDown": [56, 21, 60, 25]
251 },
252 {
253 "coordinates": [-5, 0, 7, 4, 3, 4],
254 "uvNorth": [56, 33, 52, 36],
255 "uvEast": [60, 33, 56, 36],
256 "uvSouth": [64, 33, 60, 36],
257 "uvWest": [52, 33, 48, 36],
258 "uvUp": [52, 34, 56, 33],
259 "uvDown": [56, 21, 60, 25],
260 "sizeAdd": 0.25
261 }
262 ]
263 },
264 {
265 "part": "back_right_leg",
266 "id": "back_right_leg",
267 "invertAxis": "xy",
268 "translate": [-4, -10, -8],
269 "boxes": [
270 {
271 "coordinates": [1.2, 0, 7.1, 3.6, 11, 3.8],
272 "uvNorth": [52, 25, 56, 36],
273 "uvEast": [48, 25, 52, 36],
274 "uvSouth": [60, 25, 64, 36],
275 "uvWest": [56, 25, 60, 36],
276 "uvUp": [56, 25, 52, 21],
277 "uvDown": [60, 21, 56, 25]
278 },
279 {
280 "coordinates": [1, 0, 7, 4, 3, 4],
281 "uvNorth": [52, 33, 56, 36],
282 "uvEast": [48, 33, 52, 36],
283 "uvSouth": [60, 33, 64, 36],
284 "uvWest": [56, 33, 60, 36],
285 "uvUp": [56, 34, 52, 33],
286 "uvDown": [60, 21, 56, 25],
287 "sizeAdd": 0.25
288 }
289 ]
290 },
291 {
292 "part": "child_front_left_leg",
293 "id": "child_front_left_leg",
294 "invertAxis": "xy",
295 "translate": [4, -10, 9],
296 "boxes": [
297 {
298 "coordinates": [-5, -5.5, -11, 4, 22, 4],
299 "uvNorth": [56, 25, 52, 36],
300 "uvEast": [60, 25, 56, 36],
301 "uvSouth": [64, 25, 60, 36],
302 "uvWest": [52, 25, 48, 36],
303 "uvUp": [52, 25, 56, 21],
304 "uvDown": [56, 21, 60, 25]
305 }
306 ]
307 },
308 {
309 "part": "child_front_right_leg",
310 "id": "child_front_right_leg",
311 "invertAxis": "xy",
312 "translate": [-4, -10, 9],
313 "boxes": [
314 {
315 "coordinates": [1, -5.5, -11, 4, 22, 4],
316 "uvNorth": [52, 25, 56, 36],
317 "uvEast": [48, 25, 52, 36],
318 "uvSouth": [60, 25, 64, 36],
319 "uvWest": [56, 25, 60, 36],
320 "uvUp": [56, 25, 52, 21],
321 "uvDown": [60, 21, 56, 25]
322 }
323 ]
324 },
325 {
326 "part": "child_back_left_leg",
327 "id": "child_back_left_leg",
328 "invertAxis": "xy",
329 "translate": [4, -10, -8],
330 "boxes": [
331 {
332 "coordinates": [-5, -5.5, 7, 4, 22, 4],
333 "uvNorth": [56, 25, 52, 36],
334 "uvEast": [60, 25, 56, 36],
335 "uvSouth": [64, 25, 60, 36],
336 "uvWest": [52, 25, 48, 36],
337 "uvUp": [52, 25, 56, 21],
338 "uvDown": [56, 21, 60, 25]
339 }
340 ]
341 },
342 {
343 "part": "child_back_right_leg",
344 "id": "child_back_right_leg",
345 "invertAxis": "xy",
346 "translate": [-4, -10, -8],
347 "boxes": [
348 {
349 "coordinates": [1, -5.5, 7, 4, 22, 4],
350 "uvNorth": [52, 25, 56, 36],
351 "uvEast": [48, 25, 52, 36],
352 "uvSouth": [60, 25, 64, 36],
353 "uvWest": [56, 25, 60, 36],
354 "uvUp": [56, 25, 52, 21],
355 "uvDown": [60, 21, 56, 25]
356 }
357 ]
358 },
359 {
360 "part": "headpiece",
361 "id": "headpiece",
362 "invertAxis": "xy",
363 "translate": [0, -22, 8.9],
364 "boxes": [
365 {
366 "coordinates": [-3, 28, -10.8, 6, 5, 6],
367 "uvNorth": [7, 7, 13, 12],
368 "uvEast": [1, 7, 7, 12],
369 "uvSouth": [19, 7, 25, 12],
370 "uvWest": [13, 7, 19, 12],
371 "uvUp": [13, 7, 7, 1],
372 "uvDown": [19, 1, 13, 7],
373 "sizeAdd": 0.2
374 }
375 ]
376 },
377 {
378 "part": "noseband",
379 "id": "noseband",
380 "invertAxis": "xy",
381 "translate": [0, -22, 9],
382 "boxes": [
383 {
384 "coordinates": [-2, 28, -13, 4, 5, 2],
385 "uvNorth": [21, 2, 25, 7],
386 "uvEast": [19, 2, 21, 7],
387 "uvSouth": [27, 2, 31, 7],
388 "uvWest": [25, 2, 27, 7],
389 "uvUp": [25, 2, 21, 0],
390 "uvDown": [29, 0, 25, 2],
391 "sizeAdd": 0.2
392 }
393 ]
394 },
395 {
396 "part": "left_bit",
397 "id": "left_bit",
398 "invertAxis": "xy",
399 "translate": [0, -22, 9]
400 },
401 {
402 "part": "right_bit",
403 "id": "right_bit",
404 "invertAxis": "xy",
405 "translate": [0, -22, 9]
406 },
407 {
408 "part": "left_rein",
409 "id": "left_rein",
410 "invertAxis": "xy",
411 "translate": [0, -25.5, 5.5],
412 "boxes": [
413 {
414 "coordinates": [-3.1, 28.5, -13.5, 0, 3, 16],
415 "uvEast": [32, 18, 48, 21],
416 "uvWest": [48, 18, 64, 21]
417 }
418 ]
419 },
420 {
421 "part": "right_rein",
422 "id": "right_rein",
423 "invertAxis": "xy",
424 "translate": [0, -25.5, 5.5],
425 "boxes": [
426 {
427 "coordinates": [3.1, 28.5, -13.5, 0, 3, 16],
428 "uvEast": [32, 18, 48, 21],
429 "uvWest": [48, 18, 64, 21]
430 }
431 ]
432 },
433 {
434 "part": "saddle",
435 "id": "saddle",
436 "invertAxis": "xy",
437 "translate": [0, -13, -6],
438 "boxes": [
439 {
440 "coordinates": [-5, 12, -3, 10, 9, 9],
441 "uvNorth": [35, 9, 45, 18],
442 "uvEast": [26, 9, 35, 18],
443 "uvSouth": [54, 9, 64, 18],
444 "uvWest": [45, 9, 54, 18],
445 "uvUp": [45, 9, 35, 0],
446 "uvDown": [55, 0, 45, 9],
447 "sizeAdd": 0.5
448 }
449 ]
450 }
451 ]
452} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/horse_armor.jem b/assets/minecraft/optifine/cem/horse_armor.jem
new file mode 100755
index 00000000..bb41ab4c
--- /dev/null
+++ b/assets/minecraft/optifine/cem/horse_armor.jem
@@ -0,0 +1,411 @@
1{
2 "textureSize": [64, 64],
3 "models": [
4 {
5 "part": "head",
6 "id": "head",
7 "invertAxis": "xy",
8 "translate": [0, -22, 9],
9 "boxes": [
10 {
11 "coordinates": [-3, 28, -11, 6, 5, 7],
12 "uvNorth": [7, 20, 13, 25],
13 "uvEast": [0, 20, 7, 25],
14 "uvSouth": [20, 20, 26, 25],
15 "uvWest": [13, 20, 20, 25],
16 "uvUp": [13, 20, 7, 13],
17 "uvDown": [19, 13, 13, 20],
18 "sizeAdd": 0.2
19 }
20 ]
21 },
22 {
23 "part": "mouth",
24 "id": "mouth",
25 "invertAxis": "xy",
26 "translate": [0, -22, 9],
27 "boxes": [
28 {
29 "coordinates": [-2, 28, -16, 4, 5, 5],
30 "uvNorth": [5, 30, 9, 35],
31 "uvEast": [0, 30, 5, 35],
32 "uvSouth": [14, 30, 18, 35],
33 "uvWest": [9, 30, 14, 35],
34 "uvUp": [9, 30, 5, 25],
35 "uvDown": [13, 25, 9, 30],
36 "sizeAdd": 0.2
37 }
38 ]
39 },
40 {
41 "part": "left_ear",
42 "id": "left_ear",
43 "invertAxis": "xy",
44 "translate": [0, -23, 9.01],
45 "boxes": [
46 {
47 "coordinates": [-2.55, 33, -5.01, 2, 3, 1],
48 "uvNorth": [20, 17, 22, 20],
49 "uvEast": [19, 17, 20, 20],
50 "uvSouth": [23, 17, 25, 20],
51 "uvWest": [22, 17, 23, 20],
52 "uvUp": [22, 17, 20, 16],
53 "uvDown": [24, 16, 22, 17],
54 "sizeAdd": 0.1
55 }
56 ]
57 },
58 {
59 "part": "right_ear",
60 "id": "right_ear",
61 "invertAxis": "xy",
62 "translate": [0, -23, 9.01],
63 "boxes": [
64 {
65 "coordinates": [0.55, 33, -5.01, 2, 3, 1],
66 "uvNorth": [20, 17, 22, 20],
67 "uvEast": [19, 17, 20, 20],
68 "uvSouth": [23, 17, 25, 20],
69 "uvWest": [22, 17, 23, 20],
70 "uvUp": [22, 17, 20, 16],
71 "uvDown": [24, 16, 22, 17],
72 "sizeAdd": 0.1
73 }
74 ]
75 },
76 {
77 "part": "neck",
78 "id": "neck",
79 "invertAxis": "xy",
80 "translate": [0, -22, 9],
81 "boxes": [
82 {
83 "coordinates": [-1.95, 16, -11, 4, 12, 7],
84 "uvNorth": [7, 42, 11, 54],
85 "uvEast": [0, 42, 7, 54],
86 "uvSouth": [18, 42, 22, 54],
87 "uvWest": [11, 42, 18, 54],
88 "uvUp": [11, 42, 7, 35],
89 "uvDown": [15, 35, 11, 42],
90 "sizeAdd": 0.1
91 }
92 ]
93 },
94 {
95 "part": "mane",
96 "id": "mane",
97 "invertAxis": "xy",
98 "translate": [0, -22, 9.01],
99 "boxes": [
100 {
101 "coordinates": [-1, 17, -4, 2, 16, 2],
102 "uvNorth": [58, 38, 60, 54],
103 "uvEast": [56, 38, 58, 54],
104 "uvSouth": [62, 38, 64, 54],
105 "uvWest": [60, 38, 62, 54],
106 "uvUp": [60, 38, 58, 36],
107 "uvDown": [62, 36, 60, 38],
108 "sizeAdd": 0.2
109 }
110 ]
111 },
112 {
113 "part": "body",
114 "id": "body",
115 "invertAxis": "xy",
116 "translate": [0, -13, -6],
117 "boxes": [
118 {
119 "coordinates": [-5, 11, -11, 10, 10, 22],
120 "uvNorth": [22, 54, 32, 64],
121 "uvEast": [0, 54, 22, 64],
122 "uvSouth": [54, 54, 64, 64],
123 "uvWest": [32, 54, 54, 64],
124 "uvUp": [32, 54, 22, 32],
125 "uvDown": [42, 32, 32, 54],
126 "sizeAdd": 0.15
127 }
128 ]
129 },
130 {
131 "part": "tail",
132 "id": "tail",
133 "invertAxis": "xy",
134 "translate": [0, -21, -11],
135 "boxes": [
136 {
137 "coordinates": [-1.5, 7, 11, 3, 14, 4],
138 "uvNorth": [46, 40, 49, 54],
139 "uvEast": [42, 40, 46, 54],
140 "uvSouth": [53, 40, 56, 54],
141 "uvWest": [49, 40, 53, 54],
142 "uvUp": [49, 40, 46, 36],
143 "uvDown": [52, 36, 49, 40],
144 "sizeAdd": 0.2
145 }
146 ]
147 },
148 {
149 "part": "front_left_leg",
150 "id": "front_left_leg",
151 "invertAxis": "xy",
152 "translate": [4, -10, 9],
153 "boxes": [
154 {
155 "coordinates": [-5, 0, -10.9, 4, 11, 4],
156 "uvNorth": [56, 25, 52, 36],
157 "uvEast": [60, 25, 56, 36],
158 "uvSouth": [64, 25, 60, 36],
159 "uvWest": [52, 25, 48, 36],
160 "uvUp": [52, 25, 56, 21],
161 "uvDown": [56, 21, 60, 25],
162 "sizeAdd": 0.2
163 }
164 ]
165 },
166 {
167 "part": "front_right_leg",
168 "id": "front_right_leg",
169 "invertAxis": "xy",
170 "translate": [-4, -10, 9],
171 "boxes": [
172 {
173 "coordinates": [1, 0, -10.9, 4, 11, 4],
174 "uvNorth": [52, 25, 56, 36],
175 "uvEast": [48, 25, 52, 36],
176 "uvSouth": [60, 25, 64, 36],
177 "uvWest": [56, 25, 60, 36],
178 "uvUp": [56, 25, 52, 21],
179 "uvDown": [60, 21, 56, 25],
180 "sizeAdd": 0.2
181 }
182 ]
183 },
184 {
185 "part": "back_left_leg",
186 "id": "back_left_leg",
187 "invertAxis": "xy",
188 "translate": [4, -10, -8],
189 "boxes": [
190 {
191 "coordinates": [-5, 0, 7, 4, 11, 4],
192 "uvNorth": [56, 25, 52, 36],
193 "uvEast": [60, 25, 56, 36],
194 "uvSouth": [64, 25, 60, 36],
195 "uvWest": [52, 25, 48, 36],
196 "uvUp": [52, 25, 56, 21],
197 "uvDown": [56, 21, 60, 25],
198 "sizeAdd": 0.2
199 }
200 ]
201 },
202 {
203 "part": "back_right_leg",
204 "id": "back_right_leg",
205 "invertAxis": "xy",
206 "translate": [-4, -10, -8],
207 "boxes": [
208 {
209 "coordinates": [1, 0, 7, 4, 11, 4],
210 "uvNorth": [52, 25, 56, 36],
211 "uvEast": [48, 25, 52, 36],
212 "uvSouth": [60, 25, 64, 36],
213 "uvWest": [56, 25, 60, 36],
214 "uvUp": [56, 25, 52, 21],
215 "uvDown": [60, 21, 56, 25],
216 "sizeAdd": 0.2
217 }
218 ]
219 },
220 {
221 "part": "child_front_left_leg",
222 "id": "child_front_left_leg",
223 "invertAxis": "xy",
224 "translate": [4, -10, 9],
225 "boxes": [
226 {
227 "coordinates": [-5, -5.5, -10.9, 4, 22, 4],
228 "uvNorth": [56, 25, 52, 36],
229 "uvEast": [60, 25, 56, 36],
230 "uvSouth": [64, 25, 60, 36],
231 "uvWest": [52, 25, 48, 36],
232 "uvUp": [52, 25, 56, 21],
233 "uvDown": [56, 21, 60, 25],
234 "sizeAdd": 0.2
235 }
236 ]
237 },
238 {
239 "part": "child_front_right_leg",
240 "id": "child_front_right_leg",
241 "invertAxis": "xy",
242 "translate": [-4, -10, 9],
243 "boxes": [
244 {
245 "coordinates": [1, -5.5, -10.9, 4, 22, 4],
246 "uvNorth": [52, 25, 56, 36],
247 "uvEast": [48, 25, 52, 36],
248 "uvSouth": [60, 25, 64, 36],
249 "uvWest": [56, 25, 60, 36],
250 "uvUp": [56, 25, 52, 21],
251 "uvDown": [60, 21, 56, 25],
252 "sizeAdd": 0.2
253 }
254 ]
255 },
256 {
257 "part": "child_back_left_leg",
258 "id": "child_back_left_leg",
259 "invertAxis": "xy",
260 "translate": [4, -10, -8],
261 "boxes": [
262 {
263 "coordinates": [-5, -5.5, 7, 4, 22, 4],
264 "uvNorth": [56, 25, 52, 36],
265 "uvEast": [60, 25, 56, 36],
266 "uvSouth": [64, 25, 60, 36],
267 "uvWest": [52, 25, 48, 36],
268 "uvUp": [52, 25, 56, 21],
269 "uvDown": [56, 21, 60, 25],
270 "sizeAdd": 0.2
271 }
272 ]
273 },
274 {
275 "part": "child_back_right_leg",
276 "id": "child_back_right_leg",
277 "invertAxis": "xy",
278 "translate": [-4, -10, -8],
279 "boxes": [
280 {
281 "coordinates": [1, -5.5, 7, 4, 22, 4],
282 "uvNorth": [52, 25, 56, 36],
283 "uvEast": [48, 25, 52, 36],
284 "uvSouth": [60, 25, 64, 36],
285 "uvWest": [56, 25, 60, 36],
286 "uvUp": [56, 25, 52, 21],
287 "uvDown": [60, 21, 56, 25],
288 "sizeAdd": 0.2
289 }
290 ]
291 },
292 {
293 "part": "headpiece",
294 "id": "headpiece",
295 "invertAxis": "xy",
296 "translate": [0, -22, 9],
297 "boxes": [
298 {
299 "coordinates": [-3, 28, -10.9, 6, 5, 6],
300 "uvNorth": [7, 7, 13, 12],
301 "uvEast": [1, 7, 7, 12],
302 "uvSouth": [19, 7, 25, 12],
303 "uvWest": [13, 7, 19, 12],
304 "uvUp": [13, 7, 7, 1],
305 "uvDown": [19, 1, 13, 7],
306 "sizeAdd": 0.3
307 }
308 ]
309 },
310 {
311 "part": "noseband",
312 "id": "noseband",
313 "invertAxis": "xy",
314 "translate": [0, -22, 9],
315 "boxes": [
316 {
317 "coordinates": [-2, 28, -13, 4, 5, 2],
318 "uvNorth": [21, 2, 25, 7],
319 "uvEast": [19, 2, 21, 7],
320 "uvSouth": [27, 2, 31, 7],
321 "uvWest": [25, 2, 27, 7],
322 "uvUp": [25, 2, 21, 0],
323 "uvDown": [29, 0, 25, 2],
324 "sizeAdd": 0.3
325 }
326 ]
327 },
328 {
329 "part": "left_bit",
330 "id": "left_bit",
331 "invertAxis": "xy",
332 "translate": [0, -22, 9],
333 "boxes": [
334 {
335 "coordinates": [-3, 29, -15, 1, 2, 2],
336 "uvNorth": [31, 7, 32, 9],
337 "uvEast": [29, 7, 31, 9],
338 "uvSouth": [34, 7, 35, 9],
339 "uvWest": [32, 7, 34, 9],
340 "uvUp": [32, 7, 31, 5],
341 "uvDown": [33, 5, 32, 7],
342 "sizeAdd": 0.2
343 }
344 ]
345 },
346 {
347 "part": "right_bit",
348 "id": "right_bit",
349 "invertAxis": "xy",
350 "translate": [0, -22, 9],
351 "boxes": [
352 {
353 "coordinates": [2, 29, -15, 1, 2, 2],
354 "uvNorth": [31, 7, 32, 9],
355 "uvEast": [29, 7, 31, 9],
356 "uvSouth": [34, 7, 35, 9],
357 "uvWest": [32, 7, 34, 9],
358 "uvUp": [32, 7, 31, 5],
359 "uvDown": [33, 5, 32, 7],
360 "sizeAdd": 0.2
361 }
362 ]
363 },
364 {
365 "part": "left_rein",
366 "id": "left_rein",
367 "invertAxis": "xy",
368 "translate": [0, -25.5, 5.5],
369 "boxes": [
370 {
371 "coordinates": [-3.1, 28.5, -13.5, 0, 3, 16],
372 "uvEast": [32, 18, 48, 21],
373 "uvWest": [48, 18, 64, 21],
374 "sizeAdd": 0.1
375 }
376 ]
377 },
378 {
379 "part": "right_rein",
380 "id": "right_rein",
381 "invertAxis": "xy",
382 "translate": [0, -25.5, 5.5],
383 "boxes": [
384 {
385 "coordinates": [3.1, 28.5, -13.5, 0, 3, 16],
386 "uvEast": [32, 18, 48, 21],
387 "uvWest": [48, 18, 64, 21],
388 "sizeAdd": 0.1
389 }
390 ]
391 },
392 {
393 "part": "saddle",
394 "id": "saddle",
395 "invertAxis": "xy",
396 "translate": [0, -13, -6],
397 "boxes": [
398 {
399 "coordinates": [-5, 12, -3, 10, 9, 9],
400 "uvNorth": [35, 9, 45, 18],
401 "uvEast": [26, 9, 35, 18],
402 "uvSouth": [54, 9, 64, 18],
403 "uvWest": [45, 9, 54, 18],
404 "uvUp": [45, 9, 35, 0],
405 "uvDown": [55, 0, 45, 9],
406 "sizeAdd": 0.6
407 }
408 ]
409 }
410 ]
411} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/mooshroom.jem b/assets/minecraft/optifine/cem/mooshroom.jem
new file mode 100755
index 00000000..e0f48b4a
--- /dev/null
+++ b/assets/minecraft/optifine/cem/mooshroom.jem
@@ -0,0 +1,184 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [64, 32],
4 "models": [
5 {
6 "part": "head",
7 "id": "head",
8 "invertAxis": "xy",
9 "translate": [0, -20, 7],
10 "boxes": [
11 {
12 "coordinates": [-4, 16, -13, 8, 8, 6],
13 "uvNorth": [6, 6, 14, 14],
14 "uvEast": [20, 6, 14, 14],
15 "uvSouth": [20, 6, 28, 14],
16 "uvWest": [6, 6, 0, 14],
17 "uvUp": [14, 6, 6, 0],
18 "uvDown": [22, 0, 14, 6]
19 },
20 {
21 "coordinates": [-4.5, 22, -11, 1, 3, 1],
22 "uvNorth": [23, 1, 24, 4],
23 "uvEast": [22, 1, 23, 4],
24 "uvSouth": [25, 1, 26, 4],
25 "uvWest": [24, 1, 25, 4],
26 "uvUp": [24, 1, 23, 0],
27 "uvDown": [25, 0, 24, 1]
28 },
29 {
30 "coordinates": [3.5, 22, -11, 1, 3, 1],
31 "uvNorth": [23, 1, 24, 4],
32 "uvEast": [22, 1, 23, 4],
33 "uvSouth": [25, 1, 26, 4],
34 "uvWest": [24, 1, 25, 4],
35 "uvUp": [24, 1, 23, 0],
36 "uvDown": [25, 0, 24, 1]
37 },
38 {
39 "coordinates": [-3, 16, -14, 6, 3, 1],
40 "uvNorth": [7, 11, 13, 14],
41 "uvEast": [12, 11, 13, 14],
42 "uvSouth": [7, 11, 13, 14],
43 "uvWest": [7, 11, 8, 14],
44 "uvUp": [7, 11, 13, 12],
45 "uvDown": [7, 13, 13, 14]
46 }
47 ],
48 "submodels": [
49 {
50 "id": "leftear",
51 "invertAxis": "xy",
52 "translate": [4, 22, -9.5],
53 "boxes": [
54 {
55 "coordinates": [0, -1, -0.5, 3, 2, 1],
56 "uvNorth": [27, 1, 30, 3],
57 "uvEast": [31, 1, 30, 3],
58 "uvSouth": [34, 1, 31, 3],
59 "uvWest": [27, 1, 26, 3],
60 "uvUp": [27, 1, 30, 0],
61 "uvDown": [30, 0, 33, 1]
62 }
63 ]
64 },
65 {
66 "id": "rightear",
67 "invertAxis": "xy",
68 "translate": [-4, 22, -9.5],
69 "boxes": [
70 {
71 "coordinates": [-3, -1, -0.5, 3, 2, 1],
72 "uvNorth": [30, 1, 27, 3],
73 "uvEast": [26, 1, 27, 3],
74 "uvSouth": [31, 1, 34, 3],
75 "uvWest": [30, 1, 31, 3],
76 "uvUp": [30, 1, 27, 0],
77 "uvDown": [33, 0, 30, 1]
78 }
79 ]
80 }
81 ]
82 },
83 {
84 "part": "body",
85 "id": "body",
86 "invertAxis": "xy",
87 "translate": [0, -19, -2],
88 "rotate": [-90, 0, 0],
89 "boxes": [
90 {
91 "coordinates": [-6, 11, -5, 12, 18, 10],
92 "uvNorth": [28, 14, 40, 32],
93 "uvEast": [18, 14, 28, 32],
94 "uvSouth": [50, 14, 62, 32],
95 "uvWest": [40, 14, 50, 32],
96 "uvUp": [40, 14, 28, 4],
97 "uvDown": [52, 4, 40, 14]
98 },
99 {
100 "coordinates": [-2, 12, -7, 4, 6, 2],
101 "uvNorth": [53, 1, 57, 7],
102 "uvEast": [52, 1, 53, 7],
103 "uvSouth": [58, 1, 62, 7],
104 "uvWest": [57, 1, 58, 7],
105 "uvUp": [57, 1, 53, 0],
106 "uvDown": [61, 0, 57, 1]
107 }
108 ],
109 "animations": [
110 {
111 "this.rx": 0
112 }
113 ]
114 },
115 {
116 "part": "leg1",
117 "id": "leg1",
118 "invertAxis": "xy",
119 "translate": [-4, -12, -7],
120 "boxes": [
121 {
122 "coordinates": [2, 0, 5, 4, 12, 4],
123 "uvNorth": [4, 20, 8, 32],
124 "uvEast": [0, 20, 4, 32],
125 "uvSouth": [12, 20, 16, 32],
126 "uvWest": [8, 20, 12, 32],
127 "uvUp": [8, 20, 4, 16],
128 "uvDown": [12, 16, 8, 20]
129 }
130 ]
131 },
132 {
133 "part": "leg2",
134 "id": "leg2",
135 "invertAxis": "xy",
136 "translate": [4, -12, -7],
137 "boxes": [
138 {
139 "coordinates": [-6, 0, 5, 4, 12, 4],
140 "uvNorth": [4, 20, 8, 32],
141 "uvEast": [0, 20, 4, 32],
142 "uvSouth": [12, 20, 16, 32],
143 "uvWest": [8, 20, 12, 32],
144 "uvUp": [8, 20, 4, 16],
145 "uvDown": [12, 16, 8, 20]
146 }
147 ]
148 },
149 {
150 "part": "leg3",
151 "id": "leg3",
152 "invertAxis": "xy",
153 "translate": [-4.5, -12, 6],
154 "boxes": [
155 {
156 "coordinates": [1.5, 0, -7, 4, 12, 4],
157 "uvNorth": [4, 20, 8, 32],
158 "uvEast": [0, 20, 4, 32],
159 "uvSouth": [12, 20, 16, 32],
160 "uvWest": [8, 20, 12, 32],
161 "uvUp": [8, 20, 4, 16],
162 "uvDown": [12, 16, 8, 20]
163 }
164 ]
165 },
166 {
167 "part": "leg4",
168 "id": "leg4",
169 "invertAxis": "xy",
170 "translate": [4, -12, 6],
171 "boxes": [
172 {
173 "coordinates": [-5.5, 0, -7, 4, 12, 4],
174 "uvNorth": [4, 20, 8, 32],
175 "uvEast": [0, 20, 4, 32],
176 "uvSouth": [12, 20, 16, 32],
177 "uvWest": [8, 20, 12, 32],
178 "uvUp": [8, 20, 4, 16],
179 "uvDown": [12, 16, 8, 20]
180 }
181 ]
182 }
183 ]
184} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/pig.jem b/assets/minecraft/optifine/cem/pig.jem
new file mode 100755
index 00000000..da20afff
--- /dev/null
+++ b/assets/minecraft/optifine/cem/pig.jem
@@ -0,0 +1,357 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "textures/entity/pig/pig.png",
4 "textureSize": [64, 32],
5 "models": [
6 {
7 "part": "body",
8 "id": "body",
9 "invertAxis": "xy",
10 "translate": [0, -13, -8],
11 "submodels": [
12 {
13 "id": "pig",
14 "invertAxis": "xy",
15 "translate": [0, 11, 6],
16 "submodels": [
17 {
18 "id": "leg_4",
19 "invertAxis": "xy",
20 "translate": [-3, -5, -9],
21 "boxes": [
22 {
23 "coordinates": [-2, -6.01659, -1.96381, 4, 6, 4],
24 "uvNorth": [4, 20, 8, 26],
25 "uvEast": [0, 20, 4, 26],
26 "uvSouth": [12, 20, 16, 26],
27 "uvWest": [8, 20, 12, 26],
28 "uvUp": [8, 20, 4, 16],
29 "uvDown": [12, 16, 8, 20]
30 }
31 ]
32 },
33 {
34 "id": "leg_2",
35 "invertAxis": "xy",
36 "translate": [-3, -5, 3],
37 "boxes": [
38 {
39 "coordinates": [-2, -6, -2, 4, 6, 4],
40 "uvNorth": [4, 20, 8, 26],
41 "uvEast": [0, 20, 4, 26],
42 "uvSouth": [12, 20, 16, 26],
43 "uvWest": [8, 20, 12, 26],
44 "uvUp": [8, 20, 4, 16],
45 "uvDown": [12, 16, 8, 20]
46 }
47 ]
48 },
49 {
50 "id": "leg_3",
51 "invertAxis": "xy",
52 "translate": [3, -5, -9],
53 "boxes": [
54 {
55 "coordinates": [-2, -6, -2, 4, 6, 4],
56 "uvNorth": [4, 20, 8, 26],
57 "uvEast": [0, 20, 4, 26],
58 "uvSouth": [12, 20, 16, 26],
59 "uvWest": [8, 20, 12, 26],
60 "uvUp": [8, 20, 4, 16],
61 "uvDown": [12, 16, 8, 20]
62 }
63 ]
64 },
65 {
66 "id": "leg_1",
67 "invertAxis": "xy",
68 "translate": [3, -5, 3],
69 "boxes": [
70 {
71 "coordinates": [-2, -6, -2, 4, 6, 4],
72 "uvNorth": [4, 20, 8, 26],
73 "uvEast": [0, 20, 4, 26],
74 "uvSouth": [12, 20, 16, 26],
75 "uvWest": [8, 20, 12, 26],
76 "uvUp": [8, 20, 4, 16],
77 "uvDown": [12, 16, 8, 20]
78 }
79 ]
80 },
81 {
82 "id": "head2",
83 "invertAxis": "xy",
84 "translate": [0, 1, -10],
85 "boxes": [
86 {
87 "coordinates": [-4, -4, -8, 8, 8, 8],
88 "uvNorth": [8, 8, 16, 16],
89 "uvEast": [0, 8, 8, 16],
90 "uvSouth": [24, 8, 32, 16],
91 "uvWest": [16, 8, 24, 16],
92 "uvUp": [16, 8, 8, 0],
93 "uvDown": [24, 0, 16, 8]
94 }
95 ],
96 "submodels": [
97 {
98 "id": "eyes",
99 "invertAxis": "xy",
100 "translate": [0, 0, 0],
101 "submodels": [
102 {
103 "id": "right",
104 "invertAxis": "xy",
105 "translate": [0, 0, 0],
106 "boxes": [
107 {
108 "coordinates": [-4, -1, -8, 2, 1, 1],
109 "uvNorth": [17, 22, 19, 23],
110 "uvEast": [17, 22, 18, 23],
111 "uvSouth": [17, 22, 19, 23],
112 "uvWest": [17, 22, 18, 23],
113 "uvUp": [17, 22, 19, 23],
114 "uvDown": [17, 22, 19, 23],
115 "sizeAdd": 0.01
116 }
117 ],
118 "submodels": [
119 {
120 "id": "iris_right",
121 "invertAxis": "xy",
122 "translate": [-3.5, -0.5, -7.5],
123 "boxes": [
124 {
125 "coordinates": [-0.5, -0.5, -0.5, 1, 1, 1],
126 "uvNorth": [17, 23, 19, 24],
127 "uvWest": [17, 23, 18, 24],
128 "sizeAdd": 0.02
129 }
130 ]
131 }
132 ]
133 },
134 {
135 "id": "left",
136 "invertAxis": "xy",
137 "translate": [6, 0, 0],
138 "boxes": [
139 {
140 "coordinates": [-4, -1, -8, 2, 1, 1],
141 "uvNorth": [17, 22, 19, 23],
142 "uvEast": [17, 22, 18, 23],
143 "uvWest": [17, 22, 18, 23],
144 "sizeAdd": 0.01
145 }
146 ],
147 "submodels": [
148 {
149 "id": "iris_left",
150 "invertAxis": "xy",
151 "translate": [-2.5, -0.5, -7.5],
152 "boxes": [
153 {
154 "coordinates": [-0.5, -0.5, -0.5, 1, 1, 1],
155 "uvNorth": [17, 23, 19, 24],
156 "uvEast": [17, 23, 18, 24],
157 "sizeAdd": 0.02
158 }
159 ]
160 }
161 ]
162 }
163 ]
164 },
165 {
166 "id": "snout",
167 "invertAxis": "xy",
168 "translate": [0, -1.5, -1.5],
169 "boxes": [
170 {
171 "coordinates": [-2, -1.5, -7.5, 4, 3, 1],
172 "uvNorth": [17, 17, 21, 20],
173 "uvEast": [16, 17, 17, 20],
174 "uvSouth": [22, 17, 26, 20],
175 "uvWest": [21, 17, 22, 20],
176 "uvUp": [21, 17, 17, 16],
177 "uvDown": [25, 16, 21, 17]
178 }
179 ]
180 },
181 {
182 "id": "ear_right",
183 "invertAxis": "xy",
184 "translate": [-4, 2, -5],
185 "rotate": [0, 0, -20],
186 "boxes": [
187 {
188 "coordinates": [-0.5, -3, -2, 1, 3, 4],
189 "uvNorth": [28, 4, 29, 7],
190 "uvEast": [33, 4, 29, 7],
191 "uvSouth": [33, 4, 34, 7],
192 "uvWest": [28, 4, 24, 7],
193 "uvUp": [29, 4, 28, 0],
194 "uvDown": [30, 0, 29, 4]
195 }
196 ]
197 },
198 {
199 "id": "ear_left",
200 "invertAxis": "xy",
201 "translate": [4, 2, -5],
202 "rotate": [0, 0, 20],
203 "boxes": [
204 {
205 "coordinates": [-0.5, -3, -2, 1, 3, 4],
206 "uvNorth": [29, 4, 28, 7],
207 "uvEast": [24, 4, 28, 7],
208 "uvSouth": [34, 4, 33, 7],
209 "uvWest": [29, 4, 33, 7],
210 "uvUp": [28, 4, 29, 0],
211 "uvDown": [29, 0, 30, 4]
212 }
213 ]
214 }
215 ]
216 },
217 {
218 "id": "torso",
219 "invertAxis": "xy",
220 "translate": [0, 2, -2],
221 "submodels": [
222 {
223 "id": "body2",
224 "invertAxis": "xy",
225 "translate": [0, 5, -9],
226 "boxes": [
227 {
228 "coordinates": [-5, -11, 2, 10, 16, 8],
229 "uvNorth": [36, 16, 46, 32],
230 "uvEast": [28, 16, 36, 32],
231 "uvSouth": [54, 16, 64, 32],
232 "uvWest": [46, 16, 54, 32],
233 "uvUp": [46, 16, 36, 8],
234 "uvDown": [56, 8, 46, 16]
235 }
236 ]
237 }
238 ]
239 }
240 ]
241 }
242 ],
243 "animations": [
244 {
245 "var.swim_k": "clamp(if(is_in_water,var.swim_k-0.03,var.swim_k+0.03),torad(-25),0)",
246 "pig.rx": "torad(-90) + var.swim_k",
247 "torso.rx": "torad(90)",
248 "pig.tz": "if(is_in_water,-2,6) - var.lay_k"
249 },
250 {
251 "var.fall": "if(pos_y < var.pos_y,1,0)",
252 "var.time": "(var.time + 1 * limb_speed * 25 * frame_time)",
253 "var.time_s": "(var.time_s + 1 * 25 * frame_time)",
254 "var.time_sky": "(var.time_sky + 1 * 25 * frame_time) * var.sky_k",
255 "var.sky_k": "clamp(if( is_riding || is_in_water || is_on_ground || pos_y >= var.pos_y,0,(var.sky_k+1*frame_time)),0,5)",
256 "var.sky_k2": "if( is_riding || is_on_ground || is_in_water,-1.5,var.sky_k2+30*frame_time*var.sky_k)",
257 "pig.ry": "max(var.sky_k2,0)",
258 "var.still_k": "if(is_on_ground && limb_speed <= 0.1,(var.still_k+0.03),0)",
259 "var.rand_still": "if(var.still_k == 0,random(id*age),var.rand_still)",
260 "var.lay_k": "clamp(if(var.still_k >= var.rand_still*10,var.lay_k+0.2,var.lay_k-0.2),0,5)",
261 "var.sniff_k": "if(var.sniff_k > random(id*age)*400,-0.5,(var.sniff_k+0.03))",
262 "var.sniff_k2": "if(var.sniff_k > 0 ,0,(var.sniff_k2+0.05))",
263 "snout.rx": "if(var.sniff_k < 0 , (-sin(var.sniff_k2*12)-0.5)/15,0)",
264 "var.pos_y": "pos_y"
265 },
266 {
267 "var.hop": 3,
268 "var.clamp_speed": "clamp(limb_speed*10,0,1)",
269 "var.sinrx": "sin(var.time* if(is_child,2,1))*limb_speed",
270 "var.skyrxcos": "cos(var.time_sky* if(is_child,2,1))",
271 "var.cos_base": "if(limb_speed > 0.1,((cos(var.time* if(is_child,2,1))-(var.hop/2)/2)*var.hop + 7),var.cos_base+1)",
272 "var.cos_basen": "if(limb_speed > 0.1,((-cos(var.time* if(is_child,2,1))-(var.hop/2)/2)*var.hop + 7),var.cos_basen+1)",
273 "var.costy": "min(var.cos_base,5)",
274 "var.costyn": "min(var.cos_basen,5)",
275 "var.swsinrx": "clamp(sin(var.time_s* if(is_child,2,1)*0.7)*1.5,torad(-90),torad(90))",
276 "var.wat_jump": "if( !is_on_ground && !is_in_water && var.sky_k2 < 0,-pig.rx +torad(-90),0 )",
277 "leg_1.rx": "if(is_in_water,var.swsinrx,var.sinrx +var.wat_jump)",
278 "leg_1.ty": "if(is_on_ground,if(is_in_water,5,var.costy),5)",
279 "leg_1.rz": "var.sky_k/4 + var.lay_k / 3",
280 "leg_2.rx": "if(is_in_water,-var.swsinrx,-var.sinrx +var.wat_jump)",
281 "leg_2.ty": "if(is_on_ground,if(is_in_water,5,var.costyn),5)",
282 "leg_2.rz": "-var.sky_k/4 - var.lay_k / 3",
283 "leg_3.rx": "if(is_in_water,-var.swsinrx,-var.sinrx +var.wat_jump)",
284 "leg_3.ty": "if(is_on_ground,if(is_in_water,5,var.costyn),5)",
285 "leg_3.rz": "var.sky_k/4 + var.lay_k / 3",
286 "leg_4.rx": "if(is_in_water,var.swsinrx,var.sinrx+var.wat_jump)",
287 "leg_4.ty": "if(is_on_ground,if(is_in_water,5,var.costy),5)",
288 "leg_4.rz": "-var.sky_k/4 - var.lay_k / 3"
289 },
290 {
291 "var.headn": "sin(var.time* if(is_child,2,1))*limb_speed / 6 ",
292 "var.headw": "sin(var.time_s* if(is_child,2,1)*0.7) / 6 ",
293 "var.headyn": "cos(var.time* if(is_child,2,1)/2)*limb_speed / 3 ",
294 "var.headyw": "cos(var.time_s* if(is_child,2,1)*0.7/2) / 3 ",
295 "var.idle_head_rx": "if(is_on_ground && limb_speed<0.1,sin(var.time_s/10)/20,0)",
296 "head2.rx": "head.rx + var.idle_head_rx + ( if(is_in_water,var.headw,var.headn) )- var.sky_k/8 ",
297 "head2.ry": "head.ry + ( if(is_in_water,var.headyw,var.headyn))",
298 "head2.sy": "if(is_child,2,1)",
299 "head2.sx": "if(is_child,2,1)",
300 "head2.sz": "if(is_child,2,1)"
301 },
302 {
303 "var.idle_ear_rx": "if(is_on_ground && limb_speed<0.1,cos(var.time_s/10)/15,0)",
304 "ear_left.rz": "var.idle_ear_rx + (sin(var.time)*limb_speed / 2) + torad(15) + var.sky_k/2 + (var.skyrxcos/2)*var.sky_k/5 ",
305 "ear_right.rz": "-var.idle_ear_rx + (-sin(var.time)*limb_speed / 2) - torad(15)- var.sky_k/2 + (var.skyrxcos/2)*var.sky_k/5 "
306 },
307 {
308 "var.idle_body_rx": "if(is_on_ground && limb_speed<0.1,(cos(var.time_s / 10) / 30) - 0.05,0)",
309 "var.bodyy": "sin(var.time)*limb_speed / 6",
310 "var.bodyy_s": "sin(var.time_s*0.7)/ 6",
311 "var.bodyy_sky": "sin(var.time_sky*0.7)/ 6",
312 "var.bodyx": "cos(var.time)*limb_speed / 6",
313 "var.bodyx_s": "cos(var.time_s*0.7)/ 6",
314 "var.bodyx_sky": "sin(var.time_sky*0.7)/ 6",
315 "body2.rx": "var.idle_body_rx + if(is_in_water,var.bodyx_s,var.bodyx)",
316 "body2.ry": " if(is_in_water,var.bodyy_s,var.bodyy)"
317 },
318 {
319 "var.look_angle": "(torad(-90 + atan2(player_pos_z - pos_z, player_pos_x - pos_x) * 180 / pi)-rot_y)",
320 "var.look_anglex": "torad(-90) + acos((player_pos_y - pos_y) / sqrt(pow(player_pos_x - pos_x, 2) + pow(player_pos_y - pos_y, 2) + pow(player_pos_z - pos_z, 2)))",
321 "iris_right.tx": "clamp(3.5 + if(head2.ry > torad(60),-1,0) + if(var.look_angle-head.ry < 0.2 && var.look_angle-head.ry > -0.2 ,-1,0) , 2.5,3.5 )",
322 "iris_left.tx": " clamp(2.5 + if(head2.ry < torad(-60),1,0) + if(var.look_angle-head.ry < 0.2 && var.look_angle-head.ry > -0.2 , 1,0) , 2.5,3.5 )"
323 }
324 ]
325 },
326 {
327 "part": "head",
328 "id": "head",
329 "invertAxis": "xy",
330 "translate": [0, -12, 6]
331 },
332 {
333 "part": "leg1",
334 "id": "leg1",
335 "invertAxis": "xy",
336 "translate": [-3, -6, -7]
337 },
338 {
339 "part": "leg2",
340 "id": "leg2",
341 "invertAxis": "xy",
342 "translate": [3, -6, -7]
343 },
344 {
345 "part": "leg3",
346 "id": "leg3",
347 "invertAxis": "xy",
348 "translate": [-3, -6, 5]
349 },
350 {
351 "part": "leg4",
352 "id": "leg4",
353 "invertAxis": "xy",
354 "translate": [3, -6, 5]
355 }
356 ]
357} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/pig_saddle.jem b/assets/minecraft/optifine/cem/pig_saddle.jem
new file mode 100755
index 00000000..90a71e82
--- /dev/null
+++ b/assets/minecraft/optifine/cem/pig_saddle.jem
@@ -0,0 +1,244 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [64, 32],
4 "models": [
5 {
6 "part": "body",
7 "id": "body",
8 "invertAxis": "xy",
9 "translate": [0, -13, -8],
10 "submodels": [
11 {
12 "id": "pig",
13 "invertAxis": "xy",
14 "translate": [0, 11, 6],
15 "submodels": [
16 {
17 "id": "leg_4",
18 "invertAxis": "xy",
19 "translate": [-3, -5, -9]
20 },
21 {
22 "id": "leg_2",
23 "invertAxis": "xy",
24 "translate": [-3, -5, 3]
25 },
26 {
27 "id": "leg_3",
28 "invertAxis": "xy",
29 "translate": [3, -5, -9]
30 },
31 {
32 "id": "leg_1",
33 "invertAxis": "xy",
34 "translate": [3, -5, 3]
35 },
36 {
37 "id": "head2",
38 "invertAxis": "xy",
39 "translate": [0, 1, -10],
40 "boxes": [
41 {
42 "coordinates": [-4, -4, -8, 8, 8, 8],
43 "uvNorth": [8, 8, 16, 16],
44 "uvEast": [0, 8, 8, 16],
45 "uvSouth": [24, 8, 32, 16],
46 "uvWest": [16, 8, 24, 16],
47 "uvUp": [16, 8, 8, 0],
48 "uvDown": [24, 0, 16, 8],
49 "sizeAdd": 0.5
50 }
51 ],
52 "submodels": [
53 {
54 "id": "eyes",
55 "invertAxis": "xy",
56 "translate": [0, 0, 0],
57 "submodels": [
58 {
59 "id": "right",
60 "invertAxis": "xy",
61 "translate": [0, 0, 0],
62 "submodels": [
63 {
64 "id": "iris_right",
65 "invertAxis": "xy",
66 "translate": [-3.5, -0.5, -7.5]
67 }
68 ]
69 },
70 {
71 "id": "left",
72 "invertAxis": "xy",
73 "translate": [6, 0, 0],
74 "submodels": [
75 {
76 "id": "iris_left",
77 "invertAxis": "xy",
78 "translate": [-2.5, -0.5, -7.5]
79 }
80 ]
81 }
82 ]
83 },
84 {
85 "id": "snout",
86 "invertAxis": "xy",
87 "translate": [0, -1.5, -1.5]
88 },
89 {
90 "id": "ear_right",
91 "invertAxis": "xy",
92 "translate": [-4, 2, -5],
93 "rotate": [0, 0, -20]
94 },
95 {
96 "id": "ear_left",
97 "invertAxis": "xy",
98 "translate": [4, 2, -5],
99 "rotate": [0, 0, 20]
100 }
101 ]
102 },
103 {
104 "id": "torso",
105 "invertAxis": "xy",
106 "translate": [0, 2, -2],
107 "submodels": [
108 {
109 "id": "body2",
110 "invertAxis": "xy",
111 "translate": [0, 5, -9],
112 "boxes": [
113 {
114 "coordinates": [-5, -11, 2, 10, 16, 8],
115 "uvNorth": [36, 16, 46, 32],
116 "uvEast": [28, 16, 36, 32],
117 "uvSouth": [54, 16, 64, 32],
118 "uvWest": [46, 16, 54, 32],
119 "uvUp": [46, 16, 36, 8],
120 "uvDown": [56, 8, 46, 16],
121 "sizeAdd": 0.5
122 }
123 ]
124 }
125 ]
126 }
127 ]
128 }
129 ],
130 "animations": [
131 {
132 "var.swim_k": "clamp(if(is_in_water,var.swim_k-0.03,var.swim_k+0.03),torad(-25),0)",
133 "pig.rx": "torad(-90) + var.swim_k",
134 "torso.rx": "torad(90)",
135 "pig.tz": "if(is_in_water,-2,6) - var.lay_k"
136 },
137 {
138 "var.fall": "if(pos_y < var.pos_y,1,0)",
139 "var.time": "(var.time + 1 * limb_speed * 25 * frame_time)",
140 "var.time_s": "(var.time_s + 1 * 25 * frame_time)",
141 "var.time_sky": "(var.time_sky + 1 * 25 * frame_time) * var.sky_k",
142 "var.sky_k": "clamp(if( is_riding || is_in_water || is_on_ground || pos_y >= var.pos_y,0,(var.sky_k+1*frame_time)),0,5)",
143 "var.sky_k2": "if( is_riding || is_on_ground || is_in_water,-1.5,var.sky_k2+30*frame_time*var.sky_k)",
144 "pig.ry": "max(var.sky_k2,0)",
145 "var.still_k": "if(is_on_ground && limb_speed <= 0.1,(var.still_k+0.03),0)",
146 "var.rand_still": "if(var.still_k == 0,random(id*age),var.rand_still)",
147 "var.lay_k": "clamp(if(var.still_k >= var.rand_still*10,var.lay_k+0.2,var.lay_k-0.2),0,5)",
148 "var.sniff_k": "if(var.sniff_k > random(id*age)*400,-0.5,(var.sniff_k+0.03))",
149 "var.sniff_k2": "if(var.sniff_k > 0 ,0,(var.sniff_k2+0.05))",
150 "snout.rx": "if(var.sniff_k < 0 , (-sin(var.sniff_k2*12)-0.5)/15,0)",
151 "var.pos_y": "pos_y"
152 },
153 {
154 "var.hop": 3,
155 "var.clamp_speed": "clamp(limb_speed*10,0,1)",
156 "var.sinrx": "sin(var.time* if(is_child,2,1))*limb_speed",
157 "var.skyrxcos": "cos(var.time_sky* if(is_child,2,1))",
158 "var.cos_base": "if(limb_speed > 0.1,((cos(var.time* if(is_child,2,1))-(var.hop/2)/2)*var.hop + 7),var.cos_base+1)",
159 "var.cos_basen": "if(limb_speed > 0.1,((-cos(var.time* if(is_child,2,1))-(var.hop/2)/2)*var.hop + 7),var.cos_basen+1)",
160 "var.costy": "min(var.cos_base,5)",
161 "var.costyn": "min(var.cos_basen,5)",
162 "var.swsinrx": "clamp(sin(var.time_s* if(is_child,2,1)*0.7)*1.5,torad(-90),torad(90))",
163 "var.wat_jump": "if( !is_on_ground && !is_in_water && var.sky_k2 < 0,-pig.rx +torad(-90),0 )",
164 "leg_1.rx": "if(is_in_water,var.swsinrx,var.sinrx +var.wat_jump)",
165 "leg_1.ty": "if(is_on_ground,if(is_in_water,5,var.costy),5)",
166 "leg_1.rz": "var.sky_k/4 + var.lay_k / 3",
167 "leg_2.rx": "if(is_in_water,-var.swsinrx,-var.sinrx +var.wat_jump)",
168 "leg_2.ty": "if(is_on_ground,if(is_in_water,5,var.costyn),5)",
169 "leg_2.rz": "-var.sky_k/4 - var.lay_k / 3",
170 "leg_3.rx": "if(is_in_water,-var.swsinrx,-var.sinrx +var.wat_jump)",
171 "leg_3.ty": "if(is_on_ground,if(is_in_water,5,var.costyn),5)",
172 "leg_3.rz": "var.sky_k/4 + var.lay_k / 3",
173 "leg_4.rx": "if(is_in_water,var.swsinrx,var.sinrx+var.wat_jump)",
174 "leg_4.ty": "if(is_on_ground,if(is_in_water,5,var.costy),5)",
175 "leg_4.rz": "-var.sky_k/4 - var.lay_k / 3"
176 },
177 {
178 "var.headn": "sin(var.time* if(is_child,2,1))*limb_speed / 6 ",
179 "var.headw": "sin(var.time_s* if(is_child,2,1)*0.7) / 6 ",
180 "var.headyn": "cos(var.time* if(is_child,2,1)/2)*limb_speed / 3 ",
181 "var.headyw": "cos(var.time_s* if(is_child,2,1)*0.7/2) / 3 ",
182 "var.idle_head_rx": "if(is_on_ground && limb_speed<0.1,sin(var.time_s/10)/20,0)",
183 "head2.rx": "head.rx + var.idle_head_rx + ( if(is_in_water,var.headw,var.headn) )- var.sky_k/8 ",
184 "head2.ry": "head.ry + ( if(is_in_water,var.headyw,var.headyn))",
185 "head2.sy": "if(is_child,2,1)",
186 "head2.sx": "if(is_child,2,1)",
187 "head2.sz": "if(is_child,2,1)"
188 },
189 {
190 "var.idle_ear_rx": "if(is_on_ground && limb_speed<0.1,cos(var.time_s/10)/15,0)",
191 "ear_left.rz": "var.idle_ear_rx + (sin(var.time)*limb_speed / 2) + torad(15) + var.sky_k/2 + (var.skyrxcos/2)*var.sky_k/5 ",
192 "ear_right.rz": "-var.idle_ear_rx + (-sin(var.time)*limb_speed / 2) - torad(15)- var.sky_k/2 + (var.skyrxcos/2)*var.sky_k/5 "
193 },
194 {
195 "var.idle_body_rx": "if(is_on_ground && limb_speed<0.1,(cos(var.time_s / 10) / 30) - 0.05,0)",
196 "var.bodyy": "sin(var.time)*limb_speed / 6",
197 "var.bodyy_s": "sin(var.time_s*0.7)/ 6",
198 "var.bodyy_sky": "sin(var.time_sky*0.7)/ 6",
199 "var.bodyx": "cos(var.time)*limb_speed / 6",
200 "var.bodyx_s": "cos(var.time_s*0.7)/ 6",
201 "var.bodyx_sky": "sin(var.time_sky*0.7)/ 6",
202 "body2.rx": "var.idle_body_rx + if(is_in_water,var.bodyx_s,var.bodyx)",
203 "body2.ry": " if(is_in_water,var.bodyy_s,var.bodyy)"
204 },
205 {
206 "var.look_angle": "(torad(-90 + atan2(player_pos_z - pos_z, player_pos_x - pos_x) * 180 / pi)-rot_y)",
207 "var.look_anglex": "torad(-90) + acos((player_pos_y - pos_y) / sqrt(pow(player_pos_x - pos_x, 2) + pow(player_pos_y - pos_y, 2) + pow(player_pos_z - pos_z, 2)))",
208 "iris_right.tx": "clamp(3.5 + if(head2.ry > torad(60),-1,0) + if(var.look_angle-head.ry < 0.2 && var.look_angle-head.ry > -0.2 ,-1,0) , 2.5,3.5 )",
209 "iris_left.tx": " clamp(2.5 + if(head2.ry < torad(-60),1,0) + if(var.look_angle-head.ry < 0.2 && var.look_angle-head.ry > -0.2 , 1,0) , 2.5,3.5 )"
210 }
211 ]
212 },
213 {
214 "part": "head",
215 "id": "head",
216 "invertAxis": "xy",
217 "translate": [0, -12, 6]
218 },
219 {
220 "part": "leg1",
221 "id": "leg1",
222 "invertAxis": "xy",
223 "translate": [-3, -6, -7]
224 },
225 {
226 "part": "leg2",
227 "id": "leg2",
228 "invertAxis": "xy",
229 "translate": [3, -6, -7]
230 },
231 {
232 "part": "leg3",
233 "id": "leg3",
234 "invertAxis": "xy",
235 "translate": [-3, -6, 5]
236 },
237 {
238 "part": "leg4",
239 "id": "leg4",
240 "invertAxis": "xy",
241 "translate": [3, -6, 5]
242 }
243 ]
244} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/puffer_fish_big.jem b/assets/minecraft/optifine/cem/puffer_fish_big.jem
new file mode 100755
index 00000000..b3aa7bb9
--- /dev/null
+++ b/assets/minecraft/optifine/cem/puffer_fish_big.jem
@@ -0,0 +1,220 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "textures/entity/fish/pufferfish.png",
4 "textureSize": [32, 32],
5 "models": [
6 {
7 "part": "body",
8 "id": "body",
9 "invertAxis": "xy",
10 "translate": [0, 0, 0],
11 "submodels": [
12 {
13 "id": "fish",
14 "invertAxis": "xy",
15 "translate": [0, 4, 0],
16 "submodels": [
17 {
18 "id": "fin_right2",
19 "invertAxis": "xy",
20 "translate": [4, 3, -2],
21 "boxes": [
22 {"coordinates": [0, -1, -0.99, 2, 1, 2], "textureOffset": [24, 0]}
23 ]
24 },
25 {
26 "id": "fin_left2",
27 "invertAxis": "xy",
28 "translate": [-4, 3, -2],
29 "boxes": [
30 {"coordinates": [-2, -1, -0.99, 2, 1, 2], "textureOffset": [24, 3]}
31 ]
32 },
33 {
34 "id": "body2",
35 "invertAxis": "xy",
36 "translate": [0, -4, 0],
37 "boxes": [
38 {"coordinates": [-4, 0, -4, 8, 8, 8], "textureOffset": [0, 0]},
39 {"coordinates": [-4, 8, 0, 8, 1, 1], "textureOffset": [14, 16]},
40 {"coordinates": [-4, -1, 0, 8, 1, 0], "textureOffset": [15, 20]}
41 ],
42 "submodels": [
43 {
44 "id": "top_front_spikes",
45 "invertAxis": "xy",
46 "translate": [0, 8, -4],
47 "rotate": [-45, 0, 0],
48 "boxes": [
49 {"coordinates": [-4, 0, 0, 8, 1, 0], "textureOffset": [15, 17]}
50 ]
51 },
52 {
53 "id": "left_front_spikes",
54 "invertAxis": "xy",
55 "translate": [-4, 4, -4],
56 "rotate": [0, -45, 0],
57 "boxes": [
58 {"coordinates": [-1, -4, 0, 1, 8, 0], "textureOffset": [1, 17]}
59 ]
60 },
61 {
62 "id": "right_front_spikes",
63 "invertAxis": "xy",
64 "translate": [4, 4, -4],
65 "rotate": [0, 45, 0],
66 "boxes": [
67 {"coordinates": [0, -4, 0, 1, 8, 0], "textureOffset": [5, 17]}
68 ]
69 },
70 {
71 "id": "bottom_front_spikes",
72 "invertAxis": "xy",
73 "translate": [0, 0, -4],
74 "rotate": [45, 0, 0],
75 "boxes": [
76 {"coordinates": [-4, -1, 0, 8, 1, 0], "textureOffset": [15, 20]}
77 ]
78 },
79 {
80 "id": "top_back_spikes",
81 "invertAxis": "xy",
82 "translate": [0, 8, 4],
83 "rotate": [45, 0, 0],
84 "boxes": [
85 {"coordinates": [-4, 0, 0, 8, 1, 0], "textureOffset": [23, 18]}
86 ]
87 },
88 {
89 "id": "left_back_spikes",
90 "invertAxis": "xy",
91 "translate": [-4, 4, 4],
92 "rotate": [0, 45, 0],
93 "boxes": [
94 {"coordinates": [-1, -4, 0, 1, 8, 0], "textureOffset": [9, 17]}
95 ]
96 },
97 {
98 "id": "right_back_spikes",
99 "invertAxis": "xy",
100 "translate": [4, 4, 4],
101 "rotate": [0, -45, 0],
102 "boxes": [
103 {"coordinates": [0, -4, 0, 1, 8, 0], "textureOffset": [9, 17]}
104 ]
105 },
106 {
107 "id": "bottom_back_spikes",
108 "invertAxis": "xy",
109 "translate": [0, 0, 4],
110 "rotate": [-45, 0, 0],
111 "boxes": [
112 {"coordinates": [-4, -1, 0, 8, 1, 0], "textureOffset": [15, 20]}
113 ]
114 }
115 ]
116 }
117 ]
118 }
119 ],
120 "animations": [
121 {
122 "fish.rx": "-body.rx",
123 "fish.ry": "-body.ry",
124 "fish.rz": "-body.rz"
125 },
126 {
127 "body2.rx": "body.rx",
128 "body2.ry": "body.ry",
129 "body2.rz": "body.rz",
130 "fin_right2.rx": "fin_right.rx",
131 "fin_right2.ry": "fin_right.ry",
132 "fin_right2.rz": "fin_right.rz",
133 "fin_left2.rx": "fin_left.rx",
134 "fin_left2.ry": "fin_left.ry",
135 "fin_left2.rz": "fin_left.rz"
136 },
137 {
138 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
139 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
140 "var.test": "print(1,5,var.old_pos_y-pos_y)",
141 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
142 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
143 "fish.rx": "var.pitch"
144 }
145 ]
146 },
147 {
148 "part": "fin_left",
149 "id": "fin_left",
150 "invertAxis": "xy",
151 "translate": [4, -7, 2]
152 },
153 {
154 "part": "fin_right",
155 "id": "fin_right",
156 "invertAxis": "xy",
157 "translate": [-4, -7, 2]
158 },
159 {
160 "part": "spikes_front_top",
161 "id": "spikes_front_top",
162 "invertAxis": "xy",
163 "translate": [0, 0, 0]
164 },
165 {
166 "part": "spikes_middle_top",
167 "id": "spikes_middle_top",
168 "invertAxis": "xy",
169 "translate": [0, 0, 0]
170 },
171 {
172 "part": "spikes_back_top",
173 "id": "spikes_back_top",
174 "invertAxis": "xy",
175 "translate": [0, 0, 0]
176 },
177 {
178 "part": "spikes_front_left",
179 "id": "spikes_front_left",
180 "invertAxis": "xy",
181 "translate": [0, 0, 0]
182 },
183 {
184 "part": "spikes_front_right",
185 "id": "spikes_front_right",
186 "invertAxis": "xy",
187 "translate": [0, 0, 0]
188 },
189 {
190 "part": "spikes_front_bottom",
191 "id": "spikes_front_bottom",
192 "invertAxis": "xy",
193 "translate": [0, 0, 0]
194 },
195 {
196 "part": "spikes_middle_bottom",
197 "id": "spikes_middle_bottom",
198 "invertAxis": "xy",
199 "translate": [0, 0, 0]
200 },
201 {
202 "part": "spikes_back_bottom",
203 "id": "spikes_back_bottom",
204 "invertAxis": "xy",
205 "translate": [0, 0, 0]
206 },
207 {
208 "part": "spikes_back_left",
209 "id": "spikes_back_left",
210 "invertAxis": "xy",
211 "translate": [0, 0, 0]
212 },
213 {
214 "part": "spikes_back_right",
215 "id": "spikes_back_right",
216 "invertAxis": "xy",
217 "translate": [0, 0, 0]
218 }
219 ]
220} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/puffer_fish_medium.jem b/assets/minecraft/optifine/cem/puffer_fish_medium.jem
new file mode 100755
index 00000000..417c270b
--- /dev/null
+++ b/assets/minecraft/optifine/cem/puffer_fish_medium.jem
@@ -0,0 +1,205 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [32, 32],
4 "models": [
5 {
6 "part": "body",
7 "id": "body",
8 "invertAxis": "xy",
9 "translate": [0, 0, 0],
10 "submodels": [
11 {
12 "id": "fish",
13 "invertAxis": "xy",
14 "translate": [0, 3.5, 0],
15 "submodels": [
16 {
17 "id": "body2",
18 "invertAxis": "xy",
19 "translate": [0, -3.5, 0],
20 "boxes": [
21 {"coordinates": [-2.5, 1, -2.5, 5, 5, 5], "textureOffset": [12, 22]}
22 ],
23 "submodels": [
24 {
25 "id": "top_front_spikes",
26 "invertAxis": "xy",
27 "translate": [0, 6, -2.5],
28 "rotate": [-45, 0, 0],
29 "boxes": [
30 {"coordinates": [-2.5, 0, 0, 5, 1, 0], "textureOffset": [19, 17]}
31 ]
32 },
33 {
34 "id": "left_front_spikes",
35 "invertAxis": "xy",
36 "translate": [-2.5, 3.5, -2.5],
37 "rotate": [0, -45, 0],
38 "boxes": [
39 {"coordinates": [-1, -2.5, 0, 1, 5, 0], "textureOffset": [0, 16]}
40 ]
41 },
42 {
43 "id": "right_front_spikes",
44 "invertAxis": "xy",
45 "translate": [2.5, 3.5, -2.5],
46 "rotate": [0, 45, 0],
47 "boxes": [
48 {"coordinates": [0, -2.5, 0, 1, 5, 0], "textureOffset": [8, 16]}
49 ]
50 },
51 {
52 "id": "bottom_front_spikes",
53 "invertAxis": "xy",
54 "translate": [0, 1, -2.5],
55 "rotate": [45, 0, 0],
56 "boxes": [
57 {"coordinates": [-2.5, -1, 0, 5, 1, 0], "textureOffset": [19, 20]}
58 ]
59 },
60 {
61 "id": "top_back_spikes",
62 "invertAxis": "xy",
63 "translate": [0, 6, 2.5],
64 "rotate": [45, 0, 0],
65 "boxes": [
66 {"coordinates": [-2.5, 0, 0, 5, 1, 0], "textureOffset": [19, 17]}
67 ]
68 },
69 {
70 "id": "left_back_spikes",
71 "invertAxis": "xy",
72 "translate": [2.5, 3.5, 2.5],
73 "rotate": [0, -45, 0],
74 "boxes": [
75 {"coordinates": [0, -2.5, 0, 1, 5, 0], "textureOffset": [8, 16]}
76 ]
77 },
78 {
79 "id": "right_back_spikes",
80 "invertAxis": "xy",
81 "translate": [-2.5, 3.5, 2.5],
82 "rotate": [0, 45, 0],
83 "boxes": [
84 {"coordinates": [-1, -2.5, 0, 1, 5, 0], "textureOffset": [4, 16]}
85 ]
86 },
87 {
88 "id": "bottom_back_spikes",
89 "invertAxis": "xy",
90 "translate": [-1, 1, 2.5],
91 "rotate": [-45, 0, 0],
92 "boxes": [
93 {"coordinates": [-0.5, -1, 0, 1, 1, 0], "textureOffset": [16, 20]}
94 ]
95 }
96 ]
97 },
98 {
99 "id": "fin_left2",
100 "invertAxis": "xy",
101 "translate": [-2.5, 2.5, -1.5],
102 "boxes": [
103 {"coordinates": [-2, 0, 0, 2, 0, 2], "textureOffset": [24, 3]}
104 ]
105 },
106 {
107 "id": "fin_right2",
108 "invertAxis": "xy",
109 "translate": [2.5, 2.5, -1.5],
110 "boxes": [
111 {"coordinates": [0, 0, 0.01, 2, 0, 2], "textureOffset": [24, 0]}
112 ]
113 }
114 ]
115 }
116 ],
117 "animations": [
118 {
119 "fish.rx": "-body.rx",
120 "fish.ry": "-body.ry",
121 "fish.rz": "-body.rz"
122 },
123 {
124 "body2.rx": "body.rx",
125 "body2.ry": "body.ry",
126 "body2.rz": "body.rz",
127 "fin_right2.rx": "fin_right.rx",
128 "fin_right2.ry": "fin_right.ry",
129 "fin_right2.rz": "fin_right.rz",
130 "fin_left2.rx": "fin_left.rx",
131 "fin_left2.ry": "fin_left.ry",
132 "fin_left2.rz": "fin_left.rz"
133 },
134 {
135 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
136 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
137 "var.test": "print(1,5,var.old_pos_y-pos_y)",
138 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
139 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
140 "fish.rx": "var.pitch"
141 }
142 ]
143 },
144 {
145 "part": "fin_right",
146 "id": "fin_right",
147 "invertAxis": "xy",
148 "translate": [-2.5, -6, 1.5]
149 },
150 {
151 "part": "fin_left",
152 "id": "fin_left",
153 "invertAxis": "xy",
154 "translate": [2.5, -6, 1.5]
155 },
156 {
157 "part": "spikes_front_top",
158 "id": "spikes_front_top",
159 "invertAxis": "xy",
160 "translate": [0, 0, 0]
161 },
162 {
163 "part": "spikes_back_top",
164 "id": "spikes_back_top",
165 "invertAxis": "xy",
166 "translate": [0, 0, 0]
167 },
168 {
169 "part": "spikes_front_right",
170 "id": "spikes_front_right",
171 "invertAxis": "xy",
172 "translate": [0, 0, 0]
173 },
174 {
175 "part": "spikes_back_right",
176 "id": "spikes_back_right",
177 "invertAxis": "xy",
178 "translate": [0, 0, 0]
179 },
180 {
181 "part": "spikes_front_left",
182 "id": "spikes_front_left",
183 "invertAxis": "xy",
184 "translate": [0, 0, 0]
185 },
186 {
187 "part": "spikes_back_left",
188 "id": "spikes_back_left",
189 "invertAxis": "xy",
190 "translate": [0, 0, 0]
191 },
192 {
193 "part": "spikes_front_bottom",
194 "id": "spikes_front_bottom",
195 "invertAxis": "xy",
196 "translate": [0, 0, 0]
197 },
198 {
199 "part": "spikes_back_bottom",
200 "id": "spikes_back_bottom",
201 "invertAxis": "xy",
202 "translate": [0, 0, 0]
203 }
204 ]
205} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/puffer_fish_small.jem b/assets/minecraft/optifine/cem/puffer_fish_small.jem
new file mode 100755
index 00000000..d3456c74
--- /dev/null
+++ b/assets/minecraft/optifine/cem/puffer_fish_small.jem
@@ -0,0 +1,114 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [32, 32],
4 "models": [
5 {
6 "part": "body",
7 "id": "body",
8 "invertAxis": "xy",
9 "translate": [0, 0, 0],
10 "submodels": [
11 {
12 "id": "fish",
13 "invertAxis": "xy",
14 "translate": [0, 1, 0],
15 "submodels": [
16 {
17 "id": "body2",
18 "invertAxis": "xy",
19 "translate": [0, -1, 0],
20 "boxes": [
21 {"coordinates": [-1.5, 0, -1.5, 3, 2, 3], "textureOffset": [0, 27]},
22 {"coordinates": [-1.5, 2, -1.5, 1, 1, 1], "textureOffset": [28, 6]},
23 {"coordinates": [0.5, 2, -1.5, 1, 1, 1], "textureOffset": [24, 6]}
24 ]
25 },
26 {
27 "id": "fin_left2",
28 "invertAxis": "xy",
29 "translate": [-1.5, 0, -1.5],
30 "boxes": [
31 {"coordinates": [-1, 0, 0.01, 1, 0, 2], "textureOffset": [25, 0]}
32 ]
33 },
34 {
35 "id": "fin_right2",
36 "invertAxis": "xy",
37 "translate": [1.5, 0, -1.5],
38 "boxes": [
39 {"coordinates": [0, 0, 0.01, 1, 0, 2], "textureOffset": [25, 0]}
40 ]
41 },
42 {
43 "id": "tail2",
44 "invertAxis": "xy",
45 "translate": [0, 0, 1.5],
46 "boxes": [
47 {"coordinates": [-1.5, 0, 0, 3, 0, 3], "textureOffset": [-3, 0]}
48 ]
49 }
50 ]
51 }
52 ],
53 "animations": [
54 {
55 "fish.rx": "-body.rx",
56 "fish.ry": "-body.ry",
57 "fish.rz": "-body.rz"
58 },
59 {
60 "body2.rx": "body.rx",
61 "body2.ry": "body.ry",
62 "body2.rz": "body.rz",
63 "tail2.rx": "tail.rx",
64 "tail2.ry": "tail.ry",
65 "tail2.rz": "tail.rz",
66 "fin_right2.rx": "fin_right.rx",
67 "fin_right2.ry": "fin_right.ry",
68 "fin_right2.rz": "fin_right.rz",
69 "fin_left2.rx": "fin_left.rx",
70 "fin_left2.ry": "fin_left.ry",
71 "fin_left2.rz": "fin_left.rz"
72 },
73 {
74 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
75 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
76 "var.test": "print(1,5,var.old_pos_y-pos_y)",
77 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
78 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
79 "fish.rx": "var.pitch"
80 }
81 ]
82 },
83 {
84 "part": "tail",
85 "id": "tail",
86 "invertAxis": "xy",
87 "translate": [0, -1, -1.5]
88 },
89 {
90 "part": "fin_right",
91 "id": "fin_right",
92 "invertAxis": "xy",
93 "translate": [-1.5, -1, 1.5]
94 },
95 {
96 "part": "fin_left",
97 "id": "fin_left",
98 "invertAxis": "xy",
99 "translate": [1.5, -1, 1.5]
100 },
101 {
102 "part": "eye_right",
103 "id": "eye_right",
104 "invertAxis": "xy",
105 "translate": [0, -3, 0]
106 },
107 {
108 "part": "eye_left",
109 "id": "eye_left",
110 "invertAxis": "xy",
111 "translate": [0, -3, 0]
112 }
113 ]
114} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/salmon.jem b/assets/minecraft/optifine/cem/salmon.jem
new file mode 100755
index 00000000..4cc819d6
--- /dev/null
+++ b/assets/minecraft/optifine/cem/salmon.jem
@@ -0,0 +1,186 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [32, 32],
4 "models": [
5 {
6 "part": "body_front",
7 "id": "body_front",
8 "invertAxis": "xy",
9 "translate": [0, -6, 4],
10 "submodels": [
11 {
12 "id": "right_fin",
13 "invertAxis": "xy",
14 "translate": [1.5, 4.5, -3],
15 "rotate": [90, 0, -45]
16 },
17 {
18 "id": "left_fin",
19 "invertAxis": "xy",
20 "translate": [-1.5, 4.5, -3],
21 "rotate": [90, 0, 45]
22 },
23 {
24 "id": "fish",
25 "invertAxis": "xy",
26 "translate": [0, 5, 1],
27 "submodels": [
28 {
29 "id": "fin_back_3",
30 "invertAxis": "xy",
31 "translate": [0, 5.5, 2],
32 "boxes": [
33 {"coordinates": [0, -2, 0, 0, 2, 4], "textureOffset": [0, 2]}
34 ]
35 },
36 {
37 "id": "fin_back_4",
38 "invertAxis": "xy",
39 "translate": [0, 5.5, 0],
40 "boxes": [
41 {"coordinates": [0, -2, 1, 0, 2, 2], "textureOffset": [4, 2]}
42 ]
43 },
44 {
45 "id": "head2",
46 "invertAxis": "xy",
47 "translate": [0, 1, -5],
48 "boxes": [
49 {"coordinates": [-1, -2, -3, 2, 4, 3], "textureOffset": [22, 0]}
50 ]
51 },
52 {
53 "id": "body_back2",
54 "invertAxis": "xy",
55 "translate": [0, 1, 3],
56 "boxes": [
57 {"coordinates": [-1.5, -2.5, 0, 3, 5, 8], "textureOffset": [0, 13]}
58 ],
59 "submodels": [
60 {
61 "id": "tail2",
62 "invertAxis": "xy",
63 "translate": [0, 0, 8],
64 "boxes": [
65 {"coordinates": [0, -2.5, 0, 0, 5, 6], "textureOffset": [20, 10]}
66 ]
67 }
68 ]
69 },
70 {
71 "id": "body_front2",
72 "invertAxis": "xy",
73 "translate": [0, 1, -5],
74 "boxes": [
75 {"coordinates": [-1.5, -2.5, 0, 3, 5, 8], "textureOffset": [0, 0]}
76 ],
77 "submodels": [
78 {
79 "id": "right_fin2",
80 "invertAxis": "xy",
81 "translate": [1.5, -1.5, 1],
82 "rotate": [90, 0, -45],
83 "boxes": [
84 {"coordinates": [0, -1, 0, 2, 2, 0], "textureOffset": [0, 0]}
85 ]
86 },
87 {
88 "id": "left_fin2",
89 "invertAxis": "xy",
90 "translate": [-1.5, -1.5, 1],
91 "rotate": [90, 0, 45],
92 "boxes": [
93 {"coordinates": [-2, -1, 0, 2, 2, 0], "textureOffset": [4, 0]}
94 ]
95 }
96 ]
97 }
98 ]
99 }
100 ],
101 "animations": [
102 {
103 "fish.rx": "-body_front.rx",
104 "fish.ry": "-body_front.ry",
105 "fish.rz": "-body_front.rz"
106 },
107 {
108 "body_front2.rx": "body_front.rx",
109 "body_front2.ry": "body_front.ry",
110 "body_front2.rz": "body_front.rz",
111 "body_back2.rx": "body_back.rx",
112 "body_back2.ry": "body_back.ry",
113 "body_back2.rz": "body_back.rz",
114 "head2.rx": "head.rx",
115 "head2.ry": "head.ry",
116 "head2.rz": "head.rz",
117 "tail2.rx": "tail.rx",
118 "tail2.ry": "tail.ry",
119 "tail2.rz": "tail.rz",
120 "fin_back_3.rx": "fin_back_1.rx * limb_speed*2",
121 "fin_back_3.ry": "fin_back_1.ry* limb_speed*2",
122 "fin_back_3.rz": "fin_back_1.rz* limb_speed*2",
123 "fin_back_4.rx": "fin_back_2.rx * limb_speed*2",
124 "fin_back_4.ry": "fin_back_2.ry* limb_speed*2",
125 "fin_back_4.rz": "fin_back_2.rz* limb_speed*2",
126 "right_fin2.rx": "right_fin.rx",
127 "right_fin2.ry": "right_fin.ry",
128 "right_fin2.rz": "right_fin.rz",
129 "left_fin2.rx": "left_fin.rx",
130 "left_fin2.ry": "left_fin.ry",
131 "left_fin2.rz": "left_fin.rz"
132 },
133 {
134 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
135 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
136 "var.test": "print(1,5,var.old_pos_y-pos_y)",
137 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
138 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
139 "fish.rx": "var.pitch"
140 }
141 ]
142 },
143 {
144 "part": "body_back",
145 "id": "body_back",
146 "invertAxis": "xy",
147 "translate": [0, -6, -4]
148 },
149 {
150 "part": "head",
151 "id": "head",
152 "invertAxis": "xy",
153 "translate": [0, -6, 4]
154 },
155 {
156 "part": "fin_back_1",
157 "id": "fin_back_1",
158 "invertAxis": "xy",
159 "translate": [0, -10.5, -1]
160 },
161 {
162 "part": "fin_back_2",
163 "id": "fin_back_2",
164 "invertAxis": "xy",
165 "translate": [0, -10.5, -3]
166 },
167 {
168 "part": "tail",
169 "id": "tail",
170 "invertAxis": "xy",
171 "translate": [0, -6, -12]
172 },
173 {
174 "part": "fin_left",
175 "id": "fin_left",
176 "invertAxis": "xy",
177 "translate": [0, 0, 0]
178 },
179 {
180 "part": "fin_right",
181 "id": "fin_right",
182 "invertAxis": "xy",
183 "translate": [0, 0, 0]
184 }
185 ]
186} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/sheep.jem b/assets/minecraft/optifine/cem/sheep.jem
new file mode 100755
index 00000000..70cf2f7a
--- /dev/null
+++ b/assets/minecraft/optifine/cem/sheep.jem
@@ -0,0 +1,167 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "textures/entity/sheep/sheep.png",
4 "textureSize": [64, 32],
5 "models": [
6 {
7 "part": "body",
8 "id": "body",
9 "invertAxis": "xy",
10 "translate": [0, -19, -2],
11 "submodels": [
12 {
13 "id": "rotation",
14 "invertAxis": "xy",
15 "translate": [0, 19, 2],
16 "rotate": [-90, 0, 0],
17 "boxes": [
18 {
19 "coordinates": [-4, -6, -7, 8, 16, 6],
20 "uvNorth": [34, 14, 42, 30],
21 "uvEast": [28, 14, 34, 30],
22 "uvSouth": [48, 14, 56, 30],
23 "uvWest": [42, 14, 48, 30],
24 "uvUp": [42, 14, 34, 8],
25 "uvDown": [50, 8, 42, 14]
26 }
27 ]
28 }
29 ],
30 "animations": [
31 {
32 "rotation.rx": "0"
33 }
34 ]
35 },
36 {
37 "part": "head",
38 "id": "head",
39 "invertAxis": "xy",
40 "translate": [0, -18, 8],
41 "boxes": [
42 {
43 "coordinates": [-3, 16, -14, 6, 6, 8],
44 "uvNorth": [8, 8, 14, 14],
45 "uvEast": [0, 8, 8, 14],
46 "uvSouth": [22, 8, 28, 14],
47 "uvWest": [14, 8, 22, 14],
48 "uvUp": [14, 8, 8, 0],
49 "uvDown": [20, 0, 14, 8]
50 },
51 {
52 "coordinates": [-2, 16, -15, 4, 2, 1],
53 "uvNorth": [9, 12, 13, 14],
54 "uvEast": [9, 12, 10, 14],
55 "uvSouth": [9, 12, 13, 14],
56 "uvWest": [12, 12, 13, 14],
57 "uvUp": [13, 13, 9, 12],
58 "uvDown": [13, 13, 9, 14]
59 }
60 ],
61 "submodels": [
62 {
63 "id": "leftear",
64 "invertAxis": "xy",
65 "translate": [4, 20, -10.5],
66 "rotate": [0, 0, -20],
67 "boxes": [
68 {
69 "coordinates": [-1.5, -1, -0.5, 3, 2, 1],
70 "uvNorth": [21, 1, 24, 3],
71 "uvEast": [20, 1, 21, 3],
72 "uvSouth": [25, 1, 28, 3],
73 "uvWest": [24, 1, 25, 3],
74 "uvUp": [24, 1, 21, 0],
75 "uvDown": [27, 0, 24, 1]
76 }
77 ]
78 },
79 {
80 "id": "rightear",
81 "invertAxis": "xy",
82 "translate": [-4, 20, -10.5],
83 "rotate": [0, 0, 20],
84 "boxes": [
85 {
86 "coordinates": [-1.5, -1, -0.5, 3, 2, 1],
87 "uvNorth": [24, 1, 21, 3],
88 "uvEast": [25, 1, 24, 3],
89 "uvSouth": [28, 1, 25, 3],
90 "uvWest": [21, 1, 20, 3],
91 "uvUp": [21, 1, 24, 0],
92 "uvDown": [24, 0, 27, 1]
93 }
94 ]
95 }
96 ]
97 },
98 {
99 "part": "leg1",
100 "id": "leg1",
101 "invertAxis": "xy",
102 "translate": [-3, -12, -7],
103 "boxes": [
104 {
105 "coordinates": [1, 0, 3.5, 3.5, 12, 3.5],
106 "uvNorth": [4, 20, 8, 32],
107 "uvEast": [0, 20, 4, 32],
108 "uvSouth": [12, 20, 16, 32],
109 "uvWest": [8, 20, 12, 32],
110 "uvUp": [8, 20, 4, 16],
111 "uvDown": [12, 16, 8, 20]
112 }
113 ]
114 },
115 {
116 "part": "leg2",
117 "id": "leg2",
118 "invertAxis": "xy",
119 "translate": [3, -12, -7],
120 "boxes": [
121 {
122 "coordinates": [-4.5, 0, 3.5, 3.5, 12, 3.5],
123 "uvNorth": [4, 20, 8, 32],
124 "uvEast": [0, 20, 4, 32],
125 "uvSouth": [12, 20, 16, 32],
126 "uvWest": [8, 20, 12, 32],
127 "uvUp": [8, 20, 4, 16],
128 "uvDown": [12, 16, 8, 20]
129 }
130 ]
131 },
132 {
133 "part": "leg3",
134 "id": "leg3",
135 "invertAxis": "xy",
136 "translate": [-3, -12, 5],
137 "boxes": [
138 {
139 "coordinates": [1, 0, -7, 3.5, 12, 3.5],
140 "uvNorth": [4, 20, 8, 32],
141 "uvEast": [0, 20, 4, 32],
142 "uvSouth": [12, 20, 16, 32],
143 "uvWest": [8, 20, 12, 32],
144 "uvUp": [8, 20, 4, 16],
145 "uvDown": [12, 16, 8, 20]
146 }
147 ]
148 },
149 {
150 "part": "leg4",
151 "id": "leg4",
152 "invertAxis": "xy",
153 "translate": [3, -12, 5],
154 "boxes": [
155 {
156 "coordinates": [-4.5, 0, -7, 3.5, 12, 3.5],
157 "uvNorth": [4, 20, 8, 32],
158 "uvEast": [0, 20, 4, 32],
159 "uvSouth": [12, 20, 16, 32],
160 "uvWest": [8, 20, 12, 32],
161 "uvUp": [8, 20, 4, 16],
162 "uvDown": [12, 16, 8, 20]
163 }
164 ]
165 }
166 ]
167} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/sheep_wool.jem b/assets/minecraft/optifine/cem/sheep_wool.jem
new file mode 100755
index 00000000..d39971a0
--- /dev/null
+++ b/assets/minecraft/optifine/cem/sheep_wool.jem
@@ -0,0 +1,126 @@
1{
2 "textureSize": [64, 32],
3 "models": [
4 {
5 "part": "body",
6 "id": "body",
7 "invertAxis": "xy",
8 "translate": [0, -19, -2],
9 "submodels": [
10 {
11 "id": "rotation",
12 "invertAxis": "xy",
13 "translate": [0, 19, 2],
14 "rotate": [-90, 0, 0],
15 "boxes": [
16 {
17 "coordinates": [-4, -6, -8, 8, 16, 7],
18 "uvNorth": [34, 14, 42, 30],
19 "uvEast": [28, 14, 34, 30],
20 "uvSouth": [48, 14, 56, 30],
21 "uvWest": [42, 14, 48, 30],
22 "uvUp": [42, 14, 34, 8],
23 "uvDown": [50, 8, 42, 14],
24 "sizeAdd": 1.75
25 }
26 ]
27 }
28 ],
29 "animations": [
30 {
31 "rotation.rx": "0"
32 }
33 ]
34 },
35 {
36 "part": "head",
37 "id": "head",
38 "invertAxis": "xy",
39 "translate": [0, -18, 8],
40 "boxes": [
41 {
42 "coordinates": [-3, 16, -12, 6, 6, 6],
43 "uvNorth": [6, 6, 12, 12],
44 "uvEast": [0, 6, 6, 12],
45 "uvSouth": [18, 6, 24, 12],
46 "uvWest": [12, 6, 18, 12],
47 "uvUp": [12, 6, 6, 0],
48 "uvDown": [18, 0, 12, 6],
49 "sizeAdd": 0.6
50 }
51 ]
52 },
53 {
54 "part": "leg1",
55 "id": "leg1",
56 "invertAxis": "xy",
57 "translate": [-3, -12, -7],
58 "boxes": [
59 {
60 "coordinates": [1, 4, 3.5, 4, 6, 4],
61 "uvNorth": [4, 20, 8, 26],
62 "uvEast": [0, 20, 4, 26],
63 "uvSouth": [12, 20, 16, 26],
64 "uvWest": [8, 20, 12, 26],
65 "uvUp": [8, 20, 4, 16],
66 "uvDown": [12, 16, 8, 20],
67 "sizeAdd": 0.5
68 }
69 ]
70 },
71 {
72 "part": "leg2",
73 "id": "leg2",
74 "invertAxis": "xy",
75 "translate": [3, -12, -7],
76 "boxes": [
77 {
78 "coordinates": [-5, 4, 3.5, 4, 6, 4],
79 "uvNorth": [4, 20, 8, 26],
80 "uvEast": [0, 20, 4, 26],
81 "uvSouth": [12, 20, 16, 26],
82 "uvWest": [8, 20, 12, 26],
83 "uvUp": [8, 20, 4, 16],
84 "uvDown": [12, 16, 8, 20],
85 "sizeAdd": 0.5
86 }
87 ]
88 },
89 {
90 "part": "leg3",
91 "id": "leg3",
92 "invertAxis": "xy",
93 "translate": [-3, -12, 5],
94 "boxes": [
95 {
96 "coordinates": [1, 4, -7.5, 4, 6, 4],
97 "uvNorth": [4, 20, 8, 26],
98 "uvEast": [0, 20, 4, 26],
99 "uvSouth": [12, 20, 16, 26],
100 "uvWest": [8, 20, 12, 26],
101 "uvUp": [8, 20, 4, 16],
102 "uvDown": [12, 16, 8, 20],
103 "sizeAdd": 0.5
104 }
105 ]
106 },
107 {
108 "part": "leg4",
109 "id": "leg4",
110 "invertAxis": "xy",
111 "translate": [3, -12, 5],
112 "boxes": [
113 {
114 "coordinates": [-5, 4, -7.5, 4, 6, 4],
115 "uvNorth": [4, 20, 8, 26],
116 "uvEast": [0, 20, 4, 26],
117 "uvSouth": [12, 20, 16, 26],
118 "uvWest": [8, 20, 12, 26],
119 "uvUp": [8, 20, 4, 16],
120 "uvDown": [12, 16, 8, 20],
121 "sizeAdd": 0.5
122 }
123 ]
124 }
125 ]
126} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/sign.jem b/assets/minecraft/optifine/cem/sign.jem
new file mode 100755
index 00000000..7c27a946
--- /dev/null
+++ b/assets/minecraft/optifine/cem/sign.jem
@@ -0,0 +1,39 @@
1{
2 "textureSize": [64, 32],
3 "models": [
4 {
5 "part": "board",
6 "id": "board",
7 "invertAxis": "xy",
8 "translate": [0, -12, 0],
9 "boxes": [
10 {
11 "coordinates": [-12, 15, -1, 24, 10.475, 2.5],
12 "uvNorth": [10, 16, 26, 23],
13 "uvEast": [8, 16, 10, 23],
14 "uvSouth": [28, 16, 44, 23],
15 "uvWest": [26, 16, 28, 23],
16 "uvUp": [26, 16, 10, 14],
17 "uvDown": [42, 14, 26, 16]
18 }
19 ]
20 },
21 {
22 "part": "stick",
23 "id": "stick",
24 "invertAxis": "xy",
25 "translate": [0, -12, 0],
26 "boxes": [
27 {
28 "coordinates": [-1.5, 0, 0, 3, 27, 3],
29 "uvNorth": [58, 14, 60, 32],
30 "uvEast": [56, 14, 58, 32],
31 "uvSouth": [62, 14, 64, 32],
32 "uvWest": [60, 14, 62, 32],
33 "uvUp": [60, 14, 58, 12],
34 "uvDown": [62, 12, 60, 14]
35 }
36 ]
37 }
38 ]
39} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/skeleton.jem b/assets/minecraft/optifine/cem/skeleton.jem
new file mode 100755
index 00000000..604a4ea9
--- /dev/null
+++ b/assets/minecraft/optifine/cem/skeleton.jem
@@ -0,0 +1,145 @@
1{
2 "textureSize": [64, 32],
3 "models": [
4 {
5 "part": "head",
6 "id": "head",
7 "invertAxis": "xy",
8 "translate": [0, -24, 0],
9 "boxes": [
10 {
11 "coordinates": [-4, 26, -4, 8, 6, 8],
12 "uvNorth": [8, 8, 16, 14],
13 "uvEast": [0, 8, 8, 14],
14 "uvSouth": [24, 8, 32, 14],
15 "uvWest": [16, 8, 24, 14],
16 "uvUp": [16, 8, 8, 0],
17 "uvDown": [8, 0, 0, 8]
18 }
19 ],
20 "submodels": [
21 {
22 "id": "jaw",
23 "invertAxis": "xy",
24 "translate": [0, 26, 2],
25 "boxes": [
26 {
27 "coordinates": [-4.01, -2, -6, 8, 2, 8],
28 "uvNorth": [8, 14, 16, 16],
29 "uvEast": [0, 14, 8, 16],
30 "uvSouth": [24, 14, 32, 16],
31 "uvWest": [16, 14, 24, 16],
32 "uvUp": [32, 8, 24, 0],
33 "uvDown": [24, 0, 16, 8]
34 }
35 ]
36 }
37 ]
38 },
39 {
40 "part": "headwear",
41 "id": "headwear",
42 "invertAxis": "xy",
43 "translate": [0, -24, 0],
44 "boxes": [
45 {
46 "coordinates": [-4, 24, -4, 8, 8, 8],
47 "uvNorth": [40, 8, 48, 16],
48 "uvEast": [32, 8, 40, 16],
49 "uvSouth": [56, 8, 64, 16],
50 "uvWest": [48, 8, 56, 16],
51 "uvUp": [48, 8, 40, 0],
52 "uvDown": [56, 0, 48, 8],
53 "sizeAdd": 0.5
54 }
55 ]
56 },
57 {
58 "part": "body",
59 "id": "body",
60 "invertAxis": "xy",
61 "translate": [0, -24, 0],
62 "boxes": [
63 {
64 "coordinates": [-4, 12, -2, 8, 12, 4],
65 "uvNorth": [20, 20, 28, 32],
66 "uvEast": [16, 20, 20, 32],
67 "uvSouth": [32, 20, 40, 32],
68 "uvWest": [28, 20, 32, 32],
69 "uvUp": [28, 20, 20, 16],
70 "uvDown": [36, 16, 28, 20]
71 }
72 ]
73 },
74 {
75 "part": "left_arm",
76 "id": "left_arm",
77 "invertAxis": "xy",
78 "mirrorTexture": "u",
79 "translate": [5, -22, 0],
80 "boxes": [
81 {
82 "coordinates": [-6, 12, -1, 2, 12, 2],
83 "uvNorth": [44, 18, 42, 30],
84 "uvEast": [46, 18, 44, 30],
85 "uvSouth": [48, 18, 46, 30],
86 "uvWest": [42, 18, 40, 30],
87 "uvUp": [42, 18, 44, 16],
88 "uvDown": [44, 16, 46, 18]
89 }
90 ]
91 },
92 {
93 "part": "right_arm",
94 "id": "right_arm",
95 "invertAxis": "xy",
96 "translate": [-5, -22, 0],
97 "boxes": [
98 {
99 "coordinates": [4, 12, -1, 2, 12, 2],
100 "uvNorth": [42, 18, 44, 30],
101 "uvEast": [40, 18, 42, 30],
102 "uvSouth": [46, 18, 48, 30],
103 "uvWest": [44, 18, 46, 30],
104 "uvUp": [44, 18, 42, 16],
105 "uvDown": [46, 16, 44, 18]
106 }
107 ]
108 },
109 {
110 "part": "left_leg",
111 "id": "left_leg",
112 "invertAxis": "xy",
113 "mirrorTexture": "u",
114 "translate": [2, -12, -0.1],
115 "boxes": [
116 {
117 "coordinates": [-3, 0, -1, 2, 12, 2],
118 "uvNorth": [4, 18, 2, 30],
119 "uvEast": [6, 18, 4, 30],
120 "uvSouth": [8, 18, 6, 30],
121 "uvWest": [2, 18, 0, 30],
122 "uvUp": [2, 18, 4, 16],
123 "uvDown": [4, 16, 6, 18]
124 }
125 ]
126 },
127 {
128 "part": "right_leg",
129 "id": "right_leg",
130 "invertAxis": "xy",
131 "translate": [-2, -12, -0.1],
132 "boxes": [
133 {
134 "coordinates": [1, 0, -1, 2, 12, 2],
135 "uvNorth": [2, 18, 4, 30],
136 "uvEast": [0, 18, 2, 30],
137 "uvSouth": [6, 18, 8, 30],
138 "uvWest": [4, 18, 6, 30],
139 "uvUp": [4, 18, 2, 16],
140 "uvDown": [6, 16, 4, 18]
141 }
142 ]
143 }
144 ]
145} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/snow_golem.jem b/assets/minecraft/optifine/cem/snow_golem.jem
new file mode 100755
index 00000000..b04e2f9c
--- /dev/null
+++ b/assets/minecraft/optifine/cem/snow_golem.jem
@@ -0,0 +1,87 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "snow_golem.png",
4 "textureSize": [64, 64],
5 "models": [
6 {
7 "part": "head",
8 "id": "head",
9 "invertAxis": "xy",
10 "translate": [0, -20, 0],
11 "boxes": [
12 {"coordinates": [-3.5, 20, -3.5, 7, 7, 7], "textureOffset": [0, 0]}
13 ]
14 },
15 {
16 "part": "left_hand",
17 "id": "left_hand",
18 "invertAxis": "xy",
19 "translate": [4.5, -18.75, 0],
20 "submodels": [
21 {
22 "id": "left_hand_rotation",
23 "invertAxis": "xy",
24 "translate": [-4, 17.75, 0],
25 "rotate": [0, 0, 57],
26 "boxes": [
27 {"coordinates": [-12.08707, -0.38125, -1.5, 12, 1, 2], "textureOffset": [36, 0]}
28 ]
29 }
30 ],
31 "animations": [
32 {
33 "left_hand_rotation.rz": 0
34 }
35 ]
36 },
37 {
38 "part": "right_hand",
39 "id": "right_hand",
40 "invertAxis": "xy",
41 "translate": [-14.5, -18.75, 0],
42 "submodels": [
43 {
44 "id": "right_hand_flip",
45 "invertAxis": "xy",
46 "translate": [9.5, 17.75, 0],
47 "rotate": [0, -180, 0],
48 "submodels": [
49 {
50 "id": "right_hand_rotation",
51 "invertAxis": "xy",
52 "translate": [5.5, 0, 0],
53 "rotate": [0, 0, 57],
54 "boxes": [
55 {"coordinates": [-12.08707, -0.38125, -0.5, 12, 1, 2], "textureOffset": [36, 0]}
56 ]
57 }
58 ]
59 }
60 ],
61 "animations": [
62 {
63 "right_hand_rotation.rz": 0,
64 "right_hand_flip.ry": 0
65 }
66 ]
67 },
68 {
69 "part": "body",
70 "id": "body",
71 "invertAxis": "xy",
72 "translate": [0, -11, 0],
73 "boxes": [
74 {"coordinates": [-4.5, 11, -4.5, 9, 9, 9], "textureOffset": [0, 14]}
75 ]
76 },
77 {
78 "part": "body_bottom",
79 "id": "body_bottom",
80 "invertAxis": "xy",
81 "translate": [0, 0, 0],
82 "boxes": [
83 {"coordinates": [-5.5, 0, -5.5, 11, 11, 11], "textureOffset": [0, 32]}
84 ]
85 }
86 ]
87} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/snow_golem.png b/assets/minecraft/optifine/cem/snow_golem.png
new file mode 100755
index 00000000..c3972474
--- /dev/null
+++ b/assets/minecraft/optifine/cem/snow_golem.png
Binary files differ
diff --git a/assets/minecraft/optifine/cem/stray.jem b/assets/minecraft/optifine/cem/stray.jem
new file mode 100755
index 00000000..604a4ea9
--- /dev/null
+++ b/assets/minecraft/optifine/cem/stray.jem
@@ -0,0 +1,145 @@
1{
2 "textureSize": [64, 32],
3 "models": [
4 {
5 "part": "head",
6 "id": "head",
7 "invertAxis": "xy",
8 "translate": [0, -24, 0],
9 "boxes": [
10 {
11 "coordinates": [-4, 26, -4, 8, 6, 8],
12 "uvNorth": [8, 8, 16, 14],
13 "uvEast": [0, 8, 8, 14],
14 "uvSouth": [24, 8, 32, 14],
15 "uvWest": [16, 8, 24, 14],
16 "uvUp": [16, 8, 8, 0],
17 "uvDown": [8, 0, 0, 8]
18 }
19 ],
20 "submodels": [
21 {
22 "id": "jaw",
23 "invertAxis": "xy",
24 "translate": [0, 26, 2],
25 "boxes": [
26 {
27 "coordinates": [-4.01, -2, -6, 8, 2, 8],
28 "uvNorth": [8, 14, 16, 16],
29 "uvEast": [0, 14, 8, 16],
30 "uvSouth": [24, 14, 32, 16],
31 "uvWest": [16, 14, 24, 16],
32 "uvUp": [32, 8, 24, 0],
33 "uvDown": [24, 0, 16, 8]
34 }
35 ]
36 }
37 ]
38 },
39 {
40 "part": "headwear",
41 "id": "headwear",
42 "invertAxis": "xy",
43 "translate": [0, -24, 0],
44 "boxes": [
45 {
46 "coordinates": [-4, 24, -4, 8, 8, 8],
47 "uvNorth": [40, 8, 48, 16],
48 "uvEast": [32, 8, 40, 16],
49 "uvSouth": [56, 8, 64, 16],
50 "uvWest": [48, 8, 56, 16],
51 "uvUp": [48, 8, 40, 0],
52 "uvDown": [56, 0, 48, 8],
53 "sizeAdd": 0.5
54 }
55 ]
56 },
57 {
58 "part": "body",
59 "id": "body",
60 "invertAxis": "xy",
61 "translate": [0, -24, 0],
62 "boxes": [
63 {
64 "coordinates": [-4, 12, -2, 8, 12, 4],
65 "uvNorth": [20, 20, 28, 32],
66 "uvEast": [16, 20, 20, 32],
67 "uvSouth": [32, 20, 40, 32],
68 "uvWest": [28, 20, 32, 32],
69 "uvUp": [28, 20, 20, 16],
70 "uvDown": [36, 16, 28, 20]
71 }
72 ]
73 },
74 {
75 "part": "left_arm",
76 "id": "left_arm",
77 "invertAxis": "xy",
78 "mirrorTexture": "u",
79 "translate": [5, -22, 0],
80 "boxes": [
81 {
82 "coordinates": [-6, 12, -1, 2, 12, 2],
83 "uvNorth": [44, 18, 42, 30],
84 "uvEast": [46, 18, 44, 30],
85 "uvSouth": [48, 18, 46, 30],
86 "uvWest": [42, 18, 40, 30],
87 "uvUp": [42, 18, 44, 16],
88 "uvDown": [44, 16, 46, 18]
89 }
90 ]
91 },
92 {
93 "part": "right_arm",
94 "id": "right_arm",
95 "invertAxis": "xy",
96 "translate": [-5, -22, 0],
97 "boxes": [
98 {
99 "coordinates": [4, 12, -1, 2, 12, 2],
100 "uvNorth": [42, 18, 44, 30],
101 "uvEast": [40, 18, 42, 30],
102 "uvSouth": [46, 18, 48, 30],
103 "uvWest": [44, 18, 46, 30],
104 "uvUp": [44, 18, 42, 16],
105 "uvDown": [46, 16, 44, 18]
106 }
107 ]
108 },
109 {
110 "part": "left_leg",
111 "id": "left_leg",
112 "invertAxis": "xy",
113 "mirrorTexture": "u",
114 "translate": [2, -12, -0.1],
115 "boxes": [
116 {
117 "coordinates": [-3, 0, -1, 2, 12, 2],
118 "uvNorth": [4, 18, 2, 30],
119 "uvEast": [6, 18, 4, 30],
120 "uvSouth": [8, 18, 6, 30],
121 "uvWest": [2, 18, 0, 30],
122 "uvUp": [2, 18, 4, 16],
123 "uvDown": [4, 16, 6, 18]
124 }
125 ]
126 },
127 {
128 "part": "right_leg",
129 "id": "right_leg",
130 "invertAxis": "xy",
131 "translate": [-2, -12, -0.1],
132 "boxes": [
133 {
134 "coordinates": [1, 0, -1, 2, 12, 2],
135 "uvNorth": [2, 18, 4, 30],
136 "uvEast": [0, 18, 2, 30],
137 "uvSouth": [6, 18, 8, 30],
138 "uvWest": [4, 18, 6, 30],
139 "uvUp": [4, 18, 2, 16],
140 "uvDown": [6, 16, 4, 18]
141 }
142 ]
143 }
144 ]
145} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/trapped_chest.jem b/assets/minecraft/optifine/cem/trapped_chest.jem
new file mode 100755
index 00000000..1527da0a
--- /dev/null
+++ b/assets/minecraft/optifine/cem/trapped_chest.jem
@@ -0,0 +1,134 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "trapped_chest.png",
4 "textureSize": [64, 64],
5 "models": [
6 {
7 "part": "base",
8 "id": "base",
9 "invertAxis": "xy",
10 "translate": [-8, 0, -8],
11 "rotate": [-180, 0, 0],
12 "submodels": [
13 {
14 "id": "base2",
15 "invertAxis": "xy",
16 "translate": [8, 0, 24],
17 "boxes": [
18 {
19 "coordinates": [-2, -11, -14, -12, 9, 12],
20 "uvNorth": [36, 56, 48, 47],
21 "uvEast": [12, 56, 0, 47],
22 "uvSouth": [24, 56, 12, 47],
23 "uvWest": [36, 56, 24, 47],
24 "uvUp": [24, 44, 12, 32]
25 },
26 {
27 "coordinates": [-16, -11, -16, 16, 11, 16],
28 "uvNorth": [64, 32, 48, 21],
29 "uvEast": [16, 32, 0, 21],
30 "uvSouth": [32, 32, 16, 21],
31 "uvWest": [48, 32, 32, 21],
32 "uvUp": [48, 0, 32, 16],
33 "uvDown": [64, 0, 48, 16]
34 }
35 ],
36 "submodels": [
37 {
38 "id": "anti_base",
39 "invertAxis": "xy",
40 "translate": [0, 0, -16],
41 "rotate": [-180, 0, 0],
42 "submodels": [
43 {
44 "id": "lid2",
45 "invertAxis": "xy",
46 "translate": [0, 9, -1],
47 "rotate": [-180, 0, 0],
48 "boxes": [
49 {
50 "coordinates": [-16, -7, -1, 16, 6, 16],
51 "uvNorth": [48, 22, 64, 16],
52 "uvEast": [16, 22, 0, 16],
53 "uvSouth": [32, 22, 16, 16],
54 "uvWest": [48, 22, 32, 16],
55 "uvUp": [64, 16, 48, 0],
56 "uvDown": [32, 16, 16, 0]
57 },
58 {
59 "coordinates": [-9, -4, 15, 2, 4, 1],
60 "uvNorth": [4, 5, 6, 1],
61 "uvEast": [0, 5, 1, 1],
62 "uvSouth": [1, 5, 3, 1],
63 "uvWest": [3, 5, 4, 1],
64 "uvUp": [5, 1, 3, 0],
65 "uvDown": [3, 0, 1, 1]
66 },
67 {
68 "coordinates": [-2, -5, 1, -12, 4, 12],
69 "uvNorth": [36, 48, 48, 44],
70 "uvEast": [12, 48, 0, 44],
71 "uvSouth": [24, 48, 12, 44],
72 "uvWest": [36, 48, 24, 44],
73 "uvDown": [36, 44, 24, 32]
74 }
75 ]
76 }
77 ]
78 }
79 ]
80 },
81 {
82 "id": "test",
83 "invertAxis": "xy",
84 "translate": [8, 0, 8],
85 "submodels": [
86 {
87 "id": "close",
88 "invertAxis": "xy",
89 "translate": [0, 0, 0]
90 }
91 ]
92 }
93 ],
94 "animations": [
95 {
96 "this.rx": 0
97 },
98 {
99 "lid2.rx": "if(test.rx <= lid.rx, if(lid.rx > -pi/2.5 ,sin(lid.rx*2.5)/3,(lid.rx*2)+(pi/2)) , lid.rx) +pi",
100 "base.rx": "if(test.rx <= lid.rx,0, if(lid.rx > -pi/2.5 ,sin(lid.rx*2.5)/6,0))",
101 "base2.rx": "if(test.rx <= lid.rx,if(lid.rx > -pi/2.5 ,-sin(lid.rx*2.5)/2,0 )/7,0)",
102 "close.visible": "if(test.rx <= lid.rx,1,0) > 0"
103 },
104 {
105 "test.rx": "lid.rx"
106 }
107 ]
108 },
109 {
110 "part": "lid",
111 "id": "lid",
112 "invertAxis": "xy",
113 "translate": [-8, -9, -7],
114 "rotate": [-180, 0, 0],
115 "animations": [
116 {
117 "this.rx": 0
118 }
119 ]
120 },
121 {
122 "part": "knob",
123 "id": "knob",
124 "invertAxis": "xy",
125 "translate": [-8, -8, -8],
126 "rotate": [-180, 0, 0],
127 "animations": [
128 {
129 "this.rx": 0
130 }
131 ]
132 }
133 ]
134} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/trapped_chest.png b/assets/minecraft/optifine/cem/trapped_chest.png
new file mode 100755
index 00000000..6da3b584
--- /dev/null
+++ b/assets/minecraft/optifine/cem/trapped_chest.png
Binary files differ
diff --git a/assets/minecraft/optifine/cem/trapped_chest_large.jem b/assets/minecraft/optifine/cem/trapped_chest_large.jem
new file mode 100755
index 00000000..edf33ae1
--- /dev/null
+++ b/assets/minecraft/optifine/cem/trapped_chest_large.jem
@@ -0,0 +1,161 @@
1{
2 "credit": "Made with Blockbench",
3 "texture": "trapped_chest_large.png",
4 "textureSize": [128, 64],
5 "models": [
6 {
7 "part": "base_left",
8 "id": "base_left",
9 "invertAxis": "xy",
10 "translate": [-16, 0, -8],
11 "rotate": [-180, 0, 0],
12 "submodels": [
13 {
14 "id": "base2",
15 "invertAxis": "xy",
16 "translate": [16, 0, 24],
17 "boxes": [
18 {
19 "coordinates": [-2, -11, -14, -28, 9, 12],
20 "uvNorth": [48, 56, 72, 47],
21 "uvEast": [12, 56, 0, 47],
22 "uvSouth": [36, 56, 12, 47],
23 "uvWest": [48, 56, 36, 47],
24 "uvUp": [60, 44, 36, 32]
25 },
26 {
27 "coordinates": [-32, -11, -16, 32, 11, 16],
28 "uvNorth": [96, 32, 64, 21],
29 "uvEast": [16, 32, 0, 21],
30 "uvSouth": [48, 32, 16, 21],
31 "uvWest": [64, 32, 48, 21],
32 "uvUp": [80, 0, 48, 16],
33 "uvDown": [112, 0, 80, 16]
34 }
35 ],
36 "submodels": [
37 {
38 "id": "anti_base",
39 "invertAxis": "xy",
40 "translate": [0, 0, -16],
41 "rotate": [-180, 0, 0],
42 "submodels": [
43 {
44 "id": "lid_left2",
45 "invertAxis": "xy",
46 "translate": [0, 9, -1],
47 "rotate": [-180, 0, 0],
48 "boxes": [
49 {
50 "coordinates": [-32, -7, -1, 32, 6, 16],
51 "uvNorth": [64, 22, 96, 16],
52 "uvEast": [16, 22, 0, 16],
53 "uvSouth": [48, 22, 16, 16],
54 "uvWest": [64, 22, 48, 16],
55 "uvUp": [112, 16, 80, 0],
56 "uvDown": [48, 16, 16, 0]
57 },
58 {
59 "coordinates": [-17, -4, 15, 2, 4, 1],
60 "uvNorth": [4, 5, 6, 1],
61 "uvEast": [0, 5, 1, 1],
62 "uvSouth": [1, 5, 3, 1],
63 "uvWest": [3, 5, 4, 1],
64 "uvUp": [5, 1, 3, 0],
65 "uvDown": [3, 0, 1, 1]
66 },
67 {
68 "coordinates": [-2, -5, 1, -28, 4, 12],
69 "uvNorth": [48, 48, 72, 44],
70 "uvEast": [12, 48, 0, 44],
71 "uvSouth": [36, 48, 12, 44],
72 "uvWest": [48, 48, 36, 44],
73 "uvDown": [36, 44, 12, 32]
74 }
75 ]
76 }
77 ]
78 }
79 ]
80 },
81 {
82 "id": "close",
83 "invertAxis": "xy",
84 "translate": [16, 0, 8]
85 }
86 ],
87 "animations": [
88 {
89 "this.rx": 0,
90 "this.ry": 0
91 },
92 {
93 "lid_left2.rx": "if(close.visible, if(lid_left.rx > -pi/2.5 ,sin(lid_left.rx*2.5)/3,(lid_left.rx*2)+(pi/2)) , lid_left.rx) +pi",
94 "base_left.rx": "if(close.visible,0, if(lid_left.rx > -pi/2.5 ,sin(lid_left.rx*2.5)/6,0))",
95 "base2.rx": "if(close.visible,if(lid_left.rx > -pi/2.5 ,-sin(lid_left.rx*2.5)/2,0 )/7,0)",
96 "close.visible": "if(lid_left.rx == 0,0,lid_left.rx < -1.5, 1,if(close.visible,1,0)) > 0"
97 }
98 ]
99 },
100 {
101 "part": "base_right",
102 "id": "base_right",
103 "invertAxis": "xy",
104 "translate": [0, 0, -8],
105 "rotate": [-180, 0, 0],
106 "animations": [
107 {
108 "this.rx": 0
109 }
110 ]
111 },
112 {
113 "part": "lid_left",
114 "id": "lid_left",
115 "invertAxis": "xy",
116 "translate": [-16, -9, -7],
117 "rotate": [-180, 0, 0],
118 "animations": [
119 {
120 "this.rx": 0
121 }
122 ]
123 },
124 {
125 "part": "lid_right",
126 "id": "lid_right",
127 "invertAxis": "xy",
128 "translate": [0, -9, -7],
129 "rotate": [-180, 0, 0],
130 "animations": [
131 {
132 "this.rx": 0
133 }
134 ]
135 },
136 {
137 "part": "knob_left",
138 "id": "knob_left",
139 "invertAxis": "xy",
140 "translate": [-16, -8, -8],
141 "rotate": [-180, 0, 0],
142 "animations": [
143 {
144 "this.rx": 0
145 }
146 ]
147 },
148 {
149 "part": "knob_right",
150 "id": "knob_right",
151 "invertAxis": "xy",
152 "translate": [0, -8, -8],
153 "rotate": [-180, 0, 0],
154 "animations": [
155 {
156 "this.rx": 0
157 }
158 ]
159 }
160 ]
161} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/trapped_chest_large.png b/assets/minecraft/optifine/cem/trapped_chest_large.png
new file mode 100755
index 00000000..8849a01e
--- /dev/null
+++ b/assets/minecraft/optifine/cem/trapped_chest_large.png
Binary files differ
diff --git a/assets/minecraft/optifine/cem/tropical_fish_a.jem b/assets/minecraft/optifine/cem/tropical_fish_a.jem
new file mode 100755
index 00000000..6fc3fbca
--- /dev/null
+++ b/assets/minecraft/optifine/cem/tropical_fish_a.jem
@@ -0,0 +1,133 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [32, 32],
4 "models": [
5 {
6 "part": "body",
7 "id": "body",
8 "invertAxis": "xy",
9 "translate": [0, -1.5, 0],
10 "submodels": [
11 {
12 "id": "right_fin",
13 "invertAxis": "xy",
14 "translate": [1, 0, 0],
15 "rotate": [0, -45, 0]
16 },
17 {
18 "id": "left_fin",
19 "invertAxis": "xy",
20 "translate": [-1, 0, 0],
21 "rotate": [0, 45, 0]
22 },
23 {
24 "id": "fish",
25 "invertAxis": "xy",
26 "translate": [0, 1.5, -1.5],
27 "submodels": [
28 {
29 "id": "tail2",
30 "invertAxis": "xy",
31 "translate": [0, 0, 4.5],
32 "boxes": [
33 {"coordinates": [0, -1.5, 0, 0, 3, 4], "textureOffset": [24, -4]}
34 ]
35 },
36 {
37 "id": "fin_top2",
38 "invertAxis": "xy",
39 "translate": [0, 1.5, -1.5],
40 "boxes": [
41 {"coordinates": [0, 0, 0, 0, 4, 6], "textureOffset": [10, -6]}
42 ]
43 },
44 {
45 "id": "body2",
46 "invertAxis": "xy",
47 "translate": [0, 0, 1.5],
48 "boxes": [
49 {"coordinates": [-1, -1.5, -3, 2, 3, 6], "textureOffset": [0, 0]}
50 ],
51 "submodels": [
52 {
53 "id": "right_fin2",
54 "invertAxis": "xy",
55 "translate": [1, -1.5, 0],
56 "rotate": [0, -45, 0],
57 "boxes": [
58 {"coordinates": [0, 0, 0, 2, 2, 0], "textureOffset": [2, 16]}
59 ]
60 },
61 {
62 "id": "left_fin2",
63 "invertAxis": "xy",
64 "translate": [-1, -1.5, 0],
65 "rotate": [0, 45, 0],
66 "boxes": [
67 {"coordinates": [-2, 0, 0, 2, 2, 0], "textureOffset": [2, 12]}
68 ]
69 }
70 ]
71 }
72 ]
73 }
74 ],
75 "animations": [
76 {
77 "fish.rx": "-body.rx",
78 "fish.ry": "-body.ry",
79 "fish.rz": "-body.rz"
80 },
81 {
82 "body2.rx": "body.rx",
83 "body2.ry": "body.ry",
84 "body2.rz": "body.rz",
85 "tail2.rx": "tail.rx",
86 "tail2.ry": "tail.ry",
87 "tail2.rz": "tail.rz",
88 "fin_top2.rx": "fin_top.rx * limb_speed*2",
89 "fin_top2.ry": "fin_top.ry* limb_speed*2",
90 "fin_top2.rz": "fin_top.rz* limb_speed*2",
91 "right_fin2.rx": "right_fin.rx",
92 "right_fin2.ry": "right_fin.ry",
93 "right_fin2.rz": "right_fin.rz",
94 "left_fin2.rx": "left_fin.rx",
95 "left_fin2.ry": "left_fin.ry",
96 "left_fin2.rz": "left_fin.rz"
97 },
98 {
99 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
100 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
101 "var.test": "print(1,5,var.old_pos_y-pos_y)",
102 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
103 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
104 "fish.rx": "var.pitch"
105 }
106 ]
107 },
108 {
109 "part": "fin_top",
110 "id": "fin_top",
111 "invertAxis": "xy",
112 "translate": [0, -3, 3]
113 },
114 {
115 "part": "tail",
116 "id": "tail",
117 "invertAxis": "xy",
118 "translate": [0, -1.5, -3]
119 },
120 {
121 "part": "fin_left",
122 "id": "fin_left",
123 "invertAxis": "xy",
124 "translate": [0, 0, 0]
125 },
126 {
127 "part": "fin_right",
128 "id": "fin_right",
129 "invertAxis": "xy",
130 "translate": [0, 0, 0]
131 }
132 ]
133} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/tropical_fish_b.jem b/assets/minecraft/optifine/cem/tropical_fish_b.jem
new file mode 100755
index 00000000..d57ff650
--- /dev/null
+++ b/assets/minecraft/optifine/cem/tropical_fish_b.jem
@@ -0,0 +1,150 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [32, 32],
4 "models": [
5 {
6 "part": "body",
7 "id": "body",
8 "invertAxis": "xy",
9 "translate": [0, -3, -3],
10 "submodels": [
11 {
12 "id": "right_fin",
13 "invertAxis": "xy",
14 "translate": [1, 0, 3],
15 "rotate": [0, -45, 0]
16 },
17 {
18 "id": "left_fin",
19 "invertAxis": "xy",
20 "translate": [-1, 0, 3],
21 "rotate": [0, 45, 0]
22 },
23 {
24 "id": "fish",
25 "invertAxis": "xy",
26 "translate": [0, 3, 2],
27 "submodels": [
28 {
29 "id": "tail2",
30 "invertAxis": "xy",
31 "translate": [0, 0, 4],
32 "boxes": [
33 {"coordinates": [0, -3, 0, 0, 6, 5], "textureOffset": [21, 16]}
34 ]
35 },
36 {
37 "id": "fin_bottom2",
38 "invertAxis": "xy",
39 "translate": [0, -3, -2],
40 "boxes": [
41 {"coordinates": [0, -4, 0, 0, 4, 6], "textureOffset": [20, 21]}
42 ]
43 },
44 {
45 "id": "fin_top2",
46 "invertAxis": "xy",
47 "translate": [0, 3, -2],
48 "boxes": [
49 {"coordinates": [0, 0, 0, 0, 4, 6], "textureOffset": [20, 11]}
50 ]
51 },
52 {
53 "id": "body2",
54 "invertAxis": "xy",
55 "translate": [0, 0, 1],
56 "boxes": [
57 {"coordinates": [-1, -3, -3, 2, 6, 6], "textureOffset": [0, 20]}
58 ],
59 "submodels": [
60 {
61 "id": "right_fin2",
62 "invertAxis": "xy",
63 "translate": [1, -3, 0],
64 "rotate": [0, -45, 0],
65 "boxes": [
66 {"coordinates": [0, 0, 0, 2, 2, 0], "textureOffset": [2, 16]}
67 ]
68 },
69 {
70 "id": "left_fin2",
71 "invertAxis": "xy",
72 "translate": [-1, -3, 0],
73 "rotate": [0, 45, 0],
74 "boxes": [
75 {"coordinates": [-2, 0, 0, 2, 2, 0], "textureOffset": [2, 12]}
76 ]
77 }
78 ]
79 }
80 ]
81 }
82 ],
83 "animations": [
84 {
85 "fish.rx": "-body.rx",
86 "fish.ry": "-body.ry",
87 "fish.rz": "-body.rz"
88 },
89 {
90 "body2.rx": "body.rx",
91 "body2.ry": "body.ry",
92 "body2.rz": "body.rz",
93 "tail2.rx": "tail.rx",
94 "tail2.ry": "tail.ry",
95 "tail2.rz": "tail.rz",
96 "fin_top2.rx": "fin_top.rx * limb_speed*2",
97 "fin_top2.ry": "fin_top.ry* limb_speed*2",
98 "fin_top2.rz": "fin_top.rz* limb_speed*2",
99 "fin_bottom2.rx": "fin_bottom.rx * limb_speed*2",
100 "fin_bottom2.ry": "fin_bottom.ry* limb_speed*2",
101 "fin_bottom2.rz": "fin_bottom.rz* limb_speed*2",
102 "right_fin2.rx": "right_fin.rx",
103 "right_fin2.ry": "right_fin.ry",
104 "right_fin2.rz": "right_fin.rz",
105 "left_fin2.rx": "left_fin.rx",
106 "left_fin2.ry": "left_fin.ry",
107 "left_fin2.rz": "left_fin.rz"
108 },
109 {
110 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
111 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
112 "var.test": "print(1,5,var.old_pos_y-pos_y)",
113 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
114 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
115 "fish.rx": "var.pitch"
116 }
117 ]
118 },
119 {
120 "part": "fin_top",
121 "id": "fin_top",
122 "invertAxis": "xy",
123 "translate": [0, -6, 0]
124 },
125 {
126 "part": "fin_bottom",
127 "id": "fin_bottom",
128 "invertAxis": "xy",
129 "translate": [0, 0, 0]
130 },
131 {
132 "part": "tail",
133 "id": "tail",
134 "invertAxis": "xy",
135 "translate": [0, -3, -6]
136 },
137 {
138 "part": "fin_left",
139 "id": "fin_left",
140 "invertAxis": "xy",
141 "translate": [0, 0, 0]
142 },
143 {
144 "part": "fin_right",
145 "id": "fin_right",
146 "invertAxis": "xy",
147 "translate": [0, 0, 0]
148 }
149 ]
150} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/tropical_fish_pattern_a.jem b/assets/minecraft/optifine/cem/tropical_fish_pattern_a.jem
new file mode 100755
index 00000000..0bab25be
--- /dev/null
+++ b/assets/minecraft/optifine/cem/tropical_fish_pattern_a.jem
@@ -0,0 +1,133 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [32, 32],
4 "models": [
5 {
6 "part": "body",
7 "id": "body",
8 "invertAxis": "xy",
9 "translate": [0, -1.5, 0],
10 "submodels": [
11 {
12 "id": "right_fin",
13 "invertAxis": "xy",
14 "translate": [1, 0, 0],
15 "rotate": [0, -45, 0]
16 },
17 {
18 "id": "left_fin",
19 "invertAxis": "xy",
20 "translate": [-1, 0, 0],
21 "rotate": [0, 45, 0]
22 },
23 {
24 "id": "fish",
25 "invertAxis": "xy",
26 "translate": [0, 1.5, -1.5],
27 "submodels": [
28 {
29 "id": "tail2",
30 "invertAxis": "xy",
31 "translate": [0, 0, 4.5],
32 "boxes": [
33 {"coordinates": [0, -1.5, 0, 0, 3, 4], "textureOffset": [24, -4], "sizeAdd": 0.04}
34 ]
35 },
36 {
37 "id": "fin_top2",
38 "invertAxis": "xy",
39 "translate": [0, 1.5, -1.5],
40 "boxes": [
41 {"coordinates": [0, 0, 0, 0, 4, 6], "textureOffset": [10, -6], "sizeAdd": 0.04}
42 ]
43 },
44 {
45 "id": "body2",
46 "invertAxis": "xy",
47 "translate": [0, 0, 1.5],
48 "boxes": [
49 {"coordinates": [-1, -1.5, -3, 2, 3, 6], "textureOffset": [0, 0], "sizeAdd": 0.04}
50 ],
51 "submodels": [
52 {
53 "id": "right_fin2",
54 "invertAxis": "xy",
55 "translate": [1, -1.5, 0],
56 "rotate": [0, -45, 0],
57 "boxes": [
58 {"coordinates": [0, 0, 0, 2, 2, 0], "textureOffset": [2, 16], "sizeAdd": 0.04}
59 ]
60 },
61 {
62 "id": "left_fin2",
63 "invertAxis": "xy",
64 "translate": [-1, -1.5, 0],
65 "rotate": [0, 45, 0],
66 "boxes": [
67 {"coordinates": [-2, 0, 0, 2, 2, 0], "textureOffset": [2, 12], "sizeAdd": 0.04}
68 ]
69 }
70 ]
71 }
72 ]
73 }
74 ],
75 "animations": [
76 {
77 "fish.rx": "-body.rx",
78 "fish.ry": "-body.ry",
79 "fish.rz": "-body.rz"
80 },
81 {
82 "body2.rx": "body.rx",
83 "body2.ry": "body.ry",
84 "body2.rz": "body.rz",
85 "tail2.rx": "tail.rx",
86 "tail2.ry": "tail.ry",
87 "tail2.rz": "tail.rz",
88 "fin_top2.rx": "fin_top.rx * limb_speed*2",
89 "fin_top2.ry": "fin_top.ry* limb_speed*2",
90 "fin_top2.rz": "fin_top.rz* limb_speed*2",
91 "right_fin2.rx": "right_fin.rx",
92 "right_fin2.ry": "right_fin.ry",
93 "right_fin2.rz": "right_fin.rz",
94 "left_fin2.rx": "left_fin.rx",
95 "left_fin2.ry": "left_fin.ry",
96 "left_fin2.rz": "left_fin.rz"
97 },
98 {
99 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
100 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
101 "var.test": "print(1,5,var.old_pos_y-pos_y)",
102 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
103 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
104 "fish.rx": "var.pitch"
105 }
106 ]
107 },
108 {
109 "part": "fin_top",
110 "id": "fin_top",
111 "invertAxis": "xy",
112 "translate": [0, -3, 3]
113 },
114 {
115 "part": "tail",
116 "id": "tail",
117 "invertAxis": "xy",
118 "translate": [0, -1.5, -3]
119 },
120 {
121 "part": "fin_left",
122 "id": "fin_left",
123 "invertAxis": "xy",
124 "translate": [0, 0, 0]
125 },
126 {
127 "part": "fin_right",
128 "id": "fin_right",
129 "invertAxis": "xy",
130 "translate": [0, 0, 0]
131 }
132 ]
133} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/tropical_fish_pattern_b.jem b/assets/minecraft/optifine/cem/tropical_fish_pattern_b.jem
new file mode 100755
index 00000000..83318fa4
--- /dev/null
+++ b/assets/minecraft/optifine/cem/tropical_fish_pattern_b.jem
@@ -0,0 +1,150 @@
1{
2 "credit": "Made with Blockbench",
3 "textureSize": [32, 32],
4 "models": [
5 {
6 "part": "body",
7 "id": "body",
8 "invertAxis": "xy",
9 "translate": [0, -3, -3],
10 "submodels": [
11 {
12 "id": "right_fin",
13 "invertAxis": "xy",
14 "translate": [1, 0, 3],
15 "rotate": [0, -45, 0]
16 },
17 {
18 "id": "left_fin",
19 "invertAxis": "xy",
20 "translate": [-1, 0, 3],
21 "rotate": [0, 45, 0]
22 },
23 {
24 "id": "fish",
25 "invertAxis": "xy",
26 "translate": [0, 3, 2],
27 "submodels": [
28 {
29 "id": "tail2",
30 "invertAxis": "xy",
31 "translate": [0, 0, 4],
32 "boxes": [
33 {"coordinates": [0, -3, 0, 0, 6, 5], "textureOffset": [21, 16], "sizeAdd": 0.04}
34 ]
35 },
36 {
37 "id": "fin_bottom2",
38 "invertAxis": "xy",
39 "translate": [0, -3, -2],
40 "boxes": [
41 {"coordinates": [0, -4, 0, 0, 4, 6], "textureOffset": [20, 21], "sizeAdd": 0.04}
42 ]
43 },
44 {
45 "id": "fin_top2",
46 "invertAxis": "xy",
47 "translate": [0, 3, -2],
48 "boxes": [
49 {"coordinates": [0, 0, 0, 0, 4, 6], "textureOffset": [20, 11], "sizeAdd": 0.04}
50 ]
51 },
52 {
53 "id": "body2",
54 "invertAxis": "xy",
55 "translate": [0, 0, 1],
56 "boxes": [
57 {"coordinates": [-1, -3, -3, 2, 6, 6], "textureOffset": [0, 20], "sizeAdd": 0.04}
58 ],
59 "submodels": [
60 {
61 "id": "right_fin2",
62 "invertAxis": "xy",
63 "translate": [1, -3, 0],
64 "rotate": [0, -45, 0],
65 "boxes": [
66 {"coordinates": [0, 0, 0, 2, 2, 0], "textureOffset": [2, 16], "sizeAdd": 0.04}
67 ]
68 },
69 {
70 "id": "left_fin2",
71 "invertAxis": "xy",
72 "translate": [-1, -3, 0],
73 "rotate": [0, 45, 0],
74 "boxes": [
75 {"coordinates": [-2, 0, 0, 2, 2, 0], "textureOffset": [2, 12], "sizeAdd": 0.04}
76 ]
77 }
78 ]
79 }
80 ]
81 }
82 ],
83 "animations": [
84 {
85 "fish.rx": "-body.rx",
86 "fish.ry": "-body.ry",
87 "fish.rz": "-body.rz"
88 },
89 {
90 "body2.rx": "body.rx",
91 "body2.ry": "body.ry",
92 "body2.rz": "body.rz",
93 "tail2.rx": "tail.rx",
94 "tail2.ry": "tail.ry",
95 "tail2.rz": "tail.rz",
96 "fin_top2.rx": "fin_top.rx * limb_speed*2",
97 "fin_top2.ry": "fin_top.ry* limb_speed*2",
98 "fin_top2.rz": "fin_top.rz* limb_speed*2",
99 "fin_bottom2.rx": "fin_bottom.rx * limb_speed*2",
100 "fin_bottom2.ry": "fin_bottom.ry* limb_speed*2",
101 "fin_bottom2.rz": "fin_bottom.rz* limb_speed*2",
102 "right_fin2.rx": "right_fin.rx",
103 "right_fin2.ry": "right_fin.ry",
104 "right_fin2.rz": "right_fin.rz",
105 "left_fin2.rx": "left_fin.rx",
106 "left_fin2.ry": "left_fin.ry",
107 "left_fin2.rz": "left_fin.rz"
108 },
109 {
110 "var.counter": "if(var.counter > 0.1, 0 ,var.counter + 1 * frame_time)",
111 "var.old_pos_y": "if(var.counter > 0.09,pos_y,var.old_pos_y)",
112 "var.test": "print(1,5,var.old_pos_y-pos_y)",
113 "var.turn_speed": "0.03 * 1 + abs(pos_y - var.old_pos_y)/5",
114 "var.pitch": "clamp(if(pos_y - var.old_pos_y == 0, if(equals(var.pitch,0,0.05), 0 ,if(var.pitch < 0,var.pitch + var.turn_speed,var.pitch - var.turn_speed )),if(pos_y < var.old_pos_y,var.pitch + var.turn_speed,var.pitch - var.turn_speed ) ),-torad(80),torad(80))",
115 "fish.rx": "var.pitch"
116 }
117 ]
118 },
119 {
120 "part": "fin_top",
121 "id": "fin_top",
122 "invertAxis": "xy",
123 "translate": [0, -6, 0]
124 },
125 {
126 "part": "fin_bottom",
127 "id": "fin_bottom",
128 "invertAxis": "xy",
129 "translate": [0, 0, 0]
130 },
131 {
132 "part": "tail",
133 "id": "tail",
134 "invertAxis": "xy",
135 "translate": [0, -3, -6]
136 },
137 {
138 "part": "fin_left",
139 "id": "fin_left",
140 "invertAxis": "xy",
141 "translate": [0, 0, 0]
142 },
143 {
144 "part": "fin_right",
145 "id": "fin_right",
146 "invertAxis": "xy",
147 "translate": [0, 0, 0]
148 }
149 ]
150} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/wither_skeleton.jem b/assets/minecraft/optifine/cem/wither_skeleton.jem
new file mode 100755
index 00000000..604a4ea9
--- /dev/null
+++ b/assets/minecraft/optifine/cem/wither_skeleton.jem
@@ -0,0 +1,145 @@
1{
2 "textureSize": [64, 32],
3 "models": [
4 {
5 "part": "head",
6 "id": "head",
7 "invertAxis": "xy",
8 "translate": [0, -24, 0],
9 "boxes": [
10 {
11 "coordinates": [-4, 26, -4, 8, 6, 8],
12 "uvNorth": [8, 8, 16, 14],
13 "uvEast": [0, 8, 8, 14],
14 "uvSouth": [24, 8, 32, 14],
15 "uvWest": [16, 8, 24, 14],
16 "uvUp": [16, 8, 8, 0],
17 "uvDown": [8, 0, 0, 8]
18 }
19 ],
20 "submodels": [
21 {
22 "id": "jaw",
23 "invertAxis": "xy",
24 "translate": [0, 26, 2],
25 "boxes": [
26 {
27 "coordinates": [-4.01, -2, -6, 8, 2, 8],
28 "uvNorth": [8, 14, 16, 16],
29 "uvEast": [0, 14, 8, 16],
30 "uvSouth": [24, 14, 32, 16],
31 "uvWest": [16, 14, 24, 16],
32 "uvUp": [32, 8, 24, 0],
33 "uvDown": [24, 0, 16, 8]
34 }
35 ]
36 }
37 ]
38 },
39 {
40 "part": "headwear",
41 "id": "headwear",
42 "invertAxis": "xy",
43 "translate": [0, -24, 0],
44 "boxes": [
45 {
46 "coordinates": [-4, 24, -4, 8, 8, 8],
47 "uvNorth": [40, 8, 48, 16],
48 "uvEast": [32, 8, 40, 16],
49 "uvSouth": [56, 8, 64, 16],
50 "uvWest": [48, 8, 56, 16],
51 "uvUp": [48, 8, 40, 0],
52 "uvDown": [56, 0, 48, 8],
53 "sizeAdd": 0.5
54 }
55 ]
56 },
57 {
58 "part": "body",
59 "id": "body",
60 "invertAxis": "xy",
61 "translate": [0, -24, 0],
62 "boxes": [
63 {
64 "coordinates": [-4, 12, -2, 8, 12, 4],
65 "uvNorth": [20, 20, 28, 32],
66 "uvEast": [16, 20, 20, 32],
67 "uvSouth": [32, 20, 40, 32],
68 "uvWest": [28, 20, 32, 32],
69 "uvUp": [28, 20, 20, 16],
70 "uvDown": [36, 16, 28, 20]
71 }
72 ]
73 },
74 {
75 "part": "left_arm",
76 "id": "left_arm",
77 "invertAxis": "xy",
78 "mirrorTexture": "u",
79 "translate": [5, -22, 0],
80 "boxes": [
81 {
82 "coordinates": [-6, 12, -1, 2, 12, 2],
83 "uvNorth": [44, 18, 42, 30],
84 "uvEast": [46, 18, 44, 30],
85 "uvSouth": [48, 18, 46, 30],
86 "uvWest": [42, 18, 40, 30],
87 "uvUp": [42, 18, 44, 16],
88 "uvDown": [44, 16, 46, 18]
89 }
90 ]
91 },
92 {
93 "part": "right_arm",
94 "id": "right_arm",
95 "invertAxis": "xy",
96 "translate": [-5, -22, 0],
97 "boxes": [
98 {
99 "coordinates": [4, 12, -1, 2, 12, 2],
100 "uvNorth": [42, 18, 44, 30],
101 "uvEast": [40, 18, 42, 30],
102 "uvSouth": [46, 18, 48, 30],
103 "uvWest": [44, 18, 46, 30],
104 "uvUp": [44, 18, 42, 16],
105 "uvDown": [46, 16, 44, 18]
106 }
107 ]
108 },
109 {
110 "part": "left_leg",
111 "id": "left_leg",
112 "invertAxis": "xy",
113 "mirrorTexture": "u",
114 "translate": [2, -12, -0.1],
115 "boxes": [
116 {
117 "coordinates": [-3, 0, -1, 2, 12, 2],
118 "uvNorth": [4, 18, 2, 30],
119 "uvEast": [6, 18, 4, 30],
120 "uvSouth": [8, 18, 6, 30],
121 "uvWest": [2, 18, 0, 30],
122 "uvUp": [2, 18, 4, 16],
123 "uvDown": [4, 16, 6, 18]
124 }
125 ]
126 },
127 {
128 "part": "right_leg",
129 "id": "right_leg",
130 "invertAxis": "xy",
131 "translate": [-2, -12, -0.1],
132 "boxes": [
133 {
134 "coordinates": [1, 0, -1, 2, 12, 2],
135 "uvNorth": [2, 18, 4, 30],
136 "uvEast": [0, 18, 2, 30],
137 "uvSouth": [6, 18, 8, 30],
138 "uvWest": [4, 18, 6, 30],
139 "uvUp": [4, 18, 2, 16],
140 "uvDown": [6, 16, 4, 18]
141 }
142 ]
143 }
144 ]
145} \ No newline at end of file
diff --git a/assets/minecraft/optifine/cem/wolf_collar.jem b/assets/minecraft/optifine/cem/wolf_collar.jem
new file mode 100755
index 00000000..98339361
--- /dev/null
+++ b/assets/minecraft/optifine/cem/wolf_collar.jem
@@ -0,0 +1,106 @@
1{
2 "textureSize": [64, 32],
3 "models": [
4 {
5 "part": "head",
6 "id": "head",
7 "invertAxis": "xy",
8 "translate": [-1, -10.5, 7],
9 "boxes": [
10 {"coordinates": [-3, 7.5, -9, 6, 6, 4], "textureOffset": [0, 0], "sizeAdd": 0.1},
11 {"coordinates": [-3, 13.5, -7, 2, 2, 1], "textureOffset": [16, 14], "sizeAdd": 0.1},
12 {"coordinates": [1, 13.5, -7, 2, 2, 1], "textureOffset": [16, 14], "sizeAdd": 0.1},
13 {"coordinates": [-1.5, 7.52, -12, 3, 3, 4], "textureOffset": [0, 10], "sizeAdd": 0.1}
14 ]
15 },
16 {
17 "part": "body",
18 "id": "body",
19 "invertAxis": "xy",
20 "translate": [0, -10, -2],
21 "submodels": [
22 {
23 "id": "body_rotation",
24 "invertAxis": "xy",
25 "translate": [0, 10, 2],
26 "rotate": [-90, 0, 0],
27 "boxes": [
28 {"coordinates": [-3, -7, -3, 6, 9, 6], "textureOffset": [18, 14], "sizeAdd": 0.1}
29 ]
30 }
31 ],
32 "animations": [
33 {
34 "body_rotation.rx": 0
35 }
36 ]
37 },
38 {
39 "part": "mane",
40 "id": "mane",
41 "invertAxis": "xy",
42 "translate": [-1, -10, -2],
43 "submodels": [
44 {
45 "id": "mane_rotation",
46 "invertAxis": "xy",
47 "translate": [0, 7.5, -0.5],
48 "rotate": [-90, 0, 0],
49 "boxes": [
50 {"coordinates": [-4, -0.5, -0.5, 8, 6, 7], "textureOffset": [21, 0], "sizeAdd": 0.1}
51 ]
52 }
53 ],
54 "animations": [
55 {
56 "mane_rotation.rx": 0
57 }
58 ]
59 },
60 {
61 "part": "leg1",
62 "id": "leg1",
63 "invertAxis": "xy",
64 "translate": [-2.5, -8, -7],
65 "boxes": [
66 {"coordinates": [0.5, 0, 6, 2, 8, 2], "textureOffset": [0, 18], "sizeAdd": 0.1}
67 ]
68 },
69 {
70 "part": "leg2",
71 "id": "leg2",
72 "invertAxis": "xy",
73 "translate": [0.5, -8, -7],
74 "boxes": [
75 {"coordinates": [-2.5, 0, 6, 2, 8, 2], "textureOffset": [0, 18], "sizeAdd": 0.1}
76 ]
77 },
78 {
79 "part": "leg3",
80 "id": "leg3",
81 "invertAxis": "xy",
82 "translate": [-2.5, -8, 4],
83 "boxes": [
84 {"coordinates": [0.5, 0, -5, 2, 8, 2], "textureOffset": [0, 18], "sizeAdd": 0.1}
85 ]
86 },
87 {
88 "part": "leg4",
89 "id": "leg4",
90 "invertAxis": "xy",
91 "translate": [0.5, -8, 4],
92 "boxes": [
93 {"coordinates": [-2.5, 0, -5, 2, 8, 2], "textureOffset": [0, 18], "sizeAdd": 0.1}
94 ]
95 },
96 {
97 "part": "tail",
98 "id": "tail",
99 "invertAxis": "xy",
100 "translate": [-1, -12, -10],
101 "boxes": [
102 {"coordinates": [-1, 4, 9, 2, 8, 2], "textureOffset": [9, 18], "sizeAdd": 0.1}
103 ]
104 }
105 ]
106} \ No newline at end of file