11package fr .hugman .promenade .block ;
22
3+ import fr .hugman .promenade .registry .PromenadeRegistryKeys ;
4+ import fr .hugman .promenade .tag .PromenadeBiomeTags ;
35import net .minecraft .block .Block ;
46import net .minecraft .block .BlockState ;
57import net .minecraft .block .LeavesBlock ;
68import net .minecraft .item .ItemPlacementContext ;
9+ import net .minecraft .server .world .ServerWorld ;
710import net .minecraft .state .StateManager ;
811import net .minecraft .state .property .BooleanProperty ;
912import net .minecraft .state .property .Properties ;
13+ import net .minecraft .state .property .Property ;
1014import net .minecraft .util .math .BlockPos ;
1115import net .minecraft .util .math .Direction ;
1216import net .minecraft .util .math .random .Random ;
17+ import net .minecraft .world .LightType ;
1318import net .minecraft .world .WorldView ;
1419import net .minecraft .world .tick .ScheduledTickView ;
1520
@@ -35,6 +40,29 @@ public BlockState getPlacementState(ItemPlacementContext context) {
3540 return state .with (BOTTOM , !isSnow (stateBelow ));
3641 }
3742
43+ @ Override
44+ protected boolean hasRandomTicks (BlockState state ) {
45+ return true ;
46+ }
47+
48+ @ Override
49+ protected void randomTick (BlockState state , ServerWorld world , BlockPos pos , Random random ) {
50+ super .randomTick (state , world , pos , random );
51+
52+ if (world .getLightLevel (LightType .BLOCK , pos ) > 11 && !world .getBiome (pos ).isIn (PromenadeBiomeTags .CAN_FREEZE_DURING_SNOWFALL )) {
53+ var normalLeaves = world .getRegistryManager ().getOrThrow (PromenadeRegistryKeys .SNOWY_BLOCK_TRANSFORMATION ).stream ().filter (
54+ entry -> entry .snowyBlock ().value () == state .getBlock ()
55+ ).findFirst ().map (sbt -> sbt .baseBlock ().value ()).orElse (null );
56+
57+ var newLeavesState = normalLeaves .getDefaultState ();
58+ // copy properties of snowy block
59+ for (Property property : state .getProperties ()) {
60+ newLeavesState = newLeavesState .contains (property ) ? newLeavesState .with (property , state .get (property )) : newLeavesState ;
61+ }
62+ world .setBlockState (pos , newLeavesState );
63+ }
64+ }
65+
3866 @ Override
3967 protected BlockState getStateForNeighborUpdate (BlockState state , WorldView world , ScheduledTickView tickView , BlockPos pos , Direction direction , BlockPos neighborPos , BlockState neighborState , Random random ) {
4068 BlockState stateBelow = world .getBlockState (pos .down ());
0 commit comments