Advertisement
Guest User

Untitled

a guest
Sep 11th, 2017
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.61 KB | None | 0 0
  1. package com.minecolonies.coremod.client.render;
  2.  
  3. import com.minecolonies.api.util.constant.Constants;
  4. import com.minecolonies.blockout.Log;
  5. import com.minecolonies.coremod.blocks.ModBlocks;
  6. import com.minecolonies.coremod.tileentities.TileEntityInfoPoster;
  7. import com.minecolonies.structures.lib.ModelHolder;
  8. import gigaherz.guidebook.shadow.common.client.ModelHandle;
  9. import net.minecraft.block.Block;
  10. import net.minecraft.block.state.IBlockState;
  11. import net.minecraft.client.Minecraft;
  12. import net.minecraft.client.gui.FontRenderer;
  13. import net.minecraft.client.gui.GuiUtilRenderComponents;
  14. import net.minecraft.client.model.ModelSign;
  15. import net.minecraft.client.renderer.GlStateManager;
  16. import net.minecraft.client.renderer.RenderHelper;
  17. import net.minecraft.client.renderer.Tessellator;
  18. import net.minecraft.client.renderer.VertexBuffer;
  19. import net.minecraft.client.renderer.block.model.BakedQuad;
  20. import net.minecraft.client.renderer.block.model.IBakedModel;
  21. import net.minecraft.client.renderer.texture.TextureMap;
  22. import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
  23. import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
  24. import net.minecraft.crash.CrashReport;
  25. import net.minecraft.entity.player.EntityPlayer;
  26. import net.minecraft.util.BlockRenderLayer;
  27. import net.minecraft.util.EnumFacing;
  28. import net.minecraft.util.ReportedException;
  29. import net.minecraft.util.ResourceLocation;
  30. import net.minecraft.util.math.BlockPos;
  31. import net.minecraft.util.text.ITextComponent;
  32. import net.minecraft.world.World;
  33. import net.minecraftforge.client.model.IModel;
  34. import net.minecraftforge.client.model.ModelLoader;
  35. import net.minecraftforge.client.model.ModelLoaderRegistry;
  36. import net.minecraftforge.client.model.pipeline.LightUtil;
  37. import net.minecraftforge.common.model.IModelState;
  38. import net.minecraftforge.fml.relauncher.Side;
  39. import net.minecraftforge.fml.relauncher.SideOnly;
  40. import org.lwjgl.opengl.GL11;
  41.  
  42. import java.util.List;
  43.  
  44. @SideOnly(Side.CLIENT)
  45. public class TileEntityInfoPosterRenderer extends TileEntitySpecialRenderer<TileEntityInfoPoster>
  46. {
  47. private static final ResourceLocation SIGN_TEXTURE = new ResourceLocation(Constants.MOD_ID, "textures/blocks/info/info_poster.png");
  48.  
  49. /**
  50. * The ModelSign instance for use in this renderer
  51. */
  52. private IBakedModel model = null;
  53.  
  54. @Override
  55. public void renderTileEntityAt(final TileEntityInfoPoster te, final double x, final double y, final double z, final float partialTicks, final int destroyStage)
  56. {
  57. if(model == null)
  58. {
  59. model = loadModel();
  60. }
  61.  
  62. final BlockPos pos = te.getPos();
  63. final IBlockState actualState = ModBlocks.blockInfoPoster.getActualState(ModBlocks.blockInfoPoster.getDefaultState(), Minecraft.getMinecraft().theWorld, pos);
  64.  
  65. for (final BlockRenderLayer layer : BlockRenderLayer.values())
  66. {
  67. if (ModBlocks.blockInfoPoster.canRenderInLayer(actualState, layer))
  68. {
  69. final EntityPlayer player = Minecraft.getMinecraft().thePlayer;
  70. final double dx = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
  71. final double dy = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
  72. final double dz = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;
  73.  
  74. GlStateManager.pushMatrix();
  75. GlStateManager.translate(pos.getX() - dx, pos.getY() - dy, pos.getZ() - dz);
  76.  
  77. RenderHelper.disableStandardItemLighting();
  78.  
  79. if (layer == BlockRenderLayer.CUTOUT)
  80. {
  81. Minecraft.getMinecraft().getTextureManager().getTexture(SIGN_TEXTURE).setBlurMipmap(false, false);
  82. }
  83.  
  84. GlStateManager.color(1F, 1F, 1F, 1F);
  85.  
  86. final int alpha = ((int) (1.0D * 0xFF)) << 24;
  87.  
  88. GlStateManager.enableBlend();
  89. GlStateManager.enableTexture2D();
  90.  
  91. GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
  92. GlStateManager.colorMask(false, false, false, false);
  93. this.renderModel(Minecraft.getMinecraft().theWorld, model, pos, alpha);
  94.  
  95. GlStateManager.colorMask(true, true, true, true);
  96. GlStateManager.depthFunc(GL11.GL_LEQUAL);
  97. this.renderModel(Minecraft.getMinecraft().theWorld, model, pos, alpha);
  98.  
  99. GlStateManager.disableBlend();
  100.  
  101. if (layer == BlockRenderLayer.CUTOUT)
  102. {
  103. Minecraft.getMinecraft().getTextureManager().getTexture(SIGN_TEXTURE).restoreLastBlurMipmap();
  104. }
  105.  
  106. GlStateManager.popMatrix();
  107. }
  108. }
  109.  
  110.  
  111.  
  112. GlStateManager.pushMatrix();
  113. final FontRenderer fontrenderer = this.getFontRenderer();
  114. float f3 = 0.010416667F;
  115. GlStateManager.translate(0.0F, 0.33333334F, 0.046666667F);
  116. GlStateManager.scale(0.010416667F, -0.010416667F, 0.010416667F);
  117. GlStateManager.glNormal3f(0.0F, 0.0F, -0.010416667F);
  118. GlStateManager.depthMask(false);
  119.  
  120. if (destroyStage < 0)
  121. {
  122. for (int j = 0; j < te.signText.length; ++j)
  123. {
  124. if (te.signText[j] != null)
  125. {
  126. ITextComponent itextcomponent = te.signText[j];
  127. List<ITextComponent> list = GuiUtilRenderComponents.splitText(itextcomponent, 90, fontrenderer, false, true);
  128. String s = list != null && !list.isEmpty() ? list.get(0).getFormattedText() : "";
  129.  
  130. if (j == te.lineBeingEdited)
  131. {
  132. s = "> " + s + " <";
  133. fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, j * 10 - te.signText.length * 5, 0);
  134. }
  135. else
  136. {
  137. fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, j * 10 - te.signText.length * 5, 0);
  138. }
  139. }
  140. }
  141. }
  142.  
  143. GlStateManager.depthMask(true);
  144. GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
  145. GlStateManager.popMatrix();
  146.  
  147. if (destroyStage >= 0)
  148. {
  149. GlStateManager.matrixMode(5890);
  150. GlStateManager.popMatrix();
  151. GlStateManager.matrixMode(5888);
  152. }
  153. }
  154.  
  155. private static IBakedModel loadModel()
  156. {
  157. try
  158. {
  159. final IModel mod = ModelLoaderRegistry.getModel(new ResourceLocation(Constants.MOD_ID, "block/blockInfoPoster"));
  160. final IModelState state = mod.getDefaultState();
  161. return mod.bake(state, DefaultVertexFormats.BLOCK, ModelLoader.defaultTextureGetter());
  162. }
  163. catch (final Exception e)
  164. {
  165. Log.getLogger().error("Error loading infoPoster texture", e);
  166. }
  167. return null;
  168. }
  169.  
  170. private void renderModel(final World world, final IBakedModel model, final BlockPos pos, final int alpha)
  171. {
  172. final IBlockState actualState = ModBlocks.blockInfoPoster.getActualState(ModBlocks.blockInfoPoster.getDefaultState(), world, pos);
  173. final IBlockState iBlockExtendedState = ModBlocks.blockInfoPoster.getExtendedState(ModBlocks.blockInfoPoster.getDefaultState(), world, pos);
  174.  
  175. for (final EnumFacing facing : EnumFacing.values())
  176. {
  177. this.renderQuads(world, actualState, pos, model.getQuads(actualState, facing, 0), alpha);
  178. }
  179.  
  180. this.renderQuads(world, actualState, pos, model.getQuads(iBlockExtendedState, null, 0), alpha);
  181. }
  182.  
  183. private void renderQuads(final World world, final IBlockState actualState, final BlockPos pos, final List<BakedQuad> quads, final int alpha)
  184. {
  185. final Tessellator tessellator = Tessellator.getInstance();
  186. final VertexBuffer buffer = tessellator.getBuffer();
  187.  
  188. for (final BakedQuad quad : quads)
  189. {
  190. buffer.begin(GL11.GL_QUADS, quad.getFormat());
  191.  
  192. final int color = quad.hasTintIndex() ? this.getTint(world, actualState, pos, alpha, quad.getTintIndex()) : (alpha | 0xffffff);
  193.  
  194. LightUtil.renderQuadColor(buffer, quad, color);
  195.  
  196. tessellator.draw();
  197. }
  198. }
  199.  
  200. private int getTint(final World world, final IBlockState actualState, final BlockPos pos, final int alpha, final int tintIndex)
  201. {
  202. return alpha | Minecraft.getMinecraft().getBlockColors().colorMultiplier(actualState, world, pos, tintIndex);
  203. }
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement