mods that hopefully work for a TechAge-based pack

This commit is contained in:
2026-09-09 06:27:51 -06:00
parent 4e6b08d194
commit c27db2a537
6234 changed files with 375578 additions and 0 deletions
+241
View File
@@ -0,0 +1,241 @@
# Farm Tools API
The `farmtools` mod exposes an API that makes it easy (as long as you understand Lua) to register new tools.
## 1. Scythes
The code related to scythes is available in `lib/scythes.lua`. However, scythes (along with other tools) are registered in `lib/tools.lua`.
### 1.1. `farmtools.register_scythe`
The function used for registering new scythes.
#### Usage
```lua
local S = core.get_translator("my_mod")
farmtools.register_scythe("my_mod:my_scythe", {
description = S("My Scythe"),
inventory_image = "my_mod_my_scythe.png",
level = 1,
max_uses = 200,
material = "my_mod:my_material_ingot"
})
```
#### Arguments
- **name**: the name of the item to register as a scythe (e.g. `"my_mod:my_scythe"`).
- **def**: the definition table, that can contain:
- **description**: the name of the item as shown to the user (default: `Scythe`).
- **inventory_image**: the image of the item to display in the game (default: `unknown_item.png`)
- **level**: the level of the scythe (`0` = the scythe will harvest the pointed node only, `1` = the scythe will harvest in a 3x3 area, `2` = the scythe will harvest in a 5x5 area, and so on) (default: `1`).
- **max_uses**: the number of times the scythe can be used (default: `90`, but you may want to use at least `200` here, otherwise the tool will wear out very fast). Note that unlike in the original `sickles` mod, _one use_ corresponds to _one node_ processed (i.e. if 9 nodes are processed, this will be considered _nine uses_).
- **material**: the material used for the default scythe recipe (no default: if not specified, the recipe won't be registered)
- **recipe**: alternatively, it is possible to specify the recipe directly (note that this will override any `material` specified)
#### Default recipe
The default recipe for scythes is as follow (it can be overriden using `recipe` in the definition table):
```text
----------------------------------
| | | |
| | material | material |
| | | |
----------------------------------
| | | |
| material | | stick |
| | | |
----------------------------------
| | | |
| | | stick |
| | | |
----------------------------------
```
### 1.2. `farmtools.scythe_on_use`
The function called when the scythe is used. This function should not be called directly unless you know what you are doing.
#### Usage
```lua
farmtools.scythe_on_use(itemstack, user, pointed_thing, uses)
```
#### Arguments
- **itemstack**: the ItemStack object (should be in the scythe group, otherwise it will not be able to harvest in an area bigger than a single node).
- **user**: the player using the scythe.
- **pointed_thing**: the pointed thing when the scythe is used.
- **uses**: the maximum number of times the scythe can be used.
#### Returns
- **ItemStack**: the ItemStack specified as an argument (worn-out, if it should be)
## 2. Rakes
The code related to rakes is available in `lib/rakes.lua`. However, rakes (along with other tools) are registered in `lib/tools.lua`.
### 2.1. `farmtools.register_rake`
The function used for registering new rakes.
#### Usage
```lua
local S = core.get_translator("my_mod")
farmtools.register_rake("my_mod:my_rake", {
description = S("My Rake"),
inventory_image = "my_mod_my_rake.png",
level = 1,
max_uses = 200,
material = "my_mod:my_material_ingot"
})
```
#### Arguments
- **name**: the name of the item to register as a rake (e.g. `"my_mod:my_rake"`).
- **def**: the definition table, that can contain:
- **description**: the name of the item as shown to the user (default: `Rake`).
- **inventory_image**: the image of the item to display in the game (default: `unknown_item.png`)
- **level**: the level of the rake (`0` = the rake will turn only the pointed node into soil (as long as it is possible to do so), `1` = the rake will turn dirt into soil in a 3x3 area, `2` = the rake will turn dirt into soil in a 5x5 area, and so on) (default: `1`).
- **max_uses**: the number of times the rake can be used (default: `90`). Note that unlike in the original `sickles` mod, _one use_ corresponds to _one node_ processed (i.e. if 9 nodes are processed, this will be considered _nine uses_).
- **material**: the material used for the default rake recipe (no default: if not specified, the recipe won't be registered)
- **recipe**: alternatively, it is possible to specify the recipe directly (note that this will override any `material` specified)
#### Default recipe
The default recipe for rakes is as follow (it can be overriden using `recipe` in the definition table):
```text
----------------------------------
| | | |
| material | material | material |
| | | |
----------------------------------
| | | |
| material | stick | material |
| | | |
----------------------------------
| | | |
| | stick | |
| | | |
----------------------------------
```
### 2.2. `farmtools.rake_on_use`
The function called when the rake is used. This function should not be called directly unless you know what you are doing.
#### Usage
```lua
farmtools.rake_on_use(itemstack, user, pointed_thing, uses)
```
#### Arguments
- **itemstack**: the ItemStack object (should be in the rake group, otherwise it will act as a regular hoe).
- **user**: the player using the rake.
- **pointed_thing**: the pointed thing when the rake is used.
- **uses**: the maximum number of times the ItemStack object can be used.
#### Returns
- **ItemStack**: the ItemStack specified as an argument (worn-out, if it should be)
## 3. Sickles
### 3.1. `farmtools.register_sickle`
The function used for registering new sickles.
#### Usage
```lua
local S = core.get_translator("my_mod")
farmtools.register_sickle("my_mod:my_sickle", {
description = S("My Sickle"),
inventory_image = "my_mod_my_sickle.png",
max_uses = 200,
material = "my_mod:my_material_ingot",
damage_groups = { fleshy = 2 },
groupcaps = {
snappy = { times = { [1] = 2.75, [2] = 1.30, [3] = 0.375 }, uses = 100, maxlevel = 2 }
}
})
```
#### Arguments
- **name**: the name of the item to register as a sickle (e.g. `"my_mod:my_sickle"`).
- **def**: the definition table, that can contain:
- **description**: the name of the item as shown to the user (default: `Sickle`).
- **inventory_image**: the image of the item to display in the game (default: `unknown_item.png`)
- **max_uses**: the number of times the rake can be used (default: `120`).
- **material**: the material used for the default sickle recipe (no default: if not specified, the recipe won't be registered)
- **recipe**: alternatively, it is possible to specify the recipe directly (note that this will override any `material` specified)
- **damage_groups**: a table containing the damage the item can do to different entity groups.
- **groupcaps**: a `groupcaps` table ([more information here](https://api.luanti.org/tool-capabilities/#uses-uses-tools-only)).
#### Default recipe
The default recipe for sickles is as follow (it can be overriden using `recipe` in the definition table):
```text
----------------------------------
| | | |
| material | | |
| | | |
----------------------------------
| | | |
| | material | |
| | | |
----------------------------------
| | | |
| stick | | |
| | | |
----------------------------------
```
### 3.2. `farmtools.register_cuttable`
The function used for registering nodes that can be cut with the sickle.
#### Usage
```lua
farmtools.register_cuttable(nodename, base, item)
-- e.g.:
farmtools.register_cuttable("default:mossycobble", "default:cobble", "farmtools:moss")
```
#### Arguments
- **nodename**: the node to register as cuttable
- **base**: the node that should be put in place of the cuttable node after it is cut
- **item**: the item that the player obtains when cutting the cuttable node
### 3.3. `farmtools.register_trimmable`
The function used for registering nodes that can be trimmed with the sickle.
#### Usage
```lua
farmtools.register_trimmable(node, base)
-- e.g.:
farmtools.register_trimmable("farming:wheat_8", "farming:wheat_2")
```
#### Arguments
- **node**: the node to register as trimmable
- **base**: the node that should be put in place of the trimmable node after it is trimmed