package Ġio . github . red stone par ad ox . jo urn ia . world . gen . fol i age Ċ Ċ import Ġcom . moj ang . serialization . Codec Ċ import Ġcom . moj ang . serialization . code cs . Record Codec Builder Ċ import Ġio . github . red stone par ad ox . jo urn ia . util . List Builder Ċ import Ġio . github . red stone par ad ox . jo urn ia . util . field Ċ import Ġnet . minecraft . util . math . Block Box Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġnet . minecraft . util . math . Direction Ċ import Ġnet . minecraft . world . Mod ifiable Test able World Ċ import Ġnet . minecraft . world . gen . Uniform Int Distribution Ċ import Ġnet . minecraft . world . gen . feature . Tree Feature Ċ import Ġnet . minecraft . world . gen . feature . Tree Feature Config Ċ import Ġnet . minecraft . world . gen . fol i age . F oli age Pl acer Ċ import Ġnet . minecraft . world . gen . fol i age . F oli age Pl acer Type Ċ import Ġjava . util .* Ċ Ċ class ĠP ine F oli age Pl acer ( radius : ĠUniform Int Distribution , Ġoffset : ĠUniform Int Distribution ): ĠF oli age Pl acer ( radius , Ġoffset ) Ġ{ ĊĊĠĠĠ Ġconstructor ( radius : ĠInt , Ġrandom Radius : ĠInt , Ġoffset : ĠInt , Ġrandom Offset : ĠInt ): Ġthis ( Uniform Int Distribution . of ( radius , Ġrandom Radius ), ĠUniform Int Distribution . of ( offset , Ġrandom Offset )) ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate ( world : ĠMod ifiable Test able World , Ġrandom : ĠRandom ?, Ġconfig : ĠTree Feature Config , Ġtrunk Height : ĠInt , Ġtree Node : ĠTreeNode , Ġfol i age Height : ĠInt , Ġradius : ĠInt , Ġleaves : ĠMutable Set < Block Pos >, Ġi : ĠInt , Ġblock Box : ĠBlock Box ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġtree Node . center . up () ĊĠĠĠĠĠĠĠ Ġval Ġmutable Ġ= ĠBlockPos . Mutable () ĊĊĠĠĠĠĠĠĠ ĠLE AF _ POSITION S . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable . x Ġ= Ġtop . x Ġ+ Ġit . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable . y Ġ= Ġtop . y Ġ+ Ġit . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable . z Ġ= Ġtop . z Ġ+ Ġit . z ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Tree Feature . can Replace ( world , Ġmutable )) Ġworld . set BlockState ( mutable , Ġconfig . leaves Provider . getBlock State ( random , Ġmutable ), Ġ 1 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock Box ?. en compass ( Block Box ( mutable , Ġmutable )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetRandom Height ( random : ĠRandom ?, Ġtrunk Height : ĠInt , Ġconfig : ĠTree Feature Config ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrunk Height Ġ+ Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetType (): ĠF oli age Pl acer Type < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJo urn ia F oli age Pl ac ers . P INE _ FO LI AGE _ PL AC ER ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Invalid For Le aves ( random : ĠRandom , Ġbase Height : ĠInt , Ġdx : ĠInt , Ġdy : ĠInt , Ġdz : ĠInt , Ġbl : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbase Height Ġ== Ġdz Ġ&& Ġdy Ġ== Ġdz Ġ&& Ġdz Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠCODEC : ĠCodec < P ine F oli age Pl acer > Ġ= ĠRecord Codec Builder . create Ġ{ Ġinstance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ create Ġinstance . group ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUniform Int Distribution . CODEC . field (" radius ") Ġ{ Ġradius Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUniform Int Distribution . CODEC . field (" offset ") Ġ{ Ġoffset Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply ( instance , Ġ:: P ine F oli age Pl acer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠLE AF _ POSITION S : ĠList < Block Pos > Ġ= ĠList Builder < Block Pos >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. entries ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlockPos ( 0 , Ġ 0 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlockPos ( 0 , Ġ- 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. entries From Func Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Block Pos >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( direction Ġin ĠlistOf ( Direction . NORTH , ĠDirection . SO UTH , ĠDirection . EAST , ĠDirection . WEST )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 8 ) Ġ{ Ġlist . add ( Block Pos ( 0 , Ġ- i , Ġ 0 ). offset ( direction )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. entries From Func Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Block Pos >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( direction Ġin ĠlistOf ( Direction . NORTH , ĠDirection . SO UTH , ĠDirection . EAST , ĠDirection . WEST )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 4 .. 6 ) Ġ{ Ġlist . add ( Block Pos ( 0 , Ġ- i , Ġ 0 ). offset ( direction ). offset ( direction )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. entries From Func Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Block Pos >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( direction Ġin ĠlistOf ( Direction . NORTH , ĠDirection . SO UTH , ĠDirection . EAST , ĠDirection . WEST )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 4 .. 6 ) Ġ{ Ġlist . add ( Block Pos ( 0 , Ġ- i , Ġ 0 ). offset ( direction ). offset ( direction . rotate Y Clock wise ())) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ }