Java tutorial
/* * Frozenland * * Copyright (c) 2014 kegare * https://github.com/kegare * * This mod is distributed under the terms of the Minecraft Mod Public License Japanese Translation, or MMPL_J. */ package com.kegare.frozenland.client.renderer; import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.renderer.Tessellator; import net.minecraftforge.client.IRenderHandler; import org.lwjgl.opengl.GL11; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class FrozenlandSkyRenderer extends IRenderHandler { private int starGLCallList; public FrozenlandSkyRenderer() { this.starGLCallList = GLAllocation.generateDisplayLists(3); GL11.glPushMatrix(); GL11.glNewList(starGLCallList, GL11.GL_COMPILE); renderStars(); GL11.glEndList(); GL11.glPopMatrix(); } private void renderStars() { Random random = new Random(10842L); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); for (int i = 0; i < 1500; ++i) { double d0 = random.nextFloat() * 2.0F - 1.0F; double d1 = random.nextFloat() * 2.0F - 1.0F; double d2 = random.nextFloat() * 2.0F - 1.0F; double d3 = 0.15F + random.nextFloat() * 0.1F; double d4 = d0 * d0 + d1 * d1 + d2 * d2; if (d4 < 1.0D && d4 > 0.01D) { d4 = 1.0D / Math.sqrt(d4); d0 *= d4; d1 *= d4; d2 *= d4; double d5 = d0 * 100.0D; double d6 = d1 * 100.0D; double d7 = d2 * 100.0D; double d8 = Math.atan2(d0, d2); double d9 = Math.sin(d8); double d10 = Math.cos(d8); double d11 = Math.atan2(Math.sqrt(d0 * d0 + d2 * d2), d1); double d12 = Math.sin(d11); double d13 = Math.cos(d11); double d14 = random.nextDouble() * Math.PI * 2.0D; double d15 = Math.sin(d14); double d16 = Math.cos(d14); for (int j = 0; j < 4; ++j) { double d17 = 0.0D; double d18 = ((j & 2) - 1) * d3; double d19 = ((j + 1 & 2) - 1) * d3; double d20 = d18 * d16 - d19 * d15; double d21 = d19 * d16 + d18 * d15; double d22 = d20 * d12 + d17 * d13; double d23 = d17 * d12 - d20 * d13; double d24 = d23 * d9 - d21 * d10; double d25 = d21 * d9 + d23 * d10; tessellator.addVertex(d5 + d24, d6 + d22, d7 + d25); } } } tessellator.draw(); } @Override public void render(float ticks, WorldClient world, Minecraft mc) { GL11.glPushMatrix(); GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(world.getCelestialAngle(ticks) * 360.0F, 1.0F, 0.0F, 0.0F); float color = world.getStarBrightness(ticks) * (1.0F - world.getRainStrength(ticks)); if (color > 0.0F) { GL11.glColor4f(color, color, color, color); GL11.glCallList(starGLCallList); } GL11.glPopMatrix(); } }