Aller au contenu
Riikog

[1.7.x] Créer un bloc anti-piston

Recommended Posts

J'exposerai ici comment j'ai fait pour mon bloc anti-piston. J'ai vu cette demande dans la catégorie Support, et je trouvais utile de faire un tutoriel, plutôt que de déterrer d'anciens sujets à l'avenir.

Créer un bloc anti-piston:


88x31.png
Cette uvre est mise à disposition selon les termes de laLicence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé. Tout partage implique que vous citiez l'auteur original.

Sommaire:

1]Préparatifs

Pour commencer, il vous faudra un Minecraft décompilé en 1.6 - 1.7 (dans mon cas la 1.7.10) avec MCP(= Minecraft Coder Pack).

2]Mise en place du code

On va commencer directement le tutoriel !

Préparez votre espace de travail en démarrant Eclipse avec la workspace habituelle.

Une fois ceci fait, ouvrez les packages net.minecraft.block et net.minecraft.block.Material.

Vous aurez besoin de deux classes: Block.java et Material.java

Dans Block.java, vous devriez repérer ceci à la ligne 388.

        blockRegistry.addObject(175, "double_plant", new BlockDoublePlant());

Ajoutez ceci juste après, de façon à déclarer un nouveau bloc.

        blockRegistry.addObject(200, "antipiston_block", (new Block(Material.noPushBlock)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundTypePiston).setBlockName("blockAntiPiston").setCreativeTab(CreativeTabs.tabBlock).setBlockTextureName("antipiston_block"));

200 correspond à l'ID, le String suivant correspond au nom du bloc. "new Block(Material.noPushBlock))" indique que le Block dépendra du Material défini. La suite de la ligne est basique, comme chaque bloc Minecraft.

Après avoir rajouté cette ligne dans la classe, vous devriez obtenir une erreur sur le Material. C'est là que la classe ouverte tout à l'heure intervient !

Après cette la ligne ci dessous, rajoutez un nouveau Material, comme montré.

    public static final Material field_151597_y = (new MaterialLogic(MapColor.field_151666_j)).setReplaceable().setTranslucent().setRequiresTool().setNoPushMobility();

Ajoutez donc cette ligne ci.

    public static final Material noPushBlock = (new Material(MapColor.field_151665_m)).setRequiresTool().setImmovableMobility();

Grâce à ce nouveau Material, on indique que pour casser le bloc, il faudra des outils, et qu'on ne pourra pas bouger le bloc avec un piston.

Vous pouvez dès à présent tester votre nouveau bloc !

N'hésitez pas à reporter des bugs si vous en avez.

Le résultat en image:

1433267743-2015-06-02-19-55-11.png

  • Upvote 2
  • Downvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

J'approuve, très bonne rédaction, manque un point par contre à la ligne 34 ;)

(c'est pas mal pour optimiser les serveurs pvp, au lieux des fours et leurs containers qui bouffent pour rien @_@ )

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est très simple à faire, un bloc anti-piston.

Tu vas dans la class BlocPistonBase et tu cherche ceci :

private static boolean func_150080_a(Block p_150080_0_, World p_150080_1_, int p_150080_2_, int p_150080_3_, int p_150080_4_, boolean p_150080_5_)
{
if (p_150080_0_ == Blocks.obsidian) // Ici on dit le nom du bloc qui sera impistonnable
{
return false; // Si le bloc est bien de l'obsidian on annule l'action de le poussé avec le piston tout simplement .
}
else
{
.......

Quand tu as trouvé ce code, il suffit d'ajouter une condition comme celle-ci :

if (p_150080_0_ == Blocks.MONBLOC) // Ici on dit le nom du bloc qui sera impistonnable
{
return false; // Si le bloc est bien MONBLOC on annule l'action de le poussé avec le piston tout simplement .
}

et voilà, le tour est joué :D

  • Upvote 3
  • Downvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne suis pas fâché,c'est simplement que tu donnes une réponse à un tutoriel qui n'a pas pu être commencé car ma carte graphique est littéralement fichue. Le mieux aurait été de m'envoyer ça par MP.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

serais-tu d'accord pour que j'intègre ton tutoriel (une fois qu'il sera rédigé) comme une sous-partie du ?

Tu seras bien évidemment cité.

Partager ce message


Lien à poster
Partager sur d’autres sites

D'accord, je le ferai une fois que tu l'auras rédigé !

Bien évidemment ! Tu n'es même pas obligé de me citer. ^^'

Si, tu l'a écrit en haut du topic :

88x31.png
Cette uvre est mise à disposition selon les termes de laLicence Creative Commons Attribution - Pas dUtilisation Commerciale - Pas de Modification 3.0 non transposé. Tout partage implique que vous citiez l'auteur original.

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est très simple à faire, un bloc anti-piston.

Tu vas dans la class BlocPistonBase et tu cherche ceci :

private static boolean func_150080_a(Block p_150080_0_, World p_150080_1_, int p_150080_2_, int p_150080_3_, int p_150080_4_, boolean p_150080_5_)
{
if (p_150080_0_ == Blocks.obsidian) // Ici on dit le nom du bloc qui sera impistonnable
{
return false; // Si le bloc est bien de l'obsidian on annule l'action de le poussé avec le piston tout simplement .
}
else
{
.......

Quand tu as trouvé ce code, il suffit d'ajouter une condition comme celle-ci :

if (p_150080_0_ == Blocks.MONBLOC) // Ici on dit le nom du bloc qui sera impistonnable
{
return false; // Si le bloc est bien MONBLOC on annule l'action de le poussé avec le piston tout simplement .
}

et voilà, le tour est joué :D

Bien de leech mes citations xD

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour la partie Serveur, soit Craftbukkit / Spigot, le code sera similaire, avec également seulement 3 lignes.

Je m'en occuperai quand j'aurai le temps, je dois travailler mon HDA, l'épreuve est le 10 juin.

Partager ce message


Lien à poster
Partager sur d’autres sites

mais pourquoi faire un autre matérial ? on peu tout simplement utiliser le Material.anvil sur le client et le Material.HEAVY sous craftbukkit ça évite de faire du changement partout ^^

  • Upvote 1

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

×