(Cet article fait partie d'une série d'articles de commentaires)
Premier article: Introduction Article précédent: 1. Ajouter des éléments Article suivant: 3. Add Creative Tab
Ajoutez un bloc. L'ajout de blocs est similaire à l'ajout d'éléments, c'est donc ** facile **! Prenez la méthode de création d'une classe qui gère les blocs de la même manière que pour les éléments.
\src\main\java\jp\koteko\example_mod\
   ├ ExampleMod.java
   └ lists
      ├ BlockList.java
      └ ItemList.java
BlockList.java
package jp.koteko.example_mod.lists;
import jp.koteko.example_mod.ExampleMod;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
@Mod.EventBusSubscriber(modid = ExampleMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class BlockList {
    public static Block ExampleBlock = new Block(Block.Properties.create(Material.IRON))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_block"));
    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event) {
        event.getRegistry().registerAll(
                ExampleBlock
        );
    }
    @SubscribeEvent
    public static void registerBlockItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().registerAll(
                new BlockItem(ExampleBlock, new Item.Properties().group(ItemGroup.BUILDING_BLOCKS))
                        .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_block"))
        );
    }
}
Soit dit en passant, supprimons la description d'enregistrement préparée depuis le début dans le fichier principal.
ExampleMod.java
//...
public class ExampleMod
{
    //...
    //Supprimer d'ici
    //@Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
    //public static class RegistryEvents {
    //    @SubscribeEvent
    //    public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
    //        // register a new block here
    //        LOGGER.info("HELLO from Register Block");
    //    }
    //}
    //Supprimé jusqu'à présent
}
Maintenant, commençons le jeu.
Des blocs ont été ajoutés!
Comme vous pouvez le voir dans le code, l'ajout d'un bloc est fondamentalement identique à l'ajout d'un élément, mais une chose à noter est qu'un bloc existe en tant que bloc ainsi qu'en tant qu'élément, donc son enregistrement Est également nécessaire.
La pièce pour enregistrer le bloc
public class BlockList {
    //Déclarer et initialiser le bloc en tant que variable membre
    // Material.IRON spécifie quelque chose comme le fer comme propriété de bloc
    //L'ID de bloc à enregistrer avec setRegistryName est défini.
    // "example_block"ID de bloc dans lequel la partie de est enregistrée plus bas
    public static Block ExampleBlock = new Block(Block.Properties.create(Material.IRON))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_block"));
    //Bloquer l'inscription
    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event) {
        event.getRegistry().registerAll(
                ExampleBlock
        );
    }
    //Enregistrement d'article
    //Puisqu'il existe une classe BlockItem, l'argument à enregistrer comme nouveau avec this est(Block, Item.Propaties)
    @SubscribeEvent
    public static void registerBlockItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().registerAll(
                new BlockItem(ExampleBlock, new Item.Properties().group(ItemGroup.BUILDING_BLOCKS))
                        .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_block"))
        );
    }
}
\src\main\resources
   └ assets
      └ example_mod
         ├ blockstates
         │  └ example_block.json
         ├ lang
         │  └ en_us.json
         │  └ ja_jp.json
         ├ models
         │  ├ block
         │  │  └ example_block.json
         │  └ item
         │     └ example_block.json
         └ textures
            ├ blocks
            │  └ example_block.png
            └ items
blockstates\example_block.json
{
  "variants": {
    "": { "model": "example_mod:block/example_block" }
  }
}
" MOD_ID: bloc / [nom du fichier de modèle] " `
Vous pouvez définir la texture pour chaque valeur d'état du bloc, mais elle est omise ici.
en_us.json
{
  "item.example_mod.example_ingot": "Example Ingot",
  "block.example_mod.example_block": "Example Block"
}
ja_jp.json
{
  "item.example_mod.example_ingot": "Exemple de lingot",
  "block.example_mod.example_block": "Exemple de bloc"
}
models\block\example_block.json
{
  "parent": "block/cube_all",
  "textures": {
    "all": "example_mod:blocks/example_block"
  }
}
Spécifiez un cube simple avec "" parent ":" block / cube_all "`. Spécifiez la texture sur toute la surface avec «" tout "».
models\item\example_block.json
{
  "parent": "example_mod:block/example_block"
}
Spécifiez le fichier de modèle de bloc dans " parent ".
Essayez de relancer le jeu.

** Des articles ont été ajoutés! ** **
Q. Même si je le casse, il ne devient pas un objet? ** A. Soyons loottable. ** **
\src\main\resources
   ├ assets
   └ data
      └ example_mod
         └ loot_tables
            └ blocks
               └ example_block.json
example_block.json
{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "example_mod:example_block"
        }
      ]
    }
  ]
}
Q. Je veux l'utiliser comme source de lumière
Q. Je souhaite configurer l'outil de destruction
** A. Observez net.minecraft.block.Block. ** **
Block.java
// ...
   public static class Properties {
      private Material material;
      private MaterialColor mapColor;
      private boolean blocksMovement = true;
      private SoundType soundType = SoundType.STONE;
      private int lightValue;
      private float resistance;
      private float hardness;
      // ...
      // ...
      public Block.Properties doesNotBlockMovement() {
         this.blocksMovement = false;
         return this;
      }
      public Block.Properties slipperiness(float slipperinessIn) {
         this.slipperiness = slipperinessIn;
         return this;
      }
      public Block.Properties sound(SoundType soundTypeIn) {
         this.soundType = soundTypeIn;
         return this;
      }
      public Block.Properties lightValue(int lightValueIn) {
         this.lightValue = lightValueIn;
         return this;
      }
      public Block.Properties hardnessAndResistance(float hardnessIn, float resistanceIn) {
         this.hardness = hardnessIn;
         this.resistance = Math.max(0.0F, resistanceIn);
         return this;
      }
// ...
L'argument Block.Properties donné au constructeur contient la valeur liée aux caractéristiques du bloc. Des accesseurs pour ces valeurs sont également définis.
Un exemple est présenté ci-dessous en référence à ces derniers.
BlockList.java
public class BlockList {
    public static Block ExampleBlock = new Block(
            Block.Properties.create(Material.IRON)
                    .hardnessAndResistance(2.0f, 3.0f)
                    .lightValue(15)
                    .harvestLevel(3)
                    .harvestTool(ToolType.SHOVEL))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_block"));
}

Q. Je veux ajouter une fonction A. L'article de commentaire est indécis en raison du contenu de développement.
Création de Minecraft 1.14.4 Forge Mod, partie 4 [Ajout de blocs] [Solved][1.14.2] Custom Blocks not dropping Items - Modder Support - Forge Forums
Recommended Posts