[Mod] Nouveau Block

arkos59

Aventurier
14 Avril 2011
12
0
0
Bonjour à tous !

Je suis légèrement bloqué sur un mod (je débute).
Je cherche a créer un bloc avec une forme spécifique.
Un genre d'escalier inversé.

V= vide
X = plein

l'escalier :
VX
XX

Mon bloc :
XV
VV

Seulement je ne sais pas comment créer la forme et gérer les collisions.
J'ai vu en cherchant dans les codes sources " setBlockBounds " mais je ne sais pas comment l'utiliser.

De plus, en modifiant le BlockBounds de base de l'escalier, la forme reste la même, seul les collision change.

Merci d'avance pour vos réponses !

Cordialement, Arkos59
 
Oui mais non, je cherche a le créer de moi-même pour m’entraîner et faire de futur mods plus complexe.

J'ai du mal avec setBlockBounds
à ce que j'ai compris, les 6 paramétrés sont les coordonnées de 2 point.
Mais d'ou partes ces points ?
le 1er paramètres est X, Y ou Z ?
idem pour le 2nd ?
ect...


Merci d'avance =)

Edit : En bidouillant un peut, j'ai trouvé un début de solution mais j'ai un pb de texture (des bug d'affichage, le bloc ne se tourne pas selon que l'on le pose dans un sens ou un autre...)
 
Bonjour !
J'ai travaillé dessus toute la soirée et il me reste un pb :
Le bloc se crée sans problème mais il se pose toujours dans le même sens (contrairement aux escaliers.)

j'ai isolé le bout de code qui selon moi permet aux escalier de se tourner selon l'orientation de notre personnage :

Code:
public void onBlockPlacedBy(World world, int i, int j, int k, EntityLiving entityliving)
    {
        int l = MathHelper.floor_double((double)((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3;
        if(l == 0)
        {
            world.setBlockMetadataWithNotify(i, j, k, 2);
        }
        if(l == 1)
        {
            world.setBlockMetadataWithNotify(i, j, k, 1);
        }
        if(l == 2)
        {
            world.setBlockMetadataWithNotify(i, j, k, 3);
        }
        if(l == 3)
        {
            world.setBlockMetadataWithNotify(i, j, k, 0);
        }
    }

Mais je ne parvient pas à l'adapter pour mon block.

petit screen :
 
Ben déjà si tu reprends ce bout de code ça te permet d'avoir un chiffre entre 0 et 3 en métadonnée de ton bloc, mais après il me semble que c'est à toi de prendre cette métadonnée en considération dans tes fonctions de tracé et de collision.
 
Donc ce chiffre entre 0 et 3 est l'orientation de mon personnage, c'est cela ?
il faut donc une série de if /else if prenant tout les cas de figure pour tourner le bloc dans le bon sens ?
Mais existe-il une fonction pour tourner le block ?
doit-on faire un setBlockBounds pour modifier l'objet à chaque fois qu'on le pose ?
Doit-on aussi réaliser cette opération lors des collisions ?

Car j'ai déjà essayé un copier-coller de cette fonction dans mon fichier BlockMonBlock, sans résultat.

La fonction world.setBlockMetadataWithNotify(i, j, k, 2); est-elle spécifique aux escaliers ?

Merci d'avance !
 
arkos59 a dit:
Donc ce chiffre entre 0 et 3 est l'orientation de mon personnage, c'est cela ?

Exact.

arkos59 a dit:
il faut donc une série de if /else if prenant tout les cas de figure pour tourner le bloc dans le bon sens ?
Mais existe-il une fonction pour tourner le block ?

Ben ça dépend comment tu t'y prends dans ton algorithme de dessin, faire des if/else est sûrement un peu plus fatiguant mais moins complexe que de mettre des paramètres dans son code.

En tout cas il me semble pas qu'il y ait de truc magique pour tourner un bloc.

arkos59 a dit:
La fonction world.setBlockMetadataWithNotify(i, j, k, 2); est-elle spécifique aux escaliers ?

Non tous les blocs peuvent avoir des métadonnées, en fait c'est juste une variable qui est stockée dans le bloc : les pousses d'arbres les utilisent pour savoir quelle variété c'est, les blocs de laine pour leur couleur, et les escaliers pour savoir quelle forme adopter (dans ce cas "quelle direction prendre"). Mais c'est vraiment à toi de tout faire, si tu veux que ton bloc ressemble à un gâteau quand il est tourné vers l'est c'est à toi de le faire dans ton algo.

Après je peux pas t'aider beaucoup plus, parce que j'ai jamais codé de truc comme ça, juste regardé comment ça marche dans l'ensemble.