49 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.world.item.component;
 | |
| 
 | |
| import com.mojang.serialization.Codec;
 | |
| import net.minecraft.network.RegistryFriendlyByteBuf;
 | |
| import net.minecraft.network.codec.StreamCodec;
 | |
| import net.minecraft.world.item.ItemStack;
 | |
| 
 | |
| public record UseRemainder(ItemStack convertInto) {
 | |
| 	public static final Codec<UseRemainder> CODEC = ItemStack.CODEC.xmap(UseRemainder::new, UseRemainder::convertInto);
 | |
| 	public static final StreamCodec<RegistryFriendlyByteBuf, UseRemainder> STREAM_CODEC = StreamCodec.composite(
 | |
| 		ItemStack.STREAM_CODEC, UseRemainder::convertInto, UseRemainder::new
 | |
| 	);
 | |
| 
 | |
| 	public ItemStack convertIntoRemainder(ItemStack stack, int count, boolean hasInfiniteMaterials, UseRemainder.OnExtraCreatedRemainder onExtraCreated) {
 | |
| 		if (hasInfiniteMaterials) {
 | |
| 			return stack;
 | |
| 		} else if (stack.getCount() >= count) {
 | |
| 			return stack;
 | |
| 		} else {
 | |
| 			ItemStack itemStack = this.convertInto.copy();
 | |
| 			if (stack.isEmpty()) {
 | |
| 				return itemStack;
 | |
| 			} else {
 | |
| 				onExtraCreated.apply(itemStack);
 | |
| 				return stack;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public boolean equals(Object object) {
 | |
| 		if (this == object) {
 | |
| 			return true;
 | |
| 		} else if (object != null && this.getClass() == object.getClass()) {
 | |
| 			UseRemainder useRemainder = (UseRemainder)object;
 | |
| 			return ItemStack.matches(this.convertInto, useRemainder.convertInto);
 | |
| 		} else {
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public int hashCode() {
 | |
| 		return ItemStack.hashItemAndComponents(this.convertInto);
 | |
| 	}
 | |
| 
 | |
| 	@FunctionalInterface
 | |
| 	public interface OnExtraCreatedRemainder {
 | |
| 		void apply(ItemStack itemStack);
 | |
| 	}
 | |
| }
 |