Jump to content

Recommended Posts

Posted

Ok so, I am trying to make it where the achievement thing that appears when you get an achievements appears also when you pick up my mods coin. So I found the class that makes the achievement thing happen and copied over then edited away unnecessary things. My problem is the updateGui, although my tick handler works just fine, won't seem to run. Someone please help!

 

Gui class:

 

package com.happykiller.crewmod.client.gui;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

import com.happykiller.crewmod.CrewMod;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class GuiCoinCollected extends Gui
{
    private static final ResourceLocation texAchi = new ResourceLocation("textures/gui/achievement/achievement_background.png");

    /** Holds the instance of the game (Minecraft) */
    private Minecraft theGame;

    /** Holds the latest width scaled to fit the game window. */
    private int width;

    /** Holds the latest height scaled to fit the game window. */
    private int height;
    private String headerText;
    private String coinNameText;
    
    private RenderItem renderedItem;
    
    private boolean canUpdate;

    private long unlockedTime;
    
    public GuiCoinCollected(Minecraft mc) {
    	this.theGame = mc;
    	this.renderedItem = new RenderItem();
    	this.canUpdate = false;
    }
    
    private void updateWindowScale()
    {
    	if(!theGame.theWorld.isRemote) {
    	System.out.println("STARTING WINDOW SCALE");
        GL11.glViewport(0, 0, this.theGame.displayWidth, this.theGame.displayHeight);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        this.width = this.theGame.displayWidth;
        this.height = this.theGame.displayHeight;
        ScaledResolution scaledresolution = new ScaledResolution(this.theGame, this.theGame.displayWidth, this.theGame.displayHeight);
        this.width = scaledresolution.getScaledWidth();
        this.height = scaledresolution.getScaledHeight();
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glOrtho(0.0D, (double)this.width, (double)this.height, 0.0D, 1000.0D, 3000.0D);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
    	System.out.println("ENDING WINDOW SCALE");
    	}
    }

    public void updateGui()
    {
    	if(!theGame.theWorld.isRemote) {
        if (this.unlockedTime != 0L && Minecraft.getMinecraft().thePlayer != null)
        {
        	System.out.println("PAST FIRST LINE!");
        	
            double d0 = (double)(Minecraft.getSystemTime() - this.unlockedTime) / 3000.0D;

            if (!this.canUpdate)
            {
            	System.out.println("canUpdate EQUALED FALSE!");
            	
                if (d0 < 0.0D || d0 > 1.0D)
                {
                   this.unlockedTime = 0L;
                   return;
               }
           }
            else if (d0 > 0.5D)
            {
                d0 = 0.5D;
            }
            
            System.out.println("STARTING RENDER");

            this.updateWindowScale();
            GL11.glDisable(GL11.GL_DEPTH_TEST);
            GL11.glDepthMask(false);
            double d1 = d0 * 2.0D;

            if (d1 > 1.0D)
            {
                d1 = 2.0D - d1;
            }

            d1 *= 4.0D;
            d1 = 1.0D - d1;

            if (d1 < 0.0D)
            {
                d1 = 0.0D;
            }

            d1 *= d1;
            d1 *= d1;
            int i = this.width - 160;
            int j = 0 - (int)(d1 * 36.0D);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            this.theGame.getTextureManager().bindTexture(texAchi);
            GL11.glDisable(GL11.GL_LIGHTING);
            this.drawTexturedModalRect(i, j, 96, 202, 160, 32);
            
        	System.out.println("RENDERED BOX");

            //if (this.field_146262_n)
            //{
            //    this.theGame.fontRenderer.drawSplitString(this.field_146265_j, i + 30, j + 7, 120, -1);
            //}
            //else
           // {
                this.theGame.fontRenderer.drawString(this.headerText, i + 30, j + 7, -256);
                this.theGame.fontRenderer.drawString(this.coinNameText, i + 30, j + 18, -1);
           // }

            RenderHelper.enableGUIStandardItemLighting();
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            GL11.glEnable(GL11.GL_COLOR_MATERIAL);
            GL11.glEnable(GL11.GL_LIGHTING);
            this.renderedItem.renderItemAndEffectIntoGUI(this.theGame.fontRenderer, this.theGame.getTextureManager(), new ItemStack(CrewMod.crewCoin), i + 8, j + ;
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glDepthMask(true);
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            
        	System.out.println("FINISHED RENDERING");
        }
    	}
    }
    
    public void checkUnlockTime() {
    	if(this.unlockedTime != 0) {
    		updateGui();
    	}
    }
    
    public long setUnlockTime(long amount) {
    	System.out.println("SET UNLOCK TIME TO: " + amount);
    	return this.unlockedTime = amount;
    }
    
    public void setUnlockTime() {
    	this.unlockedTime = theGame.getSystemTime() + 2500L;
    	this.canUpdate = true;
    	updateGui();
    	System.out.println("SET UNLOCK TIME TO SYSTEM TIME");
    }
}

 

Tickhandler (registered through my client proxy)

package com.happykiller.crewmod.client;

import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.multiplayer.WorldClient;

import com.happykiller.crewmod.client.gui.GuiCoinCollected;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.common.gameevent.TickEvent.RenderTickEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

@SideOnly(Side.CLIENT)
public class TickHandlerClient {
public GuiCoinCollected guiCoin;

@SubscribeEvent
public void renderTick(RenderTickEvent event) {
	Minecraft mc = Minecraft.getMinecraft();
	guiCoin = new GuiCoinCollected(mc);
	GuiScreen screen = mc.currentScreen;

	if(mc.theWorld != null) {
		WorldClient world = mc.theWorld;

		if(event.phase == Phase.START) {
			guiCoin.updateGui();
			System.out.println("START");

		}else {
			guiCoin.updateGui();
			System.out.println("END");
		}
	}
}
}

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

You wrote:

if(!theGame.theWorld.isRemote)

That checks if it is Server World.. In  rendering code!

You should remove that because rendering is only run on client side.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Posted

See, when I change it I get a "OpenGL not found in current Thread" error. Meaning, it was trying to run it server side. This problem is confusing me beyond the point of reason.

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

When I was looking through the other code of mods that use the Achievement Get overlay for something else; they never use it. So, I was thinking to just go around it like they do. Plus, I have no idea how to use that event.

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

When I was looking through the other code of mods that use the Achievement Get overlay for something else; they never use it. So, I was thinking to just go around it like they do. Plus, I have no idea how to use that event.

 

Use it like any other event and register it in your client proxy to register it on your client side.

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Posted

But, how would I be able to make the overlay appear? Even by using that event my problem would still persist.

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

But, how would I be able to make the overlay appear? Even by using that event my problem would still persist.

 

Do this:

1. Make a class that extends Gui

2. In that class have the RenderGameOverlayEvent

3. Register the gui class in the ClientProxy

4. In the RenderGameOverlayEvent have whatever you want to do if your gui class says to(have a boolean doRender or something): rendering text, pictures,etc.

 

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Posted

So, like this?

 

@SideOnly(Side.CLIENT)
public class GuiCoinCollected extends Gui
{
    private static final ResourceLocation texAchi = new ResourceLocation("textures/gui/achievement/achievement_background.png");

    /** Holds the instance of the game (Minecraft) */
    private Minecraft theGame;

    /** Holds the latest width scaled to fit the game window. */
    private int width;

    /** Holds the latest height scaled to fit the game window. */
    private int height;
    private String headerText;
    private String coinNameText;
    
    private RenderItem renderedItem;
    
    private boolean canUpdate;

    private long unlockedTime;
    
    public GuiCoinCollected(Minecraft mc) {
    	this.theGame = mc;
    	this.renderedItem = new RenderItem();
    	this.canUpdate = false;
    }
    
    private void updateWindowScale()
    {
    	//if(!theGame.theWorld.isRemote) {
    	System.out.println("STARTING WINDOW SCALE");
        GL11.glViewport(0, 0, this.theGame.displayWidth, this.theGame.displayHeight);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        this.width = this.theGame.displayWidth;
        this.height = this.theGame.displayHeight;
        ScaledResolution scaledresolution = new ScaledResolution(this.theGame, this.theGame.displayWidth, this.theGame.displayHeight);
        this.width = scaledresolution.getScaledWidth();
        this.height = scaledresolution.getScaledHeight();
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glOrtho(0.0D, (double)this.width, (double)this.height, 0.0D, 1000.0D, 3000.0D);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
    	System.out.println("ENDING WINDOW SCALE");
    	//}
    }
    
    @SubscribeEvent(priority = EventPriority.NORMAL)
    public void onRenderExperienceBar(RenderGameOverlayEvent event) {
    	if(event.isCancelable() || event.type != ElementType.EXPERIENCE) {
    		return;
    	}
    	
    	updateGui();
    }

    public void updateGui() {
    	//if(!theGame.theWorld.isRemote) {
        if (this.unlockedTime != 0L && Minecraft.getMinecraft().thePlayer != null)
        {
        	System.out.println("PAST FIRST LINE!");
        	
            double d0 = (double)(Minecraft.getSystemTime() - this.unlockedTime) / 3000.0D;

            if (!this.canUpdate)
            {
            	System.out.println("canUpdate EQUALED FALSE!");
            	
                if (d0 < 0.0D || d0 > 1.0D)
                {
                   this.unlockedTime = 0L;
                   return;
               }
           }
            else if (d0 > 0.5D)
            {
                d0 = 0.5D;
            }
            
            System.out.println("STARTING RENDER");

            this.updateWindowScale();
            GL11.glDisable(GL11.GL_DEPTH_TEST);
            GL11.glDepthMask(false);
            double d1 = d0 * 2.0D;

            if (d1 > 1.0D)
            {
                d1 = 2.0D - d1;
            }

            d1 *= 4.0D;
            d1 = 1.0D - d1;

            if (d1 < 0.0D)
            {
                d1 = 0.0D;
            }

            d1 *= d1;
            d1 *= d1;
            int i = this.width - 160;
            int j = 0 - (int)(d1 * 36.0D);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            this.theGame.getTextureManager().bindTexture(texAchi);
            GL11.glDisable(GL11.GL_LIGHTING);
            this.drawTexturedModalRect(i, j, 96, 202, 160, 32);
            
        	System.out.println("RENDERED BOX");

            //if (this.field_146262_n)
            //{
            //    this.theGame.fontRenderer.drawSplitString(this.field_146265_j, i + 30, j + 7, 120, -1);
            //}
            //else
           // {
                this.theGame.fontRenderer.drawString(this.headerText, i + 30, j + 7, -256);
                this.theGame.fontRenderer.drawString(this.coinNameText, i + 30, j + 18, -1);
           // }

            RenderHelper.enableGUIStandardItemLighting();
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            GL11.glEnable(GL11.GL_COLOR_MATERIAL);
            GL11.glEnable(GL11.GL_LIGHTING);
            this.renderedItem.renderItemAndEffectIntoGUI(this.theGame.fontRenderer, this.theGame.getTextureManager(), new ItemStack(CrewMod.crewCoin), i + 8, j + ;
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glDepthMask(true);
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            
        	System.out.println("FINISHED RENDERING");
        }
    	//}
    }
    
    public void checkUnlockTime() {
    	if(this.unlockedTime != 0) {
    		updateGui();
    	}
    }
    
    public long setUnlockTime(long amount) {
    	System.out.println("SET UNLOCK TIME TO: " + amount);
    	return this.unlockedTime = amount;
    }
    
    public void setUnlockTime() {
    	this.unlockedTime = theGame.getSystemTime() + 2500L;
    	this.canUpdate = true;
    	updateGui();
    	System.out.println("SET UNLOCK TIME TO SYSTEM TIME");
    }
}

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

So, like this?

 

@SideOnly(Side.CLIENT)
public class GuiCoinCollected extends Gui
{
    private static final ResourceLocation texAchi = new ResourceLocation("textures/gui/achievement/achievement_background.png");

    /** Holds the instance of the game (Minecraft) */
    private Minecraft theGame;

    /** Holds the latest width scaled to fit the game window. */
    private int width;

    /** Holds the latest height scaled to fit the game window. */
    private int height;
    private String headerText;
    private String coinNameText;
    
    private RenderItem renderedItem;
    
    private boolean canUpdate;

    private long unlockedTime;
    
    public GuiCoinCollected(Minecraft mc) {
    	this.theGame = mc;
    	this.renderedItem = new RenderItem();
    	this.canUpdate = false;
    }
    
    private void updateWindowScale()
    {
    	//if(!theGame.theWorld.isRemote) {
    	System.out.println("STARTING WINDOW SCALE");
        GL11.glViewport(0, 0, this.theGame.displayWidth, this.theGame.displayHeight);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        this.width = this.theGame.displayWidth;
        this.height = this.theGame.displayHeight;
        ScaledResolution scaledresolution = new ScaledResolution(this.theGame, this.theGame.displayWidth, this.theGame.displayHeight);
        this.width = scaledresolution.getScaledWidth();
        this.height = scaledresolution.getScaledHeight();
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glOrtho(0.0D, (double)this.width, (double)this.height, 0.0D, 1000.0D, 3000.0D);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
    	System.out.println("ENDING WINDOW SCALE");
    	//}
    }
    
    @SubscribeEvent(priority = EventPriority.NORMAL)
    public void onRenderExperienceBar(RenderGameOverlayEvent event) {
    	if(event.isCancelable() || event.type != ElementType.EXPERIENCE) {
    		return;
    	}
    	
    	updateGui();
    }

    public void updateGui() {
    	//if(!theGame.theWorld.isRemote) {
        if (this.unlockedTime != 0L && Minecraft.getMinecraft().thePlayer != null)
        {
        	System.out.println("PAST FIRST LINE!");
        	
            double d0 = (double)(Minecraft.getSystemTime() - this.unlockedTime) / 3000.0D;

            if (!this.canUpdate)
            {
            	System.out.println("canUpdate EQUALED FALSE!");
            	
                if (d0 < 0.0D || d0 > 1.0D)
                {
                   this.unlockedTime = 0L;
                   return;
               }
           }
            else if (d0 > 0.5D)
            {
                d0 = 0.5D;
            }
            
            System.out.println("STARTING RENDER");

            this.updateWindowScale();
            GL11.glDisable(GL11.GL_DEPTH_TEST);
            GL11.glDepthMask(false);
            double d1 = d0 * 2.0D;

            if (d1 > 1.0D)
            {
                d1 = 2.0D - d1;
            }

            d1 *= 4.0D;
            d1 = 1.0D - d1;

            if (d1 < 0.0D)
            {
                d1 = 0.0D;
            }

            d1 *= d1;
            d1 *= d1;
            int i = this.width - 160;
            int j = 0 - (int)(d1 * 36.0D);
            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            this.theGame.getTextureManager().bindTexture(texAchi);
            GL11.glDisable(GL11.GL_LIGHTING);
            this.drawTexturedModalRect(i, j, 96, 202, 160, 32);
            
        	System.out.println("RENDERED BOX");

            //if (this.field_146262_n)
            //{
            //    this.theGame.fontRenderer.drawSplitString(this.field_146265_j, i + 30, j + 7, 120, -1);
            //}
            //else
           // {
                this.theGame.fontRenderer.drawString(this.headerText, i + 30, j + 7, -256);
                this.theGame.fontRenderer.drawString(this.coinNameText, i + 30, j + 18, -1);
           // }

            RenderHelper.enableGUIStandardItemLighting();
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            GL11.glEnable(GL11.GL_COLOR_MATERIAL);
            GL11.glEnable(GL11.GL_LIGHTING);
            this.renderedItem.renderItemAndEffectIntoGUI(this.theGame.fontRenderer, this.theGame.getTextureManager(), new ItemStack(CrewMod.crewCoin), i + 8, j + ;
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glDepthMask(true);
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            
        	System.out.println("FINISHED RENDERING");
        }
    	//}
    }
    
    public void checkUnlockTime() {
    	if(this.unlockedTime != 0) {
    		updateGui();
    	}
    }
    
    public long setUnlockTime(long amount) {
    	System.out.println("SET UNLOCK TIME TO: " + amount);
    	return this.unlockedTime = amount;
    }
    
    public void setUnlockTime() {
    	this.unlockedTime = theGame.getSystemTime() + 2500L;
    	this.canUpdate = true;
    	updateGui();
    	System.out.println("SET UNLOCK TIME TO SYSTEM TIME");
    }
}

I don't see anything wrong with it at first glance. Run it and tell us if anything goes wrong.

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Posted

So it all runs (the print outs show) but its not seeming to draw the box. Any input?

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

So it all runs (the print outs show) but its not seeming to draw the box. Any input?

Don't use drawTexturedModalRect use this:

 

public static void drawTexturedQuadFit(double x, double y, double width, double height, double zLevel){
	Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV(x + 0, y + height, zLevel, 0,1); 
        tessellator.addVertexWithUV(x + width, y + height, zLevel, 1, 1);
        tessellator.addVertexWithUV(x + width, y + 0, zLevel, 1,0);
        tessellator.addVertexWithUV(x + 0, y + 0, zLevel, 0, 0);
        tessellator.draw();
}

And call that whenever you need to instead of the drawTexturedModalRect

I dont think it will help with your problem but ok..

 

Try putting the box at 0,0 and see if that works...

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Posted

So, that worked! But, the UV is off. I'm not good with Tess so, how would I change the UV?

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

The last two parameters of Tessellator#addVertexWithUV is the UV value, so you can change that.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Posted

Of course you have to modify the size.. It is simple, you just need to modify width and height.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Posted

Ok, so that works but, I can't draw text on the screen. D: Any input?

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

I forgot to add text to the strings. xD My last problem is my main one. I can't seem to call updateGui() when picking up my coin. Here are my classes:

 

GuiCoinCollected

@SideOnly(Side.CLIENT)
public class GuiCoinCollected extends Gui
{
    private static final ResourceLocation texAchi = new ResourceLocation(MR.TNAME + "textures/gui/coin_collected.png");

    /** Holds the instance of the game (Minecraft) */
    private Minecraft theGame;

    /** Holds the latest width scaled to fit the game window. */
    private int width;

    /** Holds the latest height scaled to fit the game window. */
    private int height;
    private String headerText;
    private String coinNameText;
    
    private RenderItem renderedItem;
    
    private boolean canUpdate;

    private long unlockedTime;
    
    public GuiCoinCollected(Minecraft mc) {
    	this.theGame = mc;
    	this.renderedItem = new RenderItem();
    	this.canUpdate = false;
    	this.headerText = "Coin Collected!";
    	this.coinNameText = "x ";
    }
    
    private void updateWindowScale() {
    	//if(!theGame.theWorld.isRemote) {
    	System.out.println("STARTING WINDOW SCALE");
        GL11.glViewport(0, 0, this.theGame.displayWidth, this.theGame.displayHeight);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        this.width = this.theGame.displayWidth;
        this.height = this.theGame.displayHeight;
        ScaledResolution scaledresolution = new ScaledResolution(this.theGame, this.theGame.displayWidth, this.theGame.displayHeight);
        this.width = scaledresolution.getScaledWidth();
        this.height = scaledresolution.getScaledHeight();
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glOrtho(0.0D, (double)this.width, (double)this.height, 0.0D, 1000.0D, 3000.0D);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
    	System.out.println("ENDING WINDOW SCALE");
    	//}
    }
    
    @SubscribeEvent(priority = EventPriority.NORMAL)
    public void onRenderExperienceBar(RenderGameOverlayEvent event) {
    	if(event.isCancelable() || event.type != ElementType.EXPERIENCE) {
    		return;
    	}
    	
    	//testUpdate();
    	
    	//if(this.canUpdate) {
        //	updateGui();
    	//}
    	
    	updateGui();
    }

    public void updateGui() {
    	//if(!theGame.theWorld.isRemote) {
        if (this.unlockedTime != 0L && Minecraft.getMinecraft().thePlayer != null) {
        	System.out.println("PAST FIRST LINE!");
        	
            double d0 = (double)(Minecraft.getSystemTime() - this.unlockedTime) / 3000.0D;

            if (!this.canUpdate) {
            	System.out.println("canUpdate EQUALED FALSE!");
            	
                if (d0 < 0.0D || d0 > 1.0D) {
                   this.unlockedTime = 0L;
                   return;
                }
           }else if (d0 > 0.5D) {
                d0 = 0.5D;
           }
            
            
           System.out.println("STARTING RENDER");

           this.updateWindowScale();
           GL11.glDisable(GL11.GL_DEPTH_TEST);
           GL11.glDepthMask(false);
           double d1 = d0 * 2.0D;

           if (d1 > 1.0D) {
        	   d1 = 2.0D - d1;
           }

           d1 *= 4.0D;
           d1 = 1.0D - d1;

           if (d1 < 0.0D) {
        	   d1 = 0.0D;
           }

           d1 *= d1;
           d1 *= d1;
           int i = this.width - 160;
           int j = 0 - (int)(d1 * 36.0D);
           GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
           GL11.glEnable(GL11.GL_TEXTURE_2D);
           this.theGame.getTextureManager().bindTexture(texAchi);
           GL11.glDisable(GL11.GL_LIGHTING);
           this.drawTexturedQuadFit(0, 0, 160, 32, 0);
           //this.drawTexturedModalRect(i, j, 96, 202, 160, 32);
            
           System.out.println("RENDERED BOX");

           if (this.canUpdate) {
        	   this.theGame.fontRenderer.drawSplitString(this.headerText, i + 30, j + 7, 120, -1);
           }else {
        	   this.theGame.fontRenderer.drawString(this.headerText, i + 30, j + 7, -256);
        	   this.theGame.fontRenderer.drawString(this.coinNameText, i + 30, j + 18, -1);
           }
            

            RenderHelper.enableGUIStandardItemLighting();
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            GL11.glEnable(GL11.GL_COLOR_MATERIAL);
            GL11.glEnable(GL11.GL_LIGHTING);
            this.renderedItem.renderItemAndEffectIntoGUI(this.theGame.fontRenderer, this.theGame.getTextureManager(), new ItemStack(CrewMod.crewCoin), i + 8, j + ;
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glDepthMask(true);
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            
        	System.out.println("FINISHED RENDERING");
        }
    	//}
    }
    
    public void testUpdate() {
    	System.out.println("STARTING RENDER");
    	
    	double d0 = 0.5D;
    	
        this.updateWindowScale();
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glDepthMask(false);
        double d1 = d0 * 2.0D;

        if (d1 > 1.0D)
        {
            d1 = 2.0D - d1;
        }

        d1 *= 4.0D;
        d1 = 1.0D - d1;

        if (d1 < 0.0D)
        {
            d1 = 0.0D;
        }

        d1 *= d1;
        d1 *= d1;
        int i = this.width - 160;
        int j = 0 - (int)(d1 * 36.0D);
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        this.theGame.getTextureManager().bindTexture(texAchi);
        GL11.glDisable(GL11.GL_LIGHTING);
        //this.drawTexturedQuadFit(0, 0, 160, 32, 50);
        this.drawTexturedModalRect(i - 50, j, 0, 0, 160, 32);
        
        this.theGame.fontRenderer.drawString(this.headerText, 30, 7, -256);
        this.theGame.fontRenderer.drawString(this.coinNameText, 30, 18, -1);
        
        System.out.println("FINISHED RENDER");
    }
    
    public static void drawTexturedQuadFit(double x, double y, double width, double height, double zLevel){
	Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV(x + 0, y + height, zLevel, 0,1); 
        tessellator.addVertexWithUV(x + width, y + height, zLevel, 1, 1);
        tessellator.addVertexWithUV(x + width, y + 0, zLevel, 1,0);
        tessellator.addVertexWithUV(x + 0, y + 0, zLevel, 0, 0);
        tessellator.draw();
}
    
    public void checkUnlockTime() {
    	if(this.unlockedTime != 0) {
    		updateGui();
    	}
    }
    
    public long setUnlockTime(long amount) {
    	System.out.println("SET UNLOCK TIME TO: " + amount);
    	return this.unlockedTime = amount;
    }
    
    public void setUnlockTime() {
    	this.unlockedTime = theGame.getSystemTime() + 2500L;
    	this.canUpdate = true;
    	//updateGui();
    	System.out.println("SET UNLOCK TIME TO SYSTEM TIME");
    }
}

 

EventHandler:

public class CrewEventHandler {

@SubscribeEvent
public void notifyPickup(ItemPickupEvent event) {
	Minecraft mc = Minecraft.getMinecraft();
	GuiCoinCollected guiCoin = new GuiCoinCollected(mc);

	if(event.pickedUp.getEntityItem().isItemEqual(new ItemStack(CrewMod.crewCoin))) {
		event.player.inventory.consumeInventoryItem(CrewMod.crewCoin);	
		CoinKeeper.addCoin(event.player);
		PacketRegistry.network.sendTo(new PacketCoinChangeClient(event.player, CoinKeeper.getCoinAmount(event.player)), (EntityPlayerMP)event.player);

		if(!event.player.worldObj.isRemote) {
			guiCoin.setUnlockTime();
			System.out.println("CLIENT WORLD GOTTEN AND SET UNLOCK TIME");
		}
		//guiCoin.checkUnlockTime();
		//System.out.println("Ran Correctly! Your current coin total is: " + CoinKeeper.getCoinAmount(event.player));
	}
}
}

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

14bhv1y.jpg

 

Remove all Minecraft references from everything. (Only Gui class can use them, because it is client-sided)

 

1. When player picks-up coin, you will update value on server-side holder and send packet telling to open GUI and with new value.

2. On MessageHandler you will update client's value of Coin count and open gui.

3. Gui will use that value (client one).

 

Note: Since coins are per-player: USE IEEP (IExtendedEntityProperties)

http://www.minecraftforum.net/forums/mapping-and-modding/mapping-and-modding-tutorials/1571567-1-7-2-1-6-4-eventhandler-and

2nd post in thread.

 

Also:

if(!event.player.worldObj.isRemote) {
			guiCoin.setUnlockTime();
			System.out.println("CLIENT WORLD GOTTEN AND SET UNLOCK TIME");
		}

 

!isRemote - this is server.

isRemote - this is client.

 

Note 2:

Don't declare new ItemStack - just check item instance and add stack.stackSize

1.7.10 is no longer supported by forge, you are on your own.

Posted

Ok so, that works! But, I can't seem to get it to call the update method more than once.

 

Gui Class:

@SideOnly(Side.CLIENT)
public class GuiCoinCollected extends Gui
{
    private static final ResourceLocation texAchi = new ResourceLocation(MR.TNAME + "textures/gui/coin_collected.png");

    /** Holds the instance of the game (Minecraft) */
    private Minecraft theGame;

    /** Holds the latest width scaled to fit the game window. */
    private int width;

    /** Holds the latest height scaled to fit the game window. */
    private int height;
    private String headerText;
    private String coinNameText;
    
    private RenderItem renderedItem;
    
    private boolean canUpdate;

    private long unlockedTime;
    
    public GuiCoinCollected(Minecraft mc) {
    	this.theGame = mc;
    	this.renderedItem = new RenderItem();
    	this.canUpdate = false;
    	this.headerText = "Coin Collected!";
    	this.coinNameText = "x ";
    }
    
    private void updateWindowScale() {
    	//if(!theGame.theWorld.isRemote) {
    	System.out.println("STARTING WINDOW SCALE");
        GL11.glViewport(0, 0, this.theGame.displayWidth, this.theGame.displayHeight);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        this.width = this.theGame.displayWidth;
        this.height = this.theGame.displayHeight;
        ScaledResolution scaledresolution = new ScaledResolution(this.theGame, this.theGame.displayWidth, this.theGame.displayHeight);
        this.width = scaledresolution.getScaledWidth();
        this.height = scaledresolution.getScaledHeight();
        GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);
        GL11.glMatrixMode(GL11.GL_PROJECTION);
        GL11.glLoadIdentity();
        GL11.glOrtho(0.0D, (double)this.width, (double)this.height, 0.0D, 1000.0D, 3000.0D);
        GL11.glMatrixMode(GL11.GL_MODELVIEW);
        GL11.glLoadIdentity();
        GL11.glTranslatef(0.0F, 0.0F, -2000.0F);
    	System.out.println("ENDING WINDOW SCALE");
    	//}
    }
    
    @SubscribeEvent(priority = EventPriority.NORMAL)
    public void onRenderExperienceBar(RenderGameOverlayEvent event) {
    	if(event.isCancelable() || event.type != ElementType.EXPERIENCE) {
    		return;
    	}
    	
    	//testUpdate();
    	
    	//if(this.canUpdate) {
        //	updateGui();
    	//}
    	
    	updateGui();
    }

    public void updateGui() {
    	//if(!theGame.theWorld.isRemote) {
        if (this.unlockedTime != 0L && Minecraft.getMinecraft().thePlayer != null) {
        	System.out.println("PAST FIRST LINE!");
        	
            double d0 = (double)(Minecraft.getSystemTime() - this.unlockedTime) / 3000.0D;

            if (!this.canUpdate) {
            	System.out.println("canUpdate EQUALED FALSE!");
            	
                if (d0 < 0.0D || d0 > 1.0D) {
                   this.unlockedTime = 0L;
                   return;
                }
           }else if (d0 > 0.5D) {
                d0 = 0.5D;
           }
            
            
           System.out.println("STARTING RENDER");

           this.updateWindowScale();
           GL11.glDisable(GL11.GL_DEPTH_TEST);
           GL11.glDepthMask(false);
           double d1 = d0 * 2.0D;

           if (d1 > 1.0D) {
        	   d1 = 2.0D - d1;
           }

           d1 *= 4.0D;
           d1 = 1.0D - d1;

           if (d1 < 0.0D) {
        	   d1 = 0.0D;
           }

           d1 *= d1;
           d1 *= d1;
           int i = this.width - 160;
           int j = 0 - (int)(d1 * 36.0D);
           GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
           GL11.glEnable(GL11.GL_TEXTURE_2D);
           this.theGame.getTextureManager().bindTexture(texAchi);
           GL11.glDisable(GL11.GL_LIGHTING);
           this.drawTexturedQuadFit(0, 0, 160, 32, 0);
           this.drawTexturedModalRect(i - 50, j, 0, 0, 160, 32);
            
           System.out.println("RENDERED BOX");

           if (this.canUpdate) {
        	   this.theGame.fontRenderer.drawSplitString(this.headerText, i + 30, j + 7, 120, -1);
           }else {
        	   this.theGame.fontRenderer.drawString(this.headerText, 30, 7, -256);
               this.theGame.fontRenderer.drawString(this.coinNameText, 30, 18, -1);
           }
            

            RenderHelper.enableGUIStandardItemLighting();
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glEnable(GL12.GL_RESCALE_NORMAL);
            GL11.glEnable(GL11.GL_COLOR_MATERIAL);
            GL11.glEnable(GL11.GL_LIGHTING);
            this.renderedItem.renderItemAndEffectIntoGUI(this.theGame.fontRenderer, this.theGame.getTextureManager(), new ItemStack(CrewMod.crewCoin), i + 8, j + ;
            GL11.glDisable(GL11.GL_LIGHTING);
            GL11.glDepthMask(true);
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            
        	System.out.println("FINISHED RENDERING");
        }
    	//}
    }
    
    public void testUpdate() {
    	System.out.println("STARTING RENDER");
    	
    	double d0 = 0.5D;
    	
        this.updateWindowScale();
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glDepthMask(false);
        double d1 = d0 * 2.0D;

        if (d1 > 1.0D)
        {
            d1 = 2.0D - d1;
        }

        d1 *= 4.0D;
        d1 = 1.0D - d1;

        if (d1 < 0.0D)
        {
            d1 = 0.0D;
        }

        d1 *= d1;
        d1 *= d1;
        int i = this.width - 160;
        int j = 0 - (int)(d1 * 36.0D);
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        this.theGame.getTextureManager().bindTexture(texAchi);
        GL11.glDisable(GL11.GL_LIGHTING);
        //this.drawTexturedQuadFit(0, 0, 160, 32, 50);
        this.drawTexturedModalRect(i - 50, j, 0, 0, 160, 32);
        
        this.theGame.fontRenderer.drawString(this.headerText, 30, 7, -256);
        this.theGame.fontRenderer.drawString(this.coinNameText, 30, 18, -1);
        
        System.out.println("FINISHED RENDER");
    }
    
    public static void drawTexturedQuadFit(double x, double y, double width, double height, double zLevel){
	Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV(x + 0, y + height, zLevel, 0,1); 
        tessellator.addVertexWithUV(x + width, y + height, zLevel, 1, 1);
        tessellator.addVertexWithUV(x + width, y + 0, zLevel, 1,0);
        tessellator.addVertexWithUV(x + 0, y + 0, zLevel, 0, 0);
        tessellator.draw();
}
    
    public void checkUnlockTime() {
    	if(this.unlockedTime != 0) {
    		updateGui();
    	}
    }
    
    public long setUnlockTime(long amount) {
    	System.out.println("SET UNLOCK TIME TO: " + amount);
    	return this.unlockedTime = amount;
    }
    
    public void setUnlockTime() {
    	this.unlockedTime = theGame.getSystemTime() + 2500L;
    	this.canUpdate = true;
    	//updateGui();
    	System.out.println("SET UNLOCK TIME TO SYSTEM TIME");
    }
}

 

EventHandler Class:

public class CrewEventHandler {

@SubscribeEvent
public void notifyPickup(ItemPickupEvent event) {
	if(event.pickedUp.getEntityItem().isItemEqual(new ItemStack(CrewMod.crewCoin))) {
		event.player.inventory.consumeInventoryItem(CrewMod.crewCoin);	
		CoinKeeper.addCoin(event.player);
		PacketRegistry.network.sendTo(new PacketCoinChangeClient(event.player, CoinKeeper.getCoinAmount(event.player)),(EntityPlayerMP)event.player);
	}
}
}

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

Uhm what?

public void onRenderExperienceBar(RenderGameOverlayEvent event)
{
    updateGui();
}

This will LITERALLY call updateGui() every frame-render. What is your problem?

Look at IEEP tutorial - you need to store coins per-player OR inside some static field.

 

I don't have time now to write all tutorial on this, but Skype: ernio333    I'll be ON in 14hours.

 

If you want to figure it faster - you hold 2 different values per client and server, server updates it and sends new value to client along with info that GUI should do whatever it does. Gui should be rendered ALWAYS (updateGui() is called every frame) and use clien-side value. E.g if you want something to display only when coins change you set some boolean in Gui class that will change to true after receiving packet of coin change, then to get it back to false you can use ClientTickEvent (i think it has phases, so check that also).

1.7.10 is no longer supported by forge, you are on your own.

Posted

My coinkeeper class uses player ID's in a HashMap to store the gold info so, no worries. But, I have used the tick handler and, no matter if it sets a boolean or not; the updateGui() is only called once. I put it in the render method as a test for the display so, ignore that. xD All I want it to do is, when you pick up a coin, like when getting an achievement; the box in the top right corner of the screen displays with the info.

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

Didi you register that event? ;_;

 

MinecraftForge.EVENT_BUS.register(new ClassContainingSubscribeEventWithRenderGameOverlayEvent());

 

...in client proxy.

 

Edit: EVENTS SHOULD BE IN SEPARATE CLASS.

1.7.10 is no longer supported by forge, you are on your own.

Posted

Yes I registered it in my ClientProxy xD

 

public class ClientProxy extends CommonProxy {
public void initialize() {
	super.initialize();
	FMLCommonHandler.instance().bus().register(new TickHandlerClient());
	MinecraftForge.EVENT_BUS.register(new GuiCoinCollected(Minecraft.getMinecraft()));
	System.out.println("CLIENT PROXY REGISTERED ALL THINGS");
}
}

 

Like I said, it runs once but only once. These are the times I wish the creator of Java was a door away. xD

I am not a cat. I know my profile picture is sexy and amazing beyond anything you could imagine but my cat like features only persist in my fierce eyes. I might be a cat.

Posted

Did you specifically done this:

@SubscribeEvent
public void onRenderExperienceBar(RenderGameOverlayEvent event)
{
    updateGui();
}

 

Because if not, no wonder it is not passing:

if(event.isCancelable() || event.type != ElementType.EXPERIENCE) {
    		return;
    	}

1.7.10 is no longer supported by forge, you are on your own.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.