• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • S'inscrire
  • Se connecter
  • Recherche
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes

Résolu Créer un bloc sensible aux ticks

1.9.x et 1.10.x
1.10.x
4
7
1.1k
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.
  • Cl00e9ment
    Cl00e9ment dernière édition par 30 juil. 2016, 20:23

    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
    • BrokenSwing
      BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 30 juil. 2016, 22:35

      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
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 30 juil. 2016, 23:21

        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
        • Cl00e9ment
          Cl00e9ment dernière édition par 31 juil. 2016, 07:39

          [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
          • jglrxavpok
            jglrxavpok Modérateurs dernière édition par 31 juil. 2016, 08:26

            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
            • BrokenSwing
              BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 31 juil. 2016, 08:31

              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
              • Cl00e9ment
                Cl00e9ment dernière édition par 31 juil. 2016, 09:33

                [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
                1 sur 7
                • Premier message
                  1/7
                  Dernier message
                Design by Woryk
                Contact / Mentions Légales

                MINECRAFT FORGE FRANCE © 2018

                Powered by NodeBB