Что нужно для начала написания мода

25
0
@hohserg можешь объяснить что именно из Джавы нужно знать. Ведь зачем там все эти Swing, Fx и т.д
 
7,099
324
1,510
Минимально необходимы навыки программирования, все остальное можно изучить по ходу дела
 
7,099
324
1,510
Не систематично
 
88
4
6

GoogleTan

Картошка :3
1,354
43
310
Как раз создание блока и брони одинаковое.
Различие в содании измерения и слоях биомов
 
88
4
6
и вообще, лучше начинай с фабрика, или хотя-бы 1.12, чем быстрее поймешь, тем быстрее перейдешь на Forge или новые версии
 
88
4
6

GoogleTan

Картошка :3
1,354
43
310
У фабрика отсуствует АПИ и это заменено миксинами, в которые новичку лучше не лезть
 
88
4
6
я сделал создание обычное
Создание Блока:
package com.algorithmlx.liaveres.common.object.blocks;

import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;

public class MatterCrystalBlock extends Block {
    public MatterCrystalBlock(String name) {
        super(Properties.create(Material.ROCK)
                .doesNotBlockMovement()
                .tickRandomly()
                .hardnessAndResistance(340282356779733661637539395458142568447F)
                .sound(SoundType.STONE)
                .setLightLevel((state) -> 11));
        this.setRegistryName(name);
    }

}

а регистрацию другую, и всё работает нормально


Регистрация блока:
package com.algorithmlx.liaveres.common.registry;

import com.algorithmlx.liaveres.LiaVeres;

import com.algorithmlx.liaveres.common.object.blocks.MatterCrystalBlock;

import net.minecraft.block.Block;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.registries.ObjectHolder;

import java.util.Objects;

import static com.algorithmlx.liaveres.LiaVeres.ModId;

@Mod.EventBusSubscriber(modid = ModId, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ModBlocks {
    @ObjectHolder(ModId + ":matter_crystal_block")
    public static Block MatterCrystalBlock = null;

    @SubscribeEvent
    public static void registerBlocks(final RegistryEvent.Register<Block> e) {
        registerBlock(e, new MatterCrystalBlock("matter_crystal_block"));
    }

    @SubscribeEvent
    public static void registerItems(final RegistryEvent.Register<Item> e) {
        registerItem(e, MatterCrystalBlock);
    }


    private static void registerBlock(RegistryEvent.Register<Block> event, Block block) {
        event.getRegistry().register(block);
    }

    private static void registerItem(RegistryEvent.Register<Item> event, Block block) {
        event.getRegistry().register(new BlockItem(block, new Item.Properties()
                .group(LiaVeres.lv_itemgroup))
                .setRegistryName(Objects.requireNonNull(block.getRegistryName())));
    }

}
 
88
4
6
88
4
6
Регистрация и автоматом создание блока на Ткани:
package com.algorithmlx.liaveres.common.registry;

import com.algorithmlx.liaveres.LiaVeres;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.block.Block;
import net.minecraft.block.Material;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;

public class ModBlocks {

    public static final Block MATTER_CRYSTAL_BLOCK = new Block(FabricBlockSettings.of(Material.METAL).breakByTool(FabricToolTags.PICKAXES, 5).requiresTool().strength(500F, 1800000000.0f).sounds(BlockSoundGroup.METAL));

    public static void registerBlocks(){
        Registry.register(Registry.BLOCK, new Identifier(LiaVeres.ModId, "matter_crystal_block"), MATTER_CRYSTAL_BLOCK);
    }
}
 

GoogleTan

Картошка :3
1,354
43
310
Регистрация и автоматом создание блока на Ткани:
package com.algorithmlx.liaveres.common.registry;

import com.algorithmlx.liaveres.LiaVeres;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.block.Block;
import net.minecraft.block.Material;
import net.minecraft.sound.BlockSoundGroup;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;

public class ModBlocks {

    public static final Block MATTER_CRYSTAL_BLOCK = new Block(FabricBlockSettings.of(Material.METAL).breakByTool(FabricToolTags.PICKAXES, 5).requiresTool().strength(500F, 1800000000.0f).sounds(BlockSoundGroup.METAL));

    public static void registerBlocks(){
        Registry.register(Registry.BLOCK, new Identifier(LiaVeres.ModId, "matter_crystal_block"), MATTER_CRYSTAL_BLOCK);
    }
}
Kotlin:
object EmBlocks : AutoRegisterer<Block>(ForgeRegistries.BLOCKS)
{
    val dragonCoal: Block by register("dragon_coal_block", defaultCoalBlock())
    val naturalCoal: Block by register("natural_coal_block", defaultCoalBlock())
    val phantomCoal: Block by register("phantom_coal_block", defaultCoalBlock())
    val immortalCoal: Block by register("immortal_coal_block", defaultCoalBlock())

    val dragonSteel: Block by register("dragon_steel_block", defaultSteelBlock())
    val naturalSteel: Block by register("natural_steel_block", defaultSteelBlock())
    val phantomSteel: Block by register("phantom_steel_block", defaultSteelBlock())
    val immortalSteel: Block by register("immortal_steel_block", defaultSteelBlock())

    val blastFurnace : Block by register("blast_furnace", BlastFurnaceBlock)

    private fun defaultCoalBlock() = Block(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(6f))
    private fun defaultSteelBlock() = Block(AbstractBlock.Properties.create(Material.IRON).hardnessAndResistance(9f))
}
 
88
4
6

GoogleTan

Картошка :3
1,354
43
310
Он работает. Ты скорее всего просто не подписал его.
 
88
4
6
Kotlin:
object EmBlocks : AutoRegisterer<Block>(ForgeRegistries.BLOCKS)
{
    val dragonCoal: Block by register("dragon_coal_block", defaultCoalBlock())
    val naturalCoal: Block by register("natural_coal_block", defaultCoalBlock())
    val phantomCoal: Block by register("phantom_coal_block", defaultCoalBlock())
    val immortalCoal: Block by register("immortal_coal_block", defaultCoalBlock())

    val dragonSteel: Block by register("dragon_steel_block", defaultSteelBlock())
    val naturalSteel: Block by register("natural_steel_block", defaultSteelBlock())
    val phantomSteel: Block by register("phantom_steel_block", defaultSteelBlock())
    val immortalSteel: Block by register("immortal_steel_block", defaultSteelBlock())

    val blastFurnace : Block by register("blast_furnace", BlastFurnaceBlock)

    private fun defaultCoalBlock() = Block(AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(6f))
    private fun defaultSteelBlock() = Block(AbstractBlock.Properties.create(Material.IRON).hardnessAndResistance(9f))
}
Котлин для меня тёмный лес
 

GoogleTan

Картошка :3
1,354
43
310
Это не так важно. То же можно и на яве провернуть.
 
88
4
6
Сверху