MFF

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

    un item qui pose un bloc

    Planifier Épinglé Verrouillé Déplacé Résolu 1.13.x
    1.13.2
    4 Messages 2 Publieurs 1.0k 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.
    • K Hors-ligne
      koopin
      dernière édition par

      Bonjour,
      je voulais créer un item qui permet de poser des blocs avec un clic droit mais éclipse m’indique des erreurs et je ne sais pas comment les résoudre.

      Voici la classe de l’item :

      package dev.mff.mod1.common.item;
      
      import dev.mff.mod1.ModBlocks;
      import net.minecraft.block.Block;
      import net.minecraft.block.BlockBush;
      import net.minecraft.block.state.BlockState;
      import net.minecraft.block.state.IBlockState;
      import net.minecraft.init.Blocks;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemUseContext;
      import net.minecraft.util.EnumActionResult;
      import net.minecraft.util.EnumFacing;
      import net.minecraft.util.math.BlockPos;
      import net.minecraft.world.World;
      import net.minecraftforge.eventbus.api.SubscribeEvent;
      import static net.minecraft.util.EnumFacing.*;
      
      public class ConstructingGlove extends Item {
      
      	public ConstructingGlove(Properties properties) {
      		super(properties);}
      		@SubscribeEvent
      		public EnumActionResult onItemUse(ItemUseContext useContext) {
      			BlockPos blockpos = useContext.getPos();
      			int x = blockpos.getX();
      			int y = blockpos.getY();
      			int z = blockpos.getZ();
      			World world = useContext.getWorld();
      			IBlockState iblockstate = world.getBlockState(blockpos);
      			
      			IBlockState testblock_state = ModBlocks.TEST_BLOCK.getDefaultState();
      			
      			BlockPos up_pos = new BlockPos(x, y + 1, z);
      			if (isBlockAIR(up_pos)) {
      				world.setBlockState(blockpos, testblock_state);
      
      			} else {
      				switch (this.getEnumFacing()) {
      				case EAST:
      					BlockPos east_pos = new BlockPos(x + 1, y, z);
      					if (isBlockAIR(east_pos)) {
      						world.setBlockState(east_pos, testblock_state);
      						break;
      					}
      				case WEST:
      					BlockPos west_pos = new BlockPos(x - 1, y, z);
      					if (isBlockAIR(west_pos)) {
      						world.setBlockState(west_pos, testblock_state);
      						break;
      					}
      				case NORTH:
      					BlockPos north_pos = new BlockPos(x, y, z + 1);
      					if (isBlockAIR(north_pos)) {
      						world.setBlockState(north_pos, testblock_state);
      						break;
      					}
      				case SOUTH:
      					BlockPos south_pos = new BlockPos(x, y, z - 1);
      					if (isBlockAIR(south_pos)) {
      						world.setBlockState(south_pos, testblock_state);
      						break;
      					}
      				case DOWN:
      					BlockPos down_pos = new BlockPos(x, y - 1, z);
      					if (isBlockAIR(down_pos)) {
      						world.setBlockState(down_pos, testblock_state);
      						break;
      					}
      				}
      			}
      			
      			
      			return EnumActionResult.SUCCESS;
      			
      	}
      		private boolean isBlockAIR(BlockPos pos) {
      		
      			Block getBlock = this.world.getBlockState(pos).getBlock();
      			if (getBlock instanceof BlockBush) return true;
      			Block[] a = {Blocks.CAVE_AIR, Blocks.AIR, Blocks.SNOW, Blocks.VINE};
      			for (Block target : a) {
      				if (getBlock == target) return true;
      			}
      			return false;
      		}
      }
      
      

      Les erreurs (les morceau soulignés en rouge) que éclipse m’indique sont :

      • this.getEnumFacing()
      • this.world.getBlockState(pos).getBlock()

      Pour résoudre mon problème je pense qu’il me faudrait quelque chose qui puisse m’indiquer sur quelle face du bloc je clic pour ensuite faire fonctionner le switch. Malheureusement je ne sais pas comment faire.

      Merci de vos réponses
      🙂

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

        Salut,
        Ce que tu cherches à faire existe déjà dans Minecraft. En effet, tous les “blocs” que tu tiens dans ta main sont en réalité des objets qui ont comme comportement de placer dans le monde le bloc leur correspondant.
        Ainsi, une classe possédant ce comportement existe déjà, elle s’appelle ItemBlock. Tu dois certainement être capable de faire ce que tu veux en utilisant cette classe. Si tu veux que l’item qui pose le bloc ai une texture et un modèle différent que celui du bloc qu’il pose alors c’est totalement possible sans modifier la classe ItemBlock.

        N’hésite pas à demander comment faire certaines choses avant de copier/coller la classe ItemBlock pour faire ce tu souhaites.

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

          Tout d’abord merci de ton aide,

          il est vrai que j’avais essayé de copier/coller la classe ItemBlock mais il y avait encore plus d’erreurs donc j’ai abandonné.

          De plus je n’avais pas pensé a faire extends ItemBlock a mon item, pour moi un item était forcément extends Item.

          Malheureusement mon problème n’est pas résolu puisque je ne sais pas comment connaitre les paramètres que je peut modifier dans le constructeur en faisant extends ItemBlock, et je ne sais pas non plus comment les modifier.
          J’aimerais savoir comment, toi et les autres, vous faites pour connaitre ces informations, cela me sera utile pour la suite.

          Merci d’avance 🙂

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

            Rebonjour, je n’arrive pas a trouver de solution a mon problème 😞 car tout ce que je fais provoque des crashs et je ne sais pas comment faire pour choisir quel bloc on pose avec l’item.
            De plus je ne sais pas si on peut changer le fait que l’item soit consommé lors de son activation, donc je me demande si l’ItemBlock est une bonne idée.

            J’espère que vous pourrez me répondre car là je suis coincé 😞

            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