11package com .altnoir .mia .block ;
22
3+ import com .altnoir .mia .init .MiaBlocks ;
34import com .altnoir .mia .init .MiaItems ;
45import com .altnoir .mia .worldgen .feature .AbyssPortalFeature ;
56import net .minecraft .core .BlockPos ;
67import net .minecraft .server .level .ServerLevel ;
8+ import net .minecraft .util .RandomSource ;
79import net .minecraft .world .InteractionHand ;
810import net .minecraft .world .ItemInteractionResult ;
911import net .minecraft .world .entity .player .Player ;
1416import net .minecraft .world .level .block .state .BlockState ;
1517import net .minecraft .world .level .block .state .StateDefinition ;
1618import net .minecraft .world .level .block .state .properties .BooleanProperty ;
19+ import net .minecraft .world .level .block .state .properties .IntegerProperty ;
1720import net .minecraft .world .phys .BlockHitResult ;
1821
1922public class AbyssPortalFrameBlock extends Block {
2023 public static final BooleanProperty COMPASS = BooleanProperty .create ("compass" );
24+ public static final IntegerProperty STAGE = IntegerProperty .create ("stage" , 0 , 5 );
2125
2226 public AbyssPortalFrameBlock (Properties properties ) {
2327 super (properties );
24- this .registerDefaultState (this .stateDefinition .any ().setValue (COMPASS , Boolean .valueOf (false )));
28+ this .registerDefaultState (this .stateDefinition .any ()
29+ .setValue (COMPASS , Boolean .valueOf (false ))
30+ .setValue (STAGE , 0 ));
2531 }
2632
2733 @ Override
2834 protected ItemInteractionResult useItemOn (ItemStack stack , BlockState state , Level level , BlockPos pos , Player player , InteractionHand hand , BlockHitResult hitResult ) {
2935 if (stack .is (MiaItems .STAR_COMPASS .get ()) && !state .getValue (COMPASS ) && level .dimension () == Level .OVERWORLD ) {
3036 if (!level .isClientSide ()) {
31- level .setBlock (pos , state .setValue (COMPASS , Boolean .valueOf (true )), 3 );
37+ level .setBlock (pos , state .setValue (COMPASS , Boolean .valueOf (true )). setValue ( STAGE , 0 ) , 3 );
3238 level .levelEvent (1503 , pos , 0 );
3339
34- ServerLevel serverLevel = level .getServer ().getLevel (Level .OVERWORLD );
35- BlockPos targetPos = pos .below (7 );
36- AbyssPortalFeature .createPortalStructure (serverLevel , targetPos , 5 , 8 , true );
37-
38- level .globalLevelEvent (1038 , targetPos , 0 );
40+ level .scheduleTick (pos , this , 20 );
3941 }
4042 }
4143 return super .useItemOn (stack , state , level , pos , player , hand , hitResult );
4244 }
4345
46+ @ Override
47+ protected void tick (BlockState state , ServerLevel level , BlockPos pos , RandomSource random ) {
48+ if (!state .getValue (COMPASS )) {
49+ return ;
50+ }
51+
52+ int newStage = state .getValue (STAGE ) + 1 ;
53+
54+ if (newStage > 5 || newStage < 1 ) {
55+ return ;
56+ }
57+ level .setBlock (pos , state .setValue (STAGE , newStage ), 3 );
58+
59+ ServerLevel serverLevel = level .getServer ().getLevel (Level .OVERWORLD );
60+ BlockPos targetPos = pos .below (7 );
61+
62+ if (newStage < 5 ) {
63+ int height = 5 - newStage ;
64+ AbyssPortalFeature .createPortalStructure (serverLevel , targetPos , height );
65+ } else {
66+ AbyssPortalFeature .createPortalStructure (serverLevel , targetPos , MiaBlocks .ABYSS_PORTAL .get (), 0 );
67+ level .globalLevelEvent (1038 , targetPos , 0 );
68+ return ;
69+ }
70+ level .scheduleTick (pos , this , 20 );
71+ }
72+
4473 @ Override
4574 public BlockState getStateForPlacement (BlockPlaceContext context ) {
46- return this .defaultBlockState ().setValue (COMPASS , Boolean .valueOf (false ));
75+ return this .defaultBlockState ()
76+ .setValue (COMPASS , Boolean .valueOf (false ))
77+ .setValue (STAGE , 0 );
4778 }
4879
4980 @ Override
@@ -58,6 +89,6 @@ protected int getAnalogOutputSignal(BlockState blockState, Level level, BlockPos
5889
5990 @ Override
6091 protected void createBlockStateDefinition (StateDefinition .Builder <Block , BlockState > builder ) {
61- builder .add (COMPASS );
92+ builder .add (COMPASS , STAGE );
6293 }
63- }
94+ }
0 commit comments