RecipeCraftedTrigger.java
net.minecraft.advancements.criterion.RecipeCraftedTrigger
信息
- 全限定名:net.minecraft.advancements.criterion.RecipeCraftedTrigger
- 类型:public class
- 包:net.minecraft.advancements.criterion
- 源码路径:src/main/java/net/minecraft/advancements/criterion/RecipeCraftedTrigger.java
- 起始行号:L16
- 继承:SimpleCriterionTrigger<RecipeCraftedTrigger.TriggerInstance>
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
net.minecraft.advancements.criterion.RecipeCraftedTrigger.TriggerInstance- 类型:
record - 修饰符:
public - 源码定位:
L26 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public Codec<RecipeCraftedTrigger.TriggerInstance> codec() @ L17
- 方法名:codec
- 源码定位:L17
- 返回类型:Codec<RecipeCraftedTrigger.TriggerInstance>
- 修饰符:public
参数:
- 无
说明:
TODO
public void trigger(ServerPlayer player, ResourceKey<Recipe<?>> id, List<ItemStack> usedIngredients) @ L22
- 方法名:trigger
- 源码定位:L22
- 返回类型:void
- 修饰符:public
参数:
- player: ServerPlayer
- id: ResourceKey<Recipe<?>>
- usedIngredients: List
说明:
TODO
代码
public class RecipeCraftedTrigger extends SimpleCriterionTrigger<RecipeCraftedTrigger.TriggerInstance> {
@Override
public Codec<RecipeCraftedTrigger.TriggerInstance> codec() {
return RecipeCraftedTrigger.TriggerInstance.CODEC;
}
public void trigger(ServerPlayer player, ResourceKey<Recipe<?>> id, List<ItemStack> usedIngredients) {
this.trigger(player, t -> t.matches(id, usedIngredients));
}
public record TriggerInstance(Optional<ContextAwarePredicate> player, ResourceKey<Recipe<?>> recipeId, List<ItemPredicate> ingredients)
implements SimpleCriterionTrigger.SimpleInstance {
public static final Codec<RecipeCraftedTrigger.TriggerInstance> CODEC = RecordCodecBuilder.create(
i -> i.group(
EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(RecipeCraftedTrigger.TriggerInstance::player),
Recipe.KEY_CODEC.fieldOf("recipe_id").forGetter(RecipeCraftedTrigger.TriggerInstance::recipeId),
ItemPredicate.CODEC.listOf().optionalFieldOf("ingredients", List.of()).forGetter(RecipeCraftedTrigger.TriggerInstance::ingredients)
)
.apply(i, RecipeCraftedTrigger.TriggerInstance::new)
);
public static Criterion<RecipeCraftedTrigger.TriggerInstance> craftedItem(ResourceKey<Recipe<?>> recipeId, List<ItemPredicate.Builder> predicates) {
return CriteriaTriggers.RECIPE_CRAFTED
.createCriterion(
new RecipeCraftedTrigger.TriggerInstance(Optional.empty(), recipeId, predicates.stream().map(ItemPredicate.Builder::build).toList())
);
}
public static Criterion<RecipeCraftedTrigger.TriggerInstance> craftedItem(ResourceKey<Recipe<?>> recipeId) {
return CriteriaTriggers.RECIPE_CRAFTED.createCriterion(new RecipeCraftedTrigger.TriggerInstance(Optional.empty(), recipeId, List.of()));
}
public static Criterion<RecipeCraftedTrigger.TriggerInstance> crafterCraftedItem(ResourceKey<Recipe<?>> recipeId) {
return CriteriaTriggers.CRAFTER_RECIPE_CRAFTED.createCriterion(new RecipeCraftedTrigger.TriggerInstance(Optional.empty(), recipeId, List.of()));
}
private boolean matches(ResourceKey<Recipe<?>> id, List<ItemStack> usedIngredients) {
if (id != this.recipeId) {
return false;
} else {
List<ItemStack> remaining = new ArrayList<>(usedIngredients);
for (ItemPredicate predicate : this.ingredients) {
boolean found = false;
Iterator<ItemStack> iterator = remaining.iterator();
while (iterator.hasNext()) {
if (predicate.test(iterator.next())) {
iterator.remove();
found = true;
break;
}
}
if (!found) {
return false;
}
}
return true;
}
}
}
}引用的其他类
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: