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;
|
|
}
|
|
}
|
|
}
|