[Java] Créons un Minecraft Mod 1.14.4 [8. Ajouter et générer du minerai]

(Cet article fait partie d'une série d'articles de commentaires)

Premier article: Introduction Article précédent: 7. Add progress Article suivant: 9. Ajouter et générer des arbres

Ajouter du minerai

Enfin, nous entrerons dans la partie grandeur nature. Si vous créez un matériau unique pour un mod, vous devez préparer un moyen de l'obtenir. S'il s'agissait d'une ressource primaire, il faudrait qu'elle soit générée dans le monde. Cette fois, nous allons apprendre à ajouter du minerai.

Tout d'abord, ajoutons un bloc de minerai comme déjà expliqué dans 2. Ajouter un bloc. Puisque le processus est exactement le même, je vais omettre l'explication, mais j'ai ajouté BlockList.ExampleOre.

BlockList.java


//...
public class BlockList {
    public static Block ExampleOre = new Block(
            Block.Properties.create(Material.ROCK)
                    .hardnessAndResistance(3.0F, 3.0F)
                    .lightValue(15))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_ore"));

    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event) {
        event.getRegistry().registerAll(
                ExampleOre
        );
    }

    @SubscribeEvent
    public static void registerBlockItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().registerAll(
                new BlockItem(ExampleOre, new Item.Properties().group(ExampleItemGroup.DEFAULT))
                        .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_ore"))
        );
    }
}

** * Une addition ** Il aurait été préférable de définir notre propre classe BlockExampleOre, qui hérite de la classe Block, au lieu de la classe Block pour définir la perte d'expérience pendant l'extraction.

BlockExampleOre.java


package jp.koteko.example_mod.blocks;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;

public class BlockExampleOre extends Block {
    public BlockExampleOre(Block.Properties properties) {
        super(properties);
    }

    @Override
    public int getExpDrop(BlockState state, net.minecraft.world.IWorldReader reader, BlockPos pos, int fortune, int silktouch) {
        return silktouch == 0 ? MathHelper.nextInt(RANDOM, 3, 7) : 0;
    }
}


\src\main\resources
   ├ assets
   │  └ example_mod
   │     ├ blockstates
   │     │  └ example_ore.json
   │     ├ lang
   │     │  └ en_us.json
   │     │  └ ja_jp.json
   │     ├ models
   │     │  ├ block
   │     │  │  └ example_ore.json
   │     │  └ item
   │     │     └ example_ore.json
   │     └ textures
   │        ├ blocks
   │        │  └ example_ore.png
   │        └ items
   └ data
      └ example_mod
         └ loot_tables
            └ blocks
               └ example_ore.json

Ajoutez des recettes le cas échéant.

Génération de minerai

Ajoutons maintenant du code pour générer ceci.

\src\main\java\jp\koteko\example_mod\
   ├ items
   ├ lists
   ├ world
   │   └ WorldGenOres.java
   └ ExampleMod.java

Placez WorldGenOres.java.

WorldGenOres.java


package jp.koteko.example_mod.world;

import jp.koteko.example_mod.lists.BlockList;
import net.minecraft.block.Block;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.GenerationStage;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.OreFeatureConfig;
import net.minecraft.world.gen.placement.CountRangeConfig;
import net.minecraft.world.gen.placement.Placement;
import net.minecraftforge.registries.ForgeRegistries;

public class WorldGenOres {
    public static void setup() {
        addOreToOverworld(
                BlockList.ExampleOre,
                17,
                new CountRangeConfig(20, 0, 0, 128)
        );
    }

    private static void addOreToOverworld(Block blockIn, int size, CountRangeConfig countRangeConfigIn) {
        for(Biome biome : ForgeRegistries.BIOMES) {
            if(!biome.getCategory().equals(Biome.Category.NETHER) && !biome.getCategory().equals(Biome.Category.THEEND)) {
                biome.addFeature(
                        GenerationStage.Decoration.UNDERGROUND_ORES,
                        Biome.createDecoratedFeature(
                                Feature.ORE,
                                new OreFeatureConfig(
                                        OreFeatureConfig.FillerBlockType.NATURAL_STONE,
                                        blockIn.getDefaultState(),
                                        size
                                ),
                                Placement.COUNT_RANGE,
                                countRangeConfigIn
                        )
                );
            }
        }
    }
}

La méthode d'écriture n'est qu'un exemple, vous pouvez donc l'écrire plus simplement ou avec un degré d'abstraction plus élevé. ~~ Plus je pense à ce qui est le mieux, plus je ne comprends pas. ~~ La partie principale est biome.addFeature (), qui est une méthode pour ajouter une Feature ou une fonctionnalité à une instance de la classe Biome. Cela générera des fonctionnalités lors de la génération du biome.

Commentaire


// net\minecraft\world\biome\DefaultBiomeFeatures.Il existe de nombreux exemples en java
biome.addFeature(
        //Type de fonctionnalité à ajouter
        // net\minecraft\gen\GenerationStage.Regardez java et choisissez quelque chose qui fait du bien
        GenerationStage.Decoration.UNDERGROUND_ORES,
        //Instance de la fonction configurée
        Biome.createDecoratedFeature(
                //Type de fonctionnalité Il semble que celui correspondant à l'argument suivant soit passé ici
                Feature.ORE,
                //Configuration des fonctionnalités
                new OreFeatureConfig(
                        //Type de bloc à remplacer
                        // NATURAL_LA PIERRE est LA PIERRE,GRANITE,DIORITE,ANDESITE
                        OreFeatureConfig.FillerBlockType.NATURAL_STONE,
                        //État de bloc du minerai à générer
                        BlockList.ExampleOre.getDefaultState(),
                        //Nombre maximum généré en un seul endroit
                        17
                ),
                // Placement(Un objet qui gère une plage?)Type: Il semble que celui correspondant à l'argument suivant soit passé ici
                Placement.COUNT_RANGE,
                //Configuration de l'emplacement
                // (count, bottomOffset, topOffset, maximum)
                //Je ne sais pas si les détails sont corrects,
                //0 au maximum-À un nombre sélectionné au hasard dans la plage allant jusqu'en haut
                //Il semble que cela bouge comme dessiner une valeur entière avec bottomOffset ajouté nombre de fois
                //En bref, il semble qu'il détermine les coordonnées y qui génèrent le nombre de minerai par morceau.
                new CountRangeConfig(20, 0, 0, 128)
        )
)

Enfin, appelez le WorldGenOres.setup () juste défini dans setup dans le fichier principal.

ExampleMod.java


//...
public class ExampleMod
{
    //...
    private void setup(final FMLCommonSetupEvent event)
    {
        WorldGenOres.setup();
    }
    //...
}

Commencer le jeu. キャプチャ.PNG ** Du minerai supplémentaire a été généré. ** **

développement

Q. Je veux le générer dans le bas-fond Q. Je souhaite générer uniquement pour un biome spécifique ** A. Jugons l'authenticité avec biome.getCategory (). Equals (). ** ** Cet exemple a été généré dans tous les biomes au sol. Le code est ci-dessous.

python


if(!biome.getCategory().equals(Biome.Category.NETHER) && !biome.getCategory().equals(Biome.Category.THEEND))

Je l'ai tourné avec for et ʻaddFeature () `vers tous les non-nether et non-end de tous les biomes. J'écris ceci parce que je pense que ce serait bien de préparer une nouvelle méthode qui modifie cette partie comme il convient. Ou je pense qu'il est possible de recevoir la séquence du biome comme argument.

référence

Minecraft 1.14.4 Forge Mod Creation Part 8 [Ajout et génération de minerai]

Article suivant

9. Ajouter et générer des arbres

Recommended Posts

[Java] Créons un Minecraft Mod 1.14.4 [8. Ajouter et générer du minerai]
[Java] Créons un Minecraft Mod 1.16.1 [Ajouter et générer des arbres]
[Java] Créons un Minecraft Mod 1.14.4 [9. Ajouter et générer des arbres]
[Java] Créons un Minecraft Mod 1.14.4 [4. Ajouter des outils]
[Java] Créons un Minecraft Mod 1.14.4 [5. Ajouter une armure]
[Java] Créons un Minecraft Mod 1.14.4 [6. Ajouter une recette]
[Java] Créons un Minecraft Mod 1.16.1 [Ajouter un élément]
[Java] Créons un Minecraft Mod 1.14.4 [1. Ajouter un élément]
[Java] Créons un Minecraft Mod 1.14.4 [2. Ajouter un bloc]
[Java] Créons un Minecraft Mod 1.16.1 [Ajouter un bloc]
[Java] Créons un Minecraft Mod 1.14.4 [3. Ajouter un onglet de création]
[Java] Créons un Minecraft Mod 1.14.4 [Introduction]
[Java] Créons un Minecraft Mod 1.16.1 [Introduction]
[Java] Créons un Minecraft Mod 1.14.4 [99. Mod output]
[Java] Créons un Minecraft Mod 1.14.4 [0. Fichier de base]
[Java] Créons un Minecraft Mod 1.14.4 [édition supplémentaire]
[Java] Créons un Minecraft Mod 1.16.1 [Fichier de base]
[Java] Créer et appliquer un masque des diapositives
Créons un environnement de développement Java (mise à jour)
Installons Docker sur Windows 10 et créons un environnement de vérification pour CentOS 8!
Créons un processus chronométré avec la minuterie de Java! !!
Créons un framework Web ultra-simple avec Java
[Java] Créer un filtre
[Bases de Java] Créons un triangle avec une instruction for
Créons un système de téléchargement de fichiers à l'aide de l'API Azure Computer Vision et du SDK Java d'Azure Storage
Comment créer une image de conteneur légère pour les applications Java
[Java twig] Créer un combinateur d'analyseur pour l'analyse syntaxique de descente récursive
Créer un environnement de développement d'équipe Java et JavaScript (construction d'environnement gradle)
Créer une méthode java [Memo] [java11]
[Java] Créer un fichier temporaire
Instructions Java while et for
Trier la liste par ordre décroissant en Java et générer une nouvelle liste de manière non destructive
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Créer une JVM pour la distribution d'applications avec les modules JDK 9 et jlink
Créez une énumération haute performance avec des champs et des méthodes comme Java avec JavaScript
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Créons une application TODO avec Java 1 Brève explication de MVC
Créons un mécanisme polymorphe de paramètres avec Generic Dao et Hibernate
SDK AWS pour Java 1.11.x et 2.x
Java pour les débutants, les expressions et les opérateurs 1
Comment signer Minecraft MOD
Java pour les débutants, les expressions et les opérateurs 2
Classes et instances Java pour les débutants
Créer un serveur fluentd pour les tests
[Java] Créez un fichier jar compressé et non compressé avec la commande jar
[Java twig] Créer un combinateur d'analyseur pour une analyse de syntaxe descendante récursive (également prendre des notes)
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
Allons-y avec Watson Assistant (anciennement Conversation) ⑤ Créez un chatbot avec Watson + Java + Slack
Créer un environnement de développement d'applications Web Java avec Docker pour Mac Part2
Créons une application TODO en Java 9 Créer un affichage TODO Trier par date et heure + Définir la date d'échéance sur la date actuelle
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world