Jump to content

Rendering an Image into the world[Solved]


Lua

Recommended Posts

Wait isnt the problem in here

public static void drawTexturedQuadFit(double x, double y, double width, double height, double zLevel)
{
	caveman = caveman.getCaveman();
	Tessellator tessellator = Tessellator.instance;
	if(caveman != null)
	{
		for(int i = 0; i < caveman.func_110138_aP(); i++)
		{
			if(caveman.func_110138_aP() > i)
			{
				tessellator.startDrawingQuads();
				tessellator.setColorOpaque(0, 255, 0);
				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.setColorOpaque(0, 255, 0);
				tessellator.draw();
			}
			else
			{
				tessellator.startDrawingQuads();
				tessellator.setColorOpaque(255, 0, 0);
				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.setColorOpaque(255, 0, 0);
				tessellator.draw();
			}
		}
	}
}

 

Because before I added that it was working

Link to comment
Share on other sites


import java.lang.reflect.Field;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.Timer;
import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.event.ForgeSubscribe;

import org.lwjgl.opengl.GL11;

import com.hydroflame.mod.ForgeRevCommonProxy;

public class HealthBarRenderer {

private Timer timer;
public HealthBarRenderer(){
	Field[] fields = Minecraft.getMinecraft().getClass().getDeclaredFields();
	for(Field field: fields){
		if(field.getType().isAssignableFrom(Timer.class)){
			field.setAccessible(true);
			try {
				timer = (Timer)field.get(Minecraft.getMinecraft());
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		}
	}
}

@ForgeSubscribe
public void renderHealthBar(RenderLivingEvent.Specials.Post event){
	float interp = timer.renderPartialTicks;
	EntityLivingBase e = event.entity;
	float healthLength = 1;//you can change the length of the health if you want
	float healthHeight = 0.25f;//and its height
	EntityPlayer p = Minecraft.getMinecraft().thePlayer;
	double diffX = e.prevPosX+interp*(e.posX-e.prevPosX) - (p.prevPosX+interp*(p.posX-p.prevPosX));
	double diffY = e.prevPosY+interp*(e.posY-e.prevPosY) - (p.prevPosY+interp*(p.posY-p.prevPosY));
	double diffZ = e.prevPosZ+interp*(e.posZ-e.prevPosZ) - (p.prevPosZ+interp*(p.posZ-p.prevPosZ));
	GL11.glPushMatrix();
	double height = event.entity.boundingBox.maxY-event.entity.boundingBox.minY+0.5;
	GL11.glTranslated(diffX, diffY+height, diffZ);
	GL11.glRotated(-p.rotationYaw, 0, 1, 0);
	GL11.glScaled(-1, 1, 1);
	Tessellator t = Tessellator.instance;
	Minecraft.getMinecraft().renderEngine.func_110577_a(ForgeRevCommonProxy.blankTexture);//make sure to change thsi to your blank texture
	float currentHealth = e.getDataWatcher().func_111145_d(6);
	float maxHealth = e.func_110138_aP();
	float sizeOfActiveHealth = healthLength*(currentHealth/maxHealth);
	GL11.glTranslated(-healthLength/2f, 0, 0);
	t.startDrawingQuads();
	t.setColorOpaque(0, 255, 0);
	t.addVertexWithUV(0, 0, 0, 0, 0);
	t.addVertexWithUV(sizeOfActiveHealth, 0, 0, 1, 0);
	t.addVertexWithUV(sizeOfActiveHealth, healthHeight, 0, 1, 1);
	t.addVertexWithUV(0, healthHeight, 0, 0, 1);
	t.draw();
	float rest = healthLength-sizeOfActiveHealth;
	GL11.glTranslated(sizeOfActiveHealth, 0, 0);
	t.startDrawingQuads();
	t.setColorOpaque(255, 0, 0);
	t.addVertexWithUV(0, 0, 0, 0, 0);
	t.addVertexWithUV(rest, 0, 0, 1, 0);
	t.addVertexWithUV(rest, healthHeight, 0, 1, 1);
	t.addVertexWithUV(0, healthHeight, 0, 0, 1);
	t.draw();
	GL11.glPopMatrix();
}
}

 

heres a health bar rendere i hacked in ~10 minute, artefact free :)

just register it and you're good to go

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

right, i made special change to the Minecraft class

 

change it to

 

float interp = 1;

 

for now, ill make the proper code later

 

i know, change it to float interp = 1; instead

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

is it my texture?

http://gyazo.com/4c72117aef825f9dbcaa98c2e1db6ce9

 

Heres my code. but yeah I think I copied everything:

	private Timer timer;

public void HealthBarRenderer()
{
	Field[] fields = Minecraft.getMinecraft().getClass().getDeclaredFields();
	for(Field field : fields)
	{
		if(field.getType().isAssignableFrom(Timer.class))
		{
			field.setAccessible(true);
			try
			{
				timer = (Timer) field.get(Minecraft.getMinecraft());
			}
			catch(IllegalArgumentException e)
			{
				e.printStackTrace();
			}
			catch(IllegalAccessException e)
			{
				e.printStackTrace();
			}
		}
	}
}

@ForgeSubscribe
public void renderCavemanHealthBar(RenderLivingEvent.Specials.Pre event)
{
	float interp = 1;
	EntityLivingBase e = event.entity;
	float healthLength = 5;//you can change the length of the health if you want
	float healthHeight = 2.0f;//and its height
	EntityPlayer p = Minecraft.getMinecraft().thePlayer;
	double diffX = e.prevPosX + interp * (e.posX - e.prevPosX) - (p.prevPosX + interp * (p.posX - p.prevPosX));
	double diffY = e.prevPosY + interp * (e.posY - e.prevPosY) - (p.prevPosY + interp * (p.posY - p.prevPosY));
	double diffZ = e.prevPosZ + interp * (e.posZ - e.prevPosZ) - (p.prevPosZ + interp * (p.posZ - p.prevPosZ));
	GL11.glPushMatrix();
	double height = event.entity.boundingBox.maxY - event.entity.boundingBox.minY + 0.5;
	GL11.glTranslated(diffX, diffY + height, diffZ);
	GL11.glRotated(- p.rotationYaw, 0, 1, 0);
	GL11.glScaled(- 1, 1, 1);
	Tessellator t = Tessellator.instance;
	FMLClientHandler.instance().getClient().renderEngine.func_110577_a(new ResourceLocation(Strings.MOD_ID, "/textures/gui/health_bar.png"));
	float currentHealth = e.getDataWatcher().func_111145_d(6);
	float maxHealth = e.func_110138_aP();
	float sizeOfActiveHealth = healthLength * (currentHealth / maxHealth);
	GL11.glTranslated(- healthLength / 2f, 0, 0);
	t.startDrawingQuads();
	t.setColorOpaque(0, 255, 0);
	t.addVertexWithUV(0, 0, 0, 0, 0);
	t.addVertexWithUV(sizeOfActiveHealth, 0, 0, 1, 0);
	t.addVertexWithUV(sizeOfActiveHealth, healthHeight, 0, 1, 1);
	t.addVertexWithUV(0, healthHeight, 0, 0, 1);
	t.draw();
	float rest = healthLength - sizeOfActiveHealth;
	GL11.glTranslated(sizeOfActiveHealth, 0, 0);
	t.startDrawingQuads();
	t.setColorOpaque(255, 0, 0);
	t.addVertexWithUV(0, 0, 0, 0, 0);
	t.addVertexWithUV(rest, 0, 0, 1, 0);
	t.addVertexWithUV(rest, healthHeight, 0, 1, 1);
	t.addVertexWithUV(0, healthHeight, 0, 0, 1);
	t.draw();
	GL11.glPopMatrix();
}

Link to comment
Share on other sites

.......

public void HealthBarRenderer()

originally was

public HealthBarRenderer()

meaning its the constructor

 

this constructor was suppose to set the timer to somethign so that shit renders well

 

please copy the WHOLE class and register it

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

to future reader, this is the final version of my health displayer, feel free to use it and change ForgeRevCommonProxy.blankTexture to a white texture 1x1

 

 

import java.lang.reflect.Field;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.Timer;
import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.event.ForgeSubscribe;

import org.lwjgl.opengl.GL11;

import com.hydroflame.mod.ForgeRevCommonProxy;

public class HealthBarRenderer {

private Timer timer;
public HealthBarRenderer(){
	Field[] fields = Minecraft.getMinecraft().getClass().getDeclaredFields();
	for(Field field: fields){
		if(field.getType().isAssignableFrom(Timer.class)){
			try {
				field.setAccessible(true);
				timer = (Timer)field.get(Minecraft.getMinecraft());
				if(timer == null){
					System.out.println("***THIS MESSAGE SHOULD NOT APPEAR, CRASH IS IMMINENT\n***DO NOT START SINGLE/MULTIPLAYER");
					try{
						throw new Exception("NULL TIMER WTFBBQ");
					}catch(Exception e){
						e.printStackTrace();
						System.out.println("please report to hydroflame with your logs (FULL LOG)");
					}
				}
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		}
	}
}

@ForgeSubscribe
public void renderHealthBar(RenderLivingEvent.Specials.Post event){
	float interp = timer.renderPartialTicks;
	EntityLivingBase e = event.entity;
	float healthLength = 1;
	float healthHeight = 0.25f;
	EntityPlayer p = Minecraft.getMinecraft().thePlayer;
	double diffX = e.prevPosX+interp*(e.posX-e.prevPosX) - (p.prevPosX+interp*(p.posX-p.prevPosX));
	double diffY = e.prevPosY+interp*(e.posY-e.prevPosY) - (p.prevPosY+interp*(p.posY-p.prevPosY));
	double diffZ = e.prevPosZ+interp*(e.posZ-e.prevPosZ) - (p.prevPosZ+interp*(p.posZ-p.prevPosZ));
	GL11.glDisable(GL11.GL_LIGHTING);
	GL11.glPushMatrix();
	double height = event.entity.boundingBox.maxY-event.entity.boundingBox.minY+0.5;
	GL11.glTranslated(diffX, diffY+height, diffZ);
	GL11.glRotated(-(p.prevRotationYaw+interp*(p.rotationYaw-p.prevRotationYaw)), 0, 1, 0);
	GL11.glRotated(p.prevRotationPitch+interp*(p.rotationPitch-p.prevRotationPitch), 1, 0, 0);
	GL11.glScaled(-1, 1, 1);
	Tessellator t = Tessellator.instance;
	Minecraft.getMinecraft().renderEngine.func_110577_a(ForgeRevCommonProxy.blankTexture);
	float currentHealth = e.getDataWatcher().func_111145_d(6);
	float maxHealth = e.func_110138_aP();
	float sizeOfActiveHealth = healthLength*(currentHealth/maxHealth);

	GL11.glTranslated(-healthLength/2f, 0, 0);

	t.startDrawingQuads();
	t.setColorOpaque(100, 205, 100);
	t.addVertexWithUV(0, 0, 0, 0, 0);
	t.addVertexWithUV(sizeOfActiveHealth, 0, 0, 1, 0);
	t.addVertexWithUV(sizeOfActiveHealth, healthHeight, 0, 1, 1);
	t.addVertexWithUV(0, healthHeight, 0, 0, 1);
	t.draw();
	float rest = healthLength-sizeOfActiveHealth;
	GL11.glTranslated(sizeOfActiveHealth, 0, 0);
	t.startDrawingQuads();
	t.setColorOpaque(255, 0, 0);
	t.addVertexWithUV(0, 0, 0, 0, 0);
	t.addVertexWithUV(rest, 0, 0, 1, 0);
	t.addVertexWithUV(rest, healthHeight, 0, 1, 1);
	t.addVertexWithUV(0, healthHeight, 0, 0, 1);
	t.draw();
	GL11.glPopMatrix();
	GL11.glEnable(GL11.GL_LIGHTING);
}
}

artefact free

you can also change the healthLength and healthHeight if you wish

 

 

well start by usign a white 1x1 texture, after that adding a border wouldn't be hard (and you can always surround everythign with a if(entity instanceof Caveman) if you dotn want to render the other entities the same way

how to debug 101:http://www.minecraftforge.net/wiki/Debug_101

-hydroflame, author of the forge revolution-

Link to comment
Share on other sites

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Compare this list (client-side-only mods) with your mods: https://www.dropbox.com/scl/fi/yeldxfv8ed60e4uflc2fi/Client-Side-Only-Modlist.xlsx?rlkey=8376c5bk7b33je2tad4p3ybrg&st=qf6osvit&dl=0  
    • Crashlog: https://paste.ee/p/WrGYD I'm thinking the problem might be a client side mod but ive already checked the mod list like 5 times and still cant find the problem
    • I'm unable to join my local forge servers. When running my forge servers of seemingly any version (tested 1.18 to 1.21.1) I get an error message [Forge Version Check/WARN] [ne.mi.fm.VersionChecker/]: Failed to process update information The server continues to start up and run, however I'm unable to join. Looking for solutions? Full error message: (note last "thead warning" error seems to be unrelated and only happened once for 1.20.1) Forge version check warning has happened for every version. [09:52:31] [Forge Version Check/WARN] [ne.mi.fm.VersionChecker/]: Failed to process update information java.net.http.HttpConnectTimeoutException: HTTP connect timed out         at jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:950) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:133) ~[java.net.http:?] {}         at net.minecraftforge.fml.VersionChecker$1.openUrlString(VersionChecker.java:142) ~[fmlcore-1.20.1-47.3.10.jar%23102!/:?] {}         at net.minecraftforge.fml.VersionChecker$1.process(VersionChecker.java:180) ~[fmlcore-1.20.1-47.3.10.jar%23102!/:?] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {}         at net.minecraftforge.fml.VersionChecker$1.run(VersionChecker.java:117) ~[fmlcore-1.20.1-47.3.10.jar%23102!/:?] {} Caused by: java.net.http.HttpConnectTimeoutException: HTTP connect timed out         at jdk.internal.net.http.ResponseTimerEvent.handle(ResponseTimerEvent.java:68) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientImpl.purgeTimeoutsAndReturnNextDeadline(HttpClientImpl.java:1788) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:1385) ~[java.net.http:?] {} Caused by: java.net.ConnectException: HTTP connect timed out         at jdk.internal.net.http.ResponseTimerEvent.handle(ResponseTimerEvent.java:69) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientImpl.purgeTimeoutsAndReturnNextDeadline(HttpClientImpl.java:1788) ~[java.net.http:?] {}         at jdk.internal.net.http.HttpClientImpl$SelectorManager.run(HttpClientImpl.java:1385) ~[java.net.http:?] {} [09:52:31] [Yggdrasil Key Fetcher/ERROR] [mojang/YggdrasilServicesKeyInfo]: Failed to request yggdrasil public key com.mojang.authlib.exceptions.AuthenticationUnavailableException: Cannot contact authentication server         at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:119) ~[authlib-4.0.43.jar%2375!/:?] {}         at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:91) ~[authlib-4.0.43.jar%2375!/:?] {}         at com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo.fetch(YggdrasilServicesKeyInfo.java:94) ~[authlib-4.0.43.jar%2375!/:?] {}         at com.mojang.authlib.yggdrasil.YggdrasilServicesKeyInfo.lambda$get$1(YggdrasilServicesKeyInfo.java:81) ~[authlib-4.0.43.jar%2375!/:?] {}         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?] {}         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) ~[?:?] {}         at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?] {}         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?] {}         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?] {}         at java.lang.Thread.run(Thread.java:1575) ~[?:?] {} Caused by: java.net.SocketTimeoutException: Connect timed out         at sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:546) ~[?:?] {}         at sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) ~[?:?] {}         at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[?:?] {}         at java.net.Socket.connect(Socket.java:760) ~[?:?] {}         at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:304) ~[?:?] {}         at sun.net.NetworkClient.doConnect(NetworkClient.java:178) ~[?:?] {}         at sun.net.www.http.HttpClient.openServer(HttpClient.java:531) ~[?:?] {}         at sun.net.www.http.HttpClient.openServer(HttpClient.java:636) ~[?:?] {}         at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264) ~[?:?] {}         at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:377) ~[?:?] {}         at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:193) ~[?:?] {}         at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1273) ~[?:?] {}         at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1114) ~[?:?] {}         at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:179) ~[?:?] {}         at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1676) ~[?:?] {}         at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1600) ~[?:?] {}         at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223) ~[?:?] {}         at com.mojang.authlib.HttpAuthenticationService.performGetRequest(HttpAuthenticationService.java:140) ~[authlib-4.0.43.jar%2375!/:?] {}         at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:96) ~[authlib-4.0.43.jar%2375!/:?] {}         ... 9 more [09:52:31] [Server thread/WARN] [minecraft/MinecraftServer]: Can't keep up! Is the server overloaded? Running 5985ms or 119 ticks behind
    • Remove the mod tempad from the mods-folder
    • Hi, deleting the config folder did not appear to work, what mod are you referring to I could try to delete to fix the problem?
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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