Guest User

Untitled

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