41 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.world.entity.monster.piglin;
 | |
| 
 | |
| import java.util.Optional;
 | |
| import net.minecraft.world.entity.LivingEntity;
 | |
| import net.minecraft.world.entity.ai.behavior.BehaviorControl;
 | |
| import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder;
 | |
| import net.minecraft.world.entity.ai.memory.MemoryModuleType;
 | |
| 
 | |
| public class StopAdmiringIfTiredOfTryingToReachItem {
 | |
| 	public static BehaviorControl<LivingEntity> create(int maxTimeToReachItem, int disableDuration) {
 | |
| 		return BehaviorBuilder.create(
 | |
| 			instance -> instance.group(
 | |
| 					instance.present(MemoryModuleType.ADMIRING_ITEM),
 | |
| 					instance.present(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM),
 | |
| 					instance.registered(MemoryModuleType.TIME_TRYING_TO_REACH_ADMIRE_ITEM),
 | |
| 					instance.registered(MemoryModuleType.DISABLE_WALK_TO_ADMIRE_ITEM)
 | |
| 				)
 | |
| 				.apply(instance, (memoryAccessor, memoryAccessor2, memoryAccessor3, memoryAccessor4) -> (serverLevel, livingEntity, l) -> {
 | |
| 					if (!livingEntity.getOffhandItem().isEmpty()) {
 | |
| 						return false;
 | |
| 					} else {
 | |
| 						Optional<Integer> optional = instance.tryGet(memoryAccessor3);
 | |
| 						if (optional.isEmpty()) {
 | |
| 							memoryAccessor3.set(0);
 | |
| 						} else {
 | |
| 							int k = (Integer)optional.get();
 | |
| 							if (k > maxTimeToReachItem) {
 | |
| 								memoryAccessor.erase();
 | |
| 								memoryAccessor3.erase();
 | |
| 								memoryAccessor4.setWithExpiry(true, disableDuration);
 | |
| 							} else {
 | |
| 								memoryAccessor3.set(k + 1);
 | |
| 							}
 | |
| 						}
 | |
| 
 | |
| 						return true;
 | |
| 					}
 | |
| 				})
 | |
| 		);
 | |
| 	}
 | |
| }
 |