Advertisement
Guest User

Untitled

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