(Cet article fait partie d'une série d'articles de commentaires)
Premier article: Introduction Article précédent: Ajouter un élément Article suivant:
Ajoutez un bloc. J'ai un peu changé le style d'écriture de 1.14.4 (cela ne signifie pas que la méthode d'implémentation a changé en raison de la mise à jour de la version).
\src\main\java\jp\koteko\liveinwater\
├ block
│ └ Blocks.java
├ item
└ LiveInWater.java
Blocks.java
package jp.koteko.liveinwater.block;
import jp.koteko.liveinwater.LiveInWater;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import java.util.ArrayList;
import java.util.List;
@Mod.EventBusSubscriber(modid = LiveInWater.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class Blocks {
public static List<Block> blockList = new ArrayList<Block>();
public static Block WATERTREE_ROOT_BLOCK = register("watertree_root_block", new Block(AbstractBlock.Properties.create(Material.WOOD).hardnessAndResistance(2.5F).sound(SoundType.WOOD)));
private static Block register(String key, Block blockIn){
blockList.add(blockIn);
return blockIn.setRegistryName(LiveInWater.MOD_ID, key);
}
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event) {
for (Block block : blockList) {
event.getRegistry().register(block);
}
}
}
Faites de même pour le blocage que l'enregistrement de l'élément dans Dernière fois.
Ajoutez des éléments à List
en même temps que la déclaration / initialisation, et register ()
tous les éléments de la liste avec une boucle for.
S'il ne s'agit que d'un bloc non fonctionnel, ce sera une instance de la classe Block
. Donnez une instance de ʻAbstractBlock.Properties` comme argument du constructeur.
\src\main\java\jp\koteko\liveinwater\
├ block
├ item
│ └ Items.java
└ LiveInWater.java
Items.java
package jp.koteko.liveinwater.item;
import jp.koteko.liveinwater.LiveInWater;
import jp.koteko.liveinwater.block.Blocks;
import net.minecraft.block.Block;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import java.util.ArrayList;
import java.util.List;
@Mod.EventBusSubscriber(modid = LiveInWater.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class Items {
public static List<Item> itemList = new ArrayList<Item>();
public static final Item WATERTREE_ROOT = register("watertree_root", new Item((new Item.Properties()).group(ItemGroup.MATERIALS)));
public static final Item WATERTREE_ROOT_BLOCK = register("watertree_root_block", Blocks.WATERTREE_ROOT_BLOCK, ItemGroup.BUILDING_BLOCKS);
private static Item register(String key, Item itemIn) {
itemList.add(itemIn);
return itemIn.setRegistryName(LiveInWater.MOD_ID, key);
}
private static Item register(String key, Block blockIn, ItemGroup itemGroupIn) {
return register(key, new BlockItem(blockIn, (new Item.Properties()).group(itemGroupIn)));
}
@SubscribeEvent
public static void registerItems(RegistryEvent.Register<Item> event) {
for (Item item : itemList) {
event.getRegistry().register(item);
}
}
}
Comme le bloc existe également en tant qu'élément en même temps, enregistrez également l'élément.
Surcharge de la méthode register
(définissant une méthode avec le même nom avec des arguments différents) pour faciliter l'enregistrement des éléments de bloc. Si vous passez le nom enregistré, le bloc et le groupe d'éléments, il créera un BlockItem
avec le groupe défini à l'intérieur et le lancera dans le registre
de l'élément.
BlockItem
est une sous-classe de ʻItem`, et les blocs en tant qu'éléments sont des instances de cette classe.
\src\main\resources
└ assets
└ liveinwater
├ blockstates
│ └ watertree_root_block.json
├ lang
│ └ en_us.json
│ └ ja_jp.json
├ models
│ ├ block
│ │ └ watertree_root_block.json
│ └ item
│ └ watertree_root_block.json
└ textures
├ block
│ └ watertree_root_block.png
└ item
lang\en_us.json
{
"item.liveinwater.watertree_root_block": "WaterTree Root"
}
lang\ja_jp.json
{
"item.liveinwater.watertree_root_block": "Racine d'arbre d'eau"
}
blockstates\watertree_root_block.json
{
"variants": {
"": { "model": "liveinwater:block/watertree_root_block" }
}
}
" model ":" [MOD_ID] / [chemin du fichier de modèle] "
Si vous souhaitez modifier le modèle en fonction de l'état du bloc (par exemple, un bloc avec une direction ou un bloc de connexion tel qu'une clôture), modifiez ce fichier, mais si vous n'en avez pas besoin, il ressemble à ceci.
models\block\watertree_root_block.json
{
"parent": "block/cube_all",
"textures": {
"all": "liveinwater:block/watertree_root_block"
}
}
[MOD_ID]: [chemin du fichier de texture]
parent
spécifie block / cube_all
.
Il s'agit d'un modèle cubique simple qui reflète la même texture sur toute la surface.
models\item\watertree_root_block.json
{
"parent": "liveinwater:block/watertree_root_block"
}
Pour l'élément de bloc, spécifiez le fichier modèle du bloc dans parent
.
watertree_root_block.png Créez et placez une texture.
Depuis Minecraft 1.9, la table de routage a été introduite comme mécanisme de gestion des baisses. Les chutes de blocs sont également définies à l'aide de cela.
\src\main\resources
├ assets
└ data
└ liveinwater
└ loot_tables
└ blocks
└ watertree_root_block.json
Placez blocks \ watertree_root_block.json
dans le dossier data \ liveinwater
préparé dans Article précédent.
watertree_root_block.json
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
],
"entries": [
{
"type": "minecraft:item",
"name": "liveinwater:watertree_root_block"
}
]
},
{
"rolls": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:binomial_with_bonus_count",
"parameters": {
"extra": 3,
"probability": 0.5714286
}
}
],
"name": "liveinwater:watertree_root"
}
]
},
{
"rolls": 1,
"conditions": [
{
"condition": "minecraft:inverted",
"term": {
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"entries": [
{
"type": "minecraft:item",
"name": "minecraft:dirt"
}
]
}
]
}
Un exemple est "Si vous le détruisez avec l'outil Silk Touch, déposez le bloc lui-même ( watertree_root_block
), sinon déposez un bloc de sol (dirt
) et un objet ( watertree_root
) au hasard. " Des explications détaillées seront données sur la page de référence.
(J'ai essayé diverses choses, mais il y a une description en double et il peut s'agir d'un style d'écriture redondant.)
Table de routage de configuration minimale pour supprimer le bloc lui-même
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "[MOD_ID]:[ITEM_NAME]"
}
]
}
]
}
type
sélectionne l'objet de la table de routage. Chaque pool donné aux «pools» est appliqué en séquence, et le résultat est sélectionné à partir de chaque entrée donnée aux «entrées» par la loterie des «rouleaux». Spécifié pour renvoyer «nom» de «type» dans l'entrée.
Démarrez le jeu et vérifiez. Il a été confirmé que le bloc et son article pouvaient être ajoutés, que l'affichage était correct, et le bloc lui-même a été abandonné avec un toucher de soie et la terre et l'article ont été abandonnés sans toucher de soie.
[Java] Créons un Minecraft Mod 1.14.4 [2. Ajoutez un bloc] Création de Minecraft 1.14.4 Forge Mod, partie 4 [Ajout de blocs] [Route Table - Minecraft Wiki](https://minecraft-ja.gamepedia.com/%E3%83%AB%E3%83%BC%E3%83%88%E3%83%86%E3%83%BC % E3% 83% 96% E3% 83% AB) loot_tables_1.14.md · GitHub
Recommended Posts