Topic category: Advanced modding
First, I recommend using Block Bench to make your models, as Techne is outdated and broken, and doesn't seem to work for this. I won't be giving a guide on how to use Block Bench as there are tutorials for that already, just how to make your model work with armor.
When making your model, you want to make sure everything you make is within groups. And you must have a group for each body part, head, body, right arm, left arm, right leg, left leg. For the boots, you're going to want to make a separate group exactly the same as the legs. When modeling the actual armor pieces, you want to make sure each piece is under the corresponding group you want it to be moving with. For example a helmet you made would be under the head group.
It is also VERY important the group's origin points are the same as the player model, so that they rotate together.
I recommend making a plain biped model to help guide you, but it is not required.
Example of how the groups are supposed to be set up:
For a player model, the origin points are:
- Head and Body: 0, 24, 0
- Right Arm: 5, 22, 0
- Left Arm: -5, 22, 0
- Right Leg: 2, 12, 0
- Left Leg: -2, 12, 0
After you're done, export it, and when MCreator asks which parts to animate, you can skip that, as that doesn't do anything.
When making your armor, select the group for each corresponding body part. Don't worry about the arms for now, for the helmet choose the head group, for the body choose the body group, and for the legs and boots, choose the left leg group for "L" and the right leg group for "R"
Animating arms is little bit more complicated as it requires you to put two lines of code:
NOTE: You must change the part where it says "name of x here" to whatever you made the name of the group for that body part in Block Bench.
Under this line of code:
armorModel.bipedBody = new NameOfModelHere().NameOfBodyHere;
Put in these two lines of code.
armorModel.bipedRightArm = new NameOfModelHere().NameOfRightArmHere;
armorModel.bipedLeftArm = new NameOfModelHere().NameOfLeftArmHere;
After that everything should be working and animated!
Example of it working on armor:
If you have questions or need help leave a comment.
Could I have some help with actually getting my blockbench project into MCreator?
How To Make 3D Rendered Working Armor Models In Minecraft - YouTube
I made a simplified video on how to do it
How To Make 3D Rendered Working Armor Models In Minecraft - YouTube
Can you make a tutorial video about the whole process because I stucked in the part when you say export. Can you export a full armor from blockbench and put it into MCreator, how?
thanks, i learned nothing! :)
MCreator and Blockbench Armor Tutorial for MC - YouTube
In depth tutorial
Hello! I have a question, why is there no word when I select the model, and then after entering the game, the equipped items disappear. Do you know why?
Im using 2021.3 MCreator. Where do I insert the code? This is the code.
Hey StrawS, I just recently started trying to make a custom set of armor...it compiles just fine when i export from BBench, but when i try to import it into MCr. it says "Model name is not file name, but the name inside the java code (model class name)."
It's not using the names i set in BBench for the pieces, and I was only trying to complete the helm. It looks like you did a whole set in one shot...I want to be able to do that. I just need a little direction to figure out what I'm doing wrong...the video i watched "Chew" just did a hat and got it to work without any hitches and didnt even touch any code as far as his video would portray, though i dont think that's the cleanest most bug free way to do it. This is what is spits out when i export from BB.
// Made with Blockbench 4.2.4
// Exported for Minecraft version 1.7 - 1.12
// Paste this class into your mod and generate all required imports
public class ravenfrosthelm extends ModelBase {
private final ModelRenderer ravenfrosthelm;
private final ModelRenderer helmrside_r1;
public ravenfrosthelm() {
textureWidth = 64;
textureHeight = 64;
ravenfrosthelm = new ModelRenderer(this);
ravenfrosthelm.setRotationPoint(0.0F, 0.0F, 0.0F);
ravenfrosthelm.cubeList.add(new ModelBox(ravenfrosthelm, 19, 10, -5.0F, -8.0F, -4.0F, 1, 8, 8, 0.0F, false));
ravenfrosthelm.cubeList.add(new ModelBox(ravenfrosthelm, 0, 0, -4.0F, -9.0F, -4.0F, 8, 1, 8, 0.0F, false));
ravenfrosthelm.cubeList.add(new ModelBox(ravenfrosthelm, 0, 10, 4.0F, -8.0F, -4.0F, 1, 8, 8, 0.0F, false));
ravenfrosthelm.cubeList.add(new ModelBox(ravenfrosthelm, 25, 0, -4.0F, -8.0F, -5.0F, 8, 4, 1, 0.0F, false));
ravenfrosthelm.cubeList.add(new ModelBox(ravenfrosthelm, 38, 14, -4.0F, -3.0F, -5.0F, 3, 3, 1, 0.0F, false));
ravenfrosthelm.cubeList.add(new ModelBox(ravenfrosthelm, 0, 37, 1.0F, -3.0F, -5.0F, 3, 3, 1, 0.0F, false));
ravenfrosthelm.cubeList.add(new ModelBox(ravenfrosthelm, 0, 27, -4.0F, -8.0F, 4.0F, 8, 8, 1, 0.0F, false));
helmrside_r1 = new ModelRenderer(this);
helmrside_r1.setRotationPoint(0.0F, -7.0F, -2.0F);
ravenfrosthelm.addChild(helmrside_r1);
setRotationAngle(helmrside_r1, 0.3927F, 0.0F, 0.0F);
helmrside_r1.cubeList.add(new ModelBox(helmrside_r1, 33, 22, -6.0F, 1.0F, -1.0F, 1, 1, 5, 0.0F, false));
helmrside_r1.cubeList.add(new ModelBox(helmrside_r1, 11, 10, -6.0F, 0.0F, -1.0F, 1, 1, 6, 0.0F, false));
helmrside_r1.cubeList.add(new ModelBox(helmrside_r1, 19, 27, -6.0F, -1.0F, 0.0F, 1, 1, 7, 0.0F, false));
helmrside_r1.cubeList.add(new ModelBox(helmrside_r1, 14, 36, 5.0F, 1.0F, -1.0F, 1, 1, 5, 0.0F, false));
helmrside_r1.cubeList.add(new ModelBox(helmrside_r1, 30, 6, 5.0F, 0.0F, -1.0F, 1, 1, 6, 0.0F, false));
helmrside_r1.cubeList.add(new ModelBox(helmrside_r1, 29, 29, 5.0F, -1.0F, 0.0F, 1, 1, 7, 0.0F, false));
}
@Override
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
ravenfrosthelm.render(f5);
}
public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) {
modelRenderer.rotateAngleX = x;
modelRenderer.rotateAngleY = y;
modelRenderer.rotateAngleZ = z;
}
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity e) {
super.setRotationAngles(f, f1, f2, f3, f4, f5, e);
this.ravenfrosthelm.rotateAngleY = f3 / (180F / (float) Math.PI);
this.ravenfrosthelm.rotateAngleX = f4 / (180F / (float) Math.PI);
this.helmrside_r1.rotateAngleY = f3 / (180F / (float) Math.PI);
this.helmrside_r1.rotateAngleX = f4 / (180F / (float) Math.PI);
}
}
P.S. I fixed the tags/labels of everything in the Blockbench file after that one...even did a little more work to the helm and tried to make sure everything was kosher, but still got hit with the same message
I don't understand where to put the two lines of code for the arms...I have everything working except the arms...they never show up.
public EoC() {
textureWidth = 128;
textureHeight = 128;
Head = new ModelRenderer(this);
Head.setRotationPoint(0.0F, 0.0F, 0.0F);
Head.cubeList.add(new ModelBox(Head, 0, 36, -5.0F, -8.0F, -4.0F, 1, 8, 8, 0.0F, false));
Head.cubeList.add(new ModelBox(Head, 0, 26, -4.0F, -9.0F, -4.0F, 8, 1, 8, 0.0F, false));
Head.cubeList.add(new ModelBox(Head, 25, 32, 4.0F, -8.0F, -4.0F, 1, 8, 8, 0.0F, false));
Head.cubeList.add(new ModelBox(Head, 28, 14, -4.0F, -8.0F, -5.0F, 8, 4, 1, 0.0F, false));
Head.cubeList.add(new ModelBox(Head, 48, 62, -4.0F, -3.0F, -5.0F, 3, 3, 1, 0.0F, false));
Head.cubeList.add(new ModelBox(Head, 46, 53, 1.0F, -3.0F, -5.0F, 3, 3, 1, 0.0F, false));
Head.cubeList.add(new ModelBox(Head, 62, 0, -4.0F, -8.0F, 4.0F, 8, 8, 1, 0.0F, false));
Head_r1 = new ModelRenderer(this);
Head_r1.setRotationPoint(0.0F, -5.0F, -4.0F);
Head.addChild(Head_r1);
setRotationAngle(Head_r1, 0.2182F, 0.0F, 0.0F);
Head_r1.cubeList.add(new ModelBox(Head_r1, 53, 62, 5.0F, -3.0F, 2.0F, 1, 1, 7, 0.0F, false));
Head_r1.cubeList.add(new ModelBox(Head_r1, 66, 56, 5.0F, -2.0F, 1.0F, 1, 1, 6, 0.0F, false));
Head_r1.cubeList.add(new ModelBox(Head_r1, 71, 17, 5.0F, -1.0F, 1.0F, 1, 1, 5, 0.0F, false));
Head_r1.cubeList.add(new ModelBox(Head_r1, 63, 64, -6.0F, -3.0F, 2.0F, 1, 1, 7, 0.0F, false));
Head_r1.cubeList.add(new ModelBox(Head_r1, 38, 70, -6.0F, -2.0F, 1.0F, 1, 1, 6, 0.0F, false));
Head_r1.cubeList.add(new ModelBox(Head_r1, 53, 71, -6.0F, -1.0F, 1.0F, 1, 1, 5, 0.0F, false));
Body = new ModelRenderer(this);
Body.setRotationPoint(0.0F, 0.0F, 0.0F);
Body.cubeList.add(new ModelBox(Body, 0, 14, -5.0F, 3.5F, -3.5F, 10, 4, 7, 0.0F, false));
Body.cubeList.add(new ModelBox(Body, 29, 20, -4.5F, 7.3125F, -3.125F, 9, 5, 6, 0.0F, false));
Body.cubeList.add(new ModelBox(Body, 0, 0, -6.0F, 0.5F, -4.0F, 12, 5, 8, 0.0F, false));
Body.cubeList.add(new ModelBox(Body, 77, 24, -5.5F, 0.0F, -4.375F, 4, 5, 1, 0.0F, false));
Body.cubeList.add(new ModelBox(Body, 75, 54, 1.5F, 0.0F, -4.375F, 4, 5, 1, 0.0F, false));
Body.cubeList.add(new ModelBox(Body, 57, 0, 0.5F, 0.25F, -4.375F, 1, 3, 1, 0.0F, false));
Body.cubeList.add(new ModelBox(Body, 55, 44, -1.5F, 0.25F, -4.375F, 1, 3, 1, 0.0F, false));
Body.cubeList.add(new ModelBox(Body, 34, 62, -0.5F, 0.4375F, -4.375F, 1, 2, 1, 0.0F, false));
Body.cubeList.add(new ModelBox(Body, 8, 83, -4.125F, -0.625F, -3.0625F, 8, 3, 6, 0.0F, false));
RightArm = new ModelRenderer(this);
RightArm.setRotationPoint(-5.0F, 2.0F, 0.0F);
RightArm.cubeList.add(new ModelBox(RightArm, 74, 36, -3.75F, -3.0F, -3.4375F, 4, 5, 1, 0.0F, false));
RightArm.cubeList.add(new ModelBox(RightArm, 51, 53, -3.5F, 2.0F, -2.5F, 5, 3, 5, 0.0F, false));
RightArm.cubeList.add(new ModelBox(RightArm, 30, 53, -3.375F, 7.1875F, -2.5F, 5, 3, 5, 0.0F, false));
RightArm.cubeList.add(new ModelBox(RightArm, 25, 70, -4.75F, -3.0F, -2.5F, 1, 5, 5, 0.0F, false));
RightArm.cubeList.add(new ModelBox(RightArm, 44, 32, -3.75F, -4.0F, -2.5F, 5, 6, 5, 0.0F, false));
RightArm.cubeList.add(new ModelBox(RightArm, 66, 73, -3.75F, -3.0F, 2.5F, 4, 5, 1, 0.0F, false));
RightArm_r1 = new ModelRenderer(this);
RightArm_r1.setRotationPoint(-5.0F, -7.5F, 0.0F);
RightArm.addChild(RightArm_r1);
setRotationAngle(RightArm_r1, 0.0F, 0.0F, 0.7854F);
RightArm_r1.cubeList.add(new ModelBox(RightArm_r1, 0, 0, 2.3375F, 1.7875F, -2.375F, 1, 5, 1, 0.0F, false));
RightArm_r1.cubeList.add(new ModelBox(RightArm_r1, 45, 78, 2.3375F, 1.7875F, -0.5625F, 1, 7, 1, 0.0F, false));
RightArm_r1.cubeList.add(new ModelBox(RightArm_r1, 0, 14, 0.3375F, 1.775F, -0.5625F, 1, 5, 1, 0.0F, false));
RightArm_r1.cubeList.add(new ModelBox(RightArm_r1, 0, 26, 2.3375F, 1.775F, 1.25F, 1, 5, 1, 0.0F, false));
RightArm_r1.cubeList.add(new ModelBox(RightArm_r1, 11, 36, 0.3375F, 1.75F, -2.375F, 1, 3, 1, 0.0F, false));
RightArm_r1.cubeList.add(new ModelBox(RightArm_r1, 19, 43, 0.3052F, 1.7777F, 1.25F, 1, 3, 1, 0.0F, false));
RightArm_r2 = new ModelRenderer(this);
RightArm_r2.setRotationPoint(-2.5F, -3.5F, 0.0F);
RightArm.addChild(RightArm_r2);
setRotationAngle(RightArm_r2, 0.0F, 0.0F, 0.7854F);
RightArm_r2.cubeList.add(new ModelBox(RightArm_r2, 19, 36, -4.4375F, -0.25F, -2.375F, 4, 1, 1, 0.0F, false));
RightArm_r2.cubeList.add(new ModelBox(RightArm_r2, 46, 12, -4.4375F, -0.25F, -0.5625F, 4, 1, 1, 0.0F, false));
RightArm_r2.cubeList.add(new ModelBox(RightArm_r2, 60, 47, -4.4375F, -0.25F, 1.25F, 4, 1, 1, 0.0F, false));
LeftArm = new ModelRenderer(this);
LeftArm.setRotationPoint(5.0F, 2.0F, 0.0F);
LeftArm.cubeList.add(new ModelBox(LeftArm, 73, 64, -0.375F, -3.0F, 2.5F, 4, 5, 1, 0.0F, false));
LeftArm.cubeList.add(new ModelBox(LeftArm, 41, 0, -1.375F, -4.0F, -2.5F, 5, 6, 5, 0.0F, false));
LeftArm.cubeList.add(new ModelBox(LeftArm, 0, 73, -0.375F, -3.0F, -3.5F, 4, 5, 1, 0.0F, false));
LeftArm.cubeList.add(new ModelBox(LeftArm, 12, 70, 3.625F, -3.0F, -2.5F, 1, 5, 5, 0.0F, false));
LeftArm.cubeList.add(new ModelBox(LeftArm, 14, 49, -1.625F, 2.0F, -2.5F, 5, 3, 5, 0.0F, false));
LeftArm.cubeList.add(new ModelBox(LeftArm, 39, 44, -1.6875F, 7.1875F, -2.5F, 5, 3, 5, 0.0F, false));
LeftArm_r1 = new ModelRenderer(this);
LeftArm_r1.setRotationPoint(2.5F, -3.5F, 0.0F);
LeftArm.addChild(LeftArm_r1);
setRotationAngle(LeftArm_r1, 0.0F, 0.0F, -0.7854F);
LeftArm_r1.cubeList.add(new ModelBox(LeftArm_r1, 77, 31, 0.4375F, -0.25F, -2.375F, 4, 1, 1, 0.0F, false));
LeftArm_r1.cubeList.add(new ModelBox(LeftArm_r1, 47, 71, 0.4375F, -0.25F, 1.25F, 4, 1, 1, 0.0F, false));
LeftArm_r1.cubeList.add(new ModelBox(LeftArm_r1, 33, 70, 0.4375F, -0.25F, -0.5625F, 4, 1, 1, 0.0F, false));
LeftArm_r2 = new ModelRenderer(this);
LeftArm_r2.setRotationPoint(5.0F, -7.5F, 0.0F);
LeftArm.addChild(LeftArm_r2);
setRotationAngle(LeftArm_r2, 0.0F, 0.0F, -0.7854F);
LeftArm_r2.cubeList.add(new ModelBox(LeftArm_r2, 30, 49, -1.3375F, 1.75F, -2.375F, 1, 3, 1, 0.0F, false));
LeftArm_r2.cubeList.add(new ModelBox(LeftArm_r2, 0, 36, -3.3375F, 1.775F, 1.25F, 1, 5, 1, 0.0F, false));
LeftArm_r2.cubeList.add(new ModelBox(LeftArm_r2, 55, 78, -1.3375F, 1.775F, -0.5625F, 1, 5, 1, 0.0F, false));
LeftArm_r2.cubeList.add(new ModelBox(LeftArm_r2, 50, 78, -3.3375F, 1.7875F, -0.5625F, 1, 7, 1, 0.0F, false));
LeftArm_r2.cubeList.add(new ModelBox(LeftArm_r2, 60, 78, -3.3375F, 1.7875F, -2.375F, 1, 5, 1, 0.0F, false));
LeftArm_r2.cubeList.add(new ModelBox(LeftArm_r2, 47, 15, -1.3052F, 1.7777F, 1.25F, 1, 3, 1, 0.0F, false));
RightLeg = new ModelRenderer(this);
RightLeg.setRotationPoint(-1.9F, 12.0F, 0.0F);
RightLeg.cubeList.add(new ModelBox(RightLeg, 60, 24, -2.0F, 0.0F, -2.0F, 4, 7, 4, 0.25F, false));
LeftLeg = new ModelRenderer(this);
LeftLeg.setRotationPoint(1.9F, 12.0F, 0.0F);
LeftLeg.cubeList.add(new ModelBox(LeftLeg, 17, 58, -2.0F, 0.0F, -2.0F, 4, 7, 4, 0.25F, false));
RightBoot = new ModelRenderer(this);
RightBoot.setRotationPoint(-1.9F, 12.0F, 0.0F);
RightBoot.cubeList.add(new ModelBox(RightBoot, 34, 62, -2.0F, 10.0F, -3.0F, 4, 2, 5, 0.25F, false));
RightBoot.cubeList.add(new ModelBox(RightBoot, 67, 47, -2.0F, 7.5F, -2.0F, 4, 2, 4, 0.25F, false));
RightBoot_r1 = new ModelRenderer(this);
RightBoot_r1.setRotationPoint(1.9F, -17.0F, -4.0F);
RightBoot.addChild(RightBoot_r1);
setRotationAngle(RightBoot_r1, 0.2182F, 0.0F, 0.0F);
RightBoot_r1.cubeList.add(new ModelBox(RightBoot_r1, 11, 36, -5.0F, 24.0F, -2.5F, 1, 1, 5, 0.0F, false));
RightBoot_r1.cubeList.add(new ModelBox(RightBoot_r1, 73, 76, -5.0F, 25.0F, -3.5F, 1, 1, 4, 0.0F, false));
RightBoot_r1.cubeList.add(new ModelBox(RightBoot_r1, 33, 0, -5.0F, 26.0F, -3.5F, 1, 1, 3, 0.0F, false));
LeftBoot = new ModelRenderer(this);
LeftBoot.setRotationPoint(1.9F, 12.0F, 0.0F);
LeftBoot.cubeList.add(new ModelBox(LeftBoot, 60, 39, -2.0F, 10.0F, -3.0F, 4, 2, 5, 0.25F, false));
LeftBoot.cubeList.add(new ModelBox(LeftBoot, 0, 66, -2.0F, 7.5F, -2.0F, 4, 2, 4, 0.25F, false));
LeftBoot_r1 = new ModelRenderer(this);
LeftBoot_r1.setRotationPoint(-1.9F, -17.0F, -4.0F);
LeftBoot.addChild(LeftBoot_r1);
setRotationAngle(LeftBoot_r1, 0.2182F, 0.0F, 0.0F);
LeftBoot_r1.cubeList.add(new ModelBox(LeftBoot_r1, 36, 32, 4.0F, 26.0F, -3.5F, 1, 1, 3, 0.0F, false));
LeftBoot_r1.cubeList.add(new ModelBox(LeftBoot_r1, 34, 78, 4.0F, 25.0F, -3.5F, 1, 1, 4, 0.0F, false));
LeftBoot_r1.cubeList.add(new ModelBox(LeftBoot_r1, 71, 10, 4.0F, 24.0F, -2.5F, 1, 1, 5, 0.0F, false));
}
@Override
public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
Head.render(f5);
Body.render(f5);
RightArm.render(f5);
LeftArm.render(f5);
RightLeg.render(f5);
LeftLeg.render(f5);
RightBoot.render(f5);
LeftBoot.render(f5);
}
public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) {
modelRenderer.rotateAngleX = x;
modelRenderer.rotateAngleY = y;
modelRenderer.rotateAngleZ = z;
}
}
how do i open the premade biped modle
Thanks! BTW in newer versions of MCreator you don't need to manually add the code you just have to choose the arm groups like the other ones so i just wanted to add that to help.
I don’t know why is not working, the texture look weird. Do we have to create a separate textures for each parts of the armor or make one texture for the whole armor