Wardens drop OP loot

This Datapack is my first datapack on modrinth. It makes it so when the warden is killed, it drops over-powered loot. The loot table can be found below;

– 6.25% for Sharp 5 Book
– 6.25% for Totem of Undying
– 6.25% for Prot 4 Book
– 12.5% for Notch Apple
– 18.75% for Sharp 4 Book
– 18.75% for Prot 3 Book
– 31.25% for Sharp 3 Book

For loot suggestions, join my discord!

WanionLib

this lib is required for my 3 mods. UniDict, Bigger Crafting Tables, Avaritiaddons

by itself it doesn’t add anything

but it allows my mods to:

– a better way to sincronize data betweeen client<->server
– a way better GUI handler
– my own way to match itemstacks
– my own animations system (used to animate Tile Entities)
– my module system, UniDict uses it
– several network messages that are used indirectly by my mods
– a way better crafting system that supports up to 15×15 crafts, used by Bigger Crafting Tables
– my dependency manager (it is kinda a dependency injection system)

WalksyLib

Walksy Lib

A builder-based config library, designed to be implemented into my mods.

Features

– **Serialization & Deserialization** config system
– **Standard & Unique options**, including:
– **Boolean Option**
– **Numerical Options**
– **Color Option**
– **Enum Option**
– **Sprite/Texture Option** — Drag and drop custom images
– **Pixel Grid Option** — Create custom pixel art with animations (for particles, icons etc…)
– **String Option**
– **String List Option**

Inspiration

I took inspiration from a lot of my favourite config libraries, mainly:
– [YACL](https://modrinth.com/mod/yacl)
– [UkuLib](https://modrinth.com/mod/ukulib)
– [Cloth Config](https://modrinth.com/mod/cloth-config)
– [MidnightLib](https://modrinth.com/mod/midnightlib)

Credits

– **Mod:** Walksy
– **Icon:** Vqki

Walking Spawns Random Blocks

## What is this plugin?

Every single step you take swaps the block underneath you for something completely random from the Minecraft library. One second you’re walking on grass, the next you’re standing on a Diamond Block… or a pool of Lava.

## Features

* **Real-time:** The ground changes the millisecond you move.
* **The Full Library:** It pulls from every block available in the game.
* **Survival Ready:** Works perfectly for “Minecraft But…” style challenges and multiplayer races.

## ⚠️ Important Player Notes

Please keep these two things in mind before you start your run:

1. **Portal Safety:** Be extremely careful when stepping into Nether or End portals. Since the plugin randomizes the block you stand on, it can actually swap out the Portal Blocks themselves. This can break the portal or leave you stranded, so watch your step!
2. **Installation:** Just drop the .jar into your `plugins` folder, restart, and you’re good to go.

## 🎥 For Content Creators

We love seeing people use my work in videos! If you’re a creator and you use this plugin for a challenge or a series, I just ask for one small favor:

**Please include the official links to this page in your video description.** It helps support my work and lets your viewers find the plugin easily. To avoid copyright, include the official links to this page in your video description.
## How to get started

1. Download the latest version.
2. Toss it into your server’s `plugins` folder.
3. Restart the server and try to survive!

Waila Events

Waila Events

Waila Events is a Core Mod that adds several new events into the Waila Mod. This mod does not add in any new features for the average player, however it can be used by other mods to add new features that otherwise may not be available.

If you are planning to use this mod in your dev environment, please read the README on the GitHub page.

[![Nodecraft sponsor banner](https://assets.blamejared.com/nodecraft/darkhax.jpg)](https://nodecraft.com/r/darkhax)

**This project is sponsored by Nodecraft. Use code [DARKHAX](https://nodecraft.com/r/darkhax) for 30% off your first month of service!**

Events

Q&A

Q: I am an average player, why would I ever need this mod?

A: There will be several mods which require this mod to be installed, for them to function properly. You will need to download and install this mod for those to work. A list of mods that require this mod is being worked on. 

 

Q: I am a developer, how can I use this for my mod?

A: This mod adds in two new events. These events make use of the forge event bus and can be used in exactly the same way as traditional forge events. The proper way to use this “API” is to reference the classes as if they were part of your build path. To compile this mod, you will have to add some extra stuff to your build.gradle file to compile against a jar file.  

 

Q: Can I use this mod as part of a dependency loader?

A: If you would like to create a dependency loader to automatically download and install it, that is perfectly fine. Please make sure to download from the curse forge links. 

 

Q: Can this mod be used on servers? What about clients? How does this work?

A: This mod is a client-optional library, this means that you can install this mod on your server, and clients will not need it to connect. That being said, there is currently no benefit to installing this mod in your server. While you can install this mod on your server, the hooks are only handled on the client side of things. This may change in the future. 

 

Q: Can I use this in my modpack?

A: Yes, you can use this mod in your mod packs, as long as they are not being sold. You do not need advanced written permission from myself in order to use this mod in your modpack. Any messages asking for permission will be ignored. 

 

VS2 for Complete Config

I noticed that the [original VS2 project](https://modrinth.com/mod/valkyrien-skies) was not compatible with Complete Config and any mods that use it, but there is a commit made that fixes the issue. Unfortunately it looks like the devs have not released the mod with those changes, so this fixes that!

Blocks that move. Blocks that scale. Blocks with physics. Mini ships. Huge ships. With Valkyrien Skies, not even the sky is a limit.

Notice: Valkyrien Skies is a library mod, you need to download an add-on to use it in ordinary gameplay. If you don’t have any in mind, try out [Eureka](https://modrinth.com/mod/eureka)!

Known mods this provides a fix for:
– [Complete Config](https://modrinth.com/mod/completeconfig)
– [Regions Unexplored](https://modrinth.com/mod/regions-unexplored)

V’s Lucky Block Engine

![Modrinth Followers](https://img.shields.io/modrinth/followers/HNNnhJyE?style=flat)
![Modrinth Downloads](https://img.shields.io/modrinth/dt/HNNnhJyE)
![Modrinth Version](https://img.shields.io/modrinth/v/HNNnhJyE)
![Modrinth Game Versions](https://img.shields.io/modrinth/game-versions/HNNnhJyE)
[![Made by](https://img.shields.io/badge/Made%20By-Vanilama-darkred)](https://vanilama.vercel.app)

you can do
“`
/trigger giveLB
“`
to get a lucky block

——————————————————
## Important

It’s **highly recommended** to always use the **latest** version of the engine because it either adds **new funtionality** or fixes **bugs/errors**

——————————————————

## **Vanilama’s Lucky Block engine offers a Command driven lucky block system.**
**You can edit the loot and its chances in loottable.mcfunction.
Vanilama’s lucky block engine allows for any command being run.
the random scoreboard by default generates a random number between 1..100 if you need more you can change it in drops.mcfunction in line 3**

——————————————————

**Its easy to use and edit the datapack to your liking though i recommend only changing the chance/loot commands in the loottable function if you dont know what youre doing or aren’t sure how to**

### It should mostly work though report any errors in the discord server.

Lucky blocks look like this:

Spoiler

![image of lucky block](https://cdn.modrinth.com/data/cached_images/d515cc5d1d0806e533e5c5ee336d7d78c99a1ecc.png)

this look of the lucky block is inspired by [IJA Minecraft’s](https://ijaminecraft.com/) lucky block command creation for 1.11 you can find it [here](https://ijaminecraft.com/cmd/super_lucky_blocks_1.11/)

## For Lucky Block Creators and modpack creators using this Engine or a lucky block pack based on this engine
if you want to upload your lucky block datapack using this engine pls Link the [**original project**](https://modrinth.com/datapack/vs-lucky-block-engine) as well as note that you used it in the description.
also you cant use multiple lucky block packs in the same world if you still want to you need to copy all the custom events and stuff over from one pack to another and adjust the chances acordingly.

VRX Economy

# 💰 VRX Economy
**The definitive, high-performance Vault economy ecosystem for modern Minecraft servers.**

VRX Economy redefines server economies by combining premium features with a lightweight, zero-lag architecture. Whether you run a Survival, Factions, or CityBuild network, VRX provides everything you need—from a fully visual Auction House and Secure Trading to Dynamic Pricing and Offline Mailboxes—without the clutter of outdated plugins.

### ✨ Premium Gameplay Features

* 🛒 **Visual Auction House (`/ah`)** A seamless, GUI-driven marketplace where players can list, browse, and purchase items securely. Offline sales are directly deposited and trigger an offline notification.
* 📉 **Dynamic Market Pricing (`/sellhand`)** Combat server inflation automatically. Server sell prices dynamically adjust based on supply and demand, dropping when items are over-farmed and naturally recovering over time.
* 🤝 **Scam-Proof Trading (`/trade`)** A bulletproof GUI for safe player-to-player exchanges. Includes an exclusive **AI Server NPC** (`/trade Server`) that allows players to gamble items and money against the server itself!
* 🎯 **Bounty Hunting (`/bounty`)** Fuel PvP engagement by letting players place hits on their rivals. The killer automatically claims the prize. Includes a dedicated `/bounty top` leaderboard.
* 💵 **Physical Banknotes (`/withdraw`)** Transform virtual balances into NBT-secured, forgery-proof paper notes for physical trading and roleplay.
* 📭 **Offline Mailbox** Players receive beautiful, stylized notifications upon logging in if their auctions sold, they received money, or their balance was adjusted while they were offline.
* 🎁 **Player Retention (`/daily` & `/paytoggle`)** Boost activity with configurable 24-hour login bonuses, and protect your streamers or top players from spam with a built-in toggle for incoming payments.

### 🚀 Engineered for Extreme Performance

* **Zero-Lag Architecture**: All heavy database queries (SQLite & MySQL) are executed asynchronously in the background. Your server’s TPS remains at a perfect 20.0, even with hundreds of concurrent players.
* **Intelligent Memory Caching**: Player balances and offline UUIDs are cached in RAM for instant GUI rendering and lightning-fast Vault API responses. Bypasses slow Mojang API rate limits entirely.
* **Modern Aesthetics**: Full support for `&#RRGGBB` hex color codes and gradients. Make your chat, prefixes, and menus look stunningly modern.
* **100% Customizable**: Modify every single prefix, message, and currency setting. The built-in auto-updater safely adds new configuration lines during future updates without overwriting your custom setup.
* **Security & Auditing**: Every transaction (payments, withdrawals, admin commands) is securely logged to `transactions.log` to help admins track down real-money trading or exploits.

### 📜 Commands & Permissions

| Command | Description | Permission |
| :— | :— | :— |
| `/money [player]` | Check your or someone else’s balance | *None* |
| `/pay ` | Send money to another player | *None* |
| `/paytoggle` | Block/Allow incoming payments | *None* |
| `/baltop` | View the top 10 richest players | *None* |
| `/withdraw ` | Create a physical banknote | *None* |
| `/daily` | Claim your 24h reward | *None* |
| `/sellhand` | Sell the item in your main hand | *None* |
| `/ah [sell ]` | Open the Auction House or list an item | *None* |
| `/trade ` | Safely trade items and money | *None* |
| `/bounty `| Manage bounties on players | *None* |
| `/eco `| Admin economy management | `vrx.economy.admin` |

### 🔗 Dependencies
To unlock the full potential of VRX Economy, **[Vault](https://modrinth.com/plugin/vault)** is required. This ensures flawless integration with all your other plugins, such as ChestShops, Holograms, and Scoreboards.

**Install VRX Economy today and build a stable, engaging, and lag-free economy for your community!**

VR Jester API

# Virtual Reality Gesture Recognition API for Minecraft VR

Play Vivecraft or QuestCraft? Love mods? Ever wish mods were more VR compatible? Wait no further. This is a solution for devs and players alike!

This API enables Minecraft mod developers to easily implement support for their mod to be more VR compatible. Create **any** custom gestures that map to **any** key binds and trigger events. No longer do you need to map controller keybindings to keyboard keys. With this API, your body is the controller.

__Demos:__

– https://imgur.com/a/UYaVFCj
– https://imgur.com/a/sYXcike
– https://i.imgur.com/kBD1TIU.mp4
– https://imgur.com/a/0fpiQ9a
– https://i.imgur.com/6xUNF6k.mp4

## Installation:

1. Install required dependency mods. Note that [Questbind](https://modrinth.com/mod/questbind) is only required for QuestCraft usage.
2. Download the VR Jester API mod & place it in the `mods` folder.
3. Run Minecraft. Necessary config files will generate on initialization.

## Usage:

1. While in Minecraft VR, bind one of your controller buttons to the “Gesture Listener Trigger”. I recommend a grip button. For Vivecraft you must do this through Steam VR’s controller bindings menu. For QuestCraft you do this through QuestBind.
2. These are 2 ways to create gestures:
– Using the `/gesture` command
– Modifying the `config/gesture_store.json` directly where gestures are stored.
Sample gesture store:
“`json
“GESTURE 1”: {
“RIGHT_CONTROLLER|LEFT_CONTROLLER”: [
{
“vrDevice”: “RIGHT_CONTROLLER|LEFT_CONTROLLER”,
“movement”: “forward”,
“elapsedTime”: 0,
“speed”: 0.0,
“direction”: {
“x”: 0.0,
“y”: 0.0,
“z”: 0.0
},
“devicesInProximity”: {}
}
]
},

“`
3. Once your gestures are created, you can map them to key binds in `config/VRJesterAPI.cfg` by creating key value objects under the field *”GESTURE_KEY_MAPPINGS”*. You can find the key bind names in `.minecraft/options.txt`. *(Note: The actual KeyMapping string of an individual key bind in that file is in between the key_ and colon. i.e.: key_`key.inventory`:18)* The *”KEY_ACTION”* field determines whether the recognized gesture triggers a single *click* key press or a *hold* down key press. A *hold* is triggered when you keep your gesture in place after it’s recognized.
“`json
“GESTURE_KEY_MAPPINGS”: {
“GESTURE 1”: {
“KEY_MAPPING”: “examplemod.key.ability_1”,
“KEY_ACTION”: “click”
},
“GESTURE 2”: {
“KEY_MAPPING”: “key.hotbar.2,key.sneak”,
“KEY_ACTION”: “hold”
},
“GESTURE 3”: {
“KEY_MAPPING”: “key.keyboard.j”,
“KEY_ACTION”: “click”
}
}
“`
[modrinth]: https://img.shields.io/badge/Modrinth-1bd96a?logo=modrinth&logoColor=ffffff
[curseforge]: https://img.shields.io/badge/CurseForge-f16436?logo=curseforge&logoColor=ffffff
## Download: [ ![modrinth] ](https://modrinth.com/mod/vrjesterapi) [ ![curseforge] ](https://curseforge.com/minecraft/mc-mods/vrjesterapi)

## Info:

– Consider each object within the square brackets [ ] a mere *piece* of the gesture. You can add multiple of these **GestureComponent** objects. This API recognizes gestures as complex as you want! Just know the more conplex, the more difficult it is to perform a gesture correctly to match your stored gesture.
– Different values for *”movement”* are `forward, back, left, right, up, down`. The movement direction is relative to your facing direction at the moment you click the Jester Trigger which initiates the gesture listener. Simple example is punching in the same direction you’re facing would be recognized as “forward”.
– Different values for *”vrDevice”* are `RIGHT_CONTROLLER, LEFT_CONTROLLER, HEAD_MOUNTED_DISPLAY` and if you want a gesture recognized on multiple VR devices you can incorporate a ‘logical or’ using a pipe `|` like so `RIGHT_CONTROLLER|LEFT_CONTROLLER|HEAD_MOUNTED_DISPLAY`
– The *”elapsedTime”* is in milliseconds. So putting a value of `2000` would mean that part of the gesture lasts 2 seconds. This would be good for a charge up sort of move.
– The *”speed”* field is a float value representing the velocity of that GestureComponent. A decent threshold to recognize the speed of a punch would be `1500.0-2000.0` and feel free to play around with the values as much as you want.
– The *”direction”* field takes `x,y,z` float values that create a 3D normalized vector. Example usage of this would be having `{0.0, 1.0, 0.0}` to recognize when the player’s brick hand is facing upwards. There’s a certain threshold so it doesn’t have to be *exact*.
– Finally there’s *”devicesInProximity”* which is formatted like so:
“`json
“devicesInProximity”: {
“LEFT_CONTROLLER”: 20
}
“`
What this example means is that the vrDevice of this GestureComponent has to be within proximity of the left controller for 20 ticks.
– Subscribe to the event bus to handle events triggered by a recognized gesture (Forge) or register to the event callback interface (Fabric).

**Forge:**
“`java
@SubscribeEvent
public void onGestureEvent(GestureEvent event) {
// gesture handler code here -> event.getGestureName()
}
“`

**Fabric:**
“`java
public static void init() {
GestureEventCallback.EVENT.register((gestureEvent) -> {
// gesture handler code here -> gestureEvent.getGestureName()
});
}
“`

### Planned:

In the future I’ll add continous gesture recognition, more configuration options, and optimizations.

***Update 3/27/2025*** – I know I haven’t updated in a while, but I fully intend to come back to this mod. I’ve been working on other projects. Apologies for the inconvenience.

vred’s DP Lib

**vred’s Data-Pack Library** (vred’s DP Lib for short) is the first Data-Pack library I’ve ever made.
The main scope of this project is to add useful tools for creating custom items faster and more easily.
This tools is split into different sections:
– **Data Components**
– **Behaviour Components**
– **Function Tags**
– **Misc**

> **Data Components**
These define information about the item. Which will be quite important!
## As general rule, every vred’s DP lib component goes in the “…” part
## custom_data={vred_lib:{...}}

Component: id

**string**

This one doesn’t really do anything important, just defines the id of an item.

**Example:**

## give @s stick[custom_data={vred_lib:{id:"example:cool_stick"}}]

Component: weapon_id

**string**

This one very important, as it’s required for upcoming components. id contains 2 parts, one of these is the weapon_id, which is the part after the “:”.
It requires a folder named from weapon_id in the current datapack. As for the namespace, it will be taken from the next component, namespace.

**Example:**

## give @s stick[custom_data={vred_lib:{id:"example:cooler_stick",weapon_id:cooler_stick}}]
This item won’t do anything yet.

Component: namespace

**string**

This one is also very important, as it’s required for upcoming components too. id contains 2 parts, one of these is the namespace, which is the part before the “:”.
It requires a folder named from namespace in the current datapack.

**Example:**

## give @s stick[custom_data={vred_lib:{id:"example:very_cool_stick",weapon_id:very_cool_stick,namespace:example}}]
This item won’t do anything yet.

> **Behaviour Components**
These will run functions in a specific condition.
These require a certain slot to work with:

mainhand:{...} in mainhand.

offhand:{...} in offhand.

head:{...} head slot.

chest:{...} chest slot.

legs:{...} legs slot.

feet:{...} feet slot.

all:{...} all the previous slots.

hand:{...} either hand.

armor:{...} any armor slot.

Component: on_hit_effect

**boolean**

This will run a command on hit.
The function that will be run is this:

“`
data//function//on_hit.mcfunction
“`

**Example:**

### give @s bow[custom_data={vred_lib:{id:"example:fast_bow",weapon_id:fast_bow,namespace:example,hand:{on_hit_effect:true}}}]


# data/example/function/fast_bow/on_hit.mcfunction

give @s arrow
say I hit an entity!

When hitting an entity (either arrow or hand) it will give an arrow to the player.

Component: entity_hit_effect

**boolean**

This will run a command when recieving a hit.
The function that will be run is this:

“`
data//function//entity_hit.mcfunction
“`

**Example:**

### give @s stick[custom_data={vred_lib:{id:"example:strong_shield",weapon_id:strong_shield,namespace:example,offhand:{entity_hit_effect:true}}}]

“`
# data/example/function/strong_shield/entity_hit.mcfunction
effect give @s resistance 4 1 true
execute rotated as @s on attacker run tp @s ^ ^ ^2
“`

While holding the shield in offhand, recieving a hit from an entity will push it away by 2 blocks.

Component: on_kill

**boolean**

This will run a command when kiling an entity.
The function that will be run is this:

“`
data//function//on_kill.mcfunction
“`

**Example:**

### give @s iron_sword[custom_data={vred_lib:{id:"example:bloodlust",weapon_id:bloodlust,namespace:example,mainhand:{on_kill_effect:true}}}]

“`
# data/example/function/bloodlust/on_kill.mcfunction

effect give @s strength 10 1 true
“`

After killing an entity, the user will get strength 2 for a few seconds.

Component: double_sneak_effect

**boolean**

This will run a command when pressing the sneak button twice in a small amount of time.
The command will be run as such:

“`
data//function//double_sneak.mcfunction
“`

**Example:**

### give @s stick[custom_data={vred_lib:{id:"example:very_cool_stick",weapon_id:very_cool_stick,namespace:example,hand:{double_sneak:true}}}]


# data/example/function/very_cool_stick/double_sneak.mcfunction

effect give @s speed 2 2

This will make the stick give speed 3 when tapping the sneak button twice in quick succession(while holding the item in either hand).

Component: tap_sneak_effect

**boolean**

This will run a command when sneaking once (tapping).
The command will be run as such:

“`
data//function//tap_sneak.mcfunction
“`

**Example:**

### give @s diamond_boots[custom_data={vred_lib:{id:"example:jumping_boots",weapon_id:jumping_boots,namespace:example,feet:{tap_sneak:true}}}]

“`
# data/example/function/jumping_boots/tap_sneak.mcfunction
effect give @s jump_boost 3 1
particle cloud ^ ^ ^ 0 0 0 0.2 30
“`

This will make the boots give jump boost and emit particles when tapping sneak.

Component: interaction

**string**

This component will spawn an interaction entity in front of the player while the player is holding the item in the main hand. The interaction entity can be used for both right and left click and the functions will be ran like this:
“`
data//function//left_click.mcfunction
data//function//right_click.mcfunction
“`

If it’s “interaction:no_shift”, the interaction entity will always be there.
If it’s “interaction:shift”, the interaction entity will only appear while the player is shifting.

**Example:**

### give @s netherite_shovel[custom_data={vred_lib:{id:"example:offbrand_spear",weapon_id:offbrand_spear,interaction:no_shift}}]


# data/example/function/offbrand_spear/left_click.mcfunction

say left click


# data/example/function/offbrand_spear/right_click.mcfunction

say right click

Component: no_interaction_right_click

**boolean**

This will run a command while holding right click. It requires the food component: minecraft:food={nutrition:0,saturation:0,can_always_eat:1b,eat_seconds:1000000}
The function will be ran constantly while holding right click.

“`
data//function//right_click.mcfunction
“`

**Example: (needs to be changed)**

### give @s blaze_rod[custom_data={vred_lib:{id:"example:hot_rod",weapon_id:hot_rod,namespace:example,no_interaction_right_click:1b}},food={nutrition:0,saturation:0,can_always_eat:1b,eat_seconds:1000000}]

“`
# data/example/function/hot_rod/right_click.mcfunction
execute anchored eyes run particle flame ^ ^ ^1
execute anchored eyes run particle flame ^ ^ ^2
execute anchored eyes run particle flame ^ ^ ^3
“`

Component: weapon_type:bow

**string**

This will create a custom item like a bow that doesn’t require arrows. To make the effect look better, use matching custom model data between base item and bow.
The component requires the food component: minecraft:food={nutrition:0,saturation:0,can_always_eat:1b,eat_seconds:1000000}
And will require a base item: {vred_lib:{base_item:"

It can run a function when shooting the "arrow":

```
data//function//shot.mcfunction
```

**Example:**

### give @s breeze_rod[custom_data={vred_lib:{id:"example:tnt_wand",weapon_id:tnt_wand,namespace:example,weapon_type:bow,base_item:"minecraft:breeze_rod"}}]

```
# data/example/function/tnt_wand/shot.mcfunction
execute if score @s component.bow.timer matches 21.. run summon tnt ^ ^ ^5 {Fuse:0s}
```

If the bow-like item has been in use more than 21 ticks, it will summon a tnt 5 blocks foward. **This will only work in the main hand**.

Component: scrollable

**boolean**

When dropping the item from the main hand, it reference an item modifier based on the map_id component.
This is a brand new system I made for displaying item descriptions, as each item modifier can reference a different lore page and change the map_id to go on the next page.

```
data//item_modifier/page//.json
```

**Example:**

### give @s diamond_sword[custom_data={vred_lib:{id:"example:multitool",weapon_id:multitool,namespace:example,scrollable:1b}},map_id=1,unbreakable={}]

```
# data/example/item_modifier/page/multitool/1.json (you can't have comments in json)
[{function:"set_item",item:"minecraft:netherite_axe"},{function:"set_components",components:{map_id:2}}]

# data/example/item_modifier/page/multitool/2.json
[{function:"set_item",item:"minecraft:diamond_pickaxe"},{function:"set_components",components:{map_id:3}}]

# data/example/item_modifier/page/multitool/2.json
[{function:"set_item",item:"minecraft:diamond_pickaxe"},{function:"set_components",components:{map_id:3}}]

# data/example/item_modifier/page/multitool/3.json
[{function:"set_item",item:"minecraft:diamond_shovel"},{function:"set_components",components:{map_id:4}}]

# data/example/item_modifier/page/multitool/4.json
[{function:"set_item",item:"minecraft:diamond_hoe"},{function:"set_components",components:{map_id:1}}]
```

The example is a pretty simple multitool, where each "page" switches the multitool to a different item. An important thing to mention is that each item modifier changes the map_id for next item modifier to use.

> **Function Tags**
Various function tags I use. Why not use the vanilla ones? I don't know.

#vred_lib:load

Works identically to normal #minecraft:load function. No idea why I made it.

#vred_lib:entity

Tick function only for entity, excluding the player.

#vred_lib:entity

Tick function only for player.

> **Misc**
Contains various miscellaneous, but useful stuff.

Predicate: vred_lib:stuff

This predicate includes entities that shouldn't be targeted.
It includes:

- Display entities;
- Entities being ridden;
- Dropped items;
- Arrows.

Predicate: vred_lib:id_check

Simple id system. Each player gets a vred_lib.id score.

You can use a predicate to check if the player has the same ID as the specified ID (stored in a fake player on a scoreboard).
In this case, this predicate will only trigger if the player’s vred_lib.id score is equal to the vred_lib.id score of the fake player (#temp).

Score: vred_lib.config

This score will be used for different mod compats. The mod name is stored with acronym. The main and only example at the moment is **Iron's Spells and Spellbooks**.

To check if the mod is present, check the vred_lib.config score of the fake player #iss_compat.
If the score is 1, that means the mod is present. **The detection works by using a command from the mod.**
There's also the vred_lib.iss.mana score, which can be used to check the amount of mana of the player.

The compatibilies will be expanded in the future with more mods, be sure to send some suggestions!

tag: 1slot_tag

This tag checks if the player has at least 1 free inventory and hotbar slot. If it has one, the player will have the tag.

Custom Projectiles

You can add custom projectiles. These projectiles are very barebones and don't even have gravity (will changed in the future).

To add a custom projectile,
```
scoreboard players operation #test vred_lib.id = @s vred_lib.id
execute rotated as @s anchored eyes positioned ~ ~-1 ~ run function vred_lib:projectile/summon {id:""}
function vred_lib:projectile/throw {id:""}
```
This will spawn the projectile with the .
To change the behaviour and data of said projectile, target it back in the tick function. It has a built-in timer, called rayAge.

The throw function will save a copy of the item and reduce the amount of the item in the main hand.

Later then use function vred_lib:projectile/return {id:""} as the projectile to make the item return to the owner.

Custom Particles

You can add custom particles. These particles are very barebones and are just fancy item displays that move.
To spawn a custom projectile you first need to add the data function in this tag: #vred_lib:particle_load

```# data/example/function/particle_load.json
{
"replace": false,
"values": [
"example:particle/load"
]
}

# data/example/function/particle/load.mcfunction
## beetroot particle, hell yeah
item replace entity @s[tag=] contents with beetroot
```

In order to summon it:
```
function vred_lib:particle_system/test/1 {id:,count:,dx:,dy:,dz:,scale:,
speed: lifetime:,
owner_id:}
```
`` is the particle id (**string**).
``,``,`` indicate the area in which the particle will be spawned (**integer**).
`` is used to calculate the speed of the particle (**integer**)
actual speed = ( / 10 blocks )/ tick
Maximum is 10.
`` how long the particle will last (**integer**, arbitrary).
`` is the vred_lib.id score of the owner of the particle (either can be "none" or **integer**). If it's none, the particle has just no owner.

Back to our example:
```
function vred_lib:particle_system/test/1 {id:,count:15,dx:0,dy:0,dz:0,scale:1,speed:1,lifetime:20,owner_id:none}
```