Minecraft Fabric 1.21.3如何注册带经验掉落的自定义方块
解决Minecraft 1.21.3模组注册带经验掉落方块的问题
核心思路
你不用死磕Block::new,factory参数本质就是个接收AbstractBlock.Settings、返回Block实例的函数——直接自定义这个函数,就能把ExperienceDroppingBlock的经验设置逻辑嵌进去。
直接可用的修改方案
修改方块注册调用
把原来的Block::new替换成自定义lambda表达式,在里面创建ExperienceDroppingBlock并传入经验范围和方块设置:
public static final Block BLOCK_NAME = registerBlock("block_name", // 自定义factory:用传入的settings创建带经验掉落的方块 settings -> new ExperienceDroppingBlock(UniformIntProvider.create(2, 5), settings), Block.Settings.create().strength(3f).requiresTool());
确认注册逻辑兼容性
你的1.21.3注册方法本身完全适配这个修改——因为ExperienceDroppingBlock是Block的子类,返回的实例符合类型要求,Blocks.register和Items.register都能正常处理。
可选优化:封装复用逻辑
如果要注册多个带经验掉落的方块,可以单独封装一个注册方法减少重复代码:
private static Block registerExperienceBlock(String name, UniformIntProvider xpRange, AbstractBlock.Settings settings) { return registerBlock(name, settings -> new ExperienceDroppingBlock(xpRange, settings), settings); }
调用时会更简洁:
public static final Block BLOCK_NAME = registerExperienceBlock("block_name", UniformIntProvider.create(2,5), Block.Settings.create().strength(3f).requiresTool());
内容的提问来源于stack exchange,提问作者user28175778
相关产品推荐
相关产品推荐

