Posted March 29, 201312 yr Im trying to render an overlay when the player is in a block. The block is a new liquid and what im trying to do works to a point, however when the liquid is visible on the screen, the overlay renders which obviously I do not want, I just want it to render the overlay if the player is in the block. Here is the code BlockACStill package arcticraft.blocks; import net.minecraft.block.BlockStationary; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.Entity; import net.minecraft.src.ModLoader; import net.minecraft.util.Icon; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import arcticraft.main.MainRegistry; public class BlockACWaterStill extends BlockStationary { public static boolean isFreezing; public BlockACWaterStill(int par1) { super(par1, Material.water); this.blockHardness = 100F; this.setLightOpacity(4); this.disableStats(); } @Override public void registerIcons(IconRegister par1IconRegister) { this.blockIcon = par1IconRegister.registerIcon("AC:icyWater"); } public Icon getBlockTextureFromSideAndMetadata(int side, int meta) { if (side > 1) return BlockACWaterFlowing.waterFlowingTexture; return blockIcon; } /** * Triggered whenever an entity collides with this block (enters into the block). Args: world, x, y, z, entity */ public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity) { if(par5Entity.isInsideOfMaterial(Material.water)){ isFreezing = true; } else{ isFreezing = false; } } public static void renderFreezeEffect(int par1, int par2, Minecraft mc) { if(isFreezing) { Minecraft mc8 = ModLoader.getMinecraftInstance(); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDepthMask(false); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc8.renderEngine.getTexture("/mods/AC/textures/misc/freezing.png")); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV(0.0D, par2, -90D, 0.0D, 1.0D); tessellator.addVertexWithUV(par1, par2, -90D, 1.0D, 1.0D); tessellator.addVertexWithUV(par1, 0.0D, -90D, 1.0D, 0.0D); tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D); tessellator.draw(); GL11.glDepthMask(true); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.currentScreen = null; } } } BlockACWaterFlowing package arcticraft.blocks; import net.minecraft.block.BlockFlowing; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.Entity; import net.minecraft.src.ModLoader; import net.minecraft.util.Icon; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import arcticraft.main.MainRegistry; public class BlockACWaterFlowing extends BlockFlowing { public static boolean isFreezing; public static Icon waterFlowingTexture; public BlockACWaterFlowing(int par1) { super(par1, Material.water); this.blockHardness = 100F; this.setLightOpacity(4); this.disableStats(); this.setCreativeTab(MainRegistry.tabBlocks); } @Override public void registerIcons(IconRegister par1IconRegister) { waterFlowingTexture = par1IconRegister.registerIcon("AC:icyWaterFlowing"); } public Icon getBlockTextureFromSideAndMetadata(int side, int meta) { return waterFlowingTexture; } public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity) { if (par5Entity.isInsideOfMaterial(Material.water)) { isFreezing = true; } else { isFreezing = false; } } public static void renderFreezeEffect(int par1, int par2, Minecraft mc) { if (isFreezing) { Minecraft mc8 = ModLoader.getMinecraftInstance(); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDepthMask(false); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc8.renderEngine.getTexture("/mods/AC/textures/misc/freezing.png")); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.addVertexWithUV(0.0D, par2, -90D, 0.0D, 1.0D); tessellator.addVertexWithUV(par1, par2, -90D, 1.0D, 1.0D); tessellator.addVertexWithUV(par1, 0.0D, -90D, 1.0D, 0.0D); tessellator.addVertexWithUV(0.0D, 0.0D, -90D, 0.0D, 0.0D); tessellator.draw(); GL11.glDepthMask(true); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.currentScreen = null; } } } TickHandler package arcticraft.main; import java.util.EnumSet; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.src.ModLoader; import org.lwjgl.input.Keyboard; import arcticraft.blocks.BlockACWaterFlowing; import arcticraft.blocks.BlockACWaterStill; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.ITickHandler; import cpw.mods.fml.common.TickType; public class TickHandler implements ITickHandler { Minecraft mc = FMLClientHandler.instance().getClient(); @Override public void tickStart(EnumSet<TickType> type, Object... tickData) { if (type.equals(EnumSet.of(TickType.RENDER))) { float ticks = ((Float)tickData[0]).floatValue(); onRenderTickStart(ticks); } } @Override public void tickEnd(EnumSet<TickType> type, Object... tickData) { if (type.equals(EnumSet.of(TickType.PLAYER))) { EntityPlayer player = (EntityPlayer)tickData[0]; } else if (type.equals(EnumSet.of(TickType.RENDER))) { float ticks = ((Float)tickData[0]).floatValue(); onRenderTickEnd(ticks); GuiScreen guiscreen = Minecraft.getMinecraft().currentScreen; if (guiscreen != null && ModLoader.getMinecraftInstance().thePlayer != null) { onTickInGUI(guiscreen); } } else if (type.equals(EnumSet.of(TickType.CLIENT))) { if(ModLoader.getMinecraftInstance().thePlayer != null){onTickInGame();} } } @Override public EnumSet<TickType> ticks() { return EnumSet.of(TickType.RENDER, TickType.CLIENT, TickType.PLAYER); // In my testing only RENDER, CLIENT, & PLAYER did anything on the client side. // Read 'cpw.mods.fml.common.TickType.java' for a full list and description of available types } @Override public String getLabel() { return null; } private boolean keyStates[]; /**Key checking function**/ public boolean checkKey(int i) { keyStates = new boolean[256]; if(ModLoader.getMinecraftInstance().currentScreen != null) { return false; } if(Keyboard.isKeyDown(i) != keyStates[i]) { return keyStates[i] = !keyStates[i]; } else { return false; } } public void onRenderTickStart(float ticks) { } public void onRenderTickEnd(float ticks) { ScaledResolution var5 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); int var6 = var5.getScaledWidth(); int var7 = var5.getScaledHeight(); if(mc.currentScreen == null) { BlockACWaterFlowing.renderFreezeEffect(var6, var7, mc); BlockACWaterStill.renderFreezeEffect(var6, var7, mc); } } public void onTickInGUI(GuiScreen gui) { } public void onTickInGame() { } }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.