1. Si vous venez d'arriver sur le forum et que vous êtes un peu perdus, cliquez ici !
    Rejeter la notice

Tutoriel Suivez le développement d'un no-mod 1.9 (avec resourcepack) de A à Z!

Discussion dans 'Redstone & Commands blocks' créé par Freeze', 29 Fev 2016.

  1. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    Hey! Comme vous l'avez sûrement vu dans le titre (bah oui sinon vous auriez pas cliqué), vous allez suivre à travers ce topic le développement de mon no-mod en 1.9.

    °Mes conseils pour un monde apte à la création de no-mods:
    Voici le chemin dans le créateur de mondes:
    >Create new world
    >Définir un nom + Game mode: creative
    >More world options
    >World type: superflat
    >Customize
    >Presets
    >Redstone Ready
    >Use preset
    >Done
    >Create new world

    Ensuite, commencez par définir quelques gamerules:
    > Mettez le jour infini
    Code (cpp):
    /gamerule doDaylightCycle false
    >Empêchez le spawn des mobs (pour ne pas être embêté)
    Code (cpp):
    /gamerule doMobSpawning false
    >Enlevez les messages de command blocks, sinon vous ne vous en sortirez plus.
    Code (cpp):
    /gamerule commandBlockOutput false
    Et c'est parti pour la création!
    I/ Le no-mod
    Donc, avec ce no-mod, vous aurez la possibilité de faire éclore l’œuf de dragon et d'avoir un lézard géant rien qu'à vous, tout mimi et câlin mais surtout SURPUISSANT :diable: et DESTRUCTEUR.
    Il bénéficiera donc d'attaques surpuissantes pour détruire vos ennemis, mais ne sera pas non plus facile à faire grandir. En effet, il vous faudra du lait de dragon (dragon breath+seau de lait+nether star) pour le mener à sa taille adulte.

    J'ai l'ambition de créer plusieurs resource packs pour que vous ayez le choix entre plusieurs types de dragons.


    II/ Partie resource packs
    Ici, je vous donnerais tous les bouts de codes et astuces que j'utilise pour personnaliser au maximum le resource pack.
    Tout d'abord, sachez que j'utilise BDCraft Cubik Pro pour le resourcepack et qu'il sera principalement en 3d. Pour les textures, j'utilise Photoshop Cs6 mais un autre logiciel tel que gimp fera amplement l'affaire.

    ° Faire une texture qui n'en modifie aucune autre dans le jeu.
    Vous avez pour cela deux moyens:
    -Les structure blocks. Les structure blocks sont des blocks utilisés par mojang pour développer le jeu. On ne peut les obtenir que grâce à des commandes, ils sont incassables en survie, émettent de la lumière et sont au nombre de quatre. Ils ne peuvent que se poser grâce à des commandes:
    Code (cpp):
    /setblock ~ ~ ~ minecraft:structure_block
    Pour celui en forme de S
    Code (cpp):
    /setblock ~ ~ ~ minecraft:structure_block 1
    Pour celui en forme de L
    Code (cpp):
    /setblock ~ ~ ~ minecraft:structure_block 2
    Pour celui en forme de C
    Code (cpp):
    /setblock ~ ~ ~ minecraft:structure_block 3
    Pour celui en forme de D

    Il suffit maintenant de changer leur model dans votre resource pack:
    >assets
    >minecraft
    >models
    >block
    >structure_block_corner ou structure_block_data ou structure_block_load ou structure_block_save

    Vous aurez maintenant de nouvelles textures / models non obtenables en survie.

    Le défaut: Les structures blocks ne peuvent que êtres posés, ils ne sont pas obtenables en tant qu'items dans l'inventaires. Ils sont au nombre de quatre, ce qui limite les possibilités.

    -Les damage d'items
    Parmi son lot de nouveautés apportées par la 1.9 qui vont révolutionner le mapmaking, je vais vous faire découvrir l'une d'elles. En effet, nous pouvons maintenant appliquer des models/textures différents aux items ayant une durabilité (outils).

    >Voici un tutoriel très bien expliqué de samasaurus6, mais malhereusement en anglais, ça serait trop long d'expliquer sur ce post.
    >

    Je vous mets ici le tutoriel de @Calambiel pour l'utiliser:
    >
    Je laisse quand même un exemple de .json ci-dessous.
    Code (cpp):
    {
       "parent": "item/handheld",
       "textures": {
           "layer0": "items/stone_sword"
       },
           "overrides": [
                   { "predicate": { "damaged": 1, "damage": 0.2}, "model": "item/stone_sword_damaged_1"},
                   { "predicate": { "damaged": 1, "damage": 0.4}, "model": "item/stone_sword_damaged_2"},
                   { "predicate": { "damaged": 1, "damage": 0.6}, "model": "item/stone_sword_damaged_3"},
                   { "predicate": { "damaged": 1, "damage": 0.8}, "model": "item/stone_sword_damaged_4"}
       ]
    }
    Ici nous modifions donc l'épée en pierre, le fichier s'appelle stone_sword.json et se trouve dans le dossier models>item (il y a aussi block pour les blocks mais je ne connais pas de moyen de faire varier la texture).

    La fonction overrides permet selon certaines paramètres d'utiliser un model différent, ici la durabilité.
    Le damage défini le pourcentage de durabilité à partir duquel le changement de model est observé (0.8 étant donc lorsque l'item n'est plus qu'à 20% de durabilité) et model donne le nom du fichier de modèle à utiliser.

    Cela ne veut pas dire qu'il faut nécessairement des models 3D, un model peut utiliser une simple texture se trouvant dans le pack, comme dans cet exemple :
    Code (cpp):
    {
       "parent": "item/handheld",
       "textures": {
           "layer0": "items/stone_sword_damaged_1"
       }
    }
    Ceci serait mon model "stone_sword_damaged_1.json" dans models>item, qui permet d'appliquer la texture éponyme se trouvant dans textures>items.

    (Ah et pour ceux qui se posent la question, le "damaged" de la fonction overrides permet de choisir si l'item doit avoir perdu de la durabilité ou pas, ce que ça implique : pour une valeur de 1 cela affecte un objet normal mais pour une valeur de 0 cela peut affecter un objet avec le tag unbreakable, ce qui permet de donner une quasi infinité de textures pour un objet avec beaucoup de durabilité)


    Donc, en utilisant cette technique, vous pourrez donner une nouvelle texture/model à l'item quand il est endommagé au maximum. Vous pourrez ajouter 30 models (car il y a 30 outils avec durabilité).

    J'ai ici un model se nommant "stade_1" dans le dossier "item".

    Code (cpp):
    {
        "parent": "item/handheld",
        "textures": {
            "layer0": "items/diamond_hoe"
        },


        "overrides":[
            { "predicate": { "damaged": 1, "damage": 1}, "model": "item/stade_1"}
            ]

    }
     
    Je remplace ici le model de la houe en diamant (diamond_hoe) cassée à 100% par le model de mon dragon au stade 1 (le plus petit).

    Le défaut: après des test, il s'avère que les items ne se cassent que quand leur durabilité est de -1, donc avec une durabilité de 0, leur model sera toujours visible. Sauf erreur de ma part, il est impossible de définir un model pour les durabilités négatives d'un item, bien que l'on puisse s'en giver. Mais, en considérant que la personne va sûrement spam-click, le model pour la durabilité 0 ne sera visible qu'une fraction de seconde.

    Obtenir un item avec un dommage voulu:

    >Pressez simultanément f3+H sur votre clavier.
    >Prenez l'outil de votre choix (ici la houe en diamant), mettez vous en survie et frappez un mob avec pour user sa durabilité.
    >Remettez-vous en créatif et passez votre curseur sur l'outil. Vous verrez apparaître:
    Durability: 1560/1561 (valeurs pour la houe en diamant, elles varieront selon l'outil choisi)
    >Vous connaissez maintenant le nombre d'utilisations de votre item: 1561 pour la houe en diamant.
    >Utilisez cette commande:
    Code (cpp):
    /give @p diamond_hoe 1 1
    Vous obtiendrez une houe en diamant usée une fois. Si vous remplacez le 1 par un 500, la houe sera usée 500 fois.
    >Nous voulons ici qu'elle soit usée au maximum, donc 1561 fois. Il suffit juste de remplacer le dernier 1 par 1561.
    Code (cpp):
    /give @p diamond_hoe 1 1561
    Nous avons maintenant une houe en diamant avec 1561 dommages. Mais comment la mettre sur la tête d'un armorstand, pour qu'elle ait la taille désirée?
    Il suffit juste d'utiliser cette commande:
    Code (cpp):
    /summon ArmorStand ~ ~1 ~ {ArmorItems:[{},{},{},{id:diamond_hoe,Damage:1561}]}
    Vous pouvez aussi personnaliser la commande, comme cela (c'est celle que j'utilise)
    Code (cpp):
    /summon ArmorStand ~ ~1 ~ {Tags:["Stade_1"],ArmorItems:[{},{},{},{id:diamond_hoe,Damage:1561}],Invisible:1,Invulnerable:1,Marker:1}
    III/Partie command blocks
    A/ Monter sur le lézard
    Je vais ici vous apprendre à créer un mob montable comme un cheval.


    1° Faire apparaître un cheval: Je vais ici fair apparaître un cheval invisible, qui nous servira de base.
    L'apparition:
    Code (cpp):
    /summon EntityHorse ~ ~1 ~ {Tags:["Lezard"],Type:0,Variant:0,Silent:1,CustomName:Lizard,CustomNameVisible:1}
    Le rendre invisible (commande à mettre en repeat)
    Code (cpp):
    /effect @e[tag=Lezard] minecraft:invisibility 1 1 true
    Je lui administre également un peu de lenteur:
    Code (cpp):
    /effect @e[tag=Lezard] minecraft:slowness 1 3 true

    2° Faire apparaître un ArmorStand invisible portant sur la tête le model 3d que vous avez utilisé pour représenter le mob.
    L'apparition (au même endroit que le cheval):
    Code (cpp):
    /summon ArmorStand ~ ~1 ~ {Tags:["Stade_3"],ArmorItems:[{},{},{},{id:wooden_hoe,Damage:59}],Invisible:1,Invulnerable:1,Marker:1,NoGravity:1,Silent:1}
    3° Téléporter l'ArmorStand.

    a/ Le téléporter un dixième de block plus bas:
    tp @e[tag=Stade_3] ~ ~-0.1 ~
    Cela ne sert à rein pour l'instant mais sera utile lors du kill.

    b/ Le téléporter au cheval:
    Code (cpp):
    execute @e[tag=Stade_3] ~ ~ ~ tp @e[tag=Stade_3,c=1] @e[tag=Lezard,c=1,r=2]
    Note: Si vous voulez que plusieurs Mobs puissent se promener sans soucis au même moment, il est très important de bien laisser le c=1 et le r=2. Vous aurez néanmoins des problèmes si deux lézards se rentrent dedans, c'est pourquoi je vous conseille de tuer les lézards quand ils se rentrent dedans avec un effet cool. C'est ce que nous allons faire maintenant:

    B/ Tuer les lézards quand ils se rentrent dedans
    Je vais commencer par vous expliquer comment détecter quand deux lézards sont dans un rayon de 3 blocks.
    Code (cpp):
    execute @e[type=EntityHorse,tag=Lezard] ~ ~ ~ execute @e[type=EntityHorse,tag=Lezard,r=3,rm=1] ~ ~ ~
    Cette commande exécute sur les chevaux avec le tag lézard un execute dans un rayon de 3 blocks et un rayon de 1 au minimum à un autre cheval avec le tag de lézard une commande, ce qui permets de détecter si deux lézards sont côte à côte.

    Nous allons rajouter un effet de particule:
    Code (cpp):
    execute @e[type=EntityHorse,tag=Lezard] ~ ~ ~ execute @e[type=EntityHorse,tag=Lezard,r=3,rm=1] ~ ~ ~ /particle dragonbreath ~ ~ ~ 1 1 1 0.01 1000
    Puis un effet sonore:
    Code (cpp):
    execute @e[type=EntityHorse,tag=Lezard] ~ ~ ~ execute @e[type=EntityHorse,tag=Lezard,r=3,rm=1] ~ ~ ~ /playsound minecraft:entity.enderdragon.growl hostile @a
    Et nous allons enfin tuer l'entité:
    Code (cpp):
    execute @e[type=EntityHorse,tag=Lezard] ~ ~ ~ execute @e[type=EntityHorse,tag=Lezard,r=3,rm=1] ~ ~ ~ /kill @e[tag=Lezard,r=3]
    Maintenant que le cheval a disparu, la commande inutile plus haut va permettre au corps du lézard de glisser à travers le sol jusqu’à tomber dans le vide et disparaître.

    C/ Crafts customisés au sol

    Nous allons ici (juste pour exemple) créer une stone monster egg à partir de 5 lingots de fer et d'une stone.

    a/ Les tags
    Pour reconnaître quel objet est jeté au sol, nous allons lui attribuer un tag.

    Code (cpp):
    /scoreboard players tag @e[type=Item] add Stone {OnGround:1b,Item:{id:"minecraft:stone",Count:1b}}
    Ici, le "OnGround:1b" permets de donner le tag uniquement si l'item est au sol. Le "Count:1b" veut dire qu'il ne doit y avoir qu'un exemplaire de l'item.

    Code (cpp):
    /scoreboard players tag @e[type=Item] add Iron {OnGround:1b,Item:{id:"minecraft:iron_ingot",Count:5b}}
    Cette fois, le "Count:5b" nous permets de dire qu'il faut 5 lingots.

    b/ Le craft
    Il faut d'abord détecter que les deux items sont au même endroit:
    Code (cpp):
    execute @e[tag=Stone] ~ ~ ~ execute @e[tag=Iron,r=1] ~ ~ ~
    Il ne nous reste plus qu'à exécuter notre commande. En l’occurrence, faire apparaître le nouveau block et tuer les items.
    Code (cpp):
    execute @e[tag=Stone] ~ ~ ~ execute @e[tag=Iron,r=1] ~ ~ ~ summon Item ~ ~1 ~ {Item:{id:"minecraft:monster_egg",Count:1b},Motion:[0.0,0.5,0.0]}
    Ici, le tag "Motion" sert à faire sauter l'item vers le haut.
    Puis,
    Code (cpp):
    execute @e[tag=Stone] ~ ~ ~ execute @e[tag=Iron,r=1] ~ ~ ~ kill @e[type=Item,c=2]
    On tue les items.
    IV/Les screenshots

    2016-03-02_17.07.32.png
    Le stade 2:
    2016-03-02_17.07.41.png
    Le stade 3 (vue 3° personne)
    2016-03-02_17.07.53.png
    (Vue 1° personne)
    2016-03-02_17.07.58.png
    (Vue extérieure)
    2016-03-02_17.08.16.png

    V/BDCraft Cubik Pro

    Voici tout d'abord un tutoriel pour apprendre à utiliser le logiciel <Lien>
    Mais je voudrais l'approfondir pour vous apprendre à mieux utiliser le logiciel.
    a) Les fenêtres
    Je vous conseille fortement d'utiliser le préréglage "max workspace with managers on right"
    >Window
    >Max workspace with mangers on right

    ou Ctrl+1 (sur votre pavé numérique)

    b) Les paramètres de la grille
    Rendez-vous dans:
    >Tools
    >Preferences
    >Grid settings

    Une fois ici, vous pouvez régler les paramètres d'affichage de la grille. Elle est par défaut à 16x16, donc la taille d'un block normal. Je préfère la passer à 32x32.

    Vous pouvez également décider de la "grid drag & drop snap" qui vous permettra de régler la taille de la grille pour les objets, c'est à dire pour définir leurs dimensions ou pour les déplacer. Par défaut, elle est de 32x32, ce qui donne un-demi pixel de plus par rapport à la grille visible. Vous pouvez le descendre à 8x8 ou le faire monter jusqu'à 256x256. Je vous conseille de le mettre à 64x64, ce qui vous donne un quart de pixel par rapport à la grille par défaut et un demi pour celle que j'aie définie.

    c) Astuces:
    ° Vous pouvez déplacer les cubes grâces aux flèches de votre pavé numérique.
    ° Vous pouvez définir l'endroit et la forme d’apparition de vos cubes en bougeant et en changeant la taille des petits carrés bleus.
    °Si vous ne voyez pas les textures, rendez-vous dans:
    >Tools
    >Preferences
    >View
    Et cochez "use advanced 3D preview with textures".
    °Vous pouvez charger une image sur les vues haut, devant et gauche en vous rendant dans:
    >Views
    >Load a picture for Top/Left/Front/All view

    Le tutoriel s'arrête là pour l'instant, mais ce post sera de nombreuses fois mis à jour au fur et à mesure que le no-mod évoluera, car je le construit avec vous et en suivant vos conseils. N'hésitez donc pas à me faire part de vos idées dans les commentaires. En attendant, suivez l'évolution de ce post et les commentaires que je posterai.

    Les commentaires importants:
    Aucun pour l'instant.
     
    • Utile Utile x 3
    • J'aime J'aime x 2
    • J'approuve J'approuve x 1
    #1 Freeze', 29 Fev 2016
    Dernière édition: 4 Mar 2016
  2. snipex_x

    snipex_x Enter the World

    Inscrit:
    30 Juil 2015
    Messages:
    43
    Points:
    32
    Sexe:
    Homme
    J attends la suite avec impatiente ^^ le no mod est déjà fini ou tu le fait au fur et à mesure
     
    • J'aime J'aime x 2
  3. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    Je fais au fur et à mesure, comme ça je peux prendre des idées et des conseils pour améliorer et ce sera vraiment interactif :P.
     
    • J'aime J'aime x 1
  4. Calambiel

    Calambiel Modérateur

    Inscrit:
    5 Août 2014
    Messages:
    6 603
    Points:
    219
    • J'aime J'aime x 1
  5. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    Le post original a été mis à jour! Allez voir les nouveautés :p
     
    • J'aime J'aime x 1
  6. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    Suite à une nouvelle fonctionnalité rajoutée par mojang qui considère qu'un cheval ridé fait partie du joueur, il n'est plus possible de donner l'effet lévitation à un cheval ridé. Par ce fait, le dragon ne volera jamais. Je vais donc le remplacer par un gigantesque lézard cracheur de venin ect. Dommage pour le dragon ;( le post original a été mis à jour
     
    • J'aime J'aime x 1
  7. Calambiel

    Calambiel Modérateur

    Inscrit:
    5 Août 2014
    Messages:
    6 603
    Points:
    219
    Tu peux mettre ton cheval en Passenger d'une autre entité et appliquer la levitation sur cette autre entité.

    Par contre ça ne semble pas marcher pour les ArmorStands en NoGravity donc faut pas mettre ce tag lorsque tu élèves/abaisses l'entité, seulement lorsqu'elle reste statique.
     
  8. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    C'est ce que j'ai fait, mais je veux que l'on puisse diriger l'entité avec le regard. C'est pourquoi j'avais choisi le cheval, qu'on peut monter. Mais avec une entité en dessous, cela n'est plus possible :/
     
    • J'aime J'aime x 1
  9. Calambiel

    Calambiel Modérateur

    Inscrit:
    5 Août 2014
    Messages:
    6 603
    Points:
    219
    Où est le problème ?
    Tu détectes le regard du joueur et applique juste le mouvement sur l'entité du dessous.

    Après je sais pas comment tu veux gérer le reste du no-mod, mais pour la composante de vol ça parait faisable, même si elle entrave le mouvement au sol.

    Certes c'est moins pratique que si on pouvait viser le cheval mais y a moyen.

    (Il est toujours possible de faire une interaction permettant d'alterner entre une forme de vol avec l'entité en-dessous et une forme au sol sans, pourquoi pas en mettant/retirant la selle)
     
    #9 Calambiel, 2 Mar 2016
    Dernière édition: 2 Mar 2016
  10. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    C'est une possibilité, mais je pense que cela prendrait trop de command blocks, déjà que je veux faire un système pour lancer des attaques en suivant le regard. Je vais y réfléchir.
     
    • J'aime J'aime x 1
  11. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    Up! La partie "command block" du post à été mise à jour.
     
    • J'aime J'aime x 1
  12. Redz

    Redz Résident de l'End

    Inscrit:
    7 Sept 2014
    Messages:
    5 279
    Points:
    229
    Pour le monde de blocs de commande, depuis la 1.9 on peut aussi utiliser le preset The Void ;)
     
  13. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    Ouais, mais la place est pas optimale
     
    • J'aime J'aime x 1
  14. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    Update du post! Ajout du jour: le craft customisé! :p
     
    • J'aime J'aime x 1
  15. Gleanight

    Gleanight Explorateur

    Inscrit:
    11 Fev 2016
    Messages:
    74
    Points:
    58
    Pour faire en sorte qu'une entité "suive" ton regard à la valeur près, tu peux toujours utiliser un "@e[type=[Entité]" (si elle a un nom spécifique, n'oublie pas le "name=") en utilisant les coordonnées relatives ~ ~ ~ ~ ~
    Les 4ème et 5ème "~" définissent l'orientation verticale & horizontale du regard du joueur.
    J'ai déjà fait ce genre de chose avec les ArmorStands, et je peux te dire que ça marche bien ^^
     
    • J'approuve J'approuve x 1
    • Informatif Informatif x 1

Partager cette page