• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    [1.6.4]Un tile entity qui se reset à chaque fois que je recharge mon monde

    Sans suite
    3
    13
    2470
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Portuar last edited by

      bonjour minecraft forge france!

      Alors voila j’ai crée un block qui possède un tileentity afin qu’il soit unique ce que j’entend par unique c’est qu’il comporte des donnés propre a lui même à titre d’exemple j’ai deux même block cote à cote, quand je clique sur l’un seul lui s’active et non les deux enfin bref mon problème est que les information du tileentity change à chaque clique mais quand je reset le monde donc que je déco reco et bah les informations reviennent à zero et certain boolean s’active sans raison alors qu’ils sont sur false !

      Merci d’avance pour vos réponses !

      voici le block

      
      package monsterhuntercraft.block;
      
      import java.util.Random;
      
      import monsterhuntercraft.Gui.GuiDrop;
      import net.minecraft.block.Block;
      import net.minecraft.block.BlockContainer;
      import net.minecraft.block.material.Material;
      import net.minecraft.client.Minecraft;
      import net.minecraft.client.entity.EntityPlayerSP;
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.entity.player.EntityPlayerMP;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.world.World;
      import cpw.mods.fml.client.FMLClientHandler;
      
      public class BlockDrop extends BlockContainer
      {
      
      public BlockDrop(int par1)
      {
      super(par1, Material.wood);
      }
      
      /**
      * Called when the block is placed in the world.
      */
      public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack)
      {
      TileEntityBlockDrop tileEntityBlock = (TileEntityBlockDrop)par1World.getBlockTileEntity(par2, par3, par4);
      Random rand = new Random();
      tileEntityBlock.upNumber = rand.nextInt(2);
      tileEntityBlock.upNumber = tileEntityBlock.upNumber + 2;
      tileEntityBlock.timeUntilNextDrop = rand.nextInt(40000);
      tileEntityBlock.timeUntilNextDrop = tileEntityBlock.timeUntilNextDrop + 40000;
      
      }
      
      /**
      * Called upon block activation (right click on the block.)
      */
      public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
      {
      TileEntityBlockDrop tileEntityBlock = (TileEntityBlockDrop)par1World.getBlockTileEntity(par2, par3, par4);
      System.out.println("dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
      tileEntityBlock.isClicked = true;
      return true;
      }
      
      /**
      * Udapte fonction
      */
      protected void dropUdapte(World par1World, int par2, int par3, int par4, String par5NameItem, int par6ItemID, Item par7Item)
      {
      TileEntityBlockDrop tileEntityBlock = (TileEntityBlockDrop)par1World.getBlockTileEntity(par2, par3, par4);
      Random rand = new Random();
      
      final Minecraft minecraft = FMLClientHandler.instance().getClient();
      final EntityPlayerSP par5EntityPlayer = minecraft.thePlayer;
      
      if(tileEntityBlock.upNumber == 0)
      {
      tileEntityBlock.timeUntilNextDrop–;
      }
      
      System.out.println("\nisClicked " + tileEntityBlock.isClicked);
      System.out.println("upNumber " + tileEntityBlock.upNumber);
      System.out.println("timeUntilNextDrop " + tileEntityBlock.timeUntilNextDrop);
      
      if(tileEntityBlock != null && tileEntityBlock.upNumber > 0 && tileEntityBlock.isClicked == true)
      {
      tileEntityBlock.isClicked = false;
      Minecraft.getMinecraft().displayGuiScreen(new GuiDrop(Minecraft.getMinecraft(), par5EntityPlayer, par5NameItem, 5));
      ItemStack itemstack = par5EntityPlayer.inventory.getCurrentItem();
      
      minecraft.thePlayer.dropPlayerItem(new ItemStack(par6ItemID, 1, 0));
      
      /*
      if(!(par5EntityPlayer.inventory.hasItem(par7Item.itemID)));
      {
      par5EntityPlayer.inventory.addItemStackToInventory(new ItemStack(par7Item, 1, 0));
      }
      */
      
      tileEntityBlock.upNumber--;
      }
      else
      {
      tileEntityBlock.isClicked = false;
      }
      
      if(tileEntityBlock.timeUntilNextDrop == 0)
      {
      tileEntityBlock.upNumber = rand.nextInt(2);
      tileEntityBlock.upNumber = tileEntityBlock.upNumber + 2;
      }
      
      }
      
      /**
      * Returns the ID of the items to drop on destruction.
      */
      public int idDropped(int par1, Random par2Random, int par3)
      {
      return 0;
      }
      
      /**
      * Returns the quantity of items to drop on block destruction.
      */
      public int quantityDropped(Random par1Random)
      {
      return 1;
      }
      
      @Override
      public TileEntity createNewTileEntity(World world)
      {
      return new TileEntityBlockDrop();
      }
      
      }
      
      

      et le tile entity

      
      package monsterhuntercraft.block;
      
      import java.util.Random;
      
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.item.Item;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraft.network.INetworkManager;
      import net.minecraft.network.packet.Packet;
      import net.minecraft.network.packet.Packet132TileEntityData;
      import net.minecraft.tileentity.TileEntity;
      
      public class TileEntityBlockDrop extends TileEntity
      {
      boolean isClicked = false;
      int upNumber, timeUntilNextDrop;
      
      @Override
      public void updateEntity()
      {
      super.updateEntity();
      }
      
      @Override
      public void readFromNBT(NBTTagCompound par1NBTTagCompound)
      {
      super.readFromNBT(par1NBTTagCompound);
      
      this.isClicked = par1NBTTagCompound.getBoolean("isClicked");
      this.upNumber = par1NBTTagCompound.getInteger("upNumber");
      this.timeUntilNextDrop = par1NBTTagCompound.getInteger("timeUntilNextDrop");
      }
      
      @Override
      public void writeToNBT(NBTTagCompound par1NBTTagCompound)
      {
      super.writeToNBT(par1NBTTagCompound);
      
      par1NBTTagCompound.setBoolean("isClicked", this.isClicked);
      par1NBTTagCompound.setInteger("upNumber", this.upNumber);
      par1NBTTagCompound.setInteger("timeUntilNextDrop", this.timeUntilNextDrop);
      }
      
      public Packet getDescriptionPacket()
      {
      NBTTagCompound nbttagcompound = new NBTTagCompound();
      this.writeToNBT(nbttagcompound);
      return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 4, nbttagcompound);
      }
      
      public void onDataPacket(INetworkManager net, Packet132TileEntityData pkt)
      {
      this.readFromNBT(pkt.data);
      }
      
      }
      
      
      1 Reply Last reply Reply Quote 0
      • Superloup10
        Superloup10 Modérateurs last edited by

        Sans tes codes, on ne peut pas t’aider.

        Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

        Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

        1 Reply Last reply Reply Quote 0
        • P
          Portuar last edited by

          voila

          1 Reply Last reply Reply Quote 0
          • robin4002
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

            Ton tile entity est t-il enregistré dans la classe principale ?

            1 Reply Last reply Reply Quote 0
            • P
              Portuar last edited by

              Dans la fonction init j’ai mis ceci : GameRegistry.registerTileEntity(monsterhuntercraft.block.TileEntityBlockDrop.class, “stringID”);

              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                Cela sûrement du fais que tu modifie les valeurs en world client et pas en world serveur.
                D’ailleurs la fonction dropUdapte n’existe pas, je sais pas du tout où tu l’appelle.

                1 Reply Last reply Reply Quote 0
                • P
                  Portuar last edited by

                  Ouai drop udapte n’existe pas je l’appelle dans la fonction randomDisplayTick et world client si je fais !par1World.isRemote sa ne marche pas!

                  1 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                    Concrètement tu cherche à faire quoi ?
                    Car la façon dont tu t’y prend n’est pas bonne, il faudrait utiliser des paquets, et le problème c’est que même avec des paquets, ton blocs va changer en fonction de tous les joueurs co, à moins que ce soit prévu comme ça ?

                    1 Reply Last reply Reply Quote 0
                    • P
                      Portuar last edited by

                      clairement quand on clique on drop l’item et sa on peu le faire *2 a *4 puis il ya un cooldown et on peut le refaire tout fonctionne juste au rest de la map tout reset alors que les nbt ne sont ils censé resté les même

                      1 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                        J’arrive toujours pas à comprendre, tu peux envoyer le reste du code ? (surtout la où dropUdapte est appelé).

                        1 Reply Last reply Reply Quote 0
                        • P
                          Portuar last edited by

                          Bah il est appelé dans un autre block :

                          /**

                          • Ticks the block if it’s been scheduled
                            */
                            public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
                            {
                            this.dropUdapte(par1World, par2, par3, par4, ItemMonsterHunter.Honey.getStatName(), ItemMonsterHunter.Honey.itemID, ItemMonsterHunter.Honey);
                            }
                          1 Reply Last reply Reply Quote 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                            Un bloc qui est extends BlockDrop ?
                            Mais du-coup tu as le gui qui s’ouvre de façon random non ?
                            La seul solution que je vois, c’est les paquets, car tu change les valeurs côté client, et faut changer les valeurs côtés serveur.

                            1 Reply Last reply Reply Quote 0
                            • P
                              Portuar last edited by

                              non mon gui s’ouvre bien et je vais essayer de me renseigner niveau packet!

                              1 Reply Last reply Reply Quote 0
                              • 1 / 1
                              • First post
                                Last post
                              Design by Woryk
                              Contact / Mentions Légales

                              MINECRAFT FORGE FRANCE © 2018

                              Powered by NodeBB