Welcome to Bukkit France

Inscrivez-vous maintenant pour profiter d'un accès total à tout le contenu offert par la meilleur communauté Bukkit française ! Une fois inscrit et connecté, vous pourrez contribuez à la communauté en postant vos propres sujets et questions ou en répondant à ceux existants. Vous pourrez aussi customiser votre profil, recevoir des points de réputations, communiquer avec les autres membres via le chat, et plus encore! 

abclive

[1.1] Ajouter de nouvelles demies-dalles

61 messages dans ce sujet

- Tutoriel -

Ajouter de nouvelles demies-dalles

Bonjoir à tous, suite à la demande de certains membres et aussi parceque j'avais envie de faire un tutoriel, je vais aujourd'hui vous apprendre, si ça vous intéresse (sinon je vois pas ce que vous faites encore la) à créer de nouvelles demies-dalles pour votre serveur.

I.Prérequis

Vous devrez disposer pour ce tutoriel

d'éclipse, et d'un minecraft.jar décompilé avec le MCP coder pack.

Décompilez votre minecraft.jar et sélectionnez le dossier "eclipse" comme workbench dans Eclipse.

Mais également des sources de craftbukkit pour le coté serveur. Si vous ne savez pas comment les trouver je vous invite à regarder la vidéo d'almosted qui explique très bien comment faire

II.Coté Client

Histoire de faciliter les choses, appelons les demies-dalles : steps. Rendez-vous donc, non pas comme d'habitude dans le Block.java mais dans BlockStep.java.

Vous devriez tomber sur ce code :


// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst

package net.minecraft.src;

import java.util.Random;

// Referenced classes of package net.minecraft.src:
// Block, Material, IBlockAccess, ItemStack,
// World

public class BlockStep extends Block
{

public static final String field_22037_a[] = {
"stone", "sand", "wood", "cobble", "brick", "smoothStoneBrick"};
private boolean blockType;

public BlockStep(int i, boolean flag)
{
super(i, 6, Material.rock);
blockType = flag;
if(!flag)
{
setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
} else
{
opaqueCubeLookup[i] = true;
}
setLightOpacity(255);
}

public int getBlockTextureFromSideAndMetadata(int i, int j)
{
if(j == 0)
{
return i > 1 ? 5 : 6;
}
if(j == 1)
{
if(i == 0)
{
return 208;
}
return i != 1 ? 192 : 176;
}
if(j == 2)
{
return 4;
}
if(j == 3)
{
return 16;
}
if(j == 4)
{
return Block.brick.blockIndexInTexture;
}
if(j == 5)
{
return Block.stoneBrick.blockIndexInTexture;
}
else
{
return 5;
}
}

public int getBlockTextureFromSide(int i)
{
return getBlockTextureFromSideAndMetadata(i, 0);
}

public boolean isOpaqueCube()
{
return blockType;
}

public void onBlockAdded(World world, int i, int j, int k)
{
}

public int idDropped(int i, Random random, int j)
{
return Block.stairSingle.blockID;
}

public int quantityDropped(Random random)
{
return !blockType ? 1 : 2;
}

protected int damageDropped(int i)
{
return i;
}

public boolean renderAsNormalBlock()
{
return blockType;
}

public boolean shouldSideBeRendered(IBlockAccess iblockaccess, int i, int j, int k, int l)
{
if(this != Block.stairSingle)
{
super.shouldSideBeRendered(iblockaccess, i, j, k, l);
}
if(l == 1)
{
return true;
}
if(!super.shouldSideBeRendered(iblockaccess, i, j, k, l))
{
return false;
}
if(l == 0)
{
return true;
} else
{
return iblockaccess.getBlockId(i, j, k) != blockID;
}
}

protected ItemStack func_41049_c_(int i)
{
return new ItemStack(Block.stairSingle.blockID, 1, i);
}

}

// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.

Bien séparons les parties qui nous intéresse :


"stone", "sand", "wood", "cobble", "brick", "smoothStoneBrick"};
    public static final String field_22037_a[] = {

et


{
if(j == 0)
{
return i > 1 ? 5 : 6;
}
if(j == 1)
{
if(i == 0)
{
return 208;
}
return i != 1 ? 192 : 176;
}
if(j == 2)
{
return 4;
}
if(j == 3)
{
return 16;
}
if(j == 4)
{
return Block.brick.blockIndexInTexture;
}
if(j == 5)
{
return Block.stoneBrick.blockIndexInTexture;
}
else
{
return 5;
}
}
    public int getBlockTextureFromSideAndMetadata(int i, int j)

Comment-ça fonctionne ?

Le matériel est défini sur la première portion de code et la step en elle même sur la deuxième. C'est simple non ? Passons à la pratique.

Dans la première portion de code, rajouter "glowstone".

Cela doit vous donner ceci :


"stone", "sand", "wood", "cobble", "brick", "smoothStoneBrick", "glowstone"};
    public static final String field_22037_a[] = {

Rajouter maintenant ceci dans la deuxième ligne :


{
return Block.glowStone.blockIndexInTexture;
}
        if(j == 6)

Votre code doit à présent ressembler à ça :


// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst

package net.minecraft.src;

import java.util.Random;

// Referenced classes of package net.minecraft.src:
// Block, Material, IBlockAccess, ItemStack,
// World

public class BlockStep extends Block
{

public static final String field_22037_a[] = {
"stone", "sand", "wood", "cobble", "brick", "smoothStoneBrick", "glowstone"};
private boolean blockType;

public BlockStep(int i, boolean flag)
{
super(i, 6, Material.rock);
blockType = flag;
if(!flag)
{
setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
} else
{
opaqueCubeLookup[i] = true;
}
setLightOpacity(255);
}

public int getBlockTextureFromSideAndMetadata(int i, int j)
{
if(j == 0)
{
return i > 1 ? 5 : 6;
}
if(j == 1)
{
if(i == 0)
{
return 208;
}
return i != 1 ? 192 : 176;
}
if(j == 2)
{
return 4;
}
if(j == 3)
{
return 16;
}
if(j == 4)
{
return Block.brick.blockIndexInTexture;
}
if(j == 5)
{
return Block.stoneBrick.blockIndexInTexture;
}
if(j == 6)
{
return Block.glowStone.blockIndexInTexture;
}
else
{
return 5;
}
}

public int getBlockTextureFromSide(int i)
{
return getBlockTextureFromSideAndMetadata(i, 0);
}

public boolean isOpaqueCube()
{
return blockType;
}

public void onBlockAdded(World world, int i, int j, int k)
{
}

public int idDropped(int i, Random random, int j)
{
return Block.stairSingle.blockID;
}

public int quantityDropped(Random random)
{
return !blockType ? 1 : 2;
}

protected int damageDropped(int i)
{
return i;
}

public boolean renderAsNormalBlock()
{
return blockType;
}

public boolean shouldSideBeRendered(IBlockAccess iblockaccess, int i, int j, int k, int l)
{
if(this != Block.stairSingle)
{
super.shouldSideBeRendered(iblockaccess, i, j, k, l);
}
if(l == 1)
{
return true;
}
if(!super.shouldSideBeRendered(iblockaccess, i, j, k, l))
{
return false;
}
if(l == 0)
{
return true;
} else
{
return iblockaccess.getBlockId(i, j, k) != blockID;
}
}

protected ItemStack func_41049_c_(int i)
{
return new ItemStack(Block.stairSingle.blockID, 1, i);
}

}
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.

Voila vous avez ajouter une nouvelle step, facile non ? Cependant on en a pas tout à fait fini avec la partie client, on va maintenant ajouter notre block dans le menu créative.

Pour cela rendez-vous dans ContainerCreative.java

Cherchez :

 Block.stairSingle,

et ajoutez en un à la suite, de sorte à obtenir 6 Block.stairSingle, collés.

C'est tout pour le coté client, on passe maintenant coté serveur.

Partager ce message


Lien à poster
Partager sur d’autres sites

III.Coté Serveur

De nouveau, rendez vous dans le BlockStep.java de craftbukkit cette fois-ci.

Si vous ne le trouver pas, il est disponible ici :

Continuons,

Votre code doit ressembler à ça :



import java.util.Random;

public class BlockStep extends Block {

public static final String[] a = new String[] { "stone", "sand", "wood", "cobble", "brick", "smoothStoneBrick"};
private boolean b;

public BlockStep(int i, boolean flag) {
super(i, 6, Material.STONE);
this.b = flag;
if (!flag) {
this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
} else {
o[i] = true;
}

this.g(255);
}

public int a(int i, int j) {
return j == 0 ? (i <= 1 ? 6 : 5) : (j == 1 ? (i == 0 ? 208 : (i == 1 ? 176 : 192)) : (j == 2 ? 4 : (j == 3 ? 16 : (j == 4 ? Block.BRICK.textureId : (j == 5 ? Block.SMOOTH_BRICK.textureId : 6)))));
}

public int a(int i) {
return this.a(i, 0);
}

public boolean a() {
return this.b;
}

public void onPlace(World world, int i, int j, int k) {}

public int getDropType(int i, Random random, int j) {
return Block.STEP.id;
}

public int a(Random random) {
return this.b ? 2 : 1;
}

protected int getDropData(int i) {
return i;
}

public boolean b() {
return this.b;
}

protected ItemStack a_(int i) {
return new ItemStack(Block.STEP.id, 1, i);
}
}
package net.minecraft.server;

Les parties qui nous intéressent, sont les suivantes :

    public static final String[] a = new String[] { "stone", "sand", "wood", "cobble", "brick", "smoothStoneBrick"};

et

    public int a(int i, int j) {

return j == 0 ? (i <= 1 ? 6 : 5) : (j == 1 ? (i == 0 ? 208 : (i == 1 ? 176 : 192)) : (j == 2 ? 4 : (j == 3 ? 16 : (j == 4 ? Block.BRICK.textureId : (j == 5 ? Block.SMOOTH_BRICK.textureId : 6)))));

Ajoutez dans la première : "glowstone" comme tout à l'heure et dans la seconde :

(j == 6 ? Block.GLOWSTONE.textureId :

entre (j == 5 ? Block.SMOOTH_BRICK.textureId : et 6)))));

Pensez d'ailleurs à rajouter une parenthèse au 6)))));

Votre code final doit ressembler à ça :

package net.minecraft.server;

import java.util.Random;

public class BlockStep extends Block {

public static final String[] a = new String[] { "stone", "sand", "wood", "cobble", "brick", "smoothStoneBrick", "glowstone"};
private boolean b;

public BlockStep(int i, boolean flag) {
super(i, 6, Material.STONE);
this.b = flag;
if (!flag) {
this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
} else {
o[i] = true;
}

this.g(255);
}

public int a(int i, int j) {
return j == 0 ? (i <= 1 ? 6 : 5) : (j == 1 ? (i == 0 ? 208 : (i == 1 ? 176 : 192)) : (j == 2 ? 4 : (j == 3 ? 16 : (j == 4 ? Block.BRICK.textureId : (j == 5 ? Block.SMOOTH_BRICK.textureId : (j == 6 ? Block.GLOWSTONE.textureId : 6))))));
}

public int a(int i) {
return this.a(i, 0);
}

public boolean a() {
return this.b;
}

public void onPlace(World world, int i, int j, int k) {}

public int getDropType(int i, Random random, int j) {
return Block.STEP.id;
}

public int a(Random random) {
return this.b ? 2 : 1;
}

protected int getDropData(int i) {
return i;
}

public boolean b() {
return this.b;
}

protected ItemStack a_(int i) {
return new ItemStack(Block.STEP.id, 1, i);
}
}

Et voilà c'est bon pour le coté serveur !

IV.Recompilation

Je ne vais pas vous apprendre à recompiler le minecraft.jar pleins de tutoriel font ca bien mieux que moi, mais en revanche la compilation de craftbukkit, elle, est moins connue.

C'est très simple il vous suffit de faire clique droit sur le dossier craftbukkit > Run as > 5 Maven Build ...

Une fenêtre va s'ouvrir, et remplissez le champ "goals" avec clean install

Votre craftbukkit se recompilera dans un dossier target dans le dossier des sources ;)

Voila c'est tout pour ce tutoriel, n'hésitez pas à me posez-vos questions où a me donner votre avis.

Sur ce, à bientôt !

Partager ce message


Lien à poster
Partager sur d’autres sites

Réservé pour une 3 ème petite partie du tuto

Partager ce message


Lien à poster
Partager sur d’autres sites

cela va m’être très utile Merci :)

Partager ce message


Lien à poster
Partager sur d’autres sites

juste une chose la demi dalle en glow éclaire pas

Partager ce message


Lien à poster
Partager sur d’autres sites

C'était juste pour l'exemple ^^ Après je doute de l’intérêt d'une demi-dalle comme celle-ci ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup, sa va m'être facile maintenant de réorganiser les blocs utilisant différentes couleurs( ils prennent beaucoup de place pour pas grand chose). Aussi, en solo j'ai réussi à ajouter les crafts des blocs à ID:5 comme les demies-dalles (c.f. http://bukkit.fr/index.php?threads/gestion-des-blocs-de-type-35-5.365/#post-3085) mais craftbukkit ne veut pas en entendre parler... Une idée ?

Partager ce message


Lien à poster
Partager sur d’autres sites
Merci beaucoup, sa va m'être facile maintenant de réorganiser les blocs utilisant différentes couleurs( ils prennent beaucoup de place pour pas grand chose). Aussi, en solo j'ai réussi à ajouter les crafts des blocs à ID:5 comme les demies-dalles (c.f. http://bukkit.fr/index.php?threads/gestion-des-blocs-de-type-35-5.365/#post-3085) mais craftbukkit ne veut pas en entendre parler... Une idée ?

Le code de craftbukkit est un peu différent, je ferais un tuto dessus également ;)

Partager ce message


Lien à poster
Partager sur d’autres sites
c'est pour la décoration

Change la luminosité dans block.java à la ligne de ta demie-dalle ajoute ce bout de code

.setLightValue(1.0F)

abclive Merci :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour lui ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

sauf que la demi-dalle n'est pas dans Block.java mais elle est dans BlockStep.java

Partager ce message


Lien à poster
Partager sur d’autres sites
sauf que la demi-dalle n'est pas dans Block.java mais elle est dans BlockStep.java

Eh bien, tu n'a qu'a créer deux BlockStep.java, une pour les demies-dalles lumineuses et une autre pour les non-lumineuses, tout simple ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Parfait Parfait mon launcher comance a grandire grace a vous !

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

très bon merci :)

j'ai juste une enfin 2 tite quetiounettes ^^

1 - comment donner un nom a la setps dans le contenair creative ? ( genre toi glowstonestep )

2 - quel est le numero d'item crée ?

genre toi la esceque ca fait :

44:6 ?

non laisse questions idiotes mdr !

stu peut juste eclairer mla lanterne pour le nom des items tels que on les vois :)

moi ca fait un ptit carré tout noir a la place du nom dans l'inventaire creative & survival

bien le merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour donc la versions mods normal (client) tu dois le definir dans le fichier langue en 1.1 c'est chiant car ya tout plein de langue ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

J'expliquerai ca dans la dernière partie ;)

Partager ce message


Lien à poster
Partager sur d’autres sites
Pour donc la versions mods normal (client) tu dois le definir dans le fichier langue en 1.1 c'est chiant car ya tout plein de langue ^^

Prend juste le fichier de langue française ou l'anglais moi perso j'ai traduit l'anglais car le style d'écriture du français j'aime pas

Partager ce message


Lien à poster
Partager sur d’autres sites

c'est tout a fait ce que je suis en train de faire :)

minecraft sans la langue us c'est un peut comme une foret noire sans chocolat !

ps:

merci pour la solution ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

ps: dsl double posts !

vous trouvez ca pas tres utile ( vu les posts en dessus ) mais moi j'en aurais bien besoin ^^

est t'il possible de rajouter des effet a certaines demi dalle

( comme la luminosité sur la double step de glowstone )

si oui ou cela se passe t'il svp ?

a mon avis c'est la dedans mais j'ai essayer de trifouiller sans grand résultât ^^ :

if (j == 10)
{
return Block.glowStone.blockIndexInTexture;
}

de même que créer des demi step de laine coloré ?

comment cela se joue t'il ^^

si vous avez la solution , je vous aime et merci ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

Au fait on peut pas changer la police de la langue française ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Aucune idée ^^ Doit y avoir moyen x)

Partager ce message


Lien à poster
Partager sur d’autres sites
ps: dsl double posts !

vous trouvez ca pas tres utile ( vu les posts en dessus ) mais moi j'en aurais bien besoin ^^

est t'il possible de rajouter des effet a certaines demi dalle

( comme la luminosité sur la double step de glowstone )

si oui ou cela se passe t'il svp ?

a mon avis c'est la dedans mais j'ai essayer de trifouiller sans grand résultât ^^ :

if (j == 10)
{
return Block.glowStone.blockIndexInTexture;
}

de même que créer des demi step de laine coloré ?

comment cela se joue t'il ^^

si vous avez la solution , je vous aime et merci ^^

Tout ca dans la partie 5 un jour quand j'aurais le temps x)

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.