Advertisement
Guest User

Untitled

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