Skip to content

Commit

Permalink
feat: add new marid model - thank @FeellianSinger
Browse files Browse the repository at this point in the history
  • Loading branch information
klikli-dev committed Jan 22, 2024
1 parent 160c929 commit 966835d
Show file tree
Hide file tree
Showing 8 changed files with 957 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,14 @@
import com.klikli_dev.occultism.common.entity.spirit.AfritEntity;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.DefaultedEntityGeoModel;
import software.bernie.geckolib.model.DefaultedGeoModel;


public class AfritModel extends DefaultedGeoModel<AfritEntity> {
public class AfritModel extends DefaultedEntityGeoModel<AfritEntity> {

public AfritModel() {
super(new ResourceLocation(Occultism.MODID, "afrit"));
super(new ResourceLocation(Occultism.MODID, "afrit"), true);
}

@Override
protected String subtype() {
return "entity";
}

@Override
public RenderType getRenderType(AfritEntity animatable, ResourceLocation texture) {
return RenderType.entityTranslucent(this.getTextureResource(animatable));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

package com.klikli_dev.occultism.client.model.entity;

import com.klikli_dev.occultism.Occultism;
import com.klikli_dev.occultism.common.entity.spirit.AfritEntity;
import com.klikli_dev.occultism.common.entity.spirit.MaridEntity;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.model.geom.ModelPart;
Expand All @@ -30,36 +32,16 @@
import net.minecraft.client.model.geom.builders.LayerDefinition;
import net.minecraft.client.model.geom.builders.MeshDefinition;
import net.minecraft.client.model.geom.builders.PartDefinition;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.DefaultedEntityGeoModel;
import software.bernie.geckolib.model.DefaultedGeoModel;


public class MaridModel extends HumanoidModel<MaridEntity> {
public class MaridModel extends DefaultedEntityGeoModel<MaridEntity> {

public ModelPart nose;
public ModelPart earLeft;
public ModelPart earRight;

public MaridModel(ModelPart part) {
super(part);

this.nose = this.head.getChild("nose");
this.earLeft = this.head.getChild("left_ear");
this.earRight = this.head.getChild("right_ear");
}

public static LayerDefinition createBodyLayer() {
MeshDefinition mesh = new MeshDefinition();
PartDefinition parts = mesh.getRoot();
PartDefinition head = parts.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -10.0F, -4.0F, 8, 10, 8, false), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0, 0, 0));
PartDefinition hat = parts.addOrReplaceChild("hat", CubeListBuilder.create().texOffs(1, 45).addBox(-4.0F, -8.0F, -4.0F, 8, 10, 8, false), PartPose.offsetAndRotation(0.0F, -3.0F, 0.0F, 0, 0, 0));
PartDefinition body = parts.addOrReplaceChild("body", CubeListBuilder.create().texOffs(16, 20).addBox(-4.0F, 0.0F, -3.0F, 8, 12, 6, false), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0, 0, 0));
PartDefinition rightArm = parts.addOrReplaceChild("right_arm", CubeListBuilder.create().texOffs(44, 22).addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, false), PartPose.offsetAndRotation(-5.0F, 3.0F, -1.0F, -0.7499679795819634F, 0.0F, 0.0F));
PartDefinition leftArm = parts.addOrReplaceChild("left_arm", CubeListBuilder.create().texOffs(44, 22).addBox(-1.0F, -2.0F, -2.0F, 4, 11, 4, false), PartPose.offsetAndRotation(5.0F, 3.0F, -1.0F, -0.7499679795819634F, 0.0F, 0.0F));
PartDefinition rightLeg = parts.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 22).addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, false), PartPose.offsetAndRotation(-2.0F, 12.0F, 0.0F, 0, 0, 0));
PartDefinition leftLeg = parts.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 22).addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, true), PartPose.offsetAndRotation(2.0F, 12.0F, 0.0F, 0, 0, 0));
PartDefinition nose = head.addOrReplaceChild("nose", CubeListBuilder.create().texOffs(24, 0).addBox(-1.0F, 0.0F, 0.0F, 2, 4, 2, false), PartPose.offsetAndRotation(0.0F, -5.0F, -4.4F, -0.4553564018453205F, 0.0F, 0.0F));
PartDefinition earLeft = head.addOrReplaceChild("left_ear", CubeListBuilder.create().texOffs(0, 0).addBox(-0.5F, 0.0F, 0.0F, 1, 3, 1, false), PartPose.offsetAndRotation(4.0F, -11.3F, 3.5F, -0.5009094953223726F, 0.0F, 0.0F));
PartDefinition earRight = head.addOrReplaceChild("right_ear", CubeListBuilder.create().texOffs(0, 0).addBox(-0.5F, 0.0F, 0.0F, 1, 3, 1, false), PartPose.offsetAndRotation(-4.0F, -11.3F, 3.5F, -0.5009094953223726F, 0.0F, 0.0F));
return LayerDefinition.create(mesh, 64, 64);
public MaridModel() {
super(new ResourceLocation(Occultism.MODID, "marid"), true);
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -22,32 +22,17 @@

package com.klikli_dev.occultism.client.render.entity;

import com.klikli_dev.occultism.Occultism;
import com.klikli_dev.occultism.client.model.entity.MaridModel;
import com.klikli_dev.occultism.common.entity.spirit.MaridEntity;
import com.klikli_dev.occultism.registry.OccultismModelLayers;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.renderer.GeoEntityRenderer;
import software.bernie.geckolib.renderer.layer.AutoGlowingGeoLayer;

public class MaridRenderer extends BipedSpiritRenderer<MaridEntity, MaridModel> {
public class MaridRenderer extends GeoEntityRenderer<MaridEntity> {

private static final ResourceLocation[] TEXTURES = {new ResourceLocation(Occultism.MODID,
"textures/entity/marid.png")};
public MaridRenderer(EntityRendererProvider.Context renderManager) {
super(renderManager, new MaridModel());

public MaridRenderer(EntityRendererProvider.Context context) {
super(context, new MaridModel(context.bakeLayer(OccultismModelLayers.MARID)), 0.5f);
this.addRenderLayer(new AutoGlowingGeoLayer<>(this));
}

@Override
public ResourceLocation getTextureLocation(MaridEntity entity) {
return TEXTURES[entity.getEntityData().get(entity.getDataParameterSkin())];
}

@Override
protected void scale(MaridEntity entity, PoseStack matrixStackIn, float partialTickTime) {
super.scale(entity, matrixStackIn, partialTickTime);
matrixStackIn.scale(1.2f, 1.2f, 1.2f);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,30 @@

package com.klikli_dev.occultism.common.entity.spirit;

import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import software.bernie.geckolib.animatable.GeoEntity;
import software.bernie.geckolib.core.animatable.GeoAnimatable;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;

public class MaridEntity extends SpiritEntity {
public class MaridEntity extends SpiritEntity implements GeoEntity {

AnimatableInstanceCache animatableInstanceCache = GeckoLibUtil.createInstanceCache(this);

public MaridEntity(EntityType<? extends SpiritEntity> type, Level level) {
super(type, level);
}

//region Static Methods
public static AttributeSupplier.Builder createAttributes() {
return SpiritEntity.createAttributes()
.add(Attributes.ATTACK_DAMAGE, 16.0)
Expand All @@ -43,5 +55,33 @@ public static AttributeSupplier.Builder createAttributes() {
.add(Attributes.ARMOR, 16.0)
.add(Attributes.ARMOR_TOUGHNESS, 100.0);
}
//endregion Static Methods

@Override
protected void playStepSound(BlockPos pPos, BlockState pBlock) {
}

@Override
public int getCurrentSwingDuration() {
return 11; //to match our attack animation speed + 1 tick
}

@Override
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
var mainController = new AnimationController<>(this, "mainController", 0, this::animPredicate);
controllers.add(mainController);
}

private <T extends GeoAnimatable> PlayState animPredicate(AnimationState<T> tAnimationState) {

if (this.swinging) {
return tAnimationState.setAndContinue(RawAnimation.begin().thenPlay("attack"));
}

return tAnimationState.setAndContinue(tAnimationState.isMoving() ? RawAnimation.begin().thenPlay("walk") : RawAnimation.begin().thenPlay("idle"));
}

@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.animatableInstanceCache;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,6 @@ public static void onRegisterEntityRendererLayerDefinitions(EntityRenderersEvent
event.registerLayerDefinition(OccultismModelLayers.FAMILIAR_FAIRY, FairyFamiliarModel::createBodyLayer);
event.registerLayerDefinition(OccultismModelLayers.FAMILIAR_MUMMY, MummyFamiliarModel::createBodyLayer);
event.registerLayerDefinition(OccultismModelLayers.FAMILIAR_BEAVER, BeaverFamiliarModel::createBodyLayer);
event.registerLayerDefinition(OccultismModelLayers.MARID, MaridModel::createBodyLayer);
event.registerLayerDefinition(OccultismModelLayers.KAPOW, MummyFamiliarRenderer.KapowModel::createBodyLayer);
}

Expand Down
Loading

0 comments on commit 966835d

Please sign in to comment.