MFF

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

    1.12.X Créer un craft avec des résidu dans la grille de craft

    Planifier Épinglé Verrouillé Déplacé Non résolu Sans suite
    1.12.2
    19 Messages 5 Publieurs 848 Vues 5 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.
    • S Hors-ligne
      Swiiz
      dernière édition par

      Ok merci 🙂

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

        Bonjour, comment peut-on faire pour qu’un item ne soit pas consommé lors d’un craft ou d’une action (comme poser un bloc avec un ItemBlock) ?
        Je sais que c’est un topic en 1.12 mais vu qu’on a deja posé la question j’aimerais connaitre la réponse en 1.13.2 🙂

        Merci de vos réponses

        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

          Bonsoir,
          Il aurait été quand même mieux de créer une nouvelle discussion.

          Dans ton Item.Properties il faut ajouter containerItem(item à renvoyer) et l’item indiqué sera rendu lors de l’utilisation dans une recette.
          Pour qu’il ne soit pas consommé lors de la pause du bloc il faut faire créer une nouvelle classe qui étant d’ItemBlock et reprendre la fonction tryPlace à l’identique, à l’exception du itemstack.shrink(1);.

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

            Sinon en regardant du côté du craft du gâteau ?

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

              ReBonjour, j’ai repris la fonction tryPlace en mettant itemstack.shrink(0); malheureusement cela ne fait rien, mon item est toujours consommé lors de la pose du bloc.
              De plus je me suis rendu compte que je ne sais comment changer les loot des blocs pour que mon bloc ne drop rien en étant cassé.
              Concernant le containerItem mon item étant un ItemBlock il n’est pas accepté par le containerItem.
              (le gâteau se craft avec un seau de lait qui est déjà un containerItem donc c’est comme ce qu’a dit Robin au début)

              (désolé pour l’envahissement du topic, la prochaine fois j’en créerais un nouveau c’est juste que là c’était l’occasion 🙂 )

              Merci de vos réponses

              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 robin4002

                Fais voir le code de ton item bloc ainsi que le code de l’enregistrement de ce dernier.

                ItemBlock hérite d’item, il n’y a pas de raison que tu ne puisses pas l’utiliser dans containerItem.

                Et enfin pour supprimer le drop c’est il faut ajouter cette méthode dans la classe du bloc :

                   @Override
                   public IItemProvider getItemDropped(IBlockState state, World worldIn, BlockPos pos, int fortune) {
                      return Items.AIR;
                   }
                
                1 réponse Dernière réponse Répondre Citer 0
                • K Hors-ligne
                  koopin
                  dernière édition par koopin

                  l’ ItemBlock:

                  package dev.mff.mod1.common.block;
                  
                  import net.minecraft.advancements.CriteriaTriggers;
                  import net.minecraft.block.Block;
                  import net.minecraft.block.SoundType;
                  import net.minecraft.block.state.IBlockState;
                  import net.minecraft.entity.player.EntityPlayer;
                  import net.minecraft.entity.player.EntityPlayerMP;
                  import net.minecraft.item.BlockItemUseContext;
                  import net.minecraft.item.ItemBlock;
                  import net.minecraft.item.ItemStack;
                  import net.minecraft.util.EnumActionResult;
                  import net.minecraft.util.SoundCategory;
                  import net.minecraft.util.math.BlockPos;
                  import net.minecraft.world.World;
                  
                  public class Constructing_Block extends ItemBlock {
                  
                  	public Constructing_Block(Block blockIn, Properties builder) {
                  		super(blockIn, builder);
                  		// TODO Auto-generated constructor stub
                  	}
                  public EnumActionResult TryPlace(BlockItemUseContext p_195942_1_) {
                  	if (!p_195942_1_.canPlace()) {
                  		return EnumActionResult.FAIL;
                  	} else {
                  		IBlockState iblockstate = this.getStateForPlacement(p_195942_1_);
                  		if (iblockstate == null) {
                  			return EnumActionResult.FAIL;
                  		} else if (!this.placeBlock(p_195942_1_, iblockstate)) {
                  			return EnumActionResult.FAIL;
                  		} else {
                  			BlockPos blockpos = p_195942_1_.getPos();
                  			World world = p_195942_1_.getWorld();
                  			EntityPlayer entityplayer = p_195942_1_.getPlayer();
                  			ItemStack itemstack = p_195942_1_.getItem();
                  			IBlockState iblockstate1 = world.getBlockState(blockpos);
                  			Block block = iblockstate1.getBlock();
                  			if (block == iblockstate.getBlock()) {
                  				this.onBlockPlaced(blockpos, world, entityplayer, itemstack, iblockstate1);
                  				block.onBlockPlacedBy(world, blockpos, iblockstate1, entityplayer, itemstack);
                  				if (entityplayer instanceof EntityPlayerMP) {
                  					CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)entityplayer, blockpos, itemstack);
                  				}
                  			}
                  			
                  			SoundType soundtype = iblockstate1.getSoundType(world, blockpos, p_195942_1_.getPlayer());
                  			world.playSound(entityplayer, blockpos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F);
                  			itemstack.shrink(0);
                  			return EnumActionResult.SUCCESS;
                  		}
                  	}
                  	
                  }
                  
                  
                  }
                  

                  la classe des blocs et ItemBlocks :

                  package dev.mff.mod1;
                  
                  import dev.mff.mod1.common.block.Constructing_Block;
                  import net.minecraft.block.Block;
                  import net.minecraft.block.material.Material;
                  import net.minecraft.item.Item;
                  import net.minecraft.item.ItemBlock;
                  import net.minecraftforge.event.RegistryEvent;
                  import net.minecraftforge.eventbus.api.SubscribeEvent;
                  import net.minecraftforge.fml.common.Mod;
                  import net.minecraftforge.registries.ObjectHolder;
                  
                  @Mod.EventBusSubscriber(modid = Refs.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
                  public class ModBlocks {
                  	
                  @ObjectHolder(Refs.MOD_ID + ":test_block")
                  public static final Block TEST_BLOCK = null;
                  
                  @ObjectHolder(Refs.MOD_ID + ":constructing_block")
                  public static final Block CONSTRUCTING_BLOCK = null;
                  
                  
                  @SubscribeEvent
                  public static void registerBlock(final RegistryEvent.Register<Block> event) {
                  	event.getRegistry().register(new Block(Block.Properties.create(Material.GROUND).hardnessAndResistance(0.1F, 1200F)).setRegistryName("test_block"));
                  	event.getRegistry().register(new Block(Block.Properties.create(Material.GROUND).hardnessAndResistance(0.1F, 1200F)).setRegistryName("constructing_block"));
                  }
                  
                  @SubscribeEvent
                  public static void registerItem(final RegistryEvent.Register<Item> event) {
                  	event.getRegistry().register(new ItemBlock(TEST_BLOCK, new Item.Properties().group(Mod1.MOD_GROUP)).setRegistryName(TEST_BLOCK.getRegistryName()));
                  	event.getRegistry().register(new Constructing_Block(CONSTRUCTING_BLOCK, new Item.Properties().containerItem(null).group(Mod1.MOD_GROUP)).setRegistryName(CONSTRUCTING_BLOCK.getRegistryName()));
                  }
                  }
                  
                  

                  (j’ai mis null du coup pour pas que cela produise des erreurs)

                  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 robin4002

                    Sur la ligne d’enregistrement de ton item block, ici :

                    	event.getRegistry().register(new ItemBlock(TEST_BLOCK, new Item.Properties().group(Mod1.MOD_GROUP)).setRegistryName(TEST_BLOCK.getRegistryName()));
                    

                    Il faut remplacer ItemBlock par ta classe Constructing_Block sinon forcement elle n’a aucun effet (et il aurait été mieux de nommer cette dernière ItemConstructingBlock pour que son nom reflète bien ce qu’elle est : un Item).

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

                      Mais je l’ai déjà fais ça c’est sur la deuxième ligne, la première c’est un autre bloc

                      	event.getRegistry().register(new Constructing_Block(CONSTRUCTING_BLOCK, new Item.Properties().containerItem(null).group(Mod1.MOD_GROUP)).setRegistryName(CONSTRUCTING_BLOCK.getRegistryName()));
                      
                      
                      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

                        Ah autant pour moi, j’ai mal lu le code x)

                        En fait le problème vient de la méthode TryPlace, cela devrait être tryPlace (les méthodes ne commencent jamais avec une majuscule en java).
                        Ajoutes un @Override au dessus, ça t’évitera ce genre de problème à l’avenir.

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

                          Apparemment moi j’avais mal recopié xd
                          le tryPlace fonctionne par contre pour le getItemDropped éclipse met une erreur lorsque je met @Override, il dit “The method getItemDropped(IBlockState, World, BlockPos, int) of type Constructing_Block must override or implement a supertype method” et me demande de l’enlever

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

                            Car c’est pas la bonne définition dans la classe mère.

                            Petite question, as-tu les bases (voire un peu plus) en java?

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

                              J’ai lu le tuto des bases en java et je comprend quelques trucs.

                              Je pourrais savoir ce qui ne va pas avec l’Override ?

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

                                c’est pas l’override le problème, c’est le prototype de ta fonction. Va voir dans la classe mère les bon arguments de la fonction / si c’est le bon nom de fonction

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

                                  La fonction c’est Robin qui me l’a donné, et je ne sais pas trop comment je peux trouver la classe mère

                                  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

                                    Elle doit être mit dans la classe du bloc, pas dans la classe de l’itemblock.

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

                                      Je suis vraiment débile des fois, tu l’avais déjà marqué en plus
                                      Edit : merci pour votre aide du coup 🙂 cela fontionne

                                      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