49 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.world.entity.schedule;
 | |
| 
 | |
| import com.google.common.collect.Lists;
 | |
| import java.util.List;
 | |
| import java.util.Set;
 | |
| import java.util.stream.Collectors;
 | |
| 
 | |
| public class ScheduleBuilder {
 | |
| 	private final Schedule schedule;
 | |
| 	private final List<ScheduleBuilder.ActivityTransition> transitions = Lists.<ScheduleBuilder.ActivityTransition>newArrayList();
 | |
| 
 | |
| 	public ScheduleBuilder(Schedule schedule) {
 | |
| 		this.schedule = schedule;
 | |
| 	}
 | |
| 
 | |
| 	public ScheduleBuilder changeActivityAt(int duration, Activity activity) {
 | |
| 		this.transitions.add(new ScheduleBuilder.ActivityTransition(duration, activity));
 | |
| 		return this;
 | |
| 	}
 | |
| 
 | |
| 	public Schedule build() {
 | |
| 		((Set)this.transitions.stream().map(ScheduleBuilder.ActivityTransition::getActivity).collect(Collectors.toSet()))
 | |
| 			.forEach(this.schedule::ensureTimelineExistsFor);
 | |
| 		this.transitions.forEach(activityTransition -> {
 | |
| 			Activity activity = activityTransition.getActivity();
 | |
| 			this.schedule.getAllTimelinesExceptFor(activity).forEach(timeline -> timeline.addKeyframe(activityTransition.getTime(), 0.0F));
 | |
| 			this.schedule.getTimelineFor(activity).addKeyframe(activityTransition.getTime(), 1.0F);
 | |
| 		});
 | |
| 		return this.schedule;
 | |
| 	}
 | |
| 
 | |
| 	static class ActivityTransition {
 | |
| 		private final int time;
 | |
| 		private final Activity activity;
 | |
| 
 | |
| 		public ActivityTransition(int time, Activity activity) {
 | |
| 			this.time = time;
 | |
| 			this.activity = activity;
 | |
| 		}
 | |
| 
 | |
| 		public int getTime() {
 | |
| 			return this.time;
 | |
| 		}
 | |
| 
 | |
| 		public Activity getActivity() {
 | |
| 			return this.activity;
 | |
| 		}
 | |
| 	}
 | |
| }
 |