@ file : Jvm Name (" Inventory Extensions ") Ċ Ċ package Ġde . mine form ers . van ill aim m ersion . util Ċ Ċ import Ġcom . google . common . base . Objects Ċ import Ġnet . minecraft . entity . Entity Ċ import Ġnet . minecraft . entity . item . Entity Item Ċ import Ġnet . minecraft . entity . player . Entity Player Ċ import Ġnet . minecraft . init . Sound Events Ċ import Ġnet . minecraft . inventory . Inventory Helper Ċ import Ġnet . minecraft . item . ItemStack Ċ import Ġnet . minecraft . util . Enum Facing Ċ import Ġnet . minecraft . util . Sound Category Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġnet . minecraft . util . math . Vec 3 d Ċ import Ġnet . minecraft . world . World Ċ import Ġnet . minecraftforge . items . I Item Handler Ċ import Ġnet . minecraftforge . items . I Item Handler Mod ifiable Ċ Ċ val ĠItemStack . non Empty ĊĠĠĠ Ġget () Ġ= Ġ! isEmpty Ċ Ċ fun ĠI Item Handler . extract ( var arg Ġslots : ĠPair < Int , ĠInt >): ĠItemStack Ġ{ ĊĠĠĠ Ġfor Ġ(( slot , Ġamount ) Ġin Ġslots ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextracted Ġ= Ġthis . extract Item ( slot , Ġamount , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( extract ed . non Empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġextracted ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠItemStack . EMPTY Ċ } Ċ Ċ /** Ċ Ġ* ĠSp ills Ġthe Ġcontents Ġof Ġthe Ġ[ I Item Handler ] Ġonto Ġthe Ġground . Ċ Ġ* Ċ Ġ* Ġ@ param Ġslots Ġthe Ġslots Ġto Ġsp ill , Ġmay Ġbe Ġnull Ġif Ġall Ġslots Ġare Ġto Ġbe Ġsp illed Ċ Ġ*/ Ċ fun ĠI Item Handler . sp ill ( world : ĠWorld , Ġpos : ĠBlockPos , Ġslots : ĠIterable < Int >? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġthis . sp ill ( world , ĠVec 3 d ( pos ), Ġslots ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSp ills Ġthe Ġcontents Ġof Ġthe Ġ[ I Item Handler ] Ġonto Ġthe Ġground Ġat Ġan Ġentity 's Ġfeet . Ċ Ġ* Ċ Ġ* Ġ@ param Ġslots Ġthe Ġslots Ġto Ġsp ill , Ġmay Ġbe Ġnull Ġif Ġall Ġslots Ġare Ġto Ġbe Ġsp illed Ċ Ġ*/ Ċ fun ĠI Item Handler . sp ill ( entity : ĠEntity , Ġslots : ĠIterable < Int >? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġthis . sp ill ( entity . world , Ġentity . position , Ġslots ) Ċ } Ċ Ċ /** Ċ Ġ* ĠSp ills Ġthe Ġcontents Ġof Ġthe Ġ[ I Item Handler ] Ġonto Ġthe Ġground . Ċ Ġ* Ċ Ġ* Ġ@ param Ġslots Ġthe Ġslots Ġto Ġsp ill , Ġmay Ġbe Ġnull Ġif Ġall Ġslots Ġare Ġto Ġbe Ġsp illed Ċ Ġ*/ Ċ fun ĠI Item Handler . sp ill ( world : ĠWorld , Ġpos : ĠVec 3 d , Ġslots : ĠIterable < Int >? Ġ= Ġnull ) Ġ{ ĊĠĠĠ Ġval Ġindices Ġ= Ġslots Ġ?: Ġ 0 .. this . slots Ġ- Ġ 1 ĊĠĠĠ Ġfor Ġ( i Ġin Ġindices ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstack Ġ= Ġthis . get Stack In Slot ( i ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! stack . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInventory Helper . spawn ItemStack ( world , Ġpos . x , Ġpos . y , Ġpos . z , Ġstack ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDrop Ġan Ġitem Ġstack Ġin Ġa Ġcertain Ġdirection Ġfrom Ġa Ġblock . Ċ Ġ* ĠThe Ġentity Ġwill Ġspawn Ġin Ġthe Ġmiddle Ġof Ġthe Ġspecified Ġface Ġand Ġwill Ġmove Ġaway Ġfrom Ġit . Ċ Ġ*/ Ċ fun ĠWorld . spawn ( pos : ĠBlockPos , Ġside : ĠEnum Facing , Ġstack : ĠItemStack ) Ġ{ ĊĠĠĠ Ġif Ġ( stack . isEmpty Ġ|| Ġthis . is Remote ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġval Ġoffset Ġ= ĠVec 3 d ( 0 . 5 , Ġ 0 . 5 , Ġ 0 . 5 ) Ġ+ Ġ 0 . 5 Ġ* ĠVec 3 d ( side . direction Vec ) Ġ+ Ġpos ĊĠĠĠ Ġval Ġentity Ġ= ĠEntity Item ( this , Ġoffset . x , Ġoffset . y , Ġoffset . z , Ġstack ) ĊĠĠĠ Ġ// ĠAdd Ġsome Ġrandom Ġmotion Ġaway Ġfrom Ġthe Ġblock 's Ġface ĊĠĠĠ Ġentity . motion X Ġ= Ġthis . rand . next Gaussian () Ġ* Ġ 0 . 0 5 Ġ+ Ġ 0 . 0 5 Ġ* Ġside . front Offset X ĊĠĠĠ Ġentity . motion Y Ġ= Ġthis . rand . next Gaussian () Ġ* Ġ 0 . 0 5 Ġ+ Ġ 0 . 0 5 Ġ* Ġside . front Offset Y ĊĠĠĠ Ġentity . motion Z Ġ= Ġthis . rand . next Gaussian () Ġ* Ġ 0 . 0 5 Ġ+ Ġ 0 . 0 5 Ġ* Ġside . front Offset Z ĊĠĠĠ Ġthis . spawn Entity ( entity ) ĊĠĠĠ Ġ// ĠPlay Ġthe Ġdrop Ġsound ĊĠĠĠ Ġthis . play Sound ( null , Ġoffset . x , Ġoffset . y , Ġoffset . z , ĠSound Events . ENTITY _ ITEM _ P ICK UP , ĠSound Category . BLOCKS , Ġ 0 . 2 f , ĊĠĠĠĠĠĠĠ Ġ(( this . rand . next Float () Ġ- Ġthis . rand . next Float ()) Ġ* Ġ 0 . 7 f Ġ+ Ġ 1 . 0 f ) Ġ* Ġ 2 . 0 f ) Ċ } Ċ Ċ /** Ċ Ġ* ĠComp let ely Ġclears Ġout Ġall Ġslots Ġof Ġan Ġ[ inventory ], Ġi . e . Ġsetting Ġthem Ġto Ġ` null `. Ċ Ġ*/ Ċ fun ĠI Item Handler Mod ifiable . clear () Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( this . slots Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġthis . set Stack In Slot ( i , ĠItemStack . EMPTY ) Ċ } Ċ Ċ /** Ċ Ġ* ĠInsert Ġan Ġitem Ġstack Ġinto Ġa Ġplayer 's Ġinventory Ġor Ġdrop Ġit Ġto Ġthe Ġground Ġif Ġthere Ġis Ġno Ġspace Ġleft . Ċ Ġ*/ Ċ fun ĠEntity Player . insert Or Drop ( stack : ĠItemStack ) Ġ{ ĊĠĠĠ Ġif Ġ( stack . isEmpty ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġif Ġ(! this . inventory . addItem Stack To Inventory ( stack )) ĊĠĠĠĠĠĠĠ ĠInventory Helper . spawn ItemStack ( this . world , Ġthis . pos X , Ġthis . pos Y , Ġthis . pos Z , Ġstack ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġthis . world . play Sound ( null , Ġthis . pos X , Ġthis . pos Y , Ġthis . pos Z , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSound Events . ENTITY _ ITEM _ P ICK UP , ĠSound Category . PLAY ERS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. 2 f , Ġ(( this . rng . next Float () Ġ- Ġthis . rng . next Float ()) Ġ* Ġ. 7 f Ġ+ Ġ 1 f ) Ġ* Ġ 2 f ) Ċ } Ċ Ċ /** Ċ Ġ* ĠChecks Ġwhether Ġto Ġitem Ġstacks Ġare Ġto Ġbe Ġconsidered Ġequal Ġin Ġregards Ġto Ġtheir Ċ Ġ* Ġ< ul > Ċ Ġ* ĠĠĠĠ Ġ< li > Item </ li > Ċ Ġ* ĠĠĠĠ Ġ< li > Metadata </ li > Ċ Ġ* ĠĠĠĠ Ġ< li > NBT ĠTag ĠCompound </ li > Ċ Ġ* Ġ</ ul > Ċ Ġ*/ Ċ fun ĠItemStack . equal ( b : ĠItemStack ) Ġ= Ġthis Ġ== Ġb Ġ|| Ġequals Impl ( this , Ġb ) Ċ Ċ private Ġfun Ġequals Impl ( a : ĠItemStack , Ġb : ĠItemStack ) Ġ= ĊĠĠĠ Ġa . item Ġ=== Ġb . item Ġ&& Ġa . metadata Ġ== Ġb . metadata ĊĠĠĠĠĠĠĠ Ġ&& ĠObjects . equal ( a . tag Compound , Ġb . tag Compound ) Ċ Ċ /** Ċ Ġ* ĠT ries Ġto Ġmerge Ġan Ġitem Ġstack Ġinto Ġanother Ġone Ġif Ġthey Ġare Ġequal . Ċ Ġ* ĠNote Ġthat Ġthis Ġfunction Ġwill Ġmutate Ġthe Ġpassed Ġstacks , Ċ Ġ* Ġmeaning Ġthat Ġmodifying Ġthe Ġstacks ' Ġsizes Ġafterwards Ġis Ġ* not * Ġnecessary . Ċ Ġ* Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġmerging Ġboth Ġitem Ġstacks Ċ Ġ*/ Ċ fun ĠItemStack . merge ( into : ĠItemStack ) Ġ= Ġthis . merge ( into , Ġfalse ) Ċ Ċ /** Ċ Ġ* ĠT ries Ġto Ġmerge Ġan Ġitem Ġstack Ġinto Ġanother Ġone . Ċ Ġ* ĠNote Ġthat Ġthis Ġfunction Ġwill Ġmutate Ġthe Ġpassed Ġstacks , Ċ Ġ* Ġmeaning Ġthat Ġmodifying Ġthe Ġstacks ' Ġsizes Ġafterwards Ġis Ġ* not * Ġnecessary . Ċ Ġ* Ċ Ġ* Ġ@ param Ġforce Ġif Ġtrue , Ġthe Ġmerging Ġwill Ġbe Ġperformed Ġeven Ġif Ġthe Ġstacks Ġare Ġnot Ġequal Ċ Ġ* Ġ@ return Ġthe Ġresult Ġof Ġmerging Ġboth Ġitem Ġstacks Ċ Ġ*/ Ċ fun ĠItemStack . merge ( into : ĠItemStack , Ġforce : ĠBoolean ): ĠItemStack Ġ{ ĊĠĠĠ Ġif Ġ( this . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinto ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( into . isEmpty ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġthis . copy () ĊĠĠĠĠĠĠĠ Ġthis . count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( force Ġ|| Ġequals Impl ( this , Ġinto )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransfer Count Ġ= ĠMath . min ( into . max Stack Size Ġ- Ġinto . count , Ġthis . count ) ĊĠĠĠĠĠĠĠ Ġthis . count Ġ-= Ġtransfer Count ĊĠĠĠĠĠĠĠ Ġinto . count Ġ+= Ġtransfer Count ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġinto Ċ }