
Restricted Inventory
Restrict player inventory slots to specific items or item tags. Configure which slots accept which items via JSON config — server-wide or per-client. Restricted slots display a visual preview of what belongs there.
- Загрузки
- 946
- Подписчики
- 3
- Обновлён
- 16 августа 2026 г.
- Лицензия
- MIT
Опубликован 9 июня 2026 г.
Restricted Inventory
Lock player inventory slots to specific items or item tags.
Ever wanted to keep a dedicated slot for your sword, always have slot 0 as your torch, or enforce item organization across your server? Restricted Inventory lets you do exactly that — configure any inventory slot (0–35) to only accept a specific item or item tag, server-wide or per player.
Features
- Slot restrictions — Lock any hotbar or inventory slot to a specific item (e.g.
minecraft:torch) or an entire item tag (e.g.#minecraft:swords) - Server or per-client mode — Apply the same rules to all players from the server config, or let each player define their own restrictions in their client config
- Visual feedback — Restricted slots display a ghost preview of the required item so players always know what goes where
- Slot index overlay — Hold Tab in any inventory screen to reveal each slot's index number, making config setup a breeze
- Smart item routing — Picked-up items automatically go to their designated slots first before filling unrestricted ones
Commands
All commands use the /restrictedinventory prefix.
| Command | Description | Permission |
|---|---|---|
/restrictedinventory config |
Opens the Restriction Config Screen | Admin (OP level 4), or any player when useClientRestriction is enabled |
Permission rules
- When
useClientRestrictionis false (server-wide mode): only server operators (OP level 4) can open the config screen. - When
useClientRestrictionis true (per-client mode): every player can open their own config screen.
Restriction Config Screen
The config screen is the in-game GUI for editing slot restrictions. Open it with /restrictedinventory config.
Item / Tag picker (top panel)
- Items tab — lists every registered item at ¾ scale. Hover for the item name and registry ID. Click to select.
- Tags tab — lists every registered item tag. Each tag cycles through its members as a live preview. Hover for the tag ID. Click to select.
- Scroll with the mouse wheel or drag the scrollbar on the right.
Slot grid (middle panel)
- Displays all 36 player inventory slots (0–35) laid out in the standard inventory arrangement.
- Each slot shows a cycling preview of its current restriction, or is empty if unrestricted.
- Left-Click a slot to select it (highlighted in white). The selected slot will receive the item or tag chosen in the picker.
- Right-Click a slot to remove the item or tag chosen.
- Hover a slot to see its current restriction value as a tooltip.
Configuration
Restrictions are defined in a simple JSON config file. Both specific items and item tags are supported. Nbt/Components is also supported.
{
"useClientRestriction": false,
"useTeamAndTagRestrictions": true,
"restrictedSlots": {
"0": "minecraft:torch",
"1": {
"item": "#minecraft:swords",
"display": { // this is an example with item with nbt/component
"components": { // use "tag" for 1.20.1
"minecraft:stored_enchantments": {
"mineraft:silk_touch": 1
},
}
},
"2": {
"item": "minecraft:enchanted_book",
"components": { // use "tag" for 1.20.1
"minecraft:stored_enchantments": {
"mineraft:silk_touch": 1
},
"display": "minecraft:dirt" // this is an example with plain item
}
},
"3": {
"group": "group_name"
}
},
"groups": { // Only available in common config
"group_name": [
{"item": "minecraft:dirt"},
{
"item": "minecraft:enchanted_book",
"components": { // use "tag" for 1.20.1
"minecraft:stored_enchantments": {
"mineraft:silk_touch": 1
}
}
]
},
"teamRestrictions": {
"team": {
"restrictedSlots": {
"0": "minecraft:dirt"
}
}
},
"tagRestrictions": {
"dirt": {
"restrictedSlots": {
"1": "minecraft:grass_block"
}
}
}
}
| Slot range | Location |
|---|---|
| 0–8 | Hotbar (survival mode only) |
| 9–35 | Main inventory |
Note: Slot indices 0–8 correspond to the hotbar in survival mode. In creative mode, the hotbar uses a different inventory layout and slot restrictions will not apply there.
Compatibility Note
This mod hooks into vanilla's slot placement and item pickup logic via Mixin. Mods or block entities that insert items directly into the player inventory (bypassing standard slot logic) may not respect the restrictions. Mods that also modify Slot, Inventory, or AbstractContainerScreen may conflict.
Ченджлог
20.1.9Бета1.20.1 · 16 августа 2026 г.
20.1.9
- Added optional team and tag restrictions: set
useTeamAndTagRestrictionstotruein the common config to give different players different rules based on the vanilla scoreboard team they are on and the vanilla entity tags they carry teamRestrictionsmaps a scoreboard team name to its ownrestrictedSlots, andtagRestrictionsdoes the same for an entity tag, both written in the common config- Team and tag rules use the exact same entries a normal slot rule does, so item ids,
#tags, NBT filters, restriction groups and customdisplayitems all work inside them with no extra configuration - A player matched by a team or tag rule uses that set instead of
restrictedSlots; the global rules are a fallback for players that match nothing, not a layer merged underneath the targeted ones - A vanilla player is on at most one team, so at most one team rule applies, while every matching tag rule is combined
- Tag rules override team rules when both claim the same slot, and matching tag names are applied in alphabetical order so two tags claiming one slot always resolve the same way
- With
useClientRestrictionenabled, each player's own rules stay the most specific layer and are applied over the team and tag result - Tags a player carries that have no rule in
tagRestrictionsare ignored, so an unrelated tag from another mod never drops a player out of the global rules - Membership is managed entirely with vanilla
/teamand/tag; no new commands were added and the existing/restrictedinventory configstill edits the globalrestrictedSlots - Team and tag changes apply immediately without a relog or a config reload, and nothing is copied into the player's saved data, so leaving a team removes its rules with it
- Configured teams and tags do not have to exist yet; a rule for a team nobody has created is valid and starts applying once a player joins a team with that name
- A profile with an empty
restrictedSlotsstill counts as a match, which exempts that team or tag from the global rules entirely - The server decides which rules apply and sends the result to the client, so slot overlays, ghost previews and placement feedback keep matching what is actually enforced
- Fixed a crash on Forge when a
/reloadfired the datapack sync without a player
The feature is off by default. Existing configs, saved player restrictions, restriction entries and commands keep working unchanged; a config written before this build loads with the three new fields at their defaults and needs no migration.
20.1.9Бета1.20.1 · 16 августа 2026 г.
20.1.9
- Added optional team and tag restrictions: set
useTeamAndTagRestrictionstotruein the common config to give different players different rules based on the vanilla scoreboard team they are on and the vanilla entity tags they carry teamRestrictionsmaps a scoreboard team name to its ownrestrictedSlots, andtagRestrictionsdoes the same for an entity tag, both written in the common config- Team and tag rules use the exact same entries a normal slot rule does, so item ids,
#tags, NBT filters, restriction groups and customdisplayitems all work inside them with no extra configuration - A player matched by a team or tag rule uses that set instead of
restrictedSlots; the global rules are a fallback for players that match nothing, not a layer merged underneath the targeted ones - A vanilla player is on at most one team, so at most one team rule applies, while every matching tag rule is combined
- Tag rules override team rules when both claim the same slot, and matching tag names are applied in alphabetical order so two tags claiming one slot always resolve the same way
- With
useClientRestrictionenabled, each player's own rules stay the most specific layer and are applied over the team and tag result - Tags a player carries that have no rule in
tagRestrictionsare ignored, so an unrelated tag from another mod never drops a player out of the global rules - Membership is managed entirely with vanilla
/teamand/tag; no new commands were added and the existing/restrictedinventory configstill edits the globalrestrictedSlots - Team and tag changes apply immediately without a relog or a config reload, and nothing is copied into the player's saved data, so leaving a team removes its rules with it
- Configured teams and tags do not have to exist yet; a rule for a team nobody has created is valid and starts applying once a player joins a team with that name
- A profile with an empty
restrictedSlotsstill counts as a match, which exempts that team or tag from the global rules entirely - The server decides which rules apply and sends the result to the client, so slot overlays, ghost previews and placement feedback keep matching what is actually enforced
- Fixed a crash on Forge when a
/reloadfired the datapack sync without a player
The feature is off by default. Existing configs, saved player restrictions, restriction entries and commands keep working unchanged; a config written before this build loads with the three new fields at their defaults and needs no migration.
21.1.10Бета1.21.1 · 16 августа 2026 г.
21.1.10
- Added optional team and tag restrictions: set
useTeamAndTagRestrictionstotruein the common config to give different players different rules based on the vanilla scoreboard team they are on and the vanilla entity tags they carry teamRestrictionsmaps a scoreboard team name to its ownrestrictedSlots, andtagRestrictionsdoes the same for an entity tag, both written in the common config- Team and tag rules use the exact same entries a normal slot rule does, so item ids,
#tags, component filters, restriction groups and customdisplayitems all work inside them with no extra configuration - A player matched by a team or tag rule uses that set instead of
restrictedSlots; the global rules are a fallback for players that match nothing, not a layer merged underneath the targeted ones - A vanilla player is on at most one team, so at most one team rule applies, while every matching tag rule is combined
- Tag rules override team rules when both claim the same slot, and matching tag names are applied in alphabetical order so two tags claiming one slot always resolve the same way
- With
useClientRestrictionenabled, each player's own rules stay the most specific layer and are applied over the team and tag result - Tags a player carries that have no rule in
tagRestrictionsare ignored, so an unrelated tag from another mod never drops a player out of the global rules - Membership is managed entirely with vanilla
/teamand/tag; no new commands were added and the existing/restrictedinventory configstill edits the globalrestrictedSlots - Team and tag changes apply immediately without a relog or a config reload, and nothing is copied into the player's saved data, so leaving a team removes its rules with it
- Configured teams and tags do not have to exist yet; a rule for a team nobody has created is valid and starts applying once a player joins a team with that name
- A profile with an empty
restrictedSlotsstill counts as a match, which exempts that team or tag from the global rules entirely - The server decides which rules apply and sends the result to the client, so slot overlays, ghost previews and placement feedback keep matching what is actually enforced
- Fixed a crash on NeoForge when a
/reloadfired the datapack sync without a player
The feature is off by default. Existing configs, saved player restrictions, restriction entries and commands keep working unchanged; a config written before this build loads with the three new fields at their defaults and needs no migration.
21.1.10Бета1.21.1 · 16 августа 2026 г.
21.1.10
- Added optional team and tag restrictions: set
useTeamAndTagRestrictionstotruein the common config to give different players different rules based on the vanilla scoreboard team they are on and the vanilla entity tags they carry teamRestrictionsmaps a scoreboard team name to its ownrestrictedSlots, andtagRestrictionsdoes the same for an entity tag, both written in the common config- Team and tag rules use the exact same entries a normal slot rule does, so item ids,
#tags, component filters, restriction groups and customdisplayitems all work inside them with no extra configuration - A player matched by a team or tag rule uses that set instead of
restrictedSlots; the global rules are a fallback for players that match nothing, not a layer merged underneath the targeted ones - A vanilla player is on at most one team, so at most one team rule applies, while every matching tag rule is combined
- Tag rules override team rules when both claim the same slot, and matching tag names are applied in alphabetical order so two tags claiming one slot always resolve the same way
- With
useClientRestrictionenabled, each player's own rules stay the most specific layer and are applied over the team and tag result - Tags a player carries that have no rule in
tagRestrictionsare ignored, so an unrelated tag from another mod never drops a player out of the global rules - Membership is managed entirely with vanilla
/teamand/tag; no new commands were added and the existing/restrictedinventory configstill edits the globalrestrictedSlots - Team and tag changes apply immediately without a relog or a config reload, and nothing is copied into the player's saved data, so leaving a team removes its rules with it
- Configured teams and tags do not have to exist yet; a rule for a team nobody has created is valid and starts applying once a player joins a team with that name
- A profile with an empty
restrictedSlotsstill counts as a match, which exempts that team or tag from the global rules entirely - The server decides which rules apply and sends the result to the client, so slot overlays, ghost previews and placement feedback keep matching what is actually enforced
- Fixed a crash on NeoForge when a
/reloadfired the datapack sync without a player
The feature is off by default. Existing configs, saved player restrictions, restriction entries and commands keep working unchanged; a config written before this build loads with the three new fields at their defaults and needs no migration.
26.1.2.7Бета26.1.2 · 16 августа 2026 г.
26.1.2.7
- Added optional team and tag restrictions: set
useTeamAndTagRestrictionstotruein the common config to give different players different rules based on the vanilla scoreboard team they are on and the vanilla entity tags they carry teamRestrictionsmaps a scoreboard team name to its ownrestrictedSlots, andtagRestrictionsdoes the same for an entity tag, both written in the common config- Team and tag rules use the exact same entries a normal slot rule does, so item ids,
#tags, component filters, restriction groups and customdisplayitems all work inside them with no extra configuration - A player matched by a team or tag rule uses that set instead of
restrictedSlots; the global rules are a fallback for players that match nothing, not a layer merged underneath the targeted ones - A vanilla player is on at most one team, so at most one team rule applies, while every matching tag rule is combined
- Tag rules override team rules when both claim the same slot, and matching tag names are applied in alphabetical order so two tags claiming one slot always resolve the same way
- With
useClientRestrictionenabled, each player's own rules stay the most specific layer and are applied over the team and tag result - Tags a player carries that have no rule in
tagRestrictionsare ignored, so an unrelated tag from another mod never drops a player out of the global rules - Membership is managed entirely with vanilla
/teamand/tag; no new commands were added and the existing/restrictedinventory configstill edits the globalrestrictedSlots - Team and tag changes apply immediately without a relog or a config reload, and nothing is copied into the player's saved data, so leaving a team removes its rules with it
- Configured teams and tags do not have to exist yet; a rule for a team nobody has created is valid and starts applying once a player joins a team with that name
- A profile with an empty
restrictedSlotsstill counts as a match, which exempts that team or tag from the global rules entirely - The server decides which rules apply and sends the result over the existing sync, so slot overlays, ghost previews and placement feedback keep matching what is actually enforced
- Fixed a crash on NeoForge when a
/reloadfired the datapack sync without a player
The feature is off by default. Existing configs, saved player restrictions, restriction entries and commands keep working unchanged; a config written before this build loads with the three new fields at their defaults and needs no migration.
26.1.2.7Бета26.1.2 · 16 августа 2026 г.
26.1.2.7
- Added optional team and tag restrictions: set
useTeamAndTagRestrictionstotruein the common config to give different players different rules based on the vanilla scoreboard team they are on and the vanilla entity tags they carry teamRestrictionsmaps a scoreboard team name to its ownrestrictedSlots, andtagRestrictionsdoes the same for an entity tag, both written in the common config- Team and tag rules use the exact same entries a normal slot rule does, so item ids,
#tags, component filters, restriction groups and customdisplayitems all work inside them with no extra configuration - A player matched by a team or tag rule uses that set instead of
restrictedSlots; the global rules are a fallback for players that match nothing, not a layer merged underneath the targeted ones - A vanilla player is on at most one team, so at most one team rule applies, while every matching tag rule is combined
- Tag rules override team rules when both claim the same slot, and matching tag names are applied in alphabetical order so two tags claiming one slot always resolve the same way
- With
useClientRestrictionenabled, each player's own rules stay the most specific layer and are applied over the team and tag result - Tags a player carries that have no rule in
tagRestrictionsare ignored, so an unrelated tag from another mod never drops a player out of the global rules - Membership is managed entirely with vanilla
/teamand/tag; no new commands were added and the existing/restrictedinventory configstill edits the globalrestrictedSlots - Team and tag changes apply immediately without a relog or a config reload, and nothing is copied into the player's saved data, so leaving a team removes its rules with it
- Configured teams and tags do not have to exist yet; a rule for a team nobody has created is valid and starts applying once a player joins a team with that name
- A profile with an empty
restrictedSlotsstill counts as a match, which exempts that team or tag from the global rules entirely - The server decides which rules apply and sends the result over the existing sync, so slot overlays, ghost previews and placement feedback keep matching what is actually enforced
- Fixed a crash on NeoForge when a
/reloadfired the datapack sync without a player
The feature is off by default. Existing configs, saved player restrictions, restriction entries and commands keep working unchanged; a config written before this build loads with the three new fields at their defaults and needs no migration.
26.2.0.7Бета26.2 · 16 августа 2026 г.
26.2.0.7
- Added optional team and tag restrictions: set
useTeamAndTagRestrictionstotruein the common config to give different players different rules based on the vanilla scoreboard team they are on and the vanilla entity tags they carry teamRestrictionsmaps a scoreboard team name to its ownrestrictedSlots, andtagRestrictionsdoes the same for an entity tag, both written in the common config- Team and tag rules use the exact same entries a normal slot rule does, so item ids,
#tags, component filters, restriction groups and customdisplayitems all work inside them with no extra configuration - A player matched by a team or tag rule uses that set instead of
restrictedSlots; the global rules are a fallback for players that match nothing, not a layer merged underneath the targeted ones - A vanilla player is on at most one team, so at most one team rule applies, while every matching tag rule is combined
- Tag rules override team rules when both claim the same slot, and matching tag names are applied in alphabetical order so two tags claiming one slot always resolve the same way
- With
useClientRestrictionenabled, each player's own rules stay the most specific layer and are applied over the team and tag result - Tags a player carries that have no rule in
tagRestrictionsare ignored, so an unrelated tag from another mod never drops a player out of the global rules - Membership is managed entirely with vanilla
/teamand/tag; no new commands were added and the existing/restrictedinventory configstill edits the globalrestrictedSlots - Team and tag changes apply immediately without a relog or a config reload, and nothing is copied into the player's saved data, so leaving a team removes its rules with it
- Configured teams and tags do not have to exist yet; a rule for a team nobody has created is valid and starts applying once a player joins a team with that name
- A profile with an empty
restrictedSlotsstill counts as a match, which exempts that team or tag from the global rules entirely - The server decides which rules apply and sends the result over the existing sync, so slot overlays, ghost previews and placement feedback keep matching what is actually enforced
- Fixed a crash on NeoForge when a
/reloadfired the datapack sync without a player
The feature is off by default. Existing configs, saved player restrictions, restriction entries and commands keep working unchanged; a config written before this build loads with the three new fields at their defaults and needs no migration.
26.2.0.7Бета26.2 · 16 августа 2026 г.
26.2.0.7
- Added optional team and tag restrictions: set
useTeamAndTagRestrictionstotruein the common config to give different players different rules based on the vanilla scoreboard team they are on and the vanilla entity tags they carry teamRestrictionsmaps a scoreboard team name to its ownrestrictedSlots, andtagRestrictionsdoes the same for an entity tag, both written in the common config- Team and tag rules use the exact same entries a normal slot rule does, so item ids,
#tags, component filters, restriction groups and customdisplayitems all work inside them with no extra configuration - A player matched by a team or tag rule uses that set instead of
restrictedSlots; the global rules are a fallback for players that match nothing, not a layer merged underneath the targeted ones - A vanilla player is on at most one team, so at most one team rule applies, while every matching tag rule is combined
- Tag rules override team rules when both claim the same slot, and matching tag names are applied in alphabetical order so two tags claiming one slot always resolve the same way
- With
useClientRestrictionenabled, each player's own rules stay the most specific layer and are applied over the team and tag result - Tags a player carries that have no rule in
tagRestrictionsare ignored, so an unrelated tag from another mod never drops a player out of the global rules - Membership is managed entirely with vanilla
/teamand/tag; no new commands were added and the existing/restrictedinventory configstill edits the globalrestrictedSlots - Team and tag changes apply immediately without a relog or a config reload, and nothing is copied into the player's saved data, so leaving a team removes its rules with it
- Configured teams and tags do not have to exist yet; a rule for a team nobody has created is valid and starts applying once a player joins a team with that name
- A profile with an empty
restrictedSlotsstill counts as a match, which exempts that team or tag from the global rules entirely - The server decides which rules apply and sends the result over the existing sync, so slot overlays, ghost previews and placement feedback keep matching what is actually enforced
- Fixed a crash on NeoForge when a
/reloadfired the datapack sync without a player
The feature is off by default. Existing configs, saved player restrictions, restriction entries and commands keep working unchanged; a config written before this build loads with the three new fields at their defaults and needs no migration.
Комментарии
Загружаем…