# 基础写法-配方添加

在这一章会教会大家如何去魔改基础配方，比如工作台、熔炉等,如需请点=>[配方合成进阶](https://github.com/Gu-meng/kubejs-course/blob/main/KubeJSAdvanced/AdvancedRecipe/README.md)

## 工作台

首先工作台有有序合成、无序合成,在kjs里同样支持简易写法和json写法，这个可以根据个人需求喜好进行选择

### 有序合成

#### json写法

首先先来看看json写法是如何写的

```js
ServerEvents.recipes(event => {
    event.shaped("3x minecraft:stone", [
		'DDD',
		'   ',
		'W W'
	], {
		D: 'minecraft:diamond',
		W: 'minecraft:white_wool'
    });
});
```

在上面代码中，第一个参数是输出物品和输出物品个数，这里是用的字符串形式表示，当然你要是不喜欢这么写，也可以使用`Item.of(物品id,输出个数)`这样来写

第二个参数是一个数组，数组可以看成一个3x3的工作台，里面的字母就是占位符，表示在这一格需要使用到什么物品，空的位置可以直接使用空格来代替

第三个参数是一个json对象格式，在这里主要是解释上面的占位符，比如在本代码中占位符D表示的是钻石，占位符W表示的是白色羊毛，当然这里的占位符是可以自定义字母的，但是一定要解释占位符表示的是什么物品

#### 简易写法

在下面的写法在使用过crt的朋友可能会相对熟悉一点，这是一种比较简单的写法，看起来也会相对直观

```js
ServerEvents.recipes(event => {
    event.shaped(Item.of('minecraft:white_wool', 3), [
        ['minecraft:white_wool','minecraft:beacon'],[],
        ['minecraft:beacon','','minecraft:beacon']]);
});
```

在上面代码中，第一个参数是输出物品及数量

第二个参数是一个二维数组，数组里的每一个数组可以看作是工作台里的行数，比如第一个数组是第一行，然后里面输入物品id，如果没有物品的直接使用空字符串就可以了(像第三个数组的第二个参数一样),如果整行没有物品可以像第二个数组一样，直接空着

### 无序合成

```js
ServerEvents.recipes(event => {
    event.shapeless(Item.of('minecraft:redstone',2),[
        'minecraft:stone','minecraft:beacon','minecraft:white_wool','minecraft:enchanting_table'
    ]);
});
```

在上面就是无序合成的写法，无序合成无序的第二个参数是一个数组，里面直接放输入物品id就行

## 燃烧系列

在这里是所有燃烧系列，其中包括：熔炉、烟熏炉、高炉和营火(篝火)

他们的配方添加起来都大同小异，所以就丢到一起

```js
ServerEvents.recipes(event => {
    //熔炉
    event.smelting('minecraft:bell','minecraft:gold_ingot',1000,2000);
    //烟熏炉
    event.smoking('minecraft:bell','minecraft:gold_ingot',1000,2000);
    //营火
    event.campfireCooking('minecraft:bell','minecraft:gold_ingot',0,2000);
    //高炉
    event.blasting('minecraft:bell','minecraft:gold_ingot',1000,2000);
});
```

在上面，第一个参数代表输出物品，第二个参数代表着输入物品，第三个参数代表该配方产生的经验，第四个参数代表该物品需要燃烧的tick(20tick为1秒，所以你可以这样写20\*秒数)

### 设置物品成燃料

是的，在kjs里也可以将物品设置成燃料，具体使用方法就是

```js
Item.getItem('stone').burnTime = 20*10;
```

在getItem的括号内填上物品的id然后去`.burnTime`这个参数去等于一个他燃烧的时间，这里是燃烧10秒所以是20tick\*10次也就是10秒了

## 锻造台

锻造台也是非常简单，锻造台的逻辑就是**物品1+物品2=物品3**

```js
ServerEvents.recipes(event => {
    event.smithing('minecraft:golden_apple','stone','minecraft:apple', 'minecraft:gold_ingot');
});
```

所以在上面的代码中，第一个参数是输出物品，第二个参数是锻造模板(锻造台输入物品的第一个),第三和第四对应着，另外两个输入物品

当然如果，你不想自定义锻造模板，可以将第三第四参数向前移一位，这样默认就是下届合金模板

## 切石机

```js
ServerEvents.recipes(event => {
    event.stonecutting('minecraft:golden_apple', '#minecraft:planks');
});
```

第一个参数是输出物品，第二个参数是输入物品，这里可以看到，使用的#并不是一个物品，而是一个标签(tag)，只要是有携带木板tag的物品都可以分解成金苹果

## 关于配方id

可以看到，在上面的所有配方中，我们都没有进行添加配方id，但是并没有像crt一样报错，这是因为kjs自动生成了一个配方id，我们也可以将这个配方id自己进行添加，只需要在最后加上一个`.id(id名称)`就像下面一样

```js
ServerEvents.recipes(event => {
    event.shapeless(Item.of('minecraft:sand', 2), [
        'minecraft:stone',
		'minecraft:beacon',
		'minecraft:white_wool',
		'minecraft:enchanting_table'
    ]).id("meng_sand");
});
```

[**配方ID详细讲解传送门**](/kubejs-jiao-cheng-1.20.1/digression/recipeid.md)

这里注意一下，如果你直接像上面一样写，该配方id则为minecraft下的配方

但是如果你像这样写:`meng:sand`，那么该配方则是在meng这个路径下的sand配方了，这个就类似于模组名+配方名的概念了

这里没有理解的可以看看mc百科的命名空间


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://gumeng.gitbook.io/kubejs-jiao-cheng-1.20.1/kubejsbasic/basicsyntax-add.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
