[Java] Lass uns einen Minecraft Mod 1.14.4 erstellen [8. Erz hinzufügen und erzeugen]

(Dieser Artikel gehört zu einer Reihe von Kommentaren)

Erster Artikel: Einführung Vorheriger Artikel: 7. Fortschritt hinzufügen Nächster Artikel: 9. Bäume hinzufügen und generieren

Erz hinzufügen

Schließlich werden wir den vollständigen Teil eingeben. Wenn Sie ein einzigartiges Material für einen Mod erstellen, müssen Sie einen Weg vorbereiten, um es zu erhalten. Wenn es eine primäre Ressource wäre, müsste sie in der Welt generiert werden. Dieses Mal werden wir lernen, Erz hinzuzufügen.

Fügen wir zunächst einen Erzblock hinzu, wie bereits in 2. Block hinzufügen erläutert. Da der Prozess genau der gleiche ist, werde ich die Erklärung weglassen, aber ich habe "BlockList.ExampleOre" hinzugefügt.

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"))
        );
    }
}

** * Ergänzung ** Es wäre besser gewesen, unsere eigene BlockExampleOre-Klasse zu definieren, die die Block-Klasse erbt, anstatt die Block-Klasse, um den Erfahrungsabfall während des Mining festzulegen.

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

Gegebenenfalls Rezepte hinzufügen.

Erzgewinnung

Fügen wir nun Code hinzu, um dies zu generieren.

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

Platziere 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
                        )
                );
            }
        }
    }
}

Die Schreibmethode ist nur ein Beispiel, sodass Sie sie einfacher oder mit einem höheren Abstraktionsgrad schreiben können. ~~ Je mehr ich über das Beste nachdenke, desto mehr verstehe ich nicht. ~~ Der Kernteil ist biome.addFeature (), eine Methode zum Hinzufügen eines Features oder Features zu einer Instanz der Biome-Klasse. Dies erzeugt Merkmale während der Biomerzeugung.

Kommentar


// net\minecraft\world\biome\DefaultBiomeFeatures.Es gibt viele Beispiele in Java
biome.addFeature(
        //Art der hinzuzufügenden Funktion
        // net\minecraft\gen\GenerationStage.Schauen Sie sich Java an und wählen Sie die, die sich gut anfühlt
        GenerationStage.Decoration.UNDERGROUND_ORES,
        //Instanz der konfigurierten Funktion
        Biome.createDecoratedFeature(
                //Art des Merkmals Es scheint, dass hier dasjenige übergeben wird, das dem folgenden Argument entspricht
                Feature.ORE,
                //Funktionskonfiguration
                new OreFeatureConfig(
                        //Art des zu ersetzenden Blocks
                        // NATURAL_STEIN ist STEIN,GRANITE,DIORITE,ANDESITE
                        OreFeatureConfig.FillerBlockType.NATURAL_STONE,
                        //Blockzustand des zu erzeugenden Erzes
                        BlockList.ExampleOre.getDefaultState(),
                        //Maximale Anzahl an einem Ort generiert
                        17
                ),
                // Placement(Ein Objekt, das einen Bereich verarbeitet?)Typ: Es scheint, dass hier dasjenige übergeben wird, das dem folgenden Argument entspricht
                Placement.COUNT_RANGE,
                //Platzierungskonfiguration
                // (count, bottomOffset, topOffset, maximum)
                //Ich bin nicht sicher, ob die Details korrekt sind.
                //0 bis maximal-Zu einer zufällig ausgewählten Zahl im Bereich bis topOffset
                //Es scheint, als würde es sich bewegen, als würde ein ganzzahliger Wert mit zusätzlichen Zählzeiten für bottomOffset gezeichnet
                //Kurz gesagt, es scheint, dass es die y-Koordinaten bestimmt, die die Anzahl der Erze pro Block erzeugen.
                new CountRangeConfig(20, 0, 0, 128)
        )
)

Rufen Sie abschließend das gerade definierte "WorldGenOres.setup ()" im "Setup" in der Hauptdatei auf.

ExampleMod.java


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

Starte das Spiel. キャプチャ.PNG ** Zusätzliches Erz wurde erzeugt. ** **.

Entwicklung

F. Ich möchte es am unteren Ende generieren F. Ich möchte nur für ein bestimmtes Biom generieren ** A. Lassen Sie uns die Authentizität mit biome.getCategory (). Equals () beurteilen. ** **. Dieses Beispiel wurde in allen Biomen am Boden erzeugt. Der Code ist unten.

python


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

Ich habe es mit for gedreht und addFeature () zu allen Nicht-Nether- und Nicht-Ende aller Biome gemacht. Ich schreibe dies, weil ich denke, es wäre schön, eine neue Methode vorzubereiten, die diesen Teil entsprechend ändert. Oder ich denke, dass es möglich sein könnte, die Sequenz des Bioms als Argument zu erhalten.

Referenz

Minecraft 1.14.4 Forge Mod Creation Teil 8 [Zugabe und Erzeugung von Erz]

Nächster Artikel

9. Bäume hinzufügen und generieren

Recommended Posts

[Java] Lass uns einen Minecraft Mod 1.14.4 erstellen [8. Erz hinzufügen und erzeugen]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Bäume hinzufügen und generieren]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [9. Bäume hinzufügen und generieren]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [4. Tools hinzufügen]
[Java] Lass uns einen Minecraft Mod 1.14.4 erstellen [5. Rüstung hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [6. Rezept hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Element hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [1. Element hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [2. Fügen Sie einen Block hinzu]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Block hinzufügen]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [3. Registerkarte "Creative hinzufügen"]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Einführung]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Einführung]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [99. Mod-Ausgabe]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [0. Basisdatei]
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [Extra Edition]
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Basisdatei]
[Java] Erstellen und Anwenden eines Folienmasters
Lassen Sie uns eine Java-Entwicklungsumgebung erstellen (Aktualisierung)
Lassen Sie uns Docker unter Windows 10 installieren und eine Überprüfungsumgebung für CentOS 8 erstellen!
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
Lassen Sie uns mit Java ein supereinfaches Webframework erstellen
[Java] Erstellen Sie einen Filter
[Java-Grundlagen] Lassen Sie uns ein Dreieck mit einer for-Anweisung erstellen
Erstellen wir ein Datei-Upload-System mit der Azure Computer Vision-API und dem Java SDK von Azure Storage
So erstellen Sie ein leichtes Container-Image für Java-Apps
[Java-Zweig] Erstellen Sie einen Parser-Kombinator für die rekursive Abstiegssyntaxanalyse 2
Erstellen Sie eine Java- und JavaScript-Teamentwicklungsumgebung (Gradle-Umgebungskonstruktion)
Erstellen Sie eine Java-Methode [Memo] [java11]
[Java] Erstellen Sie eine temporäre Datei
Java während und für Anweisungen
Sortieren Sie die Liste in absteigender Reihenfolge in Java und generieren Sie zerstörungsfrei eine neue Liste
Lassen Sie uns eine TODO-App in Java 4 erstellen. Implementierung der Buchungsfunktion
Erstellen Sie eine JVM für die App-Verteilung mit JDK 9-Modulen und jlink
Erstellen Sie mit JavaScript eine leistungsstarke Aufzählung mit Feldern und Methoden wie Java
Lassen Sie uns eine TODO-App in Java 8 erstellen. Implementierung von Bearbeitungsfunktionen
Erstellen wir eine TODO-Anwendung mit Java 1 Kurze Erläuterung von MVC
Lassen Sie uns mit Generic Dao und Hibernate einen Parameter-Polymorph-Mechanismus erstellen
AWS SDK für Java 1.11.x und 2.x.
Java für Anfänger, Ausdrücke und Operatoren 1
Wie unterschreibe ich Minecraft MOD?
Java für Anfänger, Ausdrücke und Operatoren 2
Klassen und Instanzen Java für Anfänger
Erstellen Sie einen fließenden Server zum Testen
[Java] Erstellen Sie mit dem Befehl jar eine JAR-Datei, die sowohl komprimiert als auch nicht komprimiert ist
[Java-Zweig] Erstellen Sie einen Parser-Kombinator für die rekursive absteigende Syntaxanalyse (machen Sie sich auch Notizen).
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
Los geht's mit Watson Assistant (ehemals Conversation) ⑤ Erstellen Sie einen Chatbot mit Watson + Java + Slack
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen
Erstellen wir eine TODO-App in Java 9 Erstellen einer TODO-Anzeige Sortieren nach Datum und Uhrzeit + Setzen Sie das Fälligkeitsdatum auf das aktuelle Datum
Lassen Sie uns eine TODO-Anwendung mit Java 2 erstellen. Ich möchte eine Vorlage mit Spring Initializr erstellen und eine Hello-Welt erstellen