86 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.gui.render.pip;
 | |
| 
 | |
| import com.mojang.blaze3d.platform.Lighting.Entry;
 | |
| import com.mojang.blaze3d.vertex.PoseStack;
 | |
| import java.util.Objects;
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import net.minecraft.client.Minecraft;
 | |
| import net.minecraft.client.gui.navigation.ScreenRectangle;
 | |
| import net.minecraft.client.gui.render.state.GuiItemRenderState;
 | |
| import net.minecraft.client.gui.render.state.GuiRenderState;
 | |
| import net.minecraft.client.gui.render.state.pip.OversizedItemRenderState;
 | |
| import net.minecraft.client.renderer.MultiBufferSource.BufferSource;
 | |
| import net.minecraft.client.renderer.item.TrackingItemStackRenderState;
 | |
| import net.minecraft.client.renderer.texture.OverlayTexture;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class OversizedItemRenderer extends PictureInPictureRenderer<OversizedItemRenderState> {
 | |
| 	private boolean usedOnThisFrame;
 | |
| 	@Nullable
 | |
| 	private Object modelOnTextureIdentity;
 | |
| 
 | |
| 	public OversizedItemRenderer(BufferSource bufferSource) {
 | |
| 		super(bufferSource);
 | |
| 	}
 | |
| 
 | |
| 	public boolean usedOnThisFrame() {
 | |
| 		return this.usedOnThisFrame;
 | |
| 	}
 | |
| 
 | |
| 	public void resetUsedOnThisFrame() {
 | |
| 		this.usedOnThisFrame = false;
 | |
| 	}
 | |
| 
 | |
| 	public void invalidateTexture() {
 | |
| 		this.modelOnTextureIdentity = null;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public Class<OversizedItemRenderState> getRenderStateClass() {
 | |
| 		return OversizedItemRenderState.class;
 | |
| 	}
 | |
| 
 | |
| 	protected void renderToTexture(OversizedItemRenderState oversizedItemRenderState, PoseStack poseStack) {
 | |
| 		poseStack.scale(1.0F, -1.0F, -1.0F);
 | |
| 		GuiItemRenderState guiItemRenderState = oversizedItemRenderState.guiItemRenderState();
 | |
| 		ScreenRectangle screenRectangle = guiItemRenderState.oversizedItemBounds();
 | |
| 		Objects.requireNonNull(screenRectangle);
 | |
| 		float f = (screenRectangle.left() + screenRectangle.right()) / 2.0F;
 | |
| 		float g = (screenRectangle.top() + screenRectangle.bottom()) / 2.0F;
 | |
| 		float h = guiItemRenderState.x() + 8.0F;
 | |
| 		float i = guiItemRenderState.y() + 8.0F;
 | |
| 		poseStack.translate((h - f) / 16.0F, (g - i) / 16.0F, 0.0F);
 | |
| 		TrackingItemStackRenderState trackingItemStackRenderState = guiItemRenderState.itemStackRenderState();
 | |
| 		boolean bl = !trackingItemStackRenderState.usesBlockLight();
 | |
| 		if (bl) {
 | |
| 			Minecraft.getInstance().gameRenderer.getLighting().setupFor(Entry.ITEMS_FLAT);
 | |
| 		} else {
 | |
| 			Minecraft.getInstance().gameRenderer.getLighting().setupFor(Entry.ITEMS_3D);
 | |
| 		}
 | |
| 
 | |
| 		trackingItemStackRenderState.render(poseStack, this.bufferSource, 15728880, OverlayTexture.NO_OVERLAY);
 | |
| 		this.modelOnTextureIdentity = trackingItemStackRenderState.getModelIdentity();
 | |
| 	}
 | |
| 
 | |
| 	public void blitTexture(OversizedItemRenderState oversizedItemRenderState, GuiRenderState guiRenderState) {
 | |
| 		super.blitTexture(oversizedItemRenderState, guiRenderState);
 | |
| 		this.usedOnThisFrame = true;
 | |
| 	}
 | |
| 
 | |
| 	public boolean textureIsReadyToBlit(OversizedItemRenderState oversizedItemRenderState) {
 | |
| 		TrackingItemStackRenderState trackingItemStackRenderState = oversizedItemRenderState.guiItemRenderState().itemStackRenderState();
 | |
| 		return !trackingItemStackRenderState.isAnimated() && trackingItemStackRenderState.getModelIdentity().equals(this.modelOnTextureIdentity);
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	protected float getTranslateY(int height, int guiScale) {
 | |
| 		return height / 2.0F;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	protected String getTextureLabel() {
 | |
| 		return "oversized_item";
 | |
| 	}
 | |
| }
 |