1+ package dngnrr .aspengrove .classes ;
2+
3+ import net .minecraft .core .BlockPos ;
4+ import net .minecraft .core .Holder ;
5+ import net .minecraft .core .registries .Registries ;
6+ import net .minecraft .resources .ResourceKey ;
7+ import net .minecraft .server .level .ServerLevel ;
8+ import net .minecraft .util .RandomSource ;
9+ import net .minecraft .world .level .Level ;
10+ import net .minecraft .world .level .LevelReader ;
11+ import net .minecraft .world .level .block .MushroomBlock ;
12+ import net .minecraft .world .level .block .state .BlockState ;
13+ import net .minecraft .world .level .levelgen .feature .ConfiguredFeature ;
14+
15+ import java .util .Optional ;
16+
17+ public class ModMushroomBlock extends MushroomBlock {
18+ private final ResourceKey <ConfiguredFeature <?, ?>> feature ;
19+
20+ public ModMushroomBlock (ResourceKey <ConfiguredFeature <?, ?>> feature , Properties properties ) {
21+ super (feature , properties );
22+ this .feature = feature ;
23+ }
24+
25+ @ Override
26+ public boolean isValidBonemealTarget (LevelReader level , BlockPos pos , BlockState state ) {
27+ return true ;
28+ }
29+
30+ @ Override
31+ public boolean isBonemealSuccess (Level level , RandomSource random , BlockPos pos , BlockState state ) {
32+ return (double )random .nextFloat () < 0.4 ;
33+ }
34+
35+ @ Override
36+ public void performBonemeal (ServerLevel level , RandomSource random , BlockPos pos , BlockState state ) {
37+ this .growMushroom (level , pos , state , random );
38+ }
39+
40+ public boolean growMushroom (ServerLevel level , BlockPos pos , BlockState state , RandomSource random ) {
41+ Optional <? extends Holder <ConfiguredFeature <?, ?>>> optional = level .registryAccess ()
42+ .lookupOrThrow (Registries .CONFIGURED_FEATURE )
43+ .get (this .feature );
44+
45+ if (optional .isEmpty ()) {
46+ return false ;
47+ } else {
48+ level .removeBlock (pos , false );
49+ if (optional .get ().value ().place (level , level .getChunkSource ().getGenerator (), random , pos )) {
50+ return true ;
51+ } else {
52+ level .setBlock (pos , state , 3 );
53+ return false ;
54+ }
55+ }
56+ }
57+ }
0 commit comments