package Ġmods . better fol i age . model Ċ Ċ import Ġmods . better fol i age . chunk . Block Ctx Ċ import Ġmods . better fol i age . render . pipeline . Render Ctx Base Ċ import Ġmods . better fol i age . render . pipeline . Wrapped Layer Predicate Ċ import Ġmods . better fol i age . render . pipeline . layer Predicate Ċ import Ġmods . better fol i age . resource . discovery . Model B aking Context Ċ import Ġmods . better fol i age . resource . discovery . Model B aking Key Ċ import Ġmods . better fol i age . util . Double 3 Ċ import Ġmods . better fol i age . util . Has Logger Ċ import Ġmods . better fol i age . util . directions And Null Ċ import Ġmods . better fol i age . util . map Array Ċ import Ġnet . minecraft . block . Block Ċ import Ġnet . minecraft . block . BlockState Ċ import Ġnet . minecraft . client . renderer . Render Type Ċ import Ġnet . minecraft . client . renderer . Render Type Lookup Ċ import Ġnet . minecraft . client . renderer . model . B aked Quad Ċ import Ġnet . minecraft . client . renderer . model . IB aked Model Ċ import Ġnet . minecraft . client . renderer . model . Simple B aked Model Ċ import Ġnet . minecraft . client . renderer . vertex . Default Vertex Formats Ċ import Ġnet . minecraft . client . renderer . vertex . Vertex Format Element Ċ import Ġnet . minecraftforge . client . model . pipeline . B aked Quad Builder Ċ import Ġjava . util . Random Ċ Ċ /** Ċ Ġ* ĠHy brid Ġb aked Ġquad Ġimplementation , Ġcarry ing Ġboth Ġb aked Ġand Ġun b aked Ġinformation . Ċ Ġ* ĠUsed Ġto Ġdo Ġadvanced Ġvertex Ġlight ing Ġwithout Ġun b aking Ġvertex Ġdata Ġat Ġlight ing Ġtime . Ċ Ġ*/ Ċ data Ġclass ĠHalf B aked Quad ( ĊĠĠĠ Ġval Ġraw : ĠQuad , ĊĠĠĠ Ġval Ġb aked : ĠB aked Quad Ċ ) Ċ Ċ open Ġclass ĠHalf B aked Simple Model Wrapper ( base Model : ĠSimple B aked Model ): ĠIB aked Model Ġby Ġbase Model , ĠSpecial Render Model Ġ{ ĊĠĠĠ Ġval Ġbase Qu ads Ġ= Ġbase Model . un b ake Qu ads () ĊĊĠĠĠ Ġoverride Ġfun Ġprepare ( ctx : ĠBlock Ctx , Ġrandom : ĠRandom ) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġrender Layer ( ctx : ĠRender Ctx Base , Ġdata : ĠAny , Ġlayer : ĠRender Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġthe Ġpassed Ġdata Ġis Ġa ĠBlock State , Ġrender Ġon Ġthe Ġsame Ġlayer ( s ) Ġas Ġthat Ġblock ĊĠĠĠĠĠĠĠ Ġval Ġtest State Ġ= Ġ( data Ġas ? ĠBlock State ) Ġ?: Ġctx . state ĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġcould Ġget Ġcalled Ġfor Ġmore Ġlayers Ġthan Ġthe Ġunderlying Ġmodel Ġis Ġon ĊĠĠĠĠĠĠĠ Ġ// Ġignore Ġextra Ġdecoration Ġlayers ĊĠĠĠĠĠĠĠ Ġval Ġshould Render Ġ= Ġwhen ( val Ġpredicate Ġ= Ġtest State . block . layer Predicate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWr apped Layer Predicate Ġ-> Ġpredicate . original . test ( layer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠRender Type Lookup . can Render In Layer ( test State , Ġlayer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( should Render ) Ġctx . render Qu ads ( base Qu ads ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ open Ġclass ĠHalf B aked Special Wrapper ( val Ġbase Model : ĠSpecial Render Model ): ĠSpecial Render Model Ġby Ġbase Model Ġ{ Ċ } Ċ Ċ abstract Ġclass ĠHalf B aked Wrapper Key Ġ: ĠModel B aking Key , ĠHas Logger () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġb ake ( ctx : ĠModel B aking Context ): ĠIB aked Model ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Model Ġ= Ġsuper . b ake ( ctx ) ĊĠĠĠĠĠĠĠ Ġval Ġhalf B aked Ġ= Ġwhen ( base Model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple B aked Model Ġ-> ĠHalf B aked Simple Model Wrapper ( base Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( half B aked Ġ== Ġnull ) Ġbase Model Ġelse Ġb ake ( ctx , Ġhalf B aked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġb ake ( ctx : ĠModel B aking Context , Ġwrapped : ĠSpecial Render Model ): ĠSpecial Render Model Ċ } Ċ Ċ fun ĠList < Quad >. b ake ( apply Diffuse Lighting : ĠBoolean ) Ġ= Ġmap Ġ{ Ġquad Ġ-> ĊĠĠĠ Ġif Ġ( quad . sprite Ġ== Ġnull ) Ġthrow ĠIllegalStateException (" Quad Ġmust Ġhave Ġa Ġtexture Ġassigned Ġbefore Ġb aking ") ĊĠĠĠ Ġval Ġbuilder Ġ= ĠB aked Quad Builder ( quad . sprite ) ĊĠĠĠ Ġbuilder . set Apply Diffuse Lighting ( apply Diffuse Lighting ) ĊĠĠĠ Ġbuilder . set Quad Orientation ( quad . face ()) ĊĠĠĠ Ġbuilder . set Quad Tint ( quad . color Index ) ĊĠĠĠ Ġquad . verts . forEach Ġ{ Ġvertex Ġ-> ĊĠĠĠĠĠĠĠ ĠDefault Vertex Formats . BLOCK . elements . forEach Indexed Ġ{ Ġidx , Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . usage Ġ== ĠVertex Format Element . Usage . POSITION Ġ-> Ġbuilder . put ( idx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . xyz . x Ġ+ Ġ 0 . 5 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . xyz . y Ġ+ Ġ 0 . 5 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . xyz . z Ġ+ Ġ 0 . 5 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġfill Ġlight map ĠUV Ġcoords ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . usage Ġ== ĠVertex Format Element . Usage . UV Ġ&& Ġelement . type Ġ== ĠVertex Format Element . Type . FLOAT Ġ-> Ġbuilder . put ( idx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquad . sprite . u 0 Ġ+ Ġ( quad . sprite . u 1 Ġ- Ġquad . sprite . u 0 ) Ġ* Ġ( vertex . uv . u Ġ+ Ġ 0 . 5 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquad . sprite . v 0 Ġ+ Ġ( quad . sprite . v 1 Ġ- Ġquad . sprite . v 0 ) Ġ* Ġ( vertex . uv . v Ġ+ Ġ 0 . 5 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 f , Ġ 1 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . usage Ġ== ĠVertex Format Element . Usage . COLOR Ġ-> Ġbuilder . put ( idx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . color . red Ġand Ġ 2 5 5 ). toFloat () Ġ/ Ġ 2 5 5 . 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . color . green Ġand Ġ 2 5 5 ). toFloat () Ġ/ Ġ 2 5 5 . 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . color . blue Ġand Ġ 2 5 5 ). toFloat () Ġ/ Ġ 2 5 5 . 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . color . alpha Ġand Ġ 2 5 5 ). toFloat () Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . usage Ġ== ĠVertex Format Element . Usage . NORMAL Ġ-> Ġbuilder . put ( idx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . normal Ġ?: Ġquad . normal ). x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . normal Ġ?: Ġquad . normal ). y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( vertex . normal Ġ?: Ġquad . normal ). z . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbuilder . put ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠHalf B aked Quad ( quad , Ġbuilder . build ()) Ċ } Ċ Ċ fun ĠArray < List < Quad >> . b ake ( apply Diffuse Lighting : ĠBoolean ) Ġ= Ġmap Array Ġ{ Ġit . b ake ( apply Diffuse Lighting ) Ġ} Ċ Ċ fun ĠB aked Quad . un b ake (): ĠHalf B aked Quad Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= ĠDefault Vertex Formats . BLOCK . integer Size ĊĠĠĠ Ġval Ġvert s Ġ= ĠArray ( 4 ) Ġ{ Ġv Idx Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġjava . lang . Float . int Bits To Float ( vertices [ v Idx Ġ* Ġsize Ġ+ Ġ 0 ]) Ġ- Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġjava . lang . Float . int Bits To Float ( vertices [ v Idx Ġ* Ġsize Ġ+ Ġ 1 ]) Ġ- Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġjava . lang . Float . int Bits To Float ( vertices [ v Idx Ġ* Ġsize Ġ+ Ġ 2 ]) Ġ- Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġvertices [ v Idx Ġ* Ġsize Ġ+ Ġ 3 ] ĊĠĠĠĠĠĠĠ Ġval Ġu Ġ= Ġjava . lang . Float . int Bits To Float ( vertices [ v Idx Ġ* Ġsize Ġ+ Ġ 4 ]) ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġjava . lang . Float . int Bits To Float ( vertices [ v Idx Ġ* Ġsize Ġ+ Ġ 5 ]) ĊĠĠĠĠĠĠĠ ĠVertex ( Double 3 ( x , Ġy , Ġz ), ĠUV ( u . toDouble (), Ġv . toDouble ()), ĠColor ( color )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġun b aked Ġ= ĠQuad ( ĊĠĠĠĠĠĠĠ Ġvert s [ 0 ], Ġvert s [ 1 ], Ġvert s [ 2 ], Ġvert s [ 3 ], ĊĠĠĠĠĠĠĠ Ġcolor Index Ġ= Ġif Ġ( is Tint ed ) Ġt int Index Ġelse Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġface Ġ= Ġdirection ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn ĠHalf B aked Quad ( un b aked , Ġthis ) Ċ } Ċ Ċ fun ĠSimple B aked Model . un b ake Qu ads () Ġ= Ġdirections And Null . flatMap Ġ{ Ġface Ġ-> ĊĠĠĠ Ġget Qu ads ( null , Ġface , ĠRandom ()). map Ġ{ Ġit . un b ake () Ġ} Ċ } ĊĊ