Aller au contenu
chaos90

[1.7.x] Un bloc sauteur !

Recommended Posts

Esque vous vouliez toujours avoir un bloc comme un trampoline ? alors ce tuto est fais pour vous

 

Un Bloc sauteur !

 

 

-[iNTRODUCTION]-

 

 

Bonjour à tous !

Dans ce tutoriel, nous allons faire un bloc qui vous fais sauter !

 

 

-[sOMMAIRE]-

1]Création du Bloc
2]Création du BlocSauteur.java

3]CraftBukkit

 

 

1]Création du Bloc

 

Bon pour crée un bloc on fais comme d'habitude ce n'est pas nouveau il suffis de mettre dans Block et Blocks :

 

Block.java

blockRegistry.addObject(ID, "NOM_DU_BLOC", (new BlockSauteur()).setHardness(1.0F).setStepSound(SON).setBlockName("NOM_DU_BLOC").setBlockTextureName("TEXTURE_DU_BLOC"));

Blocks.java

public static final Block NOM_DU_BLOC = (Block)Block.blockRegistry.getObject("NOM_DU_BLOC");

2]Création du BlockSauteur.java

 

Ici on va faire le BlockSauteur.java pour que le joueur sois vachement plus rapide quand il marche sur se Bloc pour ça on va commencer par crée notre class sans rien dessus :

package votre_package;
public class BlockSauteur{
}

ensuite on va déja rajouter un extends du Block.java,mettre un nouveau public ou on va rajouter un material et un emplacement dans le creativetab qui sera celui des Blocs

  1. package votre_package;
    import net.minecraft.block.Block;import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    public class BlockSauteur extends Block
    {  
        public BlockSauteur()
      {
        super(Material.rock);
        this.setCreativeTab(CreativeTabs.tabBlock); //creative tab, on met le bloc dans l'onglet bloc du creatif
      }
    }

Maintenant il faut ajouter certaine fonction par exemple pour entrer en contact avec le bloc pour qu'il nous fasse sauter. Nous somme obligé mettre minimum 1 pixel pour entrer dedans voici comment on fais :

public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1, int par2, int par3, int par4)
{
         return AxisAlignedBB.getBoundingBox((double)par2, (double)par3, (double)par4, (double)(par2 + 1), (double)((float)(par3 + 1) - 0.125F), (double)(par4 + 1)); //ici on dit que on peu se faire aspirer de 1 pixel par le bloc

}

et ensuite il suffis de mettre le saut :

public void onEntityCollidedWithBlock(World par1, int par2, int par3, int par4, Entity par5)
{
   par5.motionY += 2D;
}

Alors là on peu remarqué que le joueur saute que si on saute sur le bloc se que nous ne voulons pas alors nous alons rajouter cette ligne

par5.

 

    par5.ticksExisted = 10; //tout les 10 ticks il saute

maintenant ça saute tout le temps mais on perd des dégâts de chute donc on va éviter ça on ajoute :

 

      par5.fallDistance *= 0D; // on perd 0 dégats de chute en retombant sur le bloc

maintenant si on veut rajouter un bruit de piston :

 

      par1.playSoundAtEntity(par5, "tile.piston.in", 1.0F, 1.0F); // bruit de piston joué a l'entity se trouvant a proximité

a présent notre bloc est bon mais vous allez me dire comment on fais pour sortir du bloc sans perdre des dégats de chute c'est très simple nous alons entrer un "if"

 

 

    if(par5.onGround && par5.isSneaking()) // si le joueur sneak sur le sol alors
    {
         par5.motionY += 0; // fais sauter le joueur a 0 bloc de haut
          par5.fallDistance += 0D; // on perd 0 dégats de chute en retombant sur le bloc
        }
        else //sinon
        {
             par5.ticksExisted = 10; 
             par5.motionY += 2D; fais sauter le joueur     
             par1.playSoundAtEntity(par5, "tile.piston.in", 1.0F, 1.0F); // bruit de piston joué a l'entity se trouvant a proximité  
             par5.fallDistance += 0D;  // on perd 0 dégats de chute en retombant sur le bloc 
        }
 

se qui nous donne au final :

 

 

package votre_package;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MovementInput;
import net.minecraft.world.World;

public class BlockSauteur extends Block
{



	public BlockSauteur()
        {
             super(Material.rock);
             this.setCreativeTab(CreativeTabs.tabBlock);
        }

    public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1, int par2, int par3, int par4)
    {
        return AxisAlignedBB.getBoundingBox((double)par2, (double)par3, (double)par4, (double)(par2 + 1), (double)((float)(par3 + 1) - 0.125F), (double)(par4 + 1));
    }

    public void onEntityCollidedWithBlock(World par1, int par2, int par3, int par4, Entity par5)
    {
    if(par5.isSneaking()) // si le joueur sneak alors
    {
         par5.motionY += 0; // fais sauter le joueur a 0 bloc de haut
          par5.fallDistance += 0D; // on perd 0 dégats de chute en retombant sur le bloc
        }
        else //sinon
        {
              par5.ticksExisted = 10;
              par5.motionY += 2D; fais sauter le joueur     
                            par1.playSoundAtEntity(par5, "tile.piston.in", 1.0F, 1.0F); // bruit de piston joué a l'entity se trouvant a proximité  
                            par5.fallDistance += 0D;  // on perd 0 dégats de chute en retombant sur le bloc
                }
  }
       
    
}

 

 

 

3]CraftBukkit

 

pour craftbukkit je vous donne tout c'est la même chose :)

 

Block.java

REGISTRY.a(ID, "NOM_DU_BLOC", (new BlockSauteur()).c(1.0F).a(k).c("NOM_DU_BLOC").d("TEXTURE_DU_BLOC")); 

Blocks.java

public static final Block NOM_DU_BLOC = (Block) Block.REGISTRY.a("NOM_DU_BLOC");

et enfin le BlockSauteur.java (1.7.2)

package net.minecraft.server;

import net.minecraft.server.AxisAlignedBB;
import net.minecraft.server.Block;
import net.minecraft.server.CreativeModeTab;
import net.minecraft.server.Entity;
import net.minecraft.server.Material;
import net.minecraft.server.World;

public class BlockSauteur extends Block {

    public BlockSauteur() {
        super(Material.STONE);
        this.a(CreativeModeTab.;
    }

    public AxisAlignedBB a(World world, int i, int j, int k) {

        return AxisAlignedBB.a().a((double) i, (double) j, (double) k, (double) (i + 1), (double) ((float) (j + 1) - (float) 0.125F), (double) (k + 1));
    }

    public void a(World world, int i, int j, int k, Entity entity) {
    	if(entity.isSneaking())
    	{
             entity.motY += 0D; // on fais sauter le joueur
             entity.fallDistance += 0D; // on perd 0 dégâts de chute
    	}
    	else
    	{
            entity.motY += 2D; // on fais sauter le joueur
            entity.fallDistance += 0D; // on perd 0 dégâts de chute
            entity.ticksLived = 10; // on saute tout les 10 ticks
    	}
    	
    }
}

BlockSauteur.java (1.7.10)

package net.minecraft.server;

import net.minecraft.server.AxisAlignedBB;
import net.minecraft.server.Block;
import net.minecraft.server.CreativeModeTab;
import net.minecraft.server.Entity;
import net.minecraft.server.Material;
import net.minecraft.server.World;

public class BlockSauteur extends Block {

    public BlockSauteur() {
        super(Material.STONE);
        this.a(CreativeModeTab.;
    }

 public AxisAlignedBB a(World world, int i, int j, int k) {
        float f = 0.125F;
        return AxisAlignedBB.a((double) i, (double) j, (double) k, (double) (i + 1), (double) ((float) (j + 1) - f), (double) (k + 1));
    }

    public void a(World world, int i, int j, int k, Entity entity) {
    	if(entity.isSneaking())
    	{
             entity.motY += 0D; // on fais sauter le joueur
             entity.fallDistance += 0D; // on perd 0 dégâts de chute
    	}
    	else
    	{
            entity.motY += 2D; // on fais sauter le joueur
            entity.fallDistance += 0D; // on perd 0 dégâts de chute
            entity.ticksLived = 10; // on saute tout les 10 ticks
    	}
    	
    }
}

Et voilà j'espère que ça vous a plus :Dbon jeu avec votre nouveau bloc :P

Partager ce message


Lien à poster
Partager sur d’autres sites

Super tutoriel :) quelques fautes d'orthographe a corriger mais c'est super utile comme tuto ! Juste dans l'intro de la partie 2 tu dis qu'on va faire la classe BlockRapide, ou le joueur va aller plus vite alors que c'est normalement BlockSauteur pour sauter plus haut

Partager ce message


Lien à poster
Partager sur d’autres sites

2eme petit problème :x

partie 2

  1. else //sinon
  2. {
  3. par5.ticksExisted = 10;
  4. par5.motionY += 2D; fais sauter le joueur

il manque un "//" sinon il y a une erreur :)

remplace par ça :

  1. else //sinon
  2. {
  3. par5.ticksExisted = 10;
  4. par5.motionY += 2D; //fais sauter le joueur

Cordialement,PGM.

  • Downvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut j'ai voulu suivre ton tuto pour ajouter un bloc de slime en 1.7x mais j'obtiens une erreur au niveau de .getAABBPool()

    public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1, int par2, int par3, int par4)
    {
        return AxisAlignedBB.getAABBPool().getAABB((double)par2, (double)par3, (double)par4, (double)(par2 + 1), (double)((float)(par3 + 1) - (float) 0.125F), (double)(par4 + 1));
    }

J'ai l'impression que ce que tu demande au jeu n'est pas disponible... et vu que je ne m'y connais pas trop avec ce genre de blocs avec collisions spéciales bah je suis un peu perdu... Aussi il existe un oubli dans ton code ou tu n'as pas ouvert un commentaire JAVA ;). Voili voilou :/

EDIT : J'ai résolu le problème mais maintenant quand je saute sur le bloc et que atterrit je subis des dégâts... le code est censé empêcher ça non ?!! Le "par5.fallDistance += 0D;" ne marche pas :/

EDIT 2 : Finalement j'ai pas suivi le tuto j'ai fait autre chose et ça à marché xD

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×