(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
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.
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. ** Zusätzliches Erz wurde erzeugt. ** **.
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.
Minecraft 1.14.4 Forge Mod Creation Teil 8 [Zugabe und Erzeugung von Erz]
9. Bäume hinzufügen und generieren
Recommended Posts