Création de blocs personnalisé !


Categorie : Ressourcepack

Poster le : 2020-04-04 03:41:09 par

Hardel

Introduction :

Bonjour, nous voilà réuni aujourd'hui pour parler de la création de blocs personnaliser, nous verrons comment en créer, en utilisant la technique utilisant les "Spawner". 

Nous verrons aussi les avantages et les inconvénients de la technique "Spawners", tout se seras détailler dans la plus grande précision et comme d’habitude si vous avez des question n'hésiter pas.

Principe de conception :

Le principe d'un bloc personnalisé est de mettre un CustomModelData sur un bloc, ici on va utiliser un bloc de commande et on va aussi utiliser un Model 3D, ensuite on va faire apparaître un porte armure dans un spawner avec une certaine orientation, qui auras sur là tète le bloc de commande qui posséderas le CustomModelData

Je vous conseille de connaître la notion de CustomModelData, pour suivre ce guide.


Création du ressource pack :


Pour commencer nous allons créer la base d'un "Ressource Pack" pour cela, c'est très simple créer un dossier et mettait s'y dedans, trois fichiers :

  • Une images "pack.png" qui va être la photo de votre "Ressource Pack".
  • Un dossier "assets" qui contiendras les ressources, et dedans créer-y un dossier "minecraft", ainsi qu'un autre dossier avec le nom de votre choix.
  • Un fichier "pack.mcmeta" qui va faire comprendre à Minecraft que c'est un Ressource Pack.

Le fichier pack.mcmeta contiendra ceci à l’intérieur :

{
  "pack": {
    "pack_format": 5,
    "description": "Tutoriel de création de blocs custom"
  },
  "language": {}
}

La ligne "pack_format" permet de dire à Minecraft quelle version est votre Ressource Pack, et la  ligne "description" c'est assez transparent, cela permet de mettre un texte qui décrit votre Ressource Pack.

Le numéro du "pack_format" correspond aux différentes versions de Minecraft, si votre ressource pack est utiliser dans la mauvaise version, il s'affichera en rouge,  mais il fonctionneras toujours.

  1. Pour la version 1.6 à 1.8 de Minecraft.
  2. Pour la version 1.9 à 1.10 de Minecraft.
  3. Pour la version 1.11 à 1.12 de Minecraft.
  4. Pour la version 1.13 à 1.14 de Minecraft.
  5. Pour la version 1.15 (à 1.16) de Minecraft.

Bien, maintenant aller dans le dossier "assets" et créer s'y deux dossiers un portant le nom de "minecraft" qui permettras de modifier les données de minecraft, et aussi créer un dossier portant le nom que vous souhaiter pendant ce guide, je vais appeler ce dossier "hardel".


Création du CustomModelData :


Allons dans le dossier "minecraft" et créer s'y un dossier "models" et dans ce dossier vous créerais un dossier "item", et on rentre aussi dans ce dossier et on va créer cette fois un fichier, que l'on va appeler "command_block.json". (Dans le cas de ceux guide ,j'ai pris le bloc de commande, mais cela fonctionne avec n'importe quel bloc, nous allons juste utiliser celui ci pour mettre des CustomModelData.

Voici donc la structure du fichier, si vous ne s'avez pas comment utiliser les CustomModelData, un guide sur Hardel.fr a déjà étais réaliser. https://hardel.fr/article/ressourcepack/apprendre-les-custom-model-data

{
    "parent": "block/cube_directional",
    "textures": {
        "particle": "block/command_block_back",
        "down": "block/command_block_side",
        "up": "block/command_block_side",
        "north": "block/command_block_front",
        "east": "block/command_block_side",
        "south": "block/command_block_back",
        "west": "block/command_block_side"
    },
    "overrides": [
    	{ "predicate": {"custom_model_data": 1}, "model": "hardel:mineral/terrarium_ore"},
    	{ "predicate": {"custom_model_data": 2}, "model": "hardel:mineral/solarium_ore"},
    	{ "predicate": {"custom_model_data": 3}, "model": "hardel:mineral/enderium_ore"}
    ]
}

Bien maintenant que cela est fait nous allons passer à la création des fichiers "models", rendez-vous a la base de votre ressource pack, et aller dans le dossier vide, précédemment créer qui est nommées "hardel" pour ma part.


Création du Model3D :

Nous allons créer deux dossiers, "textures" et "models".

  • Le dossier "textures" contiendras la liste des images des blocs.
  • Le dossiers "models", seront les fichier qui traite de la forme de l'item, 2D ou 3D.

Rentrons dans "models" et créer s'y des dossier de rangement, personnellement, je créerais un dossier "mineral", le rangement permet de mieux s'y retrouver, après avoir laisser un projet a l'abandon, puis nous allons créer le fichier "terrarium_ore.json", car je l'ai nommer ainsi dans le fichier du CustomModelData.

{
	"parent": "block/block",
	"textures": {
		"face": "hardel:mineral/enderium_ore"
	},
	"elements": [
		{
			"from": [0, 0, 0],
			"to": [16, 16, 16],
			"faces": {
				"north": {"uv": [0, 0, 16, 16], "texture": "#face"},
				"east": {"uv": [0, 0, 16, 16], "texture": "#face"},
				"south": {"uv": [0, 0, 16, 16], "texture": "#face"},
				"west": {"uv": [0, 0, 16, 16], "texture": "#face"},
				"up": {"uv": [0, 0, 16, 16], "texture": "#face"},
				"down": {"uv": [0, 0, 16, 16], "texture": "#face"}
			}
		}
	],
	"display": {
		"thirdperson_righthand": {
			"rotation": [75, 30, -20],
			"scale": [0.4, 0.4, 0.4]
		},
		"thirdperson_lefthand": {
			"rotation": [75, 30, -20],
			"scale": [0.4, 0.4, 0.4]
		},
		"firstperson_righthand": {
			"rotation": [0, 135, 0],
			"scale": [0.4, 0.4, 0.4]
		},
		"firstperson_lefthand": {
			"rotation": [0, 135, 0],
			"scale": [0.4, 0.4, 0.4]
		},
		"gui": {
			"rotation": [30, -135, 0],
			"scale": [0.6, 0.6, 0.6]
		},
		"ground": {
			"rotation": [0, 0, 0],
			"scale": [0.27, 0.27, 0.27]
		},
		"fixed": {
			"rotation": [0, 0, 0],
			"scale": [0.48, 0.48, 0.48]
		},
		"head": {
			"rotation": [ -30, 0, 0 ],
            "translation": [ 0, -30.72, -7.21 ],
            "scale": [ 3.0155, 3.0155, 3.0155 ]
		}
	}
}

Je vais prendre le temps de vous expliquer chaque détail de ce fichier :

Pour commencer un définie le Model3D a "block/block" qui la modélisation d'un bloc 3D de base utiliser par Minecraft.

On rajoute ensuite trois textures, on les affecte au chiffre "0", "1" et "2", et on définie la particule du bloc lorsque l'on le détruit ou marche dessus.

Dans la section "elements", on va décider de quelle textures va aller sur quelle faces avec # puis le nombre.

Pour finir, on va définir un Model3D spécial quand ce bloc sera porté sur la tête d'un porte armure sont Model3D va changer, les valeurs utiliser, on était longuement rechercher.

Nous avons maintenant, finis avec cela, nous n'avons plus qu'a déposer les images des blocs dans le dossier "textures", oublier pas de penser au rangement !


Apparition du bloc :

Rendons-nous maintenant en jeu, penser a activer le Ressource pack dans les options.
Pour faire apparaître le bloc il suffit tout simplement d'utiliser une commande /setblock, voici la commande exacte :

setblock ~ ~ ~ minecraft:spawner{MaxNearbyEntities:0,RequiredPlayerRange:0,
SpawnData:{id:"minecraft:armor_stand",
Marker:1b,Invisible:1b,
ArmorItems:[{},{},{},{id:"minecraft:command_block",Count:1b,tag:{CustomModelData:2VALUE}}]}}

Remplacer "VALUE" par la valeur du CustomModelData de votre bloc.

Voila tout devrais fonctionner a merveille, si vous voulez associer un item quand ce bloc est miner, il faut utiliser un datapack, nous l'avons fait dans le tutoriel Génération procédurale de minerais. Je vous conseille de suivre ce guide, pour faire simple il suffit de rajouter une LootTable pour le spawner :


Rajouter une LootTable a ce bloc :



    "type": "minecraft:block",
    "pools": [
        {
            "rolls": 1,
            "entries": [
                {
                    "type": "minecraft:item",
                    "name": "minecraft:command_block",
                    "functions": [
                        {
                            "function": "minecraft:copy_nbt",
                            "source": "block_entity",
                            "ops": [
                                {
                                    "source": "SpawnData.ItemsLoot.CustomModeldata",
                                    "target": "CustomModelData",
                                    "op": "replace"
                                },
                                {
                                    "source": "SpawnData.ItemsLoot.Name",
                                    "target": "display.Name",
                                    "op": "replace"
                                },
                                {
                                    "source": "SpawnData.ItemsLoot.OreID",
                                    "target": "OreID",
                                    "op": "replace"
                                }
                            ]
                        }
                    ]
                }
            ],
            "conditions": [
                {
                    "condition": "minecraft:survives_explosion"
                }
            ]
        }
    ]
}

Pour faire simple on va venir copier les NBT du bloc, et les insérer dans l'item.
Donc il vous faudra placer les NBT de l'item dans le bloc a miner, le problème de cette méthode et que l'on peut pas préciser l'id de l'item.

                                {
                                    "source": "SpawnData.ItemsLoot.CustomModeldata",
                                    "target": "CustomModelData",
                                    "op": "replace"
                                }

Ici on va venir chercher la données qui se trouve dans SpawnData.ItemsLoot.CustomModeldata du bloc, et on va venir le placer dans le NBT "CustomModelData" de l'item, cette action est en "replace" elle va écraser l’ancien CustomModelData pour mettre le nouveaux.

  • Source, permet d'aller chercher des données du bloc.
  • Target, permet de dire, ou coller cette données dans l'item.
  • Operation, c'est comment doit être coller cette donner, doit t'elle être remplacer, additionner ou autre...

Voila la nouvelle commande /setblock :

setblock ~ ~ ~ minecraft:spawner{MaxNearbyEntities:0,RequiredPlayerRange:0,
SpawnData:{id:"minecraft:armor_stand",ItemsLoot:{CustomModelData:300,Name:'{"text":"Terrarium","color":"aqua"}',OreID:"Terrarium"},
Marker:1b,Invisible:1b,
ArmorItems:[{},{},{},{id:"minecraft:command_block",Count:1b,tag:{CustomModelData:2VALUE}}]}}

Il faut modifier le "ItemsLoot", ces les données qui seront attribuer a l'item, et normalement tout fonctionneras.
Merci d’avoir pris le temps de lire ce guide et a bientôt

Espace commentaire :