71 lines
2.3 KiB
Java
71 lines
2.3 KiB
Java
package net.machinemuse.powersuits.client.render.modelspec;
|
|
|
|
import net.machinemuse.numina.general.MuseLogger;
|
|
import net.machinemuse.numina.scala.MuseRegistry;
|
|
import net.machinemuse.utils.MuseStringUtils;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraftforge.client.model.AdvancedModelLoader;
|
|
import net.minecraftforge.client.model.IModelCustom;
|
|
import net.minecraftforge.client.model.obj.WavefrontObject;
|
|
|
|
/**
|
|
* Author: MachineMuse (Claire Semple)
|
|
* Created: 7:44 AM, 4/28/13
|
|
*
|
|
* Ported to Java by lehjr on 11/8/16.
|
|
*
|
|
* Note: make sure to have null checks in place.
|
|
*/
|
|
public class ModelRegistry extends MuseRegistry<ModelSpec> {
|
|
private ModelRegistry(){
|
|
}
|
|
|
|
private static ModelRegistry INSTANCE;
|
|
|
|
public static ModelRegistry getInstance() {
|
|
if (INSTANCE == null)
|
|
INSTANCE = new ModelRegistry();
|
|
return INSTANCE;
|
|
}
|
|
|
|
public WavefrontObject loadModel(ResourceLocation resource) {
|
|
String name = MuseStringUtils.extractName(resource);
|
|
ModelSpec spec = get(name);
|
|
if (spec == null)
|
|
return wrap(resource);
|
|
return spec.model;
|
|
}
|
|
|
|
public WavefrontObject wrap(ResourceLocation resource) {
|
|
MuseLogger.logDebug("Loading " + resource + " as " + MuseStringUtils.extractName(resource));
|
|
IModelCustom model = AdvancedModelLoader.loadModel(resource);
|
|
if (model instanceof WavefrontObject)
|
|
return (WavefrontObject) model;
|
|
MuseLogger.logError("Model loading failed :( " + resource);
|
|
return null;
|
|
}
|
|
|
|
public ModelSpec getModel(NBTTagCompound nbt) {
|
|
return get(nbt.getString("model"));
|
|
}
|
|
|
|
public ModelPartSpec getPart(NBTTagCompound nbt, ModelSpec model) {
|
|
return model.get(nbt.getString("part"));
|
|
}
|
|
|
|
public ModelPartSpec getPart(NBTTagCompound nbt) {
|
|
return getPart(nbt, getModel(nbt));
|
|
// getModel(nbt).flatMap(m => m.get(nbt getString "part"))
|
|
// FIXME: not sure if this is right
|
|
}
|
|
|
|
public NBTTagCompound getSpecTag(NBTTagCompound museRenderTag, ModelPartSpec spec) {
|
|
String name = makeName(spec);
|
|
return (museRenderTag.hasKey(name)) ? (museRenderTag.getCompoundTag(name)) : null;
|
|
}
|
|
|
|
public String makeName(ModelPartSpec spec) {
|
|
return spec.modelSpec.getOwnName() + "." + spec.partName;
|
|
}
|
|
} |