(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