@@ -7,69 +7,68 @@ boolean triggerEvent(blockState, level, blockPos, n, n2) {
7
7
direction = blockState .getValue (FACING );
8
8
//非客户端
9
9
if (!level .isClientSide ) {
10
- //检查充能情况
10
+ //检查激活情况
11
11
bl = getNeighborSignal (level , blockPos , direction );
12
- //如果被充能,而方块事件为需要收回或瞬推
12
+ //如果激活,而方块事件为收回或瞬推收回
13
13
if (bl && (n == 1 || n == 2 )) {
14
14
//将活塞设置成伸出状态
15
15
//flags:0b00000010 寻路更新
16
16
level .setBlock (blockPos , blockState .setValue (EXTENDED , true ), 2 );
17
17
return false ;
18
18
}
19
- //如果没有充能,方块事件为伸出,则取消该方块事件
19
+ //如果没有激活,而方块事件为伸出,方块事件执行失败
20
20
if (!bl && n == 0 ) return false ;
21
21
}
22
22
//伸出事件
23
23
if (n == 0 ) {
24
- //移动前方方块
24
+ //移动前方方块,若无法移动,则方块事件执行失败
25
25
if (!moveBlocks (level , blockPos , direction , true )) return false ;
26
26
//将活塞设置为伸出状态
27
- //flags:0b01000011 放置移除更新 寻路更新 方块更新/CUD
27
+ //flags:0b01000011 放置移除更新 寻路更新 方块更新
28
28
level .setBlock (blockPos , blockState .setValue (EXTENDED , true ), 67 );
29
29
//播放活塞伸出的声音
30
30
level .playSound (null , blockPos , SoundEvents .PISTON_EXTEND , SoundSource .BLOCKS , 0.5f , level .random .nextFloat () * 0.25f + 0.6f );
31
+ //方块事件执行成功
31
32
return true ;
32
- } else {
33
- //其他方块事件(?) 返回
33
+ } else {//收回事件及瞬推收回事件
34
+ //其他方块事件(?), 返回
34
35
if (n != 1 && n != 2 ) return true ;
35
-
36
- //收回或瞬推收回事件
37
-
38
36
//活塞头位置的方块实体
39
37
blockEntity = level .getBlockEntity (blockPos .relative (direction ));
40
- //如果是b36,则将其变回普通方块
41
- if (blockEntity instanceof PistonMovingBlockEntity ) {
42
- ((PistonMovingBlockEntity )blockEntity ).finalTick ();
43
- }
38
+ //如果是b36,则使其瞬间到位
39
+ if (blockEntity instanceof PistonMovingBlockEntity )((PistonMovingBlockEntity )blockEntity ).finalTick ();
44
40
//将活塞设置成b36
45
41
blockState2 = (Blocks .MOVING_PISTON .defaultBlockState ().setValue (MovingPistonBlock .FACING , direction )).setValue (MovingPistonBlock .TYPE , isSticky ? PistonType .STICKY : PistonType .DEFAULT );
46
- //flags:0b00010100 无形状更新 寻路更新 客户端
42
+ //flags:0b00010100 无形状更新 寻路更新
47
43
level .setBlock (blockPos , blockState2 , 20 );
48
- //将该位置设置成b36方块实体
44
+ //设置成b36方块实体
49
45
level .setBlockEntity (blockPos , MovingPistonBlock .newMovingBlockEntity (defaultBlockState ().setValue (FACING , Direction .from3DDataValue (n2 & 7 )), direction , false , true ));
50
- //给该位置一个方块更新
46
+ //发出方块更新
51
47
level .blockUpdated (blockPos , blockState2 .getBlock ());
52
- //给该位置一个形状更新
48
+ //发出形状更新
53
49
blockState2 .updateNeighbourShapes (level , blockPos , 2 );
54
50
//如果是粘性活塞
55
51
if (isSticky ) {
56
52
//伸出方向一格之外的位置
57
53
blockPos2 = blockPos .offset (direction .getStepX () * 2 , direction .getStepY () * 2 , direction .getStepZ () * 2 );
58
54
blockState3 = level .getBlockState (blockPos2 );
59
55
bl = false ;
60
- //如果这个方块是b36且方向为该活塞伸出方向且处于伸出状态(瞬推收回)
56
+ //如果这个方块是b36且且与活塞同向推出
61
57
if (blockState3 .is (Blocks .MOVING_PISTON ) && (blockEntity2 = level .getBlockEntity (blockPos2 )) instanceof PistonMovingBlockEntity && (pistonMovingBlockEntity = (PistonMovingBlockEntity )blockEntity2 ).getDirection () == direction && pistonMovingBlockEntity .isExtending ()) {
62
- //将其变回普通方块
58
+ //让该方块瞬间到位
63
59
pistonMovingBlockEntity .finalTick ();
64
60
bl = true ;
65
61
}
66
- //如果不是上面的情况(正常收回)
62
+ //如果不是上面的情况
67
63
if (!bl ) {
68
- //如果是收回事件且该方块不是空气且活塞可以拉动且该方块能被正常移动或该方块是活塞/粘性活塞
64
+ //如果是收回事件
65
+ //且该方块不是空气
66
+ //且活塞可以移动前方一格的方块
67
+ //且该方块能被正常移动或该方块是活塞/粘性活塞
69
68
if (n == 1 && !blockState3 .isAir () && PistonBaseBlock .isPushable (blockState3 , level , blockPos2 , direction .getOpposite (), false , direction ) && (blockState3 .getPistonPushReaction () == PushReaction .NORMAL || blockState3 .is (Blocks .PISTON ) || blockState3 .is (Blocks .STICKY_PISTON ))) {
70
- //拉动前方方块
69
+ //移动前方方块
71
70
moveBlocks (level , blockPos , direction , false );
72
- } else {//前方方块没有方块被拉动
71
+ } else {//前方一格的方块不能被拉动
73
72
//删除活塞臂位置的方块
74
73
level .removeBlock (blockPos .relative (direction ), false );
75
74
}
@@ -127,7 +126,7 @@ boolean moveBlocks(level, blockPos, direction, bl) {
127
126
//掉落方块实体的物品
128
127
PistonBaseBlock .dropResources (object22 , level , (BlockPos )object3 , (BlockEntity )object );
129
128
//将该方块设置成空气
130
- //flags:0b00010010 18 无形状更新 寻路更新
129
+ //flags:0b00010010 无形状更新 寻路更新
131
130
level .setBlock ((BlockPos )object3 , Blocks .AIR .defaultBlockState (), 18 );
132
131
//添加到列表中
133
132
arrblockState [n3 ++] = object22 ;
@@ -141,7 +140,7 @@ boolean moveBlocks(level, blockPos, direction, bl) {
141
140
//删除哈希表中方块
142
141
hashMap .remove (object3 );
143
142
//将该方块设置成b36
144
- //flags: 0b01101000 调用onPlace/onRemove
143
+ //flags: 0b01101000 放置移除更新
145
144
level .setBlock ((BlockPos )object3 , Blocks .MOVING_PISTON .defaultBlockState ().setValue (FACING , direction ), 68 );
146
145
//将该方块设置成b36方块实体
147
146
level .setBlockEntity ((BlockPos )object3 , MovingPistonBlock .newMovingBlockEntity (arrayList .get (n ), direction , bl , false ));
@@ -157,7 +156,7 @@ boolean moveBlocks(level, blockPos, direction, bl) {
157
156
//从哈希表中删除
158
157
hashMap .remove (blockPos2 );
159
158
//将活塞头的位置设置成b36
160
- //flags: 0b01101000 调用onPlace/onRemove
159
+ //flags: 0b01101000 放置移除更新
161
160
level .setBlock (blockPos2 , blockState , 68 );
162
161
//将活塞头的位置设置成b36方块实体
163
162
level .setBlockEntity (blockPos2 , MovingPistonBlock .newMovingBlockEntity (object3 , direction , true , true ));
@@ -166,7 +165,7 @@ boolean moveBlocks(level, blockPos, direction, bl) {
166
165
//对于哈希表中剩下的方块位置
167
166
for (blockPos3 : hashMap .keySet ()) {
168
167
//设置成空气
169
- //flags: 0b01010010 调用onPlace/onRemove 无形状更新 寻路更新
168
+ //flags: 0b01010010 放置移除更新 无形状更新 寻路更新
170
169
level .setBlock (blockPos3 , blockState , 82 );
171
170
}
172
171
//对于哈希表中的所有方块
@@ -188,7 +187,7 @@ boolean moveBlocks(level, blockPos, direction, bl) {
188
187
//红石粉间接位置更新
189
188
blockState3 .updateIndirectNeighbourShapes (level , (BlockPos )object , 2 );
190
189
//给出方块更新
191
- level .updateNeighborsAt ((BlockPos )object , blockState3 .getBlock ());/
190
+ level .updateNeighborsAt ((BlockPos )object , blockState3 .getBlock ());
192
191
}
193
192
//对于移动方块列表中的所有方块
194
193
for (n2 = pushList .size () - 1 ; n2 >= 0 ; --n2 ) {
0 commit comments