chaos90

Vanilla
[1.7.x] Créer une hache de combat

21 messages dans ce sujet

Hache de Combat

-[iNTRODUCTION]-

Bonjour à tous !

Dans ce tutoriel, nous allons faire une une hache de combat

-[sOMMAIRE]-

1]Création de l'item
2]Création du ItemHacheDeCombat.java

3]Création du EnumHacheDeCombat

3]CraftBukkit

1]Création de l'item

la création d'un item c'est pas quelque chose de compliqué il suffis de faire comme ceci :

Item.java

itemRegistry.addObject(ID, "NOM", (new ItemHacheDeCombat(Item.EnumHacheDeCombat.DIAMOND)).setUnlocalizedName("NOM").setTextureName("NOM_TEXTURE")));

il y a une erreur c'est normal pour le moment

Items.java

public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM");

2] Création du ItemHacheDeCombat.java

donc comme je fais toujours on part de rien d'un class comme ceci :

package votre_package;

public class ItemHacheDeCombat {

}

donc ici on va tout de suite faire un extends de Item, ajouter un public qui va nous diriger vers notre enum un maxStackSize, déclarer notre enum et une durabilité qui sera dans notre enum :

package votre_package;

public class ItemHacheDeCombat extends Item {

    private float field_150934_a;
    private final EnumHacheDeCombat field_150933_b;

    public ItemHacheDeCombat(Item.EnumHacheDeCombat par1)
    {
        this.field_150933_b = par1; // déclaration du enum
        this.maxStackSize = 1; // stackable pas 1
        this.setMaxDamage(par1.getMaxUses()); // durabilité se trouvant dans notre enum
        this.setCreativeTab(CreativeTabs.tabCombat); // on met notre hache dans le tab Combat du créatif
        this.field_150934_a = 4.0F + par1.getDamageVsEntity();
    }

}

erreur pour le momentr c'est totalement normal

maintenant on va crée quelque public comme l'enchante, une autre déclaration de l'enum si il est réparrable le maxITemUseDuration si l'item est en 3D, quand on casse un bloc si retire de la durabilité parreil pour les entité et faire en sorte que ça casse du bois comme une hache :

public float func_150931_i()
    {
        return this.field_150933_b.getDamageVsEntity(); // l'item est fais pour tapé des entité
    }

    public float func_150893_a(ItemStack par1, Block par2)
    {
        Material var3 = par2.getMaterial();
        return var3 != Material.wood && var3 != Material.plants && var3 != Material.vine && var3 != Material.field_151572_C ? 1.0F : 1.5F; // l'item peu cassé du bois comme une hache
    }

    public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase) // si on tape une entité l'item perd de la durabilité
    {
        par1ItemStack.damageItem(1, par3EntityLivingBase);
        return true;
    }

    public boolean onBlockDestroyed(ItemStack par1, World par2, Block par3, int par4, int par5, int par6, EntityLivingBase par7) // si on casse un bloc avec l'item perd de la durabilité
    {
        if ((double)par3.getBlockHardness(par2, par4, par5, par6) != 0.0D)
        {
            par1.damageItem(2, par7);
        }

        return true;
    }

    public boolean isFull3D()
    {
        return true;
    }


    public int getMaxItemUseDuration(ItemStack par1ItemStack)
    {
        return 72000;
    }

    public int getItemEnchantability()
    {
        return this.field_150933_b.getEnchantability(); // l'item est enchantable
    }

    public String func_150932_j()
    {
        return this.field_150933_b.toString(); // déclaration de notre enum que on fera apres
    }

    public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack)
    {
        return this.field_150933_b.func_150995_f() == par2ItemStack.getItem() ? true : super.getIsRepairable(par1ItemStack, par2ItemStack); // l'item est réparrable
    }

    public Multimap getItemAttributeModifiers()
    {
        Multimap var1 = super.getItemAttributeModifiers();
        var1.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", (double)this.field_150934_a, 0));
        return var1;
    }

ce qui nous donne au final :

package votre_package;

import com.google.common.collect.Multimap;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class ItemHacheDeCombat extends Item
{
    private float field_150934_a;
    private final EnumHacheDeCombat field_150933_b;

    public ItemHacheDeCombat(Item.EnumHacheDeCombat par1)
    {
        this.field_150933_b = par1;
        this.maxStackSize = 1;
        this.setMaxDamage(par1.getMaxUses());
        this.setCreativeTab(CreativeTabs.tabCombat);
        this.field_150934_a = 4.0F + par1.getDamageVsEntity();
    }

    public float func_150931_i()
    {
        return this.field_150933_b.getDamageVsEntity();
    }

    public float func_150893_a(ItemStack par1, Block par2)
    {
        Material var3 = par2.getMaterial();
        return var3 != Material.wood && var3 != Material.plants && var3 != Material.vine && var3 != Material.field_151572_C ? 1.0F : 1.5F;
    }

    public boolean hitEntity(ItemStack par1ItemStack, EntityLivingBase par2EntityLivingBase, EntityLivingBase par3EntityLivingBase)
    {
        par1ItemStack.damageItem(1, par3EntityLivingBase);
        return true;
    }

    public boolean onBlockDestroyed(ItemStack par1, World par2, Block par3, int par4, int par5, int par6, EntityLivingBase par7)
    {
        if ((double)par3.getBlockHardness(par2, par4, par5, par6) != 0.0D)
        {
            par1.damageItem(2, par7);
        }

        return true;
    }

    public boolean isFull3D()
    {
        return true;
    }


    public int getMaxItemUseDuration(ItemStack par1ItemStack)
    {
        return 72000;
    }

    public int getItemEnchantability()
    {
        return this.field_150933_b.getEnchantability();
    }

    public String func_150932_j()
    {
        return this.field_150933_b.toString();
    }

    public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack)
    {
        return this.field_150933_b.func_150995_f() == par2ItemStack.getItem() ? true : super.getIsRepairable(par1ItemStack, par2ItemStack);
    }

    public Multimap getItemAttributeModifiers()
    {
        Multimap var1 = super.getItemAttributeModifiers();
        var1.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "Weapon modifier", (double)this.field_150934_a, 0));
        return var1;
    }
}

3] Création du EnumHacheDeCombat (dans Item.java pour client)

donc pour le client l'enum se trouve dans Item tout en bas pour les outils et épée nous allons en crée une donc il suffis de copier et de coller voilà :

public static enum EnumHacheDeCombat
    {
        WOOD("WOOD", 0, 0, 59, 3.0F, 0.0F, 15),
        STONE("STONE", 1, 1, 131, 5.0F, 1.0F, 5),
        IRON("IRON", 2, 2, 250, 7.0F, 2.0F, 14),
        DIAMOND("DIAMOND", 3, 3, 1561, 8.0F, 2.5F, 10),
        GOLD("GOLD", 4, 0, 32, 12.0F, 0.0F, 22);
        private final int harvestLevel;
        private final int maxUses;
        private final float efficiencyOnProperMaterial;
        private final float damageVsEntity;
        private final int enchantability;

        private static final Item.EnumHacheDeCombat[] $VALUES = new Item.EnumHacheDeCombat[]{WOOD, STONE, IRON, DIAMOND, GOLD};
        private static final String __OBFID = "CL_00000042";

        private EnumHacheDeCombat(String par1Str, int par2, int par3, int par4, float par5, float par6, int par7)
        {
            this.harvestLevel = par3;
            this.maxUses = par4;
            this.efficiencyOnProperMaterial = par5;
            this.damageVsEntity = par6;
            this.enchantability = par7;
        }

        public int getMaxUses()
        {
            return this.maxUses;
        }

        public float getEfficiencyOnProperMaterial()
        {
            return this.efficiencyOnProperMaterial;
        }

        public float getDamageVsEntity()
        {
            return this.damageVsEntity;
        }

        public int getHarvestLevel()
        {
            return this.harvestLevel;
        }

        public int getEnchantability()
        {
            return this.enchantability;
        }

        public Item func_150995_f()
        {
            return this == WOOD ? Item.getItemFromBlock(Blocks.planks) : (this == STONE ? Item.getItemFromBlock(Blocks.cobblestone) : (this == GOLD ? Items.gold_ingot : (this == IRON ? Items.iron_ingot : (this == DIAMOND ? Items.diamond : null))));
        }
    
    }

et normalement toutes les erreur devrai disparaître

4]CraftBukkit

Item :

        REGISTRY.a(ID, "NOM", (new ItemHacheDeCombat(EnumHacheDeCombat.DIAMOND)).c("NOM").f("NOM_TEXTURE"));

Items :

    public static final Item NOM = (Item)Item.REGISTRY.a("NOM");

ItemHacheDeCombat.java

package net.minecraft.server;

import net.minecraft.util.com.google.common.collect.Multimap;

public class ItemHacheDeCombat extends Item {

    private float damage;
    private final EnumHacheDeCombat b;

    public ItemHacheDeCombat(EnumHacheDeCombat enumtoolmaterial) {
        this.b = enumtoolmaterial;
        this.maxStackSize = 1;
        this.setMaxDurability(enumtoolmaterial.a());
        this.a(CreativeModeTab.j);
        this.damage = 4.0F + enumtoolmaterial.c();
    }

    public float i() {
        return this.b.c();
    }

    public float getDestroySpeed(ItemStack itemstack, Block block) {
            Material material = block.getMaterial();
            return material != Material.WOOD && material != Material.PLANT && material != Material.REPLACEABLE_PLANT ? 1.0F : 1.5F;
        }
    

    public boolean a(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) {
        itemstack.damage(1, entityliving1);
        return true;
    }

    public boolean a(ItemStack itemstack, World world, Block block, int i, int j, int k, EntityLiving entityliving) {
        if ((double) block.f(world, i, j, k) != 0.0D) {
            itemstack.damage(2, entityliving);
        }

        return true;
    }

    public int d_(ItemStack itemstack) {
        return 72000;
    }
    public int c() {
        return this.b.e();
    }

    public String j() {
        return this.b.toString();
    }

    public boolean a(ItemStack itemstack, ItemStack itemstack1) {
        return this.b.f() == itemstack1.getItem() ? true : super.a(itemstack, itemstack1);
    }

    public Multimap k() {
        Multimap multimap = super.k();

        multimap.put(GenericAttributes.e.a(), new AttributeModifier(f, "Weapon modifier", (double) this.damage, 0));
        return multimap;
    }
}

EnumHacheDeCombat.java

package net.minecraft.server;

public enum EnumHacheDeCombat {

    WOOD("WOOD", 0, 0, 59, 3.0F, 0.0F, 15),
    STONE("STONE", 1, 1, 131, 5.0F, 1.0F, 5),
    IRON("IRON", 2, 2, 250, 7.0F, 2.0F, 14),
    DIAMOND("DIAMOND", 3, 3, 1561, 8.0F, 2.5F, 10),
    GOLD("GOLD", 4, 0, 32, 12.0F, 0.0F, 22);
    private final int f;
    private final int g;
    private final float h;
    private final float i;
    private final int j;
    private static final EnumHacheDeCombat[] k = new EnumHacheDeCombat[] { WOOD, STONE, IRON, DIAMOND, GOLD};

    private EnumHacheDeCombat(String s, int i, int j, int k, float f, float f1, int l) {
        this.f = j;
        this.g = k;
        this.h = f;
        this.i = f1;
        this.j = l;
    }

    public int a() {
        return this.g;
    }

    public float b() {
        return this.h;
    }

    public float c() {
        return this.i;
    }

    public int d() {
        return this.f;
    }

    public int e() {
        return this.j;
    }

    public Item f() {
        return this == WOOD ? Item.getItemOf(Blocks.WOOD) : (this == STONE ? Item.getItemOf(Blocks.COBBLESTONE) : (this == GOLD ? Items.GOLD_INGOT : (this == IRON ? Items.IRON_INGOT : (this == DIAMOND ? Items.DIAMOND : null))));
    }
}

voilà bon jeu avec vos haches de combats :)

1

Partager ce message


Lien à poster
Partager sur d’autres sites

A quoi sert ->

public static final Item NOM = (Item)Item.itemRegistry.getObject("NOM");

Car je ne vois pas ou le met on...

0

Partager ce message


Lien à poster
Partager sur d’autres sites

On le met ici:

net.minecraft.init.Items.java

Cela permet d'enregistrer ton item comme un objet java . Enfait maintenant il y a deux classe item.

Une dans ce package et launtre dans celui de base

0

Partager ce message


Lien à poster
Partager sur d’autres sites

On le met ici:

net.minecraft.init.Items.java

Cela permet d'enregistrer ton item comme un objet java . Enfait maintenant il y a deux classe item.

Une dans ce package et launtre dans celui de base

Cool merci encore une fois ;)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Quelqu'un pourrait me traduire comment construit on cette hache car je ne comprends pas là, il faut quoi, du bois, de la pierre, ect, puis dans quelle disposition faut il qu'il soit mit ?

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Enfait il ny a pas de recette pour cette hache , voici comment en faire une

Tu te rends ici:

net.minecraft.item.crafting.CraftingManager.java

Ensuite nous allons regarder la fonction:

this.addRecipe(new ItemStack(Blocks.hopper), new Object[] 
{"I I",
 "ICI",
 " I ", 'I', Items.iron_ingot, 'C', Blocks.chest});

Ceci est la ligne de recette du hopper

Donc le premier paramètre est un ItemStack et le second paramètre est le placement des différents élément dans ta table de craft .

Imaginons que l'on a une hache nommé hacheDeCombat dans nos items pour faire un craft on ecrira ceci:

this.addRecipe(new ItemStack(Items.hacheDeCombat), new Object[] 
{"XX",
 "XI",
 " I", 'I', Items.mineraisdelahache, 'X', Items.stick});
0

Partager ce message


Lien à poster
Partager sur d’autres sites

Enfait il ny a pas de recette pour cette hache , voici comment en faire une

Tu te rends ici:

net.minecraft.item.crafting.CraftingManager.java

Ensuite nous allons regarder la fonction:

this.addRecipe(new ItemStack(Blocks.hopper), new Object[] 
{"I I",
 "ICI",
 " I ", 'I', Items.iron_ingot, 'C', Blocks.chest});

Ceci est la ligne de recette du hopper

Donc le premier paramètre est un ItemStack et le second paramètre est le placement des différents élément dans ta table de craft .

Imaginons que l'on a une hache nommé hacheDeCombat dans nos items pour faire un craft on ecrira ceci:

this.addRecipe(new ItemStack(Items.hacheDeCombat), new Object[] 
{"XX ",
 "XI ",
 " I ", 'I', Items.mineraisdelahache, 'X', Items.stick});

Merci encore, encore, encore, encore une fois..

Tu sais que je t'aime !!!! ;)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu remarquera que j'ai trés legerement modifier ceci:

{"XX ",
 "XI ",
 " I ",

en ceci:

{"XX",
 "XI",
 " I", 

cela te permet de pouvoir faire le craft avec les stick a droite ou au milieu au lieu de juste pourvoir le faire au milieu comme a mon première exemple

Pense a mettre la petite flèche verte pour augmenter ma reputation si je t'ai aider :P

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Les noms en anglais, ça passe mieux dans le code :) Donc les "ItemHacheDeCombat", à éviter. Les conventions, ça se respecte ! ^^

1

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu remarquera que j'ai trés legerement modifier ceci:

{"XX ",
 "XI ",
 " I ",

en ceci:

{"XX",
 "XI",
 " I", 

cela te permet de pouvoir faire le craft avec les stick a droite ou au milieu au lieu de juste pourvoir le faire au milieu comme a mon première exemple

Pense a mettre la petite flèche verte pour augmenter ma reputation si je t'ai aider :P

Oui j'ai vus merci ;)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Les noms en anglais, ça passe mieux dans le code :) Donc les "ItemHacheDeCombat", à éviter. Les conventions, ça se respecte ! ^^

Tkt, moi perso j'ai tout mis en anglais parce que "HacheDeCombat" au milieu d'un code java ^^... voilà quoi... :)

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Il n'y aurait pas un tutoriel pour les gens ayant mod coder pack ?

0

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 10 heures, FluKon_ a dit :

Il n'y aurait pas un tutoriel pour les gens ayant mod coder pack ?

C'est MCP...

0

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 2 heures, Nicolas a dit :

C'est MCP...

Mais la dernier étape c'est craftbukkit ?, j'ai pas compris.

Il y a 5 heures, Nicolas a dit :

C'est MCP...

Ok d'accord j'avais pas compris mais la j'ai une incompréhension la 3) étape 

public static enum EnumHacheDeCombat
    {
        WOOD("WOOD", 0, 0, 59, 3.0F, 0.0F, 15),
        STONE("STONE", 1, 1, 131, 5.0F, 1.0F, 5),
        IRON("IRON", 2, 2, 250, 7.0F, 2.0F, 14),
        DIAMOND("DIAMOND", 3, 3, 1561, 8.0F, 2.5F, 10),
        GOLD("GOLD", 4, 0, 32, 12.0F, 0.0F, 22);
        private final int harvestLevel;
        private final int maxUses;
        private final float efficiencyOnProperMaterial;
        private final float damageVsEntity;
        private final int enchantability;

        private static final Item.EnumHacheDeCombat[] $VALUES = new Item.EnumHacheDeCombat[]{WOOD, STONE, IRON, DIAMOND, GOLD};
        private static final String __OBFID = "CL_00000042";

        private EnumHacheDeCombat(String par1Str, int par2, int par3, int par4, float par5, float par6, int par7)
        {
            this.harvestLevel = par3;
            this.maxUses = par4;
            this.efficiencyOnProperMaterial = par5;
            this.damageVsEntity = par6;
            this.enchantability = par7;
        }

        public int getMaxUses()
        {
            return this.maxUses;
        }

        public float getEfficiencyOnProperMaterial()
        {
            return this.efficiencyOnProperMaterial;
        }

        public float getDamageVsEntity()
        {
            return this.damageVsEntity;
        }

        public int getHarvestLevel()
        {
            return this.harvestLevel;
        }

        public int getEnchantability()
        {
            return this.enchantability;
        }

        public Item func_150995_f()
        {
            return this == WOOD ? Item.getItemFromBlock(Blocks.planks) : (this == STONE ? Item.getItemFromBlock(Blocks.cobblestone) : (this == GOLD ? Items.gold_ingot : (this == IRON ? Items.iron_ingot : (this == DIAMOND ? Items.diamond : null))));
        }
    
    }

Mon

 public static enum ToolMaterial on en fais quoi ?

   public static enum ToolMaterial
    {
        
        WOOD("WOOD", 0, 0, 59, 2.0F, 0.0F, 15),
        STONE("STONE", 1, 1, 131, 4.0F, 1.0F, 5),
        IRON("IRON", 2, 2, 250, 6.0F, 2.0F, 14),
        EMERALD("EMERALD", 3, 3, 1561, 8.0F, 3.0F, 10),
        GOLD("GOLD", 4, 0, 32, 12.0F, 0.0F, 22),
        
        RUBIS("RUBIS", 5, 2, 900, 7.0F, 4, 14),
        CITRINE("CITRINE", 6, 3, 2000, 11.0F, 5, 10),
        COPAL("COPAL", 7, 3, 3000, 13.0F, 6, 10),
        CYTHALIUM("CYTHALIUM", 8, 3, 3600, 15.0F, 7, 10);
        
        private final int harvestLevel;
        private final int maxUses;
        private final float efficiencyOnProperMaterial;
        private final float damageVsEntity;
        private final int enchantability;

        private static final Item.ToolMaterial[] $VALUES = new Item.ToolMaterial[]{WOOD, STONE, IRON, EMERALD, GOLD};
        private static final String __OBFID = "CL_00000042";

        private ToolMaterial(String p_i1874_1_, int p_i1874_2_, int p_i1874_3_, int p_i1874_4_, float p_i1874_5_, float p_i1874_6_, int p_i1874_7_)
        {
            this.harvestLevel = p_i1874_3_;
            this.maxUses = p_i1874_4_;
            this.efficiencyOnProperMaterial = p_i1874_5_;
            this.damageVsEntity = p_i1874_6_;
            this.enchantability = p_i1874_7_;
        }

        public int getMaxUses()
        {
            return this.maxUses;
        }

        public float getEfficiencyOnProperMaterial()
        {
            return this.efficiencyOnProperMaterial;
        }

        public float getDamageVsEntity()
        {
            return this.damageVsEntity;
        }

        public int getHarvestLevel()
        {
            return this.harvestLevel;
        }

        public int getEnchantability()
        {
            return this.enchantability;
        }

        public Item func_150995_f()
        {
            return this == WOOD ? Item.getItemFromBlock(Blocks.planks) : 
                (this == STONE ? Item.getItemFromBlock(Blocks.cobblestone) : 
                    (this == GOLD ? Items.gold_ingot : 
                        (this == IRON ? Items.iron_ingot : 
                            (this == EMERALD ? Items.diamond :
                                (this == RUBIS ? Items.rubis :
                                    (this == COPAL ? Items.copal :
                                        (this == CITRINE ? Items.citrine :
                                            (this == CYTHALIUM ? Items.cythalium :
                                null))))))));
        }
    }
}
 

0

Partager ce message


Lien à poster
Partager sur d’autres sites

jais besoin d'aide svp je sais pas ou trouver items.java dans spigot

Modifié par Shwize
0

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 13 minutes, Shwize a dit :

jais besoin d'aide svp je sais pas ou trouver items.java dans spigot

Faut le créer. Pour ça tu décompile Items.class et tu créé Items.java à partir du .class.

0

Partager ce message


Lien à poster
Partager sur d’autres sites

Ou alors tu vas sur le github de Mc-dev :wink:

0

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