5
5
import net .minecraft .core .Direction ;
6
6
import net .minecraft .core .dispenser .DefaultDispenseItemBehavior ;
7
7
import net .minecraft .world .item .ItemStack ;
8
+ import net .minecraft .world .item .Items ;
8
9
import net .minecraft .world .level .block .Block ;
9
10
import net .minecraft .world .level .block .DispenserBlock ;
10
11
import net .minecraft .world .level .block .entity .BlockEntity ;
@@ -16,14 +17,22 @@ protected ItemStack execute(BlockSource source, ItemStack itemStack) {
16
17
Direction dispenserFacing = source .getBlockState ().getValue (DispenserBlock .FACING );
17
18
BlockPos blockPos = source .getPos ().relative (dispenserFacing );
18
19
BlockEntity tileEntity = source .getLevel ().getBlockEntity (blockPos );
19
- if (tileEntity instanceof RGBTileEntity ) {
20
- ((RGBTileEntity ) tileEntity ).setColor (itemStack .getTag ().getInt ("color" ));
20
+ if (tileEntity instanceof RGBTileEntity rgbTileEntity ) {
21
+ boolean broke = false ;
22
+ if (itemStack .getOrCreateTag ().getInt ("color" ) != rgbTileEntity .getColor ()) {
23
+ if (itemStack .getDamageValue () == itemStack .getMaxDamage () - 1 ) {
24
+ broke = true ;
25
+ } else {
26
+ itemStack .hurt (1 , source .getLevel ().random , null );
27
+ }
28
+ }
29
+ rgbTileEntity .setColor (itemStack .getOrCreateTag ().getInt ("color" ));
21
30
source .getLevel ()
22
31
.sendBlockUpdated (blockPos ,
23
32
tileEntity .getBlockState (),
24
33
tileEntity .getBlockState (),
25
34
Block .UPDATE_ALL_IMMEDIATE );
26
- return itemStack ;
35
+ return broke ? new ItemStack ( Items . BUCKET ) : itemStack ;
27
36
} else {
28
37
return super .execute (source , itemStack );
29
38
}
0 commit comments