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

    Résolu Block Hardness

    1.7.x
    1.7.10
    4
    11
    1764
    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.
    • SCAREX
      SCAREX dernière édition par

      Bonjour, aujourd’hui j’ai voulut créer un block qui ne se casse que si on a la bonne clé, or je n’arrive pas à utiliser la fonction getPlayerRelativeBlockHardness :

      package fr.scarex.ascalonmod.block;
      
      import java.util.Random;
      
      import net.minecraft.block.Block;
      import net.minecraft.block.BlockChest;
      import net.minecraft.client.renderer.texture.IIconRegister;
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.entity.item.EntityItem;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.item.ItemStack;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.util.MathHelper;
      import net.minecraft.util.MovingObjectPosition;
      import net.minecraft.world.IBlockAccess;
      import net.minecraft.world.World;
      import net.minecraftforge.common.ForgeHooks;
      import net.minecraftforge.common.util.Constants;
      import cpw.mods.fml.common.registry.GameRegistry;
      import fr.scarex.ascalonmod.AscalonMod;
      import fr.scarex.ascalonmod.item.IUnlocker;
      import fr.scarex.ascalonmod.proxy.ClientProxy;
      import fr.scarex.ascalonmod.tileentity.TileEntityLockedChest;
      
      /**
      * @author SCAREX
      *
      */
      public class BlockLockedChest extends BlockChest
      {
      public static final String NAME = "lockedChest";
      protected static final Random RNG = new Random();
      
      protected BlockLockedChest() {
      super(2);
      this.setHardness(3.0F); // J'ai essayé avec plusieurs valeurs
      
      this.setBlockName(AscalonMod.MODID + "_" + NAME);
      this.setCreativeTab(CreativeTabs.tabDecorations);
      
      GameRegistry.registerBlock(this, NAME);
      GameRegistry.registerTileEntity(TileEntityLockedChest.class, AscalonMod.MODID + ":" + NAME);
      }
      
      @Override
      public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
      if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IUnlocker) {
      int[] keys = ((IUnlocker) player.getHeldItem().getItem()).getKeys(player, world, x, y, z);
      for (int i = 0; i < keys.length; i++) {
      if (keys* == ((TileEntityLockedChest) world.getTileEntity(x, y, z)).keyCode) {
      if (world.isRemote) return false;
      player.openGui(AscalonMod.INSTANCE, 0, world, x, y, z);
      return true;
      }
      }
      }
      return false;
      }
      
      @Override
      public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
      return new TileEntityLockedChest();
      }
      
      @Override
      public int getRenderType() {
      return ClientProxy.renderId;
      }
      
      @Override
      public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) {}
      
      @Override
      public void onBlockAdded(World p_149726_1_, int p_149726_2_, int p_149726_3_, int p_149726_4_) {}
      
      @Override
      public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) {
      byte b = 0;
      int l = MathHelper.floor_double((double) (living.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
      switch (l) {
      case 0:
      b = 2;
      break;
      case 1:
      b = 5;
      break;
      case 2:
      b = 3;
      break;
      case 3:
      b = 4;
      break;
      }
      world.setBlockMetadataWithNotify(x, y, z, b, 3);
      
      TileEntityLockedChest tile = (TileEntityLockedChest) world.getTileEntity(x, y, z);
      if (tile != null) {
      if (stack.hasTagCompound() && stack.getTagCompound().hasKey("key", Constants.NBT.TAG_INT))
      tile.keyCode = stack.getTagCompound().getInteger("key");
      else
      tile.keyCode = 0;
      }
      }
      
      @Override
      public void onNeighborBlockChange(World p_149695_1_, int p_149695_2_, int p_149695_3_, int p_149695_4_, Block p_149695_5_) {}
      
      @Override
      public void registerBlockIcons(IIconRegister p_149651_1_) {
      this.blockIcon = p_149651_1_.registerIcon("stone");
      }
      
      @Override
      public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
      TileEntityLockedChest tile = (TileEntityLockedChest) world.getTileEntity(x, y, z);
      
      ItemStack drop = new ItemStack(AscalonModBlocks.BLOCK_LOCKED_CHEST);
      NBTTagCompound comp = new NBTTagCompound();
      comp.setInteger("key", ((TileEntityLockedChest) world.getTileEntity(x, y, z)).keyCode);
      drop.setTagCompound(comp);
      world.spawnEntityInWorld(new EntityItem(world, (double) x + 0.5D, (double) y + 0.5D, (double) z + 0.5D, drop));
      
      if (tile != null) {
      for (int i = 0; i < tile.getSizeInventory(); i++) {
      ItemStack stack = tile.getStackInSlot(i);
      
      if (stack != null) {
      float f = this.RNG.nextFloat() * 0.8F + 0.1F;
      float f1 = this.RNG.nextFloat() * 0.8F + 0.1F;
      float f2 = this.RNG.nextFloat() * 0.8F + 0.1F;
      EntityItem entityItem;
      
      while (stack.stackSize > 0) {
      int j = this.RNG.nextInt(21) + 10;
      if (j > stack.stackSize) j = stack.stackSize;
      
      stack.stackSize -= j;
      entityItem = new EntityItem(world, (double) ((float) x + f), (double) ((float) y + f1), (double) ((float) z + f2), new ItemStack(stack.getItem(), j, stack.getItemDamage()));
      entityItem.motionX = (double) ((float) this.RNG.nextGaussian() * 0.05F);
      entityItem.motionY = (double) ((float) this.RNG.nextGaussian() * 0.05F + 0.2F);
      entityItem.motionZ = (double) ((float) this.RNG.nextGaussian() * 0.05F);
      
      if (stack.hasTagCompound()) entityItem.getEntityItem().setTagCompound((NBTTagCompound) stack.getTagCompound().copy());
      world.spawnEntityInWorld(entityItem);
      }
      }
      }
      world.removeTileEntity(x, y, z);
      }
      }
      
      @Override
      public void dropBlockAsItemWithChance(World world, int x, int y, int z, int meta, float chance, int p_149690_7_) {}
      
      @Override
      public float getPlayerRelativeBlockHardness(EntityPlayer player, World world, int x, int y, int z) {
      if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IUnlocker) {
      int[] keys = ((IUnlocker) player.getHeldItem().getItem()).getKeys(player, world, x, y, z);
      for (int i = 0; i < keys.length; i++) {
      if (keys* == ((TileEntityLockedChest) world.getTileEntity(x, y, z)).keyCode) {
      AscalonMod.LOGGER.info(ForgeHooks.blockStrength(this, player, world, x, y, z)); // Pour afficher la valeur dans la console.
      return ForgeHooks.blockStrength(this, player, world, x, y, z); // Si j'utilise çà, le block ne se casse jamais mais si je met une valeur fixe, le block se casse trop vite.
      }
      }
      }
      return -1.0F;
      }
      
      @Override
      public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) {
      ItemStack drop = new ItemStack(AscalonModBlocks.BLOCK_LOCKED_CHEST);
      NBTTagCompound comp = new NBTTagCompound();
      comp.setInteger("key", ((TileEntityLockedChest) world.getTileEntity(x, y, z)).keyCode);
      drop.setTagCompound(comp);
      return drop;
      }
      }
      

      Je ne sais pas si j’utilise mal la fonction ou s’il faut ré-écrire une autre fonction.

      Site web contenant mes scripts : http://SCAREXgaming.github.io

      Pas de demandes de support par MP ni par skype SVP.
      Je n'accepte sur skype que l…

      1 réponse Dernière réponse Répondre Citer 0
      • isador
        isador Moddeurs confirmés Modérateurs dernière édition par

        a quoi est censé te servir cette fonction?

        1 réponse Dernière réponse Répondre Citer 0
        • SCAREX
          SCAREX dernière édition par

          Le but est que le joueur ne puisse pas détruire le coffre s’il n’a pas la bonne clé en main. J’utilise une interface pour récupérer tous les codes des clés d’un Item (car j’ai créé un trousseau de clé qui doit permettre d’ouvrir avec toutes les clés disponibles à l’intérieur).

          Site web contenant mes scripts : http://SCAREXgaming.github.io

          Pas de demandes de support par MP ni par skype SVP.
          Je n'accepte sur skype que l…

          1 réponse Dernière réponse Répondre Citer 0
          • Snyker
            Snyker dernière édition par

            Tu veux faire en sorte qu’il casse le block avec l’objet en main ou n’importe ou ?

            Aucune signature n'est disponible pour une barre chocolatée.

            1 réponse Dernière réponse Répondre Citer 0
            • SCAREX
              SCAREX dernière édition par

              Je veux juste que l’objet soit cassable uniquement par un Item, et incassable dans les autres cas, sauf que dans le code que j’ai fais le block se casse trop vite et ne prend pas en compte la valeur retournée.

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

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

                return ForgeHooks.blockStrength(this, player, world, x, y, z);
                -> return 15.0F; ou return super.getPlayerRelativeBlockHardness(player, world, x, y, z);

                1 réponse Dernière réponse Répondre Citer 0
                • SCAREX
                  SCAREX dernière édition par

                  J’ai déjà essayé avec une valeur statique, çà ne marche pas. Et faire le super reviens au même car il va chercher le blockHardness que j’ai définis dans le constructeur.

                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                  Pas de demandes de support par MP ni par skype SVP.
                  Je n'accepte sur skype que l…

                  1 réponse Dernière réponse Répondre Citer 0
                  • Snyker
                    Snyker dernière édition par

                    Tien , robin m’avais déjà répondu à ce propos .

                    http://www.minecraftforgefrance.fr/showthread.php?tid=2165

                    Aucune signature n'est disponible pour une barre chocolatée.

                    1 réponse Dernière réponse Répondre Citer 0
                    • SCAREX
                      SCAREX dernière édition par

                      Problème résolu, en fait il faut mettre une valeur à virgule très petite : plus la valeur est petite, plus çà prendre de temps. Merci de vos réponses.

                      Site web contenant mes scripts : http://SCAREXgaming.github.io

                      Pas de demandes de support par MP ni par skype SVP.
                      Je n'accepte sur skype que l…

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

                        Tient étrange ça, ce n’est pas du tout le comportement que j’avais constaté de mon côté.

                        1 réponse Dernière réponse Répondre Citer 0
                        • SCAREX
                          SCAREX dernière édition par

                          Je pense que le setBlockHardness doit être inversé à un moment ou à un autre, car moi aussi je pensais que plus la valeurs était grande, plus le block prenait de temps à être détruit.

                          Site web contenant mes scripts : http://SCAREXgaming.github.io

                          Pas de demandes de support par MP ni par skype SVP.
                          Je n'accepte sur skype que l…

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

                          MINECRAFT FORGE FRANCE © 2018

                          Powered by NodeBB