> For the complete documentation index, see [llms.txt](https://jixelpatterns.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jixelpatterns.gitbook.io/docs/paid-assets/jim-beanmachine/installation.md).

# Installation

{% hint style="danger" %}
Do not skim the instructions. You need to follow every step of the Install Guide to make sure you're installing the script correctly
{% endhint %}

## <sub>Dependency Installation</sub>

### <sub>Jim\_Bridge</sub>

{% hint style="info" %}
This is required for the script to function, it won't work without it
{% endhint %}

{% stepper %}
{% step %}

### <sub>Download</sub>

Get it free from github - <https://github.com/jimathy/jim_bridge>
{% endstep %}

{% step %}

### Extract

Extract `jim_bridge` and make sure `-main` is removed from the script folder name
{% endstep %}

{% step %}

### Install

Place the extracted `jim_bridge` folder into `/resources/[standalone]`&#x20;
{% endstep %}

{% step %}

### Done

{% endstep %}
{% endstepper %}

***

## <sub>Framework Installation</sub>

{% tabs %}
{% tab title="ESX" %}

### Add the script to the server resources

* It is highly recommend to put this script folder in a new folder called `[jim]`
* Then add `ensure [jim]` **AFTER** your other scripts in your server.cfg

***

### Ensure List

GO TO YOUR `server.cfg`

{% hint style="warning" %}
The ORDER of the load order is important, check information [here](https://jixelpatterns.gitbook.io/docs/troubleshooting/common-issues#load-order)
{% endhint %}

### Resources (EXAMPLE)

```markdown
# Default & Standalone Resources
# ------------------------------
ensure chat
ensure hardcap
ensure oxmysql
start ox_lib

# ESX Legacy Core
# ----------
ensure [core]
ensure [esx_addons]
start ox_inventory
start ox_target
ensure [standalone] # Place `jim_bridge` here

# ESX Addons
# ----------

# Other
ensure [jimextras]  # Place `jim-payments` / `jim-consumables` / `jim-jobgarage` / `jim-djbooth` here
ensure [jim]        # Place all other jim scripts here
```

{% hint style="warning" %}
**IF YOU ALREADY HAVE A \[jim] FOLDER, PUT IT IN THAT FOLDER YOU DO NOT NEED TO CREATE A NEW ONE.**
{% endhint %}

***

### [Jim-Payments](https://github.com/jimathy/jim-payments) (Required/Optional)

* This is the default system for payments in the script but can easily be changed in `client.lua`
* When triggered gets a list of the nearest players and lets you choose which one to charge
* I class it as `optional` because you don't specifically need it if you have another you want to use.

***

### [Jim-Consumables](https://github.com/jimathy/jim-consumables) (Optional)

* If `jim-consumables` is installed, the script will attempt to reroute consumables
* The server side will automatically add the items to `jim-consumables` (edit any values you wish there)
* When used the item will trigger the `jim-script:client:consume` event which detects wether to use built in event's or `jim-consuambles` (if found)
  {% endtab %}

{% tab title="QBCore" %}

### Add the script to the server resources

* It is highly recommend to put this script folder in a new folder called `[jim]`
* Then add `ensure [jim]` **AFTER** your other scripts in your server.cfg

***

### Ensure List

GO TO YOUR `server.cfg`

{% hint style="warning" %}
The ORDER of the load order is important, check information here
{% endhint %}

### Resources (EXAMPLE)

```markdown
# QBCore & Extra stuff
ensure qb-core
ensure [qb]
ensure [standalone] # Place `jim_bridge` here
ensure [voice]
ensure [defaultmaps]


# Extra Jim Stuff
ensure [jimextras]  # Place `jim-payments` / `jim-consumables` / `jim-jobgarage` / `jim-djbooth` here
ensure [jim]        # Place all other jim scripts here
```

{% hint style="warning" %}
**IF YOU ALREADY HAVE A \[jim] FOLDER, PUT IT IN THAT FOLDER YOU DO NOT NEED TO CREATE A NEW ONE.**
{% endhint %}

***

### [Jim-Payments](https://github.com/jimathy/jim-payments) (Required/Optional)

* This is the default system for payments in the script but can easily be changed in `client.lua`
* When triggered gets a list of the nearest players and lets you choose which one to charge
* I class it as `optional` because you don't specifically need it if you have another you want to use.

***

### [Jim-Consumables](https://github.com/jimathy/jim-consumables) (Optional)

* If `jim-consumables` is installed, the script will attempt to reroute consumables
* The server side will automatically add the items to `jim-consumables` (edit any values you wish there)
* When used the item will trigger the `jim-script:client:consume` event which detects wether to use built in event's or `jim-consuambles` (if found)

***

{% endtab %}

{% tab title="QBOX" %}

### Add the script to the server resources

* It is highly recommend to put this script folder in a new folder called `[jim]`
* Then add `ensure [jim]` **AFTER** your other scripts in your server.cfg

***

### Ensure List

GO TO YOUR `server.cfg`

{% hint style="warning" %}
The ORDER of the load order is important, check information here
{% endhint %}

### Resources (EXAMPLE)

```markdown
# Qbox & Extra stuff
ensure ox_lib
ensure qbx_core
ensure ox_target
ensure [ox]
ensure [qbx]
ensure [standalone] # Place `jim_bridge` here
ensure [voice]

ensure [npwd-apps]
ensure qbx_npwd
ensure npwd

# Extra Jim Stuff
ensure [jimextras]  # Place `jim-payments` / `jim-consumables` / `jim-jobgarage` / `jim-djbooth` here
ensure [jim]        # Place all other jim scripts here
```

{% hint style="warning" %}
**IF YOU ALREADY HAVE A \[jim] FOLDER, PUT IT IN THAT FOLDER YOU DO NOT NEED TO CREATE A NEW ONE.**
{% endhint %}

***

### [Jim-Payments](https://github.com/jimathy/jim-payments) (Required/Optional)

* This is the default system for payments in the script but can easily be changed in `client.lua`
* When triggered gets a list of the nearest players and lets you choose which one to charge
* I class it as `optional` because you don't specifically need it if you have another you want to use.

***

### [Jim-Consumables](https://github.com/jimathy/jim-consumables) (Optional)

* If `jim-consumables` is installed, the script will attempt to reroute consumables
* The server side will automatically add the items to `jim-consumables` (edit any values you wish there)
* When used the item will trigger the `jim-script:client:consume` event which detects wether to use built in event's or `jim-consuambles` (if found)

***

{% endtab %}

{% tab title="OX\_Core" %}

### Add the script to the server resources

* It is highly recommend to put this script folder in a new folder called `[jim]`
* Then add `ensure [jim]` **AFTER** your other scripts in your server.cfg

***

### Ensure List

GO TO YOUR `server.cfg`&#x20;

{% hint style="warning" %}
The ORDER of the load order is important, check information here
{% endhint %}

### Resources (EXAMPLE)

```markdown
start chat
start sessionmanager
start pe-basicloading
start bob74_ipl
start pma-voice
start oxmysql
start ox_lib
start ox_core
start ox_target
start illenium-appearance
start ox_inventory
ensure [standalone] # Place `jim_bridge` here

# Extra Jim Stuff
ensure [jimextras]  # Place `jim-payments` / `jim-consumables` / `jim-jobgarage` / `jim-djbooth` here
ensure [jim]        # Place all other jim scripts here

# Extra Other Scripts Here
```

{% hint style="warning" %}
**IF YOU ALREADY HAVE A \[jim] FOLDER, PUT IT IN THAT FOLDER YOU DO NOT NEED TO CREATE A NEW ONE.**
{% endhint %}

***

### [Jim-Payments](https://github.com/jimathy/jim-payments) (Required/Optional)

* This is the default system for payments in the script but can easily be changed in `client.lua`
* When triggered gets a list of the nearest players and lets you choose which one to charge
* I class it as `optional` because you don't specifically need it if you have another you want to use.

***

### [Jim-Consumables](https://github.com/jimathy/jim-consumables) (Optional)

* If `jim-consumables` is installed, the script will attempt to reroute consumables
* The server side will automatically add the items to `jim-consumables` (edit any values you wish there)
* When used the item will trigger the `jim-script:client:consume` event which detects wether to use built in event's or `jim-consuambles` (if found)
  {% endtab %}
  {% endtabs %}

## Job Installation

{% tabs %}
{% tab title="ESX" %}
Import the `esx_jobs.sql` into your database to add the jobs and their grades

```sql
INSERT INTO `jobs` (name, label) VALUES
	('beanmachine', 'BeanMachine')
;

INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES
	('beanmachine',0,'recruit','Recruit',50,'{}','{}'),
	('beanmachine',1,'novice','Novice',75,'{}','{}'),
	('beanmachine',2,'experienced','Experienced',100,'{}','{}'),
	('beanmachine',3,'advanced',"Advanced",125,'{}','{}'),
	('beanmachine',4,'boss','Manager',150,'{}','{}'),
    	('beanmachine',5,'owner','Owner',175,'{}','{}')
;
```

{% endtab %}

{% tab title="QBCore" %}
Add the lines from `qb_jobs.txt` to your `qb-core > shared > jobs.lua`

```lua
['beanmachine'] = {
    label = 'BeanMachine',
    defaultDuty = true,
    grades = {
        ['0'] = { name = 'Recruit', payment = 50 },
        ['1'] = { name = 'Novice', payment = 75 },
        ['2'] = { name = 'Experienced', payment = 100 },
        ['3'] = { name = 'Advanced', payment = 125 },
        ['4'] = { name = 'Manager', isboss = true, payment = 150 },
    },
},
```

{% endtab %}

{% tab title="QBOX" %}
Add the lines from `qb_jobs.txt` to your `qbx_core > shared > jobs.lua`

```lua
['beanmachine'] = {
    label = 'BeanMachine',
    defaultDuty = true,
    grades = {
        [0] = { name = 'Recruit', payment = 50 },
        [1] = { name = 'Novice', payment = 75 },
        [2] = { name = 'Experienced', payment = 100 },
        [3] = { name = 'Advanced', payment = 125 },
        [4] = { name = 'Manager', isboss = true, payment = 150 },
    },
},
```

{% endtab %}

{% tab title="OX\_Core" %}
Import the `ox_jobs.sql` into your database to add the jobs and their grades

```sql
INSERT IGNORE INTO `account_roles` (`name`) VALUES
('novice'),
('experienced'),
('advanced'),
('manager'),
('owner');

INSERT IGNORE INTO `ox_groups` ( `name`, `label`, `colour`, `hasAccount`) VALUES
( 'beanmachine', 'BeanMachine', NULL, 1 );

INSERT IGNORE INTO `ox_group_grades` (`group`, `grade`, `label`, `accountRole`) VALUES
('beanmachine', 0, 'Recruit', NULL),
('beanmachine', 1, 'Novice', 'novice'),
('beanmachine', 2, 'Experienced', 'experienced'),
('beanmachine', 3, 'Advanced', 'advanced'),
('beanmachine', 4, 'Manager', 'manager'),
('beanmachine', 5, 'Owner', 'owner');
```

{% endtab %}
{% endtabs %}

## Item Installation

{% tabs %}
{% tab title="QB-Inv" %}
{% hint style="warning" %}
These items work for both old and new `qb-inventory`
{% endhint %}

### Item Images

Add the images from `_install > images` to your inventory folder&#x20;

* eg. `qb-inventory > html > images`

### Item Data

If using `qb-inventory` or similar, add the lines from `qb_items.txt` to your `qb-core > shared > items.lua`

```lua
-- JIM-BEANMACHINE --
    beancoffee    = { name = 'beancoffee', label = 'Coffee Beans', weight = 100, type = 'item', image = 'beancoffee.png', unique = false, useable = false, shouldClose = true, description = 'A bag of roasted coffee beans' },
    beandonut    = { name = 'beandonut', label = 'Donut', weight = 100, type = 'item', image = 'popdonut.png', unique = false, useable = true, shouldClose = true, description = 'Freshly baked donut' },
    rhinohorn    = { name = 'rhinohorn', label = 'Rhino Horn', weight = 100, type = 'item', image = 'rhinohorn.png', unique = false, useable = false, shouldClose = true, description = 'A rare rhino horn' },
    oystershell    = { name = 'oystershell', label = 'Oyster Shell', weight = 100, type = 'item', image = 'oyster.png', unique = false, useable = false, shouldClose = true, description = 'Shell from an oyster' },
    watermelon    = { name = 'watermelon', label = 'Watermelon Slice', weight = 100, type = 'item', image = 'watermelon.png', unique = false, useable = true, shouldClose = true, description = 'Juicy slice of watermelon' },
    bigfruit    = { name = 'bigfruit', label = 'The Big Fruit', weight = 100, type = 'item', image = 'bigfruit.png', unique = false, useable = true, shouldClose = true, description = 'A mysterious oversized fruit' },
    highnoon    = { name = 'highnoon', label = 'Highnoon', weight = 100, type = 'item', image = 'highnoon.png', unique = false, useable = true, shouldClose = true, description = 'Strong and bold highnoon coffee' },
    speedball    = { name = 'speedball', label = 'The SpeedBall', weight = 100, type = 'item', image = 'speedball.png', unique = false, useable = true, shouldClose = true, description = 'High-caffeine speedball drink' },
    gunkaccino    = { name = 'gunkaccino', label = 'The Gunkaccino', weight = 100, type = 'item', image = 'gunkaccino.png', unique = false, useable = true, shouldClose = true, description = 'Funky-flavored gunkaccino' },
    bratte    = { name = 'bratte', label = 'The Bratte', weight = 100, type = 'item', image = 'bratte.png', unique = false, useable = true, shouldClose = true, description = 'Creamy bratte coffee drink' },
    flusher    = { name = 'flusher', label = 'The Flusher', weight = 100, type = 'item', image = 'flusher.png', unique = false, useable = true, shouldClose = true, description = 'Energizing and cleansing brew' },
    ecocoffee    = { name = 'ecocoffee', label = 'The Eco-ffee', weight = 100, type = 'item', image = 'ecoffee.png', unique = false, useable = true, shouldClose = true, description = 'Eco-friendly brewed coffee' },
    caffeagra    = { name = 'caffeagra', label = 'Caffeagra', weight = 100, type = 'item', image = 'caffeagra.png', unique = false, useable = true, shouldClose = true, description = 'Bold and powerful coffee shot' },
    chocolate    = { name = 'chocolate', label = 'Chocolate', weight = 200, type = 'item', image = 'chocolate.png', unique = false, useable = true, shouldClose = false, description = 'Delicious chocolate bar' },
    cheesecake    = { name = 'cheesecake', label = 'Cheese Cake', weight = 100, type = 'item', image = 'cheesecake.png', unique = false, useable = true, shouldClose = true, description = 'Rich and creamy cheesecake' },
    crisps    = { name = 'crisps', label = 'Crisps', weight = 100, type = 'item', image = 'chips.png', unique = false, useable = true, shouldClose = true, description = 'Crunchy potato crisps' },
    sugar    = { name = 'sugar', label = 'Sugar', weight = 100, type = 'item', image = 'sugar.png', unique = false, useable = true, shouldClose = false, description = 'Granulated white sugar' },
    orange    = { name = 'orange', label = 'Orange', weight = 200, type = 'item', image = 'orange.png', unique = false, useable = false, shouldClose = false, description = 'A fresh, juicy orange' },
    milk    = { name = 'milk', label = 'Milk', weight = 300, type = 'item', image = 'burger-milk.png', unique = false, useable = true, shouldClose = true, description = 'Carton of milk' },
    chickenbreast    = { name = 'chickenbreast', label = 'Chicken Breast', weight = 100, type = 'item', image = 'chickenbreast.png', unique = false, useable = true, shouldClose = false, description = 'Raw chicken breast fillet' },
    sprunk    = { name = 'sprunk', label = 'Sprunk', weight = 100, type = 'item', image = 'sprunk.png', unique = false, useable = true, shouldClose = true, description = 'Can of Sprunk soda' },
    sprunklight    = { name = 'sprunklight', label = 'Sprunk Light', weight = 100, type = 'item', image = 'sprunklight.png', unique = false, useable = true, shouldClose = true, description = 'Diet version of Sprunk' },
    ecola    = { name = 'ecola', label = 'eCola', weight = 100, type = 'item', image = 'ecola.png', unique = false, useable = true, shouldClose = true, description = 'Can of eCola soda' },
    ecolalight    = { name = 'ecolalight', label = 'eCola Light', weight = 100, type = 'item', image = 'ecolalight.png', unique = false, useable = true, shouldClose = true, description = 'Diet eCola soda' },

```

{% endtab %}

{% tab title="OX\_Inv" %}
{% hint style="warning" %}
This applies to any framework using `ox_inventory`
{% endhint %}

{% hint style="warning" %}
Currently while using `ESX` my scripts only support `ox_inventory`
{% endhint %}

### Item Images

Copy and paste the images from `_install > images` to your inventory folder&#x20;

* eg. `ox_inventory > web > images`

### Item Data

Add the `ox_items.txt` to your `ox_inventory > data > items.lua`

```lua
-- JIM-BEANMACHINE --
    beancoffee = { label = "Coffee Beans", weight = 100, stack = true, close = true, description = "A bag of roasted coffee beans",
        client = { image = "beancoffee.png", event = "jim-beanmachine:client:Consume", }
    },
    highnoon = { label = "Highnoon", weight = 100, stack = true, close = true, description = "Strong and bold highnoon coffee",
        client = { image = "highnoon.png", event = "jim-beanmachine:client:Consume", }
    },
    speedball = { label = "The SpeedBall", weight = 100, stack = true, close = true, description = "High-caffeine speedball drink",
        client = { image = "speedball.png", event = "jim-beanmachine:client:Consume", }
    },
    gunkaccino = { label = "The Gunkaccino", weight = 100, stack = true, close = true, description = "Funky-flavored gunkaccino",
        client = { image = "gunkaccino.png", event = "jim-beanmachine:client:Consume", }
    },
    bratte = { label = "The Bratte", weight = 100, stack = true, close = true, description = "Creamy bratte coffee drink",
        client = { image = "bratte.png", event = "jim-beanmachine:client:Consume", }
    },
    flusher = { label = "The Flusher", weight = 100, stack = true, close = true, description = "Energizing and cleansing brew",
        client = { image = "flusher.png", event = "jim-beanmachine:client:Consume", }
    },
    ecocoffee = { label = "The Eco-ffee", weight = 100, stack = true, close = true, description = "Eco-friendly brewed coffee",
        client = { image = "ecoffee.png", event = "jim-beanmachine:client:Consume", }
    },
    caffeagra = { label = "Caffeagra", weight = 100, stack = true, close = true, description = "Bold and powerful coffee shot",
        client = { image = "caffeagra.png", event = "jim-beanmachine:client:Consume", }
    },

    -- Desserts & Sweets
    cheesecake = { label = "Cheese Cake", weight = 100, stack = true, close = true, description = "Rich and creamy cheesecake",
        client = { image = "cheesecake.png", event = "jim-beanmachine:client:Consume", }
    },
    chocolate = { label = "Chocolate", weight = 200, stack = true, close = false, description = "Delicious chocolate bar",
        client = { image = "chocolate.png", event = "jim-beanmachine:client:Consume", }
    },
    sugar = { label = "Sugar", weight = 100, stack = true, close = false, description = "Granulated white sugar",
        client = { image = "sugar.png", event = "jim-beanmachine:client:Consume", }
    },
    beandonut = { label = "Donut", weight = 100, stack = true, close = true, description = "Freshly baked donut",
        client = { image = "popdonut.png", event = "jim-beanmachine:client:Consume", }
    },
    crisps = { label = "Crisps", weight = 100, stack = true, close = true, description = "Crunchy potato crisps",
        client = { image = "chips.png", event = "jim-beanmachine:client:Consume", }
    },

    -- Fruits & Produce
    orange = { label = "Orange", weight = 200, stack = true, close = false, description = "A fresh, juicy orange",
        client = { image = "orange.png", event = "jim-beanmachine:client:Consume", }
    },
    watermelon = { label = "Watermelon Slice", weight = 100, stack = true, close = true, description = "Juicy slice of watermelon",
        client = { image = "watermelon.png", event = "jim-beanmachine:client:Consume", }
    },
    bigfruit = { label = "The Big Fruit", weight = 100, stack = true, close = true, description = "A mysterious oversized fruit",
        client = { image = "bigfruit.png", event = "jim-beanmachine:client:Consume", }
    },

    -- Meat
    chickenbreast = { label = "Chicken Breast", weight = 100, stack = true, close = false, description = "Raw chicken breast fillet",
        client = { image = "chickenbreast.png", event = "jim-beanmachine:client:Consume", }
    },

    -- Rare/Exotic
    rhinohorn = { label = "Rhino Horn", weight = 100, stack = true, close = true, description = "A rare rhino horn",
        client = { image = "rhinohorn.png", event = "jim-beanmachine:client:Consume", }
    },
    oystershell = { label = "Oyster Shell", weight = 100, stack = true, close = true, description = "Shell from an oyster",
        client = { image = "oyster.png", event = "jim-beanmachine:client:Consume", }
    },

    -- Drinks
    milk = { label = "Milk", weight = 300, stack = true, close = true, description = "Carton of milk",
        client = { image = "burger-milk.png", event = "jim-beanmachine:client:Consume", }
    },
    sprunk = { label = "Sprunk", weight = 100, stack = true, close = true, description = "Can of Sprunk soda",
        client = { image = "sprunk.png", event = "jim-beanmachine:client:Consume", }
    },
    sprunklight = { label = "Sprunk Light", weight = 100, stack = true, close = true, description = "Diet version of Sprunk",
        client = { image = "sprunklight.png", event = "jim-beanmachine:client:Consume", }
    },
    ecola = { label = "eCola", weight = 100, stack = true, close = true, description = "Can of eCola soda",
        client = { image = "ecola.png", event = "jim-beanmachine:client:Consume", }
    },
    ecolalight = { label = "eCola Light", weight = 100, stack = true, close = true, description = "Diet eCola soda",
        client = { image = "ecolalight.png", event = "jim-beanmachine:client:Consume", }
    },

    -- QBCore Based Item Replacement
    plastic = { label = "Plastic", weight = 100, stack = true, close = false, description = "RECYCLE!",
        client = { image = "plastic.png", },
    },
    water_bottle = { label = "Water Bottle", weight = 300, stack = true, close = true, description = "For all the thirsty out there",
        client = { image = "water.png", }
    },
    tosti = { label = "Grilled Cheese Sandwich", weight = 200, stack = true, close = true, description = "Nice to eat",
        client = { image = "tosti.png", }
    },

```

{% endtab %}
{% endtabs %}
