package Ġme . ste ven . ind rev . api Ċ Ċ import Ġme . ste ven . ind rev . registry . IR Item Registry Ċ import Ġnet . minecraft . item . Item Ċ import Ġnet . minecraft . item . ItemStack Ċ import Ġnet . minecraft . item . Items Ċ import Ġnet . minecraft . nbt . N bt Compound Ċ import Ġnet . minecraft . nbt . N bt List Ċ import Ġnet . minecraft . tag . Tag Key Ċ import Ġnet . minecraft . util . Identifier Ċ import Ġnet . minecraft . util . registry . Registry Ċ import Ġjava . util .* Ċ import Ġkotlin . math . pow Ċ Ċ object ĠO re Data Cards Ġ{ ĊĊĠĠĠ Ġconst Ġval ĠMAX _ SIZE Ġ= Ġ 2 0 4 8 ĊĠĠĠ Ġconst Ġval ĠMAX _ RIC NH ESS Ġ= Ġ 1 . 0 ĊĠĠĠ Ġconst Ġval ĠMAX _ PER _ CYCLE Ġ= Ġ 8 ĊĊĠĠĠ Ġval ĠMIN ING _ RIG _ ALLOWED _ TAG : ĠTag Key < Item > Ġ= ĠTag Key . of ( Registry . ITEM _ KEY , ĠIdentifier (" ind rev : mining _ rig _ allowed ")) ĊĊĠĠĠ Ġval ĠINVALID _ DATA Ġ= ĠData ( emptyList (), Ġmutable Map Of (), Ġ- 1 . 0 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 ) ĊĊĠĠĠ Ġfun Ġread N bt ( stack : ĠItemStack ): ĠData ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! stack . is Of ( IR Item Registry . ORE _ DATA _ CARD )) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġn bt Ġ= Ġstack . getSub N bt (" Card Data ") Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġentries N bt Ġ= Ġn bt . getList (" Entries ", Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġmutable ListOf < O re Entry >() ĊĠĠĠĠĠĠĠ Ġentries N bt . forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠitemId Ġ= Ġ( element Ġas ĠNbt Compound ). getString (" ItemId ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptional Ġ= ĠRegistry . ITEM . get OrEmpty ( Identifier ( itemId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! optional . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINVALID _ DATA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġelement . getInt (" Count ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . add ( O re Entry ( optional . get (), Ġcount )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmodifiers N bt Ġ= Ġn bt . getList (" Modifiers Used ", Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġmodifiers Ġ= Ġmutable Map Of < Modifier , ĠInt >() ĊĠĠĠĠĠĠĠ Ġmodifiers N bt . forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodifier Id Ġ= Ġ( element Ġas ĠNbt Compound ). getInt (" Modifier ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlevel Ġ= Ġelement . getInt (" Level ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifiers [ Modifier . values ()[ modifier Id ]] Ġ= Ġlevel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrich ness Ġ= Ġn bt . getDouble (" Rich ness ") ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġn bt . getInt (" Size ") ĊĠĠĠĠĠĠĠ Ġval Ġused Ġ= Ġn bt . getInt (" Used ") ĊĠĠĠĠĠĠĠ Ġval Ġspeed Ġ= Ġn bt . getInt (" Speed ") ĊĠĠĠĠĠĠĠ Ġval Ġrng Ġ= Ġn bt . getInt (" Rng ") ĊĠĠĠĠĠĠĠ Ġval Ġenergy Ġ= Ġn bt . getInt (" Energy ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠData ( entries . toList (), Ġmodifiers , Ġrich ness , Ġspeed , Ġrng , Ġenergy , Ġsize , Ġused ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite N bt ( stack : ĠItemStack , Ġdata : ĠData ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! stack . is Of ( IR Item Registry . ORE _ DATA _ CARD )) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġn bt Ġ= Ġstack . get OrCreate Sub N bt (" Card Data ") ĊĊĠĠĠĠĠĠĠ Ġval Ġentries N bt Ġ= ĠNbt List () ĊĠĠĠĠĠĠĠ Ġdata . entries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry N bt Ġ= ĠNbt Compound () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry N bt . putString (" ItemId ", ĠRegistry . ITEM . getId ( entry . item ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry N bt . put Int (" Count ", Ġentry . count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries N bt . add ( entry N bt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġn bt . put (" Entries ", Ġentries N bt ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmodifiers N bt Ġ= ĠNbt List () ĊĠĠĠĠĠĠĠ Ġdata . modifiers Used . forEach Ġ{ Ġ( modifier , Ġlevel ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodifier N bt Ġ= ĠNbt Compound () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier N bt . put Int (" Modifier ", Ġmodifier . ordinal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier N bt . put Int (" Level ", Ġlevel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifiers N bt . add ( modifier N bt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġn bt . put (" Modifiers Used ", Ġmodifiers N bt ) ĊĊĠĠĠĠĠĠĠ Ġn bt . put Double (" Rich ness ", Ġdata . rich ness ) ĊĠĠĠĠĠĠĠ Ġn bt . put Int (" Size ", Ġdata . max Cycles ) ĊĠĠĠĠĠĠĠ Ġn bt . put Int (" Used ", Ġdata . used ) ĊĠĠĠĠĠĠĠ Ġn bt . put Int (" Speed ", Ġdata . speed ) ĊĠĠĠĠĠĠĠ Ġn bt . put Int (" Rng ", Ġdata . rng ) ĊĠĠĠĠĠĠĠ Ġn bt . put Int (" Energy ", Ġdata . energy Required ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠData ( val Ġentries : ĠList < O re Entry >, Ġval Ġmodifiers Used : ĠMutable Map < Modifier , ĠInt >, Ġval Ġrich ness : ĠDouble , Ġval Ġspeed : ĠInt , Ġval Ġrng : ĠInt , Ġval Ġenergy Required : ĠInt , Ġval Ġmax Cycles : ĠInt , Ġvar Ġused : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠisValid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ!= ĠINVALID _ DATA Ġ&& Ġentries . isNotEmpty () Ġ&& Ġrich ness Ġ> Ġ 0 Ġ&& Ġmax Cycles Ġ> Ġ 0 Ġ&& Ġmax Cycles Ġ< ĠMAX _ SIZE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠisEmpty (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġused Ġ>= Ġmax Cycles ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpick Random ( random : ĠRandom ): ĠItem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . order Ġ= Ġrandom . next Double (). pow ( 1 . 0 f Ġ/ Ġentry . count . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġentries . min By OrNull Ġ{ Ġa Ġ-> Ġa . order Ġ} !!. item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠO re Entry ( val Ġitem : ĠItem , Ġval Ġcount : ĠInt , Ġvar Ġorder : ĠDouble Ġ= Ġ 0 . 0 ) ĊĊĠĠĠ Ġenum Ġclass ĠModifier ( val Ġitem : ĠItem ) Ġ{ ĊĠĠĠĠĠĠĠ ĠR ICH NESS ( IR Item Registry . EN RIC H ED _ NI K OL ITE _ D UST ()), ĊĠĠĠĠĠĠĠ ĠSPE ED ( Items . RED ST ONE ), ĊĠĠĠĠĠĠĠ ĠSIZE ( Items . ST ONE ), ĊĠĠĠĠĠĠĠ ĠR NG ( Items . EM ER AL D ); ĊĊĠĠĠĠĠĠĠ Ġval Ġtranslation Key Ġ= Ġ" item . ind rev . ore _ data _ card . modifier .${ name . lowercase () }" ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġis Modifier Item ( item : ĠItem ): ĠBoolean Ġ= Ġvalues (). any Ġ{ Ġit . item Ġ== Ġitem Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġby Item ( item : ĠItem ): ĠModifier ? Ġ= Ġvalues (). first OrNull Ġ{ Ġit . item Ġ== Ġitem Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }