package com.dairymoose.modernlife.renderer.tileentity; import com.dairymoose.modernlife.blocks.ModernBookshelfBlock; import com.dairymoose.modernlife.core.CustomBlocks; import com.dairymoose.modernlife.tileentities.ModernBookshelfBlockEntity; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Vector3f; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.Direction; import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextComponent; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @OnlyIn(Dist.CLIENT) /* loaded from: outputsrg.jar:com/dairymoose/modernlife/renderer/tileentity/ModernBookshelfBlockEntityRenderer.class */ public class ModernBookshelfBlockEntityRenderer implements BlockEntityRenderer { private static final Logger LOGGER = LogManager.getLogger(); public static ItemStack renderBook = null; public static int renderRgb0 = 0; public static int renderRgb1 = 0; public static Map rgb0ForItem = new HashMap(); public static Map rgb1ForItem = new HashMap(); public ModernBookshelfBlockEntityRenderer(BlockEntityRendererProvider.Context ctx) { } private int reverseEndianness(int input) { return ((input & 255) << 24) | ((input & 65280) << 8) | ((input & 16711680) >>> 8) | ((input & (-16777216)) >>> 24); } public void render(ModernBookshelfBlockEntity tileEntity, float v, PoseStack matrixStack, MultiBufferSource iRenderTypeBuffer, int lightmap, int i1) { int mostCommonRgb; int secondMostCommonRgb; List quads; if (!tileEntity.isEmpty()) { for (int i = 0; i < tileEntity.getContainerSize(); i++) { ItemStack itemStack = tileEntity.getItem(i); if (!itemStack.isEmpty()) { matrixStack.pushPose(); if (tileEntity.getBlockState().getValue(ModernBookshelfBlock.FACING) == Direction.EAST) { matrixStack.mulPose(Vector3f.YP.rotationDegrees(90.0f)); matrixStack.translate(-0.9375d, 0.5d, 0.0d); } else if (tileEntity.getBlockState().getValue(ModernBookshelfBlock.FACING) == Direction.NORTH) { matrixStack.mulPose(Vector3f.YP.rotationDegrees(180.0f)); matrixStack.translate(-0.9375d, 0.5d, -1.0d); } else if (tileEntity.getBlockState().getValue(ModernBookshelfBlock.FACING) == Direction.WEST) { matrixStack.mulPose(Vector3f.YP.rotationDegrees(270.0f)); matrixStack.translate(0.0625d, 0.5d, -1.0d); } else if (tileEntity.getBlockState().getValue(ModernBookshelfBlock.FACING) == Direction.SOUTH) { matrixStack.translate(0.0625d, 0.5d, 0.0d); } List yList = null; if (tileEntity.getType() == ModernBookshelfBlockEntity.MODERN_BOOKSHELF) { yList = ModernBookshelfBlockEntity.itemPosY; } matrixStack.translate(ModernBookshelfBlockEntity.itemPosX.get(i % ModernBookshelfBlockEntity.itemPosX.size()).doubleValue(), yList.get(i % yList.size()).doubleValue(), ModernBookshelfBlockEntity.itemPosZ.get(i % ModernBookshelfBlockEntity.itemPosZ.size()).doubleValue()); matrixStack.mulPose(Vector3f.YP.rotationDegrees(180.0f)); renderBook = itemStack; HashMap colorCount = new HashMap<>(); TextureAtlasSprite sprite = null; BakedModel bm = Minecraft.getInstance().getItemRenderer().getModel(itemStack, (Level) null, (LivingEntity) null, i); if (bm != null && (quads = bm.getQuads((BlockState) null, (Direction) null, new Random())) != null && !quads.isEmpty()) { sprite = quads.get(0).getSprite(); } Integer lookupRgb0 = rgb0ForItem.get(itemStack.getItem()); Integer lookupRgb1 = rgb1ForItem.get(itemStack.getItem()); if (lookupRgb0 == null) { if (sprite != null) { for (int x = 0; x < sprite.getWidth(); x++) { for (int y = 0; y < sprite.getHeight(); y++) { int rgba = sprite.getPixelRGBA(0, x, y); int rgb = rgba & 16777215; int a = (rgba & (-16777216)) >>> 24; if (a == 255) { Integer count = colorCount.get(Integer.valueOf(rgb)); if (count == null) { count = 0; } colorCount.put(Integer.valueOf(rgb), Integer.valueOf(count.intValue() + 1)); } } } int highestIndex = 0; for (Integer rgb2 : colorCount.keySet()) { Integer highestCount = colorCount.get(Integer.valueOf(highestIndex)); Integer count2 = colorCount.get(rgb2); if (highestCount == null || count2.intValue() > highestCount.intValue()) { highestIndex = rgb2.intValue(); } } Integer highestCount2 = colorCount.get(Integer.valueOf(highestIndex)); int secondHighestIndex = 0; for (Integer rgb3 : colorCount.keySet()) { Integer secondHighestCount = colorCount.get(Integer.valueOf(secondHighestIndex)); Integer count3 = colorCount.get(rgb3); if (secondHighestCount == null || (count3.intValue() > secondHighestCount.intValue() && count3.intValue() < highestCount2.intValue())) { secondHighestIndex = rgb3.intValue(); } } mostCommonRgb = reverseEndianness(highestIndex) >> 8; secondMostCommonRgb = reverseEndianness(secondHighestIndex) >> 8; } else { mostCommonRgb = 8355711; secondMostCommonRgb = 0; } rgb0ForItem.put(itemStack.getItem(), Integer.valueOf(mostCommonRgb)); rgb1ForItem.put(itemStack.getItem(), Integer.valueOf(secondMostCommonRgb)); } else { mostCommonRgb = lookupRgb0.intValue(); secondMostCommonRgb = lookupRgb1.intValue(); } renderRgb0 = mostCommonRgb; renderRgb1 = secondMostCommonRgb; tileEntity.bookHeight.get(i).floatValue(); matrixStack.scale(1.0f, 1.0f, 1.0f); ItemStack toRender = new ItemStack(CustomBlocks.BLOCK_MODERN_BOOK.get()); Minecraft.getInstance().getItemRenderer().renderStatic(toRender, ItemTransforms.TransformType.NONE, lightmap, i1, matrixStack, iRenderTypeBuffer, i); matrixStack.translate(-0.013000000268220901d, -0.24500000476837158d, -0.17550000548362732d); float scaleValue = -0.003f; String displayText = itemStack.getHoverName().getString(); String storedName = (String) tileEntity.bookNames.get(i); if (!storedName.isBlank()) { displayText = storedName; } int textLength = displayText.length(); if (textLength > 14) { int overMaxDiff = textLength - 14; scaleValue = (-0.003f) + (overMaxDiff * 8.0E-5f); } if (scaleValue > 0.0d) { scaleValue = 0.1f; } matrixStack.scale(scaleValue, scaleValue, scaleValue); matrixStack.mulPose(Vector3f.ZP.rotationDegrees(90.0f)); float lightmapPct = lightmap / 200.0f; if (lightmapPct < 0.2f) { lightmapPct = 0.2f; } else if (lightmapPct > 0.9f) { lightmapPct = 0.9f; } int textR = (int) (255.0f * lightmapPct); int textG = (int) (255.0f * lightmapPct); int textB = (int) (255.0f * lightmapPct); int textColor = (textR << 16) | (textG << 8) | textB; TextComponent displayComponent = new TextComponent(displayText); Style displayStyle = displayComponent.getStyle(); Font font = Minecraft.getInstance().font; Minecraft.getInstance(); font.draw(matrixStack, displayComponent.m_130948_(displayStyle.withFont(Minecraft.UNIFORM_FONT).withBold(true)), 0.0f, 0.0f, textColor); matrixStack.popPose(); } } } } }