Chargement biome



  • Bonjour,

    Je voudrai savoir si c'est possible de récupérer le chargement entre chaque biome. Je m'explique quand on prend le portail du nether il y a une animation de chargement je voudrai récupérer sa pour tous les chargement tp d'un monde a l'autre etc evidament si c'est possible. Je veut juste mettre des images a la place des chargement random.

    J'ai penser a cancel l'event pour remplacer par le mien puis faire un random d'image rien de compliqué je pense mais je trouve pas l'event qui gére sa



  • Il faut annuler l'event RenderGameOverlayEvent.Pre avec une condition pour le type : if (event.type == RenderGameOverlayEvent.ElementType.PORTAL) event.setCanceled(true);



  • @'SCAREX':

    Il faut annuler l'event RenderGameOverlayEvent.Pre avec une condition pour le type : if (event.type == RenderGameOverlayEvent.ElementType.PORTAL) event.setCanceled(true);

    C'est se que j'ai fa sa donne sa

    package fr.darkvince.facrpg.menu;
    
    import com.mojang.realmsclient.gui.ChatFormatting;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.gui.ScaledResolution;
    import net.minecraft.client.renderer.Tessellator;
    import net.minecraft.client.renderer.texture.TextureManager;
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.client.event.RenderGameOverlayEvent;
    import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
    import org.lwjgl.opengl.GL11;
    import scala.util.Random;
    
    public class ClientEventHandler  extends GuiScreen
    {
     public ResourceLocation loadingscreen = new ResourceLocation("facrpg", "textures/gui/LoadingScreen.png");
     public String[] quotes = { "Test 1", "Test 12"};
     public int selector = 280;
     public boolean doneDraw = false;
    
     @SubscribeEvent
     public void loadingOverlay(RenderGameOverlayEvent event)
     {
         if (event.type == RenderGameOverlayEvent.ElementType.PORTAL)
         {
    
         event.setCanceled(true);
           ScaledResolution res = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight);
           int posX = res.getScaledWidth();
           int posY = res.getScaledHeight();
           Minecraft.getMinecraft().renderEngine.bindTexture(this.loadingscreen);
           drawTexturedRect(0, 0, 0, 0, posX, posY, posX, posY);
           if (!this.doneDraw)
           {
             this.selector = new Random().nextInt(this.quotes.length);
             this.doneDraw = true;
           }
           GL11.glPushMatrix();
           GL11.glScalef(0.5F, 0.5F, 0.5F);
           drawCenteredString(Minecraft.getMinecraft().fontRenderer, ChatFormatting.WHITE + this.quotes[this.selector], posX, posY, 0);
           GL11.glPopMatrix();
           drawCenteredString(Minecraft.getMinecraft().fontRenderer, ChatFormatting.DARK_RED + "Chargment…", posX / 2, posY / 2 + 90, 0);
    
       }
       else {
         this.doneDraw = false;
       }
     }
    
     public void drawTexturedRect(int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight)
     {
       float f = 1.0F / textureWidth;
       float f1 = 1.0F / textureHeight;
       Tessellator tessellator = Tessellator.instance;
       tessellator.startDrawingQuads();
       tessellator.addVertexWithUV(x, y + height, 0.0D, u * f, (v + height) * f1);
       tessellator.addVertexWithUV(x + width, y + height, 0.0D, (u + width) * f, (v + height) * f1);
       tessellator.addVertexWithUV(x + width, y, 0.0D, (u + width) * f, v * f1);
       tessellator.addVertexWithUV(x, y, 0.0D, u * f, v * f1);
       tessellator.draw();
     }
    }
    
    

    Probleme c'est que sa l'affiche toujours quand je suis dans le monde quand je spawn j'ai l'image constant

    http://prntscr.com/bdvg5c



  • Même quand tu sors du portail ?



  • @'SCAREX':

    Même quand tu sors du portail ?

    Je peut pas test avec un portail car j'ai directement sa affiché. Sans rien faire quand je me connecte j'ai l'image donc je voie rien



  • Sinon je pense que ce qu'il y a de plus simple c'est de passer par un EEP : https://www.minecraftforgefrance.fr/showthread.php?tid=905



  • @'SCAREX':

    Sinon je pense que ce qu'il y a de plus simple c'est de passer par un EEP : https://www.minecraftforgefrance.fr/showthread.php?tid=905

    Merci, mais je voie pas le rapport. De plus le code que j'ai ecrie ne doit pas etre très loin de marcher je voie pas pourquoi sa me change comme si c'était all que j'ai mis portail sa devrai changer juste l'animation du portail pas le reste



  • Le problème c'est que lorsque tu arrives dans ta nouvelle dimension tu as toujours l'animation du portail car tu es toujours dedans, donc le mieux ce serait d'enregistrer une variable lorsque le joueur commence à partir de la dimension et la remettre à 0 quand il arrive pour arrêter d'afficher le Gui



  • Non le problème est pas la je peut même pas allez dans la dimension car des que je me connecte dans mon monde j'ai l'image sans avoir à passer dans le portail donc il doit avoir une erreur dans le code mais je voie pas.

    Envoyé de mon SM-G928F en utilisant Tapatalk


  • Administrateurs

    Car tu ne vérifies pas que le joueur est dans un portail.



  • @'robin4002':

    Car tu ne vérifies pas que le joueur est dans un portail.

    Merci sa fait plus le bug probleme c'est qu'il s'affiche pas quand je passe le portail

    if (mc.thePlayer != null)

    je pense que sa vient du null



  • Désolé pour le double post mais depuis quelle que jours je cherche mais je suis toujours au meme endroit voilà mon code actuelle

    package fr.darkvince.facrpg.menu;
    
    import com.mojang.realmsclient.gui.ChatFormatting;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    import net.minecraft.client.Minecraft;
    import net.minecraft.client.gui.GuiScreen;
    import net.minecraft.client.gui.ScaledResolution;
    import net.minecraft.client.renderer.Tessellator;
    import net.minecraft.client.renderer.texture.TextureManager;
    import net.minecraft.util.ResourceLocation;
    import net.minecraftforge.client.event.RenderGameOverlayEvent;
    import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
    import org.lwjgl.opengl.GL11;
    import scala.util.Random;
    
    public class ClientEventHandler  extends GuiScreen
    {
     public ResourceLocation loadingscreen = new ResourceLocation("facrpg", "textures/gui/LoadingScreen.png");
     public String[] quotes = { "Test 1", "Test 12"};
     public int selector = 280;
     public boolean doneDraw = false;
     private static Minecraft mc;
    
     @SubscribeEvent
     public void loadingOverlay(RenderGameOverlayEvent.Pre event)
     {
    if (mc.thePlayer != null){
         if (event.type == RenderGameOverlayEvent.ElementType.PORTAL)
         {
    
         event.setCanceled(true);
           ScaledResolution res = new ScaledResolution(Minecraft.getMinecraft(), Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight);
           int posX = res.getScaledWidth();
           int posY = res.getScaledHeight();
           Minecraft.getMinecraft().renderEngine.bindTexture(this.loadingscreen);
           drawTexturedRect(0, 0, 0, 0, posX, posY, posX, posY);
           if (!this.doneDraw)
           {
             this.selector = new Random().nextInt(this.quotes.length);
             this.doneDraw = true;
           }
           GL11.glPushMatrix();
           GL11.glScalef(0.5F, 0.5F, 0.5F);
           drawCenteredString(Minecraft.getMinecraft().fontRenderer, ChatFormatting.WHITE + this.quotes[this.selector], posX, posY, 0);
           GL11.glPopMatrix();
           drawCenteredString(Minecraft.getMinecraft().fontRenderer, ChatFormatting.DARK_RED + "Chargment…", posX / 2, posY / 2 + 90, 0);
         }
       }
       else {
         this.doneDraw = false;
       }
     }
    
     public void drawTexturedRect(int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight)
     {
       float f = 1.0F / textureWidth;
       float f1 = 1.0F / textureHeight;
       Tessellator tessellator = Tessellator.instance;
       tessellator.startDrawingQuads();
       tessellator.addVertexWithUV(x, y + height, 0.0D, u * f, (v + height) * f1);
       tessellator.addVertexWithUV(x + width, y + height, 0.0D, (u + width) * f, (v + height) * f1);
       tessellator.addVertexWithUV(x + width, y, 0.0D, (u + width) * f, v * f1);
       tessellator.addVertexWithUV(x, y, 0.0D, u * f, v * f1);
       tessellator.draw();
     }
    }
    
    

  • Rédacteurs

    Tu ne plante pas quand le programme s'exécute ?



  • @'BrokenSwing':

    Tu ne plante pas quand le programme s'exécute ?

    EDit:

    Enfaite oui depuis peu car avant que je change je crashé plus


  • Rédacteurs

    De toute façon il n'y a aucune raison que mc.thePlayer soit autre chose que null car ta variable mc n'est pas initialisée



  • @'BrokenSwing':

    De toute façon il n'y a aucune raison que mc.thePlayer soit autre chose que null car ta variable mc n'est pas initialisée

    C'est u pourquoi sa crash a se niveau la ? if (mc.thePlayer != null){


  • Rédacteurs

    Bah oui … remplace mc par Minecraft.getMinecraft(), cela m'étonnait aussi que tu ne crash pas



  • @'BrokenSwing':

    Bah oui … remplace mc par Minecraft.getMinecraft(), cela m'étonnait aussi que tu ne crash pas

    Merci sa crash plus mais je revient a la casse départ mon chargement est la des que je créer mon monde donc je voie rien a part mon image


  • Rédacteurs

    Bah c'est simple, me semble-t-il, l'event est appelé lors du rendu :
    Tu vérifie si Minecraft.thePlayer != null or c'est pratiquement toujours vrai (il y a sûrement des cas spéciaux mais c'est même pas certains) donc personnelement je ne mettrai même pas cette condition.
    Ensuite if (event.type == RenderGameOverlayEvent.ElementType.PORTAL) tu vérifie si c'est bien l'overlay du portail, j'espère que c'est bien celui-ci que tu veux remplacer (c'est le violet du portail il me semble) parce que d'après ce que tu a montré tu veux changer l'écran de chargement entre 2 mondes (c'est là que me questionne sur la pertinance du titre du sujet). Et l'affichage de l'overlay du portail et tout le temps appelé juste il n'est pas rendu d'où le message de robin que tu n'as pas pris en compte "tu ne vérifies pas que le joueur est dans un portail"
    L'écran de chargement entre les mondes est un Gui pas un overlay



  • @'BrokenSwing':

    Bah c'est simple, me semble-t-il, l'event est appelé lors du rendu :
    Tu vérifie si Minecraft.thePlayer != null or c'est pratiquement toujours vrai (il y a sûrement des cas spéciaux mais c'est même pas certains) donc personnelement je ne mettrai même pas cette condition.
    Ensuite if (event.type == RenderGameOverlayEvent.ElementType.PORTAL) tu vérifie si c'est bien l'overlay du portail, j'espère que c'est bien celui-ci que tu veux remplacer (c'est le violet du portail il me semble) parce que d'après ce que tu a montré tu veux changer l'écran de chargement entre 2 mondes (c'est là que me questionne sur la pertinance du titre du sujet). Et l'affichage de l'overlay du portail et tout le temps appelé juste il n'est pas rendu d'où le message de robin que tu n'as pas pris en compte "tu ne vérifies pas que le joueur est dans un portail"
    L'écran de chargement entre les mondes est un Gui pas un overlay

    J'avais mis sa pour le message de robin [font=Ubuntu, sans-serifMinecraft.thePlayer != null, j'avais pensé qu'il voulais que je fasse sa en fait. Et oui je voudrai juste changer le chargement pas le portail violet]