[Abandonné] Transformer un bloc en un siège



  • Ce tutoriel est également disponible en vidéo.

    #Sommaire - En rédaction(Sommaire - En rédaction)

    • Introduction

    • Pré-requis

    • (#code)
      [list]
      [*][Classe du bloc](#classe1)
      [*][1ère manière](#classe2)
      [*][2ème manière](#classe3)
      [/list][*][Bonus](#bonus)
      [list]
      [*][1ère manière](#classe4)
      [*][2ème manière](#classe5)
      [/list][*][Résultat](#resultat)
      [*][En vidéo](#youtube)
      [*][Crédits](#credit)
      
      [ancre=intro]#[align][size]Introduction([align][size]Introduction)[/ancre]
      Vous avez toujours rêver de créer un siège à partir d'un bloc, malgré des recherches, vous ne trouvez pas ? Pourtant vous avez trouvé et vous êtes sur la bonne page !
      
      [ancre=prerequis]#[align][size]Pré-requis([align][size]Pré-requis)[/ancre]
      • Savoir créer un bloc de base | Avoir la base d'un mod
      
      [ancre=code]#[align][size]Code([align][size]Code)[/ancre]
      
      [ancre=classe1][size]***Classe du bloc :***[/ancre]
      
      Voici la classe d'un bloc de base, auquel on va rajouter les propriétés d'un siège. Je ne vous expliques pas comment rajouter un bloc à votre mod je pense que vous en êtes capable ;)
      
      ```java
      package fr.votremod.votrenom.common;
      
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      
      public class Bloc extends Block {
      	protected Bloc() {
      		super(Material.ground);
      
      	}
      }
      

      Rajoutez maintenant la fonction onBlockActivated :

      public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int un, float deux,
      			float trois, float quatres) {
      		return true;
      
      	}
      

      Maintenant vous pouvez coder le siège de 2 manières, la 1ère consiste à juste téléporter le joueur sur le siège, mais celui-ci ne sera pas en sneak et pourra sortir sans faire S'accroupir ou bien on génère une entité au niveau du siège lors du clique droit du joueur, le joueur montera alors sur cette entité, il sera alors en sneak et aura besoin de faire S'accroupir pour en sortir et dès qu'il sera descendu, l'entité sera suprimmée. Cette dernière technique étant la meilleur mais la 1ère reste malgré tout un moyen simple de faire quelque chose de base.

      [ancre=classe2][size]***1ère manière :***[/ancre]

      Vous avez choisi la 1ère manière ? Vous avez choisi la simplicité mais pas la beauté mais vous verrez ça fait toujours l'affaire et ce n'est pas long 😉

      Il n'y qu'une ligne à rajouter dans le onBlockActivated, celle qui permettera de changer la position du joueur par celle du bloc avec un peu plus d'hauteur (y) de façon à ce qu'il ne se retrouve pas DANS le bloc mais SUR celui-ci.
      Le + 0.5 aux positions x et z permettent de centrer le joueur sur le bloc, faite des tests en modifiant ces valeurs en "debug" et vous verrez 😉

      player.setPosition(x + 0.5, y + 1, z + 0.5);
      

      Ici le + 1 est le plus adapté pour un bloc de base de Minecraft, si toute fois vous avez vous-voulez faire devenir un modèle personnalisé en siège adapté aussi bien le y, que le x et le z.

      [ancre=classe3][size]***2ème manière :***[/ancre]

      Cette partie est toujours en rédaction due à sa "difficulté" de code.

      [ancre=bonus]#[align][size]Bonus([align][size]Bonus)[/ancre]
      [ancre=classe4][size]***1ère manière :***[/ancre]

      Vous pouvez encore améliorer ce code de base en ajoutant que si le joueur est déjà sur le bloc siège, il ne peut pas se "rassoir", ajoutez donc cette condition, testant cela. L'utilisation de 2 Math.round(), permet de faire devenir le double posX en un int.

      N'oubliez pas de fermez le } à la fin de la condition, votre ancienne ligne permettant au joueur de monter sur le bloc étant dans cette condition.

      if (!(player.worldObj.getBlock(Math.round(Math.round(player.posX)), Math.round(Math.round(player.posY) - 1),
      				Math.round(Math.round(player.posZ))) == VotreMod.VotreBloc)) {
      

      Vous pouvez aussi ajoutez un else, permettant d'avertir le joueur :

      else {
      Minecraft.getMinecraft().thePlayer.addChatMessage(newChatComponentText((I18n.format(EnumChatFormatting.DARK_RED + "Vous êtes déjà assis !"));
      }
      

      Pensez bien que les accents ne passent que et seulement sur Eclipse pensé à faire sans ou à passer par un fichier de langue, le EnumChatFormatting.DARK_RED permet de rajouter une couleur rouge foncé.

      [ancre=classe5][size]***2ème manière :***[/ancre]

      En écriture...

      [ancre=resultat]#[align][size]Résultat([align][size]Résultat)[/ancre]

      1ère manière :

      2ème manière:

      En tournage...

      [ancre=youtube]#[align][size]En vidéo([align][size]En vidéo)[/ancre]

      En tournage des 2 manières...

      [ancre=credit]#[align][size]Crédits([align][size]Crédits)[/ancre]
      Rédaction :
      [list]Benjamin Loison
      [/list]
      Correction :
      [list]Aucun/Aucune
      [/list]

      Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

      [align]Retour vers le sommaire des tutoriels[/align][/size][/align][/size][/align][/size][/align][/size][/align][/size][/align][/size][/align][/size][/size][/size][/align][/size][/align][/size][/size][/size][/size][/align][/size][/align][/size][/align][/size][/align][/size][/align][/size][/align]



  • Juste la 1ère manière que je montre avec le bonus pour la condition que le joueur ne soit pas dessus "marche", le joueur est tp dans le bloc pendant 0.1 seconde puis remis à son emplacement initial et pas de message…



  • Toujours en écriture la deuxième manière, ou totalement abandonnée ?



  • Pas totalement abandonné, je n'oublie pas 🙂