MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Créer un bloc sensible aux ticks

    Planifier Épinglé Verrouillé Déplacé Résolu 1.9.x et 1.10.x
    1.10.x
    7 Messages 4 Publieurs 1.2k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • Cl00e9mentC Hors-ligne
      Cl00e9ment
      dernière édition par

      version de forge : 12.18.1.2021 for Minecraft 1.10.2

      Bonjour,
      Je voudrais créer un bloc sensible aux ticks, ce que je pensais être simple à faire mais même après de nombreuses recherches je n’ai pas trouvé comment faire.
      J’ai pourtant appelé setTickRandomly(true) dans le constructeur et redéfini la méthode updateTick() mais elle n’est jamais appelée.
      Voici mon code :

      package com.trcgames.commandBlockUltra.cbuBlocks;
      
      import java.util.Random;
      
      import javax.swing.JFrame;
      
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.block.state.IBlockState;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.item.ItemStack;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.util.EnumFacing;
      import net.minecraft.util.EnumHand;
      import net.minecraft.util.math.BlockPos;
      import net.minecraft.util.text.TextComponentString;
      import net.minecraft.world.World;
      
      public class AdvancedCommandBlock extends Block{
      
       public AdvancedCommandBlock (){
      
       super (Material.IRON);
      
        setBlockUnbreakable();
        setResistance(6000000.0F);
        setUnlocalizedName ("advancedCommandBlock");
        setRegistryName ("advanced_command_block");
      
        setTickRandomly (true);
       }
      
       @Override
       public boolean hasTileEntity (IBlockState state){
        return true;
       }
      
       @Override
       public TileEntity createTileEntity (World world, IBlockState state){
        return new TileEntityAdvancedCommandBlock ();
       }
      
       @Override
       public boolean onBlockActivated (World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
      
        if (world.isRemote) return false;
      
        JFrame frame = new JFrame ("test");
        frame.setSize (500, 200);
        frame.setVisible (true);
      
        return true;
       }
      
       @Override
       public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand){
        System.out.println("test");
       }
      }
      

      Merci de votre aide.

      PS : Quand on fait un clic droit sur le bloc sans item dans la main, la méthode onBlockActivated() est appelée 2 fois côté serveur et 2 fois côté client, est-ce normal.

      1 réponse Dernière réponse Répondre Citer 0
      • BrokenSwingB Hors-ligne
        BrokenSwing Moddeurs confirmés Rédacteurs
        dernière édition par

        Je vois que tu as un TE pour ton bloc, pourquoi ne pas l’utiliser pour faire ce que tu veux ? Implémente ITickable (du package inventory) et après tu auras la fonction update()

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002R Hors-ligne
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
          dernière édition par

          Salut,
          Ton code est bon pour le tick, il n’y a pas de raison que ça ne fonctionne pas.

          La fonction onBlockActivated est appelé deux fois pour chaque côté depuis la 1.9 à cause des deux mains.
          Par contre un JFrame dans minecraft et en plus côté serveur … Pas une bonne idée.

          1 réponse Dernière réponse Répondre Citer 0
          • Cl00e9mentC Hors-ligne
            Cl00e9ment
            dernière édition par

            [size=smallJe vois que tu as un TE pour ton bloc, pourquoi ne pas l’utiliser pour faire ce que tu veux ? Implémente ITickable (du package inventory) et après tu auras la fonction update()]

            Ok merci ça fonctionne ! Par contre, il n’y a pas de “ITickable” dans le package “inventory” (du moins, pas en 1.10), j’ai pris celui du package “util”.

            [size=smallSalut,]

            [size=smallTon code est bon pour le tick, il n’y a pas de raison que ça ne fonctionne pas.]

            En fait j’ai déjà eu ce problème de méthode qui ne s’appelle pas (la dernière fois c’était les méthodes pre-init, init et post-init). J’ai donc changé de version de forge et ça a marché avec EXACTEMENT le même code.

            [size=smallLa fonction onBlockActivated est appelé deux fois pour chaque côté depuis la 1.9 à cause des deux mains.]

            Merci !

            [size=smallPar contre un JFrame dans minecraft et en plus côté serveur … Pas une bonne idée.]

            Ma JFrame est uniquement côté client :
            if (world.isRemote) return false
            J’hésite encore entre une JFrame et un GUI. Je sais que le GUI est la meilleure solution, mais il serait très difficile à faire car, je voudrais un GUI un peu comme Eclipse avec des zones d’écriture qui change de couleur automatiquement, des scrollPanes, etc…
            Est-ce possible de faire ça dans un GUI Minecraft ? Si oui j’ouvrirais un nouveau sujet pour qu’on puisse me guider.

            PS : comment je mets ce sujet en résolu ?

            1 réponse Dernière réponse Répondre Citer 0
            • jglrxavpokJ Hors-ligne
              jglrxavpok Modérateurs
              dernière édition par

              Pour mettre en résolu, il faut éditer le premier message et changer les tags.

              Pour ce qui est des zones d’écriture, c’est possible à faire avec un(e ?) GUI mais assez compliqué car il faut gérer chacune des combinaisons de touches possibles (cependant LWJGL doit pouvoir aider pour ça).
              Néanmoins, je te conseillerai d’utiliser Swing qu’en dernier recours car ça ne s’intégrera pas bien avec le jeu.

              Modérateur sur MFF. 
              Mon Github: http://github.com/jglrxavpok
              Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

              1 réponse Dernière réponse Répondre Citer 0
              • BrokenSwingB Hors-ligne
                BrokenSwing Moddeurs confirmés Rédacteurs
                dernière édition par

                Pour information :
                isRemote == est ce que le monde est distant == le monde est-t-il hébergé sur ma machine == client
                !isRemote == le contraire == serveur
                Donc quand tu fait

                
                if(word.isRemote) { //Si le monde est client
                return false; //Retourner faux, au passage même si le code ne fait rien sur un side, si il fait un action sur l'autre side mieux vaut retourner vrai
                }
                
                

                Du coup on devrait plutôt avoir :

                
                if(!world.isRemote) return true;
                
                

                Il t’est possible de faire tout ce que tu veux dans un GUI Minecraft, il suffit juste de créer les différentes fonctionnalités

                Pour mettre en résolu il te faut éditer ton premier message et changer la balise.

                PS : Et oui ITickable était peut-être pas dans inventory mais je voulais dire de ne pas prendre celui du rendu, c’était surtout pour ça (j’était pas aller voir le nom du package)

                1 réponse Dernière réponse Répondre Citer 0
                • Cl00e9mentC Hors-ligne
                  Cl00e9ment
                  dernière édition par

                  [size=smallPour information : ]
                  [size=smallisRemote == est ce que le monde est distant == le monde est-t-il hébergé sur ma machine == client]
                  [size=small!isRemote == le contraire == serveur]
                  [size=smallDonc quand tu fait ]

                  1. if(word.isRemote) { //Si le monde est client
                  2. return false;  //Retourner faux, au passage même si le code ne fait rien sur un side, si il fait un action sur l’autre side mieux vaut retourner vrai
                  3. }
                  4.  

                  [size=smallDu coup on devrait plutôt avoir :]

                  1. if(!world.isRemote) return true;
                  2.  

                  Ok merci !

                  [size=smallIl t’est possible de faire tout ce que tu veux dans un GUI Minecraft, il suffit juste de créer les différentes fonctionnalités]

                  Bon je vais m’y mettre alors.

                  [size=smallPour ce qui est des zones d’écriture, c’est possible à faire avec un(e ?) GUI mais assez compliqué car il faut gérer chacune des combinaisons de touches possibles (cependant LWJGL doit pouvoir aider pour ça).]

                  J’y avais déjà pensé (j’ai quelques bases en LWJGL). Merci !

                  1 réponse Dernière réponse Répondre Citer 0
                  • 1 / 1
                  • Premier message
                    Dernier message
                  Design by Woryk
                  ContactMentions Légales

                  MINECRAFT FORGE FRANCE © 2024

                  Powered by NodeBB