57 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.model;
 | |
| 
 | |
| import java.util.Arrays;
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import net.minecraft.client.model.geom.ModelPart;
 | |
| import net.minecraft.client.model.geom.PartPose;
 | |
| import net.minecraft.client.model.geom.builders.CubeListBuilder;
 | |
| 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.entity.state.SlimeRenderState;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class LavaSlimeModel extends EntityModel<SlimeRenderState> {
 | |
| 	private static final int SEGMENT_COUNT = 8;
 | |
| 	private final ModelPart[] bodyCubes = new ModelPart[8];
 | |
| 
 | |
| 	public LavaSlimeModel(ModelPart root) {
 | |
| 		super(root);
 | |
| 		Arrays.setAll(this.bodyCubes, i -> root.getChild(getSegmentName(i)));
 | |
| 	}
 | |
| 
 | |
| 	private static String getSegmentName(int index) {
 | |
| 		return "cube" + index;
 | |
| 	}
 | |
| 
 | |
| 	public static LayerDefinition createBodyLayer() {
 | |
| 		MeshDefinition meshDefinition = new MeshDefinition();
 | |
| 		PartDefinition partDefinition = meshDefinition.getRoot();
 | |
| 
 | |
| 		for (int i = 0; i < 8; i++) {
 | |
| 			int j = 0;
 | |
| 			int k = 0;
 | |
| 			if (i > 0 && i < 4) {
 | |
| 				k += 9 * i;
 | |
| 			} else if (i > 3) {
 | |
| 				j = 32;
 | |
| 				k += 9 * i - 36;
 | |
| 			}
 | |
| 
 | |
| 			partDefinition.addOrReplaceChild(getSegmentName(i), CubeListBuilder.create().texOffs(j, k).addBox(-4.0F, 16 + i, -4.0F, 8.0F, 1.0F, 8.0F), PartPose.ZERO);
 | |
| 		}
 | |
| 
 | |
| 		partDefinition.addOrReplaceChild("inside_cube", CubeListBuilder.create().texOffs(24, 40).addBox(-2.0F, 18.0F, -2.0F, 4.0F, 4.0F, 4.0F), PartPose.ZERO);
 | |
| 		return LayerDefinition.create(meshDefinition, 64, 64);
 | |
| 	}
 | |
| 
 | |
| 	public void setupAnim(SlimeRenderState renderState) {
 | |
| 		super.setupAnim(renderState);
 | |
| 		float f = Math.max(0.0F, renderState.squish);
 | |
| 
 | |
| 		for (int i = 0; i < this.bodyCubes.length; i++) {
 | |
| 			this.bodyCubes[i].y = -(4 - i) * f * 1.7F;
 | |
| 		}
 | |
| 	}
 | |
| }
 |