Advertisement
Guest User

Untitled

a guest
Sep 13th, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.51 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. GlStateManager.rotate(actualState.getValue(BlockWallSign.FACING).getHorizontalAngle(), 0.0F, 0.0F, 0.0F);
  74.  
  75. for (final BlockRenderLayer layer : BlockRenderLayer.values())
  76. {
  77. if (ModBlocks.blockInfoPoster.canRenderInLayer(actualState, layer))
  78. {
  79. for (int i = 0; i < 2; i++)
  80. {
  81. GlStateManager.pushMatrix();
  82. GlStateManager.translate(x, y + YOFFSET, z);
  83. if (i != 0)
  84. {
  85. GlStateManager.rotate(180, 0, 0, 0);
  86. }
  87.  
  88. if (layer == BlockRenderLayer.CUTOUT)
  89. {
  90. Minecraft.getMinecraft().getTextureManager().getTexture(SIGN_TEXTURE).setBlurMipmap(false, false);
  91. }
  92. RenderHelper.disableStandardItemLighting();
  93.  
  94. Minecraft.getMinecraft().getTextureManager().bindTexture(SIGN_TEXTURE);
  95. GlStateManager.color(1F, 1F, 1F, 1F);
  96.  
  97. final int alpha = ((int) (1.0D * 0xFF)) << 24;
  98.  
  99. GlStateManager.enableBlend();
  100. GlStateManager.enableTexture2D();
  101.  
  102. GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
  103. GlStateManager.colorMask(false, false, false, false);
  104. this.renderModel(world, model, pos, alpha);
  105.  
  106. GlStateManager.colorMask(true, true, true, true);
  107. GlStateManager.depthFunc(GL11.GL_LEQUAL);
  108. this.renderModel(world, model, pos, alpha);
  109.  
  110. if (layer == BlockRenderLayer.CUTOUT)
  111. {
  112. Minecraft.getMinecraft().getTextureManager().getTexture(SIGN_TEXTURE).restoreLastBlurMipmap();
  113. }
  114.  
  115. GlStateManager.disableBlend();
  116. GlStateManager.popMatrix();
  117. }
  118. }
  119. }
  120.  
  121.  
  122. GlStateManager.enableRescaleNormal();
  123. GlStateManager.pushMatrix();
  124. final FontRenderer fontrenderer = this.getFontRenderer();
  125. GlStateManager.translate(0.0F, 0.33333334F, 0.046666667F);
  126. GlStateManager.scale(0.010416667F, -0.010416667F, 0.010416667F);
  127. GlStateManager.glNormal3f(0.0F, 0.0F, -0.010416667F);
  128. GlStateManager.depthMask(false);
  129.  
  130. if (destroyStage < 0)
  131. {
  132. for (int j = 0; j < te.signText.length; ++j)
  133. {
  134. if (te.signText[j] != null)
  135. {
  136. ITextComponent itextcomponent = te.signText[j];
  137. List<ITextComponent> list = GuiUtilRenderComponents.splitText(itextcomponent, 90, fontrenderer, false, true);
  138. String s = list != null && !list.isEmpty() ? list.get(0).getFormattedText() : "";
  139.  
  140. if (j == te.lineBeingEdited)
  141. {
  142. s = "> " + s + " <";
  143. fontrenderer.drawString(s, -fontrenderer.getStringWidth(s) / 2, j * 10 - te.signText.length * 5, 0);
  144. }
  145. else
  146. {
  147. fontrenderer.drawString(s + "halla", -fontrenderer.getStringWidth(s) / 2, j * 10 - te.signText.length * 5, 0);
  148. }
  149. }
  150. }
  151. }
  152.  
  153. GlStateManager.depthMask(true);
  154. GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
  155. GlStateManager.popMatrix();
  156. }
  157.  
  158. private static IBakedModel loadModel()
  159. {
  160. try
  161. {
  162. final IModel mod = ModelLoaderRegistry.getModel(new ResourceLocation(Constants.MOD_ID, "block/blockInfoPoster"));
  163. final IModelState state = mod.getDefaultState();
  164. return mod.bake(state, DefaultVertexFormats.BLOCK, ModelLoader.defaultTextureGetter());
  165. }
  166. catch (final Exception e)
  167. {
  168. Log.getLogger().error("Error loading infoPoster texture", e);
  169. }
  170. return null;
  171. }
  172.  
  173. private void renderModel(final World world, final IBakedModel model, final BlockPos pos, final int alpha)
  174. {
  175. final IBlockState state = world.getBlockState(pos);
  176. final IBlockState actualState = state.getBlock().getActualState(state, world, pos);
  177. final IBlockState iBlockExtendedState = state.getBlock().getExtendedState(state, world, pos);
  178.  
  179. for (final EnumFacing facing : EnumFacing.values())
  180. {
  181. this.renderQuads(world, actualState, pos, model.getQuads(actualState, facing, 0), alpha);
  182. }
  183.  
  184. this.renderQuads(world, actualState, pos, model.getQuads(iBlockExtendedState, null, 0), alpha);
  185. }
  186.  
  187. private void renderQuads(final World world, final IBlockState actualState, final BlockPos pos, final List<BakedQuad> quads, final int alpha)
  188. {
  189. final Tessellator tessellator = Tessellator.getInstance();
  190. final VertexBuffer buffer = tessellator.getBuffer();
  191.  
  192. for (final BakedQuad quad : quads)
  193. {
  194. buffer.begin(GL11.GL_QUADS, quad.getFormat());
  195.  
  196. final int color = quad.hasTintIndex() ? this.getTint(world, actualState, pos, alpha, quad.getTintIndex()) : (alpha | 0xffffff);
  197.  
  198. LightUtil.renderQuadColor(buffer, quad, color);
  199.  
  200. tessellator.draw();
  201. }
  202. }
  203.  
  204. private int getTint(final World world, final IBlockState actualState, final BlockPos pos, final int alpha, final int tintIndex)
  205. {
  206. return alpha | Minecraft.getMinecraft().getBlockColors().colorMultiplier(actualState, world, pos, tintIndex);
  207. }
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement