Skip to content

Model shape naming in PointedDripstoneBlock mismatch #4323

@111inhistory

Description

@111inhistory

CLASS net/minecraft/class_5689 net/minecraft/block/PointedDripstoneBlock
FIELD field_28050 VERTICAL_DIRECTION Lnet/minecraft/class_2754;
FIELD field_28051 THICKNESS Lnet/minecraft/class_2754;
FIELD field_28052 WATERLOGGED Lnet/minecraft/class_2746;
FIELD field_28053 TIP_MERGE_SHAPE Lnet/minecraft/class_265;
FIELD field_28054 UP_TIP_SHAPE Lnet/minecraft/class_265;
FIELD field_28055 DOWN_TIP_SHAPE Lnet/minecraft/class_265;
FIELD field_28056 FRUSTUM_SHAPE Lnet/minecraft/class_265;
FIELD field_28057 MIDDLE_SHAPE Lnet/minecraft/class_265;
FIELD field_28058 BASE_SHAPE Lnet/minecraft/class_265;

Considering the model size defined in the file, field_28056 should be MIDDLE_SHAPE, field_28057 should be BASE_SHAPE, and field_28058 should be FRUSTUM_SHAPE.

And current mapping would lead to confusing result as showed below (1.21.9).

    // snippet in `getOutlineShape` in PointedDripstoneBlock
        VoxelShape var10000;
        switch ((Thickness)state.get(THICKNESS)) {
            case TIP_MERGE -> var10000 = TIP_MERGE_SHAPE;
            case TIP -> var10000 = state.get(VERTICAL_DIRECTION) == Direction.DOWN ? DOWN_TIP_SHAPE : UP_TIP_SHAPE;
            case FRUSTUM -> var10000 = BASE_SHAPE;
            case MIDDLE -> var10000 = FRUSTUM_SHAPE;
            case BASE -> var10000 = MIDDLE_SHAPE;
            default -> throw new MatchException((String)null, (Throwable)null);
        }

        VoxelShape voxelShape = var10000;
        return voxelShape.offset(state.getModelOffset(pos));

I found this issue in 1.21.3 mapping while reading the code, and confirm it still exists in 1.21.9 mapping. I didn't check it backward.

Here's the 1.21.3 method was like:

      Thickness thickness = (Thickness)state.get(THICKNESS);
      VoxelShape voxelShape;
      if (thickness == Thickness.TIP_MERGE) {
         voxelShape = TIP_MERGE_SHAPE;
      } else if (thickness == Thickness.TIP) {
         if (state.get(VERTICAL_DIRECTION) == Direction.DOWN) {
            voxelShape = DOWN_TIP_SHAPE;
         } else {
            voxelShape = UP_TIP_SHAPE;
         }
      } else if (thickness == Thickness.FRUSTUM) {
         voxelShape = BASE_SHAPE;
      } else if (thickness == Thickness.MIDDLE) {
         voxelShape = FRUSTUM_SHAPE;
      } else {
         voxelShape = MIDDLE_SHAPE;
      }

      Vec3d vec3d = state.getModelOffset(pos);
      return voxelShape.offset(vec3d.x, (double)0.0F, vec3d.z);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions