地面标线
基本信息
| 属性 | 值 |
|---|---|
| 实现类 | modernmarkings.blocks.MarkingFloor(继承 BlockBase) |
| 方块数 | 87 |
| 注册位置 | modernmarkings.init.ModBlocks 的 new MarkingFloor(...) 静态字段 |
| 材质 | Material.carpet |
| 碰撞 | 无(getCollisionBoundingBoxFromPool 返回全 0 包围盒) |
| 厚度 | 0.0001(setBlockBounds(0, 0, 0, 1, 0.0001, 1)) |
| 不透明 | 否(isOpaqueCube() 返回 false) |
| 渲染 | 自定义 ISimpleBlockRendering(renderMarkingFloorID) |
87 个方块全部在 ModBlocks.java 的 // spotless:off / // spotless:on 区间内硬编码声明,没有任何元数据变体——每个视觉差异都是一个独立方块。
分类统计
| 类别 | 数量 | 成员示例 |
|---|---|---|
| 字母 A–Z | 26 | floor_marking_letter_a … floor_marking_letter_z |
| 黄色系 | 11 | yellow_arrow / yellow_lane / yellow_t_crossing / yellow_stripes … |
| 白色系 | 10 | white_arrow / white_lane / white_lane_cross / white_singleline / white_square … |
| 绿色系 | 8 | green_t_crossing / green_turn / green_end / green_sideline … |
| 蓝色系 | 8 | blue_t_crossing / blue_crossing / blue_turn / blue_end … |
| 红色系 | 8 | red_t_crossing / red_crossing / red_turn / red_end … |
| 橙色系 | 8 | orange_t_crossing / orange_crossing / orange_turn / orange_end … |
| 危险色 | 2 | danger_yellow / danger_red |
| 黑色单线 | 1 | black_singleline |
| 黑白警示线 | 1 | whiteblack_hazardline |
| 禁止进入 | 1 | noentry |
| 禁止踩踏 | 1 | nostep |
| 出口 | 1 | exit |
| 红叉 | 1 | redx |
合计 87。
放置规则
canPlaceBlockAt 先走原版方块规则,再要求下方方块顶面为实心:
return World.doesBlockHaveSolidTopSurface(world, x, y - 1, z);
因此地面标线不能悬空放置。
onNeighborBlockChange 监听正下方方块:一旦顶面不再实心,标线自动掉落为物品并消失(setBlockToAir + dropBlockAsItem)。所以拆掉支撑方块不会留下悬空的贴花。
朝向换算
onBlockPlacedBy 把放置者的 rotationYaw 归一化到 [0, 360),再按 MathHelper.floor_double((yaw * 4.0F / 360.0F) + 0.5D) & 3 折成 4 个朝向,写入 4 个元数据值:
| rotation | meta | 含义 |
|---|---|---|
| 0 | 3 | 向南 |
| 1 | 2 | 向北 |
| 2 | 0 | 向东 / 零位 |
| 3 | 1 | 向西 |
[!NOTE] 注意
rotation0–3 与meta0–3 不是同一套编号,switch里做了一次重排。meta 0 既是「rotation 2」的朝向,也是default分支的兜底值——MarkingFloorRenderer正是靠这 4 个 meta 旋转贴花纹理。
相关条目
- 墙面标识 - 贴墙的 83 个兄弟方块
- Chisel 雕刻组 - 全部 87 个进
Floor blocks组 - 燃料与合成 - 标线的 4 tick 燃料值
- 粉笔 - 创造标签页图标