Villager skinning

This commit is contained in:
Sollace 2022-12-12 15:08:49 +00:00
parent d85ebc08f1
commit 7ed780ed70
2 changed files with 30 additions and 5 deletions

View file

@ -26,7 +26,7 @@ public class VariatedTextureSupplier implements SimpleSynchronousResourceReloadL
return ID;
}
private SkinList get(Identifier id) {
public SkinList get(Identifier id) {
return entries.computeIfAbsent(id, SkinList::new);
}
@ -38,8 +38,9 @@ public class VariatedTextureSupplier implements SimpleSynchronousResourceReloadL
return get(poolId, entity.getUuid());
}
private static class SkinList {
public static final class SkinList {
private final List<Identifier> textures = new ArrayList<>();
private final Map<String, List<Identifier>> names = new HashMap<>();
private final Identifier id;
@ -56,6 +57,20 @@ public class VariatedTextureSupplier implements SimpleSynchronousResourceReloadL
return Optional.ofNullable(textures.get(MathUtil.mod(uuid.hashCode(), textures.size())));
}
public Optional<Identifier> getByName(String name, UUID uuid) {
List<Identifier> options = names.computeIfAbsent(name.toLowerCase(Locale.ROOT).replace(' ', '_') + ".png", id -> {
return textures.stream().filter(texture -> {
return texture.getPath().endsWith(id);
}).toList();
});
if (options.isEmpty()) {
return Optional.empty();
}
return Optional.ofNullable(options.get(MathUtil.mod(uuid.hashCode(), options.size())));
}
public void reloadAll(ResourceManager resourceManager) {
textures.clear();
textures.addAll(resourceManager.findResources(id.getPath(), path -> path.getPath().endsWith(".png")).keySet());

View file

@ -9,11 +9,11 @@ import net.minecraft.village.VillagerDataContainer;
import net.minecraft.village.VillagerProfession;
import net.minecraft.village.VillagerType;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.pony.PonyManager;
import com.minelittlepony.util.ResourceUtil;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.*;
/**
* Cached pool of villager textures.
@ -51,6 +51,16 @@ public class PonyTextures<T extends LivingEntity & VillagerDataContainer> implem
return entity.isBaby() ? egg2 : egg;
}
if (entity.hasCustomName()) {
Optional<Identifier> override = MineLittlePony.getInstance().getVariatedTextures()
.get(PonyManager.BACKGROUND_PONIES)
.getByName(entity.getCustomName().getString(), entity.getUuid());
if (override.isPresent()) {
return override.get();
}
}
VillagerData t = entity.getVillagerData();
return getTexture(t.getType(), t.getProfession());