anvillib/common/src/main/java/net/anvilcraft/anvillib/cosmetics/remote/RemoteCosmetic.java

124 lines
3.5 KiB
Java

package net.anvilcraft.anvillib.cosmetics.remote;
import net.anvilcraft.anvillib.cosmetics.CosmeticsManager;
import net.anvilcraft.anvillib.cosmetics.ICosmetic;
import net.anvilcraft.anvillib.cosmetics.remote.model.AnimationData;
import net.anvilcraft.anvillib.cosmetics.remote.model.TextureData;
import net.anvilcraft.anvillib.cosmetics.CosmeticParts;
import net.minecraft.util.Identifier;
import software.bernie.geckolib3.file.AnimationFile;
import software.bernie.geckolib3.geo.render.built.GeoModel;
public class RemoteCosmetic implements ICosmetic {
private Identifier id;
private boolean loadedModel = false;
private boolean loadedTexture = false;
private boolean loadedAnimations = false;
private Identifier modelLocation;
private Identifier textureLocation;
private Identifier animationsLocation;
private CosmeticParts parts = new CosmeticParts();
private String idleAnimation = null;
private int frameTime = 1;
private int frameCount = 1;
public RemoteCosmetic(String id) {
this.id = new Identifier("anvillib", id);
this.modelLocation = new Identifier("anvillib", "models/remote/" + id);
this.textureLocation = new Identifier("anvillib", "textures/remote/" + id);
this.animationsLocation = new Identifier("anvillib", "animations/remote/" + id);
}
@Override
public Identifier getAnimationFileLocation() {
return this.animationsLocation;
}
@Override
public Identifier getModelLocation() {
return this.modelLocation;
}
@Override
public Identifier getTextureLocation() {
return this.textureLocation;
}
@Override
public Identifier getID() {
return this.id;
}
@Override
public boolean readyToRender() {
return this.loadedModel && this.loadedTexture && this.loadedAnimations;
}
public void loadModel(GeoModel model) {
CosmeticsManager.loadModel(this.modelLocation, model);
this.parts = new CosmeticParts(model);
this.loadedModel = true;
}
public void loadTexture(TextureData data) {
this.frameCount = data.frameCount;
this.frameTime = data.frameTime;
this.loadedTexture = true;
}
public void loadAnimations(AnimationFile file, AnimationData data) {
if (data == null || file == null) {
this.animationsLocation = null;
} else {
CosmeticsManager.loadAnimations(this.animationsLocation, file);
this.idleAnimation = data.idleAnimation;
}
this.loadedAnimations = true;
}
@Override
public String getBody() {
return this.parts.body ? this.parts.bodyName : null;
}
@Override
public String getHead() {
return this.parts.head ? this.parts.headName : null;
}
@Override
public String getLeftArm() {
return this.parts.leftArm ? this.parts.leftArmName : null;
}
@Override
public String getLeftLeg() {
return this.parts.leftLeg ? this.parts.leftLegName : null;
}
@Override
public String getRightArm() {
return this.parts.rightArm ? this.parts.rightArmName : null;
}
@Override
public String getRightLeg() {
return this.parts.rightLeg ? this.parts.rightLegName : null;
}
@Override
public String getIdleAnimationName() {
return this.idleAnimation;
}
@Override
public int getTotalFrames() {
return this.frameCount;
}
@Override
public int getFrameTime() {
return this.frameTime;
}
}