求模组

谢***Lv.2 注册会员 发表于 6 天前 · 最后回复 4 天前 IP:四川省 209 1
100铁粒
求一个模组,把末影人的判定框改成2格,Java基岩都行

回复 1 最早 最新 只看楼主
你的红***Lv.1 新手上路
4 天前 IP:安徽省
Pehkui(或 Pehkui Rebuilt):最常用的实体大小调整库,支持通过命令调整实体的碰撞箱宽度和高度,Fabric/Forge/NeoForge 都有对应版本。理论上可以通过 /scale 命令单独设定末影人的判定框尺寸,但需要手动调试参数,并不是现成的“2格”预设。
· CustomHitboxLib:支持为任意实体附加自定义碰撞箱,可以通过数据包 JSON 配置,不需要写代码。对于 Java 版玩家来说,这个方案可能更灵活,但同样需要自己定义尺寸。
· Cute Mob Models:这个模组有一个选项可以让末影人的碰撞箱适应模型大小,但它是调整模型而不是单独改判定框,和“2格”的需求不完全匹配。
2# 4 天前 回复 收起回复
史上不***Lv.2 注册会员
前天 22:08 · 来自手机 IP:江苏省

帕帕:
先说清楚一点:末影人默认碰撞箱是 0.6 宽 × 2.9 高,你要的 2 格是改高度。改小之后模型还是 3 格高,会穿天花板、卡在方块外面,这是正常的视觉错位,只看判定框不受影响。

基岩版:行为包覆盖实体定义
不用写代码,一个行为包就够。新建文件夹,结构是:

代码

复制
EndermanBox/
├── manifest.json
└── entities/
    └── enderman.json
manifest.json(两个 uuid 各填一个不重复的值,随便找个 UUID 生成器生成,min_engine_version 按你的 26.x 填高一点也没问题):

json

复制
{
  "format_version": 2,
  "header": {
    "name": "Enderman Hitbox 2",
    "description": "把末影人碰撞箱高度改成 2 格",
    "uuid": "在这里填一个UUID",
    "version": [1, 0, 0],
    "min_engine_version": [1, 21, 0]
  },
  "modules": [
    {
      "type": "data",
      "uuid": "在这里填另一个不同的UUID",
      "version": [1, 0, 0]
    }
  ]
}
entities/enderman.json——行为包对同一个 identifier 只覆盖你写出来的组件,其余沿用原版,所以只给 collision_box 就行:

json

复制
{
  "format_version": "1.21.0",
  "minecraft:entity": {
    "description": {
      "identifier": "minecraft:enderman",
      "is_spawnable": true,
      "is_summonable": true
    },
    "components": {
      "minecraft:collision_box": {
        "width": 0.6,
        "height": 2.0
      }
    }
  }
}
把 EndermanBox 文件夹塞进 behavior_packs,新建或编辑世界时在行为包里勾上它。装完进游戏对着末影人开碰撞箱显示(设置里「显示碰撞箱」或 /gamemode 外的辅助),应该是 2 格高。想改成能钻 1.5 格就把 height 继续调小;width 也能一起改,比如 0.4。另外顺带说一句,format_version 比你的版本老一点没关系,别比游戏版本新就行。

Java 版:Fabric Mixin 改尺寸
按 Fabric 1.21.x + Java 21 写。尺寸来自 EntityType 里注册时的固定值,EndermanEntity 本身没覆写,所以从父类 Entity 的 getDefaultDimensions 下手最省事。

src/main/resources/fabric.mod.json:

json

复制
{
  "schemaVersion": 1,
  "id": "endermanbox",
  "version": "1.0.0",
  "name": "Enderman Hitbox 2",
  "environment": "*",
  "mixins": ["endermanbox.mixins.json"],
  "depends": {
    "fabricloader": ">=0.15.0",
    "minecraft": "~1.21"
  }
}
src/main/resources/endermanbox.mixins.json:

json

复制
{
  "required": true,
  "package": "com.example.endermanbox.mixin",
  "compatibilityLevel": "JAVA_21",
  "mixins": ["EntityMixin"],
  "injectors": { "defaultRequire": 1 }
}
src/main/java/com/example/endermanbox/mixin/EntityMixin.java:

java

复制
package com.example.endermanbox.mixin;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityDimensions;
import net.minecraft.entity.EntityPose;
import net.minecraft.entity.mob.EndermanEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(Entity.class)
public abstract class EntityMixin {

    @Inject(method = "getDefaultDimensions", at = @At("HEAD"), cancellable = true)
    private void endermanbox$shrinkEnderman(EntityPose pose, CallbackInfoReturnable<EntityDimensions> cir) {
        if ((Object) this instanceof EndermanEntity) {
            // 原版是 0.6 x 2.9
            cir.setReturnValue(EntityDimensions.fixed(0.6F, 2.0F));
        }
    }
}
关键点:

注入的是 HEAD + cancellable,直接换掉返回值,不动原版其他实体的尺寸。
1.20.5 之前没有 getDefaultDimensions,那会儿是 Entity#getDimensions(Pose),把方法名和参数类型换掉、@Mixin 不变就行;如果你用的映射里搜不到这两个名字,在 IDE 里点进 Entity 看它现在是哪个方法。
进游戏前记得用 ./gradlew runClient 测,F3+B 开碰撞箱看高度。
眼睛高度(getStandingEyeHeight,原版 2.55)没改,如果你想精确点,在同一个 mixin 里对 EndermanEntity 再注入一次返回 1.7 之类。
不想装模组的偷懒办法
Java 1.20.5 以后所有生物都有 generic.scale 属性,一条命令就能等比缩:

代码

复制
/attribute @e[type=minecraft:enderman,limit=1] minecraft:generic.scale base set 0.69
2.9 × 0.69 ≈ 2.0,判定框正好 2 格,但宽度和模型一起缩,看着是个小号末影人,而且只对已经存在的实体生效。只适合临时测试,长期用还是上面两个方案。

你说的 2 格,是想让末影人能钻 2 格高的洞,还是想让刀更容易砍到?如果是后者,其实改宽度(width 调大一点点)比改高度效果更明显。
3# 前天 22:08 回复 收起回复
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则