Minecraft Fabric 1.20现有方块属性修改方法求助
Minecraft Fabric 1.20+ 修改现有方块属性方案
针对1.20+版本,以下是几种可行的修改现有方块属性的方法:
替换注册表中的方块实例
直接创建带有修改后属性的方块,替换原版注册表中的对应条目。代码示例:@Override public void onInitialize() { // 获取原版石头方块 Identifier stoneId = new Identifier("minecraft:stone"); Block originalStone = Registry.BLOCK.get(stoneId); // 基于原版设置修改硬度和抗性 BlockSettings newSettings = originalStone.getSettings().strength(8.0f, 1000.0f); // 创建新方块实例 Block modifiedStone = new Block(newSettings); // 替换注册表中的方块 Registry.register(Registry.BLOCK, stoneId, modifiedStone); }注意要在Fabric的初始化阶段执行,或者通过
RegistryEvents.MODIFY事件监听,确保在注册表加载完成后替换,避免与其他Mod冲突。用Mixin修改方块类的初始化逻辑
如果需要深度修改方块的行为或属性,Mixin是更合适的方案。比如修改原版石头的默认设置:@Mixin(StoneBlock.class) public abstract class StoneBlockMixin extends Block { public StoneBlockMixin(BlockSettings settings) { super(settings); } @Inject(method = "<init>*", at = @At("TAIL")) private void adjustStoneProperties(BlockSettings settings, CallbackInfo ci) { // 修改硬度、挖掘等级等属性 settings.strength(8.0f).requiresTool(); } }这种方式无需替换整个方块实例,直接修改原版类的初始化逻辑,兼容性更好,适合修改方块的固有行为。
修改方块状态的属性值
如果仅需调整方块状态的特定属性(如亮度、透明度),可以通过修改方块状态的默认值实现:@SubscribeEvent public void onBlockStateLoad(BlockStateLoadEvent event) { BlockState state = event.getState(); if (state.isOf(Blocks.STONE)) { // 设置石头的亮度为10 event.setState(state.with(BlockStateProperties.LIGHT_LEVEL, 10)); } }注册这个事件监听后,所有加载的石头方块状态都会被修改亮度值,适合针对状态属性的调整。
内容的提问来源于stack exchange,提问作者Vladimir Dergachev
相关产品推荐
相关产品推荐

