package Ġnet . s ore non . images . content Ċ Ċ import Ġdev . ony x stud ios . cca . api . v 3 . block . Block Components Ċ import Ġio . netty . buffer . Un p ooled Ċ import Ġnet . fabric mc . fabric . api . network . Server Side Packet Registry Ċ import Ġnet . fabric mc . fabric . api . server . Player Stream Ċ import Ġnet . fabric mc . fabric . api . util . N bt Type Ċ import Ġnet . minecraft . client . item . Tooltip Context Ċ import Ġnet . minecraft . entity . Equipment Slot Ċ import Ġnet . minecraft . entity . Living Entity Ċ import Ġnet . minecraft . entity . player . Player Entity Ċ import Ġnet . minecraft . item . A xe Item Ċ import Ġnet . minecraft . item . ItemStack Ċ import Ġnet . minecraft . item . Item Usage Context Ċ import Ġnet . minecraft . item . Tool Materials Ċ import Ġnet . minecraft . nbt . Compound Tag Ċ import Ġnet . minecraft . nbt . N bt Helper Ċ import Ġnet . minecraft . network . MessageType Ċ import Ġnet . minecraft . network . Packet Byte Buf Ċ import Ġnet . minecraft . network . packet . s 2 c . play . Game Message S 2 CP acket Ċ import Ġnet . minecraft . server . network . Server Player Entity Ċ import Ġnet . minecraft . server . world . Server World Ċ import Ġnet . minecraft . text . Literal Text Ċ import Ġnet . minecraft . text . Text Ċ import Ġnet . minecraft . text . Trans latable Text Ċ import Ġnet . minecraft . util .* Ċ import Ġnet . minecraft . util . hit . Block Hit Result Ċ import Ġnet . minecraft . util . hit . Hit Result Ċ import Ġnet . minecraft . util . math . Block Pos Ċ import Ġnet . minecraft . util . math . Direction Ċ import Ġnet . minecraft . world . Ray cast Context Ċ import Ġnet . minecraft . world . World Ċ import Ġnet . s ore non . images . api . Print Ċ import Ġnet . s ore non . images . init . Images Components Ċ import Ġnet . s ore non . images . init . Images Mod Ċ import Ġnet . s ore non . images . init . Images Mod . Companion . S 2 C _ PRINT _ BO OM Ċ import Ġjava . io . Closeable Ċ import Ġjava . net . Malformed URLException Ċ import Ġjava . net . URL Ċ import Ġjava . util .* Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ class ĠPrint A xe ( settings : ĠSettings ) Ġ: ĠA xe Item ( Tool Materials . IRON , Ġ 5 . 0 f , Ġ- 3 . 0 f , Ġsettings ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . max Damage Ġ= Ġ 1 5 6 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġappend Tooltip ( ĊĠĠĠĠĠĠĠ Ġstack : ĠItemStack , ĊĠĠĠĠĠĠĠ Ġworld : ĠWorld ?, ĊĠĠĠĠĠĠĠ Ġtooltip : ĠMutable List < Text >, ĊĠĠĠĠĠĠĠ Ġcontext : ĠTooltip Context ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtooltip . add ( Trans latable Text (" images . print axe . description "). formatted ( Formatting . GRAY )) ĊĠĠĠĠĠĠĠ ĠItem Instance ( stack ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstr Ġ= Ġit . url !!. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str . length Ġ> Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr Ġ= Ġstr . substring ( 0 , Ġ 2 4 ). plus (' âĢ¦ ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtooltip . add ( Literal Text ( str ). formatted ( Formatting . GREEN )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Hit ( stack : ĠItemStack , Ġtarget : ĠL iving Entity , Ġattacker : ĠL iving Entity ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠPacket Byte Buf ( Un p ooled . buffer ()) ĊĠĠĠĠĠĠĠ Ġdata . writeInt ( target . entityId ) ĊĊĠĠĠĠĠĠĠ ĠPlayer Stream . watch ing ( target ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠServer Side Packet Registry . INSTANCE . send To Player ( it , ĠS 2 C _ PRINT _ BO OM , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstack . damage < Living Entity >( 2 , Ġattacker ) Ġ{ Ġe : ĠL iving Entity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . send Equipment Break Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE quipment Slot . MAIN HAND ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . post Hit ( stack , Ġtarget , Ġattacker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Use Action ( stack : ĠItemStack ?): ĠUse Action ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠUse Action . BLOCK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetMax Use Time ( stack : ĠItemStack ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġuse On Block ( context : ĠItem Usage Context ): ĠActionResult Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworld Ġ= Ġcontext . world ĊĠĠĠĠĠĠĠ Ġval Ġplace Pos Ġ= Ġcontext . block Pos ĊĠĠĠĠĠĠĠ Ġval Ġblock State Ġ= Ġworld . getBlock State ( place Pos ) ĊĠĠĠĠĠĠĠ Ġval Ġplayer Ġ= Ġcontext . player Ġ?: Ġreturn ĠActionResult . PASS ĊĠĠĠĠĠĠĠ Ġval Ġis S ne aking Ġ= Ġplayer . is S ne aking ĊĊĠĠĠĠĠĠĠ Ġif Ġ( block State . block Ġ== ĠImages Mod . PI CTURE _ FRAME _ BLOCK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Instance ( context . stack ). use Ġ{ Ġdata : ĠItem Instance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is S ne aking ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( world . is Client ) Ġreturn ĠActionResult . SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġdata . url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( url Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen GUI ( player , Ġcontext . hand , Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . start Ġ= Ġcontext . block Pos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . side Ġ= Ġcontext . side ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠActionResult . success ( world . is Client ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġdata . start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . start Ġ= Ġcontext . block Pos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . side Ġ= Ġcontext . side ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . start Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġside Ġ= Ġdata . side ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( side . axis . choose ( start . x , Ġstart . y , Ġstart . z ) Ġ!= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside . axis . choose ( place Pos . x , Ġplace Pos . y , Ġplace Pos . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġreturn ĠActionResult . FAIL Ġ// Check Ġif Ġstart Ġand Ġend Ġare Ġon Ġthe Ġsame Ġplane ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlockPos ( max ( place Pos . x , Ġstart . x ), Ġmax ( place Pos . y , Ġstart . y ), Ġmax ( place Pos . z , Ġstart . z )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlockPos ( min ( place Pos . x , Ġstart . x ), Ġmin ( place Pos . y , Ġstart . y ), Ġmin ( place Pos . z , Ġstart . z )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscan Ġ= ĠBlockPos . Mutable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprop Ġ= ĠImage Block . F ACING _ PROPERTIES [ side ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġmin . x .. max . x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġmin . y .. max . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( z Ġin Ġmin . z .. max . z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan . set ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġworld . getBlock State ( scan ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . block Ġ!= ĠImages Mod . PI CTURE _ FRAME _ BLOCK Ġ|| Ġ! state . get ( prop )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠActionResult . FAIL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaster Pos Ġ= ĠBlockPos ( min . x , Ġmin . y , Ġmin . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Make Ġsl aves ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġmin . x .. max . x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġmin . y .. max . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( z Ġin Ġmin . z .. max . z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan . set ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Entity Ġ= Ġworld . getBlock Entity ( scan ) Ġas ĠPicture Frame Block Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Entity . set Face ( side , ĠPicture Frame Block Entity . Face . Slave ( master Pos , Ġid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Entity . mark Dirty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Entity . sync () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Make Ġmaster ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaster Block Entity Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġworld . getBlock Entity ( scan . set ( min . x , Ġmin . y , Ġmin . z )) Ġas ĠPicture Frame Block Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxy Range Ġ= ĠgetImage Size ( max . x Ġ- Ġmin . x , Ġmax . y Ġ- Ġmin . y , Ġmax . z Ġ- Ġmin . z , Ġside , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= Ġwhen Ġ( side ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . DOWN Ġ-> Ġcontext . player Facing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . UP Ġ-> Ġcontext . player Facing . op pos ite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprint Ġ= ĠPrint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint . url Ġ= Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint . player Ġ= Ġplayer . uuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster Block Entity . set Face ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPicture Frame Block Entity . Face . Master ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxy Range . right Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxy Range . left Ġ+ Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster Block Entity . mark Dirty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaster Block Entity . sync () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠActionResult . SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Entity Ġ= Ġworld . getBlock Entity ( place Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block Entity Ġis ĠPicture Frame Block Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaster BE Ġ= Ġblock Entity . get Master ( context . side ) Ġ?: Ġreturn ĠActionResult . PASS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmaster Face Ġ= Ġmaster BE . faces [ context . side ] Ġas ĠPicture Frame Block Entity . Face . Master ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcopy Print ( master Face . print , Ġplayer , Ġdata , Ġworld ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Entity Ġ= Ġworld . getBlock Entity ( place Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( block Entity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= ĠBlock Components . get ( Images Components . PRINT ABLE , Ġblock Entity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( component Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Instance ( context . stack ). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is S ne aking ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprint Ġ= Ġcomponent . print ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( world Ġis ĠServer World ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint . url Ġ= Ġit . url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint . player Ġ= Ġcontext . player ?. uuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent . print Ġ= Ġprint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠActionResult . success ( world . is Client ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcopy Print ( component . print , Ġplayer , Ġit , Ġworld ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . use On Block ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy Print ( print : ĠPrint , Ġplayer : ĠPlayer Entity , Ġit : ĠItem Instance , Ġworld : ĠWorld ): ĠActionResult Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( print . url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( player Ġis ĠServer Player Entity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . url Ġ= Ġprint . url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprinter Ġ= Ġprint . player ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( printer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprinter Entity Ġ= Ġworld . getPlayer By Uuid ( printer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( printer Entity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . network Handler . send Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame Message S 2 CP acket ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrans latable Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" images . copied _ image _ player ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprinter Entity . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠMessageType . CHAT , ĠUtil . NIL _ UUID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . network Handler . send Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame Message S 2 CP acket ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrans latable Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" images . copied _ image _ player ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprinter . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠMessageType . CHAT , ĠUtil . NIL _ UUID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . network Handler . send Packet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame Message S 2 CP acket ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrans latable Text (" images . copied _ image "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessageType . CHAT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . NIL _ UUID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠActionResult . SUCCESS ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠActionResult . PASS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġused Ġfor Ġdecor ating Ġwall paper , Ġa Ġcanceled Ġfeature Ġthat ĠI Ġspent ĠWAY Ġtoo Ġmuch Ġtime Ġon ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġuse ( world : ĠWorld , Ġplayer : ĠPlayer Entity , Ġhand : ĠHand ): ĠTyped ActionResult < ItemStack > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Stack Ġ= Ġplayer . get Stack In Hand ( hand ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( player . is S ne aking ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! world . is Client ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Instance ( item Stack ). use Ġ{ Ġdata : ĠItem Instance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen GUI ( player , Ġhand , Ġdata ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTyped ActionResult . consume ( item Stack ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! world . is Client ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrace Ġ= Ġget Selected Wall paper ( player ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trace Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Instance ( item Stack ). use Ġ{ Ġdata : ĠItem Instance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . start Ġ= Ġtrace . block Pos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . side Ġ= Ġtrace . side ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . facing Ġ= Ġplayer . horizontal Facing . op pos ite ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Entity Ġ= Ġworld . getBlock Entity ( data . start ) Ġas ĠWall paper Block Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . url Ġ= Ġblock Entity . get Or Make Face ( data . side ). url ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . setCurrent Hand ( hand ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTyped ActionResult . consume ( item Stack ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠTyped ActionResult . pass ( item Stack ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen GUI ( player : ĠPlayer Entity , Ġhand : ĠHand , Ġdata : ĠItem Instance ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . clear () ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠPacket Byte Buf ( Un p ooled . buffer ()) ĊĠĠĠĠĠĠĠ Ġbuf . writeString ( data . url ?. toString () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ ĠServer Side Packet Registry . INSTANCE . send To Player ( player , ĠImages Mod . S 2 C _ OPEN _ SCREEN , Ġbuf ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġused Ġfor Ġdecor ating Ġwall paper , Ġa Ġcanceled Ġfeature Ġthat ĠI Ġspent ĠWAY Ġtoo Ġmuch Ġtime Ġon ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġusage Tick ( world : ĠWorld , Ġuser : ĠL iving Entity , Ġstack : ĠItemStack , Ġremaining Use Ticks : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( world . is Client Ġ|| Ġuser Ġ! is ĠPlayer Entity ) Ġreturn ĊĠĠĠĠĠĠĠ Ġ// :( ĊĠĠĠĠĠĠĠ ĠItem Instance ( stack ). use Ġ{ Ġdata : ĠItem Instance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġdata . start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= Ġdata . url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfacing Ġ= Ġdata . facing ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrace Ġ= Ġget Selected Wall paper ( user ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trace Ġ== Ġnull Ġ|| Ġtrace . block Pos Ġ== Ġdata . last End ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Pos Ġ= Ġtrace . block Pos ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġside Ġ= Ġdata . side ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( side . axis . choose ( start . x , Ġstart . y , Ġstart . z ) Ġ!= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġside . axis . choose ( place Pos . x , Ġplace Pos . y , Ġplace Pos . z ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . last End Ġ= Ġplace Pos ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscan Ġ= ĠBlockPos . Mutable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlockPos ( max ( place Pos . x , Ġstart . x ), Ġmax ( place Pos . y , Ġstart . y ), Ġmax ( place Pos . z , Ġstart . z )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBlockPos ( min ( place Pos . x , Ġstart . x ), Ġmin ( place Pos . y , Ġstart . y ), Ġmin ( place Pos . z , Ġstart . z )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxy Range Ġ= ĠgetImage Size ( max . x Ġ- Ġmin . x , Ġmax . y Ġ- Ġmin . y , Ġmax . z Ġ- Ġmin . z , Ġside , Ġfacing . axis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Range Ġ= Ġxy Range . left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Range Ġ= Ġxy Range . right ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġside Property Ġ= ĠImage Block . F ACING _ PROPERTIES [ side ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġmin . x .. max . x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġmin . y .. max . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( z Ġin Ġmin . z .. max . z ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan . set ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġworld . getBlock State ( scan ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . block Ġis ĠImage Block Ġ&& Ġstate . get ( side Property )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock Entity Ġ= Ġworld . getBlock Entity ( scan ) Ġas ĠWall paper Block Entity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġblock Entity . get Or Make Face ( side ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entity . url Ġ== Ġnull Ġ|| Ġentity . url Ġ== Ġtexture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . x Size Ġ= Ġx Range Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . y Size Ġ= Ġy Range Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . url Ġ= Ġtexture ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġu Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġv Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( side . axis !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . X Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Ġ= Ġ-( z Ġ- Ġmax . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġ-( y Ġ- Ġmax . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . Z Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Ġ= Ġ-( x Ġ- Ġmax . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġ-( y Ġ- Ġmax . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . Y Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . rotation Ġ= Ġfacing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( facing . axis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . X Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Ġ= Ġ-( z Ġ- Ġmax . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġy Range Ġ+ Ġ( x Ġ- Ġmax . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . Z Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Ġ= Ġ-( x Ġ- Ġmax . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġ-( z Ġ- Ġmax . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( facing Ġ== ĠDirection . WEST Ġ|| Ġfacing Ġ== ĠDirection . SO UTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Ġ= Ġx Range Ġ- Ġu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Ġ= Ġy Range Ġ- Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( side Ġ== ĠDirection . WEST Ġ|| Ġside Ġ== ĠDirection . SO UTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġu Ġ= Ġx Range Ġ- Ġu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . u Start Ġ= Ġu ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . v Start Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Entity . mark Dirty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Entity . sync () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetImage Size ( dx : ĠInt , Ġdy : ĠInt , Ġdz : ĠInt , Ġside : ĠDirection , Ġfacing Axis : ĠDirection . Axis ?): ĠPair < Int , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġx Range Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġy Range Ġ= Ġdy ĊĠĠĠĠĠĠĠ Ġwhen Ġ( side . axis !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . X Ġ-> Ġx Range Ġ= Ġdz ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . Z Ġ-> Ġx Range Ġ= Ġdx ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . Y Ġ-> Ġwhen Ġ( facing Axis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . Z Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Range Ġ= Ġdz ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Range Ġ= Ġdx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Axis . X Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Range Ġ= Ġdx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Range Ġ= Ġdz ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Range Ġ= Ġdx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Range Ġ= Ġdz ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( x Range , Ġy Range ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stopped Using ( stack : ĠItemStack , Ġworld : ĠWorld , Ġuser : ĠL iving Entity , Ġremaining Use Ticks : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠItem Instance ( stack ) ĊĠĠĠĠĠĠĠ Ġdata . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . start Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . last End Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Selected Wall paper ( user : ĠPlayer Entity ): ĠBlock Hit Result ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrace Ġ= Ġray cast ( user . world , Ġuser , ĠRay cast Context . Fluid Handling . NONE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( trace . type Ġ== ĠHit Result . Type . BLOCK Ġ&& Ġuser . world . getBlock State ( trace . block Pos ). block Ġ== ĠImages Mod . WALL P AP ER _ BLOCK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrace ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠItem Instance ( private Ġval Ġstack : ĠItemStack ) Ġ: ĠClose able Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstart : ĠBlockPos ? ĊĠĠĠĠĠĠĠ Ġvar Ġlast End : ĠBlockPos ? ĊĠĠĠĠĠĠĠ Ġvar Ġside : ĠDirection ĊĠĠĠĠĠĠĠ Ġvar Ġfacing : ĠDirection ĊĠĠĠĠĠĠĠ Ġvar Ġurl : ĠURL ? ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġstack . or Create Tag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġget BP (" start ", Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast End Ġ= Ġget BP (" last End ", Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġside Ġ= ĠDirection . by Id ( tag . getInt (" side ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfacing Ġ= ĠDirection . by Id ( tag . getInt (" facing ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL ( tag . getString (" url ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠMal formed URLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget BP ( name : ĠString , Ġtag : ĠCompound Tag ): ĠBlockPos ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag . contains ( name , ĠNbt Type . COMP O UND )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠNbt Helper . to Block Pos ( tag . get Compound ( name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast End Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġstack . or Create Tag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Ġ!= Ġnull ) Ġtag . put (" start ", ĠNbt Helper . from Block Pos ( start )) Ġelse Ġtag . remove (" start ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last End Ġ!= Ġnull ) Ġtag . put (" last End ", ĠNbt Helper . from Block Pos ( last End )) Ġelse Ġtag . remove (" last End ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag . putString (" url ", Ġurl ?. toString () Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag . put Int (" side ", Ġside . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag . put Int (" facing ", Ġfacing . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack . tag Ġ= Ġtag ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }