Welcome on MasterOf13FPS! MasterOf13FPS

Register today or sign up if you are already a member and never miss any cool content again :)

Potions ingame rendern

MasterOf13FPS

Administrator
Staff member
Administrator
MasterOf13FPS
Joined
Jul 11, 2020
Messages
0
Reaction score
26
Points
0
Alsoo ich habe mich mal daran veruscht die Potioneffects zu rendern:
Code:
  for(PotionEffect potionEffect : Minecraft.getMinecraft().player.getActivePotionEffects()) {
                Minecraft.getMinecraft().fontRendererObj.drawString(potionEffect.getEffectName(), 60, y, 0xabadad);
                activePotions.add(potionEffect.getEffectName());
                if(index < Minecraft.getMinecraft().player.getActivePotionEffects().size()) {
                    y = y +6;

                    index++;

                }
            }

Ist sehr unordentlich undso, ich wollte nur eben ein Bild dafür bekommen. Was jetzt bei mir das problem ist, dass anscheinend jedes mal wenn der Potion die durability ändert, er als neuer PotionEffect in die collection kommt, auf jeden fall wird y dauerhaft +6 gerechnet (Darum auch das mit dem index, dass y nicht unendlich oft +6 gerechnet wird)...Jetzt ist das problem das der erste Potion Effekt auf 100 gerendert wird und der 2. auf 106, aber bei dem nächsten mal wenn die for schleife durchgerechnet wird, wird der 1. effekt auch auf 106 gerendert... Keine Ahnung ob man was verstanden hat, wenn jemand die Frage nicht versteht erkläre ich sie gerne nochmal... Danke im Vorraus.
 
Alsoo ich habe mich mal daran veruscht die Potioneffects zu rendern:
Code:
  for(PotionEffect potionEffect : Minecraft.getMinecraft().player.getActivePotionEffects()) {
                Minecraft.getMinecraft().fontRendererObj.drawString(potionEffect.getEffectName(), 60, y, 0xabadad);
                activePotions.add(potionEffect.getEffectName());
                if(index < Minecraft.getMinecraft().player.getActivePotionEffects().size()) {
                    y = y +6;

                    index++;

                }
            }

Ist sehr unordentlich undso, ich wollte nur eben ein Bild dafür bekommen. Was jetzt bei mir das problem ist, dass anscheinend jedes mal wenn der Potion die durability ändert, er als neuer PotionEffect in die collection kommt, auf jeden fall wird y dauerhaft +6 gerechnet (Darum auch das mit dem index, dass y nicht unendlich oft +6 gerechnet wird)...Jetzt ist das problem das der erste Potion Effekt auf 100 gerendert wird und der 2. auf 106, aber bei dem nächsten mal wenn die for schleife durchgerechnet wird, wird der 1. effekt auch auf 106 gerendert... Keine Ahnung ob man was verstanden hat, wenn jemand die Frage nicht versteht erkläre ich sie gerne nochmal... Danke im Vorraus.
  1. Du kannst die index Variable entfernen, genauso wie die if Abfrage welche diese enthält.
  2. Du hast y wahrscheinlich als Feld deklariert, eine lokale Variable reicht aber.
  3. Wozu ist denn das hier? activePotions.add(potionEffect.getEffectName())
    Das kommt mir etwas sinnlos vor.
 
Du kannst die index Variable entfernen, genauso wie die if Abfrage welche diese enthält.
Verstehe ich gerade was falsch? Weil wenn die if abfrage nicht mehr da ist wird y die ganze zeit + 6 gerechnet und so halt nur so oft wie effekte gerade aktiv sind.

Du hast y wahrscheinlich als Feld deklariert, eine lokale Variable reicht aber.
Ja hatte ich, aber das ändert an dem Problem nichts:
GKU1GTenTVaysUHtrUMdhg.png


So sieht es halt aus wenn 2 Effekte aktiv sind, normal sollten die ja untereinander auftauchen.


Wozu ist denn das hier? activePotions.add(potionEffect.getEffectName())
Das kommt mir etwas sinnlos vor.
Ja ist es, habe da nur was ausprobiert
 
Verstehe ich gerade was falsch? Weil wenn die if abfrage nicht mehr da ist wird y die ganze zeit + 6 gerechnet und so halt nur so oft wie effekte gerade aktiv sind.
Ein foreach loop (bei einem Iterable) hört von alleine auf, wenn der iterator keine Elemente mehr besitzt.

Achja, du kannst einfach y += 6 nehmen, ich würde aber statt 6 lieber 10 oder so nehmen, da die standardmäßige Größe der Minecraft Font 9 beträgt.

Wenn es immer noch nicht funktioniert, kannst du ja mal den kompletten Code schicken.
 
Ein foreach loop (bei einem Iterable) hört von alleine auf, wenn der iterator keine Elemente mehr besitzt.

Achja, du kannst einfach y += 6 nehmen, ich würde aber statt 6 lieber 10 oder so nehmen, da die standardmäßige Größe der Minecraft Font 9 beträgt.

Wenn es immer noch nicht funktioniert, kannst du ja mal den kompletten Code schicken.
Das ist eigentlich alles, ich mache eine for schleife, und rendere den namen auf dem bildschirm und danach rechne ich y += 6;

Ich denke, dass problem ist, dass die schleife bei dem 2DrenderEvent durchgeführt wird, heißt der erste potion ist auf 100, der zweite auf 106, dann kommt die loop von neu und weil y ja auf 106 ist wird beides auf 106 gerendert.
 
Das ist eigentlich alles, ich mache eine for schleife, und rendere den namen auf dem bildschirm und danach rechne ich y += 6;

Ich denke, dass problem ist, dass die schleife bei dem 2DrenderEvent durchgeführt wird, heißt der erste potion ist auf 100, der zweite auf 106, dann kommt die loop von neu und weil y ja auf 106 ist wird beides auf 106 gerendert.
Also ist es ein Feld und keine lokale Variable?
 
Das ist eigentlich alles, ich mache eine for schleife, und rendere den namen auf dem bildschirm und danach rechne ich y += 6;

Ich denke, dass problem ist, dass die schleife bei dem 2DrenderEvent durchgeführt wird, heißt der erste potion ist auf 100, der zweite auf 106, dann kommt die loop von neu und weil y ja auf 106 ist wird beides auf 106 gerendert.
Also ist es ein Feld und keine lokale Variable?
 
Schick mal den kompletten Code.


Code:
private static ArrayList<String>activePotions = new ArrayList<>();
int index = 1;
int y = 100;


public HUD() {
    EventManager.register(this);
}


@EventTarget
public void onRender(Render2DEvent event) {

for(PotionEffect potionEffect : Minecraft.getMinecraft().player.getActivePotionEffects()) {
    Minecraft.getMinecraft().fontRendererObj.drawString(potionEffect.getEffectName(), 60, y, 0xabadad);
    activePotions.add(potionEffect.getEffectName());
    if(index < Minecraft.getMinecraft().player.getActivePotionEffects().size()) {
        y = y +10;

        index++;

    }
}
}

Das ist der Code vom Anfang, da war es noch ein Feld.
 
Entfern doch mal alles was mit index und activePotions zu tun hat.
Code:
public void onRender(Render2DEvent event) {
private int y = 100;
//...
}
Der Code kann doch nicht mal kompilieren, wie willst du es denn dann getestet haben!?
Schick mir dann den Code.
 
Entfern doch mal alles was mit index und activePotions zu tun hat.
Code:
public void onRender(Render2DEvent event) {
private int y = 100;
//...
}
Der Code kann doch nicht mal kompilieren, wie willst du es denn dann getestet haben!?
Schick mir dann den Code.
Code:
package infou.gui;

import com.darkmagician6.eventapi.EventManager;
import com.darkmagician6.eventapi.EventTarget;
import infou.events.Render2DEvent;
import infou.events.UpdateEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.math.BlockPos;
import org.lwjgl.opengl.GL11;


/**
 * Created by on 13.08.2017.
 */
public class HUD {



    int y = 100;

    private static double onlineTime = 0;

    @EventTarget
    public void onUpdate(UpdateEvent event) {
        onlineTime = onlineTime + 0.05;


    }


    public HUD() {
        EventManager.register(this);
    }

    @EventTarget
    public void onRender(Render2DEvent event) {

        if (!Minecraft.getMinecraft().gameSettings.showDebugInfo) {

            //Unnötig
            int onlineSeconds = (int) onlineTime;
            int onlineMinutes = 0;
            int onlineHours = 0;
            ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
            GL11.glPushMatrix();
            GL11.glScalef(1.4F, 1.4F, 1.4F);
            Minecraft.getMinecraft().fontRendererObj.drawString("I", 1, 1, 0xba0505);
            GL11.glPopMatrix();
            Minecraft.getMinecraft().fontRendererObj.drawString("nfou", 6, 3, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("Online Seit:", 1, 12, 0xba0505);

            while (onlineSeconds > 59) {
                onlineMinutes = onlineMinutes + 1;
                onlineSeconds = onlineSeconds - 59;

                while (onlineMinutes > 59) {
                    onlineMinutes = 0;
                    onlineHours = onlineHours + 1;
                }
            }

            Minecraft.getMinecraft().fontRendererObj.drawString(Integer.toString(onlineHours)
                    + "h " + Integer.toString(onlineMinutes) + "m " + Integer.toString(onlineSeconds) + "s", 55, 12, 0xabadad);



            Minecraft.getMinecraft().fontRendererObj.drawString(Minecraft.getMinecraft().player.world.getBiome(new BlockPos(Minecraft.getMinecraft().player.posX,Minecraft.getMinecraft().player.posY, Minecraft.getMinecraft().player.posZ)).getBiomeName(), 1, 36, 0xabadad);
            //Unnötig







            //PotionStuff
            for(PotionEffect potionEffect : Minecraft.getMinecraft().player.getActivePotionEffects()) {
                Minecraft.getMinecraft().fontRendererObj.drawString(potionEffect.getEffectName(), 60, y, 0xabadad);
                    y = y +10;
                }
            }
            //PotionStuff





            //Unnötig
            Minecraft.getMinecraft().fontRendererObj.drawString( Minecraft.getMinecraft().getCurrentServerData().serverIP, 12, 20, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("IP:", 1, 20, 0xba0505);


            Minecraft.getMinecraft().fontRendererObj.drawString(Long.toString(Minecraft.getMinecraft().getCurrentServerData().pingToServer),
                    23, 30, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("Ping:",
                    1, 30, 0xba0505);

            //Unnötig

        }
    
}
 
Entfern doch mal alles was mit index und activePotions zu tun hat.
Code:
public void onRender(Render2DEvent event) {
private int y = 100;
//...
}
Der Code kann doch nicht mal kompilieren, wie willst du es denn dann getestet haben!?
Schick mir dann den Code.
Code:
package infou.gui;

import com.darkmagician6.eventapi.EventManager;
import com.darkmagician6.eventapi.EventTarget;
import infou.events.Render2DEvent;
import infou.events.UpdateEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.math.BlockPos;
import org.lwjgl.opengl.GL11;


/**
 * Created by on 13.08.2017.
 */
public class HUD {



    int y = 100;

    private static double onlineTime = 0;

    @EventTarget
    public void onUpdate(UpdateEvent event) {
        onlineTime = onlineTime + 0.05;


    }


    public HUD() {
        EventManager.register(this);
    }

    @EventTarget
    public void onRender(Render2DEvent event) {

        if (!Minecraft.getMinecraft().gameSettings.showDebugInfo) {

            //Unnötig
            int onlineSeconds = (int) onlineTime;
            int onlineMinutes = 0;
            int onlineHours = 0;
            ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
            GL11.glPushMatrix();
            GL11.glScalef(1.4F, 1.4F, 1.4F);
            Minecraft.getMinecraft().fontRendererObj.drawString("I", 1, 1, 0xba0505);
            GL11.glPopMatrix();
            Minecraft.getMinecraft().fontRendererObj.drawString("nfou", 6, 3, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("Online Seit:", 1, 12, 0xba0505);

            while (onlineSeconds > 59) {
                onlineMinutes = onlineMinutes + 1;
                onlineSeconds = onlineSeconds - 59;

                while (onlineMinutes > 59) {
                    onlineMinutes = 0;
                    onlineHours = onlineHours + 1;
                }
            }

            Minecraft.getMinecraft().fontRendererObj.drawString(Integer.toString(onlineHours)
                    + "h " + Integer.toString(onlineMinutes) + "m " + Integer.toString(onlineSeconds) + "s", 55, 12, 0xabadad);



            Minecraft.getMinecraft().fontRendererObj.drawString(Minecraft.getMinecraft().player.world.getBiome(new BlockPos(Minecraft.getMinecraft().player.posX,Minecraft.getMinecraft().player.posY, Minecraft.getMinecraft().player.posZ)).getBiomeName(), 1, 36, 0xabadad);
            //Unnötig







            //PotionStuff
            for(PotionEffect potionEffect : Minecraft.getMinecraft().player.getActivePotionEffects()) {
                Minecraft.getMinecraft().fontRendererObj.drawString(potionEffect.getEffectName(), 60, y, 0xabadad);
                    y = y +10;
                }
            }
            //PotionStuff





            //Unnötig
            Minecraft.getMinecraft().fontRendererObj.drawString( Minecraft.getMinecraft().getCurrentServerData().serverIP, 12, 20, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("IP:", 1, 20, 0xba0505);


            Minecraft.getMinecraft().fontRendererObj.drawString(Long.toString(Minecraft.getMinecraft().getCurrentServerData().pingToServer),
                    23, 30, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("Ping:",
                    1, 30, 0xba0505);

            //Unnötig

        }
  
}

Das wichtige ist mit //PotionStuff markiert
 
int y = 100;
Jetzt noch als lokale Variable wie ich es geschrieben habe.

Entfern das 'static' von onlineTime.
Und du kannst die Zeit zu der du insgesamt online warst viel leichter und akkurater anzeigen:
Deklariere ein Feld vom typ long mit dem Namen "onlineSince".
Dem Feld kannst du dann ab dem Punkt, wo du online bist System.currentTimeMillis() zuordnen.
Danach deklarierst du noch ein Feld vom Typ DateFormat, welchem du zum Beispiel eine Instanz von SimpleDateFormat zuordnest.
Nun wenn du die Zeit rendern willst, kannst du einen einzigen String rendern.
formattedDifference = dateFormat.format(difference)
Die Differenz kannst du wohl selbst berechnen.
 
Jetzt noch als lokale Variable wie ich es geschrieben habe.

Entfern das 'static' von onlineTime.
Und du kannst die Zeit zu der du insgesamt online warst viel leichter und akkurater anzeigen:
Deklariere ein Feld vom typ long mit dem Namen "onlineSince".
Dem Feld kannst du dann ab dem Punkt, wo du online bist System.currentTimeMillis() zuordnen.
Danach deklarierst du noch ein Feld vom Typ DateFormat, welchem du zum Beispiel eine Instanz von SimpleDateFormat zuordnest.
Nun wenn du die Zeit rendern willst, kannst du einen einzigen String rendern.
formattedDifference = dateFormat.format(difference)
Die Differenz kannst du wohl selbst berechnen.
Vielen dank für den Tipp, leider funktioniert das mit der lokalen variable trotzdem nicht... Jetzt wird y wieder die ganze zeit +10 gerechnet..
 
Schau dir doch an, wie Minecraft selbst die Effekte im Inventar rendert.
Ich habe keine Ahnung warum, aber wenn ich es in meiner HUD Klasse oder in der GUIIngame klasse rendern lassen will, auch wenn es nur drawString ist, werden alle Icons von den Potions (außer das erste) fehlerhaft, woran kann das liegen?


//EDIT: Habs hinbekomen
 
Last edited by a moderator:
Code:
package infou.gui;

import com.darkmagician6.eventapi.EventManager;
import com.darkmagician6.eventapi.EventTarget;
import infou.events.Render2DEvent;
import infou.events.UpdateEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.math.BlockPos;
import org.lwjgl.opengl.GL11;


/**
 * Created by on 13.08.2017.
 */
public class HUD {



    int y = 100;

    private static double onlineTime = 0;

    @EventTarget
    public void onUpdate(UpdateEvent event) {
        onlineTime = onlineTime + 0.05;


    }


    public HUD() {
        EventManager.register(this);
    }

    @EventTarget
    public void onRender(Render2DEvent event) {

        if (!Minecraft.getMinecraft().gameSettings.showDebugInfo) {

            //Unnötig
            int onlineSeconds = (int) onlineTime;
            int onlineMinutes = 0;
            int onlineHours = 0;
            ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
            GL11.glPushMatrix();
            GL11.glScalef(1.4F, 1.4F, 1.4F);
            Minecraft.getMinecraft().fontRendererObj.drawString("I", 1, 1, 0xba0505);
            GL11.glPopMatrix();
            Minecraft.getMinecraft().fontRendererObj.drawString("nfou", 6, 3, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("Online Seit:", 1, 12, 0xba0505);

            while (onlineSeconds > 59) {
                onlineMinutes = onlineMinutes + 1;
                onlineSeconds = onlineSeconds - 59;

                while (onlineMinutes > 59) {
                    onlineMinutes = 0;
                    onlineHours = onlineHours + 1;
                }
            }

            Minecraft.getMinecraft().fontRendererObj.drawString(Integer.toString(onlineHours)
                    + "h " + Integer.toString(onlineMinutes) + "m " + Integer.toString(onlineSeconds) + "s", 55, 12, 0xabadad);



            Minecraft.getMinecraft().fontRendererObj.drawString(Minecraft.getMinecraft().player.world.getBiome(new BlockPos(Minecraft.getMinecraft().player.posX,Minecraft.getMinecraft().player.posY, Minecraft.getMinecraft().player.posZ)).getBiomeName(), 1, 36, 0xabadad);
            //Unnötig







            //PotionStuff
            for(PotionEffect potionEffect : Minecraft.getMinecraft().player.getActivePotionEffects()) {
                Minecraft.getMinecraft().fontRendererObj.drawString(potionEffect.getEffectName(), 60, y, 0xabadad);
                    y = y +10;
                }
            }
            //PotionStuff





            //Unnötig
            Minecraft.getMinecraft().fontRendererObj.drawString( Minecraft.getMinecraft().getCurrentServerData().serverIP, 12, 20, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("IP:", 1, 20, 0xba0505);


            Minecraft.getMinecraft().fontRendererObj.drawString(Long.toString(Minecraft.getMinecraft().getCurrentServerData().pingToServer),
                    23, 30, 0xabadad);

            Minecraft.getMinecraft().fontRendererObj.drawString("Ping:",
                    1, 30, 0xba0505);

            //Unnötig

        }
 
}

Das wichtige ist mit //PotionStuff markiert
Kann mir jmd den die Render2DEvent schicken?
 
shape1
shape2
shape3
shape4
shape5
shape6
Back
Top