Browse Source

Add disable_repair group to prevent tool repair (#7381)

Wuzzy 5 years ago
parent
commit
40ab3e011d
3 changed files with 33 additions and 1 deletions
  1. 4 0
      doc/lua_api.txt
  2. 28 0
      games/minimal/mods/experimental/init.lua
  3. 1 1
      src/craftdef.cpp

+ 4 - 0
doc/lua_api.txt

@@ -1551,6 +1551,8 @@ Special groups
   connect to each other
 * `slippery`: Players and items will slide on the node.
   Slipperiness rises steadily with `slippery` value, starting at 1.
+* `disable_repair`: If set to 1 for a tool, it cannot be repaired using the
+  `"toolrepair"` crafting recipe
 
 
 Known damage and digging time defining groups
@@ -6156,6 +6158,8 @@ Used by `minetest.register_craft`.
         additional_wear = -0.02,
     }
 
+Note: Tools with group `disable_repair=1` will not repairable by this recipe.
+
 ### Cooking
 
     {

+ 28 - 0
games/minimal/mods/experimental/init.lua

@@ -615,6 +615,34 @@ minetest.register_craftitem("experimental:tester_tool_2", {
 	end,
 })
 
+-- Test the disable_repair=1 group
+minetest.register_tool("experimental:unrepairable_tool", {
+	description = "Unrepairable Tool",
+	wield_image = "default_stone.png",
+	inventory_image = "default_stone.png",
+	tool_capabilities = {
+		groupcaps = {
+			cracky = {
+				times = {3, 2, 1},
+			}
+		}
+	},
+	groups = { disable_repair = 1 }
+})
+
+minetest.register_tool("experimental:repairable_tool", {
+	description = "Repairable Tool",
+	wield_image = "default_dirt.png",
+	inventory_image = "default_dirt.png",
+	tool_capabilities = {
+		groupcaps = {
+			cracky = {
+				times = {3, 2, 1},
+			}
+		}
+	},
+})
+
 minetest.register_craft({
 	output = 'experimental:tester_tool_2',
 	recipe = {

+ 1 - 1
src/craftdef.cpp

@@ -579,7 +579,7 @@ static ItemStack craftToolRepair(
 	IItemDefManager *idef = gamedef->idef();
 	if (item1.count != 1 || item2.count != 1 || item1.name != item2.name
 			|| idef->get(item1.name).type != ITEM_TOOL
-			|| idef->get(item2.name).type != ITEM_TOOL) {
+			|| itemgroup_get(idef->get(item1.name).groups, "disable_repair") == 1) {
 		// Failure
 		return ItemStack();
 	}