86 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.world.entity;
 | |
| 
 | |
| import java.util.function.Consumer;
 | |
| import java.util.function.Predicate;
 | |
| import java.util.function.Supplier;
 | |
| import net.minecraft.world.Container;
 | |
| import net.minecraft.world.item.ItemStack;
 | |
| 
 | |
| public interface SlotAccess {
 | |
| 	SlotAccess NULL = new SlotAccess() {
 | |
| 		@Override
 | |
| 		public ItemStack get() {
 | |
| 			return ItemStack.EMPTY;
 | |
| 		}
 | |
| 
 | |
| 		@Override
 | |
| 		public boolean set(ItemStack carried) {
 | |
| 			return false;
 | |
| 		}
 | |
| 	};
 | |
| 
 | |
| 	static SlotAccess of(Supplier<ItemStack> getter, Consumer<ItemStack> setter) {
 | |
| 		return new SlotAccess() {
 | |
| 			@Override
 | |
| 			public ItemStack get() {
 | |
| 				return (ItemStack)getter.get();
 | |
| 			}
 | |
| 
 | |
| 			@Override
 | |
| 			public boolean set(ItemStack carried) {
 | |
| 				setter.accept(carried);
 | |
| 				return true;
 | |
| 			}
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	static SlotAccess forContainer(Container inventory, int slot, Predicate<ItemStack> stackFilter) {
 | |
| 		return new SlotAccess() {
 | |
| 			@Override
 | |
| 			public ItemStack get() {
 | |
| 				return inventory.getItem(slot);
 | |
| 			}
 | |
| 
 | |
| 			@Override
 | |
| 			public boolean set(ItemStack carried) {
 | |
| 				if (!stackFilter.test(carried)) {
 | |
| 					return false;
 | |
| 				} else {
 | |
| 					inventory.setItem(slot, carried);
 | |
| 					return true;
 | |
| 				}
 | |
| 			}
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	static SlotAccess forContainer(Container inventory, int slot) {
 | |
| 		return forContainer(inventory, slot, itemStack -> true);
 | |
| 	}
 | |
| 
 | |
| 	static SlotAccess forEquipmentSlot(LivingEntity entity, EquipmentSlot slot, Predicate<ItemStack> stackFilter) {
 | |
| 		return new SlotAccess() {
 | |
| 			@Override
 | |
| 			public ItemStack get() {
 | |
| 				return entity.getItemBySlot(slot);
 | |
| 			}
 | |
| 
 | |
| 			@Override
 | |
| 			public boolean set(ItemStack carried) {
 | |
| 				if (!stackFilter.test(carried)) {
 | |
| 					return false;
 | |
| 				} else {
 | |
| 					entity.setItemSlot(slot, carried);
 | |
| 					return true;
 | |
| 				}
 | |
| 			}
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	static SlotAccess forEquipmentSlot(LivingEntity entity, EquipmentSlot slot) {
 | |
| 		return forEquipmentSlot(entity, slot, itemStack -> true);
 | |
| 	}
 | |
| 
 | |
| 	ItemStack get();
 | |
| 
 | |
| 	boolean set(ItemStack carried);
 | |
| }
 |