下面列出了net.minecraft.util.DefaultedList#net.minecraft.recipe.RecipeType 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static <T extends Recipe<?>> RecipeType<T> registerType(String id) {
return Registry.register(Registry.RECIPE_TYPE, new Identifier(Constants.MOD_ID, id), new RecipeType<T>() {
public String toString() {
return id;
}
});
}
@Override
public List<Recipe<?>> getAllMatching(RecipeType type, Identifier output)
{
Map<Identifier, Recipe<?>> typeRecipes = recipes.get(type);
if (typeRecipes.containsKey(output)) return Collections.singletonList(typeRecipes.get(output));
return Lists.newArrayList(typeRecipes.values().stream().filter(
r -> Registry.ITEM.getId(r.getOutput().getItem()).equals(output)).collect(Collectors.toList()));
}
@Override
public RecipeType<?> getType() {
return GalacticraftRecipes.FABRICATION_TYPE;
}
@Override
public RecipeType<?> getType() {
return GalacticraftRecipes.SHAPED_COMPRESSING_TYPE;
}
@Override
public RecipeType<?> getType() {
return type;
}
@Override
public RecipeType<?> getType() {
return Type.INSTANCE;
}
@Inject(method = "dispense", at = @At("HEAD"), cancellable = true)
private void tryCraft(World world_1, BlockPos blockPos_1, CallbackInfo ci)
{
if (!CarpetExtraSettings.autoCraftingDropper) return;
BlockPos front = blockPos_1.offset(world_1.getBlockState(blockPos_1).get(DispenserBlock.FACING));
if (world_1.getBlockState(front).getBlock() != Blocks.CRAFTING_TABLE) return;
DispenserBlockEntity dispenserBlockEntity_1 = (DispenserBlockEntity) world_1.getBlockEntity(blockPos_1);
if (dispenserBlockEntity_1 == null) return;
CraftingInventory craftingInventory = new CraftingInventory(new VoidContainer(), 3, 3);
for (int i=0; i < 9; i++) craftingInventory.setInvStack(i, dispenserBlockEntity_1.getInvStack(i));
CraftingRecipe recipe = world_1.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, craftingInventory, world_1).orElse(null);
if (recipe == null) return;
// crafting it
Vec3d target = new Vec3d(front).add(0.5, 0.2, 0.5);
ItemStack result = recipe.craft(craftingInventory);
spawn(world_1, target.x, target.y, target.z, result);
// copied from CraftingResultSlot.onTakeItem()
DefaultedList<ItemStack> defaultedList_1 = world_1.getRecipeManager().getRemainingStacks(RecipeType.CRAFTING, craftingInventory, world_1);
for(int int_1 = 0; int_1 < defaultedList_1.size(); ++int_1) {
ItemStack itemStack_2 = dispenserBlockEntity_1.getInvStack(int_1);
ItemStack itemStack_3 = defaultedList_1.get(int_1);
if (!itemStack_2.isEmpty()) {
dispenserBlockEntity_1.takeInvStack(int_1, 1);
itemStack_2 = dispenserBlockEntity_1.getInvStack(int_1);
}
if (!itemStack_3.isEmpty()) {
if (itemStack_2.isEmpty()) {
dispenserBlockEntity_1.setInvStack(int_1, itemStack_3);
} else if (ItemStack.areItemsEqualIgnoreDamage(itemStack_2, itemStack_3) && ItemStack.areTagsEqual(itemStack_2, itemStack_3)) {
itemStack_3.increment(itemStack_2.getCount());
dispenserBlockEntity_1.setInvStack(int_1, itemStack_3);
} else {
spawn(world_1, target.x, target.y, target.z, itemStack_3);
}
}
}
Vec3d vec = new Vec3d(blockPos_1).add(0.5, 0.5, 0.5);
ServerWorld world = (ServerWorld) world_1;
world.playSound(null, blockPos_1, SoundEvents.ENTITY_VILLAGER_WORK_MASON, SoundCategory.BLOCKS, 0.2f, 2.0f);
ci.cancel();
}
List<Recipe<?>> getAllMatching(RecipeType type, Identifier output);