Aller au contenu
chaos90

[1.7.x] Item qui fait spawn un mob sur le bloc cliqué

Recommended Posts

Item qui fait spawn un mob en Vanilla

-[iNTRODUCTION]-

Bonjour à tous !

Dans ce tutoriel, nous allons faire un Item qui fait spawn un mob, commençons sans attendre ;)

-[sOMMAIRE]-

1]Création d'un classe ordinaire

2]Création d'une méthode onItemUse

3]Faire spawner le mob

4] Craftbukkit

1]Création d'une classe ordinaire

Commençons par créer une class ordinaire.

package fr.tonnom.tonmod;

public class ItemMob {
     
     public ItemMob() {
     
     }

}

Puis nous allons ajouter le stack maximum (pour moi ce sera 1), sa durabilité (pour moi ce sera 5) et l'emplacement dans l'inventaire creatif. Nous allons donc ajouter ces deux lignes :

this.setCreativeTab(CreativeTabs.tabMisc);
this.setMaxDamage(5);
this.setMaxStackSize(1);

dans le " public void ItemMob() "

2] Création d'une méthodeonItemUse

Commençons par créer notre méthode en boolean, qui va s'éxécuter lors de l'utilisation de l'item.

    public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
         return true;
    }

Ensuite ajoutons-y ce qu'il nous faut, c'est à dire récupérer les informations du bloc clicker

    public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
    	par1ItemStack.damageItem(1, par2EntityPlayer); // ici nous faisons en sorte que la durabilité baisse de 1 après un click droit
        if (par3World.isClient) // si le mon est Client alors...
        {
            return true; // ... ça renvoi true ...
        }
        else // ... sinon ...
        {
            Block var11 = par3World.getBlock(par4, par5, par6); // on récupère le bloc
            par4 += Facing.offsetsXForSide[par7]; // ------
            par5 += Facing.offsetsYForSide[par7]; //      | -- on récupère les coordonnées
            par6 += Facing.offsetsZForSide[par7]; //-------
            double var12 = 0.0D;

            if (par7 == 1 && var11.getRenderType() == 11)
            {
                var12 = 0.5D;
            }

            Entity var14 = spawnCreature(par3World, 2, (double)par4 + 0.5D, (double)par5 + var12, (double)par6 + 0.5D);

            if (var14 != null)
            {
                if (var14 instanceof EntityLivingBase && par1ItemStack.hasDisplayName())
                {
                    ((EntityLiving)var14).setCustomNameTag(par1ItemStack.getDisplayName());
                }

            }

            return true;
        }
    }

3] Faire spawner le mob

Ici nous allons créér notre méthode " spawnCreature "en static

    public static Entity spawnCreature(World par0World, int par1, double par2, double par4, double par6)
    {

    }

Puis nous allons mettre tout ce qu'il nous faut à lintérieur, c'est à dire la récupération du mob.

    public static Entity spawnCreature(World par0World, int par1, double par2, double par4, double par6)
    {
            Entity var8 = null;
            for (int var9 = 0; var9 < 1; ++var9) // nous créons une boucle " for "
            {
                var8 = EntityList.createEntityByID(50, par0World); // ici nous allons faire spawner un creeper qui a l'id " 50 " donc nous récupérons le mob.

                if (var8 != null && var8 instanceof EntityLivingBase) // donc si le mob n'est pas = à null et qu'il instance bien EntityLivingBase alors ...
                {
                    EntityLiving var10 = (EntityLiving)var8;
                    var8.setLocationAndAngles(par2, par4, par6, MathHelper.wrapAngleTo180_float(par0World.rand.nextFloat() * 360.0F), 0.0F); // ---------------------------------
                    var10.rotationYawHead = var10.rotationYaw; //            | // on défini les positions du mob.
                    var10.renderYawOffset = var10.rotationYaw; //-------------
                    var10.onSpawnWithEgg((IEntityLivingData)null);
                    par0World.spawnEntityInWorld(var8); // on fait spawn l'entité
                    var10.playLivingSound(); // on émet son bruit. 
                }
            }

            return var8;
    }

ce qui nous donne au final :

package fr.tonnom.tonmod;

public class ItemMob extends Item
{

    public ItemMob()
    {
        this.setCreativeTab(CreativeTabs.tabMisc);
        this.setMaxDamage(5);
        this.setMaxStackSize(1);
    }
    
    
    public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
    	par1ItemStack.damageItem(1, par2EntityPlayer);
        if (par3World.isClient)
        {
            return true;
        }
        else
        {
            Block var11 = par3World.getBlock(par4, par5, par6);
            par4 += Facing.offsetsXForSide[par7];
            par5 += Facing.offsetsYForSide[par7];
            par6 += Facing.offsetsZForSide[par7];
            double var12 = 0.0D;

            if (par7 == 1 && var11.getRenderType() == 11)
            {
                var12 = 0.5D;
            }

            Entity var14 = spawnCreature(par3World, 2, (double)par4 + 0.5D, (double)par5 + var12, (double)par6 + 0.5D);

            if (var14 != null)
            {
                if (var14 instanceof EntityLivingBase && par1ItemStack.hasDisplayName())
                {
                    ((EntityLiving)var14).setCustomNameTag(par1ItemStack.getDisplayName());
                }

            }

            return true;
        }
    }
    
    
    public static Entity spawnCreature(World par0World, int par1, double par2, double par4, double par6)
    {
            Entity var8 = null;
            for (int var9 = 0; var9 < 1; ++var9)
            {
                var8 = EntityList.createEntityByID(50, par0World);

                if (var8 != null && var8 instanceof EntityLivingBase)
                {
                    EntityLiving var10 = (EntityLiving)var8;
                    var8.setLocationAndAngles(par2, par4, par6, MathHelper.wrapAngleTo180_float(par0World.rand.nextFloat() * 360.0F), 0.0F);
                    var10.rotationYawHead = var10.rotationYaw;
                    var10.renderYawOffset = var10.rotationYaw;
                    var10.onSpawnWithEgg((IEntityLivingData)null);
                    par0World.spawnEntityInWorld(var8);
                    var10.playLivingSound();
                }
            }

            return var8;
    }
}

4] Craftbukkit

Pour le craftbukkit c'est le même concept donc je vous donne le code directement :

1.7.2 :

package net.minecraft.server;

public class ItemMob extends Item {
	
	public ItemMob(){
		this.maxStackSize = 1;
		this.setMaxDurability(5);
	}
	
	
    public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l, float f, float f1, float f2) {
        itemstack.damage(1, entityhuman);
        if (world.isStatic || itemstack.getData() == 48 || itemstack.getData() == 49 || itemstack.getData() == 63 || itemstack.getData() == 64) {
            return true;
        } else {
            Block block = world.getType(i, j, k);

            i += Facing.b[l];
            j += Facing.c[l];
            k += Facing.d[l];
            double d0 = 0.0D;

            if (l == 1 && block.b() == 11) {
                d0 = 0.5D;
            }

            Entity entity = a(world, 2, (double) i + 0.5D, (double) j + d0, (double) k + 0.5D);

            if (entity != null) {
                if (entity instanceof EntityLiving && itemstack.hasName()) {
                    ((EntityInsentient) entity).setCustomName(itemstack.getName());
                }

            }

            return true;
        }
    }
	
    
    public static Entity a(World world, int i, double d0, double d1, double d2) {
        return spawnCreature(world, i, d0, d1, d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG);
    }

    public static Entity spawnCreature(World world, int i, double d0, double d1, double d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
            Entity entity = null;

            for (int j = 0; j < 1; ++j) {
                entity = EntityTypes.a(50, world);
                if (entity != null && entity instanceof EntityLiving) {
                    EntityInsentient entityinsentient = (EntityInsentient) entity;

                    entity.setPositionRotation(d0, d1, d2, MathHelper.g(world.random.nextFloat() * 360.0F), 0.0F);
                    entityinsentient.aO = entityinsentient.yaw;
                    entityinsentient.aM = entityinsentient.yaw;
                    entityinsentient.a((GroupDataEntity) null);
                    world.addEntity(entity, spawnReason);
                    entityinsentient.r();
                }
            }

            return entity;
        }
}

1.7.10 :

package net.minecraft.server;

public class ItemMob extends Item {
	
	public ItemMob(){
		this.maxStackSize = 1;
		this.setMaxDurability(5);
	}
	
	
    public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l, float f, float f1, float f2) {
        itemstack.damage(1, entityhuman);
        if (world.isStatic || itemstack.getData() == 48 || itemstack.getData() == 49 || itemstack.getData() == 63 || itemstack.getData() == 64) {
            return true;
        } else {
            Block block = world.getType(i, j, k);

            i += Facing.b[l];
            j += Facing.c[l];
            k += Facing.d[l];
            double d0 = 0.0D;

            if (l == 1 && block.b() == 11) {
                d0 = 0.5D;
            }

            Entity entity = a(world, 2, (double) i + 0.5D, (double) j + d0, (double) k + 0.5D);

            if (entity != null) {
                if (entity instanceof EntityLiving && itemstack.hasName()) {
                    ((EntityInsentient) entity).setCustomName(itemstack.getName());
                }

            }

            return true;
        }
    }
	
    
    public static Entity a(World world, int i, double d0, double d1, double d2) {
        return spawnCreature(world, i, d0, d1, d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER_EGG);
    }

    public static Entity spawnCreature(World world, int i, double d0, double d1, double d2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
            Entity entity = null;

            for (int j = 0; j < 1; ++j) {
                entity = EntityTypes.a(50, world);
                if (entity != null && entity instanceof EntityLiving) {
                    EntityInsentient entityinsentient = (EntityInsentient) entity;

                    entity.setPositionRotation(d0, d1, d2, MathHelper.g(world.random.nextFloat() * 360.0F), 0.0F);
                    entityinsentient.aO = entityinsentient.yaw;
                    entityinsentient.aM = entityinsentient.yaw;
                    entityinsentient.prepare((GroupDataEntity) null);
                    world.addEntity(entity, spawnReason);
                    entityinsentient.r();
                }
            }

            return entity;
        }
}

Et voilà merci d'avoir suivi ce tutoriel et je vous dit à bientôt !

10/07/2015 21:24 Corrigé et mis en page par Zetsyog

11/07/2015 12:27 Fautes criminelles de convention corrigées par TheShark34

  • Upvote 2
  • Downvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

jai cette erreur la :

 

 

Failed tests:   maxStackSize[272: CREEPER_STICK](org.bukkit.PerMaterialTest): (..)

Tests run: 4940, Failures: 1, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] PaperSpigot-Parent ................................. SUCCESS [  1.092 s]
[INFO] Minecraft Server ................................... SUCCESS [  5.023 s]
[INFO] Minecraft Server Relocation ........................ SUCCESS [ 13.412 s]
[INFO] PaperSpigot-API .................................... SUCCESS [ 25.320 s]
[INFO] PaperSpigot ........................................ FAILURE [ 44.513 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:29 min
[INFO] Finished at: 2017-07-17T17:40:11+02:00
[INFO] Final Memory: 55M/422M
[INFO] ------------------------------------------------------------------------

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

×