by Anonymous » 23 Aug 2025, 22:26
Zum ersten Mal mache ich einen Mod für Minecraft 1.21.1. Ich verwende Forge 52.1.1. Ich fügte eine Spitzhacke, einen Bartzahl und ein Stück Erz hinzu. Alles funktioniert, die Objekte sind sichtbar und es gibt keine Probleme mit ihnen. Dann habe ich beschlossen, Rezepte hinzuzufügen. Ich machte ein Rezept aus Bargots für die Spitzhahn und ein Rezept im Ofen für den Ingot. Aber die Rezepte im Spiel funktionieren aus irgendeinem Grund nicht. Obwohl ich die Rezepte korrekt beschrieben habe und sie korrekt gefunden haben. Ich habe verschiedene Lösungen ausprobiert, nichts hat funktioniert. Was könnte das
Problem sein? src = "
https://i.sstatic.net/9q6hihuk.png"/>
Hauptklasse:
Code: Select all
package com.k1nza.sergeniummod;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
@Mod(SergeniumMod.MOD_ID)
public class SergeniumMod {
public static final String MOD_ID = "sergeniummod";
public static final DeferredRegister CREATIVE_MODE_TABS =
DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MOD_ID);
public SergeniumMod() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
ModItems.ITEMS.register(modEventBus);
CREATIVE_MODE_TABS.register(modEventBus);
registerCreativeTabs();
}
private void registerCreativeTabs() {
CREATIVE_MODE_TABS.register("sergenium_tab", () -> CreativeModeTab.builder()
.icon(() -> new ItemStack(ModItems.ADAMANTIUM_INGOT.get()))
.title(Component.translatable("itemGroup.sergeniummod"))
.displayItems((parameters, output) -> {
output.accept(ModItems.ADAMANTIUM_ORE.get());
output.accept(ModItems.ADAMANTIUM_INGOT.get());
output.accept(ModItems.ADAMANTIUM_PICKAXE.get());
})
.build());
}
}
< /code>
pickaxe Klasse: < /p>
package com.k1nza.sergeniummod;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.PickaxeItem;
import net.minecraft.world.item.Tier;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
public class ModPickaxeItem extends PickaxeItem {
public ModPickaxeItem(Tier tier, Properties props) {
super(tier, props);
}
@Override
public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity entity) {
if (!level.isClientSide && entity instanceof Player player && !player.isCrouching()) {
break3x3x1(level, pos, player, stack);
}
return super.mineBlock(stack, level, state, pos, entity);
}
private void break3x3x1(Level level, BlockPos center, Player player, ItemStack tool) {
if (!(level instanceof ServerLevel serverLevel)) return;
Vec3 look = player.getLookAngle();
double ax = Math.abs(look.x);
double ay = Math.abs(look.y);
double az = Math.abs(look.z);
for (int dx = -1; dx az) {
target = center.offset(0, dy, dx);
} else if (ay > ax && ay > az) {
target = center.offset(dx, 0, dy);
} else {
target = center.offset(dx, dy, 0);
}
if (target != null && !target.equals(center)) {
BlockState state = serverLevel.getBlockState(target);
if (state.getDestroySpeed(serverLevel, target) >= 0) {
serverLevel.destroyBlock(target, true, player);
tool.hurtAndBreak(1, player, EquipmentSlot.MAINHAND);
}
}
}
}
}
}
< /code>
Elemente Klasse: < /p>
package com.k1nza.sergeniummod;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Tiers;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModItems {
public static final DeferredRegister ITEMS =
DeferredRegister.create(ForgeRegistries.ITEMS, SergeniumMod.MOD_ID);
// Ore
public static final RegistryObject ADAMANTIUM_ORE =
ITEMS.register("adamantium_ore", () ->
new Item(new Item.Properties()));
// Ingot
public static final RegistryObject ADAMANTIUM_INGOT =
ITEMS.register("adamantium_ingot", () ->
new Item(new Item.Properties()));
// Pickaxe
public static final RegistryObject ADAMANTIUM_PICKAXE =
ITEMS.register("adamantium_pickaxe", () ->
new ModPickaxeItem(
Tiers.NETHERITE,
new Item.Properties().durability(2031)
));
}
< /code>
Sprachdatei: < /p>
{
"item.sergeniummod.adamantium_pickaxe": "Adamantium Pickaxe",
"item.sergeniummod.adamantium_ingot": "Adamantium Ingot",
"item.sergeniummod.adamantium_ore": "Adamantium Ore",
"itemGroup.sergeniummod": "Sergenium Mod"
}
< /code>
Elementmodelldateien: < /p>
{
"parent": "item/generated",
"textures": {
"layer0": "sergeniummod:item/adamantium_ingot"
}
}
{
"parent": "item/generated",
"textures": {
"layer0": "sergeniummod:item/adamantium_ore"
}
}
{
"parent": "item/handheld",
"textures": {
"layer0": "sergeniummod:item/adamantium_pickaxe"
}
}
< /code>
Rezeptdateien: < /p>
//Ingot
{
"type": "minecraft:smelting",
"ingredient": {
"item": "sergeniummod:adamantium_ore"
},
"result": {
"item": "sergeniummod:adamantium_ingot"
},
"experience": 0.7,
"cookingtime": 200
}
//Pickaxe
{
"type": "minecraft:crafting_shaped",
"pattern": [
"III",
" S ",
" S "
],
"key": {
"I": {
"item": "sergeniummod:adamantium_ingot"
},
"S": {
"item": "minecraft:stick"
}
},
"result": {
"item": "sergeniummod:adamantium_pickaxe"
}
}
Zum ersten Mal mache ich einen Mod für Minecraft 1.21.1. Ich verwende Forge 52.1.1. Ich fügte eine Spitzhacke, einen Bartzahl und ein Stück Erz hinzu. Alles funktioniert, die Objekte sind sichtbar und es gibt keine Probleme mit ihnen. Dann habe ich beschlossen, Rezepte hinzuzufügen. Ich machte ein Rezept aus Bargots für die Spitzhahn und ein Rezept im Ofen für den Ingot. Aber die Rezepte im Spiel funktionieren aus irgendeinem Grund nicht. Obwohl ich die Rezepte korrekt beschrieben habe und sie korrekt gefunden haben. Ich habe verschiedene Lösungen ausprobiert, nichts hat funktioniert. Was könnte das [url=viewtopic.php?t=26065]Problem[/url] sein? src = "https://i.sstatic.net/9q6hihuk.png"/>
Hauptklasse:
[code]package com.k1nza.sergeniummod;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
@Mod(SergeniumMod.MOD_ID)
public class SergeniumMod {
public static final String MOD_ID = "sergeniummod";
public static final DeferredRegister CREATIVE_MODE_TABS =
DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MOD_ID);
public SergeniumMod() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
ModItems.ITEMS.register(modEventBus);
CREATIVE_MODE_TABS.register(modEventBus);
registerCreativeTabs();
}
private void registerCreativeTabs() {
CREATIVE_MODE_TABS.register("sergenium_tab", () -> CreativeModeTab.builder()
.icon(() -> new ItemStack(ModItems.ADAMANTIUM_INGOT.get()))
.title(Component.translatable("itemGroup.sergeniummod"))
.displayItems((parameters, output) -> {
output.accept(ModItems.ADAMANTIUM_ORE.get());
output.accept(ModItems.ADAMANTIUM_INGOT.get());
output.accept(ModItems.ADAMANTIUM_PICKAXE.get());
})
.build());
}
}
< /code>
pickaxe Klasse: < /p>
package com.k1nza.sergeniummod;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.PickaxeItem;
import net.minecraft.world.item.Tier;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3;
public class ModPickaxeItem extends PickaxeItem {
public ModPickaxeItem(Tier tier, Properties props) {
super(tier, props);
}
@Override
public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity entity) {
if (!level.isClientSide && entity instanceof Player player && !player.isCrouching()) {
break3x3x1(level, pos, player, stack);
}
return super.mineBlock(stack, level, state, pos, entity);
}
private void break3x3x1(Level level, BlockPos center, Player player, ItemStack tool) {
if (!(level instanceof ServerLevel serverLevel)) return;
Vec3 look = player.getLookAngle();
double ax = Math.abs(look.x);
double ay = Math.abs(look.y);
double az = Math.abs(look.z);
for (int dx = -1; dx az) {
target = center.offset(0, dy, dx);
} else if (ay > ax && ay > az) {
target = center.offset(dx, 0, dy);
} else {
target = center.offset(dx, dy, 0);
}
if (target != null && !target.equals(center)) {
BlockState state = serverLevel.getBlockState(target);
if (state.getDestroySpeed(serverLevel, target) >= 0) {
serverLevel.destroyBlock(target, true, player);
tool.hurtAndBreak(1, player, EquipmentSlot.MAINHAND);
}
}
}
}
}
}
< /code>
Elemente Klasse: < /p>
package com.k1nza.sergeniummod;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Tiers;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModItems {
public static final DeferredRegister ITEMS =
DeferredRegister.create(ForgeRegistries.ITEMS, SergeniumMod.MOD_ID);
// Ore
public static final RegistryObject ADAMANTIUM_ORE =
ITEMS.register("adamantium_ore", () ->
new Item(new Item.Properties()));
// Ingot
public static final RegistryObject ADAMANTIUM_INGOT =
ITEMS.register("adamantium_ingot", () ->
new Item(new Item.Properties()));
// Pickaxe
public static final RegistryObject ADAMANTIUM_PICKAXE =
ITEMS.register("adamantium_pickaxe", () ->
new ModPickaxeItem(
Tiers.NETHERITE,
new Item.Properties().durability(2031)
));
}
< /code>
Sprachdatei: < /p>
{
"item.sergeniummod.adamantium_pickaxe": "Adamantium Pickaxe",
"item.sergeniummod.adamantium_ingot": "Adamantium Ingot",
"item.sergeniummod.adamantium_ore": "Adamantium Ore",
"itemGroup.sergeniummod": "Sergenium Mod"
}
< /code>
Elementmodelldateien: < /p>
{
"parent": "item/generated",
"textures": {
"layer0": "sergeniummod:item/adamantium_ingot"
}
}
{
"parent": "item/generated",
"textures": {
"layer0": "sergeniummod:item/adamantium_ore"
}
}
{
"parent": "item/handheld",
"textures": {
"layer0": "sergeniummod:item/adamantium_pickaxe"
}
}
< /code>
Rezeptdateien: < /p>
//Ingot
{
"type": "minecraft:smelting",
"ingredient": {
"item": "sergeniummod:adamantium_ore"
},
"result": {
"item": "sergeniummod:adamantium_ingot"
},
"experience": 0.7,
"cookingtime": 200
}
//Pickaxe
{
"type": "minecraft:crafting_shaped",
"pattern": [
"III",
" S ",
" S "
],
"key": {
"I": {
"item": "sergeniummod:adamantium_ingot"
},
"S": {
"item": "minecraft:stick"
}
},
"result": {
"item": "sergeniummod:adamantium_pickaxe"
}
}
[/code]