Skip to content

Optimize placement for acceleration and deflection rings 优化加速环与偏转环的放置方式#3756

Open
YocyCraft wants to merge 4 commits into
Anvil-Dev:dev/1.21/1.6from
YocyCraft:dev/1.21/new_features
Open

Optimize placement for acceleration and deflection rings 优化加速环与偏转环的放置方式#3756
YocyCraft wants to merge 4 commits into
Anvil-Dev:dev/1.21/1.6from
YocyCraft:dev/1.21/new_features

Conversation

@YocyCraft

@YocyCraft YocyCraft commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

@YocyCraft YocyCraft changed the title Optimize placement for acceleration and deflection rings 优化加速环 Optimize placement for acceleration and deflection rings 优化加速环与偏转环的放置方式 Jun 17, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

代码审查结果

1. 重复代码问题

文件: AccelerationRingBlock.javaDeflectionRingBlock.java

问题: 两个类中 getShape 方法添加了完全相同的逻辑:

if (context.isHoldingItem(state.getBlock().asItem())) {
    return Shapes.block();
}

这违反了 DRY(Don't Repeat Yourself)原则。

建议: 考虑创建一个抽象基类或工具方法,将这段逻辑提取出来复用。

2. 性能考量

文件: ParticleEngineMixin.java

问题: addBlockHitEffects 方法在每次粒子效果触发时都会调用 getShape(),这可能会影响性能,特别是在大量粒子效果同时触发的情况下。

建议:

  • 考虑缓存形状结果
  • 或者使用更轻量级的检查方式,如 state.isAir() 或检查方块材质

3. 逻辑完整性

文件: ParticleEngineMixin.java

问题: 当前逻辑只检查形状是否为空,但可能存在形状不为空但实际不可见的情况(如透明方块)。

建议: 考虑是否需要添加额外的可见性检查,例如:

if (this.level.getBlockState(pos).getShape(this.level, pos).isEmpty() 
    || !this.level.getBlockState(pos).canOcclude()) {
    ci.cancel();
}

4. 配置文件变更

文件: anvilcraft.mixins.json

问题:

  • accessor.EntityAccessor 的顺序被移动了(从第65行移到第63行)
  • 新增了 ParticleEngineMixin 条目

建议:

  • 确认 EntityAccessor 的顺序移动是否是必要的,如果不是,建议保持原有顺序以减少不必要的变更
  • 确保 ParticleEngineMixin 的添加不会与其他 Mixin 产生冲突

5. 代码风格

文件: ParticleEngineMixin.java

问题: 方法名 damageaddBlockHitEffects 的语义不匹配,容易引起混淆。

建议: 将方法名改为更具描述性的名称,如 cancelBlockHitEffectsOnEmptyShapeonAddBlockHitEffects

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

代码审查结果

1. 逻辑问题:getShape 方法中的条件判断

文件: AccelerationRingBlock.javaDeflectionRingBlock.java

问题:

  • 使用 context.isHoldingItem(state.getBlock().asItem()) 来判断玩家是否持有该方块物品,但 CollisionContext 可能为 EntityCollisionContextEmptyCollisionContext,其中 isHoldingItem 方法可能返回 false 或抛出异常。
  • 当玩家手持其他物品时,形状仍为原始形状(可能为空),导致无法交互。

建议:

// 更安全的做法:检查 context 是否为 EntityCollisionContext
if (context instanceof EntityCollisionContext entityContext) {
    Player player = entityContext.getPlayer();
    if (player != null && player.getMainHandItem().is(state.getBlock().asItem())) {
        return Shapes.block();
    }
}

2. 性能问题:重复调用 getShape

文件: ParticleEngineMixin.java

问题:

  • cancelHitEffectForEmptyBlock 方法中,getShape 会被调用两次(一次在 mixin 中,一次在原始方法中),造成不必要的性能开销。

建议:

  • 考虑缓存形状结果或使用更轻量级的检查方式。

3. 代码风格:Mixin 注释格式

文件: ParticleEngineMixin.java

问题:

  • Javadoc 注释使用了 /** 但缺少 @param@return 标签,且注释内容过于冗长。

建议:

/**
 * 取消对空碰撞箱方块的特效渲染,避免 VoxelShape.bounds() 抛出异常。
 */
@Inject(method = "addBlockHitEffects", at = @At("HEAD"), cancellable = true)
private void cancelHitEffectForEmptyBlock(BlockPos pos, BlockHitResult target, CallbackInfo ci) {
    // ...
}

4. 潜在问题:mixins.json 中的顺序变更

文件: anvilcraft.mixins.json

问题:

  • 移动了 accessor.EntityAccessor 的位置,但没有明显理由。这可能导致与其他 mixin 的加载顺序依赖问题。

建议:

  • 除非有特定原因,否则保持原有顺序。如果必须移动,请在提交信息中说明原因。

5. 安全考虑:空形状检查

文件: ParticleEngineMixin.java

问题:

  • 使用 isEmpty() 检查形状,但某些方块可能返回非空但无碰撞的形状(如 Shapes.empty() 的变体),导致仍会触发异常。

建议:

// 更安全的检查方式
VoxelShape shape = this.level.getBlockState(pos).getShape(this.level, pos);
if (shape.isEmpty() || shape.bounds().isEmpty()) {
    ci.cancel();
}

总结

主要问题集中在 getShape 方法的条件判断逻辑和性能优化上。建议优先修复 AccelerationRingBlockDeflectionRingBlock 中的 context 类型检查,以确保在不同上下文中都能正常工作。

@alpha-hhh

Copy link
Copy Markdown
Contributor

建议两个方块对对方的放置也加一下

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] 加速环、偏转环放置方式优化

2 participants