76 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.renderer.entity;
 | |
| 
 | |
| import com.mojang.blaze3d.vertex.PoseStack;
 | |
| import com.mojang.math.Axis;
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import net.minecraft.client.model.EntityModel;
 | |
| import net.minecraft.client.model.TropicalFishModelA;
 | |
| import net.minecraft.client.model.TropicalFishModelB;
 | |
| import net.minecraft.client.model.geom.ModelLayers;
 | |
| import net.minecraft.client.renderer.MultiBufferSource;
 | |
| import net.minecraft.client.renderer.entity.layers.TropicalFishPatternLayer;
 | |
| import net.minecraft.client.renderer.entity.state.TropicalFishRenderState;
 | |
| import net.minecraft.resources.ResourceLocation;
 | |
| import net.minecraft.util.Mth;
 | |
| import net.minecraft.world.entity.animal.TropicalFish;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class TropicalFishRenderer extends MobRenderer<TropicalFish, TropicalFishRenderState, EntityModel<TropicalFishRenderState>> {
 | |
| 	/**
 | |
| 	 * Breaking recompile intentionally since modelA/B incorrectly mapped.
 | |
| 	 */
 | |
| 	private final EntityModel<TropicalFishRenderState> modelA = this.getModel();
 | |
| 	/**
 | |
| 	 * Breaking recompile intentionally since modelA/B incorrectly mapped.
 | |
| 	 */
 | |
| 	private final EntityModel<TropicalFishRenderState> modelB;
 | |
| 	private static final ResourceLocation MODEL_A_TEXTURE = ResourceLocation.withDefaultNamespace("textures/entity/fish/tropical_a.png");
 | |
| 	private static final ResourceLocation MODEL_B_TEXTURE = ResourceLocation.withDefaultNamespace("textures/entity/fish/tropical_b.png");
 | |
| 
 | |
| 	public TropicalFishRenderer(EntityRendererProvider.Context context) {
 | |
| 		super(context, new TropicalFishModelA(context.bakeLayer(ModelLayers.TROPICAL_FISH_SMALL)), 0.15F);
 | |
| 		this.modelB = new TropicalFishModelB(context.bakeLayer(ModelLayers.TROPICAL_FISH_LARGE));
 | |
| 		this.addLayer(new TropicalFishPatternLayer(this, context.getModelSet()));
 | |
| 	}
 | |
| 
 | |
| 	public ResourceLocation getTextureLocation(TropicalFishRenderState renderState) {
 | |
| 		return switch (renderState.pattern.base()) {
 | |
| 			case SMALL -> MODEL_A_TEXTURE;
 | |
| 			case LARGE -> MODEL_B_TEXTURE;
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	public TropicalFishRenderState createRenderState() {
 | |
| 		return new TropicalFishRenderState();
 | |
| 	}
 | |
| 
 | |
| 	public void extractRenderState(TropicalFish entity, TropicalFishRenderState reusedState, float partialTick) {
 | |
| 		super.extractRenderState(entity, reusedState, partialTick);
 | |
| 		reusedState.pattern = entity.getPattern();
 | |
| 		reusedState.baseColor = entity.getBaseColor().getTextureDiffuseColor();
 | |
| 		reusedState.patternColor = entity.getPatternColor().getTextureDiffuseColor();
 | |
| 	}
 | |
| 
 | |
| 	public void render(TropicalFishRenderState renderState, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) {
 | |
| 		this.model = switch (renderState.pattern.base()) {
 | |
| 			case SMALL -> this.modelA;
 | |
| 			case LARGE -> this.modelB;
 | |
| 		};
 | |
| 		super.render(renderState, poseStack, bufferSource, packedLight);
 | |
| 	}
 | |
| 
 | |
| 	protected int getModelTint(TropicalFishRenderState renderState) {
 | |
| 		return renderState.baseColor;
 | |
| 	}
 | |
| 
 | |
| 	protected void setupRotations(TropicalFishRenderState renderState, PoseStack poseStack, float bodyRot, float scale) {
 | |
| 		super.setupRotations(renderState, poseStack, bodyRot, scale);
 | |
| 		float f = 4.3F * Mth.sin(0.6F * renderState.ageInTicks);
 | |
| 		poseStack.mulPose(Axis.YP.rotationDegrees(f));
 | |
| 		if (!renderState.isInWater) {
 | |
| 			poseStack.translate(0.2F, 0.1F, 0.0F);
 | |
| 			poseStack.mulPose(Axis.ZP.rotationDegrees(90.0F));
 | |
| 		}
 | |
| 	}
 | |
| }
 |