package Ġat . pe tr ak . hex . common . cast ing Ċ Ċ import Ġat . pe tr ak . hex . Hex Mod Ċ import Ġat . pe tr ak . hex . api . Pattern Registry Ċ import Ġat . pe tr ak . hex . api . Rendered Spell Ċ import Ġat . pe tr ak . hex . api . Spell Datum Ċ import Ġat . pe tr ak . hex . common . items . Item W and Ċ import Ġat . pe tr ak . hex . common . items . magic . Item Package d Spell Ċ import Ġat . pe tr ak . hex . common . lib . Hex Statistics Ċ import Ġat . pe tr ak . hex . common . lib . Lib Damage Sources Ċ import Ġat . pe tr ak . hex . data gen . Advance ments Ċ import Ġat . pe tr ak . hex . hex math . Hex Pattern Ċ import Ġnet . minecraft . nbt . Compound Tag Ċ import Ġnet . minecraft . nbt . List Tag Ċ import Ġnet . minecraft . nbt . Tag Ċ import Ġnet . minecraft . server . level . Server Player Ċ import Ġnet . minecraft . world . Interaction Hand Ċ import Ġjava . util .* Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠKeep s Ġtrack Ġof Ġa Ġplayer Ġcasting Ġa Ġspell Ġon Ġthe Ġserver . Ċ Ġ* ĠIt 's Ġstored Ġas ĠN BT Ġon Ġthe Ġw and . Ċ Ġ*/ Ċ class ĠCast ing Harness Ġprivate Ġconstructor ( ĊĠĠĠ Ġval Ġstack : ĠMutable List < Spell Datum <* >>, ĊĠĠĠ Ġvar Ġp aren Count : ĠInt , ĊĠĠĠ Ġvar Ġparent hesized : ĠMutable List < Hex Pattern >, ĊĠĠĠ Ġvar Ġescape Next : ĠBoolean , ĊĠĠĠ Ġval Ġctx : ĠCast ing Context , Ċ ) Ġ{ ĊĠĠĠ Ġconstructor ( ctx : ĠCast ing Context ) Ġ: Ġthis ( mutable ListOf (), Ġ 0 , Ġmutable ListOf (), Ġfalse , Ġctx ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġthe Ġserver Ġgets Ġa Ġpacket Ġfrom Ġthe Ġclient Ġwith Ġa Ġnew Ġpattern , ĊĠĠĠĠ Ġ* Ġhandle Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate ( new Pat : ĠHex Pattern ): ĠCast Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġspell sTo Cast Ġ= Ġempty List < Rendered Spell >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġex n : ĠCast Exception ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperator Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPattern Registry . lookup Pattern ( new Pat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCast Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex n Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . paren Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . escape Next ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . escape Next Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent hesized . add ( new Pat ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operator Ġ== ĠWidget . ESCAPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . escape Next Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operator Ġ== ĠWidget . OPEN _ PAREN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġhave Ġescaped Ġthe Ġpare ns Ġonto Ġthe Ġstack ; Ġwe Ġjust Ġalso Ġrecord Ġour Ġcount . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent hesized . add ( new Pat ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . paren Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operator Ġ== ĠWidget . CLOSE _ PAREN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . paren Count -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . paren Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stack . add ( Spell Datum . make ( this . parent hesized . map Ġ{ ĠSpell Datum . make ( it ) Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent hesized . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( this . paren Count Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCast Exception ( CastException . Reason . TOO _ MAN Y _ CLOSE _ PARE NS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġhave Ġthis Ġsituation : Ġ" (() " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġneed Ġto Ġadd Ġthe Ġclose Ġp aren ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent hesized . add ( new Pat ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent hesized . add ( new Pat ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( this . escape Next ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . escape Next Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stack . add ( Spell Datum . make ( new Pat )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operator Ġ== ĠWidget . ESCAPE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . escape Next Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ex n Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthere Ġwas Ġa Ġproblem Ġfinding Ġthe Ġpattern Ġand Ġit Ġwas ĠNOT Ġdue Ġto Ġnumbers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġex n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operator Ġ== ĠWidget . OPEN _ PAREN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . paren Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operator Ġ== ĠWidget . CLOSE _ PAREN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠCast Exception ( CastException . Reason . TOO _ MAN Y _ CLOSE _ PARE NS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġknow Ġthe Ġoperator Ġis Ġok Ġhere ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( mana Cost , Ġspell s ) Ġ= Ġoperator !!. modify Stack ( this . stack , Ġthis . ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspell sTo Cast Ġ= Ġspell s ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . withdraw Man a ( mana Cost , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ctx . caster . is Dead Or D ying ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCast Result . Di ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( spell sTo Cast . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCast Result . Cast ( spell sTo Cast , Ġthis . stack . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( this . stack . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . paren Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCast Result . Quit Cast ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCast Result . Nothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCast Result . Nothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠCast Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCast Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMight Ġcast Ġfrom Ġhit points . ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġman a Ġcost Ġstill Ġremaining Ġafter Ġwe Ġdep lete Ġeverything . ĠIt Ġwill Ġbe Ġ<= Ġ 0 Ġif Ġwe Ġcould Ġpay Ġfor Ġit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAlso Ġa wards Ġstats Ġand Ġach ievements Ġand Ġsuch ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwithdraw Man a ( mana Cost : ĠInt , Ġallow Over cast : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġprevent Ġpoor Ġimp ls Ġfrom Ġg aining Ġyou Ġman a ĊĠĠĠĠĠĠĠ Ġif Ġ( this . ctx . caster . is Creative Ġ|| Ġman a Cost Ġ<= Ġ 0 ) Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcost Left Ġ= Ġman a Cost ĊĊĠĠĠĠĠĠĠ Ġval Ġc aster Stack Ġ= Ġthis . ctx . caster . getItem In Hand ( this . ctx . cast ing Hand ) ĊĠĠĠĠĠĠĠ Ġval Ġc aster Item Ġ= Ġc aster Stack . item ĊĠĠĠĠĠĠĠ Ġval Ġips Can Draw From Inv Ġ= Ġif Ġ( caster Item Ġis ĠItem Package d Spell ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġc aster Stack . or Create Tag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġman a Available Ġ= Ġtag . getInt ( Item Package d Spell . TAG _ MAN A ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġman a To Take Ġ= Ġmin ( cost Left , Ġman a Available ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag . put Int ( Item Package d Spell . TAG _ MAN A , Ġman a Available Ġ- Ġman a To Take ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcost Left Ġ-= Ġman a To Take ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc aster Item . can Draw Man a From Inventory () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( caster Item Ġis ĠItem W and Ġ|| Ġips Can Draw From Inv ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġman able Items Ġ= Ġthis . ctx . caster . inventory . items ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! Objects . isNull ( Man a Helper . priority ( it )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Descending ( Man a Helper :: priority ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( stack Ġin Ġman able Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcost Left Ġ-= ĠMan a Helper . extract Man a ( stack , Ġcost Left ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cost Left Ġ<= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( allow Over cast Ġ&& Ġcost Left Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCast Ġfrom ĠHP ! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġman a To Health Ġ= ĠHex Mod . CONFIG . mana To Health Rate . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhealth to Remove Ġ= Ġcost Left . toDouble () Ġ/ Ġman a To Health ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġman a Ab le To Cast From HP Ġ= Ġthis . ctx . caster . health Ġ* Ġman a To Health ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġman a To Act ually Pay For Ġ= Ġmin ( mana Ab le To Cast From HP . toInt (), Ġcost Left ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdv ance ments . OVER CAST _ TRIGGER . trigger ( this . ctx . caster , Ġman a To Act ually Pay For ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ctx . caster . award Stat ( Hex Statistics . MAN A _ OVER CAST ED , Ġman a Cost Ġ- Ġcost Left ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ctx . caster . h urt ( Lib Damage Sources . OVER CAST , Ġhealth to Remove . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcost Left Ġ-= Ġman a To Act ually Pay For ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġmight Ġbe Ġmore Ġthan Ġthe Ġman a Ġcost ! Ġfor Ġexample Ġif Ġwe Ġwaste Ġa Ġlot Ġof Ġman a Ġfrom Ġan Ġitem ĊĠĠĠĠĠĠĠ Ġthis . ctx . caster . award Stat ( Hex Statistics . MAN A _ USED , Ġman a Cost Ġ- Ġcost Left ) ĊĠĠĠĠĠĠĠ ĠAdv ance ments . SP END _ MAN A _ TRIGGER . trigger ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ctx . caster , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġman a Cost Ġ- Ġcost Left , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cost Left Ġ< Ġ 0 ) Ġ- cost Left Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcost Left ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġserialize To NBT (): ĠCompound Tag Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠCompound Tag () ĊĊĠĠĠĠĠĠĠ Ġval Ġstack Tag Ġ= ĠList Tag () ĊĠĠĠĠĠĠĠ Ġfor Ġ( datum Ġin Ġthis . stack ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Tag . add ( datum . serialize To NBT ()) ĊĠĠĠĠĠĠĠ Ġout . put ( TAG _ STACK , Ġstack Tag ) ĊĊĠĠĠĠĠĠĠ Ġout . put Int ( TAG _ PAREN _ COUNT , Ġthis . paren Count ) ĊĠĠĠĠĠĠĠ Ġout . put Boolean ( TAG _ ESCAPE _ NEXT , Ġthis . escape Next ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpare ns Tag Ġ= ĠList Tag () ĊĠĠĠĠĠĠĠ Ġfor Ġ( pat Ġin Ġthis . parent hesized ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpare ns Tag . add ( pat . serialize To NBT ()) ĊĠĠĠĠĠĠĠ Ġout . put ( TAG _ PAREN TH ES IZED , Ġpare ns Tag ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġout ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG _ STACK Ġ= Ġ" stack " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG _ PAREN _ COUNT Ġ= Ġ" open _ pare ns " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG _ PAREN TH ES IZED Ġ= Ġ" parent hesized " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG _ ESCAPE _ NEXT Ġ= Ġ" escape _ next " ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠDeserialize From NBT ( nbt : ĠTag ?, Ġc aster : ĠServer Player , Ġw and Hand : ĠInteraction Hand ): ĠCast ing Harness Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠCast ing Context ( caster , Ġw and Hand ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn bt Ġ= Ġn bt Ġas ĠCompound Tag ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Ġ= Ġmutable ListOf < Spell Datum <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack Tag Ġ= Ġn bt . getList ( TAG _ STACK , ĠTag . TAG _ COMP O UND . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sub tag Ġin Ġstack Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatum Ġ= ĠSpell Datum . Deserialize From NBT ( sub tag Ġas ĠCompound Tag , Ġctx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack . add ( datum ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent hesized Ġ= Ġmutable ListOf < Hex Pattern >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp aren Tag Ġ= Ġn bt . getList ( TAG _ PAREN TH ES IZED , ĠTag . TAG _ COMP O UND . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sub tag Ġin Ġp aren Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent hesized . add ( Hex Pattern . Deserialize From NBT ( sub tag Ġas ĠCompound Tag )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp aren Count Ġ= Ġn bt . getInt ( TAG _ PAREN _ COUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġescape Next Ġ= Ġn bt . getBoolean ( TAG _ ESCAPE _ NEXT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCast ing Harness ( stack , Ġp aren Count , Ġparent hesized , Ġescape Next , Ġctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex n : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHex Mod . LOGGER . warn (" Couldn 't Ġload Ġh arness Ġfrom Ġn bt Ġtag , Ġfalling Ġback Ġto Ġdefault : Ġ$ nbt : Ġ$ ex n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCast ing Harness ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠCast Result Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠCast ing Ġstill Ġin Ġprogress Ġ*/ ĊĠĠĠĠĠĠĠ Ġobject ĠNothing Ġ: ĠCast Result () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠNon - c ata stro ph ic Ġquit Ġ*/ ĊĠĠĠĠĠĠĠ Ġobject ĠQu it Cast ing Ġ: ĠCast Result () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠFinished Ġcasting Ġ*/ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠCast ( val Ġspell s : ĠList < Rendered Spell >, Ġval Ġquit : ĠBoolean ) Ġ: ĠCast Result () ĊĊĠĠĠĠĠĠĠ Ġ/** Ġu h - oh Ġ*/ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( val Ġex n : ĠCast Exception ) Ġ: ĠCast Result () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠYOU ĠDI ED Ġdue Ġto Ġcasting Ġtoo Ġhard Ġfrom Ġhit Ġpoints . Ġ*/ ĊĠĠĠĠĠĠĠ Ġobject ĠD ied Ġ: ĠCast Result () ĊĊĠĠĠĠĠĠĠ Ġfun Ġshould Quit (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQu it Cast ing , ĠD ied , Ġis ĠError Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCast Ġ-> Ġthis . quit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }