@@ -201,14 +201,20 @@ public RegsiterResult getSkinFromSkinJson(ResourceManager resMan, DogTextureMana
201201 } else {
202202 text_rl = Util.getResource("textures/entity/dog/custom/" + id + ".png");
203203 }
204+
204205 DogSkin skin;
205- if (use_model == null || use_model.equals("default") || use_model.equals("")) {
206+ final boolean use_default_model =
207+ use_model == null || use_model.equals("default") || use_model.equals("");
208+ if (!use_default_model) {
209+ skin = new DogSkin(text_rl, true).setName(name);
210+ prep.dogSkinWithCustomModel.add(Pair.of(skin, use_model));
211+ } else {
206212 skin = new DogSkin(text_rl).setName(name);
207- } else if (use_model.equals("variant")) {
208- var dogModel = DogModelRegistry.getDogModelHolder(use_model);
209- skin = (dogModel == null) ?
210- new DogSkin(text_rl).setName(name)
211- : new DogSkin(text_rl, dogModel).setName(name);
213+ }
214+
215+ final boolean is_legacy_variant_model =
216+ "variant".equals(use_model);
217+ if (is_legacy_variant_model){
212218 var tailOptional = skinObject.get("tail_id");
213219 if (tailOptional != null) {
214220 skin.setTail(tailOptional.getAsByte());
@@ -217,10 +223,6 @@ public RegsiterResult getSkinFromSkinJson(ResourceManager resMan, DogTextureMana
217223 if (earOptional != null) {
218224 skin.setEar(earOptional.getAsByte());
219225 }
220- } else {
221- var dogModel = DogModelRegistry.getDogModelHolder(use_model);
222- if (dogModel == null) skin = new DogSkin(text_rl).setName(name);
223- else skin = new DogSkin(text_rl, dogModel).setName(name);
224226 }
225227
226228 readSkinExtraInfo(skin, skinObject);
@@ -288,10 +290,28 @@ protected void apply(DogTextureManager.DogSkinLoadResult loadResult, ResourceMan
288290 var skin_list = new ArrayList<DogSkin>();
289291
290292 skin_list.add(DogSkin.CLASSICAL);
293+
294+ //Model resolution
295+ for (var entry : loadResult.dogSkinWithCustomModel) {
296+ var skin = entry.getLeft();
297+ var model_id = entry.getRight();
298+ var model = DogModelRegistry.getDogModelHolder(model_id);
299+ if (model != null) {
300+ skin.setCustomModel(model);
301+ } else {
302+ DogTextureManager.LOGGER.warn(
303+ "Skin [ {} ] refers to the missing model: [ {} ]",
304+ skin.getPath().getPath(), model_id
305+ );
306+ }
307+ }
291308
292309 for (var entry : loadResult.dogSkinsAndHash) {
293310 var skin = entry.getLeft();
294311 var hash = entry.getRight();
312+ if (skin.useCustomModel() && skin.getCustomModel() == null) {
313+ continue;
314+ }
295315 if (isDogSkinBlacklisted(skin)) {
296316 ++skipping_cnt;
297317 continue;
@@ -348,10 +368,12 @@ public String getName() {
348368 protected static class DogSkinLoadResult {
349369
350370 public final List<Pair<DogSkin, String>> dogSkinsAndHash;
371+ public final List<Pair<DogSkin, String>> dogSkinWithCustomModel;
351372 private final Set<String> registeredHash;
352373
353374 public DogSkinLoadResult() {
354375 this.dogSkinsAndHash = new ArrayList<>();
376+ this.dogSkinWithCustomModel = new ArrayList<>();
355377 this.registeredHash = new HashSet<>();
356378 }
357379
0 commit comments