Appearance
MINECRAFT FORGE 1.20.1 MODDING MASTERCLASS
Ce cours aborde deux aspects fondamentaux du comportement d'un bloc dans Minecraft : ce qu'il laisse tomber au sol lorsqu'il est détruit (Loot Tables) et les conditions requises pour qu'il soit miné à la bonne vitesse avec le bon outil (Règles d'extraction).
1. Les Tables de Butin (Loot Tables) via JSON
Depuis plusieurs versions de Minecraft, les récompenses d'un bloc ne sont plus codées en Java, mais définies dans des fichiers de configuration au format .json. Si aucun fichier de loot table n'est présent pour votre bloc, celui-ci ne donnera rien du tout une fois cassé.
Emplacement du fichier
Le fichier JSON doit impérativement être placé dans l'arborescence exacte de vos ressources de modding: src/main/resources/data/[votre_mod_id]/loot_tables/blocks/[nom_du_bloc].json
Exemple concret : Drop simple du bloc lui-même
Voici le contenu d'un fichier JSON standard pour qu'un bloc (par exemple, mon_minerai_custom) se donne lui-même en butin lorsqu'il est détruit:
json
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"entries": [
{
"type": "minecraft:item",
"name": "mon_mod_id:mon_minerai_custom"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}(Note : Le code a été restructuré proprement pour corriger les coupures du texte brut).
💡 Note : La condition
minecraft:survives_explosionest essentielle. Elle garantit que si le bloc est détruit par de la TNT, l'objet au sol a une chance de ne pas être complètement désintégré, respectant ainsi la mécanique vanilla.
2. Configurer les Règles d'Extraction en Java
Pour définir la dureté d'un bloc et restreindre son extraction à des outils spécifiques (comme imposer une pioche en fer pour un minerai précieux), on utilise les propriétés du bloc et la surcharge de méthodes de la classe Block.
Étape A : Déclaration des propriétés de base
Lors de l'enregistrement de votre bloc, vous devez utiliser la méthode requiresCorrectToolForDrops() pour signaler au jeu que le bloc ne donnera pas de loot s'il est cassé à mains nues ou avec le mauvais outil.
java
public static final RegistryObject<Block> MON_MINERAI = BLOCKS.register("mon_minerai_custom",
() -> new MonMineraiBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.STONE)
.strength(3.0f, 3.0f) // Premier paramètre dureté, deuxième résistance aux explosions
.requiresCorrectToolForDrops() // Oblige l'usage de l'outil adéquat pour obtenir le drop
)
);Étape B : Gestion avancée de la vitesse et de la validation
Dans votre classe personnalisée de bloc (MonMineraiBlock), vous pouvez surcharger deux méthodes clés pour affiner le comportement:
java
package com.monmod.common.block;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.Tiers;
import net.minecraft.world.item.DiggerItem;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
public class MonMineraiBlock extends Block {
public MonMineraiBlock(Properties properties) {
super(properties);
}
// Détermine si l'outil tenu par le joueur permet de récupérer le drop
@Override
public boolean isCorrectToolForDrops(BlockState state, ItemStack stack) {
// On verifie si l'outil possède au moins le tier FER (Tier 2)
if (stack.getItem() instanceof DiggerItem diggerItem) {
Tier toolTier = diggerItem.getTier();
// Tiers disponibles: WOOD, STONE, IRON, DIAMOND, NETHERITE
return toolTier == Tiers.IRON || toolTier == Tiers.DIAMOND || toolTier == Tiers.NETHERITE;
}
return false;
}
// Permet de modifier dynamiquement la vitesse de minage
@Override
public float getDestroySpeed(BlockState state, net.minecraft.world.level.BlockGetter level, net.minecraft.core.BlockPos pos) {
// Vous pouvez renvoyer une valeur fixe ou appliquer des modificateurs ici
return super.getDestroySpeed(state, level, pos);
}
}3. L'approche moderne par les Tags (Alternative recommandée)
Bien que la surcharge de isCorrectToolForDrops soit parfaitement fonctionnelle en Java, Minecraft 1.20.1 favorise l'utilisation du système de Tags JSON pour attribuer les catégories d'outils. C'est l'approche standard adoptée par Mojang.
Pour lier votre bloc à une pioche en fer sans écrire la logique Java ci-dessus, il suffit de créer deux fichiers JSON sous src/main/resources/data/minecraft/tags/blocks/:
mineable/pickaxe.json: Pour déclarer que le bloc se mine à la pioche.needs_iron_tool.json: Pour déclarer que le bloc nécessite le niveau Fer au minimum.
Cette approche par tags évite de surcharger inutilement le code Java et assure une compatibilité native parfaite avec les autres mods du jeu.