ModularPowersuits/src/main/scala/net/machinemuse/powersuits/client/render/modelspec/ModelRegistry.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;
}
}