ContinuationTask.java
net.minecraft.commands.execution.tasks.ContinuationTask
信息
- 全限定名:net.minecraft.commands.execution.tasks.ContinuationTask
- 类型:public class
- 包:net.minecraft.commands.execution.tasks
- 源码路径:src/main/java/net/minecraft/commands/execution/tasks/ContinuationTask.java
- 起始行号:L9
- 实现:EntryAction
- 职责:
TODO
字段/常量
-
taskFactory- 类型:
ContinuationTask.TaskProvider<T,P> - 修饰符:
private final - 源码定位:
L10 - 说明:
TODO
- 类型:
-
arguments- 类型:
List<P> - 修饰符:
private final - 源码定位:
L11 - 说明:
TODO
- 类型:
-
selfEntry- 类型:
CommandQueueEntry<T> - 修饰符:
private final - 源码定位:
L12 - 说明:
TODO
- 类型:
-
index- 类型:
int - 修饰符:
private - 源码定位:
L13 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.commands.execution.tasks.ContinuationTask.TaskProvider- 类型:
interface - 修饰符:
public - 源码定位:
L48 - 说明:
TODO
- 类型:
构造器
private ContinuationTask(ContinuationTask.TaskProvider<T,P> taskFactory, List<P> arguments, Frame frame) @ L15
- 构造器名:ContinuationTask
- 源码定位:L15
- 修饰符:private
参数:
- taskFactory: ContinuationTask.TaskProvider<T,P>
- arguments: List
- frame: Frame
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void execute(ExecutionContext<T> context, Frame frame) @ L21
- 方法名:execute
- 源码定位:L21
- 返回类型:void
- 修饰符:public
参数:
- context: ExecutionContext
- frame: Frame
说明:
TODO
public static <T,P> void schedule(ExecutionContext<T> context, Frame frame, List<P> arguments, ContinuationTask.TaskProvider<T,P> taskFactory) @ L30
- 方法名:schedule
- 源码定位:L30
- 返回类型:<T,P> void
- 修饰符:public static
参数:
- context: ExecutionContext
- frame: Frame
- arguments: List
- taskFactory: ContinuationTask.TaskProvider<T,P>
说明:
TODO
代码
public class ContinuationTask<T, P> implements EntryAction<T> {
private final ContinuationTask.TaskProvider<T, P> taskFactory;
private final List<P> arguments;
private final CommandQueueEntry<T> selfEntry;
private int index;
private ContinuationTask(ContinuationTask.TaskProvider<T, P> taskFactory, List<P> arguments, Frame frame) {
this.taskFactory = taskFactory;
this.arguments = arguments;
this.selfEntry = new CommandQueueEntry<>(frame, this);
}
@Override
public void execute(ExecutionContext<T> context, Frame frame) {
P argument = this.arguments.get(this.index);
context.queueNext(this.taskFactory.create(frame, argument));
if (++this.index < this.arguments.size()) {
context.queueNext(this.selfEntry);
}
}
public static <T, P> void schedule(ExecutionContext<T> context, Frame frame, List<P> arguments, ContinuationTask.TaskProvider<T, P> taskFactory) {
int argumentCount = arguments.size();
switch (argumentCount) {
case 0:
break;
case 1:
context.queueNext(taskFactory.create(frame, arguments.get(0)));
break;
case 2:
context.queueNext(taskFactory.create(frame, arguments.get(0)));
context.queueNext(taskFactory.create(frame, arguments.get(1)));
break;
default:
context.queueNext((new ContinuationTask<>(taskFactory, arguments, frame)).selfEntry);
}
}
@FunctionalInterface
public interface TaskProvider<T, P> {
CommandQueueEntry<T> create(Frame frame, P argument);
}
}引用的其他类
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: